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.schema;
21
22
23 import java.util.List;
24 import java.util.Map;
25
26 import org.apache.directory.api.ldap.model.constants.MetaSchemaConstants;
27 import org.apache.directory.api.ldap.model.constants.SchemaConstants;
28 import org.apache.directory.api.ldap.model.entry.Attribute;
29 import org.apache.directory.api.ldap.model.entry.DefaultAttribute;
30 import org.apache.directory.api.ldap.model.entry.DefaultEntry;
31 import org.apache.directory.api.ldap.model.entry.Entry;
32 import org.apache.directory.api.ldap.model.exception.LdapException;
33 import org.apache.directory.api.ldap.model.schema.registries.Schema;
34 import org.apache.directory.api.util.DateUtils;
35
36
37
38
39
40
41
42
43 public class AttributesFactory
44 {
45 public Entry getAttributes( SchemaObject obj, Schema schema, SchemaManager schemaManager ) throws LdapException
46 {
47 if ( obj instanceof LdapSyntax )
48 {
49 return convert( ( LdapSyntax ) obj, schema, schemaManager );
50 }
51 else if ( obj instanceof MatchingRule )
52 {
53 return convert( ( MatchingRule ) obj, schema, schemaManager );
54 }
55 else if ( obj instanceof AttributeType )
56 {
57 return convert( ( AttributeType ) obj, schema, schemaManager );
58 }
59 else if ( obj instanceof ObjectClass )
60 {
61 return convert( ( ObjectClass ) obj, schema, schemaManager );
62 }
63 else if ( obj instanceof MatchingRuleUse )
64 {
65 return convert( ( MatchingRuleUse ) obj, schema, schemaManager );
66 }
67 else if ( obj instanceof DitStructureRule )
68 {
69 return convert( ( DitStructureRule ) obj, schema, schemaManager );
70 }
71 else if ( obj instanceof DitContentRule )
72 {
73 return convert( ( DitContentRule ) obj, schema, schemaManager );
74 }
75 else if ( obj instanceof NameForm )
76 {
77 return convert( ( NameForm ) obj, schema, schemaManager );
78 }
79
80 throw new IllegalArgumentException( "nknown SchemaObject type: " + obj.getClass() );
81 }
82
83
84
85
86
87
88
89
90
91
92 public Entry convert( Schema schema, SchemaManager schemaManager ) throws LdapException
93 {
94 Entry entry = new DefaultEntry( schemaManager );
95
96 entry.put( SchemaConstants.OBJECT_CLASS_AT, SchemaConstants.TOP_OC, MetaSchemaConstants.META_SCHEMA_OC );
97 entry.put( SchemaConstants.CN_AT, schema.getSchemaName() );
98 entry.put( SchemaConstants.CREATORS_NAME_AT, schema.getOwner() );
99 entry.put( SchemaConstants.CREATE_TIMESTAMP_AT, DateUtils.getGeneralizedTime() );
100
101 if ( schema.isDisabled() )
102 {
103 entry.put( MetaSchemaConstants.M_DISABLED_AT, "TRUE" );
104 }
105
106 String[] dependencies = schema.getDependencies();
107
108 if ( dependencies != null && dependencies.length > 0 )
109 {
110 Attribute attr = new DefaultAttribute(
111 schemaManager.getAttributeType( MetaSchemaConstants.M_DEPENDENCIES_AT ) );
112
113 for ( String dependency : dependencies )
114 {
115 attr.add( dependency );
116 }
117
118 entry.put( attr );
119 }
120
121 return entry;
122 }
123
124
125 public Entry convert( SyntaxChecker syntaxChecker, Schema schema, SchemaManager schemaManager )
126 {
127 Entry entry = new DefaultEntry( schemaManager );
128
129 entry.put( SchemaConstants.OBJECT_CLASS_AT, SchemaConstants.TOP_OC, MetaSchemaConstants.META_SYNTAX_CHECKER_OC );
130 entry.put( MetaSchemaConstants.M_OID_AT, syntaxChecker.getOid() );
131 entry.put( MetaSchemaConstants.M_FQCN_AT, syntaxChecker.getClass().getName() );
132 entry.put( SchemaConstants.CREATORS_NAME_AT, schema.getOwner() );
133 entry.put( SchemaConstants.CREATE_TIMESTAMP_AT, DateUtils.getGeneralizedTime() );
134
135 return entry;
136 }
137
138
139 public Entry convert( LdapSyntax syntax, Schema schema, SchemaManager schemaManager ) throws LdapException
140 {
141 Entry entry = new DefaultEntry( schemaManager );
142
143 entry.put( SchemaConstants.OBJECT_CLASS_AT, SchemaConstants.TOP_OC, MetaSchemaConstants.META_SYNTAX_OC );
144 entry.put( SchemaConstants.CREATORS_NAME_AT, schema.getOwner() );
145 entry.put( SchemaConstants.CREATE_TIMESTAMP_AT, DateUtils.getGeneralizedTime() );
146 injectCommon( syntax, entry, schemaManager );
147
148 return entry;
149 }
150
151
152 public Entry convert( String oid, Normalizer normalizer, Schema schema, SchemaManager schemaManager )
153 {
154 Entry entry = new DefaultEntry( schemaManager );
155
156 entry.put( SchemaConstants.OBJECT_CLASS_AT, SchemaConstants.TOP_OC, MetaSchemaConstants.META_NORMALIZER_OC );
157 entry.put( MetaSchemaConstants.M_OID_AT, oid );
158 entry.put( MetaSchemaConstants.M_FQCN_AT, normalizer.getClass().getName() );
159 entry.put( SchemaConstants.CREATORS_NAME_AT, schema.getOwner() );
160 entry.put( SchemaConstants.CREATE_TIMESTAMP_AT, DateUtils.getGeneralizedTime() );
161 return entry;
162 }
163
164
165 public Entry convert( String oid, LdapComparator<? super Object> comparator, Schema schema,
166 SchemaManager schemaManager )
167 {
168 Entry entry = new DefaultEntry( schemaManager );
169
170 entry.put( SchemaConstants.OBJECT_CLASS_AT, SchemaConstants.TOP_OC, MetaSchemaConstants.META_COMPARATOR_OC );
171 entry.put( MetaSchemaConstants.M_OID_AT, oid );
172 entry.put( MetaSchemaConstants.M_FQCN_AT, comparator.getClass().getName() );
173 entry.put( SchemaConstants.CREATORS_NAME_AT, schema.getOwner() );
174 entry.put( SchemaConstants.CREATE_TIMESTAMP_AT, DateUtils.getGeneralizedTime() );
175 return entry;
176 }
177
178
179
180
181
182
183
184
185 public Entry convert( MatchingRule matchingRule, Schema schema, SchemaManager schemaManager )
186 throws LdapException
187 {
188 Entry entry = new DefaultEntry( schemaManager );
189
190 entry.put( SchemaConstants.OBJECT_CLASS_AT, SchemaConstants.TOP_OC, MetaSchemaConstants.META_MATCHING_RULE_OC );
191 entry.put( MetaSchemaConstants.M_SYNTAX_AT, matchingRule.getSyntaxOid() );
192 entry.put( SchemaConstants.CREATORS_NAME_AT, schema.getOwner() );
193 entry.put( SchemaConstants.CREATE_TIMESTAMP_AT, DateUtils.getGeneralizedTime() );
194 injectCommon( matchingRule, entry, schemaManager );
195 return entry;
196 }
197
198
199 public Entry convert( MatchingRuleUse matchingRuleUse, Schema schema, SchemaManager schemaManager )
200 {
201 Entry entry = new DefaultEntry( schemaManager );
202
203 entry.put( SchemaConstants.OBJECT_CLASS_AT, SchemaConstants.TOP_OC, "" );
204 entry.put( SchemaConstants.CREATORS_NAME_AT, schema.getOwner() );
205 entry.put( SchemaConstants.CREATE_TIMESTAMP_AT, DateUtils.getGeneralizedTime() );
206 return entry;
207 }
208
209
210 public Entry convert( DitStructureRule ditStructureRule, Schema schema, SchemaManager schemaManager )
211 {
212 Entry entry = new DefaultEntry( schemaManager );
213
214 entry.put( SchemaConstants.OBJECT_CLASS_AT, SchemaConstants.TOP_OC, "" );
215 entry.put( SchemaConstants.CREATORS_NAME_AT, schema.getOwner() );
216 entry.put( SchemaConstants.CREATE_TIMESTAMP_AT, DateUtils.getGeneralizedTime() );
217 return entry;
218 }
219
220
221 public Entry convert( DitContentRule dITContentRule, Schema schema, SchemaManager schemaManager )
222 {
223 Entry entry = new DefaultEntry( schemaManager );
224
225 entry.put( SchemaConstants.OBJECT_CLASS_AT, SchemaConstants.TOP_OC, "" );
226 entry.put( SchemaConstants.CREATORS_NAME_AT, schema.getOwner() );
227 entry.put( SchemaConstants.CREATE_TIMESTAMP_AT, DateUtils.getGeneralizedTime() );
228 return entry;
229 }
230
231
232 public Entry convert( NameForm nameForm, Schema schema, SchemaManager schemaManager )
233 {
234 Entry entry = new DefaultEntry( schemaManager );
235
236 entry.put( SchemaConstants.OBJECT_CLASS_AT, SchemaConstants.TOP_OC, "" );
237 entry.put( SchemaConstants.CREATORS_NAME_AT, schema.getOwner() );
238 entry.put( SchemaConstants.CREATE_TIMESTAMP_AT, DateUtils.getGeneralizedTime() );
239 return entry;
240 }
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261 public Entry convert( AttributeType attributeType, Schema schema, SchemaManager schemaManager )
262 throws LdapException
263 {
264 Entry entry = new DefaultEntry( schemaManager );
265
266 entry.put( SchemaConstants.OBJECT_CLASS_AT, SchemaConstants.TOP_OC, MetaSchemaConstants.META_ATTRIBUTE_TYPE_OC );
267 entry.put( MetaSchemaConstants.M_COLLECTIVE_AT, getBoolean( attributeType.isCollective() ) );
268 entry.put( MetaSchemaConstants.M_NO_USER_MODIFICATION_AT, getBoolean( !attributeType.isUserModifiable() ) );
269 entry.put( MetaSchemaConstants.M_SINGLE_VALUE_AT, getBoolean( attributeType.isSingleValued() ) );
270 entry.put( MetaSchemaConstants.M_USAGE_AT, attributeType.getUsage().toString() );
271 entry.put( SchemaConstants.CREATORS_NAME_AT, schema.getOwner() );
272 entry.put( SchemaConstants.CREATE_TIMESTAMP_AT, DateUtils.getGeneralizedTime() );
273
274 injectCommon( attributeType, entry, schemaManager );
275
276 String superiorOid = attributeType.getSuperiorOid();
277
278 if ( superiorOid != null )
279 {
280 entry.put( MetaSchemaConstants.M_SUP_ATTRIBUTE_TYPE_AT, superiorOid );
281 }
282
283 if ( attributeType.getEqualityOid() != null )
284 {
285 entry.put( MetaSchemaConstants.M_EQUALITY_AT, attributeType.getEqualityOid() );
286 }
287
288 if ( attributeType.getSubstringOid() != null )
289 {
290 entry.put( MetaSchemaConstants.M_SUBSTR_AT, attributeType.getSubstringOid() );
291 }
292
293 if ( attributeType.getOrderingOid() != null )
294 {
295 entry.put( MetaSchemaConstants.M_ORDERING_AT, attributeType.getOrderingOid() );
296 }
297
298 if ( attributeType.getSyntaxOid() != null )
299 {
300 entry.put( MetaSchemaConstants.M_SYNTAX_AT, attributeType.getSyntaxOid() );
301 }
302
303 return entry;
304 }
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326 public Entry convert( ObjectClass objectClass, Schema schema, SchemaManager schemaManager )
327 throws LdapException
328 {
329 Entry entry = new DefaultEntry( schemaManager );
330
331 entry.put( SchemaConstants.OBJECT_CLASS_AT, SchemaConstants.TOP_OC, MetaSchemaConstants.META_OBJECT_CLASS_OC );
332 entry.put( MetaSchemaConstants.M_TYPE_OBJECT_CLASS_AT, objectClass.getType().toString() );
333 entry.put( SchemaConstants.CREATORS_NAME_AT, schema.getOwner() );
334 entry.put( SchemaConstants.CREATE_TIMESTAMP_AT, DateUtils.getGeneralizedTime() );
335
336 injectCommon( objectClass, entry, schemaManager );
337 Attribute attr = null;
338
339
340 if ( objectClass.getSuperiorOids() != null && objectClass.getSuperiorOids().size() != 0 )
341 {
342 if ( schemaManager != null )
343 {
344 attr = new DefaultAttribute(
345 schemaManager.getAttributeType( MetaSchemaConstants.M_SUP_OBJECT_CLASS_AT ) );
346 }
347 else
348 {
349 attr = new DefaultAttribute( MetaSchemaConstants.M_SUP_OBJECT_CLASS_AT );
350 }
351
352 for ( String superior : objectClass.getSuperiorOids() )
353 {
354 attr.add( superior );
355 }
356
357 entry.put( attr );
358 }
359
360
361 if ( objectClass.getMustAttributeTypeOids() != null && objectClass.getMustAttributeTypeOids().size() != 0 )
362 {
363 if ( schemaManager != null )
364 {
365 attr = new DefaultAttribute( schemaManager.getAttributeType( MetaSchemaConstants.M_MUST_AT ) );
366 }
367 else
368 {
369 attr = new DefaultAttribute( MetaSchemaConstants.M_MUST_AT );
370 }
371
372 for ( String mustOid : objectClass.getMustAttributeTypeOids() )
373 {
374 attr.add( mustOid );
375 }
376
377 entry.put( attr );
378 }
379
380
381 if ( objectClass.getMayAttributeTypeOids() != null && objectClass.getMayAttributeTypeOids().size() != 0 )
382 {
383 if ( schemaManager != null )
384 {
385 attr = new DefaultAttribute( schemaManager.getAttributeType( MetaSchemaConstants.M_MAY_AT ) );
386 }
387 else
388 {
389 attr = new DefaultAttribute( MetaSchemaConstants.M_MAY_AT );
390 }
391
392 for ( String mayOid : objectClass.getMayAttributeTypeOids() )
393 {
394 attr.add( mayOid );
395 }
396
397 entry.put( attr );
398 }
399
400 return entry;
401 }
402
403
404 private final void injectCommon( SchemaObject object, Entry entry, SchemaManager schemaManager )
405 throws LdapException
406 {
407 injectNames( object.getNames(), entry, schemaManager );
408 entry.put( MetaSchemaConstants.M_OBSOLETE_AT, getBoolean( object.isObsolete() ) );
409 entry.put( MetaSchemaConstants.M_OID_AT, object.getOid() );
410
411 if ( object.getDescription() != null )
412 {
413 entry.put( MetaSchemaConstants.M_DESCRIPTION_AT, object.getDescription() );
414 }
415
416
417 Map<String, List<String>> extensions = object.getExtensions();
418
419 if ( extensions != null )
420 {
421 for ( Map.Entry<String, List<String>> mapEntry : extensions.entrySet() )
422 {
423 String key = mapEntry.getKey();
424 List<String> values = mapEntry.getValue();
425
426 for ( String value : values )
427 {
428 entry.add( key, value );
429 }
430 }
431 }
432 }
433
434
435 private final void injectNames( List<String> names, Entry entry, SchemaManager schemaManager ) throws LdapException
436 {
437 if ( ( names == null ) || ( names.size() == 0 ) )
438 {
439 return;
440 }
441
442 Attribute attr = null;
443
444 if ( schemaManager != null )
445 {
446 attr = new DefaultAttribute( schemaManager.getAttributeType( MetaSchemaConstants.M_NAME_AT ) );
447 }
448 else
449 {
450 attr = new DefaultAttribute( MetaSchemaConstants.M_NAME_AT );
451 }
452
453 for ( String name : names )
454 {
455 attr.add( name );
456 }
457
458 entry.put( attr );
459 }
460
461
462 private final String getBoolean( boolean value )
463 {
464 if ( value )
465 {
466 return "TRUE";
467 }
468 else
469 {
470 return "FALSE";
471 }
472 }
473 }