KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > apache > taglibs > standard > lang > jstl > BinaryOperatorExpression


1 /*
2  * Copyright 1999-2004 The Apache Software Foundation.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */

16
17 package org.apache.taglibs.standard.lang.jstl;
18
19 import java.util.List JavaDoc;
20 import java.util.Map JavaDoc;
21
22 /**
23  *
24  * <p>An expression representing a binary operator on a value
25  *
26  * @author Nathan Abramson - Art Technology Group
27  * @author Shawn Bayern
28  * @version $Change: 181177 $$DateTime: 2001/06/26 08:45:09 $$Author: pierred $
29  **/

30
31 public class BinaryOperatorExpression
32   extends Expression
33 {
34   //-------------------------------------
35
// Properties
36
//-------------------------------------
37
// property expression
38

39   Expression mExpression;
40   public Expression getExpression ()
41   { return mExpression; }
42   public void setExpression (Expression pExpression)
43   { mExpression = pExpression; }
44
45   //-------------------------------------
46
// property operators
47

48   List JavaDoc mOperators;
49   public List JavaDoc getOperators ()
50   { return mOperators; }
51   public void setOperators (List JavaDoc pOperators)
52   { mOperators = pOperators; }
53
54   //-------------------------------------
55
// property expressions
56

57   List JavaDoc mExpressions;
58   public List JavaDoc getExpressions ()
59   { return mExpressions; }
60   public void setExpressions (List JavaDoc pExpressions)
61   { mExpressions = pExpressions; }
62
63   //-------------------------------------
64
/**
65    *
66    * Constructor
67    **/

68   public BinaryOperatorExpression (Expression pExpression,
69                    List JavaDoc pOperators,
70                    List JavaDoc pExpressions)
71   {
72     mExpression = pExpression;
73     mOperators = pOperators;
74     mExpressions = pExpressions;
75   }
76
77   //-------------------------------------
78
// Expression methods
79
//-------------------------------------
80
/**
81    *
82    * Returns the expression in the expression language syntax
83    **/

84   public String JavaDoc getExpressionString ()
85   {
86     StringBuffer JavaDoc buf = new StringBuffer JavaDoc ();
87     buf.append ("(");
88     buf.append (mExpression.getExpressionString ());
89     for (int i = 0; i < mOperators.size (); i++) {
90       BinaryOperator operator = (BinaryOperator) mOperators.get (i);
91       Expression expression = (Expression) mExpressions.get (i);
92       buf.append (" ");
93       buf.append (operator.getOperatorSymbol ());
94       buf.append (" ");
95       buf.append (expression.getExpressionString ());
96     }
97     buf.append (")");
98
99     return buf.toString ();
100   }
101
102   //-------------------------------------
103
/**
104    *
105    * Evaluates to the literal value
106    **/

107   public Object JavaDoc evaluate (Object JavaDoc pContext,
108               VariableResolver pResolver,
109               Map JavaDoc functions,
110               String JavaDoc defaultPrefix,
111               Logger pLogger)
112     throws ELException
113   {
114     Object JavaDoc value = mExpression.evaluate (pContext, pResolver, functions,
115                      defaultPrefix, pLogger);
116     for (int i = 0; i < mOperators.size (); i++) {
117       BinaryOperator operator = (BinaryOperator) mOperators.get (i);
118
119       // For the And/Or operators, we need to coerce to a boolean
120
// before testing if we shouldEvaluate
121
if (operator.shouldCoerceToBoolean ()) {
122     value = Coercions.coerceToBoolean (value, pLogger);
123       }
124
125       if (operator.shouldEvaluate (value)) {
126     Expression expression = (Expression) mExpressions.get (i);
127     Object JavaDoc nextValue = expression.evaluate (pContext, pResolver,
128                         functions, defaultPrefix,
129                         pLogger);
130
131     value = operator.apply (value, nextValue, pContext, pLogger);
132       }
133     }
134     return value;
135   }
136
137   //-------------------------------------
138
}
139
Popular Tags