From 13454daacf26715c14db41291824571d7dcfe678 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.
---
opends/src/server/org/opends/server/util/StaticUtils.java | 53 +++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 53 insertions(+), 0 deletions(-)
diff --git a/opends/src/server/org/opends/server/util/StaticUtils.java b/opends/src/server/org/opends/server/util/StaticUtils.java
index f67d463..6c3e088 100644
--- a/opends/src/server/org/opends/server/util/StaticUtils.java
+++ b/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);
+ }
+ }
+ }
}
--
Gitblit v1.10.0