From b8e0c2f59c913da9258ce01a14b631730e554c96 Mon Sep 17 00:00:00 2001
From: Jean-Noël Rouvignac <jean-noel.rouvignac@forgerock.com>
Date: Mon, 04 Apr 2016 08:10:10 +0000
Subject: [PATCH] OPENDJ-2817 Online import-ldif no longer working (NPE)
---
opendj-server-legacy/src/main/java/org/opends/server/tools/tasks/TaskEntry.java | 44 +++++++++++++++++++++++++++++++++++++++-----
1 files changed, 39 insertions(+), 5 deletions(-)
diff --git a/opendj-server-legacy/src/main/java/org/opends/server/tools/tasks/TaskEntry.java b/opendj-server-legacy/src/main/java/org/opends/server/tools/tasks/TaskEntry.java
index a45495d..66a5185 100644
--- a/opendj-server-legacy/src/main/java/org/opends/server/tools/tasks/TaskEntry.java
+++ b/opendj-server-legacy/src/main/java/org/opends/server/tools/tasks/TaskEntry.java
@@ -16,6 +16,7 @@
*/
package org.opends.server.tools.tasks;
+import static org.opends.server.util.CollectionUtils.*;
import static org.opends.server.util.ServerConstants.*;
import java.text.DateFormat;
@@ -27,6 +28,7 @@
import java.util.HashMap;
import java.util.List;
import java.util.Map;
+import java.util.Set;
import java.util.TimeZone;
import org.forgerock.i18n.LocalizableMessage;
@@ -36,10 +38,8 @@
import org.opends.server.backends.task.FailedDependencyAction;
import org.opends.server.backends.task.Task;
import org.opends.server.backends.task.TaskState;
-import org.opends.server.core.DirectoryServer;
import org.opends.server.types.Attribute;
import org.opends.server.types.Entry;
-import org.opends.server.types.ObjectClass;
import org.opends.server.util.StaticUtils;
/**
@@ -54,6 +54,27 @@
private int hashCode;
+ /**
+ * These attributes associated with the ds-task object
+ * class are all handled explicitly below in the constructor.
+ */
+ private static final Set<String> supAttrNames = newHashSet(
+ // @formatter:off
+ "ds-task-id",
+ "ds-task-class-name",
+ "ds-task-state",
+ "ds-task-scheduled-start-time",
+ "ds-task-actual-start-time",
+ "ds-task-completion-time",
+ "ds-task-dependency-id",
+ "ds-task-failed-dependency-action",
+ "ds-task-log-message",
+ "ds-task-notify-on-completion",
+ "ds-task-notify-on-error",
+ "ds-recurring-task-id",
+ "ds-recurring-task-schedule");
+ // @formatter:on
+
private String id;
private String className;
private String state;
@@ -98,10 +119,10 @@
notifyComp = getMultiStringValue(entry, p + "notify-on-completion");
schedTab = getSingleStringValue(entry, "ds-recurring-task-schedule");
- final ObjectClass dsTask = DirectoryServer.getObjectClass("ds-task");
- final ObjectClass dsRecurringTask = DirectoryServer.getObjectClass("ds-recurring-task");
+ // Build a map of non-superior attribute value pairs for display
for (AttributeType attrType : entry.getUserAttributes().keySet()) {
- if (!dsTask.isRequiredOrOptional(attrType) && !dsRecurringTask.isRequiredOrOptional(attrType)) {
+ // See if we've handled it already above
+ if (!hasAnyNameOrOID(attrType, supAttrNames)) {
LocalizableMessage attrTypeName = getAttributeDisplayName(attrType);
for (Attribute attr : entry.getUserAttribute(attrType)) {
for (ByteString av : attr) {
@@ -115,6 +136,7 @@
}
}
}
+
hashCode += id.hashCode();
hashCode += className.hashCode();
hashCode += state.hashCode();
@@ -130,6 +152,18 @@
hashCode += taskSpecificAttrValues.hashCode();
}
+ private boolean hasAnyNameOrOID(AttributeType attrType, Set<String> attrNames)
+ {
+ for (String attrName : attrNames)
+ {
+ if (attrType.hasNameOrOID(attrName))
+ {
+ return true;
+ }
+ }
+ return false;
+ }
+
@Override
public int hashCode()
{
--
Gitblit v1.10.0