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.entry;
21
22
23 import java.io.IOException;
24 import java.io.ObjectInput;
25 import java.io.ObjectOutput;
26
27 import org.apache.directory.api.i18n.I18n;
28 import org.apache.directory.api.ldap.model.exception.LdapException;
29 import org.apache.directory.api.ldap.model.exception.LdapInvalidAttributeValueException;
30 import org.apache.directory.api.ldap.model.schema.AttributeType;
31 import org.apache.directory.api.ldap.model.schema.SchemaManager;
32 import org.slf4j.Logger;
33 import org.slf4j.LoggerFactory;
34
35
36
37
38
39
40
41
42 public class DefaultModification implements Modification
43 {
44
45 private ModificationOperation operation;
46
47
48 private Attribute attribute;
49
50
51 private AttributeType attributeType;
52
53
54 protected static final Logger LOG = LoggerFactory.getLogger( Modification.class );
55
56
57
58
59
60 public DefaultModification()
61 {
62 }
63
64
65
66
67
68
69
70
71 public DefaultModification( ModificationOperation operation, Attribute attribute )
72 {
73 this.operation = operation;
74 this.attribute = attribute;
75 }
76
77
78
79
80
81
82
83
84
85 public DefaultModification( ModificationOperation operation, String attributeId, String... values )
86 {
87 this.operation = operation;
88 this.attribute = new DefaultAttribute( attributeId, values );
89 }
90
91
92
93
94
95
96
97
98
99 public DefaultModification( ModificationOperation operation, String attributeId, byte[]... values )
100 {
101 this.operation = operation;
102 this.attribute = new DefaultAttribute( attributeId, values );
103 }
104
105
106
107
108
109
110
111
112
113 public DefaultModification( ModificationOperation operation, String attributeId, Value<?>... values )
114 {
115 this.operation = operation;
116 this.attribute = new DefaultAttribute( attributeId, values );
117 }
118
119
120
121
122
123
124
125
126 public DefaultModification( ModificationOperation operation, String attributeId )
127 {
128 this.operation = operation;
129 this.attribute = new DefaultAttribute( attributeId );
130 }
131
132
133
134
135
136
137
138
139
140 public DefaultModification( ModificationOperation operation, AttributeType attributeType, String... values )
141 throws LdapInvalidAttributeValueException
142 {
143 this.operation = operation;
144 this.attribute = new DefaultAttribute( attributeType, values );
145 }
146
147
148
149
150
151
152
153
154
155 public DefaultModification( ModificationOperation operation, AttributeType attributeType, byte[]... values )
156 throws LdapInvalidAttributeValueException
157 {
158 this.operation = operation;
159 this.attribute = new DefaultAttribute( attributeType, values );
160 }
161
162
163
164
165
166
167
168
169
170 public DefaultModification( ModificationOperation operation, AttributeType attributeType, Value<?>... values )
171 throws LdapInvalidAttributeValueException
172 {
173 this.operation = operation;
174 this.attribute = new DefaultAttribute( attributeType, values );
175 }
176
177
178
179
180
181
182
183
184 public DefaultModification( ModificationOperation operation, AttributeType attributeType )
185 throws LdapInvalidAttributeValueException
186 {
187 this.operation = operation;
188 this.attribute = new DefaultAttribute( attributeType );
189 }
190
191
192
193
194
195
196
197
198 public DefaultModification( SchemaManager schemaManager, Modification modification )
199 {
200 operation = modification.getOperation();
201
202 Attribute modAttribute = modification.getAttribute();
203
204 try
205 {
206 AttributeType at = modAttribute.getAttributeType();
207
208 if ( at == null )
209 {
210 at = schemaManager.lookupAttributeTypeRegistry( modAttribute.getId() );
211 }
212
213 attribute = new DefaultAttribute( at, modAttribute );
214 }
215 catch ( LdapException ne )
216 {
217
218 LOG.error( I18n.err( I18n.ERR_04472, modAttribute.getId() ) );
219 }
220 }
221
222
223
224
225
226 public ModificationOperation getOperation()
227 {
228 return operation;
229 }
230
231
232
233
234
235 public void setOperation( int operation )
236 {
237 this.operation = ModificationOperation.getOperation( operation );
238 }
239
240
241
242
243
244 public void setOperation( ModificationOperation operation )
245 {
246 this.operation = operation;
247 }
248
249
250
251
252
253 public Attribute getAttribute()
254 {
255 return attribute;
256 }
257
258
259
260
261
262 public void setAttribute( Attribute attribute )
263 {
264 this.attribute = attribute;
265 }
266
267
268
269
270
271 public void apply( AttributeType attributeType ) throws LdapInvalidAttributeValueException
272 {
273 this.attributeType = attributeType;
274
275 if ( attribute != null )
276 {
277 attribute.apply( attributeType );
278 }
279 }
280
281
282
283
284
285 public AttributeType getAttributeType()
286 {
287 return attributeType;
288 }
289
290
291
292
293
294
295 public boolean equals( Object that )
296 {
297
298 if ( this == that )
299 {
300 return true;
301 }
302
303 if ( !( that instanceof Modification ) )
304 {
305 return false;
306 }
307
308 Modification otherModification = ( Modification ) that;
309
310
311 if ( operation != otherModification.getOperation() )
312 {
313 return false;
314 }
315
316
317 if ( attribute == null )
318 {
319 return otherModification.getAttribute() == null;
320 }
321
322 return attribute.equals( otherModification.getAttribute() );
323 }
324
325
326
327
328
329
330 public int hashCode()
331 {
332 int h = 37;
333
334 h += h * 17 + operation.getValue();
335 h += h * 17 + attribute.hashCode();
336
337 return h;
338 }
339
340
341
342
343
344 public void readExternal( ObjectInput in ) throws IOException, ClassNotFoundException
345 {
346
347 operation = ModificationOperation.getOperation( in.readInt() );
348
349
350 boolean hasAttribute = in.readBoolean();
351
352 if ( hasAttribute )
353 {
354 attribute = new DefaultAttribute();
355 attribute.readExternal( in );
356 }
357 }
358
359
360
361
362
363 public void writeExternal( ObjectOutput out ) throws IOException
364 {
365
366 out.writeInt( operation.getValue() );
367
368
369 if ( attribute != null )
370 {
371 out.writeBoolean( true );
372 attribute.writeExternal( out );
373 }
374 else
375 {
376 out.writeBoolean( false );
377 }
378
379 out.flush();
380 }
381
382
383
384
385
386 public DefaultModification clone()
387 {
388 try
389 {
390 DefaultModification clone = ( DefaultModification ) super.clone();
391
392 clone.attribute = this.attribute.clone();
393 return clone;
394 }
395 catch ( CloneNotSupportedException cnse )
396 {
397 return null;
398 }
399 }
400
401
402
403
404
405 public String toString()
406 {
407 StringBuilder sb = new StringBuilder();
408
409 sb.append( "Modification: " ).
410 append( operation ).
411 append( "\n" ).
412 append( ", attribute : " ).
413 append( attribute );
414
415 return sb.toString();
416 }
417 }