You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@cocoon.apache.org by re...@apache.org on 2008/06/18 16:19:53 UTC

svn commit: r669176 - in /cocoon/whiteboard/corona/trunk: corona-servlet/src/main/java/org/apache/cocoon/corona/servlet/ corona-servlet/src/main/java/org/apache/cocoon/corona/servlet/util/ corona-sitemap/ corona-sitemap/src/main/java/org/apache/cocoon/...

Author: reinhard
Date: Wed Jun 18 07:19:52 2008
New Revision: 669176

URL: http://svn.apache.org/viewvc?rev=669176&view=rev
Log:
. introduce an explicit object model
  (not completely finished yet -> ObjectModel.sitemapParameters needs to be improved)
. support JEXL expressions
. implicit mime-type (by asking the servlet-container)
  this is different to Cocoon 2.x because mime-type guessing is done based on the requestURI and
  not based on the resource used by a reader
. fix Last-Modified-Since (non all pipelines produce a Last-Modified value)

Added:
    cocoon/whiteboard/corona/trunk/corona-servlet/src/main/java/org/apache/cocoon/corona/servlet/util/ObjectModelProvider.java   (with props)
    cocoon/whiteboard/corona/trunk/corona-sitemap/src/main/java/org/apache/cocoon/corona/sitemap/expression/JexlLanguageInterpreter.java   (with props)
    cocoon/whiteboard/corona/trunk/corona-sitemap/src/main/java/org/apache/cocoon/corona/sitemap/objectmodel/
    cocoon/whiteboard/corona/trunk/corona-sitemap/src/main/java/org/apache/cocoon/corona/sitemap/objectmodel/ObjectModel.java   (with props)
Modified:
    cocoon/whiteboard/corona/trunk/corona-servlet/src/main/java/org/apache/cocoon/corona/servlet/SitemapDelegator.java
    cocoon/whiteboard/corona/trunk/corona-servlet/src/main/java/org/apache/cocoon/corona/servlet/SitemapServlet.java
    cocoon/whiteboard/corona/trunk/corona-servlet/src/main/java/org/apache/cocoon/corona/servlet/util/HttpContextHelper.java
    cocoon/whiteboard/corona/trunk/corona-sitemap/pom.xml
    cocoon/whiteboard/corona/trunk/corona-sitemap/src/main/java/org/apache/cocoon/corona/sitemap/InvocationImpl.java
    cocoon/whiteboard/corona/trunk/corona-sitemap/src/main/java/org/apache/cocoon/corona/sitemap/expression/LanguageInterpreter.java
    cocoon/whiteboard/corona/trunk/corona-sitemap/src/main/java/org/apache/cocoon/corona/sitemap/expression/LanguageInterpreterFactory.java
    cocoon/whiteboard/corona/trunk/corona-sitemap/src/main/java/org/apache/cocoon/corona/sitemap/expression/SitemapLanguageInterpreter.java
    cocoon/whiteboard/corona/trunk/corona-sitemap/src/main/resources/META-INF/cocoon/spring/corona-expression-language.xml

Modified: cocoon/whiteboard/corona/trunk/corona-servlet/src/main/java/org/apache/cocoon/corona/servlet/SitemapDelegator.java
URL: http://svn.apache.org/viewvc/cocoon/whiteboard/corona/trunk/corona-servlet/src/main/java/org/apache/cocoon/corona/servlet/SitemapDelegator.java?rev=669176&r1=669175&r2=669176&view=diff
==============================================================================
--- cocoon/whiteboard/corona/trunk/corona-servlet/src/main/java/org/apache/cocoon/corona/servlet/SitemapDelegator.java (original)
+++ cocoon/whiteboard/corona/trunk/corona-servlet/src/main/java/org/apache/cocoon/corona/servlet/SitemapDelegator.java Wed Jun 18 07:19:52 2008
@@ -23,7 +23,8 @@
 
     private static final ThreadLocal<SitemapServlet> SITEMAP_SERVLET = new ThreadLocal<SitemapServlet>();
 
-    public static void delegate(String requestURI, Map<String, Object> parameters, OutputStream outputStream) throws Exception {
+    public static void delegate(String requestURI, Map<String, Object> parameters, OutputStream outputStream)
+            throws Exception {
         SitemapServlet sitemapServlet = SITEMAP_SERVLET.get();
 
         if (sitemapServlet == null) {

Modified: cocoon/whiteboard/corona/trunk/corona-servlet/src/main/java/org/apache/cocoon/corona/servlet/SitemapServlet.java
URL: http://svn.apache.org/viewvc/cocoon/whiteboard/corona/trunk/corona-servlet/src/main/java/org/apache/cocoon/corona/servlet/SitemapServlet.java?rev=669176&r1=669175&r2=669176&view=diff
==============================================================================
--- cocoon/whiteboard/corona/trunk/corona-servlet/src/main/java/org/apache/cocoon/corona/servlet/SitemapServlet.java (original)
+++ cocoon/whiteboard/corona/trunk/corona-servlet/src/main/java/org/apache/cocoon/corona/servlet/SitemapServlet.java Wed Jun 18 07:19:52 2008
@@ -33,10 +33,13 @@
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 
+import org.apache.cocoon.configuration.Settings;
 import org.apache.cocoon.corona.servlet.node.LastModifiedCollector;
 import org.apache.cocoon.corona.servlet.node.MimeTypeCollector;
 import org.apache.cocoon.corona.servlet.node.StatusCodeCollector;
 import org.apache.cocoon.corona.servlet.util.HttpContextHelper;
+import org.apache.cocoon.corona.servlet.util.ObjectModelProvider;
+import org.apache.cocoon.corona.servlet.util.SettingsHelper;
 import org.apache.cocoon.corona.sitemap.Invocation;
 import org.apache.cocoon.corona.sitemap.InvocationImpl;
 import org.apache.cocoon.corona.sitemap.SitemapBuilder;
@@ -71,6 +74,7 @@
         invocation.setRequestURI(requestURI);
         invocation.setParameters(parameters);
         invocation.setOutputStream(outputStream);
+        invocation.setObjectModel(ObjectModelProvider.provide(parameters));
 
         this.sitemap.invoke(invocation);
     }
@@ -97,6 +101,9 @@
             Map<String, Object> parameters = this.getInvocationParameters(request);
             HttpContextHelper.storeRequest(request, parameters);
             HttpContextHelper.storeResponse(response, parameters);
+            HttpContextHelper.storeServletContext(this.getServletContext(), parameters);
+            Settings settings = (Settings) this.beanFactory.getBean(Settings.class.getName());
+            SettingsHelper.storeSettings(settings, parameters);
 
             // invoke the sitemap engine
             ByteArrayOutputStream baos = new ByteArrayOutputStream(8192);
@@ -108,14 +115,14 @@
             int contentLengh = baos.size();
             int statusCode = StatusCodeCollector.getStatusCode();
 
-            // send the Last-Modified header in every case
+            // send the Last-Modified header
             if (lastModified > -1) {
                 response.setDateHeader("Last-Modified", lastModified);
             }
 
             // conditional request support
             long ifLastModifiedSince = request.getDateHeader("If-Modified-Since");
-            if (ifLastModifiedSince > 0 && ifLastModifiedSince / 1000 >= lastModified / 1000) {
+            if (ifLastModifiedSince > 0 && ifLastModifiedSince / 1000 >= lastModified / 1000 && lastModified > 0) {
                 response.setStatus(HttpServletResponse.SC_NOT_MODIFIED);
                 if (this.logger.isInfoEnabled()) {
                     this.logger.info("The requested resource " + request.getRequestURI()
@@ -127,7 +134,13 @@
             }
 
             // write the sitemap result to the output stream
-            response.setContentType(mimeType);
+            if (mimeType == null || "".equals(mimeType) || "content/unknown".equals(mimeType)) {
+                mimeType = this.servletConfig.getServletContext().getMimeType(request.getRequestURI());
+            }
+            if (mimeType != null) {
+                response.setContentType(mimeType);
+            }
+
             response.setContentLength(contentLengh);
             response.setStatus(statusCode);
             if (this.logger.isInfoEnabled()) {

Modified: cocoon/whiteboard/corona/trunk/corona-servlet/src/main/java/org/apache/cocoon/corona/servlet/util/HttpContextHelper.java
URL: http://svn.apache.org/viewvc/cocoon/whiteboard/corona/trunk/corona-servlet/src/main/java/org/apache/cocoon/corona/servlet/util/HttpContextHelper.java?rev=669176&r1=669175&r2=669176&view=diff
==============================================================================
--- cocoon/whiteboard/corona/trunk/corona-servlet/src/main/java/org/apache/cocoon/corona/servlet/util/HttpContextHelper.java (original)
+++ cocoon/whiteboard/corona/trunk/corona-servlet/src/main/java/org/apache/cocoon/corona/servlet/util/HttpContextHelper.java Wed Jun 18 07:19:52 2008
@@ -20,16 +20,18 @@
 
 import java.util.Map;
 
+import javax.servlet.ServletContext;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 
-
 public class HttpContextHelper {
 
     private static final String HTTP_SERVLET_REQUEST_KEY = HttpServletRequest.class.getName();
 
     private static final String HTTP_SERVLET_RESPONSE_KEY = HttpServletResponse.class.getName();
 
+    private static final String HTTP_SERVLET_CONTEXT_KEY = ServletContext.class.getName();
+
     public static HttpServletRequest getRequest(Map<String, ? extends Object> parameters) {
         Object parameter = parameters.get(HTTP_SERVLET_REQUEST_KEY);
         if (parameter instanceof HttpServletRequest) {
@@ -50,6 +52,16 @@
                 "A HttpServletResponse is not available. This might indicate an invocation outside a servlet.");
     }
 
+    public static ServletContext getServletContext(Map<String, ? extends Object> parameters) {
+        Object parameter = parameters.get(HTTP_SERVLET_CONTEXT_KEY);
+        if (parameter instanceof ServletContext) {
+            return (ServletContext) parameter;
+        }
+
+        throw new IllegalStateException(
+                "The ServletContext is not available. This might indicate an invocation outside a servlet.");
+    }
+
     public static void storeRequest(HttpServletRequest httpServletRequest, Map<String, Object> parameters) {
         parameters.put(HTTP_SERVLET_REQUEST_KEY, httpServletRequest);
     }
@@ -57,4 +69,8 @@
     public static void storeResponse(HttpServletResponse httpServletResponse, Map<String, Object> parameters) {
         parameters.put(HTTP_SERVLET_RESPONSE_KEY, httpServletResponse);
     }
+
+    public static void storeServletContext(ServletContext servletContext, Map<String, Object> parameters) {
+        parameters.put(HTTP_SERVLET_CONTEXT_KEY, servletContext);
+    }
 }

Added: cocoon/whiteboard/corona/trunk/corona-servlet/src/main/java/org/apache/cocoon/corona/servlet/util/ObjectModelProvider.java
URL: http://svn.apache.org/viewvc/cocoon/whiteboard/corona/trunk/corona-servlet/src/main/java/org/apache/cocoon/corona/servlet/util/ObjectModelProvider.java?rev=669176&view=auto
==============================================================================
--- cocoon/whiteboard/corona/trunk/corona-servlet/src/main/java/org/apache/cocoon/corona/servlet/util/ObjectModelProvider.java (added)
+++ cocoon/whiteboard/corona/trunk/corona-servlet/src/main/java/org/apache/cocoon/corona/servlet/util/ObjectModelProvider.java Wed Jun 18 07:19:52 2008
@@ -0,0 +1,53 @@
+/*
+ * 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.corona.servlet.util;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletRequestWrapper;
+
+import org.apache.cocoon.corona.sitemap.objectmodel.ObjectModel;
+
+public class ObjectModelProvider {
+
+    public static ObjectModel provide(Map<String, Object> parameters) {
+        Map<String, Object> corona = new HashMap<String, Object>();
+        ObjectModel objectModel = new ObjectModel();
+        objectModel.put("corona", corona);
+
+        HttpServletRequest request = HttpContextHelper.getRequest(parameters);
+        corona.put("request", new ObjectModelRequest(request));
+        corona.put("response", HttpContextHelper.getResponse(parameters));
+        corona.put("context", HttpContextHelper.getServletContext(parameters));
+        corona.put("settings", SettingsHelper.getSettings(parameters));
+
+        return objectModel;
+    }
+
+    public static class ObjectModelRequest extends HttpServletRequestWrapper {
+
+        public ObjectModelRequest(HttpServletRequest request) {
+            super(request);
+        }
+
+        public String get(String key) {
+            return this.getParameter(key);
+        }
+    }
+}

Propchange: cocoon/whiteboard/corona/trunk/corona-servlet/src/main/java/org/apache/cocoon/corona/servlet/util/ObjectModelProvider.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: cocoon/whiteboard/corona/trunk/corona-servlet/src/main/java/org/apache/cocoon/corona/servlet/util/ObjectModelProvider.java
------------------------------------------------------------------------------
    svn:keywords = Id

Propchange: cocoon/whiteboard/corona/trunk/corona-servlet/src/main/java/org/apache/cocoon/corona/servlet/util/ObjectModelProvider.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Modified: cocoon/whiteboard/corona/trunk/corona-sitemap/pom.xml
URL: http://svn.apache.org/viewvc/cocoon/whiteboard/corona/trunk/corona-sitemap/pom.xml?rev=669176&r1=669175&r2=669176&view=diff
==============================================================================
--- cocoon/whiteboard/corona/trunk/corona-sitemap/pom.xml (original)
+++ cocoon/whiteboard/corona/trunk/corona-sitemap/pom.xml Wed Jun 18 07:19:52 2008
@@ -46,10 +46,18 @@
       <artifactId>spring-context</artifactId>
     </dependency>
     <dependency>
+      <groupId>commons-jexl</groupId>
+      <artifactId>commons-jexl</artifactId>
+    </dependency>
+    <dependency>
       <groupId>junit</groupId>
       <artifactId>junit</artifactId>
       <scope>test</scope>
     </dependency>
+    <dependency>
+        <groupId>junit-addons</groupId>
+        <artifactId>junit-addons</artifactId>
+    </dependency>
   </dependencies>
 
 </project>

Modified: cocoon/whiteboard/corona/trunk/corona-sitemap/src/main/java/org/apache/cocoon/corona/sitemap/InvocationImpl.java
URL: http://svn.apache.org/viewvc/cocoon/whiteboard/corona/trunk/corona-sitemap/src/main/java/org/apache/cocoon/corona/sitemap/InvocationImpl.java?rev=669176&r1=669175&r2=669176&view=diff
==============================================================================
--- cocoon/whiteboard/corona/trunk/corona-sitemap/src/main/java/org/apache/cocoon/corona/sitemap/InvocationImpl.java (original)
+++ cocoon/whiteboard/corona/trunk/corona-sitemap/src/main/java/org/apache/cocoon/corona/sitemap/InvocationImpl.java Wed Jun 18 07:19:52 2008
@@ -30,6 +30,7 @@
 import org.apache.cocoon.corona.pipeline.action.Action;
 import org.apache.cocoon.corona.pipeline.component.PipelineComponent;
 import org.apache.cocoon.corona.sitemap.expression.LanguageInterpreter;
+import org.apache.cocoon.corona.sitemap.objectmodel.ObjectModel;
 import org.apache.cocoon.corona.sitemap.util.ParameterHelper;
 
 public class InvocationImpl implements Invocation {
@@ -41,18 +42,18 @@
     private Map<String, Object> parameters = new HashMap<String, Object>();
     private Pipeline pipeline;
     private String requestURI;
-    private SitemapParameters sitemapParameters = new SitemapParameters();
 
     private URL baseURL;
 
+    private ObjectModel objectModel;
+
     public InvocationImpl() {
     }
 
     /**
      * Create a {@link InvocationImpl} object using the given output stream.
      * 
-     * @param outputStream
-     *            The {@link OutputStream} where the result is writen to.
+     * @param outputStream The {@link OutputStream} where the result is writen to.
      */
     public InvocationImpl(OutputStream outputStream) {
         super();
@@ -60,13 +61,10 @@
     }
 
     /**
-     * Create a {@link InvocationImpl} object using the given output stream and
-     * requestURI.
+     * Create a {@link InvocationImpl} object using the given output stream and requestURI.
      * 
-     * @param outputStream
-     *            The {@link OutputStream} where the result is writen to.
-     * @param requestURI
-     *            The requested path.
+     * @param outputStream The {@link OutputStream} where the result is written to.
+     * @param requestURI The requested path.
      */
     public InvocationImpl(OutputStream outputStream, String requestURI) {
         super();
@@ -75,16 +73,11 @@
     }
 
     /**
-     * Create a {@link InvocationImpl} object using the given output stream,
-     * requestURI and parameters.
+     * Create a {@link InvocationImpl} object using the given output stream, requestURI and parameters.
      * 
-     * @param outputStream
-     *            The {@link OutputStream} where the result is written to.
-     * @param requestURI
-     *            The requested path.
-     * @param parameters
-     *            A {@link Map} of parameters that are used when the pipeline is
-     *            being executed.
+     * @param outputStream The {@link OutputStream} where the result is written to.
+     * @param requestURI The requested path.
+     * @param parameters A {@link Map} of parameters that are used when the pipeline is being executed.
      */
     public InvocationImpl(OutputStream outputStream, String requestURI, Map<String, Object> parameters) {
         super();
@@ -146,7 +139,7 @@
     }
 
     public String getSitemapParameter(String parameterName) {
-        return this.sitemapParameters.getParameter(parameterName);
+        return this.objectModel.sitemapParameters.getParameter(parameterName);
     }
 
     /**
@@ -175,8 +168,7 @@
     /**
      * {@inheritDoc}
      * 
-     * @see org.apache.cocoon.corona.sitemap.Invocation#installComponent(java.lang.String,
-     *      java.util.Map)
+     * @see org.apache.cocoon.corona.sitemap.Invocation#installComponent(java.lang.String, java.util.Map)
      */
     public void installComponent(String type, Map<String, ? extends Object> componentParameters) {
         if (this.pipeline == null) {
@@ -213,17 +205,16 @@
      * @see org.apache.cocoon.corona.sitemap.Invocation#popSitemapParameters()
      */
     public void popSitemapParameters() {
-        this.sitemapParameters.popParameters();
+        this.objectModel.sitemapParameters.popParameters();
     }
 
     /**
      * {@inheritDoc}
      * 
-     * @see org.apache.cocoon.corona.sitemap.Invocation#pushSitemapParameters(java.lang.String,
-     *      java.util.Map)
+     * @see org.apache.cocoon.corona.sitemap.Invocation#pushSitemapParameters(java.lang.String, java.util.Map)
      */
     public void pushSitemapParameters(String nodeName, Map<String, ? extends Object> sitemapParameters) {
-        this.sitemapParameters.pushParameters(nodeName, sitemapParameters);
+        this.objectModel.sitemapParameters.pushParameters(nodeName, sitemapParameters);
     }
 
     /**
@@ -279,6 +270,10 @@
     }
 
     public String resolveParameter(final String parameter) {
+        if (parameter == null) {
+            return null;
+        }
+
         final StringBuilder result = new StringBuilder(parameter);
         final Matcher matcher = PARAMETER_PATTERN.matcher(result);
 
@@ -291,10 +286,7 @@
             }
 
             final String variable = matcher.group(2);
-
-            // FIXME Passing 'this' (InvocationContext) introduces a cyclic
-            // dependency. Could be solved by having an explicit object model.
-            final String replacement = languageInterpreter.resolve(variable, this);
+            final String replacement = languageInterpreter.resolve(variable, this.objectModel);
 
             result.replace(matcher.start(), matcher.end(), replacement);
             matcher.reset();
@@ -325,4 +317,8 @@
     public void setBaseURL(URL baseURL) {
         this.baseURL = baseURL;
     }
+
+    public void setObjectModel(ObjectModel objectModel) {
+        this.objectModel = objectModel;
+    }
 }

Added: cocoon/whiteboard/corona/trunk/corona-sitemap/src/main/java/org/apache/cocoon/corona/sitemap/expression/JexlLanguageInterpreter.java
URL: http://svn.apache.org/viewvc/cocoon/whiteboard/corona/trunk/corona-sitemap/src/main/java/org/apache/cocoon/corona/sitemap/expression/JexlLanguageInterpreter.java?rev=669176&view=auto
==============================================================================
--- cocoon/whiteboard/corona/trunk/corona-sitemap/src/main/java/org/apache/cocoon/corona/sitemap/expression/JexlLanguageInterpreter.java (added)
+++ cocoon/whiteboard/corona/trunk/corona-sitemap/src/main/java/org/apache/cocoon/corona/sitemap/expression/JexlLanguageInterpreter.java Wed Jun 18 07:19:52 2008
@@ -0,0 +1,48 @@
+/*
+ * 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.corona.sitemap.expression;
+
+import org.apache.cocoon.corona.sitemap.objectmodel.ObjectModel;
+import org.apache.commons.jexl.Expression;
+import org.apache.commons.jexl.ExpressionFactory;
+import org.apache.commons.jexl.JexlContext;
+import org.apache.commons.jexl.JexlHelper;
+
+public class JexlLanguageInterpreter implements LanguageInterpreter {
+
+    public JexlLanguageInterpreter() {
+    }
+
+    public String resolve(String expression, ObjectModel objectModel) {
+        Object o = null;
+        try {
+            Expression e = ExpressionFactory.createExpression(expression);
+            JexlContext jc = JexlHelper.createContext();
+            for (String key : objectModel.get().keySet()) {
+                jc.getVars().put(key, objectModel.get().get(key));
+            }
+
+            o = e.evaluate(jc);
+        } catch (Exception e1) {
+            e1.printStackTrace();
+        }
+
+        return o != null ? o.toString() : "";
+    }
+}

Propchange: cocoon/whiteboard/corona/trunk/corona-sitemap/src/main/java/org/apache/cocoon/corona/sitemap/expression/JexlLanguageInterpreter.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: cocoon/whiteboard/corona/trunk/corona-sitemap/src/main/java/org/apache/cocoon/corona/sitemap/expression/JexlLanguageInterpreter.java
------------------------------------------------------------------------------
    svn:keywords = Id

Propchange: cocoon/whiteboard/corona/trunk/corona-sitemap/src/main/java/org/apache/cocoon/corona/sitemap/expression/JexlLanguageInterpreter.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Modified: cocoon/whiteboard/corona/trunk/corona-sitemap/src/main/java/org/apache/cocoon/corona/sitemap/expression/LanguageInterpreter.java
URL: http://svn.apache.org/viewvc/cocoon/whiteboard/corona/trunk/corona-sitemap/src/main/java/org/apache/cocoon/corona/sitemap/expression/LanguageInterpreter.java?rev=669176&r1=669175&r2=669176&view=diff
==============================================================================
--- cocoon/whiteboard/corona/trunk/corona-sitemap/src/main/java/org/apache/cocoon/corona/sitemap/expression/LanguageInterpreter.java (original)
+++ cocoon/whiteboard/corona/trunk/corona-sitemap/src/main/java/org/apache/cocoon/corona/sitemap/expression/LanguageInterpreter.java Wed Jun 18 07:19:52 2008
@@ -1,9 +1,9 @@
 package org.apache.cocoon.corona.sitemap.expression;
 
-import org.apache.cocoon.corona.sitemap.Invocation;
+import org.apache.cocoon.corona.sitemap.objectmodel.ObjectModel;
 
 public interface LanguageInterpreter {
 
-    String resolve(String variable, Invocation invocation);
+    String resolve(String variable, ObjectModel objectModel);
 
 }

Modified: cocoon/whiteboard/corona/trunk/corona-sitemap/src/main/java/org/apache/cocoon/corona/sitemap/expression/LanguageInterpreterFactory.java
URL: http://svn.apache.org/viewvc/cocoon/whiteboard/corona/trunk/corona-sitemap/src/main/java/org/apache/cocoon/corona/sitemap/expression/LanguageInterpreterFactory.java?rev=669176&r1=669175&r2=669176&view=diff
==============================================================================
--- cocoon/whiteboard/corona/trunk/corona-sitemap/src/main/java/org/apache/cocoon/corona/sitemap/expression/LanguageInterpreterFactory.java (original)
+++ cocoon/whiteboard/corona/trunk/corona-sitemap/src/main/java/org/apache/cocoon/corona/sitemap/expression/LanguageInterpreterFactory.java Wed Jun 18 07:19:52 2008
@@ -18,7 +18,6 @@
  */
 package org.apache.cocoon.corona.sitemap.expression;
 
-
 public interface LanguageInterpreterFactory {
 
     LanguageInterpreter getLanguageInterpreter(String language);

Modified: cocoon/whiteboard/corona/trunk/corona-sitemap/src/main/java/org/apache/cocoon/corona/sitemap/expression/SitemapLanguageInterpreter.java
URL: http://svn.apache.org/viewvc/cocoon/whiteboard/corona/trunk/corona-sitemap/src/main/java/org/apache/cocoon/corona/sitemap/expression/SitemapLanguageInterpreter.java?rev=669176&r1=669175&r2=669176&view=diff
==============================================================================
--- cocoon/whiteboard/corona/trunk/corona-sitemap/src/main/java/org/apache/cocoon/corona/sitemap/expression/SitemapLanguageInterpreter.java (original)
+++ cocoon/whiteboard/corona/trunk/corona-sitemap/src/main/java/org/apache/cocoon/corona/sitemap/expression/SitemapLanguageInterpreter.java Wed Jun 18 07:19:52 2008
@@ -18,14 +18,14 @@
  */
 package org.apache.cocoon.corona.sitemap.expression;
 
-import org.apache.cocoon.corona.sitemap.Invocation;
+import org.apache.cocoon.corona.sitemap.objectmodel.ObjectModel;
 
 public class SitemapLanguageInterpreter implements LanguageInterpreter {
 
     public SitemapLanguageInterpreter() {
     }
 
-    public String resolve(String variable, Invocation invocation) {
-        return invocation.getSitemapParameter(variable);
+    public String resolve(String variable, ObjectModel objectModel) {
+        return objectModel.sitemapParameters.getParameter(variable);
     }
 }

Added: cocoon/whiteboard/corona/trunk/corona-sitemap/src/main/java/org/apache/cocoon/corona/sitemap/objectmodel/ObjectModel.java
URL: http://svn.apache.org/viewvc/cocoon/whiteboard/corona/trunk/corona-sitemap/src/main/java/org/apache/cocoon/corona/sitemap/objectmodel/ObjectModel.java?rev=669176&view=auto
==============================================================================
--- cocoon/whiteboard/corona/trunk/corona-sitemap/src/main/java/org/apache/cocoon/corona/sitemap/objectmodel/ObjectModel.java (added)
+++ cocoon/whiteboard/corona/trunk/corona-sitemap/src/main/java/org/apache/cocoon/corona/sitemap/objectmodel/ObjectModel.java Wed Jun 18 07:19:52 2008
@@ -0,0 +1,37 @@
+/*
+ * 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.corona.sitemap.objectmodel;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.apache.cocoon.corona.sitemap.SitemapParameters;
+
+public class ObjectModel {
+
+    public SitemapParameters sitemapParameters = new SitemapParameters();
+
+    private Map<String, Object> model = new HashMap<String, Object>();
+
+    public void put(String key, Object object) {
+        this.model.put(key, object);
+    }
+
+    public Map<String, Object> get() {
+        return this.model;
+    }
+}

Propchange: cocoon/whiteboard/corona/trunk/corona-sitemap/src/main/java/org/apache/cocoon/corona/sitemap/objectmodel/ObjectModel.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: cocoon/whiteboard/corona/trunk/corona-sitemap/src/main/java/org/apache/cocoon/corona/sitemap/objectmodel/ObjectModel.java
------------------------------------------------------------------------------
    svn:keywords = Id

Propchange: cocoon/whiteboard/corona/trunk/corona-sitemap/src/main/java/org/apache/cocoon/corona/sitemap/objectmodel/ObjectModel.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Modified: cocoon/whiteboard/corona/trunk/corona-sitemap/src/main/resources/META-INF/cocoon/spring/corona-expression-language.xml
URL: http://svn.apache.org/viewvc/cocoon/whiteboard/corona/trunk/corona-sitemap/src/main/resources/META-INF/cocoon/spring/corona-expression-language.xml?rev=669176&r1=669175&r2=669176&view=diff
==============================================================================
--- cocoon/whiteboard/corona/trunk/corona-sitemap/src/main/resources/META-INF/cocoon/spring/corona-expression-language.xml (original)
+++ cocoon/whiteboard/corona/trunk/corona-sitemap/src/main/resources/META-INF/cocoon/spring/corona-expression-language.xml Wed Jun 18 07:19:52 2008
@@ -25,5 +25,7 @@
     class="org.apache.cocoon.corona.sitemap.expression.PrototypeLanguageInterpreterFactory" />
 
   <bean name="expression-language:map" class="org.apache.cocoon.corona.sitemap.expression.SitemapLanguageInterpreter" />
+  
+  <bean name="expression-language:jexl" class="org.apache.cocoon.corona.sitemap.expression.JexlLanguageInterpreter" />
 
 </beans>