]> source.dussan.org Git - vaadin-framework.git/commitdiff
Added some code to make it easier to port Portlet 1.0 apps to 2.0.
authorPetter Holmström <petter.holmstrom@itmill.com>
Mon, 16 Nov 2009 10:55:36 +0000 (10:55 +0000)
committerPetter Holmström <petter.holmstrom@itmill.com>
Mon, 16 Nov 2009 10:55:36 +0000 (10:55 +0000)
svn changeset:9815/svn branch:portlet_2.0

WebContent/VAADIN/themes/reindeer/button/img/black-button-sprites-ie6.png
WebContent/VAADIN/themes/reindeer/button/img/button-sprites-ie6.png
WebContent/VAADIN/themes/reindeer/common/img/black-vertical-sprites-ie6.png
WebContent/VAADIN/themes/reindeer/common/img/horizontal-sprites.png
WebContent/VAADIN/themes/reindeer/common/img/vertical-sprites-ie6.png
src/com/vaadin/terminal/gwt/server/AbstractApplicationPortlet.java
src/com/vaadin/terminal/gwt/server/PortletApplicationContext2.java

index 90a73be23fc9cc8ca0f0b171688dcb0d130c7b72..515f64155d0abd10fe56a8dc2ac864359c511407 100644 (file)
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
index 8ccaa56edd0aeac98ac2c966ac25c6490b6ad1a4..662dc4c66139d5351c46f51ac35c865b547a4a9a 100644 (file)
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
index 84c52dbf4c09df07f12d2d951c9e4706c441941b..0a7bd350e5324e4500f945831543ad64d34ed6a4 100644 (file)
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
index 7980a5aa188df8bf69ab8399ea845792768fb4ac..3f107c2c319c19d48dc2592a91fbc872fa663f8c 100644 (file)
Binary files a/WebContent/VAADIN/themes/reindeer/common/img/horizontal-sprites.png and b/WebContent/VAADIN/themes/reindeer/common/img/horizontal-sprites.png differ
index c4ee4bdcd1be4c808a3e69466a48f074300ec625..028218a6ab0059d779f2fd542ae45052a1f3bae6 100644 (file)
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
index 4dcc38d21d9aa0888b83b1d1cf8e0bf39460a055..28b8e90dc8bc658e0d86339878ee886795ec20eb 100644 (file)
@@ -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
index e9d2f2abab6a32ddecd4a02be7d96afe0e02b6ae..1e8d76b61eaf694a715e9813f13f34df6689223c 100644 (file)
@@ -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<TransactionListener> listeners;
 
+    protected Map<Application, Set<PortletListener>> portletListeners = new HashMap<Application, Set<PortletListener>>();
+
     protected transient PortletSession session;
 
     protected final HashSet<Application> applications = new HashSet<Application>();
@@ -184,4 +208,198 @@ public class PortletApplicationContext2 implements ApplicationContext,
             e.printStackTrace();
         }
     }
+
+    public void addPortletListener(Application app, PortletListener listener) {
+        Set<PortletListener> l = portletListeners.get(app);
+        if (l == null) {
+            l = new LinkedHashSet<PortletListener>();
+            portletListeners.put(app, l);
+        }
+        l.add(listener);
+    }
+
+    public void removePortletListener(Application app, PortletListener listener) {
+        Set<PortletListener> l = portletListeners.get(app);
+        if (l != null) {
+            l.remove(listener);
+        }
+    }
+
+    public void firePortletRenderRequest(Application app,
+            RenderRequest request, RenderResponse response) {
+        Set<PortletListener> 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<PortletListener> 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<PortletListener> 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<PortletListener> 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<PortletMode> 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;
+        }
+    }
+
 }