From 7faa5e4d10edda3015f96a3a98cc2115aa16f1dd Mon Sep 17 00:00:00 2001
From: jvergara <jvergara@localhost>
Date: Thu, 26 Mar 2009 10:26:00 +0000
Subject: [PATCH] Fix for issue 3555 (Control panel : Manage entries menu does not refresh the view off the DIT)

---
 opends/src/guitools/org/opends/guitools/controlpanel/ui/AbstractBrowseEntriesPanel.java |  124 +++++++++++++++++++++++++++++++++++++---
 1 files changed, 113 insertions(+), 11 deletions(-)

diff --git a/opends/src/guitools/org/opends/guitools/controlpanel/ui/AbstractBrowseEntriesPanel.java b/opends/src/guitools/org/opends/guitools/controlpanel/ui/AbstractBrowseEntriesPanel.java
index baf3b9d..53888ff 100644
--- a/opends/src/guitools/org/opends/guitools/controlpanel/ui/AbstractBrowseEntriesPanel.java
+++ b/opends/src/guitools/org/opends/guitools/controlpanel/ui/AbstractBrowseEntriesPanel.java
@@ -72,6 +72,7 @@
 import javax.swing.event.TreeModelListener;
 import javax.swing.tree.DefaultMutableTreeNode;
 import javax.swing.tree.DefaultTreeModel;
+import javax.swing.tree.TreeNode;
 import javax.swing.tree.TreePath;
 
 import org.opends.admin.ads.util.ApplicationTrustManager;
@@ -84,6 +85,8 @@
 import org.opends.guitools.controlpanel.datamodel.ControlPanelInfo;
 import org.opends.guitools.controlpanel.datamodel.IndexDescriptor;
 import org.opends.guitools.controlpanel.datamodel.ServerDescriptor;
+import org.opends.guitools.controlpanel.event.BackendPopulatedEvent;
+import org.opends.guitools.controlpanel.event.BackendPopulatedListener;
 import org.opends.guitools.controlpanel.event.BrowserEvent;
 import org.opends.guitools.controlpanel.event.BrowserEventListener;
 import org.opends.guitools.controlpanel.event.ConfigurationChangeEvent;
@@ -109,6 +112,7 @@
  *
  */
 public abstract class AbstractBrowseEntriesPanel extends StatusGenericPanel
+implements BackendPopulatedListener
 {
   private JComboBox baseDNs;
   /**
@@ -239,6 +243,7 @@
     }
     super.setInfo(info);
     treePane.setInfo(info);
+    info.addBackendPopulatedListener(this);
   }
 
   /**
@@ -707,28 +712,26 @@
       {
         treePane.getTree().setRootVisible(displayAll);
         treePane.getTree().setShowsRootHandles(!displayAll);
-        boolean isBaseDN = false;
+        boolean added = false;
         for (BackendDescriptor backend :
           getInfo().getServerDescriptor().getBackends())
         {
           for (BaseDNDescriptor baseDN : backend.getBaseDns())
           {
+            boolean isBaseDN = false;
             if ((theDN != null) && baseDN.getDn().equals(theDN))
             {
               isBaseDN = true;
             }
             String dn = Utilities.unescapeUtf8(baseDN.getDn().toString());
-            if (displayAll)
+            if (displayAll || isBaseDN)
             {
               controller.addSuffix(dn, null);
-            }
-            else if (s.equals(dn))
-            {
-              controller.addSuffix(dn, null);
+              added = true;
             }
           }
         }
-        if (!isBaseDN && !displayAll)
+        if (!added && !displayAll)
         {
           BasicNode rootNode =
             (BasicNode)controller.getTree().getModel().getRoot();
@@ -840,6 +843,103 @@
    */
   protected abstract Component createMainPanel();
 
+
+  /**
+   * {@inheritDoc}
+   */
+  public void backendPopulated(BackendPopulatedEvent ev)
+  {
+    if (controller.getConfigurationConnection() != null)
+    {
+      boolean displayAll = false;
+      boolean errorOccurred = false;
+      DN theDN = null;
+      String s = getBaseDN();
+      if (s != null)
+      {
+        displayAll = s.equals(ALL_BASE_DNS);
+        if (!displayAll)
+        {
+          try
+          {
+            theDN = DN.decode(s);
+          }
+          catch (Throwable t)
+          {
+            errorOccurred = true;
+          }
+        }
+      }
+      else
+      {
+        errorOccurred = true;
+      }
+      if (!errorOccurred)
+      {
+        treePane.getTree().setRootVisible(displayAll);
+        treePane.getTree().setShowsRootHandles(!displayAll);
+        BasicNode rootNode =
+          (BasicNode)controller.getTree().getModel().getRoot();
+        boolean isSubordinate = false;
+        for (BackendDescriptor backend : ev.getBackends())
+        {
+          for (BaseDNDescriptor baseDN : backend.getBaseDns())
+          {
+            boolean isBaseDN = false;
+            if ((theDN != null) && baseDN.getDn().equals(theDN))
+            {
+              isBaseDN = true;
+            }
+            else if ((theDN != null) && baseDN.getDn().isAncestorOf(theDN))
+            {
+              isSubordinate = true;
+            }
+            String dn = Utilities.unescapeUtf8(baseDN.getDn().toString());
+            if (displayAll || isBaseDN)
+            {
+              try
+              {
+                if (!controller.hasSuffix(dn))
+                {
+                  controller.addSuffix(dn, null);
+                }
+                else
+                {
+                  int index = controller.findChildNode(rootNode, dn);
+                  if (index >= 0)
+                  {
+                    TreeNode node = rootNode.getChildAt(index);
+                    if (node != null)
+                    {
+                      TreePath path = new TreePath(
+                          controller.getTreeModel().getPathToRoot(node));
+                      controller.startRefresh(
+                          controller.getNodeInfoFromPath(path));
+                    }
+                  }
+                }
+              }
+              catch (IllegalArgumentException iae)
+              {
+                // The suffix node exists but is not a suffix node.
+                // Simply log a message.
+                LOG.log(Level.WARNING, "Suffix: "+dn+
+                    " added as a non suffix node. Exception: "+iae, iae);
+              }
+            }
+          }
+        }
+        if (isSubordinate)
+        {
+          if (controller.findChildNode(rootNode, s) == -1)
+          {
+            controller.addNodeUnderRoot(s);
+          }
+        }
+      }
+    }
+  }
+
   /**
    * {@inheritDoc}
    */
@@ -1322,12 +1422,13 @@
           treePane.getTree().setShowsRootHandles(!displayAll);
           if (s != null)
           {
-            boolean isBaseDN = false;
+            boolean added = false;
             for (BackendDescriptor backend :
               getInfo().getServerDescriptor().getBackends())
             {
               for (BaseDNDescriptor baseDN : backend.getBaseDns())
               {
+                boolean isBaseDN = false;
                 String dn = Utilities.unescapeUtf8(baseDN.getDn().toString());
                 if ((theDN != null) && baseDN.getDn().equals(theDN))
                 {
@@ -1337,11 +1438,12 @@
                 {
                   try
                   {
-                    if (!controller.hasSuffix(dn))
+                    if (displayAll || isBaseDN)
                     {
-                      if (displayAll || isBaseDN)
+                      if (!controller.hasSuffix(dn))
                       {
                         controller.addSuffix(dn, null);
+                        added = true;
                       }
                     }
                   }
@@ -1354,7 +1456,7 @@
                   }
                 }
               }
-              if (!isBaseDN && !displayAll)
+              if (!added && !displayAll)
               {
                 BasicNode rootNode =
                   (BasicNode)controller.getTree().getModel().getRoot();

--
Gitblit v1.10.0