]> source.dussan.org Git - vaadin-framework.git/commitdiff
enhancement to app runner (ability to specify default packages for quicker access...
authorMatti Tahvonen <matti.tahvonen@itmill.com>
Tue, 1 Sep 2009 12:10:02 +0000 (12:10 +0000)
committerMatti Tahvonen <matti.tahvonen@itmill.com>
Tue, 1 Sep 2009 12:10:02 +0000 (12:10 +0000)
svn changeset:8617/svn branch:6.1

WebContent/WEB-INF/web.xml
src/com/vaadin/terminal/gwt/server/ApplicationRunnerServlet.java

index 652179b7dc1ccb2ae9aa7ad19c505c477eecab90..61ec7387241fe24c036b90f9cb1be8c2115de4f7 100644 (file)
                <description>IT Mill Testing Tools URI</description>
        </context-param>
 
-       <servlet>
-               <servlet-name>VaadinApplicationRunner</servlet-name>
-               <servlet-class>com.vaadin.terminal.gwt.server.ApplicationRunnerServlet</servlet-class>
-       </servlet>
+       <servlet>\r
+               <servlet-name>VaadinApplicationRunner</servlet-name>\r
+               <servlet-class>com.vaadin.terminal.gwt.server.ApplicationRunnerServlet</servlet-class>\r
+               <init-param><param-name>defaultPackages</param-name>\r
+               <param-value>com.vaadin.tests,com.vaadin.demo,com.vaadin.tests,com.vaadin.tests.components,com.vaadin.tests.components.layouts,com.vaadin.tests.components.panel,com.vaadin.tests.components.combobox,com.vaadin.tests.components.popupview,com.vaadin.tests.components.datefield,com.vaadin.tests.components.richtextarea,com.vaadin.tests.components.absolutelayout,com.vaadin.tests.components.embedded,com.vaadin.tests.components.splitpanel,com.vaadin.tests.components.abstractfield,com.vaadin.tests.components.form,com.vaadin.tests.components.table,com.vaadin.tests.components.accordion,com.vaadin.tests.components.label,com.vaadin.tests.components.tabsheet,com.vaadin.tests.components.beanitemcontainer,com.vaadin.tests.components.link,com.vaadin.tests.components.textfield,com.vaadin.tests.components.button,com.vaadin.tests.components.optiongroup,com.vaadin.tests.components.tree,com.vaadin.tests.components.caption,com.vaadin.tests.components.orderedlayout,com.vaadin.tests.components.window</param-value></init-param>\r
+       </servlet>\r
 
 
        <servlet>
index c9c0f314fb0bff47c1558c0821ea7a3e2ab65f00..8ffd7b3f16cea14b86cf7fe92bdd57c62d1e8a55 100644 (file)
@@ -18,20 +18,25 @@ public class ApplicationRunnerServlet extends AbstractApplicationServlet {
      * The name of the application class currently used. Only valid within one
      * request.
      */
-    String applicationClassName = "";
+    private String[] defaultPackages;
+    private HttpServletRequest request;
 
     @Override
     public void init(ServletConfig servletConfig) throws ServletException {
         super.init(servletConfig);
+        String initParameter = servletConfig
+                .getInitParameter("defaultPackages");
+        if (initParameter != null) {
+            defaultPackages = initParameter.split(",");
+        }
     }
 
     @Override
     protected void service(HttpServletRequest request,
             HttpServletResponse response) throws ServletException, IOException {
-        applicationClassName = getApplicationRunnerApplicationClassName(request);
+        this.request = request;
         super.service(request, response);
-        applicationClassName = "";
-
+        this.request = null;
     }
 
     @Override
@@ -40,7 +45,7 @@ public class ApplicationRunnerServlet extends AbstractApplicationServlet {
         URL url = super.getApplicationUrl(request);
 
         String path = url.toString();
-        path += applicationClassName;
+        path += getApplicationRunnerApplicationClassName(request);
         path += "/";
 
         return new URL(path);
@@ -52,11 +57,8 @@ public class ApplicationRunnerServlet extends AbstractApplicationServlet {
 
         // Creates a new application instance
         try {
-            Class<?> applicationClass = getClassLoader().loadClass(
-                    applicationClassName);
-            final Application application = (Application) applicationClass
+            final Application application = (Application) getApplicationClass()
                     .newInstance();
-
             return application;
         } catch (final IllegalAccessException e) {
             throw new ServletException(e);
@@ -66,7 +68,7 @@ public class ApplicationRunnerServlet extends AbstractApplicationServlet {
             throw new ServletException(
                     new InstantiationException(
                             "Failed to load application class: "
-                                    + applicationClassName));
+                                    + getApplicationRunnerApplicationClassName(request)));
         }
 
     }
@@ -145,7 +147,31 @@ public class ApplicationRunnerServlet extends AbstractApplicationServlet {
     @Override
     protected Class getApplicationClass() throws ClassNotFoundException {
         // TODO use getClassLoader() ?
-        return getClass().getClassLoader().loadClass(applicationClassName);
+
+        Class<? extends Application> appClass = null;
+
+        String baseName = getApplicationRunnerApplicationClassName(request);
+        try {
+            appClass = (Class<? extends Application>) getClass()
+                    .getClassLoader().loadClass(baseName);
+            return appClass;
+        } catch (Exception e) {
+            //
+            for (int i = 0; i < defaultPackages.length; i++) {
+                try {
+                    appClass = (Class<? extends Application>) getClass()
+                            .getClassLoader().loadClass(
+                                    defaultPackages[i] + "." + baseName);
+                } catch (Exception e2) {
+                    // TODO: handle exception
+                }
+                if (appClass != null) {
+                    return appClass;
+                }
+            }
+        }
+
+        throw new ClassNotFoundException();
     }
 
     @Override
@@ -155,7 +181,8 @@ public class ApplicationRunnerServlet extends AbstractApplicationServlet {
             return null;
         }
 
-        path = path.substring(1 + applicationClassName.length());
+        path = path.substring(1 + getApplicationRunnerApplicationClassName(
+                request).length());
         return path;
     }