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

Jean-Noël Rouvignac
04.59.2016 8dca37f29a6cf1e32f889647e173b537ffe7a33b
SchemaBackend.java: Removed checks already performed in SchemaBuilder
2 files modified
122 ■■■■■ changed files
opendj-server-legacy/src/main/java/org/opends/server/backends/SchemaBackend.java 106 ●●●●● patch | view | raw | blame | history
opendj-server-legacy/src/test/java/org/opends/server/backends/SchemaBackendTestCase.java 16 ●●●● patch | view | raw | blame | history
opendj-server-legacy/src/main/java/org/opends/server/backends/SchemaBackend.java
@@ -25,8 +25,8 @@
import static org.opends.server.core.DirectoryServer.*;
import static org.opends.server.schema.GeneralizedTimeSyntax.*;
import static org.opends.server.util.CollectionUtils.*;
import static org.opends.server.util.ServerConstants.*;
import static org.opends.server.util.SchemaUtils.*;
import static org.opends.server.util.ServerConstants.*;
import static org.opends.server.util.StaticUtils.*;
import java.io.File;
@@ -1126,44 +1126,6 @@
      }
    }
    // Make sure that the attribute type isn't used as the superior type for
    // any other attributes.
    for (AttributeType at : schema.getAttributeTypes())
    {
      AttributeType superiorType = at.getSuperiorType();
      if (superiorType != null && superiorType.equals(removeType))
      {
        LocalizableMessage message = ERR_SCHEMA_MODIFY_REMOVE_AT_SUPERIOR_TYPE.get(
            removeType.getNameOrOID(), superiorType.getNameOrOID());
        throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
      }
    }
    // Make sure that the attribute type isn't used as a required, optional, or
    // prohibited attribute type in any DIT content rule.
    for (DITContentRule dcr : schema.getDITContentRules())
    {
      if (dcr.getRequiredAttributes().contains(removeType) ||
          dcr.getOptionalAttributes().contains(removeType) ||
          dcr.getProhibitedAttributes().contains(removeType))
      {
        LocalizableMessage message = ERR_SCHEMA_MODIFY_REMOVE_AT_IN_DCR.get(
            removeType.getNameOrOID(), dcr.getNameOrOID());
        throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
      }
    }
    // Make sure that the attribute type isn't referenced by any matching rule use.
    for (MatchingRuleUse mru : schema.getMatchingRuleUses())
    {
      if (mru.getAttributes().contains(removeType))
      {
        LocalizableMessage message = ERR_SCHEMA_MODIFY_REMOVE_AT_IN_MR_USE.get(
            removeType.getNameOrOID(), mru.getNameOrOID());
        throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
      }
    }
    // If we've gotten here, then it's OK to remove the attribute type from the schema.
    schema.deregisterAttributeType(removeType);
    addIfNotNull(modifiedSchemaFiles, getElementSchemaFile(removeType));
@@ -1309,51 +1271,6 @@
      }
    }
    // Make sure that the objectclass isn't used as the superior class for any
    // other objectclass.
    for (ObjectClass oc : schema.getObjectClasses())
    {
      for(ObjectClass superiorClass : oc.getSuperiorClasses())
      {
        if (superiorClass.equals(removeClass))
        {
          LocalizableMessage message = ERR_SCHEMA_MODIFY_REMOVE_OC_SUPERIOR_CLASS.get(
              removeClass.getNameOrOID(), superiorClass.getNameOrOID());
          throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM,
                  message);
        }
      }
    }
    // Make sure that the objectclass isn't used as the structural class for
    // any name form.
    Collection<NameForm> mappedForms = schema.getNameForm(removeClass);
    if (!mappedForms.isEmpty())
    {
      StringBuilder buffer = new StringBuilder();
      for(NameForm nf : mappedForms)
      {
        buffer.append(nf.getNameOrOID());
        buffer.append("\t");
      }
      LocalizableMessage message = ERR_SCHEMA_MODIFY_REMOVE_OC_IN_NF.get(
          removeClass.getNameOrOID(), buffer);
      throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
    }
    // Make sure that the objectclass isn't used as a structural or auxiliary
    // class for any DIT content rule.
    for (DITContentRule dcr : schema.getDITContentRules())
    {
      if (dcr.getStructuralClass().equals(removeClass) ||
          dcr.getAuxiliaryClasses().contains(removeClass))
      {
        LocalizableMessage message = ERR_SCHEMA_MODIFY_REMOVE_OC_IN_DCR.get(
            removeClass.getNameOrOID(), dcr.getNameOrOID());
        throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
      }
    }
    // If we've gotten here, then it's OK to remove the objectclass from the schema.
    schema.deregisterObjectClass(removeClass);
    addIfNotNull(modifiedSchemaFiles, getElementSchemaFile(removeClass));
@@ -1474,15 +1391,6 @@
      }
    }
    // Make sure that the name form isn't referenced by any DIT structure rule.
    Collection<DITStructureRule> ditRules = schema.getDITStructureRules(removeNF);
    if (!ditRules.isEmpty())
    {
      LocalizableMessage message = ERR_SCHEMA_MODIFY_REMOVE_NF_IN_DSR.get(
          removeNF.getNameOrOID(), ditRules.iterator().next().getNameOrRuleID());
      throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
    }
    // Now remove the name form from the schema.
    schema.deregisterNameForm(removeNF);
    addIfNotNull(modifiedSchemaFiles, getElementSchemaFile(removeNF));
@@ -1742,18 +1650,6 @@
      }
    }
    // Make sure that the DIT structure rule isn't the superior for any other
    // DIT structure rule.
    for (DITStructureRule dsr : schema.getDITStructureRules())
    {
      if (dsr.getSuperiorRules().contains(removeDSR))
      {
        LocalizableMessage message = ERR_SCHEMA_MODIFY_REMOVE_DSR_SUPERIOR_RULE.get(
            removeDSR.getNameOrRuleID(), dsr.getNameOrRuleID());
        throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
      }
    }
    // If we've gotten here, then it's OK to remove the DIT structure rule from the schema.
    schema.deregisterDITStructureRule(removeDSR);
    addIfNotNull(modifiedSchemaFiles, getElementSchemaFile(removeDSR));
opendj-server-legacy/src/test/java/org/opends/server/backends/SchemaBackendTestCase.java
@@ -1041,7 +1041,7 @@
    String attrName = "name";
    assertTrue(DirectoryServer.getSchema().hasAttributeType(attrName));
    runModify(argsNotPermissive(), ldif, UNWILLING_TO_PERFORM);
    runModify(argsNotPermissive(), ldif, CONSTRAINT_VIOLATION);
    assertTrue(DirectoryServer.getSchema().hasAttributeType(attrName));
  }
@@ -1180,7 +1180,7 @@
    String attrName = "testremoveattributetypereferencedbydcr";
    assertFalse(DirectoryServer.getSchema().hasAttributeType(attrName));
    runModify(argsNotPermissive(), ldif, UNWILLING_TO_PERFORM);
    runModify(argsNotPermissive(), ldif, CONSTRAINT_VIOLATION);
    assertTrue(DirectoryServer.getSchema().hasAttributeType(attrName));
  }
@@ -1223,7 +1223,7 @@
      String attrName = "testremoveatrefbymruat";
      assertFalse(DirectoryServer.getSchema().hasAttributeType(attrName));
      runModify(argsNotPermissive(), ldif, UNWILLING_TO_PERFORM);
      runModify(argsNotPermissive(), ldif, CONSTRAINT_VIOLATION);
      assertMatchingRuleUseExistsWithName(matchingRule, "testremoveatrefbymrumru");
@@ -1761,7 +1761,7 @@
    String ocName = "person";
    assertTrue(DirectoryServer.getSchema().hasObjectClass(ocName));
    runModify(argsNotPermissive(), ldif, UNWILLING_TO_PERFORM);
    runModify(argsNotPermissive(), ldif, CONSTRAINT_VIOLATION);
    assertTrue(DirectoryServer.getSchema().hasObjectClass(ocName));
  }
@@ -1810,7 +1810,7 @@
      assertFalse(DirectoryServer.getSchema().hasObjectClass(ocName));
      runModify(argsPermissive(), addOCThenNF, SUCCESS);
      runModify(argsPermissive(), deleteOC, UNWILLING_TO_PERFORM);
      runModify(argsPermissive(), deleteOC, CONSTRAINT_VIOLATION);
      assertTrue(DirectoryServer.getSchema().hasObjectClass(ocName));
    }
    finally
@@ -1853,7 +1853,7 @@
    String ocName = "testremoveobjectclassreferencedbydcr";
    assertFalse(DirectoryServer.getSchema().hasObjectClass(ocName));
    runModify(argsNotPermissive(), ldif, UNWILLING_TO_PERFORM);
    runModify(argsNotPermissive(), ldif, CONSTRAINT_VIOLATION);
    assertTrue(DirectoryServer.getSchema().hasObjectClass(ocName));
  }
@@ -2397,7 +2397,7 @@
    String nameFormName = "testremovenameformreferencedbydsrnf";
    assertFalse(DirectoryServer.getSchema().hasNameForm(nameFormName));
    runModify(argsNotPermissive(), ldif, UNWILLING_TO_PERFORM);
    runModify(argsNotPermissive(), ldif, CONSTRAINT_VIOLATION);
    assertTrue(DirectoryServer.getSchema().hasNameForm(nameFormName));
  }
@@ -3658,7 +3658,7 @@
    int ruleID = 999007;
    assertSchemaHasDITStructureRule(ruleID, false);
    runModify(argsNotPermissive(), ldif, UNWILLING_TO_PERFORM);
    runModify(argsNotPermissive(), ldif, CONSTRAINT_VIOLATION);
    assertSchemaHasDITStructureRule(ruleID, true);
    ldif = toLdif(