From 41388e8178bd91411face44bba066a5b1e6b34c0 Mon Sep 17 00:00:00 2001
From: jvergara <jvergara@localhost>
Date: Wed, 29 Oct 2008 07:26:36 +0000
Subject: [PATCH] Modify some code to create unmodifiable collections only once in the life cycle of the descriptor objects.

---
 opendj-sdk/opends/src/guitools/org/opends/guitools/controlpanel/util/ConfigFromDirContext.java |   71 +++++++++++++++++++----------------
 1 files changed, 39 insertions(+), 32 deletions(-)

diff --git a/opendj-sdk/opends/src/guitools/org/opends/guitools/controlpanel/util/ConfigFromDirContext.java b/opendj-sdk/opends/src/guitools/org/opends/guitools/controlpanel/util/ConfigFromDirContext.java
index 3b00d79..6ecae6c 100644
--- a/opendj-sdk/opends/src/guitools/org/opends/guitools/controlpanel/util/ConfigFromDirContext.java
+++ b/opendj-sdk/opends/src/guitools/org/opends/guitools/controlpanel/util/ConfigFromDirContext.java
@@ -30,6 +30,8 @@
 import static org.opends.messages.AdminToolMessages.*;
 
 import java.net.InetAddress;
+import java.util.ArrayList;
+import java.util.Collections;
 import java.util.HashSet;
 import java.util.List;
 import java.util.Set;
@@ -79,7 +81,11 @@
    */
   public void readConfiguration(InitialLdapContext ctx)
   {
-    exceptions.clear();
+    List<OpenDsException> ex = new ArrayList<OpenDsException>();
+    Set<ConnectionHandlerDescriptor> ls =
+      new HashSet<ConnectionHandlerDescriptor>();
+    Set<BackendDescriptor> bs = new HashSet<BackendDescriptor>();
+    Set<DN> as = new HashSet<DN>();
 
     try
     {
@@ -88,7 +94,6 @@
           JNDIDirContextAdaptor.adapt(ctx));
       RootCfgClient root = mCtx.getRootConfiguration();
 
-      listeners.clear();
       try
       {
         AdministrationConnectorCfgClient adminConnector =
@@ -97,7 +102,7 @@
       }
       catch (OpenDsException oe)
       {
-        exceptions.add(oe);
+        ex.add(oe);
       }
       String[] connectionHandlers = root.listConnectionHandlers();
       for (int i=0; i<connectionHandlers.length; i++)
@@ -106,17 +111,16 @@
         {
           ConnectionHandlerCfgClient connectionHandler =
             root.getConnectionHandler(connectionHandlers[i]);
-          listeners.add(getConnectionHandler(connectionHandler,
+          ls.add(getConnectionHandler(connectionHandler,
               connectionHandlers[i]));
         }
         catch (OpenDsException oe)
         {
-          exceptions.add(oe);
+          ex.add(oe);
         }
       }
       isSchemaEnabled = root.getGlobalConfiguration().isCheckSchema();
 
-      backends.clear();
       String[] backendNames = root.listBackends();
       for (int i=0; i<backendNames.length; i++)
       {
@@ -152,7 +156,7 @@
             }
             catch (OpenDsException oe)
             {
-              exceptions.add(oe);
+              ex.add(oe);
             }
             indexes.add(
                 new IndexDescriptor("dn2id", null, null,
@@ -180,7 +184,7 @@
             }
             catch (OpenDsException oe)
             {
-              exceptions.add(oe);
+              ex.add(oe);
             }
           }
           else if (backend instanceof LDIFBackendCfgClient)
@@ -221,11 +225,11 @@
           {
             baseDN.setBackend(desc);
           }
-          backends.add(desc);
+          bs.add(desc);
         }
         catch (OpenDsException oe)
         {
-          exceptions.add(oe);
+          ex.add(oe);
         }
       }
 
@@ -237,7 +241,7 @@
       }
       catch (OpenDsException oe)
       {
-        exceptions.add(oe);
+        ex.add(oe);
       }
 
 
@@ -274,7 +278,7 @@
                     protocol,
                     ConnectionHandlerDescriptor.State.ENABLED,
                     "Multimaster Synchronization");
-              listeners.add(connHandler);
+              ls.add(connHandler);
             }
           }
           String[] domains = sync.listReplicationDomains();
@@ -285,7 +289,7 @@
               ReplicationDomainCfgClient domain =
                 sync.getReplicationDomain(domains[i]);
               DN dn = domain.getBaseDN();
-              for (BackendDescriptor backend : backends)
+              for (BackendDescriptor backend : bs)
               {
                 for (BaseDNDescriptor baseDN : backend.getBaseDns())
                 {
@@ -301,7 +305,7 @@
         }
         catch (OpenDsException oe)
         {
-          exceptions.add(oe);
+          ex.add(oe);
         }
       }
 
@@ -310,22 +314,21 @@
       {
         RootDNCfgClient rootDN = root.getRootDN();
         String[] rootUsers = rootDN.listRootDNUsers();
-        administrativeUsers.clear();
         if (rootUsers != null)
         {
           for (int i=0; i < rootUsers.length; i++)
           {
             RootDNUserCfgClient rootUser = rootDN.getRootDNUser(rootUsers[i]);
-            administrativeUsers.addAll(rootUser.getAlternateBindDN());
+            as.addAll(rootUser.getAlternateBindDN());
           }
         }
       }
       catch (OpenDsException oe)
       {
-        exceptions.add(oe);
+        ex.add(oe);
       }
 
-      updateMonitorInformation(ctx);
+      updateMonitorInformation(ctx, bs, ex);
 
       try
       {
@@ -333,18 +336,28 @@
       }
       catch (OpenDsException oe)
       {
-        exceptions.add(oe);
+        ex.add(oe);
       }
     }
     catch (final Throwable t)
     {
-      OnlineUpdateException ex = new OnlineUpdateException(
+      OnlineUpdateException oupe = new OnlineUpdateException(
           ERR_READING_CONFIG_LDAP.get(t.toString()), t);
-      exceptions.add(ex);
+      ex.add(oupe);
     }
+    for (OpenDsException oe : ex)
+    {
+      LOG.log(Level.WARNING, "Error reading configuration: "+oe, oe);
+    }
+    exceptions = Collections.unmodifiableList(ex);
+    administrativeUsers = Collections.unmodifiableSet(as);
+    listeners = Collections.unmodifiableSet(ls);
+    backends = Collections.unmodifiableSet(bs);
   }
 
-  private void updateMonitorInformation(InitialLdapContext ctx)
+  private void updateMonitorInformation(InitialLdapContext ctx,
+      Set<BackendDescriptor> bs,
+      List<OpenDsException> ex)
   {
     // Read monitoring information: since it is computed, it is faster
     // to get everything in just one request.
@@ -391,7 +404,7 @@
 
         if ((dn != null)  && (replicaId != null))
         {
-          for (BackendDescriptor backend : backends)
+          for (BackendDescriptor backend : bs)
           {
             for (BaseDNDescriptor baseDN : backend.getBaseDns())
             {
@@ -430,7 +443,7 @@
           if ((backendID != null) && ((entryCount != null) ||
               (baseDnEntries != null)))
           {
-            for (BackendDescriptor backend : backends)
+            for (BackendDescriptor backend : bs)
             {
               if (backend.getBackendID().equalsIgnoreCase(backendID))
               {
@@ -475,15 +488,9 @@
     }
     catch (NamingException ne)
     {
-      OnlineUpdateException ex = new OnlineUpdateException(
+      OnlineUpdateException oue = new OnlineUpdateException(
           ERR_READING_CONFIG_LDAP.get(ne.getMessage().toString()), ne);
-      exceptions.add(ex);
-    }
-
-
-    for (OpenDsException oe : exceptions)
-    {
-      LOG.log(Level.WARNING, "Error reading configuration: "+oe, oe);
+      ex.add(oue);
     }
   }
 

--
Gitblit v1.10.0