From 263d085885df024dca9250cc03c807912b0a7662 Mon Sep 17 00:00:00 2001
From: Matthew Swift <matthew.swift@forgerock.com>
Date: Tue, 24 Apr 2012 22:33:21 +0000
Subject: [PATCH] Reformat to comply with new Checkstyle rules.

---
 opendj3/opendj-ldap-toolkit/src/main/java/com/forgerock/opendj/ldap/tools/LDAPModify.java | 1096 +++++++++++++++++++++++++--------------------------------
 1 files changed, 486 insertions(+), 610 deletions(-)

diff --git a/opendj3/opendj-ldap-toolkit/src/main/java/com/forgerock/opendj/ldap/tools/LDAPModify.java b/opendj3/opendj-ldap-toolkit/src/main/java/com/forgerock/opendj/ldap/tools/LDAPModify.java
index f4f36b4..9bed33d 100644
--- a/opendj3/opendj-ldap-toolkit/src/main/java/com/forgerock/opendj/ldap/tools/LDAPModify.java
+++ b/opendj3/opendj-ldap-toolkit/src/main/java/com/forgerock/opendj/ldap/tools/LDAPModify.java
@@ -6,17 +6,16 @@
  * (the "License").  You may not use this file except in compliance
  * with the License.
  *
- * You can obtain a copy of the license at
- * trunk/opendj3/legal-notices/CDDLv1_0.txt
+ * You can obtain a copy of the license at legal-notices/CDDLv1_0.txt
  * or http://forgerock.org/license/CDDLv1.0.html.
  * See the License for the specific language governing permissions
  * and limitations under the License.
  *
  * When distributing Covered Code, include this CDDL HEADER in each
- * file and include the License file at
- * trunk/opendj3/legal-notices/CDDLv1_0.txt.  If applicable,
- * add the following below this CDDL HEADER, with the fields enclosed
- * by brackets "[]" replaced with your own identifying information:
+ * file and include the License file at legal-notices/CDDLv1_0.txt.
+ * If applicable, add the following below this CDDL HEADER, with the
+ * fields enclosed by brackets "[]" replaced with your own identifying
+ * information:
  *      Portions Copyright [yyyy] [name of copyright owner]
  *
  * CDDL HEADER END
@@ -28,10 +27,8 @@
 
 package com.forgerock.opendj.ldap.tools;
 
-
-
-import static com.forgerock.opendj.ldap.tools.ToolsMessages.*;
 import static com.forgerock.opendj.ldap.tools.ToolConstants.*;
+import static com.forgerock.opendj.ldap.tools.ToolsMessages.*;
 import static com.forgerock.opendj.ldap.tools.Utils.filterExitCode;
 import static org.forgerock.opendj.ldap.ErrorResultException.newErrorResult;
 
@@ -44,636 +41,515 @@
 
 import org.forgerock.i18n.LocalizableMessage;
 import org.forgerock.i18n.LocalizedIllegalArgumentException;
-import org.forgerock.opendj.ldap.*;
-import org.forgerock.opendj.ldap.controls.*;
+import org.forgerock.opendj.ldap.Connection;
+import org.forgerock.opendj.ldap.ConnectionFactory;
+import org.forgerock.opendj.ldap.DecodeException;
+import org.forgerock.opendj.ldap.DecodeOptions;
+import org.forgerock.opendj.ldap.ErrorResultException;
+import org.forgerock.opendj.ldap.Filter;
+import org.forgerock.opendj.ldap.ResultCode;
+import org.forgerock.opendj.ldap.controls.AssertionRequestControl;
+import org.forgerock.opendj.ldap.controls.Control;
+import org.forgerock.opendj.ldap.controls.PostReadRequestControl;
+import org.forgerock.opendj.ldap.controls.PostReadResponseControl;
+import org.forgerock.opendj.ldap.controls.PreReadRequestControl;
+import org.forgerock.opendj.ldap.controls.PreReadResponseControl;
+import org.forgerock.opendj.ldap.controls.ProxiedAuthV2RequestControl;
 import org.forgerock.opendj.ldap.requests.AddRequest;
 import org.forgerock.opendj.ldap.requests.DeleteRequest;
 import org.forgerock.opendj.ldap.requests.ModifyDNRequest;
 import org.forgerock.opendj.ldap.requests.ModifyRequest;
 import org.forgerock.opendj.ldap.responses.Result;
-import org.forgerock.opendj.ldif.*;
-
-
+import org.forgerock.opendj.ldif.ChangeRecord;
+import org.forgerock.opendj.ldif.ChangeRecordReader;
+import org.forgerock.opendj.ldif.ChangeRecordVisitor;
+import org.forgerock.opendj.ldif.EntryWriter;
+import org.forgerock.opendj.ldif.LDIFChangeRecordReader;
+import org.forgerock.opendj.ldif.LDIFEntryWriter;
 
 /**
  * A tool that can be used to issue update (Add/Delete/Modify/ModifyDN) requests
  * to the Directory Server.
  */
-public final class LDAPModify extends ConsoleApplication
-{
-  private class VisitorImpl implements
-      ChangeRecordVisitor<Integer, java.lang.Void>
-  {
-    public Integer visitChangeRecord(final Void aVoid, final AddRequest change)
-    {
-      for (final Control control : controls)
-      {
-        change.addControl(control);
-      }
-      final String opType = "ADD";
-      println(INFO_PROCESSING_OPERATION
-          .get(opType, change.getName().toString()));
-      if (connection != null)
-      {
-        try
-        {
-          Result r;
-          try
-          {
-            r = connection.add(change);
-          }
-          catch (final InterruptedException e)
-          {
-            // This shouldn't happen because there are no other threads
-            // to interrupt this one.
-            throw newErrorResult(
-                ResultCode.CLIENT_SIDE_USER_CANCELLED,
-                e.getLocalizedMessage(), e);
-          }
-          printResult(opType, change.getName().toString(), r);
-          return r.getResultCode().intValue();
+public final class LDAPModify extends ConsoleApplication {
+    private class VisitorImpl implements ChangeRecordVisitor<Integer, java.lang.Void> {
+        public Integer visitChangeRecord(final Void aVoid, final AddRequest change) {
+            for (final Control control : controls) {
+                change.addControl(control);
+            }
+            final String opType = "ADD";
+            println(INFO_PROCESSING_OPERATION.get(opType, change.getName().toString()));
+            if (connection != null) {
+                try {
+                    Result r;
+                    try {
+                        r = connection.add(change);
+                    } catch (final InterruptedException e) {
+                        // This shouldn't happen because there are no other
+                        // threads
+                        // to interrupt this one.
+                        throw newErrorResult(ResultCode.CLIENT_SIDE_USER_CANCELLED, e
+                                .getLocalizedMessage(), e);
+                    }
+                    printResult(opType, change.getName().toString(), r);
+                    return r.getResultCode().intValue();
+                } catch (final ErrorResultException ere) {
+                    return Utils.printErrorMessage(LDAPModify.this, ere);
+                }
+            }
+            return ResultCode.SUCCESS.intValue();
         }
-        catch (final ErrorResultException ere)
-        {
-          return Utils.printErrorMessage(LDAPModify.this, ere);
+
+        public Integer visitChangeRecord(final Void aVoid, final DeleteRequest change) {
+            for (final Control control : controls) {
+                change.addControl(control);
+            }
+            final String opType = "DELETE";
+            println(INFO_PROCESSING_OPERATION.get(opType, change.getName().toString()));
+            if (connection != null) {
+                try {
+                    Result r;
+                    try {
+                        r = connection.delete(change);
+                    } catch (final InterruptedException e) {
+                        // This shouldn't happen because there are no other
+                        // threads
+                        // to interrupt this one.
+                        throw newErrorResult(ResultCode.CLIENT_SIDE_USER_CANCELLED, e
+                                .getLocalizedMessage(), e);
+                    }
+                    printResult(opType, change.getName().toString(), r);
+                    return r.getResultCode().intValue();
+                } catch (final ErrorResultException ere) {
+                    return Utils.printErrorMessage(LDAPModify.this, ere);
+                }
+            }
+            return ResultCode.SUCCESS.intValue();
         }
-      }
-      return ResultCode.SUCCESS.intValue();
+
+        public Integer visitChangeRecord(final Void aVoid, final ModifyDNRequest change) {
+            for (final Control control : controls) {
+                change.addControl(control);
+            }
+            final String opType = "MODIFY DN";
+            println(INFO_PROCESSING_OPERATION.get(opType, change.getName().toString()));
+            if (connection != null) {
+                try {
+                    Result r;
+                    try {
+                        r = connection.modifyDN(change);
+                    } catch (final InterruptedException e) {
+                        // This shouldn't happen because there are no other
+                        // threads
+                        // to interrupt this one.
+                        throw newErrorResult(ResultCode.CLIENT_SIDE_USER_CANCELLED, e
+                                .getLocalizedMessage(), e);
+                    }
+                    printResult(opType, change.getName().toString(), r);
+                    return r.getResultCode().intValue();
+                } catch (final ErrorResultException ere) {
+                    return Utils.printErrorMessage(LDAPModify.this, ere);
+                }
+            }
+            return ResultCode.SUCCESS.intValue();
+        }
+
+        public Integer visitChangeRecord(final Void aVoid, final ModifyRequest change) {
+            for (final Control control : controls) {
+                change.addControl(control);
+            }
+            final String opType = "MODIFY";
+            println(INFO_PROCESSING_OPERATION.get(opType, change.getName().toString()));
+            if (connection != null) {
+                try {
+                    Result r;
+                    try {
+                        r = connection.modify(change);
+                    } catch (final InterruptedException e) {
+                        // This shouldn't happen because there are no other
+                        // threads
+                        // to interrupt this one.
+                        throw newErrorResult(ResultCode.CLIENT_SIDE_USER_CANCELLED, e
+                                .getLocalizedMessage(), e);
+                    }
+                    printResult(opType, change.getName().toString(), r);
+                    return r.getResultCode().intValue();
+                } catch (final ErrorResultException ere) {
+                    return Utils.printErrorMessage(LDAPModify.this, ere);
+                }
+            }
+            return ResultCode.SUCCESS.intValue();
+        }
+
+        private void printResult(final String operationType, final String name, final Result r) {
+            if (r.getResultCode() != ResultCode.SUCCESS && r.getResultCode() != ResultCode.REFERRAL) {
+                final LocalizableMessage msg = INFO_OPERATION_FAILED.get(operationType);
+                println(msg);
+                println(ERR_TOOL_RESULT_CODE.get(r.getResultCode().intValue(), r.getResultCode()
+                        .toString()));
+                if ((r.getDiagnosticMessage() != null) && (r.getDiagnosticMessage().length() > 0)) {
+                    println(LocalizableMessage.raw(r.getDiagnosticMessage()));
+                }
+                if (r.getMatchedDN() != null && r.getMatchedDN().length() > 0) {
+                    println(ERR_TOOL_MATCHED_DN.get(r.getMatchedDN()));
+                }
+            } else {
+                final LocalizableMessage msg = INFO_OPERATION_SUCCESSFUL.get(operationType, name);
+                println(msg);
+                if ((r.getDiagnosticMessage() != null) && (r.getDiagnosticMessage().length() > 0)) {
+                    println(LocalizableMessage.raw(r.getDiagnosticMessage()));
+                }
+                if (r.getReferralURIs() != null) {
+                    for (final String uri : r.getReferralURIs()) {
+                        println(LocalizableMessage.raw(uri));
+                    }
+                }
+            }
+
+            try {
+                final PreReadResponseControl control =
+                        r.getControl(PreReadResponseControl.DECODER, new DecodeOptions());
+                if (control != null) {
+                    println(INFO_LDAPMODIFY_PREREAD_ENTRY.get());
+                    writer.writeEntry(control.getEntry());
+                }
+            } catch (final DecodeException de) {
+                println(ERR_DECODE_CONTROL_FAILURE.get(de.getLocalizedMessage()));
+            } catch (final IOException ioe) {
+                throw new RuntimeException(ioe);
+            }
+
+            try {
+                final PostReadResponseControl control =
+                        r.getControl(PostReadResponseControl.DECODER, new DecodeOptions());
+                if (control != null) {
+                    println(INFO_LDAPMODIFY_POSTREAD_ENTRY.get());
+                    writer.writeEntry(control.getEntry());
+                }
+            } catch (final DecodeException de) {
+                println(ERR_DECODE_CONTROL_FAILURE.get(de.getLocalizedMessage()));
+            } catch (final IOException ioe) {
+                throw new RuntimeException(ioe);
+            }
+
+            // TODO: CSN control
+        }
     }
 
+    /**
+     * The main method for LDAPModify tool.
+     *
+     * @param args
+     *            The command-line arguments provided to this program.
+     */
 
+    public static void main(final String[] args) {
+        final int retCode = new LDAPModify().run(args);
+        System.exit(filterExitCode(retCode));
+    }
 
-    public Integer visitChangeRecord(final Void aVoid,
-        final DeleteRequest change)
-    {
-      for (final Control control : controls)
-      {
-        change.addControl(control);
-      }
-      final String opType = "DELETE";
-      println(INFO_PROCESSING_OPERATION
-          .get(opType, change.getName().toString()));
-      if (connection != null)
-      {
-        try
-        {
-          Result r;
-          try
-          {
-            r = connection.delete(change);
-          }
-          catch (final InterruptedException e)
-          {
-            // This shouldn't happen because there are no other threads
-            // to interrupt this one.
-            throw newErrorResult(ResultCode.CLIENT_SIDE_USER_CANCELLED,
-                e.getLocalizedMessage(), e);
-          }
-          printResult(opType, change.getName().toString(), r);
-          return r.getResultCode().intValue();
+    private Connection connection;
+
+    private EntryWriter writer;
+
+    private Collection<Control> controls;
+
+    private BooleanArgument verbose;
+
+    private LDAPModify() {
+        // Nothing to do.
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    public boolean isVerbose() {
+        return verbose.isPresent();
+    }
+
+    private int run(final String[] args) {
+        // Create the command-line argument parser for use with this
+        // program.
+        final LocalizableMessage toolDescription = INFO_LDAPMODIFY_TOOL_DESCRIPTION.get();
+        final ArgumentParser argParser =
+                new ArgumentParser(LDAPModify.class.getName(), toolDescription, false);
+        ConnectionFactoryProvider connectionFactoryProvider;
+        ConnectionFactory connectionFactory;
+
+        BooleanArgument continueOnError;
+        // TODO: Remove this due to new LDIF reader api?
+        BooleanArgument defaultAdd;
+        BooleanArgument noop;
+        BooleanArgument showUsage;
+        IntegerArgument version;
+        StringArgument assertionFilter;
+        StringArgument controlStr;
+        StringArgument encodingStr;
+        StringArgument filename;
+        StringArgument postReadAttributes;
+        StringArgument preReadAttributes;
+        StringArgument proxyAuthzID;
+        StringArgument propertiesFileArgument;
+        BooleanArgument noPropertiesFileArgument;
+
+        try {
+            connectionFactoryProvider = new ConnectionFactoryProvider(argParser, this);
+            propertiesFileArgument =
+                    new StringArgument("propertiesFilePath", null, OPTION_LONG_PROP_FILE_PATH,
+                            false, false, true, INFO_PROP_FILE_PATH_PLACEHOLDER.get(), null, null,
+                            INFO_DESCRIPTION_PROP_FILE_PATH.get());
+            argParser.addArgument(propertiesFileArgument);
+            argParser.setFilePropertiesArgument(propertiesFileArgument);
+
+            noPropertiesFileArgument =
+                    new BooleanArgument("noPropertiesFileArgument", null, OPTION_LONG_NO_PROP_FILE,
+                            INFO_DESCRIPTION_NO_PROP_FILE.get());
+            argParser.addArgument(noPropertiesFileArgument);
+            argParser.setNoPropertiesFileArgument(noPropertiesFileArgument);
+
+            defaultAdd =
+                    new BooleanArgument("defaultAdd", 'a', "defaultAdd",
+                            INFO_MODIFY_DESCRIPTION_DEFAULT_ADD.get());
+            argParser.addArgument(defaultAdd);
+
+            filename =
+                    new StringArgument("filename", OPTION_SHORT_FILENAME, OPTION_LONG_FILENAME,
+                            false, false, true, INFO_FILE_PLACEHOLDER.get(), null, null,
+                            INFO_LDAPMODIFY_DESCRIPTION_FILENAME.get());
+            filename.setPropertyName(OPTION_LONG_FILENAME);
+            argParser.addArgument(filename);
+
+            proxyAuthzID =
+                    new StringArgument("proxy_authzid", OPTION_SHORT_PROXYAUTHID,
+                            OPTION_LONG_PROXYAUTHID, false, false, true,
+                            INFO_PROXYAUTHID_PLACEHOLDER.get(), null, null,
+                            INFO_DESCRIPTION_PROXY_AUTHZID.get());
+            proxyAuthzID.setPropertyName(OPTION_LONG_PROXYAUTHID);
+            argParser.addArgument(proxyAuthzID);
+
+            assertionFilter =
+                    new StringArgument("assertionfilter", null, OPTION_LONG_ASSERTION_FILE, false,
+                            false, true, INFO_ASSERTION_FILTER_PLACEHOLDER.get(), null, null,
+                            INFO_DESCRIPTION_ASSERTION_FILTER.get());
+            assertionFilter.setPropertyName(OPTION_LONG_ASSERTION_FILE);
+            argParser.addArgument(assertionFilter);
+
+            preReadAttributes =
+                    new StringArgument("prereadattrs", null, "preReadAttributes", false, false,
+                            true, INFO_ATTRIBUTE_LIST_PLACEHOLDER.get(), null, null,
+                            INFO_DESCRIPTION_PREREAD_ATTRS.get());
+            preReadAttributes.setPropertyName("preReadAttributes");
+            argParser.addArgument(preReadAttributes);
+
+            postReadAttributes =
+                    new StringArgument("postreadattrs", null, "postReadAttributes", false, false,
+                            true, INFO_ATTRIBUTE_LIST_PLACEHOLDER.get(), null, null,
+                            INFO_DESCRIPTION_POSTREAD_ATTRS.get());
+            postReadAttributes.setPropertyName("postReadAttributes");
+            argParser.addArgument(postReadAttributes);
+
+            controlStr =
+                    new StringArgument("control", 'J', "control", false, true, true,
+                            INFO_LDAP_CONTROL_PLACEHOLDER.get(), null, null,
+                            INFO_DESCRIPTION_CONTROLS.get());
+            controlStr.setPropertyName("control");
+            argParser.addArgument(controlStr);
+
+            version =
+                    new IntegerArgument("version", OPTION_SHORT_PROTOCOL_VERSION,
+                            OPTION_LONG_PROTOCOL_VERSION, false, false, true,
+                            INFO_PROTOCOL_VERSION_PLACEHOLDER.get(), 3, null,
+                            INFO_DESCRIPTION_VERSION.get());
+            version.setPropertyName(OPTION_LONG_PROTOCOL_VERSION);
+            argParser.addArgument(version);
+
+            encodingStr =
+                    new StringArgument("encoding", 'i', "encoding", false, false, true,
+                            INFO_ENCODING_PLACEHOLDER.get(), null, null, INFO_DESCRIPTION_ENCODING
+                                    .get());
+            encodingStr.setPropertyName("encoding");
+            argParser.addArgument(encodingStr);
+
+            continueOnError =
+                    new BooleanArgument("continueOnError", 'c', "continueOnError",
+                            INFO_DESCRIPTION_CONTINUE_ON_ERROR.get());
+            continueOnError.setPropertyName("continueOnError");
+            argParser.addArgument(continueOnError);
+
+            noop =
+                    new BooleanArgument("no-op", OPTION_SHORT_DRYRUN, OPTION_LONG_DRYRUN,
+                            INFO_DESCRIPTION_NOOP.get());
+            noop.setPropertyName(OPTION_LONG_DRYRUN);
+            argParser.addArgument(noop);
+
+            verbose =
+                    new BooleanArgument("verbose", 'v', "verbose", INFO_DESCRIPTION_VERBOSE.get());
+            verbose.setPropertyName("verbose");
+            argParser.addArgument(verbose);
+
+            showUsage =
+                    new BooleanArgument("showUsage", OPTION_SHORT_HELP, OPTION_LONG_HELP,
+                            INFO_DESCRIPTION_SHOWUSAGE.get());
+            argParser.addArgument(showUsage);
+            argParser.setUsageArgument(showUsage, getOutputStream());
+        } catch (final ArgumentException ae) {
+            final LocalizableMessage message = ERR_CANNOT_INITIALIZE_ARGS.get(ae.getMessage());
+            println(message);
+            return ResultCode.CLIENT_SIDE_PARAM_ERROR.intValue();
         }
-        catch (final ErrorResultException ere)
-        {
-          return Utils.printErrorMessage(LDAPModify.this, ere);
+
+        // Parse the command-line arguments provided to this program.
+        try {
+            argParser.parseArguments(args);
+
+            // If we should just display usage or version information,
+            // then print it and exit.
+            if (argParser.usageOrVersionDisplayed()) {
+                return 0;
+            }
+
+            connectionFactory = connectionFactoryProvider.getAuthenticatedConnectionFactory();
+        } catch (final ArgumentException ae) {
+            final LocalizableMessage message = ERR_ERROR_PARSING_ARGS.get(ae.getMessage());
+            println(message);
+            return ResultCode.CLIENT_SIDE_PARAM_ERROR.intValue();
         }
-      }
-      return ResultCode.SUCCESS.intValue();
-    }
 
-
-
-    public Integer visitChangeRecord(final Void aVoid,
-        final ModifyDNRequest change)
-    {
-      for (final Control control : controls)
-      {
-        change.addControl(control);
-      }
-      final String opType = "MODIFY DN";
-      println(INFO_PROCESSING_OPERATION
-          .get(opType, change.getName().toString()));
-      if (connection != null)
-      {
-        try
-        {
-          Result r;
-          try
-          {
-            r = connection.modifyDN(change);
-          }
-          catch (final InterruptedException e)
-          {
-            // This shouldn't happen because there are no other threads
-            // to interrupt this one.
-            throw newErrorResult(ResultCode.CLIENT_SIDE_USER_CANCELLED,
-                e.getLocalizedMessage(), e);
-          }
-          printResult(opType, change.getName().toString(), r);
-          return r.getResultCode().intValue();
+        try {
+            final int versionNumber = version.getIntValue();
+            if (versionNumber != 2 && versionNumber != 3) {
+                println(ERR_DESCRIPTION_INVALID_VERSION.get(String.valueOf(versionNumber)));
+                return ResultCode.CLIENT_SIDE_PARAM_ERROR.intValue();
+            }
+        } catch (final ArgumentException ae) {
+            println(ERR_DESCRIPTION_INVALID_VERSION.get(String.valueOf(version.getValue())));
+            return ResultCode.CLIENT_SIDE_PARAM_ERROR.intValue();
         }
-        catch (final ErrorResultException ere)
-        {
-          return Utils.printErrorMessage(LDAPModify.this, ere);
+
+        // modifyOptions.setShowOperations(noop.isPresent());
+        // modifyOptions.setVerbose(verbose.isPresent());
+        // modifyOptions.setContinueOnError(continueOnError.isPresent());
+        // modifyOptions.setEncoding(encodingStr.getValue());
+        // modifyOptions.setDefaultAdd(defaultAdd.isPresent());
+
+        controls = new LinkedList<Control>();
+        if (controlStr.isPresent()) {
+            for (final String ctrlString : controlStr.getValues()) {
+                try {
+                    final Control ctrl = Utils.getControl(ctrlString);
+                    controls.add(ctrl);
+                } catch (final DecodeException de) {
+                    final LocalizableMessage message =
+                            ERR_TOOL_INVALID_CONTROL_STRING.get(ctrlString);
+                    println(message);
+                    ResultCode.CLIENT_SIDE_PARAM_ERROR.intValue();
+                }
+            }
         }
-      }
-      return ResultCode.SUCCESS.intValue();
-    }
 
-
-
-    public Integer visitChangeRecord(final Void aVoid,
-        final ModifyRequest change)
-    {
-      for (final Control control : controls)
-      {
-        change.addControl(control);
-      }
-      final String opType = "MODIFY";
-      println(INFO_PROCESSING_OPERATION
-          .get(opType, change.getName().toString()));
-      if (connection != null)
-      {
-        try
-        {
-          Result r;
-          try
-          {
-            r = connection.modify(change);
-          }
-          catch (final InterruptedException e)
-          {
-            // This shouldn't happen because there are no other threads
-            // to interrupt this one.
-            throw newErrorResult(ResultCode.CLIENT_SIDE_USER_CANCELLED,
-                e.getLocalizedMessage(), e);
-          }
-          printResult(opType, change.getName().toString(), r);
-          return r.getResultCode().intValue();
+        if (proxyAuthzID.isPresent()) {
+            final Control proxyControl =
+                    ProxiedAuthV2RequestControl.newControl(proxyAuthzID.getValue());
+            controls.add(proxyControl);
         }
-        catch (final ErrorResultException ere)
-        {
-          return Utils.printErrorMessage(LDAPModify.this, ere);
+
+        if (assertionFilter.isPresent()) {
+            final String filterString = assertionFilter.getValue();
+            Filter filter;
+            try {
+                filter = Filter.valueOf(filterString);
+
+                // FIXME -- Change this to the correct OID when the official one
+                // is assigned.
+                final Control assertionControl = AssertionRequestControl.newControl(true, filter);
+                controls.add(assertionControl);
+            } catch (final LocalizedIllegalArgumentException le) {
+                final LocalizableMessage message =
+                        ERR_LDAP_ASSERTION_INVALID_FILTER.get(le.getMessage());
+                println(message);
+                return ResultCode.CLIENT_SIDE_PARAM_ERROR.intValue();
+            }
         }
-      }
-      return ResultCode.SUCCESS.intValue();
-    }
 
-
-
-    private void printResult(final String operationType, final String name,
-        final Result r)
-    {
-      if (r.getResultCode() != ResultCode.SUCCESS
-          && r.getResultCode() != ResultCode.REFERRAL)
-      {
-        final LocalizableMessage msg = INFO_OPERATION_FAILED.get(operationType);
-        println(msg);
-        println(ERR_TOOL_RESULT_CODE.get(r.getResultCode().intValue(), r
-            .getResultCode().toString()));
-        if ((r.getDiagnosticMessage() != null)
-            && (r.getDiagnosticMessage().length() > 0))
-        {
-          println(LocalizableMessage.raw(r.getDiagnosticMessage()));
+        if (preReadAttributes.isPresent()) {
+            final String valueStr = preReadAttributes.getValue();
+            final StringTokenizer tokenizer = new StringTokenizer(valueStr, ", ");
+            final List<String> attributes = new LinkedList<String>();
+            while (tokenizer.hasMoreTokens()) {
+                attributes.add(tokenizer.nextToken());
+            }
+            final PreReadRequestControl control =
+                    PreReadRequestControl.newControl(true, attributes);
+            controls.add(control);
         }
-        if (r.getMatchedDN() != null && r.getMatchedDN().length() > 0)
-        {
-          println(ERR_TOOL_MATCHED_DN.get(r.getMatchedDN()));
+
+        if (postReadAttributes.isPresent()) {
+            final String valueStr = postReadAttributes.getValue();
+            final StringTokenizer tokenizer = new StringTokenizer(valueStr, ", ");
+            final List<String> attributes = new LinkedList<String>();
+            while (tokenizer.hasMoreTokens()) {
+                attributes.add(tokenizer.nextToken());
+            }
+            final PostReadRequestControl control =
+                    PostReadRequestControl.newControl(true, attributes);
+            controls.add(control);
         }
-      }
-      else
-      {
-        final LocalizableMessage msg = INFO_OPERATION_SUCCESSFUL.get(
-            operationType, name);
-        println(msg);
-        if ((r.getDiagnosticMessage() != null)
-            && (r.getDiagnosticMessage().length() > 0))
-        {
-          println(LocalizableMessage.raw(r.getDiagnosticMessage()));
+
+        if (!noop.isPresent()) {
+            try {
+                connection = connectionFactory.getConnection();
+            } catch (final ErrorResultException ere) {
+                return Utils.printErrorMessage(this, ere);
+            } catch (final InterruptedException e) {
+                // This shouldn't happen because there are no other threads to
+                // interrupt this one.
+                println(LocalizableMessage.raw(e.getLocalizedMessage()));
+                return ResultCode.CLIENT_SIDE_USER_CANCELLED.intValue();
+            }
         }
-        if (r.getReferralURIs() != null)
-        {
-          for (final String uri : r.getReferralURIs())
-          {
-            println(LocalizableMessage.raw(uri));
-          }
+
+        Utils.printPasswordPolicyResults(this, connection);
+
+        writer = new LDIFEntryWriter(getOutputStream());
+        final VisitorImpl visitor = new VisitorImpl();
+        try {
+            ChangeRecordReader reader;
+            if (filename.isPresent()) {
+                try {
+                    reader = new LDIFChangeRecordReader(new FileInputStream(filename.getValue()));
+                } catch (final Exception e) {
+                    final LocalizableMessage message =
+                            ERR_LDIF_FILE_CANNOT_OPEN_FOR_READ.get(filename.getValue(), e
+                                    .getLocalizedMessage());
+                    println(message);
+                    return ResultCode.CLIENT_SIDE_PARAM_ERROR.intValue();
+                }
+            } else {
+                reader = new LDIFChangeRecordReader(getInputStream());
+            }
+
+            try {
+                while (reader.hasNext()) {
+                    final ChangeRecord cr = reader.readChangeRecord();
+                    final int result = cr.accept(visitor, null);
+                    if (result != 0 && !continueOnError.isPresent()) {
+                        return result;
+                    }
+                }
+            } catch (final IOException ioe) {
+                final LocalizableMessage message =
+                        ERR_LDIF_FILE_READ_ERROR
+                                .get(filename.getValue(), ioe.getLocalizedMessage());
+                println(message);
+                return ResultCode.CLIENT_SIDE_LOCAL_ERROR.intValue();
+            }
+        } finally {
+            if (connection != null) {
+                connection.close();
+            }
         }
-      }
 
-      try
-      {
-        final PreReadResponseControl control = r.getControl(
-            PreReadResponseControl.DECODER, new DecodeOptions());
-        if (control != null)
-        {
-          println(INFO_LDAPMODIFY_PREREAD_ENTRY.get());
-          writer.writeEntry(control.getEntry());
-        }
-      }
-      catch (final DecodeException de)
-      {
-        println(ERR_DECODE_CONTROL_FAILURE.get(de.getLocalizedMessage()));
-      }
-      catch (final IOException ioe)
-      {
-        throw new RuntimeException(ioe);
-      }
-
-      try
-      {
-        final PostReadResponseControl control = r.getControl(
-            PostReadResponseControl.DECODER, new DecodeOptions());
-        if (control != null)
-        {
-          println(INFO_LDAPMODIFY_POSTREAD_ENTRY.get());
-          writer.writeEntry(control.getEntry());
-        }
-      }
-      catch (final DecodeException de)
-      {
-        println(ERR_DECODE_CONTROL_FAILURE.get(de.getLocalizedMessage()));
-      }
-      catch (final IOException ioe)
-      {
-        throw new RuntimeException(ioe);
-      }
-
-      // TODO: CSN control
+        return ResultCode.SUCCESS.intValue();
     }
-  }
-
-
-
-  /**
-   * The main method for LDAPModify tool.
-   *
-   * @param args
-   *          The command-line arguments provided to this program.
-   */
-
-  public static void main(final String[] args)
-  {
-    final int retCode = new LDAPModify().run(args);
-    System.exit(filterExitCode(retCode));
-  }
-
-
-
-  private Connection connection;
-
-  private EntryWriter writer;
-
-  private Collection<Control> controls;
-
-  private BooleanArgument verbose;
-
-
-
-  private LDAPModify()
-  {
-    // Nothing to do.
-  }
-
-
-
-  /**
-   * {@inheritDoc}
-   */
-  @Override
-  public boolean isVerbose()
-  {
-    return verbose.isPresent();
-  }
-
-
-
-  private int run(final String[] args)
-  {
-    // Create the command-line argument parser for use with this
-    // program.
-    final LocalizableMessage toolDescription = INFO_LDAPMODIFY_TOOL_DESCRIPTION
-        .get();
-    final ArgumentParser argParser = new ArgumentParser(LDAPModify.class
-        .getName(), toolDescription, false);
-    ConnectionFactoryProvider connectionFactoryProvider;
-    ConnectionFactory connectionFactory;
-
-    BooleanArgument continueOnError;
-    // TODO: Remove this due to new LDIF reader api?
-    BooleanArgument defaultAdd;
-    BooleanArgument noop;
-    BooleanArgument showUsage;
-    IntegerArgument version;
-    StringArgument assertionFilter;
-    StringArgument controlStr;
-    StringArgument encodingStr;
-    StringArgument filename;
-    StringArgument postReadAttributes;
-    StringArgument preReadAttributes;
-    StringArgument proxyAuthzID;
-    StringArgument propertiesFileArgument;
-    BooleanArgument noPropertiesFileArgument;
-
-    try
-    {
-      connectionFactoryProvider =
-          new ConnectionFactoryProvider(argParser, this);
-      propertiesFileArgument = new StringArgument("propertiesFilePath", null,
-          OPTION_LONG_PROP_FILE_PATH, false, false, true,
-          INFO_PROP_FILE_PATH_PLACEHOLDER.get(), null, null,
-          INFO_DESCRIPTION_PROP_FILE_PATH.get());
-      argParser.addArgument(propertiesFileArgument);
-      argParser.setFilePropertiesArgument(propertiesFileArgument);
-
-      noPropertiesFileArgument = new BooleanArgument(
-          "noPropertiesFileArgument", null, OPTION_LONG_NO_PROP_FILE,
-          INFO_DESCRIPTION_NO_PROP_FILE.get());
-      argParser.addArgument(noPropertiesFileArgument);
-      argParser.setNoPropertiesFileArgument(noPropertiesFileArgument);
-
-      defaultAdd = new BooleanArgument("defaultAdd", 'a', "defaultAdd",
-          INFO_MODIFY_DESCRIPTION_DEFAULT_ADD.get());
-      argParser.addArgument(defaultAdd);
-
-      filename = new StringArgument("filename", OPTION_SHORT_FILENAME,
-          OPTION_LONG_FILENAME, false, false, true,
-          INFO_FILE_PLACEHOLDER.get(), null, null,
-          INFO_LDAPMODIFY_DESCRIPTION_FILENAME.get());
-      filename.setPropertyName(OPTION_LONG_FILENAME);
-      argParser.addArgument(filename);
-
-      proxyAuthzID = new StringArgument("proxy_authzid",
-          OPTION_SHORT_PROXYAUTHID, OPTION_LONG_PROXYAUTHID, false, false,
-          true, INFO_PROXYAUTHID_PLACEHOLDER.get(), null, null,
-          INFO_DESCRIPTION_PROXY_AUTHZID.get());
-      proxyAuthzID.setPropertyName(OPTION_LONG_PROXYAUTHID);
-      argParser.addArgument(proxyAuthzID);
-
-      assertionFilter = new StringArgument("assertionfilter", null,
-          OPTION_LONG_ASSERTION_FILE, false, false, true,
-          INFO_ASSERTION_FILTER_PLACEHOLDER.get(), null, null,
-          INFO_DESCRIPTION_ASSERTION_FILTER.get());
-      assertionFilter.setPropertyName(OPTION_LONG_ASSERTION_FILE);
-      argParser.addArgument(assertionFilter);
-
-      preReadAttributes = new StringArgument("prereadattrs", null,
-          "preReadAttributes", false, false, true,
-          INFO_ATTRIBUTE_LIST_PLACEHOLDER.get(), null, null,
-          INFO_DESCRIPTION_PREREAD_ATTRS.get());
-      preReadAttributes.setPropertyName("preReadAttributes");
-      argParser.addArgument(preReadAttributes);
-
-      postReadAttributes = new StringArgument("postreadattrs", null,
-          "postReadAttributes", false, false, true,
-          INFO_ATTRIBUTE_LIST_PLACEHOLDER.get(), null, null,
-          INFO_DESCRIPTION_POSTREAD_ATTRS.get());
-      postReadAttributes.setPropertyName("postReadAttributes");
-      argParser.addArgument(postReadAttributes);
-
-      controlStr = new StringArgument("control", 'J', "control", false, true,
-          true, INFO_LDAP_CONTROL_PLACEHOLDER.get(), null, null,
-          INFO_DESCRIPTION_CONTROLS.get());
-      controlStr.setPropertyName("control");
-      argParser.addArgument(controlStr);
-
-      version = new IntegerArgument("version", OPTION_SHORT_PROTOCOL_VERSION,
-          OPTION_LONG_PROTOCOL_VERSION, false, false, true,
-          INFO_PROTOCOL_VERSION_PLACEHOLDER.get(), 3, null,
-          INFO_DESCRIPTION_VERSION.get());
-      version.setPropertyName(OPTION_LONG_PROTOCOL_VERSION);
-      argParser.addArgument(version);
-
-      encodingStr = new StringArgument("encoding", 'i', "encoding", false,
-          false, true, INFO_ENCODING_PLACEHOLDER.get(), null, null,
-          INFO_DESCRIPTION_ENCODING.get());
-      encodingStr.setPropertyName("encoding");
-      argParser.addArgument(encodingStr);
-
-      continueOnError = new BooleanArgument("continueOnError", 'c',
-          "continueOnError", INFO_DESCRIPTION_CONTINUE_ON_ERROR.get());
-      continueOnError.setPropertyName("continueOnError");
-      argParser.addArgument(continueOnError);
-
-      noop = new BooleanArgument("no-op", OPTION_SHORT_DRYRUN,
-          OPTION_LONG_DRYRUN, INFO_DESCRIPTION_NOOP.get());
-      noop.setPropertyName(OPTION_LONG_DRYRUN);
-      argParser.addArgument(noop);
-
-      verbose = new BooleanArgument("verbose", 'v', "verbose",
-          INFO_DESCRIPTION_VERBOSE.get());
-      verbose.setPropertyName("verbose");
-      argParser.addArgument(verbose);
-
-      showUsage = new BooleanArgument("showUsage", OPTION_SHORT_HELP,
-          OPTION_LONG_HELP, INFO_DESCRIPTION_SHOWUSAGE.get());
-      argParser.addArgument(showUsage);
-      argParser.setUsageArgument(showUsage, getOutputStream());
-    }
-    catch (final ArgumentException ae)
-    {
-      final LocalizableMessage message = ERR_CANNOT_INITIALIZE_ARGS.get(ae
-          .getMessage());
-      println(message);
-      return ResultCode.CLIENT_SIDE_PARAM_ERROR.intValue();
-    }
-
-    // Parse the command-line arguments provided to this program.
-    try
-    {
-      argParser.parseArguments(args);
-
-      // If we should just display usage or version information,
-      // then print it and exit.
-      if (argParser.usageOrVersionDisplayed())
-      {
-        return 0;
-      }
-
-      connectionFactory =
-          connectionFactoryProvider.getAuthenticatedConnectionFactory();
-    }
-    catch (final ArgumentException ae)
-    {
-      final LocalizableMessage message = ERR_ERROR_PARSING_ARGS.get(ae
-          .getMessage());
-      println(message);
-      return ResultCode.CLIENT_SIDE_PARAM_ERROR.intValue();
-    }
-
-    try
-    {
-      final int versionNumber = version.getIntValue();
-      if (versionNumber != 2 && versionNumber != 3)
-      {
-        println(ERR_DESCRIPTION_INVALID_VERSION.get(String
-            .valueOf(versionNumber)));
-        return ResultCode.CLIENT_SIDE_PARAM_ERROR.intValue();
-      }
-    }
-    catch (final ArgumentException ae)
-    {
-      println(ERR_DESCRIPTION_INVALID_VERSION.get(String.valueOf(version
-          .getValue())));
-      return ResultCode.CLIENT_SIDE_PARAM_ERROR.intValue();
-    }
-
-    // modifyOptions.setShowOperations(noop.isPresent());
-    // modifyOptions.setVerbose(verbose.isPresent());
-    // modifyOptions.setContinueOnError(continueOnError.isPresent());
-    // modifyOptions.setEncoding(encodingStr.getValue());
-    // modifyOptions.setDefaultAdd(defaultAdd.isPresent());
-
-    controls = new LinkedList<Control>();
-    if (controlStr.isPresent())
-    {
-      for (final String ctrlString : controlStr.getValues())
-      {
-        try
-        {
-          final Control ctrl = Utils.getControl(ctrlString);
-          controls.add(ctrl);
-        }
-        catch (final DecodeException de)
-        {
-          final LocalizableMessage message = ERR_TOOL_INVALID_CONTROL_STRING
-              .get(ctrlString);
-          println(message);
-          ResultCode.CLIENT_SIDE_PARAM_ERROR.intValue();
-        }
-      }
-    }
-
-    if (proxyAuthzID.isPresent())
-    {
-      final Control proxyControl = ProxiedAuthV2RequestControl
-          .newControl(proxyAuthzID.getValue());
-      controls.add(proxyControl);
-    }
-
-    if (assertionFilter.isPresent())
-    {
-      final String filterString = assertionFilter.getValue();
-      Filter filter;
-      try
-      {
-        filter = Filter.valueOf(filterString);
-
-        // FIXME -- Change this to the correct OID when the official one
-        // is assigned.
-        final Control assertionControl = AssertionRequestControl.newControl(
-            true, filter);
-        controls.add(assertionControl);
-      }
-      catch (final LocalizedIllegalArgumentException le)
-      {
-        final LocalizableMessage message = ERR_LDAP_ASSERTION_INVALID_FILTER
-            .get(le.getMessage());
-        println(message);
-        return ResultCode.CLIENT_SIDE_PARAM_ERROR.intValue();
-      }
-    }
-
-    if (preReadAttributes.isPresent())
-    {
-      final String valueStr = preReadAttributes.getValue();
-      final StringTokenizer tokenizer = new StringTokenizer(valueStr, ", ");
-      final List<String> attributes = new LinkedList<String>();
-      while (tokenizer.hasMoreTokens())
-      {
-        attributes.add(tokenizer.nextToken());
-      }
-      final PreReadRequestControl control = PreReadRequestControl.newControl(
-          true, attributes);
-      controls.add(control);
-    }
-
-    if (postReadAttributes.isPresent())
-    {
-      final String valueStr = postReadAttributes.getValue();
-      final StringTokenizer tokenizer = new StringTokenizer(valueStr, ", ");
-      final List<String> attributes = new LinkedList<String>();
-      while (tokenizer.hasMoreTokens())
-      {
-        attributes.add(tokenizer.nextToken());
-      }
-      final PostReadRequestControl control = PostReadRequestControl.newControl(
-          true, attributes);
-      controls.add(control);
-    }
-
-    if (!noop.isPresent())
-    {
-      try
-      {
-        connection = connectionFactory.getConnection();
-      }
-      catch (final ErrorResultException ere)
-      {
-        return Utils.printErrorMessage(this, ere);
-      }
-      catch (final InterruptedException e)
-      {
-        // This shouldn't happen because there are no other threads to
-        // interrupt this one.
-        println(LocalizableMessage.raw(e.getLocalizedMessage()));
-        return ResultCode.CLIENT_SIDE_USER_CANCELLED.intValue();
-      }
-    }
-
-    Utils.printPasswordPolicyResults(this, connection);
-
-    writer = new LDIFEntryWriter(getOutputStream());
-    final VisitorImpl visitor = new VisitorImpl();
-    try
-    {
-      ChangeRecordReader reader;
-      if (filename.isPresent())
-      {
-        try
-        {
-          reader = new LDIFChangeRecordReader(new FileInputStream(filename
-              .getValue()));
-        }
-        catch (final Exception e)
-        {
-          final LocalizableMessage message = ERR_LDIF_FILE_CANNOT_OPEN_FOR_READ
-              .get(filename.getValue(), e.getLocalizedMessage());
-          println(message);
-          return ResultCode.CLIENT_SIDE_PARAM_ERROR.intValue();
-        }
-      }
-      else
-      {
-        reader = new LDIFChangeRecordReader(getInputStream());
-      }
-
-      try
-      {
-        while (reader.hasNext())
-        {
-          final ChangeRecord cr = reader.readChangeRecord();
-          final int result = cr.accept(visitor, null);
-          if (result != 0 && !continueOnError.isPresent())
-          {
-            return result;
-          }
-        }
-      }
-      catch (final IOException ioe)
-      {
-        final LocalizableMessage message = ERR_LDIF_FILE_READ_ERROR.get(
-            filename.getValue(), ioe.getLocalizedMessage());
-        println(message);
-        return ResultCode.CLIENT_SIDE_LOCAL_ERROR.intValue();
-      }
-    }
-    finally
-    {
-      if (connection != null)
-      {
-        connection.close();
-      }
-    }
-
-    return ResultCode.SUCCESS.intValue();
-  }
 }

--
Gitblit v1.10.0