From a7b94fda4da94ae07e6d21a34ce883dbb46bf687 Mon Sep 17 00:00:00 2001
From: jvergara <jvergara@localhost>
Date: Fri, 16 Oct 2009 12:47:40 +0000
Subject: [PATCH] Fix for issue 4292 (control panel browse entries should not use the ManageDSAIT control systematically)
---
opendj-sdk/opends/src/guitools/org/opends/guitools/controlpanel/ui/BrowseEntriesPanel.java | 51 ++++++++++++++++++++++++-
opendj-sdk/opends/src/guitools/org/opends/guitools/controlpanel/browser/BrowserController.java | 37 ++++++++++++++----
opendj-sdk/opends/src/messages/messages/admin_tool.properties | 2 +
3 files changed, 79 insertions(+), 11 deletions(-)
diff --git a/opendj-sdk/opends/src/guitools/org/opends/guitools/controlpanel/browser/BrowserController.java b/opendj-sdk/opends/src/guitools/org/opends/guitools/controlpanel/browser/BrowserController.java
index ff0eb1e..a80ee90 100644
--- a/opendj-sdk/opends/src/guitools/org/opends/guitools/controlpanel/browser/BrowserController.java
+++ b/opendj-sdk/opends/src/guitools/org/opends/guitools/controlpanel/browser/BrowserController.java
@@ -159,7 +159,7 @@
tree.setCellRenderer(new BrowserCellRenderer());
displayFlags = DISPLAY_ACI_COUNT;
displayAttribute = RDN_ATTRIBUTE;
- followReferrals = true;
+ followReferrals = false;
sorted = false;
showContainerOnly = true;
containerClasses = new String[0];
@@ -457,10 +457,18 @@
* Enable/display the following of referrals.
* This routine starts a refresh on each referral node.
* @param followReferrals whether to follow referrals or not.
+ * @throws NamingException if there is an error updating the request controls
+ * of the internal connections.
*/
- public void setFollowReferrals(boolean followReferrals) {
+ public void setFollowReferrals(boolean followReferrals) throws NamingException
+ {
this.followReferrals = followReferrals;
- startRefreshReferralNodes(rootNode);
+ stopRefresh();
+ removeAllChildNodes(rootNode, true /* Keep suffixes */);
+ ctxConfiguration.setRequestControls(getConfigurationRequestControls());
+ ctxUserData.setRequestControls(getRequestControls());
+ connectionPool.setRequestControls(getRequestControls());
+ startRefresh(null);
}
@@ -1324,16 +1332,24 @@
*/
Control[] getRequestControls()
{
- Control ctls[] = new Control[sorted ? 2 : 1];
- ctls[0] = new ManageReferralControl(true);
- if (sorted) {
+ Control ctls[];
+ if (followReferrals)
+ {
+ ctls = new Control[sorted ? 2 : 1];
+ }
+ else
+ {
+ ctls = new Control[sorted ? 1 : 0];
+ }
+ if (sorted)
+ {
SortKey[] keys = new SortKey[SORT_ATTRIBUTES.length];
for (int i=0; i<keys.length; i++) {
keys[i] = new SortKey(SORT_ATTRIBUTES[i]);
}
try
{
- ctls[1] = new SortControl(keys, true);
+ ctls[0] = new SortControl(keys, false);
}
catch (IOException ioe)
{
@@ -1342,6 +1358,10 @@
ioe);
}
}
+ if (followReferrals)
+ {
+ ctls[ctls.length - 1] = new ManageReferralControl(false);
+ }
return ctls;
}
@@ -1351,8 +1371,7 @@
*/
Control[] getConfigurationRequestControls()
{
- Control ctls[] = new Control[0];
- return ctls;
+ return getRequestControls();
}
diff --git a/opendj-sdk/opends/src/guitools/org/opends/guitools/controlpanel/ui/BrowseEntriesPanel.java b/opendj-sdk/opends/src/guitools/org/opends/guitools/controlpanel/ui/BrowseEntriesPanel.java
index 5c0cb4f..737fa52 100644
--- a/opendj-sdk/opends/src/guitools/org/opends/guitools/controlpanel/ui/BrowseEntriesPanel.java
+++ b/opendj-sdk/opends/src/guitools/org/opends/guitools/controlpanel/ui/BrowseEntriesPanel.java
@@ -53,8 +53,10 @@
import java.util.LinkedHashSet;
import javax.naming.InterruptedNamingException;
+import javax.naming.NamingException;
import javax.naming.ldap.InitialLdapContext;
import javax.swing.ButtonGroup;
+import javax.swing.JCheckBoxMenuItem;
import javax.swing.JComponent;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
@@ -1123,7 +1125,7 @@
menu.add(menus[i]);
group.add(menus[i]);
}
- ActionListener listener = new ActionListener()
+ ActionListener radioListener = new ActionListener()
{
private boolean ignoreEvents;
private JRadioButtonMenuItem lastSelected = menus[0];
@@ -1166,9 +1168,54 @@
};
for (int i=0; i<labels.length; i++)
{
- menus[i].addActionListener(listener);
+ menus[i].addActionListener(radioListener);
}
menus[0].setSelected(true);
+
+ // Add the view menus
+ menu.add(new JSeparator());
+ final JCheckBoxMenuItem sortUserData =
+ new JCheckBoxMenuItem(INFO_CTRL_PANEL_SORT_USER_DATA.get().toString());
+ final JCheckBoxMenuItem followReferrals = new JCheckBoxMenuItem(
+ INFO_CTRL_PANEL_FOLLOW_REFERRALS.get().toString());
+ menu.add(sortUserData);
+ menu.add(followReferrals);
+ sortUserData.setSelected(entryPane.getController().isSorted());
+ followReferrals.setSelected(
+ entryPane.getController().getFollowReferrals());
+ sortUserData.addActionListener(new ActionListener()
+ {
+ public void actionPerformed(ActionEvent ev)
+ {
+ try
+ {
+ entryPane.getController().setSorted(sortUserData.isSelected());
+ }
+ catch (NamingException ne)
+ {
+ // Bug
+ System.err.println("Unexpected error updating sorting.");
+ ne.printStackTrace();
+ }
+ }
+ });
+ followReferrals.addActionListener(new ActionListener()
+ {
+ public void actionPerformed(ActionEvent ev)
+ {
+ try
+ {
+ entryPane.getController().setFollowReferrals(
+ followReferrals.isSelected());
+ }
+ catch (NamingException ne)
+ {
+ // Bug
+ System.err.println("Unexpected error updating referral state.");
+ ne.printStackTrace();
+ }
+ }
+ });
return menu;
}
diff --git a/opendj-sdk/opends/src/messages/messages/admin_tool.properties b/opendj-sdk/opends/src/messages/messages/admin_tool.properties
index 7450561..a8c3efa 100644
--- a/opendj-sdk/opends/src/messages/messages/admin_tool.properties
+++ b/opendj-sdk/opends/src/messages/messages/admin_tool.properties
@@ -1527,6 +1527,8 @@
INFO_CTRL_PANEL_SIMPLIFIED_VIEW_MENU=Simplified View
INFO_CTRL_PANEL_ATTRIBUTE_VIEW_MENU=Attribute View
INFO_CTRL_PANEL_LDIF_VIEW_MENU=LDIF View
+INFO_CTRL_PANEL_SORT_USER_DATA=Sort User Data
+INFO_CTRL_PANEL_FOLLOW_REFERRALS=Follow Referrals
INFO_CTRL_PANEL_DELETE_ENTRY_MENU=Delete Entry...
INFO_CTRL_PANEL_DELETE_ENTRY_BUTTON=Delete Entry...
INFO_CTRL_PANEL_DELETE_BASE_DN_MENU=Delete Base DN...
--
Gitblit v1.10.0