mirror of https://github.com/OpenIdentityPlatform/OpenDJ.git

Nicolas Capponi
19.23.2016 dc1a95c709158ba2ae660cd940baf81709857a9f
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;
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))
      {
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))
        {
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))
        {
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())
        {
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)
        {
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);
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))
      {
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);
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))
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();