This is an automated email from the ASF dual-hosted git repository.

mgrigorov pushed a commit to branch WICKET-6649-downport-for-wicket-8.x
in repository https://gitbox.apache.org/repos/asf/wicket.git

commit b23ed1160ec1c3660b8e21cbe1d3dde6217a6be3
Author: Martin Tzvetanov Grigorov <[email protected]>
AuthorDate: Fri Apr 5 09:47:30 2019 +0300

    WICKET-6649 Store the applicationName, sessionId and key in WebSocket 
Text/BinaryMessage and in IWebSocketConnection
    
    Downport of 12b1fb227564c22f4887dea23610be7cb8c5d977 for Wicket 8.x.
    It manages to trick maven-clirr-plugin (binary compatibility checker) by 
using dummy values for Application, session id and IKey
---
 .../ws/api/AbstractWebSocketConnection.java        | 25 +++++++++++++++
 .../ws/api/AbstractWebSocketProcessor.java         |  6 ++--
 .../protocol/ws/api/IWebSocketConnection.java      |  1 +
 .../protocol/ws/api/message/BinaryMessage.java     | 36 +++++++++++++++++++---
 .../protocol/ws/api/message/TextMessage.java       | 31 +++++++++++++++++--
 .../ws/util/tester/TestWebSocketConnection.java    | 26 ++++++++++++++++
 .../ws/util/tester/TestWebSocketProcessor.java     |  2 +-
 .../ws/util/tester/SendPayloadWithContextTest.java |  7 ++++-
 8 files changed, 123 insertions(+), 11 deletions(-)

diff --git 
a/wicket-native-websocket/wicket-native-websocket-core/src/main/java/org/apache/wicket/protocol/ws/api/AbstractWebSocketConnection.java
 
b/wicket-native-websocket/wicket-native-websocket-core/src/main/java/org/apache/wicket/protocol/ws/api/AbstractWebSocketConnection.java
index 02ae01c..2ccd884 100644
--- 
a/wicket-native-websocket/wicket-native-websocket-core/src/main/java/org/apache/wicket/protocol/ws/api/AbstractWebSocketConnection.java
+++ 
b/wicket-native-websocket/wicket-native-websocket-core/src/main/java/org/apache/wicket/protocol/ws/api/AbstractWebSocketConnection.java
@@ -16,7 +16,9 @@
  */
 package org.apache.wicket.protocol.ws.api;
 
+import org.apache.wicket.Application;
 import org.apache.wicket.protocol.ws.api.message.IWebSocketPushMessage;
+import org.apache.wicket.protocol.ws.api.registry.IKey;
 import org.apache.wicket.util.lang.Args;
 
 /**
@@ -24,6 +26,11 @@ import org.apache.wicket.util.lang.Args;
  */
 public abstract class AbstractWebSocketConnection implements 
IWebSocketConnection
 {
+
+       private final String applicationName;
+       private final String sessionId;
+       private final IKey key;
+
        private final AbstractWebSocketProcessor webSocketProcessor;
 
        /**
@@ -34,6 +41,9 @@ public abstract class AbstractWebSocketConnection implements 
IWebSocketConnectio
         */
        public AbstractWebSocketConnection(AbstractWebSocketProcessor 
webSocketProcessor)
        {
+               this.applicationName = 
webSocketProcessor.getApplication().getName();
+               this.sessionId = webSocketProcessor.getSessionId();
+               this.key = webSocketProcessor.getRegistryKey();
                this.webSocketProcessor = Args.notNull(webSocketProcessor, 
"webSocketProcessor");
        }
 
@@ -42,4 +52,19 @@ public abstract class AbstractWebSocketConnection implements 
IWebSocketConnectio
        {
                webSocketProcessor.broadcastMessage(message);
        }
+
+       public Application getApplication()
+       {
+               return Application.get(applicationName);
+       }
+
+       public String getSessionId()
+       {
+               return sessionId;
+       }
+
+       public IKey getKey()
+       {
+               return key;
+       }
 }
diff --git 
a/wicket-native-websocket/wicket-native-websocket-core/src/main/java/org/apache/wicket/protocol/ws/api/AbstractWebSocketProcessor.java
 
b/wicket-native-websocket/wicket-native-websocket-core/src/main/java/org/apache/wicket/protocol/ws/api/AbstractWebSocketProcessor.java
index e502d16..d1f24de 100644
--- 
a/wicket-native-websocket/wicket-native-websocket-core/src/main/java/org/apache/wicket/protocol/ws/api/AbstractWebSocketProcessor.java
+++ 
b/wicket-native-websocket/wicket-native-websocket-core/src/main/java/org/apache/wicket/protocol/ws/api/AbstractWebSocketProcessor.java
@@ -145,13 +145,13 @@ public abstract class AbstractWebSocketProcessor 
implements IWebSocketProcessor
        @Override
        public void onMessage(final String message)
        {
-               broadcastMessage(new TextMessage(message));
+               broadcastMessage(new TextMessage(getApplication(), 
getSessionId(), getRegistryKey(), message));
        }
 
        @Override
        public void onMessage(byte[] data, int offset, int length)
        {
-               BinaryMessage binaryMessage = new BinaryMessage(data, offset, 
length);
+               BinaryMessage binaryMessage = new 
BinaryMessage(getApplication(), getSessionId(), getRegistryKey(), data, offset, 
length);
                broadcastMessage(binaryMessage);
        }
 
@@ -375,7 +375,7 @@ public abstract class AbstractWebSocketProcessor implements 
IWebSocketProcessor
                return payload;
        }
 
-       private IKey getRegistryKey()
+       protected IKey getRegistryKey()
        {
                IKey key;
                if (Strings.isEmpty(resourceName))
diff --git 
a/wicket-native-websocket/wicket-native-websocket-core/src/main/java/org/apache/wicket/protocol/ws/api/IWebSocketConnection.java
 
b/wicket-native-websocket/wicket-native-websocket-core/src/main/java/org/apache/wicket/protocol/ws/api/IWebSocketConnection.java
index 7a492df..3e96ed9 100644
--- 
a/wicket-native-websocket/wicket-native-websocket-core/src/main/java/org/apache/wicket/protocol/ws/api/IWebSocketConnection.java
+++ 
b/wicket-native-websocket/wicket-native-websocket-core/src/main/java/org/apache/wicket/protocol/ws/api/IWebSocketConnection.java
@@ -17,6 +17,7 @@
 package org.apache.wicket.protocol.ws.api;
 
 import java.io.IOException;
+
 import org.apache.wicket.protocol.ws.api.message.IWebSocketPushMessage;
 
 /**
diff --git 
a/wicket-native-websocket/wicket-native-websocket-core/src/main/java/org/apache/wicket/protocol/ws/api/message/BinaryMessage.java
 
b/wicket-native-websocket/wicket-native-websocket-core/src/main/java/org/apache/wicket/protocol/ws/api/message/BinaryMessage.java
index 9728e2b..17073eb 100644
--- 
a/wicket-native-websocket/wicket-native-websocket-core/src/main/java/org/apache/wicket/protocol/ws/api/message/BinaryMessage.java
+++ 
b/wicket-native-websocket/wicket-native-websocket-core/src/main/java/org/apache/wicket/protocol/ws/api/message/BinaryMessage.java
@@ -16,29 +16,57 @@
  */
 package org.apache.wicket.protocol.ws.api.message;
 
+import org.apache.wicket.Application;
+import org.apache.wicket.Session;
+import org.apache.wicket.mock.MockApplication;
+import org.apache.wicket.protocol.ws.api.registry.IKey;
+
 /**
  * A {@link IWebSocketMessage message} with binary data
  *
  * @since 6.0
  */
-public class BinaryMessage implements IWebSocketMessage
+public class BinaryMessage extends AbstractClientMessage
 {
        private final byte[] data;
        private final int offset;
        private final int length;
 
        /**
-        * Constructor.
+        * Not used by Wicket since 8.5.0!
         *
         * @param data
         *      the binary message from the client
         * @param offset
         *      the offset to read from
         * @param length
-        *      how much data to read
+        *              the length of the data to read
         */
+       @Deprecated
        public BinaryMessage(byte[] data, int offset, int length)
        {
+               this(new MockApplication(), "", new IKey() {}, data, offset, 
length);
+       }
+
+       /**
+        * Constructor.
+        *
+        * @param application
+        *      the Wicket application
+        * @param sessionId
+        *      the id of the http session
+        * @param key
+        *      the page id or resource name
+        * @param data
+        *      the binary message from the client
+        * @param offset
+        *      the offset to read from
+        * @param length
+        *              the length of the data to read
+        */
+       public BinaryMessage(Application application, String sessionId, IKey 
key, byte[] data, int offset, int length)
+       {
+               super(application, sessionId, key);
                this.data = data;
                this.offset = offset;
                this.length = length;
@@ -58,4 +86,4 @@ public class BinaryMessage implements IWebSocketMessage
        {
                return length;
        }
-}
\ No newline at end of file
+}
diff --git 
a/wicket-native-websocket/wicket-native-websocket-core/src/main/java/org/apache/wicket/protocol/ws/api/message/TextMessage.java
 
b/wicket-native-websocket/wicket-native-websocket-core/src/main/java/org/apache/wicket/protocol/ws/api/message/TextMessage.java
index 5893b05..216b74e 100644
--- 
a/wicket-native-websocket/wicket-native-websocket-core/src/main/java/org/apache/wicket/protocol/ws/api/message/TextMessage.java
+++ 
b/wicket-native-websocket/wicket-native-websocket-core/src/main/java/org/apache/wicket/protocol/ws/api/message/TextMessage.java
@@ -16,6 +16,9 @@
  */
 package org.apache.wicket.protocol.ws.api.message;
 
+import org.apache.wicket.Application;
+import org.apache.wicket.mock.MockApplication;
+import org.apache.wicket.protocol.ws.api.registry.IKey;
 import org.apache.wicket.util.lang.Args;
 
 /**
@@ -23,12 +26,36 @@ import org.apache.wicket.util.lang.Args;
  *
  * @since 6.0
  */
-public class TextMessage implements IWebSocketMessage
+public class TextMessage extends AbstractClientMessage
 {
        private final CharSequence text;
 
-       public TextMessage(final CharSequence text)
+       /**
+        * Not used by Wicket since 8.5.0!
+        *
+        * @param text
+        *              the message sent from the client
+        */
+       @Deprecated
+       public TextMessage(CharSequence text)
        {
+               this(new MockApplication(), "", new IKey() {}, text);
+       }
+
+       /**
+        *
+        * @param application
+        *      the Wicket application
+        * @param sessionId
+        *      the id of the http session
+        * @param key
+        *      the page id or resource name
+        * @param text
+        *      the message sent from the client
+        */
+       public TextMessage(Application application, String sessionId, IKey key, 
CharSequence text)
+       {
+               super(application, sessionId, key);
                this.text = Args.notEmpty(text, "text");
        }
 
diff --git 
a/wicket-native-websocket/wicket-native-websocket-core/src/main/java/org/apache/wicket/protocol/ws/util/tester/TestWebSocketConnection.java
 
b/wicket-native-websocket/wicket-native-websocket-core/src/main/java/org/apache/wicket/protocol/ws/util/tester/TestWebSocketConnection.java
index a5c1544..5be35ba 100644
--- 
a/wicket-native-websocket/wicket-native-websocket-core/src/main/java/org/apache/wicket/protocol/ws/util/tester/TestWebSocketConnection.java
+++ 
b/wicket-native-websocket/wicket-native-websocket-core/src/main/java/org/apache/wicket/protocol/ws/util/tester/TestWebSocketConnection.java
@@ -18,7 +18,10 @@ package org.apache.wicket.protocol.ws.util.tester;
 
 import java.io.IOException;
 
+import org.apache.wicket.Application;
+import org.apache.wicket.protocol.http.WebApplication;
 import org.apache.wicket.protocol.ws.api.IWebSocketConnection;
+import org.apache.wicket.protocol.ws.api.registry.IKey;
 
 /**
  * A WebSocketConnection used for the testing.
@@ -27,8 +30,18 @@ import 
org.apache.wicket.protocol.ws.api.IWebSocketConnection;
  */
 abstract class TestWebSocketConnection implements IWebSocketConnection
 {
+       private final WebApplication application;
+       private final String sessionId;
+       private final IKey registryKey;
        private boolean isOpen = true;
 
+       public TestWebSocketConnection(WebApplication application, String 
sessionId, IKey registryKey)
+       {
+               this.application = application;
+               this.sessionId = sessionId;
+               this.registryKey = registryKey;
+       }
+
        @Override
        public boolean isOpen()
        {
@@ -85,5 +98,18 @@ abstract class TestWebSocketConnection implements 
IWebSocketConnection
                }
        }
 
+       public Application getApplication()
+       {
+               return application;
+       }
+
+       public String getSessionId()
+       {
+               return sessionId;
+       }
 
+       public IKey getKey()
+       {
+               return registryKey;
+       }
 }
diff --git 
a/wicket-native-websocket/wicket-native-websocket-core/src/main/java/org/apache/wicket/protocol/ws/util/tester/TestWebSocketProcessor.java
 
b/wicket-native-websocket/wicket-native-websocket-core/src/main/java/org/apache/wicket/protocol/ws/util/tester/TestWebSocketProcessor.java
index f7b55e1..e48b908 100644
--- 
a/wicket-native-websocket/wicket-native-websocket-core/src/main/java/org/apache/wicket/protocol/ws/util/tester/TestWebSocketProcessor.java
+++ 
b/wicket-native-websocket/wicket-native-websocket-core/src/main/java/org/apache/wicket/protocol/ws/util/tester/TestWebSocketProcessor.java
@@ -126,7 +126,7 @@ abstract class TestWebSocketProcessor extends 
AbstractWebSocketProcessor
        @Override
        public void onOpen(Object connection)
        {
-               onConnect(new TestWebSocketConnection() {
+               onConnect(new TestWebSocketConnection(getApplication(), 
getSessionId(), getRegistryKey()) {
 
                        @Override
                        protected void onOutMessage(String message)
diff --git 
a/wicket-native-websocket/wicket-native-websocket-core/src/test/java/org/apache/wicket/protocol/ws/util/tester/SendPayloadWithContextTest.java
 
b/wicket-native-websocket/wicket-native-websocket-core/src/test/java/org/apache/wicket/protocol/ws/util/tester/SendPayloadWithContextTest.java
index db4f6c3..6b7a6a5 100644
--- 
a/wicket-native-websocket/wicket-native-websocket-core/src/test/java/org/apache/wicket/protocol/ws/util/tester/SendPayloadWithContextTest.java
+++ 
b/wicket-native-websocket/wicket-native-websocket-core/src/test/java/org/apache/wicket/protocol/ws/util/tester/SendPayloadWithContextTest.java
@@ -96,8 +96,13 @@ public class SendPayloadWithContextTest extends Assert
                        add(new WebSocketBehavior()
                        {
                                @Override
-                               protected void 
onMessage(WebSocketRequestHandler handler, TextMessage ignored)
+                               protected void 
onMessage(WebSocketRequestHandler handler, TextMessage message)
                                {
+                                       assertNotNull("The application must be 
available", message.getApplication());
+                                       assertNotNull("The session id must be 
available", message.getSessionId());
+                                       assertNotNull("The key must be 
available", message.getKey());
+                                       assertNotNull("The text must be set", 
message.getText());
+
                                        // send an outbound message with the 
current context encoded as String
                                        
handler.push(String.valueOf(context.get()));
                                }

Reply via email to