]> source.dussan.org Git - vaadin-framework.git/commitdiff
Support the second bootstrap request in portlets (#8052)
authorLeif Åstrand <leif@vaadin.com>
Mon, 19 Dec 2011 14:58:26 +0000 (16:58 +0200)
committerLeif Åstrand <leif@vaadin.com>
Mon, 19 Dec 2011 14:58:34 +0000 (16:58 +0200)
WebContent/VAADIN/vaadinBootstrap.js
src/com/vaadin/terminal/gwt/server/AbstractApplicationPortlet.java
src/com/vaadin/terminal/gwt/server/PortletCommunicationManager.java

index 19da0cfc5a75c49cb449eea1134460fe2158c45b..6561e1ff7918b7cd883a68459abcf021d2bfde3e 100644 (file)
@@ -82,7 +82,7 @@
                        
                        var fetchRootConfig = function() {
                                log('Fetching root config');
-                               var url = getConfig('appUri');
+                               var url = getConfig('browserDetailsUrl') || getConfig('appUri');
                                // Root id
                                url += ((/\?/).test(url) ? "&" : "?") + "browserDetails";
                                url += '&rootId=' + getConfig('rootId');
index 2453590fea3af123218a753086024cfbe08ed676..e1237f4183a1e620ed0cd5ffed1463689463b839 100644 (file)
@@ -442,20 +442,23 @@ public abstract class AbstractApplicationPortlet extends GenericPortlet
     }
 
     protected enum RequestType {
-        FILE_UPLOAD, UIDL, RENDER, STATIC_FILE, APPLICATION_RESOURCE, DUMMY, EVENT, ACTION, UNKNOWN;
+        FILE_UPLOAD, UIDL, RENDER, STATIC_FILE, APPLICATION_RESOURCE, DUMMY, EVENT, ACTION, UNKNOWN, BROWSER_DETAILS;
     }
 
     protected RequestType getRequestType(PortletRequest request) {
         if (request instanceof RenderRequest) {
             return RequestType.RENDER;
         } else if (request instanceof ResourceRequest) {
-            if (isUIDLRequest((ResourceRequest) request)) {
+            ResourceRequest resourceRequest = (ResourceRequest) request;
+            if (isUIDLRequest(resourceRequest)) {
                 return RequestType.UIDL;
-            } else if (isFileUploadRequest((ResourceRequest) request)) {
+            } else if (isBrowserDetailsRequeset(resourceRequest)) {
+                return RequestType.BROWSER_DETAILS;
+            } else if (isFileUploadRequest(resourceRequest)) {
                 return RequestType.FILE_UPLOAD;
-            } else if (isApplicationResourceRequest((ResourceRequest) request)) {
+            } else if (isApplicationResourceRequest(resourceRequest)) {
                 return RequestType.APPLICATION_RESOURCE;
-            } else if (isDummyRequest((ResourceRequest) request)) {
+            } else if (isDummyRequest(resourceRequest)) {
                 return RequestType.DUMMY;
             } else {
                 return RequestType.STATIC_FILE;
@@ -468,6 +471,11 @@ public abstract class AbstractApplicationPortlet extends GenericPortlet
         return RequestType.UNKNOWN;
     }
 
+    private boolean isBrowserDetailsRequeset(ResourceRequest request) {
+        return request.getResourceID() != null
+                && request.getResourceID().equals("browserDetails");
+    }
+
     private boolean isApplicationResourceRequest(ResourceRequest request) {
         return request.getResourceID() != null
                 && request.getResourceID().startsWith("APP");
@@ -599,6 +607,10 @@ public abstract class AbstractApplicationPortlet extends GenericPortlet
                 synchronized (application) {
                     if (application.isRunning()) {
                         switch (requestType) {
+                        case BROWSER_DETAILS:
+                            // Should not try to find a root here as the
+                            // combined request details might change the root
+                            break;
                         case FILE_UPLOAD:
                             // no window
                             break;
@@ -639,6 +651,10 @@ public abstract class AbstractApplicationPortlet extends GenericPortlet
                     applicationManager.handleFileUpload(wrappedRequest,
                             wrappedResponse);
                     return;
+                } else if (requestType == RequestType.BROWSER_DETAILS) {
+                    applicationManager.handleBrowserDetailsRequest(
+                            wrappedRequest, wrappedResponse, application);
+                    return;
                 } else if (requestType == RequestType.UIDL) {
                     // Handles AJAX UIDL requests
                     if (isRepaintAll(request)) {
index eef3b36522fac05ca3420405a2ac218ad6d26b75..a20eb214681b238d405af7d9e9c57f6158327a1c 100644 (file)
@@ -7,6 +7,7 @@ import java.io.IOException;
 import java.util.HashMap;
 import java.util.Map;
 
+import javax.portlet.MimeResponse;
 import javax.portlet.PortletRequest;
 import javax.portlet.PortletResponse;
 import javax.portlet.RenderRequest;
@@ -210,6 +211,21 @@ public class PortletCommunicationManager extends AbstractCommunicationManager {
                         root);
             }
 
+            @Override
+            protected JSONObject getApplicationParameters(
+                    AjaxPageContext context) throws JSONException,
+                    PaintException {
+                JSONObject parameters = super.getApplicationParameters(context);
+                WrappedPortletResponse wrappedPortletResponse = (WrappedPortletResponse) context
+                        .getResponse();
+                MimeResponse portletResponse = (MimeResponse) wrappedPortletResponse
+                        .getPortletResponse();
+                ResourceURL resourceURL = portletResponse.createResourceURL();
+                resourceURL.setResourceID("browserDetails");
+                parameters.put("browserDetailsUrl", resourceURL.toString());
+                return parameters;
+            }
+
         };
 
     }