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

dugan
15.33.2009 13454daacf26715c14db41291824571d7dcfe678
import-ldif does not create inherited objectclass attributes. Issue 3926.
3 files modified
88 ■■■■■ changed files
opends/src/server/org/opends/server/util/LDIFReader.java 5 ●●●● patch | view | raw | blame | history
opends/src/server/org/opends/server/util/StaticUtils.java 53 ●●●●● patch | view | raw | blame | history
opends/src/server/org/opends/server/workflowelement/localbackend/LocalBackendAddOperation.java 30 ●●●● patch | view | raw | blame | history
opends/src/server/org/opends/server/util/LDIFReader.java
@@ -33,7 +33,7 @@
import org.opends.server.loggers.debug.DebugTracer;
import static org.opends.server.loggers.ErrorLogger.logError;
import static org.opends.messages.UtilityMessages.*;
import static org.opends.server.util.StaticUtils.toLowerCase;
import static org.opends.server.util.StaticUtils.*;
import static org.opends.server.util.Validator.*;
import java.io.BufferedReader;
@@ -323,6 +323,9 @@
          entriesRejected++;
          throw new LDIFException(message, lastEntryLineNumber, true);
        }
        //Add any superior objectclass(s) missing in an entries
        //objectclass map.
        addSuperiorObjectClasses(entry.getObjectClasses());
      }
opends/src/server/org/opends/server/util/StaticUtils.java
@@ -52,6 +52,7 @@
import java.util.ArrayList;
import java.util.Collection;
import java.util.Date;
import java.util.HashSet;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.List;
@@ -4445,5 +4446,57 @@
    }
    return (char) byteValue;
  }
  /**
   * Add all of the superior objectclasses to the specified objectclass
   * map if they don't already exist. Used by add and import-ldif to
   * add missing superior objectclasses to entries that don't have them.
   *
   * @param objectClasses A Map of objectclasses.
   */
  public static void addSuperiorObjectClasses(Map<ObjectClass,
      String> objectClasses) {
      HashSet<ObjectClass> additionalClasses = null;
      for (ObjectClass oc : objectClasses.keySet())
      {
        ObjectClass superiorClass = oc.getSuperiorClass();
        if ((superiorClass != null) &&
            (! objectClasses.containsKey(superiorClass)))
        {
          if (additionalClasses == null)
          {
            additionalClasses = new HashSet<ObjectClass>();
          }
          additionalClasses.add(superiorClass);
        }
      }
      if (additionalClasses != null)
      {
        for (ObjectClass oc : additionalClasses)
        {
          addObjectClassChain(oc, objectClasses);
        }
      }
  }
  private static void addObjectClassChain(ObjectClass objectClass,
      Map<ObjectClass, String> objectClasses)
  {
    if (objectClasses != null){
      if (! objectClasses.containsKey(objectClass))
      {
        objectClasses.put(objectClass, objectClass.getNameOrOID());
      }
      ObjectClass superiorClass = objectClass.getSuperiorClass();
      if ((superiorClass != null) &&
          (! objectClasses.containsKey(superiorClass)))
      {
        addObjectClassChain(superiorClass, objectClasses);
      }
    }
  }
}
opends/src/server/org/opends/server/workflowelement/localbackend/LocalBackendAddOperation.java
@@ -442,33 +442,9 @@
          break addProcessing;
        }
        // Check to make sure that all objectclasses have their superior classes
        // listed in the entry.  If not, then add them.
        HashSet<ObjectClass> additionalClasses = null;
        for (ObjectClass oc : objectClasses.keySet())
        {
          ObjectClass superiorClass = oc.getSuperiorClass();
          if ((superiorClass != null) &&
              (! objectClasses.containsKey(superiorClass)))
          {
            if (additionalClasses == null)
            {
              additionalClasses = new HashSet<ObjectClass>();
            }
            additionalClasses.add(superiorClass);
          }
        }
        if (additionalClasses != null)
        {
          for (ObjectClass oc : additionalClasses)
          {
            addObjectClassChain(oc);
          }
        }
        //Add any superior objectclass(s) missing in an entries
        //objectclass map.
        addSuperiorObjectClasses(objectClasses);
        // Create an entry object to encapsulate the set of attributes and
        // objectclasses.