mirror of https://github.com/OpenIdentityPlatform/OpenDJ.git

Jean-Noel Rouvignac
26.14.2015 8352424e828280d8355098448a9a3e5f0107be5b
OPENDJ-1840 (CR-6146) dsconfig should support batching commands from standard input

DSConfig.java:
Added --batch option to dsconfig tool that reads commands from standard input.
3 files modified
44 ■■■■ changed files
opendj-sdk/opendj-cli/src/main/java/com/forgerock/opendj/cli/ArgumentConstants.java 2 ●●●●● patch | view | raw | blame | history
opendj-sdk/opendj-cli/src/main/resources/com/forgerock/opendj/cli/cli.properties 7 ●●●●● patch | view | raw | blame | history
opendj-sdk/opendj-config/src/main/java/org/forgerock/opendj/config/dsconfig/DSConfig.java 35 ●●●● patch | view | raw | blame | history
opendj-sdk/opendj-cli/src/main/java/com/forgerock/opendj/cli/ArgumentConstants.java
@@ -66,6 +66,8 @@
     */
    public static final String SASL_PROPERTY_MECH = "mech";
    /** The value for the long option batch. */
    public static final String OPTION_LONG_BATCH = "batch";
    /** The value for the short option batchFilePath. */
    public static final char OPTION_SHORT_BATCH_FILE_PATH = 'F';
    /** The value for the long option batchFilePath. */
opendj-sdk/opendj-cli/src/main/resources/com/forgerock/opendj/cli/cli.properties
@@ -806,14 +806,13 @@
INFO_CANNOT_CONNECT_TO_REMOTE_GENERIC=Could not connect to %s.  Check that the \
 server is running and that the provided credentials are valid.%nError \
 details:%n%s
ERR_CONFIRMATION_TRIES_LIMIT_REACHED=Confirmation tries limit reached \
 (%d)
ERR_CONFIRMATION_TRIES_LIMIT_REACHED=Confirmation tries limit reached (%d)
INFO_ADMINISTRATOR_UID_PROMPT=Global Administrator User ID
INFO_ADMINISTRATOR_PWD_PROMPT=Global Administrator Password:
INFO_ADMINISTRATOR_PWD_CONFIRM_PROMPT=Confirm Password:
ERR_ADMINISTRATOR_PWD_DO_NOT_MATCH=The provided passwords do not match.
ERR_BAD_INTEGER=Invalid integer number "%s". Please \
  enter a valid integer
ERR_BAD_INTEGER=Invalid integer number "%s". Please enter a valid integer
INFO_DESCRIPTION_BATCH=Reads from standard input a set of commands to be executed
INFO_DESCRIPTION_BATCH_FILE_PATH=Path to a batch file containing \
a set of commands to be executed
INFO_DESCRIPTION_DISPLAY_EQUIVALENT=Display the equivalent \
opendj-sdk/opendj-config/src/main/java/org/forgerock/opendj/config/dsconfig/DSConfig.java
@@ -43,6 +43,7 @@
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintStream;
import java.net.URL;
@@ -809,6 +810,8 @@
    /** Indicates whether or not a sub-command was provided. */
    private boolean hasSubCommand = true;
    /** The argument which should be used to read dsconfig commands from standard input. */
    private BooleanArgument batchArgument;
    /** The argument which should be used to read dsconfig commands from a file. */
    private StringArgument batchFileArgument;
@@ -946,6 +949,9 @@
            advancedModeArgument = CommonArguments.getAdvancedMode();
            showUsageArgument = CommonArguments.getShowUsage();
            batchArgument = new BooleanArgument(OPTION_LONG_BATCH, null, OPTION_LONG_BATCH,
                    INFO_DESCRIPTION_BATCH.get());
            batchFileArgument = new StringArgument(OPTION_LONG_BATCH_FILE_PATH, OPTION_SHORT_BATCH_FILE_PATH,
                    OPTION_LONG_BATCH_FILE_PATH, false, false, true, INFO_BATCH_FILE_PATH_PLACEHOLDER.get(), null,
                    null, INFO_DESCRIPTION_BATCH_FILE_PATH.get());
@@ -975,6 +981,7 @@
            parser.addGlobalArgument(quietArgument);
            parser.addGlobalArgument(scriptFriendlyArgument);
            parser.addGlobalArgument(noPromptArgument);
            parser.addGlobalArgument(batchArgument);
            parser.addGlobalArgument(batchFileArgument);
            parser.addGlobalArgument(displayEquivalentArgument);
            parser.addGlobalArgument(equivalentCommandFileArgument);
@@ -1111,8 +1118,8 @@
        }
        // Handle batch file if any
        if (batchFileArgument.isPresent()) {
            handleBatchFile(args);
        if (batchArgument.isPresent() || batchFileArgument.isPresent()) {
            handleBatch(args);
            return ReturnCode.SUCCESS.get();
        }
@@ -1139,8 +1146,10 @@
    private void checkForConflictingArguments() throws ArgumentException {
        throwIfConflictingArgsSet(quietArgument, verboseArgument);
        throwIfConflictingArgsSet(batchArgument, batchFileArgument);
        throwIfSetInInteractiveMode(batchFileArgument);
        throwIfSetInInteractiveMode(batchArgument);
        throwIfSetInInteractiveMode(quietArgument);
        throwIfConflictingArgsSet(scriptFriendlyArgument, verboseArgument);
@@ -1411,11 +1420,18 @@
        return INFO_DSCFG_SESSION_START_TIME_MESSAGE.get(getScriptName(), date).toString();
    }
    private void handleBatchFile(String[] args) {
    private void handleBatch(String[] args) {
        BufferedReader bReader = null;
        try {
            final String batchFilePath = batchFileArgument.getValue().trim();
            bReader = new BufferedReader(new FileReader(batchFilePath));
            if (batchArgument.isPresent()) {
                bReader = new BufferedReader(new InputStreamReader(System.in));
            } else if (batchFileArgument.isPresent()) {
                final String batchFilePath = batchFileArgument.getValue().trim();
                bReader = new BufferedReader(new FileReader(batchFilePath));
            } else {
                throw new IllegalArgumentException("Either --" + OPTION_LONG_BATCH
                    + " or --" + OPTION_LONG_BATCH_FILE_PATH + " argument should have been set");
            }
            List<String> initialArgs = removeBatchArgs(args);
@@ -1486,8 +1502,13 @@
        Collections.addAll(initialArgs, args);
        for (Iterator<String> it = initialArgs.iterator(); it.hasNext();) {
            final String elem = it.next();
            if (elem.startsWith("-" + batchFileArgument.getShortIdentifier())
                    || elem.contains(batchFileArgument.getLongIdentifier())) {
            if (batchArgument.isPresent()
                    && elem.contains(batchArgument.getLongIdentifier())) {
                it.remove();
                break;
            } else if (batchFileArgument.isPresent()
                    && (elem.startsWith("-" + batchFileArgument.getShortIdentifier())
                            || elem.contains(batchFileArgument.getLongIdentifier()))) {
                // Remove both the batch file arg and its value
                it.remove();
                it.next();