1 //
2 // ========================================================================
3 // Copyright (c) 1995-2015 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.annotations;
20
21 import org.eclipse.jetty.websocket.common.events.annotated.InvalidSignatureException;
22 import org.eclipse.jetty.websocket.jsr356.annotations.Param.Role;
23 import org.eclipse.jetty.websocket.jsr356.metadata.DecoderMetadata;
24
25 /**
26 * Param handling for Text or Binary @{@link OnMessage} parameters declared as {@link Decoder}s
27 */
28 public class JsrParamIdDecoder extends JsrParamIdOnMessage implements IJsrParamId
29 {
30 private final DecoderMetadata metadata;
31
32 public JsrParamIdDecoder(DecoderMetadata metadata)
33 {
34 this.metadata = metadata;
35 }
36
37 @Override
38 public boolean process(Param param, JsrCallable callable) throws InvalidSignatureException
39 {
40 if (param.type.isAssignableFrom(metadata.getObjectType()))
41 {
42 assertPartialMessageSupportDisabled(param,callable);
43
44 switch (metadata.getMessageType())
45 {
46 case TEXT:
47 if (metadata.isStreamed())
48 {
49 param.bind(Role.MESSAGE_TEXT_STREAM);
50 }
51 else
52 {
53 param.bind(Role.MESSAGE_TEXT);
54 }
55 break;
56 case BINARY:
57 if (metadata.isStreamed())
58 {
59 param.bind(Role.MESSAGE_BINARY_STREAM);
60 }
61 else
62 {
63 param.bind(Role.MESSAGE_BINARY);
64 }
65 break;
66 case PONG:
67 param.bind(Role.MESSAGE_PONG);
68 break;
69 }
70 callable.setDecoderClass(metadata.getCoderClass());
71 return true;
72 }
73 return false;
74 }
75 }