mirror of https://github.com/OpenIdentityPlatform/OpenDJ.git

matthew_swift
03.04.2009 39db72786ec179e67e3c1c0c71a2e93672999ea5
sdk/src/org/opends/sdk/tools/MultiColumnPrinter.java
@@ -31,16 +31,14 @@
import java.util.Enumeration;
import java.util.Vector;
import org.opends.server.util.cli.ConsoleApplication;
/**
 * Utility class for printing aligned collumns of text.
 * Utility class for printing aligned columns of text.
 * <P>
 * This class allows you to specify:
 * <UL>
 * <LI>The number of collumns in the output. This will determine the
 * <LI>The number of columns in the output. This will determine the
 * dimension of the string arrays passed to add(String[]) or
 * addTitle(String[]).
 * <LI>spacing/gap between columns
@@ -49,7 +47,7 @@
 * </UL>
 * <P>
 * Example usage:
 *
 *
 * <PRE>
 * MyPrinter mp = new MyPrinter(3, 2, &quot;-&quot;);
 * String oneRow[] = new String[3];
@@ -70,7 +68,7 @@
 * <P>
 * The above would print:
 * <P>
 *
 *
 * <PRE>
 *  --------------------------------------
 *  User Name  Email Address  Phone Number
@@ -81,7 +79,7 @@
 * <P>
 * This class also supports multi-row titles and having title strings
 * spanning multiple collumns. Example usage:
 *
 *
 * <PRE>
 * TestPrinter tp = new TestPrinter(4, 2, &quot;-&quot;);
 * String oneRow[] = new String[4];
@@ -116,7 +114,7 @@
 * <P>
 * The above would print:
 * <P>
 *
 *
 * <PRE>
 *      ------------------------------------
 *          Name             Contact
@@ -130,17 +128,25 @@
{
  final public static int LEFT = 0;
  final public static int CENTER = 1;
  final public static int RIGHT = 2;
  private int numCol = 2;
  private int gap = 4;
  private int align = CENTER;
  private int titleAlign = CENTER;
  private String border = null;
  private Vector<String[]> titleTable = null;
  private Vector<int[]> titleSpanTable = null;
  private int curLength[];
  private final ConsoleApplication app;
@@ -149,7 +155,7 @@
  /**
   * Creates a new MultiColumnPrinter class.
   *
   *
   * @param numCol
   *          number of columns
   * @param gap
@@ -159,8 +165,8 @@
   * @param align
   *          type of alignment within columns
   */
  public MultiColumnPrinter(int numCol, int gap, String border,
      int align, ConsoleApplication app)
  MultiColumnPrinter(int numCol, int gap, String border, int align,
      ConsoleApplication app)
  {
    titleTable = new Vector<String[]>();
@@ -180,7 +186,7 @@
  /**
   * Creates a sorted new MultiColumnPrinter class using LEFT alignment.
   *
   *
   * @param numCol
   *          number of columns
   * @param gap
@@ -188,7 +194,7 @@
   * @param border
   *          character used to frame the titles
   */
  public MultiColumnPrinter(int numCol, int gap, String border,
  MultiColumnPrinter(int numCol, int gap, String border,
      ConsoleApplication app)
  {
    this(numCol, gap, border, LEFT, app);
@@ -199,13 +205,13 @@
  /**
   * Creates a sorted new MultiColumnPrinter class using LEFT alignment
   * and with no title border.
   *
   *
   * @param numCol
   *          number of columns
   * @param gap
   *          gap between each column
   */
  public MultiColumnPrinter(int numCol, int gap, ConsoleApplication app)
  MultiColumnPrinter(int numCol, int gap, ConsoleApplication app)
  {
    this(numCol, gap, null, LEFT, app);
  }
@@ -214,14 +220,13 @@
  /**
   * Adds to the row of strings to be used as the title for the table.
   *
   *
   * @param row
   *          Array of strings to print in one row of title.
   */
  public void addTitle(String[] row)
  void addTitle(String[] row)
  {
    if (row == null)
      return;
    if (row == null) return;
    int[] span = new int[row.length];
    for (int i = 0; i < row.length; i++)
@@ -242,7 +247,7 @@
   * is 4 collumns wide, it is possible to have some title strings in a
   * row to 'span' multiple collumns:
   * <P>
   *
   *
   * <PRE>
   * ------------------------------------
   *     Name             Contact
@@ -251,11 +256,11 @@
   * Bob    Jones  bob@foo.com   123-4567
   * John   Doe    john@foo.com  456-7890
   * </PRE>
   *
   *
   * In the example above, the title row has a string 'Name' that spans
   * 2 collumns. The string 'Contact' also spans 2 collumns. The above
   * is done by passing in to addTitle() an array that contains:
   *
   *
   * <PRE>
   * span[0] = 2; // spans 2 collumns
   * span[1] = 0; // spans 0 collumns, ignore
@@ -265,7 +270,7 @@
   * <P>
   * A span value of 1 is the default. The method addTitle(String[] row)
   * basically does:
   *
   *
   * <PRE>
   * int[] span = new int[row.length];
   * for (int i = 0; i &lt; row.length; i++)
@@ -274,14 +279,14 @@
   * }
   * addTitle(row, span);
   * </PRE>
   *
   *
   * @param row
   *          Array of strings to print in one row of title.
   * @param span
   *          Array of integers that reflect the number of collumns the
   *          corresponding title string will occupy.
   */
  public void addTitle(String[] row, int span[])
  void addTitle(String[] row, int span[])
  {
    // Need to create a new instance of it, otherwise the new values
    // will always overwrite the old values.
@@ -300,10 +305,10 @@
  /**
   * Set alignment for title strings
   *
   *
   * @param titleAlign
   */
  public void setTitleAlign(int titleAlign)
  void setTitleAlign(int titleAlign)
  {
    this.titleAlign = titleAlign;
  }
@@ -313,7 +318,7 @@
  /**
   * Clears title strings.
   */
  public void clearTitle()
  void clearTitle()
  {
    titleTable.clear();
    titleSpanTable.clear();
@@ -324,7 +329,7 @@
  /**
   * Prints the table title
   */
  public void printTitle()
  void printTitle()
  {
    // Get the longest string for each column and store in curLength[]
@@ -333,15 +338,14 @@
    Enumeration<int[]> spanEnum = titleSpanTable.elements();
    while (elm.hasMoreElements())
    {
      String[] row = (String[]) elm.nextElement();
      int[] curSpan = (int[]) spanEnum.nextElement();
      String[] row = elm.nextElement();
      int[] curSpan = spanEnum.nextElement();
      for (int i = 0; i < numCol; i++)
      {
        // None of the fields should be null, but if it
        // happens to be so, replace it with "-".
        if (row[i] == null)
          row[i] = "-";
        if (row[i] == null) row[i] = "-";
        int len = row[i].length();
@@ -384,15 +388,14 @@
    while (elm.hasMoreElements())
    {
      String[] row = (String[]) elm.nextElement();
      int[] curSpan = (int[]) spanEnum.nextElement();
      String[] row = elm.nextElement();
      int[] curSpan = spanEnum.nextElement();
      for (int i = 0; i < numCol; i++)
      {
        int availableSpace = 0, span = curSpan[i];
        if (span == 0)
          continue;
        if (span == 0) continue;
        availableSpace = curLength[i];
@@ -410,8 +413,7 @@
          int space_before = availableSpace - row[i].length();
          printSpaces(space_before);
          app.getOutputStream().print(row[i]);
          if (i < numCol - 1)
            printSpaces(gap);
          if (i < numCol - 1) printSpaces(gap);
        }
        else if (titleAlign == CENTER)
        {
@@ -422,8 +424,7 @@
          printSpaces(space_before);
          app.getOutputStream().print(row[i]);
          printSpaces(space_after);
          if (i < numCol - 1)
            printSpaces(gap);
          if (i < numCol - 1) printSpaces(gap);
        }
        else
        {
@@ -442,11 +443,11 @@
  /**
   * Adds one row of text to output.
   *
   *
   * @param row
   *          Array of strings to print in one row.
   */
  public void printRow(String... row)
  void printRow(String... row)
  {
    for (int i = 0; i < numCol; i++)
    {
@@ -455,8 +456,7 @@
        int space_before = curLength[i] - row[i].length();
        printSpaces(space_before);
        app.getOutputStream().print(row[i]);
        if (i < numCol - 1)
          printSpaces(gap);
        if (i < numCol - 1) printSpaces(gap);
      }
      else if (align == CENTER)
      {
@@ -467,8 +467,7 @@
        printSpaces(space1);
        app.getOutputStream().print(row[i]);
        printSpaces(space2);
        if (i < numCol - 1)
          printSpaces(gap);
        if (i < numCol - 1) printSpaces(gap);
      }
      else
      {
@@ -494,8 +493,7 @@
  private void printBorder()
  {
    if (border == null)
      return;
    if (border == null) return;
    // For the value in each column
    for (int i = 0; i < numCol; i++)