View Javadoc

1   //
2   //  ========================================================================
3   //  Copyright (c) 1995-2016 Mort Bay Consulting Pty. Ltd.
4   //  ------------------------------------------------------------------------
5   //  All rights reserved. This program and the accompanying materials
6   //  are made available under the terms of the Eclipse Public License v1.0
7   //  and Apache License v2.0 which accompanies this distribution.
8   //
9   //      The Eclipse Public License is available at
10  //      http://www.eclipse.org/legal/epl-v10.html
11  //
12  //      The Apache License v2.0 is available at
13  //      http://www.opensource.org/licenses/apache2.0.php
14  //
15  //  You may elect to redistribute this code under either of these licenses.
16  //  ========================================================================
17  //
18  
19  package org.eclipse.jetty.websocket.jsr356;
20  
21  import javax.websocket.MessageHandler;
22  import javax.websocket.MessageHandler.Partial;
23  import javax.websocket.MessageHandler.Whole;
24  
25  import org.eclipse.jetty.websocket.jsr356.metadata.MessageHandlerMetadata;
26  
27  /**
28   * Expose a {@link MessageHandler} instance along with its associated {@link MessageHandlerMetadata} and {@link DecoderFactory.Wrapper}
29   */
30  public class MessageHandlerWrapper
31  {
32      private final MessageHandler handler;
33      private final MessageHandlerMetadata metadata;
34      private final DecoderFactory.Wrapper decoder;
35  
36      public MessageHandlerWrapper(MessageHandler handler, MessageHandlerMetadata metadata, DecoderFactory.Wrapper decoder)
37      {
38          this.handler = handler;
39          this.metadata = metadata;
40          this.decoder = decoder;
41      }
42  
43      public DecoderFactory.Wrapper getDecoder()
44      {
45          return decoder;
46      }
47  
48      public MessageHandler getHandler()
49      {
50          return handler;
51      }
52  
53      public MessageHandlerMetadata getMetadata()
54      {
55          return metadata;
56      }
57  
58      public boolean isMessageType(Class<?> msgType)
59      {
60          return msgType.isAssignableFrom(metadata.getMessageClass());
61      }
62  
63      /**
64       * Flag for a onMessage() that wants partial messages.
65       * <p>
66       * This indicates the use of MessageHandler.{@link Partial}.
67       * 
68       * @return true for use of MessageHandler.{@link Partial}, false for use of MessageHandler.{@link Whole}
69       */
70      public boolean wantsPartialMessages()
71      {
72          return metadata.isPartialSupported();
73      }
74  
75      /**
76       * Flag for a onMessage() method that wants MessageHandler.{@link Whole} with a Decoder that is based on {@link javax.websocket.Decoder.TextStream} or {@link javax.websocket.Decoder.BinaryStream}
77       * 
78       * @return true for Streaming based Decoder, false for normal decoder for whole messages.
79       */
80      public boolean wantsStreams()
81      {
82          return decoder.getMetadata().isStreamed();
83      }
84  }