From dc1a95c709158ba2ae660cd940baf81709857a9f Mon Sep 17 00:00:00 2001
From: Nicolas Capponi <nicolas.capponi@forgerock.com>
Date: Mon, 30 May 2016 10:43:10 +0000
Subject: [PATCH] OPENDJ-2987 Update server Schema class to rely on SDK schema for object classes
---
opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/ui/BrowseSchemaPanel.java | 8 +-
opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/task/DeleteSchemaElementsTask.java | 4
opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/ui/CustomObjectClassPanel.java | 2
opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/ui/StandardAttributePanel.java | 6 +-
opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/datamodel/ServerDescriptor.java | 10 +--
opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/ui/SelectObjectClassesPanel.java | 7 +-
opendj-server-legacy/src/main/java/org/opends/server/backends/SchemaBackend.java | 13 +--
opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/ui/components/SuperiorObjectClassesEditor.java | 5 -
opendj-server-legacy/src/main/java/org/opends/server/types/Schema.java | 102 ++++++++++------------------------
opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/ui/CustomAttributePanel.java | 8 +-
opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/ui/ObjectClassEditorPanel.java | 8 +-
11 files changed, 62 insertions(+), 111 deletions(-)
diff --git a/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/datamodel/ServerDescriptor.java b/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/datamodel/ServerDescriptor.java
index 9d49019..e495683 100644
--- a/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/datamodel/ServerDescriptor.java
+++ b/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/datamodel/ServerDescriptor.java
@@ -24,7 +24,6 @@
import java.util.Date;
import java.util.HashSet;
import java.util.List;
-import java.util.Map;
import java.util.Set;
import org.forgerock.opendj.ldap.DN;
@@ -573,16 +572,15 @@
private static boolean areObjectClassesEqual(Schema schema1, Schema schema2)
{
- final Map<String, ObjectClass> ocs1 = schema1.getObjectClasses();
- final Map<String, ObjectClass> ocs2 = schema2.getObjectClasses();
+ final Collection<ObjectClass> ocs1 = schema1.getObjectClasses();
+ final Collection<ObjectClass> ocs2 = schema2.getObjectClasses();
if (ocs1.size() != ocs2.size())
{
return false;
}
- for (String name : ocs1.keySet())
+ for (ObjectClass oc1 : ocs1)
{
- ObjectClass oc1 = ocs1.get(name);
- ObjectClass oc2 = ocs2.get(name);
+ ObjectClass oc2 = schema2.getObjectClass(oc1.getNameOrOID());
if (oc2 == null || !areObjectClassesEqual(oc1, oc2))
{
return false;
diff --git a/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/task/DeleteSchemaElementsTask.java b/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/task/DeleteSchemaElementsTask.java
index 5fafcf9..d2b183b 100644
--- a/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/task/DeleteSchemaElementsTask.java
+++ b/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/task/DeleteSchemaElementsTask.java
@@ -638,7 +638,7 @@
ArrayList<ObjectClass> dependentClasses = new ArrayList<>();
for (AttributeType attr : attrsToDelete)
{
- for (ObjectClass oc : schema.getObjectClasses().values())
+ for (ObjectClass oc : schema.getObjectClasses())
{
if (oc.getRequiredAttributes().contains(attr)
|| oc.getOptionalAttributes().contains(attr))
@@ -691,7 +691,7 @@
ObjectClass objectClass, Schema schema)
{
LinkedHashSet<ObjectClass> children = new LinkedHashSet<>();
- for (ObjectClass oc : schema.getObjectClasses().values())
+ for (ObjectClass oc : schema.getObjectClasses())
{
if (oc.getSuperiorClasses().contains(objectClass))
{
diff --git a/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/ui/BrowseSchemaPanel.java b/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/ui/BrowseSchemaPanel.java
index 90e0ebf..6523126 100644
--- a/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/ui/BrowseSchemaPanel.java
+++ b/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/ui/BrowseSchemaPanel.java
@@ -665,7 +665,7 @@
Map<String, ConfigurationObjectClassTreeNode> hmConfigurationOcs = new HashMap<>();
Set<String> customOcNames = new TreeSet<>(lowerCaseComparator);
Map<String, CustomObjectClassTreeNode> hmCustomOcs = new HashMap<>();
- for (ObjectClass oc : lastSchema.getObjectClasses().values())
+ for (ObjectClass oc : lastSchema.getObjectClasses())
{
if (mustAdd(oc))
{
@@ -1279,7 +1279,7 @@
private boolean mustAddAnyObjectClassName(ObjectClass oc, String f)
{
- for (ObjectClass o : lastSchema.getObjectClasses().values())
+ for (ObjectClass o : lastSchema.getObjectClasses())
{
if (isDescendant(oc, o) && mustAddObjectClassName(o, f))
{
@@ -1584,7 +1584,7 @@
// Analyze objectClasses
for (ObjectClass objectClass : ocsToDelete)
{
- for (ObjectClass o : schema.getObjectClasses().values())
+ for (ObjectClass o : schema.getObjectClasses())
{
if (o.getSuperiorClasses().contains(objectClass))
{
@@ -1608,7 +1608,7 @@
}
childAttributes.removeAll(attrsToDelete);
- for (ObjectClass o : schema.getObjectClasses().values())
+ for (ObjectClass o : schema.getObjectClasses())
{
if (o.getRequiredAttributes().contains(attribute))
{
diff --git a/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/ui/CustomAttributePanel.java b/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/ui/CustomAttributePanel.java
index 52b4133..c4faebe 100644
--- a/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/ui/CustomAttributePanel.java
+++ b/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/ui/CustomAttributePanel.java
@@ -67,6 +67,7 @@
import org.forgerock.opendj.ldap.schema.AttributeType;
import org.forgerock.opendj.ldap.schema.AttributeUsage;
import org.forgerock.opendj.ldap.schema.MatchingRule;
+import org.forgerock.opendj.ldap.schema.ObjectClass;
import org.forgerock.opendj.ldap.schema.SchemaBuilder;
import org.forgerock.opendj.ldap.schema.Syntax;
import org.opends.guitools.controlpanel.datamodel.ServerDescriptor;
@@ -83,7 +84,6 @@
import org.opends.guitools.controlpanel.util.LowerCaseComparator;
import org.opends.guitools.controlpanel.util.Utilities;
import org.opends.server.schema.SomeSchemaElement;
-import org.forgerock.opendj.ldap.schema.ObjectClass;
import org.opends.server.types.Schema;
import org.opends.server.util.ServerConstants;
import org.opends.server.util.StaticUtils;
@@ -560,7 +560,7 @@
Comparator<String> lowerCaseComparator = new LowerCaseComparator();
SortedSet<String> requiredByOcs = new TreeSet<>(lowerCaseComparator);
- for (ObjectClass oc : schema.getObjectClasses().values())
+ for (ObjectClass oc : schema.getObjectClasses())
{
if (oc.getRequiredAttributes().contains(attr))
{
@@ -576,7 +576,7 @@
}
SortedSet<String> optionalByOcs = new TreeSet<>(lowerCaseComparator);
- for (ObjectClass oc : schema.getObjectClasses().values())
+ for (ObjectClass oc : schema.getObjectClasses())
{
if (oc.getOptionalAttributes().contains(attr))
{
@@ -735,7 +735,7 @@
}
}
- for (ObjectClass o : schema.getObjectClasses().values())
+ for (ObjectClass o : schema.getObjectClasses())
{
if (o.getRequiredAttributes().contains(attribute))
{
diff --git a/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/ui/CustomObjectClassPanel.java b/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/ui/CustomObjectClassPanel.java
index 2f33e7e..32c78fa 100644
--- a/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/ui/CustomObjectClassPanel.java
+++ b/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/ui/CustomObjectClassPanel.java
@@ -641,7 +641,7 @@
ArrayList<String> childClasses = new ArrayList<>();
if (schema != null)
{
- for (ObjectClass o : schema.getObjectClasses().values())
+ for (ObjectClass o : schema.getObjectClasses())
{
for (ObjectClass superior : o.getSuperiorClasses())
{
diff --git a/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/ui/ObjectClassEditorPanel.java b/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/ui/ObjectClassEditorPanel.java
index b1730f0..5948beb 100644
--- a/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/ui/ObjectClassEditorPanel.java
+++ b/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/ui/ObjectClassEditorPanel.java
@@ -29,14 +29,14 @@
import javax.swing.JLabel;
import javax.swing.SwingUtilities;
+import org.forgerock.i18n.LocalizableMessage;
+import org.forgerock.opendj.ldap.schema.ObjectClass;
+import org.forgerock.opendj.ldap.schema.ObjectClassType;
import org.opends.guitools.controlpanel.datamodel.ObjectClassValue;
import org.opends.guitools.controlpanel.datamodel.SortableListModel;
import org.opends.guitools.controlpanel.event.ConfigurationChangeEvent;
import org.opends.guitools.controlpanel.ui.components.AddRemovePanel;
import org.opends.guitools.controlpanel.util.Utilities;
-import org.forgerock.i18n.LocalizableMessage;
-import org.forgerock.opendj.ldap.schema.ObjectClass;
-import org.forgerock.opendj.ldap.schema.ObjectClassType;
import org.opends.server.types.Schema;
/**
@@ -160,7 +160,7 @@
{
final SortedSet<String> auxiliaryOcs = new TreeSet<>();
final SortedSet<String> structuralOcs = new TreeSet<>();
- for (ObjectClass oc : schema.getObjectClasses().values())
+ for (ObjectClass oc : schema.getObjectClasses())
{
if (oc.getObjectClassType() == ObjectClassType.AUXILIARY)
{
diff --git a/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/ui/SelectObjectClassesPanel.java b/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/ui/SelectObjectClassesPanel.java
index f9d766b..0e87ff1 100644
--- a/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/ui/SelectObjectClassesPanel.java
+++ b/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/ui/SelectObjectClassesPanel.java
@@ -28,13 +28,13 @@
import javax.swing.JEditorPane;
+import org.forgerock.i18n.LocalizableMessage;
+import org.forgerock.opendj.ldap.schema.ObjectClass;
import org.opends.guitools.controlpanel.event.ConfigurationChangeEvent;
import org.opends.guitools.controlpanel.ui.components.AddRemovePanel;
import org.opends.guitools.controlpanel.ui.renderer.
SchemaElementComboBoxCellRenderer;
import org.opends.guitools.controlpanel.util.Utilities;
-import org.forgerock.i18n.LocalizableMessage;
-import org.forgerock.opendj.ldap.schema.ObjectClass;
import org.opends.server.types.Schema;
/**
@@ -219,9 +219,8 @@
private void updateWithSchema(Schema schema)
{
ArrayList<ObjectClass> allOcs = new ArrayList<>();
- for (String key : schema.getObjectClasses().keySet())
+ for (ObjectClass oc : schema.getObjectClasses())
{
- ObjectClass oc = schema.getObjectClass(key);
if (!toExclude.contains(oc))
{
allOcs.add(oc);
diff --git a/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/ui/StandardAttributePanel.java b/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/ui/StandardAttributePanel.java
index abd3194..57eb288 100644
--- a/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/ui/StandardAttributePanel.java
+++ b/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/ui/StandardAttributePanel.java
@@ -39,12 +39,12 @@
import org.forgerock.i18n.LocalizableMessageBuilder;
import org.forgerock.opendj.ldap.schema.AttributeType;
import org.forgerock.opendj.ldap.schema.MatchingRule;
+import org.forgerock.opendj.ldap.schema.ObjectClass;
import org.opends.guitools.controlpanel.event.ConfigurationChangeEvent;
import org.opends.guitools.controlpanel.ui.components.TitlePanel;
import org.opends.guitools.controlpanel.util.LowerCaseComparator;
import org.opends.guitools.controlpanel.util.Utilities;
import org.opends.server.schema.SomeSchemaElement;
-import org.forgerock.opendj.ldap.schema.ObjectClass;
import org.opends.server.types.Schema;
/** The panel that displays a standard attribute definition. */
@@ -278,7 +278,7 @@
Comparator<String> lowerCaseComparator = new LowerCaseComparator();
SortedSet<String> requiredByOcs = new TreeSet<>(lowerCaseComparator);
- for (ObjectClass oc : schema.getObjectClasses().values())
+ for (ObjectClass oc : schema.getObjectClasses())
{
if (oc.getRequiredAttributes().contains(attr))
{
@@ -294,7 +294,7 @@
}
SortedSet<String> optionalByOcs = new TreeSet<>(lowerCaseComparator);
- for (ObjectClass oc : schema.getObjectClasses().values())
+ for (ObjectClass oc : schema.getObjectClasses())
{
if (oc.getOptionalAttributes().contains(attr))
{
diff --git a/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/ui/components/SuperiorObjectClassesEditor.java b/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/ui/components/SuperiorObjectClassesEditor.java
index 50677ba..eeb425f 100644
--- a/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/ui/components/SuperiorObjectClassesEditor.java
+++ b/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/ui/components/SuperiorObjectClassesEditor.java
@@ -40,6 +40,7 @@
import javax.swing.JLabel;
import javax.swing.JPanel;
+import org.forgerock.opendj.ldap.schema.ObjectClass;
import org.opends.guitools.controlpanel.event.SuperiorObjectClassesChangedEvent;
import org.opends.guitools.controlpanel.event.SuperiorObjectClassesChangedListener;
import org.opends.guitools.controlpanel.ui.GenericDialog;
@@ -47,7 +48,6 @@
import org.opends.guitools.controlpanel.ui.renderer.SchemaElementComboBoxCellRenderer;
import org.opends.guitools.controlpanel.util.LowerCaseComparator;
import org.opends.guitools.controlpanel.util.Utilities;
-import org.forgerock.opendj.ldap.schema.ObjectClass;
import org.opends.server.types.Schema;
/** A panel that can be used to select one (or several) object classes. */
@@ -257,9 +257,8 @@
private void updateWithSchema(Schema schema)
{
HashMap<String, ObjectClass> objectClassNameMap = new HashMap<>();
- for (String key : schema.getObjectClasses().keySet())
+ for (ObjectClass oc : schema.getObjectClasses())
{
- ObjectClass oc = schema.getObjectClass(key);
if (!toExclude.contains(oc))
{
objectClassNameMap.put(oc.getNameOrOID(), oc);
diff --git a/opendj-server-legacy/src/main/java/org/opends/server/backends/SchemaBackend.java b/opendj-server-legacy/src/main/java/org/opends/server/backends/SchemaBackend.java
index 03e8fef..2c35c6a 100644
--- a/opendj-server-legacy/src/main/java/org/opends/server/backends/SchemaBackend.java
+++ b/opendj-server-legacy/src/main/java/org/opends/server/backends/SchemaBackend.java
@@ -46,7 +46,6 @@
import java.util.Map;
import java.util.Set;
import java.util.TreeSet;
-import java.util.concurrent.ConcurrentHashMap;
import org.forgerock.i18n.LocalizableMessage;
import org.forgerock.i18n.slf4j.LocalizedLogger;
@@ -566,7 +565,7 @@
operationalAttrs, attributeTypesType, includeSchemaFile,
AttributeTypeSyntax.isStripSyntaxMinimumUpperBound(),
ignoreShowAllOption);
- buildSchemaAttribute(schema.getObjectClasses().values(), userAttrs,
+ buildSchemaAttribute(schema.getObjectClasses(), userAttrs,
operationalAttrs, objectClassesType, includeSchemaFile, false,
ignoreShowAllOption);
buildSchemaAttribute(schema.getMatchingRules(), userAttrs,
@@ -1379,7 +1378,7 @@
// Make sure that the attribute type isn't used as a required or optional
// attribute type in any objectclass.
- for (ObjectClass oc : schema.getObjectClasses().values())
+ for (ObjectClass oc : schema.getObjectClasses())
{
if (oc.getDeclaredRequiredAttributes().contains(removeType) ||
oc.getDeclaredOptionalAttributes().contains(removeType))
@@ -1643,7 +1642,7 @@
// Make sure that the objectclass isn't used as the superior class for any
// other objectclass.
- for (ObjectClass oc : schema.getObjectClasses().values())
+ for (ObjectClass oc : schema.getObjectClasses())
{
for(ObjectClass superiorClass : oc.getSuperiorClasses())
{
@@ -2693,7 +2692,7 @@
// same file are written before the subordinate classes.
Set<ObjectClass> addedClasses = new HashSet<>();
values = new LinkedHashSet<>();
- for (ObjectClass oc : schema.getObjectClasses().values())
+ for (ObjectClass oc : schema.getObjectClasses())
{
if (schemaFile.equals(getSchemaFile(oc)))
{
@@ -3489,9 +3488,7 @@
// loop on all the object classes in the current schema and delete
// them from the new schema if they are not in the imported schema entry.
- ConcurrentHashMap<String, ObjectClass> currentObjectClasses = newSchema.getObjectClasses();
-
- for (ObjectClass removeClass : currentObjectClasses.values())
+ for (ObjectClass removeClass : newSchema.getObjectClasses())
{
String schemaFile = getSchemaFile(removeClass);
if (CONFIG_SCHEMA_ELEMENTS_FILE.equals(schemaFile))
diff --git a/opendj-server-legacy/src/main/java/org/opends/server/types/Schema.java b/opendj-server-legacy/src/main/java/org/opends/server/types/Schema.java
index 5dcd8cd..a52445f 100644
--- a/opendj-server-legacy/src/main/java/org/opends/server/types/Schema.java
+++ b/opendj-server-legacy/src/main/java/org/opends/server/types/Schema.java
@@ -115,12 +115,6 @@
private Map<AttributeType, List<AttributeType>> subordinateTypes;
/**
- * The set of objectclass definitions for this schema, mapped between the
- * lowercase names and OID for the definition and the objectclass itself.
- */
- private ConcurrentHashMap<String,ObjectClass> objectClasses;
-
- /**
* The set of DIT content rules for this schema, mapped between the structural
* objectclass for the definition and the DIT content rule itself.
*/
@@ -199,7 +193,6 @@
{
switchSchema(schemaNG);
- objectClasses = new ConcurrentHashMap<String,ObjectClass>();
ditContentRules = new ConcurrentHashMap<ObjectClass,DITContentRule>();
ditStructureRulesByID = new ConcurrentHashMap<Integer,DITStructureRule>();
ditStructureRulesByNameForm = new ConcurrentHashMap<NameForm,DITStructureRule>();
@@ -660,9 +653,9 @@
*
* @return The objectclass definitions for this schema.
*/
- public ConcurrentHashMap<String,ObjectClass> getObjectClasses()
+ public Collection<ObjectClass> getObjectClasses()
{
- return objectClasses;
+ return schemaNG.getObjectClasses();
}
@@ -680,7 +673,7 @@
*/
public boolean hasObjectClass(String lowerName)
{
- return objectClasses.containsKey(lowerName);
+ return getSchemaNG().hasObjectClass(lowerName);
}
@@ -698,7 +691,7 @@
*/
public ObjectClass getObjectClass(String lowerName)
{
- return objectClasses.get(lowerName);
+ return getSchemaNG().getObjectClass(lowerName);
}
@@ -724,48 +717,22 @@
exclusiveLock.lock();
try
{
- if (! overwriteExisting)
+ SchemaBuilder builder = new SchemaBuilder(schemaNG);
+ ObjectClass.Builder b = builder.buildObjectClass(objectClass);
+ String schemaFile = getSchemaFileName(objectClass);
+ if (schemaFile != null)
{
- String oid = toLowerCase(objectClass.getOID());
- if (objectClasses.containsKey(oid))
- {
- ObjectClass conflictingClass = objectClasses.get(oid);
-
- LocalizableMessage message = ERR_SCHEMA_CONFLICTING_OBJECTCLASS_OID.
- get(objectClass.getNameOrOID(), oid,
- conflictingClass.getNameOrOID());
- throw new DirectoryException(
- ResultCode.CONSTRAINT_VIOLATION, message);
- }
-
- for (String name : objectClass.getNormalizedNames())
- {
- if (objectClasses.containsKey(name))
- {
- ObjectClass conflictingClass = objectClasses.get(name);
-
- LocalizableMessage message = ERR_SCHEMA_CONFLICTING_OBJECTCLASS_NAME.
- get(objectClass.getNameOrOID(), name,
- conflictingClass.getNameOrOID());
- throw new DirectoryException(
- ResultCode.CONSTRAINT_VIOLATION, message);
- }
- }
+ b.removeExtraProperty(SCHEMA_PROPERTY_FILENAME).extraProperties(SCHEMA_PROPERTY_FILENAME, schemaFile);
}
-
- ObjectClass old = objectClasses.put(toLowerCase(objectClass.getOID()),
- objectClass);
- if (old != null && old != objectClass)
+ if (overwriteExisting)
{
- // Mark the old object class as stale so that caches (such as compressed
- // schema) can detect changes.
- old.setDirty();
+ b.addToSchemaOverwrite();
}
-
- for (String name : objectClass.getNormalizedNames())
+ else
{
- objectClasses.put(name, objectClass);
+ b.addToSchema();
}
+ switchSchema(builder.toSchema());
}
finally
{
@@ -773,29 +740,27 @@
}
}
-
-
/**
* Deregisters the provided objectclass definition with this schema.
*
- * @param objectClass The objectclass to deregister with this
- * schema.
+ * @param objectClass The objectclass to deregister with this schema.
+ * @throws DirectoryException
+ * If the object class is referenced by another schema element.
*/
- public void deregisterObjectClass(ObjectClass objectClass)
+ public void deregisterObjectClass(ObjectClass objectClass) throws DirectoryException
{
- synchronized (objectClasses)
+ exclusiveLock.lock();
+ try
{
- if (objectClasses.remove(toLowerCase(objectClass.getOID()), objectClass))
+ SchemaBuilder builder = new SchemaBuilder(schemaNG);
+ if (builder.removeObjectClass(objectClass.getNameOrOID()))
{
- // Mark the old object class as stale so that caches (such as
- // compressed schema) can detect changes.
- objectClass.setDirty();
+ switchSchema(builder.toSchema());
}
-
- for (String name : objectClass.getNormalizedNames())
- {
- objectClasses.remove(name, objectClass);
- }
+ }
+ finally
+ {
+ exclusiveLock.unlock();
}
}
@@ -1926,7 +1891,7 @@
for (AttributeType at : schemaNG.getAttributeTypes())
{
- if ((at.getSuperiorType() != null) && at.getSuperiorType().equals(type))
+ if (type.equals(at.getSuperiorType()))
{
deregisterAttributeType(at);
registerAttributeType(at.toString(), getSchemaFileName(at), true);
@@ -1934,7 +1899,7 @@
}
}
- for (ObjectClass oc : objectClasses.values())
+ for (ObjectClass oc : schemaNG.getObjectClasses())
{
if (oc.getDeclaredRequiredAttributes().contains(type) || oc.getDeclaredOptionalAttributes().contains(type))
{
@@ -1983,7 +1948,7 @@
private void rebuildDependentElements(ObjectClass c, int depth) throws DirectoryException
{
circularityCheck(depth, c);
- for (ObjectClass oc : objectClasses.values())
+ for (ObjectClass oc : getObjectClasses())
{
if (oc.getSuperiorClasses().contains(c))
{
@@ -2112,7 +2077,6 @@
}
dupSchema.subordinateTypes.putAll(subordinateTypes);
- dupSchema.objectClasses.putAll(objectClasses);
dupSchema.ditContentRules.putAll(ditContentRules);
dupSchema.ditStructureRulesByID.putAll(ditStructureRulesByID);
dupSchema.ditStructureRulesByNameForm.putAll(ditStructureRulesByNameForm);
@@ -2576,12 +2540,6 @@
nameFormsByOC = null;
}
- if (objectClasses != null)
- {
- objectClasses.clear();
- objectClasses = null;
- }
-
if (subordinateTypes != null)
{
subordinateTypes.clear();
--
Gitblit v1.10.0