]> source.dussan.org Git - vaadin-framework.git/commitdiff
Create wrapped requests and responses in service and handleRequest
authorLeif Åstrand <leif@vaadin.com>
Tue, 8 Nov 2011 14:48:16 +0000 (16:48 +0200)
committerLeif Åstrand <leif@vaadin.com>
Tue, 8 Nov 2011 14:48:16 +0000 (16:48 +0200)
src/com/vaadin/terminal/WrappedRequest.java
src/com/vaadin/terminal/gwt/server/AbstractApplicationPortlet.java
src/com/vaadin/terminal/gwt/server/AbstractApplicationServlet.java
src/com/vaadin/terminal/gwt/server/AbstractCommunicationManager.java
src/com/vaadin/terminal/gwt/server/CommunicationManager.java
src/com/vaadin/terminal/gwt/server/PortletCommunicationManager.java
src/com/vaadin/terminal/gwt/server/WrappedHttpServletRequest.java
src/com/vaadin/terminal/gwt/server/WrappedPortletRequest.java
src/com/vaadin/terminal/gwt/server/WrappedPortletResponse.java

index e34bf5f357a1e146ad9ef7bb2ab2443531193943..e005eee474b77298cfc0d1192755bbd2f32fb6c0 100644 (file)
@@ -56,4 +56,6 @@ public interface WrappedRequest {
 
     public void setSessionAttribute(String name, Object attribute);
 
+    public String getContentType();
+
 }
index 0462f70e747d2a56cf90a2d3b30770d7f3be6635..8e20e23c44b5e36a0add794a2f36b7242012f8fb 100644 (file)
@@ -85,10 +85,13 @@ public abstract class AbstractApplicationPortlet extends GenericPortlet
         public void criticalNotification(WrappedRequest request,
                 WrappedResponse response, String cap, String msg,
                 String details, String outOfSyncURL) throws IOException {
-            portlet.criticalNotification(
-                    ((WrappedPortletRequest) request).getPortletRequest(),
-                    ((WrappedPortletResponse) response).getPortletResponse(),
-                    cap, msg, details, outOfSyncURL);
+            PortletRequest portletRequest = ((WrappedPortletRequest) request)
+                    .getPortletRequest();
+            PortletResponse portletResponse = ((WrappedPortletResponse) response)
+                    .getPortletResponse();
+            portlet.criticalNotification(portletRequest,
+                    (MimeResponse) portletResponse, cap, msg, details,
+                    outOfSyncURL);
         }
 
         public InputStream getThemeResourceAsStream(String themeName,
@@ -357,6 +360,11 @@ public abstract class AbstractApplicationPortlet extends GenericPortlet
             PortletResponse response) throws PortletException, IOException {
         AbstractApplicationPortletWrapper portletWrapper = new AbstractApplicationPortletWrapper(
                 this);
+        WrappedPortletRequest wrappedRequest = new WrappedPortletRequest(
+                request);
+        WrappedPortletResponse wrappedResponse = new WrappedPortletResponse(
+                response);
+
         RequestType requestType = getRequestType(request);
 
         if (requestType == RequestType.UNKNOWN) {
@@ -443,7 +451,8 @@ public abstract class AbstractApplicationPortlet extends GenericPortlet
                             break;
                         default:
                             root = applicationManager.getApplicationRoot(
-                                    request, portletWrapper, application, null);
+                                    wrappedRequest, portletWrapper,
+                                    application, null);
                         }
                         // if window not found, not a problem - use null
                     }
@@ -471,9 +480,8 @@ public abstract class AbstractApplicationPortlet extends GenericPortlet
 
                 /* Handle the request */
                 if (requestType == RequestType.FILE_UPLOAD) {
-                    applicationManager.handleFileUpload(
-                            (ResourceRequest) request,
-                            (ResourceResponse) response);
+                    applicationManager.handleFileUpload(wrappedRequest,
+                            wrappedResponse);
                     return;
                 } else if (requestType == RequestType.UIDL) {
                     // Handles AJAX UIDL requests
@@ -481,9 +489,8 @@ public abstract class AbstractApplicationPortlet extends GenericPortlet
                         // warn if versions do not match
                         checkWidgetsetVersion(request);
                     }
-                    applicationManager.handleUidlRequest(
-                            (ResourceRequest) request,
-                            (ResourceResponse) response, portletWrapper, root);
+                    applicationManager.handleUidlRequest(wrappedRequest,
+                            wrappedResponse, portletWrapper, root);
                     return;
                 } else {
                     /*
@@ -494,8 +501,8 @@ public abstract class AbstractApplicationPortlet extends GenericPortlet
                         return;
                     }
 
-                    handleOtherRequest(request, response, requestType,
-                            application, root, applicationContext,
+                    handleOtherRequest(wrappedRequest, wrappedResponse,
+                            requestType, application, root, applicationContext,
                             applicationManager);
                 }
             } catch (final SessionExpiredException e) {
@@ -548,8 +555,8 @@ public abstract class AbstractApplicationPortlet extends GenericPortlet
      * @throws IOException
      * @throws MalformedURLException
      */
-    private void handleOtherRequest(PortletRequest request,
-            PortletResponse response, RequestType requestType,
+    private void handleOtherRequest(WrappedRequest request,
+            WrappedResponse response, RequestType requestType,
             Application application, Root root,
             PortletApplicationContext2 applicationContext,
             PortletCommunicationManager applicationManager)
@@ -575,11 +582,15 @@ public abstract class AbstractApplicationPortlet extends GenericPortlet
 
         if (requestType == RequestType.APPLICATION_RESOURCE) {
             if (!applicationManager.handleApplicationRequest(request, response)) {
-                response.setProperty(ResourceResponse.HTTP_STATUS_CODE, "404");
+                response.setStatus(404);
             }
         } else if (requestType == RequestType.RENDER) {
-            writeAjaxPage((RenderRequest) request, (RenderResponse) response,
-                    root, application);
+            PortletRequest portletRequest = ((WrappedPortletRequest) request)
+                    .getPortletRequest();
+            PortletResponse portletResponse = ((WrappedPortletResponse) response)
+                    .getPortletResponse();
+            writeAjaxPage((RenderRequest) portletRequest,
+                    (RenderResponse) portletResponse, root, application);
         } else if (requestType == RequestType.EVENT) {
             // nothing to do, listeners do all the work
         } else if (requestType == RequestType.ACTION) {
index aa27cf412e838c42131936d86e88310e5bb8b7fd..b8f5a4c2bec8dc382623c179d7078f0abc3854f9 100644 (file)
@@ -432,6 +432,10 @@ public abstract class AbstractApplicationServlet extends HttpServlet implements
             HttpServletResponse response) throws ServletException, IOException {
         AbstractApplicationServletWrapper servletWrapper = new AbstractApplicationServletWrapper(
                 this);
+        WrappedHttpServletRequest wrappedRequest = new WrappedHttpServletRequest(
+                request, this);
+        WrappedHttpServletResponse wrappedResponse = new WrappedHttpServletResponse(
+                response);
 
         RequestType requestType = getRequestType(request);
         if (!ensureCookiesEnabled(requestType, request, response)) {
@@ -511,14 +515,15 @@ public abstract class AbstractApplicationServlet extends HttpServlet implements
 
             /* Handle the request */
             if (requestType == RequestType.FILE_UPLOAD) {
-                applicationManager.handleFileUpload(request, response, this);
+                applicationManager.handleFileUpload(wrappedRequest,
+                        wrappedResponse);
                 return;
             } else if (requestType == RequestType.UIDL) {
                 // Handles AJAX UIDL requests
-                Root root = applicationManager.getApplicationRoot(request,
-                        this, servletWrapper, application, null);
-                applicationManager.handleUidlRequest(request, response, this,
-                        servletWrapper, root);
+                Root root = applicationManager.getApplicationRoot(
+                        wrappedRequest, servletWrapper, application, null);
+                applicationManager.handleUidlRequest(wrappedRequest,
+                        wrappedResponse, servletWrapper, root);
                 return;
             }
 
@@ -529,14 +534,14 @@ public abstract class AbstractApplicationServlet extends HttpServlet implements
                 return;
             }
 
-            if (applicationManager.handleApplicationRequest(request, response,
-                    this)) {
+            if (applicationManager.handleApplicationRequest(wrappedRequest,
+                    wrappedResponse)) {
                 return;
             }
             // TODO Should return 404 error here and not do anything more
 
             // Finds the root within the application
-            Root root = getApplicationRoot(request, applicationManager,
+            Root root = getApplicationRoot(wrappedRequest, applicationManager,
                     servletWrapper, application);
             if (root == null) {
                 throw new ServletException(ERROR_NO_WINDOW_FOUND);
@@ -2160,7 +2165,7 @@ public abstract class AbstractApplicationServlet extends HttpServlet implements
      *             if an exception has occurred that interferes with the
      *             servlet's normal operation.
      */
-    protected Root getApplicationRoot(HttpServletRequest request,
+    protected Root getApplicationRoot(WrappedRequest request,
             CommunicationManager applicationManager, Callback servletWrapper,
             Application application) throws ServletException {
         //
@@ -2189,8 +2194,8 @@ public abstract class AbstractApplicationServlet extends HttpServlet implements
         //
         // }
         //
-        return applicationManager.getApplicationRoot(request, this,
-                servletWrapper, application, assumedRoot);
+        return applicationManager.getApplicationRoot(request, servletWrapper,
+                application, assumedRoot);
     }
 
     /**
index 13eae6c12757babbbdef33ff67812764fcc2ed6e..e4839df1d3228586664a2237c56b952cc3fdaa12 100644 (file)
@@ -539,7 +539,7 @@ public abstract class AbstractCommunicationManager implements
      * @throws IOException
      * @throws InvalidUIDLSecurityKeyException
      */
-    protected void doHandleUidlRequest(WrappedRequest request,
+    public void handleUidlRequest(WrappedRequest request,
             WrappedResponse response, Callback callback, Root root)
             throws IOException, InvalidUIDLSecurityKeyException {
 
@@ -746,8 +746,8 @@ public abstract class AbstractCommunicationManager implements
             outWriter.print("\"changes\":[]");
         } else {
             // re-get window - may have been changed
-            Root newRoot = doGetApplicationWindow(request, callback,
-                    application, root);
+            Root newRoot = getApplicationRoot(request, callback, application,
+                    root);
             if (newRoot != root) {
                 root = newRoot;
                 repaintAll = true;
@@ -1661,16 +1661,21 @@ public abstract class AbstractCommunicationManager implements
     }
 
     /**
-     * TODO New method - document me!
+     * Gets the existing application or creates a new one. Get a window within
+     * an application based on the requested URI.
      * 
      * @param request
-     * @param callback
+     *            the HTTP Request.
      * @param application
-     * @param assumedWindow
-     * @return
+     *            the Application to query for window.
+     * @param assumedRoot
+     *            if the window has been already resolved once, this parameter
+     *            must contain the window.
+     * @param callback
+     * @return Window matching the given URI or null if not found.
      */
-    protected Root doGetApplicationWindow(WrappedRequest request,
-            Callback callback, Application application, Root assumedRoot) {
+    public Root getApplicationRoot(WrappedRequest request, Callback callback,
+            Application application, Root assumedRoot) {
         return application.getRoot(request);
 
         // Window window = null;
index 02bd4ea8e3f93f6e59666444098ffa184a8c9df6..62e6ed81b3df7f330bfb7f6e47d96cb6ea5b2e28 100644 (file)
@@ -9,16 +9,13 @@ import java.util.HashMap;
 import java.util.Map;
 import java.util.UUID;
 
-import javax.servlet.ServletException;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
 import com.vaadin.Application;
 import com.vaadin.terminal.Paintable;
 import com.vaadin.terminal.StreamVariable;
 import com.vaadin.terminal.VariableOwner;
+import com.vaadin.terminal.WrappedRequest;
+import com.vaadin.terminal.WrappedResponse;
 import com.vaadin.ui.Component;
-import com.vaadin.ui.Root;
 
 /**
  * Application manager processes changes and paints for single application
@@ -63,19 +60,18 @@ public class CommunicationManager extends AbstractCommunicationManager {
      * 
      * @param request
      * @param response
-     * @param servlet
      * @throws IOException
      * @throws InvalidUIDLSecurityKeyException
      */
-    public void handleFileUpload(HttpServletRequest request,
-            HttpServletResponse response, AbstractApplicationServlet servlet)
-            throws IOException, InvalidUIDLSecurityKeyException {
+    public void handleFileUpload(WrappedRequest request,
+            WrappedResponse response) throws IOException,
+            InvalidUIDLSecurityKeyException {
 
         /*
          * URI pattern: APP/UPLOAD/[PID]/[NAME]/[SECKEY] See #createReceiverUrl
          */
 
-        String pathInfo = request.getPathInfo();
+        String pathInfo = request.getRequestPathInfo();
         // strip away part until the data we are interested starts
         int startOfData = pathInfo
                 .indexOf(AbstractApplicationServlet.UPLOAD_URL_PREFIX)
@@ -92,20 +88,16 @@ public class CommunicationManager extends AbstractCommunicationManager {
 
             VariableOwner source = getVariableOwner(paintableId);
             String contentType = request.getContentType();
-            if (request.getContentType().contains("boundary")) {
+            if (contentType.contains("boundary")) {
                 // Multipart requests contain boundary string
-                doHandleSimpleMultipartFileUpload(
-                        new WrappedHttpServletRequest(request, servlet),
-                        new WrappedHttpServletResponse(response),
+                doHandleSimpleMultipartFileUpload(request, response,
                         streamVariable, variableName, source,
                         contentType.split("boundary=")[1]);
             } else {
                 // if boundary string does not exist, the posted file is from
                 // XHR2.post(File)
-                doHandleXhrFilePost(new WrappedHttpServletRequest(request,
-                        servlet), new WrappedHttpServletResponse(response),
-                        streamVariable, variableName, source,
-                        request.getContentLength());
+                doHandleXhrFilePost(request, response, streamVariable,
+                        variableName, source, request.getContentLength());
             }
         } else {
             throw new InvalidUIDLSecurityKeyException(
@@ -114,55 +106,6 @@ public class CommunicationManager extends AbstractCommunicationManager {
 
     }
 
-    /**
-     * Handles UIDL request
-     * 
-     * TODO document
-     * 
-     * @param request
-     * @param response
-     * @param applicationServlet
-     * @param callback
-     * @param window
-     *            target window of the UIDL request, can be null if window not
-     *            found
-     * @throws IOException
-     * @throws ServletException
-     */
-    public void handleUidlRequest(HttpServletRequest request,
-            HttpServletResponse response,
-            AbstractApplicationServlet applicationServlet, Callback callback,
-            Root root) throws IOException, ServletException,
-            InvalidUIDLSecurityKeyException {
-        doHandleUidlRequest(new WrappedHttpServletRequest(request,
-                applicationServlet), new WrappedHttpServletResponse(response),
-                callback, root);
-    }
-
-    /**
-     * Gets the existing application or creates a new one. Get a window within
-     * an application based on the requested URI.
-     * 
-     * @param request
-     *            the HTTP Request.
-     * @param application
-     *            the Application to query for window.
-     * @param assumedRoot
-     *            if the window has been already resolved once, this parameter
-     *            must contain the window.
-     * @param callback
-     * @return Window matching the given URI or null if not found.
-     * @throws ServletException
-     *             if an exception has occurred that interferes with the
-     *             servlet's normal operation.
-     */
-    Root getApplicationRoot(HttpServletRequest request,
-            AbstractApplicationServlet applicationServlet, Callback callback,
-            Application application, Root assumedRoot) throws ServletException {
-        return doGetApplicationWindow(new WrappedHttpServletRequest(request,
-                applicationServlet), callback, application, assumedRoot);
-    }
-
     @Override
     protected void unregisterPaintable(Component p) {
         /* Cleanup possible receivers */
@@ -235,12 +178,4 @@ public class CommunicationManager extends AbstractCommunicationManager {
             pidToNameToStreamVariable.remove(getPaintableId((Paintable) owner));
         }
     }
-
-    public boolean handleApplicationRequest(HttpServletRequest request,
-            HttpServletResponse response, AbstractApplicationServlet servlet)
-            throws IOException {
-        return handleApplicationRequest(new WrappedHttpServletRequest(request,
-                servlet), new WrappedHttpServletResponse(response));
-    }
-
 }
index 95f03c7b1a79798ea02433eb61ee0f9b42b2a83d..3368f87ef246d8815227be98c713b338986d27eb 100644 (file)
@@ -7,17 +7,15 @@ import java.io.IOException;
 import java.util.HashMap;
 import java.util.Map;
 
-import javax.portlet.PortletRequest;
-import javax.portlet.PortletResponse;
-import javax.portlet.ResourceRequest;
 import javax.portlet.ResourceResponse;
 import javax.portlet.ResourceURL;
-import javax.servlet.ServletException;
 
 import com.vaadin.Application;
 import com.vaadin.terminal.Paintable;
 import com.vaadin.terminal.StreamVariable;
 import com.vaadin.terminal.VariableOwner;
+import com.vaadin.terminal.WrappedRequest;
+import com.vaadin.terminal.WrappedResponse;
 import com.vaadin.ui.Component;
 import com.vaadin.ui.Root;
 
@@ -36,8 +34,8 @@ public class PortletCommunicationManager extends AbstractCommunicationManager {
         super(application);
     }
 
-    public void handleFileUpload(ResourceRequest request,
-            ResourceResponse response) throws IOException {
+    public void handleFileUpload(WrappedRequest request,
+            WrappedResponse response) throws IOException {
         String contentType = request.getContentType();
         String name = request.getParameter("name");
         String ownerId = request.getParameter("rec-owner");
@@ -46,13 +44,11 @@ public class PortletCommunicationManager extends AbstractCommunicationManager {
                 variableOwner).get(name);
 
         if (contentType.contains("boundary")) {
-            doHandleSimpleMultipartFileUpload(
-                    new WrappedPortletRequest(request),
-                    new WrappedPortletResponse(response), streamVariable, name,
-                    variableOwner, contentType.split("boundary=")[1]);
+            doHandleSimpleMultipartFileUpload(request, response,
+                    streamVariable, name, variableOwner,
+                    contentType.split("boundary=")[1]);
         } else {
-            doHandleXhrFilePost(new WrappedPortletRequest(request),
-                    new WrappedPortletResponse(response), streamVariable, name,
+            doHandleXhrFilePost(request, response, streamVariable, name,
                     variableOwner, request.getContentLength());
         }
 
@@ -66,39 +62,16 @@ public class PortletCommunicationManager extends AbstractCommunicationManager {
         }
     }
 
-    public void handleUidlRequest(ResourceRequest request,
-            ResourceResponse response, Callback callback, Root root)
-            throws InvalidUIDLSecurityKeyException, IOException {
-        currentUidlResponse = response;
-        doHandleUidlRequest(new WrappedPortletRequest(request),
-                new WrappedPortletResponse(response), callback, root);
+    @Override
+    public void handleUidlRequest(WrappedRequest request,
+            WrappedResponse response, Callback callback, Root root)
+            throws IOException, InvalidUIDLSecurityKeyException {
+        currentUidlResponse = (ResourceResponse) ((WrappedPortletResponse) response)
+                .getPortletResponse();
+        super.handleUidlRequest(request, response, callback, root);
         currentUidlResponse = null;
     }
 
-    /**
-     * Gets the existing application or creates a new one. Get a window within
-     * an application based on the requested URI.
-     * 
-     * @param request
-     *            the portlet Request.
-     * @param applicationPortlet
-     * @param application
-     *            the Application to query for window.
-     * @param assumedRoot
-     *            if the window has been already resolved once, this parameter
-     *            must contain the window.
-     * @return Window matching the given URI or null if not found.
-     * @throws ServletException
-     *             if an exception has occurred that interferes with the
-     *             servlet's normal operation.
-     */
-    Root getApplicationRoot(PortletRequest request, Callback callback,
-            Application application, Root assumedRoot) {
-
-        return doGetApplicationWindow(new WrappedPortletRequest(request),
-                callback, application, assumedRoot);
-    }
-
     private Map<VariableOwner, Map<String, StreamVariable>> ownerToNameToStreamVariable;
 
     @Override
@@ -133,10 +106,4 @@ public class PortletCommunicationManager extends AbstractCommunicationManager {
         }
     }
 
-    public boolean handleApplicationRequest(PortletRequest request,
-            PortletResponse response) throws IOException {
-        return handleApplicationRequest(new WrappedPortletRequest(request),
-                new WrappedPortletResponse(response));
-    }
-
 }
index 5d17fb2d9dbfc3b41138af73fad57440a4284c77..eb4a2e10bcdddb3912bbbf99c9c45b8792c82376 100644 (file)
@@ -79,4 +79,8 @@ public class WrappedHttpServletRequest implements WrappedRequest {
     public HttpServletRequest getHttpServletRequest() {
         return request;
     }
+
+    public String getContentType() {
+        return request.getContentType();
+    }
 }
\ No newline at end of file
index ba04c26334f46f78ffce6600f981074d6824fbbd..1dfa161b7bd03917e10e6a2123937b6274ed6ab5 100644 (file)
@@ -96,4 +96,8 @@ public class WrappedPortletRequest implements WrappedRequest {
         return request;
     }
 
+    public String getContentType() {
+        return ((ResourceRequest) request).getContentType();
+    }
+
 }
\ No newline at end of file
index 3f2f67aa1890f3c5ed12ff59fc19dbd7e28f9a28..7c7292a084ff61929e9d230047bcff1d9b87f62c 100644 (file)
@@ -22,8 +22,8 @@ public class WrappedPortletResponse implements WrappedResponse {
         return ((MimeResponse) response).getPortletOutputStream();
     }
 
-    public MimeResponse getPortletResponse() {
-        return (MimeResponse) response;
+    public PortletResponse getPortletResponse() {
+        return response;
     }
 
     public void setContentType(String type) {