From eaa23f4b7af97c108ecffa40c86c32e723a90594 Mon Sep 17 00:00:00 2001
From: matthew_swift <matthew_swift@localhost>
Date: Wed, 29 Aug 2007 14:40:34 +0000
Subject: [PATCH] Fix issue 1831: dsconfig interactive mode.

---
 opends/src/server/org/opends/server/tools/dsconfig/HelpSubCommandHandler.java |  437 +++++++++++++++++++++++++++++++++---------------------
 1 files changed, 266 insertions(+), 171 deletions(-)

diff --git a/opends/src/server/org/opends/server/tools/dsconfig/HelpSubCommandHandler.java b/opends/src/server/org/opends/server/tools/dsconfig/HelpSubCommandHandler.java
index 5ea9b41..1fe6c6e 100644
--- a/opends/src/server/org/opends/server/tools/dsconfig/HelpSubCommandHandler.java
+++ b/opends/src/server/org/opends/server/tools/dsconfig/HelpSubCommandHandler.java
@@ -26,16 +26,14 @@
  */
 package org.opends.server.tools.dsconfig;
 
-import org.opends.messages.MessageBuilder;
-import org.opends.messages.Message;
 
 
-import static org.opends.messages.ToolMessages.*;
+import static org.opends.messages.DSConfigMessages.*;
+import static org.opends.messages.UtilityMessages.*;
 import static org.opends.server.util.ServerConstants.*;
-import static org.opends.server.util.StaticUtils.*;
 
 import java.io.PrintStream;
-import java.util.Arrays;
+import java.util.Collection;
 import java.util.EnumSet;
 import java.util.HashMap;
 import java.util.LinkedList;
@@ -45,6 +43,8 @@
 import java.util.TreeMap;
 import java.util.TreeSet;
 
+import org.opends.messages.Message;
+import org.opends.messages.MessageBuilder;
 import org.opends.server.admin.AbsoluteInheritedDefaultBehaviorProvider;
 import org.opends.server.admin.AbstractManagedObjectDefinition;
 import org.opends.server.admin.AdministratorAction;
@@ -67,6 +67,10 @@
 import org.opends.server.util.args.StringArgument;
 import org.opends.server.util.args.SubCommand;
 import org.opends.server.util.args.SubCommandArgumentParser;
+import org.opends.server.util.cli.CLIException;
+import org.opends.server.util.cli.ConsoleApplication;
+import org.opends.server.util.cli.MenuResult;
+import org.opends.server.util.cli.OutputStreamConsoleApplication;
 import org.opends.server.util.table.TableBuilder;
 import org.opends.server.util.table.TablePrinter;
 import org.opends.server.util.table.TextTablePrinter;
@@ -101,9 +105,9 @@
       public Message visitAbsoluteInherited(
           AbsoluteInheritedDefaultBehaviorProvider<T> d,
           PropertyDefinition<T> p) {
-        return INFO_DSCFG_HELP_FIELD_INHERITED_ABS.get(d
-            .getPropertyName(), d.getManagedObjectPath()
-            .getRelationDefinition().getUserFriendlyName());
+        return INFO_DSCFG_HELP_FIELD_INHERITED_ABS.get(d.getPropertyName(), d
+            .getManagedObjectPath().getRelationDefinition()
+            .getUserFriendlyName());
       }
 
 
@@ -148,13 +152,12 @@
           RelativeInheritedDefaultBehaviorProvider<T> d,
           PropertyDefinition<T> p) {
         if (d.getRelativeOffset() == 0) {
-          return INFO_DSCFG_HELP_FIELD_INHERITED_THIS.get(d
-              .getPropertyName(), d.getManagedObjectDefinition()
-              .getUserFriendlyName());
+          return INFO_DSCFG_HELP_FIELD_INHERITED_THIS.get(d.getPropertyName(),
+              d.getManagedObjectDefinition().getUserFriendlyName());
         } else {
-          return INFO_DSCFG_HELP_FIELD_INHERITED_PARENT.get(d
-              .getPropertyName(), d.getManagedObjectDefinition()
-              .getUserFriendlyName());
+          return INFO_DSCFG_HELP_FIELD_INHERITED_PARENT.get(
+              d.getPropertyName(), d.getManagedObjectDefinition()
+                  .getUserFriendlyName());
         }
       }
 
@@ -298,7 +301,7 @@
        * {@inheritDoc}
        */
       @Override
-      public Void visitUnknown(PropertyDefinition<?> d, PrintStream p)
+      public <T> Void visitUnknown(PropertyDefinition<T> d, PrintStream p)
           throws UnknownPropertyDefinitionException {
         PropertyDefinitionUsageBuilder usageBuilder =
           new PropertyDefinitionUsageBuilder(true);
@@ -367,44 +370,41 @@
   private final static int HEADING_WIDTH;
 
   /**
+   * The value for the long option category.
+   */
+  private static final String OPTION_DSCFG_LONG_CATEGORY = "category";
+
+  /**
    * The value for the long option inherited.
    */
   private static final String OPTION_DSCFG_LONG_INHERITED = "inherited";
 
   /**
-   * The value for the short option inherited.
-   */
-  private static final Character OPTION_DSCFG_SHORT_INHERITED = null;
-
-  /**
    * The value for the long option type.
    */
   private static final String OPTION_DSCFG_LONG_TYPE = "type";
 
   /**
-   * The value for the short option type.
-   */
-  private static final Character OPTION_DSCFG_SHORT_TYPE = 't';
-
-  /**
-   * The value for the long option category.
-   */
-  private static final String OPTION_DSCFG_LONG_CATEGORY = "category";
-
-  /**
    * The value for the short option category.
    */
   private static final Character OPTION_DSCFG_SHORT_CATEGORY = 'c';
 
+  /**
+   * The value for the short option inherited.
+   */
+  private static final Character OPTION_DSCFG_SHORT_INHERITED = null;
+
+  /**
+   * The value for the short option type.
+   */
+  private static final Character OPTION_DSCFG_SHORT_TYPE = 't';
+
   static {
     int tmp = INFO_DSCFG_HELP_HEADING_SYNTAX.get().length();
     tmp = Math.max(tmp, INFO_DSCFG_HELP_HEADING_DEFAULT.get().length());
-    tmp = Math.max(tmp, INFO_DSCFG_HELP_HEADING_MULTI_VALUED.get()
-        .length());
-    tmp = Math
-        .max(tmp, INFO_DSCFG_HELP_HEADING_MANDATORY.get().length());
-    tmp = Math
-        .max(tmp, INFO_DSCFG_HELP_HEADING_READ_ONLY.get().length());
+    tmp = Math.max(tmp, INFO_DSCFG_HELP_HEADING_MULTI_VALUED.get().length());
+    tmp = Math.max(tmp, INFO_DSCFG_HELP_HEADING_MANDATORY.get().length());
+    tmp = Math.max(tmp, INFO_DSCFG_HELP_HEADING_READ_ONLY.get().length());
     HEADING_WIDTH = tmp;
   }
 
@@ -413,17 +413,79 @@
   /**
    * Creates a new help-properties sub-command.
    *
-   * @param app
-   *          The console application.
    * @param parser
    *          The sub-command argument parser.
    * @return Returns the new help-properties sub-command.
    * @throws ArgumentException
    *           If the sub-command could not be created successfully.
    */
-  public static HelpSubCommandHandler create(ConsoleApplication app,
-      SubCommandArgumentParser parser) throws ArgumentException {
-    return new HelpSubCommandHandler(app, parser);
+  public static HelpSubCommandHandler create(SubCommandArgumentParser parser)
+      throws ArgumentException {
+    return new HelpSubCommandHandler(parser);
+  }
+
+
+
+  /**
+   * Displays detailed help about a single component to the specified
+   * output stream.
+   *
+   * @param app
+   *          The application console.
+   * @param d
+   *          The managed object definition.
+   * @param c
+   *          The collection of properties to be displayed.
+   */
+  public static void displaySingleComponent(ConsoleApplication app,
+      AbstractManagedObjectDefinition<?, ?> d,
+      Collection<PropertyDefinition<?>> c) {
+    // Display the title.
+    app.println(INFO_DSCFG_HELP_HEADING_COMPONENT.get(d.getUserFriendlyName()));
+
+    app.println();
+    app.println(d.getSynopsis());
+    if (d.getDescription() != null) {
+      app.println();
+      app.println(d.getDescription());
+    }
+
+    app.println();
+    app.println();
+    displayPropertyOptionKey(app);
+
+    app.println();
+    app.println();
+
+    // Headings.
+    TableBuilder builder = new TableBuilder();
+
+    builder.appendHeading(INFO_DSCFG_HEADING_PROPERTY_NAME.get());
+    builder.appendHeading(INFO_DSCFG_HEADING_PROPERTY_OPTIONS.get());
+    builder.appendHeading(INFO_DSCFG_HEADING_PROPERTY_SYNTAX.get());
+
+    // Sort keys.
+    builder.addSortKey(0);
+
+    // Output summary of each property.
+    for (PropertyDefinition<?> pd : c) {
+      // Display the property.
+      builder.startRow();
+
+      // Display the property name.
+      builder.appendCell(pd.getName());
+
+      // Display the options.
+      builder.appendCell(getPropertyOptionSummary(pd));
+
+      // Display the syntax.
+      PropertyDefinitionUsageBuilder v = new PropertyDefinitionUsageBuilder(
+          false);
+      builder.appendCell(v.getUsage(pd));
+    }
+
+    TablePrinter printer = new TextTablePrinter(app.getErrorStream());
+    builder.print(printer);
   }
 
 
@@ -432,35 +494,35 @@
    * Displays detailed help about a single property to the specified
    * output stream.
    *
+   * @param app
+   *          The application console.
    * @param d
    *          The managed object definition.
    * @param name
    *          The name of the property definition.
-   * @param out
-   *          The output stream.
    */
-  public static void displayVerboseSingleProperty(
-      AbstractManagedObjectDefinition<?, ?> d, String name, PrintStream out) {
+  public static void displayVerboseSingleProperty(ConsoleApplication app,
+      AbstractManagedObjectDefinition<?, ?> d, String name) {
     PropertyDefinition<?> pd = d.getPropertyDefinition(name);
 
     // Display the title.
-    out.println(INFO_DSCFG_HELP_HEADING_PROPERTY.get(name));
+    app.println(INFO_DSCFG_HELP_HEADING_PROPERTY.get(name));
 
     // Display the property synopsis and description.
-    out.println();
-    out.println(wrapText(pd.getSynopsis(), MAX_LINE_WIDTH));
+    app.println();
+    app.println(pd.getSynopsis(), 4);
     if (pd.getDescription() != null) {
-      out.println();
-      out.println(wrapText(pd.getDescription(), MAX_LINE_WIDTH));
+      app.println();
+      app.println(pd.getDescription(), 4);
     }
 
     // Display the syntax.
-    out.println();
+    app.println();
     SyntaxPrinter syntaxPrinter = new SyntaxPrinter();
-    syntaxPrinter.print(out, pd);
+    syntaxPrinter.print(app.getErrorStream(), pd);
 
     // Display remaining information in a table.
-    out.println();
+    app.println();
     TableBuilder builder = new TableBuilder();
 
     // Display the default behavior.
@@ -476,27 +538,27 @@
     builder.appendCell(INFO_DSCFG_HELP_HEADING_ADVANCED.get());
     builder.appendCell(HEADING_SEPARATOR);
     if (pd.hasOption(PropertyOption.ADVANCED)) {
-      builder.appendCell(INFO_DSCFG_GENERAL_CONFIRM_YES.get());
+      builder.appendCell(INFO_GENERAL_YES.get());
     } else {
-      builder.appendCell(INFO_DSCFG_GENERAL_CONFIRM_NO.get());
+      builder.appendCell(INFO_GENERAL_NO.get());
     }
 
     builder.startRow();
     builder.appendCell(INFO_DSCFG_HELP_HEADING_MULTI_VALUED.get());
     builder.appendCell(HEADING_SEPARATOR);
     if (pd.hasOption(PropertyOption.MULTI_VALUED)) {
-      builder.appendCell(INFO_DSCFG_GENERAL_CONFIRM_YES.get());
+      builder.appendCell(INFO_GENERAL_YES.get());
     } else {
-      builder.appendCell(INFO_DSCFG_GENERAL_CONFIRM_NO.get());
+      builder.appendCell(INFO_GENERAL_NO.get());
     }
 
     builder.startRow();
     builder.appendCell(INFO_DSCFG_HELP_HEADING_MANDATORY.get());
     builder.appendCell(HEADING_SEPARATOR);
     if (pd.hasOption(PropertyOption.MANDATORY)) {
-      builder.appendCell(INFO_DSCFG_GENERAL_CONFIRM_YES.get());
+      builder.appendCell(INFO_GENERAL_YES.get());
     } else {
-      builder.appendCell(INFO_DSCFG_GENERAL_CONFIRM_NO.get());
+      builder.appendCell(INFO_GENERAL_NO.get());
     }
 
     builder.startRow();
@@ -508,10 +570,10 @@
       builder.appendCell(INFO_DSCFG_HELP_FIELD_READ_ONLY.get(d
           .getUserFriendlyName()));
     } else {
-      builder.appendCell(INFO_DSCFG_GENERAL_CONFIRM_NO.get());
+      builder.appendCell(INFO_GENERAL_NO.get());
     }
 
-    TextTablePrinter factory = new TextTablePrinter(out);
+    TextTablePrinter factory = new TextTablePrinter(app.getErrorStream());
     factory.setDisplayHeadings(false);
     factory.setColumnWidth(0, HEADING_WIDTH);
     factory.setColumnWidth(2, 0);
@@ -524,8 +586,8 @@
     if (synopsis == null) {
       switch (action.getType()) {
       case COMPONENT_RESTART:
-        synopsis = INFO_DSCFG_HELP_FIELD_COMPONENT_RESTART.get(
-            d.getUserFriendlyName());
+        synopsis = INFO_DSCFG_HELP_FIELD_COMPONENT_RESTART.get(d
+            .getUserFriendlyName());
         break;
       case SERVER_RESTART:
         synopsis = INFO_DSCFG_HELP_FIELD_SERVER_RESTART.get();
@@ -537,42 +599,110 @@
     }
 
     if (synopsis != null) {
-      out.println();
-      out.println(wrapText(synopsis, MAX_LINE_WIDTH));
+      app.println();
+      app.println(synopsis);
     }
   }
 
-  // The sub-command associated with this handler.
-  private final SubCommand subCommand;
+
+
+  // Displays the property option summary key.
+  private static void displayPropertyOptionKey(ConsoleApplication app) {
+    MessageBuilder builder;
+
+    app.println(INFO_DSCFG_HELP_DESCRIPTION_OPTION.get());
+    app.println();
+
+    builder = new MessageBuilder();
+    builder.append(" r -- ");
+    builder.append(INFO_DSCFG_HELP_DESCRIPTION_READ.get());
+    app.println(builder.toMessage());
+
+    builder = new MessageBuilder();
+    builder.append(" w -- ");
+    builder.append(INFO_DSCFG_HELP_DESCRIPTION_WRITE.get());
+    app.println(builder.toMessage());
+
+    builder = new MessageBuilder();
+    builder.append(" m -- ");
+    builder.append(INFO_DSCFG_HELP_DESCRIPTION_MANDATORY.get());
+    app.println(builder.toMessage());
+
+    builder = new MessageBuilder();
+    builder.append(" s -- ");
+    builder.append(INFO_DSCFG_HELP_DESCRIPTION_SINGLE_VALUED.get());
+    app.println(builder.toMessage());
+
+    builder = new MessageBuilder();
+    builder.append(" a -- ");
+    builder.append(INFO_DSCFG_HELP_DESCRIPTION_ADMIN_ACTION.get());
+    app.println(builder.toMessage());
+  }
+
+
+
+  // Compute the options field.
+  private static String getPropertyOptionSummary(PropertyDefinition<?> pd) {
+    StringBuilder b = new StringBuilder();
+
+    if (pd.hasOption(PropertyOption.MONITORING)
+        || pd.hasOption(PropertyOption.READ_ONLY)) {
+      b.append("r-");
+    } else {
+      b.append("rw");
+    }
+
+    if (pd.hasOption(PropertyOption.MANDATORY)) {
+      b.append('m');
+    } else {
+      b.append('-');
+    }
+
+    if (pd.hasOption(PropertyOption.MULTI_VALUED)) {
+      b.append('-');
+    } else {
+      b.append('s');
+    }
+
+    AdministratorAction action = pd.getAdministratorAction();
+    if (action.getType() != AdministratorAction.Type.NONE) {
+      b.append('a');
+    } else {
+      b.append('-');
+    }
+    return b.toString();
+  }
 
   // The argument which should be used to specify the category of
   // managed object to be retrieved.
   private final StringArgument categoryArgument;
 
-  //The argument which should be used to display inherited properties.
+  // A table listing all the available types of managed object indexed
+  // on their parent type.
+  private final Map<String, Map<String,
+    AbstractManagedObjectDefinition<?, ?>>> categoryMap;
+
+  // The argument which should be used to display inherited
+  // properties.
   private BooleanArgument inheritedModeArgument;
 
+  // The sub-command associated with this handler.
+  private final SubCommand subCommand;
+
+  // A table listing all the available types of managed object indexed
+  // on their tag(s).
+  private final Map<Tag, Map<String,
+    AbstractManagedObjectDefinition<?, ?>>> tagMap;
+
   // The argument which should be used to specify the sub-type of
   // managed object to be retrieved.
   private final StringArgument typeArgument;
 
-  // A table listing all the available types of managed object indexed
-  // on their parent type.
-  private final Map<String,
-    Map<String, AbstractManagedObjectDefinition<?, ?>>> categoryMap;
-
-  // A table listing all the available types of managed object indexed
-  // on their tag(s).
-  private final Map<Tag,
-    Map<String, AbstractManagedObjectDefinition<?, ?>>> tagMap;
-
 
 
   // Private constructor.
-  private HelpSubCommandHandler(ConsoleApplication app,
-      SubCommandArgumentParser parser) throws ArgumentException {
-    super(app);
-
+  private HelpSubCommandHandler(SubCommandArgumentParser parser)
+      throws ArgumentException {
     // Create the sub-command.
     String name = "list-properties";
     Message desc = INFO_DSCFG_DESCRIPTION_SUBCMD_HELPPROP.get();
@@ -580,8 +710,8 @@
 
     this.categoryArgument = new StringArgument(OPTION_DSCFG_LONG_CATEGORY,
         OPTION_DSCFG_SHORT_CATEGORY, OPTION_DSCFG_LONG_CATEGORY, false, false,
-        true, "{CATEGORY}", null, null,
-        INFO_DSCFG_DESCRIPTION_HELP_CATEGORY.get());
+        true, "{CATEGORY}", null, null, INFO_DSCFG_DESCRIPTION_HELP_CATEGORY
+            .get());
     this.subCommand.addArgument(this.categoryArgument);
 
     this.typeArgument = new StringArgument(OPTION_DSCFG_LONG_TYPE,
@@ -591,8 +721,8 @@
 
     this.inheritedModeArgument = new BooleanArgument(
         OPTION_DSCFG_LONG_INHERITED, OPTION_DSCFG_SHORT_INHERITED,
-        OPTION_DSCFG_LONG_INHERITED,
-        INFO_DSCFG_DESCRIPTION_HELP_INHERITED.get());
+        OPTION_DSCFG_LONG_INHERITED, INFO_DSCFG_DESCRIPTION_HELP_INHERITED
+            .get());
     subCommand.addArgument(inheritedModeArgument);
 
     // Register common arguments.
@@ -600,10 +730,10 @@
         INFO_DSCFG_DESCRIPTION_ADVANCED_HELP.get());
     registerPropertyNameArgument(this.subCommand);
 
-    this.categoryMap = new TreeMap<String,
-      Map<String, AbstractManagedObjectDefinition<?, ?>>>();
-    this.tagMap = new HashMap<Tag,
-      Map<String, AbstractManagedObjectDefinition<?, ?>>>();
+    this.categoryMap =
+      new TreeMap<String, Map<String, AbstractManagedObjectDefinition<?, ?>>>();
+    this.tagMap =
+      new HashMap<Tag, Map<String, AbstractManagedObjectDefinition<?, ?>>>();
   }
 
 
@@ -676,7 +806,9 @@
    * {@inheritDoc}
    */
   @Override
-  public int run() throws ArgumentException, ClientException {
+  public MenuResult<Integer> run(ConsoleApplication app,
+      ManagementContextFactory factory) throws ArgumentException,
+      ClientException, CLIException {
     String categoryName = categoryArgument.getValue();
     String typeName = typeArgument.getValue();
     Tag tag = null;
@@ -774,36 +906,26 @@
       }
     }
 
-    if (!getConsoleApplication().isVerbose()) {
-      displayNonVerbose(categoryName, typeName, tag, propertyNames);
+    // Output everything to the output stream.
+    app = new OutputStreamConsoleApplication(app);
+    if (!app.isVerbose()) {
+      displayNonVerbose(app, categoryName, typeName, tag, propertyNames);
     } else {
-      displayVerbose(categoryName, typeName, tag, propertyNames);
+      displayVerbose(app, categoryName, typeName, tag, propertyNames);
     }
 
-    return 0;
+    return MenuResult.success(0);
   }
 
 
 
   // Output property summary table.
-  private void displayNonVerbose(String categoryName, String typeName,
-      Tag tag, Set<String> propertyNames) {
-    PrintStream out = getConsoleApplication().getOutputStream();
-    if (!getConsoleApplication().isScriptFriendly()) {
-      out.println(INFO_DSCFG_HELP_DESCRIPTION_OPTION.get());
-      out.println();
-      out.print(" r -- ");
-      out.println(INFO_DSCFG_HELP_DESCRIPTION_READ.get());
-      out.print(" w -- ");
-      out.println(INFO_DSCFG_HELP_DESCRIPTION_WRITE.get());
-      out.print(" m -- ");
-      out.println(INFO_DSCFG_HELP_DESCRIPTION_MANDATORY.get());
-      out.print(" s -- ");
-      out.println(INFO_DSCFG_HELP_DESCRIPTION_SINGLE_VALUED.get());
-      out.print(" a -- ");
-      out.println(INFO_DSCFG_HELP_DESCRIPTION_ADMIN_ACTION.get());
-      out.println();
-      out.println();
+  private void displayNonVerbose(ConsoleApplication app, String categoryName,
+      String typeName, Tag tag, Set<String> propertyNames) {
+    if (!app.isScriptFriendly()) {
+      displayPropertyOptionKey(app);
+      app.println();
+      app.println();
     }
 
     // Headings.
@@ -894,10 +1016,10 @@
     }
 
     TablePrinter printer;
-    if (getConsoleApplication().isScriptFriendly()) {
-      printer = createScriptFriendlyTablePrinter(out);
+    if (app.isScriptFriendly()) {
+      printer = createScriptFriendlyTablePrinter(app.getOutputStream());
     } else {
-      printer = new TextTablePrinter(out);
+      printer = new TextTablePrinter(app.getOutputStream());
     }
     builder.print(printer);
   }
@@ -905,15 +1027,22 @@
 
 
   // Display detailed help on managed objects and their properties.
-  private void displayVerbose(String categoryName, String typeName,
-      Tag tag, Set<String> propertyNames) {
-    PrintStream out = getConsoleApplication().getOutputStream();
-
+  private void displayVerbose(ConsoleApplication app, String categoryName,
+      String typeName, Tag tag, Set<String> propertyNames) {
     // Construct line used to separate consecutive sections.
-    char[] c1 = new char[MAX_LINE_WIDTH];
-    Arrays.fill(c1, '=');
-    char[] c2 = new char[MAX_LINE_WIDTH];
-    Arrays.fill(c2, '-');
+    MessageBuilder mb;
+
+    mb = new MessageBuilder();
+    for (int i = 0; i < MAX_LINE_WIDTH; i++) {
+      mb.append('=');
+    }
+    Message c1 = mb.toMessage();
+
+    mb = new MessageBuilder();
+    for (int i = 0; i < MAX_LINE_WIDTH; i++) {
+      mb.append('-');
+    }
+    Message c2 = mb.toMessage();
 
     // Display help for each managed object.
     boolean isFirstManagedObject = true;
@@ -973,67 +1102,33 @@
             // managed
             // object.
             if (!isFirstManagedObject) {
-              out.println();
-              out.println(c1);
-              out.println();
+              app.println();
+              app.println(c1);
+              app.println();
             } else {
               isFirstManagedObject = false;
             }
 
             // Display the title.
-            out.println(wrapText(INFO_DSCFG_HELP_HEADING_COMPONENT.get(
-                    mod.getUserFriendlyName()), MAX_LINE_WIDTH));
+            app.println(INFO_DSCFG_HELP_HEADING_COMPONENT.get(mod
+                .getUserFriendlyName()));
 
-            out.println();
-            out.println(wrapText(mod.getSynopsis(), MAX_LINE_WIDTH));
+            app.println();
+            app.println(mod.getSynopsis());
             if (mod.getDescription() != null) {
-              out.println();
-              out.println(wrapText(mod.getDescription(), MAX_LINE_WIDTH));
+              app.println();
+              app.println(mod.getDescription());
             }
           }
 
-          out.println();
-          out.println(c2);
-          out.println();
+          app.println();
+          app.println(c2);
+          app.println();
 
-          displayVerboseSingleProperty(mod, pd.getName(), out);
+          displayVerboseSingleProperty(app, mod, pd.getName());
           isFirstProperty = false;
         }
       }
     }
   }
-
-
-
-  // Compute the options field.
-  private String getPropertyOptionSummary(PropertyDefinition<?> pd) {
-    StringBuilder b = new StringBuilder();
-
-    if (pd.hasOption(PropertyOption.MONITORING)
-        || pd.hasOption(PropertyOption.READ_ONLY)) {
-      b.append("r-");
-    } else {
-      b.append("rw");
-    }
-
-    if (pd.hasOption(PropertyOption.MANDATORY)) {
-      b.append('m');
-    } else {
-      b.append('-');
-    }
-
-    if (pd.hasOption(PropertyOption.MULTI_VALUED)) {
-      b.append('-');
-    } else {
-      b.append('s');
-    }
-
-    AdministratorAction action = pd.getAdministratorAction();
-    if (action.getType() != AdministratorAction.Type.NONE) {
-      b.append('a');
-    } else {
-      b.append('-');
-    }
-    return b.toString();
-  }
 }

--
Gitblit v1.10.0