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/07/13 16:14:57 UTC

svn commit: r676325 - in /cocoon/whiteboard/corona/trunk: corona-controller/src/main/java/org/apache/cocoon/corona/controller/ corona-servlet/src/main/java/org/apache/cocoon/corona/servlet/ corona-servlet/src/main/java/org/apache/cocoon/corona/servlet/...

Author: reinhard
Date: Sun Jul 13 07:14:56 2008
New Revision: 676325

URL: http://svn.apache.org/viewvc?rev=676325&view=rev
Log:
introduce the ControllerContextHelper to use a container for the objects passed from the controller to the view
add controller context objects to the object model

Added:
    cocoon/whiteboard/corona/trunk/corona-servlet/src/main/java/org/apache/cocoon/corona/servlet/controller/
    cocoon/whiteboard/corona/trunk/corona-servlet/src/main/java/org/apache/cocoon/corona/servlet/controller/ControllerContextHelper.java   (with props)
Modified:
    cocoon/whiteboard/corona/trunk/corona-controller/src/main/java/org/apache/cocoon/corona/controller/Controller.java
    cocoon/whiteboard/corona/trunk/corona-controller/src/main/java/org/apache/cocoon/corona/controller/DemoControllerDispatcher.java
    cocoon/whiteboard/corona/trunk/corona-controller/src/main/java/org/apache/cocoon/corona/controller/SpringControllerComponent.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/ObjectModelProvider.java

Modified: cocoon/whiteboard/corona/trunk/corona-controller/src/main/java/org/apache/cocoon/corona/controller/Controller.java
URL: http://svn.apache.org/viewvc/cocoon/whiteboard/corona/trunk/corona-controller/src/main/java/org/apache/cocoon/corona/controller/Controller.java?rev=676325&r1=676324&r2=676325&view=diff
==============================================================================
--- cocoon/whiteboard/corona/trunk/corona-controller/src/main/java/org/apache/cocoon/corona/controller/Controller.java (original)
+++ cocoon/whiteboard/corona/trunk/corona-controller/src/main/java/org/apache/cocoon/corona/controller/Controller.java Sun Jul 13 07:14:56 2008
@@ -23,7 +23,7 @@
 
 public interface Controller {
 
-    void invoke(OutputStream outputStream, String string, Map<String, ? extends Object> inputParameters,
+    void invoke(OutputStream outputStream, String string, Map<String, Object> inputParameters,
             Map<String, ? extends Object> configuration);
 
 }

Modified: cocoon/whiteboard/corona/trunk/corona-controller/src/main/java/org/apache/cocoon/corona/controller/DemoControllerDispatcher.java
URL: http://svn.apache.org/viewvc/cocoon/whiteboard/corona/trunk/corona-controller/src/main/java/org/apache/cocoon/corona/controller/DemoControllerDispatcher.java?rev=676325&r1=676324&r2=676325&view=diff
==============================================================================
--- cocoon/whiteboard/corona/trunk/corona-controller/src/main/java/org/apache/cocoon/corona/controller/DemoControllerDispatcher.java (original)
+++ cocoon/whiteboard/corona/trunk/corona-controller/src/main/java/org/apache/cocoon/corona/controller/DemoControllerDispatcher.java Sun Jul 13 07:14:56 2008
@@ -26,7 +26,7 @@
 
 public class DemoControllerDispatcher implements Controller {
 
-    public void invoke(OutputStream outputStream, String select, Map<String, ? extends Object> inputParameters,
+    public void invoke(OutputStream outputStream, String select, Map<String, Object> inputParameters,
             Map<String, ? extends Object> configuration) {
         try {
             // URL url = new URL("servlet:/read/javascript-resource-explicit");

Modified: cocoon/whiteboard/corona/trunk/corona-controller/src/main/java/org/apache/cocoon/corona/controller/SpringControllerComponent.java
URL: http://svn.apache.org/viewvc/cocoon/whiteboard/corona/trunk/corona-controller/src/main/java/org/apache/cocoon/corona/controller/SpringControllerComponent.java?rev=676325&r1=676324&r2=676325&view=diff
==============================================================================
--- cocoon/whiteboard/corona/trunk/corona-controller/src/main/java/org/apache/cocoon/corona/controller/SpringControllerComponent.java (original)
+++ cocoon/whiteboard/corona/trunk/corona-controller/src/main/java/org/apache/cocoon/corona/controller/SpringControllerComponent.java Sun Jul 13 07:14:56 2008
@@ -42,8 +42,8 @@
      * @see org.apache.cocoon.corona.pipeline.component.Starter#execute()
      */
     public void execute() {
-        Controller controller = (Controller) this.applicationContext.getBean(Controller.class.getName() + "/" + this.beanName,
-                Controller.class);
+        Controller controller = (Controller) this.applicationContext.getBean(Controller.class.getName() + "/"
+                + this.beanName, Controller.class);
         controller.invoke(this.outputStream, this.selector, this.parameters, this.configuration);
     }
 

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=676325&r1=676324&r2=676325&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 Sun Jul 13 07:14:56 2008
@@ -212,7 +212,6 @@
                 String msg = "An exception occurred while building the sitemap.";
                 this.logger.error(msg, e);
                 ServletException servletException = new ServletException(msg, e);
-                servletException.initCause(e);
                 throw servletException;
             }
             this.initialized = true;

Added: cocoon/whiteboard/corona/trunk/corona-servlet/src/main/java/org/apache/cocoon/corona/servlet/controller/ControllerContextHelper.java
URL: http://svn.apache.org/viewvc/cocoon/whiteboard/corona/trunk/corona-servlet/src/main/java/org/apache/cocoon/corona/servlet/controller/ControllerContextHelper.java?rev=676325&view=auto
==============================================================================
--- cocoon/whiteboard/corona/trunk/corona-servlet/src/main/java/org/apache/cocoon/corona/servlet/controller/ControllerContextHelper.java (added)
+++ cocoon/whiteboard/corona/trunk/corona-servlet/src/main/java/org/apache/cocoon/corona/servlet/controller/ControllerContextHelper.java Sun Jul 13 07:14:56 2008
@@ -0,0 +1,35 @@
+package org.apache.cocoon.corona.servlet.controller;
+
+import java.util.Collections;
+import java.util.Map;
+
+import javax.servlet.http.HttpServletRequest;
+
+import org.apache.cocoon.corona.servlet.util.HttpContextHelper;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+public class ControllerContextHelper {
+
+    private static final Log LOG = LogFactory.getLog(ControllerContextHelper.class);
+
+    private static final String CONTEXT_OBJECT = ControllerContextHelper.class.getName();
+
+    @SuppressWarnings("unchecked")
+    public static Map<String, Object> getContext(Map<String, ? extends Object> parameters) {
+        HttpServletRequest request = HttpContextHelper.getRequest(parameters);
+        Object controllerContext = request.getAttribute(CONTEXT_OBJECT);
+
+        if (controllerContext instanceof Map) {
+            return (Map<String, Object>) controllerContext;
+        }
+
+        LOG.warn("The parameters contain an entry with the key " + CONTEXT_OBJECT + " but it is not a map.");
+        return Collections.EMPTY_MAP;
+    }
+
+    public static void storeContext(Map<String, Object> controllerContext, Map<String, Object> parameters) {
+        HttpServletRequest request = HttpContextHelper.getRequest(parameters);
+        request.setAttribute(CONTEXT_OBJECT, controllerContext);
+    }
+}

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

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

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

Modified: 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=676325&r1=676324&r2=676325&view=diff
==============================================================================
--- cocoon/whiteboard/corona/trunk/corona-servlet/src/main/java/org/apache/cocoon/corona/servlet/util/ObjectModelProvider.java (original)
+++ cocoon/whiteboard/corona/trunk/corona-servlet/src/main/java/org/apache/cocoon/corona/servlet/util/ObjectModelProvider.java Sun Jul 13 07:14:56 2008
@@ -21,12 +21,13 @@
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletRequestWrapper;
 
+import org.apache.cocoon.corona.servlet.controller.ControllerContextHelper;
 import org.apache.cocoon.corona.sitemap.objectmodel.ObjectModel;
 
 public class ObjectModelProvider {
 
     public static ObjectModel provide(Map<String, Object> parameters) {
-        ObjectModel objectModel = new ObjectModel();
+        ObjectModel objectModel = new ObjectModel(parameters);
         Map<String, Object> corona = objectModel.getCoronaObject();
 
         HttpServletRequest request = HttpContextHelper.getRequest(parameters);
@@ -34,10 +35,17 @@
         corona.put("response", HttpContextHelper.getResponse(parameters));
         corona.put("context", HttpContextHelper.getServletContext(parameters));
         corona.put("settings", SettingsHelper.getSettings(parameters));
+        Map<String, Object> controllerContext = ControllerContextHelper.getContext(parameters);
+        if (controllerContext != null) {
+            corona.put("controller", controllerContext);
+        }
 
         return objectModel;
     }
 
+    /**
+     * A wrapper that can be used by expression languages to provide shortcuts to the request parameters.
+     */
     public static class ObjectModelRequest extends HttpServletRequestWrapper {
 
         public ObjectModelRequest(HttpServletRequest request) {