From cea2f4bd87fdce359d8af0caaa7ca4c26deb1883 Mon Sep 17 00:00:00 2001
From: dugan <dugan@localhost>
Date: Wed, 15 Apr 2009 13:33:37 +0000
Subject: [PATCH] import-ldif does not create inherited objectclass attributes. Issue 3926.
---
opendj-sdk/opends/src/server/org/opends/server/util/StaticUtils.java | 53 ++++++++++++++++++++++++++
opendj-sdk/opends/src/server/org/opends/server/workflowelement/localbackend/LocalBackendAddOperation.java | 30 +-------------
opendj-sdk/opends/src/server/org/opends/server/util/LDIFReader.java | 5 ++
3 files changed, 60 insertions(+), 28 deletions(-)
diff --git a/opendj-sdk/opends/src/server/org/opends/server/util/LDIFReader.java b/opendj-sdk/opends/src/server/org/opends/server/util/LDIFReader.java
index e157b49..c73f366 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/util/LDIFReader.java
+++ b/opendj-sdk/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());
}
diff --git a/opendj-sdk/opends/src/server/org/opends/server/util/StaticUtils.java b/opendj-sdk/opends/src/server/org/opends/server/util/StaticUtils.java
index f67d463..6c3e088 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/util/StaticUtils.java
+++ b/opendj-sdk/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);
+ }
+ }
+ }
}
diff --git a/opendj-sdk/opends/src/server/org/opends/server/workflowelement/localbackend/LocalBackendAddOperation.java b/opendj-sdk/opends/src/server/org/opends/server/workflowelement/localbackend/LocalBackendAddOperation.java
index c81a413..69483c8 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/workflowelement/localbackend/LocalBackendAddOperation.java
+++ b/opendj-sdk/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.
--
Gitblit v1.10.0