1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.eclipse.jetty.websocket.jsr356.annotations;
20
21 import java.io.Reader;
22
23 import javax.websocket.OnMessage;
24
25 import org.eclipse.jetty.websocket.common.events.annotated.InvalidSignatureException;
26 import org.eclipse.jetty.websocket.jsr356.annotations.Param.Role;
27 import org.eclipse.jetty.websocket.jsr356.decoders.BooleanDecoder;
28 import org.eclipse.jetty.websocket.jsr356.decoders.ByteDecoder;
29 import org.eclipse.jetty.websocket.jsr356.decoders.CharacterDecoder;
30 import org.eclipse.jetty.websocket.jsr356.decoders.DoubleDecoder;
31 import org.eclipse.jetty.websocket.jsr356.decoders.FloatDecoder;
32 import org.eclipse.jetty.websocket.jsr356.decoders.IntegerDecoder;
33 import org.eclipse.jetty.websocket.jsr356.decoders.LongDecoder;
34 import org.eclipse.jetty.websocket.jsr356.decoders.ReaderDecoder;
35 import org.eclipse.jetty.websocket.jsr356.decoders.ShortDecoder;
36 import org.eclipse.jetty.websocket.jsr356.decoders.StringDecoder;
37
38
39
40
41 public class JsrParamIdText extends JsrParamIdOnMessage implements IJsrParamId
42 {
43 public static final IJsrParamId INSTANCE = new JsrParamIdText();
44
45 private boolean isMessageRoleAssigned(JsrCallable callable)
46 {
47 if (callable instanceof OnMessageCallable)
48 {
49 OnMessageCallable onmessage = (OnMessageCallable)callable;
50 return onmessage.isMessageRoleAssigned();
51 }
52 return false;
53 }
54
55 @Override
56 public boolean process(Param param, JsrCallable callable) throws InvalidSignatureException
57 {
58 if (super.process(param,callable))
59 {
60
61 return true;
62 }
63
64
65 if (param.type.isAssignableFrom(String.class))
66 {
67 param.bind(Role.MESSAGE_TEXT);
68 callable.setDecoderClass(StringDecoder.class);
69 return true;
70 }
71
72
73 if (param.type.isAssignableFrom(Boolean.class))
74 {
75 assertPartialMessageSupportDisabled(param,callable);
76 param.bind(Role.MESSAGE_TEXT);
77 callable.setDecoderClass(BooleanDecoder.class);
78 return true;
79 }
80 if (param.type.isAssignableFrom(Byte.class) || (param.type == Byte.TYPE))
81 {
82 assertPartialMessageSupportDisabled(param,callable);
83 param.bind(Role.MESSAGE_TEXT);
84 callable.setDecoderClass(ByteDecoder.class);
85 return true;
86 }
87 if (param.type.isAssignableFrom(Character.class) || (param.type == Character.TYPE))
88 {
89 assertPartialMessageSupportDisabled(param,callable);
90 param.bind(Role.MESSAGE_TEXT);
91 callable.setDecoderClass(CharacterDecoder.class);
92 return true;
93 }
94 if (param.type.isAssignableFrom(Double.class) || (param.type == Double.TYPE))
95 {
96 assertPartialMessageSupportDisabled(param,callable);
97 param.bind(Role.MESSAGE_TEXT);
98 callable.setDecoderClass(DoubleDecoder.class);
99 return true;
100 }
101 if (param.type.isAssignableFrom(Float.class) || (param.type == Float.TYPE))
102 {
103 assertPartialMessageSupportDisabled(param,callable);
104 param.bind(Role.MESSAGE_TEXT);
105 callable.setDecoderClass(FloatDecoder.class);
106 return true;
107 }
108 if (param.type.isAssignableFrom(Integer.class) || (param.type == Integer.TYPE))
109 {
110 assertPartialMessageSupportDisabled(param,callable);
111 param.bind(Role.MESSAGE_TEXT);
112 callable.setDecoderClass(IntegerDecoder.class);
113 return true;
114 }
115 if (param.type.isAssignableFrom(Long.class) || (param.type == Long.TYPE))
116 {
117 assertPartialMessageSupportDisabled(param,callable);
118 param.bind(Role.MESSAGE_TEXT);
119 callable.setDecoderClass(LongDecoder.class);
120 return true;
121 }
122 if (param.type.isAssignableFrom(Short.class) || (param.type == Short.TYPE))
123 {
124 assertPartialMessageSupportDisabled(param,callable);
125 param.bind(Role.MESSAGE_TEXT);
126 callable.setDecoderClass(ShortDecoder.class);
127 return true;
128 }
129
130
131 if (param.type.isAssignableFrom(Reader.class))
132 {
133 assertPartialMessageSupportDisabled(param,callable);
134 param.bind(Role.MESSAGE_TEXT_STREAM);
135 callable.setDecoderClass(ReaderDecoder.class);
136 return true;
137 }
138
139
140
141
142
143
144 if (param.type == Boolean.TYPE)
145 {
146 if (isMessageRoleAssigned(callable))
147 {
148 param.bind(Role.MESSAGE_PARTIAL_FLAG);
149 }
150 else
151 {
152 param.bind(Role.MESSAGE_TEXT);
153 callable.setDecoderClass(BooleanDecoder.class);
154 }
155 return true;
156 }
157
158 return false;
159 }
160 }