From a21bc2bedaf1fc0ce94c55529272e3544f754768 Mon Sep 17 00:00:00 2001
From: Nicolas Capponi <nicolas.capponi@forgerock.com>
Date: Mon, 21 Nov 2016 11:42:05 +0000
Subject: [PATCH] OPENDJ-3476 Provide a default CoreConfigManager and add a Directory.getCoreConfigManager() method

---
 opendj-server-legacy/src/main/java/org/opends/server/core/DirectoryServer.java   |   72 ++++++++++++++++-------------------
 opendj-server-legacy/src/main/java/org/opends/server/core/CoreConfigManager.java |   16 ++++----
 2 files changed, 41 insertions(+), 47 deletions(-)

diff --git a/opendj-server-legacy/src/main/java/org/opends/server/core/CoreConfigManager.java b/opendj-server-legacy/src/main/java/org/opends/server/core/CoreConfigManager.java
index 889ce0e..5839b58 100644
--- a/opendj-server-legacy/src/main/java/org/opends/server/core/CoreConfigManager.java
+++ b/opendj-server-legacy/src/main/java/org/opends/server/core/CoreConfigManager.java
@@ -54,7 +54,7 @@
   private final ServerContext serverContext;
 
   /** The core attributes. */
-  private volatile CoreAttributes coreAttributes;
+  private volatile CoreAttributes coreAttributes = new CoreAttributes();
 
   /**
    * Creates a new instance of this core config manager.
@@ -87,11 +87,11 @@
      */
     private boolean allowAttributeNameExceptions;
     /** The policy to use regarding syntax enforcement. */
-    private AcceptRejectWarn syntaxEnforcementPolicy;
+    private AcceptRejectWarn syntaxEnforcementPolicy = AcceptRejectWarn.REJECT;
     /** The result code that should be used for internal "server" errors. */
-    private ResultCode serverErrorResultCode;
+    private ResultCode serverErrorResultCode = ResultCode.OTHER;
     /** The policy to use regarding single structural objectclass enforcement. */
-    private AcceptRejectWarn singleStructuralClassPolicy;
+    private AcceptRejectWarn singleStructuralClassPolicy = AcceptRejectWarn.REJECT;
     /** Indicates whether the server should send a response to operations that have been abandoned. */
     private boolean notifyAbandonedOperations;
     /**
@@ -110,7 +110,7 @@
      */
     private DN proxiedAuthorizationIdentityMapperDN;
     /** The writability mode for the Directory Server. */
-    private WritabilityMode writabilityMode;
+    private WritabilityMode writabilityMode = WritabilityMode.ENABLED;
     /** Indicates whether the server should reject unauthenticated requests. */
     private boolean rejectUnauthenticatedRequests;
     /** Indicates whether a simple bind request containing a DN must also provide a password. */
@@ -118,12 +118,12 @@
     /** The maximum number of candidates that should be check for matches during a search. */
     private int lookthroughLimit;
     /** The sets of mail server properties. */
-    private List<Properties> mailServerPropertySets;
+    private List<Properties> mailServerPropertySets = Collections.emptyList();
 
     /** The set of allowed task classes. */
-    private Set<String> allowedTasks;
+    private Set<String> allowedTasks = Collections.emptySet();
     /** The set of disabled privileges. */
-    private Set<Privilege> disabledPrivileges;
+    private Set<Privilege> disabledPrivileges = Collections.emptySet();
     /** Indicates whether bind responses should include failure reason messages. */
     private boolean returnBindErrorMessages;
     /** The idle time limit for the server. */
diff --git a/opendj-server-legacy/src/main/java/org/opends/server/core/DirectoryServer.java b/opendj-server-legacy/src/main/java/org/opends/server/core/DirectoryServer.java
index 3b7bf8f..06953a9 100644
--- a/opendj-server-legacy/src/main/java/org/opends/server/core/DirectoryServer.java
+++ b/opendj-server-legacy/src/main/java/org/opends/server/core/DirectoryServer.java
@@ -34,7 +34,6 @@
 import java.lang.management.ManagementFactory;
 import java.net.InetAddress;
 import java.text.DecimalFormat;
-import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collection;
 import java.util.Collections;
@@ -741,7 +740,6 @@
       }
       try
       {
-        directoryServer.coreConfigManager = new CoreConfigManager(directoryServer.serverContext);
         directoryServer.coreConfigManager.initializeCoreConfig();
       }
       catch (Exception e)
@@ -1004,6 +1002,7 @@
     operatingSystem = OperatingSystem.forName(System.getProperty("os.name"));
     serverContext = new DirectoryServerContext();
     virtualAttributeConfigManager = new VirtualAttributeConfigManager(serverContext);
+    coreConfigManager = new CoreConfigManager(serverContext);
     memoryQuota = new MemoryQuota();
     diskSpaceMonitor = new DiskSpaceMonitor();
   }
@@ -1379,7 +1378,6 @@
       virtualAttributeConfigManager.initializeVirtualAttributes();
 
       // The core Directory Server configuration.
-      coreConfigManager = new CoreConfigManager(serverContext);
       coreConfigManager.initializeCoreConfig();
 
       initializeCryptoManager();
@@ -1587,7 +1585,7 @@
    */
   public static boolean mailServerConfigured()
   {
-    return directoryServer.coreConfigManager != null && directoryServer.coreConfigManager.isMailServerConfigured();
+    return getCoreConfigManager().isMailServerConfigured();
   }
 
   /**
@@ -1599,8 +1597,7 @@
    */
   public static List<Properties> getMailServerPropertySets()
   {
-    return directoryServer.coreConfigManager != null ?
-        directoryServer.coreConfigManager.getMailServerPropertySets() : new ArrayList<Properties>(0);
+    return getCoreConfigManager().getMailServerPropertySets();
   }
 
   /**
@@ -2509,7 +2506,7 @@
     // Ensure default policy is synchronized.
     synchronized (directoryServer.authenticationPolicies)
     {
-      if (directoryServer.coreConfigManager.getDefaultPasswordPolicyDN().equals(configEntryDN))
+      if (getCoreConfigManager().getDefaultPasswordPolicyDN().equals(configEntryDN))
       {
         // The correct policy type is enforced by the core config manager.
         directoryServer.defaultPasswordPolicy = (PasswordPolicy) policy;
@@ -2540,7 +2537,7 @@
     // Ensure default policy is synchronized.
     synchronized (directoryServer.authenticationPolicies)
     {
-      if (directoryServer.coreConfigManager.getDefaultPasswordPolicyDN().equals(configEntryDN))
+      if (getCoreConfigManager().getDefaultPasswordPolicyDN().equals(configEntryDN))
       {
         directoryServer.defaultPasswordPolicy = null;
       }
@@ -2563,10 +2560,7 @@
    */
   public static DN getDefaultPasswordPolicyDN()
   {
-    synchronized (directoryServer.authenticationPolicies)
-    {
-      return directoryServer.coreConfigManager.getDefaultPasswordPolicyDN();
-    }
+    return getCoreConfigManager().getDefaultPasswordPolicyDN();
   }
 
   /**
@@ -2594,7 +2588,7 @@
     // Ensure default policy is synchronized.
     synchronized (directoryServer.authenticationPolicies)
     {
-      DN defaultPasswordPolicyDN = directoryServer.coreConfigManager.getDefaultPasswordPolicyDN();
+      DN defaultPasswordPolicyDN = getCoreConfigManager().getDefaultPasswordPolicyDN();
       assert null != directoryServer.authenticationPolicies
           .get(defaultPasswordPolicyDN) :
             "Internal Error: no default password policy defined.";
@@ -3055,8 +3049,7 @@
    */
   public static ResultCode getServerErrorResultCode()
   {
-    return directoryServer.coreConfigManager != null ?
-        directoryServer.coreConfigManager.getServerErrorResultCode() : ResultCode.OTHER;
+    return getCoreConfigManager().getServerErrorResultCode();
   }
 
   /**
@@ -3069,7 +3062,7 @@
    */
   public static boolean addMissingRDNAttributes()
   {
-    return directoryServer.coreConfigManager.isAddMissingRDNAttributes();
+    return getCoreConfigManager().isAddMissingRDNAttributes();
   }
 
   /**
@@ -3087,8 +3080,7 @@
   @Deprecated
   public static boolean allowAttributeNameExceptions()
   {
-    return directoryServer.coreConfigManager != null
-        && directoryServer.coreConfigManager.isAllowAttributeNameExceptions();
+    return getCoreConfigManager().isAllowAttributeNameExceptions();
   }
 
   /**
@@ -3099,7 +3091,7 @@
    */
   public static boolean checkSchema()
   {
-    return directoryServer.coreConfigManager.isCheckSchema();
+    return getCoreConfigManager().isCheckSchema();
   }
 
   /**
@@ -3111,7 +3103,7 @@
    */
   public static AcceptRejectWarn getSingleStructuralObjectClassPolicy()
   {
-    return directoryServer.coreConfigManager.getSingleStructuralObjectClassPolicy();
+    return getCoreConfigManager().getSingleStructuralObjectClassPolicy();
   }
 
   /**
@@ -3123,8 +3115,7 @@
    */
   public static AcceptRejectWarn getSyntaxEnforcementPolicy()
   {
-    return directoryServer.coreConfigManager != null ?
-        directoryServer.coreConfigManager.getSyntaxEnforcementPolicy() : AcceptRejectWarn.REJECT;
+    return getCoreConfigManager().getSyntaxEnforcementPolicy();
   }
 
   /**
@@ -3140,7 +3131,7 @@
    */
   public static boolean notifyAbandonedOperations()
   {
-    return directoryServer.coreConfigManager.isNotifyAbandonedOperations();
+    return getCoreConfigManager().isNotifyAbandonedOperations();
   }
 
   /**
@@ -3552,7 +3543,7 @@
    */
   public static IdentityMapper<?> getProxiedAuthorizationIdentityMapper()
   {
-    DN dnMapper = directoryServer.coreConfigManager.getProxiedAuthorizationIdentityMapperDN();
+    DN dnMapper = getCoreConfigManager().getProxiedAuthorizationIdentityMapperDN();
     return dnMapper != null ? directoryServer.identityMappers.get(dnMapper) : null;
   }
 
@@ -3685,7 +3676,7 @@
     ClientConnection clientConnection = operation.getClientConnection();
     //Reject or accept the unauthenticated requests based on the configuration settings.
     if (!clientConnection.getAuthenticationInfo().isAuthenticated() &&
-        (directoryServer.coreConfigManager.isRejectUnauthenticatedRequests() ||
+        (getCoreConfigManager().isRejectUnauthenticatedRequests() ||
         (directoryServer.lockdownMode && !isAllowedInLockDownMode)))
     {
       switch(operation.getOperationType())
@@ -3852,6 +3843,11 @@
     directoryServer.synchronizationProviders.remove(provider);
   }
 
+  public static CoreConfigManager getCoreConfigManager()
+  {
+    return directoryServer.coreConfigManager;
+  }
+
   /**
    * Retrieves a set containing the names of the allowed tasks that may be
    * invoked in the server.
@@ -3861,8 +3857,7 @@
    */
   public static Set<String> getAllowedTasks()
   {
-    return directoryServer.coreConfigManager != null ?
-        directoryServer.coreConfigManager.getAllowedTasks() : new HashSet<String>(0);
+    return getCoreConfigManager().getAllowedTasks();
   }
 
   /**
@@ -3875,8 +3870,7 @@
    */
   public static boolean isDisabled(Privilege privilege)
   {
-    return directoryServer.coreConfigManager != null ?
-        directoryServer.coreConfigManager.getDisabledPrivileges().contains(privilege) : false;
+    return getCoreConfigManager().getDisabledPrivileges().contains(privilege);
   }
 
   /**
@@ -3888,7 +3882,7 @@
    */
   public static boolean returnBindErrorMessages()
   {
-    return directoryServer.coreConfigManager.isReturnBindErrorMessages();
+    return getCoreConfigManager().isReturnBindErrorMessages();
   }
 
   /**
@@ -4603,7 +4597,7 @@
         }
       }
 
-      final long maxAllowed = directoryServer.coreConfigManager.getMaxAllowedConnections();
+      final long maxAllowed = getCoreConfigManager().getMaxAllowedConnections();
       if (0 < maxAllowed && maxAllowed <= directoryServer.currentConnections)
       {
         return -1;
@@ -4710,7 +4704,7 @@
    */
   public static int getSizeLimit()
   {
-    return directoryServer.coreConfigManager.getSizeLimit();
+    return getCoreConfigManager().getSizeLimit();
   }
 
   /**
@@ -4722,7 +4716,7 @@
    */
   public static int getLookthroughLimit()
   {
-    return directoryServer.coreConfigManager.getLookthroughLimit();
+    return getCoreConfigManager().getLookthroughLimit();
   }
 
   /**
@@ -4757,7 +4751,7 @@
   public static boolean allowNewPersistentSearch()
   {
     //-1 indicates that there is no limit.
-    int max = directoryServer.coreConfigManager.getMaxPSearches();
+    int max = getCoreConfigManager().getMaxPSearches();
     return max == -1 || directoryServer.activePSearches.get() < max;
   }
 
@@ -4770,7 +4764,7 @@
    */
   public static int getTimeLimit()
   {
-    return directoryServer.coreConfigManager.getTimeLimit();
+    return getCoreConfigManager().getTimeLimit();
   }
 
   /**
@@ -4783,7 +4777,7 @@
    */
   public static boolean getUseNanoTime()
   {
-    return directoryServer.coreConfigManager.isUseNanoTime();
+    return getCoreConfigManager().isUseNanoTime();
   }
 
   /**
@@ -4794,7 +4788,7 @@
    */
   public static WritabilityMode getWritabilityMode()
   {
-    return directoryServer.coreConfigManager.getWritabilityMode();
+    return getCoreConfigManager().getWritabilityMode();
   }
 
   /**
@@ -4807,7 +4801,7 @@
    */
   public static boolean bindWithDNRequiresPassword()
   {
-    return directoryServer.coreConfigManager.isBindWithDNRequiresPassword();
+    return getCoreConfigManager().isBindWithDNRequiresPassword();
   }
 
   /**
@@ -5527,7 +5521,7 @@
    */
   public static int getMaxInternalBufferSize()
   {
-    return directoryServer.coreConfigManager.getMaxInternalBufferSize();
+    return getCoreConfigManager().getMaxInternalBufferSize();
   }
 
   /**

--
Gitblit v1.10.0