You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@karaf.apache.org by gn...@apache.org on 2010/09/07 15:26:47 UTC

svn commit: r993350 - in /karaf/trunk: shell/console/src/main/java/org/apache/felix/gogo/commands/basic/DefaultActionPreparator.java tooling/cmdhelp-maven-plugin/src/main/java/org/apache/karaf/tooling/cmdhelp/CmdHelpMojo.java

Author: gnodet
Date: Tue Sep  7 13:26:47 2010
New Revision: 993350

URL: http://svn.apache.org/viewvc?rev=993350&view=rev
Log:
KARAF-155: print default (non trivial) values for arguments and options when showing the help for a command

Modified:
    karaf/trunk/shell/console/src/main/java/org/apache/felix/gogo/commands/basic/DefaultActionPreparator.java
    karaf/trunk/tooling/cmdhelp-maven-plugin/src/main/java/org/apache/karaf/tooling/cmdhelp/CmdHelpMojo.java

Modified: karaf/trunk/shell/console/src/main/java/org/apache/felix/gogo/commands/basic/DefaultActionPreparator.java
URL: http://svn.apache.org/viewvc/karaf/trunk/shell/console/src/main/java/org/apache/felix/gogo/commands/basic/DefaultActionPreparator.java?rev=993350&r1=993349&r2=993350&view=diff
==============================================================================
--- karaf/trunk/shell/console/src/main/java/org/apache/felix/gogo/commands/basic/DefaultActionPreparator.java (original)
+++ karaf/trunk/shell/console/src/main/java/org/apache/felix/gogo/commands/basic/DefaultActionPreparator.java Tue Sep  7 13:26:47 2010
@@ -135,7 +135,7 @@ public class DefaultActionPreparator imp
             Object param = it.next();
             // Check for help
             if (HELP.name().equals(param) || Arrays.asList(HELP.aliases()).contains(param)) {
-                printUsage(session, action.getClass().getAnnotation(Command.class), options.keySet(), arguments.keySet(), System.out);
+                printUsage(session, action, options, arguments, System.out);
                 return false;
             }
             if (processOptions && param instanceof String && ((String) param).startsWith("-")) {
@@ -226,16 +226,17 @@ public class DefaultActionPreparator imp
         return true;
     }
 
-    protected void printUsage(CommandSession session, Command command, Set<Option> options, Set<Argument> args, PrintStream out)
+    protected void printUsage(CommandSession session, Action action, Map<Option,Field> optionsMap, Map<Argument,Field> argsMap, PrintStream out)
     {
+        Command command = action.getClass().getAnnotation(Command.class);
         Terminal term = (Terminal) session.get(".jline.terminal");
-        List<Argument> arguments = new ArrayList<Argument>(args);
+        List<Argument> arguments = new ArrayList<Argument>(argsMap.keySet());
         Collections.sort(arguments, new Comparator<Argument>() {
             public int compare(Argument o1, Argument o2) {
                 return Integer.valueOf(o1.index()).compareTo(Integer.valueOf(o2.index()));
             }
         });
-        options = new HashSet<Option>(options);
+        Set<Option> options = new HashSet<Option>(optionsMap.keySet());
         options.add(HELP);
         if (command != null && (command.description() != null || command.name() != null))
         {
@@ -286,6 +287,21 @@ public class DefaultActionPreparator imp
                 out.print("        ");
                 out.println(Ansi.ansi().a(Ansi.Attribute.INTENSITY_BOLD).a(argument.name()).a(Ansi.Attribute.RESET));
                 printFormatted("                ", argument.description(), term != null ? term.getTerminalWidth() : 80, out);
+                if (!argument.required()) {
+                    try {
+                        argsMap.get(argument).setAccessible(true);
+                        Object o = argsMap.get(argument).get(action);
+                        if (o != null
+                                && (!(o instanceof Boolean) || ((Boolean) o))
+                                && (!(o instanceof Number) || ((Number) o).doubleValue() != 0.0)) {
+                            out.print("                    (defaults to ");
+                            out.print(o.toString());
+                            out.println(")");
+                        }
+                    } catch (Throwable t) {
+                        // Ignore
+                    }
+                }
             }
             out.println();
         }
@@ -302,6 +318,19 @@ public class DefaultActionPreparator imp
                 out.print("        ");
                 out.println(Ansi.ansi().a(Ansi.Attribute.INTENSITY_BOLD).a(opt).a(Ansi.Attribute.RESET));
                 printFormatted("                ", option.description(), term != null ? term.getTerminalWidth() : 80, out);
+                try {
+                    optionsMap.get(option).setAccessible(true);
+                    Object o = optionsMap.get(option).get(action);
+                    if (o != null
+                            && (!(o instanceof Boolean) || ((Boolean) o))
+                            && (!(o instanceof Number) || ((Number) o).doubleValue() != 0.0)) {
+                        out.print("                (defaults to ");
+                        out.print(o.toString());
+                        out.println(")");
+                    }
+                } catch (Throwable t) {
+                    // Ignore
+                }
             }
             out.println();
         }

Modified: karaf/trunk/tooling/cmdhelp-maven-plugin/src/main/java/org/apache/karaf/tooling/cmdhelp/CmdHelpMojo.java
URL: http://svn.apache.org/viewvc/karaf/trunk/tooling/cmdhelp-maven-plugin/src/main/java/org/apache/karaf/tooling/cmdhelp/CmdHelpMojo.java?rev=993350&r1=993349&r2=993350&view=diff
==============================================================================
--- karaf/trunk/tooling/cmdhelp-maven-plugin/src/main/java/org/apache/karaf/tooling/cmdhelp/CmdHelpMojo.java (original)
+++ karaf/trunk/tooling/cmdhelp-maven-plugin/src/main/java/org/apache/karaf/tooling/cmdhelp/CmdHelpMojo.java Tue Sep  7 13:26:47 2010
@@ -24,6 +24,7 @@ import java.io.InputStream;
 import java.io.OutputStreamWriter;
 import java.io.PrintStream;
 import java.io.Writer;
+import java.lang.reflect.Field;
 import java.net.URL;
 import java.net.URLClassLoader;
 import java.util.ArrayList;
@@ -206,15 +207,16 @@ public class CmdHelpMojo extends Abstrac
         protected class DocbxPreparator extends BlueprintActionPreparator {
 
             @Override
-            protected void printUsage(CommandSession session, Command command, Set<Option> options, Set<Argument> args, PrintStream out)
+            protected void printUsage(CommandSession session, Action action, Map<Option,Field> optionsMap, Map<Argument,Field> argsMap, PrintStream out)
             {
-                List<Argument> arguments = new ArrayList<Argument>(args);
+                Command command = action.getClass().getAnnotation(Command.class);
+                List<Argument> arguments = new ArrayList<Argument>(argsMap.keySet());
                 Collections.sort(arguments, new Comparator<Argument>() {
                     public int compare(Argument o1, Argument o2) {
                         return Integer.valueOf(o1.index()).compareTo(Integer.valueOf(o2.index()));
                     }
                 });
-                options = new HashSet<Option>(options);
+                Set<Option> options = new HashSet<Option>(optionsMap.keySet());
                 options.add(HELP);
 
                 out.println("<section>");
@@ -294,15 +296,16 @@ public class CmdHelpMojo extends Abstrac
         protected class ConfPreparator extends BlueprintActionPreparator {
 
             @Override
-            protected void printUsage(CommandSession session, Command command, Set<Option> options, Set<Argument> args, PrintStream out)
+            protected void printUsage(CommandSession session, Action action, Map<Option, Field> optionsMap, Map<Argument,Field> argsMap, PrintStream out)
             {
-                List<Argument> arguments = new ArrayList<Argument>(args);
+                Command command = action.getClass().getAnnotation(Command.class);
+                List<Argument> arguments = new ArrayList<Argument>(argsMap.keySet());
                 Collections.sort(arguments, new Comparator<Argument>() {
                     public int compare(Argument o1, Argument o2) {
                         return Integer.valueOf(o1.index()).compareTo(Integer.valueOf(o2.index()));
                     }
                 });
-                options = new HashSet<Option>(options);
+                Set<Option> options = new HashSet<Option>(optionsMap.keySet());
                 options.add(HELP);
 
                 out.println("h1. " + command.scope() + ":" + command.name());
@@ -332,7 +335,21 @@ public class CmdHelpMojo extends Abstrac
                     out.println("h2. Arguments");
                     for (Argument argument : arguments)
                     {
-                        out.println("| " + argument.name() + " | " + argument.description() + " |");
+                        String description = argument.description();
+                        if (!argument.required()) {
+                            try {
+                                argsMap.get(argument).setAccessible(true);
+                                Object o = argsMap.get(argument).get(action);
+                                if (o != null
+                                        && (!(o instanceof Boolean) || ((Boolean) o))
+                                        && (!(o instanceof Number) || ((Number) o).doubleValue() != 0.0)) {
+                                    description += " (defaults to " + o.toString() + ")";
+                                }
+                            } catch (Throwable t) {
+                                // Ignore
+                            }
+                        }
+                        out.println("| " + argument.name() + " | " + description + " |");
                     }
                     out.println();
                 }
@@ -342,11 +359,23 @@ public class CmdHelpMojo extends Abstrac
                     for (Option option : options)
                     {
                         String opt = option.name();
+                        String desc = option.description();
                         for (String alias : option.aliases())
                         {
                             opt += ", " + alias;
                         }
-                        out.println("| " + opt + " | " + option.description() + " |");
+                        try {
+                            optionsMap.get(option).setAccessible(true);
+                            Object o = optionsMap.get(option).get(action);
+                            if (o != null
+                                    && (!(o instanceof Boolean) || ((Boolean) o))
+                                    && (!(o instanceof Number) || ((Number) o).doubleValue() != 0.0)) {
+                                desc += " (defaults to " + o.toString() + ")";
+                            }
+                        } catch (Throwable t) {
+                            // Ignore
+                        }
+                        out.println("| " + opt + " | " + desc + " |");
                     }
                     out.println();
                 }