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

Jean-Noël Rouvignac
26.30.2016 310df200f78f7d98cc52e4ab97d8a5feb744fa52
UCDetector and AutoRefactor code cleanup
66 files modified
4185 ■■■■ changed files
opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/task/CancelTaskTask.java 33 ●●●● patch | view | raw | blame | history
opendj-server-legacy/src/main/java/org/opends/quicksetup/LicenseFile.java 10 ●●●●● patch | view | raw | blame | history
opendj-server-legacy/src/main/java/org/opends/server/backends/BackupBackend.java 5 ●●●●● patch | view | raw | blame | history
opendj-server-legacy/src/main/java/org/opends/server/core/DefaultCompressedSchema.java 48 ●●●●● patch | view | raw | blame | history
opendj-server-legacy/src/main/java/org/opends/server/tasks/ExportTask.java 2 ●●● patch | view | raw | blame | history
opendj-server-legacy/src/main/java/org/opends/server/tools/BackUpDB.java 12 ●●●●● patch | view | raw | blame | history
opendj-server-legacy/src/main/java/org/opends/server/tools/BackendCreationHelper.java 6 ●●●● patch | view | raw | blame | history
opendj-server-legacy/src/main/java/org/opends/server/tools/BackendTypeHelper.java 6 ●●●● patch | view | raw | blame | history
opendj-server-legacy/src/main/java/org/opends/server/tools/ConfigureDS.java 60 ●●●●● patch | view | raw | blame | history
opendj-server-legacy/src/main/java/org/opends/server/tools/ConfigureWindowsService.java 29 ●●●● patch | view | raw | blame | history
opendj-server-legacy/src/main/java/org/opends/server/tools/ExportLDIF.java 19 ●●●● patch | view | raw | blame | history
opendj-server-legacy/src/main/java/org/opends/server/tools/ImportLDIF.java 31 ●●●●● patch | view | raw | blame | history
opendj-server-legacy/src/main/java/org/opends/server/tools/InstallDS.java 40 ●●●● patch | view | raw | blame | history
opendj-server-legacy/src/main/java/org/opends/server/tools/InstallDSArgumentParser.java 36 ●●●●● patch | view | raw | blame | history
opendj-server-legacy/src/main/java/org/opends/server/tools/JavaPropertiesTool.java 54 ●●●● patch | view | raw | blame | history
opendj-server-legacy/src/main/java/org/opends/server/tools/JavaPropertiesToolArgumentParser.java 4 ●●●● patch | view | raw | blame | history
opendj-server-legacy/src/main/java/org/opends/server/tools/LDAPPasswordModify.java 45 ●●●●● patch | view | raw | blame | history
opendj-server-legacy/src/main/java/org/opends/server/tools/ManageTasks.java 45 ●●●● patch | view | raw | blame | history
opendj-server-legacy/src/main/java/org/opends/server/tools/StopWindowsService.java 14 ●●●● patch | view | raw | blame | history
opendj-server-legacy/src/main/java/org/opends/server/tools/dsreplication/MonoServerReplicationUserData.java 42 ●●●●● patch | view | raw | blame | history
opendj-server-legacy/src/main/java/org/opends/server/tools/dsreplication/ReplicationCliArgumentParser.java 34 ●●●●● patch | view | raw | blame | history
opendj-server-legacy/src/main/java/org/opends/server/tools/makeldif/Branch.java 15 ●●●●● patch | view | raw | blame | history
opendj-server-legacy/src/main/java/org/opends/server/tools/makeldif/RandomTag.java 66 ●●●● patch | view | raw | blame | history
opendj-server-legacy/src/main/java/org/opends/server/tools/makeldif/TagResult.java 55 ●●●● patch | view | raw | blame | history
opendj-server-legacy/src/main/java/org/opends/server/tools/makeldif/Template.java 52 ●●●● patch | view | raw | blame | history
opendj-server-legacy/src/main/java/org/opends/server/tools/makeldif/TemplateEntry.java 30 ●●●● patch | view | raw | blame | history
opendj-server-legacy/src/main/java/org/opends/server/tools/makeldif/TemplateFile.java 323 ●●●●● patch | view | raw | blame | history
opendj-server-legacy/src/main/java/org/opends/server/tools/status/StatusCli.java 63 ●●●●● patch | view | raw | blame | history
opendj-server-legacy/src/main/java/org/opends/server/tools/tasks/TaskClient.java 235 ●●●● patch | view | raw | blame | history
opendj-server-legacy/src/main/java/org/opends/server/tools/upgrade/FileManager.java 2 ●●● patch | view | raw | blame | history
opendj-server-legacy/src/main/java/org/opends/server/tools/upgrade/LicenseFile.java 4 ●●●● patch | view | raw | blame | history
opendj-server-legacy/src/main/java/org/opends/server/tools/upgrade/UpgradeContext.java 12 ●●●●● patch | view | raw | blame | history
opendj-server-legacy/src/main/java/org/opends/server/tools/upgrade/UpgradeTasks.java 15 ●●●● patch | view | raw | blame | history
opendj-server-legacy/src/main/java/org/opends/server/tools/upgrade/UpgradeUtils.java 75 ●●●●● patch | view | raw | blame | history
opendj-server-legacy/src/main/java/org/opends/server/types/AuthenticationInfo.java 58 ●●●●● patch | view | raw | blame | history
opendj-server-legacy/src/main/java/org/opends/server/types/BackupDirectory.java 14 ●●●●● patch | view | raw | blame | history
opendj-server-legacy/src/main/java/org/opends/server/types/BackupInfo.java 65 ●●●●● patch | view | raw | blame | history
opendj-server-legacy/src/main/java/org/opends/server/types/DITContentRule.java 57 ●●●●● patch | view | raw | blame | history
opendj-server-legacy/src/main/java/org/opends/server/types/DirectoryEnvironmentConfig.java 288 ●●●● patch | view | raw | blame | history
opendj-server-legacy/src/main/java/org/opends/server/types/FilePermission.java 215 ●●●●● patch | view | raw | blame | history
opendj-server-legacy/src/main/java/org/opends/server/types/IntermediateResponse.java 43 ●●●● patch | view | raw | blame | history
opendj-server-legacy/src/main/java/org/opends/server/types/LDAPURL.java 21 ●●●●● patch | view | raw | blame | history
opendj-server-legacy/src/main/java/org/opends/server/types/LDIFExportConfig.java 218 ●●●● patch | view | raw | blame | history
opendj-server-legacy/src/main/java/org/opends/server/types/LDIFImportConfig.java 52 ●●●● patch | view | raw | blame | history
opendj-server-legacy/src/main/java/org/opends/server/types/LDIFImportResult.java 7 ●●●● patch | view | raw | blame | history
opendj-server-legacy/src/main/java/org/opends/server/types/LockManager.java 28 ●●●●● patch | view | raw | blame | history
opendj-server-legacy/src/main/java/org/opends/server/types/Modification.java 4 ●●●● patch | view | raw | blame | history
opendj-server-legacy/src/main/java/org/opends/server/types/NamedCharacterSet.java 30 ●●●● patch | view | raw | blame | history
opendj-server-legacy/src/main/java/org/opends/server/types/SubEntry.java 30 ●●●●● patch | view | raw | blame | history
opendj-server-legacy/src/main/java/org/opends/server/types/SubtreeSpecification.java 76 ●●●● patch | view | raw | blame | history
opendj-server-legacy/src/main/java/org/opends/server/types/VirtualAttributeRule.java 40 ●●●● patch | view | raw | blame | history
opendj-server-legacy/src/main/java/org/opends/server/util/BackupManager.java 119 ●●●● patch | view | raw | blame | history
opendj-server-legacy/src/main/java/org/opends/server/util/BuildVersion.java 4 ●●●● patch | view | raw | blame | history
opendj-server-legacy/src/main/java/org/opends/server/util/EMailMessage.java 55 ●●●● patch | view | raw | blame | history
opendj-server-legacy/src/main/java/org/opends/server/util/LDIFReader.java 110 ●●●●● patch | view | raw | blame | history
opendj-server-legacy/src/main/java/org/opends/server/util/SetupUtils.java 103 ●●●● patch | view | raw | blame | history
opendj-server-legacy/src/main/java/org/opends/server/util/StaticUtils.java 496 ●●●●● patch | view | raw | blame | history
opendj-server-legacy/src/main/java/org/opends/server/util/cli/LDAPConnectionArgumentParser.java 35 ●●●●● patch | view | raw | blame | history
opendj-server-legacy/src/main/java/org/opends/server/util/cli/PointAdder.java 6 ●●●● patch | view | raw | blame | history
opendj-server-legacy/src/main/java/org/opends/server/workflowelement/localbackend/LocalBackendAddOperation.java 94 ●●●● patch | view | raw | blame | history
opendj-server-legacy/src/test/java/org/opends/server/extensions/LDAPPassThroughAuthenticationPolicyTestCase.java 91 ●●●● patch | view | raw | blame | history
opendj-server-legacy/src/test/java/org/opends/server/extensions/TLSByteChannelTestCase.java 31 ●●●● patch | view | raw | blame | history
opendj-server-legacy/src/test/java/org/opends/server/tools/ArgumentParserToolsTestCase.java 4 ●●●● patch | view | raw | blame | history
opendj-server-legacy/src/test/java/org/opends/server/tools/UpgradeTestCase.java 106 ●●●● patch | view | raw | blame | history
opendj-server-legacy/src/test/java/org/opends/server/tools/makeldif/MakeLDIFTestCase.java 36 ●●●● patch | view | raw | blame | history
opendj-server-legacy/src/test/java/org/opends/server/util/TestStaticUtils.java 127 ●●●●● patch | view | raw | blame | history
opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/task/CancelTaskTask.java
@@ -14,7 +14,6 @@
 * Copyright 2009 Sun Microsystems, Inc.
 * Portions Copyright 2014-2016 ForgeRock AS.
 */
package org.opends.guitools.controlpanel.task;
import static org.opends.messages.AdminToolMessages.*;
@@ -26,12 +25,13 @@
import java.util.Set;
import java.util.TreeSet;
import javax.swing.JProgressBar;
import javax.swing.SwingUtilities;
import org.forgerock.i18n.LocalizableMessage;
import org.opends.guitools.controlpanel.datamodel.BackendDescriptor;
import org.opends.guitools.controlpanel.datamodel.ControlPanelInfo;
import org.opends.guitools.controlpanel.ui.ProgressDialog;
import org.forgerock.i18n.LocalizableMessage;
import org.opends.server.tools.ManageTasks;
import org.opends.server.tools.tasks.TaskEntry;
@@ -174,30 +174,27 @@
        arguments.toArray(args);
        returnCode = ManageTasks.mainTaskInfo(args, System.in,
            outPrintStream, errorPrintStream, false);
        returnCode = ManageTasks.mainTaskInfo(args, outPrintStream, errorPrintStream, false);
        if (returnCode != 0)
        {
          break;
        }
        else
        numberCanceled++;
        final int fNumberCanceled = numberCanceled;
        SwingUtilities.invokeLater(new Runnable()
        {
          numberCanceled ++;
          final int fNumberCanceled = numberCanceled;
          SwingUtilities.invokeLater(new Runnable()
          @Override
          public void run()
          {
            @Override
            public void run()
            JProgressBar progressBar = getProgressDialog().getProgressBar();
            if (fNumberCanceled == 1)
            {
              if (fNumberCanceled == 1)
              {
                getProgressDialog().getProgressBar().setIndeterminate(false);
              }
              getProgressDialog().getProgressBar().setValue(
                  (fNumberCanceled * 100) / totalNumber);
              progressBar.setIndeterminate(false);
            }
          });
        }
            progressBar.setValue((fNumberCanceled * 100) / totalNumber);
          }
        });
      }
      if (returnCode != 0)
      {
opendj-server-legacy/src/main/java/org/opends/quicksetup/LicenseFile.java
@@ -14,7 +14,6 @@
 * Copyright 2006-2010 Sun Microsystems, Inc.
 * Portions Copyright 2013-2016 ForgeRock AS.
 */
package org.opends.quicksetup;
import java.io.BufferedReader;
@@ -110,7 +109,7 @@
  {
    // Reads the inputstream content.
    try (InputStream input = new FileInputStream(getFile());
        BufferedReader br = new BufferedReader(new InputStreamReader(input));)
        BufferedReader br = new BufferedReader(new InputStreamReader(input)))
    {
      final StringBuilder sb = new StringBuilder();
      String read;
@@ -142,12 +141,12 @@
  /**
   * Sets the license approval status.
   *
   * @param p_approved
   * @param approved
   *          the license approval status
   */
  public static void setApproval(boolean p_approved)
  public static void setApproval(boolean approved)
  {
    approved = p_approved;
    LicenseFile.approved = approved;
  }
  /**
@@ -190,5 +189,4 @@
  {
    return new File(getInstanceLegalDirectory(), ACCEPTED_LICENSE_FILE_NAME).exists();
  }
}
opendj-server-legacy/src/main/java/org/opends/server/backends/BackupBackend.java
@@ -28,7 +28,6 @@
import java.util.Collections;
import java.util.Date;
import java.util.HashMap;
import java.util.HashSet;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
@@ -610,7 +609,7 @@
    putBoolean(userAttrs, ATTR_BACKUP_ENCRYPTED, backupInfo.isEncrypted());
    putBoolean(userAttrs, ATTR_BACKUP_INCREMENTAL, backupInfo.isIncremental());
    HashSet<String> dependencies = backupInfo.getDependencies();
    Set<String> dependencies = backupInfo.getDependencies();
    if (dependencies != null && !dependencies.isEmpty()) {
      t = DirectoryServer.getAttributeType(ATTR_BACKUP_DEPENDENCY);
      AttributeBuilder builder = new AttributeBuilder(t);
@@ -628,7 +627,7 @@
      putByteString(userAttrs, ATTR_BACKUP_UNSIGNED_HASH, unsignedHash);
    }
    HashMap<String, String> properties = backupInfo.getBackupProperties();
    Map<String, String> properties = backupInfo.getBackupProperties();
    if (properties != null && !properties.isEmpty()) {
      for (Map.Entry<String, String> e : properties.entrySet()) {
        t = DirectoryServer.getAttributeType(toLowerCase(e.getKey()));
opendj-server-legacy/src/main/java/org/opends/server/core/DefaultCompressedSchema.java
@@ -79,20 +79,18 @@
  /** Loads the compressed schema information from disk. */
  private void load()
  {
    FileInputStream inputStream = null;
    try
    // Determine the location of the compressed schema data file. It should
    // be in the config directory with a name of "schematokens.dat". If that
    // file doesn't exist, then don't do anything.
    final String path = DirectoryServer.getInstanceRoot() + File.separator
        + CONFIG_DIR_NAME + File.separator + COMPRESSED_SCHEMA_FILE_NAME;
    if (!new File(path).exists())
    {
      // Determine the location of the compressed schema data file. It should
      // be in the config directory with a name of "schematokens.dat". If that
      // file doesn't exist, then don't do anything.
      final String path = DirectoryServer.getInstanceRoot() + File.separator
          + CONFIG_DIR_NAME + File.separator + COMPRESSED_SCHEMA_FILE_NAME;
      if (!new File(path).exists())
      {
        return;
      }
      inputStream = new FileInputStream(path);
      return;
    }
    try (FileInputStream inputStream = new FileInputStream(path))
    {
      final ASN1Reader reader = ASN1.getReader(inputStream);
      // The first element in the file should be a sequence of object class
@@ -151,10 +149,6 @@
      // FIXME -- Should we do something else here?
      throw new RuntimeException(e);
    }
    finally
    {
      close(inputStream);
    }
  }
  /**
@@ -167,17 +161,13 @@
  {
    synchronized (saveLock)
    {
      FileOutputStream outputStream = null;
      try
      // Determine the location of the "live" compressed schema data file, and
      // then append ".tmp" to get the name of the temporary file that we will use.
      final String path = DirectoryServer.getInstanceRoot() + File.separator
          + CONFIG_DIR_NAME + File.separator + COMPRESSED_SCHEMA_FILE_NAME;
      final String tempPath = path + ".tmp";
      try (FileOutputStream outputStream = new FileOutputStream(tempPath))
      {
        // Determine the location of the "live" compressed schema data file, and
        // then append ".tmp" to get the name of the temporary file that we will
        // use.
        final String path = DirectoryServer.getInstanceRoot() + File.separator
            + CONFIG_DIR_NAME + File.separator + COMPRESSED_SCHEMA_FILE_NAME;
        final String tempPath = path + ".tmp";
        outputStream = new FileOutputStream(tempPath);
        final ASN1Writer writer = ASN1.getWriter(outputStream);
        // The first element in the file should be a sequence of object class
@@ -256,10 +246,6 @@
        throw new DirectoryException(
            DirectoryServer.getServerErrorResultCode(), message, e);
      }
      finally
      {
        close(outputStream);
      }
    }
  }
}
opendj-server-legacy/src/main/java/org/opends/server/tasks/ExportTask.java
@@ -61,7 +61,7 @@
  private static final LocalizedLogger logger = LocalizedLogger.getLoggerForThisClass();
  /** Stores mapping between configuration attribute name and its label. */
  private static Map<String,LocalizableMessage> argDisplayMap = new HashMap<>();
  private static final Map<String, LocalizableMessage> argDisplayMap = new HashMap<>();
  static {
    argDisplayMap.put(ATTR_TASK_EXPORT_LDIF_FILE, INFO_EXPORT_ARG_LDIF_FILE.get());
    argDisplayMap.put(ATTR_TASK_EXPORT_BACKEND_ID, INFO_EXPORT_ARG_BACKEND_ID.get());
opendj-server-legacy/src/main/java/org/opends/server/tools/BackUpDB.java
@@ -93,18 +93,6 @@
  /**
   * Processes the command-line arguments and invokes the backup process.
   *
   * @param  args  The command-line arguments provided to this program.
   *
   * @return The error code.
   */
  public static int mainBackUpDB(String[] args)
  {
    return mainBackUpDB(args, true, System.out, System.err);
  }
  /**
   * Processes the command-line arguments and invokes the backup process.
   *
   * @param  args              The command-line arguments provided to this
   *                           program.
   * @param  initializeServer  Indicates whether to initialize the server.
opendj-server-legacy/src/main/java/org/opends/server/tools/BackendCreationHelper.java
@@ -41,12 +41,12 @@
  /** Describes an attribute index which should be created during installation. */
  public static final class DefaultIndex
  {
    static DefaultIndex withEqualityAndSubstring(final String name)
    private static DefaultIndex withEqualityAndSubstring(final String name)
    {
      return new DefaultIndex(name, true);
    }
    static DefaultIndex withEquality(final String name)
    private static DefaultIndex withEquality(final String name)
    {
      return new DefaultIndex(name, false);
    }
@@ -133,7 +133,7 @@
   * @throws Exception
   *           If any problems occurred
   */
  public static void createBackend(RootCfgClient rootConfiguration, String backendName, Collection<DN> baseDNs,
  private static void createBackend(RootCfgClient rootConfiguration, String backendName, Collection<DN> baseDNs,
      ManagedObjectDefinition<? extends BackendCfgClient, ? extends BackendCfg> backendType) throws Exception
  {
      final BackendCfgClient backendCfgClient = rootConfiguration.createBackend(backendType, backendName, null);
opendj-server-legacy/src/main/java/org/opends/server/tools/BackendTypeHelper.java
@@ -36,7 +36,6 @@
 */
public class BackendTypeHelper
{
  /**
   * Filter the provided backend name by removing the backend suffix.
   *
@@ -104,7 +103,6 @@
    {
      return backend;
    }
  }
  private final List<ManagedObjectDefinition<? extends BackendCfgClient, ? extends BackendCfg>> backends;
@@ -150,7 +148,6 @@
    }
  }
  ManagedObjectDefinition<? extends BackendCfgClient, ? extends BackendCfg> retrieveBackendTypeFromName(
      final String backendTypeStr)
  {
@@ -227,10 +224,9 @@
   *          the backend type to adapt.
   * @return a BackendTypeUIAdapter which adapts the provided backend.
   */
  public static BackendTypeUIAdapter getBackendTypeAdapter(
  private static BackendTypeUIAdapter getBackendTypeAdapter(
      ManagedObjectDefinition<? extends BackendCfgClient, ? extends BackendCfg> backend)
  {
    return new BackendTypeUIAdapter(backend);
  }
}
opendj-server-legacy/src/main/java/org/opends/server/tools/ConfigureDS.java
@@ -16,19 +16,19 @@
 */
package org.opends.server.tools;
import static com.forgerock.opendj.cli.ArgumentConstants.*;
import static com.forgerock.opendj.cli.CliMessages.INFO_FILE_PLACEHOLDER;
import static com.forgerock.opendj.cli.CliMessages.INFO_JMXPORT_PLACEHOLDER;
import static com.forgerock.opendj.cli.CliMessages.INFO_PORT_PLACEHOLDER;
import static com.forgerock.opendj.cli.CommonArguments.*;
import static com.forgerock.opendj.cli.Utils.*;
import static org.opends.messages.ConfigMessages.*;
import static org.opends.messages.ToolMessages.*;
import static org.opends.server.config.ConfigConstants.*;
import static org.opends.server.util.ServerConstants.*;
import static org.opends.server.util.StaticUtils.*;
import static com.forgerock.opendj.cli.ArgumentConstants.*;
import static com.forgerock.opendj.cli.Utils.*;
import static com.forgerock.opendj.cli.CommonArguments.*;
import java.io.File;
import java.io.OutputStream;
import java.io.PrintStream;
@@ -46,22 +46,21 @@
import org.forgerock.i18n.LocalizableMessage;
import org.forgerock.i18n.LocalizedIllegalArgumentException;
import org.forgerock.opendj.adapter.server3x.Converters;
import org.forgerock.opendj.config.DefaultBehaviorProvider;
import org.forgerock.opendj.config.DefinedDefaultBehaviorProvider;
import org.forgerock.opendj.config.ManagedObjectDefinition;
import org.forgerock.opendj.config.StringPropertyDefinition;
import org.forgerock.opendj.config.server.ConfigException;
import org.forgerock.opendj.ldap.AttributeDescription;
import org.forgerock.opendj.ldap.DN;
import org.forgerock.opendj.ldap.LinkedAttribute;
import org.forgerock.opendj.ldap.LinkedHashMapEntry;
import org.forgerock.opendj.ldap.AttributeDescription;
import org.forgerock.opendj.ldap.schema.AttributeType;
import org.forgerock.opendj.ldap.schema.Syntax;
import org.forgerock.opendj.server.config.client.BackendCfgClient;
import org.forgerock.opendj.server.config.meta.CryptoManagerCfgDefn;
import org.forgerock.opendj.server.config.server.BackendCfg;
import org.opends.quicksetup.installer.Installer;
import org.forgerock.opendj.config.DefaultBehaviorProvider;
import org.forgerock.opendj.config.DefinedDefaultBehaviorProvider;
import org.forgerock.opendj.config.StringPropertyDefinition;
import org.forgerock.opendj.config.server.ConfigException;
import org.forgerock.opendj.server.config.meta.CryptoManagerCfgDefn;
import org.opends.server.types.Entry;
import org.opends.server.core.ConfigurationHandler;
import org.opends.server.core.DirectoryServer;
import org.opends.server.core.LockFileManager;
@@ -69,6 +68,7 @@
import org.opends.server.protocols.ldap.LDAPResultCode;
import org.opends.server.types.DirectoryEnvironmentConfig;
import org.opends.server.types.DirectoryException;
import org.opends.server.types.Entry;
import org.opends.server.types.InitializationException;
import org.opends.server.types.LDIFImportConfig;
import org.opends.server.types.NullOutputStream;
@@ -185,36 +185,26 @@
      + "ds-cfg-trust-store-type: JCEKS" + NEW_LINE
      + "ds-cfg-trust-store-file: config/truststore" + NEW_LINE;
  /** The fully-qualified name of this class. */
  private static final String CLASS_NAME = "org.opends.server.tools.ConfigureDS";
  /** The DN of the configuration entry defining the LDAP connection handler. */
  public static final String DN_LDAP_CONNECTION_HANDLER = "cn=LDAP Connection Handler," + DN_CONNHANDLER_BASE;
  private static final String DN_LDAP_CONNECTION_HANDLER = "cn=LDAP Connection Handler," + DN_CONNHANDLER_BASE;
  /** The DN of the configuration entry defining the Administration connector. */
  public static final String DN_ADMIN_CONNECTOR = "cn=Administration Connector," + DN_CONFIG_ROOT;
  private static final String DN_ADMIN_CONNECTOR = "cn=Administration Connector," + DN_CONFIG_ROOT;
  /** The DN of the configuration entry defining the LDAPS connection handler. */
  private static final String DN_LDAPS_CONNECTION_HANDLER = "cn=LDAPS Connection Handler," + DN_CONNHANDLER_BASE;
  /** The DN of the configuration entry defining the HTTP connection handler. */
  private static final String DN_HTTP_CONNECTION_HANDLER =
      "cn=HTTP Connection Handler,cn=Connection Handlers,cn=config";
  /** The DN of the configuration entry defining the JMX connection handler. */
  private static final String DN_JMX_CONNECTION_HANDLER = "cn=JMX Connection Handler," + DN_CONNHANDLER_BASE;
  /** The DN of the configuration entry defining the initial root user. */
  public static final String DN_ROOT_USER = "cn=Directory Manager," + DN_ROOT_DN_CONFIG_BASE;
  private static final String DN_ROOT_USER = "cn=Directory Manager," + DN_ROOT_DN_CONFIG_BASE;
  /** The DN of the Crypto Manager. */
  public static final String DN_CRYPTO_MANAGER = "cn=Crypto Manager,cn=config";
  private static final String DN_CRYPTO_MANAGER = "cn=Crypto Manager,cn=config";
  /** The DN of the DIGEST-MD5 SASL mechanism handler. */
  public static final String DN_DIGEST_MD5_SASL_MECHANISM = "cn=DIGEST-MD5,cn=SASL Mechanisms,cn=config";
  private static final String DN_DIGEST_MD5_SASL_MECHANISM = "cn=DIGEST-MD5,cn=SASL Mechanisms,cn=config";
  private static int SUCCESS = 0;
  private static int ERROR = 1;
  private static final int SUCCESS = 0;
  private static final int ERROR = 1;
  /**
   * Provides the command-line arguments to the <CODE>configMain</CODE> method
@@ -283,7 +273,7 @@
    arguments = args;
    out = NullOutputStream.wrapOrNullStream(outStream);
    err = NullOutputStream.wrapOrNullStream(errStream);
    argParser = new ArgumentParser(CLASS_NAME, INFO_CONFIGDS_TOOL_DESCRIPTION.get(), false);
    argParser = new ArgumentParser(ConfigureDS.class.getName(), INFO_CONFIGDS_TOOL_DESCRIPTION.get(), false);
  }
  private int run()
@@ -1188,27 +1178,25 @@
   * Returns <CODE>null</CODE> if no alternative cipher could be found.
   * @return a cipher that is supported by the JVM we are running at.
   */
  public static String getAlternativeCipher()
  private static String getAlternativeCipher()
  {
    final String[] preferredAlternativeCiphers =
    {
        "RSA/ECB/OAEPWITHSHA1ANDMGF1PADDING",
        "RSA/ECB/PKCS1Padding"
    };
    String alternativeCipher = null;
    for (final String cipher : preferredAlternativeCiphers)
    {
      try
      {
        Cipher.getInstance(cipher);
        alternativeCipher = cipher;
        break;
        return cipher;
      }
      catch (final Throwable t)
      catch (final Throwable ignored)
      {
        // ignored
      }
    }
    return alternativeCipher;
    return null;
  }
}
opendj-server-legacy/src/main/java/org/opends/server/tools/ConfigureWindowsService.java
@@ -16,9 +16,9 @@
 */
package org.opends.server.tools;
import static com.forgerock.opendj.cli.CommonArguments.*;
import static com.forgerock.opendj.cli.Utils.*;
import static com.forgerock.opendj.util.OperatingSystem.*;
import static com.forgerock.opendj.cli.CommonArguments.*;
import static org.opends.messages.ToolMessages.*;
@@ -83,9 +83,9 @@
  /** The service was already enabled. */
  public static final int SERVICE_ALREADY_ENABLED = 1;
  /** The service name was already in use. */
  public static final int SERVICE_NAME_ALREADY_IN_USE = 2;
  private static final int SERVICE_NAME_ALREADY_IN_USE = 2;
  /** An error occurred enabling the service. */
  public static final int SERVICE_ENABLE_ERROR = 3;
  private static final int SERVICE_ENABLE_ERROR = 3;
  /** Return codes for the method disableService. */
  /** The service was successfully disabled. */
@@ -93,7 +93,7 @@
  /** The service was already disabled. */
  public static final int SERVICE_ALREADY_DISABLED = 1;
  /** The service is marked for deletion. */
  public static final int SERVICE_MARKED_FOR_DELETION = 2;
  private static final int SERVICE_MARKED_FOR_DELETION = 2;
  /** An error occurred disabling the service. */
  public static final int SERVICE_DISABLE_ERROR = 3;
@@ -101,19 +101,19 @@
  /** The service is enabled. */
  public static final int SERVICE_STATE_ENABLED = 0;
  /** The service is disabled. */
  public static final int SERVICE_STATE_DISABLED = 1;
  private static final int SERVICE_STATE_DISABLED = 1;
  /** An error occurred checking the service state. */
  public static final int SERVICE_STATE_ERROR = 2;
  private static final int SERVICE_STATE_ERROR = 2;
  /** Return codes for the method cleanupService. */
  /** The service cleanup worked. */
  public static final int SERVICE_CLEANUP_SUCCESS = 0;
  private static final int SERVICE_CLEANUP_SUCCESS = 0;
  /** The service could not be found. */
  public static final int SERVICE_NOT_FOUND = 1;
  private static final int SERVICE_NOT_FOUND = 1;
  /** An error occurred cleaning up the service. */
  public static final int SERVICE_CLEANUP_ERROR = 2;
  private static final int SERVICE_CLEANUP_ERROR = 2;
  /** The service is marked for deletion. */
  public static final int SERVICE_CLEANUP_MARKED_FOR_DELETION = 3;
  private static final int SERVICE_CLEANUP_MARKED_FOR_DELETION = 3;
  /**
   * Configures the Windows service for this instance on this machine. This tool
@@ -144,7 +144,7 @@
   * @return the integer code describing if the operation could be completed or
   *         not.
   */
  public static int configureWindowsService(String[] args, OutputStream outStream, OutputStream errStream)
  private static int configureWindowsService(String[] args, OutputStream outStream, OutputStream errStream)
  {
    PrintStream out = NullOutputStream.wrapOrNullStream(outStream);
    PrintStream err = NullOutputStream.wrapOrNullStream(errStream);
@@ -342,7 +342,7 @@
   *         <CODE>SERVICE_ALREADY_ENABLED</CODE> depending on whether the
   *         service could be enabled or not.
   */
  public static int enableService(PrintStream out, PrintStream err, String serviceName, String serviceDescription)
  private static int enableService(PrintStream out, PrintStream err, String serviceName, String serviceDescription)
  {
    String serverRoot = getServerRoot();
    String[] cmd;
@@ -511,8 +511,7 @@
   *         <CODE>SERVICE_CLEANUP_ERROR</CODE> depending on whether the service
   *         could be found or not.
   */
  public static int cleanupService(String serviceName, PrintStream out,
      PrintStream err)
  private static int cleanupService(String serviceName, PrintStream out, PrintStream err)
  {
    String[] cmd;
    if (hasUAC())
@@ -593,7 +592,7 @@
   *         <CODE>SERVICE_STATE_ERROR</CODE> depending on the state of the
   *         service.
   */
  public static int serviceState(PrintStream out, PrintStream err)
  private static int serviceState(PrintStream out, PrintStream err)
  {
    String serviceName = null;
opendj-server-legacy/src/main/java/org/opends/server/tools/ExportLDIF.java
@@ -78,7 +78,6 @@
  public static void main(String[] args)
  {
    int retCode = mainExportLDIF(args, true, System.out, System.err);
    if(retCode != 0)
    {
      System.exit(filterExitCode(retCode));
@@ -88,18 +87,6 @@
  /**
   * Processes the command-line arguments and invokes the export process.
   *
   * @param  args  The command-line arguments provided to this program.
   *
   * @return The error code.
   */
  public static int mainExportLDIF(String[] args)
  {
    return mainExportLDIF(args, true, System.out, System.err);
  }
  /**
   * Processes the command-line arguments and invokes the export process.
   *
   * @param  args              The command-line arguments provided to this
   *                           program.
   * @param  initializeServer  Indicates whether to initialize the server.
@@ -243,13 +230,13 @@
              BooleanArgument.builder("encryptLDIF")
                      .shortIdentifier('y')
                      .description(INFO_LDIFEXPORT_DESCRIPTION_ENCRYPT_LDIF.get())
                      .hidden() // See issue #27
                      .hidden() // See issue OPENDJ-448
                      .buildAndAddToParser(argParser);
      signHash =
              BooleanArgument.builder("signHash")
                      .shortIdentifier('s')
                      .description(INFO_LDIFEXPORT_DESCRIPTION_SIGN_HASH.get())
                      .hidden() // See issue #28
                      .hidden() // See issue OPENDJ-448
                      .buildAndAddToParser(argParser);
      displayUsage = showUsageArgument();
@@ -306,7 +293,6 @@
    return process(argParser, initializeServer, out, err);
  }
  /** {@inheritDoc} */
  @Override
  public void addTaskAttributes(List<RawAttribute> attributes)
  {
@@ -660,7 +646,6 @@
    return results;
  }
  /** {@inheritDoc} */
  @Override
  public String getTaskId() {
    // NYI.
opendj-server-legacy/src/main/java/org/opends/server/tools/ImportLDIF.java
@@ -73,14 +73,10 @@
 * server process (e.g., via the tasks interface).
 */
public class ImportLDIF extends TaskTool {
  private static final LocalizedLogger logger = LocalizedLogger.getLoggerForThisClass();
  /**
   * The buffer size that should be used when reading data from LDIF.
   */
  public static final int LDIF_BUFFER_SIZE = 1048576;
  /** The buffer size that should be used when reading data from LDIF. */
  private static final int LDIF_BUFFER_SIZE = 1048576;
  /**
   * The main method for ImportLDIF tool.
@@ -90,7 +86,6 @@
  public static void main(String[] args)
  {
    int retCode = mainImportLDIF(args, true, System.out, System.err);
    if(retCode != 0)
    {
      System.exit(filterExitCode(retCode));
@@ -100,17 +95,6 @@
  /**
   * Processes the command-line arguments and invokes the import process.
   *
   * @param  args  The command-line arguments provided to this program.
   * @return The error code.
   */
  public static int mainImportLDIF(String[] args)
  {
    return mainImportLDIF(args, true, System.out, System.err);
  }
  /**
   * Processes the command-line arguments and invokes the import process.
   *
   * @param  args              The command-line arguments provided to this
   *                           program.
   * @param  initializeServer  Indicates whether to initialize the server.
@@ -157,14 +141,12 @@
  private int process(String[] args, boolean initializeServer,
                      OutputStream outStream, OutputStream errStream) {
    PrintStream out = NullOutputStream.wrapOrNullStream(outStream);
    PrintStream err = NullOutputStream.wrapOrNullStream(errStream);
    JDKLogging.disableLogging();
    // FIXME -- Need to add a mechanism for verifying the file signature.
    // Create the command-line argument parser for use with this program.
    LDAPConnectionArgumentParser argParser =
            createArgParser("org.opends.server.tools.ImportLDIF", INFO_LDIFIMPORT_TOOL_DESCRIPTION.get());
@@ -203,13 +185,11 @@
      return 1;
    }
    if (argParser.usageOrVersionDisplayed())
    {
      return 0;
    }
    // Make sure that either the "ldifFile" argument or the "templateFile"
    // argument was provided, but not both.
    if (ldifFiles.isPresent())
@@ -617,7 +597,6 @@
      }
    }
    // Get information about the backends defined in the server.  Iterate
    // through them, finding the one backend into which the LDIF should be
    // imported and finding backends with subordinate base DNs that should be
@@ -747,7 +726,6 @@
      }
    }
    // See if the data should be read from LDIF files or generated via MakeLDIF.
    LDIFImportConfig importConfig;
    if (ldifFiles.isPresent())
@@ -791,7 +769,6 @@
      importConfig = new LDIFImportConfig(tf);
    }
    // Create the LDIF import configuration to use when reading the LDIF.
    importConfig.setCompressed(isCompressed.isPresent());
    importConfig.setClearBackend(clearBackend.isPresent());
@@ -876,7 +853,6 @@
    DN[] baseDNs = new DN[defaultIncludeBranches.size()];
    defaultIncludeBranches.toArray(baseDNs);
    // Acquire an exclusive lock for the backend.
    try
    {
@@ -894,7 +870,6 @@
      return 1;
    }
    // Launch the import.
    int retCode = 0;
    try
@@ -933,7 +908,6 @@
      retCode = 1;
    }
    // Release the exclusive lock on the backend.
    try
    {
@@ -951,7 +925,6 @@
      retCode = 1;
    }
    // Clean up after the import by closing the import config.
    importConfig.close();
    return retCode;
opendj-server-legacy/src/main/java/org/opends/server/tools/InstallDS.java
@@ -29,7 +29,6 @@
import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintStream;
@@ -41,13 +40,13 @@
import java.util.LinkedList;
import java.util.List;
import javax.naming.ldap.LdapName;
import org.forgerock.i18n.LocalizableMessage;
import org.forgerock.i18n.LocalizableMessageDescriptor.Arg0;
import org.forgerock.i18n.LocalizableMessageDescriptor.Arg1;
import org.forgerock.i18n.LocalizedIllegalArgumentException;
import org.forgerock.i18n.slf4j.LocalizedLogger;
import org.forgerock.opendj.config.ManagedObjectDefinition;
import org.forgerock.opendj.ldap.DN;
import org.forgerock.opendj.server.config.client.BackendCfgClient;
import org.forgerock.opendj.server.config.server.BackendCfg;
import org.opends.messages.QuickSetupMessages;
@@ -205,7 +204,6 @@
  private static final LocalizedLogger logger = LocalizedLogger.getLoggerForThisClass();
  /**
   * Constructor for the InstallDS object.
   *
@@ -213,12 +211,10 @@
   *          the print stream to use for standard output.
   * @param err
   *          the print stream to use for standard error.
   * @param in
   *          the input stream to use for standard input.
   * @param tempLogFile
   *          the temporary log file where messages will be logged.
   */
  public InstallDS(PrintStream out, PrintStream err, InputStream in, TempLogFile tempLogFile)
  private InstallDS(PrintStream out, PrintStream err, TempLogFile tempLogFile)
  {
    super(out, err);
    this.tempLogFile = tempLogFile;
@@ -236,7 +232,7 @@
   */
  public static int mainCLI(String[] args, final TempLogFile tempLogFile)
  {
    return mainCLI(args, System.out, System.err, System.in, tempLogFile);
    return mainCLI(args, System.out, System.err, tempLogFile);
  }
  /**
@@ -251,21 +247,19 @@
   * @param errStream
   *          The output stream to use for standard error, or <CODE>null</CODE>
   *          if standard error is not needed.
   * @param inStream
   *          The input stream to use for standard input.
   * @param tempLogFile
   *          the temporary log file where messages will be logged.
   * @return The error code.
   */
  public static int mainCLI(
      String[] args, OutputStream outStream, OutputStream errStream, InputStream inStream, TempLogFile tempLogFile)
  private static int mainCLI(
      String[] args, OutputStream outStream, OutputStream errStream, TempLogFile tempLogFile)
  {
    final PrintStream out = NullOutputStream.wrapOrNullStream(outStream);
    System.setProperty(Constants.CLI_JAVA_PROPERTY, "true");
    final PrintStream err = NullOutputStream.wrapOrNullStream(errStream);
    final InstallDS install = new InstallDS(out, err, inStream, tempLogFile);
    final InstallDS install = new InstallDS(out, err, tempLogFile);
    return install.execute(args);
  }
@@ -278,7 +272,7 @@
   *          the command-line arguments provided to this program.
   * @return the return code (SUCCESSFUL, USER_DATA_ERROR or BUG).
   */
  public int execute(String[] args)
  private int execute(String[] args)
  {
    argParser = new InstallDSArgumentParser(InstallDS.class.getName());
    try
@@ -343,7 +337,6 @@
      return printAndReturnErrorCode(e.getMessageObject()).getReturnCode();
    }
    System.setProperty(Constants.CLI_JAVA_PROPERTY, "true");
    final Installer installer = new Installer();
    installer.setTempLogFile(tempLogFile);
@@ -511,7 +504,6 @@
    println();
  }
  private InstallReturnCode printAndReturnErrorCode(LocalizableMessage message)
  {
    println(message);
@@ -562,40 +554,33 @@
    }
  }
  /** {@inheritDoc} */
  @Override
  public boolean isQuiet()
  {
    return argParser.quietArg.isPresent();
  }
  /** {@inheritDoc} */
  @Override
  public boolean isInteractive()
  {
    return !argParser.noPromptArg.isPresent();
  }
  /** {@inheritDoc} */
  @Override
  public boolean isMenuDrivenMode() {
    return true;
  }
  /** {@inheritDoc} */
  @Override
  public boolean isScriptFriendly() {
    return false;
  }
  /** {@inheritDoc} */
  @Override
  public boolean isAdvancedMode() {
    return false;
  }
  /** {@inheritDoc} */
  @Override
  public boolean isVerbose() {
    return argParser.verboseArg.isPresent();
@@ -685,9 +670,9 @@
  {
    try
    {
      new LdapName(baseDN);
      DN.valueOf(baseDN);
    }
    catch (final Exception e)
    catch (final LocalizedIllegalArgumentException | NullPointerException e)
    {
      errorMessages.add(ERR_INSTALLDS_CANNOT_PARSE_DN.get(baseDN, e.getMessage()));
    }
@@ -1010,7 +995,7 @@
      {
        try
        {
          new LdapName(dn);
          DN.valueOf(dn);
          if (dn.trim().length() == 0)
          {
            toRemove.add(dn);
@@ -1199,7 +1184,6 @@
    final List<String> baseDNs = promptIfRequiredForDNs(
            argParser.baseDNArg, lastResetBaseDN, INFO_INSTALLDS_PROMPT_BASEDN.get(), true);
    return promptIfRequiredForDataOptions(baseDNs);
  }
  private ManagedObjectDefinition<? extends BackendCfgClient, ? extends BackendCfg> getOrPromptForBackendType()
@@ -1612,7 +1596,6 @@
          INFO_INSTALLDS_CERT_OPTION_PKCS11.get()
      };
      final MenuBuilder<Integer> builder = new MenuBuilder<>(this);
      builder.setPrompt(INFO_INSTALLDS_HEADER_CERT_TYPE.get());
@@ -2555,5 +2538,4 @@
  {
    return argParser.getConnectTimeout();
  }
}
opendj-server-legacy/src/main/java/org/opends/server/tools/InstallDSArgumentParser.java
@@ -16,16 +16,17 @@
 */
package org.opends.server.tools;
import static com.forgerock.opendj.cli.ArgumentConstants.*;
import static com.forgerock.opendj.cli.CliMessages.INFO_JMXPORT_PLACEHOLDER;
import static com.forgerock.opendj.cli.CliMessages.INFO_KEYSTORE_PWD_FILE_PLACEHOLDER;
import static com.forgerock.opendj.cli.CliMessages.INFO_NUM_ENTRIES_PLACEHOLDER;
import static com.forgerock.opendj.cli.CliMessages.INFO_PORT_PLACEHOLDER;
import static com.forgerock.opendj.cli.CliMessages.INFO_ROOT_USER_PWD_FILE_PLACEHOLDER;
import static com.forgerock.opendj.cli.Utils.addErrorMessageIfArgumentsConflict;
import static org.opends.messages.ToolMessages.*;
import static com.forgerock.opendj.cli.ArgumentConstants.*;
import static com.forgerock.opendj.util.OperatingSystem.*;
import static com.forgerock.opendj.cli.CommonArguments.*;
import static com.forgerock.opendj.cli.Utils.addErrorMessageIfArgumentsConflict;
import static com.forgerock.opendj.util.OperatingSystem.*;
import static org.opends.messages.ToolMessages.*;
import java.util.Collection;
import java.util.HashSet;
@@ -63,14 +64,14 @@
{
  private static final LocalizedLogger logger = LocalizedLogger.getLoggerForThisClass();
  BooleanArgument   cliArg;
  private BooleanArgument cliArg;
  BooleanArgument   addBaseEntryArg;
  BooleanArgument   showUsageArg;
  private BooleanArgument showUsageArg;
  BooleanArgument   quietArg;
  BooleanArgument   noPromptArg;
  BooleanArgument   verboseArg;
  StringArgument    propertiesFileArgument;
  BooleanArgument   noPropertiesFileArgument;
  private StringArgument propertiesFileArgument;
  private BooleanArgument noPropertiesFileArgument;
  BooleanArgument   skipPortCheckArg;
  BooleanArgument   enableWindowsServiceArg;
  BooleanArgument   doNotStartArg;
@@ -78,8 +79,8 @@
  BooleanArgument   generateSelfSignedCertificateArg;
  StringArgument    hostNameArg;
  BooleanArgument   usePkcs11Arg;
  FileBasedArgument directoryManagerPwdFileArg;
  FileBasedArgument keyStorePasswordFileArg;
  private FileBasedArgument directoryManagerPwdFileArg;
  private FileBasedArgument keyStorePasswordFileArg;
  IntegerArgument   ldapPortArg;
  IntegerArgument   adminConnectorPortArg;
  IntegerArgument   ldapsPortArg;
@@ -90,14 +91,14 @@
  StringArgument    rejectedImportFileArg;
  StringArgument    skippedImportFileArg;
  StringArgument    directoryManagerDNArg;
  StringArgument    directoryManagerPwdStringArg;
  private StringArgument directoryManagerPwdStringArg;
  StringArgument    useJavaKeyStoreArg;
  StringArgument    useJCEKSArg;
  StringArgument    usePkcs12Arg;
  StringArgument    keyStorePasswordArg;
  private StringArgument keyStorePasswordArg;
  StringArgument    certNicknameArg;
  StringArgument    progNameArg;
  IntegerArgument   connectTimeoutArg;
  private StringArgument progNameArg;
  private IntegerArgument connectTimeoutArg;
  BooleanArgument   acceptLicense;
  StringArgument    backendTypeArg;
@@ -418,7 +419,6 @@
    return cliArg.isPresent();
  }
  /** {@inheritDoc} */
  @Override
  public void parseArguments(String[] args) throws ArgumentException
  {
@@ -539,14 +539,10 @@
  private void checkPortAlreadyUsed(Set<Integer> ports, int port, Collection<LocalizableMessage> errorMessages,
      Arg1<Object> errorMsg)
  {
    if (ports.contains(port))
    if (!ports.add(port))
    {
      errorMessages.add(errorMsg.get(port));
    }
    else
    {
      ports.add(port);
    }
  }
  /**
opendj-server-legacy/src/main/java/org/opends/server/tools/JavaPropertiesTool.java
@@ -12,16 +12,16 @@
 * information: "Portions Copyright [year] [name of copyright owner]".
 *
 * Copyright 2008-2009 Sun Microsystems, Inc.
 * Portions Copyright 2011-2015 ForgeRock AS.
 * Portions Copyright 2011-2016 ForgeRock AS.
 */
package org.opends.server.tools;
import static org.opends.messages.ToolMessages.*;
import static org.opends.server.util.ServerConstants.*;
import static com.forgerock.opendj.cli.Utils.*;
import static com.forgerock.opendj.util.OperatingSystem.*;
import static org.opends.messages.ToolMessages.*;
import static org.opends.server.util.ServerConstants.*;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
@@ -43,52 +43,34 @@
import com.forgerock.opendj.cli.ArgumentException;
import com.forgerock.opendj.cli.ConsoleApplication;
/**
 * This class is used to update the scripts that are used to launch the command
 * lines.  We read the contents of a given properties file and we update the
 * scripts setting the arguments and JVM to be used by the different scripts.
 *
 */
public class JavaPropertiesTool extends ConsoleApplication
{
  /** The argument parser. */
  private JavaPropertiesToolArgumentParser argParser;
  /**
   * The enumeration containing the different return codes that the command-line
   * can have.
   *
   */
  /** The enumeration containing the different return codes that the command-line can have. */
  public enum ErrorReturnCode
  {
    /**
     * Successful setup.
     */
    /** Successful setup. */
    SUCCESSFUL(0),
    /**
     * We did no have an error but the setup was not executed (displayed version
     * or usage).
     */
    /** We did no have an error but the setup was not executed (displayed version or usage). */
    SUCCESSFUL_NOP(0),
    /**
     * Unexpected error (potential bug).
     */
    /** Unexpected error (potential bug). */
    ERROR_UNEXPECTED(1),
    /**
     * Cannot parse arguments or data provided by user is not valid.
     */
    /** Cannot parse arguments or data provided by user is not valid. */
    ERROR_USER_DATA(2),
    /**
     * Error writing to destination file.
     */
    /** Error writing to destination file. */
    ERROR_WRITING_FILE(3),
    /**
     * Conflicting command line arguments.
     */
    /** Conflicting command line arguments. */
    CONFLICTING_ARGS(18);
    private int returnCode;
    private final int returnCode;
    private ErrorReturnCode(int returnCode)
    {
      this.returnCode = returnCode;
@@ -119,7 +101,7 @@
   * @param err the print stream to use for standard error.
   * @param in the input stream to use for standard input.
   */
  public JavaPropertiesTool(PrintStream out, PrintStream err, InputStream in)
  private JavaPropertiesTool(PrintStream out, PrintStream err, InputStream in)
  {
    super(out, err);
  }
@@ -341,7 +323,6 @@
    }
    println();
    return ErrorReturnCode.SUCCESSFUL.getReturnCode();
  }
@@ -422,40 +403,33 @@
    }
  }
  /** {@inheritDoc} */
  @Override
  public boolean isQuiet()
  {
    return argParser.quietArg.isPresent();
  }
  /** {@inheritDoc} */
  @Override
  public boolean isInteractive()
  {
    return false;
  }
  /** {@inheritDoc} */
  @Override
  public boolean isMenuDrivenMode() {
    return true;
  }
  /** {@inheritDoc} */
  @Override
  public boolean isScriptFriendly() {
    return false;
  }
  /** {@inheritDoc} */
  @Override
  public boolean isAdvancedMode() {
    return false;
  }
  /** {@inheritDoc} */
  @Override
  public boolean isVerbose() {
    return true;
opendj-server-legacy/src/main/java/org/opends/server/tools/JavaPropertiesToolArgumentParser.java
@@ -16,9 +16,9 @@
 */
package org.opends.server.tools;
import static com.forgerock.opendj.cli.CommonArguments.*;
import static com.forgerock.opendj.cli.Utils.*;
import static com.forgerock.opendj.util.OperatingSystem.*;
import static com.forgerock.opendj.cli.CommonArguments.*;
import static org.opends.messages.ToolMessages.*;
@@ -42,7 +42,7 @@
public class JavaPropertiesToolArgumentParser extends ArgumentParser
{
  /** Usage argument. */
  BooleanArgument   showUsageArg;
  private BooleanArgument showUsageArg;
  /** Quiet argument. */
  BooleanArgument   quietArg;
  /** The file containing the properties. */
opendj-server-legacy/src/main/java/org/opends/server/tools/LDAPPasswordModify.java
@@ -78,15 +78,10 @@
 */
public class LDAPPasswordModify
{
  /**
   * The fully-qualified name of this class.
   */
  /** The fully-qualified name of this class. */
  private static final String CLASS_NAME =
       "org.opends.server.tools.LDAPPasswordModify";
  /**
   * Parses the command-line arguments, establishes a connection to the
   * Directory Server, sends the password modify request, and reads the
@@ -103,25 +98,6 @@
    }
  }
  /**
   * Parses the command-line arguments, establishes a connection to the
   * Directory Server, sends the password modify request, and reads the
   * response.
   *
   * @param  args  The command-line arguments provided to this program.
   *
   * @return  An integer value of zero if everything completed successfully, or
   *          a nonzero value if an error occurred.
   */
  public static int mainPasswordModify(String[] args)
  {
    return mainPasswordModify(args, true, System.out, System.err);
  }
  /**
   * Parses the command-line arguments, establishes a connection to the
   * Directory Server, sends the password modify request, and reads the
@@ -143,7 +119,6 @@
    PrintStream out = NullOutputStream.wrapOrNullStream(outStream);
    PrintStream err = NullOutputStream.wrapOrNullStream(errStream);
    // Create the arguments that will be used by this program.
    BooleanArgument   provideDNForAuthzID;
    BooleanArgument   showUsage;
@@ -172,7 +147,6 @@
    StringArgument    propertiesFileArgument;
    BooleanArgument   noPropertiesFileArgument;
    // Initialize the argument parser.
    LocalizableMessage toolDescription = INFO_LDAPPWMOD_TOOL_DESCRIPTION.get();
    ArgumentParser argParser = new ArgumentParser(CLASS_NAME, toolDescription,
@@ -342,7 +316,6 @@
      return CLIENT_SIDE_PARAM_ERROR;
    }
    // Parse the command-line arguments provided to this program.
    try
    {
@@ -354,7 +327,6 @@
      return CLIENT_SIDE_PARAM_ERROR;
    }
    // If the usage or version argument was provided,
    // then we don't need to do anything else.
    if (argParser.usageOrVersionDisplayed())
@@ -362,7 +334,6 @@
      return 0;
    }
    // Make sure that the user didn't specify any conflicting arguments.
    try
    {
@@ -412,7 +383,6 @@
      }
    }
    // Get the host and port.
    String host = ldapHost.getValue();
    int    port;
@@ -427,7 +397,6 @@
      return CLIENT_SIDE_PARAM_ERROR;
    }
    // If a control string was provided, then decode the requested controls.
    ArrayList<Control> controls = new ArrayList<>();
    if(controlStr.isPresent())
@@ -444,14 +413,12 @@
      }
    }
    // Perform a basic Directory Server bootstrap if appropriate.
    if (initializeServer)
    {
      EmbeddedUtils.initializeForClientUse();
    }
    // Establish a connection to the Directory Server.
    AtomicInteger nextMessageID = new AtomicInteger(1);
    LDAPConnectionOptions connectionOptions = new LDAPConnectionOptions();
@@ -512,7 +479,7 @@
    {
      dn = bindDN.getValue();
      pw = bindPW.getValue();
      if(pw != null && pw.equals("-"))
      if ("-".equals(pw))
      {
        // read the password from the stdin.
        try
@@ -567,7 +534,6 @@
    LDAPReader reader = connection.getLDAPReader();
    LDAPWriter writer = connection.getLDAPWriter();
    // Construct the password modify request.
    ByteStringBuilder builder = new ByteStringBuilder();
    ASN1Writer asn1Writer = ASN1.getWriter(builder);
@@ -625,7 +591,6 @@
         new LDAPMessage(nextMessageID.getAndIncrement(), extendedRequest,
                         controls);
    // Send the request to the server and read the response.
    try
    {
@@ -639,7 +604,6 @@
      return 1;
    }
    // Read the response from the server.
    LDAPMessage responseMessage = null;
    try
@@ -654,7 +618,6 @@
      return 1;
    }
    // Make sure that the response was acceptable.
    ExtendedResponseProtocolOp extendedResponse =
         responseMessage.getExtendedResponseProtocolOp();
@@ -689,7 +652,6 @@
      }
    }
    // See if the response included any controls that we recognize, and if so
    // then handle them.
    List<Control> responseControls = responseMessage.getControls();
@@ -728,7 +690,6 @@
      }
    }
    // See if the response included a generated password.
    ByteString responseValue = extendedResponse.getValue();
    if (responseValue != null)
@@ -759,7 +720,6 @@
      }
    }
    // Unbind from the server and close the connection.
    unbind(nextMessageID, writer);
    close(reader, writer);
@@ -777,4 +737,3 @@
    catch (Exception e) {}
  }
}
opendj-server-legacy/src/main/java/org/opends/server/tools/ManageTasks.java
@@ -43,7 +43,6 @@
import com.forgerock.opendj.cli.TextTablePrinter;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.PrintStream;
import java.io.StringWriter;
@@ -55,8 +54,8 @@
import static org.opends.messages.ToolMessages.*;
import static com.forgerock.opendj.cli.ArgumentConstants.*;
import static com.forgerock.opendj.cli.Utils.*;
import static com.forgerock.opendj.cli.CommonArguments.*;
import static com.forgerock.opendj.cli.Utils.*;
/** Tool for getting information and managing tasks in the Directory Server. */
public class ManageTasks extends ConsoleApplication {
@@ -69,29 +68,16 @@
   * @param args The command-line arguments provided to this program.
   */
  public static void main(String[] args) {
    int retCode = mainTaskInfo(args, System.in, System.out, System.err);
    int retCode = mainTaskInfo(args, System.out, System.err);
    if (retCode != 0) {
      System.exit(filterExitCode(retCode));
    }
  }
  /**
   * Processes the command-line arguments and invokes the process for
   * displaying task information.
   *
   * @param args The command-line arguments provided to this program.
   * @return int return code
   */
  public static int mainTaskInfo(String[] args) {
    return mainTaskInfo(args, System.in, System.out, System.err);
  }
  /**
   * Processes the command-line arguments and invokes the export process.
   *
   * @param args             The command-line arguments provided to this
   * @param in               Input stream from which to solicit user input.
   * @param out              The output stream to use for standard output, or
   *                         {@code null} if standard output is not needed.
   * @param err              The output stream to use for standard error, or
@@ -100,11 +86,10 @@
   * @return int return code
   */
  public static int mainTaskInfo(String[] args,
                                 InputStream in,
                                 OutputStream out,
                                 OutputStream err,
                                 boolean initializeServer) {
    ManageTasks tool = new ManageTasks(in, out, err);
    ManageTasks tool = new ManageTasks(out, err);
    return tool.process(args, initializeServer);
  }
@@ -112,18 +97,16 @@
   * Processes the command-line arguments and invokes the export process.
   *
   * @param args             The command-line arguments provided to this
   * @param in               Input stream from which to solicit user input.
   * @param out              The output stream to use for standard output, or
   *                         {@code null} if standard output is not needed.
   * @param err              The output stream to use for standard error, or
   *                         {@code null} if standard error is not needed.
   * @return int return code
   */
  public static int mainTaskInfo(String[] args,
                                 InputStream in,
  private static int mainTaskInfo(String[] args,
                                 OutputStream out,
                                 OutputStream err) {
    return mainTaskInfo(args, in, out, err, true);
    return mainTaskInfo(args, out, err, true);
  }
  private static final int INDENT = 2;
@@ -142,14 +125,12 @@
  /**
   * Constructs a parameterized instance.
   *
   * @param in               Input stream from which to solicit user input.
   * @param out              The output stream to use for standard output, or
   *                         {@code null} if standard output is not needed.
   * @param err              The output stream to use for standard error, or
   *                         {@code null} if standard error is not needed.
   */
  public ManageTasks(InputStream in, OutputStream out, OutputStream err)
  private ManageTasks(OutputStream out, OutputStream err)
  {
    super(new PrintStream(out), new PrintStream(err));
  }
@@ -159,22 +140,10 @@
   *
   * @param args       The command-line arguments provided to this
   *                   program.
   * @return The error code.
   */
  public int process(String[] args)
  {
    return process(args, true);
  }
  /**
   * Processes the command-line arguments and invokes the export process.
   *
   * @param args       The command-line arguments provided to this
   *                   program.
   * @param initializeServer  Indicates whether to initialize the server.
   * @return The error code.
   */
  public int process(String[] args, boolean initializeServer)
  private int process(String[] args, boolean initializeServer)
  {
    if (initializeServer)
    {
opendj-server-legacy/src/main/java/org/opends/server/tools/StopWindowsService.java
@@ -12,14 +12,15 @@
 * information: "Portions Copyright [year] [name of copyright owner]".
 *
 * Copyright 2008-2009 Sun Microsystems, Inc.
 * Portions Copyright 2012-2014 ForgeRock AS.
 * Portions Copyright 2012-2016 ForgeRock AS.
 */
package org.opends.server.tools;
import static org.opends.messages.ToolMessages.*;
import static com.forgerock.opendj.cli.Utils.*;
import static com.forgerock.opendj.util.OperatingSystem.*;
import static org.opends.messages.ToolMessages.*;
import java.io.OutputStream;
import java.io.PrintStream;
@@ -34,11 +35,11 @@
public class StopWindowsService
{
  /** The service was successfully stopped. */
  public static final int SERVICE_STOP_SUCCESSFUL = 0;
  private static final int SERVICE_STOP_SUCCESSFUL = 0;
  /** The service could not be found. */
  public static final int SERVICE_NOT_FOUND = 1;
  private static final int SERVICE_NOT_FOUND = 1;
  /** The service could not be stopped. */
  public static final int SERVICE_STOP_ERROR = 3;
  private static final int SERVICE_STOP_ERROR = 3;
  /**
   * Invokes the net stop on the service corresponding to this server.
@@ -62,7 +63,7 @@
   * @param errStream
   *          The stream to write error messages.
   */
  public static int stopWindowsService(OutputStream outStream, OutputStream errStream)
  private static int stopWindowsService(OutputStream outStream, OutputStream errStream)
  {
    NullOutputStream.wrapOrNullStream(outStream);
    PrintStream err = NullOutputStream.wrapOrNullStream(errStream);
@@ -116,4 +117,3 @@
    }
  }
}
opendj-server-legacy/src/main/java/org/opends/server/tools/dsreplication/MonoServerReplicationUserData.java
@@ -22,8 +22,6 @@
abstract class MonoServerReplicationUserData extends ReplicationUserData
{
  private HostPort hostPort = new HostPort(null, 0);
  private boolean useStartTLS;
  private boolean useSSL;
  /**
   * Returns the host name and port of the server.
@@ -42,44 +40,4 @@
  {
    this.hostPort = hostPort;
  }
  /**
   * Returns <CODE>true</CODE> if we must use SSL to connect to the server and
   * <CODE>false</CODE> otherwise.
   * @return <CODE>true</CODE> if we must use SSL to connect to the server and
   * <CODE>false</CODE> otherwise.
   */
  boolean useSSL()
  {
    return useSSL;
  }
  /**
   * Sets whether we must use SSL to connect to the server or not.
   * @param useSSL whether we must use SSL to connect to the server or not.
   */
  void setUseSSL(boolean useSSL)
  {
    this.useSSL = useSSL;
  }
  /**
   * Returns <CODE>true</CODE> if we must use StartTLS to connect to the server
   * and <CODE>false</CODE> otherwise.
   * @return <CODE>true</CODE> if we must use StartTLS to connect to the server
   * and <CODE>false</CODE> otherwise.
   */
  boolean useStartTLS()
  {
    return useStartTLS;
  }
  /**
   * Sets whether we must use StartTLS to connect to the server or not.
   * @param useStartTLS whether we must use SSL to connect to the server or not.
   */
  void setUseStartTLS(boolean useStartTLS)
  {
    this.useStartTLS = useStartTLS;
  }
}
opendj-server-legacy/src/main/java/org/opends/server/tools/dsreplication/ReplicationCliArgumentParser.java
@@ -19,8 +19,8 @@
import static com.forgerock.opendj.cli.ArgumentConstants.*;
import static com.forgerock.opendj.cli.CliMessages.INFO_BINDPWD_FILE_PLACEHOLDER;
import static com.forgerock.opendj.cli.CliMessages.INFO_PORT_PLACEHOLDER;
import static com.forgerock.opendj.cli.Utils.*;
import static com.forgerock.opendj.cli.CommonArguments.*;
import static com.forgerock.opendj.cli.Utils.*;
import static org.opends.messages.AdminToolMessages.*;
import static org.opends.messages.ToolMessages.*;
@@ -82,7 +82,6 @@
    /** The 'secureReplication' argument for the first server. */
    BooleanArgument secureReplicationArg;
    /**
     * Get the password which has to be used for the command to connect to this server without
     * prompting the user in the enable replication subcommand. If no password was specified return
@@ -149,23 +148,17 @@
  private IntegerArgument portDestinationArg;
  /** The 'suffixes' global argument. */
  StringArgument baseDNsArg;
  /**The 'quiet' argument.   */
  /** The 'quiet' argument. */
  private BooleanArgument quietArg;
  /**The 'scriptFriendly' argument.   */
  /** The 'scriptFriendly' argument. */
  BooleanArgument scriptFriendlyArg;
  /**Properties file argument.   */
  /** Properties file argument. */
  StringArgument propertiesFileArgument;
  /**No-properties file argument.   */
  /** No-properties file argument. */
  BooleanArgument noPropertiesFileArgument;
  /**
   * The argument that the user must set to display the equivalent
   * non-interactive mode argument.
   */
  /** The argument that the user must set to display the equivalent non-interactive mode argument. */
  BooleanArgument displayEquivalentArgument;
  /**
   * The argument that allows the user to dump the equivalent non-interactive
   * command to a file.
   */
  /** The argument that allows the user to dump the equivalent non-interactive command to a file. */
  StringArgument equivalentCommandFileArgument;
  /** The argument that the user must set to have advanced options in interactive mode. */
  BooleanArgument advancedArg;
@@ -181,7 +174,7 @@
  /** The 'maximumDuration' argument for the purge of historical. */
  IntegerArgument maximumDurationArg;
  /** the 'change-number' argument for task reset-changenumber. */
  /** The 'change-number' argument for task reset-changenumber. */
  IntegerArgument resetChangeNumber;
  /** The text of the enable replication subcommand. */
@@ -272,7 +265,6 @@
    validateSubcommandOptions(buf);
  }
  /** {@inheritDoc} */
  @Override
  public int validateGlobalOptions(LocalizableMessageBuilder buf)
  {
@@ -331,7 +323,7 @@
        {
          errors.add(ERR_REPLICATION_NOT_A_VALID_BASEDN.get(dn));
        }
        if (dn.equalsIgnoreCase(Constants.REPLICATION_CHANGES_DN))
        if (Constants.REPLICATION_CHANGES_DN.equalsIgnoreCase(dn))
        {
          errors.add(ERR_REPLICATION_NOT_A_USER_SUFFIX.get(Constants.REPLICATION_CHANGES_DN));
        }
@@ -466,7 +458,6 @@
          ArgumentGroup argGroup)
  throws ArgumentException
  {
    for (Argument arg : args)
    {
      if (arg == advancedArg)
@@ -485,10 +476,7 @@
    setFilePropertiesArgument(propertiesFileArg);
  }
  /**
   * Creates the enable replication subcommand and all the specific options
   * for the subcommand.
   */
  /** Creates the enable replication subcommand and all the specific options for the subcommand. */
  private void createEnableReplicationSubCommand() throws ArgumentException
  {
    createServerArgs1();
@@ -796,7 +784,7 @@
            hostNameSourceArg, portSourceArg, hostNameDestinationArg, portDestinationArg, resetChangeNumber);
  }
  IntegerArgument newChangeNumberArgument() throws ArgumentException
  private IntegerArgument newChangeNumberArgument() throws ArgumentException
  {
    return IntegerArgument.builder("change-number")
            .description(INFO_DESCRIPTION_START_CHANGE_NUMBER.get())
opendj-server-legacy/src/main/java/org/opends/server/tools/makeldif/Branch.java
@@ -26,10 +26,10 @@
import org.forgerock.i18n.LocalizableMessage;
import org.forgerock.opendj.ldap.ByteString;
import org.forgerock.opendj.ldap.DN;
import org.forgerock.opendj.ldap.schema.AttributeType;
import org.opends.server.core.DirectoryServer;
import org.opends.server.types.Attribute;
import org.forgerock.opendj.ldap.schema.AttributeType;
import org.forgerock.opendj.ldap.DN;
import org.opends.server.types.Entry;
/**
@@ -39,23 +39,18 @@
public class Branch
{
  /** The DN for this branch entry. */
  private DN branchDN;
  private final DN branchDN;
  /**
   * The number of entries that should be created below this branch for each
   * subordinate template.
   */
  private int[] numEntriesPerTemplate;
  /** The names of the subordinate templates for this branch. */
  private String[] subordinateTemplateNames;
  /** The set of subordinate templates for this branch. */
  private Template[] subordinateTemplates;
  /** The set of template lines that correspond to the RDN components. */
  private TemplateLine[] rdnLines;
  private final TemplateLine[] rdnLines;
  /** The set of extra lines that should be included in this branch entry. */
  private TemplateLine[] extraLines;
@@ -90,7 +85,7 @@
   * @param  extraLines                The set of extra lines that should be
   *                                   included in this branch entry.
   */
  public Branch(TemplateFile templateFile, DN branchDN,
  private Branch(TemplateFile templateFile, DN branchDN,
                String[] subordinateTemplateNames, int[] numEntriesPerTemplate,
                TemplateLine[] extraLines)
  {
opendj-server-legacy/src/main/java/org/opends/server/tools/makeldif/RandomTag.java
@@ -15,22 +15,17 @@
 * Portions Copyright 2014-2016 ForgeRock AS.
 */
package org.opends.server.tools.makeldif;
import org.forgerock.i18n.LocalizableMessage;
import static org.opends.messages.ToolMessages.*;
import static org.opends.server.util.StaticUtils.*;
import java.text.DecimalFormat;
import java.util.List;
import java.util.Random;
import org.forgerock.i18n.LocalizableMessage;
import org.opends.server.types.InitializationException;
import static org.opends.messages.ToolMessages.*;
import static org.opends.server.util.StaticUtils.*;
/**
 * This class defines a tag that may be used to generate random values.  It has
 * a number of subtypes based on the type of information that should be
@@ -61,64 +56,36 @@
   * The value that indicates that the value is to be generated from a fixed
   * number of characters from a given character set.
   */
  public static final int RANDOM_TYPE_CHARS_FIXED = 1;
  private static final int RANDOM_TYPE_CHARS_FIXED = 1;
  /**
   * The value that indicates that the value is to be generated from a variable
   * number of characters from a given character set.
   */
  public static final int RANDOM_TYPE_CHARS_VARIABLE = 2;
  private static final int RANDOM_TYPE_CHARS_VARIABLE = 2;
  /** The value that indicates that the value should be a random number. */
  public static final int RANDOM_TYPE_NUMERIC = 3;
  private static final int RANDOM_TYPE_NUMERIC = 3;
  /** The value that indicates that the value should be a random month. */
  public static final int RANDOM_TYPE_MONTH = 4;
  private static final int RANDOM_TYPE_MONTH = 4;
  /** The value that indicates that the value should be a telephone number. */
  public static final int RANDOM_TYPE_TELEPHONE = 5;
  private static final int RANDOM_TYPE_TELEPHONE = 5;
  /** The character set that will be used for alphabetic characters. */
  public static final char[] ALPHA_CHARS =
  private static final char[] ALPHA_CHARS =
       "abcdefghijklmnopqrstuvwxyz".toCharArray();
  /** The character set that will be used for numeric characters. */
  public static final char[] NUMERIC_CHARS = "01234567890".toCharArray();
  private static final char[] NUMERIC_CHARS = "01234567890".toCharArray();
  /** The character set that will be used for alphanumeric characters. */
  public static final char[] ALPHANUMERIC_CHARS =
  private static final char[] ALPHANUMERIC_CHARS =
       "abcdefghijklmnopqrstuvwxyz0123456789".toCharArray();
  /** The character set that will be used for hexadecimal characters. */
  public static final char[] HEX_CHARS = "01234567890abcdef".toCharArray();
  private static final char[] HEX_CHARS = "01234567890abcdef".toCharArray();
  /** The character set that will be used for base64 characters. */
  public static final char[] BASE64_CHARS =
  private static final char[] BASE64_CHARS =
       ("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz" +
        "01234567890+/").toCharArray();
  /** The set of month names that will be used. */
  public static final String[] MONTHS =
  private static final String[] MONTHS =
  {
    "January",
    "February",
@@ -144,22 +111,17 @@
  /** The number of characters between the minimum and maximum length (inclusive). */
  private int lengthRange;
  /** The maximum number of characters to include in the value. */
  private int maxLength;
  /** The minimum number of characters to include in the value. */
  private int minLength;
  /** The type of random value that should be generated. */
  private int randomType;
  /** The maximum numeric value that should be generated. */
  private long maxValue;
  /** The minimum numeric value that should be generated. */
  private long minValue;
  /** The number of values between the minimum and maximum value (inclusive). */
  private long valueRange;
opendj-server-legacy/src/main/java/org/opends/server/tools/makeldif/TagResult.java
@@ -12,56 +12,34 @@
 * information: "Portions Copyright [year] [name of copyright owner]".
 *
 * Copyright 2006-2008 Sun Microsystems, Inc.
 * Portions Copyright 2015 ForgeRock AS.
 * Portions Copyright 2015-2016 ForgeRock AS.
 */
package org.opends.server.tools.makeldif;
/**
 * This class defines a data structure that provides information about the
 * result of tag processing.
 */
public class TagResult
{
  /**
   * A tag result in which all components have a value of <CODE>true</CODE>.
   */
  public static final TagResult SUCCESS_RESULT =
       new TagResult(true, true, true, true);
  /** A tag result in which all components have a value of <CODE>true</CODE>. */
  public static final TagResult SUCCESS_RESULT = new TagResult(true, true, true, true);
  /**
   * A tag result that indicates the value should not be included in the entry,
   * but all other processing should continue.
   */
  public static final TagResult OMIT_FROM_ENTRY =
       new TagResult(false, true, true, true);
  /**
   * A tag result in whihc all components have a value of <CODE>false</CODE>.
   */
  public static final TagResult STOP_PROCESSING =
       new TagResult(false, false, false, false);
  public static final TagResult OMIT_FROM_ENTRY = new TagResult(false, true, true, true);
  /** A tag result in which all components have a value of <CODE>false</CODE>. */
  public static final TagResult STOP_PROCESSING = new TagResult(false, false, false, false);
  /** Indicates whether to keep processing the associated line. */
  private boolean keepProcessingLine;
  private final boolean keepProcessingLine;
  /** Indicates whether to keep processing the associated entry. */
  private boolean keepProcessingEntry;
  private final boolean keepProcessingEntry;
  /** Indicates whether to keep processing entries below the associated parent. */
  private boolean keepProcessingParent;
  private final boolean keepProcessingParent;
  /** Indicates whether to keep processing entries for the template file. */
  private boolean keepProcessingTemplateFile;
  private final boolean keepProcessingTemplateFile;
  /**
   * Creates a new tag result object with the provided information.
@@ -81,7 +59,7 @@
   *                                     processing entries for the template
   *                                     file.
   */
  public TagResult(boolean keepProcessingLine, boolean keepProcessingEntry,
  private TagResult(boolean keepProcessingLine, boolean keepProcessingEntry,
                   boolean keepProcessingParent,
                   boolean keepProcessingTemplateFile)
  {
@@ -91,12 +69,10 @@
    this.keepProcessingTemplateFile = keepProcessingTemplateFile;
  }
  /**
   * Indicates whether to continue processing for the current line.  If this is
   * <CODE>false</CODE>, then the current line will not be included in the
   * entry.  It will have no impact on whehter the entry itself is included in
   * entry.  It will have no impact on whether the entry itself is included in
   * the generated LDIF.
   *
   * @return  <CODE>true</CODE> if the line should be included in the entry, or
@@ -107,8 +83,6 @@
    return keepProcessingLine;
  }
  /**
   * Indicates whether to continue processing for the current entry.  If this is
   * <CODE>false</CODE>, then the current entry will not be included in the
@@ -123,8 +97,6 @@
    return keepProcessingEntry;
  }
  /**
   * Indicates whether to continue processing entries below the current parent.
   * If this is <CODE>false</CODE>, then the current entry will not be included,
@@ -138,8 +110,6 @@
    return keepProcessingParent;
  }
  /**
   * Indicates whether to keep processing entries for the template file.  If
   * this is <CODE>false</CODE>, then LDIF processing will end immediately (and
@@ -153,4 +123,3 @@
    return keepProcessingTemplateFile;
  }
}
opendj-server-legacy/src/main/java/org/opends/server/tools/makeldif/Template.java
@@ -16,18 +16,17 @@
 */
package org.opends.server.tools.makeldif;
import org.forgerock.i18n.LocalizableMessage;
import static org.opends.messages.ToolMessages.*;
import static org.opends.server.util.StaticUtils.*;
import java.io.IOException;
import java.util.Collections;
import java.util.HashSet;
import java.util.Map;
import org.forgerock.opendj.ldap.schema.AttributeType;
import org.forgerock.i18n.LocalizableMessage;
import org.forgerock.opendj.ldap.DN;
import static org.opends.messages.ToolMessages.*;
import static org.opends.server.util.StaticUtils.*;
import org.forgerock.opendj.ldap.schema.AttributeType;
/**
 * This class defines a template, which is a pattern that may be used to
@@ -40,58 +39,23 @@
   * The attribute types that are used in the RDN for entries generated using
   * this template.
   */
  private AttributeType[] rdnAttributes;
  private final AttributeType[] rdnAttributes;
  /** The number of entries to create for each subordinate template. */
  private int[] numEntriesPerTemplate;
  private final int[] numEntriesPerTemplate;
  /** The name for this template. */
  private String name;
  private final String name;
  /** The names of the subordinate templates below this template. */
  private String[] subordinateTemplateNames;
  /** The subordinate templates below this template. */
  private Template[] subordinateTemplates;
  /** The template file that contains this template. */
  private TemplateFile templateFile;
  private final TemplateFile templateFile;
  /** The set of template lines for this template. */
  private TemplateLine[] templateLines;
  /**
   * Creates a new template with the provided information.
   *
   * @param  templateFile              The template file that contains this
   *                                   template.
   * @param  name                      The name for this template.
   * @param  rdnAttributes             The set of attribute types that are used
   *                                   in the RDN for entries generated using
   *                                   this template.
   * @param  subordinateTemplateNames  The names of the subordinate templates
   *                                   below this template.
   * @param  numEntriesPerTemplate     The number of entries to create below
   *                                   each subordinate template.
   */
  public Template(TemplateFile templateFile, String name,
                  AttributeType[] rdnAttributes,
                  String[] subordinateTemplateNames,
                  int[] numEntriesPerTemplate)
  {
    this.templateFile             = templateFile;
    this.name                     = name;
    this.rdnAttributes            = rdnAttributes;
    this.subordinateTemplateNames = subordinateTemplateNames;
    this.numEntriesPerTemplate    = numEntriesPerTemplate;
    templateLines        = new TemplateLine[0];
    subordinateTemplates = null;
  }
  /**
   * Creates a new template with the provided information.
opendj-server-legacy/src/main/java/org/opends/server/tools/makeldif/TemplateEntry.java
@@ -44,11 +44,11 @@
public class TemplateEntry
{
  /** The branch used to generate this entry (if it is associated with a branch). */
  private Branch branch;
  private final Branch branch;
  /** The DN for this template entry, if it is known. */
  private DN dn;
  /** The DN of the parent entry for this template entry, if it is available. */
  private DN parentDN;
  private final DN parentDN;
  /**
   * The set of attributes associated with this template entry, mapped from the
@@ -57,7 +57,7 @@
  private final LinkedHashMap<AttributeType, ArrayList<TemplateValue>> attributes = new LinkedHashMap<>();
  /** The template used to generate this entry (if it is associated with a template). */
  private Template template;
  private final Template template;
  /**
@@ -69,8 +69,9 @@
  public TemplateEntry(Branch branch)
  {
    this.branch = branch;
    dn         = branch.getBranchDN();
    template = null;
    parentDN = null;
  }
@@ -84,6 +85,8 @@
   */
  public TemplateEntry(Template template, DN parentDN)
  {
    this.branch = null;
    dn = null;
    this.template = template;
    this.parentDN = parentDN;
  }
@@ -158,25 +161,6 @@
    return dn;
  }
  /**
   * Indicates whether this entry contains one or more values for the specified
   * attribute type.
   *
   * @param  attributeType  The attribute type for which to make the
   *                        determination.
   *
   * @return  <CODE>true</CODE> if this entry contains one or more values for
   *          the specified attribute type, or <CODE>false</CODE> if not.
   */
  public boolean hasAttribute(AttributeType attributeType)
  {
    return attributes.containsKey(attributeType);
  }
  /**
   * Retrieves the value for the specified attribute, if defined.  If the
   * specified attribute has multiple values, then the first will be returned.
opendj-server-legacy/src/main/java/org/opends/server/tools/makeldif/TemplateFile.java
@@ -16,13 +16,12 @@
 */
package org.opends.server.tools.makeldif;
import org.forgerock.i18n.LocalizableMessage;
import static org.opends.messages.ToolMessages.*;
import static org.opends.server.util.StaticUtils.*;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
@@ -32,14 +31,12 @@
import java.util.Random;
import java.util.StringTokenizer;
import org.opends.server.core.DirectoryServer;
import org.forgerock.opendj.ldap.schema.AttributeType;
import org.forgerock.i18n.LocalizableMessage;
import org.forgerock.opendj.ldap.DN;
import org.forgerock.opendj.ldap.schema.AttributeType;
import org.opends.server.core.DirectoryServer;
import org.opends.server.types.InitializationException;
import static org.opends.messages.ToolMessages.*;
import static org.opends.server.util.StaticUtils.*;
/**
 * This class defines a template file, which is a collection of constant
 * definitions, branches, and templates.
@@ -47,16 +44,15 @@
public class TemplateFile
{
  /** The name of the file holding the list of first names. */
  public static final String FIRST_NAME_FILE = "first.names";
  private static final String FIRST_NAME_FILE = "first.names";
  /** The name of the file holding the list of last names. */
  public static final String LAST_NAME_FILE = "last.names";
  private static final String LAST_NAME_FILE = "last.names";
  /**
   * A map of the contents of various text files used during the parsing
   * process, mapped from absolute path to the array of lines in the file.
   */
  private final HashMap<String, String[]> fileLines = new HashMap<>();
  private final Map<String, String[]> fileLines = new HashMap<>();
  /** The index of the next first name value that should be used. */
  private int firstNameIndex;
@@ -84,18 +80,15 @@
  private final LinkedHashMap<String, Template> templates = new LinkedHashMap<>();
  /** The random number generator for this template file. */
  private Random random;
  private final Random random;
  /** The next first name that should be used. */
  private String firstName;
  /** The next last name that should be used. */
  private String lastName;
  /**
   * The resource path to use for filesystem elements that cannot be found
   * anywhere else.
   */
  private String resourcePath;
  /** The resource path to use for filesystem elements that cannot be found anywhere else. */
  private final String resourcePath;
  /** The path to the directory containing the template file, if available. */
  private String templatePath;
@@ -104,22 +97,6 @@
  /** The set of last names to use when generating the LDIF. */
  private String[] lastNames;
  /**
   * Creates a new, empty template file structure.
   *
   * @param  resourcePath  The path to the directory that may contain additional
   *                       resource files needed during the LDIF generation
   *                       process.
   */
  public TemplateFile(String resourcePath)
  {
    this(resourcePath, new Random());
  }
  /**
   * Creates a new, empty template file structure.
   *
@@ -153,8 +130,6 @@
    }
  }
  /**
   * Retrieves the set of tags that have been registered.  They will be in the
   * form of a mapping between the name of the tag (in all lowercase characters)
@@ -167,8 +142,6 @@
    return registeredTags;
  }
  /**
   * Retrieves the tag with the specified name.
   *
@@ -178,69 +151,15 @@
   * @return  The requested tag, or <CODE>null</CODE> if no such tag has been
   *          registered.
   */
  public Tag getTag(String lowerName)
  private Tag getTag(String lowerName)
  {
    return registeredTags.get(lowerName);
  }
  /**
   * Registers the specified class as a tag that may be used in templates.
   *
   * @param  tagClass  The fully-qualified name of the class to register as a
   *                   tag.
   *
   * @throws  MakeLDIFException  If a problem occurs while attempting to
   *                             register the specified tag.
   */
  public void registerTag(String tagClass)
         throws MakeLDIFException
  {
    Class c;
    try
    {
      c = Class.forName(tagClass);
    }
    catch (Exception e)
    {
      LocalizableMessage message = ERR_MAKELDIF_CANNOT_LOAD_TAG_CLASS.get(tagClass);
      throw new MakeLDIFException(message, e);
    }
    Tag t;
    try
    {
      t = (Tag) c.newInstance();
    }
    catch (Exception e)
    {
      LocalizableMessage message = ERR_MAKELDIF_CANNOT_INSTANTIATE_TAG.get(tagClass);
      throw new MakeLDIFException(message, e);
    }
    String lowerName = toLowerCase(t.getName());
    if (registeredTags.containsKey(lowerName))
    {
      LocalizableMessage message =
          ERR_MAKELDIF_CONFLICTING_TAG_NAME.get(tagClass, t.getName());
      throw new MakeLDIFException(message);
    }
    else
    {
      registeredTags.put(lowerName, t);
    }
  }
  /**
   * Registers the set of tags that will always be available for use in
   * templates.
   */
  /** Registers the set of tags that will always be available for use in templates. */
  private void registerDefaultTags()
  {
    Class[] defaultTagClasses = new Class[]
    Class<?>[] defaultTagClasses =
    {
      AttributeValueTag.class,
      DNTag.class,
@@ -261,7 +180,7 @@
      UnderscoreParentDNTag.class
    };
    for (Class c : defaultTagClasses)
    for (Class<?> c : defaultTagClasses)
    {
      try
      {
@@ -276,8 +195,6 @@
    }
  }
  /**
   * Retrieves the set of constants defined for this template file.
   *
@@ -288,37 +205,6 @@
    return constants;
  }
  /**
   * Retrieves the value of the constant with the specified name.
   *
   * @param  lowerName  The name of the constant to retrieve, in all lowercase
   *                    characters.
   *
   * @return  The value of the constant with the specified name, or
   *          <CODE>null</CODE> if there is no such constant.
   */
  public String getConstant(String lowerName)
  {
    return constants.get(lowerName);
  }
  /**
   * Registers the provided constant for use in the template.
   *
   * @param  name   The name for the constant.
   * @param  value  The value for the constant.
   */
  public void registerConstant(String name, String value)
  {
    constants.put(toLowerCase(name), value);
  }
  /**
   * Retrieves the set of branches defined in this template file.
   *
@@ -329,35 +215,6 @@
    return branches;
  }
  /**
   * Retrieves the branch registered with the specified DN.
   *
   * @param  branchDN  The DN for which to retrieve the corresponding branch.
   *
   * @return  The requested branch, or <CODE>null</CODE> if no such branch has
   *          been registered.
   */
  public Branch getBranch(DN branchDN)
  {
    return branches.get(branchDN);
  }
  /**
   * Registers the provided branch in this template file.
   *
   * @param  branch  The branch to be registered.
   */
  public void registerBranch(Branch branch)
  {
    branches.put(branch.getBranchDN(), branch);
  }
  /**
   * Retrieves the set of templates defined in this template file.
   *
@@ -368,36 +225,6 @@
    return templates;
  }
  /**
   * Retrieves the template with the specified name.
   *
   * @param  lowerName  The name of the template to retrieve, in all lowercase
   *                    characters.
   *
   * @return  The requested template, or <CODE>null</CODE> if there is no such
   *          template.
   */
  public Template getTemplate(String lowerName)
  {
    return templates.get(lowerName);
  }
  /**
   * Registers the provided template for use in this template file.
   *
   * @param  template  The template to be registered.
   */
  public void registerTemplate(Template template)
  {
    templates.put(toLowerCase(template.getName()), template);
  }
  /**
   * Retrieves the random number generator for this template file.
   *
@@ -408,8 +235,6 @@
    return random;
  }
  /**
   * Reads the contents of the first and last name files into the appropriate
   * arrays and sets up the associated index pointers.
@@ -449,8 +274,6 @@
    }
  }
  /**
   * Updates the first and last name indexes to choose new values.  The
   * algorithm used is designed to ensure that the combination of first and last
@@ -463,7 +286,6 @@
    firstName = firstNames[firstNameIndex++];
    lastName  = lastNames[lastNameIndex++];
    // If we've already exhausted every possible combination, then append an
    // integer to the last name.
    if (nameUniquenessCounter > 1)
@@ -506,8 +328,6 @@
    }
  }
  /**
   * Retrieves the first name value that should be used for the current entry.
   *
@@ -518,8 +338,6 @@
    return firstName;
  }
  /**
   * Retrieves the last name value that should be used for the current entry.
   *
@@ -530,8 +348,6 @@
    return lastName;
  }
  /**
   * Parses the contents of the specified file as a MakeLDIF template file
   * definition.
@@ -561,56 +377,10 @@
    templatePath = f.getParentFile().getAbsolutePath();
    List<String> fileLines = readLines(f);
    String[] lines = new String[fileLines.size()];
    fileLines.toArray(lines);
    String[] lines = fileLines.toArray(new String[fileLines.size()]);
    parse(lines, warnings);
  }
  /**
   * Parses the data read from the provided input stream as a MakeLDIF template
   * file definition.
   *
   * @param  inputStream  The input stream from which to read the template file
   *                      data.
   * @param  warnings     A list into which any warnings identified may be
   *                      placed.
   *
   * @throws  IOException  If a problem occurs while attempting to read data
   *                       from the provided input stream.
   *
   * @throws  InitializationException  If a problem occurs while initializing
   *                                   any of the MakeLDIF components.
   *
   * @throws  MakeLDIFException  If any other problem occurs while parsing the
   *                             template file.
   */
  public void parse(InputStream inputStream, List<LocalizableMessage> warnings)
         throws IOException, InitializationException, MakeLDIFException
  {
    ArrayList<String> fileLines = new ArrayList<>();
    try (BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream)))
    {
      while (true)
      {
        String line = reader.readLine();
        if (line == null)
        {
          break;
        }
        fileLines.add(line);
      }
    }
    String[] lines = new String[fileLines.size()];
    fileLines.toArray(lines);
    parse(lines, warnings);
  }
  /**
   * Parses the provided data as a MakeLDIF template file definition.
   *
@@ -652,7 +422,7 @@
        // no conflicts.
        String className = line.substring(8).trim();
        Class tagClass;
        Class<?> tagClass;
        try
        {
          tagClass = Class.forName(className);
@@ -755,10 +525,7 @@
          LocalizableMessage message = ERR_MAKELDIF_CONFLICTING_BRANCH_DN.get(branchDN, startLineNumber);
          throw new MakeLDIFException(message);
        }
        else
        {
          templateFileBranches.put(branchDN, b);
        }
        templateFileBranches.put(branchDN, b);
      }
      else if (lowerLine.startsWith("template: "))
      {
@@ -804,7 +571,6 @@
      }
    }
    // If we've gotten here, then we're almost done.  We just need to finalize
    // the branch and template definitions and then update the template file
    // variables.
@@ -824,7 +590,6 @@
    templates.putAll(templateFileTemplates);
  }
  /**
   * Parse a line and replace all constants within [ ] with their
   * values.
@@ -925,7 +690,6 @@
      throw new MakeLDIFException(message);
    }
    // Create a new branch that will be used for the verification process.
    Branch branch = new Branch(this, branchDN);
@@ -995,8 +759,6 @@
    return branch;
  }
  /**
   * Parses the information contained in the provided set of lines as a MakeLDIF
   * template definition.
@@ -1032,7 +794,6 @@
    // The first line must be "template: " followed by the template name.
    String templateName = templateLines[0].substring(10).trim();
    // The next line may start with either "extends: ", "rdnAttr: ", or
    // "subordinateTemplate: ".  Keep reading until we find something that's
    // not one of those.
@@ -1165,20 +926,12 @@
        // It's a comment, so we should ignore it.
        continue;
      }
      else
      {
        TemplateLine templateLine = parseTemplateLine(line, lowerLine,
                                                      lineNumber, null,
                                                      template, tags, warnings);
        template.addTemplateLine(templateLine);
      }
      template.addTemplateLine(parseTemplateLine(line, lowerLine, lineNumber, null, template, tags, warnings));
    }
    return template;
  }
  /**
   * Parses the provided line as a template line.  Note that exactly one of the
   * branch or template arguments must be non-null and the other must be null.
@@ -1286,7 +1039,6 @@
      }
    }
    // Define constants that specify what we're currently parsing.
    final int PARSING_STATIC_TEXT     = 0;
    final int PARSING_REPLACEMENT_TAG = 1;
@@ -1413,8 +1165,6 @@
        valueIsBase64);
  }
  /**
   * Parses the provided string as a replacement tag.  Exactly one of the branch
   * or template must be null, and the other must be non-null.
@@ -1469,7 +1219,6 @@
    String[] args = new String[argList.size()];
    argList.toArray(args);
    Tag newTag;
    try
    {
@@ -1480,30 +1229,22 @@
      throw new MakeLDIFException(ERR_MAKELDIF_CANNOT_INSTANTIATE_NEW_TAG.get(tagName, lineNumber, e), e);
    }
    if (branch == null)
    {
      newTag.initializeForTemplate(this, template, args, lineNumber, warnings);
    }
    else if (newTag.allowedInBranch())
    {
      newTag.initializeForBranch(this, branch, args, lineNumber, warnings);
    }
    else
    {
      if (newTag.allowedInBranch())
      {
        newTag.initializeForBranch(this, branch, args, lineNumber, warnings);
      }
      else
      {
        LocalizableMessage message = ERR_MAKELDIF_TAG_NOT_ALLOWED_IN_BRANCH.get(
            newTag.getName(), lineNumber);
        throw new MakeLDIFException(message);
      }
      throw new MakeLDIFException(ERR_MAKELDIF_TAG_NOT_ALLOWED_IN_BRANCH.get(newTag.getName(), lineNumber));
    }
    return newTag;
  }
  /**
   * Parses the provided string as an attribute tag.  Exactly one of the branch
   * or template must be null, and the other must be non-null.
@@ -1543,20 +1284,18 @@
    argList.toArray(args);
    AttributeValueTag tag = new AttributeValueTag();
    if (branch == null)
    if (branch != null)
    {
      tag.initializeForTemplate(this, template, args, lineNumber, warnings);
      tag.initializeForBranch(this, branch, args, lineNumber, warnings);
    }
    else
    {
      tag.initializeForBranch(this, branch, args, lineNumber, warnings);
      tag.initializeForTemplate(this, template, args, lineNumber, warnings);
    }
    return tag;
  }
  /**
   * Retrieves a File object based on the provided path.  If the given path is
   * absolute, then that absolute path will be used.  If it is relative, then it
@@ -1580,7 +1319,6 @@
      return f;
    }
    // If the provided path was absolute, then use it anyway, even though we
    // couldn't find the file.
    if (f.isAbsolute())
@@ -1588,7 +1326,6 @@
      return f;
    }
    // Try a path relative to the resource directory.
    String newPath = resourcePath + File.separator + path;
    f = new File(newPath);
@@ -1597,7 +1334,6 @@
      return f;
    }
    // Try a path relative to the template directory, if it's available.
    if (templatePath != null)
    {
@@ -1612,8 +1348,6 @@
    return null;
  }
  /**
   * Retrieves the lines of the specified file as a string array.  If the result
   * is already cached, then it will be used.  If the result is not cached, then
@@ -1643,8 +1377,6 @@
    return lines;
  }
  /**
   * Generates the LDIF content and writes it to the provided LDIF writer.
   *
@@ -1673,4 +1405,3 @@
    return TagResult.SUCCESS_RESULT;
  }
}
opendj-server-legacy/src/main/java/org/opends/server/tools/status/StatusCli.java
@@ -18,15 +18,16 @@
import static com.forgerock.opendj.cli.ArgumentConstants.*;
import static com.forgerock.opendj.cli.Utils.*;
import static org.forgerock.opendj.ldap.LDAPConnectionFactory.*;
import static org.forgerock.util.Utils.*;
import static org.opends.messages.ToolMessages.*;
import static org.opends.messages.AdminToolMessages.*;
import static org.opends.messages.QuickSetupMessages.INFO_ERROR_READING_SERVER_CONFIGURATION;
import static org.opends.messages.QuickSetupMessages.INFO_NOT_AVAILABLE_LABEL;
import static org.opends.messages.ToolMessages.*;
import java.io.File;
import java.io.InputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.io.PrintStream;
import java.net.URI;
@@ -106,9 +107,9 @@
  private boolean displayMustStartLegend;
  /** Prefix for log files. */
  public static final String LOG_FILE_PREFIX = "opendj-status-";
  private static final String LOG_FILE_PREFIX = "opendj-status-";
  /** Suffix for log files. */
  public static final String LOG_FILE_SUFFIX = ".log";
  private static final String LOG_FILE_SUFFIX = ".log";
  private ApplicationTrustManager interactiveTrustManager;
  private boolean useInteractiveTrustManager;
@@ -123,10 +124,8 @@
   *          The print stream to use for standard output.
   * @param err
   *          The print stream to use for standard error.
   * @param in
   *          The input stream to use for standard input.
   */
  public StatusCli(PrintStream out, PrintStream err, InputStream in)
  private StatusCli(PrintStream out, PrintStream err)
  {
    super(out, err);
  }
@@ -138,7 +137,7 @@
   */
  public static void main(String[] args)
  {
    int retCode = mainCLI(args, true, System.out, System.err, System.in);
    int retCode = mainCLI(args, System.out, System.err);
    if(retCode != 0)
    {
      System.exit(retCode);
@@ -146,39 +145,20 @@
  }
  /**
   * Parses the provided command-line arguments and uses that information to
   * run the status tool.
   *
   * @param args the command-line arguments provided to this program.
   *
   * @return The return code.
   */
  public static int mainCLI(String[] args)
  {
    return mainCLI(args, true, System.out, System.err, System.in);
  }
  /**
   * Parses the provided command-line arguments and uses that information to run
   * the status tool.
   *
   * @param args
   *          The command-line arguments provided to this program.
   * @param initializeServer
   *          Indicates whether to initialize the server.
   * @param outStream
   *          The output stream to use for standard output, or {@code null}
   *          if standard output is not needed.
   * @param errStream
   *          The output stream to use for standard error, or {@code null}
   *          if standard error is not needed.
   * @param inStream
   *          The input stream to use for standard input.
   * @return The return code.
   */
  public static int mainCLI(String[] args, boolean initializeServer,
      OutputStream outStream, OutputStream errStream, InputStream inStream)
  public static int mainCLI(String[] args, OutputStream outStream, OutputStream errStream)
  {
    PrintStream out = NullOutputStream.wrapOrNullStream(outStream);
    PrintStream err = NullOutputStream.wrapOrNullStream(errStream);
@@ -192,7 +172,7 @@
      t.printStackTrace();
    }
    final StatusCli statusCli = new StatusCli(out, err, inStream);
    final StatusCli statusCli = new StatusCli(out, err);
    int retCode = statusCli.execute(args);
    if (retCode == 0)
    {
@@ -209,7 +189,7 @@
   *          The command-line arguments provided to this program.
   * @return The return code of the process.
   */
  public int execute(String[] args) {
  private int execute(String[] args) {
    argParser = new StatusCliArgumentParser(StatusCli.class.getName());
    try {
      argParser.initializeGlobalArguments(getOutputStream());
@@ -261,8 +241,6 @@
      String bindDn = null;
      String bindPwd = null;
      ManagementContext mContext = null;
      // This is done because we do not need to ask the user about these
      // parameters. We force their presence in the
      // LDAPConnectionConsoleInteraction, this done, it will not prompt
@@ -301,6 +279,8 @@
        argParser.displayMessageAndUsageReference(getErrStream(), e.getMessageObject());
        return ReturnCode.CLIENT_SIDE_PARAM_ERROR.get();
      }
      boolean managementContextOpened = false;
      try
      {
        if (argParser.isInteractive())
@@ -315,19 +295,24 @@
        }
        if (bindPwd != null && !bindPwd.isEmpty())
        {
          mContext = getManagementContextFromConnection(ci);
          interactiveTrustManager = ci.getTrustManager();
          controlInfo.setTrustManager(interactiveTrustManager);
          useInteractiveTrustManager = true;
          try (ManagementContext mContext = getManagementContextFromConnection(ci))
          {
            managementContextOpened = true;
            interactiveTrustManager = ci.getTrustManager();
            controlInfo.setTrustManager(interactiveTrustManager);
            useInteractiveTrustManager = true;
          }
          catch (IOException e)
          {
            logger.traceException(e);
          }
        }
      } catch (ClientException e) {
        println(e.getMessageObject());
        return ReturnCode.CLIENT_SIDE_PARAM_ERROR.get();
      } finally {
        closeSilently(mContext);
      }
      if (mContext != null)
      if (managementContextOpened)
      {
        try (ConnectionWrapper conn = Utilities.getAdminDirContext(controlInfo, bindDn, bindPwd))
        {
opendj-server-legacy/src/main/java/org/opends/server/tools/tasks/TaskClient.java
@@ -12,7 +12,7 @@
 * information: "Portions Copyright [year] [name of copyright owner]".
 *
 * Copyright 2009-2010 Sun Microsystems, Inc.
 * Portions Copyright 2014-2015 ForgeRock AS.
 * Portions Copyright 2014-2016 ForgeRock AS.
 */
package org.opends.server.tools.tasks;
@@ -70,14 +70,9 @@
 */
public class TaskClient {
  /**
   * Connection through which task scheduling will take place.
   */
  protected LDAPConnection connection;
  /**
   * Keeps track of message IDs.
   */
  /** Connection through which task scheduling will take place. */
  private LDAPConnection connection;
  /** Keeps track of message IDs. */
  private final AtomicInteger nextMessageID = new AtomicInteger(0);
  /**
@@ -95,20 +90,12 @@
   */
  public static String getTaskID(List<RawAttribute> taskAttributes)
  {
    String taskID = null;
    RawAttribute recurringIDAttr = getAttribute(ATTR_RECURRING_TASK_ID,
        taskAttributes);
    RawAttribute recurringIDAttr = getAttribute(ATTR_RECURRING_TASK_ID, taskAttributes);
    if (recurringIDAttr != null) {
      taskID = recurringIDAttr.getValues().get(0).toString();
    } else {
      RawAttribute taskIDAttr = getAttribute(ATTR_TASK_ID,
          taskAttributes);
      taskID = taskIDAttr.getValues().get(0).toString();
      return recurringIDAttr.getValues().get(0).toString();
    }
    return taskID;
    RawAttribute taskIDAttr = getAttribute(ATTR_TASK_ID, taskAttributes);
    return taskIDAttr.getValues().get(0).toString();
  }
  private static RawAttribute getAttribute(String attrName,
@@ -323,17 +310,17 @@
        throw new LDAPException(
                LDAPResultCode.CLIENT_SIDE_SERVER_DOWN,
                ERR_TASK_CLIENT_UNEXPECTED_CONNECTION_CLOSURE.get());
      } else {
        opType = responseMessage.getProtocolOpType();
        if (opType == LDAPConstants.OP_TYPE_SEARCH_RESULT_ENTRY) {
          SearchResultEntryProtocolOp searchEntryOp =
                  responseMessage.getSearchResultEntryProtocolOp();
          SearchResultEntry entry = searchEntryOp.toSearchResultEntry();
          entries.add(entry);
        }
      }
      opType = responseMessage.getProtocolOpType();
      if (opType == LDAPConstants.OP_TYPE_SEARCH_RESULT_ENTRY)
      {
        SearchResultEntryProtocolOp searchEntryOp = responseMessage.getSearchResultEntryProtocolOp();
        SearchResultEntry entry = searchEntryOp.toSearchResultEntry();
        entries.add(entry);
      }
    }
    while (opType != LDAPConstants.OP_TYPE_SEARCH_RESULT_DONE);
    List<TaskEntry> taskEntries = new ArrayList<>(entries.size());
    for (Entry entry : entries) {
      taskEntries.add(new TaskEntry(entry));
@@ -374,13 +361,12 @@
      if (responseMessage == null) {
        LocalizableMessage message = ERR_TASK_CLIENT_UNEXPECTED_CONNECTION_CLOSURE.get();
        throw new LDAPException(UNAVAILABLE.intValue(), message);
      } else {
        opType = responseMessage.getProtocolOpType();
        if (opType == LDAPConstants.OP_TYPE_SEARCH_RESULT_ENTRY) {
          SearchResultEntryProtocolOp searchEntryOp =
                  responseMessage.getSearchResultEntryProtocolOp();
          entry = searchEntryOp.toSearchResultEntry();
        }
      }
      opType = responseMessage.getProtocolOpType();
      if (opType == LDAPConstants.OP_TYPE_SEARCH_RESULT_ENTRY)
      {
        SearchResultEntryProtocolOp searchEntryOp = responseMessage.getSearchResultEntryProtocolOp();
        entry = searchEntryOp.toSearchResultEntry();
      }
    }
    while (opType != LDAPConstants.OP_TYPE_SEARCH_RESULT_DONE);
@@ -390,7 +376,6 @@
    return new TaskEntry(entry);
  }
  /**
   * Changes that the state of the task in the backend to a canceled state.
   *
@@ -409,98 +394,95 @@
    TaskEntry entry = getTaskEntry(id);
    TaskState state = entry.getTaskState();
    if (state != null) {
      if (!TaskState.isDone(state)) {
        ByteString dn = ByteString.valueOfUtf8(entry.getDN().toString());
        ArrayList<RawModification> mods = new ArrayList<>();
        String newState;
        if (TaskState.isPending(state)) {
          newState = TaskState.CANCELED_BEFORE_STARTING.name();
        } else {
          newState = TaskState.STOPPED_BY_ADMINISTRATOR.name();
        }
        LDAPAttribute attr = new LDAPAttribute(ATTR_TASK_STATE, newState);
        mods.add(new LDAPModification(ModificationType.REPLACE, attr));
        ModifyRequestProtocolOp modRequest =
                new ModifyRequestProtocolOp(dn, mods);
        LDAPMessage requestMessage =
             new LDAPMessage(nextMessageID.getAndIncrement(), modRequest, null);
        writer.writeMessage(requestMessage);
        LDAPMessage responseMessage = reader.readMessage();
        if (responseMessage == null) {
          LocalizableMessage message = ERR_TASK_CLIENT_UNEXPECTED_CONNECTION_CLOSURE.get();
          throw new LDAPException(UNAVAILABLE.intValue(), message);
        }
        if (responseMessage.getProtocolOpType() !=
                LDAPConstants.OP_TYPE_MODIFY_RESPONSE)
        {
          throw new LDAPException(
                  LDAPResultCode.CLIENT_SIDE_LOCAL_ERROR,
                  ERR_TASK_CLIENT_INVALID_RESPONSE_TYPE.get(
                    responseMessage.getProtocolOpName()));
        }
        ModifyResponseProtocolOp modResponse =
                responseMessage.getModifyResponseProtocolOp();
        LocalizableMessage errorMessage = modResponse.getErrorMessage();
        if (errorMessage != null) {
          throw new LDAPException(
                  LDAPResultCode.CLIENT_SIDE_LOCAL_ERROR,
                  errorMessage);
        }
      } else if (TaskState.isRecurring(state)) {
        ByteString dn = ByteString.valueOfUtf8(entry.getDN().toString());
        DeleteRequestProtocolOp deleteRequest =
          new DeleteRequestProtocolOp(dn);
        LDAPMessage requestMessage = new LDAPMessage(
          nextMessageID.getAndIncrement(), deleteRequest, null);
        writer.writeMessage(requestMessage);
        LDAPMessage responseMessage = reader.readMessage();
        if (responseMessage == null) {
          LocalizableMessage message = ERR_TASK_CLIENT_UNEXPECTED_CONNECTION_CLOSURE.get();
          throw new LDAPException(UNAVAILABLE.intValue(), message);
        }
        if (responseMessage.getProtocolOpType() !=
                LDAPConstants.OP_TYPE_DELETE_RESPONSE)
        {
          throw new LDAPException(
                  LDAPResultCode.CLIENT_SIDE_LOCAL_ERROR,
                  ERR_TASK_CLIENT_INVALID_RESPONSE_TYPE.get(
                    responseMessage.getProtocolOpName()));
        }
        DeleteResponseProtocolOp deleteResponse =
                responseMessage.getDeleteResponseProtocolOp();
        LocalizableMessage errorMessage = deleteResponse.getErrorMessage();
        if (errorMessage != null) {
          throw new LDAPException(
                  LDAPResultCode.CLIENT_SIDE_LOCAL_ERROR,
                  errorMessage);
        }
      } else {
        throw new TaskClientException(
                ERR_TASK_CLIENT_UNCANCELABLE_TASK.get(id));
      }
    } else {
      throw new TaskClientException(
              ERR_TASK_CLIENT_TASK_STATE_UNKNOWN.get(id));
    if (state == null)
    {
      throw new TaskClientException(ERR_TASK_CLIENT_TASK_STATE_UNKNOWN.get(id));
    }
    if (!TaskState.isDone(state))
    {
      cancelNotDoneTask(entry, state, writer, reader);
    }
    else if (TaskState.isRecurring(state))
    {
      cancelRecurringTask(entry, writer, reader);
    }
    else
    {
      throw new TaskClientException(ERR_TASK_CLIENT_UNCANCELABLE_TASK.get(id));
    }
  }
  private void cancelNotDoneTask(TaskEntry entry, TaskState state, LDAPWriter writer, LDAPReader reader)
      throws IOException, LDAPException
  {
    ByteString dn = ByteString.valueOfUtf8(entry.getDN().toString());
    ArrayList<RawModification> mods = new ArrayList<>();
    String newState;
    if (TaskState.isPending(state))
    {
      newState = TaskState.CANCELED_BEFORE_STARTING.name();
    }
    else
    {
      newState = TaskState.STOPPED_BY_ADMINISTRATOR.name();
    }
    LDAPAttribute attr = new LDAPAttribute(ATTR_TASK_STATE, newState);
    mods.add(new LDAPModification(ModificationType.REPLACE, attr));
    ModifyRequestProtocolOp modRequest = new ModifyRequestProtocolOp(dn, mods);
    LDAPMessage requestMessage = new LDAPMessage(nextMessageID.getAndIncrement(), modRequest, null);
    writer.writeMessage(requestMessage);
    LDAPMessage responseMessage = reader.readMessage();
    if (responseMessage == null)
    {
      LocalizableMessage message = ERR_TASK_CLIENT_UNEXPECTED_CONNECTION_CLOSURE.get();
      throw new LDAPException(UNAVAILABLE.intValue(), message);
    }
    if (responseMessage.getProtocolOpType() != LDAPConstants.OP_TYPE_MODIFY_RESPONSE)
    {
      throw new LDAPException(LDAPResultCode.CLIENT_SIDE_LOCAL_ERROR, ERR_TASK_CLIENT_INVALID_RESPONSE_TYPE
          .get(responseMessage.getProtocolOpName()));
    }
    ModifyResponseProtocolOp modResponse = responseMessage.getModifyResponseProtocolOp();
    LocalizableMessage errorMessage = modResponse.getErrorMessage();
    if (errorMessage != null)
    {
      throw new LDAPException(LDAPResultCode.CLIENT_SIDE_LOCAL_ERROR, errorMessage);
    }
  }
  private void cancelRecurringTask(TaskEntry entry, LDAPWriter writer, LDAPReader reader)
      throws IOException, LDAPException
  {
    ByteString dn = ByteString.valueOfUtf8(entry.getDN().toString());
    DeleteRequestProtocolOp deleteRequest = new DeleteRequestProtocolOp(dn);
    LDAPMessage requestMessage = new LDAPMessage(nextMessageID.getAndIncrement(), deleteRequest, null);
    writer.writeMessage(requestMessage);
    LDAPMessage responseMessage = reader.readMessage();
    if (responseMessage == null)
    {
      LocalizableMessage message = ERR_TASK_CLIENT_UNEXPECTED_CONNECTION_CLOSURE.get();
      throw new LDAPException(UNAVAILABLE.intValue(), message);
    }
    if (responseMessage.getProtocolOpType() != LDAPConstants.OP_TYPE_DELETE_RESPONSE)
    {
      LocalizableMessage msg = ERR_TASK_CLIENT_INVALID_RESPONSE_TYPE.get(responseMessage.getProtocolOpName());
      throw new LDAPException(LDAPResultCode.CLIENT_SIDE_LOCAL_ERROR, msg);
    }
    DeleteResponseProtocolOp deleteResponse = responseMessage.getDeleteResponseProtocolOp();
    LocalizableMessage errorMessage = deleteResponse.getErrorMessage();
    if (errorMessage != null)
    {
      throw new LDAPException(LDAPResultCode.CLIENT_SIDE_LOCAL_ERROR, errorMessage);
    }
  }
  /**
   * Writes a search to the directory writer.
@@ -518,5 +500,4 @@
    // Send the request to the server and read the response.
    writer.writeMessage(requestMessage);
  }
}
opendj-server-legacy/src/main/java/org/opends/server/tools/upgrade/FileManager.java
@@ -40,7 +40,7 @@
class FileManager
{
  /** Describes the approach taken to deleting a file or directory. */
  public static enum DeletionPolicy
  private static enum DeletionPolicy
  {
    /** Delete the file or directory immediately. */
    DELETE_IMMEDIATELY,
opendj-server-legacy/src/main/java/org/opends/server/tools/upgrade/LicenseFile.java
@@ -12,7 +12,7 @@
 * information: "Portions Copyright [year] [name of copyright owner]".
 *
 * Copyright 2006-2010 Sun Microsystems, Inc.
 * Portions Copyright 2013-2015 ForgeRock AS.
 * Portions Copyright 2013-2016 ForgeRock AS.
 */
package org.opends.server.tools.upgrade;
@@ -174,7 +174,7 @@
   * @return <CODE>true</CODE> if the license has been accepted by the user
   *         <CODE>false</CODE> otherwise.
   */
  static boolean getApproval()
  private static boolean getApproval()
  {
    return approved;
  }
opendj-server-legacy/src/main/java/org/opends/server/tools/upgrade/UpgradeContext.java
@@ -78,7 +78,7 @@
   *          The call-back handler for interacting with the upgrade
   *          application.
   */
  public UpgradeContext(final BuildVersion fromVersion,
  private UpgradeContext(final BuildVersion fromVersion,
      final BuildVersion toVersion, CallbackHandler handler)
  {
    this.fromVersion = fromVersion;
@@ -153,16 +153,6 @@
  }
  /**
   * Returns the callback handler.
   *
   * @return The actual callback handler.
   */
  CallbackHandler getHandler()
  {
    return handler;
  }
  /**
   * Returns the status of the interactive mode.
   *
   * @return {@code true} if interactive mode is activated.
opendj-server-legacy/src/main/java/org/opends/server/tools/upgrade/UpgradeTasks.java
@@ -74,13 +74,12 @@
  static int countErrors;
  /** Contains all the indexes to rebuild. */
  static Set<String> indexesToRebuild = new HashSet<>();
  private static final Set<String> indexesToRebuild = new HashSet<>();
  /** A flag to avoid rebuild single indexes if 'rebuild all' is selected. */
  static boolean isRebuildAllIndexesIsPresent;
  private static boolean isRebuildAllIndexesIsPresent;
  /** A flag for marking 'rebuild all' task accepted by user. */
  static boolean isRebuildAllIndexesTaskAccepted;
  private static boolean isRebuildAllIndexesTaskAccepted;
  private static final List<String> SUPPORTED_LOCALES_FOR_3_0_0 = Arrays.asList(
      "ca_ES", "de", "es", "fr", "ja", "ko", "pl", "zh_CN", "zh_TW");
@@ -1102,14 +1101,14 @@
  }
  /** This inner classes causes JE to be lazily linked and prevents runtime errors if JE is not in the classpath. */
  static final class JEHelper {
  private static final class JEHelper {
    private static ClientException clientException(final File backendDirectory, final DatabaseException e) {
      logger.error(LocalizableMessage.raw(StaticUtils.stackTraceToString(e)));
      return new ClientException(ReturnCode.CONSTRAINT_VIOLATION,
                                 INFO_UPGRADE_TASK_MIGRATE_JE_ENV_UNREADABLE.get(backendDirectory), e);
    }
    static Set<String> listDatabases(final File backendDirectory) throws ClientException {
    private static Set<String> listDatabases(final File backendDirectory) throws ClientException {
      try (Environment je = new Environment(backendDirectory, null)) {
        Set<String> databases = new TreeSet<>(String.CASE_INSENSITIVE_ORDER);
        databases.addAll(je.getDatabaseNames());
@@ -1119,7 +1118,8 @@
      }
    }
    static void migrateDatabases(final File envDir, final Map<String, String> renamedDbs) throws ClientException {
    private static void migrateDatabases(final File envDir, final Map<String, String> renamedDbs)
          throws ClientException {
      EnvironmentConfig config = new EnvironmentConfig().setTransactional(true);
      try (Environment je = new Environment(envDir, config)) {
        final Transaction txn = je.beginTransaction(null, new TransactionConfig());
@@ -1366,7 +1366,6 @@
        }
      }
    };
  }
  /** Prevent instantiation. */
opendj-server-legacy/src/main/java/org/opends/server/tools/upgrade/UpgradeUtils.java
@@ -69,12 +69,9 @@
import static org.opends.server.tools.upgrade.Installation.*;
import static org.opends.server.util.ChangeOperationType.*;
/**
 * Common utility methods needed by the upgrade.
 */
/** Common utility methods needed by the upgrade. */
final class UpgradeUtils
{
  private static final LocalizedLogger logger = LocalizedLogger.getLoggerForThisClass();
  /** The config folder of the current instance. */
@@ -82,7 +79,7 @@
  /** The config/schema folder of the current instance. */
  static final File configSchemaDirectory = new File(configDirectory, SCHEMA_PATH_RELATIVE);
  /** The template folder of the current installation. */
  static final File templateDirectory = new File(getInstallationPath(), TEMPLATE_RELATIVE_PATH);
  private static final File templateDirectory = new File(getInstallationPath(), TEMPLATE_RELATIVE_PATH);
  /** The template/config folder of the current installation. */
  static final File templateConfigDirectory = new File(templateDirectory, CONFIG_PATH_RELATIVE);
  /** The template/config/schema folder of the current installation. */
@@ -96,7 +93,7 @@
  static final File binDirectory = new File(getInstallationPath(), UNIX_BINARIES_PATH_RELATIVE);
  /** The bat folder of the current installation. */
  static final File batDirectory = new File(getInstallationPath(), WINDOWS_BINARIES_PATH_RELATIVE);
  /** The server configuration file path */
  /** The server configuration file path. */
  static final String CONFIG_FILE_PATH =
      Paths.get(configDirectory.getAbsolutePath(), CURRENT_CONFIG_FILE_NAME).toString();
@@ -106,7 +103,7 @@
   *
   * @return the path of the installation of the directory server.
   */
  static String getInstallPathFromClasspath()
  private static String getInstallPathFromClasspath()
  {
    String installPath = DirectoryServer.getServerRoot();
    if (installPath != null)
@@ -226,20 +223,6 @@
    }
  }
  /**
   * Returns the absolute path for the given parentPath and relativePath.
   *
   * @param parentPath
   *          the parent path.
   * @param relativePath
   *          the relative path.
   * @return the absolute path for the given parentPath and relativePath.
   */
  static String getPath(final String parentPath, final String relativePath)
  {
    return getPath(new File(new File(parentPath), relativePath));
  }
  static File getFileForPath(String path)
  {
    final File f = new File(path);
@@ -247,53 +230,6 @@
  }
  /**
   * Determines whether one file is the parent of another.
   *
   * @param ancestor
   *          possible parent of <code>descendant</code>
   * @param descendant
   *          possible child 0f <code>ancestor</code>
   * @return return true if ancestor is a parent of descendant
   */
  static boolean isParentOf(final File ancestor, File descendant)
  {
    if (ancestor != null)
    {
      if (ancestor.equals(descendant))
      {
        return false;
      }
      while (descendant != null && !ancestor.equals(descendant))
      {
        descendant = descendant.getParentFile();
      }
    }
    return ancestor != null && descendant != null;
  }
  /**
   * Returns <CODE>true</CODE> if the first provided path is under the second
   * path in the file system.
   * @param descendant the descendant candidate path.
   * @param path the path.
   * @return <CODE>true</CODE> if the first provided path is under the second
   * path in the file system; <code>false</code> otherwise or if
   * either of the files are null
   */
  static boolean isDescendant(File descendant, File path) {
    if (descendant != null && path != null) {
      File parent = descendant.getParentFile();
      while (parent != null) {
        if (path.equals(parent)) {
          return true;
        }
        parent = parent.getParentFile();
      }
    }
    return false;
  }
  /**
   * Returns the instance root directory (the path where the instance is
   * installed).
   *
@@ -763,7 +699,8 @@
   *
   * @return A schema which may used in the upgrade context.
   */
  static Schema getUpgradeSchema() {
  private static Schema getUpgradeSchema()
  {
    final SchemaBuilder sb = new SchemaBuilder(Schema.getCoreSchema())
        .setOption(DEFAULT_MATCHING_RULE_OID, getCaseExactMatchingRule().getOID())
        .setOption(DEFAULT_SYNTAX_OID, getDirectoryStringSyntax().getOID());
opendj-server-legacy/src/main/java/org/opends/server/types/AuthenticationInfo.java
@@ -35,13 +35,10 @@
     mayInvoke=true)
public final class AuthenticationInfo
{
  /** Indicates whether this connection is currently authenticated. */
  private boolean isAuthenticated;
  /** Indicates whether this connection is authenticated as a root user. */
  private boolean isRoot;
  /**
   * Indicates whether the user's password must be changed before any other
   * operation will be allowed.
@@ -50,26 +47,16 @@
  /** The entry of the user that is currently authenticated. */
  private Entry authenticationEntry;
  /**
   * The entry of the user that will be used as the default authorization
   * identity.
   */
  /** The entry of the user that will be used as the default authorization identity. */
  private Entry authorizationEntry;
  /** The type of authentication performed on this connection. */
  private AuthenticationType authenticationType;
  /** The SASL mechanism used to authenticate. */
  private String saslMechanism;
  /** The bind DN used to authenticate using simple authentication. */
  private DN simpleBindDN;
  private final DN simpleBindDN;
  /**
   * Creates a new set of authentication information to be used for
   * unauthenticated clients.
   */
  /** Creates a new set of authentication information to be used for unauthenticated clients. */
  public AuthenticationInfo()
  {
    isAuthenticated     = false;
@@ -82,8 +69,6 @@
    saslMechanism       = null;
  }
  /**
   * Creates a new set of authentication information to be used for
   * clients that are authenticated internally.
@@ -135,8 +120,6 @@
    this.authenticationType  = AuthenticationType.SIMPLE;
  }
  /**
   * Creates a new set of authentication information to be used for
   * clients that have authenticated using a SASL mechanism.
@@ -168,8 +151,6 @@
    this.saslMechanism      = saslMechanism;
  }
  /**
   * Creates a new set of authentication information to be used for
   * clients that have authenticated using a SASL mechanism.
@@ -212,8 +193,6 @@
    this.saslMechanism      = saslMechanism;
  }
  /**
   * Indicates whether this client has successfully authenticated to
   * the server.
@@ -226,8 +205,6 @@
    return isAuthenticated;
  }
  /**
   * Indicates whether this client should be considered a root user.
   *
@@ -239,8 +216,6 @@
    return isRoot;
  }
  /**
   * Indicates whether the authenticated user must change his/her
   * password before any other operation will be allowed.
@@ -254,8 +229,6 @@
    return mustChangePassword;
  }
  /**
   * Specifies whether the authenticated user must change his/her
   * password before any other operation will be allowed.
@@ -270,8 +243,6 @@
    this.mustChangePassword = mustChangePassword;
  }
  /**
   * Indicates whether this client has authenticated using the
   * specified authentication type.
@@ -288,8 +259,6 @@
    return this.authenticationType == authenticationType;
  }
  /**
   * Retrieves the entry for the user as whom the client is
   * authenticated.
@@ -303,8 +272,6 @@
    return authenticationEntry;
  }
  /**
   * Retrieves the DN of the user as whom the client is authenticated.
   *
@@ -320,8 +287,6 @@
    return null;
  }
  /**
   * Sets the DN of the user as whom the client is authenticated,
   * does nothing if the client is unauthenticated.
@@ -336,8 +301,6 @@
    }
  }
  /**
   * Retrieves the entry for the user that should be used as the
   * default authorization identity.
@@ -352,8 +315,6 @@
    return authorizationEntry;
  }
  /**
   * Retrieves the DN for the user that should be used as the default
   * authorization identity.
@@ -372,8 +333,6 @@
    return null;
  }
  /**
   * Sets the DN for the user that should be used as the default
   * authorization identity, does nothing if the client is
@@ -389,8 +348,6 @@
    }
  }
  /**
   * Retrieves the bind DN that the client used for simple
   * authentication.
@@ -404,8 +361,6 @@
    return simpleBindDN;
  }
  /**
   * Indicates whether the client is currently authenticated using the
   * specified SASL mechanism.
@@ -438,8 +393,6 @@
    return buffer.toString();
  }
  /**
   * Appends a string representation of this authentication info
   * structure to the provided buffer.
@@ -447,7 +400,7 @@
   * @param  buffer  The buffer to which the information is to be
   *                 appended.
   */
  public void toString(StringBuilder buffer)
  private void toString(StringBuilder buffer)
  {
    buffer.append("AuthenticationInfo(isAuthenticated=");
    buffer.append(isAuthenticated);
@@ -488,8 +441,6 @@
    buffer.append(")");
  }
  /**
   * Creates a duplicate of this {@code AuthenticationInfo} object
   * with the new authentication and authorization entries.
@@ -522,4 +473,3 @@
    return authInfo;
  }
}
opendj-server-legacy/src/main/java/org/opends/server/types/BackupDirectory.java
@@ -16,9 +16,6 @@
 */
package org.opends.server.types;
import org.forgerock.i18n.LocalizableMessage;
import org.forgerock.i18n.LocalizedIllegalArgumentException;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
@@ -30,9 +27,11 @@
import java.util.List;
import java.util.Map;
import org.forgerock.i18n.LocalizableMessage;
import org.forgerock.i18n.LocalizedIllegalArgumentException;
import org.forgerock.i18n.slf4j.LocalizedLogger;
import org.forgerock.opendj.config.server.ConfigException;
import org.forgerock.opendj.ldap.DN;
import org.forgerock.i18n.slf4j.LocalizedLogger;
import static org.opends.messages.CoreMessages.*;
import static org.opends.server.util.ServerConstants.*;
@@ -58,7 +57,7 @@
   * the configuration entry for the backend associated with the
   * backups in this directory.
   */
  public static final String PROPERTY_BACKEND_CONFIG_DN = "backend_dn";
  private static final String PROPERTY_BACKEND_CONFIG_DN = "backend_dn";
  /**
   * The DN of the configuration entry for the backend with which this
@@ -101,7 +100,7 @@
   *          Information about the set of backups available within the
   *          specified directory.
   */
  public BackupDirectory(String path, DN configEntryDN, LinkedHashMap<String, BackupInfo> backups)
  private BackupDirectory(String path, DN configEntryDN, LinkedHashMap<String, BackupInfo> backups)
  {
    this.path = path;
    this.configEntryDN = configEntryDN;
@@ -269,8 +268,7 @@
      // Iterate through all of the backups and add them to the file.
      for (BackupInfo backup : backups.values())
      {
        List<String> backupLines = backup.encode();
        for (String line : backupLines)
        for (String line : backup.encode())
        {
          writer.write(line);
          writer.newLine();
opendj-server-legacy/src/main/java/org/opends/server/types/BackupInfo.java
@@ -26,6 +26,8 @@
import java.util.HashSet;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.TimeZone;
import org.forgerock.i18n.LocalizableMessage;
@@ -47,51 +49,51 @@
  private static final LocalizedLogger logger = LocalizedLogger.getLoggerForThisClass();
  /** The name of the property that holds the date that the backup was created. */
  public static final String PROPERTY_BACKUP_DATE = "backup_date";
  private static final String PROPERTY_BACKUP_DATE = "backup_date";
  /** The name of the property that holds the backup ID in encoded representations. */
  public static final String PROPERTY_BACKUP_ID = "backup_id";
  private static final String PROPERTY_BACKUP_ID = "backup_id";
  /** The name of the property that holds the incremental flag in encoded representations. */
  public static final String PROPERTY_IS_INCREMENTAL = "incremental";
  private static final String PROPERTY_IS_INCREMENTAL = "incremental";
  /** The name of the property that holds the compressed flag in encoded representations. */
  public static final String PROPERTY_IS_COMPRESSED = "compressed";
  private static final String PROPERTY_IS_COMPRESSED = "compressed";
  /** The name of the property that holds the encrypted flag in encoded representations. */
  public static final String PROPERTY_IS_ENCRYPTED = "encrypted";
  private static final String PROPERTY_IS_ENCRYPTED = "encrypted";
  /** The name of the property that holds the unsigned hash in encoded representations. */
  public static final String PROPERTY_UNSIGNED_HASH = "hash";
  private static final String PROPERTY_UNSIGNED_HASH = "hash";
  /** The name of the property that holds the signed hash in encoded representations. */
  public static final String PROPERTY_SIGNED_HASH = "signed_hash";
  private static final String PROPERTY_SIGNED_HASH = "signed_hash";
  /**
   * The name of the property that holds the set of dependencies in
   * encoded representations (one dependency per instance).
   */
  public static final String PROPERTY_DEPENDENCY = "dependency";
  private static final String PROPERTY_DEPENDENCY = "dependency";
  /**
   * The prefix to use with custom backup properties.  The name of the
   * property will be appended to this prefix.
   */
  public static final String PROPERTY_CUSTOM_PREFIX = "property.";
  private static final String PROPERTY_CUSTOM_PREFIX = "property.";
  /** The backup directory with which this backup info structure is associated. */
  private BackupDirectory backupDirectory;
  private final BackupDirectory backupDirectory;
  /** Indicates whether this backup is compressed. */
  private boolean isCompressed;
  private final boolean isCompressed;
  /** Indicates whether this backup is encrypted. */
  private boolean isEncrypted;
  private final boolean isEncrypted;
  /** Indicates whether this is an incremental backup. */
  private boolean isIncremental;
  private final boolean isIncremental;
  /** The signed hash for this backup, if appropriate. */
  private byte[] signedHash;
  private final byte[] signedHash;
  /** The unsigned hash for this backup, if appropriate. */
  private byte[] unsignedHash;
  private final byte[] unsignedHash;
  /** The time that this backup was created. */
  private Date backupDate;
  private final Date backupDate;
  /** The set of backup ID(s) on which this backup is dependent. */
  private HashSet<String> dependencies;
  private final Set<String> dependencies;
  /**
   * The set of additional properties associated with this backup.
@@ -101,10 +103,10 @@
   * the name must not contain an equal sign and neither the name nor
   * the value may contain line breaks;
   */
  private HashMap<String,String> backupProperties;
  private final Map<String, String> backupProperties;
  /** The unique ID for this backup. */
  private String backupID;
  private final String backupID;
  /**
   * Creates a new backup info structure with the provided
@@ -269,7 +271,7 @@
   * @return  The set of the backup IDs for the backups on which this
   *          backup is dependent.
   */
  public HashSet<String> getDependencies()
  public Set<String> getDependencies()
  {
    return dependencies;
  }
@@ -303,26 +305,12 @@
   * @return  A set of additional properties that should be associated
   *          with this backup.
   */
  public HashMap<String,String> getBackupProperties()
  public Map<String, String> getBackupProperties()
  {
    return backupProperties;
  }
  /**
   * Retrieves the value of the backup property with the specified
   * name.
   *
   * @param  name  The name of the backup property to retrieve.
   *
   * @return  The value of the backup property with the specified
   *          name, or <CODE>null</CODE> if there is no such property.
   */
  public String getBackupProperty(String name)
  {
    return backupProperties.get(name);
  }
  /**
   * Encodes this backup info structure to a multi-line string
   * representation.  This representation may be parsed by the
   * <CODE>decode</CODE> method to reconstruct the structure.
@@ -330,7 +318,7 @@
   * @return  A multi-line string representation of this backup info
   *          structure.
   */
  public LinkedList<String> encode()
  public List<String> encode()
  {
    LinkedList<String> list = new LinkedList<>();
    SimpleDateFormat   dateFormat =
@@ -545,10 +533,9 @@
   * @param  buffer  The buffer to which the information should be
   *                 written.
   */
  public void toString(StringBuilder buffer)
  private void toString(StringBuilder buffer)
  {
    LinkedList<String> lines = encode();
    for (String line : lines)
    for (String line : encode())
    {
      buffer.append(line);
      buffer.append(EOL);
opendj-server-legacy/src/main/java/org/opends/server/types/DITContentRule.java
@@ -16,6 +16,7 @@
 */
package org.opends.server.types;
import org.forgerock.i18n.slf4j.LocalizedLogger;
import org.forgerock.opendj.ldap.schema.AttributeType;
import org.forgerock.opendj.ldap.schema.SchemaElement;
@@ -26,8 +27,6 @@
import java.util.Map;
import java.util.Set;
import org.forgerock.i18n.slf4j.LocalizedLogger;
import static org.forgerock.util.Reject.*;
import static org.opends.server.util.ServerConstants.*;
@@ -70,24 +69,17 @@
   * user-defined name for that class.
   */
  private final Set<ObjectClass> auxiliaryClasses;
  /** The set of optional attribute types for this DIT content rule. */
  private final Set<AttributeType> optionalAttributes;
  /** The set of prohibited attribute types for this DIT content rule. */
  private final Set<AttributeType> prohibitedAttributes;
  /** The set of required attribute types for this DIT content rule. */
  private final Set<AttributeType> requiredAttributes;
  /** The definition string used to create this DIT content rule. */
  private final String definition;
  /** The description for this DIT content rule. */
  private final String description;
  /**
   * Creates a new DIT content rule definition with the provided
   * information.
@@ -128,7 +120,7 @@
    ifNull(definition, structuralClass);
    this.structuralClass = structuralClass;
    this.description     = description;
    this.description = description;
    this.isObsolete      = isObsolete;
    int schemaFilePos = definition.indexOf(SCHEMA_PROPERTY_FILENAME);
@@ -252,14 +244,7 @@
   */
  public String getNameOrOID()
  {
    if (names.isEmpty())
    {
      return null;
    }
    else
    {
      return names.values().iterator().next();
    }
    return !names.isEmpty() ? names.values().iterator().next() : null;
  }
@@ -308,25 +293,6 @@
    return requiredAttributes;
  }
  /**
   * Indicates whether the provided attribute type is included in the
   * required attribute list for this DIT content rule.
   *
   * @param  attributeType  The attribute type for which to make the
   *                        determination.
   *
   * @return  {@code true} if the provided attribute type is required
   *          by this DIT content rule, or {@code false} if not.
   */
  public boolean isRequired(AttributeType attributeType)
  {
    return requiredAttributes.contains(attributeType);
  }
  /**
   * Retrieves the set of optional attributes for this DIT content
   * rule.
@@ -342,23 +308,6 @@
  /**
   * Indicates whether the provided attribute type is included in the
   * optional attribute list for this DIT content rule.
   *
   * @param  attributeType  The attribute type for which to make the
   *                        determination.
   *
   * @return  {@code true} if the provided attribute type is optional
   *          for this DIT content rule, or {@code false} if not.
   */
  public boolean isOptional(AttributeType attributeType)
  {
    return optionalAttributes.contains(attributeType);
  }
  /**
   * Indicates whether the provided attribute type is in the list of
   * required or optional attributes for this DIT content rule.
   *
opendj-server-legacy/src/main/java/org/opends/server/types/DirectoryEnvironmentConfig.java
@@ -86,7 +86,7 @@
   * @param checkIfServerIsRunning
   *            If {@code true}, prevent any change when server is running.
   */
  public DirectoryEnvironmentConfig(Properties properties, boolean checkIfServerIsRunning)
  private DirectoryEnvironmentConfig(Properties properties, boolean checkIfServerIsRunning)
  {
    this.checkIfServerIsRunning = checkIfServerIsRunning;
    configProperties = new HashMap<>();
@@ -102,33 +102,6 @@
    }
  }
  /**
   * Creates a new directory environment configuration initialized
   * with a copy of the provided set of properties.
   *
   * @param  properties  The properties to use when initializing this
   *                     environment configuration, or {@code null}
   *                     to use an empty set of properties.
   * @param checkIfServerIsRunning
   *            If {@code true}, prevent any change when server is running.
   */
  public DirectoryEnvironmentConfig(Map<String,String> properties, boolean checkIfServerIsRunning)
  {
    this.checkIfServerIsRunning = checkIfServerIsRunning;
    if (properties == null)
    {
      configProperties = new HashMap<>();
    }
    else
    {
      configProperties = new HashMap<>(properties);
    }
  }
  /**
   * Retrieves the property with the specified name.  The check will
   * first be made in the local config properties, but if no value is
@@ -139,14 +112,13 @@
   * @return  The property with the specified name, or {@code null} if
   *          no such property is defined.
   */
  public String getProperty(String name)
  private String getProperty(String name)
  {
    String value = configProperties.get(name);
    if (value == null)
    {
      value = System.getProperty(name);
    }
    return value;
  }
@@ -328,7 +300,7 @@
   * @return  The directory that should be considered the instance
   *          root, or {@code null} if it is not defined.
   */
  public static File getInstanceRootFromServerRoot(File serverRoot)
  private static File getInstanceRootFromServerRoot(File serverRoot)
  {
    return new File(Utils.getInstancePathFromInstallPath(serverRoot.getAbsolutePath()));
  }
@@ -444,26 +416,23 @@
  public File getConfigFile()
  {
    String configFilePath = getProperty(PROPERTY_CONFIG_FILE);
    if (configFilePath == null)
    {
      File serverRoot = getServerRoot();
      if (serverRoot != null)
      {
        File instanceRoot = getInstanceRootFromServerRoot(serverRoot);
        File configDir = new File(instanceRoot, CONFIG_DIR_NAME);
        File configFile = new File(configDir, CONFIG_FILE_NAME);
        if (configFile.exists())
        {
          return configFile;
        }
      }
      return null;
    }
    else
    if (configFilePath != null)
    {
      return new File(configFilePath);
    }
    File serverRoot = getServerRoot();
    if (serverRoot != null)
    {
      File instanceRoot = getInstanceRootFromServerRoot(serverRoot);
      File configDir = new File(instanceRoot, CONFIG_DIR_NAME);
      File configFile = new File(configDir, CONFIG_FILE_NAME);
      if (configFile.exists())
      {
        return configFile;
      }
    }
    return null;
  }
@@ -533,34 +502,6 @@
  }
  /**
   * Specifies whether the Directory Server should attempt to start
   * using the last known good configuration rather than the
   * current active configuration.
   *
   * @param  useLastKnownGoodConfiguration  Indicates whether the
   *                                        Directory Server should
   *                                        attempt to start using the
   *                                        last known good
   *                                        configuration.
   *
   * @return  The previous setting for this configuration option.  If
   *          no previous value was specified, then {@code false} will
   *          be returned.
   *
   * @throws  InitializationException  If the Directory Server is
   *                                   already running.
   */
  public boolean setUseLastKnownGoodConfiguration(
                      boolean useLastKnownGoodConfiguration)
         throws InitializationException
  {
    return setBooleanProperty(PROPERTY_USE_LAST_KNOWN_GOOD_CONFIG,
        useLastKnownGoodConfiguration);
  }
  /**
   * Indicates whether the Directory Server should maintain an archive
   * of previous configurations.  If no explicit value is defined,
   * then a default result of {@code true} will be returned.
@@ -629,14 +570,7 @@
    try
    {
      int maxSize = Integer.parseInt(maxSizeStr);
      if (maxSize > 0)
      {
        return maxSize;
      }
      else
      {
        return 0;
      }
      return maxSize > 0 ? maxSize : 0;
    }
    catch (Exception e)
    {
@@ -644,65 +578,6 @@
    }
  }
  /**
   * Specifies the maximum number of archived configurations that the
   * Directory Server should maintain.  A value that is less than or
   * equal to zero may be used to indicate that there should not be
   * any limit to the number of archived configurations.
   *
   * @param  maxConfigArchiveSize  The maximum number of archived
   *                               configurations that the Directory
   *                               Server should maintain.
   *
   * @return  The previous setting for this configuration option.  If
   *          no previous value was specified, then zero will be
   *          returned.
   *
   * @throws  InitializationException  If the Directory Server is
   *                                   already running.
   */
  public int setMaxConfigArchiveSize(int maxConfigArchiveSize)
         throws InitializationException
  {
    checkServerIsRunning();
    if (maxConfigArchiveSize < 0)
    {
      maxConfigArchiveSize = 0;
    }
    String oldMaxSizeStr =
         setProperty(PROPERTY_MAX_CONFIG_ARCHIVE_SIZE,
                     String.valueOf(maxConfigArchiveSize));
    if (oldMaxSizeStr == null)
    {
      return 0;
    }
    else
    {
      try
      {
        int oldMaxSize = Integer.parseInt(oldMaxSizeStr);
        if (oldMaxSize > 0)
        {
          return oldMaxSize;
        }
        else
        {
          return 0;
        }
      }
      catch (Exception e)
      {
        return 0;
      }
    }
  }
  /**
   * Retrieves the directory that contains the server schema
   * configuration files.  If no value is defined, but a default
@@ -714,28 +589,23 @@
   */
  public File getSchemaDirectory()
  {
    String schemaDirectoryPath =
         getProperty(PROPERTY_SCHEMA_DIRECTORY);
    if (schemaDirectoryPath == null)
    {
      File serverRoot = getServerRoot();
      if (serverRoot != null)
      {
        File instanceRoot =
          getInstanceRootFromServerRoot(serverRoot);
        File schemaDir = new File(instanceRoot.getAbsolutePath()
            + File.separator + PATH_SCHEMA_DIR);
        if (schemaDir.exists() && schemaDir.isDirectory())
        {
          return schemaDir;
        }
      }
      return null;
    }
    else
    String schemaDirectoryPath = getProperty(PROPERTY_SCHEMA_DIRECTORY);
    if (schemaDirectoryPath != null)
    {
      return new File(schemaDirectoryPath);
    }
    File serverRoot = getServerRoot();
    if (serverRoot != null)
    {
      File instanceRoot = getInstanceRootFromServerRoot(serverRoot);
      File schemaDir = new File(instanceRoot.getAbsolutePath() + File.separator + PATH_SCHEMA_DIR);
      if (schemaDir.exists() && schemaDir.isDirectory())
      {
        return schemaDir;
      }
    }
    return null;
  }
@@ -783,76 +653,20 @@
  public File getLockDirectory()
  {
    String lockFilePath = getProperty(PROPERTY_LOCK_DIRECTORY);
    if (lockFilePath == null)
    {
      File serverRoot = getServerRoot();
      if (serverRoot == null)
      {
        return null;
      }
      else
      {
        File instanceRoot = getInstanceRootFromServerRoot(serverRoot);
        return new File(instanceRoot, LOCKS_DIRECTORY);
      }
    }
    else
    if (lockFilePath != null)
    {
      return new File(lockFilePath);
    }
  }
  /**
   * Specifies the directory that should be used to hold the server
   * lock files.  If the specified path already exists, then it must
   * be a directory and its contents must be writable by the server.
   * If it does not exist, then its parent directory must exist and
   * the server should have permission to create a new subdirectory in
   * it.
   *
   * @param  lockDirectory  The directory that should be used to hold
   *                        the server lock files.
   *
   * @return  The previously-defined lock directory, or {@code null}
   *          if none was defined.
   *
   * @throws  InitializationException  If the Directory Server is
   *                                   already running or there is a
   *                                   problem with the provided lock
   *                                   directory.
   */
  public File setLockDirectory(File lockDirectory)
         throws InitializationException
  {
    checkServerIsRunning();
    if (lockDirectory.exists())
    File serverRoot = getServerRoot();
    if (serverRoot != null)
    {
      if (! lockDirectory.isDirectory())
      {
        throw new InitializationException(
                ERR_DIRCFG_INVALID_LOCK_DIRECTORY.get(
                        lockDirectory.getAbsolutePath()));
      }
      File instanceRoot = getInstanceRootFromServerRoot(serverRoot);
      return new File(instanceRoot, LOCKS_DIRECTORY);
    }
    else
    {
      File parentFile = lockDirectory.getParentFile();
      if (!parentFile.exists() || !parentFile.isDirectory())
      {
        throw new InitializationException(
                ERR_DIRCFG_INVALID_LOCK_DIRECTORY.get(
                        lockDirectory.getAbsolutePath()));
      }
    }
    return setPathProperty(PROPERTY_LOCK_DIRECTORY, lockDirectory);
    return null;
  }
  /**
   * Indicates whether the Directory Server startup process should
   * skip the connection handler creation and initialization phases.
@@ -993,32 +807,6 @@
    return isPropertyTrue(PROPERTY_DISABLE_EXEC);
  }
  /**
   * Specifies whether the Directory Server should be allowed to use
   * the {@code Runtime.exec()} method to be able to launch external
   * commands on the underlying system.
   *
   * @param  disableExec  Indicates whether the Directory Server
   *                      should be allowed to launch external
   *                      commands on the underlying system.
   *
   * @return  The previous setting for this configuration option.  If
   *          no previous value was specified, then {@code false} will
   *          be returned.
   *
   * @throws  InitializationException  If the Directory Server is
   *                                   already running.
   */
  public boolean setDisableExec(boolean disableExec)
         throws InitializationException
  {
    return setBooleanProperty(PROPERTY_DISABLE_EXEC, disableExec);
  }
  /** Throws an exception if server is running and it is not allowed. */
  private void checkServerIsRunning() throws InitializationException
  {
opendj-server-legacy/src/main/java/org/opends/server/types/FilePermission.java
@@ -12,10 +12,12 @@
 * information: "Portions Copyright [year] [name of copyright owner]".
 *
 * Copyright 2006-2008 Sun Microsystems, Inc.
 * Portions Copyright 2013-2015 ForgeRock AS.
 * Portions Copyright 2013-2016 ForgeRock AS.
 */
package org.opends.server.types;
import static org.opends.messages.UtilityMessages.*;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
@@ -30,8 +32,6 @@
import org.forgerock.i18n.LocalizableMessage;
import org.forgerock.opendj.ldap.ResultCode;
import static org.opends.messages.UtilityMessages.*;
/**
 * This class provides a mechanism for setting file permissions in a
 * more abstract manner than is provided by the underlying operating
@@ -48,83 +48,46 @@
     mayInvoke=true)
public class FilePermission
{
  /**
   * The bitmask that should be used for indicating whether a file is
   * readable by its owner.
   */
  public static final int OWNER_READABLE = 0x0100;
  /**
   * The bitmask that should be used for indicating whether a file is
   * writable by its owner.
   */
  public static final int OWNER_WRITABLE = 0x0080;
  /**
   * The bitmask that should be used for indicating whether a file is
   * executable by its owner.
   */
  public static final int OWNER_EXECUTABLE = 0x0040;
  /** The bitmask that should be used for indicating whether a file is readable by its owner. */
  private static final int OWNER_READABLE = 0x0100;
  /** The bitmask that should be used for indicating whether a file is writable by its owner. */
  private static final int OWNER_WRITABLE = 0x0080;
  /** The bitmask that should be used for indicating whether a file is executable by its owner. */
  private static final int OWNER_EXECUTABLE = 0x0040;
  /**
   * The bitmask that should be used for indicating whether a file is
   * readable by members of its group.
   */
  public static final int GROUP_READABLE = 0x0020;
  private static final int GROUP_READABLE = 0x0020;
  /**
   * The bitmask that should be used for indicating whether a file is
   * writable by members of its group.
   */
  public static final int GROUP_WRITABLE = 0x0010;
  private static final int GROUP_WRITABLE = 0x0010;
  /**
   * The bitmask that should be used for indicating whether a file is
   * executable by members of its group.
   */
  public static final int GROUP_EXECUTABLE = 0x0008;
  private static final int GROUP_EXECUTABLE = 0x0008;
  /**
   * The bitmask that should be used for indicating whether a file is
   * readable by users other than the owner or group members.
   */
  public static final int OTHER_READABLE = 0x0004;
  private static final int OTHER_READABLE = 0x0004;
  /**
   * The bitmask that should be used for indicating whether a file is
   * writable by users other than the owner or group members.
   */
  public static final int OTHER_WRITABLE = 0x0002;
  private static final int OTHER_WRITABLE = 0x0002;
  /**
   * The bitmask that should be used for indicating whether a file is
   * executable by users other than the owner or group members.
   */
  public static final int OTHER_EXECUTABLE = 0x0001;
  private static final int OTHER_EXECUTABLE = 0x0001;
  /** The encoded representation for this file permission. */
  private int encodedPermission;
  /**
   * Creates a new file permission object with the provided encoded
   * representation.
@@ -137,123 +100,6 @@
    this.encodedPermission = encodedPermission;
  }
  /**
   * Creates a new file permission with the specified rights for the
   * file owner.  Users other than the owner will not have any rights.
   *
   * @param  ownerReadable    Indicates whether the owner should have
   *                          the read permission.
   * @param  ownerWritable    Indicates whether the owner should have
   *                          the write permission.
   * @param  ownerExecutable  Indicates whether the owner should have
   *                          the execute permission.
   */
  public FilePermission(boolean ownerReadable, boolean ownerWritable,
                        boolean ownerExecutable)
  {
    encodedPermission = 0x0000;
    if (ownerReadable)
    {
      encodedPermission |= OWNER_READABLE;
    }
    if (ownerWritable)
    {
      encodedPermission |= OWNER_WRITABLE;
    }
    if (ownerExecutable)
    {
      encodedPermission |= OWNER_EXECUTABLE;
    }
  }
  /**
   * Creates a new file permission with the specified rights for the
   * file owner, group members, and other users.
   *
   * @param  ownerReadable    Indicates whether the owner should have
   *                          the read permission.
   * @param  ownerWritable    Indicates whether the owner should have
   *                          the write permission.
   * @param  ownerExecutable  Indicates whether the owner should have
   *                          the execute permission.
   * @param  groupReadable    Indicates whether members of the file's
   *                          group should have the read permission.
   * @param  groupWritable    Indicates whether members of the file's
   *                          group should have the write permission.
   * @param  groupExecutable  Indicates whether members of the file's
   *                          group should have the execute
   *                          permission.
   * @param  otherReadable    Indicates whether other users should
   *                          have the read permission.
   * @param  otherWritable    Indicates whether other users should
   *                          have the write permission.
   * @param  otherExecutable  Indicates whether other users should
   *                          have the execute permission.
   */
  public FilePermission(boolean ownerReadable, boolean ownerWritable,
                        boolean ownerExecutable,
                        boolean groupReadable, boolean groupWritable,
                        boolean groupExecutable,
                        boolean otherReadable, boolean otherWritable,
                        boolean otherExecutable)
  {
    encodedPermission = 0x0000;
    if (ownerReadable)
    {
      encodedPermission |= OWNER_READABLE;
    }
    if (ownerWritable)
    {
      encodedPermission |= OWNER_WRITABLE;
    }
    if (ownerExecutable)
    {
      encodedPermission |= OWNER_EXECUTABLE;
    }
    if (groupReadable)
    {
      encodedPermission |= GROUP_READABLE;
    }
    if (groupWritable)
    {
      encodedPermission |= GROUP_WRITABLE;
    }
    if (groupExecutable)
    {
      encodedPermission |= GROUP_EXECUTABLE;
    }
    if (otherReadable)
    {
      encodedPermission |= OTHER_READABLE;
    }
    if (otherWritable)
    {
      encodedPermission |= OTHER_WRITABLE;
    }
    if (otherExecutable)
    {
      encodedPermission |= OTHER_EXECUTABLE;
    }
  }
  /**
   * Indicates whether this file permission includes the owner read
   * permission.
@@ -266,8 +112,6 @@
    return is(encodedPermission, OWNER_READABLE);
  }
  /**
   * Indicates whether this file permission includes the owner write
   * permission.
@@ -280,8 +124,6 @@
    return is(encodedPermission, OWNER_WRITABLE);
  }
  /**
   * Indicates whether this file permission includes the owner execute
   * permission.
@@ -294,8 +136,6 @@
    return is(encodedPermission, OWNER_EXECUTABLE);
  }
  /**
   * Indicates whether this file permission includes the group read
   * permission.
@@ -308,8 +148,6 @@
    return is(encodedPermission, GROUP_READABLE);
  }
  /**
   * Indicates whether this file permission includes the group write
   * permission.
@@ -322,8 +160,6 @@
    return is(encodedPermission, GROUP_WRITABLE);
  }
  /**
   * Indicates whether this file permission includes the group execute
   * permission.
@@ -336,8 +172,6 @@
    return is(encodedPermission, GROUP_EXECUTABLE);
  }
  /**
   * Indicates whether this file permission includes the other read
   * permission.
@@ -350,8 +184,6 @@
    return is(encodedPermission, OTHER_READABLE);
  }
  /**
   * Indicates whether this file permission includes the other write
   * permission.
@@ -364,8 +196,6 @@
    return is(encodedPermission, OTHER_WRITABLE);
  }
  /**
   * Indicates whether this file permission includes the other execute
   * permission.
@@ -487,8 +317,6 @@
    return buffer.toString();
  }
  /**
   * Appends a three-character string that is the UNIX mode for the
   * provided file permission to the given buffer.  Each character of
@@ -498,7 +326,7 @@
   *                 appended.
   * @param  p       The permission to retrieve as a UNIX mode string.
   */
  public static void toUNIXMode(StringBuilder buffer,
  private static void toUNIXMode(StringBuilder buffer,
                                FilePermission p)
  {
    byte modeByte = 0x00;
@@ -547,8 +375,6 @@
    buffer.append(modeByte);
  }
  /**
   * Decodes the provided string as a UNIX mode and retrieves the
   * corresponding file permission.  The mode string must contain
@@ -669,8 +495,6 @@
    return new FilePermission(encodedPermission);
  }
  /**
   * Build a file permissions string in the "rwx" form expected by NIO,
   * but with optional prefix strings before each three character block.
@@ -702,8 +526,6 @@
    buffer.append(p.isOtherExecutable() ? "x" : "-");
  }
  /**
   * Retrieves a string representation of this file permission.
   *
@@ -717,17 +539,14 @@
    return buffer.toString();
  }
  /**
   * Appends a string representation of this file permission to the
   * given buffer.
   *
   * @param  buffer  The buffer to which the data should be appended.
   */
  public void toString(StringBuilder buffer)
  private void toString(StringBuilder buffer)
  {
    toPOSIXString(this, buffer, "Owner=", ", Group=", ", Other=");
  }
}
opendj-server-legacy/src/main/java/org/opends/server/types/IntermediateResponse.java
@@ -16,13 +16,11 @@
 */
package org.opends.server.types;
import org.forgerock.opendj.ldap.ByteString;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import org.forgerock.opendj.ldap.ByteString;
/**
 * This class defines a data structure for holding information that
@@ -32,24 +30,18 @@
@org.opends.server.types.PublicAPI(
     stability=org.opends.server.types.StabilityLevel.VOLATILE,
     mayInstantiate=true,
     mayExtend=false,
     mayInvoke=true)
public final class IntermediateResponse
{
  /** The value for this intermediate response. */
  private ByteString value;
  /** The set of controls for this intermediate response. */
  private List<Control> controls;
  private final List<Control> controls;
  /** The operation with which this intermediate response is associated. */
  private Operation operation;
  private final Operation operation;
  /** The OID for this intermediate response. */
  private String oid;
  /**
   * Creates a new intermediate response with the provided
   * information.
@@ -69,18 +61,16 @@
    this.oid       = oid;
    this.value     = value;
    if (controls == null)
    {
      this.controls = new ArrayList<>(0);
    }
    else
    if (controls != null)
    {
      this.controls = controls;
    }
    else
    {
      this.controls = new ArrayList<>(0);
    }
  }
  /**
   * Retrieves the operation with which this intermediate response
   * message is associated.
@@ -93,8 +83,6 @@
    return operation;
  }
  /**
   * Retrieves the OID for this intermediate response.
   *
@@ -106,8 +94,6 @@
    return oid;
  }
  /**
   * Specifies the OID for this intermediate response.
   *
@@ -118,8 +104,6 @@
    this.oid = oid;
  }
  /**
   * Retrieves the value for this intermediate response.
   *
@@ -131,8 +115,6 @@
    return value;
  }
  /**
   * Specifies the value for this intermediate response.
   *
@@ -143,8 +125,6 @@
    this.value = value;
  }
  /**
   * Retrieves the set of controls for this intermediate response.
   * The contents of the list may be altered by intermediate response
@@ -157,8 +137,6 @@
    return controls;
  }
  /**
   * Retrieves a string representation of this intermediate response.
   *
@@ -172,8 +150,6 @@
    return buffer.toString();
  }
  /**
   * Appends a string representation of this intermediate response to
   * the provided buffer.
@@ -181,7 +157,7 @@
   * @param  buffer  The buffer to which the information should be
   *                 appended.
   */
  public void toString(StringBuilder buffer)
  private void toString(StringBuilder buffer)
  {
    buffer.append("IntermediateResponse(operation=");
    operation.toString(buffer);
@@ -207,4 +183,3 @@
    buffer.append(")");
  }
}
opendj-server-legacy/src/main/java/org/opends/server/types/LDAPURL.java
@@ -54,11 +54,11 @@
  /** The default scheme that will be used if none is provided. */
  public static final String DEFAULT_SCHEME = "ldap";
  /** The default port value that will be used if none is provided. */
  public static final int DEFAULT_PORT = 389;
  private static final int DEFAULT_PORT = 389;
  /** The default base DN that will be used if none is provided. */
  public static final DN DEFAULT_BASE_DN = DN.rootDN();
  private static final DN DEFAULT_BASE_DN = DN.rootDN();
  /** The default search scope that will be used if none is provided. */
  public static final SearchScope DEFAULT_SEARCH_SCOPE =
  private static final SearchScope DEFAULT_SEARCH_SCOPE =
       SearchScope.BASE_OBJECT;
  /** The default search filter that will be used if none is provided. */
  public static final SearchFilter DEFAULT_SEARCH_FILTER =
@@ -82,9 +82,9 @@
  private String rawFilter;
  /** The set of attributes for this LDAP URL. */
  private LinkedHashSet<String> attributes;
  private final LinkedHashSet<String> attributes;
  /** The set of extensions for this LDAP URL. */
  private LinkedList<String> extensions;
  private final List<String> extensions;
  /** The scheme (i.e., protocol) for this LDAP URL. */
@@ -110,7 +110,7 @@
  public LDAPURL(String scheme, String host, int port,
                 String rawBaseDN, LinkedHashSet<String> attributes,
                 SearchScope scope, String rawFilter,
                 LinkedList<String> extensions)
                 List<String> extensions)
  {
    this.host = toLowerCase(host);
@@ -193,7 +193,7 @@
   */
  public LDAPURL(String scheme, String host, int port, DN baseDN,
                 LinkedHashSet<String> attributes, SearchScope scope,
                 SearchFilter filter, LinkedList<String> extensions)
                 SearchFilter filter, List<String> extensions)
  {
    this.host = toLowerCase(host);
@@ -377,10 +377,7 @@
                         DEFAULT_SEARCH_SCOPE, DEFAULT_SEARCH_FILTER,
                         null);
    }
    else
    {
      startPos = pos;
    }
    startPos = pos;
    // The next delimiter should be a question mark.  If there isn't
@@ -1180,7 +1177,7 @@
   *
   * @return  The set of extensions for this LDAP URL.
   */
  public LinkedList<String> getExtensions()
  public List<String> getExtensions()
  {
    return extensions;
  }
opendj-server-legacy/src/main/java/org/opends/server/types/LDIFExportConfig.java
@@ -16,10 +16,16 @@
 */
package org.opends.server.types;
import org.forgerock.opendj.ldap.DN;
import org.forgerock.opendj.ldap.schema.AttributeType;
import static org.opends.messages.UtilityMessages.*;
import static org.opends.server.util.StaticUtils.*;
import java.io.*;
import java.io.BufferedWriter;
import java.io.Closeable;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
@@ -27,12 +33,10 @@
import java.util.zip.GZIPOutputStream;
import org.forgerock.i18n.LocalizableMessage;
import org.forgerock.i18n.slf4j.LocalizedLogger;
import org.forgerock.opendj.ldap.DN;
import org.forgerock.opendj.ldap.schema.AttributeType;
import org.opends.server.util.StaticUtils;
import static org.opends.messages.UtilityMessages.*;
import static org.opends.server.util.StaticUtils.*;
/**
 * This class defines a data structure for holding configuration
 * information to use when performing an LDIF export.
@@ -45,37 +49,19 @@
public final class LDIFExportConfig extends OperationConfig
  implements Closeable
{
  private static final LocalizedLogger logger = LocalizedLogger.getLoggerForThisClass();
  /** Indicates whether the data should be compressed as it is written. */
  private boolean compressData;
  /** Indicates whether the data should be encrypted as it is written. */
  private boolean encryptData;
  /**
   * Indicates whether to generate a cryptographic hash of the data as it is
   * written.
   */
  /** Indicates whether to generate a cryptographic hash of the data as it is written. */
  private boolean hashData;
  /**
   * Indicates whether to include the objectclasses in the entries written in
   * the export.
   */
  /** Indicates whether to include the objectclasses in the entries written in the export. */
  private boolean includeObjectClasses;
  /**
   * Indicates whether to include operational attributes in the export.
   */
  /** Indicates whether to include operational attributes in the export. */
  private boolean includeOperationalAttributes;
  /** Indicates whether to include virtual attributes in the export. */
  private boolean includeVirtualAttributes;
  /**
   * Indicates whether to invoke LDIF export plugins on entries being exported.
   */
  /** Indicates whether to invoke LDIF export plugins on entries being exported. */
  private boolean invokeExportPlugins;
  /**
@@ -83,52 +69,40 @@
   */
  private boolean signHash;
  /**
   * Indicates whether to include attribute types (i.e., names) only or both
   * types and values.
   */
  /** Indicates whether to include attribute types (i.e., names) only or both types and values. */
  private boolean typesOnly;
  /** The path to the LDIF file that should be written. */
  private final String ldifFile;
  /** The buffered writer to which the LDIF data should be written. */
  private BufferedWriter writer;
  /** The output stream to which the LDIF data should be written. */
  private OutputStream ldifOutputStream;
  /**
   * The behavior that should be used when writing an LDIF file and a file with
   * the same name already exists.
   */
  private ExistingFileBehavior existingFileBehavior;
  private final ExistingFileBehavior existingFileBehavior;
  /** The column number at which long lines should be wrapped. */
  private int wrapColumn;
  /** The set of base DNs to exclude from the export. */
  private List<DN> excludeBranches;
  /** The set of base DNs to include from the export. */
  private List<DN> includeBranches;
  /** The set of search filters for entries to exclude from the export. */
  private List<SearchFilter> excludeFilters;
  /** The set of search filters for entries to include in the export. */
  private List<SearchFilter> includeFilters;
  /** The output stream to which the LDIF data should be written. */
  private OutputStream ldifOutputStream;
  /**
   * The set of attribute types that should be excluded from the export.
   */
  /** The set of attribute types that should be excluded from the export. */
  private Set<AttributeType> excludeAttributes;
  /** The set of attribute types that should be included in the export. */
  private Set<AttributeType> includeAttributes;
  /** The path to the LDIF file that should be written. */
  private String ldifFile;
  /**
   * Creates a new LDIF export configuration that will write to the
   * specified LDIF file.
@@ -164,8 +138,6 @@
    wrapColumn                   = -1;
  }
  /**
   * Creates a new LDIF export configuration that will write to the
   * provided output stream.
@@ -198,8 +170,6 @@
    wrapColumn                   = -1;
  }
  /**
   * Retrieves the writer that should be used to write the LDIF data.
   * If compression or encryption are to be used, then they must be
@@ -248,13 +218,10 @@
            LocalizableMessage message = ERR_LDIF_FILE_EXISTS.get(ldifFile);
            throw new IOException(message.toString());
          }
          else
          {
            // Create new file ensuring that we can set its permissions.
            f.createNewFile();
            mustSetPermissions = true;
            ldifOutputStream = new FileOutputStream(ldifFile);
          }
          // Create new file ensuring that we can set its permissions.
          f.createNewFile();
          mustSetPermissions = true;
          ldifOutputStream = new FileOutputStream(ldifFile);
          break;
        }
@@ -275,7 +242,6 @@
        }
      }
      // See if we should compress the output.
      OutputStream outputStream;
      if (compressData)
@@ -291,7 +257,7 @@
      // See if we should encrypt the output.
      if (encryptData)
      {
        // FIXME -- Implement this.
        // FIXME -- To be implemented: See OPENDJ-448.
      }
@@ -302,8 +268,6 @@
    return writer;
  }
  /**
   * Indicates whether the LDIF export plugins should be invoked for
   * entries as they are exported.
@@ -317,8 +281,6 @@
    return invokeExportPlugins;
  }
  /**
   * Specifies whether the LDIF export plugins should be invoked for
   * entries as they are exported.
@@ -332,22 +294,6 @@
    this.invokeExportPlugins = invokeExportPlugins;
  }
  /**
   * Indicates whether the LDIF data should be compressed as it is
   * written.
   *
   * @return  <CODE>true</CODE> if the LDIF data should be compressed
   *          as it is written, or <CODE>false</CODE> if not.
   */
  public boolean compressData()
  {
    return compressData;
  }
  /**
   * Specifies whether the LDIF data should be compressed as it is
   * written.  If compression should be used, then this must be set
@@ -467,8 +413,6 @@
    return typesOnly;
  }
  /**
   * Specifies whether the LDIF generated should include attribute
   * types (i.e., attribute names) only or both attribute types and
@@ -483,8 +427,6 @@
    this.typesOnly = typesOnly;
  }
  /**
   * Retrieves the column at which long lines should be wrapped.
   *
@@ -497,8 +439,6 @@
    return wrapColumn;
  }
  /**
   * Specifies the column at which long lines should be wrapped.  A
   * value less than or equal to zero indicates that no wrapping
@@ -512,8 +452,6 @@
    this.wrapColumn = wrapColumn;
  }
  /**
   * Retrieves the set of base DNs that specify the set of entries to
   * exclude from the export.  The list that is returned may be
@@ -527,8 +465,6 @@
    return excludeBranches;
  }
  /**
   * Specifies the set of base DNs that specify the set of entries to
   * exclude from the export.
@@ -538,18 +474,16 @@
   */
  public void setExcludeBranches(List<DN> excludeBranches)
  {
    if (excludeBranches == null)
    {
      this.excludeBranches = new ArrayList<>(0);
    }
    else
    if (excludeBranches != null)
    {
      this.excludeBranches = excludeBranches;
    }
    else
    {
      this.excludeBranches = new ArrayList<>(0);
    }
  }
  /**
   * Retrieves the set of base DNs that specify the set of entries to
   * include in the export.  The list that is returned may be altered
@@ -563,8 +497,6 @@
    return includeBranches;
  }
  /**
   * Specifies the set of base DNs that specify the set of entries to
   * include in the export.
@@ -574,18 +506,16 @@
   */
  public void setIncludeBranches(List<DN> includeBranches)
  {
    if (includeBranches == null)
    {
      this.includeBranches = new ArrayList<>(0);
    }
    else
    if (includeBranches != null)
    {
      this.includeBranches = includeBranches;
    }
    else
    {
      this.includeBranches = new ArrayList<>(0);
    }
  }
  /**
   * Indicates whether the set of objectclasses should be included in
   * the entries written to LDIF.
@@ -599,8 +529,6 @@
    return includeObjectClasses;
  }
  /**
   * Indicates whether the set of operational attributes should be
   * included in the export.
@@ -613,8 +541,6 @@
    return includeOperationalAttributes;
  }
  /**
   * Specifies whether the  objectclasss attribute should be
   * included in the export.
@@ -644,8 +570,6 @@
    this.includeOperationalAttributes = includeOperationalAttributes;
  }
  /**
   * Indicates whether virtual attributes should be included in the
   * export.
@@ -658,8 +582,6 @@
    return includeVirtualAttributes;
  }
  /**
   * Specifies whether virtual attributes should be included in the
   * export.
@@ -674,8 +596,6 @@
    this.includeVirtualAttributes = includeVirtualAttributes;
  }
  /**
   * Retrieves the set of attributes that should be excluded from the
   * entries written to LDIF.  The set that is returned may be altered
@@ -689,8 +609,6 @@
    return excludeAttributes;
  }
  /**
   * Specifies the set of attributes that should be excluded from the
   * entries written to LDIF.
@@ -702,18 +620,16 @@
  public void setExcludeAttributes(
                   Set<AttributeType> excludeAttributes)
  {
    if (excludeAttributes == null)
    {
      this.excludeAttributes = new HashSet<>(0);
    }
    else
    if (excludeAttributes != null)
    {
      this.excludeAttributes = excludeAttributes;
    }
    else
    {
      this.excludeAttributes = new HashSet<>(0);
    }
  }
  /**
   * Retrieves the set of attributes that should be included in the
   * entries written to LDIF.  The set that is returned may be altered
@@ -727,8 +643,6 @@
    return includeAttributes;
  }
  /**
   * Specifies the set of attributes that should be included in the
   * entries written to LDIF.
@@ -739,18 +653,16 @@
   */
  public void setIncludeAttributes(Set<AttributeType> includeAttributes)
  {
    if (includeAttributes == null)
    {
      this.includeAttributes = new HashSet<>(0);
    }
    else
    if (includeAttributes != null)
    {
      this.includeAttributes = includeAttributes;
    }
    else
    {
      this.includeAttributes = new HashSet<>(0);
    }
  }
  /**
   * Indicates whether the specified attribute should be included in
   * the entries written to LDIF.
@@ -770,8 +682,6 @@
              || includeAttributes.contains(attributeType));
  }
  /**
   * Retrieves the set of search filters that should be used to
   * determine which entries to exclude from the LDIF.  The list that
@@ -785,8 +695,6 @@
    return excludeFilters;
  }
  /**
   * Specifies the set of search filters that should be used to
   * determine which entries to exclude from the LDIF.
@@ -797,18 +705,16 @@
   */
  public void setExcludeFilters(List<SearchFilter> excludeFilters)
  {
    if (excludeFilters == null)
    {
      this.excludeFilters = new ArrayList<>(0);
    }
    else
    if (excludeFilters != null)
    {
      this.excludeFilters = excludeFilters;
    }
    else
    {
      this.excludeFilters = new ArrayList<>(0);
    }
  }
  /**
   * Retrieves the set of search filters that should be used to
   * determine which entries to include in the LDIF.  The list that is
@@ -822,8 +728,6 @@
    return includeFilters;
  }
  /**
   * Specifies the set of search filters that should be used to
   * determine which entries to include in the LDIF.
@@ -834,18 +738,16 @@
   */
  public void setIncludeFilters(List<SearchFilter> includeFilters)
  {
    if (includeFilters == null)
    {
      this.includeFilters = new ArrayList<>(0);
    }
    else
    if (includeFilters != null)
    {
      this.includeFilters = includeFilters;
    }
    else
    {
      this.includeFilters = new ArrayList<>(0);
    }
  }
  /**
   * Indicates whether the specified entry should be included in the
   * export based on the configured set of include and exclude
@@ -914,11 +816,7 @@
    return true;
  }
  /**
   * Closes any resources that this export config might have open.
   */
  /** Closes any resources that this export config might have open. */
  @Override
  public void close()
  {
opendj-server-legacy/src/main/java/org/opends/server/types/LDIFImportConfig.java
@@ -16,16 +16,31 @@
 */
package org.opends.server.types;
import org.forgerock.opendj.ldap.DN;
import org.forgerock.opendj.ldap.schema.AttributeType;
import static org.opends.messages.UtilityMessages.*;
import java.io.*;
import java.util.*;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.Closeable;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.Reader;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Set;
import java.util.zip.GZIPInputStream;
import org.forgerock.i18n.LocalizableMessageDescriptor.Arg1;
import org.forgerock.opendj.ldap.DN;
import org.forgerock.opendj.ldap.schema.AttributeType;
import org.opends.server.tools.makeldif.MakeLDIFInputStream;
import org.opends.server.tools.makeldif.TemplateFile;
import org.opends.server.util.CollectionUtils;
@@ -77,7 +92,7 @@
  private int bufferSize = DEFAULT_BUFFER_SIZE;
  /** The iterator used to read through the set of LDIF files. */
  private Iterator<String> ldifFileIterator;
  private final Iterator<String> ldifFileIterator;
  /** The set of base DNs to exclude from the import. */
  private Set<DN> excludeBranches = new HashSet<>(0);
@@ -90,7 +105,7 @@
  private List<SearchFilter> includeFilters = new ArrayList<>(0);
  /** The set of LDIF files to be imported. */
  private List<String> ldifFiles;
  private final List<String> ldifFiles;
  /** The set of attribute types that should be excluded from the import. */
  private Set<AttributeType> excludeAttributes = new HashSet<>(0);
@@ -150,6 +165,7 @@
   */
  public LDIFImportConfig(InputStream ldifInputStream)
  {
    this(Collections.<String> emptyList());
    this.ldifInputStream   = ldifInputStream;
  }
@@ -162,6 +178,7 @@
   */
  public LDIFImportConfig(Reader ldifInputReader)
  {
    this(Collections.<String> emptyList());
    reader                 = getBufferedReader(ldifInputReader);
  }
@@ -422,26 +439,7 @@
    }
  }
  /**
   * Indicates that skipped entries should be written to the provided
   * output stream.  Note that this does not apply to entries that are
   * rejected because they are invalid (e.g., are malformed or don't
   * conform to schema requirements), but only apply to entries that
   * are skipped because they matched exclude criteria.
   *
   * @param  outputStream  The output stream to which skipped entries
   *                       should be written.
   */
  public void writeSkippedEntries(OutputStream outputStream)
  {
    if (outputStream == null)
    {
      closeSkipWriter();
      return;
    }
    skipWriter =
         new BufferedWriter(new OutputStreamWriter(outputStream));
  }
opendj-server-legacy/src/main/java/org/opends/server/types/LDIFImportResult.java
@@ -16,8 +16,6 @@
 */
package org.opends.server.types;
/**
 * This class defines a data structure for providing information about
 * the state of a completed LDIF import, including the total number of
@@ -32,10 +30,8 @@
{
  /** The total number of entries read during the import. */
  private final long entriesRead;
  /** The total number of entries rejected during the import. */
  private final long entriesRejected;
  /** The total number of entries skipped during the import. */
  private final long entriesSkipped;
@@ -139,7 +135,7 @@
   * @param  buffer  The buffer to which the information should be
   *                 appended.
   */
  public void toString(StringBuilder buffer)
  private void toString(StringBuilder buffer)
  {
    buffer.append("LDIFImportResult(entriesRead=");
    buffer.append(entriesRead);
@@ -150,4 +146,3 @@
    buffer.append(")");
  }
}
opendj-server-legacy/src/main/java/org/opends/server/types/LockManager.java
@@ -103,9 +103,7 @@
    mayInstantiate = false, mayExtend = false, mayInvoke = true)
public final class LockManager
{
  /**
   * A lock on an entry or subtree. A lock can only be unlocked once.
   */
  /** A lock on an entry or subtree. A lock can only be unlocked once. */
  public final class DNLock
  {
    private final DNLockHolder lock;
@@ -145,16 +143,14 @@
      isLocked = false;
    }
    // For unit testing.
    /** For unit testing. */
    int refCount()
    {
      return lock.refCount.get();
    }
  }
  /**
   * Lock implementation
   */
  /** Lock implementation. */
  private final class DNLockHolder
  {
    private final AtomicInteger refCount = new AtomicInteger();
@@ -177,9 +173,7 @@
      return "\"" + dn + "\" : " + refCount;
    }
    /**
     * Unlocks the subtree read lock from the parent of this lock up to the root.
     */
    /** Unlocks the subtree read lock from the parent of this lock up to the root. */
    void releaseParentSubtreeReadLock()
    {
      for (DNLockHolder lock = parent; lock != null; lock = lock.parent)
@@ -203,9 +197,7 @@
      return tryLock(subtreeLock.writeLock(), entryLock.writeLock());
    }
    /**
     * Locks the subtree read lock from the root down to the parent of this lock.
     */
    /** Locks the subtree read lock from the root down to the parent of this lock. */
    private boolean tryAcquireParentSubtreeReadLock()
    {
      // First lock the parents of the parent.
@@ -274,7 +266,7 @@
  private final long lockTimeout;
  private final TimeUnit lockTimeoutUnits;
  // Avoid sub-classing in order to workaround class leaks in app servers.
  /** Avoid sub-classing in order to workaround class leaks in app servers. */
  private final ThreadLocal<LinkedList<DNLockHolder>> threadLocalCache = new ThreadLocal<>();
  /**
@@ -311,7 +303,7 @@
   *          The number of buckets to use in the lock table. The minimum number of buckets is 64.
   */
  @SuppressWarnings("unchecked")
  public LockManager(final long lockTimeout, final TimeUnit lockTimeoutUnit, final int numberOfBuckets)
  private LockManager(final long lockTimeout, final TimeUnit lockTimeoutUnit, final int numberOfBuckets)
  {
    Reject.ifFalse(lockTimeout >= 0, "lockTimeout must be a non-negative integer");
    Reject.ifNull(lockTimeoutUnit, "lockTimeoutUnit must be non-null");
@@ -386,7 +378,7 @@
    return acquireLockFromCache(subtree).tryWriteLockSubtree();
  }
  // For unit testing.
  /** For unit testing. */
  int getLockTableRefCountFor(final DN dn)
  {
    final int dnHashCode = dn.hashCode();
@@ -404,7 +396,7 @@
    }
  }
  //For unit testing.
  /** For unit testing. */
  int getThreadLocalCacheRefCountFor(final DN dn)
  {
    final LinkedList<DNLockHolder> cache = threadLocalCache.get();
@@ -522,7 +514,7 @@
    return lockTable[dnHashCode & numberOfBuckets - 1];
  }
  /*
  /**
   * Ensure that the number of buckets is a power of 2 in order to make it easier to map hash codes
   * to bucket indexes.
   */
opendj-server-legacy/src/main/java/org/opends/server/types/Modification.java
@@ -12,7 +12,7 @@
 * information: "Portions Copyright [year] [name of copyright owner]".
 *
 * Copyright 2006-2008 Sun Microsystems, Inc.
 * Portions Copyright 2014-2015 ForgeRock AS.
 * Portions Copyright 2014-2016 ForgeRock AS.
 */
package org.opends.server.types;
@@ -197,7 +197,7 @@
   *
   * @param  buffer  The buffer to which the information should be appended.
   */
  public void toString(StringBuilder buffer)
  private void toString(StringBuilder buffer)
  {
    buffer.append("Modification(").append(modificationType).append(", ").append(attribute);
  }
opendj-server-legacy/src/main/java/org/opends/server/types/NamedCharacterSet.java
@@ -12,24 +12,20 @@
 * information: "Portions Copyright [year] [name of copyright owner]".
 *
 * Copyright 2006-2008 Sun Microsystems, Inc.
 * Portions Copyright 2014-2015 ForgeRock AS.
 * Portions Copyright 2014-2016 ForgeRock AS.
 */
package org.opends.server.types;
import org.forgerock.i18n.LocalizableMessage;
import java.security.SecureRandom;
import java.util.Random;
import java.util.SortedSet;
import org.forgerock.i18n.LocalizableMessage;
import org.forgerock.opendj.config.server.ConfigException;
import static org.opends.messages.UtilityMessages.*;
import static org.opends.server.util.StaticUtils.*;
/**
 * This class provides a data structure that makes it possible to
 * associate a name with a given set of characters.  The name must
@@ -44,10 +40,8 @@
{
  /** The characters contained in this character set. */
  private final char[] characters;
  /** The random number generator to use with this character set. */
  private final Random random;
  /** The name assigned to this character set. */
  private final String name;
@@ -63,7 +57,7 @@
   * @throws  ConfigException  If the provided name contains one or
   *                           more illegal characters.
   */
  public NamedCharacterSet(String name, char[] characters)
  private NamedCharacterSet(String name, char[] characters)
         throws ConfigException
  {
    this(name, characters, new SecureRandom());
@@ -83,7 +77,7 @@
   * @throws  ConfigException  If the provided name contains one or
   *                           more illegal characters.
   */
  public NamedCharacterSet(String name, char[] characters,
  private NamedCharacterSet(String name, char[] characters,
                           Random random)
         throws ConfigException
  {
@@ -172,22 +166,6 @@
    }
  }
  /**
   * Encodes this character set to a form suitable for use in the
   * value of a configuration attribute.
   *
   * @return  The encoded character set in a form suitable for use in
   *          the value of a configuration attribute.
   */
  public String encode()
  {
    return name + ":" + new String(characters);
  }
  /**
   * Decodes the values of the provided configuration attribute as a
   * set of character set definitions.
opendj-server-legacy/src/main/java/org/opends/server/types/SubEntry.java
@@ -41,7 +41,7 @@
   * that already contain one or more real values for the associated
   * collective attribute.
   */
  public static enum CollectiveConflictBehavior {
  public enum CollectiveConflictBehavior {
    /**
     * Indicates that the virtual attribute provider is to preserve
     * any real values contained in the entry and merge them with the
@@ -83,34 +83,34 @@
  }
  /** The lowercased name of the "collectiveConflictBehavior" attribute type. */
  public static final String ATTR_COLLECTIVE_CONFLICT_BEHAVIOR_LC = "collectiveconflictbehavior";
  private static final String ATTR_COLLECTIVE_CONFLICT_BEHAVIOR_LC = "collectiveconflictbehavior";
  /** The lowercased name of the "inheritFromDNAttribute" attribute type. */
  public static final String ATTR_INHERIT_COLLECTIVE_FROM_DN_LC = "inheritfromdnattribute";
  private static final String ATTR_INHERIT_COLLECTIVE_FROM_DN_LC = "inheritfromdnattribute";
  /** The lowercased name of the "inheritFromRDNAttribute" attribute type. */
  public static final String ATTR_INHERIT_COLLECTIVE_FROM_RDN_LC = "inheritfromrdnattribute";
  private static final String ATTR_INHERIT_COLLECTIVE_FROM_RDN_LC = "inheritfromrdnattribute";
  /** The lowercased name of the "inheritFromRDNType" attribute type. */
  public static final String ATTR_INHERIT_COLLECTIVE_FROM_RDN_TYPE_LC = "inheritfromrdntype";
  private static final String ATTR_INHERIT_COLLECTIVE_FROM_RDN_TYPE_LC = "inheritfromrdntype";
  /** The lowercased name of the "inheritFromBaseRDN" attribute type. */
  public static final String ATTR_INHERIT_COLLECTIVE_FROM_BASE_LC = "inheritfrombaserdn";
  private static final String ATTR_INHERIT_COLLECTIVE_FROM_BASE_LC = "inheritfrombaserdn";
  /** The lowercased name of the "inheritAttribute" attribute type. */
  public static final String ATTR_INHERIT_COLLECTIVE_ATTR_LC = "inheritattribute";
  private static final String ATTR_INHERIT_COLLECTIVE_ATTR_LC = "inheritattribute";
  /** Attribute option to mark attributes collective. */
  private static final String ATTR_OPTION_COLLECTIVE = "collective";
  /** Entry object. */
  private Entry entry;
  private final Entry entry;
  /** Subtree specification. */
  private final SubtreeSpecification subTreeSpec;
  /** Collective subentry flag. */
  private boolean isCollective;
  private final boolean isCollective;
  /** Inherited collective subentry flag. */
  private boolean isInheritedCollective;
  private final boolean isInheritedCollective;
  /** Inherited collective from DN subentry flag. */
  private boolean isInheritedFromDNCollective;
  private final boolean isInheritedFromDNCollective;
  /** Inherited collective from RDN subentry flag. */
  private boolean isInheritedFromRDNCollective;
  private final boolean isInheritedFromRDNCollective;
  /** Inherited collective DN attribute type. */
  private AttributeType inheritFromDNType;
@@ -118,7 +118,6 @@
  private AttributeType inheritFromRDNAttrType;
  /** Inherited collective RDN type attribute type. */
  private AttributeType inheritFromRDNType;
  /** Inherited collective RDN attribute value. */
  private ByteString inheritFromRDNAttrValue;
  /** Inherited collective from DN value. */
@@ -152,6 +151,11 @@
      this.isInheritedFromDNCollective = entry.isInheritedFromDNCollectiveAttributeSubentry();
      this.isInheritedFromRDNCollective = entry.isInheritedFromRDNCollectiveAttributeSubentry();
    }
    else
    {
      this.isInheritedFromDNCollective = false;
      this.isInheritedFromRDNCollective = false;
    }
    // Process collective attributes.
    if (this.isCollective)
opendj-server-legacy/src/main/java/org/opends/server/types/SubtreeSpecification.java
@@ -68,7 +68,7 @@
   * refinement filters entries based on all of the underlying
   * refinements being <code>true</code>.
   */
  public static final class AndRefinement extends Refinement
  private static final class AndRefinement extends Refinement
  {
    /** The set of refinements which must all be true. */
    private final Collection<Refinement> refinementSet;
@@ -80,7 +80,7 @@
     *          The set of refinements which must all be
     *          <code>true</code>.
     */
    public AndRefinement(final Collection<Refinement> refinementSet)
    private AndRefinement(final Collection<Refinement> refinementSet)
    {
      this.refinementSet = refinementSet;
    }
@@ -165,7 +165,7 @@
     * @param filter
     *          The search filter.
     */
    public FilterRefinement(final SearchFilter filter)
    private FilterRefinement(final SearchFilter filter)
    {
      this.filter = filter;
    }
@@ -221,7 +221,7 @@
   * refinement filters entries based on the presence of a specified
   * object class.
   */
  public static final class ItemRefinement extends Refinement
  private static final class ItemRefinement extends Refinement
  {
    /** The item's object class. */
    private final String objectClass;
@@ -235,7 +235,7 @@
     * @param objectClass
     *          The item's object class.
     */
    public ItemRefinement(final String objectClass)
    private ItemRefinement(final String objectClass)
    {
      this.objectClass = objectClass;
      this.normalizedObjectClass = StaticUtils
@@ -289,7 +289,7 @@
   * being <code>false</code>
   * .
   */
  public static final class NotRefinement extends Refinement
  private static final class NotRefinement extends Refinement
  {
    /** The inverted refinement. */
    private final Refinement refinement;
@@ -300,7 +300,7 @@
     * @param refinement
     *          The refinement which must be <code>false</code>.
     */
    public NotRefinement(final Refinement refinement)
    private NotRefinement(final Refinement refinement)
    {
      this.refinement = refinement;
    }
@@ -348,7 +348,7 @@
   * refinement filters entries based on at least one of the
   * underlying refinements being <code>true</code>.
   */
  public static final class OrRefinement extends Refinement
  private static final class OrRefinement extends Refinement
  {
    /** The set of refinements of which at least one must be true. */
    private final Collection<Refinement> refinementSet;
@@ -360,7 +360,7 @@
     *          The set of refinements of which at least one must be
     *          <code>true</code>.
     */
    public OrRefinement(final Collection<Refinement> refinementSet)
    private OrRefinement(final Collection<Refinement> refinementSet)
    {
      this.refinementSet = refinementSet;
    }
@@ -434,7 +434,7 @@
  }
  /** Abstract interface for RFC3672 specification filter refinements. */
  public static abstract class Refinement
  private static abstract class Refinement
  {
    /** Create a new RFC3672 specification filter refinement. */
    protected Refinement()
@@ -481,39 +481,39 @@
   * Internal utility class which can be used by sub-classes to help
   * parse string representations.
   */
  protected static final class Parser
  private static final class Parser
  {
    /** Text scanner used to parse the string value. */
    private final Scanner scanner;
    /** Pattern used to detect left braces. */
    private static Pattern LBRACE = Pattern.compile("\\{.*");
    private static final Pattern LBRACE = Pattern.compile("\\{.*");
    /** Pattern used to parse left braces. */
    private static Pattern LBRACE_TOKEN = Pattern.compile("\\{");
    private static final Pattern LBRACE_TOKEN = Pattern.compile("\\{");
    /** Pattern used to detect right braces. */
    private static Pattern RBRACE = Pattern.compile("\\}.*");
    private static final Pattern RBRACE = Pattern.compile("\\}.*");
    /** Pattern used to parse right braces. */
    private static Pattern RBRACE_TOKEN = Pattern.compile("\\}");
    private static final Pattern RBRACE_TOKEN = Pattern.compile("\\}");
    /** Pattern used to detect comma separators. */
    private static Pattern SEP = Pattern.compile(",.*");
    private static final Pattern SEP = Pattern.compile(",.*");
    /** Pattern used to parse comma separators. */
    private static Pattern SEP_TOKEN = Pattern.compile(",");
    private static final Pattern SEP_TOKEN = Pattern.compile(",");
    /** Pattern used to detect colon separators. */
    private static Pattern COLON = Pattern.compile(":.*");
    private static final Pattern COLON = Pattern.compile(":.*");
    /** Pattern used to parse colon separators. */
    private static Pattern COLON_TOKEN = Pattern.compile(":");
    private static final Pattern COLON_TOKEN = Pattern.compile(":");
    /** Pattern used to detect integer values. */
    private static Pattern INT = Pattern.compile("\\d.*");
    private static final Pattern INT = Pattern.compile("\\d.*");
    /** Pattern used to parse integer values. */
    private static Pattern INT_TOKEN = Pattern.compile("\\d+");
    private static final Pattern INT_TOKEN = Pattern.compile("\\d+");
    /** Pattern used to detect name values. */
    private static Pattern NAME = Pattern.compile("[\\w_;-].*");
    private static final Pattern NAME = Pattern.compile("[\\w_;-].*");
    /** Pattern used to parse name values. */
    private static Pattern NAME_TOKEN = Pattern.compile("[\\w_;-]+");
    private static final Pattern NAME_TOKEN = Pattern.compile("[\\w_;-]+");
    /** Pattern used to detect RFC3641 string values. */
    private static Pattern STRING_VALUE = Pattern.compile("\".*");
    private static final Pattern STRING_VALUE = Pattern.compile("\".*");
    /** Pattern used to parse RFC3641 string values. */
    private static Pattern STRING_VALUE_TOKEN = Pattern
    private static final Pattern STRING_VALUE_TOKEN = Pattern
        .compile("\"([^\"]|(\"\"))*\"");
    /**
@@ -522,7 +522,7 @@
     * @param value
     *          The subtree specification string value.
     */
    public Parser(final String value)
    private Parser(final String value)
    {
      this.scanner = new Scanner(value);
    }
@@ -533,7 +533,7 @@
     * @return <code>true</code> if and only if there are remaining
     *         tokens.
     */
    public boolean hasNext()
    private boolean hasNext()
    {
      return scanner.hasNext();
    }
@@ -544,7 +544,7 @@
     * @return <code>true</code> if and only if the next token is a
     *         valid right brace character.
     */
    public boolean hasNextRightBrace()
    private boolean hasNextRightBrace()
    {
      return scanner.hasNext(RBRACE);
    }
@@ -560,7 +560,7 @@
     * @throws NoSuchElementException
     *           If input is exhausted.
     */
    public int nextInt() throws InputMismatchException,
    private int nextInt() throws InputMismatchException,
        NoSuchElementException
    {
      final String s = nextValue(INT, INT_TOKEN);
@@ -576,7 +576,7 @@
     * @throws NoSuchElementException
     *           If input is exhausted.
     */
    public String nextKey() throws InputMismatchException,
    private String nextKey() throws InputMismatchException,
        NoSuchElementException
    {
      return StaticUtils.toLowerCase(scanner.next());
@@ -594,7 +594,7 @@
     * @throws NoSuchElementException
     *           If input is exhausted.
     */
    public String nextName() throws InputMismatchException,
    private String nextName() throws InputMismatchException,
        NoSuchElementException
    {
      return nextValue(NAME, NAME_TOKEN);
@@ -617,7 +617,7 @@
     *           If an error occurred when attempting to parse a
     *           DN value.
     */
    public void nextSpecificExclusions(final Set<DN> chopBefore,
    private void nextSpecificExclusions(final Set<DN> chopBefore,
        final Set<DN> chopAfter) throws InputMismatchException,
        NoSuchElementException, DirectoryException
    {
@@ -678,7 +678,7 @@
     * @throws NoSuchElementException
     *           If input is exhausted.
     */
    public String nextStringValue() throws InputMismatchException,
    private String nextStringValue() throws InputMismatchException,
        NoSuchElementException
    {
      final String s = nextValue(STRING_VALUE, STRING_VALUE_TOKEN);
@@ -693,7 +693,7 @@
     * @throws NoSuchElementException
     *           If input is exhausted.
     */
    public void skipColon() throws InputMismatchException,
    private void skipColon() throws InputMismatchException,
        NoSuchElementException
    {
      nextValue(COLON, COLON_TOKEN);
@@ -707,7 +707,7 @@
     * @throws NoSuchElementException
     *           If input is exhausted.
     */
    public void skipLeftBrace() throws InputMismatchException,
    private void skipLeftBrace() throws InputMismatchException,
        NoSuchElementException
    {
      nextValue(LBRACE, LBRACE_TOKEN);
@@ -721,7 +721,7 @@
     * @throws NoSuchElementException
     *           If input is exhausted.
     */
    public void skipRightBrace() throws InputMismatchException,
    private void skipRightBrace() throws InputMismatchException,
        NoSuchElementException
    {
      nextValue(RBRACE, RBRACE_TOKEN);
@@ -735,7 +735,7 @@
     * @throws NoSuchElementException
     *           If input is exhausted.
     */
    public void skipSeparator() throws InputMismatchException,
    private void skipSeparator() throws InputMismatchException,
        NoSuchElementException
    {
      nextValue(SEP, SEP_TOKEN);
@@ -1038,13 +1038,11 @@
  /** Optional set of chop before absolute DNs (mapping to their local-names). */
  private final Map<DN, DN> chopBefore;
  /** Optional set of chop after absolute DNs (mapping to their local-names). */
  private final Map<DN, DN> chopAfter;
  /** The root DN. */
  private final DN rootDN;
  /** The optional relative base DN. */
  private final DN relativeBaseDN;
opendj-server-legacy/src/main/java/org/opends/server/types/VirtualAttributeRule.java
@@ -25,9 +25,9 @@
import org.forgerock.opendj.ldap.DN;
import org.forgerock.opendj.ldap.SearchScope;
import org.forgerock.opendj.ldap.schema.AttributeType;
import org.forgerock.util.Utils;
import org.forgerock.opendj.server.config.meta.VirtualAttributeCfgDefn;
import org.forgerock.opendj.server.config.server.VirtualAttributeCfg;
import org.forgerock.util.Utils;
import org.opends.server.api.Group;
import org.opends.server.api.VirtualAttributeProvider;
import org.opends.server.core.DirectoryServer;
@@ -208,34 +208,14 @@
    // potentially most expensive are done last.  First, check to see
    // if real values should override virtual ones and if so whether
    // the entry already has virtual values.
    if (conflictBehavior == VirtualAttributeCfgDefn.ConflictBehavior.
                                REAL_OVERRIDES_VIRTUAL
        && entry.hasAttribute(attributeType))
    {
      return false;
    }
    // If there are any base DNs defined, then the entry must be below one of them.
    if (!baseDNs.isEmpty() && !matchesAnyBaseDN(entry.getName()))
    {
      return false;
    }
    // If there are any search filters defined, then the entry must match one of them.
    if (!filters.isEmpty() && !matchesAnyFilter(entry))
    {
      return false;
    }
    // If there are any group memberships defined, then the entry must
    // be a member of one of them.
    if (!groupDNs.isEmpty() && !isMemberOfAnyGroup(entry))
    {
      return false;
    }
    // If we've gotten here, then the rule is applicable.
    return true;
    return (conflictBehavior != VirtualAttributeCfgDefn.ConflictBehavior.REAL_OVERRIDES_VIRTUAL
            || !entry.hasAttribute(attributeType))
        // If there are any base DNs defined, then the entry must be below one of them.
        && (baseDNs.isEmpty() || matchesAnyBaseDN(entry.getName()))
        // If there are any search filters defined, then the entry must match one of them.
        && (filters.isEmpty() || matchesAnyFilter(entry))
        // If there are any group memberships defined, then the entry must be a member of one of them.
        && (groupDNs.isEmpty() || isMemberOfAnyGroup(entry));
  }
  private boolean matchesAnyBaseDN(DN entryDN)
@@ -303,7 +283,7 @@
   *
   * @param  buffer  The buffer to which the information should be written.
   */
  public void toString(StringBuilder buffer)
  private void toString(StringBuilder buffer)
  {
    buffer.append("VirtualAttributeRule(attrType=");
    buffer.append(attributeType.getNameOrOID());
opendj-server-legacy/src/main/java/org/opends/server/util/BackupManager.java
@@ -82,9 +82,7 @@
{
  private static final LocalizedLogger logger = LocalizedLogger.getLoggerForThisClass();
  /**
   * The common prefix for archive files.
   */
  /** The common prefix for archive files. */
  private static final String BACKUP_BASE_FILENAME = "backup-";
  /**
@@ -99,7 +97,6 @@
   */
  private static final String PROPERTY_LAST_LOGFILE_SIZE = "last_logfile_size";
  /**
   * The name of the entry in an incremental backup archive file
   * containing a list of log files that are unchanged since the
@@ -113,10 +110,7 @@
   */
  private static final String ZIPENTRY_EMPTY_PLACEHOLDER = "empty.placeholder";
  /**
   * The backend ID.
   */
  /** The backend ID. */
  private final String backendID;
  /**
@@ -258,13 +252,11 @@
        throw new DirectoryException(DirectoryServer.getServerErrorResultCode(), message, e);
      }
    }
  }
  /** Represents the cryptographic engine with no hash used for a backup. */
  private static final class NoHashCryptoEngine extends CryptoEngine
  {
    NoHashCryptoEngine(boolean shouldEncrypt)
    {
      super(shouldEncrypt);
@@ -294,12 +286,9 @@
      // check never fails because bytes are always null
      return null;
    }
  }
  /**
   * Represents the cryptographic engine with signed hash.
   */
  /** Represents the cryptographic engine with signed hash. */
  private static final class MacCryptoEngine extends CryptoEngine
  {
    private Mac mac;
@@ -328,7 +317,7 @@
    private MacCryptoEngine(BackupInfo backupInfo) throws DirectoryException
    {
      super(backupInfo.isEncrypted());
      HashMap<String,String> backupProperties = backupInfo.getBackupProperties();
      Map<String, String> backupProperties = backupInfo.getBackupProperties();
      String macKeyID = backupProperties.get(BACKUP_PROPERTY_MAC_KEY_ID);
      retrieveMacEngine(macKeyID);
    }
@@ -346,14 +335,12 @@
      }
    }
    /** {@inheritDoc} */
    @Override
    void updateHashWith(String s)
    {
      mac.update(getBytes(s));
    }
    /** {@inheritDoc} */
    @Override
    void updateHashWith(byte[] buffer, int offset, int len)
    {
@@ -383,7 +370,6 @@
    {
      return "MacCryptoEngine [mac=" + mac + "]";
    }
  }
  /** Represents the cryptographic engine with unsigned hash used for a backup. */
@@ -404,7 +390,7 @@
    private DigestCryptoEngine(BackupInfo backupInfo) throws DirectoryException
    {
      super(backupInfo.isEncrypted());
      HashMap<String, String> backupProperties = backupInfo.getBackupProperties();
      Map<String, String> backupProperties = backupInfo.getBackupProperties();
      String digestAlgorithm = backupProperties.get(BACKUP_PROPERTY_DIGEST_ALGORITHM);
      digest = retrieveMessageDigest(digestAlgorithm);
    }
@@ -423,28 +409,24 @@
      }
    }
    /** {@inheritDoc} */
    @Override
    public void updateHashWith(String s)
    {
      digest.update(getBytes(s));
    }
    /** {@inheritDoc} */
    @Override
    public void updateHashWith(byte[] buffer, int offset, int len)
    {
      digest.update(buffer, offset, len);
    }
    /** {@inheritDoc} */
    @Override
    public byte[] generateBytes()
    {
      return digest.digest();
    }
    /** {@inheritDoc} */
    @Override
    LocalizableMessage getErrorMessageForCheck(String backupID)
    {
@@ -456,12 +438,9 @@
    {
      return "DigestCryptoEngine [digest=" + digest + "]";
    }
  }
  /**
   * Contains all parameters for creation of a new backup.
   */
  /** Contains all parameters for creation of a new backup. */
  private static final class NewBackupParams
  {
    final String backupID;
@@ -520,12 +499,10 @@
    {
      return "BackupCreationParams [backupID=" + backupID + ", backupDir=" + backupDir.getPath() + "]";
    }
  }
  /** Represents a new backup archive. */
  private static final class NewBackupArchive {
    private final String archiveFilename;
    private String latestFileName;
@@ -545,7 +522,7 @@
      dependencies = new HashSet<>();
      if (backupParams.isIncremental)
      {
        HashMap<String,String> properties = backupParams.baseBackupInfo.getBackupProperties();
        Map<String, String> properties = backupParams.baseBackupInfo.getBackupProperties();
        latestFileName = properties.get(PROPERTY_LAST_LOGFILE_NAME);
        latestFileSize = Long.parseLong(properties.get(PROPERTY_LAST_LOGFILE_SIZE));
      }
@@ -613,12 +590,10 @@
      return "NewArchive [archive file=" + archiveFilename + ", latestFileName=" + latestFileName
          + ", backendID=" + backendID + "]";
    }
  }
  /** Represents an existing backup archive. */
  private static final class ExistingBackupArchive {
    private final String backupID;
    private final BackupDirectory backupDir;
    private final BackupInfo backupInfo;
@@ -700,12 +675,10 @@
      return archiveFile.delete();
    }
  }
  /** Represents a writer of a backup archive. */
  private static final class BackupArchiveWriter implements Closeable {
    private final ZipOutputStream zipOutputStream;
    private final NewBackupArchive archive;
    private final CryptoEngine cryptoEngine;
@@ -745,10 +718,8 @@
      cryptoMethod.updateHashWith(relativePath);
      InputStream inputStream = null;
      long totalBytesRead = 0;
      try {
        inputStream = new FileInputStream(file.toFile());
      try (InputStream inputStream = new FileInputStream(file.toFile())) {
        byte[] buffer = new byte[8192];
        int bytesRead = inputStream.read(buffer);
        while (bytesRead > 0 && !backupConfig.isCancelled())
@@ -759,9 +730,6 @@
          bytesRead = inputStream.read(buffer);
        }
      }
      finally {
        StaticUtils.close(inputStream);
      }
      zipOutputStream.closeEntry();
      logger.info(NOTE_BACKUP_ARCHIVED_FILE, zipEntry.getName());
@@ -824,7 +792,6 @@
     * <p>
     * The unchanged files names are listed in the "unchanged.txt" file, which
     * is put in the archive.
     *
     */
    void writeUnchangedFiles(Path rootDirectory, ListIterator<Path> files, BackupConfig backupConfig)
        throws DirectoryException
@@ -869,9 +836,7 @@
      archive.addBaseBackupAsDependency();
    }
    /**
     * Writes the new files in the archive.
     */
    /** Writes the new files in the archive. */
    void writeChangedFiles(Path rootDirectory, ListIterator<Path> files, BackupConfig backupConfig)
        throws DirectoryException
    {
@@ -957,12 +922,10 @@
      return "BackupArchiveWriter [archive file=" + archive.getArchiveFilename() + ", backendId="
          + archive.getBackendID() + "]";
    }
  }
  /** Represents a reader of a backup archive. */
  private static final class BackupArchiveReader {
    private final CryptoEngine cryptoEngine;
    private final File archiveFile;
    private final String identifier;
@@ -998,10 +961,8 @@
    Set<String> readUnchangedDependentFiles() throws DirectoryException
    {
      Set<String> hashSet = new HashSet<>();
      ZipInputStream zipStream = null;
      try
      try (ZipInputStream zipStream = openZipStream())
      {
        zipStream = openZipStream();
        // Iterate through the entries in the zip file.
        ZipEntry zipEntry = zipStream.getNextEntry();
@@ -1023,9 +984,6 @@
        throw new DirectoryException(DirectoryServer.getServerErrorResultCode(), ERR_BACKUP_CANNOT_RESTORE.get(
            identifier, stackTraceToSingleLineString(e)), e);
      }
      finally {
        StaticUtils.close(zipStream);
      }
    }
    /**
@@ -1046,7 +1004,7 @@
    {
      try
      {
        restoreArchive0(restoreDir, filesToRestore, restoreConfig, backupable);
        restoreArchive0(restoreDir, filesToRestore, restoreConfig);
      }
      catch (IOException e)
      {
@@ -1060,13 +1018,11 @@
      cryptoEngine.check(hash, backupInfo.getBackupID());
    }
    private void restoreArchive0(Path restoreDir, Set<String> filesToRestore, RestoreConfig restoreConfig,
        Backupable backupable) throws DirectoryException, IOException {
      ZipInputStream zipStream = null;
      try {
          zipStream = openZipStream();
    private void restoreArchive0(Path restoreDir, Set<String> filesToRestore, RestoreConfig restoreConfig)
        throws DirectoryException, IOException
    {
      try (ZipInputStream zipStream = openZipStream())
      {
          ZipEntry zipEntry = zipStream.getNextEntry();
          while (zipEntry != null && !restoreConfig.isCancelled())
          {
@@ -1093,9 +1049,6 @@
            zipEntry = zipStream.getNextEntry();
          }
      }
      finally {
        StaticUtils.close(zipStream);
      }
    }
    /**
@@ -1127,9 +1080,7 @@
      return Pair.of(false, null);
    }
    /**
     * Restores a zip entry virtually (no actual write on disk).
     */
    /** Restores a zip entry virtually (no actual write on disk). */
    private void restoreZipEntryVirtual(String zipEntryName, ZipInputStream zipStream, RestoreConfig restoreConfig)
            throws FileNotFoundException, IOException
    {
@@ -1141,27 +1092,19 @@
      restoreFile(zipStream, null, restoreConfig);
    }
    /**
     * Restores a zip entry with actual write on disk.
     */
    /** Restores a zip entry with actual write on disk. */
    private void restoreZipEntry(String zipEntryName, ZipInputStream zipStream, Path restoreDir,
        RestoreConfig restoreConfig) throws IOException, DirectoryException
    {
      OutputStream outputStream = null;
      long totalBytesRead = 0;
      try
      Path fileToRestore = restoreDir.resolve(zipEntryName);
      ensureFileCanBeRestored(fileToRestore);
      try (OutputStream outputStream = new FileOutputStream(fileToRestore.toFile()))
      {
        Path fileToRestore = restoreDir.resolve(zipEntryName);
        ensureFileCanBeRestored(fileToRestore);
        outputStream = new FileOutputStream(fileToRestore.toFile());
        cryptoEngine.updateHashWith(zipEntryName);
        totalBytesRead = restoreFile(zipStream, outputStream, restoreConfig);
        long totalBytesRead = restoreFile(zipStream, outputStream, restoreConfig);
        logger.info(NOTE_BACKUP_RESTORED_FILE, zipEntryName, totalBytesRead);
      }
      finally
      {
        StaticUtils.close(outputStream);
      }
    }
    private void ensureFileCanBeRestored(Path fileToRestore) throws DirectoryException
@@ -1265,13 +1208,10 @@
    final CryptoEngine cryptoEngine = CryptoEngine.forCreation(backupConfig, backupParams);
    final NewBackupArchive newArchive = new NewBackupArchive(backendID, backupParams, cryptoEngine);
    BackupArchiveWriter archiveWriter = null;
    try
    final ListIterator<Path> files = backupable.getFilesToBackup();
    final Path rootDirectory = backupable.getDirectory().toPath();
    try (BackupArchiveWriter archiveWriter = new BackupArchiveWriter(newArchive))
    {
      final ListIterator<Path> files = backupable.getFilesToBackup();
      final Path rootDirectory = backupable.getDirectory().toPath();
      archiveWriter = new BackupArchiveWriter(newArchive);
      if (files.hasNext())
      {
        if (backupParams.isIncremental) {
@@ -1283,9 +1223,11 @@
        archiveWriter.writeEmptyPlaceHolder();
      }
    }
    finally
    catch (IOException e)
    {
      closeArchiveWriter(archiveWriter, newArchive.getArchiveFilename(), backupParams.backupDir.getPath());
      logger.traceException(e);
      throw new DirectoryException(DirectoryServer.getServerErrorResultCode(), ERR_BACKUP_CANNOT_CLOSE_ZIP_STREAM.get(
          newArchive.getArchiveFilename(), backupParams.backupDir.getPath(), stackTraceToSingleLineString(e)), e);
    }
    newArchive.updateBackupDirectory();
@@ -1617,5 +1559,4 @@
    }
    return highestNumber;
  }
}
opendj-server-legacy/src/main/java/org/opends/server/util/BuildVersion.java
@@ -152,7 +152,7 @@
   * @param point
   *          Point release version number.
   */
  public BuildVersion(final int major, final int minor, final int point)
  private BuildVersion(final int major, final int minor, final int point)
  {
    this(major, minor, point, "");
  }
@@ -169,7 +169,7 @@
   * @param rev
   *          VCS revision.
   */
  public BuildVersion(final int major, final int minor, final int point, final String rev)
  private BuildVersion(final int major, final int minor, final int point, final String rev)
  {
    this.major = major;
    this.minor = minor;
opendj-server-legacy/src/main/java/org/opends/server/util/EMailMessage.java
@@ -19,6 +19,13 @@
import static com.forgerock.opendj.cli.CommonArguments.*;
import static org.opends.messages.ToolMessages.*;
import static org.opends.messages.UtilityMessages.*;
import static org.opends.server.util.ServerConstants.*;
import static org.opends.server.util.StaticUtils.*;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
@@ -41,21 +48,14 @@
import org.forgerock.i18n.LocalizableMessage;
import org.forgerock.i18n.LocalizableMessageBuilder;
import org.opends.server.core.DirectoryServer;
import org.forgerock.i18n.slf4j.LocalizedLogger;
import org.opends.server.core.DirectoryServer;
import com.forgerock.opendj.cli.ArgumentException;
import com.forgerock.opendj.cli.ArgumentParser;
import com.forgerock.opendj.cli.BooleanArgument;
import com.forgerock.opendj.cli.StringArgument;
import static org.opends.messages.ToolMessages.*;
import static org.opends.messages.UtilityMessages.*;
import static org.opends.server.util.ServerConstants.*;
import static org.opends.server.util.StaticUtils.*;
import static com.forgerock.opendj.cli.CommonArguments.*;
/**
@@ -77,7 +77,7 @@
  private List<String> recipients;
  /** The set of attachments to include in this message. */
  private LinkedList<MimeBodyPart> attachments;
  private final List<MimeBodyPart> attachments;
  /** The MIME type for the message body. */
  private String bodyMIMEType;
@@ -91,29 +91,6 @@
  /** The body for the mail message. */
  private LocalizableMessageBuilder body;
  /**
   * Creates a new e-mail message with the provided information.
   *
   * @param  sender     The address of the sender for the message.
   * @param  recipient  The address of the recipient for the message.
   * @param  subject    The subject to use for the message.
   */
  public EMailMessage(String sender, String recipient, String subject)
  {
    this.sender  = sender;
    this.subject = subject;
    recipients = CollectionUtils.newArrayList(recipient);
    body         = new LocalizableMessageBuilder();
    attachments  = new LinkedList<>();
    bodyMIMEType = "text/plain";
  }
  /**
   * Creates a new e-mail message with the provided information.
   *
@@ -294,7 +271,7 @@
   *
   * @return  The set of attachments for this message.
   */
  public LinkedList<MimeBodyPart> getAttachments()
  public List<MimeBodyPart> getAttachments()
  {
    return attachments;
  }
@@ -339,7 +316,7 @@
   * @throws  MessagingException  If there is a problem of some type with the
   *                              attachment.
   */
  public void addAttachment(File attachmentFile)
  private void addAttachment(File attachmentFile)
         throws MessagingException
  {
    MimeBodyPart attachment = new MimeBodyPart();
@@ -383,7 +360,7 @@
   * @throws  MessagingException  If a problem occurred while attempting to send
   *                              the message.
   */
  public void send(List<Properties> mailServerPropertySets)
  private void send(List<Properties> mailServerPropertySets)
         throws MessagingException
  {
    // Get information about the available mail servers that we can use.
@@ -490,15 +467,11 @@
    // If we've gotten here, then we've tried all of the servers in the list and
    // still failed.  If we captured an earlier exception, then throw it.
    // Otherwise, throw a generic exception.
    if (sendException == null)
    {
      LocalizableMessage message = ERR_EMAILMSG_CANNOT_SEND.get();
      throw new MessagingException(message.toString());
    }
    else
    if (sendException != null)
    {
      throw sendException;
    }
    throw new MessagingException(ERR_EMAILMSG_CANNOT_SEND.get().toString());
  }
opendj-server-legacy/src/main/java/org/opends/server/util/LDIFReader.java
@@ -75,49 +75,38 @@
  /** The reader that will be used to read the data. */
  private BufferedReader reader;
  /** The import configuration that specifies what should be imported. */
  protected LDIFImportConfig importConfig;
  protected final LDIFImportConfig importConfig;
  /** The lines that comprise the body of the last entry read. */
  protected List<StringBuilder> lastEntryBodyLines;
  /**
   * The lines that comprise the header (DN and any comments) for the last entry
   * read.
   */
  /** The lines that comprise the header (DN and any comments) for the last entry read. */
  protected List<StringBuilder> lastEntryHeaderLines;
  /**
   * The number of entries that have been ignored by this LDIF reader because
   * they didn't match the criteria.
   */
  private final AtomicLong entriesIgnored = new AtomicLong();
  /**
   * The number of entries that have been read by this LDIF reader, including
   * those that were ignored because they didn't match the criteria, and
   * including those that were rejected because they were invalid in some way.
   */
  protected final AtomicLong entriesRead = new AtomicLong();
  /** The number of entries that have been rejected by this LDIF reader. */
  private final AtomicLong entriesRejected = new AtomicLong();
  /** The line number on which the last entry started. */
  protected long lastEntryLineNumber = -1;
  /**
   * The line number of the last line read from the LDIF file, starting with 1.
   */
  /** The line number of the last line read from the LDIF file, starting with 1. */
  private long lineNumber;
  /**
   * The plugin config manager that will be used if we are to invoke plugins on
   * the entries as they are read.
   */
  protected PluginConfigManager pluginConfigManager;
  protected final PluginConfigManager pluginConfigManager;
  /**
   * Creates a new LDIF reader that will read information from the specified
@@ -265,6 +254,7 @@
        logToSkipWriter(lines, ERR_LDIF_SKIP.get(entryDN));
        return false;
      }
      return true;
    }
    catch (Exception e)
    {
@@ -274,7 +264,6 @@
          ERR_LDIF_COULD_NOT_EVALUATE_FILTERS_FOR_IMPORT.get(entry.getName(), lastEntryLineNumber, e);
      throw new LDIFException(message, lastEntryLineNumber, true, e);
    }
    return true;
  }
  private boolean invokeImportPlugins(Entry entry, LinkedList<StringBuilder> lines)
@@ -286,16 +275,10 @@
      if (!pluginResult.continueProcessing())
      {
        final DN entryDN = entry.getName();
        LocalizableMessage m;
        LocalizableMessage rejectMessage = pluginResult.getErrorMessage();
        if (rejectMessage == null)
        {
          m = ERR_LDIF_REJECTED_BY_PLUGIN_NOMESSAGE.get(entryDN);
        }
        else
        {
          m = ERR_LDIF_REJECTED_BY_PLUGIN.get(entryDN, rejectMessage);
        }
        LocalizableMessage m = rejectMessage != null
            ? ERR_LDIF_REJECTED_BY_PLUGIN.get(entryDN, rejectMessage)
            : ERR_LDIF_REJECTED_BY_PLUGIN_NOMESSAGE.get(entryDN);
        logToRejectWriter(lines, m);
        return false;
@@ -348,7 +331,7 @@
   * @param builders the list of AttributeBuilders
   * @return a new list of Attributes
   */
  protected List<Attribute> toAttributesList(List<AttributeBuilder> builders)
  private List<Attribute> toAttributesList(List<AttributeBuilder> builders)
  {
    List<Attribute> results = new ArrayList<>(builders.size());
    for (AttributeBuilder builder : builders)
@@ -397,47 +380,37 @@
      }
      String changeType = readChangeType(lines);
      ChangeRecordEntry entry;
      if(changeType != null)
      {
        if(changeType.equals("add"))
        switch (changeType)
        {
          entry = parseAddChangeRecordEntry(entryDN, lines);
        } else if (changeType.equals("delete"))
        {
          entry = parseDeleteChangeRecordEntry(entryDN, lines);
        } else if (changeType.equals("modify"))
        {
          entry = parseModifyChangeRecordEntry(entryDN, lines);
        } else if (changeType.equals("modrdn"))
        {
          entry = parseModifyDNChangeRecordEntry(entryDN, lines);
        } else if (changeType.equals("moddn"))
        {
          entry = parseModifyDNChangeRecordEntry(entryDN, lines);
        } else
        {
        case "add":
          return parseAddChangeRecordEntry(entryDN, lines);
        case "delete":
          return parseDeleteChangeRecordEntry(entryDN, lines);
        case "modify":
          return parseModifyChangeRecordEntry(entryDN, lines);
        case "modrdn":
          return parseModifyDNChangeRecordEntry(entryDN, lines);
        case "moddn":
          return parseModifyDNChangeRecordEntry(entryDN, lines);
        default:
          LocalizableMessage message = ERR_LDIF_INVALID_CHANGETYPE_ATTRIBUTE.get(
              changeType, "add, delete, modify, moddn, modrdn");
          throw new LDIFException(message, lastEntryLineNumber, false);
        }
      } else
      {
        // default to "add"?
        if(defaultAdd)
        {
          entry = parseAddChangeRecordEntry(entryDN, lines);
        } else
        {
          LocalizableMessage message = ERR_LDIF_INVALID_CHANGETYPE_ATTRIBUTE.get(
              null, "add, delete, modify, moddn, modrdn");
          throw new LDIFException(message, lastEntryLineNumber, false);
        }
      }
      return entry;
      else if (defaultAdd)
      {
        // default to "add"
        return parseAddChangeRecordEntry(entryDN, lines);
      }
      else
      {
        LocalizableMessage message =
            ERR_LDIF_INVALID_CHANGETYPE_ATTRIBUTE.get(null, "add, delete, modify, moddn, modrdn");
        throw new LDIFException(message, lastEntryLineNumber, false);
      }
    }
  }
@@ -455,15 +428,14 @@
   */
  protected LinkedList<StringBuilder> readEntryLines() throws IOException, LDIFException
  {
    // Read the entry lines into a buffer.
    LinkedList<StringBuilder> lines = new LinkedList<>();
    int lastLine = -1;
    if(reader == null)
    {
      return null;
    }
    // Read the entry lines into a buffer.
    LinkedList<StringBuilder> lines = new LinkedList<>();
    int lastLine = -1;
    while (true)
    {
      String line = reader.readLine();
@@ -479,11 +451,7 @@
          break;
        }
        reader = importConfig.nextReader();
        if (reader != null)
        {
          return readEntryLines();
        }
        return null;
        return reader != null ? readEntryLines() : null;
      }
      else if (line.length() == 0)
      {
@@ -1034,11 +1002,7 @@
    }
  }
  /**
   * Closes this LDIF reader and the underlying file or input stream.
   */
  /** Closes this LDIF reader and the underlying file or input stream. */
  @Override
  public void close()
  {
opendj-server-legacy/src/main/java/org/opends/server/util/SetupUtils.java
@@ -12,13 +12,17 @@
 * information: "Portions Copyright [year] [name of copyright owner]".
 *
 * Copyright 2006-2010 Sun Microsystems, Inc.
 * Portions Copyright 2011-2015 ForgeRock AS.
 * Portions Copyright 2011-2016 ForgeRock AS.
 */
package org.opends.server.util;
import static org.forgerock.util.Utils.closeSilently;
import java.io.*;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.net.InetSocketAddress;
import java.net.ServerSocket;
import java.net.Socket;
@@ -55,22 +59,6 @@
  public static final String OPENDJ_JAVA_ARGS = "OPENDJ_JAVA_ARGS";
  /**
   * Java property used to know which are the jar files that must be downloaded
   * lazily.  The current code in WebStartDownloader that uses this property
   * assumes that the URL are separated with an space.
   */
  public static final String LAZY_JAR_URLS =
      "org.opends.quicksetup.lazyjarurls";
  /**
   * Java property used to know which is the name of the zip file that must
   * be unzipped and whose contents must be extracted during the Web Start
   * based setup.
   */
  public static final String ZIP_FILE_NAME =
      "org.opends.quicksetup.zipfilename";
  /**
   * The relative path where all the libraries (jar files) are.
   */
  public static final String LIBRARIES_PATH_RELATIVE = "lib";
@@ -102,8 +90,6 @@
  public static final String URL_REPOSITORY = "URL Repository";
  /** The version qualifier. */
  public static final String VERSION_QUALIFIER = "Version Qualifier";
  /** Incompatibilities found between builds (used by the upgrade tool). */
  public static final String INCOMPATIBILITY_EVENTS = "Upgrade Event IDs";
  /** Fix IDs associated with the build. */
  public static final String FIX_IDS = "Fix IDs";
  /** Debug build identifier. */
@@ -221,16 +207,14 @@
      lines.add("description: This is the description for {cn}.");
    }
    BufferedWriter writer = new BufferedWriter(new FileWriter(templateFile));
    for (String line : lines)
    try (BufferedWriter writer = new BufferedWriter(new FileWriter(templateFile)))
    {
      writer.write(line);
      writer.newLine();
      for (String line : lines)
      {
        writer.write(line);
        writer.newLine();
      }
    }
    writer.flush();
    writer.close();
    return templateFile;
  }
@@ -243,11 +227,9 @@
   * @return {@code true} if the provided port is free and we can use it,
   * {@code false} otherwise.
   */
  public static boolean canUseAsPort(String hostname, int port)
  private static boolean canUseAsPort(String hostname, int port)
  {
    boolean canUseAsPort = false;
    ServerSocket serverSocket = null;
    try
    try (ServerSocket serverSocket = new ServerSocket())
    {
      InetSocketAddress socketAddress;
      if (hostname != null)
@@ -258,59 +240,29 @@
      {
        socketAddress = new InetSocketAddress(port);
      }
      serverSocket = new ServerSocket();
      if (!OperatingSystem.isWindows())
      {
        serverSocket.setReuseAddress(true);
      }
      serverSocket.bind(socketAddress);
      canUseAsPort = true;
      serverSocket.close();
      /* Try to create a socket because sometimes even if we can create a server
       * socket there is already someone listening to the port (is the case
       * of products as Sun DS 6.0).
       */
      Socket s = null;
      try
      try (Socket s = new Socket())
      {
        s = new Socket();
        s.connect(socketAddress, 1000);
        canUseAsPort = false;
        return false;
      } catch (Throwable t)
      {
      }
      finally
      {
        if (s != null)
        {
          try
          {
            s.close();
          }
          catch (Throwable t)
          {
          }
        }
      }
      return true;
    } catch (IOException ex)
    {
      canUseAsPort = false;
    } finally
    {
      try
      {
        if (serverSocket != null)
        {
          serverSocket.close();
        }
      } catch (Exception ex)
      {
      }
      return false;
    }
    return canUseAsPort;
  }
  /**
@@ -399,15 +351,10 @@
        certManager.getCertificate(alias != null ? alias : certManager.getCertificateAliases()[0]);
    byte[] certificateBytes = certificate.getEncoded();
    FileOutputStream outputStream = new FileOutputStream(path, false);
    try
    try (FileOutputStream outputStream = new FileOutputStream(path, false))
    {
      outputStream.write(certificateBytes);
    }
    finally
    {
      closeSilently(outputStream);
    }
  }
@@ -475,10 +422,8 @@
  {
    String hostName = null;
    File f = new File(installationRoot + File.separator + HOST_NAME_FILE);
    BufferedReader br = null;
    try
    try (BufferedReader br = new BufferedReader(new FileReader(f)))
    {
      br = new BufferedReader(new FileReader(f));
      String s = br.readLine();
      s = s.trim();
@@ -491,10 +436,6 @@
    catch (IOException ioe)
    {
    }
    finally
    {
      closeSilently(br);
    }
    if (hostName == null)
    {
      hostName = lastReadHostName;
opendj-server-legacy/src/main/java/org/opends/server/util/StaticUtils.java
@@ -19,23 +19,17 @@
import static org.opends.messages.UtilityMessages.*;
import static org.opends.server.util.ServerConstants.*;
import java.io.BufferedReader;
import java.io.Closeable;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.net.InetAddress;
import java.net.InetSocketAddress;
import java.net.ServerSocket;
import java.net.Socket;
import java.nio.ByteBuffer;
import java.nio.channels.SelectionKey;
import java.nio.channels.Selector;
import java.nio.channels.SocketChannel;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
@@ -48,7 +42,6 @@
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.RandomAccess;
import java.util.TimeZone;
import javax.naming.InitialContext;
@@ -66,7 +59,6 @@
import org.forgerock.opendj.ldap.schema.AttributeType;
import org.forgerock.util.Reject;
import org.opends.messages.ToolMessages;
import org.opends.server.api.ClientConnection;
import org.opends.server.core.DirectoryServer;
import org.opends.server.core.ServerContext;
import org.opends.server.types.Attribute;
@@ -478,109 +470,6 @@
  }
  /**
   * Appends a string representation of the remaining unread data in the
   * provided byte buffer to the given buffer using the specified indent.
   * The data will be formatted with sixteen hex bytes in a row followed by
   * the ASCII representation, then wrapping to a new line as necessary.
   * The state of the byte buffer is not changed.
   *
   * @param  buffer  The buffer to which the information is to be appended.
   * @param  b       The byte buffer containing the data to write.
   *                 The data from the position to the limit is written.
   * @param  indent  The number of spaces to indent the output.
   */
  public static void byteArrayToHexPlusAscii(StringBuilder buffer, ByteBuffer b,
                                             int indent)
  {
    StringBuilder indentBuf = new StringBuilder(indent);
    for (int i=0 ; i < indent; i++)
    {
      indentBuf.append(' ');
    }
    int position = b.position();
    int limit    = b.limit();
    int length   = limit - position;
    int pos      = 0;
    while (length - pos >= 16)
    {
      StringBuilder asciiBuf = new StringBuilder(17);
      byte currentByte = b.get();
      buffer.append(indentBuf);
      buffer.append(byteToHex(currentByte));
      asciiBuf.append(byteToASCII(currentByte));
      pos++;
      for (int i=1; i < 16; i++, pos++)
      {
        currentByte = b.get();
        buffer.append(' ');
        buffer.append(byteToHex(currentByte));
        asciiBuf.append(byteToASCII(currentByte));
        if (i == 7)
        {
          buffer.append("  ");
          asciiBuf.append(' ');
        }
      }
      buffer.append("  ");
      buffer.append(asciiBuf);
      buffer.append(EOL);
    }
    int remaining = length - pos;
    if (remaining > 0)
    {
      StringBuilder asciiBuf = new StringBuilder(remaining+1);
      byte currentByte = b.get();
      buffer.append(indentBuf);
      buffer.append(byteToHex(currentByte));
      asciiBuf.append(byteToASCII(currentByte));
      for (int i=1; i < 16; i++)
      {
        buffer.append(' ');
        if (i < remaining)
        {
          currentByte = b.get();
          buffer.append(byteToHex(currentByte));
          asciiBuf.append(byteToASCII(currentByte));
        }
        else
        {
          buffer.append("  ");
        }
        if (i == 7)
        {
          buffer.append("  ");
          if (i < remaining)
          {
            asciiBuf.append(' ');
          }
        }
      }
      buffer.append("  ");
      buffer.append(asciiBuf);
      buffer.append(EOL);
    }
    b.position(position);
    b.limit(limit);
  }
  /**
   * Compare two byte arrays for order. Returns a negative integer,
   * zero, or a positive integer as the first argument is less than,
   * equal to, or greater than the second.
@@ -622,69 +511,6 @@
    return a.length - a2.length;
  }
  /**
   * Indicates whether the two array lists are equal. They will be
   * considered equal if they have the same number of elements, and
   * the corresponding elements between them are equal (in the same
   * order).
   *
   * @param list1
   *          The first list for which to make the determination.
   * @param list2
   *          The second list for which to make the determination.
   * @return {@code true} if the two array lists are equal, or
   *         {@code false} if they are not.
   */
  public static boolean listsAreEqual(List<?> list1, List<?> list2)
  {
    if (list1 == null)
    {
      return list2 == null;
    }
    else if (list2 == null)
    {
      return false;
    }
    int numElements = list1.size();
    if (numElements != list2.size())
    {
      return false;
    }
    // If either of the lists doesn't support random access, then fall back
    // on their equals methods and go ahead and create some garbage with the
    // iterators.
    if (!(list1 instanceof RandomAccess) ||
        !(list2 instanceof RandomAccess))
    {
      return list1.equals(list2);
    }
    // Otherwise we can just retrieve the elements efficiently via their index.
    for (int i=0; i < numElements; i++)
    {
      Object o1 = list1.get(i);
      Object o2 = list2.get(i);
      if (o1 == null)
      {
        if (o2 != null)
        {
          return false;
        }
      }
      else if (! o1.equals(o2))
      {
        return false;
      }
    }
    return true;
  }
  /**
   * Retrieves the best human-readable message for the provided exception.  For
   * exceptions defined in the OpenDJ project, it will attempt to use the
@@ -736,23 +562,6 @@
    return com.forgerock.opendj.util.StaticUtils.stackTraceToSingleLineString(t, DynamicConstants.DEBUG_BUILD);
  }
  /**
   * Appends a single-line string representation of the provided exception to
   * the given buffer.
   *
   * @param  buffer  The buffer to which the information is to be appended.
   * @param  t       The exception for which to retrieve the stack trace.
   */
  public static void stackTraceToSingleLineString(StringBuilder buffer,
                                                  Throwable t)
  {
    com.forgerock.opendj.util.StaticUtils.stackTraceToSingleLineString(buffer, t, DynamicConstants.DEBUG_BUILD);
  }
  /**
   * Retrieves a string representation of the stack trace for the provided
   * exception.
@@ -801,7 +610,7 @@
   * @param  buffer  The buffer to which the information is to be appended.
   * @param  t       The exception for which to retrieve the stack trace.
   */
  public static void stackTraceToString(StringBuilder buffer, Throwable t)
  private static void stackTraceToString(StringBuilder buffer, Throwable t)
  {
    if (t == null)
    {
@@ -1296,127 +1105,11 @@
   * @return  {@code true} if the use of the exec method should be allowed,
   *          or {@code false} if it should not be allowed.
   */
  public static boolean mayUseExec()
  private static boolean mayUseExec()
  {
    return !DirectoryServer.getEnvironmentConfig().disableExec();
  }
  /**
   * Executes the specified command on the system and captures its output.  This
   * will not return until the specified process has completed.
   *
   * @param  command           The command to execute.
   * @param  args              The set of arguments to provide to the command.
   * @param  workingDirectory  The working directory to use for the command, or
   *                           {@code null} if the default directory
   *                           should be used.
   * @param  environment       The set of environment variables that should be
   *                           set when executing the command, or
   *                           {@code null} if none are needed.
   * @param  output            The output generated by the command while it was
   *                           running.  This will include both standard
   *                           output and standard error.  It may be
   *                           {@code null} if the output does not need to
   *                           be captured.
   *
   * @return  The exit code for the command.
   *
   * @throws  IOException  If an I/O problem occurs while trying to execute the
   *                       command.
   *
   * @throws  SecurityException  If the security policy will not allow the
   *                             command to be executed.
   *
   * @throws InterruptedException If the current thread is interrupted by
   *                              another thread while it is waiting, then
   *                              the wait is ended and an InterruptedException
   *                              is thrown.
   */
  public static int exec(String command, String[] args, File workingDirectory,
                         Map<String,String> environment, List<String> output)
         throws IOException, SecurityException, InterruptedException
  {
    // See whether we'll allow the use of exec on this system.  If not, then
    // throw an exception.
    if (! mayUseExec())
    {
      throw new SecurityException(ERR_EXEC_DISABLED.get(command).toString());
    }
    ArrayList<String> commandAndArgs = new ArrayList<>();
    commandAndArgs.add(command);
    if (args != null && args.length > 0)
    {
      Collections.addAll(commandAndArgs, args);
    }
    ProcessBuilder processBuilder = new ProcessBuilder(commandAndArgs);
    processBuilder.redirectErrorStream(true);
    if (workingDirectory != null && workingDirectory.isDirectory())
    {
      processBuilder.directory(workingDirectory);
    }
    if (environment != null && !environment.isEmpty())
    {
      processBuilder.environment().putAll(environment);
    }
    Process process = processBuilder.start();
    // We must exhaust stdout and stderr before calling waitfor. Since we
    // redirected the error stream, we just have to read from stdout.
    InputStream processStream =  process.getInputStream();
    BufferedReader reader =
        new BufferedReader(new InputStreamReader(processStream));
    String line = null;
    try
    {
      while((line = reader.readLine()) != null)
      {
        if(output != null)
        {
          output.add(line);
        }
      }
    }
    catch(IOException ioe)
    {
      // If this happens, then we have no choice but to forcefully terminate
      // the process.
      try
      {
        process.destroy();
      }
      catch (Exception e)
      {
        logger.traceException(e);
      }
      throw ioe;
    }
    finally
    {
      try
      {
        reader.close();
      }
      catch(IOException e)
      {
        logger.traceException(e);
      }
    }
    return process.waitFor();
  }
  /**
   * Indicates whether the provided string contains a name or OID for a schema
   * element like an attribute type or objectclass.
@@ -1716,7 +1409,7 @@
   * @param  buffer  The buffer to which the uppercase form of the string should
   *                 be appended.
   */
  public static void toUpperCase(String s, StringBuilder buffer)
  private static void toUpperCase(String s, StringBuilder buffer)
  {
    if (s == null)
    {
@@ -2024,29 +1717,6 @@
    return builder;
  }
  /**
   * Retrieves a string array containing the contents of the provided
   * list of strings.
   *
   * @param stringList
   *          The string list to convert to an array.
   * @return A string array containing the contents of the provided list
   *         of strings.
   */
  public static String[] listToArray(List<String> stringList)
  {
    if (stringList == null)
    {
      return null;
    }
    String[] stringArray = new String[stringList.size()];
    stringList.toArray(stringArray);
    return stringArray;
  }
  /**
   * Retrieves an array list containing the contents of the provided array.
   *
@@ -2203,24 +1873,6 @@
    }
  }
  /**
   * Indicates whether the provided path refers to a relative path rather than
   * an absolute path.
   *
   * @param  path  The path string for which to make the determination.
   *
   * @return  {@code true} if the provided path is relative, or
   *          {@code false} if it is absolute.
   */
  public static boolean isRelativePath(String path)
  {
    File f = new File(path);
    return !f.isAbsolute();
  }
  /**
   * Retrieves a {@code File} object corresponding to the specified path.
   * If the given path is an absolute path, then it will be used.  If the path
@@ -2531,132 +2183,6 @@
  }
  /**
   * Writes the contents of the provided buffer to the client,
   * terminating the connection if the write is unsuccessful for too
   * long (e.g., if the client is unresponsive or there is a network
   * problem). If possible, it will attempt to use the selector returned
   * by the {@code ClientConnection.getWriteSelector} method, but it is
   * capable of working even if that method returns {@code null}. <BR>
   *
   * Note that the original position and limit values will not be
   * preserved, so if that is important to the caller, then it should
   * record them before calling this method and restore them after it
   * returns.
   *
   * @param clientConnection
   *          The client connection to which the data is to be written.
   * @param buffer
   *          The data to be written to the client.
   * @return {@code true} if all the data in the provided buffer was
   *         written to the client and the connection may remain
   *         established, or {@code false} if a problem occurred
   *         and the client connection is no longer valid. Note that if
   *         this method does return {@code false}, then it must
   *         have already disconnected the client.
   * @throws IOException
   *           If a problem occurs while attempting to write data to the
   *           client. The caller will be responsible for catching this
   *           and terminating the client connection.
   */
  public static boolean writeWithTimeout(ClientConnection clientConnection,
      ByteBuffer buffer) throws IOException
  {
    SocketChannel socketChannel = clientConnection.getSocketChannel();
    long startTime = System.currentTimeMillis();
    long waitTime = clientConnection.getMaxBlockedWriteTimeLimit();
    if (waitTime <= 0)
    {
      // We won't support an infinite time limit, so fall back to using
      // five minutes, which is a very long timeout given that we're
      // blocking a worker thread.
      waitTime = 300000L;
    }
    long stopTime = startTime + waitTime;
    Selector selector = clientConnection.getWriteSelector();
    if (selector == null)
    {
      // The client connection does not provide a selector, so we'll
      // fall back
      // to a more inefficient way that will work without a selector.
      while (buffer.hasRemaining()
          && System.currentTimeMillis() < stopTime)
      {
        if (socketChannel.write(buffer) < 0)
        {
          // The client connection has been closed.
          return false;
        }
      }
      if (buffer.hasRemaining())
      {
        // If we've gotten here, then the write timed out.
        return false;
      }
      return true;
    }
    // Register with the selector for handling write operations.
    SelectionKey key =
        socketChannel.register(selector, SelectionKey.OP_WRITE);
    try
    {
      selector.select(waitTime);
      while (buffer.hasRemaining())
      {
        long currentTime = System.currentTimeMillis();
        if (currentTime >= stopTime)
        {
          // We've been blocked for too long.
          return false;
        }
        waitTime = stopTime - currentTime;
        Iterator<SelectionKey> iterator =
            selector.selectedKeys().iterator();
        while (iterator.hasNext())
        {
          SelectionKey k = iterator.next();
          if (k.isWritable())
          {
            int bytesWritten = socketChannel.write(buffer);
            if (bytesWritten < 0)
            {
              // The client connection has been closed.
              return false;
            }
            iterator.remove();
          }
        }
        if (buffer.hasRemaining())
        {
          selector.select(waitTime);
        }
      }
      return true;
    }
    finally
    {
      if (key.isValid())
      {
        key.cancel();
        selector.selectNow();
      }
    }
  }
  /**
   * Add all of the superior objectclasses to the specified objectclass
   * map if they don't already exist. Used by add and import-ldif to
@@ -2845,22 +2371,6 @@
   * @return {@code true} if message corresponds to descriptor
   */
  public static boolean hasDescriptor(LocalizableMessage msg,
      LocalizableMessageDescriptor.Arg2<?, ?> desc)
  {
    return msg.ordinal() == desc.ordinal()
        && msg.resourceName().equals(desc.resourceName());
  }
  /**
   * Test if the provided message corresponds to the provided descriptor.
   *
   * @param msg
   *          The i18n message.
   * @param desc
   *          The message descriptor.
   * @return {@code true} if message corresponds to descriptor
   */
  public static boolean hasDescriptor(LocalizableMessage msg,
      LocalizableMessageDescriptor.Arg3<?, ?, ?> desc)
  {
    return msg.ordinal() == desc.ordinal()
opendj-server-legacy/src/main/java/org/opends/server/util/cli/LDAPConnectionArgumentParser.java
@@ -16,10 +16,10 @@
 */
package org.opends.server.util.cli;
import static org.opends.messages.ToolMessages.*;
import static com.forgerock.opendj.cli.Utils.*;
import static org.opends.messages.ToolMessages.*;
import java.io.PrintStream;
import java.util.LinkedList;
import java.util.Set;
@@ -52,7 +52,6 @@
 */
public class LDAPConnectionArgumentParser extends ArgumentParser
{
  private SecureConnectionCliArgs args;
  /**
@@ -305,34 +304,6 @@
   *          with which to connect
   * @param options
   *          with which to connect
   * @param out
   *          stream to write messages
   * @param err
   *          stream to write error messages
   * @return LDAPConnection created by this class from parsed arguments
   * @throws LDAPConnectionException
   *           if there was a problem connecting to the server indicated by the
   *           input arguments
   */
  public LDAPConnection connect(String host, int port, String bindDN, String bindPw, LDAPConnectionOptions options,
      PrintStream out, PrintStream err) throws LDAPConnectionException
  {
    return connect(host, port, bindDN, bindPw, options, 0, out, err);
  }
  /**
   * Creates a connection from information provided.
   *
   * @param host
   *          of the server
   * @param port
   *          of the server
   * @param bindDN
   *          with which to connect
   * @param bindPw
   *          with which to connect
   * @param options
   *          with which to connect
   * @param timeout
   *          the timeout to establish the connection in milliseconds. Use
   *          {@code 0} to express no timeout
@@ -345,7 +316,7 @@
   *           if there was a problem connecting to the server indicated by the
   *           input arguments
   */
  public LDAPConnection connect(String host, int port, String bindDN, String bindPw, LDAPConnectionOptions options,
  private LDAPConnection connect(String host, int port, String bindDN, String bindPw, LDAPConnectionOptions options,
      int timeout, PrintStream out, PrintStream err) throws LDAPConnectionException
  {
    // Attempt to connect and authenticate to the Directory Server.
opendj-server-legacy/src/main/java/org/opends/server/util/cli/PointAdder.java
@@ -29,11 +29,11 @@
  private Thread t;
  private boolean stopPointAdder;
  private boolean pointAdderStopped;
  private long periodTime = DEFAULT_PERIOD_TIME;
  private final long periodTime;
  private final ProgressMessageFormatter formatter;
  /** The default period time used to write points in the output. */
  public static final long DEFAULT_PERIOD_TIME = 3000;
  private static final long DEFAULT_PERIOD_TIME = 3000;
  /**
   * Default constructor.
@@ -57,7 +57,7 @@
   * @param formatter
   *          The text formatter.
   */
  public PointAdder(ConsoleApplication app, long periodTime, ProgressMessageFormatter formatter)
  private PointAdder(ConsoleApplication app, long periodTime, ProgressMessageFormatter formatter)
  {
    this.app = app;
    this.periodTime = periodTime;
opendj-server-legacy/src/main/java/org/opends/server/workflowelement/localbackend/LocalBackendAddOperation.java
@@ -16,6 +16,15 @@
 */
package org.opends.server.workflowelement.localbackend;
import static org.opends.messages.CoreMessages.*;
import static org.opends.server.config.ConfigConstants.*;
import static org.opends.server.core.DirectoryServer.*;
import static org.opends.server.types.AbstractOperation.*;
import static org.opends.server.util.CollectionUtils.*;
import static org.opends.server.util.ServerConstants.*;
import static org.opends.server.util.StaticUtils.*;
import static org.opends.server.workflowelement.localbackend.LocalBackendWorkflowElement.*;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
@@ -66,15 +75,6 @@
import org.opends.server.types.operation.PreOperationAddOperation;
import org.opends.server.util.TimeThread;
import static org.opends.messages.CoreMessages.*;
import static org.opends.server.config.ConfigConstants.*;
import static org.opends.server.core.DirectoryServer.*;
import static org.opends.server.types.AbstractOperation.*;
import static org.opends.server.util.CollectionUtils.*;
import static org.opends.server.util.ServerConstants.*;
import static org.opends.server.util.StaticUtils.*;
import static org.opends.server.workflowelement.localbackend.LocalBackendWorkflowElement.*;
/**
 * This class defines an operation used to add an entry in a local backend
 * of the Directory Server.
@@ -94,7 +94,6 @@
  /** The DN of the entry to be added. */
  private DN entryDN;
  /** The entry being added to the server. */
  private Entry entry;
@@ -103,10 +102,8 @@
  /** The set of object classes for the entry to add. */
  private Map<ObjectClass, String> objectClasses;
  /** The set of operational attributes for the entry to add. */
  private Map<AttributeType, List<Attribute>> operationalAttributes;
  /** The set of user attributes for the entry to add. */
  private Map<AttributeType, List<Attribute>> userAttributes;
@@ -243,8 +240,7 @@
        }
        else
        {
          // The entry doesn't have a parent but isn't a suffix.  This is not
          // allowed.
          // The entry doesn't have a parent but isn't a suffix. This is not allowed.
          throw new DirectoryException(ResultCode.NO_SUCH_OBJECT, ERR_ADD_ENTRY_NOT_SUFFIX.get(entryDN));
        }
      }
@@ -609,35 +605,6 @@
    attrList.add(Attributes.create(t, n, v));
  }
  /**
   * Adds the provided objectClass to the entry, along with its superior classes
   * if appropriate.
   *
   * @param  objectClass  The objectclass to add to the entry.
   */
  public final void addObjectClassChain(ObjectClass objectClass)
  {
    Map<ObjectClass, String> objectClasses = getObjectClasses();
    if (objectClasses != null){
      if (! objectClasses.containsKey(objectClass))
      {
        objectClasses.put(objectClass, objectClass.getNameOrOID());
      }
      for(ObjectClass superiorClass : objectClass.getSuperiorClasses())
      {
        if (!objectClasses.containsKey(superiorClass))
        {
          addObjectClassChain(superiorClass);
        }
      }
    }
  }
  /**
   * Performs all password policy processing necessary for the provided add
   * operation.
@@ -645,7 +612,7 @@
   * @throws  DirectoryException  If a problem occurs while performing password
   *                              policy processing for the add operation.
   */
  public final void handlePasswordPolicy()
  private final void handlePasswordPolicy()
         throws DirectoryException
  {
    // Construct any virtual/collective attributes which might
@@ -654,8 +621,7 @@
    AuthenticationPolicy policy = AuthenticationPolicy.forUser(copy, false);
    if (!policy.isPasswordPolicy())
    {
      // The entry doesn't have a locally managed password, so no action is
      // required.
      // The entry doesn't have a locally managed password, so no action is required.
      return;
    }
    PasswordPolicy passwordPolicy = (PasswordPolicy) policy;
@@ -695,8 +661,7 @@
        && !passwordPolicy.isAllowMultiplePasswordValues()
        && passwordAttr.size() > 1)
    {
      // FIXME -- What if they're pre-encoded and might all be the
      // same?
      // FIXME -- What if they're pre-encoded and might all be the same?
      addPWPolicyControl(PasswordPolicyErrorType.PASSWORD_MOD_NOT_ALLOWED);
      LocalizableMessage message = ERR_PWPOLICY_MULTIPLE_PW_VALUES_NOT_ALLOWED
@@ -710,29 +675,12 @@
    for (ByteString value : passwordAttr)
    {
      // See if the password is pre-encoded.
      if (passwordPolicy.isAuthPasswordSyntax())
      boolean isPreEncoded = passwordPolicy.isAuthPasswordSyntax()
          ? AuthPasswordSyntax.isEncoded(value)
          : UserPasswordSyntax.isEncoded(value);
      if (isPreEncoded)
      {
        if (AuthPasswordSyntax.isEncoded(value))
        {
          if (isInternalOperation()
              || passwordPolicy.isAllowPreEncodedPasswords())
          {
            builder.add(value);
            continue;
          }
          else
          {
            addPWPolicyControl(PasswordPolicyErrorType.INSUFFICIENT_PASSWORD_QUALITY);
            throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION,
                ERR_PWPOLICY_PREENCODED_NOT_ALLOWED.get(passwordAttribute.getNameOrOID()));
          }
        }
      }
      else if (UserPasswordSyntax.isEncoded(value))
      {
        if (isInternalOperation()
            || passwordPolicy.isAllowPreEncodedPasswords())
        if (isInternalOperation() || passwordPolicy.isAllowPreEncodedPasswords())
        {
          builder.add(value);
          continue;
@@ -741,8 +689,8 @@
        {
          addPWPolicyControl(PasswordPolicyErrorType.INSUFFICIENT_PASSWORD_QUALITY);
          throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION,
              ERR_PWPOLICY_PREENCODED_NOT_ALLOWED.get(passwordAttribute.getNameOrOID()));
          LocalizableMessage msg = ERR_PWPOLICY_PREENCODED_NOT_ALLOWED.get(passwordAttribute.getNameOrOID());
          throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION, msg);
        }
      }
@@ -811,8 +759,6 @@
    }
  }
  /**
   * Adds a password policy response control if the corresponding request
   * control was included.
opendj-server-legacy/src/test/java/org/opends/server/extensions/LDAPPassThroughAuthenticationPolicyTestCase.java
@@ -1989,10 +1989,8 @@
    // Test connect and close.
    final LDAPConnectionFactory factory = new LDAPConnectionFactory(
        "127.0.0.1", server.getPort(), cfg);
    Connection connection = null;
    try
    try (Connection connection = factory.getConnection())
    {
      connection = factory.getConnection();
      connection.simpleBind(ByteString.valueOfUtf8(searchBindDNString),
          ByteString.valueOfUtf8(userPassword));
      fail("Bind attempt should have failed");
@@ -2004,7 +2002,6 @@
    }
    finally
    {
      StaticUtils.close(connection);
      server.unblock();
      server.stop();
    }
@@ -2031,10 +2028,8 @@
    // Test connect and close.
    final LDAPConnectionFactory factory = new LDAPConnectionFactory(
        "127.0.0.1", server.getPort(), cfg);
    Connection connection = null;
    try
    try (Connection connection = factory.getConnection())
    {
      connection = factory.getConnection();
      connection.simpleBind(ByteString.valueOfUtf8(searchBindDNString),
          ByteString.valueOfUtf8(userPassword));
      fail("Bind attempt should have failed");
@@ -2046,7 +2041,6 @@
    }
    finally
    {
      StaticUtils.close(connection);
      server.stop();
    }
  }
@@ -2075,10 +2069,8 @@
    // Test connect and close.
    final LDAPConnectionFactory factory = new LDAPConnectionFactory(
        "127.0.0.1", server.getPort(), cfg);
    Connection connection = null;
    try
    try (Connection connection = factory.getConnection())
    {
      connection = factory.getConnection();
      connection.simpleBind(ByteString.valueOfUtf8(searchBindDNString),
          ByteString.valueOfUtf8(userPassword));
      fail("Bind attempt should have failed");
@@ -2090,7 +2082,6 @@
    }
    finally
    {
      StaticUtils.close(connection);
      server.stop();
    }
  }
@@ -2117,10 +2108,8 @@
    // Test connect and close.
    final LDAPConnectionFactory factory = new LDAPConnectionFactory(
        "127.0.0.1", server.getPort(), cfg);
    Connection connection = null;
    try
    try (Connection connection = factory.getConnection())
    {
      connection = factory.getConnection();
      connection.simpleBind(ByteString.valueOfUtf8(searchBindDNString),
          ByteString.valueOfUtf8(userPassword));
      fail("Bind attempt should have failed");
@@ -2132,7 +2121,6 @@
    }
    finally
    {
      StaticUtils.close(connection);
      server.stop();
    }
  }
@@ -2158,10 +2146,8 @@
    // Test connect and close.
    final LDAPConnectionFactory factory = new LDAPConnectionFactory(
        "127.0.0.1", server.getPort(), cfg);
    Connection connection = null;
    try
    try (Connection connection = factory.getConnection())
    {
      connection = factory.getConnection();
      connection.simpleBind(ByteString.valueOfUtf8(searchBindDNString),
          ByteString.valueOfUtf8(userPassword));
      fail("Bind attempt should have failed");
@@ -2172,7 +2158,6 @@
    }
    finally
    {
      StaticUtils.close(connection);
      server.stop();
    }
  }
@@ -2197,16 +2182,13 @@
    // Test connect and close.
    final LDAPConnectionFactory factory = new LDAPConnectionFactory(
        "127.0.0.1", server.getPort(), cfg);
    Connection connection = null;
    try
    try (Connection connection = factory.getConnection())
    {
      connection = factory.getConnection();
      connection.simpleBind(ByteString.valueOfUtf8(searchBindDNString),
          ByteString.valueOfUtf8(userPassword));
    }
    finally
    {
      StaticUtils.close(connection);
      server.stop();
    }
  }
@@ -2259,10 +2241,8 @@
    // Test connect and close.
    final LDAPConnectionFactory factory = new LDAPConnectionFactory(
        "127.0.0.1", port, cfg);
    Connection connection = null;
    try
    try (Connection connection = factory.getConnection())
    {
      connection = factory.getConnection();
      fail("Connect attempt should have failed");
    }
    catch (final DirectoryException e)
@@ -2270,10 +2250,6 @@
      assertEquals(e.getResultCode(), ResultCode.CLIENT_SIDE_CONNECT_ERROR,
          e.getMessage());
    }
    finally
    {
      StaticUtils.close(connection);
    }
  }
  /**
@@ -2292,10 +2268,8 @@
    // FIXME: can we guarantee that "unknownhost" does not exist?
    final LDAPConnectionFactory factory = new LDAPConnectionFactory(
        "unknownhost", 31415, cfg);
    Connection connection = null;
    try
    try (Connection connection = factory.getConnection())
    {
      connection = factory.getConnection();
      fail("Connect attempt should have failed");
    }
    catch (final DirectoryException e)
@@ -2303,10 +2277,6 @@
      assertEquals(e.getResultCode(), ResultCode.CLIENT_SIDE_CONNECT_ERROR,
          e.getMessage());
    }
    finally
    {
      StaticUtils.close(connection);
    }
  }
  /**
@@ -2329,10 +2299,8 @@
    // Test connect and close.
    final LDAPConnectionFactory factory = new LDAPConnectionFactory(
        "127.0.0.1", server.getPort(), cfg);
    Connection connection = null;
    try
    try (Connection connection = factory.getConnection())
    {
      connection = factory.getConnection();
      connection.search(searchBindDN, SearchScope.WHOLE_SUBTREE, SearchFilter.objectClassPresent());
      fail("Search attempt should have timed out");
    }
@@ -2343,7 +2311,6 @@
    }
    finally
    {
      StaticUtils.close(connection);
      server.unblock();
      server.stop();
    }
@@ -2373,10 +2340,8 @@
    // Test connect and close.
    final LDAPConnectionFactory factory = new LDAPConnectionFactory(
        "127.0.0.1", server.getPort(), cfg);
    Connection connection = null;
    try
    try (Connection connection = factory.getConnection())
    {
      connection = factory.getConnection();
      connection.search(searchBindDN, SearchScope.WHOLE_SUBTREE,
          SearchFilter.createFilterFromString("(uid=aduser)"));
      fail("Search attempt should have failed");
@@ -2388,7 +2353,6 @@
    }
    finally
    {
      StaticUtils.close(connection);
      server.stop();
    }
  }
@@ -2418,10 +2382,8 @@
    // Test connect and close.
    final LDAPConnectionFactory factory = new LDAPConnectionFactory(
        "127.0.0.1", server.getPort(), cfg);
    Connection connection = null;
    try
    try (Connection connection = factory.getConnection())
    {
      connection = factory.getConnection();
      connection.search(searchBindDN, SearchScope.WHOLE_SUBTREE,
          SearchFilter.createFilterFromString("(uid=aduser)"));
      fail("Search attempt should have failed");
@@ -2433,7 +2395,6 @@
    }
    finally
    {
      StaticUtils.close(connection);
      server.stop();
    }
  }
@@ -2461,10 +2422,8 @@
    // Test connect and close.
    final LDAPConnectionFactory factory = new LDAPConnectionFactory(
        "127.0.0.1", server.getPort(), cfg);
    Connection connection = null;
    try
    try (Connection connection = factory.getConnection())
    {
      connection = factory.getConnection();
      connection.search(searchBindDN, SearchScope.WHOLE_SUBTREE,
          SearchFilter.createFilterFromString("(uid=aduser)"));
      fail("Search attempt should have failed");
@@ -2476,7 +2435,6 @@
    }
    finally
    {
      StaticUtils.close(connection);
      server.stop();
    }
  }
@@ -2504,10 +2462,8 @@
    // Test connect and close.
    final LDAPConnectionFactory factory = new LDAPConnectionFactory(
        "127.0.0.1", server.getPort(), cfg);
    Connection connection = null;
    try
    try (Connection connection = factory.getConnection())
    {
      connection = factory.getConnection();
      connection.search(searchBindDN, SearchScope.WHOLE_SUBTREE,
          SearchFilter.createFilterFromString("(uid=aduser)"));
      fail("Search attempt should have failed");
@@ -2519,7 +2475,6 @@
    }
    finally
    {
      StaticUtils.close(connection);
      server.stop();
    }
  }
@@ -2549,10 +2504,8 @@
    // Test connect and close.
    final LDAPConnectionFactory factory = new LDAPConnectionFactory(
        "127.0.0.1", server.getPort(), cfg);
    Connection connection = null;
    try
    try (Connection connection = factory.getConnection())
    {
      connection = factory.getConnection();
      connection.search(searchBindDN, SearchScope.WHOLE_SUBTREE,
          SearchFilter.createFilterFromString("(uid=aduser)"));
      fail("Search attempt should have failed");
@@ -2564,7 +2517,6 @@
    }
    finally
    {
      StaticUtils.close(connection);
      server.stop();
    }
  }
@@ -2592,10 +2544,8 @@
    // Test connect and close.
    final LDAPConnectionFactory factory = new LDAPConnectionFactory(
        "127.0.0.1", server.getPort(), cfg);
    Connection connection = null;
    try
    try (Connection connection = factory.getConnection())
    {
      connection = factory.getConnection();
      final ByteString username = connection.search(searchBindDN,
          SearchScope.WHOLE_SUBTREE,
          SearchFilter.createFilterFromString("(uid=aduser)"));
@@ -2603,7 +2553,6 @@
    }
    finally
    {
      StaticUtils.close(connection);
      server.stop();
    }
  }
@@ -2633,10 +2582,8 @@
    // Test connect and close.
    final LDAPConnectionFactory factory = new LDAPConnectionFactory(
        "127.0.0.1", server.getPort(), cfg);
    Connection connection = null;
    try
    try (Connection connection = factory.getConnection())
    {
      connection = factory.getConnection();
      connection.search(searchBindDN, SearchScope.WHOLE_SUBTREE,
          SearchFilter.createFilterFromString("(uid=aduser)"));
      fail("Search attempt should have failed");
@@ -2648,7 +2595,6 @@
    }
    finally
    {
      StaticUtils.close(connection);
      server.stop();
    }
  }
@@ -2678,10 +2624,8 @@
    // Test connect and close.
    final LDAPConnectionFactory factory = new LDAPConnectionFactory(
        "127.0.0.1", server.getPort(), cfg);
    Connection connection = null;
    try
    try (Connection connection = factory.getConnection())
    {
      connection = factory.getConnection();
      connection.search(searchBindDN, SearchScope.WHOLE_SUBTREE,
          SearchFilter.createFilterFromString("(uid=aduser)"));
      fail("Search attempt should have failed");
@@ -2693,7 +2637,6 @@
    }
    finally
    {
      StaticUtils.close(connection);
      server.stop();
    }
  }
opendj-server-legacy/src/test/java/org/opends/server/extensions/TLSByteChannelTestCase.java
@@ -11,7 +11,7 @@
 * Header, with the fields enclosed by brackets [] replaced by your own identifying
 * information: "Portions Copyright [year] [name of copyright owner]".
 *
 * Copyright 2012-2015 ForgeRock AS.
 * Copyright 2012-2016 ForgeRock AS.
 */
package org.opends.server.extensions;
@@ -35,22 +35,16 @@
import javax.xml.xpath.XPathFactory;
import org.opends.server.DirectoryServerTestCase;
import org.opends.server.util.StaticUtils;
import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;
import org.w3c.dom.Document;
import org.w3c.dom.NodeList;
/**
 * Tests for {@link TLSByteChannel} class.
 */
@Test(groups = { "slow" }, sequential = true)
/** Tests for {@link TLSByteChannel} class. */
@Test(groups = "slow", sequential = true)
public class TLSByteChannelTestCase extends DirectoryServerTestCase
{
  /**
   * Cipher suite hardcoded from the IANA registry on internet.
   */
  /** Cipher suite hardcoded from the IANA registry on internet. */
  static final String[][] HARDCODED_CIPHER_SUITE = new String[][] {
        { "TLS_NULL_WITH_NULL_NULL" },
        { "TLS_RSA_WITH_NULL_MD5" },
@@ -378,9 +372,8 @@
    String url =
        "http://www.iana.org/assignments/tls-parameters/tls-parameters.xml";
    URLConnection conn = new URL(url).openConnection();
    BufferedInputStream bis = new BufferedInputStream(conn.getInputStream());
    try
    try (BufferedInputStream bis = new BufferedInputStream(conn.getInputStream()))
    {
      // JAXP boilerplate
      DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
@@ -395,10 +388,6 @@
      List<String> realCiphers = retrieveRealCiphers(doc, xpath, xPathExpr);
      return toDataProviderResult(realCiphers);
    }
    finally
    {
      StaticUtils.close(bis);
    }
  }
  private String[][] toDataProviderResult(List<String> realCiphers)
@@ -496,9 +485,7 @@
        .getSSF("TLS_KRB5_EXPORT_WITH_DES_CBC_40_SHA"));
  }
  /**
   * Ensures that no new overlapping cipher strings are added to the cipher map.
   */
  /** Ensures that no new overlapping cipher strings are added to the cipher map. */
  @Test
  public void checkNoUnknownOverlappingCiphers()
  {
@@ -520,15 +507,11 @@
    }
  }
  /**
   * Ensure the set (cipher1, cipher2) is different from the set (match1,
   * match2).
   */
  /** Ensure the set (cipher1, cipher2) is different from the set (match1, match2). */
  private boolean not(String cipher1, String cipher2, String match1,
      String match2)
  {
    return (!cipher1.equals(match1) || !cipher2.equals(match2))
        && (!cipher2.equals(match1) || !cipher1.equals(match2));
  }
}
opendj-server-legacy/src/test/java/org/opends/server/tools/ArgumentParserToolsTestCase.java
@@ -199,7 +199,7 @@
  @Test(dataProvider = "invalidArg")
  public void testManageTasks(final String[] args)
  {
    assertToolFailsWithUsage(ManageTasks.mainTaskInfo(args, null, outStream, errStream, false), ERRORS_ON_STDOUT);
    assertToolFailsWithUsage(ManageTasks.mainTaskInfo(args, outStream, errStream, false), ERRORS_ON_STDOUT);
  }
  @Test(dataProvider = "invalidArgs")
@@ -217,7 +217,7 @@
  @Test(dataProvider = "invalidArg")
  public void testStatus(final String[] args)
  {
    assertToolFailsWithUsage(StatusCli.mainCLI(args, false, outStream, errStream, null), ERRORS_ON_STDOUT);
    assertToolFailsWithUsage(StatusCli.mainCLI(args, outStream, errStream), ERRORS_ON_STDOUT);
  }
  @Test(dataProvider = "invalidArgs")
opendj-server-legacy/src/test/java/org/opends/server/tools/UpgradeTestCase.java
@@ -11,7 +11,7 @@
 * Header, with the fields enclosed by brackets [] replaced by your own identifying
 * information: "Portions Copyright [year] [name of copyright owner]".
 *
 * Portions Copyright 2013-2015 ForgeRock AS.
 * Portions Copyright 2013-2016 ForgeRock AS.
 */
package org.opends.server.tools;
@@ -34,9 +34,7 @@
import static com.forgerock.opendj.cli.ArgumentConstants.*;
import static org.testng.Assert.*;
/**
 * A set of test cases for the Upgrade tool.
 */
/** A set of test cases for the Upgrade tool. */
@SuppressWarnings("javadoc")
public class UpgradeTestCase extends ToolsTestCase
{
@@ -83,121 +81,77 @@
    Assertions.assertThat(out).contains(expected);
  }
  /**
   * Tests display help information.
   */
  /** Tests display help information. */
  @Test
  public void testUpgradeToolDisplaysHelpUsage()
  public void testUpgradeToolDisplaysHelpUsage() throws Exception
  {
    final ByteArrayOutputStream baos = new ByteArrayOutputStream();
    final PrintStream ps = new PrintStream(baos);
    try
    try (final ByteArrayOutputStream baos = new ByteArrayOutputStream();
        final PrintStream ps = new PrintStream(baos))
    {
      // The 'main' should exit with success code.
      assertEquals(UpgradeCli.main(setArgs("--help"), true, ps, ps), 0);
      assertContainsMessage(baos.toString(), INFO_UPGRADE_DESCRIPTION_CLI.get());
    }
    finally
    {
      StaticUtils.close(ps, baos);
    }
  }
  /**
   * Tests display help information.
   */
  /** Tests display help information. */
  @Test
  public void testUpgradeToolDisplaysHelpUsage2()
  public void testUpgradeToolDisplaysHelpUsage2() throws Exception
  {
    final ByteArrayOutputStream baos = new ByteArrayOutputStream();
    final PrintStream ps = new PrintStream(baos);
    try
    try (final ByteArrayOutputStream baos = new ByteArrayOutputStream();
        final PrintStream ps = new PrintStream(baos))
    {
      // The 'main' should exit with success code.
      assertEquals(UpgradeCli.main(setArgs("-H"), true, ps, ps), 0);
      assertContainsMessage(baos.toString(), INFO_UPGRADE_DESCRIPTION_CLI.get());
    }
    finally
    {
      StaticUtils.close(ps, baos);
    }
  }
  /**
   * Tests display help information.
   */
  /** Tests display help information. */
  @Test
  public void testUpgradeToolDisplaysHelpUsage3()
  public void testUpgradeToolDisplaysHelpUsage3() throws Exception
  {
    final ByteArrayOutputStream baos = new ByteArrayOutputStream();
    final PrintStream ps = new PrintStream(baos);
    try
    try (final ByteArrayOutputStream baos = new ByteArrayOutputStream();
        final PrintStream ps = new PrintStream(baos))
    {
      // The 'main' should exit with success code.
      assertEquals(UpgradeCli.main(setArgs("-?"), true, ps, ps), 0);
      assertContainsMessage(baos.toString(), INFO_UPGRADE_DESCRIPTION_CLI.get());
    }
    finally
    {
      StaticUtils.close(ps, baos);
    }
  }
  /**
   * Tests the upgrade tool with an invalid sub-command.
   */
  /** Tests the upgrade tool with an invalid sub-command. */
  @Test
  public void testUpgradeToolDoesntAllowWrongSubcommand()
  public void testUpgradeToolDoesntAllowWrongSubcommand() throws Exception
  {
    final ByteArrayOutputStream baos = new ByteArrayOutputStream();
    final PrintStream ps = new PrintStream(baos);
    try
    try (final ByteArrayOutputStream baos = new ByteArrayOutputStream();
        final PrintStream ps = new PrintStream(baos))
    {
      // The 'main' should exit with an error code.
      assertEquals(UpgradeCli.main(setArgs("-- wrong"), true, ps, ps), 1);
      assertContainsMessage(baos.toString(), ERR_ERROR_PARSING_ARGS.get(""));
    }
    finally
    {
      StaticUtils.close(ps, baos);
    }
  }
  /**
   * Tests the upgrade tool with an invalid sub-command.
   */
  /** Tests the upgrade tool with an invalid sub-command. */
  @Test
  public void testUpgradeToolDoesntAllowWrongSubcommand2()
  public void testUpgradeToolDoesntAllowWrongSubcommand2() throws Exception
  {
    final ByteArrayOutputStream baos = new ByteArrayOutputStream();
    final PrintStream ps = new PrintStream(baos);
    try
    try (final ByteArrayOutputStream baos = new ByteArrayOutputStream();
        final PrintStream ps = new PrintStream(baos))
    {
      // The 'main' should exit with an error code.
      assertEquals(UpgradeCli.main(setArgs("--wrong"), true, ps, ps), 1);
      assertContainsMessage(baos.toString(), ERR_ERROR_PARSING_ARGS.get(""));
    }
    finally
    {
      StaticUtils.close(ps, baos);
    }
  }
  /**
   * The upgrade tool disallows the force sub-command used with 'interactive
   * mode'.
   */
  /** The upgrade tool disallows the force sub-command used with 'interactive mode'. */
  @Test
  public void testUpgradeToolDoesntAllowInteractiveAndForce()
  public void testUpgradeToolDoesntAllowInteractiveAndForce() throws Exception
  {
    final ByteArrayOutputStream baos = new ByteArrayOutputStream();
    final PrintStream ps = new PrintStream(baos);
    try
    try (final ByteArrayOutputStream baos = new ByteArrayOutputStream();
        final PrintStream ps = new PrintStream(baos))
    {
      // The 'main' should exit with an error code.
      assertEquals(UpgradeCli.main(setArgs("--force"), true, ps, ps), 1);
@@ -206,15 +160,9 @@
      assertContainsMessage(baos.toString(), ERR_UPGRADE_INCOMPATIBLE_ARGS.get(
          OPTION_LONG_FORCE_UPGRADE, "interactive mode"));
    }
    finally
    {
      StaticUtils.close(ps, baos);
    }
  }
  /**
   * Upgrade tool allows use of force and no-prompt sub-commands.
   */
  /** Upgrade tool allows use of force and no-prompt sub-commands. */
  @Test
  public void testUpgradeToolAllowsNonInteractiveAndForce() throws Exception
  {
opendj-server-legacy/src/test/java/org/opends/server/tools/makeldif/MakeLDIFTestCase.java
@@ -13,7 +13,7 @@
 *
 * Copyright 2006-2008 Sun Microsystems, Inc.
 * Portions Copyright 2006 Brighton Consulting, Inc.
 * Portions Copyright 2013-2015 ForgeRock AS.
 * Portions Copyright 2013-2016 ForgeRock AS.
 */
package org.opends.server.tools.makeldif;
@@ -21,27 +21,30 @@
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import org.forgerock.i18n.LocalizableMessage;
import org.opends.server.TestCaseUtils;
import org.opends.server.core.DirectoryServer;
import org.opends.server.tasks.LdifFileWriter;
import org.opends.server.tools.ToolsTestCase;
import org.opends.server.types.*;
import org.opends.server.types.Attribute;
import org.opends.server.types.Attributes;
import org.opends.server.types.Entry;
import org.opends.server.types.InitializationException;
import org.opends.server.types.LDIFImportConfig;
import org.opends.server.util.LDIFException;
import org.opends.server.util.LDIFReader;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;
import static org.testng.Assert.*;
import static org.opends.messages.ToolMessages.*;
import static org.testng.Assert.*;
/**
 * A set of test cases for the MakeLDIF tool.
 */
public class MakeLDIFTestCase
    extends ToolsTestCase
/** A set of test cases for the MakeLDIF tool. */
@SuppressWarnings("javadoc")
public class MakeLDIFTestCase extends ToolsTestCase
{
  private String resourcePath;
@@ -77,7 +80,7 @@
    // Test must show "missingVar" missing on line 1.
    // Previous behaviour showed "missingVar" on line 5.
    TemplateFile templateFile = new TemplateFile(resourcePath);
    TemplateFile templateFile = new TemplateFile(resourcePath, new Random());
    List<LocalizableMessage> warns = new ArrayList<>();
    try
@@ -143,14 +146,12 @@
    };
  }
  /**
   * Test for parsing escaped  character in templates.
   */
  /** Test for parsing escaped character in templates. */
  @Test(dataProvider = "validTemplates")
  public void testParsingEscapeCharInTemplate(String testName, String[] lines)
      throws Exception
  {
    TemplateFile templateFile = new TemplateFile(resourcePath);
    TemplateFile templateFile = new TemplateFile(resourcePath, new Random());
    List<LocalizableMessage> warns = new ArrayList<>();
    templateFile.parse(lines, warns);
    assertTrue(warns.isEmpty(),"Warnings in parsing test template " + testName );
@@ -302,10 +303,8 @@
    };
  }
  /**
   * Test for escaped characters in templates, check LDIF output.
   */
  @Test(dataProvider="templatesToTestLDIFOutput", dependsOnMethods = { "testParsingEscapeCharInTemplate"})
  /** Test for escaped characters in templates, check LDIF output. */
  @Test(dataProvider = "templatesToTestLDIFOutput", dependsOnMethods = "testParsingEscapeCharInTemplate")
  public void testLDIFOutputFromTemplate(String testName, String[] lines,
                                         String attrName, String expectedValue) throws Exception
  {
@@ -339,7 +338,7 @@
   * Test for escaped characters in templates, check LDIF output when
   * the templates combines escaped characters and variables.
   */
  @Test(dependsOnMethods = { "testParsingEscapeCharInTemplate"})
  @Test(dependsOnMethods = "testParsingEscapeCharInTemplate")
  public void testOutputCombineEscapeCharInTemplate() throws Exception
  {
    String[] lines =
@@ -358,7 +357,6 @@
            "",
        };
    File tmpFile = File.createTempFile("combineEscapeChar", "out.ldif");
    tmpFile.deleteOnExit();
    String outLdifFilePath = tmpFile.getAbsolutePath();
opendj-server-legacy/src/test/java/org/opends/server/util/TestStaticUtils.java
@@ -12,11 +12,10 @@
 * information: "Portions Copyright [year] [name of copyright owner]".
 *
 * Copyright 2006-2009 Sun Microsystems, Inc.
 * Portions Copyright 2013-2015 ForgeRock AS.
 * Portions Copyright 2013-2016 ForgeRock AS.
 */
package org.opends.server.util;
import static org.opends.server.util.CollectionUtils.*;
import static org.testng.Assert.*;
import java.io.BufferedReader;
@@ -31,9 +30,6 @@
import java.nio.channels.FileChannel;
import java.nio.channels.FileLock;
import java.text.ParseException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.LinkedList;
import java.util.List;
@@ -600,71 +596,6 @@
  }
  /**
   * Create test strings for the
   * {@link StaticUtils#isRelativePath(String)}.
   *
   * @return Returns an array of test data.
   */
  @DataProvider(name = "isRelativePathTestData")
  public Object[][] createIsRelativePathTestData() {
    String root = File.listRoots()[0].getPath();
    return new Object[][] { { "", true }, { root, false },
         { root + "foo", false }, { "foo", true },
         { "foo" + File.separator + "bar", true },
         { root + "foo" + File.separator + "bar", false },
         { ".", true }, { "..", true },
         { root + "foo" + File.separator + ".", false },
         { root + "foo" + File.separator + "..", false } };
  }
  /**
   * Tests the {@link StaticUtils#isRelativePath(String)} method.
   *
   * @param path
   *          The test string.
   * @param result
   *          Expected result.
   * @throws Exception
   *           If the test failed unexpectedly.
   */
  @Test(dataProvider = "isRelativePathTestData")
  public void testIsRelativePath(String path, boolean result)
      throws Exception {
    Assert.assertEquals(StaticUtils.isRelativePath(path), result);
  }
  /**
   * Create test lists for the {@link StaticUtils#listToArray(List)}.
   *
   * @return Returns an array of test data.
   */
  @DataProvider(name = "listToArrayTestData")
  public Object[][] createListToArrayTestData() {
    return new Object[][] { { null }, { new String[] {} },
        { new String[] { "aaa" } },
        { new String[] { "aaa", "bbb", "ccc" } } };
  }
  /**
   * Tests the {@link StaticUtils#listToArray(List)} method.
   *
   * @param strings
   *          The test string list.
   * @throws Exception
   *           If the test failed unexpectedly.
   */
  @Test(dataProvider = "listToArrayTestData")
  public void testListToArray(String[] strings) throws Exception {
    if (strings != null) {
      List<String> list = new ArrayList<>(strings.length);
      Collections.addAll(list, strings);
      Assert.assertEquals(StaticUtils.listToArray(list), strings);
    } else {
      Assert.assertNull(StaticUtils.listToArray(null));
    }
  }
  /**
   * Tests the {@link StaticUtils#moveFile(java.io.File, java.io.File)}
   * method.
   *
@@ -1115,62 +1046,6 @@
    Assert.assertEquals(builder.toString(), expected);
  }
  /**
   * Create test lists for the
   * {@link StaticUtils#listsAreEqual(List, List)} method.
   *
   * @return Returns an array of test data.
   */
  @DataProvider(name = "listsAreEqualTestData")
  public Object[][] createListsAreEqualTestData() {
    return new Object[][] {
        // Check null behaviour.
        { null, null, true },
        { null, Collections.emptyList(), false },
        { Collections.emptyList(), null, false },
        // Check empty-list behaviour.
        { Collections.emptyList(), Collections.emptyList(), true },
        { Collections.singletonList(0), Collections.emptyList(), false },
        { Collections.emptyList(), Collections.singletonList(0), false },
        // Check single-element behaviour.
        { Collections.singletonList(0), Collections.singletonList(0), true },
        { Collections.singletonList(0), Collections.singletonList(1), false },
        // Check multi-element random access behaviour.
        { Arrays.asList(0, 1), Arrays.asList(0, 1), true },
        { Arrays.asList(0, 1), Arrays.asList(1, 0), false },
        // ...With duplicates.
        { Arrays.asList(0, 1), Arrays.asList(0, 1, 1), false },
        // Check multi-element sequential behaviour.
        { newLinkedList(0, 1), newLinkedList(0, 1), true },
        { newLinkedList(0, 1), newLinkedList(1, 0), false },
        // ...With duplicates.
        { newLinkedList(0, 1), newLinkedList(0, 1, 1), false } };
  }
  /**
   * Tests the {@link StaticUtils#listsAreEqual(List, List)} method.
   *
   * @param list1
   *          The first list.
   * @param list2
   *          The second list.
   * @param result
   *          The expected equality result.
   * @throws Exception
   *           If the test failed unexpectedly.
   */
  @Test(dataProvider = "listsAreEqualTestData")
  public void testListsAreEqual(List<?> list1, List<?> list2, boolean result)
      throws Exception {
    Assert.assertEquals(StaticUtils.listsAreEqual(list1, list2), result);
  }
  @Test
  public void testStackTraceHasCause() throws Exception
  {