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