You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@karaf.apache.org by cs...@apache.org on 2013/07/30 09:27:39 UTC
svn commit: r1508327 - in /karaf/trunk:
shell/console/src/main/java/org/apache/karaf/shell/commands/meta/
tooling/karaf-maven-plugin/src/main/java/org/apache/karaf/tooling/commands/
Author: cschneider
Date: Tue Jul 30 07:27:39 2013
New Revision: 1508327
URL: http://svn.apache.org/r1508327
Log:
KARAF-2419 Extract help printing in separate classes
Added:
karaf/trunk/tooling/karaf-maven-plugin/src/main/java/org/apache/karaf/tooling/commands/CommandHelpPrinter.java (with props)
karaf/trunk/tooling/karaf-maven-plugin/src/main/java/org/apache/karaf/tooling/commands/DocBookCommandHelpPrinter.java (with props)
karaf/trunk/tooling/karaf-maven-plugin/src/main/java/org/apache/karaf/tooling/commands/UserConfCommandHelpPrinter.java (with props)
Modified:
karaf/trunk/shell/console/src/main/java/org/apache/karaf/shell/commands/meta/ActionMetaData.java
karaf/trunk/tooling/karaf-maven-plugin/src/main/java/org/apache/karaf/tooling/commands/GenerateHelpMojo.java
Modified: karaf/trunk/shell/console/src/main/java/org/apache/karaf/shell/commands/meta/ActionMetaData.java
URL: http://svn.apache.org/viewvc/karaf/trunk/shell/console/src/main/java/org/apache/karaf/shell/commands/meta/ActionMetaData.java?rev=1508327&r1=1508326&r2=1508327&view=diff
==============================================================================
--- karaf/trunk/shell/console/src/main/java/org/apache/karaf/shell/commands/meta/ActionMetaData.java (original)
+++ karaf/trunk/shell/console/src/main/java/org/apache/karaf/shell/commands/meta/ActionMetaData.java Tue Jul 30 07:27:39 2013
@@ -141,16 +141,14 @@ public class ActionMetaData {
IndentFormatter.printFormatted(" ", argument.description(), termWidth, out);
if (!argument.required()) {
if (argument.valueToShowInHelp() != null && argument.valueToShowInHelp().length() != 0) {
- try {
- if (Argument.DEFAULT_STRING.equals(argument.valueToShowInHelp())) {
- arguments.get(argument).setAccessible(true);
- Object o = arguments.get(argument).get(action);
- printObjectDefaultsTo(out, o);
- } else {
- printDefaultsTo(out, argument.valueToShowInHelp());
+ if (Argument.DEFAULT_STRING.equals(argument.valueToShowInHelp())) {
+ Object o = getDefaultValue(action, argument);
+ String defaultValue = getDefaultValueString(o);
+ if (defaultValue != null) {
+ printDefaultsTo(out, defaultValue);
}
- } catch (Throwable t) {
- // Ignore
+ } else {
+ printDefaultsTo(out, argument.valueToShowInHelp());
}
}
}
@@ -168,16 +166,14 @@ public class ActionMetaData {
out.println(Ansi.ansi().a(Ansi.Attribute.INTENSITY_BOLD).a(opt).a(Ansi.Attribute.RESET));
IndentFormatter.printFormatted(" ", option.description(), termWidth, out);
if (option.valueToShowInHelp() != null && option.valueToShowInHelp().length() != 0) {
- try {
- if (Option.DEFAULT_STRING.equals(option.valueToShowInHelp())) {
- options.get(option).setAccessible(true);
- Object o = options.get(option).get(action);
- printObjectDefaultsTo(out, o);
- } else {
- printDefaultsTo(out, option.valueToShowInHelp());
+ if (Option.DEFAULT_STRING.equals(option.valueToShowInHelp())) {
+ Object o = getDefaultValue(action, option);
+ String defaultValue = getDefaultValueString(o);
+ if (defaultValue != null) {
+ printDefaultsTo(out, defaultValue);
}
- } catch (Throwable t) {
- // Ignore
+ } else {
+ printDefaultsTo(out, option.valueToShowInHelp());
}
}
}
@@ -185,31 +181,53 @@ public class ActionMetaData {
}
if (command.detailedDescription().length() > 0) {
out.println(Ansi.ansi().a(Ansi.Attribute.INTENSITY_BOLD).a("DETAILS").a(Ansi.Attribute.RESET));
- String desc = loadDescription(actionClass, command.detailedDescription());
+ String desc = getDetailedDescription();
IndentFormatter.printFormatted(" ", desc, termWidth, out);
}
}
}
- private String loadDescription(Class clazz, String desc) {
- if (desc.startsWith("classpath:")) {
+ public Object getDefaultValue(Action action, Argument argument) {
+ try {
+ arguments.get(argument).setAccessible(true);
+ return arguments.get(argument).get(action);
+ } catch (Exception e) {
+ return null;
+ }
+ }
+
+ public Object getDefaultValue(Action action, Option option) {
+ try {
+ options.get(option).setAccessible(true);
+ return options.get(option).get(action);
+ } catch (Exception e) {
+ return null;
+ }
+ }
+
+ public String getDetailedDescription() {
+ String desc = command.detailedDescription();
+ return loadDescription(actionClass, desc);
+ }
+
+ private String loadDescription(Class<?> clazz, String desc) {
+ if (desc != null && desc.startsWith("classpath:")) {
desc = ShellUtil.loadClassPathResource(clazz, desc.substring("classpath:".length()));
}
return desc;
}
-
- private void printObjectDefaultsTo(PrintStream out, Object o) {
- if (o != null
- && (!(o instanceof Boolean) || ((Boolean) o))
- && (!(o instanceof Number) || ((Number) o).doubleValue() != 0.0)) {
- printDefaultsTo(out, o.toString());
+
+ public String getDefaultValueString(Object o) {
+ if (o != null && (!(o instanceof Boolean) || ((Boolean)o))
+ && (!(o instanceof Number) || ((Number)o).doubleValue() != 0.0)) {
+ return o.toString();
+ } else {
+ return null;
}
}
private void printDefaultsTo(PrintStream out, String value) {
- out.print(" (defaults to ");
- out.print(value);
- out.println(")");
+ out.println(" (defaults to " + value + ")");
}
}
Added: karaf/trunk/tooling/karaf-maven-plugin/src/main/java/org/apache/karaf/tooling/commands/CommandHelpPrinter.java
URL: http://svn.apache.org/viewvc/karaf/trunk/tooling/karaf-maven-plugin/src/main/java/org/apache/karaf/tooling/commands/CommandHelpPrinter.java?rev=1508327&view=auto
==============================================================================
--- karaf/trunk/tooling/karaf-maven-plugin/src/main/java/org/apache/karaf/tooling/commands/CommandHelpPrinter.java (added)
+++ karaf/trunk/tooling/karaf-maven-plugin/src/main/java/org/apache/karaf/tooling/commands/CommandHelpPrinter.java Tue Jul 30 07:27:39 2013
@@ -0,0 +1,46 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.karaf.tooling.commands;
+
+import java.io.PrintStream;
+import java.util.Map;
+import java.util.Set;
+
+import org.apache.karaf.shell.commands.Action;
+import org.apache.karaf.shell.commands.meta.ActionMetaData;
+
+public interface CommandHelpPrinter {
+ /**
+ * Print help for a single action to the out stream
+ *
+ * @param action
+ * @param actionMeta
+ * @param out stream to write to
+ * @param includeHelpOption include the help option in the doc
+ */
+ void printHelp(Action action, ActionMetaData actionMeta, PrintStream out, boolean includeHelpOption);
+
+ /**
+ * Print the overview of all given commands to the out stream
+ *
+ * @param commands
+ * @param out
+ */
+ void printOverview(Map<String, Set<String>> commands, PrintStream out);
+}
Propchange: karaf/trunk/tooling/karaf-maven-plugin/src/main/java/org/apache/karaf/tooling/commands/CommandHelpPrinter.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: karaf/trunk/tooling/karaf-maven-plugin/src/main/java/org/apache/karaf/tooling/commands/DocBookCommandHelpPrinter.java
URL: http://svn.apache.org/viewvc/karaf/trunk/tooling/karaf-maven-plugin/src/main/java/org/apache/karaf/tooling/commands/DocBookCommandHelpPrinter.java?rev=1508327&view=auto
==============================================================================
--- karaf/trunk/tooling/karaf-maven-plugin/src/main/java/org/apache/karaf/tooling/commands/DocBookCommandHelpPrinter.java (added)
+++ karaf/trunk/tooling/karaf-maven-plugin/src/main/java/org/apache/karaf/tooling/commands/DocBookCommandHelpPrinter.java Tue Jul 30 07:27:39 2013
@@ -0,0 +1,163 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.karaf.tooling.commands;
+
+import java.io.PrintStream;
+import java.lang.reflect.Field;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import org.apache.karaf.shell.commands.Action;
+import org.apache.karaf.shell.commands.Argument;
+import org.apache.karaf.shell.commands.Command;
+import org.apache.karaf.shell.commands.HelpOption;
+import org.apache.karaf.shell.commands.Option;
+import org.apache.karaf.shell.commands.meta.ActionMetaData;
+
+/**
+ * Prints documentation in docbook syntax
+ */
+public class DocBookCommandHelpPrinter implements CommandHelpPrinter {
+
+ @Override
+ public void printHelp(Action action, ActionMetaData actionMeta, PrintStream out, boolean includeHelpOption) {
+
+ Map<Option, Field> optionsMap = actionMeta.getOptions();
+ Map<Argument, Field> argsMap = actionMeta.getArguments();
+ 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()));
+ }
+ });
+ Set<Option> options = new HashSet<Option>(optionsMap.keySet());
+ if (includeHelpOption)
+ options.add(HelpOption.HELP);
+
+ out.println("<section>");
+ out.println(" <title>" + command.scope() + ":" + command.name() + "</title>");
+ out.println(" <section>");
+ out.println(" <title>Description</title>");
+ out.println(" <para>");
+ out.println(command.description());
+ out.println(" </para>");
+ out.println(" </section>");
+
+ 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(" <section>");
+ out.println(" <title>Syntax</title>");
+ out.println(" <para>");
+ out.println(syntax.toString());
+ out.println(" </para>");
+ out.println(" </section>");
+
+ if (arguments.size() > 0) {
+ out.println(" <section>");
+ out.println(" <title>Arguments</title>");
+ out.println(" <informaltable>");
+ for (Argument argument : arguments) {
+ out.println(" <tr>");
+ out.println(" <td>" + argument.name() + "</td>");
+ String description = argument.description();
+ if (!argument.required()) {
+ Object o = actionMeta.getDefaultValue(action, argument);
+ String defaultValue = actionMeta.getDefaultValueString(o);
+ if (defaultValue != null) {
+ description += " (defaults to " + o.toString() + ")";
+ }
+ }
+ out.println(" <td>" + description + "</td>");
+ out.println(" </tr>");
+ }
+
+ out.println(" </informaltable>");
+ out.println(" </section>");
+ }
+
+ if (options.size() > 0) {
+ out.println(" <section>");
+ out.println(" <title>Options</title>");
+ out.println(" <informaltable>");
+
+ for (Option option : options) {
+ String opt = option.name();
+ String description = option.description();
+ for (String alias : option.aliases()) {
+ opt += ", " + alias;
+ }
+ Object o = actionMeta.getDefaultValue(action, option);
+ String defaultValue = actionMeta.getDefaultValueString(o);
+ if (defaultValue != null) {
+ description += " (defaults to " + o.toString() + ")";
+ }
+ out.println(" <tr>");
+ out.println(" <td>" + opt + "</td>");
+ out.println(" <td>" + description + "</td>");
+ out.println(" </tr>");
+ }
+
+ out.println(" </informaltable>");
+ out.println(" </section>");
+ }
+
+ String desc = actionMeta.getDetailedDescription();
+ if (desc != null) {
+ out.println(" <section>");
+ out.println(" <title>Details</title>");
+ out.println(" <para>");
+ out.println(desc);
+ out.println(" </para>");
+ out.println(" </section>");
+ }
+ out.println("</section>");
+ }
+
+ @Override
+ public void printOverview(Map<String, Set<String>> commands, PrintStream writer) {
+ 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("</chapter>");
+ }
+
+}
Propchange: karaf/trunk/tooling/karaf-maven-plugin/src/main/java/org/apache/karaf/tooling/commands/DocBookCommandHelpPrinter.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Modified: karaf/trunk/tooling/karaf-maven-plugin/src/main/java/org/apache/karaf/tooling/commands/GenerateHelpMojo.java
URL: http://svn.apache.org/viewvc/karaf/trunk/tooling/karaf-maven-plugin/src/main/java/org/apache/karaf/tooling/commands/GenerateHelpMojo.java?rev=1508327&r1=1508326&r2=1508327&view=diff
==============================================================================
--- karaf/trunk/tooling/karaf-maven-plugin/src/main/java/org/apache/karaf/tooling/commands/GenerateHelpMojo.java (original)
+++ karaf/trunk/tooling/karaf-maven-plugin/src/main/java/org/apache/karaf/tooling/commands/GenerateHelpMojo.java Tue Jul 30 07:27:39 2013
@@ -17,19 +17,13 @@
*/
package org.apache.karaf.tooling.commands;
-import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileOutputStream;
-import java.io.OutputStreamWriter;
import java.io.PrintStream;
-import java.io.Writer;
-import java.lang.reflect.Field;
+import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLClassLoader;
import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
@@ -37,13 +31,10 @@ import java.util.TreeMap;
import java.util.TreeSet;
import org.apache.karaf.shell.commands.Action;
-import org.apache.karaf.shell.commands.Argument;
import org.apache.karaf.shell.commands.Command;
-import org.apache.karaf.shell.commands.HelpOption;
-import org.apache.karaf.shell.commands.Option;
import org.apache.karaf.shell.commands.meta.ActionMetaData;
import org.apache.karaf.shell.commands.meta.ActionMetaDataFactory;
-import org.apache.karaf.shell.util.ShellUtil;
+import org.apache.maven.artifact.DependencyResolutionRequiredException;
import org.apache.maven.plugin.AbstractMojo;
import org.apache.maven.plugin.MojoExecutionException;
import org.apache.maven.plugin.MojoFailureException;
@@ -80,12 +71,13 @@ public class GenerateHelpMojo extends Ab
/**
* The output format
*
- * @parameter default-value="docbx";
+ * @parameter default-value="docbx" expression="${format}"
*/
protected String format;
/**
- * The classloader to use for loading the commands
+ * The classloader to use for loading the commands.
+ * Can be "project" or "plugin"
*
* @parameter default-value="project"
*/
@@ -110,46 +102,34 @@ public class GenerateHelpMojo extends Ab
targetFolder.mkdirs();
}
- ClassFinder finder;
- if ("project".equals(classLoader)) {
- List<URL> urls = new ArrayList<URL>();
- for (Object object : project.getCompileClasspathElements()) {
- String path = (String) object;
- urls.add(new File(path).toURI().toURL());
- }
- ClassLoader loader = new URLClassLoader(urls.toArray(new URL[urls.size()]), getClass().getClassLoader());
- finder = new ClassFinder(loader, urls);
- } else if ("plugin".equals(classLoader)) {
- finder = new ClassFinder(getClass().getClassLoader());
- } else {
- throw new MojoFailureException("classLoader attribute must be 'project' or 'plugin'");
- }
+ ClassFinder finder = createFinder(classLoader);
List<Class<?>> classes = finder.findAnnotatedClasses(Command.class);
if (classes.isEmpty()) {
throw new MojoFailureException("No command found");
}
+
+ CommandHelpPrinter helpPrinter = FORMAT_DOCBX.equals(format)
+ ? new DocBookCommandHelpPrinter()
+ : new UserConfCommandHelpPrinter();
Map<String, Set<String>> commands = new TreeMap<String, Set<String>>();
- for (Class clazz : classes) {
+ String commandSuffix = FORMAT_DOCBX.equals(format) ? "xml" : "conf";
+ for (Class<?> clazz : classes) {
try {
Action action = (Action) clazz.newInstance();
ActionMetaData meta = new ActionMetaDataFactory().create(action.getClass());
- String help = printHelp(action, meta, format, includeHelpOption);
Command cmd = meta.getCommand();
- File output = null;
// skip the *-help command
if (cmd.scope().equals("*")) continue;
- 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();
+ File output = new File(targetFolder, cmd.scope() + "-" + cmd.name() + "." + commandSuffix);
+ FileOutputStream outStream = new FileOutputStream(output);
+ PrintStream out = new PrintStream(outStream);
+ helpPrinter.printHelp(action, meta, out, includeHelpOption);
+ out.close();
+ outStream.close();
Set<String> cmds = commands.get(cmd.scope());
if (cmds == null) {
@@ -163,264 +143,32 @@ public class GenerateHelpMojo extends Ab
}
}
- 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("</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 + "|" + key + "-" + cmd + "]");
- }
- writer.println();
- }
- writer.close();
- }
-
+ String overViewSuffix = FORMAT_DOCBX.equals(format) ? "xml" : "conf";
+ PrintStream writer = new PrintStream(new FileOutputStream(new File(targetFolder, "commands." + overViewSuffix)));
+ helpPrinter.printOverview(commands, writer);
+ writer.close();
} catch (Exception e) {
throw new MojoExecutionException("Error building commands help", e);
}
}
- public String printHelp(Action action, ActionMetaData meta, String format, boolean includeHelpOption) throws Exception {
- ByteArrayOutputStream baos = new ByteArrayOutputStream();
- PrintStream newout = new PrintStream(baos);
-
- if (FORMAT_DOCBX.equals(format)) {
- printUsageDocBook(action, meta, newout, includeHelpOption);
+ private ClassFinder createFinder(String classloaderType) throws DependencyResolutionRequiredException, MalformedURLException,
+ Exception, MojoFailureException {
+ ClassFinder finder;
+ if ("project".equals(classloaderType)) {
+ List<URL> urls = new ArrayList<URL>();
+ for (Object object : project.getCompileClasspathElements()) {
+ String path = (String) object;
+ urls.add(new File(path).toURI().toURL());
+ }
+ ClassLoader loader = new URLClassLoader(urls.toArray(new URL[urls.size()]), getClass().getClassLoader());
+ finder = new ClassFinder(loader, urls);
+ } else if ("plugin".equals(classLoader)) {
+ finder = new ClassFinder(getClass().getClassLoader());
} else {
- printUsageConf(action, meta, newout, includeHelpOption);
+ throw new MojoFailureException("classLoader attribute must be 'project' or 'plugin'");
}
-
- meta.printUsage(action, newout, false, 80);
- newout.close();
- baos.close();
- return baos.toString();
+ return finder;
}
- private void printUsageConf(Action action, ActionMetaData actionMeta, PrintStream out, boolean includeHelpOption) {
- Map<Option, Field> optionsMap = actionMeta.getOptions();
- Map<Argument, Field> argsMap = actionMeta.getArguments();
- 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()));
- }
- });
- Set<Option> options = new HashSet<Option>(optionsMap.keySet());
- if (includeHelpOption)
- options.add(HelpOption.HELP);
-
- out.println("<section>");
- out.print(" <title>");
- out.print(command.scope());
- out.print(":");
- out.print(command.name());
- out.println("</title>");
- out.println(" <section>");
- out.println(" <title>Description</title>");
- out.println(" <para>");
- out.println(command.description());
- out.println(" </para>");
- out.println(" </section>");
-
- 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(" <section>");
- out.println(" <title>Syntax</title>");
- out.println(" <para>");
- out.println(syntax.toString());
- out.println(" </para>");
- out.println(" </section>");
-
- if (arguments.size() > 0) {
- out.println(" <section>");
- out.println(" <title>Arguments</title>");
- out.println(" <informaltable>");
- for (Argument argument : arguments) {
- out.println(" <tr>");
- out.println(" <td>" + argument.name() + "</td>");
- 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 (Exception e) {
- // Ignore
- }
- }
- out.println(" <td>" + description + "</td>");
- out.println(" </tr>");
- }
-
- out.println(" </informaltable>");
- out.println(" </section>");
- }
- if (options.size() > 0) {
- out.println(" <section>");
- out.println(" <title>Options</title>");
- out.println(" <informaltable>");
-
- for (Option option : options) {
- String opt = option.name();
- String description = option.description();
- for (String alias : option.aliases()) {
- opt += ", " + alias;
- }
- try {
- optionsMap.get(option).get(action);
- Object o = optionsMap.get(option).get(action);
- if (o != null && (!(o instanceof Boolean) || ((Boolean) o))
- && (!(o instanceof Number) || ((Number) o).doubleValue() != 0.0)) {
- description += " (defaults to " + o.toString() + ")";
- }
-
- } catch (Exception e) {
-
- }
- out.println(" <tr>");
- out.println(" <td>" + opt + "</td>");
- out.println(" <td>" + description + "</td>");
- out.println(" </tr>");
- }
-
- out.println(" </informaltable>");
- out.println(" </section>");
-
- if (command.detailedDescription() != null && command.detailedDescription().trim().length() > 0) {
- out.println("<section>");
- out.println(" <title>Details</title>");
- String description = loadDescription(action.getClass(), command.detailedDescription());
- out.println(" <para>");
-
- }
- }
- out.println("</section>");
- }
-
- private void printUsageDocBook(Action action, ActionMetaData actionMeta, PrintStream out, boolean includeHelpOption) {
- Map<Option, Field> optionsMap = actionMeta.getOptions();
- Map<Argument, Field> argsMap = actionMeta.getArguments();
- Command command = actionMeta.getCommand();
- 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()));
- }
- });
- Set<Option> options = new HashSet<Option>(optionsMap.keySet());
- if (includeHelpOption)
- options.add(HelpOption.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");
- out.println("|| Name || Description ||");
- for (Argument argument : arguments) {
- 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();
- }
- if (options.size() > 0) {
- out.println("h2. Options");
- out.println("|| Name || Description ||");
- for (Option option : options) {
- String opt = option.name();
- String desc = option.description();
- for (String alias : option.aliases()) {
- opt += ", " + alias;
- }
- 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();
- }
- if (command.detailedDescription().length() > 0) {
- out.println("h2. Details");
- String desc = loadDescription(action.getClass(), command.detailedDescription());
- out.println(desc);
- }
- out.println();
- }
-
- private String loadDescription(Class clazz, String desc) {
- if (desc.startsWith("classpath:")) {
- desc = ShellUtil.loadClassPathResource(clazz, desc.substring("classpath:".length()));
- }
- return desc;
- }
-
}
Added: karaf/trunk/tooling/karaf-maven-plugin/src/main/java/org/apache/karaf/tooling/commands/UserConfCommandHelpPrinter.java
URL: http://svn.apache.org/viewvc/karaf/trunk/tooling/karaf-maven-plugin/src/main/java/org/apache/karaf/tooling/commands/UserConfCommandHelpPrinter.java?rev=1508327&view=auto
==============================================================================
--- karaf/trunk/tooling/karaf-maven-plugin/src/main/java/org/apache/karaf/tooling/commands/UserConfCommandHelpPrinter.java (added)
+++ karaf/trunk/tooling/karaf-maven-plugin/src/main/java/org/apache/karaf/tooling/commands/UserConfCommandHelpPrinter.java Tue Jul 30 07:27:39 2013
@@ -0,0 +1,136 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.karaf.tooling.commands;
+
+import java.io.PrintStream;
+import java.lang.reflect.Field;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import org.apache.karaf.shell.commands.Action;
+import org.apache.karaf.shell.commands.Argument;
+import org.apache.karaf.shell.commands.Command;
+import org.apache.karaf.shell.commands.HelpOption;
+import org.apache.karaf.shell.commands.Option;
+import org.apache.karaf.shell.commands.meta.ActionMetaData;
+
+/**
+ * Prints documentation in wiki syntax
+ */
+public class UserConfCommandHelpPrinter implements CommandHelpPrinter {
+
+ @Override
+ public void printHelp(Action action, ActionMetaData actionMeta, PrintStream out, boolean includeHelpOption) {
+ Map<Option, Field> optionsMap = actionMeta.getOptions();
+ Map<Argument, Field> argsMap = actionMeta.getArguments();
+ Command command = actionMeta.getCommand();
+ 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()));
+ }
+ });
+ Set<Option> options = new HashSet<Option>(optionsMap.keySet());
+ if (includeHelpOption)
+ options.add(HelpOption.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");
+ out.println("|| Name || Description ||");
+ for (Argument argument : arguments) {
+ String description = argument.description();
+ if (!argument.required()) {
+ Object o = actionMeta.getDefaultValue(action, argument);
+ String defaultValue = actionMeta.getDefaultValueString(o);
+ if (defaultValue != null) {
+ description += " (defaults to " + o.toString() + ")";
+ }
+ }
+ out.println("| " + argument.name() + " | " + description + " |");
+ }
+ out.println();
+ }
+ if (options.size() > 0) {
+ out.println("h2. Options");
+ out.println("|| Name || Description ||");
+ for (Option option : options) {
+ String opt = option.name();
+ String desc = option.description();
+ for (String alias : option.aliases()) {
+ opt += ", " + alias;
+ }
+ Object o = actionMeta.getDefaultValue(action, option);
+ String defaultValue = actionMeta.getDefaultValueString(o);
+ if (defaultValue != null) {
+ desc += " (defaults to " + defaultValue + ")";
+ }
+ out.println("| " + opt + " | " + desc + " |");
+ }
+ out.println();
+ }
+ String detailedDesc = actionMeta.getDetailedDescription();
+ if (detailedDesc != null) {
+ out.println("h2. Details");
+ out.println(detailedDesc);
+ }
+ out.println();
+ }
+
+ @Override
+ public void printOverview(Map<String, Set<String>> commands, PrintStream writer) {
+ 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 + "|" + key + "-" + cmd + "]");
+ }
+ writer.println();
+ }
+ }
+
+}
Propchange: karaf/trunk/tooling/karaf-maven-plugin/src/main/java/org/apache/karaf/tooling/commands/UserConfCommandHelpPrinter.java
------------------------------------------------------------------------------
svn:mime-type = text/plain