]> source.dussan.org Git - vaadin-framework.git/commitdiff
#8052 Support for root instead of application in portlet.xml
authorLeif Åstrand <leif@vaadin.com>
Mon, 19 Dec 2011 13:04:14 +0000 (15:04 +0200)
committerLeif Åstrand <leif@vaadin.com>
Mon, 19 Dec 2011 13:18:58 +0000 (15:18 +0200)
Moved some code shared with servlet to a new static helper class

src/com/vaadin/terminal/gwt/server/ApplicationPortlet2.java
src/com/vaadin/terminal/gwt/server/ApplicationServlet.java
src/com/vaadin/terminal/gwt/server/ServletPortletHelper.java [new file with mode: 0644]

index 3e15c1cf8fde3c325e28bab823de2760901970e4..7a46a07e6c0f17f6ab0931ed0766b9c99d08af7d 100644 (file)
@@ -8,6 +8,7 @@ import javax.portlet.PortletConfig;
 import javax.portlet.PortletException;
 
 import com.vaadin.Application;
+import com.vaadin.terminal.gwt.server.ServletPortletHelper.ApplicationClassException;
 
 /**
  * TODO Write documentation, fix JavaDoc tags.
@@ -18,23 +19,16 @@ public class ApplicationPortlet2 extends AbstractApplicationPortlet {
 
     private Class<? extends Application> applicationClass;
 
-    @SuppressWarnings("unchecked")
     @Override
     public void init(PortletConfig config) throws PortletException {
         super.init(config);
-        final String applicationClassName = config
-                .getInitParameter("application");
-        if (applicationClassName == null) {
-            throw new PortletException(
-                    "Application not specified in portlet parameters");
-        }
-
         try {
-            applicationClass = (Class<? extends Application>) getClassLoader()
-                    .loadClass(applicationClassName);
-        } catch (final ClassNotFoundException e) {
-            throw new PortletException("Failed to load application class: "
-                    + applicationClassName);
+            applicationClass = ServletPortletHelper.getApplicationClass(
+                    config.getInitParameter("application"),
+                    config.getInitParameter(Application.ROOT_PARAMETER),
+                    getClassLoader());
+        } catch (ApplicationClassException e) {
+            throw new PortletException(e);
         }
     }
 
index 724977b40910a170c06833a0903a3d04730b9c6a..2c4d38ef2454bd9839a7161004d02f94dc9d4df1 100644 (file)
@@ -8,7 +8,7 @@ import javax.servlet.ServletException;
 import javax.servlet.http.HttpServletRequest;
 
 import com.vaadin.Application;
-import com.vaadin.ui.Root;
+import com.vaadin.terminal.gwt.server.ServletPortletHelper.ApplicationClassException;
 
 /**
  * This servlet connects a Vaadin Application to Web.
@@ -44,53 +44,13 @@ public class ApplicationServlet extends AbstractApplicationServlet {
         // Loads the application class using the same class loader
         // as the servlet itself
 
-        // Gets the application class name
-        final String applicationClassName = servletConfig
-                .getInitParameter("application");
-        if (applicationClassName == null) {
-            String rootParam = servletConfig
-                    .getInitParameter(Application.ROOT_PARAMETER);
-
-            // Validate the parameter value
-            verifyRootClass(rootParam);
-
-            // Application can be used if a valid rootLayout is defined
-            applicationClass = Application.class;
-            return;
-        }
-
         try {
-            applicationClass = (Class<? extends Application>) getClassLoader()
-                    .loadClass(applicationClassName);
-        } catch (final ClassNotFoundException e) {
-            throw new ServletException("Failed to load application class: "
-                    + applicationClassName);
-        }
-    }
-
-    private void verifyRootClass(String className) throws ServletException {
-        if (className == null) {
-            throw new ServletException(Application.ROOT_PARAMETER
-                    + " servlet parameter not defined");
-        }
-
-        // Check that the root layout class can be found
-        try {
-            Class<?> rootClass = getClassLoader().loadClass(className);
-            if (!Root.class.isAssignableFrom(rootClass)) {
-                throw new ServletException(className
-                        + " does not implement Root");
-            }
-            // Try finding a default constructor, else throw exception
-            rootClass.getConstructor();
-        } catch (ClassNotFoundException e) {
-            throw new ServletException(className + " could not be loaded", e);
-        } catch (SecurityException e) {
-            throw new ServletException("Could not access " + className
-                    + " class", e);
-        } catch (NoSuchMethodException e) {
-            throw new ServletException(className
-                    + " doesn't have a public no-args constructor");
+            applicationClass = ServletPortletHelper.getApplicationClass(
+                    servletConfig.getInitParameter("application"),
+                    servletConfig.getInitParameter(Application.ROOT_PARAMETER),
+                    getClassLoader());
+        } catch (ApplicationClassException e) {
+            throw new ServletException(e);
         }
     }
 
diff --git a/src/com/vaadin/terminal/gwt/server/ServletPortletHelper.java b/src/com/vaadin/terminal/gwt/server/ServletPortletHelper.java
new file mode 100644 (file)
index 0000000..e6282db
--- /dev/null
@@ -0,0 +1,67 @@
+package com.vaadin.terminal.gwt.server;
+
+import com.vaadin.Application;
+import com.vaadin.ui.Root;
+
+class ServletPortletHelper {
+    public static class ApplicationClassException extends Exception {
+
+        public ApplicationClassException(String message, Throwable cause) {
+            super(message, cause);
+        }
+
+        public ApplicationClassException(String message) {
+            super(message);
+        }
+    }
+
+    static Class<? extends Application> getApplicationClass(
+            String applicationParameter, String rootParameter,
+            ClassLoader classLoader) throws ApplicationClassException {
+        if (applicationParameter == null) {
+
+            // Validate the parameter value
+            verifyRootClass(rootParameter, classLoader);
+
+            // Application can be used if a valid rootLayout is defined
+            return Application.class;
+        }
+
+        try {
+            return (Class<? extends Application>) classLoader
+                    .loadClass(applicationParameter);
+        } catch (final ClassNotFoundException e) {
+            throw new ApplicationClassException(
+                    "Failed to load application class: " + applicationParameter,
+                    e);
+        }
+    }
+
+    private static void verifyRootClass(String className,
+            ClassLoader classLoader) throws ApplicationClassException {
+        if (className == null) {
+            throw new ApplicationClassException(Application.ROOT_PARAMETER
+                    + " init parameter not defined");
+        }
+
+        // Check that the root layout class can be found
+        try {
+            Class<?> rootClass = classLoader.loadClass(className);
+            if (!Root.class.isAssignableFrom(rootClass)) {
+                throw new ApplicationClassException(className
+                        + " does not implement Root");
+            }
+            // Try finding a default constructor, else throw exception
+            rootClass.getConstructor();
+        } catch (ClassNotFoundException e) {
+            throw new ApplicationClassException(className
+                    + " could not be loaded", e);
+        } catch (SecurityException e) {
+            throw new ApplicationClassException("Could not access " + className
+                    + " class", e);
+        } catch (NoSuchMethodException e) {
+            throw new ApplicationClassException(className
+                    + " doesn't have a public no-args constructor");
+        }
+    }
+}