You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

IntegrationTestUIProvider.java 1.8KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. package com.vaadin.tests;
  2. import com.vaadin.server.UIClassSelectionEvent;
  3. import com.vaadin.server.UIProvider;
  4. import com.vaadin.tests.integration.push.BasicPush;
  5. import com.vaadin.ui.UI;
  6. public class IntegrationTestUIProvider extends UIProvider {
  7. public static final String[] defaultPackages = {
  8. "com.vaadin.tests.integration",
  9. "com.vaadin.tests.integration.push" };
  10. @Override
  11. public Class<? extends UI> getUIClass(UIClassSelectionEvent event) {
  12. Class<? extends UI> uiClass = findUIClassFromPath(event);
  13. return uiClass != null ? uiClass : BasicPush.class;
  14. }
  15. private Class<? extends UI> findUIClassFromPath(
  16. UIClassSelectionEvent event) {
  17. String pathInfo = event.getRequest().getPathInfo();
  18. if (pathInfo != null) {
  19. String className = pathInfo.substring(1);
  20. if (className.startsWith("run/")) {
  21. className = className.substring(4);
  22. }
  23. if (className.contains(".")) {
  24. return getUIClass(className);
  25. } else {
  26. return getUIClassFromDefaultPackage(className);
  27. }
  28. }
  29. return null;
  30. }
  31. private Class<? extends UI> getUIClassFromDefaultPackage(String className) {
  32. for (String pkgName : defaultPackages) {
  33. Class<? extends UI> uiClass = getUIClass(pkgName + "." + className);
  34. if (uiClass != null) {
  35. return uiClass;
  36. }
  37. }
  38. return null;
  39. }
  40. private Class<? extends UI> getUIClass(String className) {
  41. try {
  42. Class<?> loadClass = getClass().getClassLoader()
  43. .loadClass(className.replace("/", "."));
  44. return (Class<? extends UI>) loadClass;
  45. } catch (ClassNotFoundException e) {
  46. return null;
  47. }
  48. }
  49. }