Author: ekoneil Date: Sun Nov 28 10:15:40 2004 New Revision: 106823 URL: http://svn.apache.org/viewcvs?view=rev&rev=106823 Log: Checkpoint the rework the API to the NetUI expression language.
Previously, this used a propreitary object (ImplicitObjectBean) to transport implicit objects into the expression engine. Now, this is hidden behind a VariableResolver which can be decorated to expose a different API atop the JSP 2.0 standard VariableResolver. Callers of the expression engine now call methods on the ImplicitObjectUtil class to get a VR to use for reads and updates. Also: - generally cleanup the EL tests - delete empty directories fauxServlet and testBeans - remove un-needed entries from the netui config files This is stage one of a two stage process; left-over methods / classes will be deleted next. BB: self DRT: NetUI pass (win) BVT: NetUI pass (win) Removed: incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/script/el/util/ApplicationAttributeMap.java incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/script/el/util/PageContextAttributeMap.java incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/script/el/util/RequestParameterMap.java incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/script/ incubator/beehive/trunk/netui/test/src/fauxServlet/ incubator/beehive/trunk/netui/test/src/testBeans/ Modified: incubator/beehive/trunk/netui/build.xml incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/ProcessPopulate.java incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/script/ExpressionEvaluator.java incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/script/ExpressionEvaluatorFactory.java incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/script/common/BundleContext.java incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/script/common/BundleMap.java incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/script/common/ImplicitObjectUtil.java incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/script/el/ExpressionEvaluatorImpl.java incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/script/el/ExpressionParseException.java incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/script/el/ExpressionTerm.java incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/script/el/LiteralTerm.java incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/script/el/NetUIReadVariableResolver.java incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/script/el/NetUIUpdateVariableResolver.java incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/script/el/NetUIVariableResolver.java incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/script/el/ParsedExpression.java incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/script/el/Term.java incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/script/el/tokens/ExpressionToken.java incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/script/el/util/ParseUtils.java incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/script/el/util/RequestAttributeMap.java incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/script/el/util/SessionAttributeMap.java incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/model/DataGridModel.java incubator/beehive/trunk/netui/src/tags-html/org/apache/beehive/netui/tags/AbstractClassicTag.java incubator/beehive/trunk/netui/src/tags-html/org/apache/beehive/netui/tags/ExpressionHandling.java incubator/beehive/trunk/netui/src/webapp-template/config/netui-config-default.xml incubator/beehive/trunk/netui/src/webapp-template/default/WEB-INF/netui-config.xml incubator/beehive/trunk/netui/test/src/junitTests/org/apache/beehive/netui/test/script/AbstractExpressionTest.java incubator/beehive/trunk/netui/test/src/junitTests/org/apache/beehive/netui/test/script/AccessTest.java incubator/beehive/trunk/netui/test/src/junitTests/org/apache/beehive/netui/test/script/BundleScriptTest.java incubator/beehive/trunk/netui/test/src/junitTests/org/apache/beehive/netui/test/script/ExpressionTest.java incubator/beehive/trunk/netui/test/src/junitTests/org/apache/beehive/netui/test/script/ExpressionUpdateTest.java incubator/beehive/trunk/netui/test/src/junitTests/org/apache/beehive/netui/test/script/PageInputTest.java incubator/beehive/trunk/netui/test/src/junitTests/org/apache/beehive/netui/test/script/el/NetUIELCustomBindingContextTest.java incubator/beehive/trunk/netui/test/src/junitTests/org/apache/beehive/netui/test/script/el/NetUIELExpressionUpdateTest.java incubator/beehive/trunk/netui/test/src/junitTests/org/apache/beehive/netui/test/script/el/NetUIELPageInputTest.java incubator/beehive/trunk/netui/test/src/junitTests/org/apache/beehive/netui/test/servlet/FauxPageContext.java incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/WEB-INF/local-netui-config.xml Modified: incubator/beehive/trunk/netui/build.xml Url: http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/build.xml?view=diff&rev=106823&p1=incubator/beehive/trunk/netui/build.xml&r1=106822&p2=incubator/beehive/trunk/netui/build.xml&r2=106823 ============================================================================== --- incubator/beehive/trunk/netui/build.xml (original) +++ incubator/beehive/trunk/netui/build.xml Sun Nov 28 10:15:40 2004 @@ -81,7 +81,7 @@ </ant> </target> - <target name="undeploy.netui" + <target name="undeploy.netui" description="Undeploy the NetUI runtime from a fully-quaflified webapp directory specified with the property 'webapp.dir'"> <echo>Undeploy NetUI from webapp rooted at: ${webapp.dir}</echo> @@ -91,9 +91,8 @@ </ant> </target> - <target name="create.beehive.webapp" description="Utility target that will create a Beehive enabled webapp using the properties webapp.dir and context.path"> + <target name="create.netui.webapp" description="Utility target that will create a Beehive enabled webapp using the properties webapp.dir"> <fail unless="webapp.dir" message="The ${webapp.dir} property is unset"/> - <fail unless="context.path" message="The ${context.path} property is unset"/> <copy todir="${webapp.dir}" overwrite="true"> <fileset dir="${os.BEEHIVE_HOME}/netui/build/dist/webapp"/> Modified: incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/ProcessPopulate.java Url: http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/ProcessPopulate.java?view=diff&rev=106823&p1=incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/ProcessPopulate.java&r1=106822&p2=incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/ProcessPopulate.java&r2=106823 ============================================================================== --- incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/ProcessPopulate.java (original) +++ incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/ProcessPopulate.java Sun Nov 28 10:15:40 2004 @@ -17,26 +17,27 @@ */ package org.apache.beehive.netui.pageflow; -// java imports +import java.util.HashMap; +import java.util.Iterator; +import java.util.Map; +import javax.servlet.ServletException; +import javax.servlet.jsp.el.VariableResolver; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + import org.apache.beehive.netui.pageflow.internal.InternalUtils; import org.apache.beehive.netui.script.Expression; import org.apache.beehive.netui.script.ExpressionEvaluator; import org.apache.beehive.netui.script.ExpressionEvaluatorFactory; import org.apache.beehive.netui.script.ExpressionUpdateException; -import org.apache.beehive.netui.script.common.ImplicitObjectBean; +import org.apache.beehive.netui.script.el.NetUIUpdateVariableResolver; import org.apache.beehive.netui.script.common.ImplicitObjectUtil; import org.apache.beehive.netui.util.Bundle; import org.apache.beehive.netui.util.logging.Logger; + import org.apache.commons.beanutils.BeanUtils; import org.apache.struts.action.ActionForm; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import java.util.HashMap; -import java.util.Iterator; -import java.util.Map; - /** * Implement the processPopulate stage of the Struts / PageFlow request * processing lifecycle. The [EMAIL PROTECTED] #populate(HttpServletRequest, HttpServletResponse, ActionForm, boolean)} method is @@ -48,7 +49,6 @@ * Updates are performed on a key / value pair if the key is an expression; otherwise, * the updates are delegated to the Struts processPopulate infrastructure. * - * @exclude */ public class ProcessPopulate { @@ -181,15 +181,15 @@ return; } - // only needs to happen once; all of the objects herein are stable - ImplicitObjectBean bean = ImplicitObjectUtil.getImplicitObjects(request, response, form); + /* explicitly build a variable resolver that is used to provide objects that may be updated to the expression engine */ + VariableResolver variableResolver = ImplicitObjectUtil.getUpdateVariableResolver(form, request, response, true); String[] idMap = (String[]) params.get(IDMAP_PARAMETER_NAME); if (idMap != null) { expressionMap = IdMapper.getExpressionMap(idMap[0]); } - // TODO: are there any ordering issues with using an Iterator vs. an Enumeration here? + /* todo: are there any ordering issues with using an Iterator vs. an Enumeration here? */ Iterator iterator = params.keySet().iterator(); while (iterator.hasNext()) { @@ -250,14 +250,14 @@ { // common case, make this fast if (!requestHasPopulated) - ee.update(expr, updateValue, bean, true); + ee.update(expr, updateValue, variableResolver, true); // must check the expression to make sure pageFlow. and globalApp. don't get executed more than once else { Expression pe = ee.parseExpression(expr); String contextName = pe.getContext(); if (!contextName.equals(PAGE_FLOW_CONTEXT) && !contextName.equals(GLOBAL_APP_CONTEXT)) - ee.update(expr, updateValue, bean, true); + ee.update(expr, updateValue, variableResolver, true); } } } Modified: incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/script/ExpressionEvaluator.java Url: http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/script/ExpressionEvaluator.java?view=diff&rev=106823&p1=incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/script/ExpressionEvaluator.java&r1=106822&p2=incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/script/ExpressionEvaluator.java&r2=106823 ============================================================================== --- incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/script/ExpressionEvaluator.java (original) +++ incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/script/ExpressionEvaluator.java Sun Nov 28 10:15:40 2004 @@ -17,12 +17,7 @@ */ package org.apache.beehive.netui.script; -// java imports - -// internal imports -import org.apache.beehive.netui.script.common.ImplicitObjectBean; - -// external imports +import javax.servlet.jsp.el.VariableResolver; /** * An interface for evaluating expressions in NetUI. Different languages may implement @@ -35,12 +30,12 @@ * Evaluate an expression and return the result. * * @param expression the expression to evaluate - * @param implicitObjects the set of contexts that may be used in expression evaluation. This set + * @param variableResolver the set of contexts that may be used in expression evaluation. This set * is not necessarily complete as some objects that can be used as top-level expression contexts * may be contained within an object available in this JavaBean. * @throws ExpressionEvaluationException when an error occurs */ - public Object evaluateStrict(String expression, ImplicitObjectBean implicitObjects) + public Object evaluateStrict(String expression, VariableResolver variableResolver) throws ExpressionEvaluationException; /** @@ -51,14 +46,13 @@ * * @param expression the expression whose value to update * @param value the new value for the update - * @param implicitObjects the set of contexts that may be used in expression evaluation. This set + * @param variableResolver the set of contexts that may be used in expression evaluation. This set * is not necessarily complete as some objects that can be used as top-level expression contexts * may be contained within an object available in this JavaBean. * @param requestParameter a boolean that marks this update as occurring from data in the request, if * <code>true</code> or simply as a regular update. - * @throws ExcpressionUpdateException when an error occurs */ - public void update(String expression, Object value, ImplicitObjectBean implicitObjects, boolean requestParameter) + public void update(String expression, Object value, VariableResolver variableResolver, boolean requestParameter) throws ExpressionUpdateException; /** @@ -70,7 +64,6 @@ * @param oldContext the old context to replace, if present * @param newContext the new context to replace if the expression starts with the <code>oldContext</code> * @param lookupIndex an index used to qualify an expression into an array look-up. - * @throws ExcpressionUpdateException when an error occurs * @exclude */ public String changeContext(String expression, String oldContext, String newContext, int lookupIndex) @@ -82,7 +75,6 @@ * * @param contextName the new context * @param expression the expression to qualify - * @throws ExcpressionUpdateException when an error occurs * @exclude */ public String qualify(String contextName, String expression) @@ -113,7 +105,6 @@ * * @param expression the String expression to parse * @return the parsed expression - * @throws IllegalExpresspionException if the expression can not be parsed or is not atomic */ public Expression parseExpression(String expression); } Modified: incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/script/ExpressionEvaluatorFactory.java Url: http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/script/ExpressionEvaluatorFactory.java?view=diff&rev=106823&p1=incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/script/ExpressionEvaluatorFactory.java&r1=106822&p2=incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/script/ExpressionEvaluatorFactory.java&r2=106823 ============================================================================== --- incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/script/ExpressionEvaluatorFactory.java (original) +++ incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/script/ExpressionEvaluatorFactory.java Sun Nov 28 10:15:40 2004 @@ -17,20 +17,15 @@ */ package org.apache.beehive.netui.script; -// java imports import java.util.HashMap; import java.util.Map; -// internal imports import org.apache.beehive.netui.util.config.ConfigUtil; import org.apache.beehive.netui.util.config.bean.NetuiConfigDocument.NetuiConfig; import org.apache.beehive.netui.util.config.bean.ExpressionLanguages; import org.apache.beehive.netui.util.config.bean.ExpressionLanguages.ExpressionLanguage; - import org.apache.beehive.netui.util.logging.Logger; -// external imports - /** * Get an expression evaluator. */ @@ -38,18 +33,18 @@ { private static final Logger _logger = Logger.getInstance(ExpressionEvaluatorFactory.class); - private static final HashMap _factoryMap = new HashMap(); - private static ExpressionEngineFactory _defaultFactory; + private static final HashMap FACTORY_MAP = new HashMap(); + private static ExpressionEngineFactory DEFAULT_FACTORY; static { try { - _defaultFactory = initialize(_factoryMap); + DEFAULT_FACTORY = initialize(FACTORY_MAP); } catch(Exception e) { - _defaultFactory = null; + DEFAULT_FACTORY = null; if(_logger.isErrorEnabled()) _logger.error("An exception occurred loading the expression evaluator configuration. Cause: " + e, e); @@ -74,28 +69,21 @@ */ public final static ExpressionEvaluator getInstance(String name) { - assert _defaultFactory != null; + assert DEFAULT_FACTORY != null; + assert FACTORY_MAP != null; if(name == null) - return _defaultFactory.getInstance(); - else - { - assert _factoryMap != null; - - if(_factoryMap.containsKey(name)) - return ((ExpressionEngineFactory)_factoryMap.get(name)).getInstance(); - } + return DEFAULT_FACTORY.getInstance(); + else if(FACTORY_MAP.containsKey(name)) + return ((ExpressionEngineFactory)FACTORY_MAP.get(name)).getInstance(); String msg = "An ExpressionEvaluator named \"" + name + "\" is not available."; - if(_logger.isErrorEnabled()) _logger.error(msg); + if(_logger.isErrorEnabled()) + _logger.error(msg); throw new IllegalArgumentException(msg); } - /** - * - * - */ private static final ExpressionEngineFactory initialize(Map factoryMap) { assert factoryMap != null; @@ -122,8 +110,8 @@ } catch(ClassNotFoundException cnf) { - if(_logger.isInfoEnabled()) - _logger.info("Could not create an ExpressionEngineFactory for type \"" + className + + if(_logger.isWarnEnabled()) + _logger.warn("Could not create an ExpressionEngineFactory for type \"" + className + "\" because the implementation class could not be found."); continue; @@ -139,19 +127,20 @@ } if(factoryMap.containsKey(name)) - if(_logger.isWarnEnabled()) _logger.warn("Overwriting a previously defined ExpressionEngineFactory named \"" + name + - "\" with a new ExpressionEngineFactory of type \"" + className + "\""); + if(_logger.isWarnEnabled()) + _logger.warn("Overwriting a previously defined ExpressionEngineFactory named \"" + name + + "\" with a new ExpressionEngineFactory of type \"" + className + "\""); else _logger.info("Adding an ExpressionEngineFactory named \"" + name + "\" with implementation \"" + className + "\""); factoryMap.put(name, factory); } - ExpressionEngineFactory def = null; + ExpressionEngineFactory defaultEngineFactory = null; String defaultLanguage = languages.getDefaultLanguage(); if(defaultLanguage != null) { - def = (ExpressionEngineFactory)factoryMap.get(defaultLanguage); - if(def != null) + defaultEngineFactory = (ExpressionEngineFactory)factoryMap.get(defaultLanguage); + if(defaultEngineFactory != null) { if(_logger.isInfoEnabled()) _logger.info("Using a default expression evaluator of type \"" + factoryMap.get(defaultLanguage).getClass().getName() + "\""); @@ -161,6 +150,7 @@ String msg = "The default ExpressionEvaluator named \"" + defaultLanguage + "\" was specified, but the ExpressionEngineFactory could not be found."; if(_logger.isWarnEnabled()) _logger.warn(msg); + throw new RuntimeException(msg); } } @@ -171,6 +161,6 @@ throw new RuntimeException(msg); } - return def; + return defaultEngineFactory; } } Modified: incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/script/common/BundleContext.java Url: http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/script/common/BundleContext.java?view=diff&rev=106823&p1=incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/script/common/BundleContext.java&r1=106822&p2=incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/script/common/BundleContext.java&r2=106823 ============================================================================== --- incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/script/common/BundleContext.java (original) +++ incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/script/common/BundleContext.java Sun Nov 28 10:15:40 2004 @@ -17,7 +17,6 @@ */ package org.apache.beehive.netui.script.common; -// java imports import java.util.Enumeration; import java.util.HashMap; import java.util.Iterator; @@ -26,10 +25,8 @@ import java.util.MissingResourceException; import java.util.ResourceBundle; -// internal imports import org.apache.beehive.netui.util.logging.Logger; -// external imports import org.apache.struts.util.MessageResources; /** Modified: incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/script/common/BundleMap.java Url: http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/script/common/BundleMap.java?view=diff&rev=106823&p1=incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/script/common/BundleMap.java&r1=106822&p2=incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/script/common/BundleMap.java&r2=106823 ============================================================================== --- incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/script/common/BundleMap.java (original) +++ incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/script/common/BundleMap.java Sun Nov 28 10:15:40 2004 @@ -17,22 +17,18 @@ */ package org.apache.beehive.netui.script.common; -// java imports import java.util.ArrayList; import java.util.Set; import java.util.Iterator; import java.util.Locale; import java.util.Enumeration; - import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpSession; import javax.servlet.ServletContext; -// internal imports import org.apache.beehive.netui.script.common.BundleContext.BundleNode; import org.apache.beehive.netui.util.logging.Logger; -// external imports import org.apache.struts.Globals; import org.apache.struts.config.MessageResourcesConfig; import org.apache.struts.config.ModuleConfig; @@ -51,7 +47,7 @@ public class BundleMap extends AbstractScriptableMap { - private Logger _logger = Logger.getInstance(BundleMap.class); + private static final Logger _logger = Logger.getInstance(BundleMap.class); private BundleContext _bundleContext = null; private HttpServletRequest _request = null; Modified: incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/script/common/ImplicitObjectUtil.java Url: http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/script/common/ImplicitObjectUtil.java?view=diff&rev=106823&p1=incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/script/common/ImplicitObjectUtil.java&r1=106822&p2=incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/script/common/ImplicitObjectUtil.java&r2=106823 ============================================================================== --- incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/script/common/ImplicitObjectUtil.java (original) +++ incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/script/common/ImplicitObjectUtil.java Sun Nov 28 10:15:40 2004 @@ -17,35 +17,29 @@ */ package org.apache.beehive.netui.script.common; -// java imports import java.util.LinkedHashMap; import java.util.Iterator; import java.util.Map; - +import java.util.Collections; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; -import javax.servlet.ServletContext; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; -import javax.servlet.jsp.PageContext; import javax.servlet.jsp.JspContext; +import javax.servlet.jsp.PageContext; import javax.servlet.jsp.el.VariableResolver; -import javax.servlet.jsp.tagext.Tag; -import javax.servlet.jsp.tagext.JspTag; -// internal imports import org.apache.beehive.netui.pageflow.*; import org.apache.beehive.netui.pageflow.internal.AnyBeanActionForm; import org.apache.beehive.netui.pageflow.internal.InternalUtils; - import org.apache.beehive.netui.util.config.ConfigUtil; import org.apache.beehive.netui.util.config.bean.NetuiConfigDocument.NetuiConfig; import org.apache.beehive.netui.util.config.bean.ExpressionLanguages; import org.apache.beehive.netui.util.config.bean.ExpressionLanguages.ExpressionLanguage; import org.apache.beehive.netui.util.config.bean.BindingContexts; import org.apache.beehive.netui.util.logging.Logger; +import org.apache.beehive.netui.script.el.NetUIUpdateVariableResolver; -// external imports import org.apache.struts.action.ActionForm; /** @@ -54,7 +48,7 @@ public class ImplicitObjectUtil { private static final Logger _logger = Logger.getInstance(ImplicitObjectUtil.class); - private static final String IMPLICIT_OBJECT_BEAN = (ImplicitObjectBean.class).getName() + "_KEY"; + private static final String PAGE_FLOW_IMPLICIT_OBJECT_KEY = "pageFlow"; private static final String SHARED_FLOW_IMPLICIT_OBJECT_KEY = "sharedFlow"; private static final String BUNDLE_IMPLICIT_OBJECT_KEY = "bundle"; @@ -82,7 +76,9 @@ request.setAttribute(PAGE_FLOW_IMPLICIT_OBJECT_KEY, pageFlow); if(fbb != null) request.setAttribute(BACKING_IMPLICIT_OBJECT_KEY, fbb); - request.setAttribute(PAGE_INPUT_IMPLICIT_OBJECT_KEY, InternalUtils.getPageInputMap(request)); + + Map map = InternalUtils.getPageInputMap(request); + request.setAttribute(PAGE_INPUT_IMPLICIT_OBJECT_KEY, map != null ? map : Collections.EMPTY_MAP); } public static final void loadSharedFlow(ServletRequest request, SharedFlowController sharedFlow) @@ -96,37 +92,14 @@ servletRequest.setAttribute(BUNDLE_IMPLICIT_OBJECT_KEY, bundleMap); } - public static final ImplicitObjectBean getImplicitObjects(PageContext pageContext, JspTag currentTag) + public static final Object unwrapForm(Object form) { - ServletRequest request = pageContext.getRequest(); - ImplicitObjectBean bean = (ImplicitObjectBean)request.getAttribute(IMPLICIT_OBJECT_BEAN); - - if(bean == null) - { - bean = new ImplicitObjectBean(); - request.setAttribute(IMPLICIT_OBJECT_BEAN, bean); - } - - bean.setPageContext(pageContext); - - // @todo: need to be able to clean-up the ActionForm. right now, this update is done for all - // calls to this method so that the action form is always 'up to date' in the ImplicitObjectBean - // for every call. It might be possible to move this into the form tag to add / remove as needed. - ActionForm actionForm = ((ActionForm)request.getAttribute(org.apache.struts.taglib.html.Constants.BEAN_KEY)); - bean.setActionForm(unwrapForm(actionForm)); - bean.setCurrentTag(currentTag); - - return bean; - } + if(_logger.isDebugEnabled() && form instanceof AnyBeanActionForm) + _logger.debug("using form of type: " + ((AnyBeanActionForm)form != null ? ((AnyBeanActionForm)form).getClass().getName() : "null")); - public static final ImplicitObjectBean getImplicitObjects(ServletRequest request, ServletResponse response, ActionForm actionForm) - { - ImplicitObjectBean bean = new ImplicitObjectBean(); - bean.setServletRequest(request); - bean.setServletResponse(response); - bean.setActionForm(unwrapForm(actionForm)); - - return bean; + if(form instanceof AnyBeanActionForm) + return ((AnyBeanActionForm)form).getBean(); + else return form; } public static final SharedFlowController getSharedFlow(ServletRequest request, ServletResponse response) @@ -167,7 +140,7 @@ public static final GlobalApp getGlobalApp(ServletRequest request, ServletResponse response) { - assert request instanceof HttpServletRequest; + assert request instanceof HttpServletRequest; GlobalApp ga = PageFlowUtils.getGlobalApp((HttpServletRequest)request); @@ -205,6 +178,28 @@ } /** + * + */ + public static final VariableResolver getUpdateVariableResolver(ServletRequest request, ServletResponse response, boolean isHandlingPost) { + Object form = ImplicitObjectUtil.unwrapForm(request.getAttribute(org.apache.struts.taglib.html.Constants.BEAN_KEY)); + + /* todo: need to provide get(Read|Update)VariableResolver methods on the ExpressionEngineFactory */ + return new NetUIUpdateVariableResolver(form, request, response, isHandlingPost); + } + + public static final VariableResolver getUpdateVariableResolver(Object form, ServletRequest request, ServletResponse response, boolean isHandlingPost) { + Object realForm = ImplicitObjectUtil.unwrapForm(form); + + /* todo: need to provide get(Read|Update)VariableResolver methods on the ExpressionEngineFactory */ + return new NetUIUpdateVariableResolver(realForm, request, response, isHandlingPost); + } + + public static final VariableResolver getReadVariableResolver(PageContext pageContext) { + assert pageContext != null; + return pageContext.getVariableResolver(); + } + + /** * Read entires from the netui-config.xml file and add the objects * to this implicit object map. */ @@ -294,15 +289,5 @@ } return map; - } - - private static final Object unwrapForm(Object form) - { - if(_logger.isDebugEnabled() && form instanceof AnyBeanActionForm) - _logger.debug("using form of type: " + ((AnyBeanActionForm)form != null ? ((AnyBeanActionForm)form).getClass().getName() : "null")); - - if(form instanceof AnyBeanActionForm) - return ((AnyBeanActionForm)form).getBean(); - else return form; } } Modified: incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/script/el/ExpressionEvaluatorImpl.java Url: http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/script/el/ExpressionEvaluatorImpl.java?view=diff&rev=106823&p1=incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/script/el/ExpressionEvaluatorImpl.java&r1=106822&p2=incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/script/el/ExpressionEvaluatorImpl.java&r2=106823 ============================================================================== --- incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/script/el/ExpressionEvaluatorImpl.java (original) +++ incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/script/el/ExpressionEvaluatorImpl.java Sun Nov 28 10:15:40 2004 @@ -17,30 +17,24 @@ */ package org.apache.beehive.netui.script.el; -// java imports - -// internal imports -import org.apache.beehive.netui.script.el.util.ParseUtils; +import javax.servlet.jsp.el.VariableResolver; import org.apache.beehive.netui.script.Expression; import org.apache.beehive.netui.script.ExpressionEvaluator; import org.apache.beehive.netui.script.ExpressionEvaluationException; import org.apache.beehive.netui.script.ExpressionUpdateException; import org.apache.beehive.netui.script.IllegalExpressionException; -import org.apache.beehive.netui.script.common.ImplicitObjectBean; - +import org.apache.beehive.netui.script.el.util.ParseUtils; import org.apache.beehive.netui.util.logging.Logger; -// external imports - /** * */ public class ExpressionEvaluatorImpl implements ExpressionEvaluator { - private static Logger _logger = Logger.getInstance(ExpressionEvaluatorImpl.class); - private static final boolean debugEnabled = _logger.isDebugEnabled(); + private static final Logger _logger = Logger.getInstance(ExpressionEvaluatorImpl.class); + private static final boolean DEBUG_ENABLED = _logger.isDebugEnabled(); public static class NetUIELEngineFactory extends org.apache.beehive.netui.script.ExpressionEngineFactory @@ -51,25 +45,21 @@ } } - public Object evaluateStrict(String expression, ImplicitObjectBean bean) + public Object evaluateStrict(String expression, VariableResolver variableResolver) throws ExpressionEvaluationException { - NetUIVariableResolver vr = null; + NetUIReadVariableResolver vr = null; try { - // @TODO: need to cache VariableResolvers for a request -- need a request ExpressionEvaluationContext - vr = new NetUIReadVariableResolver(bean.getActionForm(), - bean.getCurrentTag(), - bean.getPageContext()); - + /* todo: is there compelling enough reson to keep this code here? */ + vr = new NetUIReadVariableResolver(variableResolver); + return ParseUtils.evaluate(expression, vr); } catch(Exception e) { - if(debugEnabled) - { + if(DEBUG_ENABLED) _logger.debug("Expression evaluation failed in NetUIEL. Cause: " + e, e); - } Exception act = e; @@ -77,40 +67,38 @@ String msg = "Caught exception when evaluating expression \"" + expression + "\" with available binding contexts " + contextStr + ". Root cause: " + ParseUtils.getRootCause(act).toString(); - if(_logger.isErrorEnabled()) _logger.error(msg, act); + if(_logger.isErrorEnabled()) + _logger.error(msg, act); - ExpressionEvaluationException eee = new ExpressionEvaluationException(msg, expression, act); - - throw eee; + throw new ExpressionEvaluationException(msg, expression, act); } } - // TODO: need to cache VariableResolvers for a request -- need a request ExpressionEvaluationContext - public void update(String expression, Object value, ImplicitObjectBean bean, boolean requestParameter) + public void update(String expression, Object value, VariableResolver variableResolver, boolean requestParameter) throws ExpressionUpdateException { - NetUIVariableResolver vr = null; + assert variableResolver instanceof NetUIVariableResolver; + + NetUIVariableResolver vr = (NetUIVariableResolver)variableResolver; + try { - if(debugEnabled) _logger.debug("Update expression \"" + expression + "\""); - - vr = new NetUIUpdateVariableResolver(bean.getActionForm(), - bean.getServletRequest(), - bean.getServletResponse(), - requestParameter); - + if(DEBUG_ENABLED) + _logger.debug("Update expression \"" + expression + "\""); + ParseUtils.update(expression, value, vr); } catch(Exception e) { - if(debugEnabled) + if(DEBUG_ENABLED) _logger.debug("Expression update failed in NetUIEL. Cause: " + e, e); String contextStr = ParseUtils.getContextString(vr.getAvailableVariables()); String msg = "Exception when attempting to update the expression \"" + expression + "\" with available binding contexts " + contextStr + ". Root cause: " + ParseUtils.getRootCause(e).toString(); - if(_logger.isErrorEnabled()) _logger.error(msg, e); + if(_logger.isErrorEnabled()) + _logger.error(msg, e); ExpressionUpdateException eee = new ExpressionUpdateException(msg, expression, e); eee.setLocalizedMessage(msg); @@ -119,7 +107,7 @@ } } - // TODO: fix the lookup index to be Object + /* todo: fix the lookup index to be Object */ public String changeContext(String expression, String oldContext, String newContext, int lookupIndex) throws ExpressionEvaluationException { @@ -183,12 +171,14 @@ try { ParsedExpression pe = ParseUtils.parse(expression); - + assert pe != null; return pe.containsExpression(); } catch(Exception e) { - if(_logger.isErrorEnabled()) _logger.error("Exception checking for expressions in \"" + expression + "\"", e); + if(_logger.isErrorEnabled()) + _logger.error("Exception checking for expressions in \"" + expression + "\"", e); + return false; } } @@ -198,7 +188,7 @@ if(isExpression(expression)) { ParsedExpression pe = ParseUtils.parse(expression); - + assert pe != null; return pe.getAtomicExpressionTerm(); } else throw new IllegalExpressionException("The expression \"" + expression + "\" can not be parsed as it is not an atomic expression."); Modified: incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/script/el/ExpressionParseException.java Url: http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/script/el/ExpressionParseException.java?view=diff&rev=106823&p1=incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/script/el/ExpressionParseException.java&r1=106822&p2=incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/script/el/ExpressionParseException.java&r2=106823 ============================================================================== --- incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/script/el/ExpressionParseException.java (original) +++ incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/script/el/ExpressionParseException.java Sun Nov 28 10:15:40 2004 @@ -17,12 +17,6 @@ */ package org.apache.beehive.netui.script.el; -// java imports - -// internal imports - -// external imports - /** * */ Modified: incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/script/el/ExpressionTerm.java Url: http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/script/el/ExpressionTerm.java?view=diff&rev=106823&p1=incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/script/el/ExpressionTerm.java&r1=106822&p2=incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/script/el/ExpressionTerm.java&r2=106823 ============================================================================== --- incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/script/el/ExpressionTerm.java (original) +++ incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/script/el/ExpressionTerm.java Sun Nov 28 10:15:40 2004 @@ -17,16 +17,12 @@ */ package org.apache.beehive.netui.script.el; -// java imports import java.util.ArrayList; import java.util.Collections; import java.util.Iterator; import java.util.List; -// internal imports import org.apache.beehive.netui.script.Expression; - -import org.apache.beehive.netui.script.el.NetUIVariableResolver; import org.apache.beehive.netui.script.el.tokens.ArrayIndexToken; import org.apache.beehive.netui.script.el.tokens.ContextToken; import org.apache.beehive.netui.script.el.tokens.ExpressionToken; @@ -34,10 +30,7 @@ import org.apache.beehive.netui.script.el.tokens.MapKeyToken; import org.apache.beehive.netui.script.el.util.BindingContext; import org.apache.beehive.netui.script.el.util.ParseUtils; - import org.apache.beehive.netui.util.logging.Logger; - -// external imports /** * Modified: incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/script/el/LiteralTerm.java Url: http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/script/el/LiteralTerm.java?view=diff&rev=106823&p1=incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/script/el/LiteralTerm.java&r1=106822&p2=incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/script/el/LiteralTerm.java&r2=106823 ============================================================================== --- incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/script/el/LiteralTerm.java (original) +++ incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/script/el/LiteralTerm.java Sun Nov 28 10:15:40 2004 @@ -17,12 +17,7 @@ */ package org.apache.beehive.netui.script.el; -// java imports - -// internal imports import org.apache.beehive.netui.util.logging.Logger; - -// external imports /** * Modified: incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/script/el/NetUIReadVariableResolver.java Url: http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/script/el/NetUIReadVariableResolver.java?view=diff&rev=106823&p1=incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/script/el/NetUIReadVariableResolver.java&r1=106822&p2=incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/script/el/NetUIReadVariableResolver.java&r2=106823 ============================================================================== --- incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/script/el/NetUIReadVariableResolver.java (original) +++ incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/script/el/NetUIReadVariableResolver.java Sun Nov 28 10:15:40 2004 @@ -4,9 +4,9 @@ * Licensed 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. @@ -17,112 +17,42 @@ */ package org.apache.beehive.netui.script.el; -// java imports -import java.util.Map; - -import javax.servlet.jsp.PageContext; -import javax.servlet.jsp.tagext.Tag; -import javax.servlet.jsp.tagext.JspTag; import javax.servlet.jsp.el.VariableResolver; -// internal imports import org.apache.beehive.netui.script.IllegalExpressionException; - -import org.apache.beehive.netui.script.common.ImplicitObjectUtil; -import org.apache.beehive.netui.script.common.ScriptablePageInput; - -import org.apache.beehive.netui.script.el.util.ApplicationAttributeMap; -import org.apache.beehive.netui.script.el.util.PageContextAttributeMap; -import org.apache.beehive.netui.script.el.util.RequestAttributeMap; -import org.apache.beehive.netui.script.el.util.RequestParameterMap; -import org.apache.beehive.netui.script.el.util.SessionAttributeMap; - import org.apache.beehive.netui.util.logging.Logger; -// external imports - /** * */ public class NetUIReadVariableResolver - extends NetUIVariableResolver -{ + extends NetUIVariableResolver { + private static final Logger _logger = Logger.getInstance(NetUIReadVariableResolver.class); - private static final Map _contextFactories; - static - { - _contextFactories = ImplicitObjectUtil.initialize("netuiel"); - } + private VariableResolver _vr = null; - private PageContext _pc = null; - private JspTag _currentTag = null; - private Object _form = null; - - public NetUIReadVariableResolver(Object form, JspTag currentTag, PageContext pc) - { - _pc = pc; - _form = form; - _currentTag = currentTag; + public NetUIReadVariableResolver(VariableResolver vr) { + assert vr != null; + _vr = vr; } - public Object resolveVariable(String name) - { - // use JSP 2.0 EL Implicit Object names - if(name.equals("pageScope")) - return new PageContextAttributeMap(_pc); - else if(name.equals("requestScope")) - return new RequestAttributeMap(_pc.getRequest()); - else if(name.equals("sessionScope")) - return new SessionAttributeMap(_pc.getSession()); - else if(name.equals("applicationScope")) - return new ApplicationAttributeMap(_pc.getServletContext()); - else if(name.equals("param")) - return new RequestParameterMap(_pc.getRequest()); - // NetUI Implicit Objects - else if(name.equals("actionForm")) - return _form; - else if(name.equals("pageFlow")) - return getPageFlow(_pc.getRequest(), _pc.getResponse()); - else if(name.equals("globalApp")) - return getGlobalApp(_pc.getRequest(), _pc.getResponse()); - else if(name.equals("sharedFlow")) - return getSharedFlow(_pc.getRequest(), _pc.getResponse()); - else if(name.equals("bundle")) - return getScriptableObject(_contextFactories, this, name); - else if(name.equals("container")) - return getScriptableObject(_contextFactories, this, name); - else if(name.equals("pageInput")) - return new ScriptablePageInput(_pc.getRequest()); - // in order to look-up ContextFactories that are used to create ScriptableObjects, - // need to call the contextFactory map to find those that aren't known about - // explicitly here. The statements above are used to look-up binding contexts - // that are well-known because it's faster than dropping into the - // ContextFactory map for each lookup -- optimizing for the common case. - else if(_contextFactories != null && _contextFactories.containsKey(name)) - { - return getScriptableObject(_contextFactories, this, name); - } - else - { + public Object resolveVariable(String name) { + + try { + return _vr.resolveVariable(name); + } catch (javax.servlet.jsp.el.ELException ele) { RuntimeException re = new RuntimeException("Could not resolve variable named \"" + name + "\"", new IllegalExpressionException()); - if(_logger.isErrorEnabled()) _logger.error("", re); - throw re; - } - } - public String[] getAvailableVariables() - { - return new String[] {"actionForm", "pageFlow", "globalApp", "request", "session", "application", "pageContext", "bundle", "container", "url", "pageInput"}; - } + if (_logger.isErrorEnabled()) + _logger.error("", re); - public JspTag getCurrentTag() - { - return _currentTag; + throw re; + } } - private static final Object getScriptableObject(Map contextFactories, VariableResolver vr, String name) - { - return ImplicitObjectUtil.getImplicitObject(contextFactories, vr, name); + public String[] getAvailableVariables() { + /* todo: implement this correctly! */ + return new String[]{"actionForm", "pageFlow", "globalApp", "request", "session", "application", "pageContext", "bundle", "container", "url", "pageInput"}; } } Modified: incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/script/el/NetUIUpdateVariableResolver.java Url: http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/script/el/NetUIUpdateVariableResolver.java?view=diff&rev=106823&p1=incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/script/el/NetUIUpdateVariableResolver.java&r1=106822&p2=incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/script/el/NetUIUpdateVariableResolver.java&r2=106823 ============================================================================== --- incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/script/el/NetUIUpdateVariableResolver.java (original) +++ incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/script/el/NetUIUpdateVariableResolver.java Sun Nov 28 10:15:40 2004 @@ -20,24 +20,30 @@ import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import javax.servlet.http.HttpServletRequest; +import javax.servlet.jsp.el.VariableResolver; import org.apache.beehive.netui.script.IllegalExpressionException; +import org.apache.beehive.netui.script.common.ImplicitObjectUtil; import org.apache.beehive.netui.script.el.util.RequestAttributeMap; import org.apache.beehive.netui.script.el.util.SessionAttributeMap; import org.apache.beehive.netui.util.logging.Logger; +import org.apache.beehive.netui.pageflow.SharedFlowController; +import org.apache.beehive.netui.pageflow.PageFlowController; +import org.apache.beehive.netui.pageflow.GlobalApp; /** * */ public class NetUIUpdateVariableResolver extends NetUIVariableResolver + implements VariableResolver { private static final Logger _logger = Logger.getInstance(NetUIVariableResolver.class); + private boolean _requestParameter = true; + private Object _form = null; private ServletRequest _request = null; private ServletResponse _response = null; - private Object _form = null; - private boolean _requestParameter = true; public NetUIUpdateVariableResolver(Object form, ServletRequest request, ServletResponse response, boolean requestParameter) { @@ -68,7 +74,7 @@ else if(name.equals("sessionScope")) { if(_requestParameter == false) - return new SessionAttributeMap(((HttpServletRequest)_request).getSession()); + return new SessionAttributeMap(((HttpServletRequest)_request).getSession()); else throw new IllegalExpressionException("The session data binding context can not be updated from a request parameter."); } // @bug: need to get the ServletContext from somewhere @@ -81,7 +87,9 @@ else { String msg = "Could not resolve variable named \"" + name + "\" for an expression update."; - _logger.error(msg); + if(_logger.isErrorEnabled()) + _logger.error(msg); + throw new IllegalExpressionException(msg); } } @@ -91,5 +99,20 @@ if(_requestParameter) return new String[] {"actionForm", "pageFlow", "globalApp"}; else return new String[] {"actionForm", "pageFlow", "globalApp", "request", "session", "application"}; + } + + private static final SharedFlowController getSharedFlow(ServletRequest request, ServletResponse response) + { + return ImplicitObjectUtil.getSharedFlow(request, response); + } + + private static final PageFlowController getPageFlow(ServletRequest request, ServletResponse response) + { + return ImplicitObjectUtil.getPageFlow(request, response); + } + + private static final GlobalApp getGlobalApp(ServletRequest request, ServletResponse response) + { + return ImplicitObjectUtil.getGlobalApp(request, response); } } Modified: incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/script/el/NetUIVariableResolver.java Url: http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/script/el/NetUIVariableResolver.java?view=diff&rev=106823&p1=incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/script/el/NetUIVariableResolver.java&r1=106822&p2=incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/script/el/NetUIVariableResolver.java&r2=106823 ============================================================================== --- incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/script/el/NetUIVariableResolver.java (original) +++ incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/script/el/NetUIVariableResolver.java Sun Nov 28 10:15:40 2004 @@ -17,22 +17,14 @@ */ package org.apache.beehive.netui.script.el; -// java imports import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; - import javax.servlet.jsp.el.VariableResolver; -// internal imports -import org.apache.beehive.netui.script.common.ImplicitObjectUtil; - import org.apache.beehive.netui.pageflow.GlobalApp; import org.apache.beehive.netui.pageflow.PageFlowController; import org.apache.beehive.netui.pageflow.SharedFlowController; - -import org.apache.beehive.netui.util.logging.Logger; - -// external imports +import org.apache.beehive.netui.script.common.ImplicitObjectUtil; /** * @@ -40,27 +32,7 @@ public abstract class NetUIVariableResolver implements VariableResolver { - private static final Logger _logger = Logger.getInstance(NetUIVariableResolver.class); - - public Object resolveVariable(String name) - { - return null; - } + public abstract Object resolveVariable(String name); public abstract String[] getAvailableVariables(); - - protected SharedFlowController getSharedFlow(ServletRequest request, ServletResponse response) - { - return ImplicitObjectUtil.getSharedFlow(request, response); - } - - protected PageFlowController getPageFlow(ServletRequest request, ServletResponse response) - { - return ImplicitObjectUtil.getPageFlow(request, response); - } - - protected GlobalApp getGlobalApp(ServletRequest request, ServletResponse response) - { - return ImplicitObjectUtil.getGlobalApp(request, response); - } } Modified: incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/script/el/ParsedExpression.java Url: http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/script/el/ParsedExpression.java?view=diff&rev=106823&p1=incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/script/el/ParsedExpression.java&r1=106822&p2=incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/script/el/ParsedExpression.java&r2=106823 ============================================================================== --- incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/script/el/ParsedExpression.java (original) +++ incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/script/el/ParsedExpression.java Sun Nov 28 10:15:40 2004 @@ -17,15 +17,10 @@ */ package org.apache.beehive.netui.script.el; -// java imports import java.util.ArrayList; -import java.util.List; -// internal imports import org.apache.beehive.netui.util.logging.Logger; -// external imports - /** * */ @@ -33,12 +28,11 @@ { private static Logger _logger = Logger.getInstance(ParsedExpression.class); - // this needs to be fast - private static final boolean debugEnabled = _logger.isDebugEnabled(); - + /* cache the debug status; this needs to be _fast_ */ + private static final boolean DEBUG_ENABLED = _logger.isDebugEnabled(); private static final String EMPTY_STRING = ""; - private List terms = new ArrayList(); + private ArrayList<Term> terms = new ArrayList<Term>(3); private boolean isExpression = false; private boolean containsExpression = false; @@ -100,7 +94,9 @@ public Term getTerm(int i) { - // @TODO: error checking + assert termArray != null; + assert i > 0 && i < termArray.length; + return termArray[i]; } @@ -111,11 +107,13 @@ public Object evaluate(NetUIVariableResolver vr) { - if(debugEnabled) _logger.debug("evaluate expression: " + exprStr); + if(DEBUG_ENABLED) + _logger.debug("evaluate expression: " + exprStr); if(isExpression) { - if(debugEnabled) _logger.debug("atoimc expression"); + if(DEBUG_ENABLED) + _logger.debug("atoimc expression"); return atomicExpression.evaluate(vr); } @@ -125,8 +123,9 @@ for(int i = 0; i < terms.size(); i++) { - if(debugEnabled) _logger.debug("term[" + i + "]: " + termArray[i].getClass().getName() + - " expression string: " + termArray[i].getExpressionString()); + if(DEBUG_ENABLED) + _logger.debug("term[" + i + "]: " + termArray[i].getClass().getName() + + " expression string: " + termArray[i].getExpressionString()); Object result = termArray[i].evaluate(vr); @@ -142,7 +141,8 @@ if(!isExpression) { String msg = "The expression can not be updated because it is not atomic."; - if(_logger.isErrorEnabled()) _logger.error(msg); + if(_logger.isErrorEnabled()) + _logger.error(msg); throw new RuntimeException(msg); } @@ -155,7 +155,8 @@ { String msg = "The expression can not change context because it is not atomic."; - if(_logger.isErrorEnabled()) _logger.error(msg); + if(_logger.isErrorEnabled()) + _logger.error(msg); throw new RuntimeException(msg); } @@ -165,7 +166,7 @@ public String qualify(String contextName) { - // @TODO: could check to see if first term is literal + /* todo: could check to see if first term is literal */ return "{" + contextName + "." + getExpressionString() + "}"; } @@ -180,11 +181,9 @@ public String toString() { - StringBuffer buf = new StringBuffer(); - for(int i = 0; i < terms.size(); i++) - { - buf.append(terms.get(i).toString()); - } - return buf.toString(); + StringBuilder builder = new StringBuilder(); + for(Term term : terms) + builder.append(term.toString()); + return builder.toString(); } } Modified: incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/script/el/Term.java Url: http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/script/el/Term.java?view=diff&rev=106823&p1=incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/script/el/Term.java&r1=106822&p2=incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/script/el/Term.java&r2=106823 ============================================================================== --- incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/script/el/Term.java (original) +++ incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/script/el/Term.java Sun Nov 28 10:15:40 2004 @@ -17,12 +17,9 @@ */ package org.apache.beehive.netui.script.el; -// java imports - -// internal imports - -// externaml imprts - +/** + * + */ public interface Term { public Object evaluate(NetUIVariableResolver vr); Modified: incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/script/el/tokens/ExpressionToken.java Url: http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/script/el/tokens/ExpressionToken.java?view=diff&rev=106823&p1=incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/script/el/tokens/ExpressionToken.java&r1=106822&p2=incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/script/el/tokens/ExpressionToken.java&r2=106823 ============================================================================== --- incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/script/el/tokens/ExpressionToken.java (original) +++ incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/script/el/tokens/ExpressionToken.java Sun Nov 28 10:15:40 2004 @@ -17,21 +17,15 @@ */ package org.apache.beehive.netui.script.el.tokens; -// java imports import java.lang.reflect.Array; import java.lang.reflect.Field; import java.lang.reflect.Method; - import java.util.List; import java.util.Map; -// internal imports import org.apache.beehive.netui.util.cache.PropertyCache; import org.apache.beehive.netui.util.logging.Logger; - import org.apache.beehive.netui.script.el.util.ParseUtils; - -// external imports /** * Deleted: /incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/script/el/util/ApplicationAttributeMap.java Url: http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/script/el/util/ApplicationAttributeMap.java?view=auto&rev=106822 ============================================================================== Deleted: /incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/script/el/util/PageContextAttributeMap.java Url: http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/script/el/util/PageContextAttributeMap.java?view=auto&rev=106822 ============================================================================== Modified: incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/script/el/util/ParseUtils.java Url: http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/script/el/util/ParseUtils.java?view=diff&rev=106823&p1=incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/script/el/util/ParseUtils.java&r1=106822&p2=incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/script/el/util/ParseUtils.java&r2=106823 ============================================================================== --- incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/script/el/util/ParseUtils.java (original) +++ incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/script/el/util/ParseUtils.java Sun Nov 28 10:15:40 2004 @@ -17,37 +17,22 @@ */ package org.apache.beehive.netui.script.el.util; -// java imports -import java.io.PrintWriter; -import java.io.Reader; import java.io.StringReader; -import java.io.StringWriter; - import java.lang.reflect.Array; import java.lang.reflect.Field; import java.lang.reflect.Method; - import java.util.HashMap; -import java.util.Map; -// internal imports import org.apache.beehive.netui.script.el.parser.NetUIELParser; -import org.apache.beehive.netui.script.el.ExpressionTerm; import org.apache.beehive.netui.script.el.NetUIVariableResolver; import org.apache.beehive.netui.script.el.ParsedExpression; import org.apache.beehive.netui.script.el.ExpressionParseException; - import org.apache.beehive.netui.script.el.parser.TokenMgrError; import org.apache.beehive.netui.script.el.parser.ParseException; - import org.apache.beehive.netui.util.cache.PropertyCache; - import org.apache.beehive.netui.util.type.TypeUtils; - import org.apache.beehive.netui.util.logging.Logger; -// external imports - /** * */ @@ -55,29 +40,30 @@ { private static final Logger _logger = Logger.getInstance(ParseUtils.class); - private static final Map parsedCache = new HashMap(); + private static final HashMap<String, ParsedExpression> PARSED_CACHE = + new HashMap<String, ParsedExpression>(); + /* do not construct */ private ParseUtils() {} - public static ParsedExpression parse(String exprStr) + public static final ParsedExpression parse(String exprStr) { - Object obj = parsedCache.get(exprStr); + ParsedExpression pe = PARSED_CACHE.get(exprStr); - if(obj != null) - return (ParsedExpression)obj; + if(pe != null) + return pe; try { - Reader reader = new StringReader(exprStr); - NetUIELParser learn = new NetUIELParser(reader); - + NetUIELParser learn = new NetUIELParser(new StringReader(exprStr)); + ParsedExpression expr = learn.parse(); expr.seal(); - // infrequent - synchronized(parsedCache) + /* infrequent; this should only happen when there is a cache miss */ + synchronized(PARSED_CACHE) { - parsedCache.put(exprStr, expr); + PARSED_CACHE.put(exprStr, expr); } return expr; @@ -85,35 +71,38 @@ catch(ParseException e) { String msg = "Error occurred parsing expression \"" + exprStr + "\"."; - if(_logger.isErrorEnabled()) _logger.error(msg, e); - + if(_logger.isErrorEnabled()) + _logger.error(msg, e); throw new ExpressionParseException(msg, e); } catch(TokenMgrError tm) { String msg = "Error occurred parsing expression \"" + exprStr + "\"."; - if(_logger.isErrorEnabled()) _logger.error(msg, tm); - + if(_logger.isErrorEnabled()) + _logger.error(msg, tm); throw new ExpressionParseException(msg, tm); } } - public static Object evaluate(String exprStr, NetUIVariableResolver vr) + public static final Object evaluate(String exprStr, NetUIVariableResolver vr) { ParsedExpression expr = parse(exprStr); - + assert expr != null; return expr.evaluate(vr); } - public static void update(String exprStr, Object value, NetUIVariableResolver vr) + public static final void update(String exprStr, Object value, NetUIVariableResolver vr) { ParsedExpression expr = parse(exprStr); - + assert expr != null; expr.update(value, vr); } - public static Class getPropertyType(Object value, String name, PropertyCache cache) + public static final Class getPropertyType(Object value, String name, PropertyCache cache) { + assert value != null; + assert cache != null; + Class type = value.getClass(); Field f = cache.getField(type, name); if(f != null) @@ -124,15 +113,23 @@ { String msg = "Can not find setter method for property \"" + name + "\" on object of type \"" + value.getClass() + "\"."; - if(_logger.isErrorEnabled()) _logger.error(msg); + if(_logger.isErrorEnabled()) + _logger.error(msg); throw new RuntimeException(msg); } // PropertyCache guarantees that props are found and match JavaBean naming rules - else return m.getParameterTypes()[0]; + else + { + assert m.getParameterTypes().length == 1; + return m.getParameterTypes()[0]; + } } - public static Object getProperty(Object value, String name, PropertyCache cache) + public static final Object getProperty(Object value, String name, PropertyCache cache) { + assert value != null; + assert cache != null; + Class type = value.getClass(); Field f = cache.getField(type, name); @@ -145,7 +142,8 @@ catch(Exception e) { String msg = "An error occurred evaluating the field \"" + name + "\" on an object of type \"" + type + "\"."; - if(_logger.isDebugEnabled()) _logger.debug(msg, e); + if(_logger.isDebugEnabled()) + _logger.debug(msg, e); throw new RuntimeException(msg, e); } } @@ -166,21 +164,24 @@ } String msg = "Could not find property or field \"" + name + "\" on object of type \"" + type + "\""; - if(_logger.isDebugEnabled()) _logger.debug(msg); + if(_logger.isDebugEnabled()) + _logger.debug(msg); throw new RuntimeException(msg); } - public static Object convertType(Object value, Class toType) + public static final Object convertType(Object value, Class toType) { + assert toType != null; + try { boolean sourceIsArray = false; - // only convert String types; other Object types are already assumed to be in their target types. + /* only convert String types; other Object types are already assumed to be in their target types. */ if(value != null && !(value instanceof String || (sourceIsArray = (value instanceof String[])) )) return value; - // for a String[], convert each item in the array into its target type and return the resulting array. + /* for a String[], convert each item in the array into its target type and return the resulting array. */ if(toType.isArray()) { if(value == null) @@ -206,7 +207,8 @@ catch(IllegalArgumentException e) { String msg = "Can not set Object types via expressions that are not supported by the set of registered type converters. Cause: " + e; - if(_logger.isErrorEnabled()) _logger.error(msg, e); + if(_logger.isErrorEnabled()) + _logger.error(msg, e); throw new RuntimeException(msg, e); } @@ -219,7 +221,8 @@ // convert the String into its target type and return the result else { - if(_logger.isDebugEnabled()) _logger.debug("convert value \"" + value + "\" to type: " + toType); + if(_logger.isDebugEnabled()) + _logger.debug("convert value \"" + value + "\" to type: " + toType); // If the "value" is multi-valued (String[]), it needs to be converted into a single-valued object. // There is no policy defined for how we do this right now, so the first one will always win when @@ -242,7 +245,8 @@ catch(IllegalArgumentException e) { String msg = "The type \"" + toType.getName() + "\" can not be set through XScript with the update value \"" + value + "\""; - if(_logger.isErrorEnabled()) _logger.error(msg, e); + if(_logger.isErrorEnabled()) + _logger.error(msg, e); throw new RuntimeException(msg, e); } } @@ -250,36 +254,26 @@ catch(Exception e) { String msg = "Unable to convert a value of type \"" + value.getClass() + "\" to the array element type of \"" + toType + "\". Cause: " + e; - if(_logger.isErrorEnabled()) _logger.error(msg, e); + if(_logger.isErrorEnabled()) + _logger.error(msg, e); throw new RuntimeException(msg, e); } } - public static void printStack(String message, Throwable t) - { - StringWriter sw = new StringWriter(); - PrintWriter pw = new PrintWriter(sw); - t.printStackTrace(pw); - pw.flush(); - pw.close(); - if(_logger.isDebugEnabled()) _logger.debug(message, t); - else System.err.println(message + "Cause: " + sw.toString()); - } - public static String getContextString(String[] contexts) { - StringBuffer buf = new StringBuffer(); - buf.append("["); + StringBuilder builder = new StringBuilder(); + builder.append("["); if(contexts != null) { for(int i = 0; i < contexts.length; i++) { - if(i > 0) buf.append(", "); - buf.append(contexts[i]); + if(i > 0) builder.append(", "); + builder.append(contexts[i]); } } - buf.append("]"); - return buf.toString(); + builder.append("]"); + return builder.toString(); } public static Throwable getRootCause(Throwable t) @@ -287,7 +281,6 @@ Throwable root = t; while(root.getCause() != null) root = root.getCause(); - return root; } } Modified: incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/script/el/util/RequestAttributeMap.java Url: http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/script/el/util/RequestAttributeMap.java?view=diff&rev=106823&p1=incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/script/el/util/RequestAttributeMap.java&r1=106822&p2=incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/script/el/util/RequestAttributeMap.java&r2=106823 ============================================================================== --- incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/script/el/util/RequestAttributeMap.java (original) +++ incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/script/el/util/RequestAttributeMap.java Sun Nov 28 10:15:40 2004 @@ -17,13 +17,8 @@ */ package org.apache.beehive.netui.script.el.util; -// java imports import java.util.Enumeration; import javax.servlet.ServletRequest; - -// internal imports - -// external imports /** * Deleted: /incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/script/el/util/RequestParameterMap.java Url: http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/script/el/util/RequestParameterMap.java?view=auto&rev=106822 ============================================================================== Modified: incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/script/el/util/SessionAttributeMap.java Url: http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/script/el/util/SessionAttributeMap.java?view=diff&rev=106823&p1=incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/script/el/util/SessionAttributeMap.java&r1=106822&p2=incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/script/el/util/SessionAttributeMap.java&r2=106823 ============================================================================== --- incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/script/el/util/SessionAttributeMap.java (original) +++ incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/script/el/util/SessionAttributeMap.java Sun Nov 28 10:15:40 2004 @@ -17,13 +17,8 @@ */ package org.apache.beehive.netui.script.el.util; -// java imports import java.util.Enumeration; import javax.servlet.http.HttpSession; - -// internal imports - -// external imports /** * Modified: incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/model/DataGridModel.java Url: http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/model/DataGridModel.java?view=diff&rev=106823&p1=incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/model/DataGridModel.java&r1=106822&p2=incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/model/DataGridModel.java&r2=106823 ============================================================================== --- incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/model/DataGridModel.java (original) +++ incubator/beehive/trunk/netui/src/tags-databinding/org/apache/beehive/netui/databinding/datagrid/model/DataGridModel.java Sun Nov 28 10:15:40 2004 @@ -17,10 +17,7 @@ */ package org.apache.beehive.netui.databinding.datagrid.model; -import java.util.*; import javax.servlet.jsp.JspContext; -import javax.servlet.jsp.PageContext; -import javax.servlet.http.HttpServletRequest; import org.apache.beehive.netui.databinding.datagrid.rendering.TableRenderer; import org.apache.beehive.netui.databinding.datagrid.services.FilterService; @@ -29,9 +26,6 @@ import org.apache.beehive.netui.databinding.datagrid.util.PagedDataSet; import org.apache.beehive.netui.databinding.datagrid.rendering.IPagerRenderer; import org.apache.beehive.netui.databinding.datagrid.rendering.impl.PreviousNextPagerRenderer; -import org.apache.beehive.netui.util.logging.Logger; -import org.apache.beehive.netui.tags.rendering.TableTag; -import org.apache.beehive.netui.tags.rendering.TrTag; import org.apache.beehive.netui.tags.rendering.AbstractRenderAppender; /** Modified: incubator/beehive/trunk/netui/src/tags-html/org/apache/beehive/netui/tags/AbstractClassicTag.java Url: http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/src/tags-html/org/apache/beehive/netui/tags/AbstractClassicTag.java?view=diff&rev=106823&p1=incubator/beehive/trunk/netui/src/tags-html/org/apache/beehive/netui/tags/AbstractClassicTag.java&r1=106822&p2=incubator/beehive/trunk/netui/src/tags-html/org/apache/beehive/netui/tags/AbstractClassicTag.java&r2=106823 ============================================================================== --- incubator/beehive/trunk/netui/src/tags-html/org/apache/beehive/netui/tags/AbstractClassicTag.java (original) +++ incubator/beehive/trunk/netui/src/tags-html/org/apache/beehive/netui/tags/AbstractClassicTag.java Sun Nov 28 10:15:40 2004 @@ -120,11 +120,6 @@ { ee = null; _eh = null; - - // null the current tag - //ImplicitObjectBean bean = ImplicitObjectUtil.getImplicitObjects(pageContext, this); - //bean.setCurrentTag(null); - ImplicitObjectUtil.getImplicitObjects(pageContext, null); } /** Modified: incubator/beehive/trunk/netui/src/tags-html/org/apache/beehive/netui/tags/ExpressionHandling.java Url: http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/src/tags-html/org/apache/beehive/netui/tags/ExpressionHandling.java?view=diff&rev=106823&p1=incubator/beehive/trunk/netui/src/tags-html/org/apache/beehive/netui/tags/ExpressionHandling.java&r1=106822&p2=incubator/beehive/trunk/netui/src/tags-html/org/apache/beehive/netui/tags/ExpressionHandling.java&r2=106823 ============================================================================== --- incubator/beehive/trunk/netui/src/tags-html/org/apache/beehive/netui/tags/ExpressionHandling.java (original) +++ incubator/beehive/trunk/netui/src/tags-html/org/apache/beehive/netui/tags/ExpressionHandling.java Sun Nov 28 10:15:40 2004 @@ -1,16 +1,36 @@ +/* + * Copyright 2004 The Apache Software Foundation. + * + * Licensed 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. + * + * $Header:$ + */ package org.apache.beehive.netui.tags; import org.apache.beehive.netui.script.ExpressionEvaluationException; import org.apache.beehive.netui.script.ExpressionEvaluator; import org.apache.beehive.netui.script.ExpressionEvaluatorFactory; import org.apache.beehive.netui.script.ExpressionUpdateException; -import org.apache.beehive.netui.script.common.ImplicitObjectBean; +import org.apache.beehive.netui.script.el.NetUIUpdateVariableResolver; import org.apache.beehive.netui.script.common.ImplicitObjectUtil; import org.apache.beehive.netui.util.Bundle; import org.apache.beehive.netui.util.logging.Logger; import javax.servlet.jsp.JspException; import javax.servlet.jsp.PageContext; +import javax.servlet.jsp.el.VariableResolver; + +import org.apache.struts.action.ActionForm; public class ExpressionHandling { @@ -97,11 +117,10 @@ public void updateExpression(String expr, Object value, PageContext pageContext) throws ExpressionUpdateException, JspException { - - // @todo: eddie needs to review this, it doesn't seem quite right. This is called by tree. if (isExpression(expr)) { - ImplicitObjectBean bean = ImplicitObjectUtil.getImplicitObjects(pageContext, _tag); - ExpressionEvaluatorFactory.getInstance().update(expr, value, bean, false); + + VariableResolver vr = ImplicitObjectUtil.getUpdateVariableResolver(pageContext.getRequest(), pageContext.getResponse(), false); + ExpressionEvaluatorFactory.getInstance().update(expr, value, vr, false); } else { String s = Bundle.getString("Tags_BindingUpdateExpressionError", new Object[]{expr}); @@ -128,7 +147,7 @@ */ private boolean isExpression(String expression) { - // @TODO: eko -- push this into the ExpressionEvaluator + // todo: eko -- push this into the ExpressionEvaluator if (expression == null) return false; return getExpressionEvaluator().isExpression(expression); @@ -149,9 +168,7 @@ Object result = null; try { - // @perf: todo -- this is silly... - ImplicitObjectBean bean = ImplicitObjectUtil.getImplicitObjects(pageContext, _tag); - result = getExpressionEvaluator().evaluateStrict(expression, bean); + result = getExpressionEvaluator().evaluateStrict(expression, pageContext.getVariableResolver()); } catch (ExpressionEvaluationException ee) { // if there is an expression evaluation error set the error and Modified: incubator/beehive/trunk/netui/src/webapp-template/config/netui-config-default.xml Url: http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/src/webapp-template/config/netui-config-default.xml?view=diff&rev=106823&p1=incubator/beehive/trunk/netui/src/webapp-template/config/netui-config-default.xml&r1=106822&p2=incubator/beehive/trunk/netui/src/webapp-template/config/netui-config-default.xml&r2=106823 ============================================================================== --- incubator/beehive/trunk/netui/src/webapp-template/config/netui-config-default.xml (original) +++ incubator/beehive/trunk/netui/src/webapp-template/config/netui-config-default.xml Sun Nov 28 10:15:40 2004 @@ -9,16 +9,6 @@ <expression-language> <name>netuiel</name> <factory-class>org.apache.beehive.netui.script.el.ExpressionEvaluatorImpl$NetUIELEngineFactory</factory-class> - <binding-contexts> - <binding-context> - <name>bundle</name> - <factory-class>org.apache.beehive.netui.databinding.script.el.BundleVariableResolver$BundleContextFactory</factory-class> - </binding-context> - <binding-context> - <name>container</name> - <factory-class>org.apache.beehive.netui.databinding.script.el.ContainerVariableResolver$ContainerContextFactory</factory-class> - </binding-context> - </binding-contexts> </expression-language> </expression-languages> Modified: incubator/beehive/trunk/netui/src/webapp-template/default/WEB-INF/netui-config.xml Url: http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/src/webapp-template/default/WEB-INF/netui-config.xml?view=diff&rev=106823&p1=incubator/beehive/trunk/netui/src/webapp-template/default/WEB-INF/netui-config.xml&r1=106822&p2=incubator/beehive/trunk/netui/src/webapp-template/default/WEB-INF/netui-config.xml&r2=106823 ============================================================================== --- incubator/beehive/trunk/netui/src/webapp-template/default/WEB-INF/netui-config.xml (original) +++ incubator/beehive/trunk/netui/src/webapp-template/default/WEB-INF/netui-config.xml Sun Nov 28 10:15:40 2004 @@ -9,20 +9,7 @@ <expression-language> <name>netuiel</name> <factory-class>org.apache.beehive.netui.script.el.ExpressionEvaluatorImpl$NetUIELEngineFactory</factory-class> - <binding-contexts> - <binding-context> - <name>bundle</name> - <factory-class>org.apache.beehive.netui.databinding.script.el.BundleVariableResolver$BundleContextFactory</factory-class> - </binding-context> - <binding-context> - <name>container</name> - <factory-class>org.apache.beehive.netui.databinding.script.el.ContainerVariableResolver$ContainerContextFactory</factory-class> - </binding-context> - </binding-contexts> </expression-language> </expression-languages> - - <iterator-factories> - </iterator-factories> </netui-config> Modified: incubator/beehive/trunk/netui/test/src/junitTests/org/apache/beehive/netui/test/script/AbstractExpressionTest.java Url: http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/test/src/junitTests/org/apache/beehive/netui/test/script/AbstractExpressionTest.java?view=diff&rev=106823&p1=incubator/beehive/trunk/netui/test/src/junitTests/org/apache/beehive/netui/test/script/AbstractExpressionTest.java&r1=106822&p2=incubator/beehive/trunk/netui/test/src/junitTests/org/apache/beehive/netui/test/script/AbstractExpressionTest.java&r2=106823 ============================================================================== --- incubator/beehive/trunk/netui/test/src/junitTests/org/apache/beehive/netui/test/script/AbstractExpressionTest.java (original) +++ incubator/beehive/trunk/netui/test/src/junitTests/org/apache/beehive/netui/test/script/AbstractExpressionTest.java Sun Nov 28 10:15:40 2004 @@ -17,23 +17,19 @@ */ package org.apache.beehive.netui.test.script; -// java imports - import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import javax.servlet.http.HttpServletRequest; import javax.servlet.jsp.PageContext; +import javax.servlet.jsp.el.VariableResolver; -// internal imports +import org.apache.beehive.netui.script.ExpressionEvaluator; +import org.apache.beehive.netui.script.common.ImplicitObjectUtil; +import org.apache.beehive.netui.script.el.NetUIUpdateVariableResolver; import org.apache.beehive.netui.test.beans.SimpleTypeActionForm; import org.apache.beehive.netui.test.beans.ComplexTypeActionForm; import org.apache.beehive.netui.test.servlet.ServletFactory; -import org.apache.beehive.netui.script.ExpressionEvaluator; -import org.apache.beehive.netui.script.common.ImplicitObjectUtil; -import org.apache.beehive.netui.script.common.ImplicitObjectBean; - -// external imports import junit.framework.Test; import junit.framework.TestCase; import junit.framework.TestSuite; @@ -47,63 +43,81 @@ public abstract class AbstractExpressionTest extends TestCase { - protected PageContext _fauxPageContext = null; - protected ServletRequest _fauxRequest = null; - protected ServletResponse _fauxResponse = null; - protected ActionForm _fauxActionForm = null; - protected SimpleTypeActionForm _simpleActionForm = null; - protected ComplexTypeActionForm _complexActionForm = null; + protected static final int COMPLEX_FORM = 1; + protected static final int SIMPLE_FORM = 2; - protected abstract ExpressionEvaluator getExpressionEvaluator(); + private PageContext _fauxPageContext = null; + private ServletRequest _fauxRequest = null; + private ServletResponse _fauxResponse = null; + private SimpleTypeActionForm _simpleActionForm = null; + private ComplexTypeActionForm _complexActionForm = null; - protected static ImplicitObjectBean initContexts(ServletRequest request, ServletResponse response, ActionForm form) + public AbstractExpressionTest(String name) { - ImplicitObjectBean bean = ImplicitObjectUtil.getImplicitObjects(request, response, form); - return bean; + super(name); } - protected static ImplicitObjectBean initContexts(PageContext pc) + public static Test suite() { - ImplicitObjectBean bean = ImplicitObjectUtil.getImplicitObjects(pc, null); - return bean; + return new TestSuite(AbstractExpressionTest.class); } - protected Object evaluateExpression(String expression, PageContext pc) - throws Exception + public static void main(String[] args) { - ImplicitObjectBean bean = initContexts(pc); + junit.textui.TestRunner.run(suite()); + } + + protected PageContext getPageContext() { + return _fauxPageContext; + } + + public ServletRequest getRequest() { + return _fauxRequest; + } + + public ServletResponse getResponse() { + return _fauxResponse; + } + + protected abstract ExpressionEvaluator getExpressionEvaluator(); - return getExpressionEvaluator().evaluateStrict(expression, bean); + protected final Object evaluateExpression(String expression, PageContext pc) + throws Exception + { + return getExpressionEvaluator().evaluateStrict(expression, ImplicitObjectUtil.getReadVariableResolver(pc)); } - protected void evaluateUpdateExpression(String expression, Object value, ServletRequest request, ServletResponse response, ActionForm form) + protected final void evaluateUpdateExpression(String expression, Object value, ServletRequest request, ServletResponse response, ActionForm form) throws Exception { evaluateUpdateExpression(expression, value, request, response, form, true); } - protected void evaluateUpdateExpression(String expression, Object value, ServletRequest request, ServletResponse response, ActionForm form, boolean requestParameter) + protected final void evaluateUpdateExpression(String expression, Object value, ServletRequest request, ServletResponse response, ActionForm form, boolean requestParameter) throws Exception { - ImplicitObjectBean bean = initContexts(request, response, form); - getExpressionEvaluator().update(expression, value, bean, requestParameter); + Object theForm = form; + if(theForm == null) + theForm = request.getAttribute(org.apache.struts.taglib.html.Constants.BEAN_KEY); + + VariableResolver vr = ImplicitObjectUtil.getUpdateVariableResolver(theForm, request, response, requestParameter); + + getExpressionEvaluator().update(expression, value, vr, requestParameter); } protected void setUp() { _fauxPageContext = ServletFactory.getPageContext(); - _fauxRequest = _fauxPageContext.getRequest(); - _fauxResponse = _fauxPageContext.getResponse(); + _fauxRequest = getPageContext().getRequest(); + _fauxResponse = getPageContext().getResponse(); _simpleActionForm = new SimpleTypeActionForm(); _complexActionForm = new ComplexTypeActionForm(); - _fauxActionForm = _simpleActionForm; - _fauxPageContext.getRequest().setAttribute("simpleBean", _simpleActionForm); - _fauxPageContext.getRequest().setAttribute("complexBean", _complexActionForm); - - // put the simpleBean under the Constants.BEAN_KEY - useForm("simpleBean"); + getPageContext().getRequest().setAttribute("simpleBean", _simpleActionForm); + getPageContext().getRequest().setAttribute("complexBean", _complexActionForm); + + useForm(SIMPLE_FORM); org.apache.beehive.netui.util.config.ConfigUtil.loadDefault(); } @@ -115,39 +129,27 @@ _fauxResponse = null; } - protected void useForm(String formName) + protected void useForm(int formId) { - HttpServletRequest request = (HttpServletRequest)_fauxPageContext.getRequest(); - Object form = request.getAttribute(formName); - assert form instanceof ActionForm; + Object form = null; + HttpServletRequest request = (HttpServletRequest)getPageContext().getRequest(); + if(formId == SIMPLE_FORM) + form = request.getAttribute("simpleBean"); + else if(formId == COMPLEX_FORM) + form = request.getAttribute("complexBean"); - useForm(request, (ActionForm)form); + useForm(form); } - protected void useForm(ServletRequest request, ActionForm actionForm) + protected void useForm(Object actionForm) { - request.setAttribute(Constants.BEAN_KEY, actionForm); + getPageContext().getRequest().setAttribute(Constants.BEAN_KEY, actionForm); + getPageContext().setAttribute("actionForm", actionForm); } protected ActionForm getActionForm() { - HttpServletRequest request = (HttpServletRequest)_fauxPageContext.getRequest(); + HttpServletRequest request = (HttpServletRequest)getPageContext().getRequest(); return (ActionForm)request.getAttribute(Constants.BEAN_KEY); } - - public AbstractExpressionTest(String name) - { - super(name); - } - - public static Test suite() - { - return new TestSuite(AbstractExpressionTest.class); - } - - public static void main(String[] args) - { - junit.textui.TestRunner.run(suite()); - } - } Modified: incubator/beehive/trunk/netui/test/src/junitTests/org/apache/beehive/netui/test/script/AccessTest.java Url: http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/test/src/junitTests/org/apache/beehive/netui/test/script/AccessTest.java?view=diff&rev=106823&p1=incubator/beehive/trunk/netui/test/src/junitTests/org/apache/beehive/netui/test/script/AccessTest.java&r1=106822&p2=incubator/beehive/trunk/netui/test/src/junitTests/org/apache/beehive/netui/test/script/AccessTest.java&r2=106823 ============================================================================== --- incubator/beehive/trunk/netui/test/src/junitTests/org/apache/beehive/netui/test/script/AccessTest.java (original) +++ incubator/beehive/trunk/netui/test/src/junitTests/org/apache/beehive/netui/test/script/AccessTest.java Sun Nov 28 10:15:40 2004 @@ -38,9 +38,9 @@ { String productName = " Mountain Bike Frame"; - _fauxPageContext.setAttribute("iproduct", IProduct.Factory.getInstance(productName, 2500.00)); + getPageContext().setAttribute("iproduct", IProduct.Factory.getInstance(productName, 2500.00)); - Object result = evaluateExpression("{pageScope.iproduct.name}", _fauxPageContext); + Object result = evaluateExpression("{pageScope.iproduct.name}", getPageContext()); assertEquals(productName, result); } @@ -59,10 +59,10 @@ java.beans.PropertyDescriptor[] pds = java.beans.Introspector.getBeanInfo(item.getClass()).getPropertyDescriptors(); - _fauxPageContext.setAttribute("currentItem", item); + getPageContext().setAttribute("currentItem", item); - Object key = evaluateExpression("{pageScope.currentItem.key}", _fauxPageContext); - Object value = evaluateExpression("{pageScope.currentItem.value}", _fauxPageContext); + Object key = evaluateExpression("{pageScope.currentItem.key}", getPageContext()); + Object value = evaluateExpression("{pageScope.currentItem.value}", getPageContext()); System.out.println("key: " + key + " value: " + value); } } Modified: incubator/beehive/trunk/netui/test/src/junitTests/org/apache/beehive/netui/test/script/BundleScriptTest.java Url: http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/test/src/junitTests/org/apache/beehive/netui/test/script/BundleScriptTest.java?view=diff&rev=106823&p1=incubator/beehive/trunk/netui/test/src/junitTests/org/apache/beehive/netui/test/script/BundleScriptTest.java&r1=106822&p2=incubator/beehive/trunk/netui/test/src/junitTests/org/apache/beehive/netui/test/script/BundleScriptTest.java&r2=106823 ============================================================================== --- incubator/beehive/trunk/netui/test/src/junitTests/org/apache/beehive/netui/test/script/BundleScriptTest.java (original) +++ incubator/beehive/trunk/netui/test/src/junitTests/org/apache/beehive/netui/test/script/BundleScriptTest.java Sun Nov 28 10:15:40 2004 @@ -38,18 +38,18 @@ throws Exception { BundleContext bc = createBundleContext(); - BundleMap bundleMap = new BundleMap((HttpServletRequest)_fauxPageContext.getRequest(), - _fauxPageContext.getServletContext(), + BundleMap bundleMap = new BundleMap((HttpServletRequest)getPageContext().getRequest(), + getPageContext().getServletContext(), bc); - _fauxPageContext.setAttribute("bundle", bundleMap); + getPageContext().setAttribute("bundle", bundleMap); bc.addBundle("bundle1", "org/apache/beehive/netui/test/databinding/testdata/bundle1"); bc.addBundle("bundle2", "org/apache/beehive/netui/test/databinding/testdata/bundle2"); - String val = (String)evaluateExpression("{bundle.bundle1.simpleKey}", _fauxPageContext); + String val = (String)evaluateExpression("{bundle.bundle1.simpleKey}", getPageContext()); assertEquals("This is a simple message.", val); - val = (String)evaluateExpression("{bundle.bundle2.bundle2Message}", _fauxPageContext); + val = (String)evaluateExpression("{bundle.bundle2.bundle2Message}", getPageContext()); assertEquals("bundle2MessageValue", val); } @@ -62,18 +62,18 @@ bc.addBundle("bundle1", "org/apache/beehive/netui/test/databinding/testdata/bundle1", germany); bc.addBundle("bundle2", "org/apache/beehive/netui/test/databinding/testdata/bundle2"); - BundleMap bundleMap = new BundleMap((HttpServletRequest)_fauxPageContext.getRequest(), - _fauxPageContext.getServletContext(), + BundleMap bundleMap = new BundleMap((HttpServletRequest)getPageContext().getRequest(), + getPageContext().getServletContext(), bc); - _fauxPageContext.setAttribute("bundle", bundleMap); + getPageContext().setAttribute("bundle", bundleMap); - String val = (String)evaluateExpression("{bundle.bundle1.localHello}", _fauxPageContext); + String val = (String)evaluateExpression("{bundle.bundle1.localHello}", getPageContext()); assertEquals("Hallo von Deutschland", val); - val = (String)evaluateExpression("{bundle.bundle2.whereverYouAre}", _fauxPageContext); + val = (String)evaluateExpression("{bundle.bundle2.whereverYouAre}", getPageContext()); assertEquals("Hello from Colorado", val); - val = (String)evaluateExpression("{bundle.bundle1.noi18nMessage}", _fauxPageContext); + val = (String)evaluateExpression("{bundle.bundle1.noi18nMessage}", getPageContext()); assertEquals("This message is never localized", val); } @@ -85,18 +85,18 @@ throws Exception { BundleContext bc = createBundleContext(); - BundleMap bundleMap = new BundleMap((HttpServletRequest)_fauxPageContext.getRequest(), - _fauxPageContext.getServletContext(), + BundleMap bundleMap = new BundleMap((HttpServletRequest)getPageContext().getRequest(), + getPageContext().getServletContext(), bc); // toString an empty map System.out.println("budleMap.toString(): " + bundleMap.toString()); - _fauxPageContext.setAttribute("bundle", bundleMap); + getPageContext().setAttribute("bundle", bundleMap); bc.addBundle("bundle1", "org/apache/beehive/netui/test/databinding/testdata/bundle1"); bc.addBundle("bundle2", "org/apache/beehive/netui/test/databinding/testdata/bundle2"); - String val = (String)evaluateExpression("{bundle.bundle1.simpleKey}", _fauxPageContext); + String val = (String)evaluateExpression("{bundle.bundle1.simpleKey}", getPageContext()); assertEquals("This is a simple message.", val); // toString a BundleMap that has bundles Modified: incubator/beehive/trunk/netui/test/src/junitTests/org/apache/beehive/netui/test/script/ExpressionTest.java Url: http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/test/src/junitTests/org/apache/beehive/netui/test/script/ExpressionTest.java?view=diff&rev=106823&p1=incubator/beehive/trunk/netui/test/src/junitTests/org/apache/beehive/netui/test/script/ExpressionTest.java&r1=106822&p2=incubator/beehive/trunk/netui/test/src/junitTests/org/apache/beehive/netui/test/script/ExpressionTest.java&r2=106823 ============================================================================== --- incubator/beehive/trunk/netui/test/src/junitTests/org/apache/beehive/netui/test/script/ExpressionTest.java (original) +++ incubator/beehive/trunk/netui/test/src/junitTests/org/apache/beehive/netui/test/script/ExpressionTest.java Sun Nov 28 10:15:40 2004 @@ -17,21 +17,15 @@ */ package org.apache.beehive.netui.test.script; -// java imports - -// internal imports -import org.apache.beehive.netui.test.beans.FooJavaBean; -import org.apache.beehive.netui.test.beans.SimpleTypeActionForm; - import org.apache.beehive.netui.script.ExpressionEvaluator; import org.apache.beehive.netui.script.ExpressionEvaluatorFactory; +import org.apache.beehive.netui.test.beans.FooJavaBean; +import org.apache.beehive.netui.test.beans.SimpleTypeActionForm; import org.apache.beehive.netui.util.logging.Logger; -// external imports - /** - * Unit tests for XScript expression parsing. + * Unit tests for NetUI EL expression parsing. */ public abstract class ExpressionTest extends AbstractExpressionTest @@ -183,8 +177,8 @@ public void testPageContext() { FooJavaBean bean = new FooJavaBean("JunitTestJavaBean"); - _fauxPageContext.setAttribute("foo", bean); - assertEquals(bean.getTextProperty(), ((FooJavaBean)_fauxPageContext.getAttribute("foo")).getTextProperty()); + getPageContext().setAttribute("foo", bean); + assertEquals(bean.getTextProperty(), ((FooJavaBean)getPageContext().getAttribute("foo")).getTextProperty()); } /** Test a simple String read */ @@ -192,9 +186,9 @@ throws Exception { FooJavaBean bean = new FooJavaBean("JunitTestJavaBean"); - _fauxPageContext.setAttribute("foo", bean); + getPageContext().setAttribute("foo", bean); - Object result = evaluateExpression("{pageScope.foo.textProperty}", _fauxPageContext); + Object result = evaluateExpression("{pageScope.foo.textProperty}", getPageContext()); assertEquals(result, bean.getTextProperty()); } @@ -203,25 +197,25 @@ { Object result = null; - result = evaluateExpression("{requestScope.simpleBean._StringProperty}", _fauxPageContext); - assertTrue(result.equals(((SimpleTypeActionForm)_fauxPageContext.getRequest().getAttribute("simpleBean")).get_StringProperty())); + result = evaluateExpression("{requestScope.simpleBean._StringProperty}", getPageContext()); + assertTrue(result.equals(((SimpleTypeActionForm)getPageContext().getRequest().getAttribute("simpleBean")).get_StringProperty())); result = null; - result = evaluateExpression("{requestScope.simpleBean._stringProperty}", _fauxPageContext); - assertTrue(result.equals(((SimpleTypeActionForm)_fauxPageContext.getRequest().getAttribute("simpleBean")).get_stringProperty())); + result = evaluateExpression("{requestScope.simpleBean._stringProperty}", getPageContext()); + assertTrue(result.equals(((SimpleTypeActionForm)getPageContext().getRequest().getAttribute("simpleBean")).get_stringProperty())); } public void testNullProperty() throws Exception { - Object result = evaluateExpression("{requestScope.simpleBean.nullProperty}", _fauxPageContext); + Object result = evaluateExpression("{requestScope.simpleBean.nullProperty}", getPageContext()); assertNull(result); } public void testCharProperty() throws Exception { - Object result = evaluateExpression("{requestScope.simpleBean.charProperty}", _fauxPageContext); + Object result = evaluateExpression("{requestScope.simpleBean.charProperty}", getPageContext()); if(!(result instanceof String && ((String)result).equals("a"))) throw new ExpressionTestError("The Character value returned from XScript was not valid.", null); } @@ -229,7 +223,7 @@ public void testEmptyReadExpr() throws Exception { - Object result = evaluateExpression("{}", _fauxPageContext); + Object result = evaluateExpression("{}", getPageContext()); assertNull(result); } @@ -240,7 +234,7 @@ boolean exception = false; try { - evaluateExpression("{requestScope.simpleBean.neverMoreProperty}", _fauxPageContext); + evaluateExpression("{requestScope.simpleBean.neverMoreProperty}", getPageContext()); } catch(Exception e) { @@ -258,7 +252,7 @@ try { - result = evaluateExpression("{requestScope.simpleBean.StringProperty}", _fauxPageContext); + result = evaluateExpression("{requestScope.simpleBean.StringProperty}", getPageContext()); } catch(Exception e) { @@ -269,7 +263,7 @@ pass = true; try { - result = evaluateExpression("{requestScope.simpleBean.stringProperty}", _fauxPageContext); + result = evaluateExpression("{requestScope.simpleBean.stringProperty}", getPageContext()); } catch(Exception e) { @@ -314,9 +308,7 @@ String value = (String)data[i][1]; Object result = null; - result = evaluateExpression(expr, _fauxPageContext); - - if(_logger.isDebugEnabled()) _logger.debug("***** expr: " + expr + " result: " + result + " complex prop: " + _complexActionForm.getMap().get("\"")); + result = evaluateExpression(expr, getPageContext()); assertTrue(value.equals(result)); } @@ -348,5 +340,4 @@ { super(name); } - } Modified: incubator/beehive/trunk/netui/test/src/junitTests/org/apache/beehive/netui/test/script/ExpressionUpdateTest.java Url: http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/test/src/junitTests/org/apache/beehive/netui/test/script/ExpressionUpdateTest.java?view=diff&rev=106823&p1=incubator/beehive/trunk/netui/test/src/junitTests/org/apache/beehive/netui/test/script/ExpressionUpdateTest.java&r1=106822&p2=incubator/beehive/trunk/netui/test/src/junitTests/org/apache/beehive/netui/test/script/ExpressionUpdateTest.java&r2=106823 ============================================================================== --- incubator/beehive/trunk/netui/test/src/junitTests/org/apache/beehive/netui/test/script/ExpressionUpdateTest.java (original) +++ incubator/beehive/trunk/netui/test/src/junitTests/org/apache/beehive/netui/test/script/ExpressionUpdateTest.java Sun Nov 28 10:15:40 2004 @@ -17,34 +17,19 @@ */ package org.apache.beehive.netui.test.script; -// java imports import java.math.BigDecimal; - import java.util.Date; -import java.util.HashMap; import java.util.List; -import java.util.Map; - import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; -// internal imports import org.apache.beehive.netui.test.beans.SimpleTypeActionForm; import org.apache.beehive.netui.test.beans.ComplexTypeActionForm; import org.apache.beehive.netui.test.tools.AssertHelper; - -import org.apache.beehive.netui.script.ExpressionEvaluator; -import org.apache.beehive.netui.script.ExpressionEvaluatorFactory; import org.apache.beehive.netui.script.IllegalExpressionException; - import org.apache.beehive.netui.util.logging.Logger; -// external imports import junit.framework.AssertionFailedError; -import junit.framework.Test; -import junit.framework.TestSuite; - -import org.apache.struts.action.ActionForm; /** * @@ -69,7 +54,7 @@ { String[] newValue = {"123", "456"}; - evaluateUpdateExpression("{actionForm.stringProperty}", newValue, _fauxPageContext.getRequest(), _fauxPageContext.getResponse(), getActionForm()); + evaluateUpdateExpression("{actionForm.stringProperty}", newValue, getPageContext().getRequest(), getPageContext().getResponse(), getActionForm()); assertEquals(newValue[1], ((SimpleTypeActionForm)getActionForm()).getStringProperty()); } @@ -81,8 +66,8 @@ { // boolean array String[] boolStrArray = {"true", "false", "false", "true"}; - evaluateUpdateExpression("{actionForm.neverMoreProperty}", boolStrArray, _fauxPageContext.getRequest(), - _fauxPageContext.getResponse(), getActionForm()); + evaluateUpdateExpression("{actionForm.neverMoreProperty}", boolStrArray, getPageContext().getRequest(), + getPageContext().getResponse(), getActionForm()); } catch(Exception e) { @@ -132,10 +117,10 @@ public void testSettingComplexTypes() throws Exception { - useForm("complexBean"); + useForm(COMPLEX_FORM); - ServletRequest request = _fauxPageContext.getRequest(); - ServletResponse response = _fauxPageContext.getResponse(); + ServletRequest request = getPageContext().getRequest(); + ServletResponse response = getPageContext().getResponse(); Object[][] data = settingComplexTypeData; for(int i = 0; i < data.length; i++) { @@ -144,34 +129,33 @@ System.out.println("=========================== ????????????? form: " + getActionForm()); - ExpressionEvaluatorFactory.getInstance().update(expr, act, initContexts(request, response, getActionForm()), false); + evaluateUpdateExpression(expr, act, request, response, getActionForm(), false); - Object foo = evaluateExpression(expr, _fauxPageContext); + Object foo = evaluateExpression(expr, getPageContext()); assertTrue(act.equals(foo)); - if(_logger.isDebugEnabled()) _logger.debug("returned value: " + evaluateExpression(expr, _fauxPageContext)); + if(_logger.isDebugEnabled()) _logger.debug("returned value: " + evaluateExpression(expr, getPageContext())); } - // primitive int test String expr = "{actionForm.intProperty}"; evaluateUpdateExpression(expr, "42", request, response, getActionForm()); - assertTrue(42 == ((Integer)evaluateExpression(expr, _fauxPageContext)).intValue()); + assertTrue(42 == ((Integer)evaluateExpression(expr, getPageContext())).intValue()); // primitive int[] test expr = "{actionForm.intArrayProperty}"; evaluateUpdateExpression(expr, "42", request, response, getActionForm()); - assertTrue(42 == ((int[])evaluateExpression(expr, _fauxPageContext))[0]); + assertTrue(42 == ((int[])evaluateExpression(expr, getPageContext()))[0]); // primitive boolean[] test expr = "{actionForm.boolArrayProperty}"; evaluateUpdateExpression(expr, new String[] {"true", "true", "false", "true", "true"}, request, response, getActionForm()); - assertTrue(((boolean[])evaluateExpression(expr, _fauxPageContext))[0]); - assertTrue(((boolean[])evaluateExpression(expr, _fauxPageContext))[1]); - assertTrue(!((boolean[])evaluateExpression(expr, _fauxPageContext))[2]); - assertTrue(((boolean[])evaluateExpression(expr, _fauxPageContext))[3]); - assertTrue(((boolean[])evaluateExpression(expr, _fauxPageContext))[4]); + assertTrue(((boolean[])evaluateExpression(expr, getPageContext()))[0]); + assertTrue(((boolean[])evaluateExpression(expr, getPageContext()))[1]); + assertTrue(!((boolean[])evaluateExpression(expr, getPageContext()))[2]); + assertTrue(((boolean[])evaluateExpression(expr, getPageContext()))[3]); + assertTrue(((boolean[])evaluateExpression(expr, getPageContext()))[4]); } public void testWritableContexts() @@ -184,7 +168,7 @@ String expr = (String)data[i][0]; try { - ExpressionEvaluatorFactory.getInstance().update(expr, null, initContexts(_fauxRequest, _fauxResponse, getActionForm()), true); + evaluateUpdateExpression(expr, null, getRequest(), getResponse(), getActionForm(), true); } catch(Exception e) { @@ -201,7 +185,7 @@ public void testDirectListUpdate() throws Exception { - useForm("complexBean"); + useForm(COMPLEX_FORM); executeComplexTest("list update", directListUpdate); } @@ -1033,8 +1017,8 @@ UpdateComparator comparator = (UpdateComparator)data[i][3]; // @TODO: plug-in all evaluation contexts here - ServletRequest request = _fauxPageContext.getRequest(); - ServletResponse response = _fauxPageContext.getResponse(); + ServletRequest request = getPageContext().getRequest(); + ServletResponse response = getPageContext().getResponse(); try { @@ -1054,8 +1038,8 @@ private void executeComplexTest(String testName, Object[][] data) throws Exception { - useForm("complexBean"); - + useForm(COMPLEX_FORM); + for(int i = 0; i < data.length; i++) { String expr = (String)data[i][0]; @@ -1065,9 +1049,9 @@ try { - evaluateUpdateExpression(expr, value, _fauxRequest, _fauxResponse, getActionForm()); + evaluateUpdateExpression(expr, value, getRequest(), getResponse(), getActionForm()); - ComplexTypeActionForm complexBean = (ComplexTypeActionForm)_fauxRequest.getAttribute("complexBean"); + ComplexTypeActionForm complexBean = (ComplexTypeActionForm)getRequest().getAttribute("complexBean"); comparator.compareComplex(expected, complexBean); } Modified: incubator/beehive/trunk/netui/test/src/junitTests/org/apache/beehive/netui/test/script/PageInputTest.java Url: http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/test/src/junitTests/org/apache/beehive/netui/test/script/PageInputTest.java?view=diff&rev=106823&p1=incubator/beehive/trunk/netui/test/src/junitTests/org/apache/beehive/netui/test/script/PageInputTest.java&r1=106822&p2=incubator/beehive/trunk/netui/test/src/junitTests/org/apache/beehive/netui/test/script/PageInputTest.java&r2=106823 ============================================================================== --- incubator/beehive/trunk/netui/test/src/junitTests/org/apache/beehive/netui/test/script/PageInputTest.java (original) +++ incubator/beehive/trunk/netui/test/src/junitTests/org/apache/beehive/netui/test/script/PageInputTest.java Sun Nov 28 10:15:40 2004 @@ -17,14 +17,10 @@ */ package org.apache.beehive.netui.test.script; -// java imports import javax.servlet.ServletRequest; -// internal imports import org.apache.beehive.netui.pageflow.PageFlowUtils; -import org.apache.beehive.netui.util.logging.Logger; - -// external imports +import org.apache.beehive.netui.pageflow.internal.InternalUtils; /** * @@ -32,20 +28,35 @@ public abstract class PageInputTest extends AbstractExpressionTest { - private static final Logger _logger = Logger.getInstance(PageInputTest.class); - public void testPageInputs() throws Exception { - ServletRequest request = _fauxPageContext.getRequest(); + ServletRequest request = getPageContext().getRequest(); String value = "This is a Page Input!"; PageFlowUtils.addPageInput("test", value, request); - - Object result = evaluateExpression("{pageInput.test}", _fauxPageContext); + + request.setAttribute("pageInput", InternalUtils.getPageInputMap(request)); + + Object result = evaluateExpression("{pageInput.test}", getPageContext()); assert result.equals(value); } + public void testActionOutputs() + throws Exception + { + ServletRequest request = getPageContext().getRequest(); + + String value = "This is a Page Input!"; + PageFlowUtils.addActionOutput("test", value, request); + + request.setAttribute("pageInput", InternalUtils.getPageInputMap(request)); + + Object result = evaluateExpression("{pageInput.test}", getPageContext()); + + assert result.equals(value); + } + public PageInputTest(String name) { super(name); Modified: incubator/beehive/trunk/netui/test/src/junitTests/org/apache/beehive/netui/test/script/el/NetUIELCustomBindingContextTest.java Url: http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/test/src/junitTests/org/apache/beehive/netui/test/script/el/NetUIELCustomBindingContextTest.java?view=diff&rev=106823&p1=incubator/beehive/trunk/netui/test/src/junitTests/org/apache/beehive/netui/test/script/el/NetUIELCustomBindingContextTest.java&r1=106822&p2=incubator/beehive/trunk/netui/test/src/junitTests/org/apache/beehive/netui/test/script/el/NetUIELCustomBindingContextTest.java&r2=106823 ============================================================================== --- incubator/beehive/trunk/netui/test/src/junitTests/org/apache/beehive/netui/test/script/el/NetUIELCustomBindingContextTest.java (original) +++ incubator/beehive/trunk/netui/test/src/junitTests/org/apache/beehive/netui/test/script/el/NetUIELCustomBindingContextTest.java Sun Nov 28 10:15:40 2004 @@ -51,13 +51,13 @@ ConfigUtil.init(is); PortalVariableResolver.SkinBean skinBean = new PortalVariableResolver.SkinBean(); - Object result = evaluateExpression("{portal.skin.stringProperty}", _fauxPageContext); + Object result = evaluateExpression("{portal.skin.stringProperty}", getPageContext()); assertEquals(skinBean.getStringProperty(), result); boolean success = false; try { - evaluateExpression("{portal.notSkin.stringProperty}", _fauxPageContext); + evaluateExpression("{portal.notSkin.stringProperty}", getPageContext()); } catch(Exception e) { Modified: incubator/beehive/trunk/netui/test/src/junitTests/org/apache/beehive/netui/test/script/el/NetUIELExpressionUpdateTest.java Url: http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/test/src/junitTests/org/apache/beehive/netui/test/script/el/NetUIELExpressionUpdateTest.java?view=diff&rev=106823&p1=incubator/beehive/trunk/netui/test/src/junitTests/org/apache/beehive/netui/test/script/el/NetUIELExpressionUpdateTest.java&r1=106822&p2=incubator/beehive/trunk/netui/test/src/junitTests/org/apache/beehive/netui/test/script/el/NetUIELExpressionUpdateTest.java&r2=106823 ============================================================================== --- incubator/beehive/trunk/netui/test/src/junitTests/org/apache/beehive/netui/test/script/el/NetUIELExpressionUpdateTest.java (original) +++ incubator/beehive/trunk/netui/test/src/junitTests/org/apache/beehive/netui/test/script/el/NetUIELExpressionUpdateTest.java Sun Nov 28 10:15:40 2004 @@ -17,14 +17,10 @@ */ package org.apache.beehive.netui.test.script.el; -// java imports - -// internal imports import org.apache.beehive.netui.test.script.ExpressionUpdateTest; import org.apache.beehive.netui.script.ExpressionEvaluator; import org.apache.beehive.netui.script.ExpressionEvaluatorFactory; -// external imports import junit.framework.Test; import junit.framework.TestSuite; Modified: incubator/beehive/trunk/netui/test/src/junitTests/org/apache/beehive/netui/test/script/el/NetUIELPageInputTest.java Url: http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/test/src/junitTests/org/apache/beehive/netui/test/script/el/NetUIELPageInputTest.java?view=diff&rev=106823&p1=incubator/beehive/trunk/netui/test/src/junitTests/org/apache/beehive/netui/test/script/el/NetUIELPageInputTest.java&r1=106822&p2=incubator/beehive/trunk/netui/test/src/junitTests/org/apache/beehive/netui/test/script/el/NetUIELPageInputTest.java&r2=106823 ============================================================================== --- incubator/beehive/trunk/netui/test/src/junitTests/org/apache/beehive/netui/test/script/el/NetUIELPageInputTest.java (original) +++ incubator/beehive/trunk/netui/test/src/junitTests/org/apache/beehive/netui/test/script/el/NetUIELPageInputTest.java Sun Nov 28 10:15:40 2004 @@ -17,14 +17,10 @@ */ package org.apache.beehive.netui.test.script.el; -// java imports - -// internal imports import org.apache.beehive.netui.test.script.PageInputTest; import org.apache.beehive.netui.script.ExpressionEvaluator; import org.apache.beehive.netui.script.ExpressionEvaluatorFactory; -// external imports import junit.framework.Test; import junit.framework.TestSuite; @@ -45,6 +41,7 @@ { TestSuite suite = new TestSuite(); suite.addTest(new NetUIELPageInputTest("testPageInputs")); + suite.addTest(new NetUIELPageInputTest("testActionOutputs")); return suite; } Modified: incubator/beehive/trunk/netui/test/src/junitTests/org/apache/beehive/netui/test/servlet/FauxPageContext.java Url: http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/test/src/junitTests/org/apache/beehive/netui/test/servlet/FauxPageContext.java?view=diff&rev=106823&p1=incubator/beehive/trunk/netui/test/src/junitTests/org/apache/beehive/netui/test/servlet/FauxPageContext.java&r1=106822&p2=incubator/beehive/trunk/netui/test/src/junitTests/org/apache/beehive/netui/test/servlet/FauxPageContext.java&r2=106823 ============================================================================== --- incubator/beehive/trunk/netui/test/src/junitTests/org/apache/beehive/netui/test/servlet/FauxPageContext.java (original) +++ incubator/beehive/trunk/netui/test/src/junitTests/org/apache/beehive/netui/test/servlet/FauxPageContext.java Sun Nov 28 10:15:40 2004 @@ -17,7 +17,6 @@ */ package org.apache.beehive.netui.test.servlet; -// java imports import java.util.Enumeration; import java.util.Hashtable; @@ -31,11 +30,11 @@ import javax.servlet.http.HttpServletResponse; import javax.servlet.jsp.PageContext; import javax.servlet.jsp.JspWriter; +import javax.servlet.jsp.el.ELException; +import javax.servlet.jsp.el.VariableResolver; import javax.servlet.jsp.tagext.BodyContent; -// internal imports - -// external imports +import org.apache.taglibs.standard.lang.jstl.JSTLVariableResolver; /** * @@ -224,14 +223,37 @@ } // Servlet 2.4 method implementation - public javax.servlet.jsp.el.VariableResolver getVariableResolver() + public VariableResolver getVariableResolver() { - return null; + return new FauxVariableResolver(this); } // Servlet 2.4 method implementation public javax.servlet.jsp.el.ExpressionEvaluator getExpressionEvaluator() { return null; + } + + public static class FauxVariableResolver + implements VariableResolver { + + private PageContext _pageContext = null; + private JSTLVariableResolver _vr = null; + + private FauxVariableResolver(PageContext pageContext) { + _pageContext = pageContext; + _vr = new JSTLVariableResolver(); + } + + public Object resolveVariable(String name) + throws ELException + { + try { + return _vr.resolveVariable(name, _pageContext); + } + catch(org.apache.taglibs.standard.lang.jstl.ELException e) { + throw new ELException(e); + } + } } } Modified: incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/WEB-INF/local-netui-config.xml Url: http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/WEB-INF/local-netui-config.xml?view=diff&rev=106823&p1=incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/WEB-INF/local-netui-config.xml&r1=106822&p2=incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/WEB-INF/local-netui-config.xml&r2=106823 ============================================================================== --- incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/WEB-INF/local-netui-config.xml (original) +++ incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/WEB-INF/local-netui-config.xml Sun Nov 28 10:15:40 2004 @@ -9,16 +9,6 @@ <expression-language> <name>netuiel</name> <factory-class>org.apache.beehive.netui.script.el.ExpressionEvaluatorImpl$NetUIELEngineFactory</factory-class> - <binding-contexts> - <binding-context> - <name>bundle</name> - <factory-class>org.apache.beehive.netui.databinding.script.el.BundleVariableResolver$BundleContextFactory</factory-class> - </binding-context> - <binding-context> - <name>container</name> - <factory-class>org.apache.beehive.netui.databinding.script.el.ContainerVariableResolver$ContainerContextFactory</factory-class> - </binding-context> - </binding-contexts> </expression-language> </expression-languages>
