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);
}
}