]> source.dussan.org Git - vaadin-framework.git/commitdiff
Migrate CreatingAnApplicationWithDIfferentFeaturesForDIfferentClients
authorErik Lumme <erik@vaadin.com>
Thu, 14 Sep 2017 10:25:06 +0000 (13:25 +0300)
committerErik Lumme <erik@vaadin.com>
Thu, 14 Sep 2017 10:25:06 +0000 (13:25 +0300)
documentation/articles/CreatingAnApplicationWithDifferentFeaturesForDifferentClients.asciidoc [new file with mode: 0644]
documentation/articles/contents.asciidoc

diff --git a/documentation/articles/CreatingAnApplicationWithDifferentFeaturesForDifferentClients.asciidoc b/documentation/articles/CreatingAnApplicationWithDifferentFeaturesForDifferentClients.asciidoc
new file mode 100644 (file)
index 0000000..c8b0738
--- /dev/null
@@ -0,0 +1,71 @@
+[[creating-an-application-with-different-features-for-different-clients]]
+Creating an application with different features for different clients
+---------------------------------------------------------------------
+
+Providing different features for different clients can be done by
+creating a specialized UIProvider for the application.
+
+We start by creating the specialized UI's
+
+[source,java]
+....
+public class DefaultUI extends UI {
+  @Override
+  protected void init(VaadinRequest request) {
+    setContent(
+        new Label("This browser does not support touch events"));
+  }
+}
+....
+
+[source,java]
+....
+public class TouchUI extends UI {
+  @Override
+  protected void init(VaadinRequest request) {
+    WebBrowser webBrowser = getPage().getWebBrowser();
+    String screenSize = "" + webBrowser.getScreenWidth() + "x"
+        + webBrowser.getScreenHeight();
+    setContent(new Label("Using a touch enabled device with screen size"
+        + screenSize));
+  }
+}
+....
+
+We then define an UIProvider which knows what UI the application should
+return.
+
+[source,java]
+....
+public class DifferentFeaturesForDifferentClients extends UIProvider {
+
+  @Override
+  public Class<? extends UI> getUIClass(UIClassSelectionEvent event) {
+    // could also use browser version etc.
+    if (event.getRequest().getHeader("user-agent").contains("mobile")) {
+      return TouchUI.class;
+    } else {
+      return DefaultUI.class;
+    }
+  }
+}
+....
+
+Now that we have an `UIProvider` we need to tell Vaadin to use it. This is
+most easily done by defining the `UIProvider` class in web.xml instead of
+defining a UI class.
+
+[source,xml]
+....
+<servlet>
+  <servlet-name>My Vaadin App</servlet-name>
+  <servlet-class>com.vaadin.server.VaadinServlet</servlet-class>
+  <init-param>
+    <description>Vaadin UI</description>
+    <param-name>UIProvider</param-name>
+    <param-value>com.example.myexampleproject.DifferentFeaturesForDifferentClients</param-value>
+  </init-param>
+</servlet>
+....
+
+Each UI can have its own feature set, layout and theme.
index 3f697441d0e5627e66821342145e9529443879e5..549d75c4cd9446c70ff08abf0a374d7d65b5d8cd 100644 (file)
@@ -7,3 +7,4 @@
 - link:OfflineModeForTouchKit4MobileApps.asciidoc[Offline mode for TouchKit 4 mobile apps]
 - link:CreatingYourOwnConverterForString.asciidoc[Creating your own converter for String]
 - link:ChangingTheDefaultConvertersForAnApplication.asciidoc[Changing the default converters for an application]
+- link:CreatingAnApplicationWithDifferentFeaturesForDifferentClients.asciidoc[Creating an application with different features for different clients]