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/09 12:15:54 UTC

svn commit: r995370 - in /karaf/trunk/shell: commands/src/main/java/org/apache/karaf/shell/commands/ commands/src/main/resources/org/ commands/src/main/resources/org/apache/ commands/src/main/resources/org/apache/karaf/ commands/src/main/resources/org/...

Author: gnodet
Date: Thu Sep  9 10:15:53 2010
New Revision: 995370

URL: http://svn.apache.org/viewvc?rev=995370&view=rev
Log:
KARAF-193: it should be possible to load a Command description from a text file

Added:
    karaf/trunk/shell/commands/src/main/resources/org/
    karaf/trunk/shell/commands/src/main/resources/org/apache/
    karaf/trunk/shell/commands/src/main/resources/org/apache/karaf/
    karaf/trunk/shell/commands/src/main/resources/org/apache/karaf/shell/
    karaf/trunk/shell/commands/src/main/resources/org/apache/karaf/shell/commands/
    karaf/trunk/shell/commands/src/main/resources/org/apache/karaf/shell/commands/grep.txt
Modified:
    karaf/trunk/shell/commands/src/main/java/org/apache/karaf/shell/commands/GrepAction.java
    karaf/trunk/shell/console/src/main/java/org/apache/felix/gogo/commands/Command.java
    karaf/trunk/shell/console/src/main/java/org/apache/felix/gogo/commands/basic/DefaultActionPreparator.java

Modified: karaf/trunk/shell/commands/src/main/java/org/apache/karaf/shell/commands/GrepAction.java
URL: http://svn.apache.org/viewvc/karaf/trunk/shell/commands/src/main/java/org/apache/karaf/shell/commands/GrepAction.java?rev=995370&r1=995369&r2=995370&view=diff
==============================================================================
--- karaf/trunk/shell/commands/src/main/java/org/apache/karaf/shell/commands/GrepAction.java (original)
+++ karaf/trunk/shell/commands/src/main/java/org/apache/karaf/shell/commands/GrepAction.java Thu Sep  9 10:15:53 2010
@@ -34,7 +34,7 @@ import org.apache.felix.gogo.commands.Co
 import org.fusesource.jansi.Ansi;
 
 
-@Command(scope = "shell", name="grep", description="Prints lines matching the given pattern")
+@Command(scope = "shell", name="grep", description="Prints lines matching the given pattern", detailedDescription="classpath:grep.txt")
 public class GrepAction extends AbstractAction {
 
     public static enum ColorOption {

Added: karaf/trunk/shell/commands/src/main/resources/org/apache/karaf/shell/commands/grep.txt
URL: http://svn.apache.org/viewvc/karaf/trunk/shell/commands/src/main/resources/org/apache/karaf/shell/commands/grep.txt?rev=995370&view=auto
==============================================================================
--- karaf/trunk/shell/commands/src/main/resources/org/apache/karaf/shell/commands/grep.txt (added)
+++ karaf/trunk/shell/commands/src/main/resources/org/apache/karaf/shell/commands/grep.txt Thu Sep  9 10:15:53 2010
@@ -0,0 +1 @@
+Grep uses Java regular expressions for pattern matching.  For more informations, see http://download.oracle.com/javase/1.5.0/docs/api/java/util/regex/Pattern.html

Modified: karaf/trunk/shell/console/src/main/java/org/apache/felix/gogo/commands/Command.java
URL: http://svn.apache.org/viewvc/karaf/trunk/shell/console/src/main/java/org/apache/felix/gogo/commands/Command.java?rev=995370&r1=995369&r2=995370&view=diff
==============================================================================
--- karaf/trunk/shell/console/src/main/java/org/apache/felix/gogo/commands/Command.java (original)
+++ karaf/trunk/shell/console/src/main/java/org/apache/felix/gogo/commands/Command.java Thu Sep  9 10:15:53 2010
@@ -45,4 +45,9 @@ public @interface Command
      * Returns the description of the command which is used to generate command line help
      */
     String description() default "";
+
+    /**
+     * Returns a detailed description of the command
+     */
+    String detailedDescription() default "";
 }

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=995370&r1=995369&r2=995370&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 Thu Sep  9 10:15:53 2010
@@ -18,9 +18,15 @@
  */
 package org.apache.felix.gogo.commands.basic;
 
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.io.Reader;
+import java.io.StringWriter;
 import java.lang.annotation.Annotation;
 import java.lang.reflect.Field;
 import java.lang.reflect.Type;
+import java.net.URL;
 import java.util.*;
 import java.io.PrintStream;
 import java.util.regex.Matcher;
@@ -476,6 +482,42 @@ public class DefaultActionPreparator imp
             }
             out.println();
         }
+        if (command.detailedDescription().length() > 0) {
+            out.println(Ansi.ansi().a(Ansi.Attribute.INTENSITY_BOLD).a("DETAILS").a(Ansi.Attribute.RESET));
+            String desc = loadDescription(action.getClass(), command.detailedDescription());
+            printFormatted("        ", desc, term != null ? term.getTerminalWidth() : 80, out);
+        }
+    }
+
+    private String loadDescription(Class clazz, String desc) {
+        if (desc.startsWith("classpath:")) {
+            InputStream is = clazz.getResourceAsStream(desc.substring("classpath:".length()));
+            if (is == null) {
+                is = clazz.getClassLoader().getResourceAsStream(desc.substring("classpath:".length()));
+            }
+            if (is == null) {
+                desc = "Unable to load description from " + desc;
+            } else {
+                try {
+                    Reader r = new InputStreamReader(is);
+                    StringWriter sw = new StringWriter();
+                    int c;
+                    while ((c = r.read()) != -1) {
+                        sw.append((char) c);
+                    }
+                    desc = sw.toString();
+                } catch (IOException e) {
+                    desc = "Unable to load description from " + desc;
+                } finally {
+                    try {
+                        is.close();
+                    } catch (IOException e) {
+                        // Ignore
+                    }
+                }
+            }
+        }
+        return desc;
     }
 
     // TODO move this to a helper class?