]> source.dussan.org Git - vaadin-framework.git/commitdiff
initial commit for #704
authorMatti Tahvonen <matti.tahvonen@itmill.com>
Fri, 4 Apr 2008 13:13:04 +0000 (13:13 +0000)
committerMatti Tahvonen <matti.tahvonen@itmill.com>
Fri, 4 Apr 2008 13:13:04 +0000 (13:13 +0000)
svn changeset:4127/svn branch:trunk

WebContent/multiapp.html [new file with mode: 0644]
src/com/itmill/toolkit/terminal/gwt/client/ApplicationConfiguration.java [new file with mode: 0644]
src/com/itmill/toolkit/terminal/gwt/client/ApplicationConnection.java
src/com/itmill/toolkit/terminal/gwt/client/DefaultWidgetSet.java
src/com/itmill/toolkit/terminal/gwt/server/ApplicationServlet.java

diff --git a/WebContent/multiapp.html b/WebContent/multiapp.html
new file mode 100644 (file)
index 0000000..5a119dd
--- /dev/null
@@ -0,0 +1,42 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" style="width:100%;height:100%;border:0;margin:0;">
+<head>
+<title>IT Mill Toolkit 5</title>
+<script type="text/javascript">
+       var itmill = {
+               toolkitConfigurations: {
+                       'fb' :{
+                               appUri:'/FeatureBrowser', 
+                               pathInfo: '/', 
+                               themeUri: '/ITMILL/themes/example', 
+                               versionInfo : {toolkitVersion:"5.9.9-INTERNAL-NONVERSIONED-DEBUG-BUILD",applicationVersion:"NONVERSIONED"}
+                       },
+                       'calc' :{
+                               appUri:'/Calc', 
+                               pathInfo: '/', 
+                               themeUri: '/ITMILL/themes/example', 
+                               versionInfo : {toolkitVersion:"5.9.9-INTERNAL-NONVERSIONED-DEBUG-BUILD",applicationVersion:"NONVERSIONED"}
+                       },
+                       'hello' :{
+                               appUri:'/HelloWorld', 
+                               pathInfo: '/', 
+                               themeUri: '/ITMILL/themes/example', 
+                               versionInfo : {toolkitVersion:"5.9.9-INTERNAL-NONVERSIONED-DEBUG-BUILD",applicationVersion:"NONVERSIONED"}
+                       }
+
+                       
+               }};
+</script>
+<script language='javascript' src='/ITMILL/widgetsets/com.itmill.toolkit.terminal.gwt.DefaultWidgetSet/com.itmill.toolkit.terminal.gwt.DefaultWidgetSet.nocache.js'></script>
+<link REL="stylesheet" TYPE="text/css" HREF="/ITMILL/themes/example/styles.css">
+</head>
+<body class="i-generated-body">
+       <iframe id="__gwt_historyFrame" style="width:0;height:0;border:0;overflow:hidden" src="javascript:false"></iframe>
+       
+       <p>Multiple toolkits per html file test page</p>
+       
+       <div id="fb" style="height:400px;border:2px solid red;margin:0"></div>
+       <div id="calc" style="border:2px solid green;margin:0"></div>
+       <div id="hello" style="border:2px solid blue;margin:0"></div>
+       </body>
+</html>
\ No newline at end of file
diff --git a/src/com/itmill/toolkit/terminal/gwt/client/ApplicationConfiguration.java b/src/com/itmill/toolkit/terminal/gwt/client/ApplicationConfiguration.java
new file mode 100644 (file)
index 0000000..e36c3dc
--- /dev/null
@@ -0,0 +1,74 @@
+package com.itmill.toolkit.terminal.gwt.client;
+
+import java.util.ArrayList;
+
+import com.google.gwt.core.client.JavaScriptObject;
+
+public class ApplicationConfiguration {
+
+    private String id;
+    private String themeUri;
+    private String pathInfo;
+    private String appUri;
+    private JavaScriptObject versionInfo;
+
+    public String getRootPanelId() {
+        return id;
+    }
+
+    public String getApplicationUri() {
+        return appUri;
+    }
+
+    public String getPathInfo() {
+        return pathInfo;
+    }
+
+    public String getThemeUri() {
+        return themeUri;
+    }
+
+    public void setAppId(String appId) {
+        id = appId;
+    }
+
+    private native void loadFromDOM()
+    /*-{
+
+        var id = this.@com.itmill.toolkit.terminal.gwt.client.ApplicationConfiguration::id;
+        if($wnd.itmill.toolkitConfigurations && $wnd.itmill.toolkitConfigurations[id]) {
+            var jsobj = $wnd.itmill.toolkitConfigurations[id];
+            var uri = jsobj.appUri;
+            if(uri[uri.lenght -1] != "/") {
+                uri = uri + "/";
+            }
+            this.@com.itmill.toolkit.terminal.gwt.client.ApplicationConfiguration::appUri = uri;
+            this.@com.itmill.toolkit.terminal.gwt.client.ApplicationConfiguration::pathInfo = jsobj.pathInfo;
+            this.@com.itmill.toolkit.terminal.gwt.client.ApplicationConfiguration::themeUri = jsobj.themeUri;
+            if(jsobj.versionInfo) {
+                this.@com.itmill.toolkit.terminal.gwt.client.ApplicationConfiguration::versionInfo = jsobj.versionInfo;
+            }
+        
+        } else {
+            $wnd.alert("Toolkit app failed to initialize: " + this.id);
+        }
+     
+     }-*/;
+
+    public native static void loadAppIdListFromDOM(ArrayList list)
+    /*-{
+     
+         var j;
+         for(j in $wnd.itmill.toolkitConfigurations) {
+             list.@java.util.Collection::add(Ljava/lang/Object;)(j);
+         }
+     }-*/;
+
+    public static ApplicationConfiguration getConfigFromDOM(String appId) {
+        ApplicationConfiguration conf = new ApplicationConfiguration();
+        conf.setAppId(appId);
+        conf.loadFromDOM();
+        return conf;
+    }
+
+}
index d6e74fe5b39185d51f166f5b7f085824e49f8096..6a82ad789ffaf9ddf121d80db311155aa5a1c234 100755 (executable)
@@ -44,8 +44,6 @@ public class ApplicationConnection {
 
     public static final String VAR_FIELD_SEPARATOR = "\u001f";
 
-    private final String appUri;
-
     private final HashMap resourcesMap = new HashMap();
 
     private static Console console;
@@ -90,14 +88,14 @@ public class ApplicationConnection {
 
     private int activeRequests = 0;
 
-    public ApplicationConnection(WidgetSet widgetSet) {
+    private String applicationUri;
+
+    private ApplicationConfiguration configuration;
+
+    public ApplicationConnection(WidgetSet widgetSet,
+            ApplicationConfiguration cnf) {
         this.widgetSet = widgetSet;
-        String tmp = getAppUri();
-        if (!tmp.endsWith("/")) {
-            appUri = tmp + "/";
-        } else {
-            appUri = tmp;
-        }
+        configuration = cnf;
 
         if (isDebugMode()) {
             console = new DebugConsole(this);
@@ -122,7 +120,7 @@ public class ApplicationConnection {
         initializeClientHooks();
 
         // TODO remove hard coded id name
-        view = new IView("itmill-ajax-window");
+        view = new IView(cnf.getRootPanelId());
 
         makeUidlRequest("repaintAll=1");
         applicationRunning = true;
@@ -176,6 +174,8 @@ public class ApplicationConnection {
      * <li><code>itmill.forceSync()</code> sends pending variable changes, in
      * effect synchronizing the server and client state.</li>
      * </ul>
+     * 
+     * TODO make this multi-app aware
      */
     private native void initializeClientHooks()
     /*-{
@@ -196,38 +196,19 @@ public class ApplicationConnection {
      return re.test(uri);
      }-*/;
 
-    public native String getAppUri()
-    /*-{
-     var u = $wnd.itmill.appUri;
-     if (u.indexOf("/") != 0 && u.indexOf("http") != 0) {
-     var b = $wnd.location.href;
-     var i = b.length-1;
-     while (b.charAt(i) != "/" && i>0) i--;
-     b = b.substring(0,i+1);
-     u = b + u;
-     }
-     return u;
-     }-*/;
+    public String getAppUri() {
+        return configuration.getApplicationUri();
+    };
 
     public boolean hasActiveRequest() {
         return uidlRequest.isPending();
     }
 
-    private native String getPathInfo()
-    /*-{
-     return $wnd.itmill.pathInfo;
-     }-*/;
-
-    private native String getThemeUri()
-    /*-{
-     return $wnd.itmill.themeUri;
-     }-*/;
-
     private void makeUidlRequest(String requestData) {
         startRequest();
 
         console.log("Making UIDL Request with params: " + requestData);
-        final String uri = appUri + "UIDL" + getPathInfo();
+        final String uri = getAppUri() + "UIDL" + configuration.getPathInfo();
         final RequestBuilder rb = new RequestBuilder(RequestBuilder.POST, uri);
         rb.setHeader("Content-Type",
                 "application/x-www-form-urlencoded; charset=utf-8");
@@ -762,7 +743,7 @@ public class ApplicationConnection {
             return null;
         }
         if (toolkitUri.startsWith("theme://")) {
-            final String themeUri = getThemeUri();
+            final String themeUri = configuration.getThemeUri();
             if (themeUri == null) {
                 console
                         .error("Theme not set: ThemeResource will not be found. ("
index 968381d4a09b019d67f0a62bca48f85ee3d6a827..9c4b4aff5df124d7d588d566a5a6b934128032e9 100644 (file)
@@ -4,6 +4,9 @@
 
 package com.itmill.toolkit.terminal.gwt.client;
 
+import java.util.ArrayList;
+import java.util.Iterator;
+
 import com.google.gwt.core.client.GWT;
 import com.google.gwt.user.client.ui.Widget;
 import com.itmill.toolkit.terminal.gwt.client.ui.IAccordion;
@@ -50,13 +53,18 @@ import com.itmill.toolkit.terminal.gwt.client.ui.richtextarea.IRichTextArea;
 
 public class DefaultWidgetSet implements WidgetSet {
 
-    protected ApplicationConnection appConn;
-
     /**
      * This is the entry point method.
      */
     public void onModuleLoad() {
-        appConn = new ApplicationConnection(this);
+        ArrayList appIds = new ArrayList();
+        ApplicationConfiguration.loadAppIdListFromDOM(appIds);
+        for (Iterator iterator = appIds.iterator(); iterator.hasNext();) {
+            String appId = (String) iterator.next();
+            ApplicationConfiguration appConf = ApplicationConfiguration
+                    .getConfigFromDOM(appId);
+            new ApplicationConnection(this, appConf);
+        }
     }
 
     public Widget createWidget(UIDL uidl) {
index 573c0b43c1763d95546e8afc82b1eeb42ed03cd9..1edd69fc72981c52dfdd331624afbbcae3c0cec5 100644 (file)
@@ -666,7 +666,8 @@ public class ApplicationServlet extends HttpServlet {
                         + title
                         + "</title>\n"
                         + "<script type=\"text/javascript\">\n"
-                        + "    var itmill = {\n" + "           appUri:'");
+                        + "    var itmill = {toolkitConfigurations: {'itmill-ajax-window' :{\n"
+                        + "            appUri:'");
 
         final String[] urls = getAppAndWidgetUrl(request);
         final String appUrl = urls[0];
@@ -702,7 +703,7 @@ public class ApplicationServlet extends HttpServlet {
             page.write("\"}");
         }
 
-        page.write("\n};\n</script>\n");
+        page.write("\n}}};\n</script>\n");
 
         boolean testingWindow = testingToolsActive
                 && request.getParameter("TT") != null;