You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@cocoon.apache.org by gk...@apache.org on 2007/08/17 16:25:18 UTC
svn commit: r567057 - in /cocoon/trunk/core:
cocoon-core/src/test/java/org/apache/cocoon/components/treeprocessor/variables/
cocoon-core/src/test/resources/org/apache/cocoon/transformation/
cocoon-sitemap/cocoon-sitemap-impl/src/main/java/org/apache/co...
Author: gkossakowski
Date: Fri Aug 17 07:25:17 2007
New Revision: 567057
URL: http://svn.apache.org/viewvc?view=rev&rev=567057
Log:
COCOON-2115: Implemented evaluation of sitemap expressions by using StringTemplateParser interface:
* classes extending VariableResolver are now Spring beans
* implemented LegacySitemapStringTemplateParser that uses PreparedVariableResolver for parsing expression. This class is a legacy bridge between new interfaces (StringTemplateParsing) and old implementation.
* implemented LegacySubstitutions that extend Substitutions class and supports special handling of LegacySitemapStringTemplateParser class. It was needed because sitemap has concepts (like InvocationContext) that are not present in cocoon-expression-language-api module.
* implemented StringTemplateParserVariableResolver class that allows to use StringTemplateParser as VariableResolver in sitemap. It's general purpose bridge so you can use any class implementing StringTemplateParser interface.
* adapted test cases so they can work with Springified VariableResolvers.
Added:
cocoon/trunk/core/cocoon-core/src/test/resources/org/apache/cocoon/transformation/I18NTransformerTestCase.spring.xml (with props)
cocoon/trunk/core/cocoon-sitemap/cocoon-sitemap-impl/src/main/java/org/apache/cocoon/components/treeprocessor/variables/LegacySitemapStringTemplateParser.java (with props)
cocoon/trunk/core/cocoon-sitemap/cocoon-sitemap-impl/src/main/java/org/apache/cocoon/components/treeprocessor/variables/LegacySubstitutions.java (with props)
cocoon/trunk/core/cocoon-sitemap/cocoon-sitemap-impl/src/main/java/org/apache/cocoon/components/treeprocessor/variables/StringTemplateParserVariableResolver.java (with props)
cocoon/trunk/core/cocoon-sitemap/cocoon-sitemap-impl/src/main/resources/META-INF/cocoon/spring/LegacySitemapStringTemplateParser.xml (with props)
cocoon/trunk/core/cocoon-sitemap/cocoon-sitemap-impl/src/main/resources/META-INF/cocoon/spring/NOPVariableResolver.xml (with props)
cocoon/trunk/core/cocoon-sitemap/cocoon-sitemap-impl/src/main/resources/META-INF/cocoon/spring/PreparedVariableResolver.xml (with props)
cocoon/trunk/core/cocoon-sitemap/cocoon-sitemap-impl/src/main/resources/META-INF/cocoon/spring/StringTemplateParserVariableResolver.xml (with props)
Modified:
cocoon/trunk/core/cocoon-core/src/test/java/org/apache/cocoon/components/treeprocessor/variables/PreparedVariableResolverTestCase.java
cocoon/trunk/core/cocoon-sitemap/cocoon-sitemap-impl/src/main/java/org/apache/cocoon/components/treeprocessor/variables/NOPVariableResolver.java
cocoon/trunk/core/cocoon-sitemap/cocoon-sitemap-impl/src/main/java/org/apache/cocoon/components/treeprocessor/variables/PreparedVariableResolver.java
cocoon/trunk/core/cocoon-sitemap/cocoon-sitemap-impl/src/main/java/org/apache/cocoon/components/treeprocessor/variables/VariableResolver.java
cocoon/trunk/core/cocoon-sitemap/cocoon-sitemap-impl/src/main/java/org/apache/cocoon/components/treeprocessor/variables/VariableResolverFactory.java
Modified: cocoon/trunk/core/cocoon-core/src/test/java/org/apache/cocoon/components/treeprocessor/variables/PreparedVariableResolverTestCase.java
URL: http://svn.apache.org/viewvc/cocoon/trunk/core/cocoon-core/src/test/java/org/apache/cocoon/components/treeprocessor/variables/PreparedVariableResolverTestCase.java?view=diff&rev=567057&r1=567056&r2=567057
==============================================================================
--- cocoon/trunk/core/cocoon-core/src/test/java/org/apache/cocoon/components/treeprocessor/variables/PreparedVariableResolverTestCase.java (original)
+++ cocoon/trunk/core/cocoon-core/src/test/java/org/apache/cocoon/components/treeprocessor/variables/PreparedVariableResolverTestCase.java Fri Aug 17 07:25:17 2007
@@ -31,6 +31,16 @@
* @version $Id$
*/
public class PreparedVariableResolverTestCase extends SitemapComponentTestCase {
+
+ private PreparedVariableResolver resolver;
+ //private Map objectModel;
+
+ public void setUp() throws Exception {
+ super.setUp();
+ resolver = new PreparedVariableResolver();
+ resolver.setManager(getManager());
+ //objectModel = getObjectModel();
+ }
public void testNestedExpressions() throws Exception {
String expr = "{request-param:{request-param:foo}}";
@@ -43,7 +53,7 @@
Map sitemapElements = new HashMap();
context.pushMap("sitemap", sitemapElements);
- PreparedVariableResolver resolver = new PreparedVariableResolver(expr, getManager());
+ resolver.setExpression(expr);
assertEquals("123", resolver.resolve(context, getObjectModel()));
}
@@ -58,7 +68,7 @@
Map sitemapElements = new HashMap();
sitemapElements.put("1", "oo");
context.pushMap("sitemap", sitemapElements);
- PreparedVariableResolver resolver = new PreparedVariableResolver(expr, getManager());
+ resolver.setExpression(expr);
assertEquals("123", resolver.resolve(context, getObjectModel()));
}
@@ -71,7 +81,7 @@
Map sitemapElements = new HashMap();
sitemapElements.put("name", "123");
context.pushMap("label", sitemapElements);
- PreparedVariableResolver resolver = new PreparedVariableResolver(expr, getManager());
+ resolver.setExpression(expr);
assertEquals("123", resolver.resolve(context, getObjectModel()));
}
@@ -84,7 +94,7 @@
Map sitemapElements = new HashMap();
sitemapElements.put("1", "abc");
context.pushMap("label", sitemapElements);
- PreparedVariableResolver resolver = new PreparedVariableResolver(expr, getManager());
+ resolver.setExpression(expr);
assertEquals("123abc", resolver.resolve(context, getObjectModel()));
}
@@ -97,7 +107,7 @@
Map sitemapElements = new HashMap();
sitemapElements.put("1", "abc");
context.pushMap("label", sitemapElements);
- PreparedVariableResolver resolver = new PreparedVariableResolver(expr, getManager());
+ resolver.setExpression(expr);
assertEquals("123abc/def", resolver.resolve(context, getObjectModel()));
}
@@ -110,7 +120,7 @@
Map sitemapElements = new HashMap();
sitemapElements.put("1", "abc");
context.pushMap("label", sitemapElements);
- PreparedVariableResolver resolver = new PreparedVariableResolver(expr, getManager());
+ resolver.setExpression(expr);
assertEquals("123abc/def", resolver.resolve(context, getObjectModel()));
}
@@ -129,7 +139,7 @@
sitemapElements.put("1", "oscar");
context.pushMap("label2", sitemapElements);
- PreparedVariableResolver resolver = new PreparedVariableResolver(expr, getManager());
+ resolver.setExpression(expr);
assertEquals("from juliet to oscar", resolver.resolve(context, getObjectModel()));
}
@@ -148,7 +158,7 @@
sitemapElements.put("1", "oscar");
context.pushMap("label2", sitemapElements);
- PreparedVariableResolver resolver = new PreparedVariableResolver(expr, getManager());
+ resolver.setExpression(expr);
assertEquals("from juliet to oscar", resolver.resolve(context, getObjectModel()));
}
@@ -162,7 +172,7 @@
sitemapElements = new HashMap();
context.pushMap("label", sitemapElements);
- PreparedVariableResolver resolver = new PreparedVariableResolver(expr, getManager());
+ resolver.setExpression(expr);
assertEquals("http://cocoon.apache.org", resolver.resolve(context, getObjectModel()));
}
@@ -176,7 +186,7 @@
sitemapElements = new HashMap();
context.pushMap("label", sitemapElements);
- PreparedVariableResolver resolver = new PreparedVariableResolver(expr, getManager());
+ resolver.setExpression(expr);
assertEquals(":colon-starts-this", resolver.resolve(context, getObjectModel()));
}
@@ -191,7 +201,7 @@
sitemapElements.put("1", "abc");
context.pushMap("label", sitemapElements);
- PreparedVariableResolver resolver = new PreparedVariableResolver(expr, getManager());
+ resolver.setExpression(expr);
assertEquals("abc:abc", resolver.resolve(context, getObjectModel()));
}
@@ -205,7 +215,7 @@
sitemapElements = new HashMap();
context.pushMap("label", sitemapElements);
- PreparedVariableResolver resolver = new PreparedVariableResolver(expr, getManager());
+ resolver.setExpression(expr);
assertEquals("This is a {brace}", resolver.resolve(context, getObjectModel()));
}
@@ -216,7 +226,7 @@
Map sitemapElements = new HashMap();
context.pushMap("sitemap", sitemapElements);
- PreparedVariableResolver resolver = new PreparedVariableResolver(expr, getManager());
+ resolver.setExpression(expr);
assertEquals("", resolver.resolve(context, getObjectModel()));
}
@@ -230,7 +240,7 @@
Map sitemapElements = new HashMap();
context.pushMap("sitemap", sitemapElements);
- PreparedVariableResolver resolver = new PreparedVariableResolver(expr, getManager());
+ resolver.setExpression(expr);
assertEquals("bar", resolver.resolve(context, getObjectModel()));
}
Added: cocoon/trunk/core/cocoon-core/src/test/resources/org/apache/cocoon/transformation/I18NTransformerTestCase.spring.xml
URL: http://svn.apache.org/viewvc/cocoon/trunk/core/cocoon-core/src/test/resources/org/apache/cocoon/transformation/I18NTransformerTestCase.spring.xml?view=auto&rev=567057
==============================================================================
--- cocoon/trunk/core/cocoon-core/src/test/resources/org/apache/cocoon/transformation/I18NTransformerTestCase.spring.xml (added)
+++ cocoon/trunk/core/cocoon-core/src/test/resources/org/apache/cocoon/transformation/I18NTransformerTestCase.spring.xml Fri Aug 17 07:25:17 2007
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You 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.
+-->
+<beans xmlns="http://www.springframework.org/schema/beans"
+ xmlns:p="http://www.springframework.org/schema/p"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">
+
+ <import resource="classpath:META-INF/cocoon/spring/PreparedVariableResolver.xml"/>
+ <import resource="classpath:META-INF/cocoon/spring/NOPVariableResolver.xml"/>
+
+</beans>
\ No newline at end of file
Propchange: cocoon/trunk/core/cocoon-core/src/test/resources/org/apache/cocoon/transformation/I18NTransformerTestCase.spring.xml
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: cocoon/trunk/core/cocoon-core/src/test/resources/org/apache/cocoon/transformation/I18NTransformerTestCase.spring.xml
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: cocoon/trunk/core/cocoon-sitemap/cocoon-sitemap-impl/src/main/java/org/apache/cocoon/components/treeprocessor/variables/LegacySitemapStringTemplateParser.java
URL: http://svn.apache.org/viewvc/cocoon/trunk/core/cocoon-sitemap/cocoon-sitemap-impl/src/main/java/org/apache/cocoon/components/treeprocessor/variables/LegacySitemapStringTemplateParser.java?view=auto&rev=567057
==============================================================================
--- cocoon/trunk/core/cocoon-sitemap/cocoon-sitemap-impl/src/main/java/org/apache/cocoon/components/treeprocessor/variables/LegacySitemapStringTemplateParser.java (added)
+++ cocoon/trunk/core/cocoon-sitemap/cocoon-sitemap-impl/src/main/java/org/apache/cocoon/components/treeprocessor/variables/LegacySitemapStringTemplateParser.java Fri Aug 17 07:25:17 2007
@@ -0,0 +1,114 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.
+ */
+package org.apache.cocoon.components.treeprocessor.variables;
+
+import java.io.Reader;
+import java.io.StringWriter;
+import java.util.Iterator;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.avalon.framework.service.ServiceException;
+import org.apache.avalon.framework.service.ServiceManager;
+import org.apache.cocoon.components.treeprocessor.InvokeContext;
+import org.apache.cocoon.el.parsing.Subst;
+import org.apache.cocoon.objectmodel.ObjectModel;
+import org.apache.cocoon.sitemap.PatternException;
+import org.apache.cocoon.template.expression.AbstractStringTemplateParser;
+import org.apache.commons.io.IOUtils;
+
+public class LegacySitemapStringTemplateParser extends AbstractStringTemplateParser {
+
+ private ServiceManager serviceManager;
+
+ public ServiceManager getServiceManager() {
+ return serviceManager;
+ }
+
+ public void setServiceManager(ServiceManager serviceManager) {
+ this.serviceManager = serviceManager;
+ }
+
+ public List parseSubstitutions(Reader in) throws Exception {
+ LinkedList substitutions = new LinkedList();
+ StringWriter writer = new StringWriter();
+ IOUtils.copy(in, writer);
+ String expression = writer.toString();
+ substitutions.add(new SitemapExpressionSubstitution(expression, serviceManager));
+ return substitutions;
+ }
+
+public final class SitemapExpressionSubstitution implements Subst {
+
+ private PreparedVariableResolver resolver;
+
+ public SitemapExpressionSubstitution(String expression, ServiceManager serviceManager) throws PatternException {
+ try {
+ this.resolver = (PreparedVariableResolver)serviceManager.lookup(PreparedVariableResolver.ROLE);
+ this.resolver.setExpression(expression);
+ } catch (ServiceException e) {
+ throw new PatternException("Could not obtain PreparedVariableResolver", e);
+ }
+ }
+
+ public Boolean getBooleanValue(ObjectModel objectModel) throws Exception {
+ throw new UnsupportedOperationException();
+ }
+
+ public Object getCompiledExpression() {
+ throw new UnsupportedOperationException();
+ }
+
+ public int getIntValue(ObjectModel objectModel) throws Exception {
+ throw new UnsupportedOperationException();
+ }
+
+ public Iterator getIterator(ObjectModel objectModel) throws Exception {
+ throw new UnsupportedOperationException();
+ }
+
+ public Object getNode(ObjectModel objectModel) throws Exception {
+ throw new UnsupportedOperationException();
+ }
+
+ public Number getNumberValue(ObjectModel objectModel) throws Exception {
+ throw new UnsupportedOperationException();
+ }
+
+ public String getRaw() {
+ throw new UnsupportedOperationException();
+ }
+
+ public String getStringValue(ObjectModel objectModel) throws Exception {
+ throw new UnsupportedOperationException();
+ }
+
+ public String getStringValue(InvokeContext context, Map oldObjectModel) throws PatternException {
+ return resolver.resolve(context, oldObjectModel);
+ }
+
+ public Object getValue(ObjectModel objectModel) throws Exception {
+ throw new UnsupportedOperationException();
+ }
+
+ public void setLenient(Boolean lenient) {
+ //ignore
+ }
+ }
+
+}
Propchange: cocoon/trunk/core/cocoon-sitemap/cocoon-sitemap-impl/src/main/java/org/apache/cocoon/components/treeprocessor/variables/LegacySitemapStringTemplateParser.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: cocoon/trunk/core/cocoon-sitemap/cocoon-sitemap-impl/src/main/java/org/apache/cocoon/components/treeprocessor/variables/LegacySitemapStringTemplateParser.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: cocoon/trunk/core/cocoon-sitemap/cocoon-sitemap-impl/src/main/java/org/apache/cocoon/components/treeprocessor/variables/LegacySubstitutions.java
URL: http://svn.apache.org/viewvc/cocoon/trunk/core/cocoon-sitemap/cocoon-sitemap-impl/src/main/java/org/apache/cocoon/components/treeprocessor/variables/LegacySubstitutions.java?view=auto&rev=567057
==============================================================================
--- cocoon/trunk/core/cocoon-sitemap/cocoon-sitemap-impl/src/main/java/org/apache/cocoon/components/treeprocessor/variables/LegacySubstitutions.java (added)
+++ cocoon/trunk/core/cocoon-sitemap/cocoon-sitemap-impl/src/main/java/org/apache/cocoon/components/treeprocessor/variables/LegacySubstitutions.java Fri Aug 17 07:25:17 2007
@@ -0,0 +1,59 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.
+ */
+package org.apache.cocoon.components.treeprocessor.variables;
+
+import java.util.Iterator;
+import java.util.Map;
+
+import org.apache.cocoon.components.treeprocessor.InvokeContext;
+import org.apache.cocoon.el.parsing.Subst;
+import org.apache.cocoon.objectmodel.ObjectModel;
+import org.apache.cocoon.template.expression.Substitutions;
+import org.xml.sax.Locator;
+import org.xml.sax.SAXException;
+import org.xml.sax.SAXParseException;
+
+public class LegacySubstitutions extends Substitutions {
+
+ public LegacySubstitutions(LegacySitemapStringTemplateParser stringTemplateParser, Locator location, String stringTemplate) throws SAXException {
+ super(stringTemplateParser, location, stringTemplate);
+ }
+
+ public String toString(Locator location, ObjectModel objectModel) throws SAXException {
+ throw new UnsupportedOperationException();
+ }
+
+ public String toString(Locator location, ObjectModel objectModel, InvokeContext context, Map oldObjectModel) throws SAXParseException {
+ StringBuffer buf = new StringBuffer();
+ Iterator iterSubst = iterator();
+ while (iterSubst.hasNext()) {
+ Subst subst = (Subst) iterSubst.next();
+ Object val;
+ try {
+ if (subst instanceof LegacySitemapStringTemplateParser.SitemapExpressionSubstitution)
+ val = ((LegacySitemapStringTemplateParser.SitemapExpressionSubstitution)subst).getStringValue(context, oldObjectModel);
+ else
+ val = subst.getValue(objectModel);
+ } catch (Exception e) {
+ throw new SAXParseException(e.getMessage(), location, e);
+ }
+ buf.append(val != null ? val.toString() : "");
+ }
+ return buf.toString();
+ }
+
+}
Propchange: cocoon/trunk/core/cocoon-sitemap/cocoon-sitemap-impl/src/main/java/org/apache/cocoon/components/treeprocessor/variables/LegacySubstitutions.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: cocoon/trunk/core/cocoon-sitemap/cocoon-sitemap-impl/src/main/java/org/apache/cocoon/components/treeprocessor/variables/LegacySubstitutions.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Modified: cocoon/trunk/core/cocoon-sitemap/cocoon-sitemap-impl/src/main/java/org/apache/cocoon/components/treeprocessor/variables/NOPVariableResolver.java
URL: http://svn.apache.org/viewvc/cocoon/trunk/core/cocoon-sitemap/cocoon-sitemap-impl/src/main/java/org/apache/cocoon/components/treeprocessor/variables/NOPVariableResolver.java?view=diff&rev=567057&r1=567056&r2=567057
==============================================================================
--- cocoon/trunk/core/cocoon-sitemap/cocoon-sitemap-impl/src/main/java/org/apache/cocoon/components/treeprocessor/variables/NOPVariableResolver.java (original)
+++ cocoon/trunk/core/cocoon-sitemap/cocoon-sitemap-impl/src/main/java/org/apache/cocoon/components/treeprocessor/variables/NOPVariableResolver.java Fri Aug 17 07:25:17 2007
@@ -26,11 +26,17 @@
* @version $Id$
*/
public class NOPVariableResolver extends VariableResolver {
+
+ public final static String ROLE = NOPVariableResolver.class.getName();
private String expression = null;
+
+ public NOPVariableResolver() {
+ super("");
+ }
- public NOPVariableResolver(String expression) {
- super(expression);
+ public void setExpression(String expression) {
+ this.originalExpr = expression;
if (expression != null) {
this.expression = VariableResolverFactory.unescape(expression);
}
Modified: cocoon/trunk/core/cocoon-sitemap/cocoon-sitemap-impl/src/main/java/org/apache/cocoon/components/treeprocessor/variables/PreparedVariableResolver.java
URL: http://svn.apache.org/viewvc/cocoon/trunk/core/cocoon-sitemap/cocoon-sitemap-impl/src/main/java/org/apache/cocoon/components/treeprocessor/variables/PreparedVariableResolver.java?view=diff&rev=567057&r1=567056&r2=567057
==============================================================================
--- cocoon/trunk/core/cocoon-sitemap/cocoon-sitemap-impl/src/main/java/org/apache/cocoon/components/treeprocessor/variables/PreparedVariableResolver.java (original)
+++ cocoon/trunk/core/cocoon-sitemap/cocoon-sitemap-impl/src/main/java/org/apache/cocoon/components/treeprocessor/variables/PreparedVariableResolver.java Fri Aug 17 07:25:17 2007
@@ -41,6 +41,8 @@
* @version $Id$
*/
final public class PreparedVariableResolver extends VariableResolver implements Disposable {
+
+ public static final String ROLE = PreparedVariableResolver.class.getName();
private ServiceManager manager;
protected List tokens;
@@ -61,10 +63,21 @@
protected static final Token OPEN_TOKEN = new Token(OPEN);
protected static final Token CLOSE_TOKEN = new Token(CLOSE);
protected static final Token EMPTY_TOKEN = new Token(EXPR);
+
+ public ServiceManager getManager() {
+ return manager;
+ }
- public PreparedVariableResolver(String expr, ServiceManager manager) throws PatternException {
- super(expr);
+ public void setManager(ServiceManager manager) {
this.manager = manager;
+ }
+
+ public PreparedVariableResolver() {
+ super("");
+ }
+
+ public void setExpression(String expr) throws PatternException {
+ this.originalExpr = expr;
this.tokens = new ArrayList();
VariableExpressionTokenizer.tokenize(expr, new VariableExpressionTokenizer.TokenReciever() {
@@ -413,4 +426,5 @@
return null;
}
}
+
}
Added: cocoon/trunk/core/cocoon-sitemap/cocoon-sitemap-impl/src/main/java/org/apache/cocoon/components/treeprocessor/variables/StringTemplateParserVariableResolver.java
URL: http://svn.apache.org/viewvc/cocoon/trunk/core/cocoon-sitemap/cocoon-sitemap-impl/src/main/java/org/apache/cocoon/components/treeprocessor/variables/StringTemplateParserVariableResolver.java?view=auto&rev=567057
==============================================================================
--- cocoon/trunk/core/cocoon-sitemap/cocoon-sitemap-impl/src/main/java/org/apache/cocoon/components/treeprocessor/variables/StringTemplateParserVariableResolver.java (added)
+++ cocoon/trunk/core/cocoon-sitemap/cocoon-sitemap-impl/src/main/java/org/apache/cocoon/components/treeprocessor/variables/StringTemplateParserVariableResolver.java Fri Aug 17 07:25:17 2007
@@ -0,0 +1,84 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.
+ */
+package org.apache.cocoon.components.treeprocessor.variables;
+
+import java.util.Map;
+
+import org.apache.cocoon.components.treeprocessor.InvokeContext;
+import org.apache.cocoon.el.parsing.StringTemplateParser;
+import org.apache.cocoon.objectmodel.ObjectModel;
+import org.apache.cocoon.sitemap.PatternException;
+import org.apache.cocoon.template.expression.Substitutions;
+
+/**
+ * <p>{@link VariableResolver} that uses {@link StringTemplateParser} to resolve expressions.</p>
+ *
+ * @version $Id$
+ */
+public final class StringTemplateParserVariableResolver extends VariableResolver {
+
+ public final static String ROLE = StringTemplateParserVariableResolver.class.getName();
+
+ private StringTemplateParser stringTemplateParser;
+ private ObjectModel objectModel;
+
+ private Substitutions substitutions;
+
+ public StringTemplateParserVariableResolver() {
+ super("");
+ };
+
+ public StringTemplateParser getStringTemplateParser() {
+ return stringTemplateParser;
+ }
+
+ public void setStringTemplateParser(StringTemplateParser stringTemplateParser) {
+ this.stringTemplateParser = stringTemplateParser;
+ }
+
+ public ObjectModel getObjectModel() {
+ return objectModel;
+ }
+
+ public void setObjectModel(ObjectModel objectModel) {
+ this.objectModel = objectModel;
+ }
+
+ public void setExpression(String expression) throws PatternException {
+ this.originalExpr = expression;
+ try {
+ if (stringTemplateParser instanceof LegacySitemapStringTemplateParser)
+ this.substitutions = new LegacySubstitutions((LegacySitemapStringTemplateParser)stringTemplateParser, null, expression);
+ else
+ this.substitutions = new Substitutions(stringTemplateParser, null, expression);
+ } catch (Exception e) {
+ throw new PatternException(e);
+ }
+ }
+
+ public String resolve(InvokeContext context, Map objectModel) throws PatternException {
+ try {
+ if (this.substitutions instanceof LegacySubstitutions)
+ return ((LegacySubstitutions)substitutions).toString(null, this.objectModel, context, objectModel);
+ else
+ return substitutions.toString(null, this.objectModel);
+ } catch (Exception e) {
+ throw new PatternException(e);
+ }
+ }
+
+}
Propchange: cocoon/trunk/core/cocoon-sitemap/cocoon-sitemap-impl/src/main/java/org/apache/cocoon/components/treeprocessor/variables/StringTemplateParserVariableResolver.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: cocoon/trunk/core/cocoon-sitemap/cocoon-sitemap-impl/src/main/java/org/apache/cocoon/components/treeprocessor/variables/StringTemplateParserVariableResolver.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Modified: cocoon/trunk/core/cocoon-sitemap/cocoon-sitemap-impl/src/main/java/org/apache/cocoon/components/treeprocessor/variables/VariableResolver.java
URL: http://svn.apache.org/viewvc/cocoon/trunk/core/cocoon-sitemap/cocoon-sitemap-impl/src/main/java/org/apache/cocoon/components/treeprocessor/variables/VariableResolver.java?view=diff&rev=567057&r1=567056&r2=567057
==============================================================================
--- cocoon/trunk/core/cocoon-sitemap/cocoon-sitemap-impl/src/main/java/org/apache/cocoon/components/treeprocessor/variables/VariableResolver.java (original)
+++ cocoon/trunk/core/cocoon-sitemap/cocoon-sitemap-impl/src/main/java/org/apache/cocoon/components/treeprocessor/variables/VariableResolver.java Fri Aug 17 07:25:17 2007
@@ -37,11 +37,13 @@
public static final Map EMPTY_MAP = Collections.unmodifiableMap(new java.util.HashMap(0));
- protected final String originalExpr;
+ protected String originalExpr;
protected VariableResolver(String expr) {
this.originalExpr = expr;
}
+
+ public abstract void setExpression(String expression) throws PatternException;
public final String toString() {
return this.originalExpr;
Modified: cocoon/trunk/core/cocoon-sitemap/cocoon-sitemap-impl/src/main/java/org/apache/cocoon/components/treeprocessor/variables/VariableResolverFactory.java
URL: http://svn.apache.org/viewvc/cocoon/trunk/core/cocoon-sitemap/cocoon-sitemap-impl/src/main/java/org/apache/cocoon/components/treeprocessor/variables/VariableResolverFactory.java?view=diff&rev=567057&r1=567056&r2=567057
==============================================================================
--- cocoon/trunk/core/cocoon-sitemap/cocoon-sitemap-impl/src/main/java/org/apache/cocoon/components/treeprocessor/variables/VariableResolverFactory.java (original)
+++ cocoon/trunk/core/cocoon-sitemap/cocoon-sitemap-impl/src/main/java/org/apache/cocoon/components/treeprocessor/variables/VariableResolverFactory.java Fri Aug 17 07:25:17 2007
@@ -16,6 +16,7 @@
*/
package org.apache.cocoon.components.treeprocessor.variables;
+import org.apache.avalon.framework.service.ServiceException;
import org.apache.avalon.framework.service.ServiceManager;
import org.apache.cocoon.sitemap.PatternException;
@@ -102,7 +103,13 @@
*/
public static VariableResolver getResolver(String expression, ServiceManager manager) throws PatternException {
if (needsResolve(expression)) {
- VariableResolver resolver = new PreparedVariableResolver(expression, manager);
+ VariableResolver resolver;
+ try {
+ resolver = (VariableResolver)manager.lookup(StringTemplateParserVariableResolver.ROLE);
+ resolver.setExpression(expression);
+ } catch (ServiceException e) {
+ throw new PatternException("Couldn't obtain VariableResolver.", e);
+ }
List collector = (List)disposableCollector.get();
if (collector != null)
collector.add(resolver);
@@ -110,6 +117,13 @@
return resolver;
}
- return new NOPVariableResolver(expression);
+ VariableResolver resolver;
+ try {
+ resolver = (VariableResolver)manager.lookup(NOPVariableResolver.ROLE);
+ } catch (ServiceException e) {
+ throw new PatternException("Couldn't obtain VariableResolver.", e);
+ }
+ resolver.setExpression(expression);
+ return resolver;
}
}
Added: cocoon/trunk/core/cocoon-sitemap/cocoon-sitemap-impl/src/main/resources/META-INF/cocoon/spring/LegacySitemapStringTemplateParser.xml
URL: http://svn.apache.org/viewvc/cocoon/trunk/core/cocoon-sitemap/cocoon-sitemap-impl/src/main/resources/META-INF/cocoon/spring/LegacySitemapStringTemplateParser.xml?view=auto&rev=567057
==============================================================================
--- cocoon/trunk/core/cocoon-sitemap/cocoon-sitemap-impl/src/main/resources/META-INF/cocoon/spring/LegacySitemapStringTemplateParser.xml (added)
+++ cocoon/trunk/core/cocoon-sitemap/cocoon-sitemap-impl/src/main/resources/META-INF/cocoon/spring/LegacySitemapStringTemplateParser.xml Fri Aug 17 07:25:17 2007
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You 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.
+-->
+<!-- SVN $Id$ -->
+<beans xmlns="http://www.springframework.org/schema/beans"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">
+
+ <bean name="org.apache.cocoon.el.parsing.StringTemplateParser/legacySitemap"
+ class="org.apache.cocoon.components.treeprocessor.variables.LegacySitemapStringTemplateParser"
+ parent="org.apache.cocoon.template.expression.AbstractStringTemplateParser">
+ <property name="serviceManager" ref="org.apache.avalon.framework.service.ServiceManager"/>
+ </bean>
+
+</beans>
\ No newline at end of file
Propchange: cocoon/trunk/core/cocoon-sitemap/cocoon-sitemap-impl/src/main/resources/META-INF/cocoon/spring/LegacySitemapStringTemplateParser.xml
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: cocoon/trunk/core/cocoon-sitemap/cocoon-sitemap-impl/src/main/resources/META-INF/cocoon/spring/LegacySitemapStringTemplateParser.xml
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: cocoon/trunk/core/cocoon-sitemap/cocoon-sitemap-impl/src/main/resources/META-INF/cocoon/spring/NOPVariableResolver.xml
URL: http://svn.apache.org/viewvc/cocoon/trunk/core/cocoon-sitemap/cocoon-sitemap-impl/src/main/resources/META-INF/cocoon/spring/NOPVariableResolver.xml?view=auto&rev=567057
==============================================================================
--- cocoon/trunk/core/cocoon-sitemap/cocoon-sitemap-impl/src/main/resources/META-INF/cocoon/spring/NOPVariableResolver.xml (added)
+++ cocoon/trunk/core/cocoon-sitemap/cocoon-sitemap-impl/src/main/resources/META-INF/cocoon/spring/NOPVariableResolver.xml Fri Aug 17 07:25:17 2007
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You 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.
+-->
+<!-- SVN $Id$ -->
+<beans xmlns="http://www.springframework.org/schema/beans"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">
+
+ <bean name="org.apache.cocoon.components.treeprocessor.variables.NOPVariableResolver"
+ class="org.apache.cocoon.components.treeprocessor.variables.NOPVariableResolver" scope="prototype"/>
+
+</beans>
\ No newline at end of file
Propchange: cocoon/trunk/core/cocoon-sitemap/cocoon-sitemap-impl/src/main/resources/META-INF/cocoon/spring/NOPVariableResolver.xml
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: cocoon/trunk/core/cocoon-sitemap/cocoon-sitemap-impl/src/main/resources/META-INF/cocoon/spring/NOPVariableResolver.xml
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: cocoon/trunk/core/cocoon-sitemap/cocoon-sitemap-impl/src/main/resources/META-INF/cocoon/spring/PreparedVariableResolver.xml
URL: http://svn.apache.org/viewvc/cocoon/trunk/core/cocoon-sitemap/cocoon-sitemap-impl/src/main/resources/META-INF/cocoon/spring/PreparedVariableResolver.xml?view=auto&rev=567057
==============================================================================
--- cocoon/trunk/core/cocoon-sitemap/cocoon-sitemap-impl/src/main/resources/META-INF/cocoon/spring/PreparedVariableResolver.xml (added)
+++ cocoon/trunk/core/cocoon-sitemap/cocoon-sitemap-impl/src/main/resources/META-INF/cocoon/spring/PreparedVariableResolver.xml Fri Aug 17 07:25:17 2007
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You 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.
+-->
+<!-- SVN $Id$ -->
+<beans xmlns="http://www.springframework.org/schema/beans"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">
+
+ <bean name="org.apache.cocoon.components.treeprocessor.variables.PreparedVariableResolver"
+ class="org.apache.cocoon.components.treeprocessor.variables.PreparedVariableResolver" scope="prototype">
+ <property name="manager" ref="org.apache.avalon.framework.service.ServiceManager"/>
+ </bean>
+
+</beans>
\ No newline at end of file
Propchange: cocoon/trunk/core/cocoon-sitemap/cocoon-sitemap-impl/src/main/resources/META-INF/cocoon/spring/PreparedVariableResolver.xml
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: cocoon/trunk/core/cocoon-sitemap/cocoon-sitemap-impl/src/main/resources/META-INF/cocoon/spring/PreparedVariableResolver.xml
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: cocoon/trunk/core/cocoon-sitemap/cocoon-sitemap-impl/src/main/resources/META-INF/cocoon/spring/StringTemplateParserVariableResolver.xml
URL: http://svn.apache.org/viewvc/cocoon/trunk/core/cocoon-sitemap/cocoon-sitemap-impl/src/main/resources/META-INF/cocoon/spring/StringTemplateParserVariableResolver.xml?view=auto&rev=567057
==============================================================================
--- cocoon/trunk/core/cocoon-sitemap/cocoon-sitemap-impl/src/main/resources/META-INF/cocoon/spring/StringTemplateParserVariableResolver.xml (added)
+++ cocoon/trunk/core/cocoon-sitemap/cocoon-sitemap-impl/src/main/resources/META-INF/cocoon/spring/StringTemplateParserVariableResolver.xml Fri Aug 17 07:25:17 2007
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You 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.
+-->
+<!-- SVN $Id$ -->
+<beans xmlns="http://www.springframework.org/schema/beans"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">
+
+ <bean name="org.apache.cocoon.components.treeprocessor.variables.StringTemplateParserVariableResolver"
+ class="org.apache.cocoon.components.treeprocessor.variables.StringTemplateParserVariableResolver" scope="prototype">
+ <property name="stringTemplateParser" ref="org.apache.cocoon.el.parsing.StringTemplateParser/legacySitemap"/>
+ <property name="objectModel" ref="org.apache.cocoon.objectmodel.ObjectModel"/>
+ </bean>
+
+</beans>
Propchange: cocoon/trunk/core/cocoon-sitemap/cocoon-sitemap-impl/src/main/resources/META-INF/cocoon/spring/StringTemplateParserVariableResolver.xml
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: cocoon/trunk/core/cocoon-sitemap/cocoon-sitemap-impl/src/main/resources/META-INF/cocoon/spring/StringTemplateParserVariableResolver.xml
------------------------------------------------------------------------------
svn:mime-type = text/plain