From f4f852981fb7aed262eae385aec5bcba8dfe5049 Mon Sep 17 00:00:00 2001
From: Jean-Noël Rouvignac <jean-noel.rouvignac@forgerock.com>
Date: Fri, 03 Jun 2016 06:45:18 +0000
Subject: [PATCH] SchemaBackend.java: code cleanups

---
 opendj-server-legacy/src/main/java/org/opends/server/backends/SchemaBackend.java |  425 ++++++++++++++++++++++++++---------------------------
 1 files changed, 209 insertions(+), 216 deletions(-)

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 9ff1caf..a98e771 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
@@ -743,162 +743,11 @@
       switch (m.getModificationType().asEnum())
       {
         case ADD:
-          if (at.equals(attributeTypesType))
-          {
-            for (ByteString v : a)
-            {
-              AttributeType attributeType = newSchema.parseAttributeType(v.toString());
-              addAttributeType(attributeType, newSchema, modifiedSchemaFiles);
-            }
-          }
-          else if (at.equals(objectClassesType))
-          {
-            for (ByteString v : a)
-            {
-              ObjectClass objectClass = newSchema.parseObjectClass(v.toString());
-              addObjectClass(objectClass, newSchema, modifiedSchemaFiles);
-            }
-          }
-          else if (at.equals(nameFormsType))
-          {
-            for (ByteString v : a)
-            {
-              NameForm nf = newSchema.parseNameForm(v.toString());
-              addNameForm(nf, newSchema, modifiedSchemaFiles);
-            }
-          }
-          else if (at.equals(ditContentRulesType))
-          {
-            for (ByteString v : a)
-            {
-              DITContentRule dcr = newSchema.parseDITContentRule(v.toString());
-              addDITContentRule(dcr, newSchema, modifiedSchemaFiles);
-            }
-          }
-          else if (at.equals(ditStructureRulesType))
-          {
-            for (ByteString v : a)
-            {
-              DITStructureRule dsr = newSchema.parseDITStructureRule(v.toString());
-              addDITStructureRule(dsr, newSchema, modifiedSchemaFiles);
-            }
-          }
-          else if (at.equals(matchingRuleUsesType))
-          {
-            for (ByteString v : a)
-            {
-              MatchingRuleUse mru = newSchema.parseMatchingRuleUse(v.toString());
-              addMatchingRuleUse(mru, newSchema, modifiedSchemaFiles);
-            }
-          }
-          else if (at.equals(ldapSyntaxesType))
-          {
-            for (ByteString v : a)
-            {
-              try
-              {
-                addLdapSyntaxDescription(v.toString(), newSchema, modifiedSchemaFiles);
-              }
-              catch (DirectoryException de)
-              {
-                logger.traceException(de);
-
-                LocalizableMessage message =
-                    ERR_SCHEMA_MODIFY_CANNOT_DECODE_LDAP_SYNTAX.get(v, de.getMessageObject());
-                throw new DirectoryException(
-                    ResultCode.INVALID_ATTRIBUTE_SYNTAX, message, de);
-              }
-            }
-          }
-          else
-          {
-            LocalizableMessage message = ERR_SCHEMA_MODIFY_UNSUPPORTED_ATTRIBUTE_TYPE.get(a.getAttributeDescription());
-            throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
-          }
-
+          addAttribute(newSchema, a, modifiedSchemaFiles);
           break;
 
         case DELETE:
-          if (a.isEmpty())
-          {
-            LocalizableMessage message = ERR_SCHEMA_MODIFY_DELETE_NO_VALUES.get(a.getAttributeDescription());
-            throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
-          }
-
-          if (at.equals(attributeTypesType))
-          {
-            for (ByteString v : a)
-            {
-              AttributeType type = newSchema.parseAttributeType(v.toString());
-              removeAttributeType(type, newSchema, modifiedSchemaFiles);
-            }
-          }
-          else if (at.equals(objectClassesType))
-          {
-            for (ByteString v : a)
-            {
-              ObjectClass oc = newSchema.parseObjectClass(v.toString());
-              removeObjectClass(oc, newSchema, mods, pos, modifiedSchemaFiles);
-            }
-          }
-          else if (at.equals(nameFormsType))
-          {
-            for (ByteString v : a)
-            {
-              NameForm nf = newSchema.parseNameForm(v.toString());
-              removeNameForm(nf, newSchema, mods, pos, modifiedSchemaFiles);
-            }
-          }
-          else if (at.equals(ditContentRulesType))
-          {
-            for (ByteString v : a)
-            {
-              DITContentRule dcr = newSchema.parseDITContentRule(v.toString());
-              removeDITContentRule(dcr, newSchema, modifiedSchemaFiles);
-            }
-          }
-          else if (at.equals(ditStructureRulesType))
-          {
-            for (ByteString v : a)
-            {
-              DITStructureRule dsr = newSchema.parseDITStructureRule(v.toString());
-              removeDITStructureRule(dsr, newSchema, mods, pos, modifiedSchemaFiles);
-            }
-          }
-          else if (at.equals(matchingRuleUsesType))
-          {
-            for (ByteString v : a)
-            {
-              MatchingRuleUse mru = newSchema.parseMatchingRuleUse(v.toString());
-              removeMatchingRuleUse(mru, newSchema, modifiedSchemaFiles);
-            }
-          }
-          else if (at.equals(ldapSyntaxesType))
-          {
-            for (ByteString v : a)
-            {
-              try
-              {
-                removeLdapSyntaxDescription(v.toString(), newSchema, modifiedSchemaFiles);
-              }
-              catch (DirectoryException de)
-              {
-                logger.traceException(de);
-
-                LocalizableMessage message =
-                    ERR_SCHEMA_MODIFY_CANNOT_DECODE_LDAP_SYNTAX.get(
-                        v, de.getMessageObject());
-                throw new DirectoryException(
-                    ResultCode.INVALID_ATTRIBUTE_SYNTAX, message, de);
-              }
-            }
-          }
-          else
-          {
-            LocalizableMessage message = ERR_SCHEMA_MODIFY_UNSUPPORTED_ATTRIBUTE_TYPE.get(a.getAttributeDescription());
-            throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
-          }
-
+          deleteAttribute(newSchema, a, mods, pos, modifiedSchemaFiles);
           break;
 
         case REPLACE:
@@ -945,6 +794,168 @@
                            System.currentTimeMillis());
   }
 
+  private void addAttribute(Schema newSchema, Attribute a, Set<String> modifiedSchemaFiles) throws DirectoryException
+  {
+    AttributeType at = a.getAttributeDescription().getAttributeType();
+    if (at.equals(attributeTypesType))
+    {
+      for (ByteString v : a)
+      {
+        AttributeType attributeType = newSchema.parseAttributeType(v.toString());
+        addAttributeType(attributeType, newSchema, modifiedSchemaFiles);
+      }
+    }
+    else if (at.equals(objectClassesType))
+    {
+      for (ByteString v : a)
+      {
+        ObjectClass objectClass = newSchema.parseObjectClass(v.toString());
+        addObjectClass(objectClass, newSchema, modifiedSchemaFiles);
+      }
+    }
+    else if (at.equals(nameFormsType))
+    {
+      for (ByteString v : a)
+      {
+        NameForm nf = newSchema.parseNameForm(v.toString());
+        addNameForm(nf, newSchema, modifiedSchemaFiles);
+      }
+    }
+    else if (at.equals(ditContentRulesType))
+    {
+      for (ByteString v : a)
+      {
+        DITContentRule dcr = newSchema.parseDITContentRule(v.toString());
+        addDITContentRule(dcr, newSchema, modifiedSchemaFiles);
+      }
+    }
+    else if (at.equals(ditStructureRulesType))
+    {
+      for (ByteString v : a)
+      {
+        DITStructureRule dsr = newSchema.parseDITStructureRule(v.toString());
+        addDITStructureRule(dsr, newSchema, modifiedSchemaFiles);
+      }
+    }
+    else if (at.equals(matchingRuleUsesType))
+    {
+      for (ByteString v : a)
+      {
+        MatchingRuleUse mru = newSchema.parseMatchingRuleUse(v.toString());
+        addMatchingRuleUse(mru, newSchema, modifiedSchemaFiles);
+      }
+    }
+    else if (at.equals(ldapSyntaxesType))
+    {
+      for (ByteString v : a)
+      {
+        try
+        {
+          addLdapSyntaxDescription(v.toString(), newSchema, modifiedSchemaFiles);
+        }
+        catch (DirectoryException de)
+        {
+          logger.traceException(de);
+
+          LocalizableMessage message =
+              ERR_SCHEMA_MODIFY_CANNOT_DECODE_LDAP_SYNTAX.get(v, de.getMessageObject());
+          throw new DirectoryException(
+              ResultCode.INVALID_ATTRIBUTE_SYNTAX, message, de);
+        }
+      }
+    }
+    else
+    {
+      LocalizableMessage message = ERR_SCHEMA_MODIFY_UNSUPPORTED_ATTRIBUTE_TYPE.get(a.getAttributeDescription());
+      throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
+    }
+  }
+
+  private void deleteAttribute(Schema newSchema, Attribute a, List<Modification> mods, int pos,
+      Set<String> modifiedSchemaFiles) throws DirectoryException
+  {
+    AttributeType at = a.getAttributeDescription().getAttributeType();
+    if (a.isEmpty())
+    {
+      LocalizableMessage message = ERR_SCHEMA_MODIFY_DELETE_NO_VALUES.get(a.getAttributeDescription());
+      throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
+    }
+
+    if (at.equals(attributeTypesType))
+    {
+      for (ByteString v : a)
+      {
+        AttributeType type = newSchema.parseAttributeType(v.toString());
+        removeAttributeType(type, newSchema, modifiedSchemaFiles);
+      }
+    }
+    else if (at.equals(objectClassesType))
+    {
+      for (ByteString v : a)
+      {
+        ObjectClass oc = newSchema.parseObjectClass(v.toString());
+        removeObjectClass(oc, newSchema, mods, pos, modifiedSchemaFiles);
+      }
+    }
+    else if (at.equals(nameFormsType))
+    {
+      for (ByteString v : a)
+      {
+        NameForm nf = newSchema.parseNameForm(v.toString());
+        removeNameForm(nf, newSchema, mods, pos, modifiedSchemaFiles);
+      }
+    }
+    else if (at.equals(ditContentRulesType))
+    {
+      for (ByteString v : a)
+      {
+        DITContentRule dcr = newSchema.parseDITContentRule(v.toString());
+        removeDITContentRule(dcr, newSchema, modifiedSchemaFiles);
+      }
+    }
+    else if (at.equals(ditStructureRulesType))
+    {
+      for (ByteString v : a)
+      {
+        DITStructureRule dsr = newSchema.parseDITStructureRule(v.toString());
+        removeDITStructureRule(dsr, newSchema, mods, pos, modifiedSchemaFiles);
+      }
+    }
+    else if (at.equals(matchingRuleUsesType))
+    {
+      for (ByteString v : a)
+      {
+        MatchingRuleUse mru = newSchema.parseMatchingRuleUse(v.toString());
+        removeMatchingRuleUse(mru, newSchema, modifiedSchemaFiles);
+      }
+    }
+    else if (at.equals(ldapSyntaxesType))
+    {
+      for (ByteString v : a)
+      {
+        try
+        {
+          removeLdapSyntaxDescription(v.toString(), newSchema, modifiedSchemaFiles);
+        }
+        catch (DirectoryException de)
+        {
+          logger.traceException(de);
+
+          LocalizableMessage message =
+              ERR_SCHEMA_MODIFY_CANNOT_DECODE_LDAP_SYNTAX.get(
+                  v, de.getMessageObject());
+          throw new DirectoryException(
+              ResultCode.INVALID_ATTRIBUTE_SYNTAX, message, de);
+        }
+      }
+    }
+    else
+    {
+      LocalizableMessage message = ERR_SCHEMA_MODIFY_UNSUPPORTED_ATTRIBUTE_TYPE.get(a.getAttributeDescription());
+      throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
+    }
+  }
+
   /**
    * Re-write all schema files using the provided new Schema and list of
    * modified files.
@@ -955,8 +966,7 @@
    *
    * @throws DirectoryException  When the new file cannot be written.
    */
-  private void updateSchemaFiles(
-               Schema newSchema, TreeSet<String> modifiedSchemaFiles)
+  private void updateSchemaFiles(Schema newSchema, TreeSet<String> modifiedSchemaFiles)
           throws DirectoryException
   {
     // We'll re-write all
@@ -1354,7 +1364,7 @@
    *                              schema.
    */
   private void removeObjectClass(ObjectClass objectClass, Schema schema,
-                                 ArrayList<Modification> modifications,
+                                 List<Modification> modifications,
                                  int currentPosition,
                                  Set<String> modifiedSchemaFiles)
           throws DirectoryException
@@ -1552,7 +1562,7 @@
    *                              the provided name form from the server schema.
    */
   private void removeNameForm(NameForm nameForm, Schema schema,
-                              ArrayList<Modification> modifications,
+                              List<Modification> modifications,
                               int currentPosition,
                               Set<String> modifiedSchemaFiles)
           throws DirectoryException
@@ -1914,7 +1924,7 @@
    */
   private void removeDITStructureRule(DITStructureRule ditStructureRule,
                                       Schema schema,
-                                      ArrayList<Modification> modifications,
+                                      List<Modification> modifications,
                                       int currentPosition,
                                       Set<String> modifiedSchemaFiles)
           throws DirectoryException
@@ -2943,14 +2953,10 @@
       // or modified in the schema
       for (ByteString v : a)
       {
-        // Parse the attribute type.
         AttributeType attrType = schema.parseAttributeType(v.toString());
         String schemaFile = getSchemaFile(attrType);
-        if (CONFIG_SCHEMA_ELEMENTS_FILE.equals(schemaFile))
+        if (is02ConfigLdif(schemaFile))
         {
-          // Don't import the file containing the definitions of the
-          // Schema elements used for configuration because these
-          // definitions may vary between versions of OpenDJ.
           continue;
         }
 
@@ -2962,11 +2968,7 @@
           if (hasDefinitionChanged(schema, attrType))
           {
             newSchema.registerAttributeType(attrType, schemaFile, true);
-
-            if (schemaFile != null)
-            {
-              modifiedSchemaFiles.add(schemaFile);
-            }
+            addIfNotNull(modifiedSchemaFiles, schemaFile);
           }
         }
         catch (Exception e)
@@ -2981,21 +2983,15 @@
     for (AttributeType removeType : newSchema.getAttributeTypes())
     {
       String schemaFile = getSchemaFile(removeType);
-      if (CONFIG_SCHEMA_ELEMENTS_FILE.equals(schemaFile) || CORE_SCHEMA_ELEMENTS_FILE.equals(schemaFile))
+      if (is02ConfigLdif(schemaFile) || CORE_SCHEMA_ELEMENTS_FILE.equals(schemaFile))
       {
-        // Don't import the file containing the definitions of the
-        // Schema elements used for configuration because these
-        // definitions may vary between versions of OpenDJ.
         // Also never delete anything from the core schema file.
         continue;
       }
       if (!oidList.contains(removeType.getOID()))
       {
         newSchema.deregisterAttributeType(removeType);
-        if (schemaFile != null)
-        {
-          modifiedSchemaFiles.add(schemaFile);
-        }
+        addIfNotNull(modifiedSchemaFiles, schemaFile);
       }
     }
 
@@ -3010,11 +3006,8 @@
         // appear in the new config schema.
         ObjectClass newObjectClass = newSchema.parseObjectClass(v.toString());
         String schemaFile = getSchemaFile(newObjectClass);
-        if (CONFIG_SCHEMA_ELEMENTS_FILE.equals(schemaFile))
+        if (is02ConfigLdif(schemaFile))
         {
-          // Don't import the file containing the definitions of the
-          // Schema elements used for configuration because these
-          // definitions may vary between versions of OpenDJ.
           continue;
         }
 
@@ -3026,11 +3019,7 @@
           if (hasDefinitionChanged(schema, newObjectClass))
           {
             newSchema.registerObjectClass(newObjectClass, schemaFile, true);
-
-            if (schemaFile != null)
-            {
-              modifiedSchemaFiles.add(schemaFile);
-            }
+            addIfNotNull(modifiedSchemaFiles, schemaFile);
           }
         }
         catch (Exception e)
@@ -3045,21 +3034,14 @@
     for (ObjectClass removeClass : newSchema.getObjectClasses())
     {
       String schemaFile = getSchemaFile(removeClass);
-      if (CONFIG_SCHEMA_ELEMENTS_FILE.equals(schemaFile))
+      if (is02ConfigLdif(schemaFile))
       {
-        // Don't import the file containing the definition of the
-        // Schema elements used for configuration because these
-        // definitions may vary between versions of OpenDJ.
         continue;
       }
       if (!oidList.contains(removeClass.getOID()))
       {
         newSchema.deregisterObjectClass(removeClass);
-
-        if (schemaFile != null)
-        {
-          modifiedSchemaFiles.add(schemaFile);
-        }
+        addIfNotNull(modifiedSchemaFiles, schemaFile);
       }
     }
 
@@ -3072,6 +3054,23 @@
     }
   }
 
+  /**
+   * Do not import the file containing the definitions of the Schema elements used for configuration
+   * because these definitions may vary between versions of OpenDJ.
+   */
+  private boolean is02ConfigLdif(String schemaFile)
+  {
+    return CONFIG_SCHEMA_ELEMENTS_FILE.equals(schemaFile);
+  }
+
+  private <T> void addIfNotNull(Collection<T> col, T element)
+  {
+    if (element != null)
+    {
+      col.add(element);
+    }
+  }
+
   private boolean hasDefinitionChanged(Schema schema, AttributeType newAttrType)
   {
     AttributeType oldAttrType = schema.getAttributeType(newAttrType.getOID());
@@ -3144,28 +3143,8 @@
     try
     {
       Entry configEntry = DirectoryServer.getConfigEntry(configEntryDN);
-      for (List<Attribute> attrs :
-           configEntry.getUserAttributes().values())
-      {
-        for (Attribute a : attrs)
-        {
-          if (! isSchemaConfigAttribute(a))
-          {
-            newUserAttrs.add(a);
-          }
-        }
-      }
-      for (List<Attribute> attrs :
-           configEntry.getOperationalAttributes().values())
-      {
-        for (Attribute a : attrs)
-        {
-          if (! isSchemaConfigAttribute(a))
-          {
-            newUserAttrs.add(a);
-          }
-        }
-      }
+      addAllNonSchemaConfigAttributes(newUserAttrs, configEntry.getUserAttributes().values());
+      addAllNonSchemaConfigAttributes(newUserAttrs, configEntry.getOperationalAttributes().values());
     }
     catch (ConfigException e)
     {
@@ -3235,6 +3214,20 @@
     return ccr;
   }
 
+  private void addAllNonSchemaConfigAttributes(List<Attribute> newUserAttrs, Collection<List<Attribute>> attributes)
+  {
+    for (List<Attribute> attrs : attributes)
+    {
+      for (Attribute a : attrs)
+      {
+        if (!isSchemaConfigAttribute(a))
+        {
+          newUserAttrs.add(a);
+        }
+      }
+    }
+  }
+
   /**
    * Indicates whether to treat common schema attributes like user attributes
    * rather than operational attributes.

--
Gitblit v1.10.0