code: private boolean isGreaterThanOrEqualHelper( VersionID vid, boolean allowEqual )
      {
  
          if ( _isCompound )
          {
              if ( !_rest.isGreaterThanOrEqualHelper( vid, allowEqual ) )
              {
                  return false;
              }
          }
          // Normalize the two strings
          String[] t1 = normalize( _tuple, vid._tuple.length );
          String[] t2 = normalize( vid._tuple, _tuple.length );
  
          for ( int i = 0; i < t1.length; i++ )
          {
              // Compare current element
              Object e1 = getValueAsObject( t1[i] );
              Object e2 = getValueAsObject( t2[i] );
              if ( e1.equals( e2 ) )
              {
                  // So far so good
              }
              else
              {
                  if ( e1 instanceof Integer && e2 instanceof Integer )
                  {
                      return (Integer) e1 > (Integer) e2;
                  }
                  else
                  {
                      String s1 = t1[i];
                      String s2 = t2[i];
                      return s1.compareTo( s2 ) > 0;
                  }
  
              }
          }
          // If we get here, they are equal
          return allowEqual;
      }
docs: Compares if 'this' is greater than vid
  
  @param vid        TODO
  @param allowEqual TODO
  @return TODO