else if ( isNumericOrString( obj1 ) && isNumericOrString( obj2 ) )
else if ( MiscUtil.isNumericOrString( obj1 ) && MiscUtil.isNumericOrString( obj2 ) )
	private static int compare( Object obj1, Object obj2 ) throws DataException	{	    if (obj1 == null || obj2 == null) 	    {            // all non-null values are greater than null value	        if (obj1 == null && obj2 != null)                return -1;            else if (obj1 != null && obj2 == null)                return 1;            else                return 0;        }	    		try		{			if ( isSameType( obj1, obj2 ) )			{				if ( obj1 instanceof Boolean )				{					if ( obj1.equals( obj2 ) )						return 0;										Boolean bool = (Boolean) obj1;					if ( bool.equals( Boolean.TRUE ) )						return 1;					else						return -1;				}				else if ( obj1 instanceof Comparable )				{					return ( (Comparable) obj1 ).compareTo( obj2 );				}				else				{					return obj1.toString( ).compareTo( obj2.toString( ) );				}			}			else if ( isNumericOrString( obj1 ) && isNumericOrString( obj2 ) )			{				return DataTypeUtil.toDouble( obj1 ).compareTo(						DataTypeUtil.toDouble( obj2 ) );			}			else if ( isDateOrString( obj1 ) && isDateOrString( obj2 ) )			{				return DataTypeUtil.toDate( obj1 ).compareTo(						DataTypeUtil.toDate( obj2 ) );			}			else				throw new DataException( ResourceConstants.INVALID_TYPE_IN_EXPR );		}		catch ( BirtException e )		{			throw new DataException( ResourceConstants.DATATYPEUTIL_ERROR, e );		}	}