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

Nicolas Capponi
05.29.2013 e09805c46fdae2654b3564a240097e60e4f9f5f2
opendj-admin/pom.xml
@@ -86,6 +86,7 @@
            <configuration>
              <messageFiles>
                <messageFile>com/forgerock/opendj/ldap/admin.properties</messageFile>
                <messageFile>com/forgerock/opendj/ldap/config.properties</messageFile>
                <messageFile>com/forgerock/opendj/ldap/protocol.properties</messageFile>
              </messageFiles>
            </configuration>
opendj-admin/src/main/java/org/opends/server/admin/AliasDefaultBehaviorProvider.java
@@ -94,7 +94,7 @@
    public final LocalizableMessage getSynopsis(Locale locale) {
        ManagedObjectDefinitionI18NResource resource = ManagedObjectDefinitionI18NResource.getInstance();
        String property = "property." + propertyName + ".default-behavior.alias.synopsis";
        return resource.getLocalizableMessage(definition, property, locale);
        return resource.getMessage(definition, property, locale);
    }
}
opendj-admin/src/main/java/org/opends/server/admin/server/ConfigAddListenerAdaptor.java
@@ -44,6 +44,7 @@
import org.opends.server.admin.SetRelationDefinition;
import org.opends.server.admin.DefinitionDecodingException.Reason;
import org.opends.server.api.ConfigAddListener;
import org.opends.server.config.ConfigEntry;
import org.opends.server.config.ConfigException;
import org.opends.server.types.ConfigChangeResult;
import org.forgerock.opendj.ldap.DN;
@@ -206,7 +207,7 @@
  public boolean configAddIsAcceptable(ConfigEntry configEntry,
      LocalizableMessageBuilder unacceptableReason) {
    DN dn = configEntry.getDN();
    AttributeValue av = dn.getRDN().getAttributeValue(0);
    AttributeValue av = dn.rdn().getAttributeValue(0);
    String name = av.getValue().toString().trim();
    try {
opendj-admin/src/main/java/org/opends/server/admin/server/ConfigChangeListenerAdaptor.java
@@ -34,7 +34,6 @@
import java.util.List;
import java.util.Set;
import com.forgerock.opendj.ldap.AdminMessages;
import com.forgerock.opendj.util.StaticUtils;
import org.forgerock.i18n.LocalizableMessage;
@@ -56,6 +55,7 @@
import org.opends.server.admin.UndefinedDefaultBehaviorProvider;
import org.opends.server.api.ConfigChangeListener;
import org.opends.server.api.ConfigDeleteListener;
import org.opends.server.config.ConfigEntry;
import org.opends.server.config.ConfigException;
import org.opends.server.core.DirectoryServer;
import org.opends.server.types.ConfigChangeResult;
@@ -75,8 +75,8 @@
        ConfigChangeListener {
    private static final Logger debugLogger = LoggerFactory.getLogger(ConfigChangeListenerAdaptor.class);
    private static final LocalizedLogger adminLogger = LocalizedLogger.getLocalizedLogger(
            ERR_ADMIN_MANAGED_OBJECT_DOES_NOT_EXIST.get("").resourceName());
    private static final LocalizedLogger adminLogger = LocalizedLogger
            .getLocalizedLogger(ERR_ADMIN_MANAGED_OBJECT_DOES_NOT_EXIST.get("").resourceName());
    /**
     * A default behavior visitor used for determining the set of dependencies.
@@ -278,7 +278,7 @@
        DN parent = dn.parent();
        if (parent != null) {
            ConfigEntry configEntry = getConfigEntry(dn.parent();
            ConfigEntry configEntry = getConfigEntry(dn.parent());
            if (configEntry != null) {
                configEntry.registerDeleteListener(cleanerListener);
            }
@@ -382,7 +382,7 @@
        // Now remove the cleaner listener as it will no longer be
        // needed.
        ConfigEntry parentConfigEntry = getConfigEntry(dn.parent();
        ConfigEntry parentConfigEntry = getConfigEntry(dn.parent());
        if (parentConfigEntry != null) {
            parentConfigEntry.deregisterDeleteListener(cleanerListener);
        }
opendj-admin/src/main/java/org/opends/server/admin/server/ConfigDeleteListenerAdaptor.java
@@ -45,6 +45,7 @@
import org.opends.server.admin.SetRelationDefinition;
import org.opends.server.admin.DefinitionDecodingException.Reason;
import org.opends.server.api.ConfigDeleteListener;
import org.opends.server.config.ConfigEntry;
import org.opends.server.config.ConfigException;
import org.opends.server.types.ConfigChangeResult;
import org.forgerock.opendj.ldap.DN;
opendj-admin/src/main/java/org/opends/server/admin/server/DelayedConfigAddListener.java
@@ -28,6 +28,7 @@
import org.opends.server.api.ConfigAddListener;
import org.opends.server.api.ConfigDeleteListener;
import org.opends.server.config.ConfigEntry;
import org.opends.server.config.ConfigException;
import org.opends.server.core.DirectoryServer;
import org.opends.server.types.ConfigChangeResult;
opendj-admin/src/main/java/org/opends/server/admin/server/ServerManagedObject.java
@@ -53,7 +53,9 @@
import org.opends.server.api.ConfigAddListener;
import org.opends.server.api.ConfigChangeListener;
import org.opends.server.api.ConfigDeleteListener;
import org.opends.server.config.ConfigEntry;
import org.opends.server.config.ConfigException;
import org.opends.server.core.DirectoryServer;
import org.opends.server.util.DynamicConstants;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
opendj-admin/src/main/java/org/opends/server/admin/server/ServerManagedObjectAddListener.java
@@ -26,8 +26,6 @@
 */
package org.opends.server.admin.server;
import org.forgerock.i18n.LocalizableMessage;
import java.util.List;
@@ -35,44 +33,39 @@
import org.opends.server.admin.Configuration;
import org.opends.server.types.ConfigChangeResult;
/**
 * This interface defines the methods that a Directory Server
 * configurable component should implement if it wishes to be able to
 * receive notifications when a new server managed object is added.
 * This interface defines the methods that a Directory Server configurable
 * component should implement if it wishes to be able to receive notifications
 * when a new server managed object is added.
 *
 * @param <T>
 *          The type of server managed object that this listener
 *          should be notified about.
 *            The type of server managed object that this listener should be
 *            notified about.
 */
public interface ServerManagedObjectAddListener<T extends Configuration> {
  /**
   * Indicates whether the proposed addition of a new server managed
   * object is acceptable to this add listener.
   *
   * @param mo
   *          The server managed object that will be added.
   * @param unacceptableReasons
   *          A list that can be used to hold messages about why the
   *          provided server managed object is not acceptable.
   * @return Returns <code>true</code> if the proposed addition is
   *         acceptable, or <code>false</code> if it is not.
   */
  public boolean isConfigurationAddAcceptable(
      ServerManagedObject<? extends T> mo, List<LocalizableMessage> unacceptableReasons);
    /**
     * Indicates whether the proposed addition of a new server managed object is
     * acceptable to this add listener.
     *
     * @param mo
     *            The server managed object that will be added.
     * @param unacceptableReasons
     *            A list that can be used to hold messages about why the
     *            provided server managed object is not acceptable.
     * @return Returns <code>true</code> if the proposed addition is acceptable,
     *         or <code>false</code> if it is not.
     */
    public boolean isConfigurationAddAcceptable(ServerManagedObject<? extends T> mo,
            List<LocalizableMessage> unacceptableReasons);
  /**
   * Adds a new server managed object to this add listener.
   *
   * @param mo
   *          The server managed object that will be added.
   * @return Returns information about the result of adding the server
   *         managed object.
   */
  public ConfigChangeResult applyConfigurationAdd(
      ServerManagedObject<? extends T> mo);
    /**
     * Adds a new server managed object to this add listener.
     *
     * @param mo
     *            The server managed object that will be added.
     * @return Returns information about the result of adding the server managed
     *         object.
     */
    public ConfigChangeResult applyConfigurationAdd(ServerManagedObject<? extends T> mo);
}
opendj-admin/src/main/java/org/opends/server/admin/server/ServerManagedObjectAddListenerAdaptor.java
@@ -26,75 +26,58 @@
 */
package org.opends.server.admin.server;
import java.util.List;
import org.forgerock.i18n.LocalizableMessage;
import org.opends.server.admin.Configuration;
import org.opends.server.types.ConfigChangeResult;
/**
 * An adaptor class which converts
 * {@link ServerManagedObjectAddListener} callbacks to
 * {@link ConfigurationAddListener} callbacks.
 * An adaptor class which converts {@link ServerManagedObjectAddListener}
 * callbacks to {@link ConfigurationAddListener} callbacks.
 *
 * @param <T>
 *          The type of server managed object that this listener
 *          should be notified about.
 *            The type of server managed object that this listener should be
 *            notified about.
 */
final class ServerManagedObjectAddListenerAdaptor<T extends Configuration>
    implements ServerManagedObjectAddListener<T> {
final class ServerManagedObjectAddListenerAdaptor<T extends Configuration> implements ServerManagedObjectAddListener<T> {
  // The underlying add listener.
  private final ConfigurationAddListener<T> listener;
    // The underlying add listener.
    private final ConfigurationAddListener<T> listener;
    /**
     * Creates a new server managed object add listener adaptor.
     *
     * @param listener
     *            The underlying add listener.
     */
    public ServerManagedObjectAddListenerAdaptor(ConfigurationAddListener<T> listener) {
        this.listener = listener;
    }
    /**
     * {@inheritDoc}
     */
    public ConfigChangeResult applyConfigurationAdd(ServerManagedObject<? extends T> mo) {
        return listener.applyConfigurationAdd(mo.getConfiguration());
    }
  /**
   * Creates a new server managed object add listener adaptor.
   *
   * @param listener
   *          The underlying add listener.
   */
  public ServerManagedObjectAddListenerAdaptor(
      ConfigurationAddListener<T> listener) {
    this.listener = listener;
  }
    /**
     * Gets the configuration add listener associated with this adaptor.
     *
     * @return Returns the configuration add listener associated with this
     *         adaptor.
     */
    public ConfigurationAddListener<T> getConfigurationAddListener() {
        return listener;
    }
  /**
   * {@inheritDoc}
   */
  public ConfigChangeResult applyConfigurationAdd(
      ServerManagedObject<? extends T> mo) {
    return listener.applyConfigurationAdd(mo.getConfiguration());
  }
  /**
   * Gets the configuration add listener associated with this adaptor.
   *
   * @return Returns the configuration add listener associated with
   *         this adaptor.
   */
  public ConfigurationAddListener<T> getConfigurationAddListener() {
    return listener;
  }
  /**
   * {@inheritDoc}
   */
  public boolean isConfigurationAddAcceptable(
      ServerManagedObject<? extends T> mo, List<LocalizableMessage> unacceptableReasons) {
    return listener.isConfigurationAddAcceptable(mo.getConfiguration(),
        unacceptableReasons);
  }
    /**
     * {@inheritDoc}
     */
    public boolean isConfigurationAddAcceptable(ServerManagedObject<? extends T> mo,
            List<LocalizableMessage> unacceptableReasons) {
        return listener.isConfigurationAddAcceptable(mo.getConfiguration(), unacceptableReasons);
    }
}
opendj-admin/src/main/java/org/opends/server/admin/server/ServerManagedObjectChangeListenerAdaptor.java
@@ -26,77 +26,59 @@
 */
package org.opends.server.admin.server;
import java.util.List;
import org.forgerock.i18n.LocalizableMessage;
import org.opends.server.admin.Configuration;
import org.opends.server.types.ConfigChangeResult;
/**
 * An adaptor class which converts
 * {@link ServerManagedObjectChangeListener} callbacks to
 * {@link ConfigurationChangeListener} callbacks.
 * An adaptor class which converts {@link ServerManagedObjectChangeListener}
 * callbacks to {@link ConfigurationChangeListener} callbacks.
 *
 * @param <T>
 *          The type of server managed object that this listener
 *          should be notified about.
 *            The type of server managed object that this listener should be
 *            notified about.
 */
final class ServerManagedObjectChangeListenerAdaptor<T extends Configuration>
    implements ServerManagedObjectChangeListener<T> {
final class ServerManagedObjectChangeListenerAdaptor<T extends Configuration> implements
        ServerManagedObjectChangeListener<T> {
  // The underlying change listener.
  private final ConfigurationChangeListener<? super T> listener;
    // The underlying change listener.
    private final ConfigurationChangeListener<? super T> listener;
    /**
     * Creates a new server managed object change listener adaptor.
     *
     * @param listener
     *            The underlying change listener.
     */
    public ServerManagedObjectChangeListenerAdaptor(ConfigurationChangeListener<? super T> listener) {
        this.listener = listener;
    }
    /**
     * {@inheritDoc}
     */
    public ConfigChangeResult applyConfigurationChange(ServerManagedObject<? extends T> mo) {
        return listener.applyConfigurationChange(mo.getConfiguration());
    }
  /**
   * Creates a new server managed object change listener adaptor.
   *
   * @param listener
   *          The underlying change listener.
   */
  public ServerManagedObjectChangeListenerAdaptor(
      ConfigurationChangeListener<? super T> listener) {
    this.listener = listener;
  }
    /**
     * Gets the configuration change listener associated with this adaptor.
     *
     * @return Returns the configuration change listener associated with this
     *         adaptor.
     */
    public ConfigurationChangeListener<? super T> getConfigurationChangeListener() {
        return listener;
    }
  /**
   * {@inheritDoc}
   */
  public ConfigChangeResult applyConfigurationChange(
      ServerManagedObject<? extends T> mo) {
    return listener.applyConfigurationChange(mo.getConfiguration());
  }
  /**
   * Gets the configuration change listener associated with this
   * adaptor.
   *
   * @return Returns the configuration change listener associated with
   *         this adaptor.
   */
  public ConfigurationChangeListener<? super T>
  getConfigurationChangeListener() {
    return listener;
  }
  /**
   * {@inheritDoc}
   */
  public boolean isConfigurationChangeAcceptable(
      ServerManagedObject<? extends T> mo, List<LocalizableMessage> unacceptableReasons) {
    return listener.isConfigurationChangeAcceptable(mo.getConfiguration(),
        unacceptableReasons);
  }
    /**
     * {@inheritDoc}
     */
    public boolean isConfigurationChangeAcceptable(ServerManagedObject<? extends T> mo,
            List<LocalizableMessage> unacceptableReasons) {
        return listener.isConfigurationChangeAcceptable(mo.getConfiguration(), unacceptableReasons);
    }
}
opendj-admin/src/main/java/org/opends/server/admin/server/ServerManagedObjectDeleteListener.java
@@ -26,8 +26,6 @@
 */
package org.opends.server.admin.server;
import org.forgerock.i18n.LocalizableMessage;
import java.util.List;
@@ -35,46 +33,39 @@
import org.opends.server.admin.Configuration;
import org.opends.server.types.ConfigChangeResult;
/**
 * This interface defines the methods that a Directory Server
 * configurable component should implement if it wishes to be able to
 * receive notifications when an existing server managed object is
 * deleted.
 * This interface defines the methods that a Directory Server configurable
 * component should implement if it wishes to be able to receive notifications
 * when an existing server managed object is deleted.
 *
 * @param <T>
 *          The type of server managed object that this listener
 *          should be notified about.
 *            The type of server managed object that this listener should be
 *            notified about.
 */
public interface ServerManagedObjectDeleteListener<T extends Configuration> {
  /**
   * Indicates whether the proposed deletion of an existing server
   * managed object is acceptable to this delete listener.
   *
   * @param mo
   *          The server managed object that will be deleted.
   * @param unacceptableReasons
   *          A list that can be used to hold messages about why the
   *          provided server managed object is not acceptable.
   * @return Returns <code>true</code> if the proposed deletion is
   *         acceptable, or <code>false</code> if it is not.
   */
  public boolean isConfigurationDeleteAcceptable(
      ServerManagedObject<? extends T> mo, List<LocalizableMessage> unacceptableReasons);
    /**
     * Indicates whether the proposed deletion of an existing server managed
     * object is acceptable to this delete listener.
     *
     * @param mo
     *            The server managed object that will be deleted.
     * @param unacceptableReasons
     *            A list that can be used to hold messages about why the
     *            provided server managed object is not acceptable.
     * @return Returns <code>true</code> if the proposed deletion is acceptable,
     *         or <code>false</code> if it is not.
     */
    public boolean isConfigurationDeleteAcceptable(ServerManagedObject<? extends T> mo,
            List<LocalizableMessage> unacceptableReasons);
  /**
   * Deletes an existing server managed object from this delete
   * listener.
   *
   * @param mo
   *          The existing server managed object that will be deleted.
   * @return Returns information about the result of deleting the
   *         server managed object.
   */
  public ConfigChangeResult applyConfigurationDelete(
      ServerManagedObject<? extends T> mo);
    /**
     * Deletes an existing server managed object from this delete listener.
     *
     * @param mo
     *            The existing server managed object that will be deleted.
     * @return Returns information about the result of deleting the server
     *         managed object.
     */
    public ConfigChangeResult applyConfigurationDelete(ServerManagedObject<? extends T> mo);
}
opendj-admin/src/main/java/org/opends/server/admin/server/ServerManagedObjectDeleteListenerAdaptor.java
@@ -26,76 +26,59 @@
 */
package org.opends.server.admin.server;
import java.util.List;
import org.forgerock.i18n.LocalizableMessage;
import org.opends.server.admin.Configuration;
import org.opends.server.types.ConfigChangeResult;
/**
 * An adaptor class which converts
 * {@link ServerManagedObjectDeleteListener} callbacks to
 * {@link ConfigurationDeleteListener} callbacks.
 * An adaptor class which converts {@link ServerManagedObjectDeleteListener}
 * callbacks to {@link ConfigurationDeleteListener} callbacks.
 *
 * @param <T>
 *          The type of server managed object that this listener
 *          should be notified about.
 *            The type of server managed object that this listener should be
 *            notified about.
 */
final class ServerManagedObjectDeleteListenerAdaptor<T extends Configuration>
    implements ServerManagedObjectDeleteListener<T> {
final class ServerManagedObjectDeleteListenerAdaptor<T extends Configuration> implements
        ServerManagedObjectDeleteListener<T> {
  // The underlying delete listener.
  private final ConfigurationDeleteListener<T> listener;
    // The underlying delete listener.
    private final ConfigurationDeleteListener<T> listener;
    /**
     * Creates a new server managed object delete listener adaptor.
     *
     * @param listener
     *            The underlying delete listener.
     */
    public ServerManagedObjectDeleteListenerAdaptor(ConfigurationDeleteListener<T> listener) {
        this.listener = listener;
    }
    /**
     * {@inheritDoc}
     */
    public ConfigChangeResult applyConfigurationDelete(ServerManagedObject<? extends T> mo) {
        return listener.applyConfigurationDelete(mo.getConfiguration());
    }
  /**
   * Creates a new server managed object delete listener adaptor.
   *
   * @param listener
   *          The underlying delete listener.
   */
  public ServerManagedObjectDeleteListenerAdaptor(
      ConfigurationDeleteListener<T> listener) {
    this.listener = listener;
  }
    /**
     * Gets the configuration delete listener associated with this adaptor.
     *
     * @return Returns the configuration delete listener associated with this
     *         adaptor.
     */
    public ConfigurationDeleteListener<T> getConfigurationDeleteListener() {
        return listener;
    }
  /**
   * {@inheritDoc}
   */
  public ConfigChangeResult applyConfigurationDelete(
      ServerManagedObject<? extends T> mo) {
    return listener.applyConfigurationDelete(mo.getConfiguration());
  }
  /**
   * Gets the configuration delete listener associated with this
   * adaptor.
   *
   * @return Returns the configuration delete listener associated with
   *         this adaptor.
   */
  public ConfigurationDeleteListener<T> getConfigurationDeleteListener() {
    return listener;
  }
  /**
   * {@inheritDoc}
   */
  public boolean isConfigurationDeleteAcceptable(
      ServerManagedObject<? extends T> mo, List<LocalizableMessage> unacceptableReasons) {
    return listener.isConfigurationDeleteAcceptable(mo.getConfiguration(),
        unacceptableReasons);
  }
    /**
     * {@inheritDoc}
     */
    public boolean isConfigurationDeleteAcceptable(ServerManagedObject<? extends T> mo,
            List<LocalizableMessage> unacceptableReasons) {
        return listener.isConfigurationDeleteAcceptable(mo.getConfiguration(), unacceptableReasons);
    }
}
opendj-admin/src/main/java/org/opends/server/admin/server/ServerManagementContext.java
@@ -72,6 +72,7 @@
import org.opends.server.admin.UndefinedDefaultBehaviorProvider;
import org.opends.server.admin.UnknownPropertyDefinitionException;
import org.opends.server.admin.DefinitionDecodingException.Reason;
import org.opends.server.config.ConfigEntry;
import org.opends.server.config.ConfigException;
import org.opends.server.core.DirectoryServer;
import org.forgerock.opendj.admin.meta.RootCfgDefn;
opendj-admin/src/main/java/org/opends/server/api/ConfigAddListener.java
@@ -27,6 +27,7 @@
package org.opends.server.api;
import org.forgerock.i18n.LocalizableMessageBuilder;
import org.opends.server.config.ConfigEntry;
import org.opends.server.types.ConfigChangeResult;
/**
opendj-admin/src/main/java/org/opends/server/api/ConfigChangeListener.java
@@ -26,56 +26,40 @@
 */
package org.opends.server.api;
import org.opends.server.config.ConfigEntry;
import org.opends.server.types.ConfigChangeResult;
import org.forgerock.i18n.LocalizableMessageBuilder;
/**
 * This interface defines the methods that a Directory Server
 * component should implement if it wishes to be able to receive
 * notification of changes to a configuration entry.
 * This interface defines the methods that a Directory Server component should
 * implement if it wishes to be able to receive notification of changes to a
 * configuration entry.
 */
@org.opends.server.types.PublicAPI(
     stability=org.opends.server.types.StabilityLevel.VOLATILE,
     mayInstantiate=false,
     mayExtend=true,
     mayInvoke=false)
public interface ConfigChangeListener
{
  /**
   * Indicates whether the configuration entry that will result from a
   * proposed modification is acceptable to this change listener.
   *
   * @param  configEntry         The configuration entry that will
   *                             result from the requested update.
   * @param  unacceptableReason  A buffer to which this method can
   *                             append a human-readable message
   *                             explaining why the proposed change is
   *                             not acceptable.
   *
   * @return  {@code true} if the proposed entry contains an
   *          acceptable configuration, or {@code false} if it does
   *          not.
   */
  public boolean configChangeIsAcceptable(ConfigEntry configEntry,
                      LocalizableMessageBuilder unacceptableReason);
public interface ConfigChangeListener {
    /**
     * Indicates whether the configuration entry that will result from a
     * proposed modification is acceptable to this change listener.
     *
     * @param configEntry
     *            The configuration entry that will result from the requested
     *            update.
     * @param unacceptableReason
     *            A buffer to which this method can append a human-readable
     *            message explaining why the proposed change is not acceptable.
     * @return {@code true} if the proposed entry contains an acceptable
     *         configuration, or {@code false} if it does not.
     */
    public boolean configChangeIsAcceptable(ConfigEntry configEntry, LocalizableMessageBuilder unacceptableReason);
  /**
   * Attempts to apply a new configuration to this Directory Server
   * component based on the provided changed entry.
   *
   * @param  configEntry  The configuration entry that containing the
   *                      updated configuration for this component.
   *
   * @return  Information about the result of processing the
   *          configuration change.
   */
  public ConfigChangeResult applyConfigurationChange(
                                 ConfigEntry configEntry);
    /**
     * Attempts to apply a new configuration to this Directory Server component
     * based on the provided changed entry.
     *
     * @param configEntry
     *            The configuration entry that containing the updated
     *            configuration for this component.
     * @return Information about the result of processing the configuration
     *         change.
     */
    public ConfigChangeResult applyConfigurationChange(ConfigEntry configEntry);
}
opendj-admin/src/main/java/org/opends/server/api/ConfigDeleteListener.java
@@ -28,6 +28,7 @@
import org.opends.server.config.ConfigEntry;
import org.opends.server.types.ConfigChangeResult;
import org.forgerock.i18n.LocalizableMessageBuilder;
opendj-admin/src/main/java/org/opends/server/config/ConfigEntry.java
New file
@@ -0,0 +1,222 @@
/*
 * CDDL HEADER START
 *
 * The contents of this file are subject to the terms of the
 * Common Development and Distribution License, Version 1.0 only
 * (the "License").  You may not use this file except in compliance
 * with the License.
 *
 * You can obtain a copy of the license at
 * trunk/opends/resource/legal-notices/OpenDS.LICENSE
 * or https://OpenDS.dev.java.net/OpenDS.LICENSE.
 * See the License for the specific language governing permissions
 * and limitations under the License.
 *
 * When distributing Covered Code, include this CDDL HEADER in each
 * file and include the License file at
 * trunk/opends/resource/legal-notices/OpenDS.LICENSE.  If applicable,
 * add the following below this CDDL HEADER, with the fields enclosed
 * by brackets "[]" replaced with your own identifying information:
 *      Portions Copyright [yyyy] [name of copyright owner]
 *
 * CDDL HEADER END
 *
 *
 *      Copyright 2006-2008 Sun Microsystems, Inc.
 */
package org.opends.server.config;
import java.util.concurrent.CopyOnWriteArrayList;
import org.forgerock.opendj.ldap.DN;
import org.forgerock.opendj.ldap.Entries;
import org.forgerock.opendj.ldap.Entry;
import org.forgerock.opendj.ldap.schema.ObjectClass;
import org.opends.server.api.ConfigAddListener;
import org.opends.server.api.ConfigChangeListener;
import org.opends.server.api.ConfigDeleteListener;
import org.opends.server.core.DirectoryServer;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
 * A config entry wraps an entry to provides add, change and delete listeners on
 * it.
 */
public final class ConfigEntry {
    private static final Logger debugLogger = LoggerFactory.getLogger(ConfigEntry.class);
    /** The set of add listeners that have been registered with this entry. */
    private final CopyOnWriteArrayList<ConfigAddListener> addListeners;
    /** The set of change listeners that have been registered with this entry. */
    private final CopyOnWriteArrayList<ConfigChangeListener> changeListeners;
    /** The set of delete listeners that have been registered with this entry. */
    private final CopyOnWriteArrayList<ConfigDeleteListener> deleteListeners;
    /** The actual entry wrapped by this configuration entry. */
    private Entry entry;
    /**
     * Creates a new config entry with the provided entry.
     *
     * @param entry
     *            The entry that will be encapsulated by this config entry.
     */
    public ConfigEntry(Entry entry) {
        this.entry = entry;
        addListeners = new CopyOnWriteArrayList<ConfigAddListener>();
        changeListeners = new CopyOnWriteArrayList<ConfigChangeListener>();
        deleteListeners = new CopyOnWriteArrayList<ConfigDeleteListener>();
    }
    /**
     * Retrieves the actual entry wrapped by this configuration entry.
     *
     * @return The actual entry wrapped by this configuration entry.
     */
    public Entry getEntry() {
        return entry;
    }
    /**
     * Retrieves the DN for this configuration entry.
     *
     * @return The DN for this configuration entry.
     */
    public DN getDN() {
        return entry.getName();
    }
    /**
     * Indicates whether this configuration entry contains the specified
     * objectclass.
     *
     * @param name
     *            The name of the objectclass for which to make the
     *            determination.
     * @return <CODE>true</CODE> if this configuration entry contains the
     *         specified objectclass, or <CODE>false</CODE> if not.
     */
    public boolean hasObjectClass(String name) {
        // TODO : use the schema to get object class and check it in the entry
        ObjectClass oc = DirectoryServer.getObjectClass(name.toLowerCase());
        if (oc == null) {
            oc = DirectoryServer.getDefaultObjectClass(name);
        }
        return Entries.containsObjectClass(entry, oc);
    }
    /**
     * Retrieves the set of change listeners that have been registered with this
     * configuration entry.
     *
     * @return The set of change listeners that have been registered with this
     *         configuration entry.
     */
    public CopyOnWriteArrayList<ConfigChangeListener> getChangeListeners() {
        return changeListeners;
    }
    /**
     * Registers the provided change listener so that it will be notified of any
     * changes to this configuration entry. No check will be made to determine
     * whether the provided listener is already registered.
     *
     * @param listener
     *            The change listener to register with this config entry.
     */
    public void registerChangeListener(ConfigChangeListener listener) {
        changeListeners.add(listener);
    }
    /**
     * Attempts to deregister the provided change listener with this
     * configuration entry.
     *
     * @param listener
     *            The change listener to deregister with this config entry.
     * @return <CODE>true</CODE> if the specified listener was deregistered, or
     *         <CODE>false</CODE> if it was not.
     */
    public boolean deregisterChangeListener(ConfigChangeListener listener) {
        return changeListeners.remove(listener);
    }
    /**
     * Retrieves the set of config add listeners that have been registered for
     * this entry.
     *
     * @return The set of config add listeners that have been registered for
     *         this entry.
     */
    public CopyOnWriteArrayList<ConfigAddListener> getAddListeners() {
        return addListeners;
    }
    /**
     * Registers the provided add listener so that it will be notified if any
     * new entries are added immediately below this configuration entry.
     *
     * @param listener
     *            The add listener that should be registered.
     */
    public void registerAddListener(ConfigAddListener listener) {
        addListeners.addIfAbsent(listener);
    }
    /**
     * Deregisters the provided add listener so that it will no longer be
     * notified if any new entries are added immediately below this
     * configuration entry.
     *
     * @param listener
     *            The add listener that should be deregistered.
     */
    public void deregisterAddListener(ConfigAddListener listener) {
        addListeners.remove(listener);
    }
    /**
     * Retrieves the set of config delete listeners that have been registered
     * for this entry.
     *
     * @return The set of config delete listeners that have been registered for
     *         this entry.
     */
    public CopyOnWriteArrayList<ConfigDeleteListener> getDeleteListeners() {
        return deleteListeners;
    }
    /**
     * Registers the provided delete listener so that it will be notified if any
     * entries are deleted immediately below this configuration entry.
     *
     * @param listener
     *            The delete listener that should be registered.
     */
    public void registerDeleteListener(ConfigDeleteListener listener) {
        deleteListeners.addIfAbsent(listener);
    }
    /**
     * Deregisters the provided delete listener so that it will no longer be
     * notified if any new are removed immediately below this configuration
     * entry.
     *
     * @param listener
     *            The delete listener that should be deregistered.
     */
    public void deregisterDeleteListener(ConfigDeleteListener listener) {
        deleteListeners.remove(listener);
    }
    /** {@inheritDoc} */
    @Override
    public String toString() {
        return entry.getName().toNormalizedString();
    }
}
opendj-admin/src/main/java/org/opends/server/core/DirectoryServer.java
@@ -25,7 +25,11 @@
 */
package org.opends.server.core;
import org.forgerock.opendj.ldap.DN;
import org.forgerock.opendj.ldap.schema.AttributeType;
import org.forgerock.opendj.ldap.schema.ObjectClass;
import org.opends.server.config.ConfigEntry;
import org.opends.server.config.ConfigException;
/**
 *  TODO : this is a stub
@@ -44,4 +48,24 @@
        throw new RuntimeException("Not implemented");
    }
    public static ObjectClass getObjectClass(String lowerCase) {
        throw new RuntimeException("Not implemented");
    }
    public static ObjectClass getDefaultObjectClass(String name) {
        throw new RuntimeException("Not implemented");
    }
    public static AttributeType getAttributeType(String lowerCase) {
        throw new RuntimeException("Not implemented");
    }
    public static AttributeType getDefaultAttributeType(String attrName) {
        throw new RuntimeException("Not implemented");
    }
    public static ConfigEntry getConfigEntry(DN dn) throws ConfigException {
        throw new RuntimeException("Not implemented");
    }
}
opendj-admin/src/main/resources/com/forgerock/opendj/ldap/admin.properties
@@ -22,19 +22,15 @@
#
#      Copyright 2006-2009 Sun Microsystems, Inc.
#
# Format string definitions
#
# Keys must be formatted as follows:
#
# [SEVERITY]_[DESCRIPTION]_[ORDINAL]
# [DESCRIPTION]_[ORDINAL]
#
# where:
#
# SEVERITY is one of:
# [INFO, MILD_WARN, SEVERE_WARN, MILD_ERR, SEVERE_ERR, FATAL_ERR, DEBUG, NOTICE]
#
# DESCRIPTION is an upper case string providing a hint as to the context of
# the message in upper case with the underscore ('_') character serving as
# word separator
opendj-admin/src/main/resources/com/forgerock/opendj/ldap/config.properties
New file
@@ -0,0 +1,935 @@
# CDDL HEADER START
#
# The contents of this file are subject to the terms of the
# Common Development and Distribution License, Version 1.0 only
# (the "License").  You may not use this file except in compliance
# with the License.
#
# You can obtain a copy of the license at
# trunk/opends/resource/legal-notices/OpenDS.LICENSE
# or https://OpenDS.dev.java.net/OpenDS.LICENSE.
# See the License for the specific language governing permissions
# and limitations under the License.
#
# When distributing Covered Code, include this CDDL HEADER in each
# file and include the License file at
# trunk/opends/resource/legal-notices/OpenDS.LICENSE.  If applicable,
# add the following below this CDDL HEADER, with the fields enclosed
# by brackets "[]" replaced with your own identifying information:
#      Portions Copyright [yyyy] [name of copyright owner]
#
# CDDL HEADER END
#
#      Copyright 2006-2010 Sun Microsystems, Inc.
#      Portions Copyright 2013 ForgeRock AS.
#
# Format string definitions
#
# Keys must be formatted as follows:
#
# [DESCRIPTION]_[ORDINAL]
#
# where:
#
# DESCRIPTION is an upper case string providing a hint as to the context of
# the message in upper case with the underscore ('_') character serving as
# word separator
#
# ORDINAL is an integer unique among other ordinals in this file
#
ERR_CONFIG_ATTR_IS_REQUIRED_1=Configuration attribute %s is required to \
 have at least one value but the resulted operation would have removed all \
 values
ERR_CONFIG_ATTR_REJECTED_VALUE_2=Provided value %s for configuration \
 attribute %s was rejected.  The reason provided was:  %s
ERR_CONFIG_ATTR_SET_VALUES_IS_SINGLE_VALUED_3=Configuration attribute %s \
 is single-valued, but multiple values were provided
ERR_CONFIG_ATTR_ADD_VALUES_IS_SINGLE_VALUED_4=Configuration attribute %s \
 is single-valued, but adding the provided value(s) would have given it \
 multiple values
ERR_CONFIG_ATTR_ADD_VALUES_ALREADY_EXISTS_5=Configuration attribute %s \
 already contains a value %s
ERR_CONFIG_ATTR_NO_SUCH_VALUE_6=Cannot remove value %s from \
 configuration attribute %s because the specified value does not exist
ERR_CONFIG_ATTR_INVALID_BOOLEAN_VALUE_7=Unable to set the value for \
 Boolean configuration attribute %s because the provided value %s was not \
 either 'true' or 'false'
ERR_CONFIG_ATTR_NO_INT_VALUE_8=Unable to retrieve the value for \
 configuration attribute %s as an integer because that attribute does not have \
 any values
ERR_CONFIG_ATTR_MULTIPLE_INT_VALUES_9=Unable to retrieve the value for \
 configuration attribute %s as an integer because that attribute has multiple \
 values
ERR_CONFIG_ATTR_VALUE_OUT_OF_INT_RANGE_10=Unable to retrieve the value \
 for configuration attribute %s as a Java int because the value is outside the \
 allowable range for an int
ERR_CONFIG_ATTR_INVALID_INT_VALUE_11=Unable to set the value for integer \
 configuration attribute %s because the provided value %s cannot be \
 interpreted as an integer value:  %s
ERR_CONFIG_ATTR_INT_BELOW_LOWER_BOUND_12=Unable to set the value for \
 configuration attribute %s because the provided value %d is less than the \
 lowest allowed value of %d
ERR_CONFIG_ATTR_INT_ABOVE_UPPER_BOUND_13=Unable to set the value for \
 configuration attribute %s because the provided value %d is greater than the \
 largest allowed value of %d
ERR_CONFIG_ATTR_INT_COULD_NOT_PARSE_14=Unable to parse value %s for \
 configuration attribute %s as an integer value:  %s
ERR_CONFIG_ATTR_NO_STRING_VALUE_15=Unable to retrieve the value for \
 configuration attribute %s as a string because that attribute does not have \
 any values
ERR_CONFIG_ATTR_MULTIPLE_STRING_VALUES_16=Unable to retrieve the value \
 for configuration attribute %s as a string because that attribute has \
 multiple values
ERR_CONFIG_ATTR_EMPTY_STRING_VALUE_17=An empty value string was provided \
 for configuration attribute %s
ERR_CONFIG_ATTR_VALUE_NOT_ALLOWED_18=The value %s is not included in the \
 list of acceptable values for configuration attribute %s
ERR_CONFIG_ATTR_INVALID_UNIT_19='%s' is not a valid unit for \
 configuration attribute %s
ERR_CONFIG_ATTR_NO_UNIT_DELIMITER_20=Cannot decode %s as an integer \
 value and a unit for configuration attribute %s because no value/unit \
 delimiter could be found
ERR_CONFIG_ATTR_COULD_NOT_PARSE_INT_COMPONENT_21=Could not decode the \
 integer portion of value %s for configuration attribute %s:  %s
ERR_CONFIG_ATTR_INVALID_VALUE_WITH_UNIT_22=The provided value %s for \
 integer with unit attribute %s is not allowed:  %s
ERR_CONFIG_ENTRY_CONFLICTING_CHILD_23=Unable to add configuration entry \
 %s as a child of configuration entry %s because a child entry was already \
 found with that DN
ERR_CONFIG_ENTRY_NO_SUCH_CHILD_24=Unable to remove entry %s as a child \
 of configuration entry %s because that entry did not have a child with the \
 specified DN
ERR_CONFIG_ENTRY_CANNOT_REMOVE_NONLEAF_25=Unable to remove entry %s as a \
 child of configuration entry %s because that entry had children of its own \
 and non-leaf entries may not be removed
ERR_CONFIG_FILE_DOES_NOT_EXIST_26=The specified configuration file %s \
 does not exist or is not readable
ERR_CONFIG_FILE_CANNOT_VERIFY_EXISTENCE_27=An unexpected error occurred \
 while attempting to determine whether configuration file %s exists:  %s
ERR_CONFIG_FILE_CANNOT_OPEN_FOR_READ_28=An error occurred while \
 attempting to open the configuration file %s for reading:  %s
ERR_CONFIG_FILE_READ_ERROR_29=An error occurred while attempting to \
 read the contents of configuration file %s:  %s
ERR_CONFIG_ATTR_OPTIONS_NOT_ALLOWED_30=Invalid configuration attribute \
 %s detected:  the only attribute option allowed in the Directory Server \
 configuration is "pending" to indicate the set of pending values
ERR_CONFIG_FILE_INVALID_LDIF_ENTRY_31=An error occurred at or near line \
 %d while trying to parse the configuration from LDIF file %s:  %s
ERR_CONFIG_FILE_EMPTY_32=The specified configuration file %s does not \
 appear to contain any configuration entries
ERR_CONFIG_FILE_INVALID_BASE_DN_33=The first entry read from LDIF \
 configuration file %s had a DN of "%s" rather than the expected "%s" which \
 should be used as the Directory Server configuration root
ERR_CONFIG_FILE_GENERIC_ERROR_34=An unexpected error occurred while \
 attempting to process the Directory Server configuration file %s:  %s
ERR_CONFIG_FILE_DUPLICATE_ENTRY_35=Configuration entry %s starting at \
 or near line %s in the LDIF configuration file %s has the same DN as another \
 entry already read from that file
ERR_CONFIG_FILE_NO_PARENT_36=Configuration entry %s starting at or near \
 line %d in the configuration LDIF file %s does not appear to have a parent \
 entry (expected parent DN was %s)
ERR_CONFIG_FILE_UNKNOWN_PARENT_37=The Directory Server was unable to \
 determine the parent DN for configuration entry %s starting at or near line \
 %d in the configuration LDIF file %s
ERR_CONFIG_CANNOT_DETERMINE_SERVER_ROOT_38=Unable to determine the \
 Directory Server instance root from either an environment variable or based \
 on the location of the configuration file.  Please set an environment \
 variable named %s with a value containing the absolute path to the server \
 installation root
ERR_CONFIG_FILE_WRITE_ERROR_39=An unexpected error occurred while \
 trying to write configuration entry %s to LDIF:  %s
ERR_CONFIG_FILE_CLOSE_ERROR_40=An unexpected error occurred while \
 trying to close the LDIF writer:  %s
ERR_CONFIG_FILE_UNWILLING_TO_IMPORT_41=The Directory Server \
 configuration may not be altered by importing a new configuration from LDIF
WARN_CONFIG_LOGGER_NO_ACTIVE_ACCESS_LOGGERS_44=There are no active \
 access loggers defined in the Directory Server configuration.  No access \
 logging will be performed
WARN_CONFIG_LOGGER_NO_ACTIVE_ERROR_LOGGERS_45=There are no active \
 error loggers defined in the Directory Server configuration.  No error \
 logging will be performed
ERR_CONFIG_LOGGER_CANNOT_CREATE_LOGGER_49=An error occurred while \
 attempting to create a Directory Server logger from the information in \
 configuration entry %s:  %s
ERR_CONFIG_LOGGER_INVALID_OBJECTCLASS_50=Configuration entry %s does \
 not contain a valid objectclass for a Directory Server access, error, or \
 debug logger definition
ERR_CONFIG_LOGGER_INVALID_ACCESS_LOGGER_CLASS_54=Class %s specified in \
 attribute ds-cfg-java-class of configuration entry %s cannot be \
 instantiated as a Directory Server access logger:  %s
ERR_CONFIG_LOGGER_INVALID_ERROR_LOGGER_CLASS_55=Class %s specified in \
 attribute ds-cfg-java-class of configuration entry %s cannot be \
 instantiated as a Directory Server error logger:  %s
ERR_CONFIG_LOGGER_INVALID_DEBUG_LOGGER_CLASS_56=Class %s specified in \
 attribute ds-cfg-java-class of configuration entry %s cannot be \
 instantiated as a Directory Server debug logger:  %s
ERR_CONFIG_ATTR_MULTIPLE_PENDING_VALUE_SETS_64=Configuration attribute \
 %s appears to contain multiple pending value sets
ERR_CONFIG_ATTR_MULTIPLE_ACTIVE_VALUE_SETS_65=Configuration attribute %s \
 appears to contain multiple active value sets
ERR_CONFIG_ATTR_NO_ACTIVE_VALUE_SET_66=Configuration attribute %s does \
 not contain an active value set
ERR_CONFIG_ATTR_INT_INVALID_TYPE_67=Unable to parse value %s for \
 configuration attribute %s as an integer value because the element was of an \
 invalid type (%s)
ERR_CONFIG_ATTR_INT_INVALID_ARRAY_TYPE_68=Unable to parse value for \
 configuration attribute %s as a set of integer values because the array \
 contained elements of an invalid type (%s)
ERR_CONFIG_ATTR_INVALID_STRING_VALUE_69=Unable to parse value %s for \
 configuration attribute %s as a string value:  %s
ERR_CONFIG_ATTR_STRING_INVALID_TYPE_70=Unable to parse value %s for \
 configuration attribute %s as a string value because the element was of an \
 invalid type (%s)
ERR_CONFIG_ATTR_STRING_INVALID_ARRAY_TYPE_71=Unable to parse value for \
 configuration attribute %s as a set of string values because the array \
 contained elements of an invalid type (%s)
ERR_CONFIG_ATTR_INT_WITH_UNIT_INVALID_TYPE_72=Unable to parse value %s \
 for configuration attribute %s as an integer with unit value because the \
 element was of an invalid type (%s)
ERR_CONFIG_JMX_ATTR_NO_ATTR_74=Configuration entry %s does not contain \
 attribute %s (or that attribute exists but is not accessible using JMX)
ERR_CONFIG_JMX_NO_METHOD_78=There is no method %s for any invokable \
 component registered with configuration entry %s
ERR_CONFIG_JMX_CANNOT_REGISTER_MBEAN_83=The Directory Server could not \
 register a JMX MBean for the component associated with configuration entry \
 %s:  %s
ERR_CONFIG_LDIF_WRITE_ERROR_84=An unexpected error occurred while \
 trying to export the Directory Server configuration to LDIF:  %s
ERR_CONFIG_WORK_QUEUE_TOO_MANY_FAILURES_94=Worker thread "%s" has \
 experienced too many repeated failures while attempting to retrieve the next \
 operation from the work queue (%d failures experienced, maximum of %d \
 failures allowed).  This worker thread will be destroyed
ERR_CONFIG_WORK_QUEUE_CANNOT_CREATE_MONITOR_95=A problem occurred \
 while trying to create and start an instance of class %s to use as a monitor \
 provider for the Directory Server work queue:  %s.  No monitor information \
 will be available for the work queue
ERR_CONFIG_ATTR_DN_NULL_98=A null value was provided for DN \
 configuration attribute %s
ERR_CONFIG_ATTR_DN_CANNOT_PARSE_99=An error occurred while trying to \
 parse value "%s" of attribute %s as a DN:  %s
ERR_CONFIG_ATTR_INVALID_DN_VALUE_100=Unable to parse value %s for \
 configuration attribute %s as a DN:  %s
ERR_CONFIG_ATTR_DN_INVALID_TYPE_101=Unable to parse value %s for \
 configuration attribute %s as a DN because the element was of an invalid type \
 (%s)
ERR_CONFIG_ATTR_DN_INVALID_ARRAY_TYPE_102=Unable to parse value for \
 configuration attribute %s as a set of DN values because the array contained \
 elements of an invalid type (%s)
ERR_CONFIG_CANNOT_REGISTER_AS_PRIVATE_SUFFIX_103=An unexpected error \
 occurred while trying to register the configuration handler base DN "%s" as a \
 private suffix with the Directory Server:  %s
ERR_CONFIG_BACKEND_CANNOT_GET_CONFIG_BASE_104=An error occurred while \
 trying to retrieve configuration entry cn=Backends,cn=config in order to \
 initialize the Directory Server backends:  %s
ERR_CONFIG_BACKEND_BASE_DOES_NOT_EXIST_105=The entry \
 cn=Backends,cn=config does not appear to exist in the Directory Server \
 configuration.  This is a required entry
ERR_CONFIG_BACKEND_ERROR_INTERACTING_WITH_BACKEND_ENTRY_107=An \
 unexpected error occurred while interacting with backend configuration entry \
 %s:  %s
INFO_CONFIG_BACKEND_ATTR_DESCRIPTION_CLASS_109=Fully-qualified \
 name of the Java class that should provide the core logic for this backend \
 implementation.  Changes to this configuration attribute will not take effect \
 until the backend is disabled and re-enabled or the server is restarted
INFO_CONFIG_BACKEND_DISABLED_111=The backend defined in configuration entry \
 %s is marked as disabled and therefore will not be used
ERR_CONFIG_BACKEND_UNABLE_TO_DETERMINE_ENABLED_STATE_112=An unexpected \
 error occurred while attempting to determine whether the backend associated \
 with configuration entry %s should be enabled or disabled:  %s.  It will be \
 disabled
ERR_CONFIG_BACKEND_CANNOT_INSTANTIATE_115=The Directory Server was \
 unable to load class %s and use it to create a backend instance as defined in \
 configuration entry %s.  The error that occurred was:  %s.  This backend will \
 be disabled
ERR_CONFIG_BACKEND_CANNOT_INITIALIZE_116=An error occurred while \
 trying to initialize a backend loaded from class %s with the information in \
 configuration entry %s:  %s.  This backend will be disabled
ERR_CONFIG_BACKEND_CLASS_NOT_BACKEND_117=The class %s specified in \
 configuration entry %s does not contain a valid Directory Server backend \
 implementation
NOTICE_CONFIG_BACKEND_ACTION_REQUIRED_TO_CHANGE_CLASS_118=The requested \
 change to configuration entry %s would cause the class for the associated \
 backend to change from %s to %s.  This change will not take effect until the \
 backend is disabled and re-enabled, or until the Directory Server is \
 restarted
NOTICE_CONFIG_BACKEND_CANNOT_REMOVE_BACKEND_WITH_SUBORDINATES_119=The backend \
 defined in configuration entry %s has one or more subordinate backends.  A \
 backend may not be removed if it has subordinate backends
ERR_CONFIG_MONITOR_INITIALIZATION_FAILED_140=An error occurred while \
 trying to initialize an instance of class %s as a monitor provider as defined \
 in configuration entry %s:  %s
ERR_CONFIG_CONNHANDLER_CANNOT_INITIALIZE_154=An error occurred while \
 trying to initialize a connection handler loaded from class %s with the \
 information in configuration entry %s:  %s.  This connection handler will be \
 disabled
ERR_CONFIG_SCHEMA_MR_CANNOT_INITIALIZE_172=An error occurred while \
 trying to initialize a matching rule loaded from class %s with the \
 information in configuration entry %s:  %s.  This matching rule will be \
 disabled
WARN_CONFIG_SCHEMA_MR_CONFLICTING_MR_173=The matching rule defined in \
 configuration entry %s conflicts with another matching rule defined in the \
 server configuration:  %s.  This matching rule will not be used
ERR_CONFIG_SCHEMA_SYNTAX_CANNOT_INITIALIZE_186=An error occurred while \
 trying to initialize an attribute syntax loaded from class %s with the \
 information in configuration entry %s:  %s.  This syntax will be disabled
WARN_CONFIG_SCHEMA_SYNTAX_CONFLICTING_SYNTAX_187=The attribute syntax \
 defined in configuration entry %s conflicts with another syntax defined in \
 the server configuration:  %s.  This attribute syntax will not be used
ERR_CONFIG_SCHEMA_NO_SCHEMA_DIR_188=Unable to read the Directory \
 Server schema definitions because the schema directory %s does not exist
ERR_CONFIG_SCHEMA_DIR_NOT_DIRECTORY_189=Unable to read the Directory \
 Server schema definitions because the schema directory %s exists but is not a \
 directory
ERR_CONFIG_SCHEMA_CANNOT_LIST_FILES_190=Unable to read the Directory \
 Server schema definitions from directory %s because an unexpected error \
 occurred while trying to list the files in that directory:  %s
WARN_CONFIG_SCHEMA_CANNOT_OPEN_FILE_191=Schema configuration file %s \
 in directory %s cannot be parsed because an unexpected error occurred while \
 trying to open the file for reading:  %s
WARN_CONFIG_SCHEMA_CANNOT_READ_LDIF_ENTRY_192=Schema configuration \
 file %s in directory %s cannot be parsed because an unexpected error occurred \
 while trying to read its contents as an LDIF entry:  %s
WARN_CONFIG_SCHEMA_CANNOT_PARSE_ATTR_TYPE_193=Unable to parse an \
 attribute type definition from schema configuration file %s:  %s
WARN_CONFIG_SCHEMA_CONFLICTING_ATTR_TYPE_194=An attribute type read \
 from schema configuration file %s conflicts with another attribute type \
 already read into the schema:  %s.  The later attribute type definition will \
 be used
WARN_CONFIG_SCHEMA_CONFLICTING_OC_195=An objectclass read from schema \
 configuration file %s conflicts with another objectclass already read into \
 the schema:  %s.  The later objectclass definition will be used
WARN_CONFIG_SCHEMA_CANNOT_PARSE_OC_196=An objectclass read from schema \
  configuration file %s could not be parsed:  %s
ERR_CONFIG_ENTRYCACHE_CANNOT_INSTALL_DEFAULT_CACHE_200=An unexpected \
 error occurred that prevented the server from installing its default entry \
 cache framework:  %s
WARN_CONFIG_ENTRYCACHE_NO_CONFIG_ENTRY_201=The entry cache \
 configuration entry "cn=Entry Caches,cn=config" does not exist in the \
 Directory Server configuration.  No entry cache will be available until this \
 entry is created with a valid entry cache configuration
ERR_CONFIG_ENTRYCACHE_CANNOT_INITIALIZE_CACHE_202=An error occurred \
 while attempting to initialize an instance of class %s for use as the \
 Directory Server entry cache:  %s.  As a result, the entry cache will be \
 disabled
ERR_CONFIG_ENTRYCACHE_CONFIG_NOT_ACCEPTABLE_203=The configuration for \
 the entry cache defined in configuration entry %s was not acceptable:  %s
ERR_CONFIG_ENTRYCACHE_CONFIG_LEVEL_NOT_ACCEPTABLE_204=The configuration \
 for the entry cache defined in configuration entry %s was not acceptable:  \
 the entry cache level %d is already in use
INFO_WARN_CONFIG_ENTRYCACHE_NO_MONITOR_CONFIG_ENTRY_205=The configuration for \
 the entry cache %s monitor provider was not available. As a result this \
 monitor provider %s will not be enabled
INFO_WARN_CONFIG_ENTRYCACHE_MONITOR_CONFIG_DISABLED_206=The configuration for \
 the entry cache %s monitor provider was disabled. As a result the monitor \
 provider %s will not be enabled
ERR_CONFIG_ENTRY_CANNOT_REMOVE_CHILD_215=An unexpected error occurred \
 while attempting to remove entry %s as a child of configuration entry %s:  %s
WARN_CONFIG_SCHEMA_CANNOT_PARSE_NAME_FORM_216=Unable to parse a name \
 form definition from schema configuration file %s:  %s
WARN_CONFIG_SCHEMA_CONFLICTING_NAME_FORM_217=A name form read from \
 schema configuration file %s conflicts with another name form already read \
 into the schema:  %s.  The later name form definition will be used
WARN_CONFIG_SCHEMA_CANNOT_PARSE_DCR_218=Unable to parse a DIT content \
 rule definition from schema configuration file %s:  %s
WARN_CONFIG_SCHEMA_CONFLICTING_DCR_219=A DIT content rule read from \
 schema configuration file %s conflicts with another DIT content rule already \
 read into the schema:  %s.  The later DIT content rule definition will be \
 used
WARN_CONFIG_SCHEMA_CANNOT_PARSE_DSR_220=Unable to parse a DIT \
 structure rule definition from schema configuration file %s:  %s
WARN_CONFIG_SCHEMA_CONFLICTING_DSR_221=A DIT structure rule read from \
 schema configuration file %s conflicts with another DIT structure rule \
 already read into the schema:  %s.  The later DIT structure rule definition \
 will be used
WARN_CONFIG_SCHEMA_CANNOT_PARSE_MRU_222=Unable to parse a matching \
 rule use definition from schema configuration file %s:  %s
WARN_CONFIG_SCHEMA_CONFLICTING_MRU_223=A matching rule use read from \
 schema configuration file %s conflicts with another matching rule use already \
 read into the schema:  %s.  The later matching rule use definition will be \
 used
ERR_CONFIG_ATTR_READ_ONLY_228=Configuration attribute %s is read-only \
 and its values may not be altered
ERR_CONFIG_PLUGIN_CANNOT_INITIALIZE_245=An error occurred while \
 attempting to initialize an instance of class %s as a Directory Server plugin \
 using the information in configuration entry %s:  %s.  This plugin will be \
 disabled
ERR_CONFIG_EXTOP_INVALID_CLASS_256=Class %s specified in configuration \
 entry %s does not contain a valid extended operation handler implementation: \
 %s
ERR_CONFIG_EXTOP_INITIALIZATION_FAILED_261=An error occurred while \
 trying to initialize an instance of class %s as an extended operation handler \
 as defined in configuration entry %s:  %s
ERR_CONFIG_SASL_INITIALIZATION_FAILED_277=An error occurred while trying \
 to initialize an instance of class %s as a SASL mechanism handler as defined \
 in configuration entry %s:  %s
ERR_CONFIG_FILE_ADD_ALREADY_EXISTS_280=Entry %s cannot be added to the \
 Directory Server configuration because another configuration entry already \
 exists with that DN
ERR_CONFIG_FILE_ADD_NO_PARENT_DN_281=Entry %s cannot be added to the \
 Directory Server configuration because that DN does not have a parent
ERR_CONFIG_FILE_ADD_NO_PARENT_282=Entry %s cannot be added to the \
 Directory Server configuration because its parent entry %s does not exist
ERR_CONFIG_FILE_ADD_REJECTED_BY_LISTENER_283=The Directory Server is \
 unwilling to add configuration entry %s because one of the add listeners \
 registered with the parent entry %s rejected this change with the message: \
 %s
ERR_CONFIG_FILE_ADD_FAILED_284=An unexpected error occurred while \
 attempting to add configuration entry %s as a child of entry %s:  %s
ERR_CONFIG_FILE_DELETE_NO_SUCH_ENTRY_285=Entry %s cannot be removed from \
 the Directory Server configuration because the specified entry does not exist
ERR_CONFIG_FILE_DELETE_HAS_CHILDREN_286=Entry %s cannot be removed from \
 the Directory Server configuration because the specified entry has one or \
 more subordinate entries
ERR_CONFIG_FILE_DELETE_NO_PARENT_287=Entry %s cannot be removed from the \
 Directory Server configuration because the entry does not have a parent and \
 removing the configuration root entry is not allowed
ERR_CONFIG_FILE_DELETE_REJECTED_288=Entry %s cannot be removed from the \
 Directory Server configuration because one of the delete listeners registered \
 with the parent entry %s rejected this change with the message:  %s
ERR_CONFIG_FILE_DELETE_FAILED_289=An unexpected error occurred while \
 attempting to remove configuration entry %s as a child of entry %s:  %s
ERR_CONFIG_FILE_MODIFY_NO_SUCH_ENTRY_290=Entry %s cannot be modified \
 because the specified entry does not exist
ERR_CONFIG_FILE_MODIFY_REJECTED_BY_CHANGE_LISTENER_291=Entry %s cannot \
 be modified because one of the configuration change listeners registered for \
 that entry rejected the change:  %s
ERR_CONFIG_FILE_SEARCH_NO_SUCH_BASE_293=The search operation cannot be \
 processed because base entry %s does not exist
ERR_CONFIG_FILE_SEARCH_INVALID_SCOPE_294=The search operation cannot be \
 processed because the specified search scope %s is invalid
ERR_CONFIG_FILE_WRITE_CANNOT_EXPORT_NEW_CONFIG_300=An error occurred \
 while attempting to export the new Directory Server configuration to file %s: \
 %s
ERR_CONFIG_FILE_WRITE_CANNOT_RENAME_NEW_CONFIG_301=An error occurred \
 while attempting to rename the new Directory Server configuration from file \
 %s to %s:  %s
ERR_CONFIG_FILE_MODDN_NOT_ALLOWED_302=Modify DN operations are not \
 allowed in the Directory Server configuration
INFO_CONFIG_BACKEND_ATTR_DESCRIPTION_BASE_DNS_305=Set of base \
 DNs that should be used for this backend.  It is up to the backend \
 implementation as to whether changes to this attribute will automatically \
 take effect
INFO_CONFIG_KEYMANAGER_DESCRIPTION_ENABLED_313=Indicates whether the \
 Directory Server key manager provider should be enabled.  A key manager \
 provider is required for operations that require access to a key manager \
 (e.g., communication over SSL).  Changes to this configuration attribute will \
 take effect immediately, but will only impact future attempts to access the \
 key manager
ERR_CONFIG_TRUSTMANAGER_DESCRIPTION_ENABLED_328=Indicates whether the \
 Directory Server trust manager provider should be enabled.  A trust manager \
 provider is required for operations that require access to a trust manager \
 (e.g., communication over SSL).  Changes to this configuration attribute will \
 take effect immediately, but will only impact future attempts to access the \
 trust manager
ERR_CONFIG_PWSCHEME_INITIALIZATION_FAILED_376=An error occurred while \
 trying to initialize an instance of class %s as a password storage scheme as \
 defined in configuration entry %s:  %s
ERR_CONFIG_PWSCHEME_EXISTS_377=Unable to add a new password storage \
 scheme entry with DN %s because there is already a storage scheme registered \
 with that DN
INFO_CONFIG_BACKEND_ATTR_DESCRIPTION_BACKEND_ID_382=Unique \
 identifier for this backend.  Changes to this configuration attribute will \
 not take effect until the backend is disabled and re-enabled or the server is \
 restarted
WARN_CONFIG_BACKEND_DUPLICATE_BACKEND_ID_384=The backend defined in \
 configuration entry %s has a backend ID of %s that conflicts with the backend \
 ID for another backend in the server.  The backend will be disabled
ERR_CONFIG_BACKUP_CANNOT_GET_MAC_386=An error occurred while \
 attempting to obtain the %s MAC provider to create the signed hash for the \
 backup:  %s
ERR_CONFIG_BACKUP_CANNOT_GET_DIGEST_387=An error occurred while \
 attempting to obtain the %s message digest to create the hash for the backup: \
 %s
ERR_CONFIG_BACKUP_CANNOT_CREATE_ARCHIVE_FILE_388=An error occurred \
 while trying to create the config archive file %s in directory %s:  %s
ERR_CONFIG_BACKUP_CANNOT_GET_CIPHER_389=An error occurred while \
 attempting to obtain the cipher to use to encrypt the backup:  %s
ERR_CONFIG_BACKUP_ZIP_COMMENT_390=%s config backup %s
ERR_CONFIG_BACKUP_CANNOT_DETERMINE_CONFIG_FILE_LOCATION_391=An error \
 occurred while attempting to determine the path to the Directory Server \
 configuration file so that it could be archived:  %s
ERR_CONFIG_BACKUP_CANNOT_BACKUP_CONFIG_FILE_392=An error occurred \
 while attempting to back up configuration file %s:  %s
ERR_CONFIG_BACKUP_CANNOT_BACKUP_ARCHIVED_CONFIGS_393=An error occurred \
 while attempting to back up the archived previous configurations from file \
 %s:  %s
ERR_CONFIG_BACKUP_CANNOT_CLOSE_ZIP_STREAM_394=An error occurred while \
 trying to close the config archive file %s in directory %s:  %s
ERR_CONFIG_BACKUP_CANNOT_UPDATE_BACKUP_DESCRIPTOR_395=An error \
 occurred while attempting to update the backup descriptor file %s with \
 information about the configuration backup:  %s
ERR_CONFIG_RESTORE_NO_SUCH_BACKUP_396=Unable to restore or verify \
 configuration backup %s in directory %s because no such backup exists
ERR_CONFIG_RESTORE_NO_BACKUP_FILE_397=Unable to restore or verify \
 configuration backup %s in directory %s because the archive filename could \
 not be determined
ERR_CONFIG_RESTORE_NO_SUCH_FILE_398=Unable to restore or verify \
 configuration backup %s because the specified archive file %s does not exist
ERR_CONFIG_RESTORE_CANNOT_CHECK_FOR_ARCHIVE_399=Unable to restore or \
 verify configuration backup %s because an error occurred while trying to \
 determine whether backup archive %s exists:  %s
ERR_CONFIG_RESTORE_UNKNOWN_DIGEST_400=Unable to restore or verify \
 configuration backup %s because an unsigned hash of this backup is available \
 but the server cannot determine the digest algorithm used to generate this \
 hash
ERR_CONFIG_RESTORE_CANNOT_GET_DIGEST_401=Unable to restore or verify \
 configuration backup %s because it has an unsigned hash that uses an unknown \
 or unsupported digest algorithm of %s
ERR_CONFIG_RESTORE_UNKNOWN_MAC_402=Unable to restore or verify \
 configuration backup %s because a signed hash of this backup is available but \
 the server cannot determine the MAC algorithm used to generate this hash
ERR_CONFIG_RESTORE_CANNOT_GET_MAC_403=Unable to restore or verify \
 configuration backup %s because it has a signed hash that uses an unknown or \
 unsupported MAC algorithm of %s
ERR_CONFIG_RESTORE_CANNOT_OPEN_BACKUP_FILE_404=Unable to restore or \
 verify configuration backup %s because an error occurred while attempting to \
 open the backup archive file %s:  %s
ERR_CONFIG_RESTORE_CANNOT_GET_CIPHER_406=Unable to restore or verify \
 configuration backup %s because it is encrypted using an unknown or \
 unsupported cipher:  %s
ERR_CONFIG_RESTORE_CANNOT_BACKUP_EXISTING_CONFIG_407=Unable to restore \
 configuration backup %s because an error occurred while attempting to \
 temporarily back up the current configuration files from %s to %s:  %s
NOTICE_CONFIG_RESTORE_RESTORED_OLD_CONFIG_408=An error occurred that \
 prevented the configuration backup from being properly restored.  However, \
 the original configuration files that were in place before the start of the \
 restore process have been preserved and are now in their original location of \
 %s
ERR_CONFIG_RESTORE_CANNOT_RESTORE_OLD_CONFIG_409=An error occurred \
 that prevented the configuration backup from being properly restored.  The \
 original configuration files that were in place before the start of the \
 restore process have been preserved and are contained in the %s directory
ERR_CONFIG_RESTORE_CANNOT_CREATE_CONFIG_DIRECTORY_410=Unable to \
 restore configuration backup %s because an error occurred while attempting to \
 create a new empty directory %s into which the files should be restored:  %s
ERR_CONFIG_RESTORE_OLD_CONFIG_SAVED_411=An error occurred that \
 prevented the configuration backup from being properly restored.  The \
 original configuration files that were in place before the start of the \
 restore process have been preserved in the %s directory
ERR_CONFIG_RESTORE_CANNOT_GET_ZIP_ENTRY_412=Unable to restore or \
 verify configuration backup %s because an error occurred while trying to read \
 the next entry from the archive file %s:  %s
ERR_CONFIG_RESTORE_CANNOT_CREATE_FILE_413=Unable to restore \
 configuration backup %s because an error occurred while trying to recreate \
 file %s:  %s
ERR_CONFIG_RESTORE_CANNOT_PROCESS_ARCHIVE_FILE_414=Unable to restore \
 or verify configuration backup %s because an error occurred while processing \
 archived file %s:  %s
ERR_CONFIG_RESTORE_ERROR_ON_ZIP_STREAM_CLOSE_415=Unable to restore or \
 verify configuration backup %s because an unexpected error occurred while \
 trying to close the archive file %s:  %s
NOTICE_CONFIG_RESTORE_UNSIGNED_HASH_VALID_416=The message digest calculated \
 from the backup archive matches the digest stored with the backup information
ERR_CONFIG_RESTORE_UNSIGNED_HASH_INVALID_417=Unable to restore or \
 verify configuration backup %s because the message digest calculated from the \
 backup archive does not match the digest stored with the backup information
NOTICE_CONFIG_RESTORE_SIGNED_HASH_VALID_418=The signed digest calculated from \
 the backup archive matches the signature stored with the backup information
ERR_CONFIG_RESTORE_SIGNED_HASH_INVALID_419=Unable to restore or verify \
 configuration backup %s because the signed digest calculated from the backup \
 archive does not match the signature stored with the backup information
NOTICE_CONFIG_RESTORE_VERIFY_SUCCESSFUL_420=All tests performed on \
 configuration backup %s from directory %s show that the archive appears to be \
 valid
NOTICE_CONFIG_RESTORE_SUCCESSFUL_421=Configuration backup %s was successfully \
 restored from the archive in directory %s
ERR_CONFIG_BACKEND_CANNOT_ACQUIRE_SHARED_LOCK_422=The Directory Server \
 was unable to acquire a shared lock for backend %s:  %s.  This generally \
 means that the backend is in use by a process that requires an exclusive lock \
 (e.g., importing from LDIF or restoring a backup).  This backend will be \
 disabled
WARN_CONFIG_BACKEND_CANNOT_RELEASE_SHARED_LOCK_423=An error occurred \
 while attempting to release a shared lock for backend %s:  %s.  This may \
 interfere with operations that require exclusive access, including LDIF \
 import and restoring a backup
INFO_CONFIG_FILE_HEADER_424=This file contains the primary Directory Server \
 configuration.  It must not be directly edited while the server is online. \
 The server configuration should only be managed using the administration \
 utilities provided with the Directory Server
ERR_CONFIG_IDMAPPER_INITIALIZATION_FAILED_442=An error occurred while \
 trying to initialize an instance of class %s as an identity mapper as defined \
 in configuration entry %s:  %s
ERR_CONFIG_IDMAPPER_NO_PROXY_MAPPER_DN_448=The Directory Server does \
 not have any identity mapper configured for use in conjunction with proxied \
 authorization V2 operations.  The Directory Server will not be able to \
 process requests containing the proxied authorization control with a \
 username-based authorization ID
ERR_CONFIG_IDMAPPER_INVALID_PROXY_MAPPER_DN_449=The configured proxied \
 authorization identity mapper DN %s does not refer to an active identity \
 mapper.  The Directory Server will not be able to process requests containing \
 the proxied authorization control with a username-based authorization ID
ERR_CONFIG_SYNCH_UNABLE_TO_LOAD_PROVIDER_CLASS_463=An error occurred \
 while attempting to load class %s referenced in synchronization provider \
 configuration entry %s:  %s
ERR_CONFIG_SYNCH_UNABLE_TO_INSTANTIATE_PROVIDER_464=An error occurred \
 while attempting to instantiate class %s referenced in synchronization \
 provider configuration entry %s:  %s
ERR_CONFIG_SYNCH_ERROR_INITIALIZING_PROVIDER_465=An error occurred \
 while attempting to initialize the Directory Server synchronization provider \
 referenced in configuration entry %s:  %s
ERR_CONFIG_PWVALIDATOR_INITIALIZATION_FAILED_489=An error occurred while \
 trying to initialize an instance of class %s as a password validator as \
 defined in configuration entry %s:  %s
ERR_CONFIG_PWGENERATOR_INITIALIZATION_FAILED_505=An error occurred while \
 trying to initialize an instance of class %s as a password generator as \
 defined in configuration entry %s:  %s
ERR_CONFIG_PWPOLICY_NO_POLICIES_514=No password policies have been \
 defined below the cn=Password Policies,cn=config entry in the Directory \
 Server configuration.  At least one password policy configuration must be \
 defined
ERR_CONFIG_PWPOLICY_INVALID_POLICY_CONFIG_515=The password policy \
 defined in configuration entry %s is invalid:  %s
ERR_CONFIG_PWPOLICY_MISSING_DEFAULT_POLICY_516=The Directory Server \
 default password policy is defined as %s, but that entry does not exist or is \
 not below the password policy configuration base cn=Password \
 Policies,cn=config
WARN_CONFIG_PWPOLICY_CANNOT_DELETE_DEFAULT_POLICY_517=The specified \
 entry %s is currently defined as the configuration entry for the default \
 password policy.  The default password policy configuration entry may not be \
 removed
INFO_CONFIG_PWPOLICY_REMOVED_POLICY_518=Password policy entry %s has been \
 removed from the Directory Server configuration.  Any user entries that \
 explicitly reference this password policy will no longer be allowed to \
 authenticate
WARN_CONFIG_AUTHZ_DISABLED_525=Access control has been disabled
NOTICE_CONFIG_AUTHZ_ENABLED_526=Access control has been enabled and will use \
 the %s implementation
ERR_CONFIG_AUTHZ_UNABLE_TO_INSTANTIATE_HANDLER_533=An error occurred \
 while attempting to instantiate class %s referenced in the access control \
 configuration entry %s:  %s
INFO_CONFIG_ROOTDN_DESCRIPTION_ALTERNATE_BIND_DN_540=Specifies one or more \
 alternate bind DNs that may be used to authenticate as the associated root \
 DN, in addition to the actual DN of the root DN configuration entry. \
 Alternate bind DNs must not conflict with the DNs of any other entries in the \
 directory, nor can they conflict with other alternate bind DNs configured for \
 other root DNs.  Changes to this configuration attribute will take effect \
 immediately
ERR_CONFIG_ROOTDN_CONFLICTING_MAPPING_541=Unable to register "%s" as \
 an alternate bind DN for user "%s" because it is already registered as an \
 alternate bind DN for root user "%s"
ERR_CONFIG_ACCTNOTHANDLER_INITIALIZATION_FAILED_558=An error occurred \
 while trying to initialize an instance of class %s as an account status \
 notification handler as defined in configuration entry %s:  %s
ERR_CONFIG_ACCTNOTHANDLER_EXISTS_559=Unable to add a new account status \
 notification handler entry with DN %s because there is already a notification \
 handler registered with that DN
ERR_CONFIG_UNABLE_TO_APPLY_STARTUP_CHANGES_563=An error occurred while \
 attempting to apply the changes contained in file %s to the server \
 configuration at startup:  %s
ERR_CONFIG_ERROR_APPLYING_STARTUP_CHANGE_564=Unable to apply a change \
 at server startup:  %s
ERR_CONFIG_UNABLE_TO_APPLY_CHANGES_FILE_565=One or more errors occurred \
 while applying changes on server startup
ERR_CONFIG_BACKEND_MODE_INVALID_567=Configuration entry %s does not \
 contain a valid value for configuration attribute ds-cfg-db-directory-permissions (It \
 should be an UNIX permission mode in three-digit octal notation.)
ERR_CONFIG_BACKEND_INSANE_MODE_568=Invalid UNIX file permissions %s \
  does not allow read and write access to the backend database directory by \
  the backend
ERR_CONFIG_PWPOLICY_NO_DEFAULT_POLICY_571=No default password policy \
 is configured for the Directory Server.  The default password policy must be \
 specified by the ds-cfg-default-password-policy attribute in the cn=config \
 entry
WARN_CONFIG_BACKEND_CANNOT_REGISTER_BACKEND_572=An error occurred \
 while attempting to register backend %s with the Directory Server:  %s
ERR_CONFIG_FILE_CANNOT_CREATE_ARCHIVE_DIR_NO_REASON_573=An error \
 occurred while trying to create the configuration archive directory %s
ERR_CONFIG_FILE_CANNOT_CREATE_ARCHIVE_DIR_574=An error occurred while \
 trying to create the configuration archive directory %s:  %s
ERR_CONFIG_FILE_CANNOT_WRITE_CONFIG_ARCHIVE_575=An error occurred \
 while trying to write the current configuration to the configuration archive: \
 %s
ERR_CONFIG_GROUP_INITIALIZATION_FAILED_591=An error occurred while \
 trying to initialize an instance of class %s as a group implementation as in \
 configuration entry %s:  %s
ERR_CONFIG_FILE_ADD_INSUFFICIENT_PRIVILEGES_598=You do not have \
 sufficient privileges to perform add operations in the Directory Server \
 configuration
ERR_CONFIG_FILE_DELETE_INSUFFICIENT_PRIVILEGES_599=You do not have \
 sufficient privileges to perform delete operations in the Directory Server \
 configuration
ERR_CONFIG_FILE_MODIFY_INSUFFICIENT_PRIVILEGES_600=You do not have \
 sufficient privileges to perform modify operations in the Directory Server \
 configuration
ERR_CONFIG_FILE_MODDN_INSUFFICIENT_PRIVILEGES_601=You do not have \
 sufficient privileges to perform modify DN operations in the Directory Server \
 configuration
ERR_CONFIG_FILE_SEARCH_INSUFFICIENT_PRIVILEGES_602=You do not have \
 sufficient privileges to perform search operations in the Directory Server \
 configuration
ERR_CONFIG_FILE_MODIFY_PRIVS_INSUFFICIENT_PRIVILEGES_603=You do not have \
 sufficient privileges to change the set of default root privileges
ERR_CONFIG_CERTMAPPER_INITIALIZATION_FAILED_614=An error occurred while \
 trying to initialize an instance of class %s as a certificate mapper as \
 defined in configuration entry %s:  %s
ERR_CONFIG_KEYMANAGER_CANNOT_GET_BASE_617=An error occurred while \
 attempting to retrieve the key manager provider base entry cn=Key Manager \
 Providers,cn=config from the Directory Server configuration:  %s
ERR_CONFIG_KEYMANAGER_INITIALIZATION_FAILED_627=An error occurred while \
 trying to initialize an instance of class %s as a key manager provider as \
 defined in configuration entry %s:  %s
ERR_CONFIG_TRUSTMANAGER_CANNOT_GET_BASE_630=An error occurred while \
 attempting to retrieve the trust manager provider base entry cn=Trust Manager \
 Providers,cn=config from the Directory Server configuration:  %s
ERR_CONFIG_TRUSTMANAGER_INITIALIZATION_FAILED_640=An error occurred \
 while trying to initialize an instance of class %s as a trust manager \
 provider as defined in configuration entry %s:  %s
ERR_CONFIG_JMX_CANNOT_GET_ATTRIBUTE_643=Unable to retrieve JMX \
 attribute %s associated with configuration entry %s:  %s
ERR_CONFIG_CHANGE_NO_RESULT_645=%s.%s returned a result of null for \
 entry %s
ERR_CONFIG_CHANGE_RESULT_ERROR_646=%s.%s failed for entry %s:  result \
 code=%s, admin action required=%b, messages="%s"
WARN_CONFIG_CHANGE_RESULT_ACTION_REQUIRED_647=%s.%s indicated that \
 administrative action is required for entry %s:  messages="%s"
INFO_CONFIG_CHANGE_RESULT_MESSAGES_648=%s.%s succeeded but generated the \
 following messages for entry %s:  %s
ERR_CONFIG_VATTR_INVALID_SEARCH_FILTER_649=Unable to parse value "%s" \
 from config entry "%s" as a valid search filter:  %s
ERR_CONFIG_VATTR_INITIALIZATION_FAILED_650=An error occurred while \
 trying to load an instance of class %s referenced in configuration entry %s \
 as a virtual attribute provider:  %s
ERR_CONFIG_VATTR_SV_TYPE_WITH_MV_PROVIDER_651=The virtual attribute \
 configuration in entry "%s" is not valid because attribute type %s is \
 single-valued but provider %s may generate multiple values
ERR_CONFIG_VATTR_SV_TYPE_WITH_MERGE_VALUES_652=The virtual attribute \
 configuration in entry "%s" is not valid because attribute type %s is \
 single-valued but the conflict behavior is configured to merge real and \
 virtual values
ERR_CONFIG_FILE_MODIFY_STRUCTURAL_CHANGE_NOT_ALLOWED_653=Configuration \
 entry %s cannot be modified because the change would alter its structural \
 object class
ERR_CONFIG_CANNOT_CALCULATE_DIGEST_654=An error occurred while \
 attempting to calculate a SHA-1 digest of file %s:  %s
WARN_CONFIG_MANUAL_CHANGES_DETECTED_655=The Directory Server has \
 detected that one or more external changes have been made to the \
 configuration file %s while the server was online, but another change has \
 caused the server configuration to be overwritten.  The manual changes have \
 not been applied, but they have been preserved in file %s
ERR_CONFIG_MANUAL_CHANGES_LOST_656=The Directory Server encountered an \
 error while attempting to determine whether the configuration file %s has \
 been externally edited with the server online, and/or trying to preserve such \
 changes:  %s.  Any manual changes made to that file may have been lost
ERR_CONFIG_ROTATION_POLICY_INVALID_CLASS_657=Class %s specified in \
 attribute ds-cfg-java-class of configuration entry %s cannot be \
 instantiated as a Directory Server log rotation policy:  %s
ERR_CONFIG_RETENTION_POLICY_INVALID_CLASS_658=Class %s specified in \
 attribute ds-cfg-java-class of configuration entry %s cannot be \
 instantiated as a Directory Server log retention policy:  %s
ERR_CONFIG_ROTATION_POLICY_CANNOT_CREATE_POLICY_659=An error occurred \
 while attempting to create a Directory Server log rotation policy from the \
 information in configuration entry %s:  %s
ERR_CONFIG_RETENTION_POLICY_CANNOT_CREATE_POLICY_660=An error occurred \
 while attempting to create a Directory Server log retention policy from the \
 information in configuration entry %s:  %s
ERR_CONFIG_LOGGING_CANNOT_CREATE_WRITER_661=An error occurred while \
 attempting to create a text writer for a Directory Server logger from the \
 information in configuration entry %s:  %s
WARN_CONFIG_SCHEMA_MULTIPLE_ENTRIES_IN_FILE_662=Schema configuration \
 file %s in directory %s contains more than one entry.  Only the first entry \
 will be examined, and the additional entries will be ignored
WARN_CONFIG_SCHEMA_UNPARSEABLE_EXTRA_DATA_IN_FILE_663=Schema \
 configuration file %s in directory %s contains additional data after the \
 schema entry that cannot be parsed by the LDIF reader:  %s.  The first entry \
 will be processed, but the remaining data will be ignored
WARN_CONFIG_PLUGIN_EMPTY_ELEMENT_IN_ORDER_664=The plugin order \
 definition for plugins of type %s contains an empty element.  This may cause \
 the plugin order to be evaluated incorrectly
WARN_CONFIG_PLUGIN_MULTIPLE_WILDCARDS_IN_ORDER_665=The plugin order \
 definition for plugins of type %s contains multiple wildcard characters.  All \
 plugin definitions should contain exactly one wildcard element to indicate \
 where unmatched plugins should be included in the order, and including \
 multiple wildcards may cause the plugin order to be evaluated incorrectly
WARN_CONFIG_PLUGIN_LISTED_MULTIPLE_TIMES_666=The plugin order \
 definition for plugins of type %s includes multiple references to the '%s' \
 plugin.  This may cause the plugin order to be evaluated incorrectly
WARN_CONFIG_PLUGIN_ORDER_NO_WILDCARD_667=The plugin order definition \
 for plugins of type %s does not include a wildcard element to indicate where \
 unmatched plugins should be included in the order.  The server will default \
 to invoking all unnamed plugins after set of named plugins
WARN_CONFIG_SCHEMA_CANNOT_DELETE_SYNTAX_IN_USE_668=Attribute syntax %s \
 cannot be deleted from the server because it is in use by attribute type %s
WARN_CONFIG_SCHEMA_CANNOT_DISABLE_SYNTAX_IN_USE_669=Attribute syntax \
 %s cannot be disabled because it is in use by attribute type %s
WARN_CONFIG_SCHEMA_CANNOT_DELETE_MR_IN_USE_BY_AT_670=Matching rule %s \
 cannot be deleted from the server because it is in use by attribute type %s
WARN_CONFIG_SCHEMA_CANNOT_DELETE_MR_IN_USE_BY_MRU_671=Matching rule %s \
 cannot be deleted from the server because it is in use by matching rule use \
 %s
WARN_CONFIG_SCHEMA_CANNOT_DISABLE_MR_IN_USE_BY_AT_672=Matching rule %s \
 cannot be disabled because it is in use by attribute type %s
WARN_CONFIG_SCHEMA_CANNOT_DISABLE_MR_IN_USE_BY_MRU_673=Matching rule \
 %s cannot be disabled because it is in use by matching rule use %s
ERR_CONFIG_WORK_QUEUE_INITIALIZATION_FAILED_674=Unable to initialize \
 an instance of class %s as a work queue as specified in configuration entry \
 %s:  %s
INFO_CONFIG_WORK_QUEUE_CLASS_CHANGE_REQUIRES_RESTART_675=The class used to \
 provide the Directory Server work queue implementation has been changed from \
 %s to %s, but this change will not take effect until the server is restarted
ERR_CONFIG_FILE_ADD_APPLY_FAILED_676=The attempt to apply the \
 configuration add failed.  The preliminary checks were all successful and the \
 entry was added to the server configuration, but at least one of the \
 configuration add listeners reported an error when attempting to apply the \
 change:  %s
ERR_CONFIG_FILE_DELETE_APPLY_FAILED_677=The attempt to apply the \
 configuration delete failed.  The preliminary checks were all successful and \
 the entry was removed from the server configuration, but at least one of the \
 configuration delete listeners reported an error when attempting to apply the \
 change:  %s
ERR_CONFIG_FILE_MODIFY_APPLY_FAILED_678=The attempt to apply the \
 configuration modification failed.  The preliminary checks were all \
 successful and the modified entry was written to the server configuration, \
 but at least one of the configuration change listeners reported an error when \
 attempting to apply the change:  %s
ERR_CONFIG_KEYMANAGER_CONFIG_NOT_ACCEPTABLE_679=The configuration for \
 the key manager provider defined in configuration entry %s was not \
 acceptable:  %s
ERR_CONFIG_TRUSTMANAGER_CONFIG_NOT_ACCEPTABLE_680=The configuration for \
 the trust manager provider defined in configuration entry %s was not \
 acceptable:  %s
ERR_CONFIG_AUTHZ_CONFIG_NOT_ACCEPTABLE_681=The configuration for the \
 trust manager provider defined in configuration entry %s was not acceptable: \
 %s
ERR_CONFIG_ACCTNOTHANDLER_CONFIG_NOT_ACCEPTABLE_682=The configuration \
 for the account status notification handler defined in configuration entry %s \
 was not acceptable:  %s
ERR_CONFIG_SCHEMA_SYNTAX_CONFIG_NOT_ACCEPTABLE_683=The configuration for \
 the attribute syntax defined in configuration entry %s was not acceptable: \
 %s
ERR_CONFIG_CERTMAPPER_CONFIG_NOT_ACCEPTABLE_684=The configuration for \
 the certificate mapper defined in configuration entry %s was not acceptable: \
 %s
ERR_CONFIG_GROUP_CONFIG_NOT_ACCEPTABLE_686=The configuration for the \
 group implementation defined in configuration entry %s was not acceptable: \
 %s
ERR_CONFIG_IDMAPPER_CONFIG_NOT_ACCEPTABLE_687=The configuration for the \
 identity mapper defined in configuration entry %s was not acceptable:  %s
ERR_CONFIG_SCHEMA_MR_CONFIG_NOT_ACCEPTABLE_688=The configuration for the \
 matching rule defined in configuration entry %s was not acceptable:  %s
ERR_CONFIG_PWGENERATOR_CONFIG_NOT_ACCEPTABLE_689=The configuration for \
 the password generator defined in configuration entry %s was not acceptable: \
 %s
ERR_CONFIG_PWSCHEME_CONFIG_NOT_ACCEPTABLE_690=The configuration for the \
 password storage scheme defined in configuration entry %s was not acceptable: \
 %s
ERR_CONFIG_PWVALIDATOR_CONFIG_NOT_ACCEPTABLE_691=The configuration for \
 the password validator defined in configuration entry %s was not acceptable: \
 %s
ERR_CONFIG_PLUGIN_CONFIG_NOT_ACCEPTABLE_692=The configuration for the \
 plugin defined in configuration entry %s was not acceptable:  %s
ERR_CONFIG_SASL_CONFIG_NOT_ACCEPTABLE_693=The configuration for the SASL \
 mechanism handler defined in configuration entry %s was not acceptable:  %s
ERR_CONFIG_VATTR_CONFIG_NOT_ACCEPTABLE_694=The configuration for the \
 virtual attribute provider defined in configuration entry %s was not \
 acceptable:  %s
ERR_CONFIG_ALERTHANDLER_CONFIG_NOT_ACCEPTABLE_695=The configuration for \
 the alert handler defined in configuration entry %s was not acceptable:  %s
ERR_CONFIG_ALERTHANDLER_INITIALIZATION_FAILED_696=An error occurred \
 while trying to initialize an instance of class %s as an alert handler as \
 defined in configuration entry %s:  %s
ERR_CONFIG_CORE_INVALID_SMTP_SERVER_697=The provided SMTP server value \
 '%s' is invalid.  An SMTP server value must have an IP address or a \
 resolvable name, and it may optionally be followed by a colon and an integer \
 value between 1 and 65535 to specify the server port number
ERR_STARTOK_CANNOT_OPEN_FOR_READING_698=An error occurred while \
 attempting to open the current configuration file %s for reading in order to \
 copy it to the ".startok" file:  %s
ERR_STARTOK_CANNOT_OPEN_FOR_WRITING_699=An error occurred while \
 attempting to open file %s in order to write the ".startok" configuration \
 file:  %s
ERR_STARTOK_CANNOT_WRITE_700=An error occurred while attempting to \
 copy the current configuration from file %s into temporary file %s for use \
 as the ".startok" configuration file:  %s
ERR_STARTOK_CANNOT_RENAME_701=An error occurred while attempting to \
 rename file %s to %s for use as the ".startok" configuration file:  %s
NOTICE_CONFIG_FILE_USING_STARTOK_FILE_702=The Directory Server is starting \
 using the last known good configuration file %s rather than the active \
 configuration file %s
WARN_CONFIG_FILE_NO_STARTOK_FILE_703=No last known good configuration \
 file %s exists.  The server will attempt to start using the active \
 configuration file %s
ERR_CONFIG_JE_PROPERTY_INVALID_704=An error occurred while \
 trying to parse and validate Berkeley DB JE property %s:  %s
ERR_CONFIG_JE_PROPERTY_INVALID_FORM_705=An error occurred while \
 trying to parse and validate Berkeley DB JE property %s: the property \
 does not follow a singular property=value form
ERR_CONFIG_JE_PROPERTY_SHADOWS_CONFIG_706=An error occurred while \
 trying to parse and validate Berkeley DB JE property %s: the property \
 shadows configuration attribute %s
ERR_CONFIG_JE_DUPLICATE_PROPERTY_707=An error occurred while \
 trying to parse and validate Berkeley DB JE property %s: the property \
 is already defined for this component
INFO_CONFIG_JE_PROPERTY_REQUIRES_RESTART_708=Setting Berkeley DB JE property \
 %s will not take effect until the component for which it is set is restarted
ERR_CONFIG_LOGGING_CANNOT_OPEN_FILE_709=An error occurred while \
 attempting to open the configured log file %s for logger %s:  %s
ERR_CONFIG_WORKFLOW_ELEMENT_CONFIG_NOT_ACCEPTABLE_710=The configuration \
 for the workflow element defined in configuration entry %s was not \
 acceptable: %s
ERR_CONFIG_WORKFLOW_ELEMENT_CANNOT_INITIALIZE_711=An error occurred \
 while trying to initialize a workflow element from class %s with the \
 information in configuration entry %s:  %s.  This workflow element will be \
 disabled
ERR_CONFIG_WORKFLOW_CANNOT_CONFIGURE_MANUAL_713=An error occurred \
 while trying to configure in manual mode the workflows in the \
 Directory Server, and rollback to automatic configuration mode has failed \
 too. If the server is in an unstab\
  le state restart it with the last \
 valid configuration
ERR_CONFIG_WORKFLOW_CANNOT_CONFIGURE_AUTO_714=An error occurred \
 while trying to configure in automatic mode the workflows in the \
 Directory Server, and rollback to manual configuration mode has failed \
 too. If the server is in an unstable state restart it with the last \
 valid configuration
ERR_CONFIG_LOGGING_INSANE_MODE_715=Invalid UNIX file permissions %s \
  does not allow write access to the log file by the log publisher
ERR_CONFIG_LOGGING_MODE_INVALID_716=Invalid UNIX file permissions %s: %s
ERR_CONFIG_EXTENSION_CONFIG_NOT_ACCEPTABLE_717=The configuration for \
 the extension defined in configuration entry %s was not \
 acceptable:  %s
ERR_CONFIG_EXTENSION_INITIALIZATION_FAILED_718=An error occurred while \
 trying to initialize an instance of class %s as an extension as \
 defined in configuration entry %s:  %s
ERR_CONFIG_NETWORKGROUPREQUESTFILTERINGPOLICY_INVALID_ATTRIBUTE_719=The \
 allowed attribute %s specified in configuration entry %s is also defined as \
 a prohibited attribute
ERR_CONFIG_NETWORKGROUPREQUESTFILTERINGPOLICY_INVALID_SUBTREE_720=The \
 allowed subtree %s specified in configuration entry %s is also defined as \
 a prohibited subtree
ERR_CONFIG_NETWORK_GROUP_CONFIG_NOT_ACCEPTABLE_721=The configuration \
 for the network group defined in configuration entry %s was not acceptable:  %s
ERR_CONFIG_NETWORK_GROUP_POLICY_CANNOT_INITIALIZE_722=An error occurred \
 while trying to initialize a network group policy loaded from class %s with \
 the information in configuration entry %s:  %s
WARN_CONFIG_SCHEMA_CANNOT_PARSE_LDAP_SYNTAX_723=An ldapSyntaxes \
  attribute read from schema configuration file %s could not be parsed:  %s
WARN_CONFIG_SCHEMA_CONFLICTING_LDAP_SYNTAX_724=An ldap syntax read \
 from schema configuration file %s conflicts with another ldap syntax already \
 read into the schema:  %s.  The later ldap syntax description will be used
ERR_CONFIG_PWPOLICY_DEFAULT_POLICY_IS_WRONG_TYPE_726=The configuration \
 entry '%s' is currently defined to be the default password policy, however it \
 is not a password policy
ERR_CONFIG_PWPOLICY_CANNOT_CHANGE_DEFAULT_POLICY_WRONG_TYPE_727=The \
 default password policy value '%s' is invalid because it refers to an \
 authentication policy which is not a password policy
ERR_CONFIG_LOGGING_INVALID_TIME_FORMAT_728=The timestamp format string \
 "%s" is not a valid format string.  The format string should conform to the \
 syntax described in the documentation for the "java.text.SimpleDateFormat" class
ERR_CONFIG_LOGGING_INVALID_USER_DN_PATTERN_729=The access log filtering \
 criteria defined in "%s" could not be parsed because it contains an invalid \
 user DN pattern "%s"
ERR_CONFIG_LOGGING_INVALID_TARGET_DN_PATTERN_730=The access log filtering \
 criteria defined in "%s" could not be parsed because it contains an invalid \
 target DN pattern "%s"
WARN_CONFIG_LOGGER_NO_ACTIVE_HTTP_ACCESS_LOGGERS_731=There are no active \
 HTTP access loggers defined in the Directory Server configuration.  No HTTP \
 access logging will be performed
ERR_CONFIG_LOGGER_INVALID_HTTP_ACCESS_LOGGER_CLASS_732=Class %s specified \
 in attribute ds-cfg-java-class of configuration entry %s cannot be \
 instantiated as a Directory Server HTTP access logger:  %s
ERR_CONFIG_LOGGING_EMPTY_LOG_FORMAT_733=The log format for configuration \
 entry %s is empty. No information will be logged even if logging is activated
WARN_CONFIG_LOGGING_UNSUPPORTED_FIELDS_IN_LOG_FORMAT_734=The log format \
 for %s contains the folowing unsupported fields: %s. Their output will be \
 replaced with a dash ("-") character
opendj-admin/src/main/resources/com/forgerock/opendj/ldap/protocol.properties
@@ -29,13 +29,10 @@
#
# Keys must be formatted as follows:
#
# [SEVERITY]_[DESCRIPTION]_[ORDINAL]
# [DESCRIPTION]_[ORDINAL]
#
# where:
#
# SEVERITY is one of:
# [INFO, MILD_WARN, SEVERE_WARN, MILD_ERR, SEVERE_ERR, FATAL_ERR, DEBUG, NOTICE]
#
# DESCRIPTION is an upper case string providing a hint as to the context of
# the message in upper case with the underscore ('_') character serving as
# word separator