throw new DataException(ResourceConstants.INVALID_TOP_BOTTOM_PERCENT_ARGUMENT);
throw new DataException(ResourceConstants.INVALID_TOP_BOTTOM_N_ARGUMENT);
	public boolean evaluate( Context cx, Scriptable scope ) throws DataException	{		if( filterPassController.getForceReset() )		{			doReset();			filterPassController.setForceReset( false );		}				if ( N == -1 )		{			// Create a new evaluator			// Evaluate N (which is operand1) at this time			Object n_object = ScriptEvalUtil.evalExpr( n_expr, cx, scope, "Filter", 0 );			double n_value = -1;			try			{				n_value = DataTypeUtil.toDouble( n_object ).doubleValue();			}			catch ( BirtException e )			{				// conversion error				throw new DataException(ResourceConstants.INVALID_TOP_BOTTOM_PERCENT_ARGUMENT, e);			}						// First time; calculate N based on updated row count			if( n_percent )			{				if( n_value < 0 || n_value > 100)					throw new DataException(ResourceConstants.INVALID_TOP_BOTTOM_PERCENT_ARGUMENT);				N = (int)Math.round( n_value / 100 * filterPassController.getRowCount() );			}			else			{				if( n_value < 0 )					throw new DataException(ResourceConstants.INVALID_TOP_BOTTOM_PERCENT_ARGUMENT);				N = (int)n_value;			}		}				// Evaluate operand expression		Object value = ScriptEvalUtil.evalExpr( op_expr, cx, scope, "Filter", 0 );				if ( filterPassController.getPassLevel( ) == FilterPassController.FIRST_PASS )		{			return doFirstPass( value );		}		else if ( filterPassController.getPassLevel( ) == FilterPassController.SECOND_PASS )		{			return doSecondPass( );		}		return false;	}