From d76a9a256b814a4a770738bb5243325fdaf6ec0c Mon Sep 17 00:00:00 2001
From: jvergara <jvergara@localhost>
Date: Mon, 05 Jan 2009 02:17:35 +0000
Subject: [PATCH] Fix for issue 3688 (unexpected html tags in the output of status command)

---
 opends/src/server/org/opends/server/tools/status/StatusCli.java |   65 +++++++++++++++++++++++++-------
 1 files changed, 50 insertions(+), 15 deletions(-)

diff --git a/opends/src/server/org/opends/server/tools/status/StatusCli.java b/opends/src/server/org/opends/server/tools/status/StatusCli.java
index d92a52a..272108f 100644
--- a/opends/src/server/org/opends/server/tools/status/StatusCli.java
+++ b/opends/src/server/org/opends/server/tools/status/StatusCli.java
@@ -42,7 +42,6 @@
 
 import javax.naming.NamingException;
 import javax.naming.ldap.InitialLdapContext;
-import javax.swing.table.TableModel;
 
 import org.opends.admin.ads.util.ApplicationTrustManager;
 import org.opends.guitools.controlpanel.datamodel.BackendDescriptor;
@@ -801,7 +800,7 @@
       ConnectionHandlerTableModel connHandlersTableModel =
         new ConnectionHandlerTableModel(false);
       connHandlersTableModel.setData(connectionHandlers);
-      writeTableModel(connHandlersTableModel, desc);
+      writeConnectionHandlersTableModel(connHandlersTableModel, desc);
     }
   }
 
@@ -909,25 +908,37 @@
   /**
    * Writes the contents of the provided table model simulating a table layout
    * using text.
-   * @param tableModel the TableModel.
+   * @param tableModel the connection handler table model.
    * @param desc the Server Status descriptor.
    */
-  private void writeTableModel(TableModel tableModel,
+  private void writeConnectionHandlersTableModel(
+      ConnectionHandlerTableModel tableModel,
       ServerDescriptor desc)
   {
     if (isScriptFriendly())
     {
       for (int i=0; i<tableModel.getRowCount(); i++)
       {
-        getOutputStream().println("-");
-        for (int j=0; j<tableModel.getColumnCount(); j++)
+        // Get the host name, it can be multivalued.
+        String[] hostNames = getHostNames(tableModel, i);
+        for (String hostName : hostNames)
         {
-          MessageBuilder line = new MessageBuilder();
-          line.append(tableModel.getColumnName(j)+": ");
-
-          line.append(getCellValue(tableModel.getValueAt(i, j), desc));
-
-          getOutputStream().println(wrapText(line.toMessage()));
+          getOutputStream().println("-");
+          for (int j=0; j<tableModel.getColumnCount(); j++)
+          {
+            MessageBuilder line = new MessageBuilder();
+            line.append(tableModel.getColumnName(j)+": ");
+            if (j == 0)
+            {
+              // It is the hostName
+              line.append(getCellValue(hostName, desc));
+            }
+            else
+            {
+              line.append(getCellValue(tableModel.getValueAt(i, j), desc));
+            }
+            getOutputStream().println(wrapText(line.toMessage()));
+          }
         }
       }
     }
@@ -940,10 +951,23 @@
       }
       for (int i=0; i<tableModel.getRowCount(); i++)
       {
-        table.startRow();
-        for (int j=0; j<tableModel.getColumnCount(); j++)
+//      Get the host name, it can be multivalued.
+        String[] hostNames = getHostNames(tableModel, i);
+        for (String hostName : hostNames)
         {
-          table.appendCell(getCellValue(tableModel.getValueAt(i, j), desc));
+          table.startRow();
+          for (int j=0; j<tableModel.getColumnCount(); j++)
+          {
+            if (j == 0)
+            {
+              // It is the hostName
+              table.appendCell(getCellValue(hostName, desc));
+            }
+            else
+            {
+              table.appendCell(getCellValue(tableModel.getValueAt(i, j), desc));
+            }
+          }
         }
       }
       TextTablePrinter printer = new TextTablePrinter(getOutputStream());
@@ -952,6 +976,17 @@
     }
   }
 
+  private String[] getHostNames(ConnectionHandlerTableModel tableModel,
+      int row)
+  {
+   String v = (String)tableModel.getValueAt(row, 0);
+   String htmlTag = "<html>";
+   if (v.toLowerCase().startsWith(htmlTag))
+   {
+     v = v.substring(htmlTag.length());
+   }
+   return v.split("<br>");
+  }
 
   private Message getCellValue(Object v, ServerDescriptor desc)
   {

--
Gitblit v1.10.0