From 1dbec3df48796a8f129f1adf6bf5a0d71c8509ad Mon Sep 17 00:00:00 2001 From: =?utf8?q?Leif=20=C3=85strand?= Date: Mon, 19 Dec 2011 16:58:26 +0200 Subject: [PATCH] Support the second bootstrap request in portlets (#8052) --- WebContent/VAADIN/vaadinBootstrap.js | 2 +- .../server/AbstractApplicationPortlet.java | 26 +++++++++++++++---- .../server/PortletCommunicationManager.java | 16 ++++++++++++ 3 files changed, 38 insertions(+), 6 deletions(-) diff --git a/WebContent/VAADIN/vaadinBootstrap.js b/WebContent/VAADIN/vaadinBootstrap.js index 19da0cfc5a..6561e1ff79 100644 --- a/WebContent/VAADIN/vaadinBootstrap.js +++ b/WebContent/VAADIN/vaadinBootstrap.js @@ -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'); diff --git a/src/com/vaadin/terminal/gwt/server/AbstractApplicationPortlet.java b/src/com/vaadin/terminal/gwt/server/AbstractApplicationPortlet.java index 2453590fea..e1237f4183 100644 --- a/src/com/vaadin/terminal/gwt/server/AbstractApplicationPortlet.java +++ b/src/com/vaadin/terminal/gwt/server/AbstractApplicationPortlet.java @@ -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)) { diff --git a/src/com/vaadin/terminal/gwt/server/PortletCommunicationManager.java b/src/com/vaadin/terminal/gwt/server/PortletCommunicationManager.java index eef3b36522..a20eb21468 100644 --- a/src/com/vaadin/terminal/gwt/server/PortletCommunicationManager.java +++ b/src/com/vaadin/terminal/gwt/server/PortletCommunicationManager.java @@ -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; + } + }; } -- 2.39.5