From 1d5f9c9484a47d91ab2c4cf3796e5b1effca89ec Mon Sep 17 00:00:00 2001
From: jvergara <jvergara@localhost>
Date: Wed, 18 Apr 2007 14:15:39 +0000
Subject: [PATCH] The following changes have two main goals:

---
 opendj-sdk/opends/src/statuspanel/org/opends/statuspanel/ConfigFromFile.java |  113 +++++++++++++++++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 110 insertions(+), 3 deletions(-)

diff --git a/opendj-sdk/opends/src/statuspanel/org/opends/statuspanel/ConfigFromFile.java b/opendj-sdk/opends/src/statuspanel/org/opends/statuspanel/ConfigFromFile.java
index dbffbf1..5b22f9b 100644
--- a/opendj-sdk/opends/src/statuspanel/org/opends/statuspanel/ConfigFromFile.java
+++ b/opendj-sdk/opends/src/statuspanel/org/opends/statuspanel/ConfigFromFile.java
@@ -32,6 +32,7 @@
 import java.util.LinkedHashSet;
 import java.util.List;
 import java.util.Set;
+import java.util.TreeSet;
 
 import org.opends.server.core.DirectoryServer;
 import org.opends.server.util.LDIFException;
@@ -62,6 +63,11 @@
     DirectoryServer.getObjectClass("ds-cfg-backend", true);
   private final ObjectClass administrativeUserOc =
     DirectoryServer.getObjectClass("ds-cfg-root-dn", true);
+  private final ObjectClass syncProviderOc =
+    DirectoryServer.getObjectClass("ds-cfg-synchronization-provider", true);
+  private final ObjectClass syncConfigOc =
+    DirectoryServer.getObjectClass("ds-cfg-synchronization-provider-config",
+    true);
 
   private HashSet<ListenerDescriptor> listeners =
     new HashSet<ListenerDescriptor>();
@@ -69,7 +75,8 @@
     new HashSet<DatabaseDescriptor>();
   private HashSet<String> administrativeUsers = new HashSet<String>();
   private String errorMessage;
-
+  private boolean synchronizationConfigured = false;
+  private HashSet<String> synchronizedSuffixes = new HashSet<String>();
 
   /**
    * Default constructor.
@@ -87,6 +94,11 @@
   public void readConfiguration()
   {
     errorMessage = null;
+    listeners.clear();
+    databases.clear();
+    administrativeUsers.clear();
+    synchronizationConfigured = false;
+    synchronizedSuffixes.clear();
     try
     {
       Installation installation =
@@ -99,6 +111,7 @@
       {
         updateConfig(entry);
       }
+      updateSynchronization();
     }
     catch (IOException ioe)
     {
@@ -246,6 +259,14 @@
    {
      updateConfigWithAdministrativeUser(entry);
    }
+   else if (entry.hasObjectClass(syncProviderOc))
+   {
+     updateConfigWithSyncProviderEntry(entry);
+   }
+   else if (entry.hasObjectClass(syncConfigOc))
+   {
+     updateConfigWithSyncConfig(entry);
+   }
   }
 
   /**
@@ -350,13 +371,26 @@
    */
   private void updateConfigWithBackend(Entry entry)
   {
-    String baseDn = getFirstValue(entry, "ds-cfg-backend-base-dn");
     String id = getFirstValue(entry, "ds-cfg-backend-id");
     int nEntries = -1; // Unknown
 
     if (!isConfigBackend(id))
     {
-      databases.add(new DatabaseDescriptor(id, baseDn, nEntries));
+      Set<String> baseDns = new TreeSet<String>();
+      baseDns.addAll(getValues(entry, "ds-cfg-backend-base-dn"));
+      Set<BaseDNDescriptor> replicas = new LinkedHashSet<BaseDNDescriptor>();
+
+      for (String baseDn : baseDns)
+      {
+        replicas.add(getBaseDNDescriptor(entry, baseDn));
+      }
+
+      DatabaseDescriptor db = new DatabaseDescriptor(id, replicas, nEntries);
+      databases.add(db);
+      for (BaseDNDescriptor rep: replicas)
+      {
+        rep.setDatabase(db);
+      }
     }
   }
 
@@ -371,6 +405,70 @@
   }
 
   /**
+   * Updates the synchronization configuration data we expose to the user with
+   * the provided entry object.
+   * @param entry the entry to analyze.
+   */
+  private void updateConfigWithSyncProviderEntry(Entry entry)
+  {
+    if ("true".equalsIgnoreCase(getFirstValue(entry,
+        "ds-cfg-synchronization-provider-enabled")))
+    {
+      synchronizationConfigured = true;
+    }
+    else
+    {
+      synchronizationConfigured = false;
+    }
+  }
+
+
+  /**
+   * Updates the databases suffixes with the list of synchronized suffixes
+   * found.
+   */
+  private void updateSynchronization()
+  {
+    if (synchronizationConfigured)
+    {
+      for (String suffixDn: synchronizedSuffixes)
+      {
+        BaseDNDescriptor replica = null;
+        for (DatabaseDescriptor db: databases)
+        {
+          Set<BaseDNDescriptor> replicas = db.getBaseDns();
+          for (BaseDNDescriptor rep: replicas)
+          {
+            if (Utils.areDnsEqual(rep.getDn(), suffixDn))
+            {
+              replica = rep;
+              break;
+            }
+          }
+          if (replica != null)
+          {
+            break;
+          }
+        }
+        if (replica != null)
+        {
+          replica.setType(BaseDNDescriptor.Type.SYNCHRONIZED);
+        }
+      }
+    }
+  }
+
+  /**
+   * Updates the synchronization configuration data we expose to the user with
+   * the provided entry object.
+   * @param entry the entry to analyze.
+   */
+  private void updateConfigWithSyncConfig(Entry entry)
+  {
+    synchronizedSuffixes.addAll(getValues(entry, "ds-cfg-synchronization-dn"));
+  }
+
+  /**
    * The following three methods are just commodity methods to get localized
    * messages.
    */
@@ -417,4 +515,13 @@
     }
     return v;
   }
+
+  /**
+   * Create a non synchronized base DN descriptor.
+   */
+  private BaseDNDescriptor getBaseDNDescriptor(Entry entry, String baseDn)
+  {
+    return new BaseDNDescriptor(BaseDNDescriptor.Type.NOT_SYNCHRONIZED,
+        baseDn, null, -1, -1);
+  }
 }

--
Gitblit v1.10.0