]> source.dussan.org Git - vaadin-framework.git/commitdiff
Now the Calc application works on Liferay.
authorPetter Holmström <petter.holmstrom@itmill.com>
Tue, 3 Nov 2009 09:45:56 +0000 (09:45 +0000)
committerPetter Holmström <petter.holmstrom@itmill.com>
Tue, 3 Nov 2009 09:45:56 +0000 (09:45 +0000)
svn changeset:9600/svn branch:portlet_2.0

WebContent/WEB-INF/liferay-display.xml
WebContent/WEB-INF/liferay-portlet.xml
WebContent/WEB-INF/portlet.xml
src/com/vaadin/terminal/gwt/server/AbstractApplicationPortlet.java
src/com/vaadin/terminal/gwt/server/CommunicationManager.java
src/com/vaadin/terminal/gwt/server/WebBrowser.java

index f5bbc414f2500a973930cec2e10d67a87d0f811c..73e43478ef6c662200a7ff9106ddc0dc412d14ba 100644 (file)
@@ -14,6 +14,8 @@
                 <portlet id="NotificationDemoPortlet" />
                 <portlet id="ChatServletPortlet" />
                 <portlet id="BrowserDemoPortlet" />
-
+                               <portlet id="HelloWorldPortlet" />
+                               <portlet id="AddressBookPortlet" />
+                               <portlet id="CalcPortlet"/>
         </category>
 </display>
\ No newline at end of file
index 5217414ea7b54eee2d80aa734f74f11c54e7ae2b..eecb32eb1549003b1d17fe61e647f53ef0083243 100644 (file)
                 <instanceable>true</instanceable>       
                 <ajaxable>false</ajaxable>
         </portlet>
-    
+        <portlet>
+                <portlet-name>HelloWorldPortlet</portlet-name>
+                <instanceable>true</instanceable>       
+                <ajaxable>false</ajaxable>
+        </portlet>
+        <portlet>
+                <portlet-name>AddressBookPortlet</portlet-name>
+                <instanceable>true</instanceable>       
+                <ajaxable>false</ajaxable>
+        </portlet>          
+        <portlet>
+                <portlet-name>CalcPortlet</portlet-name>
+                <instanceable>true</instanceable>       
+                <ajaxable>false</ajaxable>
+        </portlet>          
         <role-mapper>
                 <role-name>administrator</role-name>
                 <role-link>Administrator</role-link>
index 88c3fa9a5b8ab1e387ba132611b781dd7f7bf168..719560852c9947c75703a494d0698f0a30b09cc7 100644 (file)
 <?xml version="1.0" encoding="UTF-8"?>
-<portlet-app
-        xmlns="http://java.sun.com/xml/ns/portlet/portlet-app_1_0.xsd"
-        version="1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-        xsi:schemaLocation="http://java.sun.com/xml/ns/portlet/portlet-app_1_0.xsd http://java.sun.com/xml/ns/portlet/portlet-app_1_0.xsd">
-        <portlet>
-                <portlet-name>PortletDemoPortlet</portlet-name>
-                <display-name>Vaadin PortletDemo</display-name>
-                <portlet-class>com.vaadin.terminal.gwt.server.ApplicationPortlet</portlet-class>
-                <init-param>
-                        <name>application</name>
-                        <value>PortletDemo</value>
-                </init-param>
-                
-                <init-param><name>widgetset</name><value>com.vaadin.demo.reservation.gwt.ReservationWidgetSet</value></init-param>
-                <supports>
-                        <mime-type>text/html</mime-type>
-                        <portlet-mode>view</portlet-mode>
-                        <portlet-mode>edit</portlet-mode>
-                        <portlet-mode>help</portlet-mode>
-                </supports>
-                <portlet-info>
-                        <title>PortletDemo</title>
-                        <short-title>PortletDemo</short-title>
-                </portlet-info>
-                
-                <security-role-ref>
-                        <role-name>administrator</role-name>
-                </security-role-ref>
-                <security-role-ref>
-                        <role-name>guest</role-name>
-                </security-role-ref>
-                <security-role-ref>
-                        <role-name>power-user</role-name>
-                </security-role-ref>
-                <security-role-ref>
-                        <role-name>user</role-name>
-                </security-role-ref>
-        </portlet>
-        <portlet>
-                <portlet-name>SimpleReserverPortlet</portlet-name>
-                <display-name>Vaadin SimpleReserver</display-name>
-                <portlet-class>com.vaadin.terminal.gwt.server.ApplicationPortlet</portlet-class>
-                <init-param>
-                        <name>application</name>
-                        <value>SimpleReserver</value>
-                </init-param>
-                <init-param><name>style</name><value>style=height:400px</value></init-param>
-                <init-param><name>widgetset</name><value>com.vaadin.demo.reservation.gwt.ReservationWidgetSet</value></init-param>
-                <supports>
-                        <mime-type>text/html</mime-type>
-                        <portlet-mode>view</portlet-mode>
-                        <portlet-mode>edit</portlet-mode>
-                        <portlet-mode>help</portlet-mode>
-                </supports>
-                <portlet-info>
-                        <title>SimpleReserver</title>
-                        <short-title>SimpleReserver</short-title>
-                </portlet-info>
-                
-                <security-role-ref>
-                        <role-name>administrator</role-name>
-                </security-role-ref>
-                <security-role-ref>
-                        <role-name>guest</role-name>
-                </security-role-ref>
-                <security-role-ref>
-                        <role-name>power-user</role-name>
-                </security-role-ref>
-                <security-role-ref>
-                        <role-name>user</role-name>
-                </security-role-ref>
-        </portlet>
-        <portlet>
-                <portlet-name>FeatureBrowserPortlet</portlet-name>
-                <display-name>Vaadin FeatureBrowser</display-name>
-                <portlet-class>com.vaadin.terminal.gwt.server.ApplicationPortlet2</portlet-class>
-                <init-param>
-                        <name>application</name>
-                        <value>com.vaadin.tests.featurebrowser.FeaturesApplication</value>
-                </init-param>
-                <init-param><name>style</name><value>style=height:650px</value></init-param>
-                <init-param><name>widgetset</name><value>com.vaadin.demo.reservation.gwt.ReservationWidgetSet</value></init-param>
-                <supports>
-                        <mime-type>text/html</mime-type>
-                        <portlet-mode>view</portlet-mode>
-                        <portlet-mode>edit</portlet-mode>
-                        <portlet-mode>help</portlet-mode>
-                </supports>
-                <portlet-info>
-                        <title>FeatureBrowser</title>
-                        <short-title>FeatureBrowser</short-title>
-                </portlet-info>
-                
-                <security-role-ref>
-                        <role-name>administrator</role-name>
-                </security-role-ref>
-                <security-role-ref>
-                        <role-name>guest</role-name>
-                </security-role-ref>
-                <security-role-ref>
-                        <role-name>power-user</role-name>
-                </security-role-ref>
-                <security-role-ref>
-                        <role-name>user</role-name>
-                </security-role-ref>
-        </portlet>
-        <portlet>
-                <portlet-name>ChatServletPortlet</portlet-name>
-                <display-name>Vaadin ChatServlet</display-name>
-                <portlet-class>com.vaadin.terminal.gwt.server.ApplicationPortlet</portlet-class>
-                <init-param>
-                        <name>application</name>
-                        <value>chat</value>
-                </init-param>
-                
-                <init-param><name>widgetset</name><value>com.vaadin.demo.reservation.gwt.ReservationWidgetSet</value></init-param>
-                <supports>
-                        <mime-type>text/html</mime-type>
-                        <portlet-mode>view</portlet-mode>
-                        <portlet-mode>edit</portlet-mode>
-                        <portlet-mode>help</portlet-mode>
-                </supports>
-                <portlet-info>
-                        <title>ChatServlet</title>
-                        <short-title>ChatServlet</short-title>
-                </portlet-info>
-                
-                <security-role-ref>
-                        <role-name>administrator</role-name>
-                </security-role-ref>
-                <security-role-ref>
-                        <role-name>guest</role-name>
-                </security-role-ref>
-                <security-role-ref>
-                        <role-name>power-user</role-name>
-                </security-role-ref>
-                <security-role-ref>
-                        <role-name>user</role-name>
-                </security-role-ref>
-        </portlet>
-        <portlet>
-                <portlet-name>BrowserDemoPortlet</portlet-name>
-                <display-name>Vaadin BrowserDemo</display-name>
-                <portlet-class>com.vaadin.terminal.gwt.server.ApplicationPortlet</portlet-class>
-                <init-param>
-                        <name>application</name>
-                        <value>BrowserDemo</value>
-                </init-param>
-                <init-param><name>style</name><value>style=height:650px</value></init-param>
-                <init-param><name>widgetset</name><value>com.vaadin.demo.reservation.gwt.ReservationWidgetSet</value></init-param>
-                <supports>
-                        <mime-type>text/html</mime-type>
-                        <portlet-mode>view</portlet-mode>
-                        <portlet-mode>edit</portlet-mode>
-                        <portlet-mode>help</portlet-mode>
-                </supports>
-                <portlet-info>
-                        <title>BrowserDemo</title>
-                        <short-title>BrowserDemo</short-title>
-                </portlet-info>
-                
-                <security-role-ref>
-                        <role-name>administrator</role-name>
-                </security-role-ref>
-                <security-role-ref>
-                        <role-name>guest</role-name>
-                </security-role-ref>
-                <security-role-ref>
-                        <role-name>power-user</role-name>
-                </security-role-ref>
-                <security-role-ref>
-                        <role-name>user</role-name>
-                </security-role-ref>
-        </portlet>
+<portlet-app xmlns="http://java.sun.com/xml/ns/portlet/portlet-app_1_0.xsd"
+       version="1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+       xsi:schemaLocation="http://java.sun.com/xml/ns/portlet/portlet-app_1_0.xsd http://java.sun.com/xml/ns/portlet/portlet-app_1_0.xsd">
+       <portlet>
+               <portlet-name>PortletDemoPortlet</portlet-name>
+               <display-name>Vaadin PortletDemo</display-name>
+               <portlet-class>com.vaadin.terminal.gwt.server.ApplicationPortlet2</portlet-class>
+               <init-param>
+                       <name>application</name>
+                       <value>com.vaadin.demo.PortletDemo</value>
+               </init-param>
 
-        <!--
-        This can be used to work around an issue in liferay 5.0-5.1.1
-        
-        <container-runtime-option>
-                <name>javax.portlet.escapeXml</name>
-                <value>false</value>
-        </container-runtime-option>
--->
+               <init-param>
+                       <name>widgetset</name>
+                       <value>com.vaadin.demo.reservation.gwt.ReservationWidgetSet</value>
+               </init-param>
+               <supports>
+                       <mime-type>text/html</mime-type>
+                       <portlet-mode>view</portlet-mode>
+                       <portlet-mode>edit</portlet-mode>
+                       <portlet-mode>help</portlet-mode>
+               </supports>
+               <portlet-info>
+                       <title>PortletDemo</title>
+                       <short-title>PortletDemo</short-title>
+               </portlet-info>
+
+               <security-role-ref>
+                       <role-name>administrator</role-name>
+               </security-role-ref>
+               <security-role-ref>
+                       <role-name>guest</role-name>
+               </security-role-ref>
+               <security-role-ref>
+                       <role-name>power-user</role-name>
+               </security-role-ref>
+               <security-role-ref>
+                       <role-name>user</role-name>
+               </security-role-ref>
+       </portlet>
+       <portlet>
+               <portlet-name>SimpleReserverPortlet</portlet-name>
+               <display-name>Vaadin SimpleReserver</display-name>
+               <portlet-class>com.vaadin.terminal.gwt.server.ApplicationPortlet</portlet-class>
+               <init-param>
+                       <name>application</name>
+                       <value>SimpleReserver</value>
+               </init-param>
+               <init-param>
+                       <name>style</name>
+                       <value>style=height:400px</value>
+               </init-param>
+               <init-param>
+                       <name>widgetset</name>
+                       <value>com.vaadin.demo.reservation.gwt.ReservationWidgetSet</value>
+               </init-param>
+               <supports>
+                       <mime-type>text/html</mime-type>
+                       <portlet-mode>view</portlet-mode>
+                       <portlet-mode>edit</portlet-mode>
+                       <portlet-mode>help</portlet-mode>
+               </supports>
+               <portlet-info>
+                       <title>SimpleReserver</title>
+                       <short-title>SimpleReserver</short-title>
+               </portlet-info>
+
+               <security-role-ref>
+                       <role-name>administrator</role-name>
+               </security-role-ref>
+               <security-role-ref>
+                       <role-name>guest</role-name>
+               </security-role-ref>
+               <security-role-ref>
+                       <role-name>power-user</role-name>
+               </security-role-ref>
+               <security-role-ref>
+                       <role-name>user</role-name>
+               </security-role-ref>
+       </portlet>
+       <portlet>
+               <portlet-name>FeatureBrowserPortlet</portlet-name>
+               <display-name>Vaadin FeatureBrowser</display-name>
+               <portlet-class>com.vaadin.terminal.gwt.server.ApplicationPortlet2</portlet-class>
+               <init-param>
+                       <name>application</name>
+                       <value>com.vaadin.tests.featurebrowser.FeaturesApplication</value>
+               </init-param>
+               <init-param>
+                       <name>style</name>
+                       <value>style=height:650px</value>
+               </init-param>
+               <init-param>
+                       <name>widgetset</name>
+                       <value>com.vaadin.demo.reservation.gwt.ReservationWidgetSet</value>
+               </init-param>
+               <supports>
+                       <mime-type>text/html</mime-type>
+                       <portlet-mode>view</portlet-mode>
+                       <portlet-mode>edit</portlet-mode>
+                       <portlet-mode>help</portlet-mode>
+               </supports>
+               <portlet-info>
+                       <title>FeatureBrowser</title>
+                       <short-title>FeatureBrowser</short-title>
+               </portlet-info>
+
+               <security-role-ref>
+                       <role-name>administrator</role-name>
+               </security-role-ref>
+               <security-role-ref>
+                       <role-name>guest</role-name>
+               </security-role-ref>
+               <security-role-ref>
+                       <role-name>power-user</role-name>
+               </security-role-ref>
+               <security-role-ref>
+                       <role-name>user</role-name>
+               </security-role-ref>
+       </portlet>
+       <portlet>
+               <portlet-name>HelloWorldPortlet</portlet-name>
+               <display-name>Hello World</display-name>
+               <portlet-class>com.vaadin.terminal.gwt.server.ApplicationPortlet2</portlet-class>
+               <init-param>
+                       <name>application</name>
+                       <value>com.vaadin.demo.HelloWorld</value>
+               </init-param>
+               <supports>
+                       <mime-type>text/html</mime-type>
+                       <portlet-mode>view</portlet-mode>
+               </supports>
+               <portlet-info>
+                       <title>HelloWorld</title>
+                       <short-title>HelloWorld</short-title>
+               </portlet-info>         
+       </portlet>
+       <portlet>
+               <portlet-name>AddressBookPortlet</portlet-name>
+               <display-name>Address Book</display-name>
+               <portlet-class>com.vaadin.terminal.gwt.server.ApplicationPortlet2</portlet-class>
+               <init-param>
+                       <name>application</name>
+                       <value>com.vaadin.demo.tutorial.addressbook.AddressBookApplication</value>
+               </init-param>
+               <supports>
+                       <mime-type>text/html</mime-type>
+                       <portlet-mode>view</portlet-mode>
+               </supports>
+               <portlet-info>
+                       <title>Address Book</title>
+                       <short-title>Address Book</short-title>
+               </portlet-info>         
+       </portlet>      
+       <!-- TODO -->
+       <portlet>
+               <portlet-name>CalcPortlet</portlet-name>
+               <display-name>Calc</display-name>
+               <portlet-class>com.vaadin.terminal.gwt.server.ApplicationPortlet2</portlet-class>
+               <init-param>
+                       <name>application</name>
+                       <value>com.vaadin.demo.Calc</value>
+               </init-param>
+               <supports>
+                       <mime-type>text/html</mime-type>
+                       <portlet-mode>view</portlet-mode>
+               </supports>
+               <portlet-info>
+                       <title>Calc</title>
+                       <short-title>Calc</short-title>
+               </portlet-info>         
+       </portlet>              
+       <portlet>
+               <portlet-name>ChatServletPortlet</portlet-name>
+               <display-name>Vaadin ChatServlet</display-name>
+               <portlet-class>com.vaadin.terminal.gwt.server.ApplicationPortlet</portlet-class>
+               <init-param>
+                       <name>application</name>
+                       <value>chat</value>
+               </init-param>
+
+               <init-param>
+                       <name>widgetset</name>
+                       <value>com.vaadin.demo.reservation.gwt.ReservationWidgetSet</value>
+               </init-param>
+               <supports>
+                       <mime-type>text/html</mime-type>
+                       <portlet-mode>view</portlet-mode>
+                       <portlet-mode>edit</portlet-mode>
+                       <portlet-mode>help</portlet-mode>
+               </supports>
+               <portlet-info>
+                       <title>ChatServlet</title>
+                       <short-title>ChatServlet</short-title>
+               </portlet-info>
+
+               <security-role-ref>
+                       <role-name>administrator</role-name>
+               </security-role-ref>
+               <security-role-ref>
+                       <role-name>guest</role-name>
+               </security-role-ref>
+               <security-role-ref>
+                       <role-name>power-user</role-name>
+               </security-role-ref>
+               <security-role-ref>
+                       <role-name>user</role-name>
+               </security-role-ref>
+       </portlet>
+       <portlet>
+               <portlet-name>BrowserDemoPortlet</portlet-name>
+               <display-name>Vaadin BrowserDemo</display-name>
+               <portlet-class>com.vaadin.terminal.gwt.server.ApplicationPortlet</portlet-class>
+               <init-param>
+                       <name>application</name>
+                       <value>BrowserDemo</value>
+               </init-param>
+               <init-param>
+                       <name>style</name>
+                       <value>style=height:650px</value>
+               </init-param>
+               <init-param>
+                       <name>widgetset</name>
+                       <value>com.vaadin.demo.reservation.gwt.ReservationWidgetSet</value>
+               </init-param>
+               <supports>
+                       <mime-type>text/html</mime-type>
+                       <portlet-mode>view</portlet-mode>
+                       <portlet-mode>edit</portlet-mode>
+                       <portlet-mode>help</portlet-mode>
+               </supports>
+               <portlet-info>
+                       <title>BrowserDemo</title>
+                       <short-title>BrowserDemo</short-title>
+               </portlet-info>
+
+               <security-role-ref>
+                       <role-name>administrator</role-name>
+               </security-role-ref>
+               <security-role-ref>
+                       <role-name>guest</role-name>
+               </security-role-ref>
+               <security-role-ref>
+                       <role-name>power-user</role-name>
+               </security-role-ref>
+               <security-role-ref>
+                       <role-name>user</role-name>
+               </security-role-ref>
+       </portlet>
+
+       <!--
+               This can be used to work around an issue in liferay 5.0-5.1.1
+
+               <container-runtime-option> <name>javax.portlet.escapeXml</name>
+               <value>false</value> </container-runtime-option>
+       -->
 </portlet-app>
\ No newline at end of file
index 5fbd45a9f94e00c04af5f10b64f7b58f9a4457f2..fade97005fa141f03f8b2ad7558ad054236d98e9 100644 (file)
@@ -37,24 +37,28 @@ import com.vaadin.ui.Window;
 
 public abstract class AbstractApplicationPortlet extends GenericPortlet {
 
-    public static final String ERROR_NO_WINDOW_FOUND = "No window found. Did you remember to setMainWindow()?";
+    private static final String ERROR_NO_WINDOW_FOUND = "No window found. Did you remember to setMainWindow()?";
 
-    public static final String THEME_DIRECTORY_PATH = "VAADIN/themes/";
+    private static final String THEME_DIRECTORY_PATH = "VAADIN/themes/";
 
-    public static final String WIDGETSET_DIRECTORY_PATH = "VAADIN/widgetsets/";
+    private static final String WIDGETSET_DIRECTORY_PATH = "VAADIN/widgetsets/";
 
-    public static final String DEFAULT_WIDGETSET = "com.vaadin.terminal.gwt.DefaultWidgetSet";
+    private static final String DEFAULT_WIDGETSET = "com.vaadin.terminal.gwt.DefaultWidgetSet";
 
-    public static final String URL_PARAMETER_REPAINT_ALL = "repaintAll";
+    private static final String DEFAULT_THEME_NAME = "reindeer";    
+    
+    private static final String URL_PARAMETER_REPAINT_ALL = "repaintAll";
 
-    public static final String URL_PARAMETER_RESTART_APPLICATION = "restartApplication";
+    private static final String URL_PARAMETER_RESTART_APPLICATION = "restartApplication";
 
-    public static final String URL_PARAMETER_CLOSE_APPLICATION = "closeApplication";
+    private static final String URL_PARAMETER_CLOSE_APPLICATION = "closeApplication";
 
-    public static final int DEFAULT_BUFFER_SIZE = 32 * 1024;
+    private static final int DEFAULT_BUFFER_SIZE = 32 * 1024;
 
     // TODO Close application when portlet window is closed
 
+    // TODO What happens when the portlet window is resized?
+
     private Properties applicationProperties;
 
     @Override
@@ -110,14 +114,15 @@ public abstract class AbstractApplicationPortlet extends GenericPortlet {
 
     private boolean isStaticResourceRequest(ResourceRequest request) {
         String resourceID = request.getResourceID();
-        if (resourceID != null && resourceID.startsWith("/VAADIN/")) {
+        if (resourceID != null && !resourceID.startsWith("/VAADIN/")) {
             return true;
         }
         return false;
     }
 
     private boolean isUIDLRequest(ResourceRequest request) {
-        return request.getResourceID().equals("UIDL");
+        return request.getResourceID() != null
+                && request.getResourceID().equals("UIDL");
     }
 
     private boolean isFileUploadRequest(ActionRequest request) {
@@ -126,7 +131,7 @@ public abstract class AbstractApplicationPortlet extends GenericPortlet {
 
     protected void handleRequest(PortletRequest request,
             PortletResponse response) throws PortletException, IOException {
-        System.out.println("AbstractApplicationPortlet.handleRequest()");
+        System.out.println("AbstractApplicationPortlet.handleRequest() " + System.currentTimeMillis());
 
         RequestType requestType = getRequestType(request);
 
@@ -233,39 +238,34 @@ public abstract class AbstractApplicationPortlet extends GenericPortlet {
         }
     }
 
-    // TODO Vaadin resources cannot be loaded, try to load other resources using the portlet context
-    @Deprecated
+    // TODO Vaadin resources cannot be loaded, try to load other resources using
+    // the portlet context
+
     private void serveStaticResources(ResourceRequest request,
             ResourceResponse response) throws IOException, PortletException {
-        // Currently, we can only provide VAADIN content
         final String resourceID = request.getResourceID();
-        if (resourceID.startsWith("/VAADIN/")) {
-            // Strip leading "/"
-            // final String filename = resourceID.substri
-            final PortletContext pc = getPortletContext();
-
-            System.out.println("Trying to load resource [" + resourceID + "]");
-
-            InputStream is = pc.getResourceAsStream(resourceID);
-            if (is != null) {
-                final String mimetype = pc.getMimeType(resourceID);
-                if (mimetype != null) {
-                    response.setContentType(mimetype);
-                }
-                final OutputStream os = response.getPortletOutputStream();
-                final byte buffer[] = new byte[DEFAULT_BUFFER_SIZE];
-                int bytes;
-                while ((bytes = is.read(buffer)) >= 0) {
-                    os.write(buffer, 0, bytes);
-                }
-                return;
-            }
-        }
+        final PortletContext pc = getPortletContext();
+
+        System.out.println("Trying to load resource [" + resourceID + "]");
 
+        InputStream is = pc.getResourceAsStream(resourceID);
+        if (is != null) {
+            final String mimetype = pc.getMimeType(resourceID);
+            if (mimetype != null) {
+                response.setContentType(mimetype);
+            }
+            final OutputStream os = response.getPortletOutputStream();
+            final byte buffer[] = new byte[DEFAULT_BUFFER_SIZE];
+            int bytes;
+            while ((bytes = is.read(buffer)) >= 0) {
+                os.write(buffer, 0, bytes);
+            }
+        } else {
         System.err.println("Requested resource [" + resourceID
                 + "] could not be found");
         response.setProperty(ResourceResponse.HTTP_STATUS_CODE, Integer
                 .toString(HttpServletResponse.SC_NOT_FOUND));
+        }
     }
 
     @Override
@@ -435,11 +435,13 @@ public abstract class AbstractApplicationPortlet extends GenericPortlet {
                 response.getPortletOutputStream(), "UTF-8"));
         ;
 
-        // TODO Make the widgetset URL creation more configurable
+        // TODO The widgetset URL is currently hard-corded for LifeRay
 
-        String widgetsetURL = "/html/VAADIN/widgetsets/" + DEFAULT_WIDGETSET
+        String widgetsetURL = "/html/" + WIDGETSET_DIRECTORY_PATH + DEFAULT_WIDGETSET
                 + "/" + DEFAULT_WIDGETSET + ".nocache.js?"
                 + new Date().getTime();
+        
+        String themeURI = "/html/" + THEME_DIRECTORY_PATH + DEFAULT_THEME_NAME;
 
         page.write("<script type=\"text/javascript\">\n");
         page.write("if(!vaadin || !vaadin.vaadinConfigurations) {\n "
@@ -466,10 +468,8 @@ public abstract class AbstractApplicationPortlet extends GenericPortlet {
 
         page.write("portletUidlURLBase: '" + uidlUrlBase.toString() + "', ");
         page.write("pathInfo: '', ");
-        page.write("themeUri:");
-        // page.write(themeUri != null ? "'" + themeUri + "'" : "null");
-        page.write("null"); // TODO Fix this
-        page.write(", versionInfo : {vaadinVersion:\"");
+        page.write("themeUri: '" + themeURI + "', ");
+        page.write("versionInfo : {vaadinVersion:\"");
         // page.write(VERSION);
         page.write("UNVERSIONED"); // TODO Fix this
         page.write("\",applicationVersion:\"");
@@ -477,7 +477,26 @@ public abstract class AbstractApplicationPortlet extends GenericPortlet {
         page.write("\"},");
         // TODO Add system messages
         page.write("};\n</script>\n");
-        // TODO Add custom theme
+        
+        //if (themeName != null) {
+            // Custom theme's stylesheet, load only once, in different
+            // script
+            // tag to be dominate styles injected by widget
+            // set
+            page.write("<script type=\"text/javascript\">\n");
+            page.write("//<![CDATA[\n");
+            page.write("if(!vaadin.themesLoaded['" + DEFAULT_THEME_NAME + "']) {\n");
+            page.write("var stylesheet = document.createElement('link');\n");
+            page.write("stylesheet.setAttribute('rel', 'stylesheet');\n");
+            page.write("stylesheet.setAttribute('type', 'text/css');\n");
+            page.write("stylesheet.setAttribute('href', '" + themeURI
+                    + "/styles.css');\n");
+            page
+                    .write("document.getElementsByTagName('head')[0].appendChild(stylesheet);\n");
+            page.write("vaadin.themesLoaded['" + DEFAULT_THEME_NAME + "'] = true;\n}\n");
+            page.write("//]]>\n</script>\n");
+        //} 
+        
         // TODO Warn if widgetset has not been loaded after 15 seconds
 
         /*- Add classnames;
@@ -496,7 +515,7 @@ public abstract class AbstractApplicationPortlet extends GenericPortlet {
         }
         // TODO Add support for flexible theme names
         String themeClass = "v-theme-"
-                + "reindeer".replaceAll("[^a-zA-Z0-9]", "");
+                + DEFAULT_THEME_NAME.replaceAll("[^a-zA-Z0-9]", "");
 
         String classNames = "v-app v-app-loading " + themeClass + " "
                 + appClass;
index 07bbac792277f2fa0b68adc749412364f4d1b9d3..dd7de4b2b7e9187d3ba14c3b7f89e3cc466c2650 100644 (file)
@@ -79,6 +79,9 @@ import com.vaadin.ui.Upload.UploadException;
 @SuppressWarnings("serial")
 public class CommunicationManager implements Paintable.RepaintRequestListener,
         Serializable {
+    
+    // FIXME Create an abstract class with custom Request/Response/Session interfaces, then create
+    // subclasses for servlets and portlets.
 
     private static String GET_PARAM_REPAINT_ALL = "repaintAll";
 
index f7bba2f3ec886621100ae30992d631b6d0ceb28a..09d34c30b567f19145892dfbdb09197fa66fd83d 100644 (file)
@@ -77,6 +77,7 @@ public class WebBrowser implements Terminal {
         }
     }
 
+    // TODO: This method depends on the Portlet API.
     void updateBrowserProperties(PortletRequest request) {
         locale = request.getLocale();
         address = null;