From 610d2d3ad1e5b3dd9ff82201ce7e6aae8b9887d7 Mon Sep 17 00:00:00 2001
From: dugan <dugan@localhost>
Date: Thu, 02 Apr 2009 03:21:47 +0000
Subject: [PATCH] Issue 3251: LDIFReader rejectLastEntry prints wrong entry

---
 opendj-sdk/opends/src/server/org/opends/server/util/LDIFReader.java                    |   34 ++++++++++++++++++++++++++++++++++
 opendj-sdk/opends/src/server/org/opends/server/backends/jeb/importLDIF/WorkThread.java |    4 ++--
 2 files changed, 36 insertions(+), 2 deletions(-)

diff --git a/opendj-sdk/opends/src/server/org/opends/server/backends/jeb/importLDIF/WorkThread.java b/opendj-sdk/opends/src/server/org/opends/server/backends/jeb/importLDIF/WorkThread.java
index 651134e..8fc414b 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/backends/jeb/importLDIF/WorkThread.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/backends/jeb/importLDIF/WorkThread.java
@@ -424,7 +424,7 @@
         dn2id.remove(null, entryDN);
         Message msg =
                 ERR_JEB_IMPORT_PARENT_NOT_FOUND.get(parentDN.toString());
-        context.getLDIFReader().rejectLastEntry(msg);
+        context.getLDIFReader().rejectEntry(entry, msg);
         return false;
       }
     }
@@ -503,7 +503,7 @@
         element.setExistingEntry(existingEntry);
       } else {
         Message msg = WARN_JEB_IMPORT_ENTRY_EXISTS.get();
-        context.getLDIFReader().rejectLastEntry(msg);
+        context.getLDIFReader().rejectEntry(entry, msg);
         entryID = null;
       }
     } else {
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 ef7b3c2..e157b49 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
@@ -1148,6 +1148,40 @@
     }
   }
 
+  /**
+   * Log the specified entry and messages in the reject writer. The method is
+   * intended to be used in a threaded environment, where individual import
+   * threads need to log an entry and message to the reject file.
+   *
+   * @param e The entry to log.
+   * @param message The message to log.
+   */
+  public synchronized void rejectEntry(Entry e, Message message) {
+    BufferedWriter rejectWriter = importConfig.getRejectWriter();
+    entriesRejected++;
+    if (rejectWriter != null) {
+      try {
+        if ((message != null) && (message.length() > 0)) {
+          rejectWriter.write("# ");
+          rejectWriter.write(message.toString());
+          rejectWriter.newLine();
+        }
+        String dnStr = e.getDN().toString();
+        rejectWriter.write(dnStr);
+        rejectWriter.newLine();
+        List<StringBuilder> eLDIF = e.toLDIF();
+        for(StringBuilder l : eLDIF) {
+          rejectWriter.write(l.toString());
+          rejectWriter.newLine();
+        }
+        rejectWriter.newLine();
+      } catch (IOException ex) {
+        if (debugEnabled())
+          TRACER.debugCaught(DebugLogLevel.ERROR, ex);
+      }
+    }
+  }
+
 
 
   /**

--
Gitblit v1.10.0