You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@cocoon.apache.org by da...@apache.org on 2005/01/16 22:35:39 UTC
svn commit: r125367 - in cocoon/trunk/src/blocks/template/java/org/apache/cocoon: components/expression components/expression/jexl components/expression/jxpath environment template/jxtg template/jxtg/environment template/jxtg/expression template/jxtg/script template/jxtg/script/event
Author: danielf
Date: Sun Jan 16 13:35:37 2005
New Revision: 125367
URL: http://svn.apache.org/viewcvs?view=rev&rev=125367
Log:
Refactored to use pluggable expressions and TemplateObjectModelHelper.
Removed:
cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/environment/JSIntrospector.java
cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/environment/MyVariables.java
cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/expression/MyJexlContext.java
Modified:
cocoon/trunk/src/blocks/template/java/org/apache/cocoon/components/expression/Expression.java
cocoon/trunk/src/blocks/template/java/org/apache/cocoon/components/expression/jexl/JexlExpression.java
cocoon/trunk/src/blocks/template/java/org/apache/cocoon/components/expression/jxpath/JXPathExpression.java
cocoon/trunk/src/blocks/template/java/org/apache/cocoon/environment/FlowObjectModelHelper.java
cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/JXTemplateGenerator.java
cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/TransformerAdapter.java
cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/environment/ExecutionContext.java
cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/expression/JXTExpression.java
cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/Invoker.java
cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/Parser.java
cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/event/Event.java
cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/event/StartFormatDate.java
cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/event/StartFormatNumber.java
cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/event/StartIf.java
cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/event/StartOut.java
cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/event/StartWhen.java
Modified: cocoon/trunk/src/blocks/template/java/org/apache/cocoon/components/expression/Expression.java
Url: http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/template/java/org/apache/cocoon/components/expression/Expression.java?view=diff&rev=125367&p1=cocoon/trunk/src/blocks/template/java/org/apache/cocoon/components/expression/Expression.java&r1=125366&p2=cocoon/trunk/src/blocks/template/java/org/apache/cocoon/components/expression/Expression.java&r2=125367
==============================================================================
--- cocoon/trunk/src/blocks/template/java/org/apache/cocoon/components/expression/Expression.java (original)
+++ cocoon/trunk/src/blocks/template/java/org/apache/cocoon/components/expression/Expression.java Sun Jan 16 13:35:37 2005
@@ -27,4 +27,13 @@
public String getExpression();
public String getLanguage();
+
+ /* This method is added to handle that JXPath have two access
+ methods getValue and getNode, where getNode gives direct access
+ to the object while getValue might do some conversion of the
+ object. I would prefer to get rid of the getNode method, but
+ have not yet figured out how to get work in JXTG */
+ public Object getNode(ExpressionContext context) throws ExpressionException;
+
+ public void setProperty(String property, Object value);
}
Modified: cocoon/trunk/src/blocks/template/java/org/apache/cocoon/components/expression/jexl/JexlExpression.java
Url: http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/template/java/org/apache/cocoon/components/expression/jexl/JexlExpression.java?view=diff&rev=125367&p1=cocoon/trunk/src/blocks/template/java/org/apache/cocoon/components/expression/jexl/JexlExpression.java&r1=125366&p2=cocoon/trunk/src/blocks/template/java/org/apache/cocoon/components/expression/jexl/JexlExpression.java&r2=125367
==============================================================================
--- cocoon/trunk/src/blocks/template/java/org/apache/cocoon/components/expression/jexl/JexlExpression.java (original)
+++ cocoon/trunk/src/blocks/template/java/org/apache/cocoon/components/expression/jexl/JexlExpression.java Sun Jan 16 13:35:37 2005
@@ -91,6 +91,14 @@
return this.language;
}
+ public void setProperty(String property, Object value) {
+ // Has no properties
+ }
+
+ public Object getNode(ExpressionContext context) throws ExpressionException {
+ return evaluate(context);
+ }
+
private static class ContextAdapter implements JexlContext {
private final ExpressionContext context;
public ContextAdapter(ExpressionContext context) {
Modified: cocoon/trunk/src/blocks/template/java/org/apache/cocoon/components/expression/jxpath/JXPathExpression.java
Url: http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/template/java/org/apache/cocoon/components/expression/jxpath/JXPathExpression.java?view=diff&rev=125367&p1=cocoon/trunk/src/blocks/template/java/org/apache/cocoon/components/expression/jxpath/JXPathExpression.java&r1=125366&p2=cocoon/trunk/src/blocks/template/java/org/apache/cocoon/components/expression/jxpath/JXPathExpression.java&r2=125367
==============================================================================
--- cocoon/trunk/src/blocks/template/java/org/apache/cocoon/components/expression/jxpath/JXPathExpression.java (original)
+++ cocoon/trunk/src/blocks/template/java/org/apache/cocoon/components/expression/jxpath/JXPathExpression.java Sun Jan 16 13:35:37 2005
@@ -16,21 +16,30 @@
package org.apache.cocoon.components.expression.jxpath;
import java.util.Iterator;
+import java.util.LinkedList;
+import java.util.List;
import java.util.Map;
import org.apache.cocoon.components.expression.Expression;
import org.apache.cocoon.components.expression.ExpressionCompiler;
import org.apache.cocoon.components.expression.ExpressionContext;
import org.apache.cocoon.components.expression.ExpressionException;
+import org.apache.cocoon.components.expression.jexl.JSIntrospector;
import org.apache.commons.jxpath.CompiledExpression;
import org.apache.commons.jxpath.JXPathContext;
+import org.apache.commons.jxpath.Pointer;
import org.apache.commons.jxpath.Variables;
+import org.mozilla.javascript.NativeArray;
+import org.w3c.dom.Node;
public class JXPathExpression implements Expression {
private final String language;
private final String expression;
private final CompiledExpression compiledExpression;
+ private boolean lenient = false;
+
+ public static final String LENIENT = "lenient";
public JXPathExpression(String language, String expression)
throws ExpressionException {
@@ -46,7 +55,29 @@
public Iterator iterate(ExpressionContext context)
throws ExpressionException {
- return this.compiledExpression.iterate(getContext(context));
+ final JXPathContext jxpathContext = getContext(context);
+ Object val =
+ this.compiledExpression.getPointer(jxpathContext, this.expression).getNode();
+ // FIXME: workaround for JXPath bug
+ if (val instanceof NativeArray)
+ return new JSIntrospector.NativeArrayIterator((NativeArray) val);
+ else
+ return new Iterator() {
+ Iterator iter =
+ compiledExpression.iteratePointers(jxpathContext);
+
+ public boolean hasNext() {
+ return iter.hasNext();
+ }
+
+ public Object next() {
+ return ((Pointer)iter.next()).getNode();
+ }
+
+ public void remove() {
+ iter.remove();
+ }
+ };
}
public void assign(ExpressionContext context, Object value)
@@ -62,11 +93,46 @@
return this.language;
}
+ public void setProperty(String property, Object value) {
+ if (LENIENT.equals(property))
+ this.lenient = ((Boolean)value).booleanValue();
+ }
+
+ // Hack: try to prevent JXPath from converting result to a String
+ public Object getNode(ExpressionContext context) throws ExpressionException {
+ Iterator iter =
+ this.compiledExpression.iteratePointers(getContext(context));
+ if (iter.hasNext()) {
+ Pointer first = (Pointer)iter.next();
+ if (iter.hasNext()) {
+ List result = new LinkedList();
+ result.add(first.getNode());
+ boolean dom = (first.getNode() instanceof Node);
+ while (iter.hasNext()) {
+ Object obj = ((Pointer)iter.next()).getNode();
+ dom = dom && (obj instanceof Node);
+ result.add(obj);
+ }
+ Object[] arr;
+ if (dom) {
+ arr = new Node[result.size()];
+ } else {
+ arr = new Object[result.size()];
+ }
+ result.toArray(arr);
+ return arr;
+ }
+ return first.getNode();
+ }
+ return null;
+ }
+
private JXPathContext getContext(ExpressionContext context) {
// This could be made more efficient by caching the
// JXPathContext within the Context object.
- JXPathContext jxcontext = JXPathContext.newContext(null, context.getContextBean());
+ JXPathContext jxcontext = JXPathContext.newContext(context.getContextBean());
jxcontext.setVariables(new VariableAdapter(context));
+ jxcontext.setLenient(this.lenient);
return jxcontext;
}
Modified: cocoon/trunk/src/blocks/template/java/org/apache/cocoon/environment/FlowObjectModelHelper.java
Url: http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/template/java/org/apache/cocoon/environment/FlowObjectModelHelper.java?view=diff&rev=125367&p1=cocoon/trunk/src/blocks/template/java/org/apache/cocoon/environment/FlowObjectModelHelper.java&r1=125366&p2=cocoon/trunk/src/blocks/template/java/org/apache/cocoon/environment/FlowObjectModelHelper.java&r2=125367
==============================================================================
--- cocoon/trunk/src/blocks/template/java/org/apache/cocoon/environment/FlowObjectModelHelper.java (original)
+++ cocoon/trunk/src/blocks/template/java/org/apache/cocoon/environment/FlowObjectModelHelper.java Sun Jan 16 13:35:37 2005
@@ -47,7 +47,7 @@
/** Avoid instantiation */
private FlowObjectModelHelper() {}
- private static void fillContext(Object contextObject, Map map) {
+ public static void fillContext(Object contextObject, Map map) {
// Hack: I use jxpath to populate the context object's properties
// in the jexl context
final JXPathBeanInfo bi =
Modified: cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/JXTemplateGenerator.java
Url: http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/JXTemplateGenerator.java?view=diff&rev=125367&p1=cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/JXTemplateGenerator.java&r1=125366&p2=cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/JXTemplateGenerator.java&r2=125367
==============================================================================
--- cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/JXTemplateGenerator.java (original)
+++ cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/JXTemplateGenerator.java Sun Jan 16 13:35:37 2005
@@ -15,11 +15,8 @@
*/
package org.apache.cocoon.template.jxtg;
-import java.beans.PropertyDescriptor;
import java.io.IOException;
import java.io.Serializable;
-import java.lang.reflect.Field;
-import java.lang.reflect.Method;
import java.util.HashMap;
import java.util.Map;
@@ -28,39 +25,22 @@
import org.apache.avalon.framework.service.ServiceManager;
import org.apache.cocoon.ProcessingException;
import org.apache.cocoon.caching.CacheableProcessingComponent;
-import org.apache.cocoon.components.flow.FlowHelper;
-import org.apache.cocoon.components.flow.WebContinuation;
-import org.apache.cocoon.components.flow.javascript.fom.FOM_JavaScriptFlowHelper;
-import org.apache.cocoon.environment.ObjectModelHelper;
-import org.apache.cocoon.environment.Request;
+import org.apache.cocoon.components.expression.ExpressionContext;
+import org.apache.cocoon.environment.FlowObjectModelHelper;
import org.apache.cocoon.environment.SourceResolver;
import org.apache.cocoon.generation.ServiceableGenerator;
import org.apache.cocoon.template.jxtg.environment.ExecutionContext;
-import org.apache.cocoon.template.jxtg.environment.JSIntrospector;
import org.apache.cocoon.template.jxtg.environment.JXCacheKey;
import org.apache.cocoon.template.jxtg.environment.JXSourceValidity;
-import org.apache.cocoon.template.jxtg.environment.MyVariables;
import org.apache.cocoon.template.jxtg.expression.JXTExpression;
-import org.apache.cocoon.template.jxtg.expression.MyJexlContext;
import org.apache.cocoon.template.jxtg.script.Invoker;
import org.apache.cocoon.template.jxtg.script.ScriptManager;
import org.apache.cocoon.template.jxtg.script.event.Event;
import org.apache.cocoon.template.jxtg.script.event.StartDocument;
import org.apache.cocoon.template.jxtg.script.event.StartElement;
import org.apache.cocoon.xml.XMLConsumer;
-import org.apache.commons.jexl.util.Introspector;
-import org.apache.commons.jxpath.DynamicPropertyHandler;
-import org.apache.commons.jxpath.JXPathBeanInfo;
-import org.apache.commons.jxpath.JXPathContext;
-import org.apache.commons.jxpath.JXPathContextFactory;
-import org.apache.commons.jxpath.JXPathIntrospector;
-import org.apache.commons.jxpath.Variables;
import org.apache.excalibur.source.SourceValidity;
-import org.xml.sax.Attributes;
-import org.xml.sax.Locator;
import org.xml.sax.SAXException;
-import org.xml.sax.helpers.AttributesImpl;
-import org.xml.sax.helpers.LocatorImpl;
/**
* @cocoon.sitemap.component.documentation Provides a generic page template with
@@ -85,46 +65,18 @@
/** The namespace used by this generator */
public final static String NS = "http://apache.org/cocoon/templates/jx/1.0";
- private static final JXPathContextFactory jxpathContextFactory = JXPathContextFactory
- .newInstance();
- private static final Attributes EMPTY_ATTRS = new AttributesImpl();
-
- public static final Locator NULL_LOCATOR = new LocatorImpl();
-
public final static String CACHE_KEY = "cache-key";
public final static String VALIDITY = "cache-validity";
- private JXPathContext jxpathContext;
- private MyJexlContext globalJexlContext;
- private Variables variables;
+ private ExpressionContext expressionContext;
private ScriptManager scriptManager = new ScriptManager();
private StartDocument startDocument;
private Map definitions;
- private Map cocoon;
-
- static {
- // Hack: there's no _nice_ way to add my introspector to Jexl right now
- try {
- Field field = Introspector.class.getDeclaredField("uberSpect");
- field.setAccessible(true);
- field.set(null, new JSIntrospector());
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
public XMLConsumer getConsumer() {
return this.xmlConsumer;
}
- public JXPathContext getJXPathContext() {
- return jxpathContext;
- }
-
- public MyJexlContext getJexlContext() {
- return globalJexlContext;
- }
-
public void service(ServiceManager manager) throws ServiceException {
super.service(manager);
scriptManager.setServiceManager(manager);
@@ -132,11 +84,8 @@
public void recycle() {
this.startDocument = null;
- this.jxpathContext = null;
- this.globalJexlContext = null;
- this.variables = null;
+ this.expressionContext = null;
this.definitions = null;
- this.cocoon = null;
super.recycle();
}
@@ -148,117 +97,18 @@
* org.apache.avalon.framework.parameters.Parameters)
*/
public void setup(SourceResolver resolver, Map objectModel, String src,
- Parameters parameters) throws ProcessingException, SAXException,
- IOException {
+ Parameters parameters)
+ throws ProcessingException, SAXException, IOException {
super.setup(resolver, objectModel, src, parameters);
if (src != null)
startDocument = scriptManager.resolveTemplate(src);
- Object bean = FlowHelper.getContextObject(objectModel);
- WebContinuation kont = FlowHelper.getWebContinuation(objectModel);
- setContexts(bean, kont, parameters, objectModel);
+ this.expressionContext =
+ FlowObjectModelHelper.getFOMExpressionContext(objectModel, parameters);
this.definitions = new HashMap();
}
- public static void fillContext(Object contextObject, Map map) {
- if (contextObject != null) {
- // Hack: I use jxpath to populate the context object's properties
- // in the jexl context
- final JXPathBeanInfo bi = JXPathIntrospector
- .getBeanInfo(contextObject.getClass());
- if (bi.isDynamic()) {
- Class cl = bi.getDynamicPropertyHandlerClass();
- try {
- DynamicPropertyHandler h = (DynamicPropertyHandler) cl
- .newInstance();
- String[] result = h.getPropertyNames(contextObject);
- int len = result.length;
- for (int i = 0; i < len; i++) {
- try {
- map.put(result[i], h.getProperty(contextObject,
- result[i]));
- } catch (Exception exc) {
- exc.printStackTrace();
- }
- }
- } catch (Exception ignored) {
- ignored.printStackTrace();
- }
- } else {
- PropertyDescriptor[] props = bi.getPropertyDescriptors();
- int len = props.length;
- for (int i = 0; i < len; i++) {
- try {
- Method read = props[i].getReadMethod();
- if (read != null) {
- map.put(props[i].getName(), read.invoke(
- contextObject, null));
- }
- } catch (Exception ignored) {
- ignored.printStackTrace();
- }
- }
- }
- }
- }
-
- private void setContexts(Object contextObject, WebContinuation kont,
- Parameters parameters, Map objectModel) {
- final Request request = ObjectModelHelper.getRequest(objectModel);
- final Object session = request.getSession(false);
- final Object app = ObjectModelHelper.getContext(objectModel);
- cocoon = new HashMap();
- cocoon.put("request", FOM_JavaScriptFlowHelper
- .getFOM_Request(objectModel));
- if (session != null) {
- cocoon.put("session", FOM_JavaScriptFlowHelper
- .getFOM_Session(objectModel));
- }
- cocoon.put("context", FOM_JavaScriptFlowHelper
- .getFOM_Context(objectModel));
- cocoon.put("continuation", FOM_JavaScriptFlowHelper
- .getFOM_WebContinuation(objectModel));
- cocoon.put("parameters", Parameters.toProperties(parameters));
- this.variables = new MyVariables(cocoon, contextObject, kont, request,
- session, app, parameters);
- Map map;
- if (contextObject instanceof Map) {
- map = (Map) contextObject;
- } else {
- map = new HashMap();
- fillContext(contextObject, map);
- }
- jxpathContext = jxpathContextFactory.newContext(null, contextObject);
- jxpathContext.setVariables(variables);
- jxpathContext.setLenient(parameters.getParameterAsBoolean(
- "lenient-xpath", false));
- globalJexlContext = new MyJexlContext();
- globalJexlContext.setVars(map);
- map = globalJexlContext.getVars();
- map.put("cocoon", cocoon);
- if (contextObject != null) {
- map.put("flowContext", contextObject);
- // FIXME (VG): Is this required (what it's used for - examples)?
- // Here I use Rhino's live-connect objects to allow Jexl to call
- // java constructors
- Object javaPkg = FOM_JavaScriptFlowHelper
- .getJavaPackage(objectModel);
- Object pkgs = FOM_JavaScriptFlowHelper.getPackages(objectModel);
- map.put("java", javaPkg);
- map.put("Packages", pkgs);
- }
- if (kont != null) {
- map.put("continuation", kont);
- }
- map.put("request", request);
- map.put("context", app);
- map.put("parameters", parameters);
- if (session != null) {
- map.put("session", session);
- }
- }
-
/*
* (non-Javadoc)
*
@@ -266,18 +116,16 @@
*/
public void generate() throws IOException, SAXException,
ProcessingException {
- performGeneration(this.xmlConsumer, globalJexlContext, jxpathContext,
- null, startDocument, null);
+ performGeneration(this.xmlConsumer, null, this.startDocument, null);
}
public void performGeneration(final XMLConsumer consumer,
- MyJexlContext jexlContext, JXPathContext jxpathContext,
- StartElement macroCall, Event startEvent, Event endEvent)
+ StartElement macroCall, Event startEvent, Event endEvent)
throws SAXException {
- cocoon.put("consumer", consumer);
- Invoker.execute(this.xmlConsumer, new ExecutionContext(jexlContext,
- jxpathContext, this.definitions), null,
- startEvent, null, scriptManager);
+ ((Map)expressionContext.get("cocoon")).put("consumer", consumer);
+ Invoker.execute(this.xmlConsumer, this.expressionContext,
+ new ExecutionContext(this.definitions, this.scriptManager),
+ null, startEvent, null);
}
/*
@@ -290,9 +138,9 @@
.getTemplateProperty(JXTemplateGenerator.CACHE_KEY);
try {
final Serializable templateKey =
- (Serializable) cacheKeyExpr.getValue(globalJexlContext, jxpathContext);
+ (Serializable) cacheKeyExpr.getValue(this.expressionContext);
if (templateKey != null) {
- return new JXCacheKey(startDocument.getUri(), templateKey);
+ return new JXCacheKey(this.startDocument.getUri(), templateKey);
}
} catch (Exception e) {
getLogger().error("error evaluating cache key", e);
@@ -309,10 +157,10 @@
JXTExpression validityExpr = (JXTExpression) this.startDocument
.getTemplateProperty(JXTemplateGenerator.VALIDITY);
try {
- final SourceValidity sourceValidity = this.startDocument
- .getSourceValidity();
+ final SourceValidity sourceValidity =
+ this.startDocument.getSourceValidity();
final SourceValidity templateValidity =
- (SourceValidity) validityExpr.getValue(globalJexlContext, jxpathContext);
+ (SourceValidity) validityExpr.getValue(this.expressionContext);
if (sourceValidity != null && templateValidity != null) {
return new JXSourceValidity(sourceValidity, templateValidity);
}
Modified: cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/TransformerAdapter.java
Url: http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/TransformerAdapter.java?view=diff&rev=125367&p1=cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/TransformerAdapter.java&r1=125366&p2=cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/TransformerAdapter.java&r2=125367
==============================================================================
--- cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/TransformerAdapter.java (original)
+++ cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/TransformerAdapter.java Sun Jan 16 13:35:37 2005
@@ -53,7 +53,7 @@
public void endDocument() throws SAXException {
super.endDocument();
- gen.performGeneration(gen.getConsumer(), gen.getJexlContext(), gen.getJXPathContext(), null, getStartEvent(), null);
+ gen.performGeneration(gen.getConsumer(), null, getStartEvent(), null);
}
void setConsumer(XMLConsumer consumer) {
@@ -91,4 +91,5 @@
super.setConsumer(templateConsumer);
templateConsumer.setConsumer(xmlConsumer);
}
-}
\ No newline at end of file
+}
+
Modified: cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/environment/ExecutionContext.java
Url: http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/environment/ExecutionContext.java?view=diff&rev=125367&p1=cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/environment/ExecutionContext.java&r1=125366&p2=cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/environment/ExecutionContext.java&r2=125367
==============================================================================
--- cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/environment/ExecutionContext.java (original)
+++ cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/environment/ExecutionContext.java Sun Jan 16 13:35:37 2005
@@ -17,35 +17,22 @@
import java.util.Map;
-import org.apache.cocoon.template.jxtg.expression.MyJexlContext;
-import org.apache.commons.jxpath.JXPathContext;
+import org.apache.cocoon.template.jxtg.script.ScriptManager;
public class ExecutionContext {
- private MyJexlContext jexlContext;
- private JXPathContext jxpathContext;
private Map definitions;
+ private ScriptManager scriptManager;
- public ExecutionContext(MyJexlContext jexlContext,
- JXPathContext jxpathContext, Map definitions) {
- this.jexlContext = jexlContext;
- this.jxpathContext = jxpathContext;
+ public ExecutionContext(Map definitions, ScriptManager scriptManager) {
this.definitions = definitions;
- }
-
- public MyJexlContext getJexlContext() {
- return this.jexlContext;
- }
-
- public JXPathContext getJXPathContext() {
- return this.jxpathContext;
+ this.scriptManager = scriptManager;
}
public Map getDefinitions() {
return this.definitions;
}
- public ExecutionContext getChildContext(MyJexlContext jexlContext,
- JXPathContext jxpathContext) {
- return new ExecutionContext(jexlContext, jxpathContext, this.definitions);
+ public ScriptManager getScriptManager() {
+ return this.scriptManager;
}
}
Deleted: /cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/environment/JSIntrospector.java
Url: http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/environment/JSIntrospector.java?view=auto&rev=125366
==============================================================================
Deleted: /cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/environment/MyVariables.java
Url: http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/environment/MyVariables.java?view=auto&rev=125366
==============================================================================
Modified: cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/expression/JXTExpression.java
Url: http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/expression/JXTExpression.java?view=diff&rev=125367&p1=cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/expression/JXTExpression.java&r1=125366&p2=cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/expression/JXTExpression.java&r2=125367
==============================================================================
--- cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/expression/JXTExpression.java (original)
+++ cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/expression/JXTExpression.java Sun Jan 16 13:35:37 2005
@@ -17,40 +17,39 @@
import java.io.IOException;
import java.io.StringReader;
-import java.lang.reflect.InvocationTargetException;
import java.util.Iterator;
-import java.util.LinkedList;
-import java.util.List;
+import org.apache.cocoon.components.expression.Expression;
+import org.apache.cocoon.components.expression.ExpressionContext;
+import org.apache.cocoon.components.expression.jexl.JexlCompiler;
+import org.apache.cocoon.components.expression.jxpath.JXPathCompiler;
+import org.apache.cocoon.components.expression.jxpath.JXPathExpression;
import org.apache.cocoon.template.jxtg.environment.ErrorHolder;
-import org.apache.cocoon.template.jxtg.environment.JSIntrospector;
-import org.apache.commons.jexl.Expression;
-import org.apache.commons.jexl.ExpressionFactory;
-import org.apache.commons.jexl.JexlContext;
-import org.apache.commons.jexl.util.Introspector;
-import org.apache.commons.jexl.util.introspection.Info;
-import org.apache.commons.jxpath.CompiledExpression;
-import org.apache.commons.jxpath.JXPathContext;
-import org.apache.commons.jxpath.Pointer;
-import org.mozilla.javascript.NativeArray;
-import org.w3c.dom.Node;
import org.xml.sax.Locator;
import org.xml.sax.SAXException;
import org.xml.sax.SAXParseException;
public class JXTExpression extends Subst {
- // Factory classes
+ private String raw;
+ private Object compiledExpression;
- public static JXTExpression compile(final String variable, boolean xpath)
- throws Exception {
- Object compiled;
+ private static JXPathCompiler jxpathCompiler = new JXPathCompiler();
+ private static JexlCompiler jexlCompiler = new JexlCompiler();
+ private static String JXPATH = "jxpath";
+ private static String JEXL = "jexl";
+
+ // Factory methods
+
+ public static JXTExpression compile(final String expression, boolean xpath)
+ throws Exception {
+ Expression compiled;
if (xpath) {
- compiled = JXPathContext.compile(variable);
+ compiled = jxpathCompiler.compile(JXPATH, expression);
} else {
- compiled = ExpressionFactory.createExpression(variable);
+ compiled = jexlCompiler.compile(JEXL, expression);
}
- return new JXTExpression(variable, compiled);
+ return new JXTExpression(expression, compiled);
}
public static JXTExpression compileBoolean(String val, String msg,
@@ -126,7 +125,7 @@
*/
public static JXTExpression compileExpr(String expr, String errorPrefix,
- Locator location) throws SAXParseException {
+ Locator location) throws SAXParseException {
try {
return compileExpr(expr);
} catch (Exception exc) {
@@ -141,14 +140,11 @@
// Members
- public JXTExpression(String raw, Object expr) {
+ private JXTExpression(String raw, Object expr) {
this.raw = raw;
this.compiledExpression = expr;
}
- String raw;
- Object compiledExpression;
-
private Object getCompiledExpression() {
return compiledExpression;
}
@@ -164,88 +160,21 @@
// Geting the value of the expression in various forms
// Hack: try to prevent JXPath from converting result to a String
- public Object getNode(JexlContext jexlContext, JXPathContext jxpathContext, Boolean lenient)
+ public Object getNode(ExpressionContext expressionContext)
throws Exception {
- try {
- Object compiled = this.getCompiledExpression();
- if (compiled instanceof CompiledExpression) {
- CompiledExpression e = (CompiledExpression)compiled;
- boolean oldLenient = jxpathContext.isLenient();
- if (lenient != null) jxpathContext.setLenient(lenient.booleanValue());
- try {
- Iterator iter = e.iteratePointers(jxpathContext);
- if (iter.hasNext()) {
- Pointer first = (Pointer)iter.next();
- if (iter.hasNext()) {
- List result = new LinkedList();
- result.add(first.getNode());
- boolean dom = (first.getNode() instanceof Node);
- while (iter.hasNext()) {
- Object obj = ((Pointer)iter.next()).getNode();
- dom = dom && (obj instanceof Node);
- result.add(obj);
- }
- Object[] arr;
- if (dom) {
- arr = new Node[result.size()];
- } else {
- arr = new Object[result.size()];
- }
- result.toArray(arr);
- return arr;
- }
- return first.getNode();
- }
- return null;
- } finally {
- jxpathContext.setLenient(oldLenient);
- }
- } else if (compiled instanceof Expression) {
- Expression e = (Expression)compiled;
- return e.evaluate(jexlContext);
- }
- return this.getRaw();
- } catch (InvocationTargetException e) {
- Throwable t = e.getTargetException();
- if (t instanceof Exception) {
- throw (Exception)t;
- }
- throw (Error)t;
- }
+ Object compiled = this.getCompiledExpression();
+ if (compiled instanceof Expression)
+ return ((Expression)compiled).getNode(expressionContext);
+ return this.getRaw();
}
- public Object getNode(JexlContext jexlContext, JXPathContext jxpathContext)
+ public Iterator getIterator(ExpressionContext expressionContext)
throws Exception {
- return getNode(jexlContext, jxpathContext, null);
- }
-
- public Iterator getIterator(JexlContext jexlContext, JXPathContext jxpathContext, Locator loc) throws Exception {
Iterator iter = null;
if (this.getCompiledExpression() != null || this.getRaw() != null) {
- if (this.getCompiledExpression() instanceof CompiledExpression) {
- CompiledExpression compiledExpression =
- (CompiledExpression) this.getCompiledExpression();
- Object val =
- compiledExpression.getPointer(jxpathContext, this.getRaw()).getNode();
- // FIXME: workaround for JXPath bug
+ if (this.getCompiledExpression() instanceof Expression) {
iter =
- val instanceof NativeArray ?
- new JSIntrospector.NativeArrayIterator((NativeArray) val)
- : compiledExpression.iteratePointers(jxpathContext);
- } else if (this.getCompiledExpression() instanceof Expression) {
- Expression e = (Expression) this.getCompiledExpression();
- Object result = e.evaluate(jexlContext);
- if (result != null) {
- iter = Introspector.getUberspect().getIterator(
- result,
- new Info(
- loc.getSystemId(),
- loc.getLineNumber(),
- loc.getColumnNumber()));
- }
- if (iter == null) {
- iter = EMPTY_ITER;
- }
+ ((Expression)this.getCompiledExpression()).iterate(expressionContext);
} else {
// literal value
iter = new Iterator() {
@@ -272,15 +201,15 @@
return iter;
}
- public Boolean getBooleanValue(JexlContext jexlContext, JXPathContext jxpathContext)
+ public Boolean getBooleanValue(ExpressionContext expressionContext)
throws Exception {
- Object res = getValue(jexlContext, jxpathContext);
+ Object res = getValue(expressionContext);
return res instanceof Boolean ? (Boolean)res : null;
}
- public String getStringValue(JexlContext jexlContext, JXPathContext jxpathContext)
+ public String getStringValue(ExpressionContext expressionContext)
throws Exception {
- Object res = getValue(jexlContext, jxpathContext);
+ Object res = getValue(expressionContext);
if (res != null) {
return res.toString();
}
@@ -290,9 +219,9 @@
return null;
}
- public Number getNumberValue(JexlContext jexlContext, JXPathContext jxpathContext)
+ public Number getNumberValue(ExpressionContext expressionContext)
throws Exception {
- Object res = getValue(jexlContext, jxpathContext);
+ Object res = getValue(expressionContext);
if (res instanceof Number) {
return (Number)res;
}
@@ -302,48 +231,27 @@
return null;
}
- public int getIntValue(JexlContext jexlContext, JXPathContext jxpathContext)
+ public int getIntValue(ExpressionContext expressionContext)
throws Exception {
- Object res = getValue(jexlContext, jxpathContext);
+ Object res = getValue(expressionContext);
return res instanceof Number ? ((Number)res).intValue() : 0;
}
- public Object getValue(JexlContext jexlContext, JXPathContext jxpathContext)
+ public Object getValue(ExpressionContext expressionContext)
throws Exception {
- return getValue(jexlContext, jxpathContext, null);
- }
-
- public Object getValue(JexlContext jexlContext, JXPathContext jxpathContext,
- Boolean lenient) throws Exception {
if (this.getCompiledExpression() != null) {
Object compiled = this.getCompiledExpression();
- try {
- if (compiled instanceof CompiledExpression) {
- CompiledExpression e = (CompiledExpression) compiled;
- boolean oldLenient = jxpathContext.isLenient();
- if (lenient != null) {
- jxpathContext.setLenient(lenient.booleanValue());
- }
- try {
- return e.getValue(jxpathContext);
- } finally {
- jxpathContext.setLenient(oldLenient);
- }
- } else if (compiled instanceof Expression) {
- Expression e = (Expression) compiled;
- return e.evaluate(jexlContext);
- }
+ if (compiled instanceof Expression)
+ return ((Expression)compiled).evaluate(expressionContext);
+ else
return compiled;
- } catch (InvocationTargetException e) {
- Throwable t = e.getTargetException();
- if (t instanceof Exception) {
- throw (Exception) t;
- }
- throw (Error) t;
- }
- } else {
+ } else
return null;
- }
+ }
+
+ public void setLenient(Boolean lenient) {
+ if (this.compiledExpression instanceof Expression)
+ ((Expression)this.compiledExpression).setProperty(JXPathExpression.LENIENT, lenient);
}
private static final Iterator EMPTY_ITER = new Iterator() {
Deleted: /cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/expression/MyJexlContext.java
Url: http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/expression/MyJexlContext.java?view=auto&rev=125366
==============================================================================
Modified: cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/Invoker.java
Url: http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/Invoker.java?view=diff&rev=125367&p1=cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/Invoker.java&r1=125366&p2=cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/Invoker.java&r2=125367
==============================================================================
--- cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/Invoker.java (original)
+++ cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/Invoker.java Sun Jan 16 13:35:37 2005
@@ -21,14 +21,14 @@
import java.util.Properties;
import org.apache.cocoon.ProcessingException;
+import org.apache.cocoon.components.expression.ExpressionContext;
+import org.apache.cocoon.environment.FlowObjectModelHelper;
import org.apache.cocoon.template.jxtg.JXTemplateGenerator;
import org.apache.cocoon.template.jxtg.environment.ErrorHolder;
import org.apache.cocoon.template.jxtg.environment.ExecutionContext;
import org.apache.cocoon.template.jxtg.environment.LocatorFacade;
-import org.apache.cocoon.template.jxtg.environment.MyVariables;
import org.apache.cocoon.template.jxtg.expression.JXTExpression;
import org.apache.cocoon.template.jxtg.expression.Literal;
-import org.apache.cocoon.template.jxtg.expression.MyJexlContext;
import org.apache.cocoon.template.jxtg.expression.Subst;
import org.apache.cocoon.template.jxtg.script.event.*;
import org.apache.cocoon.xml.IncludeXMLConsumer;
@@ -36,9 +36,6 @@
import org.apache.cocoon.xml.XMLUtils;
import org.apache.cocoon.xml.dom.DOMBuilder;
import org.apache.cocoon.xml.dom.DOMStreamer;
-import org.apache.commons.jxpath.JXPathContext;
-import org.apache.commons.jxpath.JXPathContextFactory;
-import org.apache.commons.jxpath.Pointer;
import org.apache.commons.lang.ArrayUtils;
import org.apache.commons.lang.StringUtils;
import org.apache.excalibur.xml.sax.XMLizable;
@@ -51,18 +48,15 @@
import org.xml.sax.helpers.AttributesImpl;
public class Invoker {
- private static final JXPathContextFactory jxpathContextFactory = JXPathContextFactory
- .newInstance();
private static final Attributes EMPTY_ATTRS = new AttributesImpl();
public static void execute(final XMLConsumer consumer,
- ExecutionContext executionContext, StartElement macroCall,
- Event startEvent, Event endEvent, ScriptManager scriptManager)
+ ExpressionContext expressionContext,
+ ExecutionContext executionContext,
+ StartElement macroCall,
+ Event startEvent, Event endEvent)
throws SAXException {
- MyJexlContext jexlContext = executionContext.getJexlContext();
- JXPathContext jxpathContext = executionContext.getJXPathContext();
-
Event ev = startEvent;
LocatorFacade loc = new LocatorFacade(ev.getLocation());
consumer.setDocumentLocator(loc);
@@ -79,7 +73,7 @@
} else {
JXTExpression expr = (JXTExpression) subst;
try {
- Object val = expr.getNode(jexlContext, jxpathContext);
+ Object val = expr.getNode(expressionContext);
if (val instanceof Node) {
executeDOM(consumer, (Node) val);
continue;
@@ -107,11 +101,12 @@
chars = val != null ? val.toString().toCharArray()
: ArrayUtils.EMPTY_CHAR_ARRAY;
} catch (Exception e) {
- throw new SAXParseException(e.getMessage(), ev
- .getLocation(), e);
+ throw new SAXParseException(e.getMessage(),
+ ev.getLocation(), e);
} catch (Error err) {
- throw new SAXParseException(err.getMessage(), ev
- .getLocation(), new ErrorHolder(err));
+ throw new SAXParseException(err.getMessage(),
+ ev.getLocation(),
+ new ErrorHolder(err));
}
}
consumer.characters(chars, 0, chars.length);
@@ -126,12 +121,13 @@
consumer.endPrefixMapping(endPrefixMapping.getPrefix());
} else if (ev instanceof IgnorableWhitespace) {
TextEvent text = (TextEvent) ev;
- characters(executionContext, text, new CharHandler() {
- public void characters(char[] ch, int offset, int len)
- throws SAXException {
- consumer.ignorableWhitespace(ch, offset, len);
- }
- });
+ characters(expressionContext, executionContext, text,
+ new CharHandler() {
+ public void characters(char[] ch, int offset, int len)
+ throws SAXException {
+ consumer.ignorableWhitespace(ch, offset, len);
+ }
+ });
} else if (ev instanceof SkippedEntity) {
SkippedEntity skippedEntity = (SkippedEntity) ev;
consumer.skippedEntity(skippedEntity.getName());
@@ -139,8 +135,7 @@
StartIf startIf = (StartIf) ev;
Object val;
try {
- val = startIf.getTest().getValue(jexlContext, jxpathContext,
- Boolean.TRUE);
+ val = startIf.getTest().getValue(expressionContext);
} catch (Exception e) {
throw new SAXParseException(e.getMessage(), ev.getLocation(), e);
} catch (Error err) {
@@ -164,30 +159,28 @@
int begin, end, step;
String var, varStatus;
try {
- iter = items.getIterator(jexlContext, jxpathContext,
- ev.getLocation());
+ iter = items.getIterator(expressionContext);
begin = startForEach.getBegin() == null
? 0
- : startForEach.getBegin().getIntValue(jexlContext, jxpathContext);
+ : startForEach.getBegin().getIntValue(expressionContext);
end = startForEach.getEnd() == null
? Integer.MAX_VALUE
- : startForEach.getEnd().getIntValue(jexlContext, jxpathContext);
+ : startForEach.getEnd().getIntValue(expressionContext);
step = startForEach.getStep() == null
? 1
- : startForEach.getStep().getIntValue(jexlContext, jxpathContext);
- var = startForEach.getVar().getStringValue(jexlContext, jxpathContext);
+ : startForEach.getStep().getIntValue(expressionContext);
+ var = startForEach.getVar().getStringValue(expressionContext);
varStatus =
- startForEach.getVarStatus().getStringValue(jexlContext, jxpathContext);
+ startForEach.getVarStatus().getStringValue(expressionContext);
} catch (Exception exc) {
- throw new SAXParseException(exc.getMessage(), ev
- .getLocation(), exc);
+ throw new SAXParseException(exc.getMessage(),
+ ev.getLocation(), exc);
} catch (Error err) {
- throw new SAXParseException(err.getMessage(), ev
- .getLocation(), new ErrorHolder(err));
+ throw new SAXParseException(err.getMessage(),
+ ev.getLocation(), new ErrorHolder(err));
}
- MyJexlContext localJexlContext = new MyJexlContext(jexlContext);
- MyVariables localJXPathVariables = new MyVariables(
- (MyVariables) jxpathContext.getVariables());
+ ExpressionContext localExpressionContext =
+ new ExpressionContext(expressionContext);
int i = 0;
// Move to the begin row
while (i < begin && iter.hasNext()) {
@@ -201,30 +194,14 @@
status.setEnd(end);
status.setStep(step);
status.setFirst(true);
- localJexlContext.put(varStatus, status);
- localJXPathVariables.declareVariable(varStatus, status);
+ localExpressionContext.put(varStatus, status);
}
int skipCounter, count = 1;
- JXPathContext localJXPathContext = null;
while (i <= end && iter.hasNext()) {
Object value = iter.next();
- if (value instanceof Pointer) {
- Pointer ptr = (Pointer) value;
- localJXPathContext = jxpathContext
- .getRelativeContext(ptr);
- try {
- value = ptr.getNode();
- } catch (Exception exc) {
- throw new SAXParseException(exc.getMessage(), ev
- .getLocation(), null);
- }
- } else {
- localJXPathContext = jxpathContextFactory.newContext(
- jxpathContext, value);
- }
- localJXPathContext.setVariables(localJXPathVariables);
+ localExpressionContext.setContextBean(value);
if (var != null) {
- localJexlContext.put(var, value);
+ localExpressionContext.put(var, value);
}
if (status != null) {
status.setIndex(i);
@@ -233,10 +210,9 @@
status.setCurrent(value);
status.setLast((i == end || !iter.hasNext()));
}
- execute(consumer, executionContext.getChildContext(
- localJexlContext, localJXPathContext), macroCall,
- startForEach.getNext(), startForEach
- .getEndInstruction(), scriptManager);
+ execute(consumer, localExpressionContext, executionContext,
+ macroCall, startForEach.getNext(),
+ startForEach.getEndInstruction());
// Skip rows
skipCounter = step;
while (--skipCounter > 0 && iter.hasNext()) {
@@ -254,8 +230,7 @@
while (startWhen != null) {
Object val;
try {
- val = startWhen.getTest().getValue(jexlContext, jxpathContext,
- Boolean.TRUE);
+ val = startWhen.getTest().getValue(expressionContext);
} catch (Exception e) {
throw new SAXParseException(e.getMessage(), ev.getLocation(), e);
}
@@ -266,17 +241,17 @@
result = (val != null);
}
if (result) {
- execute(consumer, executionContext, macroCall,
- startWhen.getNext(), startWhen
- .getEndInstruction(), scriptManager);
+ execute(consumer, expressionContext, executionContext,
+ macroCall, startWhen.getNext(),
+ startWhen.getEndInstruction());
break;
}
startWhen = startWhen.getNextChoice();
}
if (startWhen == null && startChoose.getOtherwise() != null) {
- execute(consumer, executionContext, macroCall, startChoose
- .getOtherwise().getNext(), startChoose
- .getOtherwise().getEndInstruction(), scriptManager);
+ execute(consumer, expressionContext, executionContext,
+ macroCall, startChoose.getOtherwise().getNext(),
+ startChoose.getOtherwise().getEndInstruction());
}
ev = startChoose.getEndInstruction().getNext();
continue;
@@ -286,17 +261,19 @@
String var = null;
try {
if (startSet.getVar() != null) {
- var = startSet.getVar().getStringValue(jexlContext, jxpathContext);
+ var = startSet.getVar().getStringValue(expressionContext);
}
if (startSet.getValue() != null) {
- value = startSet.getValue().getNode(jexlContext, jxpathContext);
+ value = startSet.getValue().getNode(expressionContext);
}
} catch (Exception exc) {
throw new SAXParseException(exc.getMessage(), ev.getLocation(), exc);
}
if (value == null) {
- NodeList nodeList = toDOMNodeList("set", startSet,
- executionContext, macroCall, scriptManager);
+ NodeList nodeList =
+ toDOMNodeList("set", startSet,
+ expressionContext, executionContext,
+ macroCall);
// JXPath doesn't handle NodeList, so convert it to an array
int len = nodeList.getLength();
Node[] nodeArr = new Node[len];
@@ -306,8 +283,7 @@
value = nodeArr;
}
if (var != null) {
- jxpathContext.getVariables().declareVariable(var, value);
- jexlContext.put(var, value);
+ expressionContext.put(var, value);
}
ev = startSet.getEndInstruction().getNext();
continue;
@@ -329,25 +305,25 @@
} else if (attrEvent instanceof SubstituteAttribute) {
SubstituteAttribute substEvent = (SubstituteAttribute) attrEvent;
if (substEvent.getSubstitutions().size() == 1
- && substEvent.getSubstitutions().get(0) instanceof JXTExpression) {
+ && substEvent.getSubstitutions().get(0) instanceof JXTExpression) {
JXTExpression expr = (JXTExpression) substEvent
.getSubstitutions().get(0);
Object val;
try {
- val = expr.getNode(jexlContext, jxpathContext);
+ val = expr.getNode(expressionContext);
} catch (Exception e) {
throw new SAXParseException(e.getMessage(),
- ev.getLocation(), e);
+ ev.getLocation(), e);
} catch (Error err) {
- throw new SAXParseException(err
- .getMessage(), ev.getLocation(),
- new ErrorHolder(err));
+ throw new SAXParseException(err.getMessage(),
+ ev.getLocation(),
+ new ErrorHolder(err));
}
attributeValue = val != null ? val : "";
} else {
StringBuffer buf = new StringBuffer();
- Iterator iterSubst = substEvent
- .getSubstitutions().iterator();
+ Iterator iterSubst =
+ substEvent.getSubstitutions().iterator();
while (iterSubst.hasNext()) {
Subst subst = (Subst) iterSubst.next();
if (subst instanceof Literal) {
@@ -357,19 +333,16 @@
JXTExpression expr = (JXTExpression) subst;
Object val;
try {
- val = expr.getValue(jexlContext, jxpathContext);
+ val = expr.getValue(expressionContext);
} catch (Exception e) {
- throw new SAXParseException(e
- .getMessage(), ev
- .getLocation(), e);
+ throw new SAXParseException(e.getMessage(),
+ ev.getLocation(), e);
} catch (Error err) {
- throw new SAXParseException(err
- .getMessage(), ev
- .getLocation(),
- new ErrorHolder(err));
+ throw new SAXParseException(err.getMessage(),
+ ev.getLocation(),
+ new ErrorHolder(err));
}
- buf.append(val != null ? val.toString()
- : "");
+ buf.append(val != null ? val.toString() : "");
}
}
attributeValue = buf.toString();
@@ -379,37 +352,28 @@
}
attributeMap.put(attributeName, attributeValue);
}
- MyVariables parent = (MyVariables) jxpathContext
- .getVariables();
- MyVariables vars = new MyVariables(parent);
- MyJexlContext localJexlContext = new MyJexlContext(
- jexlContext);
+ ExpressionContext localExpressionContext =
+ new ExpressionContext(expressionContext);
HashMap macro = new HashMap();
macro.put("body", startElement);
macro.put("arguments", attributeMap);
- localJexlContext.put("macro", macro);
- vars.declareVariable("macro", macro);
+ localExpressionContext.put("macro", macro);
Iterator iter = def.getParameters().entrySet().iterator();
while (iter.hasNext()) {
Map.Entry e = (Map.Entry) iter.next();
String key = (String) e.getKey();
- StartParameter startParam = (StartParameter) e
- .getValue();
+ StartParameter startParam =
+ (StartParameter) e.getValue();
Object default_ = startParam.getDefaultValue();
Object val = attributeMap.get(key);
if (val == null) {
val = default_;
}
- localJexlContext.put(key, val);
- vars.declareVariable(key, val);
+ localExpressionContext.put(key, val);
}
- JXPathContext localJXPathContext = jxpathContextFactory
- .newContext(null, jxpathContext.getContextBean());
- localJXPathContext.setVariables(vars);
call(ev.getLocation(), startElement, consumer,
- executionContext.getChildContext(localJexlContext,
- localJXPathContext), def.getBody(), def
- .getEndInstruction(), scriptManager);
+ localExpressionContext, executionContext,
+ def.getBody(), def.getEndInstruction());
ev = startElement.getEndElement().getNext();
continue;
}
@@ -419,14 +383,13 @@
AttributeEvent attrEvent = (AttributeEvent) i.next();
if (attrEvent instanceof CopyAttribute) {
CopyAttribute copy = (CopyAttribute) attrEvent;
- attrs.addAttribute(copy.getNamespaceURI(), copy
- .getLocalName(), copy.getRaw(), copy.getType(),
- copy.getValue());
+ attrs.addAttribute(copy.getNamespaceURI(),
+ copy.getLocalName(), copy.getRaw(),
+ copy.getType(), copy.getValue());
} else if (attrEvent instanceof SubstituteAttribute) {
StringBuffer buf = new StringBuffer();
SubstituteAttribute substEvent = (SubstituteAttribute) attrEvent;
- Iterator iterSubst = substEvent.getSubstitutions()
- .iterator();
+ Iterator iterSubst = substEvent.getSubstitutions().iterator();
while (iterSubst.hasNext()) {
Subst subst = (Subst) iterSubst.next();
if (subst instanceof Literal) {
@@ -436,47 +399,44 @@
JXTExpression expr = (JXTExpression) subst;
Object val;
try {
- val = expr.getValue(jexlContext, jxpathContext);
+ val = expr.getValue(expressionContext);
} catch (Exception e) {
throw new SAXParseException(e.getMessage(),
- ev.getLocation(), e);
+ ev.getLocation(), e);
} catch (Error err) {
- throw new SAXParseException(err
- .getMessage(), ev.getLocation(),
- new ErrorHolder(err));
+ throw new SAXParseException(err.getMessage(),
+ ev.getLocation(),
+ new ErrorHolder(err));
}
buf.append(val != null ? val.toString() : "");
}
}
attrs.addAttribute(attrEvent.getNamespaceURI(),
- attrEvent.getLocalName(), attrEvent.getRaw(),
- attrEvent.getType(), buf.toString());
+ attrEvent.getLocalName(), attrEvent.getRaw(),
+ attrEvent.getType(), buf.toString());
}
}
consumer.startElement(startElement.getNamespaceURI(),
- startElement.getLocalName(), startElement.getRaw(),
- attrs);
+ startElement.getLocalName(), startElement.getRaw(),
+ attrs);
} else if (ev instanceof StartFormatNumber) {
StartFormatNumber startFormatNumber = (StartFormatNumber) ev;
try {
- String result = startFormatNumber.format(jexlContext,
- jxpathContext);
+ String result = startFormatNumber.format(expressionContext);
if (result != null) {
char[] chars = result.toCharArray();
consumer.characters(chars, 0, chars.length);
}
} catch (Exception e) {
- throw new SAXParseException(e.getMessage(), ev
- .getLocation(), e);
+ throw new SAXParseException(e.getMessage(), ev.getLocation(), e);
} catch (Error err) {
- throw new SAXParseException(err.getMessage(), ev
- .getLocation(), new ErrorHolder(err));
+ throw new SAXParseException(err.getMessage(), ev.getLocation(),
+ new ErrorHolder(err));
}
} else if (ev instanceof StartFormatDate) {
StartFormatDate startFormatDate = (StartFormatDate) ev;
try {
- String result = startFormatDate.format(jexlContext,
- jxpathContext);
+ String result = startFormatDate.format(expressionContext);
if (result != null) {
char[] chars = result.toCharArray();
consumer.characters(chars, 0, chars.length);
@@ -495,8 +455,10 @@
} else if (ev instanceof StartComment) {
StartComment startJXComment = (StartComment) ev;
// Parse the body of the comment
- NodeList nodeList = toDOMNodeList("comment", startJXComment,
- executionContext, macroCall, scriptManager);
+ NodeList nodeList =
+ toDOMNodeList("comment", startJXComment,
+ expressionContext, executionContext,
+ macroCall);
// JXPath doesn't handle NodeList, so convert it to an array
int len = nodeList.getLength();
final StringBuffer buf = new StringBuffer();
@@ -511,7 +473,7 @@
// header
} catch (ProcessingException e) {
throw new SAXParseException(e.getMessage(),
- startJXComment.getLocation(), e);
+ startJXComment.getLocation(), e);
}
}
char[] chars = new char[buf.length()];
@@ -537,8 +499,7 @@
StartOut startOut = (StartOut) ev;
Object val;
try {
- val = startOut.getCompiledExpression().getNode(jexlContext, jxpathContext,
- startOut.getLenient());
+ val = startOut.getCompiledExpression().getNode(expressionContext);
if (val instanceof Node) {
executeDOM(consumer, (Node) val);
} else if (val instanceof NodeList) {
@@ -573,14 +534,14 @@
StartEval startEval = (StartEval) ev;
JXTExpression expr = startEval.getValue();
try {
- Object val = expr.getNode(jexlContext, jxpathContext);
+ Object val = expr.getNode(expressionContext);
if (!(val instanceof StartElement)) {
throw new Exception(
"macro invocation required instead of: " + val);
}
StartElement call = (StartElement) val;
- execute(consumer, executionContext, call, call.getNext(),
- call.getEndElement(), scriptManager);
+ execute(consumer, expressionContext, executionContext,
+ call, call.getNext(), call.getEndElement());
} catch (Exception exc) {
throw new SAXParseException(exc.getMessage(), ev
.getLocation(), exc);
@@ -593,22 +554,22 @@
} else if (ev instanceof StartEvalBody) {
StartEvalBody startEval = (StartEvalBody) ev;
try {
- execute(consumer, executionContext, null, macroCall
- .getNext(), macroCall.getEndElement(),
- scriptManager);
+ execute(consumer, expressionContext, executionContext,
+ null, macroCall.getNext(), macroCall.getEndElement());
} catch (Exception exc) {
- throw new SAXParseException(exc.getMessage(), ev
- .getLocation(), exc);
+ throw new SAXParseException(exc.getMessage(),
+ ev.getLocation(), exc);
} catch (Error err) {
- throw new SAXParseException(err.getMessage(), ev
- .getLocation(), new ErrorHolder(err));
+ throw new SAXParseException(err.getMessage(),
+ ev.getLocation(),
+ new ErrorHolder(err));
}
ev = startEval.getEndInstruction().getNext();
continue;
} else if (ev instanceof StartDefine) {
StartDefine startDefine = (StartDefine) ev;
executionContext.getDefinitions().put(startDefine.getQname(),
- startDefine);
+ startDefine);
ev = startDefine.getEndInstruction().getNext();
continue;
} else if (ev instanceof StartImport) {
@@ -631,7 +592,7 @@
JXTExpression expr = (JXTExpression) subst;
Object val;
try {
- val = expr.getValue(jexlContext, jxpathContext);
+ val = expr.getValue(expressionContext);
} catch (Exception exc) {
throw new SAXParseException(exc.getMessage(),
ev.getLocation(), exc);
@@ -646,33 +607,32 @@
}
StartDocument doc;
try {
- doc = scriptManager.resolveTemplate(uri);
+ doc = executionContext.getScriptManager().resolveTemplate(uri);
} catch (ProcessingException exc) {
throw new SAXParseException(exc.getMessage(), ev
.getLocation(), exc);
}
- JXPathContext selectJXPath = jxpathContext;
- MyJexlContext selectJexl = jexlContext;
+ ExpressionContext selectExpressionContext = expressionContext;
if (startImport.getSelect() != null) {
try {
Object obj =
- startImport.getSelect().getValue(jexlContext, jxpathContext);
- selectJXPath = jxpathContextFactory.newContext(null, obj);
- selectJXPath.setVariables(jxpathContext.getVariables());
- selectJexl = new MyJexlContext(jexlContext);
- JXTemplateGenerator.fillContext(obj, selectJexl);
+ startImport.getSelect().getValue(expressionContext);
+ selectExpressionContext =
+ new ExpressionContext(expressionContext);
+ selectExpressionContext.setContextBean(obj);
+ FlowObjectModelHelper.fillContext(obj, selectExpressionContext);
} catch (Exception exc) {
- throw new SAXParseException(exc.getMessage(), ev
- .getLocation(), exc);
+ throw new SAXParseException(exc.getMessage(),
+ ev.getLocation(), exc);
} catch (Error err) {
- throw new SAXParseException(err.getMessage(), ev
- .getLocation(), new ErrorHolder(err));
+ throw new SAXParseException(err.getMessage(),
+ ev.getLocation(),
+ new ErrorHolder(err));
}
}
try {
- execute(consumer, executionContext.getChildContext(
- selectJexl, selectJXPath), macroCall,
- doc.getNext(), doc.getEndDocument(), scriptManager);
+ execute(consumer, expressionContext, executionContext,
+ macroCall, doc.getNext(), doc.getEndDocument());
} catch (Exception exc) {
throw new SAXParseException(
"Exception occurred in imported template " + uri
@@ -701,8 +661,10 @@
throws SAXException;
}
- private static void characters(ExecutionContext executionContext,
- TextEvent event, CharHandler handler) throws SAXException {
+ private static void characters(ExpressionContext expressionContext,
+ ExecutionContext executionContext,
+ TextEvent event, CharHandler handler)
+ throws SAXException {
Iterator iter = event.getSubstitutions().iterator();
while (iter.hasNext()) {
Object subst = iter.next();
@@ -712,8 +674,7 @@
} else {
JXTExpression expr = (JXTExpression) subst;
try {
- Object val = expr.getValue(executionContext.getJexlContext(),
- executionContext.getJXPathContext());
+ Object val = expr.getValue(expressionContext);
chars = val != null ? val.toString().toCharArray()
: ArrayUtils.EMPTY_CHAR_ARRAY;
} catch (Exception e) {
@@ -740,28 +701,32 @@
}
private static void call(Locator location, StartElement macroCall,
- final XMLConsumer consumer, ExecutionContext executionContext,
- Event startEvent, Event endEvent, ScriptManager scriptManager)
- throws SAXException {
+ final XMLConsumer consumer,
+ ExpressionContext expressionContext,
+ ExecutionContext executionContext,
+ Event startEvent, Event endEvent)
+ throws SAXException {
try {
- execute(consumer, executionContext, macroCall, startEvent,
- endEvent, scriptManager);
+ execute(consumer, expressionContext, executionContext,
+ macroCall, startEvent, endEvent);
} catch (SAXParseException exc) {
throw new SAXParseException(macroCall.getLocalName() + ": "
- + exc.getMessage(), location, exc);
+ + exc.getMessage(), location, exc);
}
}
private static NodeList toDOMNodeList(String elementName,
- StartInstruction si, ExecutionContext executionContext,
- StartElement macroCall, ScriptManager scriptManager)
+ StartInstruction si,
+ ExpressionContext expressionContext,
+ ExecutionContext executionContext,
+ StartElement macroCall)
throws SAXException {
DOMBuilder builder = new DOMBuilder();
builder.startDocument();
builder.startElement(JXTemplateGenerator.NS, elementName, elementName,
- EMPTY_ATTRS);
- execute(builder, executionContext, macroCall, si.getNext(), si
- .getEndInstruction(), scriptManager);
+ EMPTY_ATTRS);
+ execute(builder, expressionContext, executionContext,
+ macroCall, si.getNext(), si.getEndInstruction());
builder.endElement(JXTemplateGenerator.NS, elementName, elementName);
builder.endDocument();
Node node = builder.getDocument().getDocumentElement();
Modified: cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/Parser.java
Url: http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/Parser.java?view=diff&rev=125367&p1=cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/Parser.java&r1=125366&p2=cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/Parser.java&r2=125367
==============================================================================
--- cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/Parser.java (original)
+++ cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/Parser.java Sun Jan 16 13:35:37 2005
@@ -56,6 +56,8 @@
final static String FORMAT_DATE = "formatDate";
final static String COMMENT = "comment";
+ public static final Locator NULL_LOCATOR = new LocatorImpl();
+
public Parser() {
// EMPTY
}
@@ -103,8 +105,7 @@
throws SAXException {
if (charBuf == null) {
charBuf = new StringBuffer(length);
- charLocation = locator != null ? new LocatorImpl(locator)
- : JXTemplateGenerator.NULL_LOCATOR;
+ charLocation = locator != null ? new LocatorImpl(locator) : NULL_LOCATOR;
}
charBuf.append(ch, start, length);
}
Modified: cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/event/Event.java
Url: http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/event/Event.java?view=diff&rev=125367&p1=cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/event/Event.java&r1=125366&p2=cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/event/Event.java&r2=125367
==============================================================================
--- cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/event/Event.java (original)
+++ cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/event/Event.java Sun Jan 16 13:35:37 2005
@@ -23,9 +23,10 @@
protected final Locator location;
protected Event next; // in document order
+ public static final Locator NULL_LOCATOR = new LocatorImpl();
+
public Event(Locator locator) {
- this.location = locator != null ? new LocatorImpl(locator)
- : JXTemplateGenerator.NULL_LOCATOR;
+ this.location = locator != null ? new LocatorImpl(locator) : NULL_LOCATOR;
}
public final Locator getLocation() {
@@ -53,4 +54,4 @@
}
return buf.toString();
}
-}
\ No newline at end of file
+}
Modified: cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/event/StartFormatDate.java
Url: http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/event/StartFormatDate.java?view=diff&rev=125367&p1=cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/event/StartFormatDate.java&r1=125366&p2=cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/event/StartFormatDate.java&r2=125367
==============================================================================
--- cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/event/StartFormatDate.java (original)
+++ cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/event/StartFormatDate.java Sun Jan 16 13:35:37 2005
@@ -21,10 +21,9 @@
import java.util.Stack;
import java.util.TimeZone;
+import org.apache.cocoon.components.expression.ExpressionContext;
import org.apache.cocoon.template.jxtg.environment.ValueHelper;
import org.apache.cocoon.template.jxtg.expression.JXTExpression;
-import org.apache.commons.jexl.JexlContext;
-import org.apache.commons.jxpath.JXPathContext;
import org.xml.sax.Attributes;
import org.xml.sax.Locator;
import org.xml.sax.SAXException;
@@ -61,17 +60,16 @@
this.locale = JXTExpression.compileExpr(attrs.getValue("locale"), null, locator);
}
- public String format(JexlContext jexl, JXPathContext jxp) throws Exception {
- String var = this.var.getStringValue(jexl, jxp);
- Object value = this.value.getValue(jexl, jxp);
- Object locVal = this.locale.getValue(jexl, jxp);
- String pattern = this.pattern.getStringValue(jexl,
- jxp);
- Object timeZone = this.timeZone.getValue(jexl, jxp);
-
- String type = this.type.getStringValue(jexl, jxp);
- String timeStyle = this.timeStyle.getStringValue(jexl, jxp);
- String dateStyle = this.dateStyle.getStringValue(jexl, jxp);
+ public String format(ExpressionContext expressionContext) throws Exception {
+ String var = this.var.getStringValue(expressionContext);
+ Object value = this.value.getValue(expressionContext);
+ Object locVal = this.locale.getValue(expressionContext);
+ String pattern = this.pattern.getStringValue(expressionContext);
+ Object timeZone = this.timeZone.getValue(expressionContext);
+
+ String type = this.type.getStringValue(expressionContext);
+ String timeStyle = this.timeStyle.getStringValue(expressionContext);
+ String dateStyle = this.dateStyle.getStringValue(expressionContext);
String formatted = null;
@@ -113,8 +111,7 @@
}
formatted = formatter.format(value);
if (var != null) {
- jexl.getVars().put(var, formatted);
- jxp.getVariables().declareVariable(var, formatted);
+ expressionContext.put(var, formatted);
return null;
}
return formatted;
Modified: cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/event/StartFormatNumber.java
Url: http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/event/StartFormatNumber.java?view=diff&rev=125367&p1=cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/event/StartFormatNumber.java&r1=125366&p2=cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/event/StartFormatNumber.java&r2=125367
==============================================================================
--- cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/event/StartFormatNumber.java (original)
+++ cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/event/StartFormatNumber.java Sun Jan 16 13:35:37 2005
@@ -22,10 +22,9 @@
import java.util.Locale;
import java.util.Stack;
+import org.apache.cocoon.components.expression.ExpressionContext;
import org.apache.cocoon.template.jxtg.environment.ValueHelper;
import org.apache.cocoon.template.jxtg.expression.JXTExpression;
-import org.apache.commons.jexl.JexlContext;
-import org.apache.commons.jxpath.JXPathContext;
import org.apache.commons.lang.StringUtils;
import org.xml.sax.Attributes;
import org.xml.sax.Locator;
@@ -89,20 +88,20 @@
this.var = JXTExpression.compileExpr(attrs.getValue("var"), null, locator);
}
- public String format(JexlContext jexl, JXPathContext jxp) throws Exception {
+ public String format(ExpressionContext expressionContext) throws Exception {
// Determine formatting locale
- String var = this.var.getStringValue(jexl, jxp);
- Number input = this.value.getNumberValue(jexl, jxp);
- String type = this.type.getStringValue(jexl, jxp);
- String pattern = this.pattern.getStringValue(jexl, jxp);
- String currencyCode = this.currencyCode.getStringValue(jexl, jxp);
- String currencySymbol = this.currencySymbol.getStringValue(jexl, jxp);
- Boolean isGroupingUsed = this.isGroupingUsed.getBooleanValue(jexl, jxp);
- Number maxIntegerDigits = this.maxIntegerDigits.getNumberValue(jexl, jxp);
- Number minIntegerDigits = this.minIntegerDigits.getNumberValue(jexl, jxp);
- Number maxFractionDigits = this.maxFractionDigits.getNumberValue(jexl, jxp);
- Number minFractionDigits = this.minFractionDigits.getNumberValue(jexl, jxp);
- String localeStr = this.locale.getStringValue(jexl, jxp);
+ String var = this.var.getStringValue(expressionContext);
+ Number input = this.value.getNumberValue(expressionContext);
+ String type = this.type.getStringValue(expressionContext);
+ String pattern = this.pattern.getStringValue(expressionContext);
+ String currencyCode = this.currencyCode.getStringValue(expressionContext);
+ String currencySymbol = this.currencySymbol.getStringValue(expressionContext);
+ Boolean isGroupingUsed = this.isGroupingUsed.getBooleanValue(expressionContext);
+ Number maxIntegerDigits = this.maxIntegerDigits.getNumberValue(expressionContext);
+ Number minIntegerDigits = this.minIntegerDigits.getNumberValue(expressionContext);
+ Number maxFractionDigits = this.maxFractionDigits.getNumberValue(expressionContext);
+ Number minFractionDigits = this.minFractionDigits.getNumberValue(expressionContext);
+ String localeStr = this.locale.getStringValue(expressionContext);
Locale loc = localeStr != null
? ValueHelper.parseLocale(localeStr, null)
: Locale.getDefault();
@@ -129,8 +128,7 @@
formatted = input.toString();
}
if (var != null) {
- jexl.getVars().put(var, formatted);
- jxp.getVariables().declareVariable(var, formatted);
+ expressionContext.put(var, formatted);
return null;
}
return formatted;
Modified: cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/event/StartIf.java
Url: http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/event/StartIf.java?view=diff&rev=125367&p1=cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/event/StartIf.java&r1=125366&p2=cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/event/StartIf.java&r2=125367
==============================================================================
--- cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/event/StartIf.java (original)
+++ cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/event/StartIf.java Sun Jan 16 13:35:37 2005
@@ -35,6 +35,8 @@
String test = attrs.getValue("test");
if (test != null) {
this.test = JXTExpression.compileExpr(test, "if: \"test\": ", locator);
+ // Why is test lenient?
+ this.test.setLenient(Boolean.TRUE);
} else {
throw new SAXParseException("if: \"test\" is required", locator, null);
}
Modified: cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/event/StartOut.java
Url: http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/event/StartOut.java?view=diff&rev=125367&p1=cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/event/StartOut.java&r1=125366&p2=cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/event/StartOut.java&r2=125367
==============================================================================
--- cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/event/StartOut.java (original)
+++ cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/event/StartOut.java Sun Jan 16 13:35:37 2005
@@ -25,7 +25,6 @@
public class StartOut extends StartInstruction {
private final JXTExpression compiledExpression;
- private final Boolean lenient;
public StartOut(StartElement raw, Attributes attrs, Stack stack)
throws SAXException {
@@ -37,7 +36,9 @@
this.compiledExpression =
JXTExpression.compileExpr(value, "out: \"value\": ", locator);
String lenientValue = attrs.getValue("lenient");
- this.lenient = lenientValue == null ? null : Boolean.valueOf(lenientValue);
+ Boolean lenient = lenientValue == null ? null : Boolean.valueOf(lenientValue);
+ // Why can out be lenient?
+ this.compiledExpression.setLenient(lenient);
} else {
throw new SAXParseException("out: \"value\" is required", locator, null);
}
@@ -45,9 +46,5 @@
public JXTExpression getCompiledExpression() {
return compiledExpression;
- }
-
- public Boolean getLenient() {
- return lenient;
}
}
Modified: cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/event/StartWhen.java
Url: http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/event/StartWhen.java?view=diff&rev=125367&p1=cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/event/StartWhen.java&r1=125366&p2=cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/event/StartWhen.java&r2=125367
==============================================================================
--- cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/event/StartWhen.java (original)
+++ cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/event/StartWhen.java Sun Jan 16 13:35:37 2005
@@ -40,6 +40,8 @@
String test = attrs.getValue("test");
if (test != null) {
this.test = JXTExpression.compileExpr(test, "when: \"test\": ", locator);
+ // Why is test lenient?
+ this.test.setLenient(Boolean.TRUE);
StartChoose startChoose = (StartChoose) stack.peek();
if (startChoose.getFirstChoice() != null) {