From: Petter Holmström Date: Mon, 16 Nov 2009 10:55:36 +0000 (+0000) Subject: Added some code to make it easier to port Portlet 1.0 apps to 2.0. X-Git-Tag: 6.7.0.beta1~2266^2~8 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=11f92ad24ed36579393e4428e0b76f3afcaae830;p=vaadin-framework.git Added some code to make it easier to port Portlet 1.0 apps to 2.0. svn changeset:9815/svn branch:portlet_2.0 --- diff --git a/WebContent/VAADIN/themes/reindeer/button/img/black-button-sprites-ie6.png b/WebContent/VAADIN/themes/reindeer/button/img/black-button-sprites-ie6.png index 90a73be23f..515f64155d 100644 Binary files a/WebContent/VAADIN/themes/reindeer/button/img/black-button-sprites-ie6.png and b/WebContent/VAADIN/themes/reindeer/button/img/black-button-sprites-ie6.png differ diff --git a/WebContent/VAADIN/themes/reindeer/button/img/button-sprites-ie6.png b/WebContent/VAADIN/themes/reindeer/button/img/button-sprites-ie6.png index 8ccaa56edd..662dc4c661 100644 Binary files a/WebContent/VAADIN/themes/reindeer/button/img/button-sprites-ie6.png and b/WebContent/VAADIN/themes/reindeer/button/img/button-sprites-ie6.png differ diff --git a/WebContent/VAADIN/themes/reindeer/common/img/black-vertical-sprites-ie6.png b/WebContent/VAADIN/themes/reindeer/common/img/black-vertical-sprites-ie6.png index 84c52dbf4c..0a7bd350e5 100644 Binary files a/WebContent/VAADIN/themes/reindeer/common/img/black-vertical-sprites-ie6.png and b/WebContent/VAADIN/themes/reindeer/common/img/black-vertical-sprites-ie6.png differ diff --git a/WebContent/VAADIN/themes/reindeer/common/img/horizontal-sprites.png b/WebContent/VAADIN/themes/reindeer/common/img/horizontal-sprites.png index 7980a5aa18..3f107c2c31 100644 Binary files a/WebContent/VAADIN/themes/reindeer/common/img/horizontal-sprites.png and b/WebContent/VAADIN/themes/reindeer/common/img/horizontal-sprites.png differ diff --git a/WebContent/VAADIN/themes/reindeer/common/img/vertical-sprites-ie6.png b/WebContent/VAADIN/themes/reindeer/common/img/vertical-sprites-ie6.png index c4ee4bdcd1..028218a6ab 100644 Binary files a/WebContent/VAADIN/themes/reindeer/common/img/vertical-sprites-ie6.png and b/WebContent/VAADIN/themes/reindeer/common/img/vertical-sprites-ie6.png differ diff --git a/src/com/vaadin/terminal/gwt/server/AbstractApplicationPortlet.java b/src/com/vaadin/terminal/gwt/server/AbstractApplicationPortlet.java index 4dcc38d21d..28b8e90dc8 100644 --- a/src/com/vaadin/terminal/gwt/server/AbstractApplicationPortlet.java +++ b/src/com/vaadin/terminal/gwt/server/AbstractApplicationPortlet.java @@ -22,7 +22,6 @@ import java.util.Properties; import javax.portlet.ActionRequest; import javax.portlet.ActionResponse; -import javax.portlet.EventPortlet; import javax.portlet.EventRequest; import javax.portlet.EventResponse; import javax.portlet.GenericPortlet; @@ -387,13 +386,27 @@ public abstract class AbstractApplicationPortlet extends GenericPortlet /* Start the newly created application */ startApplication(request, application, applicationContext); - + /* * Transaction starts. Call transaction listeners. Transaction * end is called in the finally block below. */ applicationContext.startTransaction(application, request); - + + /* Notify listeners */ + + // TODO Should this happen before or after the transaction starts? + + if (request instanceof RenderRequest) { + applicationContext.firePortletRenderRequest(application, (RenderRequest) request, (RenderResponse) response); + } else if (request instanceof ActionRequest) { + applicationContext.firePortletActionRequest(application, (ActionRequest) request, (ActionResponse) response); + } else if (request instanceof EventRequest) { + applicationContext.firePortletEventRequest(application, (EventRequest) request, (EventResponse) response); + } else if (request instanceof ResourceRequest) { + applicationContext.firePortletResourceRequest(application, (ResourceRequest) request, (ResourceResponse) response); + } + /* Handle the request */ if (requestType == RequestType.FILE_UPLOAD) { applicationManager.handleFileUpload( @@ -405,17 +418,6 @@ public abstract class AbstractApplicationPortlet extends GenericPortlet (ResourceRequest) request, (ResourceResponse) response, this); return; - } else if (requestType == RequestType.EVENT) { - /* - * Redirect portlet event to application if it implements - * the EventPortlet interface (contains only one method). - */ - // TODO Figure out a better way of handling events - if (application instanceof EventPortlet) { - ((EventPortlet) application).processEvent( - (EventRequest) request, - (EventResponse) response); - } } else { /* * Removes the application if it has stopped diff --git a/src/com/vaadin/terminal/gwt/server/PortletApplicationContext2.java b/src/com/vaadin/terminal/gwt/server/PortletApplicationContext2.java index e9d2f2abab..1e8d76b61e 100644 --- a/src/com/vaadin/terminal/gwt/server/PortletApplicationContext2.java +++ b/src/com/vaadin/terminal/gwt/server/PortletApplicationContext2.java @@ -1,6 +1,8 @@ package com.vaadin.terminal.gwt.server; import java.io.File; +import java.io.IOException; +import java.io.OutputStream; import java.io.PrintWriter; import java.io.Serializable; import java.io.StringWriter; @@ -9,13 +11,33 @@ import java.util.Collection; import java.util.Collections; import java.util.HashMap; import java.util.HashSet; +import java.util.LinkedHashSet; import java.util.LinkedList; +import java.util.Locale; +import java.util.Map; +import java.util.Set; +import javax.portlet.ActionRequest; +import javax.portlet.ActionResponse; +import javax.portlet.CacheControl; +import javax.portlet.EventRequest; +import javax.portlet.EventResponse; +import javax.portlet.PortletMode; import javax.portlet.PortletRequest; import javax.portlet.PortletSession; +import javax.portlet.PortletURL; +import javax.portlet.RenderRequest; +import javax.portlet.RenderResponse; +import javax.portlet.ResourceRequest; +import javax.portlet.ResourceResponse; +import javax.portlet.ResourceURL; +import javax.servlet.http.Cookie; import javax.servlet.http.HttpSessionBindingEvent; import javax.servlet.http.HttpSessionBindingListener; +import org.w3c.dom.DOMException; +import org.w3c.dom.Element; + import com.vaadin.Application; import com.vaadin.service.ApplicationContext; @@ -30,6 +52,8 @@ public class PortletApplicationContext2 implements ApplicationContext, protected LinkedList listeners; + protected Map> portletListeners = new HashMap>(); + protected transient PortletSession session; protected final HashSet applications = new HashSet(); @@ -184,4 +208,198 @@ public class PortletApplicationContext2 implements ApplicationContext, e.printStackTrace(); } } + + public void addPortletListener(Application app, PortletListener listener) { + Set l = portletListeners.get(app); + if (l == null) { + l = new LinkedHashSet(); + portletListeners.put(app, l); + } + l.add(listener); + } + + public void removePortletListener(Application app, PortletListener listener) { + Set l = portletListeners.get(app); + if (l != null) { + l.remove(listener); + } + } + + public void firePortletRenderRequest(Application app, + RenderRequest request, RenderResponse response) { + Set listeners = portletListeners.get(app); + if (listeners != null) { + for (PortletListener l : listeners) { + l.handleRenderRequest(request, new RestrictedRenderResponse(response)); + } + } + } + + public void firePortletActionRequest(Application app, + ActionRequest request, ActionResponse response) { + Set listeners = portletListeners.get(app); + if (listeners != null) { + for (PortletListener l : listeners) { + l.handleActionRequest(request, response); + } + } + } + + public void firePortletEventRequest(Application app, EventRequest request, + EventResponse response) { + Set listeners = portletListeners.get(app); + if (listeners != null) { + for (PortletListener l : listeners) { + l.handleEventRequest(request, response); + } + } + } + + public void firePortletResourceRequest(Application app, + ResourceRequest request, ResourceResponse response) { + Set listeners = portletListeners.get(app); + if (listeners != null) { + for (PortletListener l : listeners) { + l.handleResourceRequest(request, response); + } + } + } + + public interface PortletListener extends Serializable { + + public void handleRenderRequest(RenderRequest request, + RenderResponse response); + + public void handleActionRequest(ActionRequest request, + ActionResponse response); + + public void handleEventRequest(EventRequest request, + EventResponse response); + + public void handleResourceRequest(ResourceRequest request, + ResourceResponse response); + } + + private class RestrictedRenderResponse implements RenderResponse, + Serializable { + + private RenderResponse response; + + private RestrictedRenderResponse(RenderResponse response) { + this.response = response; + } + + public void addProperty(String key, String value) { + response.addProperty(key, value); + } + + public PortletURL createActionURL() { + return response.createActionURL(); + } + + public PortletURL createRenderURL() { + return response.createRenderURL(); + } + + public String encodeURL(String path) { + return response.encodeURL(path); + } + + public void flushBuffer() throws IOException { + // NOP + // TODO throw? + } + + public int getBufferSize() { + return response.getBufferSize(); + } + + public String getCharacterEncoding() { + return response.getCharacterEncoding(); + } + + public String getContentType() { + return response.getContentType(); + } + + public Locale getLocale() { + return response.getLocale(); + } + + public String getNamespace() { + return response.getNamespace(); + } + + public OutputStream getPortletOutputStream() throws IOException { + // write forbidden + return null; + } + + public PrintWriter getWriter() throws IOException { + // write forbidden + return null; + } + + public boolean isCommitted() { + return response.isCommitted(); + } + + public void reset() { + // NOP + // TODO throw? + } + + public void resetBuffer() { + // NOP + // TODO throw? + } + + public void setBufferSize(int size) { + // NOP + // TODO throw? + } + + public void setContentType(String type) { + // NOP + // TODO throw? + } + + public void setProperty(String key, String value) { + response.setProperty(key, value); + } + + public void setTitle(String title) { + response.setTitle(title); + } + + public void setNextPossiblePortletModes( + Collection portletModes) { + // NOP + // TODO throw? + } + + public ResourceURL createResourceURL() { + return response.createResourceURL(); + } + + public CacheControl getCacheControl() { + return response.getCacheControl(); + } + + public void addProperty(Cookie cookie) { + // NOP + // TODO throw? + } + + public void addProperty(String key, Element element) { + // NOP + // TODO throw? + } + + public Element createElement(String tagName) throws DOMException { + // NOP + return null; + } + } + }