From: Leif Åstrand Date: Wed, 5 Sep 2012 12:42:02 +0000 (+0300) Subject: Change LegacyApplication to be a UIProvider (#9402) X-Git-Tag: 7.0.0.beta1~184^2~5 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=de3ac989c85451767510917822463353bcab71cd;p=vaadin-framework.git Change LegacyApplication to be a UIProvider (#9402) --- diff --git a/server/src/com/vaadin/Application.java b/server/src/com/vaadin/Application.java index 745d0ad784..634f96bfe1 100644 --- a/server/src/com/vaadin/Application.java +++ b/server/src/com/vaadin/Application.java @@ -58,6 +58,8 @@ import com.vaadin.server.GlobalResourceHandler; import com.vaadin.server.RequestHandler; import com.vaadin.server.ServletApplicationContext; import com.vaadin.server.Terminal; +import com.vaadin.server.Terminal.ErrorEvent; +import com.vaadin.server.Terminal.ErrorListener; import com.vaadin.server.UIProvider; import com.vaadin.server.VaadinServlet; import com.vaadin.server.VariableOwner; @@ -152,7 +154,8 @@ public class Application implements Terminal.ErrorListener, Serializable { * @since 7.0 */ @Deprecated - public static class LegacyApplication extends Application { + public static abstract class LegacyApplication extends AbstractUIProvider + implements ErrorListener { /** * Ignore initial / and then get everything up to the next / */ @@ -177,8 +180,8 @@ public class Application implements Terminal.ErrorListener, Serializable { "mainWindow has already been set"); } if (mainWindow.getApplication() == null) { - mainWindow.setApplication(this); - } else if (mainWindow.getApplication() != this) { + mainWindow.setApplication(Application.getCurrent()); + } else if (mainWindow.getApplication() != Application.getCurrent()) { throw new IllegalStateException( "mainWindow is attached to another application"); } @@ -190,45 +193,44 @@ public class Application implements Terminal.ErrorListener, Serializable { this.mainWindow = mainWindow; } + public void doInit() { + Application.getCurrent().setErrorHandler(this); + init(); + } + + protected abstract void init(); + @Override - public void start(ApplicationStartEvent event) { - super.start(event); - addUIProvider(new AbstractUIProvider() { - @Override - public Class getUIClass(Application application, - WrappedRequest request) { - if (application == LegacyApplication.this) { - UI uiInstance = getUIInstance(request); - if (uiInstance != null) { - return uiInstance.getClass(); - } - } - return null; - } + public Class getUIClass(Application application, + WrappedRequest request) { + UI uiInstance = getUIInstance(request); + if (uiInstance != null) { + return uiInstance.getClass(); + } + return null; + } - @Override - public UI createInstance(Application application, - Class type, WrappedRequest request) { - return getUIInstance(request); - } + @Override + public UI createInstance(Application application, + Class type, WrappedRequest request) { + return getUIInstance(request); + } - @Override - public String getThemeForUI(WrappedRequest request, - Class uiClass) { - return theme; - } + @Override + public String getThemeForUI(WrappedRequest request, + Class uiClass) { + return theme; + } - @Override - public String getPageTitleForUI(WrappedRequest request, - Class uiClass) { - UI uiInstance = getUIInstance(request); - if (uiInstance != null) { - return uiInstance.getCaption(); - } else { - return super.getPageTitleForUI(request, uiClass); - } - } - }); + @Override + public String getPageTitleForUI(WrappedRequest request, + Class uiClass) { + UI uiInstance = getUIInstance(request); + if (uiInstance != null) { + return uiInstance.getCaption(); + } else { + return super.getPageTitleForUI(request, uiClass); + } } /** @@ -273,7 +275,7 @@ public class Application implements Terminal.ErrorListener, Serializable { * {@inheritDoc} */ @Override - public UI getUIForRequest(WrappedRequest request) { + public UI getExistingUI(WrappedRequest request) { UI uiInstance = getUIInstance(request); if (uiInstance.getUIId() == -1) { // Not initialized -> Let go through createUIInstance to make it @@ -352,7 +354,7 @@ public class Application implements Terminal.ErrorListener, Serializable { } legacyUINames.put(uI.getName(), uI); - uI.setApplication(this); + uI.setApplication(Application.getCurrent()); } /** @@ -389,6 +391,27 @@ public class Application implements Terminal.ErrorListener, Serializable { public Collection getWindows() { return Collections.unmodifiableCollection(legacyUINames.values()); } + + @Override + public void terminalError(ErrorEvent event) { + Application.getCurrent().terminalError(event); + } + + public ApplicationContext getContext() { + return Application.getCurrent().getContext(); + } + + protected void close() { + Application.getCurrent().close(); + } + + public boolean isRunning() { + return Application.getCurrent().isRunning(); + } + + public URL getURL() { + return Application.getCurrent().getURL(); + } } /** @@ -1854,39 +1877,10 @@ public class Application implements Terminal.ErrorListener, Serializable { Integer uiId = getUIId(request); synchronized (this) { - BrowserDetails browserDetails = request.getBrowserDetails(); - boolean hasBrowserDetails = browserDetails != null - && browserDetails.getUriFragment() != null; - uI = uIs.get(uiId); - Class uiClass = null; - - if (uI == null && hasBrowserDetails - && !retainOnRefreshUIs.isEmpty()) { - uiClass = getUIClass(request); - - // Check for a known UI - - @SuppressWarnings("null") - String windowName = browserDetails.getWindowName(); - Integer retainedUIId = retainOnRefreshUIs.get(windowName); - - if (retainedUIId != null) { - UI retainedUI = uIs.get(retainedUIId); - // We've had the same UI instance in a window with this - // name, but should we still use it? - if (retainedUI.getClass() == uiClass) { - uiId = retainedUIId; - uI = retainedUI; - } else { - getLogger().info( - "Not using retained UI in " + windowName - + " because retained UI was of type " - + retainedUIId.getClass() + " but " - + uiClass - + " is expected for the request."); - } - } + + if (uI == null) { + uI = findExistingUi(request); } } // end synchronized block @@ -1896,6 +1890,48 @@ public class Application implements Terminal.ErrorListener, Serializable { return uI; } + private UI findExistingUi(WrappedRequest request) { + // Check if some UI provider has an existing UI available + for (int i = uiProviders.size() - 1; i >= 0; i--) { + UIProvider provider = uiProviders.get(i); + UI existingUi = provider.getExistingUI(request); + if (existingUi != null) { + return existingUi; + } + } + + BrowserDetails browserDetails = request.getBrowserDetails(); + boolean hasBrowserDetails = browserDetails != null + && browserDetails.getUriFragment() != null; + + if (hasBrowserDetails && !retainOnRefreshUIs.isEmpty()) { + // Check for a known UI + + @SuppressWarnings("null") + String windowName = browserDetails.getWindowName(); + Integer retainedUIId = retainOnRefreshUIs.get(windowName); + + if (retainedUIId != null) { + Class expectedUIClass = getUIClass(request); + UI retainedUI = uIs.get(retainedUIId); + // We've had the same UI instance in a window with this + // name, but should we still use it? + if (retainedUI.getClass() == expectedUIClass) { + return retainedUI; + } else { + getLogger().info( + "Not using retained UI in " + windowName + + " because retained UI was of type " + + retainedUIId.getClass() + " but " + + expectedUIClass + + " is expected for the request."); + } + } + } + + return null; + } + public UI createUI(WrappedRequest request) { Class uiClass = getUIClass(request); @@ -2167,4 +2203,8 @@ public class Application implements Terminal.ErrorListener, Serializable { return globalResourceHandler; } + public Collection getUIProviders() { + return Collections.unmodifiableCollection(uiProviders); + } + } diff --git a/server/src/com/vaadin/server/AbstractUIProvider.java b/server/src/com/vaadin/server/AbstractUIProvider.java index 49f8e3ec77..c7a137ebbd 100644 --- a/server/src/com/vaadin/server/AbstractUIProvider.java +++ b/server/src/com/vaadin/server/AbstractUIProvider.java @@ -115,4 +115,9 @@ public abstract class AbstractUIProvider implements UIProvider { return titleAnnotation.value(); } } + + @Override + public UI getExistingUI(WrappedRequest request) { + return null; + } } diff --git a/server/src/com/vaadin/server/LegacyVaadinPortlet.java b/server/src/com/vaadin/server/LegacyVaadinPortlet.java new file mode 100644 index 0000000000..036242a0c2 --- /dev/null +++ b/server/src/com/vaadin/server/LegacyVaadinPortlet.java @@ -0,0 +1,62 @@ +/* + * Copyright 2011 Vaadin Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ + +package com.vaadin.server; + +import javax.portlet.PortletException; +import javax.portlet.PortletRequest; + +import com.vaadin.Application; +import com.vaadin.Application.LegacyApplication; +import com.vaadin.server.ServletPortletHelper.ApplicationClassException; + +public class LegacyVaadinPortlet extends VaadinPortlet { + + protected Class getApplicationClass() + throws ClassNotFoundException { + try { + return ServletPortletHelper + .getLegacyApplicationClass(getDeploymentConfiguration()); + } catch (ApplicationClassException e) { + throw new RuntimeException(e); + } + } + + protected LegacyApplication getNewApplication(PortletRequest request) + throws PortletException { + try { + Class applicationClass = getApplicationClass(); + return applicationClass.newInstance(); + } catch (Exception e) { + throw new PortletException(e); + } + } + + @Override + protected Application createApplication(PortletRequest request) + throws PortletException { + Application application = super.createApplication(request); + + // Must set current before running init() + Application.setCurrent(application); + + LegacyApplication legacyApplication = getNewApplication(request); + legacyApplication.doInit(); + application.addUIProvider(legacyApplication); + + return application; + } +} diff --git a/server/src/com/vaadin/server/LegacyVaadinServlet.java b/server/src/com/vaadin/server/LegacyVaadinServlet.java new file mode 100644 index 0000000000..f53e9d4bf0 --- /dev/null +++ b/server/src/com/vaadin/server/LegacyVaadinServlet.java @@ -0,0 +1,63 @@ +/* + * Copyright 2011 Vaadin Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ + +package com.vaadin.server; + +import javax.servlet.ServletException; +import javax.servlet.http.HttpServletRequest; + +import com.vaadin.Application; +import com.vaadin.Application.LegacyApplication; +import com.vaadin.server.ServletPortletHelper.ApplicationClassException; + +public class LegacyVaadinServlet extends VaadinServlet { + + protected Class getApplicationClass() + throws ClassNotFoundException { + try { + return ServletPortletHelper + .getLegacyApplicationClass(getDeploymentConfiguration()); + } catch (ApplicationClassException e) { + throw new RuntimeException(e); + } + } + + protected LegacyApplication getNewApplication(HttpServletRequest request) + throws ServletException { + try { + Class applicationClass = getApplicationClass(); + return applicationClass.newInstance(); + } catch (Exception e) { + throw new ServletException(e); + } + } + + @Override + protected Application createApplication(HttpServletRequest request) + throws ServletException { + Application application = super.createApplication(request); + + // Must set current before running init() + Application.setCurrent(application); + + LegacyApplication legacyApplication = getNewApplication(request); + legacyApplication.doInit(); + application.addUIProvider(legacyApplication); + + return application; + } + +} diff --git a/server/src/com/vaadin/server/ServletPortletHelper.java b/server/src/com/vaadin/server/ServletPortletHelper.java index 26913d8ba8..18fbb66114 100644 --- a/server/src/com/vaadin/server/ServletPortletHelper.java +++ b/server/src/com/vaadin/server/ServletPortletHelper.java @@ -4,6 +4,7 @@ import java.io.Serializable; import java.util.Properties; import com.vaadin.Application; +import com.vaadin.Application.LegacyApplication; import com.vaadin.shared.ApplicationConstants; import com.vaadin.ui.UI; @@ -41,28 +42,22 @@ class ServletPortletHelper implements Serializable { } } - static Class getApplicationClass( + static Class getLegacyApplicationClass( DeploymentConfiguration deploymentConfiguration) throws ApplicationClassException { Properties initParameters = deploymentConfiguration .getApplicationConfiguration().getInitParameters(); String applicationParameter = initParameters.getProperty("application"); - String uiParameter = initParameters - .getProperty(Application.UI_PARAMETER); ClassLoader classLoader = deploymentConfiguration.getClassLoader(); if (applicationParameter == null) { - - // Validate the parameter value - verifyUIClass(uiParameter, classLoader); - - // Application can be used if a valid rootLayout is defined - return Application.class; + throw new ApplicationClassException( + "No \"application\" init parameter found"); } try { - return (Class) classLoader - .loadClass(applicationParameter); + return classLoader.loadClass(applicationParameter).asSubclass( + LegacyApplication.class); } catch (final ClassNotFoundException e) { throw new ApplicationClassException( "Failed to load application class: " + applicationParameter, @@ -138,4 +133,25 @@ class ServletPortletHelper implements Serializable { ApplicationConstants.HEARTBEAT_REQUEST_PATH); } + public static void initDefaultUIProvider(Application application, + DeploymentConfiguration deploymentConfiguration) + throws ApplicationClassException { + String uiProperty = deploymentConfiguration + .getApplicationConfiguration().getInitParameters() + .getProperty(Application.UI_PARAMETER); + if (uiProperty != null) { + verifyUIClass(uiProperty, deploymentConfiguration.getClassLoader()); + application.addUIProvider(new DefaultUIProvider()); + } + } + + public static void checkUiProviders(Application newApplication) + throws ApplicationClassException { + if (newApplication.getUIProviders().isEmpty()) { + throw new ApplicationClassException( + "No UIProvider has been added to the application and there is no \"" + + Application.UI_PARAMETER + "\" init parameter."); + } + } + } diff --git a/server/src/com/vaadin/server/UIProvider.java b/server/src/com/vaadin/server/UIProvider.java index 60b79cdbb9..6a45b06c63 100644 --- a/server/src/com/vaadin/server/UIProvider.java +++ b/server/src/com/vaadin/server/UIProvider.java @@ -78,4 +78,23 @@ public interface UIProvider { public String getThemeForUI(WrappedRequest request, Class uiClass); + /** + * Finds an existing {@link UI} for a request. + *

+ * Implementations should take care to not return an UI instance that might + * be used in some other browser as that might cause synchronization issues + * when changes from one browser window are not present in the other. + *

+ * If no UI provider returns an existing UI, the framework does also check + * the window.name for an existing instance with + * {@link #isUiPreserved(WrappedRequest, Class)} before falling back to + * bootstrapping and creating a new UI instance. + * + * @param request + * the request for which a UI is desired + * @return a UI belonging to the request, or null if this UI + * provider doesn't have an existing UI for the request. + */ + public UI getExistingUI(WrappedRequest request); + } diff --git a/server/src/com/vaadin/server/VaadinPortlet.java b/server/src/com/vaadin/server/VaadinPortlet.java index bf8fb5dc84..eae01e9369 100644 --- a/server/src/com/vaadin/server/VaadinPortlet.java +++ b/server/src/com/vaadin/server/VaadinPortlet.java @@ -814,7 +814,7 @@ public class VaadinPortlet extends GenericPortlet implements Constants { if (restartApplication) { closeApplication(application, request.getPortletSession(false)); - return createApplication(request); + return createAndRegisterApplication(request); } else if (closeApplication) { closeApplication(application, request.getPortletSession(false)); return null; @@ -826,7 +826,7 @@ public class VaadinPortlet extends GenericPortlet implements Constants { // No existing application was found if (requestCanCreateApplication) { - return createApplication(request); + return createAndRegisterApplication(request); } else { throw new SessionExpiredException(); } @@ -845,9 +845,16 @@ public class VaadinPortlet extends GenericPortlet implements Constants { } } - private Application createApplication(PortletRequest request) + private Application createAndRegisterApplication(PortletRequest request) throws PortletException { - Application newApplication = getNewApplication(request); + Application newApplication = createApplication(request); + + try { + ServletPortletHelper.checkUiProviders(newApplication); + } catch (ApplicationClassException e) { + throw new PortletException(e); + } + final PortletApplicationContext2 context = getApplicationContext(request .getPortletSession()); context.setApplication(newApplication, new PortletCommunicationManager( @@ -855,6 +862,20 @@ public class VaadinPortlet extends GenericPortlet implements Constants { return newApplication; } + protected Application createApplication(PortletRequest request) + throws PortletException { + Application application = new Application(); + + try { + ServletPortletHelper.initDefaultUIProvider(application, + getDeploymentConfiguration()); + } catch (ApplicationClassException e) { + throw new PortletException(e); + } + + return application; + } + private Application getExistingApplication(PortletRequest request, boolean allowSessionCreation) throws MalformedURLException, SessionExpiredException { @@ -880,26 +901,6 @@ public class VaadinPortlet extends GenericPortlet implements Constants { return null; } - protected Class getApplicationClass() - throws ApplicationClassException { - return ServletPortletHelper - .getApplicationClass(getDeploymentConfiguration()); - } - - protected Application getNewApplication(PortletRequest request) - throws PortletException { - try { - final Application application = getApplicationClass().newInstance(); - return application; - } catch (final IllegalAccessException e) { - throw new PortletException("getNewApplication failed", e); - } catch (final InstantiationException e) { - throw new PortletException("getNewApplication failed", e); - } catch (final ApplicationClassException e) { - throw new PortletException("getNewApplication failed", e); - } - } - private void handleServiceException(WrappedPortletRequest request, WrappedPortletResponse response, Application application, Throwable e) throws IOException, PortletException { diff --git a/server/src/com/vaadin/server/VaadinServlet.java b/server/src/com/vaadin/server/VaadinServlet.java index ba19072503..8f33382110 100644 --- a/server/src/com/vaadin/server/VaadinServlet.java +++ b/server/src/com/vaadin/server/VaadinServlet.java @@ -603,7 +603,7 @@ public class VaadinServlet extends HttpServlet implements Constants { if (restartApplication) { closeApplication(application, request.getSession(false)); - return createApplication(request); + return createAndRegisterApplication(request); } else if (closeApplication) { closeApplication(application, request.getSession(false)); return null; @@ -619,7 +619,7 @@ public class VaadinServlet extends HttpServlet implements Constants { * If the request is such that it should create a new application if * one as not found, we do that. */ - return createApplication(request); + return createAndRegisterApplication(request); } else { /* * The application was not found and a new one should not be @@ -630,6 +630,24 @@ public class VaadinServlet extends HttpServlet implements Constants { } + private Application createAndRegisterApplication(HttpServletRequest request) + throws ServletException { + Application newApplication = createApplication(request); + + try { + ServletPortletHelper.checkUiProviders(newApplication); + } catch (ApplicationClassException e) { + throw new ServletException(e); + } + + final ServletApplicationContext context = getApplicationContext(request + .getSession()); + context.setApplication(newApplication, + createCommunicationManager(newApplication)); + + return newApplication; + } + /** * Check if the request should create an application if an existing * application is not found. @@ -699,14 +717,16 @@ public class VaadinServlet extends HttpServlet implements Constants { * @throws ServletException * @throws MalformedURLException */ - private Application createApplication(HttpServletRequest request) - throws ServletException, MalformedURLException { - Application newApplication = getNewApplication(request); + protected Application createApplication(HttpServletRequest request) + throws ServletException { + Application newApplication = new Application(); - final ServletApplicationContext context = getApplicationContext(request - .getSession()); - context.setApplication(newApplication, - createCommunicationManager(newApplication)); + try { + ServletPortletHelper.initDefaultUIProvider(newApplication, + getDeploymentConfiguration()); + } catch (ApplicationClassException e) { + throw new ServletException(e); + } return newApplication; } @@ -848,35 +868,6 @@ public class VaadinServlet extends HttpServlet implements Constants { log("Invalid security key received from " + request.getRemoteHost()); } - /** - * Creates a new application for the given request. - * - * @param request - * the HTTP request. - * @return A new Application instance. - * @throws ServletException - */ - protected Application getNewApplication(HttpServletRequest request) - throws ServletException { - - // Creates a new application instance - try { - Class applicationClass = ServletPortletHelper - .getApplicationClass(getDeploymentConfiguration()); - - final Application application = applicationClass.newInstance(); - application.addUIProvider(new DefaultUIProvider()); - - return application; - } catch (final IllegalAccessException e) { - throw new ServletException("getNewApplication failed", e); - } catch (final InstantiationException e) { - throw new ServletException("getNewApplication failed", e); - } catch (ApplicationClassException e) { - throw new ServletException("getNewApplication failed", e); - } - } - /** * Starts the application if it is not already running. * diff --git a/uitest/src/com/vaadin/launcher/ApplicationRunnerServlet.java b/uitest/src/com/vaadin/launcher/ApplicationRunnerServlet.java index 3d63c7dfb9..3372651e5c 100644 --- a/uitest/src/com/vaadin/launcher/ApplicationRunnerServlet.java +++ b/uitest/src/com/vaadin/launcher/ApplicationRunnerServlet.java @@ -30,16 +30,18 @@ import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import com.vaadin.Application; +import com.vaadin.Application.LegacyApplication; import com.vaadin.server.AbstractUIProvider; import com.vaadin.server.ApplicationConfiguration; -import com.vaadin.server.VaadinServlet; +import com.vaadin.server.LegacyVaadinServlet; +import com.vaadin.server.UIProvider; import com.vaadin.server.WrappedHttpServletRequest; import com.vaadin.server.WrappedRequest; import com.vaadin.tests.components.TestBase; import com.vaadin.ui.UI; @SuppressWarnings("serial") -public class ApplicationRunnerServlet extends VaadinServlet { +public class ApplicationRunnerServlet extends LegacyVaadinServlet { /** * The name of the application class currently used. Only valid within one @@ -104,10 +106,14 @@ public class ApplicationRunnerServlet extends VaadinServlet { } @Override - protected Application getNewApplication(HttpServletRequest request) - throws ServletException { + protected Class getApplicationClass() + throws ClassNotFoundException { + return getClassToRun().asSubclass(LegacyApplication.class); + } - // Creates a new application instance + @Override + protected Application createApplication(HttpServletRequest request) + throws ServletException { try { final Class classToRun = getClassToRun(); if (UI.class.isAssignableFrom(classToRun)) { @@ -121,8 +127,13 @@ public class ApplicationRunnerServlet extends VaadinServlet { } }); return application; - } else if (Application.class.isAssignableFrom(classToRun)) { - return (Application) classToRun.newInstance(); + } else if (LegacyApplication.class.isAssignableFrom(classToRun)) { + return super.createApplication(request); + } else if (UIProvider.class.isAssignableFrom(classToRun)) { + Application application = new Application(); + application + .addUIProvider((UIProvider) classToRun.newInstance()); + return application; } else { throw new ServletException(classToRun.getCanonicalName() + " is neither an Application nor a UI"); diff --git a/uitest/src/com/vaadin/tests/Parameters.java b/uitest/src/com/vaadin/tests/Parameters.java index b16d4ef65b..f5ab18cfe3 100644 --- a/uitest/src/com/vaadin/tests/Parameters.java +++ b/uitest/src/com/vaadin/tests/Parameters.java @@ -30,8 +30,8 @@ import com.vaadin.ui.Label; import com.vaadin.ui.Layout.MarginHandler; import com.vaadin.ui.Link; import com.vaadin.ui.Panel; -import com.vaadin.ui.UI.LegacyWindow; import com.vaadin.ui.Table; +import com.vaadin.ui.UI.LegacyWindow; import com.vaadin.ui.VerticalLayout; /** @@ -56,7 +56,7 @@ public class Parameters extends com.vaadin.Application.LegacyApplication setMainWindow(main); // This class acts both as URI handler and parameter handler - addRequestHandler(this); + Application.getCurrent().addRequestHandler(this); final VerticalLayout layout = new VerticalLayout(); final Label info = new Label("To test URI and Parameter Handlers, " diff --git a/uitest/src/com/vaadin/tests/TestBench.java b/uitest/src/com/vaadin/tests/TestBench.java index 67e1180d75..bae677001a 100644 --- a/uitest/src/com/vaadin/tests/TestBench.java +++ b/uitest/src/com/vaadin/tests/TestBench.java @@ -37,8 +37,8 @@ import com.vaadin.ui.Label; import com.vaadin.ui.Layout; import com.vaadin.ui.Link; import com.vaadin.ui.Panel; -import com.vaadin.ui.UI.LegacyWindow; import com.vaadin.ui.Tree; +import com.vaadin.ui.UI.LegacyWindow; import com.vaadin.ui.VerticalLayout; /** @@ -225,7 +225,7 @@ public class TestBench extends com.vaadin.Application.LegacyApplication try { final Application.LegacyApplication app = (Application.LegacyApplication) c .newInstance(); - app.init(); + app.doInit(); Layout lo = (Layout) app.getMainWindow().getContent(); lo.setParent(null); return lo; diff --git a/uitest/src/com/vaadin/tests/TreeFilesystem.java b/uitest/src/com/vaadin/tests/TreeFilesystem.java index f2a0d97b08..2e7b215ad7 100644 --- a/uitest/src/com/vaadin/tests/TreeFilesystem.java +++ b/uitest/src/com/vaadin/tests/TreeFilesystem.java @@ -18,14 +18,15 @@ package com.vaadin.tests; import java.io.File; +import com.vaadin.Application; import com.vaadin.data.Item; import com.vaadin.shared.ui.label.ContentMode; import com.vaadin.tests.util.SampleDirectory; import com.vaadin.ui.Label; import com.vaadin.ui.Panel; -import com.vaadin.ui.UI.LegacyWindow; import com.vaadin.ui.Tree; import com.vaadin.ui.Tree.ExpandEvent; +import com.vaadin.ui.UI.LegacyWindow; /** * Browsable file explorer using Vaadin Tree component. Demonstrates: how to add @@ -61,7 +62,8 @@ public class TreeFilesystem extends com.vaadin.Application.LegacyApplication tree.addListener(this); // Get sample directory - final File sampleDir = SampleDirectory.getDirectory(this, main); + final File sampleDir = SampleDirectory.getDirectory( + Application.getCurrent(), main); // populate tree's root node with example directory if (sampleDir != null) { populateNode(sampleDir.getAbsolutePath(), null); diff --git a/uitest/src/com/vaadin/tests/TreeFilesystemContainer.java b/uitest/src/com/vaadin/tests/TreeFilesystemContainer.java index 672c518ea8..8107ea702d 100644 --- a/uitest/src/com/vaadin/tests/TreeFilesystemContainer.java +++ b/uitest/src/com/vaadin/tests/TreeFilesystemContainer.java @@ -18,6 +18,7 @@ package com.vaadin.tests; import java.io.File; +import com.vaadin.Application; import com.vaadin.data.util.FilesystemContainer; import com.vaadin.data.util.FilesystemContainer.FileItem; import com.vaadin.tests.util.SampleDirectory; @@ -26,8 +27,8 @@ import com.vaadin.ui.Component.Listener; import com.vaadin.ui.Field; import com.vaadin.ui.Label; import com.vaadin.ui.Panel; -import com.vaadin.ui.UI.LegacyWindow; import com.vaadin.ui.Tree; +import com.vaadin.ui.UI.LegacyWindow; import com.vaadin.ui.VerticalLayout; /** @@ -77,7 +78,8 @@ public class TreeFilesystemContainer extends propertyPanel.setEnabled(false); // Get sample directory - final File sampleDir = SampleDirectory.getDirectory(this, w); + final File sampleDir = SampleDirectory.getDirectory( + Application.getCurrent(), w); // Populate tree with FilesystemContainer final FilesystemContainer fsc = new FilesystemContainer(sampleDir, true); filesystem.setContainerDataSource(fsc); diff --git a/uitest/src/com/vaadin/tests/appengine/GAESyncTest.java b/uitest/src/com/vaadin/tests/appengine/GAESyncTest.java index a7d2b03415..2f81c08ae6 100644 --- a/uitest/src/com/vaadin/tests/appengine/GAESyncTest.java +++ b/uitest/src/com/vaadin/tests/appengine/GAESyncTest.java @@ -2,6 +2,7 @@ package com.vaadin.tests.appengine; import com.google.apphosting.api.DeadlineExceededException; import com.vaadin.Application; +import com.vaadin.Application.LegacyApplication; import com.vaadin.data.Property; import com.vaadin.data.Property.ValueChangeEvent; import com.vaadin.server.ClassResource; @@ -50,10 +51,10 @@ public class GAESyncTest extends Application.LegacyApplication { private static final long serialVersionUID = -6521351715072191625l; TextField tf; Label l; - Application app; + LegacyApplication app; GridLayout gl; - private IntrWindow(Application app) { + private IntrWindow(LegacyApplication app) { this.app = app; tf = new TextField("Echo thingie"); diff --git a/uitest/src/com/vaadin/tests/application/RefreshStatePreserve.html b/uitest/src/com/vaadin/tests/application/RefreshStatePreserve.html index 47e766e76a..ea8c0c93b6 100644 --- a/uitest/src/com/vaadin/tests/application/RefreshStatePreserve.html +++ b/uitest/src/com/vaadin/tests/application/RefreshStatePreserve.html @@ -18,7 +18,7 @@ assertText - vaadin=runcomvaadintestsapplicationRefreshStatePreserve::/VVerticalLayout[0]/ChildComponentContainer[1]/VLabel[0] + vaadin=runcomvaadintestsapplicationRefreshStatePreserve::/VVerticalLayout[0]/VVerticalLayout[0]/VLabel[1] UI id: 0 @@ -28,7 +28,7 @@ assertText - vaadin=runcomvaadintestsapplicationRefreshStatePreserve::/VVerticalLayout[0]/ChildComponentContainer[1]/VLabel[0] + vaadin=runcomvaadintestsapplicationRefreshStatePreserve::/VVerticalLayout[0]/VVerticalLayout[0]/VLabel[1] UI id: 0 @@ -43,10 +43,9 @@ assertText - vaadin=runcomvaadintestsapplicationRefreshStatePreserve::/VVerticalLayout[0]/ChildComponentContainer[1]/VLabel[0] + vaadin=runcomvaadintestsapplicationRefreshStatePreserve::/VVerticalLayout[0]/VVerticalLayout[0]/VLabel[1] UI id: 0 - diff --git a/uitest/src/com/vaadin/tests/application/RefreshStatePreserve.java b/uitest/src/com/vaadin/tests/application/RefreshStatePreserve.java index 8962f5de9a..13ceceab6c 100644 --- a/uitest/src/com/vaadin/tests/application/RefreshStatePreserve.java +++ b/uitest/src/com/vaadin/tests/application/RefreshStatePreserve.java @@ -1,35 +1,18 @@ package com.vaadin.tests.application; -import com.vaadin.Application; import com.vaadin.annotations.PreserveOnRefresh; -import com.vaadin.server.AbstractUIProvider; import com.vaadin.server.WrappedRequest; -import com.vaadin.tests.components.AbstractTestApplication; +import com.vaadin.tests.components.AbstractTestUI; import com.vaadin.ui.Label; -import com.vaadin.ui.UI; -public class RefreshStatePreserve extends AbstractTestApplication { - @PreserveOnRefresh - public static class RefreshStateUI extends UI { - @Override - public void init(WrappedRequest request) { - getContent().addComponent( - new Label("window.name: " - + request.getBrowserDetails().getWindowName())); - getContent().addComponent(new Label("UI id: " + getUIId())); - } - } +@PreserveOnRefresh +public class RefreshStatePreserve extends AbstractTestUI { @Override - public void init() { - super.init(); - addUIProvider(new AbstractUIProvider() { - @Override - public Class getUIClass(Application application, - WrappedRequest request) { - return RefreshStateUI.class; - } - }); + protected void setup(WrappedRequest request) { + addComponent(new Label("window.name: " + + request.getBrowserDetails().getWindowName())); + addComponent(new Label("UI id: " + getUIId())); } @Override diff --git a/uitest/src/com/vaadin/tests/application/ThreadLocalInstances.html b/uitest/src/com/vaadin/tests/application/ThreadLocalInstances.html index b7fbca4c04..0d3a746152 100644 --- a/uitest/src/com/vaadin/tests/application/ThreadLocalInstances.html +++ b/uitest/src/com/vaadin/tests/application/ThreadLocalInstances.html @@ -29,7 +29,7 @@ assertText vaadin=runcomvaadintestsapplicationThreadLocalInstances::PID_SLog_row_15 - 1. null app in class init + 1. some app in class init assertText @@ -39,7 +39,7 @@ assertText vaadin=runcomvaadintestsapplicationThreadLocalInstances::PID_SLog_row_13 - 3. null app in app constructor + 3. some app in app constructor assertText @@ -49,7 +49,7 @@ assertText vaadin=runcomvaadintestsapplicationThreadLocalInstances::PID_SLog_row_11 - 5. this app in app init + 5. some app in app init assertText @@ -59,7 +59,7 @@ assertText vaadin=runcomvaadintestsapplicationThreadLocalInstances::PID_SLog_row_9 - 7. this app in root init + 7. some app in root init assertText @@ -69,7 +69,7 @@ assertText vaadin=runcomvaadintestsapplicationThreadLocalInstances::PID_SLog_row_7 - 9. this app in root paint + 9. some app in root paint assertText @@ -79,7 +79,7 @@ assertText vaadin=runcomvaadintestsapplicationThreadLocalInstances::PID_SLog_row_5 - 11. this app in background thread + 11. some app in background thread assertText @@ -89,7 +89,7 @@ assertText vaadin=runcomvaadintestsapplicationThreadLocalInstances::PID_SLog_row_3 - 13. this app in resource handler + 13. some app in resource handler assertText @@ -99,7 +99,7 @@ assertText vaadin=runcomvaadintestsapplicationThreadLocalInstances::PID_SLog_row_1 - 15. this app in button listener + 15. some app in button listener assertText diff --git a/uitest/src/com/vaadin/tests/application/ThreadLocalInstances.java b/uitest/src/com/vaadin/tests/application/ThreadLocalInstances.java index bad5b53478..1eda9e54fe 100644 --- a/uitest/src/com/vaadin/tests/application/ThreadLocalInstances.java +++ b/uitest/src/com/vaadin/tests/application/ThreadLocalInstances.java @@ -1,24 +1,24 @@ package com.vaadin.tests.application; import com.vaadin.Application; -import com.vaadin.server.AbstractUIProvider; import com.vaadin.server.DownloadStream; import com.vaadin.server.PaintException; import com.vaadin.server.WrappedRequest; -import com.vaadin.tests.components.AbstractTestApplication; +import com.vaadin.tests.components.AbstractTestCase; import com.vaadin.tests.integration.FlagSeResource; import com.vaadin.tests.util.Log; import com.vaadin.ui.Button; import com.vaadin.ui.Button.ClickEvent; import com.vaadin.ui.Embedded; import com.vaadin.ui.UI; +import com.vaadin.ui.UI.LegacyWindow; -public class ThreadLocalInstances extends AbstractTestApplication { +public class ThreadLocalInstances extends AbstractTestCase { private static final Application staticInitApplication = Application .getCurrent(); private static final UI staticInitRoot = UI.getCurrent(); - private final UI mainWindow = new UI() { + private final LegacyWindow mainWindow = new LegacyWindow() { boolean paintReported = false; @Override @@ -71,25 +71,13 @@ public class ThreadLocalInstances extends AbstractTestApplication { } @Override - public void init() { + protected void init() { reportCurrentStatus("app init"); - addUIProvider(new AbstractUIProvider() { - @Override - public UI createInstance(Application application, - Class type, WrappedRequest request) { - return mainWindow; - } - - @Override - public Class getUIClass(Application application, - WrappedRequest request) { - return mainWindow.getClass(); - } - }); + setMainWindow(mainWindow); } @Override - protected String getTestDescription() { + protected String getDescription() { return "Tests the precence of Application.getCurrentApplication() and UI.getCurrentRoot() from different contexts"; } @@ -113,7 +101,7 @@ public class ThreadLocalInstances extends AbstractTestApplication { } else if (value == reference) { return "this"; } else { - return value.toString(); + return "some"; } } diff --git a/uitest/src/com/vaadin/tests/components/AbstractTestApplication.java b/uitest/src/com/vaadin/tests/components/AbstractTestApplication.java deleted file mode 100644 index db17c67fdd..0000000000 --- a/uitest/src/com/vaadin/tests/components/AbstractTestApplication.java +++ /dev/null @@ -1,17 +0,0 @@ -package com.vaadin.tests.components; - -import com.vaadin.Application; -import com.vaadin.server.ApplicationContext; -import com.vaadin.server.WebBrowser; - -public abstract class AbstractTestApplication extends Application { - protected abstract String getTestDescription(); - - protected abstract Integer getTicketNumber(); - - protected WebBrowser getBrowser() { - ApplicationContext context = getContext(); - WebBrowser webBrowser = context.getBrowser(); - return webBrowser; - } -} diff --git a/uitest/src/com/vaadin/tests/components/AbstractTestUIProvider.java b/uitest/src/com/vaadin/tests/components/AbstractTestUIProvider.java new file mode 100644 index 0000000000..3d380c7835 --- /dev/null +++ b/uitest/src/com/vaadin/tests/components/AbstractTestUIProvider.java @@ -0,0 +1,18 @@ +package com.vaadin.tests.components; + +import com.vaadin.Application; +import com.vaadin.server.AbstractUIProvider; +import com.vaadin.server.ApplicationContext; +import com.vaadin.server.WebBrowser; + +public abstract class AbstractTestUIProvider extends AbstractUIProvider { + protected abstract String getTestDescription(); + + protected abstract Integer getTicketNumber(); + + protected WebBrowser getBrowser() { + ApplicationContext context = Application.getCurrent().getContext(); + WebBrowser webBrowser = context.getBrowser(); + return webBrowser; + } +} diff --git a/uitest/src/com/vaadin/tests/components/abstractfield/AbstractComponentDataBindingTest.java b/uitest/src/com/vaadin/tests/components/abstractfield/AbstractComponentDataBindingTest.java index 9b29ae1bab..327ed0f86b 100644 --- a/uitest/src/com/vaadin/tests/components/abstractfield/AbstractComponentDataBindingTest.java +++ b/uitest/src/com/vaadin/tests/components/abstractfield/AbstractComponentDataBindingTest.java @@ -4,6 +4,7 @@ import java.util.HashSet; import java.util.Locale; import java.util.Set; +import com.vaadin.Application; import com.vaadin.data.Container; import com.vaadin.data.Item; import com.vaadin.data.Property.ValueChangeEvent; @@ -54,7 +55,7 @@ public abstract class AbstractComponentDataBindingTest extends TestBase } protected void updateLocale(Locale locale) { - setLocale(locale); + Application.getCurrent().setLocale(locale); for (Component c : fields) { removeComponent(c); } diff --git a/uitest/src/com/vaadin/tests/components/loginform/LoginFormWithMultipleWindows.java b/uitest/src/com/vaadin/tests/components/loginform/LoginFormWithMultipleWindows.java index 84c14763ab..f640b3f9c4 100644 --- a/uitest/src/com/vaadin/tests/components/loginform/LoginFormWithMultipleWindows.java +++ b/uitest/src/com/vaadin/tests/components/loginform/LoginFormWithMultipleWindows.java @@ -1,26 +1,17 @@ package com.vaadin.tests.components.loginform; -import com.vaadin.Application; -import com.vaadin.server.AbstractUIProvider; -import com.vaadin.server.WrappedRequest; +import com.vaadin.Application.LegacyApplication; import com.vaadin.ui.LoginForm; import com.vaadin.ui.LoginForm.LoginEvent; import com.vaadin.ui.LoginForm.LoginListener; -import com.vaadin.ui.UI; import com.vaadin.ui.UI.LegacyWindow; @SuppressWarnings("serial") -public class LoginFormWithMultipleWindows extends Application { +public class LoginFormWithMultipleWindows extends LegacyApplication { @Override public void init() { - addUIProvider(new AbstractUIProvider() { - @Override - public Class getUIClass(Application application, - WrappedRequest request) { - return LoginFormWindow.class; - } - }); + setMainWindow(new LoginFormWindow()); } public static class LoginFormWindow extends LegacyWindow { diff --git a/uitest/src/com/vaadin/tests/components/ui/LazyInitUIs.java b/uitest/src/com/vaadin/tests/components/ui/LazyInitUIs.java index f33037f171..b141dc0990 100644 --- a/uitest/src/com/vaadin/tests/components/ui/LazyInitUIs.java +++ b/uitest/src/com/vaadin/tests/components/ui/LazyInitUIs.java @@ -1,16 +1,15 @@ package com.vaadin.tests.components.ui; import com.vaadin.Application; -import com.vaadin.server.AbstractUIProvider; import com.vaadin.server.ExternalResource; import com.vaadin.server.WrappedRequest; import com.vaadin.shared.ui.label.ContentMode; -import com.vaadin.tests.components.AbstractTestApplication; +import com.vaadin.tests.components.AbstractTestUIProvider; import com.vaadin.ui.Label; import com.vaadin.ui.Link; import com.vaadin.ui.UI; -public class LazyInitUIs extends AbstractTestApplication { +public class LazyInitUIs extends AbstractTestUIProvider { // @EagerInit private static class EagerInitUI extends UI { @@ -21,21 +20,15 @@ public class LazyInitUIs extends AbstractTestApplication { } @Override - public void init() { - addUIProvider(new AbstractUIProvider() { - - @Override - public UI createInstance(Application application, - Class type, WrappedRequest request) { - return getUI(request); - } + public UI createInstance(Application application, Class type, + WrappedRequest request) { + return getUI(request); + } - @Override - public Class getUIClass(Application application, - WrappedRequest request) { - return getUI(request).getClass(); - } - }); + @Override + public Class getUIClass(Application application, + WrappedRequest request) { + return getUI(request).getClass(); } private UI getUI(WrappedRequest request) { @@ -59,14 +52,14 @@ public class LazyInitUIs extends AbstractTestApplication { addComponent(getRequestInfo("NormalUI", request)); Link lazyCreateLink = new Link("Open lazyCreate UI", - new ExternalResource(getURL() - + "?lazyCreate#lazyCreate")); + new ExternalResource(Application.getCurrent() + .getURL() + "?lazyCreate#lazyCreate")); lazyCreateLink.setTargetName("_blank"); addComponent(lazyCreateLink); Link lazyInitLink = new Link("Open eagerInit UI", - new ExternalResource(getURL() - + "?eagerInit#eagerInit")); + new ExternalResource(Application.getCurrent() + .getURL() + "?eagerInit#eagerInit")); lazyInitLink.setTargetName("_blank"); addComponent(lazyInitLink); } diff --git a/uitest/src/com/vaadin/tests/components/ui/UIsInMultipleTabs.java b/uitest/src/com/vaadin/tests/components/ui/UIsInMultipleTabs.java index fe2fe16d93..9a66e9ad0a 100644 --- a/uitest/src/com/vaadin/tests/components/ui/UIsInMultipleTabs.java +++ b/uitest/src/com/vaadin/tests/components/ui/UIsInMultipleTabs.java @@ -1,34 +1,40 @@ package com.vaadin.tests.components.ui; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.atomic.AtomicInteger; + import com.vaadin.Application; -import com.vaadin.server.AbstractUIProvider; import com.vaadin.server.WrappedRequest; -import com.vaadin.tests.components.AbstractTestApplication; +import com.vaadin.tests.components.AbstractTestUIProvider; import com.vaadin.ui.Label; import com.vaadin.ui.UI; -public class UIsInMultipleTabs extends AbstractTestApplication { - private int numberOfUIsOpened; +public class UIsInMultipleTabs extends AbstractTestUIProvider { + // No cleanup -> will leak, but shouldn't matter for tests + private static ConcurrentHashMap numberOfUIsOpened = new ConcurrentHashMap(); public static class TabUI extends UI { @Override protected void init(WrappedRequest request) { - UIsInMultipleTabs application = (UIsInMultipleTabs) getApplication(); - String message = "This is UI number " - + ++application.numberOfUIsOpened; + Application application = Application.getCurrent(); + AtomicInteger count = numberOfUIsOpened.get(application); + if (count == null) { + numberOfUIsOpened.putIfAbsent(application, new AtomicInteger()); + // Get our added instance or another instance that was added by + // another thread between previous get and putIfAbsent + count = numberOfUIsOpened.get(application); + } + int currentCount = count.incrementAndGet(); + String message = "This is UI number " + currentCount; addComponent(new Label(message)); } } - public UIsInMultipleTabs() { - addUIProvider(new AbstractUIProvider() { - @Override - public Class getUIClass(Application application, - WrappedRequest request) { - return TabUI.class; - } - }); + @Override + public Class getUIClass(Application application, + WrappedRequest request) { + return TabUI.class; } @Override diff --git a/uitest/src/com/vaadin/tests/layouts/layouttester/GridLayoutTests.java b/uitest/src/com/vaadin/tests/layouts/layouttester/GridLayoutTests.java index 8da94feb7f..4470404105 100644 --- a/uitest/src/com/vaadin/tests/layouts/layouttester/GridLayoutTests.java +++ b/uitest/src/com/vaadin/tests/layouts/layouttester/GridLayoutTests.java @@ -2,7 +2,7 @@ package com.vaadin.tests.layouts.layouttester; import java.util.Date; -import com.vaadin.Application; +import com.vaadin.Application.LegacyApplication; import com.vaadin.server.Resource; import com.vaadin.server.SystemError; import com.vaadin.server.ThemeResource; @@ -32,7 +32,7 @@ public class GridLayoutTests extends AbstractLayoutTests { private AbstractComponent rc1, col1, col2, col3, row1, row2, row3, x3, x22; - public GridLayoutTests(Application application) { + public GridLayoutTests(LegacyApplication application) { super(); } diff --git a/uitest/src/com/vaadin/tests/layouts/layouttester/HorizontalLayoutTests.java b/uitest/src/com/vaadin/tests/layouts/layouttester/HorizontalLayoutTests.java index 0042f0ba11..eb0976dfb9 100644 --- a/uitest/src/com/vaadin/tests/layouts/layouttester/HorizontalLayoutTests.java +++ b/uitest/src/com/vaadin/tests/layouts/layouttester/HorizontalLayoutTests.java @@ -1,6 +1,6 @@ package com.vaadin.tests.layouts.layouttester; -import com.vaadin.Application; +import com.vaadin.Application.LegacyApplication; import com.vaadin.server.Resource; import com.vaadin.server.SystemError; import com.vaadin.server.ThemeResource; @@ -26,7 +26,7 @@ import com.vaadin.ui.themes.Reindeer; public class HorizontalLayoutTests extends AbstractLayoutTests { - public HorizontalLayoutTests(Application application) { + public HorizontalLayoutTests(LegacyApplication application) { super(); } diff --git a/uitest/src/com/vaadin/tests/layouts/layouttester/VerticalLayoutTests.java b/uitest/src/com/vaadin/tests/layouts/layouttester/VerticalLayoutTests.java index 3e668289fe..f6cf3a4bae 100644 --- a/uitest/src/com/vaadin/tests/layouts/layouttester/VerticalLayoutTests.java +++ b/uitest/src/com/vaadin/tests/layouts/layouttester/VerticalLayoutTests.java @@ -1,6 +1,6 @@ package com.vaadin.tests.layouts.layouttester; -import com.vaadin.Application; +import com.vaadin.Application.LegacyApplication; import com.vaadin.server.Resource; import com.vaadin.server.SystemError; import com.vaadin.server.ThemeResource; @@ -26,7 +26,7 @@ import com.vaadin.ui.VerticalLayout; public class VerticalLayoutTests extends AbstractLayoutTests { - public VerticalLayoutTests(Application application) { + public VerticalLayoutTests(LegacyApplication application) { super(); } diff --git a/uitest/src/com/vaadin/tests/minitutorials/v7a1/DifferentFeaturesForDifferentClients.java b/uitest/src/com/vaadin/tests/minitutorials/v7a1/DifferentFeaturesForDifferentClients.java index 8c2a816e1c..05da2506e8 100644 --- a/uitest/src/com/vaadin/tests/minitutorials/v7a1/DifferentFeaturesForDifferentClients.java +++ b/uitest/src/com/vaadin/tests/minitutorials/v7a1/DifferentFeaturesForDifferentClients.java @@ -31,35 +31,29 @@ import com.vaadin.ui.UI; * @author Vaadin Ltd * @since 7.0.0 */ -public class DifferentFeaturesForDifferentClients extends Application { +public class DifferentFeaturesForDifferentClients extends AbstractUIProvider { @Override - public void init() { - super.init(); - addUIProvider(new AbstractUIProvider() { - @Override - public Class getUIClass(Application application, - WrappedRequest request) { - // could also use browser version etc. - if (request.getHeader("user-agent").contains("mobile")) { - return TouchRoot.class; - } else { - return DefaultRoot.class; - } - } + public Class getUIClass(Application application, + WrappedRequest request) { + // could also use browser version etc. + if (request.getHeader("user-agent").contains("mobile")) { + return TouchRoot.class; + } else { + return DefaultRoot.class; + } + } - // Must override as default implementation isn't allowed to - // instantiate our non-public classes - @Override - public UI createInstance(Application application, - Class type, WrappedRequest request) { - try { - return type.newInstance(); - } catch (Exception e) { - throw new RuntimeException(e); - } - } - }); + // Must override as default implementation isn't allowed to + // instantiate our non-public classes + @Override + public UI createInstance(Application application, Class type, + WrappedRequest request) { + try { + return type.newInstance(); + } catch (Exception e) { + throw new RuntimeException(e); + } } } diff --git a/uitest/src/com/vaadin/tests/tickets/Ticket1589.java b/uitest/src/com/vaadin/tests/tickets/Ticket1589.java index 37f9197285..7cbe8cb6cf 100644 --- a/uitest/src/com/vaadin/tests/tickets/Ticket1589.java +++ b/uitest/src/com/vaadin/tests/tickets/Ticket1589.java @@ -28,7 +28,7 @@ public class Ticket1589 extends Application.LegacyApplication { MyDynamicResource res = new MyDynamicResource(); - addRequestHandler(res); + Application.getCurrent().addRequestHandler(res); w.addComponent(new Link( "Test (without Content-Disposition, should suggest generatedFile.png when saving, browser default for actual disposition)", diff --git a/uitest/src/com/vaadin/tests/tickets/Ticket1921.java b/uitest/src/com/vaadin/tests/tickets/Ticket1921.java index ac5f990915..17314c3fb6 100644 --- a/uitest/src/com/vaadin/tests/tickets/Ticket1921.java +++ b/uitest/src/com/vaadin/tests/tickets/Ticket1921.java @@ -42,7 +42,7 @@ public class Ticket1921 extends Application.LegacyApplication implements newState(); - addRequestHandler(this); + Application.getCurrent().addRequestHandler(this); } public void newState() { diff --git a/uitest/src/com/vaadin/tests/tickets/Ticket2292.java b/uitest/src/com/vaadin/tests/tickets/Ticket2292.java index ce7960a169..f3b5b68491 100644 --- a/uitest/src/com/vaadin/tests/tickets/Ticket2292.java +++ b/uitest/src/com/vaadin/tests/tickets/Ticket2292.java @@ -44,7 +44,7 @@ public class Ticket2292 extends com.vaadin.Application.LegacyApplication Link l = new Link("l", icon); main.addComponent(l); - addRequestHandler(this); + Application.getCurrent().addRequestHandler(this); } @Override