From b430878cf353d7dec499f98c58aa7d91c8266265 Mon Sep 17 00:00:00 2001
From: Gaetan Boismal <gaetan.boismal@forgerock.com>
Date: Thu, 10 Mar 2016 15:49:16 +0000
Subject: [PATCH] OPENDJ-2754 Add wrapColumn option to makeldif

---
 opendj-sdk/opendj-ldap-toolkit/src/test/resources/expected_output_80_column.ldif                         |   14 ++++
 opendj-sdk/opendj-ldap-toolkit/src/main/java/com/forgerock/opendj/ldap/tools/MakeLDIF.java               |   45 +++++++++++----
 opendj-sdk/opendj-ldap-toolkit/src/main/resources/com/forgerock/opendj/ldap/tools/tools_es.properties    |    5 +
 opendj-sdk/opendj-ldap-toolkit/src/main/resources/com/forgerock/opendj/ldap/tools/tools_ja.properties    |    5 +
 opendj-sdk/opendj-ldap-toolkit/src/main/resources/com/forgerock/opendj/ldap/tools/tools_zh_CN.properties |    5 +
 opendj-sdk/opendj-ldap-toolkit/src/main/resources/com/forgerock/opendj/ldap/tools/tools_de.properties    |    5 +
 opendj-sdk/opendj-ldap-toolkit/src/main/resources/com/forgerock/opendj/ldap/tools/tools_zh_TW.properties |    5 +
 opendj-sdk/opendj-ldap-toolkit/src/test/java/com/forgerock/opendj/ldap/tools/MakeLDIFITCase.java         |   10 +++
 opendj-sdk/opendj-ldap-toolkit/src/main/resources/com/forgerock/opendj/ldap/tools/tools_fr.properties    |    5 +
 opendj-sdk/opendj-ldap-toolkit/src/main/resources/com/forgerock/opendj/ldap/tools/tools_ca_ES.properties |   20 ++++++
 opendj-sdk/opendj-ldap-toolkit/src/main/resources/com/forgerock/opendj/ldap/tools/tools_pl.properties    |   20 ++++++
 opendj-sdk/opendj-ldap-toolkit/src/main/resources/com/forgerock/opendj/ldap/tools/tools.properties       |    3 +
 opendj-sdk/opendj-ldap-toolkit/src/main/resources/com/forgerock/opendj/ldap/tools/tools_ko.properties    |    5 +
 13 files changed, 135 insertions(+), 12 deletions(-)

diff --git a/opendj-sdk/opendj-ldap-toolkit/src/main/java/com/forgerock/opendj/ldap/tools/MakeLDIF.java b/opendj-sdk/opendj-ldap-toolkit/src/main/java/com/forgerock/opendj/ldap/tools/MakeLDIF.java
index 93ae75e..a150056 100644
--- a/opendj-sdk/opendj-ldap-toolkit/src/main/java/com/forgerock/opendj/ldap/tools/MakeLDIF.java
+++ b/opendj-sdk/opendj-ldap-toolkit/src/main/java/com/forgerock/opendj/ldap/tools/MakeLDIF.java
@@ -20,6 +20,7 @@
 import static com.forgerock.opendj.cli.ToolVersionHandler.newSdkVersionHandler;
 import static com.forgerock.opendj.ldap.tools.ToolsMessages.*;
 import static com.forgerock.opendj.cli.Utils.filterExitCode;
+import static com.forgerock.opendj.ldap.tools.ToolsMessages.INFO_MAKELDIF_WRAP_COLUMN_PLACEHOLDER;
 import static org.forgerock.util.Utils.closeSilently;
 
 import java.io.BufferedWriter;
@@ -80,6 +81,7 @@
         StringArgument ldifFile;
         StringArgument resourcePath;
         StringArgument constants;
+        IntegerArgument wrapColumn;
         try {
             resourcePath =
                     StringArgument.builder(OPTION_LONG_RESOURCE_PATH)
@@ -114,6 +116,15 @@
                             .description(INFO_MAKELDIF_DESCRIPTION_HELP.get())
                             .buildAndAddToParser(argParser);
 
+            wrapColumn =
+                    IntegerArgument.builder("wrapColumn")
+                            .shortIdentifier('w')
+                            .description(INFO_MAKELDIF_DESCRIPTION_WRAP_COLUMN.get())
+                            .lowerBound(0)
+                            .defaultValue(0)
+                            .valuePlaceholder(INFO_MAKELDIF_WRAP_COLUMN_PLACEHOLDER.get())
+                            .buildAndAddToParser(argParser);
+
             argParser.setUsageArgument(showUsage, getOutputStream());
         } catch (ArgumentException ae) {
             errPrintln(ERR_CANNOT_INITIALIZE_ARGS.get(ae.getMessage()));
@@ -132,12 +143,12 @@
             return 0;
         }
         final String templatePath = argParser.getTrailingArguments().get(0);
-        return run(templatePath, resourcePath, ldifFile, randomSeed, constants);
+        return run(templatePath, resourcePath, ldifFile, randomSeed, constants, wrapColumn);
     }
 
     /** Run Make LDIF with provided arguments. */
-    private int run(final String templatePath, final StringArgument resourcePath,
-            final StringArgument ldifFile, final IntegerArgument randomSeedArg, final StringArgument constants) {
+    private int run(final String templatePath, final StringArgument resourcePath, final StringArgument ldifFile,
+            final IntegerArgument randomSeedArg, final StringArgument constants, final IntegerArgument wrapColumn) {
         LDIFEntryWriter writer = null;
         try (EntryGenerator generator = createGenerator(templatePath, resourcePath, randomSeedArg, constants)) {
             if (generator == null) {
@@ -150,15 +161,14 @@
                 }
             }
 
-            if (ldifFile.isPresent()) {
-                try {
-                    writer = new LDIFEntryWriter(new BufferedWriter(new FileWriter(new File(ldifFile.getValue()))));
-                } catch (IOException e) {
-                    errPrintln(ERR_MAKELDIF_UNABLE_TO_CREATE_LDIF.get(ldifFile.getValue(), e.getMessage()));
-                    return EXIT_CODE_FAILURE;
-                }
-            } else {
-                writer = new LDIFEntryWriter(getOutputStream());
+            try {
+                writer = createLdifWriter(ldifFile, wrapColumn);
+            } catch (final IOException e) {
+                errPrintln(ERR_MAKELDIF_UNABLE_TO_CREATE_LDIF.get(ldifFile.getValue(), e.getMessage()));
+                return EXIT_CODE_FAILURE;
+            } catch (final ArgumentException e) {
+                errPrintln(ERR_ERROR_PARSING_ARGS.get(e.getMessageObject()));
+                return EXIT_CODE_FAILURE;
             }
 
             if (!generateEntries(generator, writer, ldifFile)) {
@@ -173,6 +183,17 @@
         }
     }
 
+    private LDIFEntryWriter createLdifWriter(final StringArgument ldifFile, final IntegerArgument wrapColumn)
+            throws IOException, ArgumentException {
+        final LDIFEntryWriter writer;
+        if (ldifFile.isPresent()) {
+            writer = new LDIFEntryWriter(new BufferedWriter(new FileWriter(ldifFile.getValue())));
+        } else {
+            writer = new LDIFEntryWriter(getOutputStream());
+        }
+        return writer.setWrapColumn(wrapColumn.getIntValue());
+    }
+
     static EntryGenerator createGenerator(final String templatePath, final StringArgument resourcePath,
                                             final IntegerArgument randomSeedArg, final StringArgument constants,
                                             final boolean generateBranches, final ConsoleApplication app) {
diff --git a/opendj-sdk/opendj-ldap-toolkit/src/main/resources/com/forgerock/opendj/ldap/tools/tools.properties b/opendj-sdk/opendj-ldap-toolkit/src/main/resources/com/forgerock/opendj/ldap/tools/tools.properties
index ad61aba..eb1b3ca 100644
--- a/opendj-sdk/opendj-ldap-toolkit/src/main/resources/com/forgerock/opendj/ldap/tools/tools.properties
+++ b/opendj-sdk/opendj-ldap-toolkit/src/main/resources/com/forgerock/opendj/ldap/tools/tools.properties
@@ -323,6 +323,9 @@
  processing :  %s
 ERR_CONSTANT_ARG_CANNOT_DECODE=Unable to parse a constant argument \
  expecting name=value but got %s
+INFO_MAKELDIF_DESCRIPTION_WRAP_COLUMN=Maximum length of an output line \
+ (0 for no wrapping)
+INFO_MAKELDIF_WRAP_COLUMN_PLACEHOLDER={wrapColumn}
 #
 # AddRate Tool
 #
diff --git a/opendj-sdk/opendj-ldap-toolkit/src/main/resources/com/forgerock/opendj/ldap/tools/tools_ca_ES.properties b/opendj-sdk/opendj-ldap-toolkit/src/main/resources/com/forgerock/opendj/ldap/tools/tools_ca_ES.properties
new file mode 100644
index 0000000..906f8c3
--- /dev/null
+++ b/opendj-sdk/opendj-ldap-toolkit/src/main/resources/com/forgerock/opendj/ldap/tools/tools_ca_ES.properties
@@ -0,0 +1,20 @@
+#
+# The contents of this file are subject to the terms of the Common Development and
+# Distribution License (the License). You may not use this file except in compliance with the
+# License.
+#
+# You can obtain a copy of the License at legal/CDDLv1.0.txt. See the License for the
+# specific language governing permission and limitations under the License.
+#
+# When distributing Covered Software, include this CDDL Header Notice in each file and include
+# the License file at legal/CDDLv1.0.txt. If applicable, add the following below the CDDL
+# Header, with the fields enclosed by brackets [] replaced by your own identifying
+# information: "Portions Copyright [year] [name of copyright owner]".
+#
+#  Copyright 2016 ForgeRock AS.
+#
+
+#
+# MakeLDIF tool
+#
+INFO_MAKELDIF_DESCRIPTION_WRAP_COLUMN=Columna in la qual s'envoltaran les l\u00ednies incorrectes (0 per no envoltar)
diff --git a/opendj-sdk/opendj-ldap-toolkit/src/main/resources/com/forgerock/opendj/ldap/tools/tools_de.properties b/opendj-sdk/opendj-ldap-toolkit/src/main/resources/com/forgerock/opendj/ldap/tools/tools_de.properties
index be888c1..e95c476 100644
--- a/opendj-sdk/opendj-ldap-toolkit/src/main/resources/com/forgerock/opendj/ldap/tools/tools_de.properties
+++ b/opendj-sdk/opendj-ldap-toolkit/src/main/resources/com/forgerock/opendj/ldap/tools/tools_de.properties
@@ -11,4 +11,9 @@
 # information: "Portions Copyright [year] [name of copyright owner]".
 #
 # Copyright 2009 Sun Microsystems, Inc.
+# Portions Copyright 2016 ForgeRock AS.
 
+#
+# MakeLDIF tool
+#
+INFO_MAKELDIF_DESCRIPTION_WRAP_COLUMN=Spalte, in der lange Zeile umgebrochen werden sollen (0 f\u00fcr keinen Zeilenumbruch)
diff --git a/opendj-sdk/opendj-ldap-toolkit/src/main/resources/com/forgerock/opendj/ldap/tools/tools_es.properties b/opendj-sdk/opendj-ldap-toolkit/src/main/resources/com/forgerock/opendj/ldap/tools/tools_es.properties
index be888c1..0a3db36 100644
--- a/opendj-sdk/opendj-ldap-toolkit/src/main/resources/com/forgerock/opendj/ldap/tools/tools_es.properties
+++ b/opendj-sdk/opendj-ldap-toolkit/src/main/resources/com/forgerock/opendj/ldap/tools/tools_es.properties
@@ -11,4 +11,9 @@
 # information: "Portions Copyright [year] [name of copyright owner]".
 #
 # Copyright 2009 Sun Microsystems, Inc.
+# Portions Copyright 2016 ForgeRock AS.
 
+#
+# MakeLDIF tool
+#
+INFO_MAKELDIF_DESCRIPTION_WRAP_COLUMN=Columna en la que ajustar l\u00edneas largas (0 para ning\u00fan ajuste)
diff --git a/opendj-sdk/opendj-ldap-toolkit/src/main/resources/com/forgerock/opendj/ldap/tools/tools_fr.properties b/opendj-sdk/opendj-ldap-toolkit/src/main/resources/com/forgerock/opendj/ldap/tools/tools_fr.properties
index be888c1..4a8219b 100644
--- a/opendj-sdk/opendj-ldap-toolkit/src/main/resources/com/forgerock/opendj/ldap/tools/tools_fr.properties
+++ b/opendj-sdk/opendj-ldap-toolkit/src/main/resources/com/forgerock/opendj/ldap/tools/tools_fr.properties
@@ -11,4 +11,9 @@
 # information: "Portions Copyright [year] [name of copyright owner]".
 #
 # Copyright 2009 Sun Microsystems, Inc.
+# Portions Copyright 2016 ForgeRock AS.
 
+#
+# MakeLDIF tool
+#
+INFO_MAKELDIF_DESCRIPTION_WRAP_COLUMN=Taille maximum d'une ligne dans le fichier de sortie (0 = pas de limite)
diff --git a/opendj-sdk/opendj-ldap-toolkit/src/main/resources/com/forgerock/opendj/ldap/tools/tools_ja.properties b/opendj-sdk/opendj-ldap-toolkit/src/main/resources/com/forgerock/opendj/ldap/tools/tools_ja.properties
index be888c1..c140f67 100644
--- a/opendj-sdk/opendj-ldap-toolkit/src/main/resources/com/forgerock/opendj/ldap/tools/tools_ja.properties
+++ b/opendj-sdk/opendj-ldap-toolkit/src/main/resources/com/forgerock/opendj/ldap/tools/tools_ja.properties
@@ -11,4 +11,9 @@
 # information: "Portions Copyright [year] [name of copyright owner]".
 #
 # Copyright 2009 Sun Microsystems, Inc.
+# Portions Copyright 2016 ForgeRock AS.
 
+#
+# MakeLDIF tool
+#
+INFO_MAKELDIF_DESCRIPTION_WRAP_COLUMN=\u9577\u3044\u884c\u3092\u6298\u308a\u8fd4\u3059\u6841 (0 \u306f\u6298\u308a\u8fd4\u3057\u306a\u3057)
diff --git a/opendj-sdk/opendj-ldap-toolkit/src/main/resources/com/forgerock/opendj/ldap/tools/tools_ko.properties b/opendj-sdk/opendj-ldap-toolkit/src/main/resources/com/forgerock/opendj/ldap/tools/tools_ko.properties
index be888c1..782e4f2 100644
--- a/opendj-sdk/opendj-ldap-toolkit/src/main/resources/com/forgerock/opendj/ldap/tools/tools_ko.properties
+++ b/opendj-sdk/opendj-ldap-toolkit/src/main/resources/com/forgerock/opendj/ldap/tools/tools_ko.properties
@@ -11,4 +11,9 @@
 # information: "Portions Copyright [year] [name of copyright owner]".
 #
 # Copyright 2009 Sun Microsystems, Inc.
+# Portions Copyright 2016 ForgeRock AS.
 
+#
+# MakeLDIF tool
+#
+INFO_MAKELDIF_DESCRIPTION_WRAP_COLUMN=\uae34 \ud589\uc744 \ub798\ud551\ud560 \uc5f4(0 = \ub798\ud551 \uc548 \ud568)
diff --git a/opendj-sdk/opendj-ldap-toolkit/src/main/resources/com/forgerock/opendj/ldap/tools/tools_pl.properties b/opendj-sdk/opendj-ldap-toolkit/src/main/resources/com/forgerock/opendj/ldap/tools/tools_pl.properties
new file mode 100644
index 0000000..219edc7
--- /dev/null
+++ b/opendj-sdk/opendj-ldap-toolkit/src/main/resources/com/forgerock/opendj/ldap/tools/tools_pl.properties
@@ -0,0 +1,20 @@
+#
+# The contents of this file are subject to the terms of the Common Development and
+# Distribution License (the License). You may not use this file except in compliance with the
+# License.
+#
+# You can obtain a copy of the License at legal/CDDLv1.0.txt. See the License for the
+# specific language governing permission and limitations under the License.
+#
+# When distributing Covered Software, include this CDDL Header Notice in each file and include
+# the License file at legal/CDDLv1.0.txt. If applicable, add the following below the CDDL
+# Header, with the fields enclosed by brackets [] replaced by your own identifying
+# information: "Portions Copyright [year] [name of copyright owner]".
+#
+#  Copyright 2016 ForgeRock AS.
+#
+
+#
+# MakeLDIF tool
+#
+INFO_MAKELDIF_DESCRIPTION_WRAP_COLUMN=Kolumna na kt\u00f3rej zawijane b\u0119d\u0105 d\u0142ugie linie (0 aby wy\u0142\u0105czy\u0107 zawijanie)
diff --git a/opendj-sdk/opendj-ldap-toolkit/src/main/resources/com/forgerock/opendj/ldap/tools/tools_zh_CN.properties b/opendj-sdk/opendj-ldap-toolkit/src/main/resources/com/forgerock/opendj/ldap/tools/tools_zh_CN.properties
index be888c1..cde850c 100644
--- a/opendj-sdk/opendj-ldap-toolkit/src/main/resources/com/forgerock/opendj/ldap/tools/tools_zh_CN.properties
+++ b/opendj-sdk/opendj-ldap-toolkit/src/main/resources/com/forgerock/opendj/ldap/tools/tools_zh_CN.properties
@@ -11,4 +11,9 @@
 # information: "Portions Copyright [year] [name of copyright owner]".
 #
 # Copyright 2009 Sun Microsystems, Inc.
+# Portions Copyright 2016 ForgeRock AS.
 
+#
+# MakeLDIF tool
+#
+INFO_MAKELDIF_DESCRIPTION_WRAP_COLUMN=\u5bf9\u8f83\u957f\u7684\u884c\u8fdb\u884c\u6362\u884c\u7684\u5217\uff080 \u8868\u793a\u4e0d\u6362\u884c\uff09
diff --git a/opendj-sdk/opendj-ldap-toolkit/src/main/resources/com/forgerock/opendj/ldap/tools/tools_zh_TW.properties b/opendj-sdk/opendj-ldap-toolkit/src/main/resources/com/forgerock/opendj/ldap/tools/tools_zh_TW.properties
index be888c1..2a61a7f 100644
--- a/opendj-sdk/opendj-ldap-toolkit/src/main/resources/com/forgerock/opendj/ldap/tools/tools_zh_TW.properties
+++ b/opendj-sdk/opendj-ldap-toolkit/src/main/resources/com/forgerock/opendj/ldap/tools/tools_zh_TW.properties
@@ -11,4 +11,9 @@
 # information: "Portions Copyright [year] [name of copyright owner]".
 #
 # Copyright 2009 Sun Microsystems, Inc.
+# Portions Copyright 2016 ForgeRock AS.
 
+#
+# MakeLDIF tool
+#
+INFO_MAKELDIF_DESCRIPTION_WRAP_COLUMN=\u8981\u5c0d\u9577\u53e5\u63db\u884c\u7684\u6b04 (0 \u8868\u793a\u4e0d\u63db\u884c)
diff --git a/opendj-sdk/opendj-ldap-toolkit/src/test/java/com/forgerock/opendj/ldap/tools/MakeLDIFITCase.java b/opendj-sdk/opendj-ldap-toolkit/src/test/java/com/forgerock/opendj/ldap/tools/MakeLDIFITCase.java
index 3fa67de..8018c2e 100644
--- a/opendj-sdk/opendj-ldap-toolkit/src/test/java/com/forgerock/opendj/ldap/tools/MakeLDIFITCase.java
+++ b/opendj-sdk/opendj-ldap-toolkit/src/test/java/com/forgerock/opendj/ldap/tools/MakeLDIFITCase.java
@@ -134,6 +134,16 @@
     }
 
     /** See OPENDJ-2505 and OPENDJ-2754 */
+    @Test
+    public void testMakeLDIFSupportsLineFoldingAndLineWrapping() throws Exception {
+        final Path tempOutputFile = Paths.get(TEST_RESOURCE_PATH, TEMP_OUTPUT_FILE);
+        run(args("-o", tempOutputFile.toString(), "-w", "80", VALID_TEMPLATE_FILE_PATH),
+                SUCCESS, INFO_MAKELDIF_PROCESSING_COMPLETE.get(2));
+        assertFilesAreEquals(TEMP_OUTPUT_FILE, "expected_output_80_column.ldif");
+        Files.delete(tempOutputFile);
+    }
+
+    private void assertFilesAreEquals(final String outputFile, final String expectedOutputFileName) throws IOException {
         assertThat(Files.readAllBytes(Paths.get(TEST_RESOURCE_PATH, outputFile))).isEqualTo(
                    Files.readAllBytes(Paths.get(TEST_RESOURCE_PATH, expectedOutputFileName)));
     }
diff --git a/opendj-sdk/opendj-ldap-toolkit/src/test/resources/expected_output_80_column.ldif b/opendj-sdk/opendj-ldap-toolkit/src/test/resources/expected_output_80_column.ldif
new file mode 100644
index 0000000..45e611c
--- /dev/null
+++ b/opendj-sdk/opendj-ldap-toolkit/src/test/resources/expected_output_80_column.ldif
@@ -0,0 +1,14 @@
+dn: dc=example,dc=com
+dc: example
+
+dn: coretokenid=tokenId,dc=example,dc=com
+coretokenid: tokenId
+objectClass: top
+objectClass: frCoreToken
+coretokenstring08: /myrealm
+coretokenstring07: Bearer
+coretokenobject: {"redirectURI":["http://fake.com"],"acr":[],"clientID":["client
+ OIDC"],"lineFoldingTest":["This line should have been correctly folded"],"token
+ Name":["refresh_token"],"authModules":["LDAP"],"realm":["/myrealm"],"id":["fake
+ id"],"userName":["johndoe"],"tokenType":["Bearer"]}
+

--
Gitblit v1.10.0