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<? extends UI> getUIClass(UIClassSelectionEvent event) {
Class<? extends UI> uiClass = findUIClassFromPath(event);
return uiClass != null ? uiClass : BasicPush.class;
}
private Class<? extends UI> 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<? extends UI> getUIClassFromDefaultPackage(String className) {
for (String pkgName : defaultPackages) {
Class<? extends UI> uiClass = getUIClass(pkgName + "." + className);
if (uiClass != null) {
return uiClass;
}
}
return null;
}
private Class<? extends UI> getUIClass(String className) {
try {
Class<?> loadClass = getClass().getClassLoader()
.loadClass(className.replace("/", "."));
return (Class<? extends UI>) loadClass;
} catch (ClassNotFoundException e) {
return null;
}
}
}