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/ui/StatusPanelDialog.java |  223 +++++++++++++++++++++++++++++++++----------------------
 1 files changed, 134 insertions(+), 89 deletions(-)

diff --git a/opendj-sdk/opends/src/statuspanel/org/opends/statuspanel/ui/StatusPanelDialog.java b/opendj-sdk/opends/src/statuspanel/org/opends/statuspanel/ui/StatusPanelDialog.java
index e2238d1..edcf3eb 100644
--- a/opendj-sdk/opends/src/statuspanel/org/opends/statuspanel/ui/StatusPanelDialog.java
+++ b/opendj-sdk/opends/src/statuspanel/org/opends/statuspanel/ui/StatusPanelDialog.java
@@ -42,6 +42,7 @@
 import java.awt.event.WindowEvent;
 import java.io.File;
 import java.util.HashSet;
+import java.util.LinkedHashSet;
 import java.util.Set;
 import java.util.TreeSet;
 
@@ -60,15 +61,17 @@
 import javax.swing.PopupFactory;
 import javax.swing.SwingConstants;
 import javax.swing.ToolTipManager;
+import javax.swing.table.JTableHeader;
 import javax.swing.table.TableCellRenderer;
 import javax.swing.table.TableColumn;
-import javax.swing.table.TableColumnModel;
 
 import org.opends.quicksetup.event.MinimumSizeComponentListener;
 import org.opends.quicksetup.ui.UIFactory;
 import org.opends.quicksetup.util.HtmlProgressMessageFormatter;
 import org.opends.quicksetup.util.Utils;
 
+import org.opends.statuspanel.DatabaseDescriptor;
+import org.opends.statuspanel.BaseDNDescriptor;
 import org.opends.statuspanel.ServerStatusDescriptor;
 import org.opends.statuspanel.event.StatusPanelButtonListener;
 import org.opends.statuspanel.i18n.ResourceProvider;
@@ -162,7 +165,6 @@
     int minWidth = Math.min(packedMinWidth, MAXIMAL_WIDTH);
     int minHeight = Math.min(packedMinHeight, MAXIMAL_HEIGHT);
 
-
     addComponentListener(new MinimumSizeComponentListener(this,
         minWidth, minHeight));
     if ((minWidth != packedMinWidth) || (minHeight != packedMinHeight))
@@ -681,9 +683,9 @@
     p.add(createSubsectionTitle(getMsg("listeners-title")), gbc);
 
     listenersTableModel = new ListenersTableModel();
-    listenersTable = createTable(listenersTableModel,
+    listenersTable = UIFactory.makeSortableTable(listenersTableModel,
         new ListenersCellRenderer(),
-        new HeaderRenderer());
+        UIFactory.makeHeaderRenderer());
 
     gbc.insets.top = UIFactory.TOP_INSET_PRIMARY_FIELD;
     p.add(listenersTable.getTableHeader(), gbc);
@@ -719,8 +721,9 @@
     p.add(createSubsectionTitle(getMsg("databases-title")), gbc);
 
     dbTableModel = new DatabasesTableModel();
-    dbTable = createTable(dbTableModel, new DatabasesCellRenderer(),
-        new HeaderRenderer());
+    dbTable = UIFactory.makeSortableTable(dbTableModel,
+        new DatabasesCellRenderer(),
+        UIFactory.makeHeaderRenderer());
     toolTipManager.registerComponent(dbTable);
 
     gbc.insets.top = UIFactory.TOP_INSET_PRIMARY_FIELD;
@@ -791,47 +794,6 @@
   }
 
   /**
-   * Returns a table created with the provided model and renderers.
-   * @param tableModel the table model.
-   * @param renderer the cell renderer.
-   * @param headerRenderer the header renderer.
-   * @return a table created with the provided model and renderers.
-   */
-  private JTable createTable(final SortableTableModel tableModel,
-      TableCellRenderer renderer,
-      TableCellRenderer headerRenderer)
-  {
-    final JTable table = new JTable(tableModel);
-    table.setShowGrid(true);
-    table.setGridColor(UIFactory.PANEL_BORDER_COLOR);
-    table.setAutoResizeMode(JTable.AUTO_RESIZE_SUBSEQUENT_COLUMNS);
-    table.setBackground(UIFactory.CURRENT_STEP_PANEL_BACKGROUND);
-    table.getTableHeader().setBackground(UIFactory.DEFAULT_BACKGROUND);
-    table.setRowMargin(0);
-
-    for (int i=0; i<tableModel.getColumnCount(); i++)
-    {
-      TableColumn col = table.getColumn(table.getColumnName(i));
-      col.setCellRenderer(renderer);
-      col.setHeaderRenderer(headerRenderer);
-    }
-    MouseAdapter listMouseListener = new MouseAdapter() {
-      public void mouseClicked(MouseEvent e) {
-        TableColumnModel columnModel = table.getColumnModel();
-        int viewColumn = columnModel.getColumnIndexAtX(e.getX());
-        int sortedBy = table.convertColumnIndexToModel(viewColumn);
-        if (e.getClickCount() == 1 && sortedBy != -1) {
-          tableModel.setSortAscending(!tableModel.isSortAscending());
-          tableModel.setSortColumn(sortedBy);
-          tableModel.forceResort();
-        }
-      }
-    };
-    table.getTableHeader().addMouseListener(listMouseListener);
-    return table;
-  }
-
-  /**
    * Updates the status contents displaying with what is specified in the
    * provided ServerStatusDescriptor object.
    * This method must be called from the event thread.
@@ -942,7 +904,9 @@
       }
 
       setTextValue(lAdministrativeUsers,"<html>"+
-          Utils.getStringFromCollection(ordered, "<br>"));
+          UIFactory.applyFontToHtml(
+              Utils.getStringFromCollection(ordered, "<br>"),
+              UIFactory.READ_ONLY_FONT));
     }
     else
     {
@@ -1069,7 +1033,13 @@
    */
   private void updateDatabaseContents(ServerStatusDescriptor desc)
   {
-    dbTableModel.setData(desc.getDatabases());
+    Set<BaseDNDescriptor> replicas = new HashSet<BaseDNDescriptor>();
+    Set<DatabaseDescriptor> dbs = desc.getDatabases();
+    for (DatabaseDescriptor db: dbs)
+    {
+      replicas.addAll(db.getBaseDns());
+    }
+    dbTableModel.setData(replicas);
 
     if (dbTableModel.getRowCount() == 0)
     {
@@ -1097,6 +1067,7 @@
       dbTable.setVisible(true);
       dbTable.getTableHeader().setVisible(true);
       lDbTableEmpty.setVisible(false);
+      updateTableSizes(dbTable);
     }
   }
 
@@ -1136,6 +1107,108 @@
   }
 
   /**
+   * Updates the size of the table rows according to the size of the
+   * rendered component.
+   * @param table the table to handle.
+   */
+  private void updateTableSizes(JTable table)
+  {
+    updateTableColumnWidth(table);
+    updateTableRowHeight(table);
+
+    /*
+    int totalWidth = 0;
+    int colMargin = table.getColumnModel().getColumnMargin();
+
+    int totalHeight = 0;
+
+    TableColumn tcol = table.getColumnModel().getColumn(0);
+    TableCellRenderer renderer = tcol.getHeaderRenderer();
+    Component comp = renderer.getTableCellRendererComponent(table,
+        table.getModel().getColumnName(0), false, false, 0, 0);
+    totalHeight = (int)comp.getPreferredSize().getHeight();
+    for (int row=0; row<table.getRowCount(); row++)
+    {
+      totalHeight += table.getRowHeight(row);
+    }
+
+    for (int col=0; col<table.getColumnCount(); col++)
+    {
+      tcol = table.getColumnModel().getColumn(col);
+      totalWidth += tcol.getPreferredWidth() + colMargin;
+    }
+
+    table.setPreferredScrollableViewportSize(
+        new Dimension(totalWidth, totalHeight));
+        */
+  }
+
+  /**
+   * Updates the height of the table rows according to the size of the
+   * rendered component.
+   * @param table the table to handle.
+   */
+  private void updateTableRowHeight(JTable table)
+  {
+    int headerMaxHeight = 0;
+
+    for (int col=0; col<table.getColumnCount(); col++)
+    {
+      TableColumn tcol = table.getColumnModel().getColumn(col);
+      TableCellRenderer renderer = tcol.getHeaderRenderer();
+      Component comp = renderer.getTableCellRendererComponent(table,
+          table.getModel().getColumnName(col), false, false, 0, col);
+      int colHeight = (int)comp.getPreferredSize().getHeight();
+      headerMaxHeight = Math.max(headerMaxHeight, colHeight);
+    }
+    JTableHeader header = table.getTableHeader();
+    header.setPreferredSize(new Dimension(
+        (int)header.getPreferredSize().getWidth(),
+        headerMaxHeight));
+
+    for (int row=0; row<table.getRowCount(); row++)
+    {
+      int rowMaxHeight = table.getRowHeight();
+      for (int col=0; col<table.getColumnCount(); col++)
+      {
+        TableCellRenderer renderer = table.getCellRenderer(row, col);
+        Component comp = table.prepareRenderer(renderer, row, col);
+        int colHeight = (int)comp.getPreferredSize().getHeight();
+        rowMaxHeight = Math.max(rowMaxHeight, colHeight);
+      }
+      table.setRowHeight(row, rowMaxHeight);
+    }
+  }
+
+  /**
+   * Updates the height of the table columns according to the size of the
+   * rendered component.
+   * @param table the table to handle.
+   */
+  private void updateTableColumnWidth(JTable table)
+  {
+
+    int margin = table.getIntercellSpacing().width;
+    for (int col=0; col<table.getColumnCount(); col++)
+    {
+      int colMaxWidth;
+      TableColumn tcol = table.getColumnModel().getColumn(col);
+      TableCellRenderer renderer = tcol.getHeaderRenderer();
+      Component comp = renderer.getTableCellRendererComponent(table,
+          table.getModel().getColumnName(col), false, false, 0, col);
+      colMaxWidth = (int)comp.getPreferredSize().getWidth();
+      for (int row=0; row<table.getRowCount(); row++)
+      {
+        renderer = table.getCellRenderer(row, col);
+        comp = table.prepareRenderer(renderer, row, col);
+        int colWidth = (int)comp.getPreferredSize().getWidth() + (2 * margin);
+        colMaxWidth = Math.max(colMaxWidth, colWidth);
+      }
+      tcol.setPreferredWidth(colMaxWidth);
+    }
+  }
+
+  /**
    * Method written for testing purposes.
    * @param args the arguments to be passed to the test program.
    */
@@ -1177,6 +1250,18 @@
       {
         setTextValue(this, (String)value);
       }
+      else if (value instanceof Set)
+      {
+        LinkedHashSet<String> baseDns = new LinkedHashSet<String>();
+        for (Object v : (Set)value)
+        {
+          baseDns.add((String)v);
+        }
+        setTextValue(this, "<html>" +
+            UIFactory.applyFontToHtml(Utils.getStringFromCollection(
+                baseDns, "<br>"),
+                UIFactory.SECONDARY_FIELD_VALID_FONT));
+      }
       else
       {
         /* Is the number of entries: check if it is available or not */
@@ -1257,46 +1342,6 @@
       return this;
     }
   }
-
-  /**
-   * Class used to render the table headers.
-   */
-  class HeaderRenderer extends JLabel implements TableCellRenderer
-  {
-    private static final long serialVersionUID = -8604332267021523835L;
-
-    /**
-     * Default constructor.
-     */
-    public HeaderRenderer()
-    {
-      super();
-      UIFactory.setTextStyle(this, UIFactory.TextStyle.PRIMARY_FIELD_VALID);
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public Component getTableCellRendererComponent(JTable table, Object value,
-        boolean isSelected, boolean hasFocus, int row, int column) {
-      setTextValue(this, (String)value);
-      if (column == 0)
-      {
-        setBorder(BorderFactory.createCompoundBorder(
-            BorderFactory.createMatteBorder(1, 1, 1, 1,
-                UIFactory.PANEL_BORDER_COLOR),
-                BorderFactory.createEmptyBorder(4, 4, 4, 4)));
-      }
-      else
-      {
-        setBorder(BorderFactory.createCompoundBorder(
-            BorderFactory.createMatteBorder(1, 0, 1, 1,
-                UIFactory.PANEL_BORDER_COLOR),
-                BorderFactory.createEmptyBorder(4, 4, 4, 4)));
-      }
-      return this;
-    }
-  }
 }
 
 /**

--
Gitblit v1.10.0