From 8a8a81b8bac1333b0eeae6f07ca58741ab063722 Mon Sep 17 00:00:00 2001
From: Ludovic Poitou <ludovic.poitou@forgerock.com>
Date: Tue, 15 Dec 2015 15:10:56 +0000
Subject: [PATCH] OPENDJ-2539 - Control-Panel: Nothing displayed in Monitoring > General Information > Db Env Now that we have pluggable backends, the name of entries containing the monitoring information for databases has changed, and there are 2 kinds of statistics : for JE and for PDB. BackendDescriptor.java: Adds support for the type of pluggable backend (JE or PDB) DBEnvironmentMonitoringPanel renamed as DatabaseMonitoringPanel, added support for type of pluggable backend. Renamed "operations" into "fields" (these are the statistics attributes we display). DBEnvironmentMonitoringTablePanel renamed as DatabaseMonitoringTableModel, code cleanup. BrowseGeneralMonitoringPanel.java: Replace DB Environment node by 2 Databases Information Nodes : one for JE backends, one for PDB backends GeneralMonitoringRightPanel.java: replaced the DBEnvironmentMonitoringPanel by 2 DatabaseMonitoringPanels (JE and PDB), reworked identifications of all panels (to avoid using className). ConfigFromDirContext.java: added detection of backend type in monitoring entries. MonitoringAttributesViewPanel.java : code cleanup admin_tool.properties: Update messages.

---
 opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/datamodel/BackendDescriptor.java            |   30 +++
 opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/datamodel/DatabaseMonitoringTableModel.java |   33 +--
 opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/util/ConfigFromDirContext.java              |   25 ++
 opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/ui/DatabaseMonitoringPanel.java             |  111 ++++++-------
 opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/ui/GeneralMonitoringRightPanel.java         |  143 ++++++-----------
 opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/ui/BrowseGeneralMonitoringPanel.java        |   45 ++---
 opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/ui/MonitoringAttributesViewPanel.java       |   37 ++--
 opendj-server-legacy/src/messages/org/opends/messages/admin_tool.properties                                     |    7 
 8 files changed, 205 insertions(+), 226 deletions(-)

diff --git a/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/datamodel/BackendDescriptor.java b/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/datamodel/BackendDescriptor.java
index e0a94a8..39b8207 100644
--- a/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/datamodel/BackendDescriptor.java
+++ b/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/datamodel/BackendDescriptor.java
@@ -45,6 +45,7 @@
   private final boolean isEnabled;
   private CustomSearchResult monitoringEntry;
   private final Type type;
+  private PluggableType pluggableType;
   private int hashCode;
 
   /** An enumeration describing the type of backend. */
@@ -66,6 +67,17 @@
     TASK
   }
 
+  /** An enumeration describing the different pluggable backends. */
+  public enum PluggableType
+  {
+    /** JE Backend. */
+    JE,
+    /** PDB Backend. */
+    PDB,
+    /** Unknown Type, should never fall through this. */
+    UNKNOWN
+  }
+
   /**
    * Constructor for this class.
    * @param backendID the backend ID of the Backend.
@@ -294,4 +306,22 @@
   {
     return isEnabled;
   }
+
+  /**
+   * Set the type of pluggable backend.
+   * @param pluggableType the type of pluggable backend.
+   */
+  public void setPluggableType(PluggableType pluggableType)
+  {
+    this.pluggableType = pluggableType;
+  }
+
+  /**
+   * Get the type of pluggable backend.
+   * @return the type of pluggable backend.
+   */
+  public PluggableType getPluggableType()
+  {
+    return pluggableType;
+  }
 }
diff --git a/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/datamodel/DBEnvironmentMonitoringTableModel.java b/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/datamodel/DatabaseMonitoringTableModel.java
similarity index 89%
rename from opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/datamodel/DBEnvironmentMonitoringTableModel.java
rename to opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/datamodel/DatabaseMonitoringTableModel.java
index ea0a438..e53fdff 100644
--- a/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/datamodel/DBEnvironmentMonitoringTableModel.java
+++ b/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/datamodel/DatabaseMonitoringTableModel.java
@@ -40,22 +40,18 @@
 import static org.opends.messages.AdminToolMessages.*;
 import static org.opends.server.util.CollectionUtils.*;
 
-/**
- * The abstract table model used to display all the network groups.
- */
-public class DBEnvironmentMonitoringTableModel extends SortableTableModel
-implements Comparator<BackendDescriptor>
+/** The table model used to display all the database monitoring information. */
+public class DatabaseMonitoringTableModel extends SortableTableModel implements Comparator<BackendDescriptor>
 {
   private static final long serialVersionUID = 548035716525600536L;
   private Set<BackendDescriptor> data = new HashSet<>();
   private ArrayList<String[]> dataArray = new ArrayList<>();
-  private ArrayList<BackendDescriptor> dataSourceArray = new ArrayList<>();
 
   private String[] columnNames = {};
   private LocalizableMessage NO_VALUE_SET = INFO_CTRL_PANEL_NO_MONITORING_VALUE.get();
   private LocalizableMessage NOT_IMPLEMENTED = INFO_CTRL_PANEL_NOT_IMPLEMENTED.get();
 
-  /** The operations to be displayed. */
+  /** The fields to be displayed. */
   private LinkedHashSet<String> attributes = new LinkedHashSet<>();
   /** The sort column of the table. */
   private int sortColumn;
@@ -202,8 +198,8 @@
   }
 
   /**
-   * Returns the operations displayed by this table model.
-   * @return the operations displayed by this table model.
+   * Returns the fields displayed by this table model.
+   * @return the fields displayed by this table model.
    */
   public Collection<String> getAttributes()
   {
@@ -211,19 +207,19 @@
   }
 
   /**
-   * Sets the operations displayed by this table model.
-   * @param operations the operations displayed by this table model.
+   * Sets the fields displayed by this table model.
+   * @param fields the statistic fields displayed by this table model.
    */
-  public void setAttributes(LinkedHashSet<String> operations)
+  public void setAttributes(LinkedHashSet<String> fields)
   {
     this.attributes.clear();
-    this.attributes.addAll(operations);
-    columnNames = new String[operations.size() + 1];
+    this.attributes.addAll(fields);
+    columnNames = new String[fields.size() + 1];
     columnNames[0] = INFO_CTRL_PANEL_DB_HEADER.get().toString();
     int i = 1;
-    for (String operation : operations)
+    for (String field : fields)
     {
-      columnNames[i] = operation;
+      columnNames[i] = field;
       i++;
     }
   }
@@ -236,12 +232,10 @@
     TreeSet<BackendDescriptor> sortedSet = new TreeSet<>(this);
     sortedSet.addAll(data);
     dataArray.clear();
-    dataSourceArray.clear();
     for (BackendDescriptor ach : sortedSet)
     {
       String[] s = getLine(ach);
       dataArray.add(s);
-      dataSourceArray.add(ach);
     }
 
     // Add the total: always at the end
@@ -253,9 +247,8 @@
       boolean valueSet = false;
       boolean notImplemented = false;
       long totalValue = 0;
-      for (int j=0; j<dataArray.size(); j++)
+      for (String[] l : dataArray)
       {
-        String[] l = dataArray.get(j);
         String value = l[i];
         try
         {
diff --git a/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/ui/BrowseGeneralMonitoringPanel.java b/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/ui/BrowseGeneralMonitoringPanel.java
index 499f625..9e5b3c5 100644
--- a/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/ui/BrowseGeneralMonitoringPanel.java
+++ b/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/ui/BrowseGeneralMonitoringPanel.java
@@ -94,30 +94,20 @@
    */
   protected enum NodeType
   {
-    /**
-     * Root node.
-     */
+    /** Root node. */
     ROOT,
-    /**
-     * System information node.
-     */
+    /** System information node. */
     SYSTEM_INFORMATION,
-    /**
-     * Java information node.
-     */
+    /** Java information node. */
     JAVA_INFORMATION,
-    /**
-     * Work queue node.
-     */
+    /** Work queue node. */
     WORK_QUEUE,
-    /**
-     * Entry caches node.
-     */
+    /** Entry caches node. */
     ENTRY_CACHES,
-    /**
-     * Database environment node.
-     */
-    DB_ENVIRONMENT
+    /** JE Databases information node. */
+    JE_DATABASES_INFORMATION,
+    /** PDB databases information node. */
+    PDB_DATABASES_INFORMATION
   }
 
   /**
@@ -503,8 +493,11 @@
         case ENTRY_CACHES:
           entryPane.updateEntryCaches();
           break;
-        case DB_ENVIRONMENT:
-          entryPane.updateDBEnvironment();
+        case JE_DATABASES_INFORMATION:
+          entryPane.updateJEDatabaseInformation();
+          break;
+        case PDB_DATABASES_INFORMATION:
+          entryPane.updatePDBDatbaseInformation();
           break;
         case JAVA_INFORMATION:
           entryPane.updateJavaInformation();
@@ -587,7 +580,8 @@
         NodeType.JAVA_INFORMATION,
         NodeType.WORK_QUEUE,
         NodeType.ENTRY_CACHES,
-        NodeType.DB_ENVIRONMENT
+        NodeType.JE_DATABASES_INFORMATION,
+        NodeType.PDB_DATABASES_INFORMATION
     };
     LocalizableMessage[] ocPaths = {
         INFO_CTRL_PANEL_GENERAL_MONITORING_ROOT_TREE_NODE.get(),
@@ -595,6 +589,7 @@
         INFO_CTRL_PANEL_JVM_MEMORY_USAGE_TREE_NODE.get(),
         INFO_CTRL_PANEL_WORK_QUEUE_TREE_NODE.get(),
         INFO_CTRL_PANEL_ENTRY_CACHES_TREE_NODE.get(),
+        INFO_CTRL_PANEL_DB_ENVIRONMENT_TREE_NODE.get(),
         INFO_CTRL_PANEL_DB_ENVIRONMENT_TREE_NODE.get()
     };
     for (int i=0; i<identifiers.length; i++)
@@ -663,7 +658,8 @@
       INFO_CTRL_PANEL_JAVA_INFORMATION.get(),
       INFO_CTRL_PANEL_WORK_QUEUE.get(),
       INFO_CTRL_PANEL_ENTRY_CACHES.get(),
-      INFO_CTRL_PANEL_DB_ENVIRONMENT.get()
+      INFO_CTRL_PANEL_JE_DB_INFO.get(),
+      INFO_CTRL_PANEL_PDB_DB_INFO.get()
     };
   }
 
@@ -678,7 +674,8 @@
         NodeType.JAVA_INFORMATION,
         NodeType.WORK_QUEUE,
         NodeType.ENTRY_CACHES,
-        NodeType.DB_ENVIRONMENT
+        NodeType.JE_DATABASES_INFORMATION,
+        NodeType.PDB_DATABASES_INFORMATION
     };
   }
 }
diff --git a/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/ui/DBEnvironmentMonitoringPanel.java b/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/ui/DatabaseMonitoringPanel.java
similarity index 66%
rename from opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/ui/DBEnvironmentMonitoringPanel.java
rename to opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/ui/DatabaseMonitoringPanel.java
index 6badb35..ee30e8a 100644
--- a/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/ui/DBEnvironmentMonitoringPanel.java
+++ b/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/ui/DatabaseMonitoringPanel.java
@@ -47,35 +47,37 @@
 import javax.swing.table.DefaultTableCellRenderer;
 
 import org.opends.guitools.controlpanel.datamodel.BackendDescriptor;
-import org.opends.guitools.controlpanel.datamodel.DBEnvironmentMonitoringTableModel;
+import org.opends.guitools.controlpanel.datamodel.BackendDescriptor.PluggableType;
+import org.opends.guitools.controlpanel.datamodel.DatabaseMonitoringTableModel;
 import org.opends.guitools.controlpanel.datamodel.ServerDescriptor;
 import org.opends.guitools.controlpanel.util.Utilities;
 import org.opends.server.util.ServerConstants;
 
-/**
- * The panel displaying the database environment monitor panel.
- */
-public class DBEnvironmentMonitoringPanel extends GeneralMonitoringPanel
+/** The panel displaying the database monitoring filtered attributes. */
+public class DatabaseMonitoringPanel extends GeneralMonitoringPanel
 {
   private static final long serialVersionUID = 9031734563723229830L;
 
   private JTable table;
-  private DBEnvironmentMonitoringTableModel tableModel;
+  private DatabaseMonitoringTableModel tableModel;
   private JScrollPane scroll;
   private JLabel noDBsFound;
   private JLabel noMonitoringFound;
-  private JButton showOperations;
-
+  private JButton showFields;
   private LinkedHashSet<String> attributes = new LinkedHashSet<>();
   private LinkedHashSet<String> allAttributes = new LinkedHashSet<>();
 
-  private MonitoringAttributesViewPanel<String> operationViewPanel;
-  private GenericDialog operationViewDlg;
+  private MonitoringAttributesViewPanel<String> fieldsViewPanel;
+  private GenericDialog fieldsViewDlg;
+  private final BackendDescriptor.PluggableType pluggableType;
 
-  /** Default constructor. */
-  public DBEnvironmentMonitoringPanel()
+  /**
+   * Default constructor.
+   * @param type the type of pluggable backend.
+   */
+  public DatabaseMonitoringPanel(BackendDescriptor.PluggableType type)
   {
-    super();
+    pluggableType = type;
     createLayout();
   }
 
@@ -85,14 +87,12 @@
     return table;
   }
 
-  /**
-   * Creates the layout of the panel (but the contents are not populated here).
-   */
+  /** Creates the layout of the panel (but the contents are not populated here). */
   private void createLayout()
   {
     GridBagConstraints gbc = new GridBagConstraints();
-    JLabel lTitle = Utilities.createTitleLabel(
-        INFO_CTRL_PANEL_DB_ENVIRONMENT.get());
+    final JLabel lTitle = Utilities.createTitleLabel(
+        PluggableType.JE == pluggableType ? INFO_CTRL_PANEL_JE_DB_INFO.get() : INFO_CTRL_PANEL_PDB_DB_INFO.get());
     gbc.fill = GridBagConstraints.NONE;
     gbc.anchor = GridBagConstraints.WEST;
     gbc.gridwidth = 2;
@@ -107,55 +107,47 @@
     gbc.gridy ++;
     gbc.anchor = GridBagConstraints.WEST;
     gbc.gridwidth = 1;
-    showOperations =
-      Utilities.createButton(INFO_CTRL_PANEL_OPERATIONS_VIEW.get());
-    showOperations.addActionListener(new ActionListener()
+    showFields = Utilities.createButton(INFO_CTRL_PANEL_OPERATIONS_VIEW.get());
+    showFields.addActionListener(new ActionListener()
     {
       @Override
       public void actionPerformed(ActionEvent ev)
       {
-        operationViewClicked();
+        fieldsViewClicked();
       }
     });
-    showOperations.setVisible(false);
+    showFields.setVisible(false);
     gbc.gridx = 0;
     gbc.weightx = 1.0;
     gbc.fill = GridBagConstraints.HORIZONTAL;
     add(Box.createHorizontalGlue(), gbc);
     gbc.gridx ++;
     gbc.weightx = 0.0;
-    add(showOperations, gbc);
+    add(showFields, gbc);
 
     gbc.gridx = 0;
     gbc.gridy ++;
     gbc.gridwidth = 2;
-    tableModel = new DBEnvironmentMonitoringTableModel();
+    tableModel = new DatabaseMonitoringTableModel();
     tableModel.setAttributes(attributes);
-    table = Utilities.createSortableTable(tableModel,
-        new DefaultTableCellRenderer());
+    table = Utilities.createSortableTable(tableModel, new DefaultTableCellRenderer());
     scroll = Utilities.createScrollPane(table);
     updateTableSize();
     gbc.fill = GridBagConstraints.BOTH;
     gbc.weightx = 1.0;
     gbc.weighty = 1.0;
     add(scroll, gbc);
-    noDBsFound = Utilities.createDefaultLabel(
-        INFO_CTRL_PANEL_NO_DBS_FOUND.get());
+    noDBsFound = Utilities.createDefaultLabel(INFO_CTRL_PANEL_NO_DBS_FOUND.get());
     noDBsFound.setHorizontalAlignment(SwingConstants.CENTER);
     add(noDBsFound, gbc);
-    noMonitoringFound = Utilities.createDefaultLabel(
-        INFO_CTRL_PANEL_NO_DB_MONITORING_FOUND.get());
+    noMonitoringFound = Utilities.createDefaultLabel(INFO_CTRL_PANEL_NO_DB_MONITORING_FOUND.get());
     noMonitoringFound.setHorizontalAlignment(SwingConstants.CENTER);
     add(noMonitoringFound, gbc);
 
     setBorder(PANEL_BORDER);
   }
 
-  /**
-   * Updates the contents of the panel.  The code assumes that this is being
-   * called from the event thread.
-   *
-   */
+  /** Updates the contents of the panel.  The code assumes that this is being called from the event thread. */
   public void updateContents()
   {
     boolean backendsFound = false;
@@ -171,7 +163,8 @@
     {
       for (BackendDescriptor backend : server.getBackends())
       {
-        if (backend.getType() == BackendDescriptor.Type.PLUGGABLE)
+        if (BackendDescriptor.Type.PLUGGABLE == backend.getType()
+            && pluggableType == backend.getPluggableType())
         {
           dbBackends.add(backend);
           if (updateAttributes)
@@ -195,16 +188,16 @@
       }
       if (!attributes.isEmpty())
       {
-        setOperationsToDisplay(attributes);
+        setFieldsToDisplay(attributes);
         updateTableSize();
       }
     }
     tableModel.setData(dbBackends);
-    showOperations.setVisible(backendsFound);
+    showFields.setVisible(backendsFound);
     scroll.setVisible(backendsFound && !allAttributes.isEmpty());
     noDBsFound.setVisible(!backendsFound);
     noMonitoringFound.setVisible(backendsFound && allAttributes.isEmpty());
-    showOperations.setVisible(!allAttributes.isEmpty());
+    showFields.setVisible(!allAttributes.isEmpty());
   }
 
 
@@ -214,34 +207,27 @@
     Utilities.updateScrollMode(scroll, table);
   }
 
-  /**
-   * Displays a dialog allowing the user to select which operations to display.
-   *
-   */
-  private void operationViewClicked()
+  /** Displays a dialog allowing the user to select which fields to display. */
+  private void fieldsViewClicked()
   {
-    if (operationViewDlg == null)
+    if (fieldsViewDlg == null)
     {
-      operationViewPanel = MonitoringAttributesViewPanel.createStringInstance(
-          allAttributes);
-      operationViewDlg = new GenericDialog(Utilities.getFrame(this),
-          operationViewPanel);
-      operationViewDlg.setModal(true);
-      Utilities.centerGoldenMean(operationViewDlg,
-          Utilities.getParentDialog(this));
+      fieldsViewPanel = MonitoringAttributesViewPanel.createStringInstance(allAttributes);
+      fieldsViewDlg = new GenericDialog(Utilities.getFrame(this), fieldsViewPanel);
+      fieldsViewDlg.setModal(true);
+      Utilities.centerGoldenMean(fieldsViewDlg, Utilities.getParentDialog(this));
     }
-    operationViewPanel.setSelectedAttributes(attributes);
-    operationViewDlg.setVisible(true);
-    if (!operationViewPanel.isCanceled())
+    fieldsViewPanel.setSelectedAttributes(attributes);
+    fieldsViewDlg.setVisible(true);
+    if (!fieldsViewPanel.isCanceled())
     {
-      attributes = operationViewPanel.getAttributes();
-      setOperationsToDisplay(attributes);
+      attributes = fieldsViewPanel.getAttributes();
+      setFieldsToDisplay(attributes);
       updateTableSize();
     }
   }
 
-  private void setOperationsToDisplay(
-      LinkedHashSet<String> attributes)
+  private void setFieldsToDisplay(LinkedHashSet<String> attributes)
   {
     this.attributes = attributes;
     tableModel.setAttributes(attributes);
@@ -256,9 +242,8 @@
       Set<String> allNames = backend.getMonitoringEntry().getAttributeNames();
       for (String attrName : allNames)
       {
-        if (!attrName.equalsIgnoreCase(
-            ServerConstants.OBJECTCLASS_ATTRIBUTE_TYPE_NAME) &&
-            !attrName.equalsIgnoreCase(ServerConstants.ATTR_COMMON_NAME))
+        if (!attrName.equalsIgnoreCase(ServerConstants.OBJECTCLASS_ATTRIBUTE_TYPE_NAME)
+            && !attrName.equalsIgnoreCase(ServerConstants.ATTR_COMMON_NAME))
         {
           attrNames.add(attrName);
         }
diff --git a/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/ui/GeneralMonitoringRightPanel.java b/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/ui/GeneralMonitoringRightPanel.java
index abd99be..86db635 100644
--- a/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/ui/GeneralMonitoringRightPanel.java
+++ b/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/ui/GeneralMonitoringRightPanel.java
@@ -34,6 +34,7 @@
 
 import javax.swing.JPanel;
 
+import org.opends.guitools.controlpanel.datamodel.BackendDescriptor;
 import org.opends.guitools.controlpanel.datamodel.ControlPanelInfo;
 import org.opends.guitools.controlpanel.event.ConfigurationChangeEvent;
 import org.opends.guitools.controlpanel.util.Utilities;
@@ -48,42 +49,41 @@
 {
   private static final long serialVersionUID = -4197460101279681042L;
 
-  /**
-   * The panel with a CardLayout that contains all the panels.
-   */
+  /** The panel with a CardLayout that contains all the panels. */
   protected JPanel mainPanel;
 
   private RootMonitoringPanel rootPanel = new RootMonitoringPanel();
-  private WorkQueueMonitoringPanel workQueuePanel =
-    new WorkQueueMonitoringPanel();
-  private EntryCachesMonitoringPanel entryCachesPanel =
-    new EntryCachesMonitoringPanel();
-  private DBEnvironmentMonitoringPanel dbEnvironmentPanel =
-    new DBEnvironmentMonitoringPanel();
-  private SystemInformationMonitoringPanel systemInformationPanel =
-    new SystemInformationMonitoringPanel();
-  private JavaInformationMonitoringPanel javaInformationPanel =
-    new JavaInformationMonitoringPanel();
+  private WorkQueueMonitoringPanel workQueuePanel = new WorkQueueMonitoringPanel();
+  private EntryCachesMonitoringPanel entryCachesPanel = new EntryCachesMonitoringPanel();
+  private DatabaseMonitoringPanel jeMonitoringPanel = new DatabaseMonitoringPanel(BackendDescriptor.PluggableType.JE);
+  private DatabaseMonitoringPanel pdbMonitoringPanel = new DatabaseMonitoringPanel(BackendDescriptor.PluggableType.PDB);
+  private SystemInformationMonitoringPanel systemInformationPanel = new SystemInformationMonitoringPanel();
+  private JavaInformationMonitoringPanel javaInformationPanel = new JavaInformationMonitoringPanel();
 
-  /**
-   * The panel used to update messages.
-   */
+  private static final String rootPanelTitle = "RootMonitoringPanel";
+  private static final String workQueuePanelTitle = "WorkQueueMonitoringPanel";
+  private static final String entryCachesPanelTitle = "EntryCachesMonitoringPanel";
+  private static final String jeMonitoringPanelTitle = "JEDatabaseMonitoringPanel";
+  private static final String pdbMonitoringPanelTitle = "PDBDatabaseMonitoringPanel";
+  private static final String systemInformationPanelTitle = "SystemInformationMonitoringPanel";
+  private static final String javaInformationPanelTitle = "JavaInformationMonitoringPanel";
+
+  /** The panel used to update messages. */
   protected NoItemSelectedPanel noEntryPanel = new NoItemSelectedPanel();
+  private static final String noEntryPanelTitle = "JavaInformationMonitoringPanel";
 
   private final StatusGenericPanel[] panels =
   {
       rootPanel,
       workQueuePanel,
       entryCachesPanel,
-      dbEnvironmentPanel,
+      jeMonitoringPanel,
+      pdbMonitoringPanel,
       systemInformationPanel,
       javaInformationPanel
   };
 
-  /**
-   * Default constructor.
-   *
-   */
+  /** Default constructor. */
   public GeneralMonitoringRightPanel()
   {
     super();
@@ -93,12 +93,11 @@
   /**
    * Displays a panel containing a message.
    * @param msg the message.
-   *
    */
   public void displayMessage(LocalizableMessage msg)
   {
     noEntryPanel.setMessage(msg);
-    ((CardLayout)mainPanel.getLayout()).show(mainPanel, getTitle(noEntryPanel));
+    ((CardLayout)mainPanel.getLayout()).show(mainPanel, noEntryPanelTitle);
   }
 
   /** {@inheritDoc} */
@@ -111,40 +110,25 @@
     }
   }
 
-  /**
-   * Creates the layout of the panel (but the contents are not populated here).
-   */
+  /** Creates the layout of the panel (but the contents are not populated here). */
   protected void createLayout()
   {
     GridBagConstraints gbc = new GridBagConstraints();
     CardLayout cardLayout = new CardLayout();
     mainPanel = new JPanel(cardLayout);
     mainPanel.setOpaque(false);
-    noEntryPanel.setMessage(
-        INFO_CTRL_PANEL_GENERAL_MONITORING_NO_ITEM_SELECTED.get());
-    JPanel[] panelsWithScroll =
-    {
-        noEntryPanel,
-        rootPanel,
-        workQueuePanel,
-        entryCachesPanel,
-        systemInformationPanel,
-        javaInformationPanel
-    };
-    JPanel[] panelsWithNoScroll =
-    {
-        dbEnvironmentPanel
-    };
-    for (JPanel panel : panelsWithScroll)
-    {
-      mainPanel.add(Utilities.createBorderLessScrollBar(panel),
-          getTitle(panel));
-    }
-    for (JPanel panel : panelsWithNoScroll)
-    {
-      mainPanel.add(panel, getTitle(panel));
-    }
-    cardLayout.show(mainPanel, getTitle(noEntryPanel));
+    noEntryPanel.setMessage(INFO_CTRL_PANEL_GENERAL_MONITORING_NO_ITEM_SELECTED.get());
+    // panels with scroll
+    mainPanel.add(Utilities.createBorderLessScrollBar(noEntryPanel), noEntryPanelTitle);
+    mainPanel.add(Utilities.createBorderLessScrollBar(rootPanel), rootPanelTitle);
+    mainPanel.add(Utilities.createBorderLessScrollBar(workQueuePanel), workQueuePanelTitle);
+    mainPanel.add(Utilities.createBorderLessScrollBar(entryCachesPanel), entryCachesPanelTitle);
+    mainPanel.add(Utilities.createBorderLessScrollBar(systemInformationPanel), systemInformationPanelTitle);
+    mainPanel.add(Utilities.createBorderLessScrollBar(javaInformationPanel), javaInformationPanelTitle);
+    // panels with no scroll
+    mainPanel.add(jeMonitoringPanel, jeMonitoringPanelTitle);
+    mainPanel.add(pdbMonitoringPanel, pdbMonitoringPanelTitle);
+    cardLayout.show(mainPanel, noEntryPanelTitle);
     gbc.gridx = 0;
     gbc.gridy = 0;
     gbc.weightx = 1.0;
@@ -182,72 +166,53 @@
   {
   }
 
-  /**
-   * Updates the contents of the panel with the root monitoring information.
-   */
+  /** Updates the contents of the panel with the root monitoring information. */
   public void updateRoot()
   {
     rootPanel.updateContents();
-    ((CardLayout)mainPanel.getLayout()).show(mainPanel,
-        getTitle(rootPanel));
+    ((CardLayout)mainPanel.getLayout()).show(mainPanel, rootPanelTitle);
   }
 
-  /**
-   * Updates the contents of the panel with the system information monitoring.
-   */
+  /** Updates the contents of the panel with the system information monitoring. */
   public void updateSystemInformation()
   {
     systemInformationPanel.updateContents();
-    ((CardLayout)mainPanel.getLayout()).show(mainPanel,
-        getTitle(systemInformationPanel));
+    ((CardLayout)mainPanel.getLayout()).show(mainPanel, systemInformationPanelTitle);
   }
 
   /** Updates the contents of the panel with the work queue monitoring information. */
   public void updateWorkQueue()
   {
     workQueuePanel.updateContents();
-    ((CardLayout)mainPanel.getLayout()).show(mainPanel,
-        getTitle(workQueuePanel));
+    ((CardLayout)mainPanel.getLayout()).show(mainPanel, workQueuePanelTitle);
   }
 
-  /**
-   * Updates the contents of the panel with the entry caches monitoring
-   * information.
-   */
+  /** Updates the contents of the panel with the entry caches monitoring information. */
   public void updateEntryCaches()
   {
     entryCachesPanel.updateContents();
-    ((CardLayout)mainPanel.getLayout()).show(mainPanel,
-        getTitle(entryCachesPanel));
+    ((CardLayout)mainPanel.getLayout()).show(mainPanel, entryCachesPanelTitle);
   }
 
-  /**
-   * Updates the contents of the panel with the database environment monitoring
-   * information.
-   */
-  public void updateDBEnvironment()
+  /** Updates the contents of the panel with the je database monitoring information. */
+  public void updateJEDatabaseInformation()
   {
-    dbEnvironmentPanel.updateContents();
-    ((CardLayout)mainPanel.getLayout()).show(mainPanel,
-        getTitle(dbEnvironmentPanel));
+    jeMonitoringPanel.updateContents();
+    ((CardLayout)mainPanel.getLayout()).show(mainPanel, jeMonitoringPanelTitle);
+  }
+
+  /** Updates the contents of the panel with the pdb database monitoring information. */
+  public void updatePDBDatbaseInformation()
+  {
+    pdbMonitoringPanel.updateContents();
+    ((CardLayout)mainPanel.getLayout()).show(mainPanel, pdbMonitoringPanelTitle);
   }
 
   /** Updates the contents of the panel with the JAVA information. */
   public void updateJavaInformation()
   {
     javaInformationPanel.updateContents();
-    ((CardLayout)mainPanel.getLayout()).show(mainPanel,
-        getTitle(javaInformationPanel));
+    ((CardLayout)mainPanel.getLayout()).show(mainPanel, javaInformationPanelTitle);
   }
 
-  /**
-   * Returns the title for a given panel. It will be used to update the
-   * CardLayout.
-   * @param panel the panel we want to get the title from.
-   * @return the title for a given panel.
-   */
-  protected String getTitle(JPanel panel)
-  {
-    return panel.getClass().toString();
-  }
 }
diff --git a/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/ui/MonitoringAttributesViewPanel.java b/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/ui/MonitoringAttributesViewPanel.java
index 3833669..7ef055f 100644
--- a/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/ui/MonitoringAttributesViewPanel.java
+++ b/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/ui/MonitoringAttributesViewPanel.java
@@ -80,8 +80,7 @@
   * @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)
+ public static MonitoringAttributesViewPanel<String> createStringInstance(LinkedHashSet<String> attributes)
  {
    return new MonitoringAttributesViewPanel<>(attributes);
  }
@@ -94,8 +93,7 @@
   * attributes.
   */
  public static MonitoringAttributesViewPanel<MonitoringAttributes>
- createMonitoringAttributesInstance(
-     LinkedHashSet<MonitoringAttributes> attributes)
+ createMonitoringAttributesInstance(LinkedHashSet<MonitoringAttributes> attributes)
  {
    return new MonitoringAttributesViewPanel<>(attributes);
  }
@@ -156,8 +154,7 @@
 
    gbc.gridwidth = 2;
    gbc.gridx = 0;
-   add(Utilities.createPrimaryLabel(
-       INFO_CTRL_PANEL_OPERATION_VIEW_LABEL.get()), gbc);
+   add(Utilities.createPrimaryLabel(INFO_CTRL_PANEL_OPERATION_VIEW_LABEL.get()), gbc);
    gbc.gridy ++;
    gbc.gridwidth = 1;
    gbc.insets.top = 10;
@@ -188,8 +185,7 @@
      }
    });
 
-   selectNone = Utilities.createButton(
-       INFO_CTRL_PANEL_CLEAR_SELECTION_BUTTON.get());
+   selectNone = Utilities.createButton(INFO_CTRL_PANEL_CLEAR_SELECTION_BUTTON.get());
    selectNone.addActionListener(new ActionListener()
    {
      public void actionPerformed(ActionEvent ev)
@@ -253,8 +249,7 @@
    gbc.weighty = 1.0;
    checkBoxPanel.add(Box.createVerticalGlue(), gbc);
    scroll.getViewport().setPreferredSize(
-       new Dimension(checkBoxPanel.getPreferredSize().width + 15,
-           preferredViewHeight));
+       new Dimension(checkBoxPanel.getPreferredSize().width + 15, preferredViewHeight));
  }
 
  /** {@inheritDoc} */
@@ -289,11 +284,11 @@
    // Check that at least one checkbox is selected.
    selectedAttributes.clear();
    int i = 0;
-   for (T operation : monitoringAttributes)
+   for (T attribute : monitoringAttributes)
    {
      if (checkboxes[i].isSelected())
      {
-       selectedAttributes.add(operation);
+       selectedAttributes.add(attribute);
      }
      i++;
    }
@@ -335,24 +330,24 @@
  }
 
  /**
-  * Returns the message for the provided operation.
-  * @param operation the operation.
-  * @return the message for the provided operation.
+  * Returns the message for the provided attribute.
+  * @param attribute the attribute.
+  * @return the message for the provided attribute.
   */
- protected LocalizableMessage getMessage(T operation)
+ protected LocalizableMessage getMessage(T attribute)
  {
    LocalizableMessage m;
-   if (operation instanceof MonitoringAttributes)
+   if (attribute instanceof MonitoringAttributes)
    {
-     m = ((MonitoringAttributes)operation).getMessage();
+     m = ((MonitoringAttributes)attribute).getMessage();
    }
-   else if (operation instanceof LocalizableMessage)
+   else if (attribute instanceof LocalizableMessage)
    {
-     m = (LocalizableMessage)operation;
+     m = (LocalizableMessage)attribute;
    }
    else
    {
-     m = LocalizableMessage.raw(operation.toString());
+     m = LocalizableMessage.raw(attribute.toString());
    }
    return m;
  }
diff --git a/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/util/ConfigFromDirContext.java b/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/util/ConfigFromDirContext.java
index e9c9ec3..b237dbc 100644
--- a/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/util/ConfigFromDirContext.java
+++ b/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/util/ConfigFromDirContext.java
@@ -108,7 +108,8 @@
 {
   private static final LocalizedLogger logger = LocalizedLogger.getLoggerForThisClass();
 
-  private static final String DATABASE_ENVIRONMENT_SUFFIX = " Database Environment";
+  private static final String DATABASE_JE_MONITORING_ENTRY_SUFFIX = " JE Database";
+  private static final String DATABASE_PDB_MONITORING_ENTRY_SUFFIX = " PDB Database";
   private static final String SYNC_PROVIDER_NAME = "Multimaster Synchronization";
 
   private CustomSearchResult rootMonitor;
@@ -714,19 +715,19 @@
                 baseDN.setAgeOfOldestMissingChange(
                     Long.valueOf(ConnectionUtils.getFirstValue(sr, "approx-older-change-not-synchronized-millis")));
               }
-              catch (Throwable t)
+              catch (Throwable ignored)
               {
               }
               try
               {
                 baseDN.setMissingChanges(Integer.valueOf(missingChanges));
               }
-              catch (Throwable t)
+              catch (Throwable ignored)
               {
               }
             }
           }
-          catch (Throwable t)
+          catch (Throwable ignored)
           {
           }
         }
@@ -784,13 +785,25 @@
       {
         // Check if it is the DB monitor entry
         String cn = ConnectionUtils.getFirstValue(sr, "cn");
-        if (cn != null && cn.endsWith(DATABASE_ENVIRONMENT_SUFFIX))
+        String monitorBackendID = null;
+        BackendDescriptor.PluggableType pluggableType = BackendDescriptor.PluggableType.UNKNOWN;
+        if (cn != null && cn.endsWith(DATABASE_JE_MONITORING_ENTRY_SUFFIX))
         {
-          String monitorBackendID = cn.substring(0, cn.length() - DATABASE_ENVIRONMENT_SUFFIX.length());
+          pluggableType = BackendDescriptor.PluggableType.JE;
+          monitorBackendID = cn.substring(0, cn.length() - DATABASE_JE_MONITORING_ENTRY_SUFFIX.length());
+        }
+        if (cn != null && cn.endsWith(DATABASE_PDB_MONITORING_ENTRY_SUFFIX))
+        {
+          pluggableType = BackendDescriptor.PluggableType.PDB;
+          monitorBackendID = cn.substring(0, cn.length() - DATABASE_PDB_MONITORING_ENTRY_SUFFIX.length());
+        }
+        if (monitorBackendID != null)
+        {
           for (BackendDescriptor backend : backends)
           {
             if (backend.getBackendID().equalsIgnoreCase(monitorBackendID))
             {
+              backend.setPluggableType(pluggableType);
               backend.setMonitoringEntry(csr);
             }
           }
diff --git a/opendj-server-legacy/src/messages/org/opends/messages/admin_tool.properties b/opendj-server-legacy/src/messages/org/opends/messages/admin_tool.properties
index 1b89770..c3cd32f 100644
--- a/opendj-server-legacy/src/messages/org/opends/messages/admin_tool.properties
+++ b/opendj-server-legacy/src/messages/org/opends/messages/admin_tool.properties
@@ -2637,7 +2637,9 @@
 INFO_CTRL_PANEL_JAVA_INFORMATION=Java Information
 INFO_CTRL_PANEL_WORK_QUEUE=Work Queue
 INFO_CTRL_PANEL_ENTRY_CACHES=Entry Cache
-INFO_CTRL_PANEL_DB_ENVIRONMENT=Database Environment
+INFO_CTRL_PANEL_DB_ENVIRONMENT=Database Information
+INFO_CTRL_PANEL_JE_DB_INFO=JE Databases Information
+INFO_CTRL_PANEL_PDB_DB_INFO=PDB Databases Information
 INFO_CTRL_PANEL_UP_TIME_LABEL=Up Time:
 INFO_CTRL_PANEL_MAX_CONNECTIONS_LABEL=Max Connections:
 INFO_CTRL_PANEL_TOTAL_CONNECTIONS_LABEL=Total Connections:
@@ -2678,8 +2680,7 @@
 INFO_CTRL_PANEL_NO_MONITORING_VALUE=-
 INFO_CTRL_PANEL_TOTAL_LABEL=TOTAL
 INFO_CTRL_PANEL_ATTRIBUTE_VIEW_OPTIONS_TITLE=Attribute View Options
-INFO_CTRL_PANEL_NO_OPERATION_SELECTED=You must select at least one \
- operation.
+INFO_CTRL_PANEL_NO_OPERATION_SELECTED=You must select at least one operation.
 INFO_CTRL_PANEL_OPERATION_VIEW_LABEL=Show Columns
 INFO_CTRL_PANEL_OPERATIONS_VIEW=Show Operations...
 INFO_CTRL_PANEL_OPERATION_NAME_AS_LABEL=%s:

--
Gitblit v1.10.0