You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@struts.apache.org by mu...@apache.org on 2009/09/28 03:55:35 UTC
svn commit: r819444 [2/27] - in /struts/struts2/trunk/plugins/embeddedjsp:
./ src/main/java/org/apache/struts2/el/
src/main/java/org/apache/struts2/el/lang/
src/main/java/org/apache/struts2/el/parser/
src/main/java/org/apache/struts2/el/util/ src/main/...
Added: struts/struts2/trunk/plugins/embeddedjsp/src/main/java/org/apache/struts2/el/lang/ELSupport.java
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/plugins/embeddedjsp/src/main/java/org/apache/struts2/el/lang/ELSupport.java?rev=819444&view=auto
==============================================================================
--- struts/struts2/trunk/plugins/embeddedjsp/src/main/java/org/apache/struts2/el/lang/ELSupport.java (added)
+++ struts/struts2/trunk/plugins/embeddedjsp/src/main/java/org/apache/struts2/el/lang/ELSupport.java Mon Sep 28 01:55:26 2009
@@ -0,0 +1,476 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.struts2.el.lang;
+
+import java.beans.PropertyEditor;
+import java.beans.PropertyEditorManager;
+import java.math.BigDecimal;
+import java.math.BigInteger;
+
+import javax.el.ELException;
+import javax.el.PropertyNotFoundException;
+
+import org.apache.struts2.el.util.MessageFactory;
+
+
+/**
+ * A helper class that implements the EL Specification
+ *
+ * @author Jacob Hookom [jacob@hookom.net]
+ * @version $Change: 181177 $$DateTime: 2001/06/26 08:45:09 $$Author: markt $
+ */
+public class ELSupport {
+
+ private final static Long ZERO = new Long(0L);
+
+ public final static void throwUnhandled(Object base, Object property)
+ throws ELException {
+ if (base == null) {
+ throw new PropertyNotFoundException(MessageFactory.get(
+ "error.resolver.unhandled.null", property));
+ } else {
+ throw new PropertyNotFoundException(MessageFactory.get(
+ "error.resolver.unhandled", base.getClass(), property));
+ }
+ }
+
+ /**
+ * @param obj0
+ * @param obj1
+ * @return
+ * @throws EvaluationException
+ */
+ public final static int compare(final Object obj0, final Object obj1)
+ throws ELException {
+ if (obj0 == obj1 || equals(obj0, obj1)) {
+ return 0;
+ }
+ if (isBigDecimalOp(obj0, obj1)) {
+ BigDecimal bd0 = (BigDecimal) coerceToNumber(obj0, BigDecimal.class);
+ BigDecimal bd1 = (BigDecimal) coerceToNumber(obj1, BigDecimal.class);
+ return bd0.compareTo(bd1);
+ }
+ if (isDoubleOp(obj0, obj1)) {
+ Double d0 = (Double) coerceToNumber(obj0, Double.class);
+ Double d1 = (Double) coerceToNumber(obj1, Double.class);
+ return d0.compareTo(d1);
+ }
+ if (isBigIntegerOp(obj0, obj1)) {
+ BigInteger bi0 = (BigInteger) coerceToNumber(obj0, BigInteger.class);
+ BigInteger bi1 = (BigInteger) coerceToNumber(obj1, BigInteger.class);
+ return bi0.compareTo(bi1);
+ }
+ if (isLongOp(obj0, obj1)) {
+ Long l0 = (Long) coerceToNumber(obj0, Long.class);
+ Long l1 = (Long) coerceToNumber(obj1, Long.class);
+ return l0.compareTo(l1);
+ }
+ if (obj0 instanceof String || obj1 instanceof String) {
+ return coerceToString(obj0).compareTo(coerceToString(obj1));
+ }
+ if (obj0 instanceof Comparable) {
+ return (obj1 != null) ? ((Comparable) obj0).compareTo(obj1) : 1;
+ }
+ if (obj1 instanceof Comparable) {
+ return (obj0 != null) ? -((Comparable) obj1).compareTo(obj0) : -1;
+ }
+ throw new ELException(MessageFactory.get("error.compare", obj0, obj1));
+ }
+
+ /**
+ * @param obj0
+ * @param obj1
+ * @return
+ * @throws EvaluationException
+ */
+ public final static boolean equals(final Object obj0, final Object obj1)
+ throws ELException {
+ if (obj0 == obj1) {
+ return true;
+ } else if (obj0 == null || obj1 == null) {
+ return false;
+ } else if (obj0 instanceof Boolean || obj1 instanceof Boolean) {
+ return coerceToBoolean(obj0).equals(coerceToBoolean(obj1));
+ } else if (obj0.getClass().isEnum()) {
+ return obj0.equals(coerceToEnum(obj1, obj0.getClass()));
+ } else if (obj1.getClass().isEnum()) {
+ return obj1.equals(coerceToEnum(obj0, obj1.getClass()));
+ } else if (obj0 instanceof String || obj1 instanceof String) {
+ int lexCompare = coerceToString(obj0).compareTo(coerceToString(obj1));
+ return (lexCompare == 0) ? true : false;
+ }
+ if (isBigDecimalOp(obj0, obj1)) {
+ BigDecimal bd0 = (BigDecimal) coerceToNumber(obj0, BigDecimal.class);
+ BigDecimal bd1 = (BigDecimal) coerceToNumber(obj1, BigDecimal.class);
+ return bd0.equals(bd1);
+ }
+ if (isDoubleOp(obj0, obj1)) {
+ Double d0 = (Double) coerceToNumber(obj0, Double.class);
+ Double d1 = (Double) coerceToNumber(obj1, Double.class);
+ return d0.equals(d1);
+ }
+ if (isBigIntegerOp(obj0, obj1)) {
+ BigInteger bi0 = (BigInteger) coerceToNumber(obj0, BigInteger.class);
+ BigInteger bi1 = (BigInteger) coerceToNumber(obj1, BigInteger.class);
+ return bi0.equals(bi1);
+ }
+ if (isLongOp(obj0, obj1)) {
+ Long l0 = (Long) coerceToNumber(obj0, Long.class);
+ Long l1 = (Long) coerceToNumber(obj1, Long.class);
+ return l0.equals(l1);
+ } else {
+ return obj0.equals(obj1);
+ }
+ }
+
+ /**
+ * @param obj
+ * @param type
+ * @return
+ */
+ public final static Enum coerceToEnum(final Object obj, Class type) {
+ if (obj == null || "".equals(obj)) {
+ return null;
+ }
+ if (obj.getClass().isEnum()) {
+ return (Enum) obj;
+ }
+ return Enum.valueOf(type, obj.toString());
+ }
+
+ /**
+ * @param obj
+ * @return
+ */
+ public final static Boolean coerceToBoolean(final Object obj)
+ throws IllegalArgumentException {
+ if (obj == null || "".equals(obj)) {
+ return Boolean.FALSE;
+ }
+ if (obj instanceof Boolean) {
+ return (Boolean) obj;
+ }
+ if (obj instanceof String) {
+ return Boolean.valueOf((String) obj);
+ }
+
+ throw new IllegalArgumentException(MessageFactory.get("error.convert",
+ obj, obj.getClass(), Boolean.class));
+ }
+
+ public final static Character coerceToCharacter(final Object obj)
+ throws IllegalArgumentException {
+ if (obj == null || "".equals(obj)) {
+ return new Character((char) 0);
+ }
+ if (obj instanceof String) {
+ return new Character(((String) obj).charAt(0));
+ }
+ if (ELArithmetic.isNumber(obj)) {
+ return new Character((char) ((Number) obj).shortValue());
+ }
+ Class objType = obj.getClass();
+ if (obj instanceof Character) {
+ return (Character) obj;
+ }
+
+ throw new IllegalArgumentException(MessageFactory.get("error.convert",
+ obj, objType, Character.class));
+ }
+
+ public final static Number coerceToNumber(final Object obj) {
+ if (obj == null) {
+ return ZERO;
+ } else if (obj instanceof Number) {
+ return (Number) obj;
+ } else {
+ String str = coerceToString(obj);
+ if (isStringFloat(str)) {
+ return toFloat(str);
+ } else {
+ return toNumber(str);
+ }
+ }
+ }
+
+ protected final static Number coerceToNumber(final Number number,
+ final Class type) throws IllegalArgumentException {
+ if (Long.TYPE == type || Long.class.equals(type)) {
+ return new Long(number.longValue());
+ }
+ if (Double.TYPE == type || Double.class.equals(type)) {
+ return new Double(number.doubleValue());
+ }
+ if (Integer.TYPE == type || Integer.class.equals(type)) {
+ return new Integer(number.intValue());
+ }
+ if (BigInteger.class.equals(type)) {
+ if (number instanceof BigDecimal) {
+ return ((BigDecimal) number).toBigInteger();
+ }
+ if (number instanceof BigInteger) {
+ return number;
+ }
+ return BigInteger.valueOf(number.longValue());
+ }
+ if (BigDecimal.class.equals(type)) {
+ if (number instanceof BigDecimal) {
+ return number;
+ }
+ if (number instanceof BigInteger) {
+ return new BigDecimal((BigInteger) number);
+ }
+ return new BigDecimal(number.doubleValue());
+ }
+ if (Byte.TYPE == type || Byte.class.equals(type)) {
+ return new Byte(number.byteValue());
+ }
+ if (Short.TYPE == type || Short.class.equals(type)) {
+ return new Short(number.shortValue());
+ }
+ if (Float.TYPE == type || Float.class.equals(type)) {
+ return new Float(number.floatValue());
+ }
+
+ throw new IllegalArgumentException(MessageFactory.get("error.convert",
+ number, number.getClass(), type));
+ }
+
+ public final static Number coerceToNumber(final Object obj, final Class type)
+ throws IllegalArgumentException {
+ if (obj == null || "".equals(obj)) {
+ return coerceToNumber(ZERO, type);
+ }
+ if (obj instanceof String) {
+ return coerceToNumber((String) obj, type);
+ }
+ if (ELArithmetic.isNumber(obj)) {
+ return coerceToNumber((Number) obj, type);
+ }
+
+ if (obj instanceof Character) {
+ return coerceToNumber(new Short((short) ((Character) obj)
+ .charValue()), type);
+ }
+
+ throw new IllegalArgumentException(MessageFactory.get("error.convert",
+ obj, obj.getClass(), type));
+ }
+
+ protected final static Number coerceToNumber(final String val,
+ final Class type) throws IllegalArgumentException {
+ if (Long.TYPE == type || Long.class.equals(type)) {
+ return Long.valueOf(val);
+ }
+ if (Integer.TYPE == type || Integer.class.equals(type)) {
+ return Integer.valueOf(val);
+ }
+ if (Double.TYPE == type || Double.class.equals(type)) {
+ return Double.valueOf(val);
+ }
+ if (BigInteger.class.equals(type)) {
+ return new BigInteger(val);
+ }
+ if (BigDecimal.class.equals(type)) {
+ return new BigDecimal(val);
+ }
+ if (Byte.TYPE == type || Byte.class.equals(type)) {
+ return Byte.valueOf(val);
+ }
+ if (Short.TYPE == type || Short.class.equals(type)) {
+ return Short.valueOf(val);
+ }
+ if (Float.TYPE == type || Float.class.equals(type)) {
+ return Float.valueOf(val);
+ }
+
+ throw new IllegalArgumentException(MessageFactory.get("error.convert",
+ val, String.class, type));
+ }
+
+ /**
+ * @param obj
+ * @return
+ */
+ public final static String coerceToString(final Object obj) {
+ if (obj == null) {
+ return "";
+ } else if (obj instanceof String) {
+ return (String) obj;
+ } else if (obj instanceof Enum) {
+ return ((Enum) obj).name();
+ } else {
+ return obj.toString();
+ }
+ }
+
+ public final static void checkType(final Object obj, final Class type)
+ throws IllegalArgumentException {
+ if (String.class.equals(type)) {
+ coerceToString(obj);
+ }
+ if (ELArithmetic.isNumberType(type)) {
+ coerceToNumber(obj, type);
+ }
+ if (Character.class.equals(type) || Character.TYPE == type) {
+ coerceToCharacter(obj);
+ }
+ if (Boolean.class.equals(type) || Boolean.TYPE == type) {
+ coerceToBoolean(obj);
+ }
+ if (type.isEnum()) {
+ coerceToEnum(obj, type);
+ }
+ }
+
+ public final static Object coerceToType(final Object obj, final Class type)
+ throws IllegalArgumentException {
+ if (type == null || Object.class.equals(type) ||
+ (obj != null && type.isAssignableFrom(obj.getClass()))) {
+ return obj;
+ }
+ if (String.class.equals(type)) {
+ return coerceToString(obj);
+ }
+ if (ELArithmetic.isNumberType(type)) {
+ return coerceToNumber(obj, type);
+ }
+ if (Character.class.equals(type) || Character.TYPE == type) {
+ return coerceToCharacter(obj);
+ }
+ if (Boolean.class.equals(type) || Boolean.TYPE == type) {
+ return coerceToBoolean(obj);
+ }
+ if (type.isEnum()) {
+ return coerceToEnum(obj, type);
+ }
+
+ // new to spec
+ if (obj == null)
+ return null;
+ if (obj instanceof String) {
+ if ("".equals(obj))
+ return null;
+ PropertyEditor editor = PropertyEditorManager.findEditor(type);
+ if (editor != null) {
+ editor.setAsText((String) obj);
+ return editor.getValue();
+ }
+ }
+ throw new IllegalArgumentException(MessageFactory.get("error.convert",
+ obj, obj.getClass(), type));
+ }
+
+ /**
+ * @param obj
+ * @return
+ */
+ public final static boolean containsNulls(final Object[] obj) {
+ for (int i = 0; i < obj.length; i++) {
+ if (obj[0] == null) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ public final static boolean isBigDecimalOp(final Object obj0,
+ final Object obj1) {
+ return (obj0 instanceof BigDecimal || obj1 instanceof BigDecimal);
+ }
+
+ public final static boolean isBigIntegerOp(final Object obj0,
+ final Object obj1) {
+ return (obj0 instanceof BigInteger || obj1 instanceof BigInteger);
+ }
+
+ public final static boolean isDoubleOp(final Object obj0, final Object obj1) {
+ return (obj0 instanceof Double
+ || obj1 instanceof Double
+ || obj0 instanceof Float
+ || obj1 instanceof Float);
+ }
+
+ public final static boolean isDoubleStringOp(final Object obj0,
+ final Object obj1) {
+ return (isDoubleOp(obj0, obj1)
+ || (obj0 instanceof String && isStringFloat((String) obj0)) || (obj1 instanceof String && isStringFloat((String) obj1)));
+ }
+
+ public final static boolean isLongOp(final Object obj0, final Object obj1) {
+ return (obj0 instanceof Long
+ || obj1 instanceof Long
+ || obj0 instanceof Integer
+ || obj1 instanceof Integer
+ || obj0 instanceof Character
+ || obj1 instanceof Character
+ || obj0 instanceof Short
+ || obj1 instanceof Short
+ || obj0 instanceof Byte
+ || obj1 instanceof Byte);
+ }
+
+ public final static boolean isStringFloat(final String str) {
+ int len = str.length();
+ if (len > 1) {
+ for (int i = 0; i < len; i++) {
+ switch (str.charAt(i)) {
+ case 'E':
+ return true;
+ case 'e':
+ return true;
+ case '.':
+ return true;
+ }
+ }
+ }
+ return false;
+ }
+
+ public final static Number toFloat(final String value) {
+ try {
+ if (Double.parseDouble(value) > Double.MAX_VALUE) {
+ return new BigDecimal(value);
+ } else {
+ return new Double(value);
+ }
+ } catch (NumberFormatException e0) {
+ return new BigDecimal(value);
+ }
+ }
+
+ public final static Number toNumber(final String value) {
+ try {
+ return new Integer(Integer.parseInt(value));
+ } catch (NumberFormatException e0) {
+ try {
+ return new Long(Long.parseLong(value));
+ } catch (NumberFormatException e1) {
+ return new BigInteger(value);
+ }
+ }
+ }
+
+ /**
+ *
+ */
+ public ELSupport() {
+ super();
+ }
+
+}
Added: struts/struts2/trunk/plugins/embeddedjsp/src/main/java/org/apache/struts2/el/lang/EvaluationContext.java
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/plugins/embeddedjsp/src/main/java/org/apache/struts2/el/lang/EvaluationContext.java?rev=819444&view=auto
==============================================================================
--- struts/struts2/trunk/plugins/embeddedjsp/src/main/java/org/apache/struts2/el/lang/EvaluationContext.java (added)
+++ struts/struts2/trunk/plugins/embeddedjsp/src/main/java/org/apache/struts2/el/lang/EvaluationContext.java Mon Sep 28 01:55:26 2009
@@ -0,0 +1,81 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.struts2.el.lang;
+
+import java.util.Locale;
+
+import javax.el.ELContext;
+import javax.el.ELResolver;
+import javax.el.FunctionMapper;
+import javax.el.VariableMapper;
+
+public final class EvaluationContext extends ELContext {
+
+ private final ELContext elContext;
+
+ private final FunctionMapper fnMapper;
+
+ private final VariableMapper varMapper;
+
+ public EvaluationContext(ELContext elContext, FunctionMapper fnMapper,
+ VariableMapper varMapper) {
+ this.elContext = elContext;
+ this.fnMapper = fnMapper;
+ this.varMapper = varMapper;
+ }
+
+ public ELContext getELContext() {
+ return this.elContext;
+ }
+
+ public FunctionMapper getFunctionMapper() {
+ return this.fnMapper;
+ }
+
+ public VariableMapper getVariableMapper() {
+ return this.varMapper;
+ }
+
+ public Object getContext(Class key) {
+ return this.elContext.getContext(key);
+ }
+
+ public ELResolver getELResolver() {
+ return this.elContext.getELResolver();
+ }
+
+ public boolean isPropertyResolved() {
+ return this.elContext.isPropertyResolved();
+ }
+
+ public void putContext(Class key, Object contextObject) {
+ this.elContext.putContext(key, contextObject);
+ }
+
+ public void setPropertyResolved(boolean resolved) {
+ this.elContext.setPropertyResolved(resolved);
+ }
+
+ public Locale getLocale() {
+ return this.elContext.getLocale();
+ }
+
+ public void setLocale(Locale locale) {
+ this.elContext.setLocale(locale);
+ }
+}
Added: struts/struts2/trunk/plugins/embeddedjsp/src/main/java/org/apache/struts2/el/lang/ExpressionBuilder.java
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/plugins/embeddedjsp/src/main/java/org/apache/struts2/el/lang/ExpressionBuilder.java?rev=819444&view=auto
==============================================================================
--- struts/struts2/trunk/plugins/embeddedjsp/src/main/java/org/apache/struts2/el/lang/ExpressionBuilder.java (added)
+++ struts/struts2/trunk/plugins/embeddedjsp/src/main/java/org/apache/struts2/el/lang/ExpressionBuilder.java Mon Sep 28 01:55:26 2009
@@ -0,0 +1,213 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.struts2.el.lang;
+
+import java.io.StringReader;
+import java.lang.reflect.Method;
+
+import javax.el.ELContext;
+import javax.el.ELException;
+import javax.el.FunctionMapper;
+import javax.el.MethodExpression;
+import javax.el.ValueExpression;
+import javax.el.VariableMapper;
+
+import org.apache.struts2.el.MethodExpressionImpl;
+import org.apache.struts2.el.MethodExpressionLiteral;
+import org.apache.struts2.el.ValueExpressionImpl;
+import org.apache.struts2.el.parser.AstCompositeExpression;
+import org.apache.struts2.el.parser.AstDeferredExpression;
+import org.apache.struts2.el.parser.AstDynamicExpression;
+import org.apache.struts2.el.parser.AstFunction;
+import org.apache.struts2.el.parser.AstIdentifier;
+import org.apache.struts2.el.parser.AstLiteralExpression;
+import org.apache.struts2.el.parser.AstValue;
+import org.apache.struts2.el.parser.ELParser;
+import org.apache.struts2.el.parser.Node;
+import org.apache.struts2.el.parser.NodeVisitor;
+import org.apache.struts2.el.parser.ParseException;
+import org.apache.struts2.el.util.ConcurrentCache;
+import org.apache.struts2.el.util.MessageFactory;
+
+/**
+ * @author Jacob Hookom [jacob@hookom.net]
+ * @version $Change: 181177 $$DateTime: 2001/06/26 08:45:09 $$Author: rjung $
+ */
+public final class ExpressionBuilder implements NodeVisitor {
+
+ private static final ConcurrentCache<String, Node> cache = new ConcurrentCache<String, Node>(5000);
+
+ private FunctionMapper fnMapper;
+
+ private VariableMapper varMapper;
+
+ private String expression;
+
+ /**
+ *
+ */
+ public ExpressionBuilder(String expression, ELContext ctx)
+ throws ELException {
+ this.expression = expression;
+
+ FunctionMapper ctxFn = ctx.getFunctionMapper();
+ VariableMapper ctxVar = ctx.getVariableMapper();
+
+ if (ctxFn != null) {
+ this.fnMapper = new FunctionMapperFactory(ctxFn);
+ }
+ if (ctxVar != null) {
+ this.varMapper = new VariableMapperFactory(ctxVar);
+ }
+ }
+
+ public final static Node createNode(String expr) throws ELException {
+ Node n = createNodeInternal(expr);
+ return n;
+ }
+
+ private final static Node createNodeInternal(String expr)
+ throws ELException {
+ if (expr == null) {
+ throw new ELException(MessageFactory.get("error.null"));
+ }
+
+ Node n = cache.get(expr);
+ if (n == null) {
+ try {
+ n = (new ELParser(new StringReader(expr)))
+ .CompositeExpression();
+
+ // validate composite expression
+ if (n instanceof AstCompositeExpression) {
+ int numChildren = n.jjtGetNumChildren();
+ if (numChildren == 1) {
+ n = n.jjtGetChild(0);
+ } else {
+ Class type = null;
+ Node child = null;
+ for (int i = 0; i < numChildren; i++) {
+ child = n.jjtGetChild(i);
+ if (child instanceof AstLiteralExpression)
+ continue;
+ if (type == null)
+ type = child.getClass();
+ else {
+ if (!type.equals(child.getClass())) {
+ throw new ELException(MessageFactory.get(
+ "error.mixed", expr));
+ }
+ }
+ }
+ }
+ }
+ if (n instanceof AstDeferredExpression
+ || n instanceof AstDynamicExpression) {
+ n = n.jjtGetChild(0);
+ }
+ cache.put(expr, n);
+ } catch (ParseException pe) {
+ throw new ELException("Error Parsing: " + expr, pe);
+ }
+ }
+ return n;
+ }
+
+ private void prepare(Node node) throws ELException {
+ try {
+ node.accept(this);
+ } catch (Exception e) {
+ if (e instanceof ELException) {
+ throw (ELException) e;
+ } else {
+ throw (new ELException(e));
+ }
+ }
+ if (this.fnMapper instanceof FunctionMapperFactory) {
+ this.fnMapper = ((FunctionMapperFactory) this.fnMapper).create();
+ }
+ if (this.varMapper instanceof VariableMapperFactory) {
+ this.varMapper = ((VariableMapperFactory) this.varMapper).create();
+ }
+ }
+
+ private Node build() throws ELException {
+ Node n = createNodeInternal(this.expression);
+ this.prepare(n);
+ if (n instanceof AstDeferredExpression
+ || n instanceof AstDynamicExpression) {
+ n = n.jjtGetChild(0);
+ }
+ return n;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see com.sun.el.parser.NodeVisitor#visit(com.sun.el.parser.Node)
+ */
+ public void visit(Node node) throws ELException {
+ if (node instanceof AstFunction) {
+
+ AstFunction funcNode = (AstFunction) node;
+
+ if (this.fnMapper == null) {
+ throw new ELException(MessageFactory.get("error.fnMapper.null"));
+ }
+ Method m = fnMapper.resolveFunction(funcNode.getPrefix(), funcNode
+ .getLocalName());
+ if (m == null) {
+ throw new ELException(MessageFactory.get(
+ "error.fnMapper.method", funcNode.getOutputName()));
+ }
+ int pcnt = m.getParameterTypes().length;
+ if (node.jjtGetNumChildren() != pcnt) {
+ throw new ELException(MessageFactory.get(
+ "error.fnMapper.paramcount", funcNode.getOutputName(),
+ "" + pcnt, "" + node.jjtGetNumChildren()));
+ }
+ } else if (node instanceof AstIdentifier && this.varMapper != null) {
+ String variable = ((AstIdentifier) node).getImage();
+
+ // simply capture it
+ this.varMapper.resolveVariable(variable);
+ }
+ }
+
+ public ValueExpression createValueExpression(Class expectedType)
+ throws ELException {
+ Node n = this.build();
+ return new ValueExpressionImpl(this.expression, n, this.fnMapper,
+ this.varMapper, expectedType);
+ }
+
+ public MethodExpression createMethodExpression(Class expectedReturnType,
+ Class[] expectedParamTypes) throws ELException {
+ Node n = this.build();
+ if (n instanceof AstValue || n instanceof AstIdentifier) {
+ return new MethodExpressionImpl(expression, n, this.fnMapper,
+ this.varMapper, expectedReturnType, expectedParamTypes);
+ } else if (n instanceof AstLiteralExpression) {
+ return new MethodExpressionLiteral(expression, expectedReturnType,
+ expectedParamTypes);
+ } else {
+ throw new ELException("Not a Valid Method Expression: "
+ + expression);
+ }
+ }
+}
Added: struts/struts2/trunk/plugins/embeddedjsp/src/main/java/org/apache/struts2/el/lang/FunctionMapperFactory.java
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/plugins/embeddedjsp/src/main/java/org/apache/struts2/el/lang/FunctionMapperFactory.java?rev=819444&view=auto
==============================================================================
--- struts/struts2/trunk/plugins/embeddedjsp/src/main/java/org/apache/struts2/el/lang/FunctionMapperFactory.java (added)
+++ struts/struts2/trunk/plugins/embeddedjsp/src/main/java/org/apache/struts2/el/lang/FunctionMapperFactory.java Mon Sep 28 01:55:26 2009
@@ -0,0 +1,59 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.struts2.el.lang;
+
+import java.lang.reflect.Method;
+
+import javax.el.FunctionMapper;
+
+/**
+ * @author Jacob Hookom [jacob@hookom.net]
+ * @version $Change: 181177 $$DateTime: 2001/06/26 08:45:09 $$Author: rjung $
+ */
+public class FunctionMapperFactory extends FunctionMapper {
+
+ protected FunctionMapperImpl memento = null;
+ protected FunctionMapper target;
+
+ public FunctionMapperFactory(FunctionMapper mapper) {
+ if (mapper == null) {
+ throw new NullPointerException("FunctionMapper target cannot be null");
+ }
+ this.target = mapper;
+ }
+
+
+ /* (non-Javadoc)
+ * @see javax.el.FunctionMapper#resolveFunction(java.lang.String, java.lang.String)
+ */
+ public Method resolveFunction(String prefix, String localName) {
+ if (this.memento == null) {
+ this.memento = new FunctionMapperImpl();
+ }
+ Method m = this.target.resolveFunction(prefix, localName);
+ if (m != null) {
+ this.memento.addFunction(prefix, localName, m);
+ }
+ return m;
+ }
+
+ public FunctionMapper create() {
+ return this.memento;
+ }
+
+}
Added: struts/struts2/trunk/plugins/embeddedjsp/src/main/java/org/apache/struts2/el/lang/FunctionMapperImpl.java
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/plugins/embeddedjsp/src/main/java/org/apache/struts2/el/lang/FunctionMapperImpl.java?rev=819444&view=auto
==============================================================================
--- struts/struts2/trunk/plugins/embeddedjsp/src/main/java/org/apache/struts2/el/lang/FunctionMapperImpl.java (added)
+++ struts/struts2/trunk/plugins/embeddedjsp/src/main/java/org/apache/struts2/el/lang/FunctionMapperImpl.java Mon Sep 28 01:55:26 2009
@@ -0,0 +1,192 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.struts2.el.lang;
+
+import java.io.Externalizable;
+import java.io.IOException;
+import java.io.ObjectInput;
+import java.io.ObjectOutput;
+import java.lang.reflect.Method;
+import java.util.HashMap;
+import java.util.Map;
+
+import javax.el.FunctionMapper;
+
+import org.apache.struts2.el.util.ReflectionUtil;
+
+
+/**
+ * @author Jacob Hookom [jacob@hookom.net]
+ * @version $Change: 181177 $$DateTime: 2001/06/26 08:45:09 $$Author: rjung $
+ */
+public class FunctionMapperImpl extends FunctionMapper implements
+ Externalizable {
+
+ private static final long serialVersionUID = 1L;
+
+ protected Map<String, Function> functions = null;
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see javax.el.FunctionMapper#resolveFunction(java.lang.String,
+ * java.lang.String)
+ */
+ public Method resolveFunction(String prefix, String localName) {
+ if (this.functions != null) {
+ Function f = this.functions.get(prefix + ":" + localName);
+ return f.getMethod();
+ }
+ return null;
+ }
+
+ public void addFunction(String prefix, String localName, Method m) {
+ if (this.functions == null) {
+ this.functions = new HashMap<String, Function>();
+ }
+ Function f = new Function(prefix, localName, m);
+ synchronized (this) {
+ this.functions.put(prefix+":"+localName, f);
+ }
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see java.io.Externalizable#writeExternal(java.io.ObjectOutput)
+ */
+ public void writeExternal(ObjectOutput out) throws IOException {
+ out.writeObject(this.functions);
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see java.io.Externalizable#readExternal(java.io.ObjectInput)
+ */
+ public void readExternal(ObjectInput in) throws IOException,
+ ClassNotFoundException {
+ this.functions = (Map<String, Function>) in.readObject();
+ }
+
+ public static class Function implements Externalizable {
+
+ protected transient Method m;
+ protected String owner;
+ protected String name;
+ protected String[] types;
+ protected String prefix;
+ protected String localName;
+
+ /**
+ *
+ */
+ public Function(String prefix, String localName, Method m) {
+ if (localName == null) {
+ throw new NullPointerException("LocalName cannot be null");
+ }
+ if (m == null) {
+ throw new NullPointerException("Method cannot be null");
+ }
+ this.prefix = prefix;
+ this.localName = localName;
+ this.m = m;
+ }
+
+ public Function() {
+ // for serialization
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see java.io.Externalizable#writeExternal(java.io.ObjectOutput)
+ */
+ public void writeExternal(ObjectOutput out) throws IOException {
+ out.writeUTF((this.prefix != null) ? this.prefix : "");
+ out.writeUTF(this.localName);
+ // make sure m isn't null
+ getMethod();
+ out.writeUTF((this.owner != null) ?
+ this.owner :
+ this.m.getDeclaringClass().getName());
+ out.writeUTF((this.name != null) ?
+ this.name :
+ this.m.getName());
+ out.writeObject((this.types != null) ?
+ this.types :
+ ReflectionUtil.toTypeNameArray(this.m.getParameterTypes()));
+
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see java.io.Externalizable#readExternal(java.io.ObjectInput)
+ */
+ public void readExternal(ObjectInput in) throws IOException,
+ ClassNotFoundException {
+
+ this.prefix = in.readUTF();
+ if ("".equals(this.prefix)) this.prefix = null;
+ this.localName = in.readUTF();
+ this.owner = in.readUTF();
+ this.name = in.readUTF();
+ this.types = (String[]) in.readObject();
+ }
+
+ public Method getMethod() {
+ if (this.m == null) {
+ try {
+ Class t = ReflectionUtil.forName(this.owner);
+ Class[] p = ReflectionUtil.toTypeArray(this.types);
+ this.m = t.getMethod(this.name, p);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+ return this.m;
+ }
+
+ public boolean matches(String prefix, String localName) {
+ if (this.prefix != null) {
+ if (prefix == null) return false;
+ if (!this.prefix.equals(prefix)) return false;
+ }
+ return this.localName.equals(localName);
+ }
+
+ /* (non-Javadoc)
+ * @see java.lang.Object#equals(java.lang.Object)
+ */
+ public boolean equals(Object obj) {
+ if (obj instanceof Function) {
+ return this.hashCode() == obj.hashCode();
+ }
+ return false;
+ }
+
+ /* (non-Javadoc)
+ * @see java.lang.Object#hashCode()
+ */
+ public int hashCode() {
+ return (this.prefix + this.localName).hashCode();
+ }
+ }
+
+}
Added: struts/struts2/trunk/plugins/embeddedjsp/src/main/java/org/apache/struts2/el/lang/VariableMapperFactory.java
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/plugins/embeddedjsp/src/main/java/org/apache/struts2/el/lang/VariableMapperFactory.java?rev=819444&view=auto
==============================================================================
--- struts/struts2/trunk/plugins/embeddedjsp/src/main/java/org/apache/struts2/el/lang/VariableMapperFactory.java (added)
+++ struts/struts2/trunk/plugins/embeddedjsp/src/main/java/org/apache/struts2/el/lang/VariableMapperFactory.java Mon Sep 28 01:55:26 2009
@@ -0,0 +1,53 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.struts2.el.lang;
+
+import javax.el.ValueExpression;
+import javax.el.VariableMapper;
+
+public class VariableMapperFactory extends VariableMapper {
+
+ private final VariableMapper target;
+ private VariableMapper momento;
+
+ public VariableMapperFactory(VariableMapper target) {
+ if (target == null) {
+ throw new NullPointerException("Target VariableMapper cannot be null");
+ }
+ this.target = target;
+ }
+
+ public VariableMapper create() {
+ return this.momento;
+ }
+
+ public ValueExpression resolveVariable(String variable) {
+ ValueExpression expr = this.target.resolveVariable(variable);
+ if (expr != null) {
+ if (this.momento == null) {
+ this.momento = new VariableMapperImpl();
+ }
+ this.momento.setVariable(variable, expr);
+ }
+ return expr;
+ }
+
+ public ValueExpression setVariable(String variable, ValueExpression expression) {
+ throw new UnsupportedOperationException("Cannot Set Variables on Factory");
+ }
+}
Added: struts/struts2/trunk/plugins/embeddedjsp/src/main/java/org/apache/struts2/el/lang/VariableMapperImpl.java
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/plugins/embeddedjsp/src/main/java/org/apache/struts2/el/lang/VariableMapperImpl.java?rev=819444&view=auto
==============================================================================
--- struts/struts2/trunk/plugins/embeddedjsp/src/main/java/org/apache/struts2/el/lang/VariableMapperImpl.java (added)
+++ struts/struts2/trunk/plugins/embeddedjsp/src/main/java/org/apache/struts2/el/lang/VariableMapperImpl.java Mon Sep 28 01:55:26 2009
@@ -0,0 +1,56 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.struts2.el.lang;
+
+import java.io.Externalizable;
+import java.io.IOException;
+import java.io.ObjectInput;
+import java.io.ObjectOutput;
+import java.util.HashMap;
+import java.util.Map;
+
+import javax.el.ValueExpression;
+import javax.el.VariableMapper;
+
+public class VariableMapperImpl extends VariableMapper implements Externalizable {
+
+ private static final long serialVersionUID = 1L;
+
+ private Map<String, ValueExpression> vars = new HashMap<String, ValueExpression>();
+
+ public VariableMapperImpl() {
+ super();
+ }
+
+ public ValueExpression resolveVariable(String variable) {
+ return this.vars.get(variable);
+ }
+
+ public ValueExpression setVariable(String variable,
+ ValueExpression expression) {
+ return this.vars.put(variable, expression);
+ }
+
+ public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
+ this.vars = (Map<String, ValueExpression>) in.readObject();
+ }
+
+ public void writeExternal(ObjectOutput out) throws IOException {
+ out.writeObject(this.vars);
+ }
+}
Added: struts/struts2/trunk/plugins/embeddedjsp/src/main/java/org/apache/struts2/el/parser/ArithmeticNode.java
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/plugins/embeddedjsp/src/main/java/org/apache/struts2/el/parser/ArithmeticNode.java?rev=819444&view=auto
==============================================================================
--- struts/struts2/trunk/plugins/embeddedjsp/src/main/java/org/apache/struts2/el/parser/ArithmeticNode.java (added)
+++ struts/struts2/trunk/plugins/embeddedjsp/src/main/java/org/apache/struts2/el/parser/ArithmeticNode.java Mon Sep 28 01:55:26 2009
@@ -0,0 +1,42 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.struts2.el.parser;
+
+import javax.el.ELException;
+
+import org.apache.struts2.el.lang.EvaluationContext;
+
+
+/**
+ * @author Jacob Hookom [jacob@hookom.net]
+ * @version $Change: 181177 $$DateTime: 2001/06/26 08:45:09 $$Author: markt $
+ */
+public class ArithmeticNode extends SimpleNode {
+
+ /**
+ * @param i
+ */
+ public ArithmeticNode(int i) {
+ super(i);
+ }
+
+ public Class getType(EvaluationContext ctx)
+ throws ELException {
+ return Number.class;
+ }
+}
Added: struts/struts2/trunk/plugins/embeddedjsp/src/main/java/org/apache/struts2/el/parser/AstAnd.java
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/plugins/embeddedjsp/src/main/java/org/apache/struts2/el/parser/AstAnd.java?rev=819444&view=auto
==============================================================================
--- struts/struts2/trunk/plugins/embeddedjsp/src/main/java/org/apache/struts2/el/parser/AstAnd.java (added)
+++ struts/struts2/trunk/plugins/embeddedjsp/src/main/java/org/apache/struts2/el/parser/AstAnd.java Mon Sep 28 01:55:26 2009
@@ -0,0 +1,46 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+/* Generated By:JJTree: Do not edit this line. AstAnd.java */
+
+package org.apache.struts2.el.parser;
+
+import javax.el.ELException;
+
+import org.apache.struts2.el.lang.EvaluationContext;
+
+
+/**
+ * @author Jacob Hookom [jacob@hookom.net]
+ * @version $Change: 181177 $$DateTime: 2001/06/26 08:45:09 $$Author: markt $
+ */
+public final class AstAnd extends BooleanNode {
+ public AstAnd(int id) {
+ super(id);
+ }
+
+ public Object getValue(EvaluationContext ctx)
+ throws ELException {
+ Object obj = children[0].getValue(ctx);
+ Boolean b = coerceToBoolean(obj);
+ if (!b.booleanValue()) {
+ return b;
+ }
+ obj = children[1].getValue(ctx);
+ b = coerceToBoolean(obj);
+ return b;
+ }
+}
Added: struts/struts2/trunk/plugins/embeddedjsp/src/main/java/org/apache/struts2/el/parser/AstBracketSuffix.java
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/plugins/embeddedjsp/src/main/java/org/apache/struts2/el/parser/AstBracketSuffix.java?rev=819444&view=auto
==============================================================================
--- struts/struts2/trunk/plugins/embeddedjsp/src/main/java/org/apache/struts2/el/parser/AstBracketSuffix.java (added)
+++ struts/struts2/trunk/plugins/embeddedjsp/src/main/java/org/apache/struts2/el/parser/AstBracketSuffix.java Mon Sep 28 01:55:26 2009
@@ -0,0 +1,39 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+/* Generated By:JJTree: Do not edit this line. AstBracketSuffix.java */
+
+package org.apache.struts2.el.parser;
+
+import javax.el.ELException;
+
+import org.apache.struts2.el.lang.EvaluationContext;
+
+
+/**
+ * @author Jacob Hookom [jacob@hookom.net]
+ * @version $Change: 181177 $$DateTime: 2001/06/26 08:45:09 $$Author: markt $
+ */
+public final class AstBracketSuffix extends SimpleNode {
+ public AstBracketSuffix(int id) {
+ super(id);
+ }
+
+ public Object getValue(EvaluationContext ctx)
+ throws ELException {
+ return this.children[0].getValue(ctx);
+ }
+}
Added: struts/struts2/trunk/plugins/embeddedjsp/src/main/java/org/apache/struts2/el/parser/AstChoice.java
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/plugins/embeddedjsp/src/main/java/org/apache/struts2/el/parser/AstChoice.java?rev=819444&view=auto
==============================================================================
--- struts/struts2/trunk/plugins/embeddedjsp/src/main/java/org/apache/struts2/el/parser/AstChoice.java (added)
+++ struts/struts2/trunk/plugins/embeddedjsp/src/main/java/org/apache/struts2/el/parser/AstChoice.java Mon Sep 28 01:55:26 2009
@@ -0,0 +1,47 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+/* Generated By:JJTree: Do not edit this line. AstChoice.java */
+
+package org.apache.struts2.el.parser;
+
+import javax.el.ELException;
+
+import org.apache.struts2.el.lang.EvaluationContext;
+
+
+/**
+ * @author Jacob Hookom [jacob@hookom.net]
+ * @version $Change: 181177 $$DateTime: 2001/06/26 08:45:09 $$Author: markt $
+ */
+public final class AstChoice extends SimpleNode {
+ public AstChoice(int id) {
+ super(id);
+ }
+
+ public Class getType(EvaluationContext ctx)
+ throws ELException {
+ Object val = this.getValue(ctx);
+ return (val != null) ? val.getClass() : null;
+ }
+
+ public Object getValue(EvaluationContext ctx)
+ throws ELException {
+ Object obj0 = this.children[0].getValue(ctx);
+ Boolean b0 = coerceToBoolean(obj0);
+ return this.children[((b0.booleanValue() ? 1 : 2))].getValue(ctx);
+ }
+}
Added: struts/struts2/trunk/plugins/embeddedjsp/src/main/java/org/apache/struts2/el/parser/AstCompositeExpression.java
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/plugins/embeddedjsp/src/main/java/org/apache/struts2/el/parser/AstCompositeExpression.java?rev=819444&view=auto
==============================================================================
--- struts/struts2/trunk/plugins/embeddedjsp/src/main/java/org/apache/struts2/el/parser/AstCompositeExpression.java (added)
+++ struts/struts2/trunk/plugins/embeddedjsp/src/main/java/org/apache/struts2/el/parser/AstCompositeExpression.java Mon Sep 28 01:55:26 2009
@@ -0,0 +1,55 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+/* Generated By:JJTree: Do not edit this line. AstCompositeExpression.java */
+
+package org.apache.struts2.el.parser;
+
+import javax.el.ELException;
+
+import org.apache.struts2.el.lang.EvaluationContext;
+
+
+/**
+ * @author Jacob Hookom [jacob@hookom.net]
+ * @version $Change: 181177 $$DateTime: 2001/06/26 08:45:09 $$Author: markt $
+ */
+public final class AstCompositeExpression extends SimpleNode {
+
+ public AstCompositeExpression(int id) {
+ super(id);
+ }
+
+ public Class getType(EvaluationContext ctx)
+ throws ELException {
+ return String.class;
+ }
+
+ public Object getValue(EvaluationContext ctx)
+ throws ELException {
+ StringBuffer sb = new StringBuffer(16);
+ Object obj = null;
+ if (this.children != null) {
+ for (int i = 0; i < this.children.length; i++) {
+ obj = this.children[i].getValue(ctx);
+ if (obj != null) {
+ sb.append(obj);
+ }
+ }
+ }
+ return sb.toString();
+ }
+}
Added: struts/struts2/trunk/plugins/embeddedjsp/src/main/java/org/apache/struts2/el/parser/AstDeferredExpression.java
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/plugins/embeddedjsp/src/main/java/org/apache/struts2/el/parser/AstDeferredExpression.java?rev=819444&view=auto
==============================================================================
--- struts/struts2/trunk/plugins/embeddedjsp/src/main/java/org/apache/struts2/el/parser/AstDeferredExpression.java (added)
+++ struts/struts2/trunk/plugins/embeddedjsp/src/main/java/org/apache/struts2/el/parser/AstDeferredExpression.java Mon Sep 28 01:55:26 2009
@@ -0,0 +1,54 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+/* Generated By:JJTree: Do not edit this line. AstDeferredExpression.java */
+
+package org.apache.struts2.el.parser;
+
+import javax.el.ELException;
+
+import org.apache.struts2.el.lang.EvaluationContext;
+
+
+/**
+ * @author Jacob Hookom [jacob@hookom.net]
+ * @version $Change: 181177 $$DateTime: 2001/06/26 08:45:09 $$Author: markt $
+ */
+public final class AstDeferredExpression extends SimpleNode {
+ public AstDeferredExpression(int id) {
+ super(id);
+ }
+
+ public Class getType(EvaluationContext ctx)
+ throws ELException {
+ return this.children[0].getType(ctx);
+ }
+
+ public Object getValue(EvaluationContext ctx)
+ throws ELException {
+ return this.children[0].getValue(ctx);
+ }
+
+ public boolean isReadOnly(EvaluationContext ctx)
+ throws ELException {
+ return this.children[0].isReadOnly(ctx);
+ }
+
+ public void setValue(EvaluationContext ctx, Object value)
+ throws ELException {
+ this.children[0].setValue(ctx, value);
+ }
+}
Added: struts/struts2/trunk/plugins/embeddedjsp/src/main/java/org/apache/struts2/el/parser/AstDiv.java
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/plugins/embeddedjsp/src/main/java/org/apache/struts2/el/parser/AstDiv.java?rev=819444&view=auto
==============================================================================
--- struts/struts2/trunk/plugins/embeddedjsp/src/main/java/org/apache/struts2/el/parser/AstDiv.java (added)
+++ struts/struts2/trunk/plugins/embeddedjsp/src/main/java/org/apache/struts2/el/parser/AstDiv.java Mon Sep 28 01:55:26 2009
@@ -0,0 +1,42 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+/* Generated By:JJTree: Do not edit this line. AstDiv.java */
+
+package org.apache.struts2.el.parser;
+
+import javax.el.ELException;
+
+import org.apache.struts2.el.lang.ELArithmetic;
+import org.apache.struts2.el.lang.EvaluationContext;
+
+
+/**
+ * @author Jacob Hookom [jacob@hookom.net]
+ * @version $Change: 181177 $$DateTime: 2001/06/26 08:45:09 $$Author: markt $
+ */
+public final class AstDiv extends ArithmeticNode {
+ public AstDiv(int id) {
+ super(id);
+ }
+
+ public Object getValue(EvaluationContext ctx)
+ throws ELException {
+ Object obj0 = this.children[0].getValue(ctx);
+ Object obj1 = this.children[1].getValue(ctx);
+ return ELArithmetic.divide(obj0, obj1);
+ }
+}
Added: struts/struts2/trunk/plugins/embeddedjsp/src/main/java/org/apache/struts2/el/parser/AstDotSuffix.java
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/plugins/embeddedjsp/src/main/java/org/apache/struts2/el/parser/AstDotSuffix.java?rev=819444&view=auto
==============================================================================
--- struts/struts2/trunk/plugins/embeddedjsp/src/main/java/org/apache/struts2/el/parser/AstDotSuffix.java (added)
+++ struts/struts2/trunk/plugins/embeddedjsp/src/main/java/org/apache/struts2/el/parser/AstDotSuffix.java Mon Sep 28 01:55:26 2009
@@ -0,0 +1,39 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+/* Generated By:JJTree: Do not edit this line. AstDotSuffix.java */
+
+package org.apache.struts2.el.parser;
+
+import javax.el.ELException;
+
+import org.apache.struts2.el.lang.EvaluationContext;
+
+
+/**
+ * @author Jacob Hookom [jacob@hookom.net]
+ * @version $Change: 181177 $$DateTime: 2001/06/26 08:45:09 $$Author: markt $
+ */
+public final class AstDotSuffix extends SimpleNode {
+ public AstDotSuffix(int id) {
+ super(id);
+ }
+
+ public Object getValue(EvaluationContext ctx)
+ throws ELException {
+ return this.image;
+ }
+}
Added: struts/struts2/trunk/plugins/embeddedjsp/src/main/java/org/apache/struts2/el/parser/AstDynamicExpression.java
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/plugins/embeddedjsp/src/main/java/org/apache/struts2/el/parser/AstDynamicExpression.java?rev=819444&view=auto
==============================================================================
--- struts/struts2/trunk/plugins/embeddedjsp/src/main/java/org/apache/struts2/el/parser/AstDynamicExpression.java (added)
+++ struts/struts2/trunk/plugins/embeddedjsp/src/main/java/org/apache/struts2/el/parser/AstDynamicExpression.java Mon Sep 28 01:55:26 2009
@@ -0,0 +1,54 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+/* Generated By:JJTree: Do not edit this line. AstDynamicExpression.java */
+
+package org.apache.struts2.el.parser;
+
+import javax.el.ELException;
+
+import org.apache.struts2.el.lang.EvaluationContext;
+
+
+/**
+ * @author Jacob Hookom [jacob@hookom.net]
+ * @version $Change: 181177 $$DateTime: 2001/06/26 08:45:09 $$Author: markt $
+ */
+public final class AstDynamicExpression extends SimpleNode {
+ public AstDynamicExpression(int id) {
+ super(id);
+ }
+
+ public Class getType(EvaluationContext ctx)
+ throws ELException {
+ return this.children[0].getType(ctx);
+ }
+
+ public Object getValue(EvaluationContext ctx)
+ throws ELException {
+ return this.children[0].getValue(ctx);
+ }
+
+ public boolean isReadOnly(EvaluationContext ctx)
+ throws ELException {
+ return this.children[0].isReadOnly(ctx);
+ }
+
+ public void setValue(EvaluationContext ctx, Object value)
+ throws ELException {
+ this.children[0].setValue(ctx, value);
+ }
+}
Added: struts/struts2/trunk/plugins/embeddedjsp/src/main/java/org/apache/struts2/el/parser/AstEmpty.java
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/plugins/embeddedjsp/src/main/java/org/apache/struts2/el/parser/AstEmpty.java?rev=819444&view=auto
==============================================================================
--- struts/struts2/trunk/plugins/embeddedjsp/src/main/java/org/apache/struts2/el/parser/AstEmpty.java (added)
+++ struts/struts2/trunk/plugins/embeddedjsp/src/main/java/org/apache/struts2/el/parser/AstEmpty.java Mon Sep 28 01:55:26 2009
@@ -0,0 +1,59 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+/* Generated By:JJTree: Do not edit this line. AstEmpty.java */
+
+package org.apache.struts2.el.parser;
+
+import java.util.Collection;
+import java.util.Map;
+
+import javax.el.ELException;
+
+import org.apache.struts2.el.lang.EvaluationContext;
+
+
+/**
+ * @author Jacob Hookom [jacob@hookom.net]
+ * @version $Change: 181177 $$DateTime: 2001/06/26 08:45:09 $$Author: markt $
+ */
+public final class AstEmpty extends SimpleNode {
+ public AstEmpty(int id) {
+ super(id);
+ }
+
+ public Class getType(EvaluationContext ctx)
+ throws ELException {
+ return Boolean.class;
+ }
+
+ public Object getValue(EvaluationContext ctx)
+ throws ELException {
+ Object obj = this.children[0].getValue(ctx);
+ if (obj == null) {
+ return Boolean.TRUE;
+ } else if (obj instanceof String) {
+ return Boolean.valueOf(((String) obj).length() == 0);
+ } else if (obj instanceof Object[]) {
+ return Boolean.valueOf(((Object[]) obj).length == 0);
+ } else if (obj instanceof Collection) {
+ return Boolean.valueOf(((Collection) obj).isEmpty());
+ } else if (obj instanceof Map) {
+ return Boolean.valueOf(((Map) obj).isEmpty());
+ }
+ return Boolean.FALSE;
+ }
+}
Added: struts/struts2/trunk/plugins/embeddedjsp/src/main/java/org/apache/struts2/el/parser/AstEqual.java
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/plugins/embeddedjsp/src/main/java/org/apache/struts2/el/parser/AstEqual.java?rev=819444&view=auto
==============================================================================
--- struts/struts2/trunk/plugins/embeddedjsp/src/main/java/org/apache/struts2/el/parser/AstEqual.java (added)
+++ struts/struts2/trunk/plugins/embeddedjsp/src/main/java/org/apache/struts2/el/parser/AstEqual.java Mon Sep 28 01:55:26 2009
@@ -0,0 +1,41 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+/* Generated By:JJTree: Do not edit this line. AstEqual.java */
+
+package org.apache.struts2.el.parser;
+
+import javax.el.ELException;
+
+import org.apache.struts2.el.lang.EvaluationContext;
+
+
+/**
+ * @author Jacob Hookom [jacob@hookom.net]
+ * @version $Change: 181177 $$DateTime: 2001/06/26 08:45:09 $$Author: markt $
+ */
+public final class AstEqual extends BooleanNode {
+ public AstEqual(int id) {
+ super(id);
+ }
+
+ public Object getValue(EvaluationContext ctx)
+ throws ELException {
+ Object obj0 = this.children[0].getValue(ctx);
+ Object obj1 = this.children[1].getValue(ctx);
+ return Boolean.valueOf(equals(obj0, obj1));
+ }
+}
Added: struts/struts2/trunk/plugins/embeddedjsp/src/main/java/org/apache/struts2/el/parser/AstFalse.java
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/plugins/embeddedjsp/src/main/java/org/apache/struts2/el/parser/AstFalse.java?rev=819444&view=auto
==============================================================================
--- struts/struts2/trunk/plugins/embeddedjsp/src/main/java/org/apache/struts2/el/parser/AstFalse.java (added)
+++ struts/struts2/trunk/plugins/embeddedjsp/src/main/java/org/apache/struts2/el/parser/AstFalse.java Mon Sep 28 01:55:26 2009
@@ -0,0 +1,39 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+/* Generated By:JJTree: Do not edit this line. AstFalse.java */
+
+package org.apache.struts2.el.parser;
+
+import javax.el.ELException;
+
+import org.apache.struts2.el.lang.EvaluationContext;
+
+
+/**
+ * @author Jacob Hookom [jacob@hookom.net]
+ * @version $Change: 181177 $$DateTime: 2001/06/26 08:45:09 $$Author: markt $
+ */
+public final class AstFalse extends BooleanNode {
+ public AstFalse(int id) {
+ super(id);
+ }
+
+ public Object getValue(EvaluationContext ctx)
+ throws ELException {
+ return Boolean.FALSE;
+ }
+}
Added: struts/struts2/trunk/plugins/embeddedjsp/src/main/java/org/apache/struts2/el/parser/AstFloatingPoint.java
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/plugins/embeddedjsp/src/main/java/org/apache/struts2/el/parser/AstFloatingPoint.java?rev=819444&view=auto
==============================================================================
--- struts/struts2/trunk/plugins/embeddedjsp/src/main/java/org/apache/struts2/el/parser/AstFloatingPoint.java (added)
+++ struts/struts2/trunk/plugins/embeddedjsp/src/main/java/org/apache/struts2/el/parser/AstFloatingPoint.java Mon Sep 28 01:55:26 2009
@@ -0,0 +1,59 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+/* Generated By:JJTree: Do not edit this line. AstFloatingPoint.java */
+
+package org.apache.struts2.el.parser;
+
+import java.math.BigDecimal;
+
+import javax.el.ELException;
+
+import org.apache.struts2.el.lang.EvaluationContext;
+
+
+/**
+ * @author Jacob Hookom [jacob@hookom.net]
+ * @version $Change: 181177 $$DateTime: 2001/06/26 08:45:09 $$Author: markt $
+ */
+public final class AstFloatingPoint extends SimpleNode {
+ public AstFloatingPoint(int id) {
+ super(id);
+ }
+
+ private Number number;
+
+ public Number getFloatingPoint() {
+ if (this.number == null) {
+ try {
+ this.number = new Double(this.image);
+ } catch (ArithmeticException e0) {
+ this.number = new BigDecimal(this.image);
+ }
+ }
+ return this.number;
+ }
+
+ public Object getValue(EvaluationContext ctx)
+ throws ELException {
+ return this.getFloatingPoint();
+ }
+
+ public Class getType(EvaluationContext ctx)
+ throws ELException {
+ return this.getFloatingPoint().getClass();
+ }
+}
Added: struts/struts2/trunk/plugins/embeddedjsp/src/main/java/org/apache/struts2/el/parser/AstFunction.java
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/plugins/embeddedjsp/src/main/java/org/apache/struts2/el/parser/AstFunction.java?rev=819444&view=auto
==============================================================================
--- struts/struts2/trunk/plugins/embeddedjsp/src/main/java/org/apache/struts2/el/parser/AstFunction.java (added)
+++ struts/struts2/trunk/plugins/embeddedjsp/src/main/java/org/apache/struts2/el/parser/AstFunction.java Mon Sep 28 01:55:26 2009
@@ -0,0 +1,134 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+/* Generated By:JJTree: Do not edit this line. AstFunction.java */
+
+package org.apache.struts2.el.parser;
+
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+
+import javax.el.ELException;
+import javax.el.FunctionMapper;
+
+import org.apache.struts2.el.lang.EvaluationContext;
+import org.apache.struts2.el.util.MessageFactory;
+
+
+/**
+ * @author Jacob Hookom [jacob@hookom.net]
+ * @version $Change: 181177 $$DateTime: 2001/06/26 08:45:09 $$Author: markt $
+ */
+public final class AstFunction extends SimpleNode {
+
+ protected String localName = "";
+
+ protected String prefix = "";
+
+ public AstFunction(int id) {
+ super(id);
+ }
+
+ public String getLocalName() {
+ return localName;
+ }
+
+ public String getOutputName() {
+ if (this.prefix == null) {
+ return this.localName;
+ } else {
+ return this.prefix + ":" + this.localName;
+ }
+ }
+
+ public String getPrefix() {
+ return prefix;
+ }
+
+ public Class getType(EvaluationContext ctx)
+ throws ELException {
+
+ FunctionMapper fnMapper = ctx.getFunctionMapper();
+
+ // quickly validate again for this request
+ if (fnMapper == null) {
+ throw new ELException(MessageFactory.get("error.fnMapper.null"));
+ }
+ Method m = fnMapper.resolveFunction(this.prefix, this.localName);
+ if (m == null) {
+ throw new ELException(MessageFactory.get("error.fnMapper.method",
+ this.getOutputName()));
+ }
+ return m.getReturnType();
+ }
+
+ public Object getValue(EvaluationContext ctx)
+ throws ELException {
+
+ FunctionMapper fnMapper = ctx.getFunctionMapper();
+
+ // quickly validate again for this request
+ if (fnMapper == null) {
+ throw new ELException(MessageFactory.get("error.fnMapper.null"));
+ }
+ Method m = fnMapper.resolveFunction(this.prefix, this.localName);
+ if (m == null) {
+ throw new ELException(MessageFactory.get("error.fnMapper.method",
+ this.getOutputName()));
+ }
+
+ Class[] paramTypes = m.getParameterTypes();
+ Object[] params = null;
+ Object result = null;
+ int numParams = this.jjtGetNumChildren();
+ if (numParams > 0) {
+ params = new Object[numParams];
+ try {
+ for (int i = 0; i < numParams; i++) {
+ params[i] = this.children[i].getValue(ctx);
+ params[i] = coerceToType(params[i], paramTypes[i]);
+ }
+ } catch (ELException ele) {
+ throw new ELException(MessageFactory.get("error.function", this
+ .getOutputName()), ele);
+ }
+ }
+ try {
+ result = m.invoke(null, params);
+ } catch (IllegalAccessException iae) {
+ throw new ELException(MessageFactory.get("error.function", this
+ .getOutputName()), iae);
+ } catch (InvocationTargetException ite) {
+ throw new ELException(MessageFactory.get("error.function", this
+ .getOutputName()), ite.getCause());
+ }
+ return result;
+ }
+
+ public void setLocalName(String localName) {
+ this.localName = localName;
+ }
+
+ public void setPrefix(String prefix) {
+ this.prefix = prefix;
+ }
+
+
+ public String toString()
+ {
+ return ELParserTreeConstants.jjtNodeName[id] + "[" + this.getOutputName() + "]";
+ }
+}
Added: struts/struts2/trunk/plugins/embeddedjsp/src/main/java/org/apache/struts2/el/parser/AstGreaterThan.java
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/plugins/embeddedjsp/src/main/java/org/apache/struts2/el/parser/AstGreaterThan.java?rev=819444&view=auto
==============================================================================
--- struts/struts2/trunk/plugins/embeddedjsp/src/main/java/org/apache/struts2/el/parser/AstGreaterThan.java (added)
+++ struts/struts2/trunk/plugins/embeddedjsp/src/main/java/org/apache/struts2/el/parser/AstGreaterThan.java Mon Sep 28 01:55:26 2009
@@ -0,0 +1,47 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+/* Generated By:JJTree: Do not edit this line. AstGreaterThan.java */
+
+package org.apache.struts2.el.parser;
+
+import javax.el.ELException;
+
+import org.apache.struts2.el.lang.EvaluationContext;
+
+
+/**
+ * @author Jacob Hookom [jacob@hookom.net]
+ * @version $Change: 181177 $$DateTime: 2001/06/26 08:45:09 $$Author: markt $
+ */
+public final class AstGreaterThan extends BooleanNode {
+ public AstGreaterThan(int id) {
+ super(id);
+ }
+
+ public Object getValue(EvaluationContext ctx)
+ throws ELException {
+ Object obj0 = this.children[0].getValue(ctx);
+ if (obj0 == null) {
+ return Boolean.FALSE;
+ }
+ Object obj1 = this.children[1].getValue(ctx);
+ if (obj1 == null) {
+ return Boolean.FALSE;
+ }
+ return (compare(obj0, obj1) > 0) ? Boolean.TRUE : Boolean.FALSE;
+ }
+}
Added: struts/struts2/trunk/plugins/embeddedjsp/src/main/java/org/apache/struts2/el/parser/AstGreaterThanEqual.java
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/plugins/embeddedjsp/src/main/java/org/apache/struts2/el/parser/AstGreaterThanEqual.java?rev=819444&view=auto
==============================================================================
--- struts/struts2/trunk/plugins/embeddedjsp/src/main/java/org/apache/struts2/el/parser/AstGreaterThanEqual.java (added)
+++ struts/struts2/trunk/plugins/embeddedjsp/src/main/java/org/apache/struts2/el/parser/AstGreaterThanEqual.java Mon Sep 28 01:55:26 2009
@@ -0,0 +1,47 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+/* Generated By:JJTree: Do not edit this line. AstGreaterThanEqual.java */
+
+package org.apache.struts2.el.parser;
+
+import javax.el.ELException;
+
+import org.apache.struts2.el.lang.EvaluationContext;
+
+
+/**
+ * @author Jacob Hookom [jacob@hookom.net]
+ * @version $Change: 181177 $$DateTime: 2001/06/26 08:45:09 $$Author: markt $
+ */
+public final class AstGreaterThanEqual extends BooleanNode {
+ public AstGreaterThanEqual(int id) {
+ super(id);
+ }
+
+ public Object getValue(EvaluationContext ctx)
+ throws ELException {
+ Object obj0 = this.children[0].getValue(ctx);
+ Object obj1 = this.children[1].getValue(ctx);
+ if (obj0 == obj1) {
+ return Boolean.TRUE;
+ }
+ if (obj0 == null || obj1 == null) {
+ return Boolean.FALSE;
+ }
+ return (compare(obj0, obj1) >= 0) ? Boolean.TRUE : Boolean.FALSE;
+ }
+}