From 56523213d3c59bde5d301464d5cde58ea9a85cb5 Mon Sep 17 00:00:00 2001
From: lutoff <lutoff@localhost>
Date: Tue, 01 Apr 2008 09:42:21 +0000
Subject: [PATCH] Fix for issue #3042 (ldifsearch: with a filter file containing multiple filters, only the first filter is used)

---
 opendj-sdk/opends/src/server/org/opends/server/tools/LDIFSearch.java |   48 ++++++++++++++++++++++++++++++++++++++++--------
 1 files changed, 40 insertions(+), 8 deletions(-)

diff --git a/opendj-sdk/opends/src/server/org/opends/server/tools/LDIFSearch.java b/opendj-sdk/opends/src/server/org/opends/server/tools/LDIFSearch.java
index 54c103f..a99fa3b 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/tools/LDIFSearch.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/tools/LDIFSearch.java
@@ -29,6 +29,9 @@
 
 
 
+import java.io.BufferedReader;
+import java.io.FileReader;
+import java.io.IOException;
 import java.io.OutputStream;
 import java.io.PrintStream;
 import java.util.ArrayList;
@@ -55,12 +58,12 @@
 import org.opends.server.util.args.ArgumentException;
 import org.opends.server.util.args.ArgumentParser;
 import org.opends.server.util.args.BooleanArgument;
-import org.opends.server.util.args.FileBasedArgument;
 import org.opends.server.util.args.IntegerArgument;
 import org.opends.server.util.args.MultiChoiceArgument;
 import org.opends.server.util.args.StringArgument;
 
 import static org.opends.messages.ToolMessages.*;
+import static org.opends.server.util.ServerConstants.MAX_LINE_WIDTH;
 import static org.opends.server.util.StaticUtils.*;
 import static org.opends.server.tools.ToolConstants.*;
 
@@ -177,7 +180,7 @@
     BooleanArgument     dontWrap;
     BooleanArgument     overwriteExisting;
     BooleanArgument     showUsage;
-    FileBasedArgument   filterFile;
+    StringArgument      filterFile;
     IntegerArgument     sizeLimit;
     IntegerArgument     timeLimit;
     MultiChoiceArgument scopeString;
@@ -230,10 +233,9 @@
       configClass.setHidden(true);
       argParser.addArgument(configClass);
 
-      filterFile = new FileBasedArgument("filterfile", 'f', "filterFile", false,
-                            false, INFO_FILTER_FILE_PLACEHOLDER.get(), null,
-                            null,
-                            INFO_LDIFSEARCH_DESCRIPTION_FILTER_FILE.get());
+      filterFile = new StringArgument("filterfile", 'f', "filterFile", false,
+          false, true, INFO_FILTER_FILE_PLACEHOLDER.get(), null, null,
+          INFO_LDIFSEARCH_DESCRIPTION_FILTER_FILE.get());
       argParser.addArgument(filterFile);
 
       outputFile = new StringArgument(
@@ -316,10 +318,40 @@
     boolean            includeObjectclassAttrs = true;
     LinkedList<String> attributeNames;
     LinkedList<String> objectClassNames    = new LinkedList<String>();
-    LinkedList<String> filterStrings;
+    LinkedList<String> filterStrings = new LinkedList<String>();
     if (filterFile.isPresent())
     {
-      filterStrings = filterFile.getValues();
+      BufferedReader in = null;
+      try
+      {
+        String fileNameValue = filterFile.getValue();
+        in = new BufferedReader(new FileReader(fileNameValue));
+        String line = null;
+
+        while ((line = in.readLine()) != null)
+        {
+          if(line.trim().equals(""))
+          {
+            // ignore empty lines.
+            continue;
+          }
+          filterStrings.add(line);
+        }
+      } catch(Exception e)
+      {
+        err.println(wrapText(e.getMessage(), MAX_LINE_WIDTH));
+        return 1;
+      }
+      finally
+      {
+        if(in != null)
+        {
+          try
+          {
+           in.close();
+          } catch (IOException ioe) {}
+        }
+      }
 
       ArrayList<String> trailingArguments = argParser.getTrailingArguments();
       if ((trailingArguments == null) || trailingArguments.isEmpty())

--
Gitblit v1.10.0