From 01215c7c49f7e8fd70ac42c489c214aa09c68309 Mon Sep 17 00:00:00 2001
From: jvergara <jvergara@localhost>
Date: Thu, 19 Feb 2009 16:18:48 +0000
Subject: [PATCH] Fix for issue 3813 (Minor enhancements for the Control Panel authentication)

---
 opendj-sdk/opends/src/guitools/org/opends/guitools/controlpanel/ui/StatusGenericPanel.java    |   10 +
 opendj-sdk/opends/src/guitools/org/opends/guitools/controlpanel/ui/StatusPanel.java           |  117 ++++++++++++++--------
 opendj-sdk/opends/src/guitools/org/opends/guitools/controlpanel/ui/ControlCenterMainPane.java |  142 ++++++++++++++++++++++-----
 3 files changed, 196 insertions(+), 73 deletions(-)

diff --git a/opendj-sdk/opends/src/guitools/org/opends/guitools/controlpanel/ui/ControlCenterMainPane.java b/opendj-sdk/opends/src/guitools/org/opends/guitools/controlpanel/ui/ControlCenterMainPane.java
index 53d1da6..e70d462 100644
--- a/opendj-sdk/opends/src/guitools/org/opends/guitools/controlpanel/ui/ControlCenterMainPane.java
+++ b/opendj-sdk/opends/src/guitools/org/opends/guitools/controlpanel/ui/ControlCenterMainPane.java
@@ -22,23 +22,33 @@
  * CDDL HEADER END
  *
  *
- *      Copyright 2008 Sun Microsystems, Inc.
+ *      Copyright 2008-2009 Sun Microsystems, Inc.
  */
 
 package org.opends.guitools.controlpanel.ui;
 
-import java.awt.Dimension;
+import static org.opends.messages.AdminToolMessages.*;
 
+import java.awt.Dimension;
+import java.awt.GridBagConstraints;
+import java.awt.GridBagLayout;
+import java.awt.Insets;
+
+import javax.swing.BorderFactory;
+import javax.swing.Box;
+import javax.swing.JLabel;
+import javax.swing.JPanel;
 import javax.swing.JScrollPane;
 import javax.swing.JSplitPane;
 import javax.swing.SwingUtilities;
-import javax.swing.border.EmptyBorder;
 
+import org.opends.admin.ads.util.ConnectionUtils;
 import org.opends.guitools.controlpanel.datamodel.ControlPanelInfo;
 import org.opends.guitools.controlpanel.datamodel.ServerDescriptor;
 import org.opends.guitools.controlpanel.event.ConfigChangeListener;
 import org.opends.guitools.controlpanel.event.ConfigurationChangeEvent;
 import org.opends.guitools.controlpanel.util.Utilities;
+import org.opends.messages.Message;
 
 /**
  * The main panel of the control panel.  It contains a split pane.  On the left
@@ -46,77 +56,122 @@
  * server.
  *
  */
-public class ControlCenterMainPane extends JSplitPane
+public class ControlCenterMainPane extends JPanel
 {
   private static final long serialVersionUID = -8939025523701408656L;
   private StatusPanel statusPane;
+  private JLabel lAuthenticatedAs =
+    Utilities.createInlineHelpLabel(Message.EMPTY);
+
   /**
    * Constructor.
    * @param info the control panel info.
    */
   public ControlCenterMainPane(ControlPanelInfo info)
   {
-    super(JSplitPane.HORIZONTAL_SPLIT);
+    super(new GridBagLayout());
     setOpaque(true); //content panes must be opaque
-
-    //setBorder(BorderFactory.createMatteBorder(0, 0, 0, 1,
-    //    AccordionElementBorder.bottomColor));
+    JSplitPane split = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT);
+    split.setOpaque(true); //content panes must be opaque
 
     statusPane = new StatusPanel();
-    statusPane.setBorder(new EmptyBorder(10, 10, 30, 10));
     statusPane.setInfo(info);
-    //statusPane.setBorder(BorderFactory.createCompoundBorder(
-    //    BorderFactory.createMatteBorder(0, 0, 0, 0,
-    //        AccordionElementBorder.bottomColor),
-    //        new EmptyBorder(10, 10, 30, 10)));
 
     MainActionsPane mainActionsPane = new MainActionsPane();
     mainActionsPane.setInfo(info);
     JScrollPane accordionScroll = Utilities.createScrollPane(mainActionsPane);
     accordionScroll.getViewport().setBackground(
         ColorAndFontConstants.greyBackground);
-    JScrollPane statusScroll = Utilities.createScrollPane(statusPane);
 
 //  Create a split pane with the two scroll panes in it.
-    setLeftComponent(accordionScroll);
+    split.setLeftComponent(accordionScroll);
 
-    setRightComponent(statusScroll);
-    setResizeWeight(0.0);
+    split.setRightComponent(statusPane);
+    split.setResizeWeight(0.0);
 
-    setDividerLocation(accordionScroll.getPreferredSize().width + 2);
+    split.setDividerLocation(accordionScroll.getPreferredSize().width + 2);
 
-    setPreferredSize(
-        new Dimension(getPreferredSize().width + 4, getPreferredSize().height));
+    split.setPreferredSize(
+        new Dimension(split.getPreferredSize().width + 4,
+            split.getPreferredSize().height));
     info.addConfigChangeListener(new ConfigChangeListener()
     {
       private boolean lastStatusStopped;
       /**
        * {@inheritDoc}
        */
-      public void configurationChanged(ConfigurationChangeEvent ev)
+      public void configurationChanged(final ConfigurationChangeEvent ev)
       {
+        final boolean displayLogin;
         if (ev.getNewDescriptor().getStatus() !=
           ServerDescriptor.ServerStatus.STARTED)
         {
           lastStatusStopped = true;
+          displayLogin = false;
         }
         else if (lastStatusStopped && !ev.getNewDescriptor().isAuthenticated())
         {
           lastStatusStopped = false;
-          SwingUtilities.invokeLater(new Runnable()
+          displayLogin = true;
+        }
+        else
+        {
+          displayLogin = false;
+        }
+        SwingUtilities.invokeLater(new Runnable()
+        {
+          /**
+           * {@inheritDoc}
+           */
+          public void run()
           {
-            /**
-             * {@inheritDoc}
-             */
-            public void run()
+            updateAuthenticationLabel(ev.getNewDescriptor());
+            if (displayLogin)
             {
               getLoginDialog().setVisible(true);
               getLoginDialog().toFront();
             }
-          });
-        }
+          }
+        });
       }
     });
+
+    GridBagConstraints gbc = new GridBagConstraints();
+    gbc.gridx = 0;
+    gbc.gridy = 0;
+    gbc.weightx = 1.0;
+    gbc.weighty = 1.0;
+    gbc.fill = GridBagConstraints.BOTH;
+    add(split, gbc);
+
+    JPanel infoPanel = new JPanel(new GridBagLayout());
+    gbc.gridy = 1;
+    gbc.weighty = 0.0;
+    add(infoPanel, gbc);
+
+    infoPanel.setOpaque(false);
+    infoPanel.setBorder(BorderFactory.createMatteBorder(1, 0, 0, 0,
+        ColorAndFontConstants.defaultBorderColor));
+    gbc.weightx = 0.0;
+    gbc.weighty = 0.0;
+    gbc.insets = new Insets(5, 5, 5, 5);
+    infoPanel.add(lAuthenticatedAs, gbc);
+    gbc.gridx = 1;
+    gbc.weightx = 1.0;
+    gbc.insets.left = 0;
+    gbc.insets.right = 0;
+    lAuthenticatedAs.setText("Qjlabel");
+    infoPanel.add(
+        Box.createVerticalStrut(lAuthenticatedAs.getPreferredSize().height),
+        gbc);
+    if (info.getServerDescriptor() != null)
+    {
+      updateAuthenticationLabel(info.getServerDescriptor());
+    }
+    else
+    {
+      lAuthenticatedAs.setText("");
+    }
   }
 
   /**
@@ -127,4 +182,35 @@
   {
     return statusPane.getLoginDialog();
   }
+
+  private void updateAuthenticationLabel(ServerDescriptor server)
+  {
+    if (server.getStatus() ==
+      ServerDescriptor.ServerStatus.STARTED)
+    {
+      if (server.isAuthenticated())
+      {
+        try
+        {
+         String bindDN = ConnectionUtils.getBindDN(
+             statusPane.getInfo().getDirContext());
+         lAuthenticatedAs.setText(
+             INFO_CTRL_PANEL_AUTHENTICATED_AS.get(bindDN).toString());
+        }
+        catch (Throwable t)
+        {
+        }
+      }
+      else
+      {
+        lAuthenticatedAs.setText(
+            INFO_CTRL_PANEL_NOT_AUTHENTICATED.get().toString());
+      }
+    }
+    else
+    {
+      lAuthenticatedAs.setText(
+         INFO_CTRL_PANEL_NOT_AUTHENTICATED_SERVER_NOT_RUNNING.get().toString());
+    }
+  }
 }
diff --git a/opendj-sdk/opends/src/guitools/org/opends/guitools/controlpanel/ui/StatusGenericPanel.java b/opendj-sdk/opends/src/guitools/org/opends/guitools/controlpanel/ui/StatusGenericPanel.java
index e46029d..5fe7cb3 100644
--- a/opendj-sdk/opends/src/guitools/org/opends/guitools/controlpanel/ui/StatusGenericPanel.java
+++ b/opendj-sdk/opends/src/guitools/org/opends/guitools/controlpanel/ui/StatusGenericPanel.java
@@ -331,6 +331,15 @@
     {
       gbc.insets = new Insets(20, 20, 0, 20);
     }
+    createErrorPane();
+    p.add(errorPane, gbc);
+  }
+
+  /**
+   * Creates the error pane.
+   */
+  protected void createErrorPane()
+  {
     errorPane = Utilities.makeHtmlPane("", ColorAndFontConstants.progressFont);
     errorPane.setOpaque(false);
     errorPane.setEditable(false);
@@ -351,7 +360,6 @@
       }
     });
     errorPane.setEditorKit(htmlEditor);
-    p.add(errorPane, gbc);
   }
 
   /**
diff --git a/opendj-sdk/opends/src/guitools/org/opends/guitools/controlpanel/ui/StatusPanel.java b/opendj-sdk/opends/src/guitools/org/opends/guitools/controlpanel/ui/StatusPanel.java
index 43cfbb8..cc8f23c 100644
--- a/opendj-sdk/opends/src/guitools/org/opends/guitools/controlpanel/ui/StatusPanel.java
+++ b/opendj-sdk/opends/src/guitools/org/opends/guitools/controlpanel/ui/StatusPanel.java
@@ -61,6 +61,7 @@
 import org.opends.guitools.controlpanel.datamodel.ConnectionHandlerTableModel;
 import org.opends.guitools.controlpanel.datamodel.ServerDescriptor;
 import org.opends.guitools.controlpanel.event.ConfigurationChangeEvent;
+import org.opends.guitools.controlpanel.event.ScrollPaneBorderListener;
 import org.opends.guitools.controlpanel.ui.components.LabelWithHelpIcon;
 import org.opends.guitools.controlpanel.ui.renderer.BaseDNCellRenderer;
 import org.opends.guitools.controlpanel.ui.renderer.CustomCellRenderer;
@@ -104,8 +105,6 @@
   private ConnectionHandlerTableModel connectionHandlerTableModel;
   private JTable connectionHandlersTable;
 
-  private JButton authenticate;
-
   /**
    * Default constructor.
    *
@@ -117,50 +116,46 @@
     gbc.gridx = 0;
     gbc.gridy = 0;
     gbc.gridwidth = 1;
-    addErrorPane(gbc);
-    gbc.gridy ++;
-    gbc.fill = GridBagConstraints.HORIZONTAL;
-    gbc.insets = new Insets(0, 0, 0, 0);
+    createErrorPane();
+    gbc.insets = new Insets(20, 20, 10, 20);
+    gbc.fill = GridBagConstraints.BOTH;
     gbc.weightx = 1.0;
-    add(createServerStatusPanel(), gbc);
+    add(errorPane, gbc);
+    JPanel inScrollPanel = new JPanel(new GridBagLayout());
+    inScrollPanel.setOpaque(false);
+    gbc.gridy ++;
+    gbc.weighty = 1.0;
+    JScrollPane scroll = Utilities.createBorderLessScrollBar(inScrollPanel);
+    gbc.insets = new Insets(0, 0, 0, 0);
+    add(scroll, gbc);
+    ScrollPaneBorderListener.createFullBorderListener(scroll);
 
-    gbc.insets.top = 15;
+    gbc.gridy = 0;
+    gbc.gridx = 0;
+    gbc.fill = GridBagConstraints.HORIZONTAL;
+    gbc.weightx = 1.0;
+    gbc.insets = new Insets(15, 10, 0, 10);
+    gbc.weighty = 0.0;
+    inScrollPanel.add(createServerStatusPanel(), gbc);
 
     gbc.gridy ++;
-    add(createServerDetailsPanel(), gbc);
+    inScrollPanel.add(createServerDetailsPanel(), gbc);
 
-    // To compensate titled border.
-    gbc.insets.left = 3;
-    gbc.insets.right = 3;
+//  To compensate titled border.
+    gbc.insets.left += 3;
+    gbc.insets.right += 3;
     gbc.gridy ++;
-    add(createListenersPanel(), gbc);
+    inScrollPanel.add(createListenersPanel(), gbc);
 
     gbc.gridy ++;
-    add(createBackendsPanel(), gbc);
-
-    addBottomGlue(gbc);
+    gbc.insets.bottom = 20;
+    inScrollPanel.add(createBackendsPanel(), gbc);
 
     gbc.gridy ++;
-    gbc.anchor = GridBagConstraints.EAST;
-    authenticate = Utilities.createButton(
-        INFO_AUTHENTICATE_BUTTON_LABEL.get());
-    authenticate.setToolTipText(
-        INFO_AUTHENTICATE_CONTROL_PANEL_BUTTON_TOOLTIP.get().toString());
-    authenticate.setOpaque(false);
-    gbc.fill = GridBagConstraints.NONE;
-    gbc.insets.bottom = 0;
-    authenticate.setOpaque(false);
-    authenticate.addActionListener(new ActionListener()
-    {
-      /**
-       * {@inheritDoc}
-       */
-      public void actionPerformed(ActionEvent ev)
-      {
-        authenticate();
-      }
-    });
-    add(authenticate, gbc);
+    gbc.weighty = 1.0;
+    gbc.insets = new Insets(0, 0, 0, 0);
+    gbc.fill = GridBagConstraints.VERTICAL;
+    inScrollPanel.add(Box.createVerticalGlue(), gbc);
   }
 
   /**
@@ -168,11 +163,7 @@
    */
   public Component getPreferredFocusComponent()
   {
-    if (authenticate.isVisible())
-    {
-      return authenticate;
-    }
-    else if (startButton.isVisible())
+    if (startButton.isVisible())
     {
       return startButton;
     }
@@ -182,6 +173,15 @@
     }
   }
 
+
+  /**
+   * {@inheritDoc}
+   */
+  public boolean requiresBorder()
+  {
+    return false;
+  }
+
   private void recalculateSizes()
   {
     Utilities.updateTableSizes(replicationBaseDNsTable);
@@ -248,7 +248,28 @@
     Collection<OpenDsException> exceptions = desc.getExceptions();
     if (exceptions.size() == 0)
     {
-      errorPane.setVisible(false);
+      boolean errorPaneVisible = false;
+      if (desc.getStatus() == ServerDescriptor.ServerStatus.STARTED)
+      {
+        if (!desc.isAuthenticated())
+        {
+          errorPaneVisible = true;
+          MessageBuilder mb = new MessageBuilder();
+          mb.append(
+              INFO_CTRL_PANEL_AUTH_REQUIRED_TO_BROWSE_MONITORING_SUMMARY.
+              get());
+          mb.append("<br><br>"+getAuthenticateHTML());
+          Message title =
+            INFO_CTRL_PANEL_AUTHENTICATION_REQUIRED_SUMMARY.get();
+          updateErrorPane(errorPane, title,
+              ColorAndFontConstants.errorTitleFont,
+              mb.toMessage(), ColorAndFontConstants.defaultFont);
+        }
+      }
+      if (errorPane.isVisible() != errorPaneVisible)
+      {
+        errorPane.setVisible(errorPaneVisible);
+      }
     }
     else
     {
@@ -267,6 +288,16 @@
         }
         mb.append(error);
       }
+      if (desc.getStatus() == ServerDescriptor.ServerStatus.STARTED)
+      {
+        if (!desc.isAuthenticated())
+        {
+          mb.append(
+     INFO_CTRL_PANEL_AUTH_REQUIRED_TO_BROWSE_MONITORING_SUMMARY.
+     get());
+          mb.append("<br><br>"+getAuthenticateHTML());
+        }
+      }
       updateErrorPane(errorPane, title, ColorAndFontConstants.errorTitleFont,
           mb.toMessage(), ColorAndFontConstants.defaultFont);
 
@@ -422,8 +453,6 @@
     connectionHandlersTable.getTableHeader().setVisible(hasConnectionHandlers);
     connectionHandlerTableEmpty.setVisible(!hasConnectionHandlers);
 
-    authenticate.setVisible(!isAuthenticated && isRunning);
-
     recalculateSizes();
 
     Utilities.updateViewPositions(pos);

--
Gitblit v1.10.0