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/08/31 19:31:09 UTC

svn commit: r991270 - /karaf/trunk/tooling/cmdhelp-maven-plugin/src/main/java/org/apache/karaf/tooling/cmdhelp/CmdHelpMojo.java

Author: gnodet
Date: Tue Aug 31 17:31:09 2010
New Revision: 991270

URL: http://svn.apache.org/viewvc?rev=991270&view=rev
Log:
KARAF-181: Allow the cmdhelp maven plugin to generate output in confluence format

Modified:
    karaf/trunk/tooling/cmdhelp-maven-plugin/src/main/java/org/apache/karaf/tooling/cmdhelp/CmdHelpMojo.java

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=991270&r1=991269&r2=991270&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 Aug 31 17:31:09 2010
@@ -40,6 +40,7 @@ import org.apache.felix.gogo.commands.Ac
 import org.apache.felix.gogo.commands.Argument;
 import org.apache.felix.gogo.commands.Command;
 import org.apache.felix.gogo.commands.Option;
+import org.apache.felix.gogo.commands.basic.ActionPreparator;
 import org.apache.karaf.shell.console.commands.BlueprintCommand;
 import org.apache.maven.plugin.AbstractMojo;
 import org.apache.maven.plugin.MojoExecutionException;
@@ -76,8 +77,21 @@ public class CmdHelpMojo extends Abstrac
      */
     protected File targetFolder;
 
+    /**
+     * The output format
+     *
+     * @parameter default-value="docbx";
+     */
+    protected String format;
+
+    private static final String FORMAT_CONF = "conf";
+    private static final String FORMAT_DOCBX = "docbx";
+
     public void execute() throws MojoExecutionException, MojoFailureException {
         try {
+            if (!FORMAT_DOCBX.equals(format) && !FORMAT_CONF.equals(format)) {
+                throw new MojoFailureException("Unsupported format: " + format + ". Supported formats are: docbx or conf.");
+            }
             if (!targetFolder.exists()) {
                 targetFolder.mkdirs();
             }
@@ -99,9 +113,14 @@ public class CmdHelpMojo extends Abstrac
 
             for (Class clazz : classes) {
                 try {
-                    String help = new HelpPrinter(clazz).printHelp();
+                    String help = new HelpPrinter(clazz).printHelp(format);
                     Command cmd = (Command) clazz.getAnnotation(Command.class);
-                    File output = new File(targetFolder, cmd.scope() + "-" + cmd.name() + ".xml");
+                    File output = null;
+                    if (FORMAT_DOCBX.equals(format)) {
+                        output = new File(targetFolder, cmd.scope() + "-" + cmd.name() + ".xml");
+                    } else if (FORMAT_CONF.equals(format)) {
+                        output = new File(targetFolder, cmd.scope() + "-" + cmd.name() + ".conf");
+                    }
                     Writer writer = new OutputStreamWriter(new FileOutputStream(output));
                     writer.write(help);
                     writer.close();
@@ -118,21 +137,35 @@ public class CmdHelpMojo extends Abstrac
                 }
             }
 
-            PrintStream writer = new PrintStream(new FileOutputStream(new File(targetFolder, "commands.xml")));
-            writer.println("<chapter id='commands' xmlns:xi=\"http://www.w3.org/2001/XInclude\">");
-            writer.println("  <title>Commands</title>");
-            writer.println("  <toc></toc>");
-
-            for (String key : commands.keySet()) {
-                writer.println("  <section id='commands-" + key + "'>");
-                writer.println("    <title>" + key + "</title>");
-                for (String cmd : commands.get(key)) {
-                    writer.println("    <xi:include href='" + key + "-" + cmd + ".xml' parse='xml'/>");
+            if (FORMAT_DOCBX.equals(format)) {
+                PrintStream writer = new PrintStream(new FileOutputStream(new File(targetFolder, "commands.xml")));
+                writer.println("<chapter id='commands' xmlns:xi=\"http://www.w3.org/2001/XInclude\">");
+                writer.println("  <title>Commands</title>");
+                writer.println("  <toc></toc>");
+                for (String key : commands.keySet()) {
+                    writer.println("  <section id='commands-" + key + "'>");
+                    writer.println("    <title>" + key + "</title>");
+                    for (String cmd : commands.get(key)) {
+                        writer.println("    <xi:include href='" + key + "-" + cmd + ".xml' parse='xml'/>");
+                    }
+                    writer.println("  </section>");
                 }
-                writer.println("  </section>");
+                writer.println("</chapter>");
+                writer.close();
+            } else if (FORMAT_CONF.equals(format)) {
+                PrintStream writer = new PrintStream(new FileOutputStream(new File(targetFolder, "commands.conf")));
+                writer.println("h1. Commands");
+                writer.println();
+                for (String key : commands.keySet()) {
+                    writer.println("h2. " + key);
+                    writer.println();
+                    for (String cmd : commands.get(key)) {
+                        writer.println("* [" + key + "-" + cmd + "]");
+                    }
+                    writer.println();
+                }
+                writer.close();
             }
-            writer.println("</chapter>");
-            writer.close();
 
         } catch (Exception e) {
             throw new MojoExecutionException("Error building commands help", e);
@@ -147,7 +180,7 @@ public class CmdHelpMojo extends Abstrac
             this.actionClass = actionClass;
         }
 
-        public String printHelp() throws Exception {
+        public String printHelp(String format) throws Exception {
             PrintStream oldout = System.out;
             try {
                 Action action = actionClass.newInstance();
@@ -155,7 +188,13 @@ public class CmdHelpMojo extends Abstrac
                 ByteArrayOutputStream baos = new ByteArrayOutputStream();
                 PrintStream newout = new PrintStream(baos);
                 System.setOut(newout);
-                new Preparator().prepare(action, session, Collections.<Object>singletonList("--help"));
+                ActionPreparator preparator;
+                if (FORMAT_DOCBX.equals(format)) {
+                    preparator = new DocbxPreparator();
+                } else {
+                    preparator = new ConfPreparator();
+                }
+                preparator.prepare(action, session, Collections.<Object>singletonList("--help"));
                 newout.close();
                 baos.close();
                 return baos.toString();
@@ -164,7 +203,7 @@ public class CmdHelpMojo extends Abstrac
             }
         }
 
-        protected class Preparator extends BlueprintActionPreparator {
+        protected class DocbxPreparator extends BlueprintActionPreparator {
 
             @Override
             protected void printUsage(CommandSession session, Command command, Set<Option> options, Set<Argument> args, PrintStream out)
@@ -252,6 +291,70 @@ 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)
+            {
+                List<Argument> arguments = new ArrayList<Argument>(args);
+                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);
+                options.add(HELP);
+
+                out.println("h1. " + command.scope() + ":" + command.name());
+                out.println();
+
+                out.println("h2. Description");
+                out.println(command.description());
+                out.println();
+
+                StringBuffer syntax = new StringBuffer();
+                syntax.append(String.format("%s:%s", command.scope(), command.name()));
+                if (options.size() > 0) {
+                    syntax.append(" [options]");
+                }
+                if (arguments.size() > 0) {
+                    syntax.append(' ');
+                    for (Argument argument : arguments) {
+                        syntax.append(String.format(argument.required() ? "%s " : "[%s] ", argument.name()));
+                    }
+                }
+                out.println("h2. Syntax");
+                out.println(syntax.toString());
+                out.println();
+
+                if (arguments.size() > 0)
+                {
+                    out.println("h2. Arguments");
+                    for (Argument argument : arguments)
+                    {
+                        out.println("| " + argument.name() + " | " + argument.description() + " |");
+                    }
+                    out.println();
+                }
+                if (options.size() > 0)
+                {
+                    out.println("h2. Options");
+                    for (Option option : options)
+                    {
+                        String opt = option.name();
+                        for (String alias : option.aliases())
+                        {
+                            opt += ", " + alias;
+                        }
+                        out.println("| " + opt + " | " + option.description() + " |");
+                    }
+                    out.println();
+                }
+                out.println();
+            }
+
+        }
+
         protected static class DummyCommandSession implements CommandSession {
             public Object convert(Class<?> type, Object instance) {
                 return null;