2
* The Apache Software License, Version 1.1
4
* Copyright (c) 1999 The Apache Software Foundation. All rights
7
* Redistribution and use in source and binary forms, with or without
8
* modification, are permitted provided that the following conditions
11
* 1. Redistributions of source code must retain the above copyright
12
* notice, this list of conditions and the following disclaimer.
14
* 2. Redistributions in binary form must reproduce the above copyright
15
* notice, this list of conditions and the following disclaimer in
16
* the documentation and/or other materials provided with the
19
* 3. The end-user documentation included with the redistribution, if
20
* any, must include the following acknowlegement:
21
* "This product includes software developed by the
22
* Apache Software Foundation (http://www.apache.org/)."
23
* Alternately, this acknowlegement may appear in the software itself,
24
* if and wherever such third-party acknowlegements normally appear.
26
* 4. The names "The Jakarta Project", "Tomcat", and "Apache Software
27
* Foundation" must not be used to endorse or promote products derived
28
* from this software without prior written permission. For written
29
* permission, please contact apache@apache.org.
31
* 5. Products derived from this software may not be called "Apache"
32
* nor may "Apache" appear in their names without prior written
33
* permission of the Apache Group.
35
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
36
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
37
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
38
* DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
39
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
40
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
41
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
42
* USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
43
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
44
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
45
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
47
* ====================================================================
49
* This software consists of voluntary contributions made by many
50
* individuals on behalf of the Apache Software Foundation. For more
51
* information on the Apache Software Foundation, please see
52
* <http://www.apache.org/>.
56
package org.apache.commons.el;
58
import java.util.List;
60
import javax.servlet.jsp.el.ELException;
61
import javax.servlet.jsp.el.VariableResolver;
62
import javax.servlet.jsp.el.FunctionMapper;
66
* <p>An expression representing a binary operator on a value
68
* @author Nathan Abramson - Art Technology Group
69
* @author Shawn Bayern
70
* @version $Change: 181177 $$DateTime: 2001/06/26 08:45:09 $$Author: luehe $
73
public class BinaryOperatorExpression
76
//-------------------------------------
78
//-------------------------------------
79
// property expression
81
Expression mExpression;
82
public Expression getExpression ()
83
{ return mExpression; }
84
public void setExpression (Expression pExpression)
85
{ mExpression = pExpression; }
87
//-------------------------------------
91
public List getOperators ()
92
{ return mOperators; }
93
public void setOperators (List pOperators)
94
{ mOperators = pOperators; }
96
//-------------------------------------
97
// property expressions
100
public List getExpressions ()
101
{ return mExpressions; }
102
public void setExpressions (List pExpressions)
103
{ mExpressions = pExpressions; }
105
//-------------------------------------
110
public BinaryOperatorExpression (Expression pExpression,
114
mExpression = pExpression;
115
mOperators = pOperators;
116
mExpressions = pExpressions;
119
//-------------------------------------
120
// Expression methods
121
//-------------------------------------
124
* Returns the expression in the expression language syntax
126
public String getExpressionString ()
128
StringBuffer buf = new StringBuffer ();
130
buf.append (mExpression.getExpressionString ());
131
for (int i = 0; i < mOperators.size (); i++) {
132
BinaryOperator operator = (BinaryOperator) mOperators.get (i);
133
Expression expression = (Expression) mExpressions.get (i);
135
buf.append (operator.getOperatorSymbol ());
137
buf.append (expression.getExpressionString ());
141
return buf.toString ();
144
//-------------------------------------
147
* Evaluates to the literal value
149
public Object evaluate (VariableResolver pResolver,
150
FunctionMapper functions,
154
Object value = mExpression.evaluate (pResolver, functions, pLogger);
155
for (int i = 0; i < mOperators.size (); i++) {
156
BinaryOperator operator = (BinaryOperator) mOperators.get (i);
158
// For the And/Or operators, we need to coerce to a boolean
159
// before testing if we shouldEvaluate
160
if (operator.shouldCoerceToBoolean ()) {
161
value = Coercions.coerceToBoolean (value, pLogger);
164
if (operator.shouldEvaluate (value)) {
165
Expression expression = (Expression) mExpressions.get (i);
166
Object nextValue = expression.evaluate (pResolver,
170
value = operator.apply (value, nextValue, pLogger);
176
//-------------------------------------