CAMEL-10124 Karaf commands - Switch to non deprecated

Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/da614b73
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/da614b73
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/da614b73

Branch: refs/heads/master
Commit: da614b730dc2097357174cb6ed22c6ef535e67cc
Parents: 6060710
Author: Tomohisa Igarashi <tm.igara...@gmail.com>
Authored: Fri Oct 7 12:43:11 2016 +0900
Committer: Claus Ibsen <davscl...@apache.org>
Committed: Tue Oct 11 17:19:48 2016 +0200

----------------------------------------------------------------------
 platforms/karaf/commands-catalog/pom.xml        |  13 +-
 .../commands/catalog/CatalogComponentDoc.java   |  18 +-
 .../commands/catalog/CatalogComponentInfo.java  |  20 +-
 .../commands/catalog/CatalogComponentList.java  |  15 +-
 .../commands/catalog/CatalogDataFormatDoc.java  |  18 +-
 .../commands/catalog/CatalogDataFormatList.java |  15 +-
 .../karaf/commands/catalog/CatalogEipList.java  |  15 +-
 .../commands/catalog/CatalogLanguageDoc.java    |  18 +-
 .../commands/catalog/CatalogLanguageList.java   |  15 +-
 .../completers/ComponentListCompleter.java      |  18 +-
 .../completers/DataFormatListCompleter.java     |  18 +-
 .../completers/LanguageListCompleter.java       |  18 +-
 .../blueprint/camel-commands-catalog.xml        |  96 -------
 platforms/karaf/commands/pom.xml                |   9 +-
 .../karaf/commands/AbstractRouteCommand.java    |  11 +-
 .../karaf/commands/CamelCommandSupport.java     |  33 ---
 .../camel/karaf/commands/ComponentList.java     |  19 +-
 .../camel/karaf/commands/ContextInflight.java   |  21 +-
 .../camel/karaf/commands/ContextInfo.java       |  26 +-
 .../camel/karaf/commands/ContextList.java       |  12 +-
 .../camel/karaf/commands/ContextResume.java     |  17 +-
 .../camel/karaf/commands/ContextStart.java      |  17 +-
 .../camel/karaf/commands/ContextStop.java       |  17 +-
 .../camel/karaf/commands/ContextSuspend.java    |  17 +-
 .../apache/camel/karaf/commands/EipExplain.java |  19 +-
 .../camel/karaf/commands/EndpointExplain.java   |  19 +-
 .../camel/karaf/commands/EndpointList.java      |  19 +-
 .../camel/karaf/commands/EndpointStats.java     |  19 +-
 .../apache/camel/karaf/commands/RestApiDoc.java |  17 +-
 .../camel/karaf/commands/RestRegistryList.java  |  19 +-
 .../apache/camel/karaf/commands/RestShow.java   |  17 +-
 .../apache/camel/karaf/commands/RouteInfo.java  |  15 +-
 .../apache/camel/karaf/commands/RouteList.java  |  17 +-
 .../camel/karaf/commands/RouteProfile.java      |  15 +-
 .../camel/karaf/commands/RouteResetStats.java   |  17 +-
 .../camel/karaf/commands/RouteResume.java       |   8 +-
 .../apache/camel/karaf/commands/RouteShow.java  |   8 +-
 .../apache/camel/karaf/commands/RouteStart.java |   8 +-
 .../apache/camel/karaf/commands/RouteStop.java  |  10 +-
 .../camel/karaf/commands/RouteSuspend.java      |  10 +-
 .../completers/CamelCompleterSupport.java       |  33 ---
 .../completers/CamelContextCompleter.java       |  19 +-
 .../commands/completers/RouteCompleter.java     |  20 +-
 .../commands/internal/CamelControllerImpl.java  |   3 +
 .../karaf/commands/internal/StringEscape.java   |  11 +-
 .../OSGI-INF/blueprint/camel-commands.xml       | 252 -------------------
 platforms/karaf/features/pom.xml                |   2 +-
 47 files changed, 432 insertions(+), 641 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/da614b73/platforms/karaf/commands-catalog/pom.xml
----------------------------------------------------------------------
diff --git a/platforms/karaf/commands-catalog/pom.xml 
b/platforms/karaf/commands-catalog/pom.xml
index a06299b..222c6a4 100644
--- a/platforms/karaf/commands-catalog/pom.xml
+++ b/platforms/karaf/commands-catalog/pom.xml
@@ -45,13 +45,13 @@
     <!-- karaf -->
     <dependency>
       <groupId>org.apache.karaf.shell</groupId>
-      <artifactId>org.apache.karaf.shell.console</artifactId>
-      <version>${karaf-version}</version>
+      <artifactId>org.apache.karaf.shell.core</artifactId>
+      <version>${karaf4-version}</version>
     </dependency>
     <dependency>
       <groupId>org.apache.karaf</groupId>
       <artifactId>org.apache.karaf.util</artifactId>
-      <version>${karaf-version}</version>
+      <version>${karaf4-version}</version>
     </dependency>
     
     <!-- Test -->
@@ -72,13 +72,12 @@
         <configuration>
           <instructions>
             <Import-Package>
-              
org.apache.felix.service.command;mandatory:=status;status=provisional;version="[0.6,1)",
-              org.apache.felix.gogo.commands;version="[0.6,1)",
-              org.apache.karaf.shell.console;version="[2.2,4)",
+              org.apache.karaf.shell.api.action;version="[4,5)",
+              org.apache.karaf.shell.support.completers;version="[4,5)",
               org.slf4j.*;version="[1.6,2)",
-              jline.*;version="[2.1,4)",
               *
             </Import-Package>
+            <Karaf-Commands>*</Karaf-Commands>
           </instructions>
         </configuration>
       </plugin>

http://git-wip-us.apache.org/repos/asf/camel/blob/da614b73/platforms/karaf/commands-catalog/src/main/java/org/apache/camel/karaf/commands/catalog/CatalogComponentDoc.java
----------------------------------------------------------------------
diff --git 
a/platforms/karaf/commands-catalog/src/main/java/org/apache/camel/karaf/commands/catalog/CatalogComponentDoc.java
 
b/platforms/karaf/commands-catalog/src/main/java/org/apache/camel/karaf/commands/catalog/CatalogComponentDoc.java
index 10c6930..bfb1630 100644
--- 
a/platforms/karaf/commands-catalog/src/main/java/org/apache/camel/karaf/commands/catalog/CatalogComponentDoc.java
+++ 
b/platforms/karaf/commands-catalog/src/main/java/org/apache/camel/karaf/commands/catalog/CatalogComponentDoc.java
@@ -18,19 +18,25 @@ package org.apache.camel.karaf.commands.catalog;
 
 import org.apache.camel.commands.CamelCommand;
 import org.apache.camel.commands.CatalogComponentDocCommand;
-import org.apache.camel.karaf.commands.CamelCommandSupport;
-import org.apache.felix.gogo.commands.Argument;
-import org.apache.felix.gogo.commands.Command;
+import 
org.apache.camel.karaf.commands.catalog.completers.ComponentListCompleter;
+import org.apache.camel.karaf.commands.internal.CamelControllerImpl;
+import org.apache.karaf.shell.api.action.Action;
+import org.apache.karaf.shell.api.action.Argument;
+import org.apache.karaf.shell.api.action.Command;
+import org.apache.karaf.shell.api.action.Completion;
+import org.apache.karaf.shell.api.action.lifecycle.Service;
 
 @Command(scope = "camel", name = "catalog-component-doc", description = "Show 
documentation about a Camel component from the Camel catalog")
-public class CatalogComponentDoc extends CamelCommandSupport {
+@Service
+public class CatalogComponentDoc extends CamelControllerImpl implements Action 
{
 
     @Argument(index = 0, name = "name", description = "The name of the Camel 
component.",
             required = true, multiValued = false)
+    @Completion(ComponentListCompleter.class)
     String name;
 
-    protected Object doExecute() throws Exception {
+    public Object execute() throws Exception {
         CamelCommand command = new CatalogComponentDocCommand(name);
-        return command.execute(camelController, System.out, System.err);
+        return command.execute(this, System.out, System.err);
     }
 }

http://git-wip-us.apache.org/repos/asf/camel/blob/da614b73/platforms/karaf/commands-catalog/src/main/java/org/apache/camel/karaf/commands/catalog/CatalogComponentInfo.java
----------------------------------------------------------------------
diff --git 
a/platforms/karaf/commands-catalog/src/main/java/org/apache/camel/karaf/commands/catalog/CatalogComponentInfo.java
 
b/platforms/karaf/commands-catalog/src/main/java/org/apache/camel/karaf/commands/catalog/CatalogComponentInfo.java
index 7ecae74..1b6dd13 100644
--- 
a/platforms/karaf/commands-catalog/src/main/java/org/apache/camel/karaf/commands/catalog/CatalogComponentInfo.java
+++ 
b/platforms/karaf/commands-catalog/src/main/java/org/apache/camel/karaf/commands/catalog/CatalogComponentInfo.java
@@ -18,16 +18,22 @@ package org.apache.camel.karaf.commands.catalog;
 
 import org.apache.camel.commands.CamelCommand;
 import org.apache.camel.commands.CatalogComponentInfoCommand;
-import org.apache.camel.karaf.commands.CamelCommandSupport;
-import org.apache.felix.gogo.commands.Argument;
-import org.apache.felix.gogo.commands.Command;
-import org.apache.felix.gogo.commands.Option;
+import 
org.apache.camel.karaf.commands.catalog.completers.ComponentListCompleter;
+import org.apache.camel.karaf.commands.internal.CamelControllerImpl;
+import org.apache.karaf.shell.api.action.Action;
+import org.apache.karaf.shell.api.action.Argument;
+import org.apache.karaf.shell.api.action.Command;
+import org.apache.karaf.shell.api.action.Completion;
+import org.apache.karaf.shell.api.action.Option;
+import org.apache.karaf.shell.api.action.lifecycle.Service;
 
 @Command(scope = "camel", name = "catalog-component-info", description = "Show 
information about a Camel component from the Camel catalog")
-public class CatalogComponentInfo extends CamelCommandSupport {
+@Service
+public class CatalogComponentInfo extends CamelControllerImpl implements 
Action {
 
     @Argument(index = 0, name = "name", description = "The name of the Camel 
component.",
             required = true, multiValued = false)
+    @Completion(ComponentListCompleter.class)
     String name;
 
     @Option(name = "--verbose", aliases = "-v", description = "Verbose output 
which shows more information",
@@ -38,8 +44,8 @@ public class CatalogComponentInfo extends CamelCommandSupport 
{
             required = false, multiValued = false)
     String label;
 
-    protected Object doExecute() throws Exception {
+    public Object execute() throws Exception {
         CamelCommand command = new CatalogComponentInfoCommand(name, verbose, 
label);
-        return command.execute(camelController, System.out, System.err);
+        return command.execute(this, System.out, System.err);
     }
 }

http://git-wip-us.apache.org/repos/asf/camel/blob/da614b73/platforms/karaf/commands-catalog/src/main/java/org/apache/camel/karaf/commands/catalog/CatalogComponentList.java
----------------------------------------------------------------------
diff --git 
a/platforms/karaf/commands-catalog/src/main/java/org/apache/camel/karaf/commands/catalog/CatalogComponentList.java
 
b/platforms/karaf/commands-catalog/src/main/java/org/apache/camel/karaf/commands/catalog/CatalogComponentList.java
index d51fc2f..21d799e 100644
--- 
a/platforms/karaf/commands-catalog/src/main/java/org/apache/camel/karaf/commands/catalog/CatalogComponentList.java
+++ 
b/platforms/karaf/commands-catalog/src/main/java/org/apache/camel/karaf/commands/catalog/CatalogComponentList.java
@@ -17,12 +17,15 @@
 package org.apache.camel.karaf.commands.catalog;
 
 import org.apache.camel.commands.CatalogComponentListCommand;
-import org.apache.camel.karaf.commands.CamelCommandSupport;
-import org.apache.felix.gogo.commands.Command;
-import org.apache.felix.gogo.commands.Option;
+import org.apache.camel.karaf.commands.internal.CamelControllerImpl;
+import org.apache.karaf.shell.api.action.Action;
+import org.apache.karaf.shell.api.action.Command;
+import org.apache.karaf.shell.api.action.Option;
+import org.apache.karaf.shell.api.action.lifecycle.Service;
 
 @Command(scope = "camel", name = "catalog-component-list", description = 
"Lists all Camel components from the Camel catalog")
-public class CatalogComponentList extends CamelCommandSupport {
+@Service
+public class CatalogComponentList extends CamelControllerImpl implements 
Action {
 
     @Option(name = "--verbose", aliases = "-v", description = "Verbose output 
which shows more information",
             required = false, multiValued = false, valueToShowInHelp = "false")
@@ -32,9 +35,9 @@ public class CatalogComponentList extends CamelCommandSupport 
{
             required = false, multiValued = false)
     String label;
 
-    protected Object doExecute() throws Exception {
+    public Object execute() throws Exception {
         CatalogComponentListCommand command = new 
CatalogComponentListCommand(verbose, label);
-        return command.execute(camelController, System.out, System.err);
+        return command.execute(this, System.out, System.err);
     }
 
 }

http://git-wip-us.apache.org/repos/asf/camel/blob/da614b73/platforms/karaf/commands-catalog/src/main/java/org/apache/camel/karaf/commands/catalog/CatalogDataFormatDoc.java
----------------------------------------------------------------------
diff --git 
a/platforms/karaf/commands-catalog/src/main/java/org/apache/camel/karaf/commands/catalog/CatalogDataFormatDoc.java
 
b/platforms/karaf/commands-catalog/src/main/java/org/apache/camel/karaf/commands/catalog/CatalogDataFormatDoc.java
index 7498488..78af8df 100644
--- 
a/platforms/karaf/commands-catalog/src/main/java/org/apache/camel/karaf/commands/catalog/CatalogDataFormatDoc.java
+++ 
b/platforms/karaf/commands-catalog/src/main/java/org/apache/camel/karaf/commands/catalog/CatalogDataFormatDoc.java
@@ -18,19 +18,25 @@ package org.apache.camel.karaf.commands.catalog;
 
 import org.apache.camel.commands.CamelCommand;
 import org.apache.camel.commands.CatalogDataFormatDocCommand;
-import org.apache.camel.karaf.commands.CamelCommandSupport;
-import org.apache.felix.gogo.commands.Argument;
-import org.apache.felix.gogo.commands.Command;
+import 
org.apache.camel.karaf.commands.catalog.completers.DataFormatListCompleter;
+import org.apache.camel.karaf.commands.internal.CamelControllerImpl;
+import org.apache.karaf.shell.api.action.Action;
+import org.apache.karaf.shell.api.action.Argument;
+import org.apache.karaf.shell.api.action.Command;
+import org.apache.karaf.shell.api.action.Completion;
+import org.apache.karaf.shell.api.action.lifecycle.Service;
 
 @Command(scope = "camel", name = "catalog-dataformat-doc", description = "Show 
documentation about a Camel data format from the Camel catalog")
-public class CatalogDataFormatDoc extends CamelCommandSupport {
+@Service
+public class CatalogDataFormatDoc extends CamelControllerImpl implements 
Action {
 
     @Argument(index = 0, name = "name", description = "The name of the Camel 
data format.",
             required = true, multiValued = false)
+    @Completion(DataFormatListCompleter.class)
     String name;
 
-    protected Object doExecute() throws Exception {
+    public Object execute() throws Exception {
         CamelCommand command = new CatalogDataFormatDocCommand(name);
-        return command.execute(camelController, System.out, System.err);
+        return command.execute(this, System.out, System.err);
     }
 }

http://git-wip-us.apache.org/repos/asf/camel/blob/da614b73/platforms/karaf/commands-catalog/src/main/java/org/apache/camel/karaf/commands/catalog/CatalogDataFormatList.java
----------------------------------------------------------------------
diff --git 
a/platforms/karaf/commands-catalog/src/main/java/org/apache/camel/karaf/commands/catalog/CatalogDataFormatList.java
 
b/platforms/karaf/commands-catalog/src/main/java/org/apache/camel/karaf/commands/catalog/CatalogDataFormatList.java
index 0a51f26..5f579db 100644
--- 
a/platforms/karaf/commands-catalog/src/main/java/org/apache/camel/karaf/commands/catalog/CatalogDataFormatList.java
+++ 
b/platforms/karaf/commands-catalog/src/main/java/org/apache/camel/karaf/commands/catalog/CatalogDataFormatList.java
@@ -17,12 +17,15 @@
 package org.apache.camel.karaf.commands.catalog;
 
 import org.apache.camel.commands.CatalogDataFormatListCommand;
-import org.apache.camel.karaf.commands.CamelCommandSupport;
-import org.apache.felix.gogo.commands.Command;
-import org.apache.felix.gogo.commands.Option;
+import org.apache.camel.karaf.commands.internal.CamelControllerImpl;
+import org.apache.karaf.shell.api.action.Action;
+import org.apache.karaf.shell.api.action.Command;
+import org.apache.karaf.shell.api.action.Option;
+import org.apache.karaf.shell.api.action.lifecycle.Service;
 
 @Command(scope = "camel", name = "catalog-dataformat-list", description = 
"Lists all Camel dataformats from the Camel catalog")
-public class CatalogDataFormatList extends CamelCommandSupport {
+@Service
+public class CatalogDataFormatList extends CamelControllerImpl implements 
Action {
 
     @Option(name = "--verbose", aliases = "-v", description = "Verbose output 
which shows more information",
             required = false, multiValued = false, valueToShowInHelp = "false")
@@ -32,9 +35,9 @@ public class CatalogDataFormatList extends 
CamelCommandSupport {
             required = false, multiValued = false)
     String label;
 
-    protected Object doExecute() throws Exception {
+    public Object execute() throws Exception {
         CatalogDataFormatListCommand command = new 
CatalogDataFormatListCommand(verbose, label);
-        return command.execute(camelController, System.out, System.err);
+        return command.execute(this, System.out, System.err);
     }
 
 }

http://git-wip-us.apache.org/repos/asf/camel/blob/da614b73/platforms/karaf/commands-catalog/src/main/java/org/apache/camel/karaf/commands/catalog/CatalogEipList.java
----------------------------------------------------------------------
diff --git 
a/platforms/karaf/commands-catalog/src/main/java/org/apache/camel/karaf/commands/catalog/CatalogEipList.java
 
b/platforms/karaf/commands-catalog/src/main/java/org/apache/camel/karaf/commands/catalog/CatalogEipList.java
index 051df46..c516ba1 100644
--- 
a/platforms/karaf/commands-catalog/src/main/java/org/apache/camel/karaf/commands/catalog/CatalogEipList.java
+++ 
b/platforms/karaf/commands-catalog/src/main/java/org/apache/camel/karaf/commands/catalog/CatalogEipList.java
@@ -17,12 +17,15 @@
 package org.apache.camel.karaf.commands.catalog;
 
 import org.apache.camel.commands.CatalogEipListCommand;
-import org.apache.camel.karaf.commands.CamelCommandSupport;
-import org.apache.felix.gogo.commands.Command;
-import org.apache.felix.gogo.commands.Option;
+import org.apache.camel.karaf.commands.internal.CamelControllerImpl;
+import org.apache.karaf.shell.api.action.Action;
+import org.apache.karaf.shell.api.action.Command;
+import org.apache.karaf.shell.api.action.Option;
+import org.apache.karaf.shell.api.action.lifecycle.Service;
 
 @Command(scope = "camel", name = "catalog-eip-list", description = "Lists all 
Camel EIPs from the Camel catalog")
-public class CatalogEipList extends CamelCommandSupport {
+@Service
+public class CatalogEipList extends CamelControllerImpl implements Action {
 
     @Option(name = "--verbose", aliases = "-v", description = "Verbose output 
which shows more information",
             required = false, multiValued = false, valueToShowInHelp = "false")
@@ -32,9 +35,9 @@ public class CatalogEipList extends CamelCommandSupport {
             required = false, multiValued = false)
     String label;
 
-    protected Object doExecute() throws Exception {
+    public Object execute() throws Exception {
         CatalogEipListCommand command = new CatalogEipListCommand(verbose, 
label);
-        return command.execute(camelController, System.out, System.err);
+        return command.execute(this, System.out, System.err);
     }
 
 }

http://git-wip-us.apache.org/repos/asf/camel/blob/da614b73/platforms/karaf/commands-catalog/src/main/java/org/apache/camel/karaf/commands/catalog/CatalogLanguageDoc.java
----------------------------------------------------------------------
diff --git 
a/platforms/karaf/commands-catalog/src/main/java/org/apache/camel/karaf/commands/catalog/CatalogLanguageDoc.java
 
b/platforms/karaf/commands-catalog/src/main/java/org/apache/camel/karaf/commands/catalog/CatalogLanguageDoc.java
index f873092..0abf7fa 100644
--- 
a/platforms/karaf/commands-catalog/src/main/java/org/apache/camel/karaf/commands/catalog/CatalogLanguageDoc.java
+++ 
b/platforms/karaf/commands-catalog/src/main/java/org/apache/camel/karaf/commands/catalog/CatalogLanguageDoc.java
@@ -18,19 +18,25 @@ package org.apache.camel.karaf.commands.catalog;
 
 import org.apache.camel.commands.CamelCommand;
 import org.apache.camel.commands.CatalogLanguageDocCommand;
-import org.apache.camel.karaf.commands.CamelCommandSupport;
-import org.apache.felix.gogo.commands.Argument;
-import org.apache.felix.gogo.commands.Command;
+import 
org.apache.camel.karaf.commands.catalog.completers.LanguageListCompleter;
+import org.apache.camel.karaf.commands.internal.CamelControllerImpl;
+import org.apache.karaf.shell.api.action.Action;
+import org.apache.karaf.shell.api.action.Argument;
+import org.apache.karaf.shell.api.action.Command;
+import org.apache.karaf.shell.api.action.Completion;
+import org.apache.karaf.shell.api.action.lifecycle.Service;
 
 @Command(scope = "camel", name = "catalog-language-doc", description = "Show 
documentation about a Camel language from the Camel catalog")
-public class CatalogLanguageDoc extends CamelCommandSupport {
+@Service
+public class CatalogLanguageDoc extends CamelControllerImpl implements Action {
 
     @Argument(index = 0, name = "name", description = "The name of the Camel 
language.",
             required = true, multiValued = false)
+    @Completion(LanguageListCompleter.class)
     String name;
 
-    protected Object doExecute() throws Exception {
+    public Object execute() throws Exception {
         CamelCommand command = new CatalogLanguageDocCommand(name);
-        return command.execute(camelController, System.out, System.err);
+        return command.execute(this, System.out, System.err);
     }
 }

http://git-wip-us.apache.org/repos/asf/camel/blob/da614b73/platforms/karaf/commands-catalog/src/main/java/org/apache/camel/karaf/commands/catalog/CatalogLanguageList.java
----------------------------------------------------------------------
diff --git 
a/platforms/karaf/commands-catalog/src/main/java/org/apache/camel/karaf/commands/catalog/CatalogLanguageList.java
 
b/platforms/karaf/commands-catalog/src/main/java/org/apache/camel/karaf/commands/catalog/CatalogLanguageList.java
index af1c4e9..d08cb65 100644
--- 
a/platforms/karaf/commands-catalog/src/main/java/org/apache/camel/karaf/commands/catalog/CatalogLanguageList.java
+++ 
b/platforms/karaf/commands-catalog/src/main/java/org/apache/camel/karaf/commands/catalog/CatalogLanguageList.java
@@ -17,12 +17,15 @@
 package org.apache.camel.karaf.commands.catalog;
 
 import org.apache.camel.commands.CatalogLanguageListCommand;
-import org.apache.camel.karaf.commands.CamelCommandSupport;
-import org.apache.felix.gogo.commands.Command;
-import org.apache.felix.gogo.commands.Option;
+import org.apache.camel.karaf.commands.internal.CamelControllerImpl;
+import org.apache.karaf.shell.api.action.Action;
+import org.apache.karaf.shell.api.action.Command;
+import org.apache.karaf.shell.api.action.Option;
+import org.apache.karaf.shell.api.action.lifecycle.Service;
 
 @Command(scope = "camel", name = "catalog-language-list", description = "Lists 
all Camel languages from the Camel catalog")
-public class CatalogLanguageList extends CamelCommandSupport {
+@Service
+public class CatalogLanguageList extends CamelControllerImpl implements Action 
{
 
     @Option(name = "--verbose", aliases = "-v", description = "Verbose output 
which shows more information",
             required = false, multiValued = false, valueToShowInHelp = "false")
@@ -32,9 +35,9 @@ public class CatalogLanguageList extends CamelCommandSupport {
             required = false, multiValued = false)
     String label;
 
-    protected Object doExecute() throws Exception {
+    public Object execute() throws Exception {
         CatalogLanguageListCommand command = new 
CatalogLanguageListCommand(verbose, label);
-        return command.execute(camelController, System.out, System.err);
+        return command.execute(this, System.out, System.err);
     }
 
 }

http://git-wip-us.apache.org/repos/asf/camel/blob/da614b73/platforms/karaf/commands-catalog/src/main/java/org/apache/camel/karaf/commands/catalog/completers/ComponentListCompleter.java
----------------------------------------------------------------------
diff --git 
a/platforms/karaf/commands-catalog/src/main/java/org/apache/camel/karaf/commands/catalog/completers/ComponentListCompleter.java
 
b/platforms/karaf/commands-catalog/src/main/java/org/apache/camel/karaf/commands/catalog/completers/ComponentListCompleter.java
index f5ba174..db1d11e 100644
--- 
a/platforms/karaf/commands-catalog/src/main/java/org/apache/camel/karaf/commands/catalog/completers/ComponentListCompleter.java
+++ 
b/platforms/karaf/commands-catalog/src/main/java/org/apache/camel/karaf/commands/catalog/completers/ComponentListCompleter.java
@@ -19,16 +19,22 @@ package org.apache.camel.karaf.commands.catalog.completers;
 import java.util.List;
 import java.util.Map;
 
-import jline.console.completer.StringsCompleter;
-import org.apache.camel.karaf.commands.completers.CamelCompleterSupport;
+import org.apache.camel.karaf.commands.internal.CamelControllerImpl;
+import org.apache.karaf.shell.api.action.lifecycle.Service;
+import org.apache.karaf.shell.api.console.CommandLine;
+import org.apache.karaf.shell.api.console.Completer;
+import org.apache.karaf.shell.api.console.Session;
+import org.apache.karaf.shell.support.completers.StringsCompleter;
 
-public class ComponentListCompleter extends CamelCompleterSupport {
+@Service
+public class ComponentListCompleter extends CamelControllerImpl implements 
Completer {
 
     @Override
-    public int complete(String buffer, int cursor, List candidates) {
+    public int complete(Session session, CommandLine commandLine, List<String> 
candidates) {
         try {
             StringsCompleter delegate = new StringsCompleter();
-            List<Map<String, String>> components = 
camelController.listComponentsCatalog(null);
+            List<Map<String, String>> components = listComponentsCatalog(null);
+            String buffer = commandLine.getCursorArgument();
             for (Map<String, String> row : components) {
                 String name = row.get("name");
                 if (name != null) {
@@ -43,7 +49,7 @@ public class ComponentListCompleter extends 
CamelCompleterSupport {
                     }
                 }
             }
-            return delegate.complete(buffer, cursor, candidates);
+            return delegate.complete(session, commandLine, candidates);
         } catch (Exception e) {
             // nothing to do, no completion
         }

http://git-wip-us.apache.org/repos/asf/camel/blob/da614b73/platforms/karaf/commands-catalog/src/main/java/org/apache/camel/karaf/commands/catalog/completers/DataFormatListCompleter.java
----------------------------------------------------------------------
diff --git 
a/platforms/karaf/commands-catalog/src/main/java/org/apache/camel/karaf/commands/catalog/completers/DataFormatListCompleter.java
 
b/platforms/karaf/commands-catalog/src/main/java/org/apache/camel/karaf/commands/catalog/completers/DataFormatListCompleter.java
index 71d1e94..540bdb3 100644
--- 
a/platforms/karaf/commands-catalog/src/main/java/org/apache/camel/karaf/commands/catalog/completers/DataFormatListCompleter.java
+++ 
b/platforms/karaf/commands-catalog/src/main/java/org/apache/camel/karaf/commands/catalog/completers/DataFormatListCompleter.java
@@ -19,16 +19,22 @@ package org.apache.camel.karaf.commands.catalog.completers;
 import java.util.List;
 import java.util.Map;
 
-import jline.console.completer.StringsCompleter;
-import org.apache.camel.karaf.commands.completers.CamelCompleterSupport;
+import org.apache.camel.karaf.commands.internal.CamelControllerImpl;
+import org.apache.karaf.shell.api.action.lifecycle.Service;
+import org.apache.karaf.shell.api.console.CommandLine;
+import org.apache.karaf.shell.api.console.Completer;
+import org.apache.karaf.shell.api.console.Session;
+import org.apache.karaf.shell.support.completers.StringsCompleter;
 
-public class DataFormatListCompleter extends CamelCompleterSupport {
+@Service
+public class DataFormatListCompleter extends CamelControllerImpl implements 
Completer {
 
     @Override
-    public int complete(String buffer, int cursor, List candidates) {
+    public int complete(Session session, CommandLine commandLine, List<String> 
candidates) {
         try {
             StringsCompleter delegate = new StringsCompleter();
-            List<Map<String, String>> dataFormats = 
camelController.listDataFormatsCatalog(null);
+            List<Map<String, String>> dataFormats = 
listDataFormatsCatalog(null);
+            String buffer = commandLine.getCursorArgument();
             for (Map<String, String> row : dataFormats) {
                 String name = row.get("name");
                 if (name != null) {
@@ -43,7 +49,7 @@ public class DataFormatListCompleter extends 
CamelCompleterSupport {
                     }
                 }
             }
-            return delegate.complete(buffer, cursor, candidates);
+            return delegate.complete(session, commandLine, candidates);
         } catch (Exception e) {
             // nothing to do, no completion
         }

http://git-wip-us.apache.org/repos/asf/camel/blob/da614b73/platforms/karaf/commands-catalog/src/main/java/org/apache/camel/karaf/commands/catalog/completers/LanguageListCompleter.java
----------------------------------------------------------------------
diff --git 
a/platforms/karaf/commands-catalog/src/main/java/org/apache/camel/karaf/commands/catalog/completers/LanguageListCompleter.java
 
b/platforms/karaf/commands-catalog/src/main/java/org/apache/camel/karaf/commands/catalog/completers/LanguageListCompleter.java
index 423a79e..c60c5c9 100644
--- 
a/platforms/karaf/commands-catalog/src/main/java/org/apache/camel/karaf/commands/catalog/completers/LanguageListCompleter.java
+++ 
b/platforms/karaf/commands-catalog/src/main/java/org/apache/camel/karaf/commands/catalog/completers/LanguageListCompleter.java
@@ -19,16 +19,22 @@ package org.apache.camel.karaf.commands.catalog.completers;
 import java.util.List;
 import java.util.Map;
 
-import jline.console.completer.StringsCompleter;
-import org.apache.camel.karaf.commands.completers.CamelCompleterSupport;
+import org.apache.camel.karaf.commands.internal.CamelControllerImpl;
+import org.apache.karaf.shell.api.action.lifecycle.Service;
+import org.apache.karaf.shell.api.console.CommandLine;
+import org.apache.karaf.shell.api.console.Completer;
+import org.apache.karaf.shell.api.console.Session;
+import org.apache.karaf.shell.support.completers.StringsCompleter;
 
-public class LanguageListCompleter extends CamelCompleterSupport {
+@Service
+public class LanguageListCompleter extends CamelControllerImpl implements 
Completer {
 
     @Override
-    public int complete(String buffer, int cursor, List candidates) {
+    public int complete(Session session, CommandLine commandLine, List<String> 
candidates) {
         try {
             StringsCompleter delegate = new StringsCompleter();
-            List<Map<String, String>> dataFormats = 
camelController.listLanguagesCatalog(null);
+            List<Map<String, String>> dataFormats = listLanguagesCatalog(null);
+            String buffer = commandLine.getCursorArgument();
             for (Map<String, String> row : dataFormats) {
                 String name = row.get("name");
                 if (name != null) {
@@ -43,7 +49,7 @@ public class LanguageListCompleter extends 
CamelCompleterSupport {
                     }
                 }
             }
-            return delegate.complete(buffer, cursor, candidates);
+            return delegate.complete(session, commandLine, candidates);
         } catch (Exception e) {
             // nothing to do, no completion
         }

http://git-wip-us.apache.org/repos/asf/camel/blob/da614b73/platforms/karaf/commands-catalog/src/main/resources/OSGI-INF/blueprint/camel-commands-catalog.xml
----------------------------------------------------------------------
diff --git 
a/platforms/karaf/commands-catalog/src/main/resources/OSGI-INF/blueprint/camel-commands-catalog.xml
 
b/platforms/karaf/commands-catalog/src/main/resources/OSGI-INF/blueprint/camel-commands-catalog.xml
deleted file mode 100644
index 2198812..0000000
--- 
a/platforms/karaf/commands-catalog/src/main/resources/OSGI-INF/blueprint/camel-commands-catalog.xml
+++ /dev/null
@@ -1,96 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-    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.
--->
-<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0"; 
default-activation="lazy">
-
-  <command-bundle xmlns="http://karaf.apache.org/xmlns/shell/v1.0.0";>
-
-    <command name="camel-catalog/component-list">
-      <action 
class="org.apache.camel.karaf.commands.catalog.CatalogComponentList">
-        <property name="camelController" ref="camelController"/>
-      </action>
-    </command>
-    <command name="camel-catalog/component-info">
-      <action 
class="org.apache.camel.karaf.commands.catalog.CatalogComponentInfo">
-        <property name="camelController" ref="camelController"/>
-      </action>
-      <completers>
-        <ref component-id="componentCompleter"/>
-        <null/>
-      </completers>
-    </command>
-    <command name="camel-catalog/component-doc">
-      <action 
class="org.apache.camel.karaf.commands.catalog.CatalogComponentDoc">
-        <property name="camelController" ref="camelController"/>
-      </action>
-      <completers>
-        <ref component-id="componentCompleter"/>
-        <null/>
-      </completers>
-    </command>
-    <command name="camel-catalog/dataformat-list">
-      <action 
class="org.apache.camel.karaf.commands.catalog.CatalogDataFormatList">
-        <property name="camelController" ref="camelController"/>
-      </action>
-    </command>
-    <command name="camel-catalog/dataformat-doc">
-      <action 
class="org.apache.camel.karaf.commands.catalog.CatalogDataFormatDoc">
-        <property name="camelController" ref="camelController"/>
-      </action>
-      <completers>
-        <ref component-id="dataFormatCompleter"/>
-        <null/>
-      </completers>
-    </command>
-    <command name="camel-catalog/language-list">
-      <action 
class="org.apache.camel.karaf.commands.catalog.CatalogLanguageList">
-        <property name="camelController" ref="camelController"/>
-      </action>
-    </command>
-    <command name="camel-catalog/language-doc">
-      <action 
class="org.apache.camel.karaf.commands.catalog.CatalogLanguageDoc">
-        <property name="camelController" ref="camelController"/>
-      </action>
-      <completers>
-        <ref component-id="languageCompleter"/>
-        <null/>
-      </completers>
-    </command>
-    <command name="camel-catalog/eip-list">
-      <action class="org.apache.camel.karaf.commands.catalog.CatalogEipList">
-        <property name="camelController" ref="camelController"/>
-      </action>
-    </command>
-  </command-bundle>
-
-  <bean id="camelController" 
class="org.apache.camel.karaf.commands.internal.CamelControllerImpl">
-    <property name="bundleContext" ref="blueprintBundleContext"/>
-  </bean>
-
-  <bean id="componentCompleter" 
class="org.apache.camel.karaf.commands.catalog.completers.ComponentListCompleter">
-    <property name="camelController" ref="camelController"/>
-  </bean>
-
-  <bean id="dataFormatCompleter" 
class="org.apache.camel.karaf.commands.catalog.completers.DataFormatListCompleter">
-    <property name="camelController" ref="camelController"/>
-  </bean>
-
-  <bean id="languageCompleter" 
class="org.apache.camel.karaf.commands.catalog.completers.LanguageListCompleter">
-    <property name="camelController" ref="camelController"/>
-  </bean>
-
-</blueprint>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/camel/blob/da614b73/platforms/karaf/commands/pom.xml
----------------------------------------------------------------------
diff --git a/platforms/karaf/commands/pom.xml b/platforms/karaf/commands/pom.xml
index b76ab3e..1f1aefd 100644
--- a/platforms/karaf/commands/pom.xml
+++ b/platforms/karaf/commands/pom.xml
@@ -49,7 +49,7 @@
     <!-- karaf -->
     <dependency>
       <groupId>org.apache.karaf.shell</groupId>
-      <artifactId>org.apache.karaf.shell.console</artifactId>
+      <artifactId>org.apache.karaf.shell.core</artifactId>
       <version>${karaf4-version}</version>
     </dependency>
     <dependency>
@@ -78,16 +78,15 @@
           <instructions>
             <Import-Package>
               !org.apache.felix.utils.properties,
-              org.apache.felix.service.command;version="[0.16,1)",
-              org.apache.felix.gogo.commands;version="[0.16,1)",
-              org.apache.karaf.shell.console;version="[3,5)",
+              org.apache.karaf.shell.api.action;version="[4,5)",
+              org.apache.karaf.shell.support.completers;version="[4,5)",
               org.slf4j.*;version="[1.6,2)",
-              jline.*;version="[2.1,4)",
               *
             </Import-Package>
             <Private-Package>
               org.apache.camel.karaf.commands.internal
             </Private-Package>
+            <Karaf-Commands>*</Karaf-Commands>
           </instructions>
         </configuration>
       </plugin>

http://git-wip-us.apache.org/repos/asf/camel/blob/da614b73/platforms/karaf/commands/src/main/java/org/apache/camel/karaf/commands/AbstractRouteCommand.java
----------------------------------------------------------------------
diff --git 
a/platforms/karaf/commands/src/main/java/org/apache/camel/karaf/commands/AbstractRouteCommand.java
 
b/platforms/karaf/commands/src/main/java/org/apache/camel/karaf/commands/AbstractRouteCommand.java
index 8d4b00f..1f8f723 100644
--- 
a/platforms/karaf/commands/src/main/java/org/apache/camel/karaf/commands/AbstractRouteCommand.java
+++ 
b/platforms/karaf/commands/src/main/java/org/apache/camel/karaf/commands/AbstractRouteCommand.java
@@ -16,14 +16,21 @@
  */
 package org.apache.camel.karaf.commands;
 
-import org.apache.felix.gogo.commands.Argument;
+import org.apache.camel.karaf.commands.completers.CamelContextCompleter;
+import org.apache.camel.karaf.commands.completers.RouteCompleter;
+import org.apache.camel.karaf.commands.internal.CamelControllerImpl;
+import org.apache.karaf.shell.api.action.Action;
+import org.apache.karaf.shell.api.action.Argument;
+import org.apache.karaf.shell.api.action.Completion;
 
-public abstract class AbstractRouteCommand extends CamelCommandSupport {
+public abstract class AbstractRouteCommand extends CamelControllerImpl 
implements Action {
 
     @Argument(index = 0, name = "route", description = "The Camel route ID or 
a wildcard expression", required = true, multiValued = false)
+    @Completion(RouteCompleter.class)
     String route;
 
     @Argument(index = 1, name = "context", description = "The Camel context 
name.", required = false, multiValued = false)
+    @Completion(CamelContextCompleter.class)
     String context;
 
 }

http://git-wip-us.apache.org/repos/asf/camel/blob/da614b73/platforms/karaf/commands/src/main/java/org/apache/camel/karaf/commands/CamelCommandSupport.java
----------------------------------------------------------------------
diff --git 
a/platforms/karaf/commands/src/main/java/org/apache/camel/karaf/commands/CamelCommandSupport.java
 
b/platforms/karaf/commands/src/main/java/org/apache/camel/karaf/commands/CamelCommandSupport.java
deleted file mode 100644
index 59204a8..0000000
--- 
a/platforms/karaf/commands/src/main/java/org/apache/camel/karaf/commands/CamelCommandSupport.java
+++ /dev/null
@@ -1,33 +0,0 @@
-/**
- * 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.camel.karaf.commands;
-
-import org.apache.camel.commands.CamelController;
-import org.apache.karaf.shell.console.OsgiCommandSupport;
-
-/**
- * The abstract base class for karaf commands.
- */
-public abstract class CamelCommandSupport extends OsgiCommandSupport {
-
-    protected CamelController camelController;
-
-    public void setCamelController(CamelController camelController) {
-        this.camelController = camelController;
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/camel/blob/da614b73/platforms/karaf/commands/src/main/java/org/apache/camel/karaf/commands/ComponentList.java
----------------------------------------------------------------------
diff --git 
a/platforms/karaf/commands/src/main/java/org/apache/camel/karaf/commands/ComponentList.java
 
b/platforms/karaf/commands/src/main/java/org/apache/camel/karaf/commands/ComponentList.java
index 5ffeb7e..45fad57 100644
--- 
a/platforms/karaf/commands/src/main/java/org/apache/camel/karaf/commands/ComponentList.java
+++ 
b/platforms/karaf/commands/src/main/java/org/apache/camel/karaf/commands/ComponentList.java
@@ -17,23 +17,30 @@
 package org.apache.camel.karaf.commands;
 
 import org.apache.camel.commands.ComponentListCommand;
-import org.apache.felix.gogo.commands.Argument;
-import org.apache.felix.gogo.commands.Command;
-import org.apache.felix.gogo.commands.Option;
+import org.apache.camel.karaf.commands.completers.CamelContextCompleter;
+import org.apache.camel.karaf.commands.internal.CamelControllerImpl;
+import org.apache.karaf.shell.api.action.Action;
+import org.apache.karaf.shell.api.action.Argument;
+import org.apache.karaf.shell.api.action.Command;
+import org.apache.karaf.shell.api.action.Completion;
+import org.apache.karaf.shell.api.action.Option;
+import org.apache.karaf.shell.api.action.lifecycle.Service;
 
 @Command(scope = "camel", name = "component-list", description = "Lists all 
Camel components that are in use in Karaf.")
-public class ComponentList extends CamelCommandSupport {
+@Service
+public class ComponentList extends CamelControllerImpl implements Action {
 
     @Argument(index = 0, name = "name", description = "The Camel context name 
where to look for the components", required = true, multiValued = false)
+    @Completion(CamelContextCompleter.class)
     String name;
 
     @Option(name = "--verbose", aliases = "-v", description = "Verbose output 
which shows more information",
             required = false, multiValued = false, valueToShowInHelp = "false")
     boolean verbose;
 
-    protected Object doExecute() throws Exception {
+    public Object execute() throws Exception {
         ComponentListCommand command = new ComponentListCommand(name, verbose);
-        return command.execute(camelController, System.out, System.err);
+        return command.execute(this, System.out, System.err);
     }
 
 }

http://git-wip-us.apache.org/repos/asf/camel/blob/da614b73/platforms/karaf/commands/src/main/java/org/apache/camel/karaf/commands/ContextInflight.java
----------------------------------------------------------------------
diff --git 
a/platforms/karaf/commands/src/main/java/org/apache/camel/karaf/commands/ContextInflight.java
 
b/platforms/karaf/commands/src/main/java/org/apache/camel/karaf/commands/ContextInflight.java
index 1ff5e7f..cb3ddd9 100644
--- 
a/platforms/karaf/commands/src/main/java/org/apache/camel/karaf/commands/ContextInflight.java
+++ 
b/platforms/karaf/commands/src/main/java/org/apache/camel/karaf/commands/ContextInflight.java
@@ -17,14 +17,22 @@
 package org.apache.camel.karaf.commands;
 
 import org.apache.camel.commands.ContextInflightCommand;
-import org.apache.felix.gogo.commands.Argument;
-import org.apache.felix.gogo.commands.Command;
-import org.apache.felix.gogo.commands.Option;
+import org.apache.camel.karaf.commands.completers.CamelContextCompleter;
+import org.apache.camel.karaf.commands.completers.RouteCompleter;
+import org.apache.camel.karaf.commands.internal.CamelControllerImpl;
+import org.apache.karaf.shell.api.action.Action;
+import org.apache.karaf.shell.api.action.Argument;
+import org.apache.karaf.shell.api.action.Command;
+import org.apache.karaf.shell.api.action.Completion;
+import org.apache.karaf.shell.api.action.Option;
+import org.apache.karaf.shell.api.action.lifecycle.Service;
 
 @Command(scope = "camel", name = "context-inflight", description = "List 
inflight exchanges.")
-public class ContextInflight extends CamelCommandSupport {
+@Service
+public class ContextInflight extends CamelControllerImpl implements Action {
 
     @Argument(index = 0, name = "name", description = "The Camel context 
name", required = true, multiValued = false)
+    @Completion(CamelContextCompleter.class)
     String name;
 
     @Option(name = "--limit", aliases = "-l", description = "To limit the 
number of exchanges shown",
@@ -32,15 +40,16 @@ public class ContextInflight extends CamelCommandSupport {
     int limit = -1;
 
     @Argument(index = 1, name = "route", description = "The Camel route ID", 
required = false, multiValued = false)
+    @Completion(RouteCompleter.class)
     String route;
 
     @Option(name = "--sort", aliases = "-s", description = "true = sort by 
longest duration, false = sort by exchange id",
             required = false, multiValued = false, valueToShowInHelp = "false")
     boolean sortByLongestDuration;
 
-    protected Object doExecute() throws Exception {
+    public Object execute() throws Exception {
         ContextInflightCommand command = new ContextInflightCommand(name, 
route, limit, sortByLongestDuration);
-        return command.execute(camelController, System.out, System.err);
+        return command.execute(this, System.out, System.err);
     }
 
 }

http://git-wip-us.apache.org/repos/asf/camel/blob/da614b73/platforms/karaf/commands/src/main/java/org/apache/camel/karaf/commands/ContextInfo.java
----------------------------------------------------------------------
diff --git 
a/platforms/karaf/commands/src/main/java/org/apache/camel/karaf/commands/ContextInfo.java
 
b/platforms/karaf/commands/src/main/java/org/apache/camel/karaf/commands/ContextInfo.java
index add0f4a..66f7f95 100644
--- 
a/platforms/karaf/commands/src/main/java/org/apache/camel/karaf/commands/ContextInfo.java
+++ 
b/platforms/karaf/commands/src/main/java/org/apache/camel/karaf/commands/ContextInfo.java
@@ -18,30 +18,34 @@ package org.apache.camel.karaf.commands;
 
 import org.apache.camel.commands.ContextInfoCommand;
 import org.apache.camel.commands.StringEscape;
-import org.apache.felix.gogo.commands.Argument;
-import org.apache.felix.gogo.commands.Command;
-import org.apache.felix.gogo.commands.Option;
+import org.apache.camel.karaf.commands.completers.CamelContextCompleter;
+import org.apache.camel.karaf.commands.internal.CamelControllerImpl;
+import org.apache.karaf.shell.api.action.Action;
+import org.apache.karaf.shell.api.action.Argument;
+import org.apache.karaf.shell.api.action.Command;
+import org.apache.karaf.shell.api.action.Completion;
+import org.apache.karaf.shell.api.action.Option;
+import org.apache.karaf.shell.api.action.lifecycle.Reference;
+import org.apache.karaf.shell.api.action.lifecycle.Service;
 
 @Command(scope = "camel", name = "context-info", description = "Display 
detailed information about a Camel context.")
-public class ContextInfo extends CamelCommandSupport {
+@Service
+public class ContextInfo extends CamelControllerImpl implements Action {
 
     @Argument(index = 0, name = "name", description = "The name of the Camel 
context", required = true, multiValued = false)
+    @Completion(CamelContextCompleter.class)
     String name;
 
     @Option(name = "--verbose", aliases = "-v", description = "Verbose output",
             required = false, multiValued = false, valueToShowInHelp = "false")
     boolean verbose;
 
-    private StringEscape stringEscape;
-
-    public void setStringEscape(StringEscape stringEscape) {
-        this.stringEscape = stringEscape;
-    }
+    private StringEscape stringEscape = 
org.apache.camel.karaf.commands.internal.StringEscape.getInstance();
 
     @Override
-    protected Object doExecute() throws Exception {
+    public Object execute() throws Exception {
         ContextInfoCommand command = new ContextInfoCommand(name, verbose);
         command.setStringEscape(stringEscape);
-        return command.execute(camelController, System.out, System.err);
+        return command.execute(this, System.out, System.err);
     }
 }

http://git-wip-us.apache.org/repos/asf/camel/blob/da614b73/platforms/karaf/commands/src/main/java/org/apache/camel/karaf/commands/ContextList.java
----------------------------------------------------------------------
diff --git 
a/platforms/karaf/commands/src/main/java/org/apache/camel/karaf/commands/ContextList.java
 
b/platforms/karaf/commands/src/main/java/org/apache/camel/karaf/commands/ContextList.java
index af40be2..bf5eecd 100644
--- 
a/platforms/karaf/commands/src/main/java/org/apache/camel/karaf/commands/ContextList.java
+++ 
b/platforms/karaf/commands/src/main/java/org/apache/camel/karaf/commands/ContextList.java
@@ -17,14 +17,18 @@
 package org.apache.camel.karaf.commands;
 
 import org.apache.camel.commands.ContextListCommand;
-import org.apache.felix.gogo.commands.Command;
+import org.apache.camel.karaf.commands.internal.CamelControllerImpl;
+import org.apache.karaf.shell.api.action.Action;
+import org.apache.karaf.shell.api.action.Command;
+import org.apache.karaf.shell.api.action.lifecycle.Service;
 
 @Command(scope = "camel", name = "context-list", description = "Lists all 
Camel contexts.")
-public class ContextList extends CamelCommandSupport {
+@Service
+public class ContextList extends CamelControllerImpl implements Action {
 
     @Override
-    protected Object doExecute() throws Exception {
+    public Object execute() throws Exception {
         ContextListCommand command = new ContextListCommand();
-        return command.execute(camelController, System.out, System.err);
+        return command.execute(this, System.out, System.err);
     }
 }

http://git-wip-us.apache.org/repos/asf/camel/blob/da614b73/platforms/karaf/commands/src/main/java/org/apache/camel/karaf/commands/ContextResume.java
----------------------------------------------------------------------
diff --git 
a/platforms/karaf/commands/src/main/java/org/apache/camel/karaf/commands/ContextResume.java
 
b/platforms/karaf/commands/src/main/java/org/apache/camel/karaf/commands/ContextResume.java
index 33eaf19..fed955d 100644
--- 
a/platforms/karaf/commands/src/main/java/org/apache/camel/karaf/commands/ContextResume.java
+++ 
b/platforms/karaf/commands/src/main/java/org/apache/camel/karaf/commands/ContextResume.java
@@ -17,18 +17,25 @@
 package org.apache.camel.karaf.commands;
 
 import org.apache.camel.commands.ContextResumeCommand;
-import org.apache.felix.gogo.commands.Argument;
-import org.apache.felix.gogo.commands.Command;
+import org.apache.camel.karaf.commands.completers.CamelContextCompleter;
+import org.apache.camel.karaf.commands.internal.CamelControllerImpl;
+import org.apache.karaf.shell.api.action.Action;
+import org.apache.karaf.shell.api.action.Argument;
+import org.apache.karaf.shell.api.action.Command;
+import org.apache.karaf.shell.api.action.Completion;
+import org.apache.karaf.shell.api.action.lifecycle.Service;
 
 @Command(scope = "camel", name = "context-resume", description = "Resumes a 
Camel context.")
-public class ContextResume extends CamelCommandSupport {
+@Service
+public class ContextResume extends CamelControllerImpl implements Action {
 
     @Argument(index = 0, name = "context", description = "The name of the 
Camel context.", required = true, multiValued = false)
+    @Completion(CamelContextCompleter.class)
     String context;
 
     @Override
-    protected Object doExecute() throws Exception {
+    public Object execute() throws Exception {
         ContextResumeCommand command = new ContextResumeCommand(context);
-        return command.execute(camelController, System.out, System.err);
+        return command.execute(this, System.out, System.err);
     }
 }

http://git-wip-us.apache.org/repos/asf/camel/blob/da614b73/platforms/karaf/commands/src/main/java/org/apache/camel/karaf/commands/ContextStart.java
----------------------------------------------------------------------
diff --git 
a/platforms/karaf/commands/src/main/java/org/apache/camel/karaf/commands/ContextStart.java
 
b/platforms/karaf/commands/src/main/java/org/apache/camel/karaf/commands/ContextStart.java
index ef98f88..17e618b 100644
--- 
a/platforms/karaf/commands/src/main/java/org/apache/camel/karaf/commands/ContextStart.java
+++ 
b/platforms/karaf/commands/src/main/java/org/apache/camel/karaf/commands/ContextStart.java
@@ -17,19 +17,26 @@
 package org.apache.camel.karaf.commands;
 
 import org.apache.camel.commands.ContextStartCommand;
-import org.apache.felix.gogo.commands.Argument;
-import org.apache.felix.gogo.commands.Command;
+import org.apache.camel.karaf.commands.completers.CamelContextCompleter;
+import org.apache.camel.karaf.commands.internal.CamelControllerImpl;
+import org.apache.karaf.shell.api.action.Action;
+import org.apache.karaf.shell.api.action.Argument;
+import org.apache.karaf.shell.api.action.Command;
+import org.apache.karaf.shell.api.action.Completion;
+import org.apache.karaf.shell.api.action.lifecycle.Service;
 
 @Command(scope = "camel", name = "context-start", description = "Start a Camel 
context.")
-public class ContextStart extends CamelCommandSupport {
+@Service
+public class ContextStart extends CamelControllerImpl implements Action {
 
     @Argument(index = 0, name = "context", description = "The name of the 
Camel context.", required = true, multiValued = false)
+    @Completion(CamelContextCompleter.class)
     String context;
 
     @Override
-    protected Object doExecute() throws Exception {
+    public Object execute() throws Exception {
         ContextStartCommand command = new ContextStartCommand(context);
-        return command.execute(camelController, System.out, System.err);
+        return command.execute(this, System.out, System.err);
     }
 
 }

http://git-wip-us.apache.org/repos/asf/camel/blob/da614b73/platforms/karaf/commands/src/main/java/org/apache/camel/karaf/commands/ContextStop.java
----------------------------------------------------------------------
diff --git 
a/platforms/karaf/commands/src/main/java/org/apache/camel/karaf/commands/ContextStop.java
 
b/platforms/karaf/commands/src/main/java/org/apache/camel/karaf/commands/ContextStop.java
index 9edc8d8..f38c4c4 100644
--- 
a/platforms/karaf/commands/src/main/java/org/apache/camel/karaf/commands/ContextStop.java
+++ 
b/platforms/karaf/commands/src/main/java/org/apache/camel/karaf/commands/ContextStop.java
@@ -17,19 +17,26 @@
 package org.apache.camel.karaf.commands;
 
 import org.apache.camel.commands.ContextStopCommand;
-import org.apache.felix.gogo.commands.Argument;
-import org.apache.felix.gogo.commands.Command;
+import org.apache.camel.karaf.commands.completers.CamelContextCompleter;
+import org.apache.camel.karaf.commands.internal.CamelControllerImpl;
+import org.apache.karaf.shell.api.action.Action;
+import org.apache.karaf.shell.api.action.Argument;
+import org.apache.karaf.shell.api.action.Command;
+import org.apache.karaf.shell.api.action.Completion;
+import org.apache.karaf.shell.api.action.lifecycle.Service;
 
 @Command(scope = "camel", name = "context-stop", description = "Stop a Camel 
context. It becomes unavailable and can not be started again.")
-public class ContextStop extends CamelCommandSupport {
+@Service
+public class ContextStop extends CamelControllerImpl implements Action {
 
     @Argument(index = 0, name = "context", description = "The name of the 
Camel context.", required = true, multiValued = false)
+    @Completion(CamelContextCompleter.class)
     String context;
 
     @Override
-    protected Object doExecute() throws Exception {
+    public Object execute() throws Exception {
         ContextStopCommand command = new ContextStopCommand(context);
-        return command.execute(camelController, System.out, System.err);
+        return command.execute(this, System.out, System.err);
     }
 
 }

http://git-wip-us.apache.org/repos/asf/camel/blob/da614b73/platforms/karaf/commands/src/main/java/org/apache/camel/karaf/commands/ContextSuspend.java
----------------------------------------------------------------------
diff --git 
a/platforms/karaf/commands/src/main/java/org/apache/camel/karaf/commands/ContextSuspend.java
 
b/platforms/karaf/commands/src/main/java/org/apache/camel/karaf/commands/ContextSuspend.java
index 7fd75af..a2e0117 100644
--- 
a/platforms/karaf/commands/src/main/java/org/apache/camel/karaf/commands/ContextSuspend.java
+++ 
b/platforms/karaf/commands/src/main/java/org/apache/camel/karaf/commands/ContextSuspend.java
@@ -17,19 +17,26 @@
 package org.apache.camel.karaf.commands;
 
 import org.apache.camel.commands.ContextSuspendCommand;
-import org.apache.felix.gogo.commands.Argument;
-import org.apache.felix.gogo.commands.Command;
+import org.apache.camel.karaf.commands.completers.CamelContextCompleter;
+import org.apache.camel.karaf.commands.internal.CamelControllerImpl;
+import org.apache.karaf.shell.api.action.Action;
+import org.apache.karaf.shell.api.action.Argument;
+import org.apache.karaf.shell.api.action.Command;
+import org.apache.karaf.shell.api.action.Completion;
+import org.apache.karaf.shell.api.action.lifecycle.Service;
 
 @Command(scope = "camel", name = "context-suspend", description = "Suspends a 
Camel context.")
-public class ContextSuspend extends CamelCommandSupport {
+@Service
+public class ContextSuspend extends CamelControllerImpl implements Action {
 
     @Argument(index = 0, name = "context", description = "The name of the 
Camel context.", required = true, multiValued = false)
+    @Completion(CamelContextCompleter.class)
     String context;
 
     @Override
-    protected Object doExecute() throws Exception {
+    public Object execute() throws Exception {
         ContextSuspendCommand command = new ContextSuspendCommand(context);
-        return command.execute(camelController, System.out, System.err);
+        return command.execute(this, System.out, System.err);
     }
 
 }

http://git-wip-us.apache.org/repos/asf/camel/blob/da614b73/platforms/karaf/commands/src/main/java/org/apache/camel/karaf/commands/EipExplain.java
----------------------------------------------------------------------
diff --git 
a/platforms/karaf/commands/src/main/java/org/apache/camel/karaf/commands/EipExplain.java
 
b/platforms/karaf/commands/src/main/java/org/apache/camel/karaf/commands/EipExplain.java
index 1f35486..96eaf77 100644
--- 
a/platforms/karaf/commands/src/main/java/org/apache/camel/karaf/commands/EipExplain.java
+++ 
b/platforms/karaf/commands/src/main/java/org/apache/camel/karaf/commands/EipExplain.java
@@ -17,14 +17,21 @@
 package org.apache.camel.karaf.commands;
 
 import org.apache.camel.commands.EipExplainCommand;
-import org.apache.felix.gogo.commands.Argument;
-import org.apache.felix.gogo.commands.Command;
-import org.apache.felix.gogo.commands.Option;
+import org.apache.camel.karaf.commands.completers.CamelContextCompleter;
+import org.apache.camel.karaf.commands.internal.CamelControllerImpl;
+import org.apache.karaf.shell.api.action.Action;
+import org.apache.karaf.shell.api.action.Argument;
+import org.apache.karaf.shell.api.action.Command;
+import org.apache.karaf.shell.api.action.Completion;
+import org.apache.karaf.shell.api.action.Option;
+import org.apache.karaf.shell.api.action.lifecycle.Service;
 
 @Command(scope = "camel", name = "eip-explain", description = "Explain the EIP 
in the CamelContext")
-public class EipExplain extends CamelCommandSupport {
+@Service
+public class EipExplain extends CamelControllerImpl implements Action {
 
     @Argument(index = 0, name = "name", description = "The name of the Camel 
context", required = true, multiValued = false)
+    @Completion(CamelContextCompleter.class)
     String name;
 
     @Argument(index = 1, name = "nameOrId", description = "The name of the EIP 
or a node id to refer to a specific node from the routes", required = true, 
multiValued = false)
@@ -34,9 +41,9 @@ public class EipExplain extends CamelCommandSupport {
             required = false, multiValued = false, valueToShowInHelp = "false")
     boolean verbose;
 
-    protected Object doExecute() throws Exception {
+    public Object execute() throws Exception {
         EipExplainCommand command = new EipExplainCommand(name, nameOrId, 
verbose);
-        return command.execute(camelController, System.out, System.err);
+        return command.execute(this, System.out, System.err);
     }
 
 }

http://git-wip-us.apache.org/repos/asf/camel/blob/da614b73/platforms/karaf/commands/src/main/java/org/apache/camel/karaf/commands/EndpointExplain.java
----------------------------------------------------------------------
diff --git 
a/platforms/karaf/commands/src/main/java/org/apache/camel/karaf/commands/EndpointExplain.java
 
b/platforms/karaf/commands/src/main/java/org/apache/camel/karaf/commands/EndpointExplain.java
index be0d312..dbd8bae 100644
--- 
a/platforms/karaf/commands/src/main/java/org/apache/camel/karaf/commands/EndpointExplain.java
+++ 
b/platforms/karaf/commands/src/main/java/org/apache/camel/karaf/commands/EndpointExplain.java
@@ -17,14 +17,21 @@
 package org.apache.camel.karaf.commands;
 
 import org.apache.camel.commands.EndpointExplainCommand;
-import org.apache.felix.gogo.commands.Argument;
-import org.apache.felix.gogo.commands.Command;
-import org.apache.felix.gogo.commands.Option;
+import org.apache.camel.karaf.commands.completers.CamelContextCompleter;
+import org.apache.camel.karaf.commands.internal.CamelControllerImpl;
+import org.apache.karaf.shell.api.action.Action;
+import org.apache.karaf.shell.api.action.Argument;
+import org.apache.karaf.shell.api.action.Command;
+import org.apache.karaf.shell.api.action.Completion;
+import org.apache.karaf.shell.api.action.Option;
+import org.apache.karaf.shell.api.action.lifecycle.Service;
 
 @Command(scope = "camel", name = "endpoint-explain", description = "Explain 
all Camel endpoints available in the CamelContext")
-public class EndpointExplain extends CamelCommandSupport {
+@Service
+public class EndpointExplain extends CamelControllerImpl implements Action {
 
     @Argument(index = 0, name = "name", description = "The name of the Camel 
context", required = true, multiValued = false)
+    @Completion(CamelContextCompleter.class)
     String name;
 
     @Option(name = "--verbose", aliases = "-v", description = "Verbose output 
to explain all options",
@@ -35,9 +42,9 @@ public class EndpointExplain extends CamelCommandSupport {
             required = false, multiValued = false)
     String filter;
 
-    protected Object doExecute() throws Exception {
+    public Object execute() throws Exception {
         EndpointExplainCommand command = new EndpointExplainCommand(name, 
verbose, filter);
-        return command.execute(camelController, System.out, System.err);
+        return command.execute(this, System.out, System.err);
     }
 
 }

http://git-wip-us.apache.org/repos/asf/camel/blob/da614b73/platforms/karaf/commands/src/main/java/org/apache/camel/karaf/commands/EndpointList.java
----------------------------------------------------------------------
diff --git 
a/platforms/karaf/commands/src/main/java/org/apache/camel/karaf/commands/EndpointList.java
 
b/platforms/karaf/commands/src/main/java/org/apache/camel/karaf/commands/EndpointList.java
index fca9f76..1c49270 100644
--- 
a/platforms/karaf/commands/src/main/java/org/apache/camel/karaf/commands/EndpointList.java
+++ 
b/platforms/karaf/commands/src/main/java/org/apache/camel/karaf/commands/EndpointList.java
@@ -17,14 +17,21 @@
 package org.apache.camel.karaf.commands;
 
 import org.apache.camel.commands.EndpointListCommand;
-import org.apache.felix.gogo.commands.Argument;
-import org.apache.felix.gogo.commands.Command;
-import org.apache.felix.gogo.commands.Option;
+import org.apache.camel.karaf.commands.completers.CamelContextCompleter;
+import org.apache.camel.karaf.commands.internal.CamelControllerImpl;
+import org.apache.karaf.shell.api.action.Action;
+import org.apache.karaf.shell.api.action.Argument;
+import org.apache.karaf.shell.api.action.Command;
+import org.apache.karaf.shell.api.action.Completion;
+import org.apache.karaf.shell.api.action.Option;
+import org.apache.karaf.shell.api.action.lifecycle.Service;
 
 @Command(scope = "camel", name = "endpoint-list", description = "Lists Camel 
endpoints")
-public class EndpointList extends CamelCommandSupport {
+@Service
+public class EndpointList extends CamelControllerImpl implements Action {
 
     @Argument(index = 0, name = "name", description = "The name of the Camel 
context", required = true, multiValued = false)
+    @Completion(CamelContextCompleter.class)
     String name;
 
     @Option(name = "--decode", aliases = "-d", description = "Whether to 
decode the endpoint uri so its human readable",
@@ -39,9 +46,9 @@ public class EndpointList extends CamelCommandSupport {
             required = false, multiValued = false, valueToShowInHelp = "false")
     boolean explain;
 
-    protected Object doExecute() throws Exception {
+    public Object execute() throws Exception {
         EndpointListCommand command = new EndpointListCommand(name, decode, 
verbose, explain);
-        return command.execute(camelController, System.out, System.err);
+        return command.execute(this, System.out, System.err);
     }
 
 }

http://git-wip-us.apache.org/repos/asf/camel/blob/da614b73/platforms/karaf/commands/src/main/java/org/apache/camel/karaf/commands/EndpointStats.java
----------------------------------------------------------------------
diff --git 
a/platforms/karaf/commands/src/main/java/org/apache/camel/karaf/commands/EndpointStats.java
 
b/platforms/karaf/commands/src/main/java/org/apache/camel/karaf/commands/EndpointStats.java
index a06ff4c..ee0811a 100644
--- 
a/platforms/karaf/commands/src/main/java/org/apache/camel/karaf/commands/EndpointStats.java
+++ 
b/platforms/karaf/commands/src/main/java/org/apache/camel/karaf/commands/EndpointStats.java
@@ -17,14 +17,21 @@
 package org.apache.camel.karaf.commands;
 
 import org.apache.camel.commands.EndpointStatisticCommand;
-import org.apache.felix.gogo.commands.Argument;
-import org.apache.felix.gogo.commands.Command;
-import org.apache.felix.gogo.commands.Option;
+import org.apache.camel.karaf.commands.completers.CamelContextCompleter;
+import org.apache.camel.karaf.commands.internal.CamelControllerImpl;
+import org.apache.karaf.shell.api.action.Action;
+import org.apache.karaf.shell.api.action.Argument;
+import org.apache.karaf.shell.api.action.Command;
+import org.apache.karaf.shell.api.action.Completion;
+import org.apache.karaf.shell.api.action.Option;
+import org.apache.karaf.shell.api.action.lifecycle.Service;
 
 @Command(scope = "camel", name = "endpoint-stats", description = "Display 
endpoint runtime statistics")
-public class EndpointStats extends CamelCommandSupport {
+@Service
+public class EndpointStats extends CamelControllerImpl implements Action {
 
     @Argument(index = 0, name = "name", description = "The name of the Camel 
context (support wildcard)", required = false, multiValued = false)
+    @Completion(CamelContextCompleter.class)
     String name;
 
     @Option(name = "--filter", aliases = "-f", description = "Filter the list 
by in,out,static,dynamic",
@@ -35,9 +42,9 @@ public class EndpointStats extends CamelCommandSupport {
             required = false, multiValued = false, valueToShowInHelp = "true")
     boolean decode = true;
 
-    protected Object doExecute() throws Exception {
+    public Object execute() throws Exception {
         EndpointStatisticCommand command = new EndpointStatisticCommand(name, 
decode, filter);
-        return command.execute(camelController, System.out, System.err);
+        return command.execute(this, System.out, System.err);
     }
 
 }

http://git-wip-us.apache.org/repos/asf/camel/blob/da614b73/platforms/karaf/commands/src/main/java/org/apache/camel/karaf/commands/RestApiDoc.java
----------------------------------------------------------------------
diff --git 
a/platforms/karaf/commands/src/main/java/org/apache/camel/karaf/commands/RestApiDoc.java
 
b/platforms/karaf/commands/src/main/java/org/apache/camel/karaf/commands/RestApiDoc.java
index dfdbbbb..bd95893 100644
--- 
a/platforms/karaf/commands/src/main/java/org/apache/camel/karaf/commands/RestApiDoc.java
+++ 
b/platforms/karaf/commands/src/main/java/org/apache/camel/karaf/commands/RestApiDoc.java
@@ -17,18 +17,25 @@
 package org.apache.camel.karaf.commands;
 
 import org.apache.camel.commands.RestApiDocCommand;
-import org.apache.felix.gogo.commands.Argument;
-import org.apache.felix.gogo.commands.Command;
+import org.apache.camel.karaf.commands.completers.CamelContextCompleter;
+import org.apache.camel.karaf.commands.internal.CamelControllerImpl;
+import org.apache.karaf.shell.api.action.Action;
+import org.apache.karaf.shell.api.action.Argument;
+import org.apache.karaf.shell.api.action.Command;
+import org.apache.karaf.shell.api.action.Completion;
+import org.apache.karaf.shell.api.action.lifecycle.Service;
 
 @Command(scope = "camel", name = "rest-api-doc", description = "List the Camel 
REST services API documentation (requires camel-swagger-java on classpath)")
-public class RestApiDoc extends CamelCommandSupport {
+@Service
+public class RestApiDoc extends CamelControllerImpl implements Action {
 
     @Argument(index = 0, name = "name", description = "The Camel context name 
where to look for the REST services", required = true, multiValued = false)
+    @Completion(CamelContextCompleter.class)
     String name;
 
-    protected Object doExecute() throws Exception {
+    public Object execute() throws Exception {
         RestApiDocCommand command = new RestApiDocCommand(name);
-        return command.execute(camelController, System.out, System.err);
+        return command.execute(this, System.out, System.err);
     }
 
 }

http://git-wip-us.apache.org/repos/asf/camel/blob/da614b73/platforms/karaf/commands/src/main/java/org/apache/camel/karaf/commands/RestRegistryList.java
----------------------------------------------------------------------
diff --git 
a/platforms/karaf/commands/src/main/java/org/apache/camel/karaf/commands/RestRegistryList.java
 
b/platforms/karaf/commands/src/main/java/org/apache/camel/karaf/commands/RestRegistryList.java
index 3e57177..84ac606 100644
--- 
a/platforms/karaf/commands/src/main/java/org/apache/camel/karaf/commands/RestRegistryList.java
+++ 
b/platforms/karaf/commands/src/main/java/org/apache/camel/karaf/commands/RestRegistryList.java
@@ -17,14 +17,21 @@
 package org.apache.camel.karaf.commands;
 
 import org.apache.camel.commands.RestRegistryListCommand;
-import org.apache.felix.gogo.commands.Argument;
-import org.apache.felix.gogo.commands.Command;
-import org.apache.felix.gogo.commands.Option;
+import org.apache.camel.karaf.commands.completers.CamelContextCompleter;
+import org.apache.camel.karaf.commands.internal.CamelControllerImpl;
+import org.apache.karaf.shell.api.action.Action;
+import org.apache.karaf.shell.api.action.Argument;
+import org.apache.karaf.shell.api.action.Command;
+import org.apache.karaf.shell.api.action.Completion;
+import org.apache.karaf.shell.api.action.Option;
+import org.apache.karaf.shell.api.action.lifecycle.Service;
 
 @Command(scope = "camel", name = "rest-registry-list", description = "Lists 
all Camel REST services enlisted in the Rest Registry from a CamelContext")
-public class RestRegistryList extends CamelCommandSupport {
+@Service
+public class RestRegistryList extends CamelControllerImpl implements Action {
 
     @Argument(index = 0, name = "name", description = "The Camel context name 
where to look for the REST services", required = true, multiValued = false)
+    @Completion(CamelContextCompleter.class)
     String name;
 
     @Option(name = "--decode", aliases = "-d", description = "Whether to 
decode the endpoint uri so its human readable",
@@ -35,9 +42,9 @@ public class RestRegistryList extends CamelCommandSupport {
             required = false, multiValued = false, valueToShowInHelp = "false")
     Boolean verbose = false;
 
-    protected Object doExecute() throws Exception {
+    public Object execute() throws Exception {
         RestRegistryListCommand command = new RestRegistryListCommand(name, 
decode, verbose);
-        return command.execute(camelController, System.out, System.err);
+        return command.execute(this, System.out, System.err);
     }
 
 }

http://git-wip-us.apache.org/repos/asf/camel/blob/da614b73/platforms/karaf/commands/src/main/java/org/apache/camel/karaf/commands/RestShow.java
----------------------------------------------------------------------
diff --git 
a/platforms/karaf/commands/src/main/java/org/apache/camel/karaf/commands/RestShow.java
 
b/platforms/karaf/commands/src/main/java/org/apache/camel/karaf/commands/RestShow.java
index 55422c4..fac9352 100644
--- 
a/platforms/karaf/commands/src/main/java/org/apache/camel/karaf/commands/RestShow.java
+++ 
b/platforms/karaf/commands/src/main/java/org/apache/camel/karaf/commands/RestShow.java
@@ -17,18 +17,25 @@
 package org.apache.camel.karaf.commands;
 
 import org.apache.camel.commands.RestShowCommand;
-import org.apache.felix.gogo.commands.Argument;
-import org.apache.felix.gogo.commands.Command;
+import org.apache.camel.karaf.commands.completers.CamelContextCompleter;
+import org.apache.camel.karaf.commands.internal.CamelControllerImpl;
+import org.apache.karaf.shell.api.action.Action;
+import org.apache.karaf.shell.api.action.Argument;
+import org.apache.karaf.shell.api.action.Command;
+import org.apache.karaf.shell.api.action.Completion;
+import org.apache.karaf.shell.api.action.lifecycle.Service;
 
 @Command(scope = "camel", name = "rest-show", description = "Display the Camel 
REST definition in XML")
-public class RestShow extends CamelCommandSupport {
+@Service
+public class RestShow extends CamelControllerImpl implements Action {
 
     @Argument(index = 0, name = "name", description = "The name of the Camel 
context", required = true, multiValued = false)
+    @Completion(CamelContextCompleter.class)
     String name;
 
-    public Object doExecute() throws Exception {
+    public Object execute() throws Exception {
         RestShowCommand command = new RestShowCommand(name);
-        return command.execute(camelController, System.out, System.err);
+        return command.execute(this, System.out, System.err);
     }
 
 }

http://git-wip-us.apache.org/repos/asf/camel/blob/da614b73/platforms/karaf/commands/src/main/java/org/apache/camel/karaf/commands/RouteInfo.java
----------------------------------------------------------------------
diff --git 
a/platforms/karaf/commands/src/main/java/org/apache/camel/karaf/commands/RouteInfo.java
 
b/platforms/karaf/commands/src/main/java/org/apache/camel/karaf/commands/RouteInfo.java
index 6156377..92af15c 100644
--- 
a/platforms/karaf/commands/src/main/java/org/apache/camel/karaf/commands/RouteInfo.java
+++ 
b/platforms/karaf/commands/src/main/java/org/apache/camel/karaf/commands/RouteInfo.java
@@ -18,21 +18,20 @@ package org.apache.camel.karaf.commands;
 
 import org.apache.camel.commands.RouteInfoCommand;
 import org.apache.camel.commands.StringEscape;
-import org.apache.felix.gogo.commands.Command;
+import org.apache.karaf.shell.api.action.Command;
+import org.apache.karaf.shell.api.action.lifecycle.Reference;
+import org.apache.karaf.shell.api.action.lifecycle.Service;
 
 @Command(scope = "camel", name = "route-info", description = "Display 
information about a Camel route.")
+@Service
 public class RouteInfo extends AbstractRouteCommand {
 
-    private StringEscape stringEscape;
+    private StringEscape stringEscape = 
org.apache.camel.karaf.commands.internal.StringEscape.getInstance();
 
-    public void setStringEscape(StringEscape stringEscape) {
-        this.stringEscape = stringEscape;
-    }
-
-    public Object doExecute() throws Exception {
+    public Object execute() throws Exception {
         RouteInfoCommand command = new RouteInfoCommand(route, context);
         command.setStringEscape(stringEscape);
-        return command.execute(camelController, System.out, System.err);
+        return command.execute(this, System.out, System.err);
     }
 
 }

http://git-wip-us.apache.org/repos/asf/camel/blob/da614b73/platforms/karaf/commands/src/main/java/org/apache/camel/karaf/commands/RouteList.java
----------------------------------------------------------------------
diff --git 
a/platforms/karaf/commands/src/main/java/org/apache/camel/karaf/commands/RouteList.java
 
b/platforms/karaf/commands/src/main/java/org/apache/camel/karaf/commands/RouteList.java
index 52e70af..9ed1f2d 100644
--- 
a/platforms/karaf/commands/src/main/java/org/apache/camel/karaf/commands/RouteList.java
+++ 
b/platforms/karaf/commands/src/main/java/org/apache/camel/karaf/commands/RouteList.java
@@ -17,18 +17,25 @@
 package org.apache.camel.karaf.commands;
 
 import org.apache.camel.commands.RouteListCommand;
-import org.apache.felix.gogo.commands.Argument;
-import org.apache.felix.gogo.commands.Command;
+import org.apache.camel.karaf.commands.completers.CamelContextCompleter;
+import org.apache.camel.karaf.commands.internal.CamelControllerImpl;
+import org.apache.karaf.shell.api.action.Action;
+import org.apache.karaf.shell.api.action.Argument;
+import org.apache.karaf.shell.api.action.Command;
+import org.apache.karaf.shell.api.action.Completion;
+import org.apache.karaf.shell.api.action.lifecycle.Service;
 
 @Command(scope = "camel", name = "route-list", description = "List Camel 
routes.")
-public class RouteList extends CamelCommandSupport {
+@Service
+public class RouteList extends CamelControllerImpl implements Action {
 
     @Argument(index = 0, name = "name", description = "The Camel context name 
where to look for the route", required = false, multiValued = false)
+    @Completion(CamelContextCompleter.class)
     String name;
 
-    protected Object doExecute() throws Exception {
+    public Object execute() throws Exception {
         RouteListCommand command = new RouteListCommand(name);
-        return command.execute(camelController, System.out, System.err);
+        return command.execute(this, System.out, System.err);
     }
 
 }

http://git-wip-us.apache.org/repos/asf/camel/blob/da614b73/platforms/karaf/commands/src/main/java/org/apache/camel/karaf/commands/RouteProfile.java
----------------------------------------------------------------------
diff --git 
a/platforms/karaf/commands/src/main/java/org/apache/camel/karaf/commands/RouteProfile.java
 
b/platforms/karaf/commands/src/main/java/org/apache/camel/karaf/commands/RouteProfile.java
index e6452ef..9ce4f6a 100644
--- 
a/platforms/karaf/commands/src/main/java/org/apache/camel/karaf/commands/RouteProfile.java
+++ 
b/platforms/karaf/commands/src/main/java/org/apache/camel/karaf/commands/RouteProfile.java
@@ -18,21 +18,20 @@ package org.apache.camel.karaf.commands;
 
 import org.apache.camel.commands.RouteProfileCommand;
 import org.apache.camel.commands.StringEscape;
-import org.apache.felix.gogo.commands.Command;
+import org.apache.karaf.shell.api.action.Command;
+import org.apache.karaf.shell.api.action.lifecycle.Reference;
+import org.apache.karaf.shell.api.action.lifecycle.Service;
 
 @Command(scope = "camel", name = "route-profile", description = "Display 
profile information about Camel route(s).")
+@Service
 public class RouteProfile extends AbstractRouteCommand {
 
-    private StringEscape stringEscape;
-
-    public void setStringEscape(StringEscape stringEscape) {
-        this.stringEscape = stringEscape;
-    }
+    private StringEscape stringEscape = 
org.apache.camel.karaf.commands.internal.StringEscape.getInstance();
 
     @Override
-    protected Object doExecute() throws Exception {
+    public Object execute() throws Exception {
         RouteProfileCommand command = new RouteProfileCommand(route, context);
         command.setStringEscape(stringEscape);
-        return command.execute(camelController, System.out, System.err);
+        return command.execute(this, System.out, System.err);
     }
 }

http://git-wip-us.apache.org/repos/asf/camel/blob/da614b73/platforms/karaf/commands/src/main/java/org/apache/camel/karaf/commands/RouteResetStats.java
----------------------------------------------------------------------
diff --git 
a/platforms/karaf/commands/src/main/java/org/apache/camel/karaf/commands/RouteResetStats.java
 
b/platforms/karaf/commands/src/main/java/org/apache/camel/karaf/commands/RouteResetStats.java
index cc8bab5..c0cea45 100644
--- 
a/platforms/karaf/commands/src/main/java/org/apache/camel/karaf/commands/RouteResetStats.java
+++ 
b/platforms/karaf/commands/src/main/java/org/apache/camel/karaf/commands/RouteResetStats.java
@@ -17,19 +17,26 @@
 package org.apache.camel.karaf.commands;
 
 import org.apache.camel.commands.RouteResetStatsCommand;
-import org.apache.felix.gogo.commands.Argument;
-import org.apache.felix.gogo.commands.Command;
+import org.apache.camel.karaf.commands.completers.CamelContextCompleter;
+import org.apache.camel.karaf.commands.internal.CamelControllerImpl;
+import org.apache.karaf.shell.api.action.Action;
+import org.apache.karaf.shell.api.action.Argument;
+import org.apache.karaf.shell.api.action.Command;
+import org.apache.karaf.shell.api.action.Completion;
+import org.apache.karaf.shell.api.action.lifecycle.Service;
 
 @Command(scope = "camel", name = "route-reset-stats", description = "Reset 
route performance stats from a CamelContext")
-public class RouteResetStats extends CamelCommandSupport {
+@Service
+public class RouteResetStats extends CamelControllerImpl implements Action {
 
     @Argument(index = 0, name = "context", description = "The name of the 
Camel context.", required = true, multiValued = false)
+    @Completion(CamelContextCompleter.class)
     String context;
 
     @Override
-    protected Object doExecute() throws Exception {
+    public Object execute() throws Exception {
         RouteResetStatsCommand command = new RouteResetStatsCommand(context);
-        return command.execute(camelController, System.out, System.err);
+        return command.execute(this, System.out, System.err);
     }
 
 }

http://git-wip-us.apache.org/repos/asf/camel/blob/da614b73/platforms/karaf/commands/src/main/java/org/apache/camel/karaf/commands/RouteResume.java
----------------------------------------------------------------------
diff --git 
a/platforms/karaf/commands/src/main/java/org/apache/camel/karaf/commands/RouteResume.java
 
b/platforms/karaf/commands/src/main/java/org/apache/camel/karaf/commands/RouteResume.java
index aa730ca..5f65479 100644
--- 
a/platforms/karaf/commands/src/main/java/org/apache/camel/karaf/commands/RouteResume.java
+++ 
b/platforms/karaf/commands/src/main/java/org/apache/camel/karaf/commands/RouteResume.java
@@ -17,15 +17,17 @@
 package org.apache.camel.karaf.commands;
 
 import org.apache.camel.commands.RouteResumeCommand;
-import org.apache.felix.gogo.commands.Command;
+import org.apache.karaf.shell.api.action.Command;
+import org.apache.karaf.shell.api.action.lifecycle.Service;
 
 @Command(scope = "camel", name = "route-resume", description = "Resume a Camel 
route")
+@Service
 public class RouteResume extends AbstractRouteCommand {
 
     @Override
-    protected Object doExecute() throws Exception {
+    public Object execute() throws Exception {
         RouteResumeCommand command = new RouteResumeCommand(route, context);
-        return command.execute(camelController, System.out, System.err);
+        return command.execute(this, System.out, System.err);
     }
 
 }

http://git-wip-us.apache.org/repos/asf/camel/blob/da614b73/platforms/karaf/commands/src/main/java/org/apache/camel/karaf/commands/RouteShow.java
----------------------------------------------------------------------
diff --git 
a/platforms/karaf/commands/src/main/java/org/apache/camel/karaf/commands/RouteShow.java
 
b/platforms/karaf/commands/src/main/java/org/apache/camel/karaf/commands/RouteShow.java
index 950df70..b1302b9 100644
--- 
a/platforms/karaf/commands/src/main/java/org/apache/camel/karaf/commands/RouteShow.java
+++ 
b/platforms/karaf/commands/src/main/java/org/apache/camel/karaf/commands/RouteShow.java
@@ -17,14 +17,16 @@
 package org.apache.camel.karaf.commands;
 
 import org.apache.camel.commands.RouteShowCommand;
-import org.apache.felix.gogo.commands.Command;
+import org.apache.karaf.shell.api.action.Command;
+import org.apache.karaf.shell.api.action.lifecycle.Service;
 
 @Command(scope = "camel", name = "route-show", description = "Display the 
Camel route definition in XML")
+@Service
 public class RouteShow extends AbstractRouteCommand {
 
-    public Object doExecute() throws Exception {
+    public Object execute() throws Exception {
         RouteShowCommand command = new RouteShowCommand(route, context);
-        return command.execute(camelController, System.out, System.err);
+        return command.execute(this, System.out, System.err);
     }
 
 }

http://git-wip-us.apache.org/repos/asf/camel/blob/da614b73/platforms/karaf/commands/src/main/java/org/apache/camel/karaf/commands/RouteStart.java
----------------------------------------------------------------------
diff --git 
a/platforms/karaf/commands/src/main/java/org/apache/camel/karaf/commands/RouteStart.java
 
b/platforms/karaf/commands/src/main/java/org/apache/camel/karaf/commands/RouteStart.java
index a19b732..00e2d66 100644
--- 
a/platforms/karaf/commands/src/main/java/org/apache/camel/karaf/commands/RouteStart.java
+++ 
b/platforms/karaf/commands/src/main/java/org/apache/camel/karaf/commands/RouteStart.java
@@ -17,14 +17,16 @@
 package org.apache.camel.karaf.commands;
 
 import org.apache.camel.commands.RouteStartCommand;
-import org.apache.felix.gogo.commands.Command;
+import org.apache.karaf.shell.api.action.Command;
+import org.apache.karaf.shell.api.action.lifecycle.Service;
 
 @Command(scope = "camel", name = "route-start", description = "Start a Camel 
route")
+@Service
 public class RouteStart extends AbstractRouteCommand {
 
     @Override
-    protected Object doExecute() throws Exception {
+    public Object execute() throws Exception {
         RouteStartCommand command = new RouteStartCommand(route, context);
-        return command.execute(camelController, System.out, System.err);
+        return command.execute(this, System.out, System.err);
     }
 }

http://git-wip-us.apache.org/repos/asf/camel/blob/da614b73/platforms/karaf/commands/src/main/java/org/apache/camel/karaf/commands/RouteStop.java
----------------------------------------------------------------------
diff --git 
a/platforms/karaf/commands/src/main/java/org/apache/camel/karaf/commands/RouteStop.java
 
b/platforms/karaf/commands/src/main/java/org/apache/camel/karaf/commands/RouteStop.java
index e7713b6..5d32cf3 100644
--- 
a/platforms/karaf/commands/src/main/java/org/apache/camel/karaf/commands/RouteStop.java
+++ 
b/platforms/karaf/commands/src/main/java/org/apache/camel/karaf/commands/RouteStop.java
@@ -17,15 +17,17 @@
 package org.apache.camel.karaf.commands;
 
 import org.apache.camel.commands.RouteStopCommand;
-import org.apache.felix.gogo.commands.Command;
+import org.apache.karaf.shell.api.action.Command;
+import org.apache.karaf.shell.api.action.lifecycle.Service;
 
-@Command(scope = "camel", name = " route-stop", description = "Stop a Camel 
route")
+@Command(scope = "camel", name = "route-stop", description = "Stop a Camel 
route")
+@Service
 public class RouteStop extends AbstractRouteCommand {
 
     @Override
-    protected Object doExecute() throws Exception {
+    public Object execute() throws Exception {
         RouteStopCommand command = new RouteStopCommand(route, context);
-        return command.execute(camelController, System.out, System.err);
+        return command.execute(this, System.out, System.err);
     }
 
 }

Reply via email to