1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 package org.apache.directory.api.ldap.model.message;
21
22
23 import java.util.Collections;
24 import java.util.HashMap;
25 import java.util.Map;
26
27
28
29
30
31
32
33 public abstract class AbstractMessage implements Message
34 {
35
36 protected final Map<String, Control> controls;
37
38
39 private int id;
40
41
42 private final MessageTypeEnum type;
43
44
45 private final Map<Object, Object> parameters;
46
47
48
49
50
51
52
53
54 protected AbstractMessage( final int id, final MessageTypeEnum type )
55 {
56 this.id = id;
57 this.type = type;
58 controls = new HashMap<>();
59 parameters = new HashMap<>();
60 }
61
62
63
64
65
66
67
68
69
70
71 @Override
72 public int getMessageId()
73 {
74 return id;
75 }
76
77
78
79
80
81 @Override
82 public Message setMessageId( int id )
83 {
84 this.id = id;
85
86 return this;
87 }
88
89
90
91
92
93 @Override
94 public Map<String, Control> getControls()
95 {
96 return Collections.unmodifiableMap( controls );
97 }
98
99
100
101
102
103 @Override
104 public Control getControl( String oid )
105 {
106 return controls.get( oid );
107 }
108
109
110
111
112
113 @Override
114 public boolean hasControl( String oid )
115 {
116 return controls.containsKey( oid );
117 }
118
119
120
121
122
123 @Override
124 public Message addControl( Control control )
125 {
126 controls.put( control.getOid(), control );
127
128 return this;
129 }
130
131
132
133
134
135
136
137 @Override
138 public Message removeControl( Control control )
139 {
140 controls.remove( control.getOid() );
141
142 return this;
143 }
144
145
146
147
148
149
150
151
152
153 @Override
154 public MessageTypeEnum getType()
155 {
156 return type;
157 }
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173 @Override
174 public Object get( Object key )
175 {
176 return parameters.get( key );
177 }
178
179
180
181
182
183
184
185
186
187
188
189 @Override
190 public Object put( Object key, Object value )
191 {
192 return parameters.put( key, value );
193 }
194
195
196
197
198
199
200
201
202
203
204 @Override
205 public boolean equals( Object obj )
206 {
207 if ( obj == this )
208 {
209 return true;
210 }
211
212 if ( ( obj == null ) || !( obj instanceof Message ) )
213 {
214 return false;
215 }
216
217 Message msg = ( Message ) obj;
218
219 if ( msg.getMessageId() != id )
220 {
221 return false;
222 }
223
224 if ( msg.getType() != type )
225 {
226 return false;
227 }
228
229 Map<String, Control> controlMap = msg.getControls();
230
231 if ( controlMap.size() != controls.size() )
232 {
233 return false;
234 }
235
236 for ( String key : controls.keySet() )
237 {
238 if ( !controlMap.containsKey( key ) )
239 {
240 return false;
241 }
242 }
243
244 return true;
245 }
246
247
248
249
250
251
252 @Override
253 public int hashCode()
254 {
255 int hash = 37;
256 hash = hash * 17 + id;
257 hash = hash * 17 + ( type == null ? 0 : type.hashCode() );
258 hash = hash * 17 + ( parameters == null ? 0 : parameters.hashCode() );
259 hash = hash * 17 + ( controls == null ? 0 : controls.hashCode() );
260
261 return hash;
262 }
263
264
265
266
267
268 @Override
269 public Message addAllControls( Control[] controls )
270 {
271 for ( Control c : controls )
272 {
273 this.controls.put( c.getOid(), c );
274 }
275
276 return this;
277 }
278
279
280
281
282
283
284
285
286 public String toString( String message )
287 {
288 StringBuilder sb = new StringBuilder();
289
290 sb.append( "MessageType : " ).append( type ).append( '\n' );
291 sb.append( "Message ID : " ).append( id ).append( '\n' );
292
293 sb.append( message );
294
295 if ( controls != null )
296 {
297 for ( Control control : controls.values() )
298 {
299 sb.append( control );
300 }
301 }
302
303 return sb.toString();
304 }
305 }