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>The implementation of the less than or equals operator
027 * 
028 * @author Nathan Abramson - Art Technology Group
029 * @version $Change: 181177 $$DateTime: 2001/06/26 08:45:09 $$Author: bayard $
030 **/
031
032public class LessThanOrEqualsOperator
033  extends RelationalOperator
034{
035  //-------------------------------------
036  // Singleton
037  //-------------------------------------
038
039  public static final LessThanOrEqualsOperator SINGLETON =
040    new LessThanOrEqualsOperator ();
041
042  //-------------------------------------
043  /**
044   *
045   * Constructor
046   **/
047  public LessThanOrEqualsOperator ()
048  {
049  }
050
051  //-------------------------------------
052  // Expression methods
053  //-------------------------------------
054  /**
055   *
056   * Returns the symbol representing the operator
057   **/
058  public String getOperatorSymbol ()
059  {
060    return "<=";
061  }
062
063  //-------------------------------------
064  /**
065   *
066   * Applies the operator to the given value
067   **/
068  public Object apply (Object pLeft, Object pRight)
069    throws ELException
070  {
071    if (pLeft == pRight) {
072      return Boolean.TRUE;
073    }
074    else if (pLeft == null ||
075             pRight == null) {
076      return Boolean.FALSE;
077    }
078    else {
079      return super.apply (pLeft, pRight);
080    }
081  }
082
083  //-------------------------------------
084  /**
085   *
086   * Applies the operator to the given double values
087   **/
088  public boolean apply (double pLeft, double pRight) {
089    return pLeft <= pRight;
090  }
091  
092  //-------------------------------------
093  /**
094   *
095   * Applies the operator to the given long values
096   **/
097  public boolean apply (long pLeft, long pRight) {
098    return pLeft <= pRight;
099  }
100  
101  //-------------------------------------
102  /**
103   *
104   * Applies the operator to the given String values
105   **/
106  public boolean apply (String pLeft, String pRight) {
107    return pLeft.compareTo (pRight) <= 0;
108  }
109
110  //-------------------------------------
111
112    /**
113     *
114     * Applies the operator to the given BigDecimal values, returning a BigDecimal
115     **/
116    public boolean apply(BigDecimal pLeft, BigDecimal pRight) {
117        return (isLess(pLeft.compareTo(pRight)) || isEqual(pLeft.compareTo(pRight)));
118    }
119
120    //-------------------------------------
121
122    /**
123     *
124     * Applies the operator to the given BigDecimal values, returning a BigDecimal
125     **/
126    public boolean apply(BigInteger pLeft, BigInteger pRight) {
127        return (isLess(pLeft.compareTo(pRight)) || isEqual(pLeft.compareTo(pRight)));
128    }
129
130    //-------------------------------------
131}