You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@struts.apache.org by ts...@apache.org on 2007/11/04 22:56:45 UTC
svn commit: r591846 -
/struts/sandbox/trunk/struts2-juel-plugin/src/main/java/com/googlecode/struts2juel/
Author: tschneider
Date: Sun Nov 4 13:56:45 2007
New Revision: 591846
URL: http://svn.apache.org/viewvc?rev=591846&view=rev
Log:
Adding javadoc and filling out the implementation
Modified:
struts/sandbox/trunk/struts2-juel-plugin/src/main/java/com/googlecode/struts2juel/CompoundRootELContext.java
struts/sandbox/trunk/struts2-juel-plugin/src/main/java/com/googlecode/struts2juel/CompoundRootVariableMapper.java
struts/sandbox/trunk/struts2-juel-plugin/src/main/java/com/googlecode/struts2juel/JuelReflectionContextFactory.java
struts/sandbox/trunk/struts2-juel-plugin/src/main/java/com/googlecode/struts2juel/JuelReflectionProvider.java
struts/sandbox/trunk/struts2-juel-plugin/src/main/java/com/googlecode/struts2juel/JuelValueStack.java
struts/sandbox/trunk/struts2-juel-plugin/src/main/java/com/googlecode/struts2juel/JuelValueStackFactory.java
struts/sandbox/trunk/struts2-juel-plugin/src/main/java/com/googlecode/struts2juel/PropertyValueExpression.java
Modified: struts/sandbox/trunk/struts2-juel-plugin/src/main/java/com/googlecode/struts2juel/CompoundRootELContext.java
URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-juel-plugin/src/main/java/com/googlecode/struts2juel/CompoundRootELContext.java?rev=591846&r1=591845&r2=591846&view=diff
==============================================================================
--- struts/sandbox/trunk/struts2-juel-plugin/src/main/java/com/googlecode/struts2juel/CompoundRootELContext.java (original)
+++ struts/sandbox/trunk/struts2-juel-plugin/src/main/java/com/googlecode/struts2juel/CompoundRootELContext.java Sun Nov 4 13:56:45 2007
@@ -6,6 +6,9 @@
import de.odysseus.el.util.SimpleContext;
+/**
+ * An implementation of SimpleContext that knows about the CompoundRoot.
+ */
public class CompoundRootELContext extends SimpleContext {
private VariableMapper variableMapper;
Modified: struts/sandbox/trunk/struts2-juel-plugin/src/main/java/com/googlecode/struts2juel/CompoundRootVariableMapper.java
URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-juel-plugin/src/main/java/com/googlecode/struts2juel/CompoundRootVariableMapper.java?rev=591846&r1=591845&r2=591846&view=diff
==============================================================================
--- struts/sandbox/trunk/struts2-juel-plugin/src/main/java/com/googlecode/struts2juel/CompoundRootVariableMapper.java (original)
+++ struts/sandbox/trunk/struts2-juel-plugin/src/main/java/com/googlecode/struts2juel/CompoundRootVariableMapper.java Sun Nov 4 13:56:45 2007
@@ -1,12 +1,20 @@
package com.googlecode.struts2juel;
+import java.util.HashMap;
+import java.util.Map;
+
import javax.el.ValueExpression;
import javax.el.VariableMapper;
import org.apache.commons.beanutils.PropertyUtils;
+import sun.reflect.generics.reflectiveObjects.NotImplementedException;
+
import com.opensymphony.xwork2.util.CompoundRoot;
+/**
+ * Implementation of VariableMapper based on a CompoundRoot.
+ */
public class CompoundRootVariableMapper extends VariableMapper {
private CompoundRoot root;
@@ -30,8 +38,7 @@
@Override
public ValueExpression setVariable(String variable, ValueExpression valueExpression) {
- // TODO Auto-generated method stub
- return null;
+ throw new RuntimeException("Method not implemented!");
}
}
Modified: struts/sandbox/trunk/struts2-juel-plugin/src/main/java/com/googlecode/struts2juel/JuelReflectionContextFactory.java
URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-juel-plugin/src/main/java/com/googlecode/struts2juel/JuelReflectionContextFactory.java?rev=591846&r1=591845&r2=591846&view=diff
==============================================================================
--- struts/sandbox/trunk/struts2-juel-plugin/src/main/java/com/googlecode/struts2juel/JuelReflectionContextFactory.java (original)
+++ struts/sandbox/trunk/struts2-juel-plugin/src/main/java/com/googlecode/struts2juel/JuelReflectionContextFactory.java Sun Nov 4 13:56:45 2007
@@ -5,8 +5,10 @@
import com.opensymphony.xwork2.util.reflection.ReflectionContextFactory;
+/**
+ * ReflectionContextFactory for Juel.
+ */
public class JuelReflectionContextFactory implements ReflectionContextFactory {
-
public Map createDefaultContext(Object root) {
return new HashMap();
}
Modified: struts/sandbox/trunk/struts2-juel-plugin/src/main/java/com/googlecode/struts2juel/JuelReflectionProvider.java
URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-juel-plugin/src/main/java/com/googlecode/struts2juel/JuelReflectionProvider.java?rev=591846&r1=591845&r2=591846&view=diff
==============================================================================
--- struts/sandbox/trunk/struts2-juel-plugin/src/main/java/com/googlecode/struts2juel/JuelReflectionProvider.java (original)
+++ struts/sandbox/trunk/struts2-juel-plugin/src/main/java/com/googlecode/struts2juel/JuelReflectionProvider.java Sun Nov 4 13:56:45 2007
@@ -10,6 +10,9 @@
import com.opensymphony.xwork2.util.CompoundRoot;
import com.opensymphony.xwork2.util.reflection.ReflectionException;
+/**
+ * A OgnlReflectionProvider based on Juel.
+ */
public class JuelReflectionProvider extends OgnlReflectionProvider {
ExpressionFactory factory = new de.odysseus.el.ExpressionFactoryImpl();
Modified: struts/sandbox/trunk/struts2-juel-plugin/src/main/java/com/googlecode/struts2juel/JuelValueStack.java
URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-juel-plugin/src/main/java/com/googlecode/struts2juel/JuelValueStack.java?rev=591846&r1=591845&r2=591846&view=diff
==============================================================================
--- struts/sandbox/trunk/struts2-juel-plugin/src/main/java/com/googlecode/struts2juel/JuelValueStack.java (original)
+++ struts/sandbox/trunk/struts2-juel-plugin/src/main/java/com/googlecode/struts2juel/JuelValueStack.java Sun Nov 4 13:56:45 2007
@@ -12,131 +12,143 @@
import com.opensymphony.xwork2.util.CompoundRoot;
import com.opensymphony.xwork2.util.ValueStack;
+/**
+ * A ValueStack that uses Juel as the underlying Expression Language.
+ */
public class JuelValueStack implements ValueStack {
- private CompoundRoot root = new CompoundRoot();
- private transient Map context;
- private Class defaultType;
- private Map overrides;
-
- ExpressionFactory factory = new de.odysseus.el.ExpressionFactoryImpl();
-
- ELContext elContext;
-
- public JuelValueStack() {
- setRoot(new CompoundRoot());
- }
-
- public JuelValueStack(ValueStack vs) {
- setRoot(new CompoundRoot(vs.getRoot()));
- }
-
- public String findString(String expr) {
- return (String) findValue(expr, String.class);
- }
-
- public Object findValue(String expr) {
- return findValue(expr, Object.class);
- }
-
- public Object findValue(String expr, Class asType) {
- try {
- if(expr != null && expr.startsWith("#")) {
- int firstDot = expr.indexOf('.');
- String key = expr.substring(1, firstDot);
- String value = expr.substring(firstDot + 1);
- Map map = (Map) context.get(key);
- return map.get(value);
- }
- if(expr != null && expr.startsWith("%{")) {
- // replace %{ with ${
- expr = expr.substring(1);
- }
- if(expr != null && !expr.startsWith("${")) {
- expr = "${" + expr + "}";
- }
- // parse our expression
- ValueExpression valueExpr = factory.createValueExpression(
- elContext, expr, asType);
- Object retVal = valueExpr.getValue(elContext);
- return retVal;
- } catch(PropertyNotFoundException e) {
- // property not found
- return null;
- } catch(ELException e) {
- // fail silently so we don't mess things up
- return null;
- }
- }
-
- public Map getContext() {
- return context;
- }
-
- public Map getExprOverrides() {
- return overrides;
- }
-
- public CompoundRoot getRoot() {
- return root;
- }
-
- public Object peek() {
- return root.peek();
- }
-
- public Object pop() {
- return root.pop();
- }
-
- public void push(Object o) {
- root.push(o);
- }
-
- public void set(String key, Object o) {
- // TODO : what to do here?
- }
-
- public void setDefaultType(Class defaultType) {
- this.defaultType = defaultType;
- }
-
- public void setExprOverrides(Map overrides) {
- this.overrides = overrides;
- }
-
- public void setValue(String expr, Object value) {
- setValue(expr, value, false);
- }
-
- public void setValue(String expr, Object value,
- boolean throwExceptionOnFailure) {
- try {
- if(expr != null && !expr.startsWith("${")) {
- expr = "${" + expr + "}";
- }
- if(value != null && value instanceof String[]
- && ((String[]) value).length == 1) {
- value = ((String[]) value)[0];
- }
- // parse our expression
- ValueExpression valueExpr = factory.createValueExpression(
- elContext, expr, Object.class);
- valueExpr.setValue(elContext, value);
- } catch(ELException e) {
- if(throwExceptionOnFailure) {
- throw e;
- }
- }
- }
-
- public int size() {
- return root.size();
- }
-
- protected void setRoot(CompoundRoot root) {
- this.context = new TreeMap();
- context.put(VALUE_STACK, this);
- this.root = root;
- this.elContext = new CompoundRootELContext(root);
- }
+ private CompoundRoot root = new CompoundRoot();
+ private transient Map context;
+ private Class defaultType;
+ private Map overrides;
+
+ private ExpressionFactory factory = new de.odysseus.el.ExpressionFactoryImpl();
+
+ private ELContext elContext;
+
+ public JuelValueStack() {
+ setRoot(new CompoundRoot());
+ }
+
+ public JuelValueStack(ValueStack vs) {
+ setRoot(new CompoundRoot(vs.getRoot()));
+ }
+
+ public String findString(String expr) {
+ return (String) findValue(expr, String.class);
+ }
+
+ public Object findValue(String expr) {
+ return findValue(expr, Object.class);
+ }
+
+ public Object findValue(String expr, Class asType) {
+ try {
+ if (expr != null && expr.startsWith("#")) {
+ int firstDot = expr.indexOf('.');
+ String key = expr.substring(1, firstDot);
+ String value = expr.substring(firstDot + 1);
+ Map map = (Map) context.get(key);
+ return map.get(value);
+ }
+ if ((overrides != null) && overrides.containsKey(expr)) {
+ expr = (String) overrides.get(expr);
+ }
+ if (expr != null && expr.startsWith("%{")) {
+ // replace %{ with ${
+ expr = "$" + expr.substring(1);
+ }
+ if (expr != null && !expr.startsWith("${")) {
+ expr = "${" + expr + "}";
+ }
+ // parse our expression
+ ValueExpression valueExpr = factory.createValueExpression(
+ elContext, expr, asType);
+ Object retVal = valueExpr.getValue(elContext);
+ return retVal;
+ } catch (PropertyNotFoundException e) {
+ // property not found
+ return null;
+ } catch (ELException e) {
+ // fail silently so we don't mess things up
+ return null;
+ }
+ }
+
+ public Map getContext() {
+ return context;
+ }
+
+ public Map getExprOverrides() {
+ return overrides;
+ }
+
+ public CompoundRoot getRoot() {
+ return root;
+ }
+
+ public Object peek() {
+ return root.peek();
+ }
+
+ public Object pop() {
+ return root.pop();
+ }
+
+ public void push(Object o) {
+ root.push(o);
+ }
+
+ public void setDefaultType(Class defaultType) {
+ this.defaultType = defaultType;
+ }
+
+ public void setExprOverrides(Map overrides) {
+ if (this.overrides == null) {
+ this.overrides = overrides;
+ } else {
+ this.overrides.putAll(overrides);
+ }
+ }
+
+ public void set(String key, Object o) {
+ overrides.put(key, o);
+ }
+
+ public void setValue(String expr, Object value) {
+ setValue(expr, value, false);
+ }
+
+ public void setValue(String expr, Object value,
+ boolean throwExceptionOnFailure) {
+ try {
+ if (expr != null && !expr.startsWith("${")) {
+ expr = "${" + expr + "}";
+ }
+ // hack to allow parameters to be set back
+ // juel doesn't support setting String[] values on String properties
+ if (value != null && value instanceof String[]
+ && ((String[]) value).length == 1) {
+ value = ((String[]) value)[0];
+ }
+ // parse our expression
+ ValueExpression valueExpr = factory.createValueExpression(
+ elContext, expr, Object.class);
+ valueExpr.setValue(elContext, value);
+ } catch (ELException e) {
+ if (throwExceptionOnFailure) {
+ throw e;
+ }
+ }
+ }
+
+ public int size() {
+ return root.size();
+ }
+
+ protected void setRoot(CompoundRoot root) {
+ this.context = new TreeMap();
+ context.put(VALUE_STACK, this);
+ this.root = root;
+ this.elContext = new CompoundRootELContext(root);
+ }
}
Modified: struts/sandbox/trunk/struts2-juel-plugin/src/main/java/com/googlecode/struts2juel/JuelValueStackFactory.java
URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-juel-plugin/src/main/java/com/googlecode/struts2juel/JuelValueStackFactory.java?rev=591846&r1=591845&r2=591846&view=diff
==============================================================================
--- struts/sandbox/trunk/struts2-juel-plugin/src/main/java/com/googlecode/struts2juel/JuelValueStackFactory.java (original)
+++ struts/sandbox/trunk/struts2-juel-plugin/src/main/java/com/googlecode/struts2juel/JuelValueStackFactory.java Sun Nov 4 13:56:45 2007
@@ -3,6 +3,9 @@
import com.opensymphony.xwork2.util.ValueStack;
import com.opensymphony.xwork2.util.ValueStackFactory;
+/**
+ * Creates JuelValueStacks.
+ */
public class JuelValueStackFactory implements ValueStackFactory {
public ValueStack createValueStack() {
Modified: struts/sandbox/trunk/struts2-juel-plugin/src/main/java/com/googlecode/struts2juel/PropertyValueExpression.java
URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-juel-plugin/src/main/java/com/googlecode/struts2juel/PropertyValueExpression.java?rev=591846&r1=591845&r2=591846&view=diff
==============================================================================
--- struts/sandbox/trunk/struts2-juel-plugin/src/main/java/com/googlecode/struts2juel/PropertyValueExpression.java (original)
+++ struts/sandbox/trunk/struts2-juel-plugin/src/main/java/com/googlecode/struts2juel/PropertyValueExpression.java Sun Nov 4 13:56:45 2007
@@ -7,96 +7,100 @@
import org.apache.commons.beanutils.PropertyUtils;
+/**
+ * A value expression that uses a javabean as the root of the value expression.
+ */
public class PropertyValueExpression extends ValueExpression {
- private Object object;
- private String property;
-
- public PropertyValueExpression(Object object, String property) {
- this.object = object;
- this.property = property;
- }
-
- @Override
- public Class<?> getExpectedType() {
- try {
- return PropertyUtils.getPropertyType(object, property);
- } catch(IllegalAccessException e) {
- throw new RuntimeException(e);
- } catch(InvocationTargetException e) {
- throw new RuntimeException(e);
- } catch(NoSuchMethodException e) {
- throw new RuntimeException(e);
- }
- }
-
- @Override
- public Class<?> getType(ELContext arg0) {
- try {
- return PropertyUtils.getPropertyType(object, property);
- } catch(IllegalAccessException e) {
- throw new RuntimeException(e);
- } catch(InvocationTargetException e) {
- throw new RuntimeException(e);
- } catch(NoSuchMethodException e) {
- throw new RuntimeException(e);
- }
- }
-
- @Override
- public Object getValue(ELContext arg0) {
- try {
- return PropertyUtils.getSimpleProperty(object, property);
- } catch(IllegalAccessException e) {
- throw new RuntimeException(e);
- } catch(InvocationTargetException e) {
- throw new RuntimeException(e);
- } catch(NoSuchMethodException e) {
- throw new RuntimeException(e);
- }
- }
-
- @Override
- public boolean isReadOnly(ELContext arg0) {
- return PropertyUtils.isWriteable(object, property);
- }
-
- @Override
- public void setValue(ELContext arg0, Object obj) {
- try {
- PropertyUtils.setSimpleProperty(object, property, obj);
- } catch(IllegalAccessException e) {
- throw new RuntimeException(e);
- } catch(InvocationTargetException e) {
- throw new RuntimeException(e);
- } catch(NoSuchMethodException e) {
- throw new RuntimeException(e);
- }
- }
-
- @Override
- public boolean equals(Object otherObject) {
- if (otherObject != null && otherObject.getClass() == getClass()) {
- PropertyValueExpression other = (PropertyValueExpression)otherObject;
- if (property != other.property) {
- return false;
- }
- return object == other.object || object != null && object.equals(other.object);
- }
- return false;
- }
-
- @Override
- public String getExpressionString() {
- return null;
- }
-
- @Override
- public int hashCode() {
- return property.hashCode();
- }
-
- @Override
- public boolean isLiteralText() {
- return false;
- }
+ private Object object;
+ private String property;
+
+ public PropertyValueExpression(Object object, String property) {
+ this.object = object;
+ this.property = property;
+ }
+
+ @Override
+ public Class<?> getExpectedType() {
+ try {
+ return PropertyUtils.getPropertyType(object, property);
+ } catch (IllegalAccessException e) {
+ throw new RuntimeException(e);
+ } catch (InvocationTargetException e) {
+ throw new RuntimeException(e);
+ } catch (NoSuchMethodException e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+ @Override
+ public Class<?> getType(ELContext arg0) {
+ try {
+ return PropertyUtils.getPropertyType(object, property);
+ } catch (IllegalAccessException e) {
+ throw new RuntimeException(e);
+ } catch (InvocationTargetException e) {
+ throw new RuntimeException(e);
+ } catch (NoSuchMethodException e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+ @Override
+ public Object getValue(ELContext arg0) {
+ try {
+ return PropertyUtils.getSimpleProperty(object, property);
+ } catch (IllegalAccessException e) {
+ throw new RuntimeException(e);
+ } catch (InvocationTargetException e) {
+ throw new RuntimeException(e);
+ } catch (NoSuchMethodException e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+ @Override
+ public boolean isReadOnly(ELContext arg0) {
+ return PropertyUtils.isWriteable(object, property);
+ }
+
+ @Override
+ public void setValue(ELContext arg0, Object obj) {
+ try {
+ PropertyUtils.setSimpleProperty(object, property, obj);
+ } catch (IllegalAccessException e) {
+ throw new RuntimeException(e);
+ } catch (InvocationTargetException e) {
+ throw new RuntimeException(e);
+ } catch (NoSuchMethodException e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+ @Override
+ public boolean equals(Object otherObject) {
+ if (otherObject != null && otherObject.getClass() == getClass()) {
+ PropertyValueExpression other = (PropertyValueExpression) otherObject;
+ if (property != other.property) {
+ return false;
+ }
+ return object == other.object || object != null
+ && object.equals(other.object);
+ }
+ return false;
+ }
+
+ @Override
+ public String getExpressionString() {
+ return property;
+ }
+
+ @Override
+ public int hashCode() {
+ return property.hashCode();
+ }
+
+ @Override
+ public boolean isLiteralText() {
+ return false;
+ }
}