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<String, Control>();
59 parameters = new HashMap<Object, Object>();
60 }
61
62
63
64
65
66
67
68
69
70
71 public int getMessageId()
72 {
73 return id;
74 }
75
76
77
78
79
80 public Message setMessageId( int id )
81 {
82 this.id = id;
83
84 return this;
85 }
86
87
88
89
90
91 public Map<String, Control> getControls()
92 {
93 return Collections.unmodifiableMap( controls );
94 }
95
96
97
98
99
100 public Control getControl( String oid )
101 {
102 return controls.get( oid );
103 }
104
105
106
107
108
109 public boolean hasControl( String oid )
110 {
111 return controls.containsKey( oid );
112 }
113
114
115
116
117
118 public Message addControl( Control control )
119 {
120 controls.put( control.getOid(), control );
121
122 return this;
123 }
124
125
126
127
128
129
130
131 public Message removeControl( Control control )
132 {
133 controls.remove( control.getOid() );
134
135 return this;
136 }
137
138
139
140
141
142
143
144
145
146 public MessageTypeEnum getType()
147 {
148 return type;
149 }
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165 public Object get( Object key )
166 {
167 return parameters.get( key );
168 }
169
170
171
172
173
174
175
176
177
178
179
180 public Object put( Object key, Object value )
181 {
182 return parameters.put( key, value );
183 }
184
185
186
187
188
189
190
191
192
193
194 public boolean equals( Object obj )
195 {
196 if ( obj == this )
197 {
198 return true;
199 }
200
201 if ( ( obj == null ) || !( obj instanceof Message ) )
202 {
203 return false;
204 }
205
206 Message msg = ( Message ) obj;
207
208 if ( msg.getMessageId() != id )
209 {
210 return false;
211 }
212
213 if ( msg.getType() != type )
214 {
215 return false;
216 }
217
218 Map<String, Control> controls = msg.getControls();
219
220 if ( controls.size() != this.controls.size() )
221 {
222 return false;
223 }
224
225 for ( String key : this.controls.keySet() )
226 {
227 if ( !controls.containsKey( key ) )
228 {
229 return false;
230 }
231 }
232
233 return true;
234 }
235
236
237
238
239
240
241 public int hashCode()
242 {
243 int hash = 37;
244 hash = hash * 17 + id;
245 hash = hash * 17 + ( type == null ? 0 : type.hashCode() );
246 hash = hash * 17 + ( parameters == null ? 0 : parameters.hashCode() );
247 hash = hash * 17 + ( controls == null ? 0 : controls.hashCode() );
248
249 return hash;
250 }
251
252
253
254
255
256 public Message addAllControls( Control[] controls )
257 {
258 for ( Control c : controls )
259 {
260 this.controls.put( c.getOid(), c );
261 }
262
263 return this;
264 }
265
266
267
268
269
270
271
272 public String toString( String message )
273 {
274 StringBuilder sb = new StringBuilder();
275
276 sb.append( "MessageType : " ).append( type ).append( '\n' );
277 sb.append( "Message ID : " ).append( id ).append( '\n' );
278
279 sb.append( message );
280
281 if ( controls != null )
282 {
283 for ( Control control : controls.values() )
284 {
285 sb.append( control );
286 }
287 }
288
289 return sb.toString();
290 }
291 }