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