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;
+	}
 }