From b0574f7b33c4d3d437c8c11cd53389e5522f6999 Mon Sep 17 00:00:00 2001 From: Artur Signell Date: Mon, 3 Jun 2013 23:15:43 +0300 Subject: [PATCH] Add transport parameter to @Push (#11966) Change-Id: Ic47e68a41ba407917a990ef82a98c1526a9510ef --- server/src/com/vaadin/annotations/Push.java | 10 ++++ server/src/com/vaadin/server/UIProvider.java | 24 ++++++++++ .../server/communication/UIInitHandler.java | 6 +++ .../vaadin/tests/push/BasicPushStreaming.java | 12 +++++ .../vaadin/tests/push/BasicPushWebsocket.java | 8 ++++ .../tests/push/PushTransportAnnotation.html | 46 +++++++++++++++++++ 6 files changed, 106 insertions(+) create mode 100644 uitest/src/com/vaadin/tests/push/BasicPushStreaming.java create mode 100644 uitest/src/com/vaadin/tests/push/BasicPushWebsocket.java create mode 100644 uitest/src/com/vaadin/tests/push/PushTransportAnnotation.html diff --git a/server/src/com/vaadin/annotations/Push.java b/server/src/com/vaadin/annotations/Push.java index 58e70acf21..d5e42d6f60 100644 --- a/server/src/com/vaadin/annotations/Push.java +++ b/server/src/com/vaadin/annotations/Push.java @@ -22,6 +22,7 @@ import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; import com.vaadin.shared.communication.PushMode; +import com.vaadin.shared.ui.ui.Transport; import com.vaadin.ui.UI; /** @@ -46,4 +47,13 @@ public @interface Push { */ public PushMode value() default PushMode.AUTOMATIC; + /** + * Returns the transport type used for the push for the annotated UI. The + * default transport type when this annotation is present is + * {@link Transport#WEBSOCKET}. + * + * @return the transport type to use + */ + public Transport transport() default Transport.DEFAULT; + } diff --git a/server/src/com/vaadin/server/UIProvider.java b/server/src/com/vaadin/server/UIProvider.java index 0305b907e6..3e7c85aea9 100644 --- a/server/src/com/vaadin/server/UIProvider.java +++ b/server/src/com/vaadin/server/UIProvider.java @@ -25,6 +25,7 @@ import com.vaadin.annotations.Theme; import com.vaadin.annotations.Title; import com.vaadin.annotations.Widgetset; import com.vaadin.shared.communication.PushMode; +import com.vaadin.shared.ui.ui.Transport; import com.vaadin.ui.UI; public abstract class UIProvider implements Serializable { @@ -174,4 +175,27 @@ public abstract class UIProvider implements Serializable { return push.value(); } } + + /** + * Finds the {@link Transport} to use for a specific UI. If no transport is + * defined, null is returned. + *

+ * The default implementation uses the @{@link Push} annotation if it's + * defined for the UI class. + * + * @param event + * the UI create event with information about the UI and the + * current request. + * @return the transport type to use, or null if the default + * transport type should be used + */ + public Transport getPushTransport(UICreateEvent event) { + Push push = getAnnotationFor(event.getUIClass(), Push.class); + if (push == null) { + return null; + } else { + return push.transport(); + } + } + } diff --git a/server/src/com/vaadin/server/communication/UIInitHandler.java b/server/src/com/vaadin/server/communication/UIInitHandler.java index 9807ea6a9f..d4b0bc709f 100644 --- a/server/src/com/vaadin/server/communication/UIInitHandler.java +++ b/server/src/com/vaadin/server/communication/UIInitHandler.java @@ -39,6 +39,7 @@ import com.vaadin.server.VaadinService; import com.vaadin.server.VaadinSession; import com.vaadin.shared.ApplicationConstants; import com.vaadin.shared.communication.PushMode; +import com.vaadin.shared.ui.ui.Transport; import com.vaadin.shared.ui.ui.UIConstants; import com.vaadin.ui.UI; @@ -211,6 +212,11 @@ public abstract class UIInitHandler extends SynchronizedRequestHandler { } ui.getPushConfiguration().setPushMode(pushMode); + Transport transport = provider.getPushTransport(event); + if (transport != null) { + ui.getPushConfiguration().setTransport(transport); + } + // Set thread local here so it is available in init UI.setCurrent(ui); diff --git a/uitest/src/com/vaadin/tests/push/BasicPushStreaming.java b/uitest/src/com/vaadin/tests/push/BasicPushStreaming.java new file mode 100644 index 0000000000..37a8afd819 --- /dev/null +++ b/uitest/src/com/vaadin/tests/push/BasicPushStreaming.java @@ -0,0 +1,12 @@ +package com.vaadin.tests.push; + +import com.vaadin.annotations.Push; +import com.vaadin.shared.ui.ui.Transport; + +@Push(transport = Transport.STREAMING) +public class BasicPushStreaming extends BasicPush { + @Override + protected void setup(com.vaadin.server.VaadinRequest request) { + addComponent(new PushConfigurator(this)); + } +} diff --git a/uitest/src/com/vaadin/tests/push/BasicPushWebsocket.java b/uitest/src/com/vaadin/tests/push/BasicPushWebsocket.java new file mode 100644 index 0000000000..6fc27e8974 --- /dev/null +++ b/uitest/src/com/vaadin/tests/push/BasicPushWebsocket.java @@ -0,0 +1,8 @@ +package com.vaadin.tests.push; + +import com.vaadin.annotations.Push; +import com.vaadin.shared.ui.ui.Transport; + +@Push(transport = Transport.WEBSOCKET) +public class BasicPushWebsocket extends BasicPush { +} diff --git a/uitest/src/com/vaadin/tests/push/PushTransportAnnotation.html b/uitest/src/com/vaadin/tests/push/PushTransportAnnotation.html new file mode 100644 index 0000000000..854dd458bb --- /dev/null +++ b/uitest/src/com/vaadin/tests/push/PushTransportAnnotation.html @@ -0,0 +1,46 @@ + + + + + + +New Test + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
New Test
open/run/com.vaadin.tests.push.BasicPushStreaming?debug&restartApplication
waitForTextPresentPush connection established using streaming
assertTextNotPresentPush connection established using websocket
open/run/com.vaadin.tests.push.BasicPushWebsocket?debug&restartApplication
assertTextNotPresentPush connection established using streaming
waitForTextPresentPush connection established using websocket
+ + -- 2.39.5