From a5c1e473c76b9de51864deeff4d5e92ce0c6fdd0 Mon Sep 17 00:00:00 2001
From: Jean-Noel Rouvignac <jean-noel.rouvignac@forgerock.com>
Date: Wed, 26 Nov 2014 16:55:41 +0000
Subject: [PATCH] OPENDJ-1545 Remove Workflow, NetworkGroups and related attempts at building a proxy

---
 /dev/null                                                                                                                    |  427 -----------------------------------------------
 opendj-sdk/opendj3-server-dev/resource/config/config.ldif                                                                    |    6 
 opendj-sdk/opendj-config-maven-plugin/src/main/resources/config/xml/org/forgerock/opendj/server/config/RootConfiguration.xml |    6 
 opendj-sdk/opendj3-server-dev/src/server/org/opends/server/core/DirectoryServer.java                                         |   70 -------
 opendj-sdk/opendj3-server-dev/src/admin/defn/org/opends/server/admin/std/RootConfiguration.xml                               |    6 
 opendj-sdk/opendj3-server-dev/src/admin/messages/RootCfgDefn.properties                                                      |    4 
 6 files changed, 0 insertions(+), 519 deletions(-)

diff --git a/opendj-sdk/opendj-config-maven-plugin/src/main/resources/config/xml/org/forgerock/opendj/server/config/ExtensionConfiguration.xml b/opendj-sdk/opendj-config-maven-plugin/src/main/resources/config/xml/org/forgerock/opendj/server/config/ExtensionConfiguration.xml
deleted file mode 100644
index 902526a..0000000
--- a/opendj-sdk/opendj-config-maven-plugin/src/main/resources/config/xml/org/forgerock/opendj/server/config/ExtensionConfiguration.xml
+++ /dev/null
@@ -1,89 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-  ! 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 legal-notices/CDDLv1_0.txt
-  ! or http://forgerock.org/license/CDDLv1.0.html.
-  ! See the License for the specific language governing permissions
-  ! and limitations under the License.
-  !
-  ! When distributing Covered Code, include this CDDL HEADER in each
-  ! file and include the License file at legal-notices/CDDLv1_0.txt.
-  ! If applicable, add the following below this CDDL HEADER, with the
-  ! fields enclosed by brackets "[]" replaced with your own identifying
-  ! information:
-  !      Portions Copyright [yyyy] [name of copyright owner]
-  !
-  ! CDDL HEADER END
-  !
-  !
-  !      Copyright 2007-2008 Sun Microsystems, Inc.
-  ! -->
-<adm:managed-object name="extension"
-  plural-name="extensions"
-  package="org.forgerock.opendj.server.config"
-  xmlns:adm="http://opendj.forgerock.org/admin"
-  xmlns:ldap="http://opendj.forgerock.org/admin-ldap"
-  xmlns:cli="http://opendj.forgerock.org/admin-cli">
-  <adm:synopsis>
-    The
-    <adm:user-friendly-name />
-    allows to extend the configuration with new type of objects.
-  </adm:synopsis>
-  <adm:description>
-    It is an entry point for extensions that requires configuration objects
-    that does not inherit from an existing top-level object.
-  </adm:description>
-  <adm:tag name="core-server" />
-  <adm:profile name="ldap">
-    <ldap:object-class>
-      <ldap:name>ds-cfg-extension</ldap:name>
-      <ldap:superior>top</ldap:superior>
-    </ldap:object-class>
-  </adm:profile>
-  <adm:profile name="cli">
-    <cli:managed-object custom="true" />
-  </adm:profile>
-  <adm:property name="enabled" mandatory="true">
-    <adm:synopsis>
-      Indicates whether the
-      <adm:user-friendly-name />
-      is enabled.
-    </adm:synopsis>
-    <adm:syntax>
-      <adm:boolean />
-    </adm:syntax>
-    <adm:profile name="ldap">
-      <ldap:attribute>
-        <ldap:name>ds-cfg-enabled</ldap:name>
-      </ldap:attribute>
-    </adm:profile>
-  </adm:property>
-  <adm:property name="java-class" mandatory="true">
-    <adm:synopsis>
-      Specifies the fully-qualified name of the Java class that provides the
-      <adm:user-friendly-name />
-      implementation.
-    </adm:synopsis>
-	<adm:requires-admin-action>
-	  <adm:component-restart />
-	</adm:requires-admin-action>
-    <adm:syntax>
-      <adm:java-class>
-        <adm:instance-of>
-          org.opends.server.api.Extension
-        </adm:instance-of>
-      </adm:java-class>
-    </adm:syntax>
-    <adm:profile name="ldap">
-      <ldap:attribute>
-        <ldap:name>ds-cfg-java-class</ldap:name>
-      </ldap:attribute>
-    </adm:profile>
-  </adm:property>
-</adm:managed-object>
diff --git a/opendj-sdk/opendj-config-maven-plugin/src/main/resources/config/xml/org/forgerock/opendj/server/config/RootConfiguration.xml b/opendj-sdk/opendj-config-maven-plugin/src/main/resources/config/xml/org/forgerock/opendj/server/config/RootConfiguration.xml
index cfb48e9..74aec6d 100644
--- a/opendj-sdk/opendj-config-maven-plugin/src/main/resources/config/xml/org/forgerock/opendj/server/config/RootConfiguration.xml
+++ b/opendj-sdk/opendj-config-maven-plugin/src/main/resources/config/xml/org/forgerock/opendj/server/config/RootConfiguration.xml
@@ -433,12 +433,6 @@
       <ldap:rdn-sequence>cn=Administration Connector,cn=config</ldap:rdn-sequence>
     </adm:profile>
   </adm:relation>
-  <adm:relation name="extension" hidden="true">
-    <adm:one-to-many />
-    <adm:profile name="ldap">
-      <ldap:rdn-sequence>cn=Extensions,cn=config</ldap:rdn-sequence>
-    </adm:profile>
-   </adm:relation>
   <adm:product-name>OpenDJ</adm:product-name>
   <adm:tag-definition name="logging">
     <adm:synopsis>Logging</adm:synopsis>
diff --git a/opendj-sdk/opendj3-server-dev/resource/config/config.ldif b/opendj-sdk/opendj3-server-dev/resource/config/config.ldif
index 6ee45c7..dcabd11 100644
--- a/opendj-sdk/opendj3-server-dev/resource/config/config.ldif
+++ b/opendj-sdk/opendj3-server-dev/resource/config/config.ldif
@@ -2609,9 +2609,3 @@
 ds-cfg-enabled: true
 ds-cfg-trust-store-type: JKS
 ds-cfg-trust-store-file: config/admin-truststore
-
-dn: cn=Extensions,cn=config
-objectClass: top
-objectClass: ds-cfg-branch
-cn: Extensions
-
diff --git a/opendj-sdk/opendj3-server-dev/src/admin/defn/org/opends/server/admin/std/ExtensionConfiguration.xml b/opendj-sdk/opendj3-server-dev/src/admin/defn/org/opends/server/admin/std/ExtensionConfiguration.xml
deleted file mode 100644
index 45179a5..0000000
--- a/opendj-sdk/opendj3-server-dev/src/admin/defn/org/opends/server/admin/std/ExtensionConfiguration.xml
+++ /dev/null
@@ -1,89 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-  ! 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 legal-notices/CDDLv1_0.txt
-  ! or http://forgerock.org/license/CDDLv1.0.html.
-  ! See the License for the specific language governing permissions
-  ! and limitations under the License.
-  !
-  ! When distributing Covered Code, include this CDDL HEADER in each
-  ! file and include the License file at legal-notices/CDDLv1_0.txt.
-  ! If applicable, add the following below this CDDL HEADER, with the
-  ! fields enclosed by brackets "[]" replaced with your own identifying
-  ! information:
-  !      Portions Copyright [yyyy] [name of copyright owner]
-  !
-  ! CDDL HEADER END
-  !
-  !
-  !      Copyright 2007-2008 Sun Microsystems, Inc.
-  ! -->
-<adm:managed-object name="extension"
-  plural-name="extensions"
-  package="org.opends.server.admin.std"
-  xmlns:adm="http://www.opends.org/admin"
-  xmlns:ldap="http://www.opends.org/admin-ldap"
-  xmlns:cli="http://www.opends.org/admin-cli">
-  <adm:synopsis>
-    The
-    <adm:user-friendly-name />
-    allows to extend the configuration with new type of objects.
-  </adm:synopsis>
-  <adm:description>
-    It is an entry point for extensions that requires configuration objects
-    that does not inherit from an existing top-level object.
-  </adm:description>
-  <adm:tag name="core-server" />
-  <adm:profile name="ldap">
-    <ldap:object-class>
-      <ldap:name>ds-cfg-extension</ldap:name>
-      <ldap:superior>top</ldap:superior>
-    </ldap:object-class>
-  </adm:profile>
-  <adm:profile name="cli">
-    <cli:managed-object custom="true" />
-  </adm:profile>
-  <adm:property name="enabled" mandatory="true">
-    <adm:synopsis>
-      Indicates whether the
-      <adm:user-friendly-name />
-      is enabled.
-    </adm:synopsis>
-    <adm:syntax>
-      <adm:boolean />
-    </adm:syntax>
-    <adm:profile name="ldap">
-      <ldap:attribute>
-        <ldap:name>ds-cfg-enabled</ldap:name>
-      </ldap:attribute>
-    </adm:profile>
-  </adm:property>
-  <adm:property name="java-class" mandatory="true">
-    <adm:synopsis>
-      Specifies the fully-qualified name of the Java class that provides the
-      <adm:user-friendly-name />
-      implementation.
-    </adm:synopsis>
-	<adm:requires-admin-action>
-	  <adm:component-restart />
-	</adm:requires-admin-action>
-    <adm:syntax>
-      <adm:java-class>
-        <adm:instance-of>
-          org.opends.server.api.Extension
-        </adm:instance-of>
-      </adm:java-class>
-    </adm:syntax>
-    <adm:profile name="ldap">
-      <ldap:attribute>
-        <ldap:name>ds-cfg-java-class</ldap:name>
-      </ldap:attribute>
-    </adm:profile>
-  </adm:property>
-</adm:managed-object>
diff --git a/opendj-sdk/opendj3-server-dev/src/admin/defn/org/opends/server/admin/std/RootConfiguration.xml b/opendj-sdk/opendj3-server-dev/src/admin/defn/org/opends/server/admin/std/RootConfiguration.xml
index 40c6ab3..a8d46ce 100644
--- a/opendj-sdk/opendj3-server-dev/src/admin/defn/org/opends/server/admin/std/RootConfiguration.xml
+++ b/opendj-sdk/opendj3-server-dev/src/admin/defn/org/opends/server/admin/std/RootConfiguration.xml
@@ -433,12 +433,6 @@
       <ldap:rdn-sequence>cn=Administration Connector,cn=config</ldap:rdn-sequence>
     </adm:profile>
   </adm:relation>
-  <adm:relation name="extension" hidden="true">
-    <adm:one-to-many />
-    <adm:profile name="ldap">
-      <ldap:rdn-sequence>cn=Extensions,cn=config</ldap:rdn-sequence>
-    </adm:profile>
-   </adm:relation>
   <adm:product-name>OpenDJ</adm:product-name>
   <adm:tag-definition name="logging">
     <adm:synopsis>Logging</adm:synopsis>
diff --git a/opendj-sdk/opendj3-server-dev/src/admin/messages/RootCfgDefn.properties b/opendj-sdk/opendj3-server-dev/src/admin/messages/RootCfgDefn.properties
index e6060fa..15928d3 100644
--- a/opendj-sdk/opendj3-server-dev/src/admin/messages/RootCfgDefn.properties
+++ b/opendj-sdk/opendj3-server-dev/src/admin/messages/RootCfgDefn.properties
@@ -40,10 +40,6 @@
 relation.extended-operation-handler.user-friendly-name=Extended Operation Handler
 relation.extended-operation-handler.user-friendly-plural-name=Extended Operation Handlers
 relation.extended-operation-handler.synopsis=Extended Operation Handlers processes the different types of extended operations in the server.
-relation.extension.user-friendly-name=Extension
-relation.extension.user-friendly-plural-name=Extensions
-relation.extension.synopsis=The Extension allows to extend the configuration with new type of objects.
-relation.extension.description=It is an entry point for extensions that requires configuration objects that does not inherit from an existing top-level object.
 relation.global-configuration.user-friendly-name=Global Configuration
 relation.global-configuration.synopsis=The Global contains properties that affect the overall operation of the OpenDJ.
 relation.group-implementation.user-friendly-name=Group Implementation
diff --git a/opendj-sdk/opendj3-server-dev/src/server/org/opends/server/api/Extension.java b/opendj-sdk/opendj3-server-dev/src/server/org/opends/server/api/Extension.java
deleted file mode 100644
index 08e42b3..0000000
--- a/opendj-sdk/opendj3-server-dev/src/server/org/opends/server/api/Extension.java
+++ /dev/null
@@ -1,114 +0,0 @@
-/*
- * 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 legal-notices/CDDLv1_0.txt
- * or http://forgerock.org/license/CDDLv1.0.html.
- * See the License for the specific language governing permissions
- * and limitations under the License.
- *
- * When distributing Covered Code, include this CDDL HEADER in each
- * file and include the License file at legal-notices/CDDLv1_0.txt.
- * If applicable, add the following below this CDDL HEADER, with the
- * fields enclosed by brackets "[]" replaced with your own identifying
- * information:
- *      Portions Copyright [yyyy] [name of copyright owner]
- *
- * CDDL HEADER END
- *
- *
- *      Copyright 2006-2008 Sun Microsystems, Inc.
- *      Portions Copyright 2014 ForgeRock AS
- */
-package org.opends.server.api;
-
-import org.forgerock.i18n.LocalizableMessage;
-
-import java.util.List;
-import org.opends.server.admin.std.server.ExtensionCfg;
-import org.forgerock.opendj.config.server.ConfigException;
-import org.opends.server.types.InitializationException;
-
-
-
-/**
- * This class defines the set of methods and structures that must be
- * implemented by a Directory Server extension.
- *
- * @param <T>
- *          The type of extension configuration handled by
- *          this extension implementation.
- */
-@org.opends.server.types.PublicAPI(
-     stability=org.opends.server.types.StabilityLevel.VOLATILE,
-     mayInstantiate=false,
-     mayExtend=true,
-     mayInvoke=true)
-public abstract class Extension
-       <T extends ExtensionCfg>
-{
-  /**
-   * Initializes this extension based on the
-   * information in the provided extension configuration.
-   *
-   * @param configuration
-   *          The extension configuration that contains the
-   *          information to use to initialize this connection
-   *          handler.
-   * @throws ConfigException
-   *           If an unrecoverable problem arises in the process of
-   *           performing the initialization as a result of the server
-   *           configuration.
-   * @throws InitializationException
-   *           If a problem occurs during initialization that is not
-   *           related to the server configuration.
-   */
-  public abstract void initializeExtension(T configuration)
-      throws ConfigException, InitializationException;
-
-
-
-  /**
-   * Indicates whether the provided configuration is acceptable for
-   * this extension.  It should be possible to call this
-   * method on an uninitialized extension instance in order
-   * to determine whether the extension would be able to use
-   * the provided configuration.
-   * <BR><BR>
-   * Note that implementations which use a subclass of the provided
-   * configuration class will likely need to cast the configuration
-   * to the appropriate subclass type.
-   *
-   * @param  configuration        The extension configuration
-   *                              for which to make the determination.
-   * @param  unacceptableReasons  A list that may be used to hold the
-   *                              reasons that the provided
-   *                              configuration is not acceptable.
-   *
-   * @return  {@code true} if the provided configuration is acceptable
-   *          for this extension, or {@code false} if not.
-   */
-  public boolean isConfigurationAcceptable(
-                      ExtensionCfg configuration,
-                      List<LocalizableMessage> unacceptableReasons)
-  {
-    // This default implementation does not perform any special
-    // validation.  It should be overridden by extension
-    // implementations that wish to perform more detailed validation.
-    return true;
-  }
-
-
-
-  /**
-   * Performs any finalization that may be necessary for
-   * this extension.
-   *
-   */
-  public abstract void finalizeExtension();
-
- }
diff --git a/opendj-sdk/opendj3-server-dev/src/server/org/opends/server/core/DirectoryServer.java b/opendj-sdk/opendj3-server-dev/src/server/org/opends/server/core/DirectoryServer.java
index 24fda7a..67d5d9a 100644
--- a/opendj-sdk/opendj3-server-dev/src/server/org/opends/server/core/DirectoryServer.java
+++ b/opendj-sdk/opendj3-server-dev/src/server/org/opends/server/core/DirectoryServer.java
@@ -100,7 +100,6 @@
 import org.opends.server.api.EntryCache;
 import org.opends.server.api.ExportTaskListener;
 import org.opends.server.api.ExtendedOperationHandler;
-import org.opends.server.api.Extension;
 import org.opends.server.api.IdentityMapper;
 import org.opends.server.api.ImportTaskListener;
 import org.opends.server.api.InitializationCompletedListener;
@@ -441,9 +440,6 @@
   /** The set of key manager providers registered with the server. */
   private ConcurrentMap<DN, KeyManagerProvider> keyManagerProviders;
 
-  /** The set of extensions registered with the server. */
-  private ConcurrentMap<DN, Extension> extensions;
-
   /**
    * The set of password generators registered with the Directory Server, as a
    * mapping between the DN of the associated configuration entry and the
@@ -665,9 +661,6 @@
    */
   private KeyManagerProviderConfigManager keyManagerProviderConfigManager;
 
-  /** The extension configuration manager for the Directory Server. */
-  private ExtensionConfigManager extensionConfigManager;
-
   /** The set of connections that are currently established. */
   private Set<ClientConnection> establishedConnections;
 
@@ -1078,8 +1071,6 @@
       directoryServer.alternateRootBindDNs = new ConcurrentHashMap<DN,DN>();
       directoryServer.keyManagerProviders =
            new ConcurrentHashMap<DN,KeyManagerProvider>();
-      directoryServer.extensions =
-           new ConcurrentHashMap<DN,Extension>();
       directoryServer.trustManagerProviders =
            new ConcurrentHashMap<DN,TrustManagerProvider>();
       directoryServer.rotationPolicies =
@@ -1582,9 +1573,6 @@
 
       pluginConfigManager.initializeUserPlugins(null);
 
-      extensionConfigManager = new ExtensionConfigManager(serverContext);
-      extensionConfigManager.initializeExtensions();
-
       if (!environmentConfig.disableSynchronization())
       {
         synchronizationProviderConfigManager = new SynchronizationProviderConfigManager(serverContext);
@@ -6312,64 +6300,6 @@
 
 
   /**
-   * Retrieves the set of extensions registered with the Directory
-   * Server.
-   *
-   * @return  The set of extensions registered with the Directory
-   *          Server.
-   */
-  public static Map<DN,Extension> getExtensions()
-  {
-    return directoryServer.extensions;
-  }
-
-
-
-  /**
-   * Retrieves the extension registered with the provided entry DN.
-   *
-   * @param  providerDN  The DN with which the extension is
-   *                     registered.
-   *
-   * @return  The extension registered with the provided entry DN, or
-   *          {@code null} if there is no such extension registered
-   *          with the server.
-   */
-  public static Extension getExtension(DN providerDN)
-  {
-    return directoryServer.extensions.get(providerDN);
-  }
-
-
-
-  /**
-   * Registers the provided extension with the Directory Server.
-   *
-   * @param  providerDN  The DN with which to register the extension.
-   * @param  provider    The extension to register with the server.
-   */
-  public static void registerExtension(DN providerDN,
-                                                Extension provider)
-  {
-    directoryServer.extensions.put(providerDN, provider);
-  }
-
-
-
-  /**
-   * Deregisters the specified extension with the Directory Server.
-   *
-   * @param  providerDN  The DN with which the extension is
-   *                     registered.
-   */
-  public static void deregisterExtension(DN providerDN)
-  {
-    directoryServer.extensions.remove(providerDN);
-  }
-
-
-
-  /**
    * Retrieves a set containing the names of the allowed tasks that may be
    * invoked in the server.
    *
diff --git a/opendj-sdk/opendj3-server-dev/src/server/org/opends/server/core/ExtensionConfigManager.java b/opendj-sdk/opendj3-server-dev/src/server/org/opends/server/core/ExtensionConfigManager.java
deleted file mode 100644
index ab4bda3..0000000
--- a/opendj-sdk/opendj3-server-dev/src/server/org/opends/server/core/ExtensionConfigManager.java
+++ /dev/null
@@ -1,427 +0,0 @@
-/*
- * 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 legal-notices/CDDLv1_0.txt
- * or http://forgerock.org/license/CDDLv1.0.html.
- * See the License for the specific language governing permissions
- * and limitations under the License.
- *
- * When distributing Covered Code, include this CDDL HEADER in each
- * file and include the License file at legal-notices/CDDLv1_0.txt.
- * If applicable, add the following below this CDDL HEADER, with the
- * fields enclosed by brackets "[]" replaced with your own identifying
- * information:
- *      Portions Copyright [yyyy] [name of copyright owner]
- *
- * CDDL HEADER END
- *
- *
- *      Copyright 2006-2008 Sun Microsystems, Inc.
- *      Portions Copyright 2014 ForgeRock AS
- */
-package org.opends.server.core;
-
-import org.forgerock.i18n.LocalizableMessage;
-import org.forgerock.i18n.slf4j.LocalizedLogger;
-import org.forgerock.util.Utils;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.concurrent.ConcurrentHashMap;
-
-import org.opends.server.admin.ClassPropertyDefinition;
-import org.opends.server.admin.server.ConfigurationAddListener;
-import org.opends.server.admin.server.ConfigurationChangeListener;
-import org.opends.server.admin.server.ConfigurationDeleteListener;
-import org.opends.server.admin.std.meta.ExtensionCfgDefn;
-import org.opends.server.admin.std.server.ExtensionCfg;
-import org.opends.server.admin.std.server.RootCfg;
-import org.opends.server.admin.server.ServerManagementContext;
-import org.opends.server.api.Extension;
-import org.forgerock.opendj.config.server.ConfigException;
-import org.opends.server.types.ConfigChangeResult;
-import org.opends.server.types.DN;
-import org.opends.server.types.InitializationException;
-import org.forgerock.opendj.ldap.ResultCode;
-
-import static org.opends.messages.ConfigMessages.*;
-import static org.opends.server.util.StaticUtils.*;
-
-/**
- * This class defines a utility that will be used to manage the set of
- * extensions defined in the Directory Server.  It will initialize the
- * extensions when the server starts, and then will manage any
- * additions, removals, or modifications to any extensions while
- * the server is running.
- */
-public class  ExtensionConfigManager
-       implements ConfigurationChangeListener<ExtensionCfg>,
-                  ConfigurationAddListener<ExtensionCfg>,
-                  ConfigurationDeleteListener<ExtensionCfg>
-{
-
-  private static final LocalizedLogger logger = LocalizedLogger.getLoggerForThisClass();
-
-  /**
-   * A mapping between the DNs of the config entries and the associated
-   * extensions.
-   */
-  private final ConcurrentHashMap<DN,Extension> extensions;
-
-  private final ServerContext serverContext;
-
-  /**
-   * Creates a new instance of this extension config manager.
-   *
-   * @param serverContext
-   *            The server context.
-   */
-  public ExtensionConfigManager(ServerContext serverContext)
-  {
-    this.serverContext = serverContext;
-    extensions = new ConcurrentHashMap<DN,Extension>();
-  }
-
-  /**
-   * Initializes all extensions currently defined in the Directory
-   * Server configuration.  This should only be called at Directory Server
-   * startup.
-   *
-   * @throws  ConfigException  If a configuration problem causes the
-   *                           extension initialization process to fail.
-   *
-   * @throws  InitializationException  If a problem occurs while initializing
-   *                                   the extensions that is not
-   *                                   related to the server configuration.
-   */
-  public void initializeExtensions()
-         throws ConfigException, InitializationException
-  {
-    // Get the root configuration object.
-    ServerManagementContext managementContext =
-         ServerManagementContext.getInstance();
-    RootCfg rootConfiguration =
-         managementContext.getRootConfiguration();
-
-
-    // Register as an add and delete listener with the root configuration so we
-    // can be notified if any extension entries are added or removed.
-    rootConfiguration.addExtensionAddListener(this);
-    rootConfiguration.addExtensionDeleteListener(this);
-
-
-    //Initialize the existing extensions.
-    for (String name : rootConfiguration.listExtensions())
-    {
-      ExtensionCfg extensionConfig =
-              rootConfiguration.getExtension(name);
-      extensionConfig.addChangeListener(this);
-
-      if (extensionConfig.isEnabled())
-      {
-        String className = extensionConfig.getJavaClass();
-        try
-        {
-          Extension extension =
-               loadExtension(className, extensionConfig, true);
-          extensions.put(extensionConfig.dn(), extension);
-          DirectoryServer.registerExtension(extensionConfig.dn(),
-                                                     extension);
-        }
-        catch (InitializationException ie)
-        {
-          logger.error(ie.getMessageObject());
-          continue;
-        }
-      }
-    }
-  }
-
-
-
-  /**
-   * {@inheritDoc}
-   */
-  public boolean isConfigurationAddAcceptable(
-          ExtensionCfg configuration,
-          List<LocalizableMessage> unacceptableReasons)
-  {
-    if (configuration.isEnabled())
-    {
-      // Get the name of the class and make sure we can instantiate it as a
-      // extension.
-      String className = configuration.getJavaClass();
-      try
-      {
-        loadExtension(className, configuration, false);
-      }
-      catch (InitializationException ie)
-      {
-        unacceptableReasons.add(ie.getMessageObject());
-        return false;
-      }
-    }
-
-    // If we've gotten here, then it's fine.
-    return true;
-  }
-
-
-
-  /**
-   * {@inheritDoc}
-   */
-  public ConfigChangeResult applyConfigurationAdd(
-          ExtensionCfg configuration)
-  {
-    ResultCode        resultCode          = ResultCode.SUCCESS;
-    boolean           adminActionRequired = false;
-    ArrayList<LocalizableMessage> messages            = new ArrayList<LocalizableMessage>();
-
-    configuration.addChangeListener(this);
-
-    if (! configuration.isEnabled())
-    {
-      return new ConfigChangeResult(resultCode, adminActionRequired, messages);
-    }
-
-    Extension extension = null;
-
-    // Get the name of the class and make sure we can instantiate it as an
-    // extension.
-    String className = configuration.getJavaClass();
-    try
-    {
-      extension = loadExtension(className, configuration, true);
-    }
-    catch (InitializationException ie)
-    {
-      if (resultCode == ResultCode.SUCCESS)
-      {
-        resultCode = DirectoryServer.getServerErrorResultCode();
-      }
-
-      messages.add(ie.getMessageObject());
-    }
-
-    if (resultCode == ResultCode.SUCCESS)
-    {
-      extensions.put(configuration.dn(), extension);
-      DirectoryServer.registerExtension(configuration.dn(), extension);
-    }
-
-    return new ConfigChangeResult(resultCode, adminActionRequired, messages);
-  }
-
-
-
-  /**
-   * {@inheritDoc}
-   */
-  public boolean isConfigurationDeleteAcceptable(
-                      ExtensionCfg configuration,
-                      List<LocalizableMessage> unacceptableReasons)
-  {
-    return true;
-  }
-
-
-
-  /**
-   * {@inheritDoc}
-   */
-  public ConfigChangeResult applyConfigurationDelete(
-                                 ExtensionCfg configuration)
-  {
-    ResultCode        resultCode          = ResultCode.SUCCESS;
-    boolean           adminActionRequired = false;
-    ArrayList<LocalizableMessage> messages            = new ArrayList<LocalizableMessage>();
-
-    DirectoryServer.deregisterExtension(configuration.dn());
-
-    Extension extension = extensions.remove(configuration.dn());
-    if (extension != null)
-    {
-      extension.finalizeExtension();
-    }
-
-    return new ConfigChangeResult(resultCode, adminActionRequired, messages);
-  }
-
-
-
-  /**
-   * {@inheritDoc}
-   */
-  public boolean isConfigurationChangeAcceptable(
-                      ExtensionCfg configuration,
-                      List<LocalizableMessage> unacceptableReasons)
-  {
-    if (configuration.isEnabled())
-    {
-      // Get the name of the class and make sure we can instantiate it as an
-      // extension.
-      String className = configuration.getJavaClass();
-      try
-      {
-        loadExtension(className, configuration, false);
-      }
-      catch (InitializationException ie)
-      {
-        unacceptableReasons.add(ie.getMessageObject());
-        return false;
-      }
-    }
-
-    // If we've gotten here, then it's fine.
-    return true;
-  }
-
-
-
-  /**
-   * {@inheritDoc}
-   */
-  public ConfigChangeResult applyConfigurationChange(
-                                 ExtensionCfg configuration)
-  {
-    ResultCode        resultCode          = ResultCode.SUCCESS;
-    boolean           adminActionRequired = false;
-    ArrayList<LocalizableMessage> messages            = new ArrayList<LocalizableMessage>();
-
-
-    // Get the existing extension if it's already enabled.
-    Extension existingExtension = extensions.get(configuration.dn());
-
-
-    // If the new configuration has the extension disabled, then disable it if
-    // it is enabled, or do nothing if it's already disabled.
-    if (! configuration.isEnabled())
-    {
-      if (existingExtension != null)
-      {
-        DirectoryServer.deregisterExtension(configuration.dn());
-
-        Extension extension = extensions.remove(configuration.dn());
-        if (extension != null)
-        {
-          extension.finalizeExtension();
-        }
-      }
-
-      return new ConfigChangeResult(resultCode, adminActionRequired, messages);
-    }
-
-
-    // Get the class for the extension.  If the extension is already
-    // enabled, then we shouldn't do anything with it although if the class has
-    // changed then we'll at least need to indicate that administrative action
-    // is required.  If the extension is disabled, then instantiate the class
-    // and initialize and register it as a extension.
-    String className = configuration.getJavaClass();
-    if (existingExtension != null)
-    {
-      if (! className.equals(existingExtension.getClass().getName()))
-      {
-        adminActionRequired = true;
-      }
-
-      return new ConfigChangeResult(resultCode, adminActionRequired, messages);
-    }
-
-    Extension extension = null;
-    try
-    {
-      extension = loadExtension(className, configuration, true);
-    }
-    catch (InitializationException ie)
-    {
-      if (resultCode == ResultCode.SUCCESS)
-      {
-        resultCode = DirectoryServer.getServerErrorResultCode();
-      }
-
-      messages.add(ie.getMessageObject());
-    }
-
-    if (resultCode == ResultCode.SUCCESS)
-    {
-      extensions.put(configuration.dn(), extension);
-      DirectoryServer.registerExtension(configuration.dn(), extension);
-    }
-
-    return new ConfigChangeResult(resultCode, adminActionRequired, messages);
-  }
-
-
-
-  /**
-   * Loads the specified class, instantiates it as a extension, and
-   * optionally initializes that instance.
-   *
-   * @param  className      The fully-qualified name of the extension
-   *                        class to load, instantiate, and initialize.
-   * @param  configuration  The configuration to use to initialize the
-   *                        extension.  It must not be {@code null}.
-   * @param  initialize     Indicates whether the extension instance
-   *                        should be initialized.
-   *
-   * @return  The possibly initialized extension.
-   *
-   * @throws  InitializationException  If the provided configuration is not
-   *                                   acceptable, or if a problem occurred
-   *                                   while attempting to initialize the
-   *                                   extension using that
-   *                                   configuration.
-   */
-  private Extension loadExtension(String className,
-                                          ExtensionCfg configuration,
-                                          boolean initialize)
-          throws InitializationException
-  {
-    try
-    {
-      ExtensionCfgDefn definition =
-              ExtensionCfgDefn.getInstance();
-      ClassPropertyDefinition propertyDefinition =
-           definition.getJavaClassPropertyDefinition();
-      Class<? extends Extension> extensionClass =
-           propertyDefinition.loadClass(className, Extension.class);
-      Extension extension = extensionClass.newInstance();
-
-
-      if (initialize)
-      {
-        extension.initializeExtension(configuration);
-      }
-      else
-      {
-        List<LocalizableMessage> unacceptableReasons = new ArrayList<LocalizableMessage>();
-        if (!extension.isConfigurationAcceptable(configuration, unacceptableReasons))
-        {
-          String reasons = Utils.joinAsString(".  ", unacceptableReasons);
-          throw new InitializationException(
-              ERR_CONFIG_EXTENSION_CONFIG_NOT_ACCEPTABLE.get(configuration.dn(), reasons));
-        }
-      }
-
-      return extension;
-    }
-    catch (InitializationException ie)
-    {
-      throw ie;
-    }
-    catch (Exception e)
-    {
-      LocalizableMessage message = ERR_CONFIG_EXTENSION_INITIALIZATION_FAILED.
-          get(className, configuration.dn(), stackTraceToSingleLineString(e));
-      throw new InitializationException(message, e);
-    }
-  }
-}
-

--
Gitblit v1.10.0