You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@felix.apache.org by ro...@apache.org on 2018/10/01 23:24:17 UTC

svn commit: r1842573 - /felix/site/trunk/content/documentation/subprojects/apache-felix-gogo/rfc-147-overview.mdtext

Author: rotty3000
Date: Mon Oct  1 23:24:17 2018
New Revision: 1842573

URL: http://svn.apache.org/viewvc?rev=1842573&view=rev
Log:
more syntax fixes

Modified:
    felix/site/trunk/content/documentation/subprojects/apache-felix-gogo/rfc-147-overview.mdtext

Modified: felix/site/trunk/content/documentation/subprojects/apache-felix-gogo/rfc-147-overview.mdtext
URL: http://svn.apache.org/viewvc/felix/site/trunk/content/documentation/subprojects/apache-felix-gogo/rfc-147-overview.mdtext?rev=1842573&r1=1842572&r2=1842573&view=diff
==============================================================================
--- felix/site/trunk/content/documentation/subprojects/apache-felix-gogo/rfc-147-overview.mdtext (original)
+++ felix/site/trunk/content/documentation/subprojects/apache-felix-gogo/rfc-147-overview.mdtext Mon Oct  1 23:24:17 2018
@@ -10,12 +10,11 @@ This is an overview of its main features
 
 Commands are registered via service attributes, you don't have to register a specific service. This allows commands to be registered by existing services, just by adding the new attributes:
 
-```java
-Dictionary<String, Object> dict = new Hashtable<String, Object>();
-dict.put(CommandProcessor.COMMAND_SCOPE, "shell");
-dict.put(CommandProcessor.COMMAND_FUNCTION, new String[] {"sleep", "grep"});
-context.registerService(name, service, dict);
-```
+    :::java
+    Dictionary<String, Object> dict = new Hashtable<String, Object>();
+    dict.put(CommandProcessor.COMMAND_SCOPE, "shell");
+    dict.put(CommandProcessor.COMMAND_FUNCTION, new String[] {"sleep", "grep"});
+    context.registerService(name, service, dict);
 
 Scope is used to provide a namespace for commands. The commands above can be invoked as `shell:sleep` and `shell:grep`. If the scope is omitted (e.g. `sleep` and `grep`) then the first matching command is invoked.
 
@@ -23,146 +22,135 @@ Scope is used to provide a namespace for
 
 Arguments are coerced to call the best matching method using reflection. A `CommandSession` argument is inserted if required:
 
-```java
-public void sleep(long millis) throws InterruptedException{
-    Thread.sleep(millis);
-}
-    
-public void sleep(String[] args) throws Exception;
+    :::java
+    public void sleep(long millis) throws InterruptedException{
+        Thread.sleep(millis);
+    }
+        
+    public void sleep(String[] args) throws Exception;
     
-public boolean grep(CommandSession session, String[] args) throws Exception;
-```
+    public boolean grep(CommandSession session, String[] args) throws Exception;
 
 The `CommandSession` interface provides methods for executing commands and getting and setting session variables:
 
-```java
-public interface org.apache.felix.service.command.CommandSession {
-    Object execute(CharSequence commandline) throws Exception;
-    Object get(String name);
-    void put(String name, Object value);
-    ...
-}
-```
+    :::java
+    public interface org.apache.felix.service.command.CommandSession {
+        Object execute(CharSequence commandline) throws Exception;
+        Object get(String name);
+        void put(String name, Object value);
+        ...
+    }
 
 ### Easy to use interactively - no unnecessary syntax.
 
 - basic commands
+    
+        :::shell
+        g! echo hello world
+        hello world
 
-    ```shell
-    g! echo hello world
-    hello world
-    ```
 - session variables
-
-    ```shell
-    g! msg = "hello world"
-    g! echo $msg
-    hello world
-    ```
+    
+        :::shell
+        g! msg = "hello world"
+        g! echo $msg
+        hello world
 
 - execution quotes `()` - similar to bash backquotes
 
-    ```shell
-    g! (bundle 1) location
-    file:/Users/derek/Downloads/felix-framework-3.0.0/bundle/org.apache.felix.bundlerepository-1.6.2.jar
-    ```
+        :::shell
+        g! (bundle 1) location
+        file:/Users/derek/Downloads/felix-framework-3.0.0/bundle/org.apache.felix.bundlerepository-1.6.2.jar
 
 ### Lists, maps, pipes and closures.
 
 - lists - `[]`
-
-    ```shell
-    g! list = [1 2 a b]
-    1
-    2
-    a
-    b
-    ```
+    
+        :::shell
+        g! list = [1 2 a b]
+        1
+        2
+        a
+        b
 
 - maps - `[]`
-    ```shell
-    g! map = [Jan=1 Feb=2 Mar=3]
-    Jan                 1
-    Feb                 2
-    Mar                 3
-    ```
+    
+        :::shell
+        g! map = [Jan=1 Feb=2 Mar=3]
+        Jan                 1
+        Feb                 2
+        Mar                 3
 
 - pipes - `|`
-
-    ```shell
-    g! bundles | grep gogo
-        2|Active     |    1|org.apache.felix.gogo.command (0.6.0)
-        3|Active     |    1|org.apache.felix.gogo.runtime (0.6.0)
-        4|Active     |    1|org.apache.felix.gogo.shell (0.6.0)
-    ```
+    
+        :::shell
+        g! bundles | grep gogo
+            2|Active     |    1|org.apache.felix.gogo.command (0.6.0)
+            3|Active     |    1|org.apache.felix.gogo.runtime (0.6.0)
+            4|Active     |    1|org.apache.felix.gogo.shell (0.6.0)
 
 - closures - `{}`
-
-    ```shell
-    g! echo2 = { echo xxx $args yyy }
-    g! echo2 hello world
-    xxx hello world yyy
-    ```
+    
+        :::shell
+        g! echo2 = { echo xxx $args yyy }
+        g! echo2 hello world
+        xxx hello world yyy
 
 ### Leverages existing Java capabilities, via reflection.
 
 - exception handling - console shows summary, but full context available
-
-    ```shell
-    g! start xxx
-    E: Cannot coerce start[xxx] to any of [(Bundle)]
-    g! $exception printstacktrace
-    java.lang.IllegalArgumentException: Cannot coerce start[xxx] to any of [(Bundle)]
-            at org.apache.felix.gogo.runtime.shell.Reflective.method(Reflective.java:162)
-            at org.apache.felix.gogo.runtime.shell.Command.execute(Command.java:40)
-            at org.apache.felix.gogo.runtime.shell.Closure.execute(Closure.java:211)
-            at org.apache.felix.gogo.runtime.shell.Closure.executeStatement(Closure.java:146)
-            at org.apache.felix.gogo.runtime.shell.Pipe.run(Pipe.java:91)
-    ...
-    ```
+    
+        :::shell
+        g! start xxx
+        E: Cannot coerce start[xxx] to any of [(Bundle)]
+        g! $exception printstacktrace
+        java.lang.IllegalArgumentException: Cannot coerce start[xxx] to any of [(Bundle)]
+                at org.apache.felix.gogo.runtime.shell.Reflective.method(Reflective.java:162)
+                at org.apache.felix.gogo.runtime.shell.Command.execute(Command.java:40)
+                at org.apache.felix.gogo.runtime.shell.Closure.execute(Closure.java:211)
+                at org.apache.felix.gogo.runtime.shell.Closure.executeStatement(Closure.java:146)
+                at org.apache.felix.gogo.runtime.shell.Pipe.run(Pipe.java:91)
+        ...
 
 - add all public methods on `java.lang.System` as commands:
-
-    ```shell
-    g! addcommand system (loadClass java.lang.System)
-    g! system:getproperties
-    sun.io.unicode.encodingUnicodeLittle
-    java.version        1.5.0_19
-    java.class.path     bin/felix.jar
-    java.awt.graphicsenvapple.awt.CGraphicsEnvironment
-    user.language       en
-    sun.os.patch.level  unknown
-    os.version          10.6.2
-    [snip]
-    ```
+    
+        :::shell
+        g! addcommand system (loadClass java.lang.System)
+        g! system:getproperties
+        sun.io.unicode.encodingUnicodeLittle
+        java.version        1.5.0_19
+        java.class.path     bin/felix.jar
+        java.awt.graphicsenvapple.awt.CGraphicsEnvironment
+        user.language       en
+        sun.os.patch.level  unknown
+        os.version          10.6.2
+        [snip]
 
 ### Easy to implement and test commands without needing OSGi.
 
 Command implementations don't need to reference any OSGi interfaces. They can use `System.in`, `System.out` and `System.err`, just as you would in a trivial Java application. The `ThreadIO` service transparently manages the singleton `System.out` etc, so that each thread sees the appropriate stream:
-```java
-public void cat(String[] args) throws Exception {
-    for (String arg : args) {
-        IOUtil.copy(arg, System.out);
+
+    :::java
+    public void cat(String[] args) throws Exception {
+        for (String arg : args) {
+            IOUtil.copy(arg, System.out);
+        }
     }
-}
-```
 
 ## Normal commands can provide control primitives.
 
-```java
-public void each(CommandSession session, Collection<Object> list, Function closure) throws Exception {
-    for (Object x : list) {
-        closure.execute(session, null);
+    :::java
+    public void each(CommandSession session, Collection<Object> list, Function closure) throws Exception {
+        for (Object x : list) {
+            closure.execute(session, null);
+        }
     }
-}
-```
 
-```shell
-g! each [Jan Feb Mar] { echo $it | grep . }
-Jan
-Feb
-Mar
-```
+    :::shell
+    g! each [Jan Feb Mar] { echo $it | grep . }
+    Jan
+    Feb
+    Mar
 
 **Note:** The default *echo* command _returns_ a String and does not write to System.out. Also, by default, the console prints the results of each command, so *echo* appears to behave as you would expect.
 However, the console does not see the *each* closure above, so the result of echo would not be seen. This is why it is piped into *grep*, as the _result_ of the command as well as its output is written to a pipeline.
\ No newline at end of file