001/*
002 * Licensed to the Apache Software Foundation (ASF) under one or more
003 * contributor license agreements.  See the NOTICE file distributed with
004 * this work for additional information regarding copyright ownership.
005 * The ASF licenses this file to You under the Apache License, Version 2.0
006 * (the "License"); you may not use this file except in compliance with
007 * the License.  You may obtain a copy of the License at
008 *
009 *     http://www.apache.org/licenses/LICENSE-2.0
010 *
011 * Unless required by applicable law or agreed to in writing, software
012 * distributed under the License is distributed on an "AS IS" BASIS,
013 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014 * See the License for the specific language governing permissions and
015 * limitations under the License.
016 */
017package org.apache.commons.el;
018
019import java.math.BigDecimal;
020import java.math.BigInteger;
021
022import javax.servlet.jsp.el.ELException;
023
024/**
025 *
026 * <p>This is the superclass for all relational operators (except ==
027 * or !=)
028 * 
029 * @author Nathan Abramson - Art Technology Group
030 * @version $Change: 181177 $$DateTime: 2001/06/26 08:45:09 $$Author: bayard $
031 **/
032
033public abstract class RelationalOperator
034  extends BinaryOperator
035{
036
037  //-------------------------------------
038  /**
039   *
040   * Applies the operator to the given value
041   **/
042  public Object apply (Object pLeft, Object pRight)
043    throws ELException
044  {
045    return Coercions.applyRelationalOperator (pLeft, pRight, this);
046  }
047
048  //-------------------------------------
049  /**
050   *
051   * Applies the operator to the given double values
052   **/
053  public abstract boolean apply (double pLeft,
054                                 double pRight
055                                 );
056  
057  //-------------------------------------
058  /**
059   *
060   * Applies the operator to the given long values
061   **/
062  public abstract boolean apply (long pLeft,
063                                 long pRight
064                                 );
065  
066  //-------------------------------------
067  /**
068   *
069   * Applies the operator to the given String values
070   **/
071  public abstract boolean apply (String pLeft,
072                                 String pRight
073                                 );
074
075  //-------------------------------------
076
077
078    /**
079     * Applies the operator to the given BigDecimal values, returning a BigDecimal
080     **/
081    public abstract boolean apply(BigDecimal pLeft, BigDecimal pRight);
082
083    //-------------------------------------
084
085    /**
086     * Applies the operator to the given BigDecimal values, returning a BigDecimal
087     **/
088    public abstract boolean apply(BigInteger pLeft, BigInteger pRight);
089
090    //-------------------------------------
091
092
093    /**
094     * Test return value of BigInteger/BigDecimal A.compareTo(B).
095     * @param val - result of BigInteger/BigDecimal compareTo() call
096     * @return - true if result is less than 0, otherwise false
097     */
098    protected boolean isLess(int val) {
099        if (val < 0)
100            return true;
101        else
102            return false;
103    }
104
105    /**
106     * Test return value of BigInteger/BigDecimal A.compareTo(B).
107     * @param val - result of BigInteger/BigDecimal compareTo() call
108     * @return - true if result is equal to 0, otherwise false
109     */
110    protected boolean isEqual(int val) {
111        if (val == 0)
112            return true;
113        else
114            return false;
115    }
116
117    /**
118     * Test return value of BigInteger/BigDecimal A.compareTo(B).
119     * @param val - result of BigInteger/BigDecimal compareTo() call
120     * @return - true if result is greater than 0, otherwise false
121     */
122    protected boolean isGreater(int val) {
123        if (val > 0)
124            return true;
125        else
126            return false;
127    }
128}