From bb9c96cf931d664afb211bb977b33362658afa7a Mon Sep 17 00:00:00 2001 From: Artur Signell Date: Tue, 3 Apr 2012 23:14:02 +0300 Subject: [PATCH] Moved ApplicationRunnerServlet to test folder and improved find method --- .../gwt/server/ApplicationRunnerServlet.java | 60 +++++++++++++------ 1 file changed, 41 insertions(+), 19 deletions(-) rename {src => tests/testbench}/com/vaadin/terminal/gwt/server/ApplicationRunnerServlet.java (82%) diff --git a/src/com/vaadin/terminal/gwt/server/ApplicationRunnerServlet.java b/tests/testbench/com/vaadin/terminal/gwt/server/ApplicationRunnerServlet.java similarity index 82% rename from src/com/vaadin/terminal/gwt/server/ApplicationRunnerServlet.java rename to tests/testbench/com/vaadin/terminal/gwt/server/ApplicationRunnerServlet.java index 064d2b16af..69e8367a0c 100644 --- a/src/com/vaadin/terminal/gwt/server/ApplicationRunnerServlet.java +++ b/tests/testbench/com/vaadin/terminal/gwt/server/ApplicationRunnerServlet.java @@ -3,9 +3,13 @@ */ package com.vaadin.terminal.gwt.server; +import java.io.File; import java.io.IOException; import java.net.MalformedURLException; import java.net.URL; +import java.util.Collections; +import java.util.LinkedHashSet; +import java.util.List; import java.util.logging.Level; import java.util.logging.Logger; @@ -16,6 +20,7 @@ import javax.servlet.http.HttpServletResponse; import com.vaadin.Application; import com.vaadin.terminal.WrappedRequest; +import com.vaadin.tests.components.TestBase; import com.vaadin.ui.Root; @SuppressWarnings("serial") @@ -45,7 +50,8 @@ public class ApplicationRunnerServlet extends AbstractApplicationServlet { * The name of the application class currently used. Only valid within one * request. */ - private String[] defaultPackages; + private LinkedHashSet defaultPackages = new LinkedHashSet(); + private final ThreadLocal request = new ThreadLocal(); @Override @@ -54,7 +60,27 @@ public class ApplicationRunnerServlet extends AbstractApplicationServlet { String initParameter = servletConfig .getInitParameter("defaultPackages"); if (initParameter != null) { - defaultPackages = initParameter.split(","); + Collections.addAll(defaultPackages, initParameter.split(",")); + } + String str = TestBase.class.getName().replace('.', '/') + ".class"; + URL url = getClassLoader().getResource(str); + if ("file".equals(url.getProtocol())) { + File comVaadinTests = new File(url.getPath()).getParentFile() + .getParentFile(); + addDirectories(comVaadinTests, defaultPackages, "com.vaadin.tests"); + + } + } + + private void addDirectories(File parent, LinkedHashSet packages, + String parentPackage) { + packages.add(parentPackage); + + for (File f : parent.listFiles()) { + if (f.isDirectory()) { + String newPackage = parentPackage + "." + f.getName(); + addDirectories(f, packages, newPackage); + } } } @@ -205,23 +231,19 @@ public class ApplicationRunnerServlet extends AbstractApplicationServlet { return appClass; } catch (Exception e) { // - if (defaultPackages != null) { - for (int i = 0; i < defaultPackages.length; i++) { - try { - appClass = getClass().getClassLoader().loadClass( - defaultPackages[i] + "." + baseName); - } catch (ClassNotFoundException ee) { - // Ignore as this is expected for many packages - } catch (Exception e2) { - // TODO: handle exception - logger.log( - Level.FINE, - "Failed to find application class in the default package.", - e2); - } - if (appClass != null) { - return appClass; - } + for (String pkg : defaultPackages) { + try { + appClass = getClass().getClassLoader().loadClass( + pkg + "." + baseName); + } catch (ClassNotFoundException ee) { + // Ignore as this is expected for many packages + } catch (Exception e2) { + // TODO: handle exception + logger.log(Level.FINE, "Failed to find application class " + + pkg + "." + baseName, e2); + } + if (appClass != null) { + return appClass; } } -- 2.39.5