package com.vaadin.tests; import com.vaadin.server.UIClassSelectionEvent; import com.vaadin.server.UIProvider; import com.vaadin.tests.integration.push.BasicPush; import com.vaadin.ui.UI; public class IntegrationTestUIProvider extends UIProvider { public static final String[] defaultPackages = { "com.vaadin.tests.integration", "com.vaadin.tests.integration.push" }; @Override public Class getUIClass(UIClassSelectionEvent event) { Class uiClass = findUIClassFromPath(event); return uiClass != null ? uiClass : BasicPush.class; } private Class findUIClassFromPath( UIClassSelectionEvent event) { String pathInfo = event.getRequest().getPathInfo(); if (pathInfo != null) { String className = pathInfo.substring(1); if (className.startsWith("run/")) { className = className.substring(4); } if (className.contains(".")) { return getUIClass(className); } else { return getUIClassFromDefaultPackage(className); } } return null; } private Class getUIClassFromDefaultPackage(String className) { for (String pkgName : defaultPackages) { Class uiClass = getUIClass(pkgName + "." + className); if (uiClass != null) { return uiClass; } } return null; } private Class getUIClass(String className) { try { Class loadClass = getClass().getClassLoader() .loadClass(className.replace("/", ".")); return (Class) loadClass; } catch (ClassNotFoundException e) { return null; } } }