aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPetter Holmström <petter.holmstrom@itmill.com>2009-11-10 06:05:18 +0000
committerPetter Holmström <petter.holmstrom@itmill.com>2009-11-10 06:05:18 +0000
commitf6fe5b170be75a7817080a6f8d05365dd8a24c6e (patch)
treeaf99bff2d55de9d452cea19d9099298b8d25062c
parenta5c89286e00e057952e6669ef1ad09fb7cf26946 (diff)
downloadvaadin-framework-f6fe5b170be75a7817080a6f8d05365dd8a24c6e.tar.gz
vaadin-framework-f6fe5b170be75a7817080a6f8d05365dd8a24c6e.zip
Work in progress
svn changeset:9690/svn branch:portlet_2.0
-rw-r--r--src/com/vaadin/terminal/gwt/server/AbstractApplicationPortlet.java61
-rw-r--r--src/com/vaadin/terminal/gwt/server/PortletCommunicationManager.java15
2 files changed, 58 insertions, 18 deletions
diff --git a/src/com/vaadin/terminal/gwt/server/AbstractApplicationPortlet.java b/src/com/vaadin/terminal/gwt/server/AbstractApplicationPortlet.java
index 71d640d3cb..6119c048e0 100644
--- a/src/com/vaadin/terminal/gwt/server/AbstractApplicationPortlet.java
+++ b/src/com/vaadin/terminal/gwt/server/AbstractApplicationPortlet.java
@@ -255,7 +255,7 @@ public abstract class AbstractApplicationPortlet extends GenericPortlet
}
enum RequestType {
- FILE_UPLOAD, UIDL, RENDER, STATIC_FILE, APPLICATION_RESOURCE, UNKNOWN;
+ FILE_UPLOAD, UIDL, RENDER, STATIC_FILE, APPLICATION_RESOURCE, DUMMY, UNKNOWN;
}
protected RequestType getRequestType(PortletRequest request) {
@@ -266,6 +266,8 @@ public abstract class AbstractApplicationPortlet extends GenericPortlet
return RequestType.UIDL;
} else if (isApplicationResourceRequest((ResourceRequest) request)) {
return RequestType.APPLICATION_RESOURCE;
+ } else if (isDummyRequest((ResourceRequest) request)) {
+ return RequestType.DUMMY;
} else {
return RequestType.STATIC_FILE;
}
@@ -287,6 +289,11 @@ public abstract class AbstractApplicationPortlet extends GenericPortlet
&& request.getResourceID().equals("UIDL");
}
+ private boolean isDummyRequest(ResourceRequest request) {
+ return request.getResourceID() != null
+ && request.getResourceID().equals("DUMMY");
+ }
+
private boolean isFileUploadRequest(ActionRequest request) {
return PortletFileUpload.isMultipartContent(request);
}
@@ -313,13 +320,28 @@ public abstract class AbstractApplicationPortlet extends GenericPortlet
if (requestType == RequestType.UNKNOWN) {
System.err.println("Unknown request type");
+ } else if (requestType == RequestType.DUMMY) {
+ System.out.println("Printing Dummy page");
+ /*
+ * This dummy page is used by action responses to redirect to, in
+ * order to prevent the boot strap code from being rendered into
+ * strange places such as iframes.
+ */
+ ((ResourceResponse) response).setContentType("text/html");
+ final OutputStream out = ((ResourceResponse) response)
+ .getPortletOutputStream();
+ final PrintWriter outWriter = new PrintWriter(new BufferedWriter(
+ new OutputStreamWriter(out, "UTF-8")));
+ outWriter.print("<html><body>dummy page</body></html>");
+ outWriter.flush();
+ out.close();
} else if (requestType == RequestType.STATIC_FILE) {
serveStaticResources((ResourceRequest) request,
(ResourceResponse) response);
} else {
Application application = null;
try {
- // TODO What about PARAM_UNLOADBURST & redirectToApplication
+ // TODO What about PARAM_UNLOADBURST & redirectToApplication??
/* Find out which application this request is related to */
application = findApplicationInstance(request, requestType);
@@ -341,6 +363,19 @@ public abstract class AbstractApplicationPortlet extends GenericPortlet
PortletCommunicationManager applicationManager = applicationContext
.getApplicationManager(application);
+ if (response instanceof RenderResponse
+ && applicationManager.dummyURL == null) {
+ /*
+ * The application manager needs an URL to the dummy page.
+ * See the PortletCommunicationManager.sendUploadResponse
+ * method for more information.
+ */
+ ResourceURL dummyURL = ((RenderResponse) response)
+ .createResourceURL();
+ dummyURL.setResourceID("DUMMY");
+ applicationManager.dummyURL = dummyURL.toString();
+ }
+
/* Update browser information from request */
applicationContext.getBrowser()
.updateBrowserProperties(request);
@@ -411,8 +446,8 @@ public abstract class AbstractApplicationPortlet extends GenericPortlet
}
}
} catch (final SessionExpiredException e) {
- // TODO Figure out a better way to deal with SessionExpired
- // -exceptions
+ // TODO Figure out a better way to deal with
+ // SessionExpiredExceptions
System.err.println("Session has expired");
e.printStackTrace(System.err);
} catch (final GeneralSecurityException e) {
@@ -554,7 +589,7 @@ public abstract class AbstractApplicationPortlet extends GenericPortlet
throws PortletException, IOException {
handleRequest(request, response);
}
-
+
@Override
protected void doView(RenderRequest request, RenderResponse response)
throws PortletException, IOException {
@@ -605,8 +640,8 @@ public abstract class AbstractApplicationPortlet extends GenericPortlet
}
private Application findApplicationInstance(PortletRequest request,
- RequestType requestType) throws PortletException, SessionExpiredException,
- MalformedURLException {
+ RequestType requestType) throws PortletException,
+ SessionExpiredException, MalformedURLException {
boolean requestCanCreateApplication = requestCanCreateApplication(
request, requestType);
@@ -678,10 +713,6 @@ public abstract class AbstractApplicationPortlet extends GenericPortlet
final PortletSession session = request
.getPortletSession(allowSessionCreation);
-// System.out.println("getExistingApplication: allowSessionCreation="
-// + allowSessionCreation + ", session=" + session);
-// System.out.println(" - session.isNew() = " + session.isNew());
-
if (session == null) {
throw new SessionExpiredException();
}
@@ -722,8 +753,6 @@ public abstract class AbstractApplicationPortlet extends GenericPortlet
RenderResponse response, Window window, Application application)
throws IOException, MalformedURLException, PortletException {
- // System.out.println("AbstractApplicationPortlet.writeAjaxPage()");
-
response.setContentType("text/html");
final BufferedWriter page = new BufferedWriter(new OutputStreamWriter(
response.getPortletOutputStream(), "UTF-8"));
@@ -779,8 +808,10 @@ public abstract class AbstractApplicationPortlet extends GenericPortlet
+ "\"] = {");
/*
- * We need this in order to get uploads to work TODO This may cause
- * weird side effects on other places where appUri is used!
+ * We need this in order to get uploads to work.
+ *
+ * TODO This may cause weird side effects on other places where appUri
+ * is used!
*/
PortletURL appUri = response.createActionURL();
diff --git a/src/com/vaadin/terminal/gwt/server/PortletCommunicationManager.java b/src/com/vaadin/terminal/gwt/server/PortletCommunicationManager.java
index e7c754c9a3..1c0ab75171 100644
--- a/src/com/vaadin/terminal/gwt/server/PortletCommunicationManager.java
+++ b/src/com/vaadin/terminal/gwt/server/PortletCommunicationManager.java
@@ -31,6 +31,8 @@ import com.vaadin.ui.Window;
@SuppressWarnings("serial")
public class PortletCommunicationManager extends AbstractCommunicationManager {
+ protected String dummyURL;
+
private static class PortletRequestWrapper implements Request {
private final PortletRequest request;
@@ -186,13 +188,20 @@ public class PortletCommunicationManager extends AbstractCommunicationManager {
doHandleFileUpload(new PortletRequestWrapper(request),
new PortletResponseWrapper(response));
}
-
+
@Override
protected void sendUploadResponse(Request request, Response response)
throws IOException {
if (response.getWrappedResponse() instanceof ActionResponse) {
- // FIXME Figure out a better redirect than google... (create a dummy resource URL)
- ((ActionResponse) response.getWrappedResponse()).sendRedirect("http://www.google.com");
+ /*
+ * If we do not redirect to some other page, the entire portal page
+ * will be re-printed into the target of the upload request (an
+ * IFRAME), which in turn will cause very strange side effects.
+ */
+ System.out.println("Redirecting to dummyURL: " + dummyURL);
+ ((ActionResponse) response.getWrappedResponse())
+ .sendRedirect(dummyURL == null ? "http://www.google.com"
+ : dummyURL);
} else
super.sendUploadResponse(request, response);
}