You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@karaf.apache.org by jb...@apache.org on 2015/11/20 17:32:49 UTC

karaf git commit: [KARAF-4118] Add support of declared shell command

Repository: karaf
Updated Branches:
  refs/heads/master 6ece80f14 -> 88961721d


[KARAF-4118] Add support of declared shell command


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

Branch: refs/heads/master
Commit: 88961721d5bd648e174f21d7ec7712b57796bfc3
Parents: 6ece80f
Author: Jean-Baptiste Onofré <jb...@apache.org>
Authored: Fri Nov 20 17:32:23 2015 +0100
Committer: Jean-Baptiste Onofré <jb...@apache.org>
Committed: Fri Nov 20 17:32:23 2015 +0100

----------------------------------------------------------------------
 .../karaf/shell/compat/CommandTracker.java      | 96 +++++++++++++++++++-
 1 file changed, 95 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/karaf/blob/88961721/shell/console/src/main/java/org/apache/karaf/shell/compat/CommandTracker.java
----------------------------------------------------------------------
diff --git a/shell/console/src/main/java/org/apache/karaf/shell/compat/CommandTracker.java b/shell/console/src/main/java/org/apache/karaf/shell/compat/CommandTracker.java
index a923cb7..68e03ba 100644
--- a/shell/console/src/main/java/org/apache/karaf/shell/compat/CommandTracker.java
+++ b/shell/console/src/main/java/org/apache/karaf/shell/compat/CommandTracker.java
@@ -18,10 +18,13 @@
  */
 package org.apache.karaf.shell.compat;
 
+import java.util.ArrayList;
 import java.util.List;
 
+import org.apache.felix.gogo.runtime.CommandProxy;
 import org.apache.felix.service.command.CommandProcessor;
 import org.apache.felix.service.command.CommandSession;
+import org.apache.felix.service.command.Function;
 import org.apache.karaf.shell.api.console.Parser;
 import org.apache.karaf.shell.commands.Command;
 import org.apache.karaf.shell.commands.CommandWithAction;
@@ -159,8 +162,93 @@ public class CommandTracker implements ServiceTrackerCustomizer<Object, Object>
             };
             sessionFactory.getRegistry().register(command);
             return command;
+        } else {
+            final String scope = reference.getProperty(CommandProcessor.COMMAND_SCOPE).toString();
+            final Object function = reference.getProperty(CommandProcessor.COMMAND_FUNCTION);
+
+            List<org.apache.karaf.shell.api.console.Command> commands = new ArrayList<>();
+
+            if (function.getClass().isArray()) {
+                for (final Object f : ((Object[]) function)) {
+                    final Function target;
+
+                    target = new CommandProxy(context, reference, f.toString());
+                    org.apache.karaf.shell.api.console.Command command = new org.apache.karaf.shell.api.console.Command() {
+                        @Override
+                        public String getScope() {
+                            return scope;
+                        }
+
+                        @Override
+                        public String getName() {
+                            return f.toString();
+                        }
+
+                        @Override
+                        public String getDescription() {
+                            return reference.getProperty("osgi.command.description").toString();
+                        }
+
+                        @Override
+                        public Completer getCompleter(final boolean scoped) {
+                            return null;
+                        }
+
+                        @Override
+                        public Parser getParser() {
+                            return null;
+                        }
+
+                        @Override
+                        public Object execute(Session session, List<Object> arguments) throws Exception {
+                            // TODO: remove not really nice cast
+                            CommandSession commandSession = (CommandSession) session.get(".commandSession");
+                            return target.execute(commandSession, arguments);
+                        }
+                    };
+                    sessionFactory.getRegistry().register(command);
+                    commands.add(command);
+                }
+            } else {
+                final Function target = new CommandProxy(context, reference, function.toString());
+                org.apache.karaf.shell.api.console.Command command = new org.apache.karaf.shell.api.console.Command() {
+                    @Override
+                    public String getScope() {
+                        return scope;
+                    }
+
+                    @Override
+                    public String getName() {
+                        return function.toString();
+                    }
+
+                    @Override
+                    public String getDescription() {
+                        return reference.getProperty("osgi.command.description").toString();
+                    }
+
+                    @Override
+                    public Completer getCompleter(final boolean scoped) {
+                        return null;
+                    }
+
+                    @Override
+                    public Parser getParser() {
+                        return null;
+                    }
+
+                    @Override
+                    public Object execute(Session session, List<Object> arguments) throws Exception {
+                        // TODO: remove not really nice cast
+                        CommandSession commandSession = (CommandSession) session.get(".commandSession");
+                        return target.execute(commandSession, arguments);
+                    }
+                };
+                sessionFactory.getRegistry().register(command);
+                commands.add(command);
+            }
+            return commands;
         }
-        return service;
     }
 
     @Override
@@ -172,6 +260,12 @@ public class CommandTracker implements ServiceTrackerCustomizer<Object, Object>
         if (service instanceof org.apache.karaf.shell.api.console.Command) {
             sessionFactory.getRegistry().unregister(service);
         }
+        if (service instanceof List) {
+            List<org.apache.karaf.shell.api.console.Command> commands = (List<org.apache.karaf.shell.api.console.Command>) service;
+            for (org.apache.karaf.shell.api.console.Command command : commands) {
+                sessionFactory.getRegistry().unregister(command);
+            }
+        }
         context.ungetService(reference);
     }
 }