From 2095a28e3b117ddc7b565bc7fbe410af70cb48f4 Mon Sep 17 00:00:00 2001
From: Gaetan Boismal <gaetan.boismal@forgerock.com>
Date: Mon, 31 Oct 2016 14:00:38 +0000
Subject: [PATCH] OPENDJ-2772 Align SDK client tool with server's
---
opendj-ldap-toolkit/src/main/java/com/forgerock/opendj/ldap/tools/LDIFModify.java | 79 +++++++++++++++++++++++++++++----------
1 files changed, 58 insertions(+), 21 deletions(-)
diff --git a/opendj-ldap-toolkit/src/main/java/com/forgerock/opendj/ldap/tools/LDIFModify.java b/opendj-ldap-toolkit/src/main/java/com/forgerock/opendj/ldap/tools/LDIFModify.java
index ff016b5..44956865 100644
--- a/opendj-ldap-toolkit/src/main/java/com/forgerock/opendj/ldap/tools/LDIFModify.java
+++ b/opendj-ldap-toolkit/src/main/java/com/forgerock/opendj/ldap/tools/LDIFModify.java
@@ -17,10 +17,12 @@
import static com.forgerock.opendj.cli.ArgumentConstants.OPTION_LONG_OUTPUT_LDIF_FILENAME;
import static com.forgerock.opendj.cli.ArgumentConstants.OPTION_SHORT_OUTPUT_LDIF_FILENAME;
+import static com.forgerock.opendj.cli.ArgumentConstants.USE_SYSTEM_STREAM_TOKEN;
import static com.forgerock.opendj.cli.ToolVersionHandler.newSdkVersionHandler;
import static com.forgerock.opendj.ldap.tools.LDAPToolException.newToolParamException;
import static com.forgerock.opendj.ldap.tools.ToolsMessages.*;
import static com.forgerock.opendj.cli.Utils.filterExitCode;
+import static com.forgerock.opendj.ldap.tools.Utils.computeWrapColumn;
import static com.forgerock.opendj.ldap.tools.Utils.getLDIFToolInputStream;
import static com.forgerock.opendj.ldap.tools.Utils.getLDIFToolOutputStream;
import static com.forgerock.opendj.ldap.tools.Utils.parseArguments;
@@ -30,8 +32,10 @@
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
+import java.io.PrintStream;
import java.util.List;
+import com.forgerock.opendj.cli.IntegerArgument;
import org.forgerock.i18n.LocalizableException;
import org.forgerock.i18n.LocalizableMessage;
import org.forgerock.opendj.ldap.DecodeException;
@@ -58,34 +62,55 @@
* to a set of entries contained in an LDIF file.
*/
public final class LDIFModify extends ConsoleApplication {
+
/**
- * The main method for LDIFModify tool.
+ * The main method for ldifmodify tool.
*
* @param args
* The command-line arguments provided to this program.
*/
public static void main(final String[] args) {
- final LDIFModify ldifModify = new LDIFModify();
- int retCode;
- try {
- retCode = ldifModify.run(args);
- } catch (final LDAPToolException e) {
- e.printErrorMessage(ldifModify);
- retCode = e.getResultCode();
- }
- System.exit(filterExitCode(retCode));
+ System.exit(filterExitCode(run(System.out, System.err, args)));
}
- private LDIFModify() {
- // Nothing to do.
+ /**
+ * Run {@link LDIFModify} tool with the provided arguments.
+ * Output and errors will be written on the provided streams.
+ * This method can be used to run the tool programmatically.
+ *
+ * @param out
+ * {@link PrintStream} which will be used by the tool to write results and information messages.
+ * @param err
+ * {@link PrintStream} which will be used by the tool to write errors.
+ * @param args
+ * Arguments set to pass to the tool.
+ * @return
+ * An integer which represents the result code of the tool.
+ */
+ public static int run(final PrintStream out, final PrintStream err, final String... args) {
+ final LDIFModify ldifModify = new LDIFModify(out, err);
+ try {
+ return ldifModify.run(args);
+ } catch (final LDAPToolException e) {
+ e.printErrorMessage(ldifModify);
+ return e.getResultCode();
+ }
+ }
+
+ private LDIFModify(final PrintStream out, final PrintStream err) {
+ super(out, err);
+ }
+
+ @Override
+ public boolean isInteractive() {
+ return false;
}
private int run(final String[] args) throws LDAPToolException {
// Create the command-line argument parser for use with this program.
- final LocalizableMessage toolDescription = INFO_LDIFMODIFY_TOOL_DESCRIPTION.get();
final ArgumentParser argParser = LDAPToolArgumentParser.builder(LDIFModify.class.getName())
- .toolDescription(toolDescription)
- .trailingArguments(1, 2, "source [changes]")
+ .toolDescription(INFO_LDIFMODIFY_TOOL_DESCRIPTION.get())
+ .trailingArgumentsUnbounded(1, "source_file [changes_files...]")
.build();
argParser.setVersionHandler(newSdkVersionHandler());
argParser.setShortToolDescription(REF_SHORT_DESC_LDIFMODIFY.get());
@@ -93,6 +118,7 @@
final BooleanArgument continueOnError;
final BooleanArgument showUsage;
final StringArgument outputFilename;
+ final IntegerArgument wrapColumn;
try {
outputFilename =
StringArgument.builder(OPTION_LONG_OUTPUT_LDIF_FILENAME)
@@ -106,6 +132,9 @@
continueOnError = continueOnErrorArgument();
argParser.addArgument(continueOnError);
+ wrapColumn = wrapColumnArgument();
+ argParser.addArgument(wrapColumn);
+
showUsage = showUsageArgument();
argParser.addArgument(showUsage);
argParser.setUsageArgument(showUsage, getOutputStream());
@@ -119,7 +148,6 @@
}
InputStream sourceInputStream = null;
- InputStream changesInputStream = null;
OutputStream outputStream = null;
LDIFEntryReader sourceReader = null;
LDIFChangeRecordReader changesReader = null;
@@ -128,16 +156,23 @@
try {
final List<String> trailingArguments = argParser.getTrailingArguments();
sourceInputStream = getLDIFToolInputStream(this, trailingArguments.get(0));
- changesInputStream = getLDIFToolInputStream(this, trailingArguments.get(1));
outputStream = getLDIFToolOutputStream(this, outputFilename);
- if (System.in == sourceInputStream && System.in == changesInputStream) {
+ final int nbTrailingArgs = trailingArguments.size();
+ final boolean readChangesFromStdin = nbTrailingArgs == 1
+ || (nbTrailingArgs == 2 && USE_SYSTEM_STREAM_TOKEN.equals(trailingArguments.get(1)));
+ if (getInputStream() == sourceInputStream && readChangesFromStdin) {
throw newToolParamException(ERR_LDIFMODIFY_MULTIPLE_USES_OF_STDIN.get());
}
sourceReader = new LDIFEntryReader(sourceInputStream);
- changesReader = new LDIFChangeRecordReader(changesInputStream);
- outputWriter = new LDIFEntryWriter(outputStream);
+ if (readChangesFromStdin) {
+ changesReader = new LDIFChangeRecordReader(getInputStream());
+ } else {
+ changesReader = new LDIFChangeRecordReader(
+ Utils.getLinesFromFiles(trailingArguments.subList(1, nbTrailingArgs)));
+ }
+ outputWriter = new LDIFEntryWriter(outputStream).setWrapColumn(computeWrapColumn(wrapColumn));
final RejectedChangeRecordListener listener = new RejectedChangeRecordListener() {
@Override
@@ -220,9 +255,11 @@
errPrintln(ERR_LDIFMODIFY_PATCH_FAILED.get(e.getLocalizedMessage()));
}
return ResultCode.CLIENT_SIDE_LOCAL_ERROR.intValue();
+ } catch (final ArgumentException ae) {
+ throw newToolParamException(ae, ae.getMessageObject());
} finally {
closeSilently(sourceReader, changesReader, outputWriter,
- sourceInputStream, changesInputStream, outputStream);
+ sourceInputStream, outputStream);
}
return ResultCode.SUCCESS.intValue();
--
Gitblit v1.10.0