From 1ec3da3227492234079d23aaa72c5c9995201a5f Mon Sep 17 00:00:00 2001
From: jvergara <jvergara@localhost>
Date: Wed, 18 Feb 2009 17:35:36 +0000
Subject: [PATCH] Fix for issue 3800 (Monitoring General Information : Resize the Show Operations... window)

---
 opends/src/guitools/org/opends/guitools/controlpanel/ui/MonitoringAttributesViewPanel.java |  516 ++++++++++++++++++++++++++++++++------------------------
 1 files changed, 293 insertions(+), 223 deletions(-)

diff --git a/opends/src/guitools/org/opends/guitools/controlpanel/ui/MonitoringAttributesViewPanel.java b/opends/src/guitools/org/opends/guitools/controlpanel/ui/MonitoringAttributesViewPanel.java
index 6b52caa..c92272b 100644
--- a/opends/src/guitools/org/opends/guitools/controlpanel/ui/MonitoringAttributesViewPanel.java
+++ b/opends/src/guitools/org/opends/guitools/controlpanel/ui/MonitoringAttributesViewPanel.java
@@ -29,265 +29,335 @@
 import static org.opends.messages.AdminToolMessages.*;
 
 import java.awt.Component;
+import java.awt.Dimension;
 import java.awt.GridBagConstraints;
+import java.awt.GridBagLayout;
+import java.awt.Insets;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
 import java.util.ArrayList;
 import java.util.Collection;
-import java.util.Iterator;
 import java.util.LinkedHashSet;
 
 import javax.swing.Box;
+import javax.swing.JButton;
 import javax.swing.JCheckBox;
+import javax.swing.JPanel;
+import javax.swing.JScrollPane;
 
 import org.opends.guitools.controlpanel.datamodel.MonitoringAttributes;
 import org.opends.guitools.controlpanel.event.ConfigurationChangeEvent;
+import org.opends.guitools.controlpanel.event.ScrollPaneBorderListener;
 import org.opends.guitools.controlpanel.util.Utilities;
 import org.opends.messages.Message;
 
 /**
- *
- * The panel that allows the user to select which attributes must be displayed
- * in the traffic monitoring tables.
- *
- * @param <T> the type of the objects that this panel manages.  For now it only
- * manages String and MonitoringAttribute objects.
- */
+*
+* The panel that allows the user to select which attributes must be displayed
+* in the traffic monitoring tables.
+*
+* @param <T> the type of the objects that this panel manages.  For now it only
+* manages String and MonitoringAttribute objects.
+*/
 public class MonitoringAttributesViewPanel<T> extends StatusGenericPanel
 {
-  private static final long serialVersionUID = 6462932163745559L;
+ private static final long serialVersionUID = 6462932163745559L;
 
-  private LinkedHashSet<T> selectedAttributes = new LinkedHashSet<T>();
+ private LinkedHashSet<T> selectedAttributes = new LinkedHashSet<T>();
 
-  private LinkedHashSet<T> monitoringAttributes;
+ private LinkedHashSet<T> monitoringAttributes;
 
-  private boolean isCancelled = true;
+ private boolean isCancelled = true;
 
-  // Note: the order of the checkboxes and the elements in the Attributes
-  // enumeration will be the same.
-  private JCheckBox[] checkboxes = {};
+ // Note: the order of the checkboxes and the elements in the Attributes
+ // enumeration will be the same.
+ private JCheckBox[] checkboxes = {};
 
-  /**
-   * Creates an instance of this panel that uses String as attributes.
-   * @param attributes the list of possible attributes.
-   * @return an instance of this panel that uses String as attributes.
-   */
-  public static MonitoringAttributesViewPanel<String>
-  createStringInstance(LinkedHashSet<String> attributes)
-  {
-    return new MonitoringAttributesViewPanel<String>(attributes);
-  }
+ private JButton selectAll;
+ private JButton selectNone;
 
-  /**
-   * Creates an instance of this panel that uses MonitoringAttributes as
-   * attributes.
-   * @param attributes the list of possible attributes.
-   * @return an instance of this panel that uses String as attributes.
-   */
-  public static MonitoringAttributesViewPanel<MonitoringAttributes>
-  createMonitoringAttributesInstance(
-      LinkedHashSet<MonitoringAttributes> attributes)
-  {
-    return new MonitoringAttributesViewPanel<MonitoringAttributes>(attributes);
-  }
+ /**
+  * Creates an instance of this panel that uses String as attributes.
+  * @param attributes the list of possible attributes.
+  * @return an instance of this panel that uses String as attributes.
+  */
+ public static MonitoringAttributesViewPanel<String>
+ createStringInstance(LinkedHashSet<String> attributes)
+ {
+   return new MonitoringAttributesViewPanel<String>(attributes);
+ }
 
-  /**
-   * Default constructor.
-   * @param attributes the attributes that will be proposed to the user.
-   *
-   */
-  protected MonitoringAttributesViewPanel(
-      LinkedHashSet<T> attributes)
-  {
-    super();
-    monitoringAttributes = new LinkedHashSet<T>();
-    monitoringAttributes.addAll(attributes);
-    createLayout();
-  }
+ /**
+  * Creates an instance of this panel that uses MonitoringAttributes as
+  * attributes.
+  * @param attributes the list of possible attributes.
+  * @return an instance of this panel that uses String as attributes.
+  */
+ public static MonitoringAttributesViewPanel<MonitoringAttributes>
+ createMonitoringAttributesInstance(
+     LinkedHashSet<MonitoringAttributes> attributes)
+ {
+   return new MonitoringAttributesViewPanel<MonitoringAttributes>(attributes);
+ }
 
-  /**
-   * Sets the attributes that must be selected in this dialog.
-   * @param selectedAttributes the selected attributes.
-   */
-  public void setSelectedAttributes(
-      Collection<T> selectedAttributes)
-  {
-    int i = 0;
-    for (T attribute : monitoringAttributes)
-    {
-      checkboxes[i].setSelected(selectedAttributes.contains(attribute));
-      i++;
-    }
-  }
+ /**
+  * {@inheritDoc}
+  */
+ @Override
+ public boolean requiresScroll()
+ {
+   return false;
+ }
 
-  /**
-   * Creates the layout of the panel (but the contents are not populated here).
-   */
-  private void createLayout()
-  {
-    GridBagConstraints gbc = new GridBagConstraints();
-    gbc.fill = GridBagConstraints.HORIZONTAL;
-    gbc.gridy = 0;
-    int nCols = monitoringAttributes.size() > 30 ? 3 : 2;
+ /**
+  * Default constructor.
+  * @param attributes the attributes that will be proposed to the user.
+  *
+  */
+ protected MonitoringAttributesViewPanel(
+     LinkedHashSet<T> attributes)
+ {
+   super();
+   monitoringAttributes = new LinkedHashSet<T>();
+   monitoringAttributes.addAll(attributes);
+   createLayout();
+ }
 
-    gbc.gridwidth = nCols;
-    gbc.gridx = 0;
-    add(Utilities.createPrimaryLabel(
-        INFO_CTRL_PANEL_OPERATION_VIEW_LABEL.get()), gbc);
-    gbc.gridy ++;
-    gbc.gridwidth = 1;
-    gbc.insets.top = 10;
+ /**
+  * Sets the attributes that must be selected in this dialog.
+  * @param selectedAttributes the selected attributes.
+  */
+ public void setSelectedAttributes(
+     Collection<T> selectedAttributes)
+ {
+   int i = 0;
+   for (T attribute : monitoringAttributes)
+   {
+     checkboxes[i].setSelected(selectedAttributes.contains(attribute));
+     i++;
+   }
+ }
 
-    checkboxes = new JCheckBox[monitoringAttributes.size()];
+ /**
+  * Creates the layout of the panel (but the contents are not populated here).
+  */
+ private void createLayout()
+ {
+   GridBagConstraints gbc = new GridBagConstraints();
+   gbc.fill = GridBagConstraints.HORIZONTAL;
+   gbc.gridy = 0;
 
-    int i = 0;
-    Iterator<T> ops = monitoringAttributes.iterator();
-    while (ops.hasNext())
-    {
-      T operation = ops.next();
-      Message m = getMessage(operation);
+   gbc.gridwidth = 2;
+   gbc.gridx = 0;
+   add(Utilities.createPrimaryLabel(
+       INFO_CTRL_PANEL_OPERATION_VIEW_LABEL.get()), gbc);
+   gbc.gridy ++;
+   gbc.gridwidth = 1;
+   gbc.insets.top = 10;
 
-      JCheckBox cb = Utilities.createCheckBox(m);
-      gbc.gridx = 0;
-      gbc.weightx = 0.0;
-      gbc.insets.left = 0;
-      checkboxes[i] = cb;
-      add(checkboxes[i], gbc);
-      gbc.weightx = 1.0;
-      gbc.insets.left = 40;
-      while (gbc.gridx + 1 < nCols)
-      {
-        gbc.gridx ++;
-        if (i + 1 >= checkboxes.length)
-        {
-          add(Box.createHorizontalGlue(), gbc);
-        }
-        else
-        {
-          operation = ops.next();
-          m = getMessage(operation);
-          cb = Utilities.createCheckBox(m);
-          checkboxes[i+1] = cb;
-          add(checkboxes[i+1], gbc);
-          i ++;
-          checkboxes[i].setSelected(true);
-        }
-      }
-      gbc.gridy ++;
-      i++;
-    }
-    gbc.gridx = 0;
-    gbc.gridwidth = nCols;
-    gbc.weighty = 1.0;
-    gbc.fill = GridBagConstraints.VERTICAL;
-    add(Box.createVerticalGlue(), gbc);
-  }
+   JPanel checkBoxPanel = new JPanel(new GridBagLayout());
+   checkBoxPanel.setOpaque(false);
+   JScrollPane scroll = Utilities.createBorderLessScrollBar(checkBoxPanel);
+   ScrollPaneBorderListener scrollListener =
+     ScrollPaneBorderListener.createFullBorderListener(scroll);
 
-  /**
-   * {@inheritDoc}
-   */
-  public Message getTitle()
-  {
-    return INFO_CTRL_PANEL_ATTRIBUTE_VIEW_OPTIONS_TITLE.get();
-  }
+   checkboxes = new JCheckBox[monitoringAttributes.size()];
 
-  /**
-   * {@inheritDoc}
-   */
-  public void configurationChanged(ConfigurationChangeEvent ev)
-  {
-  }
+   int i = 0;
+   for (T attribute : monitoringAttributes)
+   {
+     Message m = getMessage(attribute);
+     checkboxes[i] = Utilities.createCheckBox(m);
+     i++;
+   }
+   selectAll = Utilities.createButton(INFO_CTRL_PANEL_SELECT_ALL_BUTTON.get());
+   selectAll.addActionListener(new ActionListener()
+   {
+     public void actionPerformed(ActionEvent ev)
+     {
+       for (JCheckBox cb : checkboxes)
+       {
+         cb.setSelected(true);
+       }
+     }
+   });
 
-  /**
-   * {@inheritDoc}
-   */
-  public Component getPreferredFocusComponent()
-  {
-    return checkboxes[0];
-  }
+   selectNone = Utilities.createButton(
+       INFO_CTRL_PANEL_CLEAR_SELECTION_BUTTON.get());
+   selectNone.addActionListener(new ActionListener()
+   {
+     public void actionPerformed(ActionEvent ev)
+     {
+       for (JCheckBox cb : checkboxes)
+       {
+         cb.setSelected(false);
+       }
+     }
+   });
 
-  /**
-   * {@inheritDoc}
-   */
-  public void toBeDisplayed(boolean visible)
-  {
-    if (visible)
-    {
-      isCancelled = true;
-    }
-  }
+   gbc.weightx = 1.0;
+   gbc.weighty = 1.0;
+   gbc.gridheight = 3;
+   gbc.fill = GridBagConstraints.BOTH;
+   add(scroll, gbc);
 
-  /**
-   * {@inheritDoc}
-   */
-  public void okClicked()
-  {
-    // Check that at least one checkbox is selected.
-    selectedAttributes.clear();
-    int i = 0;
-    for (T operation : monitoringAttributes)
-    {
-      if (checkboxes[i].isSelected())
-      {
-        selectedAttributes.add(operation);
-      }
-      i++;
-    }
-    if (selectedAttributes.isEmpty())
-    {
-      ArrayList<Message> errors = new ArrayList<Message>();
-      errors.add(INFO_CTRL_PANEL_NO_OPERATION_SELECTED.get());
-      super.displayErrorDialog(errors);
-    }
-    else
-    {
-      isCancelled = false;
-      super.closeClicked();
-    }
-  }
+   gbc.gridx = 1;
+   gbc.weightx = 0.0;
+   gbc.weighty = 0.0;
+   gbc.insets.left = 10;
+   gbc.gridheight = 1;
+   add(selectAll, gbc);
+   gbc.gridy ++;
+   gbc.insets.top = 10;
+   add(selectNone, gbc);
+   gbc.gridy ++;
+   gbc.weighty = 1.0;
+   add(Box.createVerticalGlue(), gbc);
 
-  /**
-   * {@inheritDoc}
-   */
-  public GenericDialog.ButtonType getButtonType()
-  {
-    return GenericDialog.ButtonType.OK_CANCEL;
-  }
+   gbc = new GridBagConstraints();
+   gbc.gridy = 0;
+   gbc.gridwidth = 1;
+   int preferredViewHeight = -1;
+   for (JCheckBox cb : checkboxes)
+   {
+     gbc.gridx = 0;
+     gbc.weightx = 0.0;
+     gbc.anchor = GridBagConstraints.WEST;
+     gbc.fill = GridBagConstraints.NONE;
+     checkBoxPanel.add(cb, gbc);
+     gbc.gridx = 1;
+     gbc.weightx = 1.0;
+     gbc.fill = GridBagConstraints.HORIZONTAL;
+     checkBoxPanel.add(Box.createHorizontalGlue(), gbc);
+     gbc.insets.top = 10;
+     gbc.gridy ++;
+     if (gbc.gridy == 15)
+     {
+       preferredViewHeight = checkBoxPanel.getPreferredSize().height;
+     }
+   }
+   if (preferredViewHeight < 0)
+   {
+     preferredViewHeight = checkBoxPanel.getPreferredSize().height;
+   }
+   gbc.insets = new Insets(0, 0, 0, 0);
+   gbc.gridx = 0;
+   gbc.gridwidth = 2;
+   gbc.fill = GridBagConstraints.VERTICAL;
+   gbc.weighty = 1.0;
+   checkBoxPanel.add(Box.createVerticalGlue(), gbc);
+   scroll.getViewport().setPreferredSize(
+       new Dimension(checkBoxPanel.getPreferredSize().width + 15,
+           preferredViewHeight));
+ }
 
-  /**
-   * Returns <CODE>true</CODE> if the user closed the dialog by cancelling it
-   * and <CODE>false</CODE> otherwise.
-   * @return <CODE>true</CODE> if the user closed the dialog by cancelling it
-   * and <CODE>false</CODE> otherwise.
-   */
-  public boolean isCancelled()
-  {
-    return isCancelled;
-  }
+ /**
+  * {@inheritDoc}
+  */
+ public Message getTitle()
+ {
+   return INFO_CTRL_PANEL_ATTRIBUTE_VIEW_OPTIONS_TITLE.get();
+ }
 
-  /**
-   * Returns the list of attributes that the user selected.
-   * @return the list of attributes that the user selected.
-   */
-  public LinkedHashSet<T> getAttributes()
-  {
-    return selectedAttributes;
-  }
+ /**
+  * {@inheritDoc}
+  */
+ public void configurationChanged(ConfigurationChangeEvent ev)
+ {
+ }
 
-  /**
-   * Returns the message for the provided operation.
-   * @param operation the operation.
-   * @return the message for the provided operation.
-   */
-  protected Message getMessage(T operation)
-  {
-    Message m;
-    if (operation instanceof MonitoringAttributes)
-    {
-      m = ((MonitoringAttributes)operation).getMessage();
-    }
-    else
-    {
-      m = Message.raw(operation.toString());
-    }
-    return m;
-  }
+ /**
+  * {@inheritDoc}
+  */
+ public Component getPreferredFocusComponent()
+ {
+   return checkboxes[0];
+ }
+
+ /**
+  * {@inheritDoc}
+  */
+ public void toBeDisplayed(boolean visible)
+ {
+   if (visible)
+   {
+     isCancelled = true;
+   }
+ }
+
+ /**
+  * {@inheritDoc}
+  */
+ public void okClicked()
+ {
+   // Check that at least one checkbox is selected.
+   selectedAttributes.clear();
+   int i = 0;
+   for (T operation : monitoringAttributes)
+   {
+     if (checkboxes[i].isSelected())
+     {
+       selectedAttributes.add(operation);
+     }
+     i++;
+   }
+   if (selectedAttributes.isEmpty())
+   {
+     ArrayList<Message> errors = new ArrayList<Message>();
+     errors.add(INFO_CTRL_PANEL_NO_OPERATION_SELECTED.get());
+     super.displayErrorDialog(errors);
+   }
+   else
+   {
+     isCancelled = false;
+     super.closeClicked();
+   }
+ }
+
+ /**
+  * {@inheritDoc}
+  */
+ public GenericDialog.ButtonType getButtonType()
+ {
+   return GenericDialog.ButtonType.OK_CANCEL;
+ }
+
+ /**
+  * Returns <CODE>true</CODE> if the user closed the dialog by cancelling it
+  * and <CODE>false</CODE> otherwise.
+  * @return <CODE>true</CODE> if the user closed the dialog by cancelling it
+  * and <CODE>false</CODE> otherwise.
+  */
+ public boolean isCancelled()
+ {
+   return isCancelled;
+ }
+
+ /**
+  * Returns the list of attributes that the user selected.
+  * @return the list of attributes that the user selected.
+  */
+ public LinkedHashSet<T> getAttributes()
+ {
+   return selectedAttributes;
+ }
+
+ /**
+  * Returns the message for the provided operation.
+  * @param operation the operation.
+  * @return the message for the provided operation.
+  */
+ protected Message getMessage(T operation)
+ {
+   Message m;
+   if (operation instanceof MonitoringAttributes)
+   {
+     m = ((MonitoringAttributes)operation).getMessage();
+   }
+   else
+   {
+     m = Message.raw(operation.toString());
+   }
+   return m;
+ }
 }

--
Gitblit v1.10.0