List<ObjectClassDefinition> constructObjectClasses(final OIDAllocator a) throws LDAPPersistException { final LinkedHashMap<String, ObjectClassDefinition> ocMap = new LinkedHashMap<String, ObjectClassDefinition>(1 + auxiliaryClasses.length); if (superclassHandler != null) { for (final ObjectClassDefinition d : superclassHandler.constructObjectClasses(a)) { ocMap.put(toLowerCase(d.getNameOrOID()), d); } } final String lowerStructuralClass = toLowerCase(structuralClass); if (!ocMap.containsKey(lowerStructuralClass)) { if (superclassHandler == null) { ocMap.put( lowerStructuralClass, constructObjectClass(structuralClass, "top", ObjectClassType.STRUCTURAL, a)); } else { ocMap.put( lowerStructuralClass, constructObjectClass( structuralClass, superclassHandler.getStructuralClass(), ObjectClassType.STRUCTURAL, a)); } } for (final String s : auxiliaryClasses) { final String lowerName = toLowerCase(s); if (!ocMap.containsKey(lowerName)) { ocMap.put(lowerName, constructObjectClass(s, "top", ObjectClassType.AUXILIARY, a)); } } return Collections.unmodifiableList(new ArrayList<ObjectClassDefinition>(ocMap.values())); }