Author: tschneider
Date: Mon Nov  5 19:30:25 2007
New Revision: 592241

URL: http://svn.apache.org/viewvc?rev=592241&view=rev
Log:
divorced juel from the value stack so we are only dependent on the java el 
classes

Added:
    
struts/sandbox/trunk/struts2-juel-plugin/src/main/java/com/googlecode/struts2juel/CompoundRootELResolver.java
    
struts/sandbox/trunk/struts2-juel-plugin/src/main/java/com/googlecode/struts2juel/ExpressionFactoryLocator.java
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/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

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=592241&r1=592240&r2=592241&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
 Mon Nov  5 19:30:25 2007
@@ -1,17 +1,36 @@
 package com.googlecode.struts2juel;
 
+import javax.el.ArrayELResolver;
+import javax.el.BeanELResolver;
+import javax.el.CompositeELResolver;
+import javax.el.ELContext;
+import javax.el.ELResolver;
+import javax.el.FunctionMapper;
+import javax.el.ListELResolver;
+import javax.el.MapELResolver;
+import javax.el.ResourceBundleELResolver;
 import javax.el.VariableMapper;
 
 import com.opensymphony.xwork2.util.CompoundRoot;
 
-import de.odysseus.el.util.SimpleContext;
-
 /**
- * An implementation of SimpleContext that knows about the CompoundRoot.
+ * An implementation of SimpleContext that knows about the ValueStack's 
CompoundRoot.
  */
-public class CompoundRootELContext extends SimpleContext {
+public class CompoundRootELContext extends ELContext {
     private VariableMapper variableMapper;
+    private FunctionMapper functionMapper = new NullFunctionMapper();
 
+    private static final ELResolver DEFAULT_RESOLVER_READ_ONLY = new 
CompositeELResolver() {
+               {
+                       add(new CompoundRootELResolver());
+                       add(new ArrayELResolver(false));
+                       add(new ListELResolver(false));
+                       add(new MapELResolver(false));
+                       add(new ResourceBundleELResolver());
+                       add(new BeanELResolver(false));
+               }
+       };
+    
     public CompoundRootELContext(CompoundRoot root) {
         variableMapper = new CompoundRootVariableMapper(root);
     }
@@ -20,4 +39,14 @@
     public VariableMapper getVariableMapper() {
         return variableMapper;
     }
+
+       @Override
+       public ELResolver getELResolver() {
+               return DEFAULT_RESOLVER_READ_ONLY;
+       }
+
+       @Override
+       public FunctionMapper getFunctionMapper() {
+               return functionMapper;
+       }
 }

Added: 
struts/sandbox/trunk/struts2-juel-plugin/src/main/java/com/googlecode/struts2juel/CompoundRootELResolver.java
URL: 
http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-juel-plugin/src/main/java/com/googlecode/struts2juel/CompoundRootELResolver.java?rev=592241&view=auto
==============================================================================
--- 
struts/sandbox/trunk/struts2-juel-plugin/src/main/java/com/googlecode/struts2juel/CompoundRootELResolver.java
 (added)
+++ 
struts/sandbox/trunk/struts2-juel-plugin/src/main/java/com/googlecode/struts2juel/CompoundRootELResolver.java
 Mon Nov  5 19:30:25 2007
@@ -0,0 +1,51 @@
+package com.googlecode.struts2juel;
+
+import java.beans.FeatureDescriptor;
+import java.util.Iterator;
+
+import javax.el.ELContext;
+import javax.el.ELResolver;
+
+/**
+ * An ELResolver capable of resolving 
+ */
+public class CompoundRootELResolver extends ELResolver {
+
+       @Override
+       public Class<?> getCommonPropertyType(ELContext arg0, Object arg1) {
+               // TODO Auto-generated method stub
+               return null;
+       }
+
+       @Override
+       public Iterator<FeatureDescriptor> getFeatureDescriptors(ELContext arg0,
+                       Object arg1) {
+               // TODO Auto-generated method stub
+               return null;
+       }
+
+       @Override
+       public Class<?> getType(ELContext arg0, Object arg1, Object arg2) {
+               // TODO Auto-generated method stub
+               return null;
+       }
+
+       @Override
+       public Object getValue(ELContext arg0, Object arg1, Object arg2) {
+               // TODO Auto-generated method stub
+               return null;
+       }
+
+       @Override
+       public boolean isReadOnly(ELContext arg0, Object arg1, Object arg2) {
+               // TODO Auto-generated method stub
+               return false;
+       }
+
+       @Override
+       public void setValue(ELContext arg0, Object arg1, Object arg2, Object 
arg3) {
+               // TODO Auto-generated method stub
+
+       }
+
+}

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=592241&r1=592240&r2=592241&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
 Mon Nov  5 19:30:25 2007
@@ -1,14 +1,9 @@
 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;
 

Added: 
struts/sandbox/trunk/struts2-juel-plugin/src/main/java/com/googlecode/struts2juel/ExpressionFactoryLocator.java
URL: 
http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-juel-plugin/src/main/java/com/googlecode/struts2juel/ExpressionFactoryLocator.java?rev=592241&view=auto
==============================================================================
--- 
struts/sandbox/trunk/struts2-juel-plugin/src/main/java/com/googlecode/struts2juel/ExpressionFactoryLocator.java
 (added)
+++ 
struts/sandbox/trunk/struts2-juel-plugin/src/main/java/com/googlecode/struts2juel/ExpressionFactoryLocator.java
 Mon Nov  5 19:30:25 2007
@@ -0,0 +1,46 @@
+package com.googlecode.struts2juel;
+
+import javax.el.ExpressionFactory;
+import javax.servlet.ServletContext;
+import javax.servlet.jsp.JspApplicationContext;
+import javax.servlet.jsp.JspFactory;
+
+import org.apache.struts2.StrutsStatics;
+
+import com.opensymphony.xwork2.ActionContext;
+
+/**
+ * Locates the current ExpressFactory. The preference is to use the app 
server's
+ * built-in ExpressFactory. If that isn't available, then JUEL's ExpressFactory
+ * will be used.
+ */
+public class ExpressionFactoryLocator {
+       private static final String JUEL_FACTORY = 
"de.odysseus.el.ExpressionFactoryImpl";
+
+       public static ExpressionFactory locateExpressFactory() {
+               ExpressionFactory factory = null;
+               // first try to load the default ExpressFactory from the JSP 
engine
+               try {
+                       ActionContext actionContext = 
ActionContext.getContext();
+                       ServletContext servletContext = (ServletContext) 
actionContext
+                                       .get(StrutsStatics.SERVLET_CONTEXT);
+                       JspFactory jspFactory = JspFactory.getDefaultFactory();
+                       JspApplicationContext jspAppCtx = jspFactory
+                                       
.getJspApplicationContext(servletContext);
+                       factory = jspAppCtx.getExpressionFactory();
+               } catch (Throwable t) {
+                       // fallback to juel
+                       try {
+                               factory = (ExpressionFactory) 
Class.forName(JUEL_FACTORY)
+                                               .newInstance();
+                       } catch (InstantiationException e) {
+                               throw new RuntimeException(e);
+                       } catch (IllegalAccessException e) {
+                               throw new RuntimeException(e);
+                       } catch (ClassNotFoundException e) {
+                               throw new RuntimeException(e);
+                       }
+               }
+               return factory;
+       }
+}

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=592241&r1=592240&r2=592241&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
 Mon Nov  5 19:30:25 2007
@@ -14,10 +14,17 @@
  * A OgnlReflectionProvider based on Juel.
  */
 public class JuelReflectionProvider extends OgnlReflectionProvider {
-    ExpressionFactory factory = new de.odysseus.el.ExpressionFactoryImpl();
+       private ExpressionFactory factory;
 
+       public void initExpressionFactory() {
+               if (factory == null) {
+                       factory = 
ExpressionFactoryLocator.locateExpressFactory();
+               }
+       }
+       
     @Override
     public Object getValue(String expr, Map context, Object root) throws 
ReflectionException {
+       initExpressionFactory();
         CompoundRoot compoundRoot = new CompoundRoot();
         compoundRoot.add(root);
         ELContext elContext = new CompoundRootELContext(compoundRoot);
@@ -29,6 +36,7 @@
 
     @Override
     public void setValue(String expr, Map context, Object root, Object value) 
throws ReflectionException {
+       initExpressionFactory();
         CompoundRoot compoundRoot = new CompoundRoot();
         compoundRoot.add(root);
         ELContext elContext = new CompoundRootELContext(compoundRoot);

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=592241&r1=592240&r2=592241&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
 Mon Nov  5 19:30:25 2007
@@ -21,15 +21,17 @@
        private Class defaultType;
        private Map overrides;
 
-       private ExpressionFactory factory = new 
de.odysseus.el.ExpressionFactoryImpl();
+       private ExpressionFactory factory;
 
        private ELContext elContext;
 
-       public JuelValueStack() {
+       public JuelValueStack(ExpressionFactory factory) {
+               this.factory = factory;
                setRoot(new CompoundRoot());
        }
 
-       public JuelValueStack(ValueStack vs) {
+       public JuelValueStack(ExpressionFactory factory, ValueStack vs) {
+               this.factory = factory;
                setRoot(new CompoundRoot(vs.getRoot()));
        }
 

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=592241&r1=592240&r2=592241&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
 Mon Nov  5 19:30:25 2007
@@ -1,5 +1,7 @@
 package com.googlecode.struts2juel;
 
+import javax.el.ExpressionFactory;
+
 import com.opensymphony.xwork2.util.ValueStack;
 import com.opensymphony.xwork2.util.ValueStackFactory;
 
@@ -7,12 +9,21 @@
  * Creates JuelValueStacks.
  */
 public class JuelValueStackFactory implements ValueStackFactory {
+       private ExpressionFactory factory;
 
+       public void initExpressionFactory() {
+               if (factory == null) {
+                       factory = 
ExpressionFactoryLocator.locateExpressFactory();
+               }
+       }
+       
     public ValueStack createValueStack() {
-        return new JuelValueStack();
+       initExpressionFactory();
+        return new JuelValueStack(factory);
     }
 
     public ValueStack createValueStack(ValueStack stack) {
-        return new JuelValueStack(stack);
+       initExpressionFactory();
+        return new JuelValueStack(factory, stack);
     }
 }


Reply via email to