You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@karaf.apache.org by ff...@apache.org on 2015/09/10 06:05:07 UTC
karaf git commit: [KARAF-3984]bin/client with a command can't exit
automatically
Repository: karaf
Updated Branches:
refs/heads/karaf-3.0.x 27a129ba1 -> ae8a985f4
[KARAF-3984]bin/client with a command can't exit automatically
Project: http://git-wip-us.apache.org/repos/asf/karaf/repo
Commit: http://git-wip-us.apache.org/repos/asf/karaf/commit/ae8a985f
Tree: http://git-wip-us.apache.org/repos/asf/karaf/tree/ae8a985f
Diff: http://git-wip-us.apache.org/repos/asf/karaf/diff/ae8a985f
Branch: refs/heads/karaf-3.0.x
Commit: ae8a985f4191e8e3cb6ac2736dabae8941971225
Parents: 27a129b
Author: Freeman Fang <fr...@gmail.com>
Authored: Thu Sep 10 12:04:32 2015 +0800
Committer: Freeman Fang <fr...@gmail.com>
Committed: Thu Sep 10 12:04:32 2015 +0800
----------------------------------------------------------------------
.../gogo/runtime/CommandProcessorImpl.java | 358 -------------------
1 file changed, 358 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/karaf/blob/ae8a985f/shell/console/src/main/java/org/apache/felix/gogo/runtime/CommandProcessorImpl.java
----------------------------------------------------------------------
diff --git a/shell/console/src/main/java/org/apache/felix/gogo/runtime/CommandProcessorImpl.java b/shell/console/src/main/java/org/apache/felix/gogo/runtime/CommandProcessorImpl.java
deleted file mode 100644
index 72cff88..0000000
--- a/shell/console/src/main/java/org/apache/felix/gogo/runtime/CommandProcessorImpl.java
+++ /dev/null
@@ -1,358 +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.felix.gogo.runtime;
-
-import java.io.InputStream;
-import java.io.PrintStream;
-import java.lang.reflect.Method;
-import java.util.Collections;
-import java.util.LinkedHashMap;
-import java.util.Map;
-import java.util.Map.Entry;
-import java.util.Set;
-import java.util.TreeSet;
-import java.util.WeakHashMap;
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.concurrent.ConcurrentMap;
-import java.util.concurrent.CopyOnWriteArraySet;
-
-import org.apache.felix.gogo.api.CommandSessionListener;
-import org.apache.felix.service.command.CommandProcessor;
-import org.apache.felix.service.command.CommandSession;
-import org.apache.felix.service.command.Converter;
-import org.apache.felix.service.command.Function;
-import org.apache.felix.service.threadio.ThreadIO;
-
-/**
- * TODO: remove this class when upgraded to gogo-runtime >= 0.12.2, see FELIX-4637 / KARAF-3221
- */
-public class CommandProcessorImpl implements CommandProcessor
-{
- protected final Set<Converter> converters = new CopyOnWriteArraySet<Converter>();
- protected final Set<CommandSessionListener> listeners = new CopyOnWriteArraySet<CommandSessionListener>();
- protected final ConcurrentMap<String, Map<Object, Integer>> commands = new ConcurrentHashMap<String, Map<Object, Integer>>();
- protected final Map<String, Object> constants = new ConcurrentHashMap<String, Object>();
- protected final ThreadIO threadIO;
- protected final WeakHashMap<CommandSession, Object> sessions = new WeakHashMap<CommandSession, Object>();
- protected boolean stopped;
-
- public CommandProcessorImpl(ThreadIO tio)
- {
- threadIO = tio;
- }
-
- public CommandSession createSession(InputStream in, PrintStream out, PrintStream err)
- {
- synchronized (sessions)
- {
- if (stopped) {
- throw new IllegalStateException("CommandProcessor has been stopped");
- }
- CommandSessionImpl session = new CommandSessionImpl(this, in, out, err);
- sessions.put(session, null);
- return session;
- }
- }
-
- public void stop()
- {
- synchronized (sessions)
- {
- stopped = true;
- for (CommandSession session : sessions.keySet())
- {
- session.close();
- }
- }
- }
-
- public void addConverter(Converter c)
- {
- converters.add(c);
- }
-
- public void removeConverter(Converter c)
- {
- converters.remove(c);
- }
-
- public void addListener(CommandSessionListener l)
- {
- listeners.add(l);
- }
-
- public void removeListener(CommandSessionListener l)
- {
- listeners.remove(l);
- }
-
- public Set<String> getCommands()
- {
- return Collections.unmodifiableSet(commands.keySet());
- }
-
- Function getCommand(String name, final Object path)
- {
- int colon = name.indexOf(':');
-
- if (colon < 0)
- {
- return null;
- }
-
- name = name.toLowerCase();
- String cfunction = name.substring(colon);
- boolean anyScope = (colon == 1 && name.charAt(0) == '*');
-
- Map<Object, Integer> cmdMap = commands.get(name);
-
- if (null == cmdMap && anyScope)
- {
- String scopePath = (null == path ? "*" : path.toString());
-
- for (String scope : scopePath.split(":"))
- {
- if (scope.equals("*"))
- {
- for (Entry<String, Map<Object, Integer>> entry : commands.entrySet())
- {
- if (entry.getKey().endsWith(cfunction))
- {
- cmdMap = entry.getValue();
- break;
- }
- }
- }
- else
- {
- cmdMap = commands.get(scope + cfunction);
- if (cmdMap != null)
- {
- break;
- }
- }
- }
- }
-
- Object cmd = null;
- if (cmdMap != null && !cmdMap.isEmpty())
- {
- for (Entry<Object, Integer> e : cmdMap.entrySet())
- {
- if (cmd == null || e.getValue() > cmdMap.get(cmd))
- {
- cmd = e.getKey();
- }
- }
- }
- if ((null == cmd) || (cmd instanceof Function))
- {
- return (Function) cmd;
- }
-
- return new CommandProxy(cmd, cfunction.substring(1));
- }
-
- public void addCommand(String scope, Object target)
- {
- Class<?> tc = (target instanceof Class<?>) ? (Class<?>) target
- : target.getClass();
- addCommand(scope, target, tc);
- }
-
- public void addCommand(String scope, Object target, Class<?> functions)
- {
- addCommand(scope, target, functions, 0);
- }
-
- public void addCommand(String scope, Object target, Class<?> functions, int ranking)
- {
- if (target == null)
- {
- return;
- }
-
- String[] names = getFunctions(functions);
- for (String function : names)
- {
- addCommand(scope, target, function, ranking);
- }
- }
-
- public Object addConstant(String name, Object target)
- {
- return constants.put(name, target);
- }
-
- public Object removeConstant(String name)
- {
- return constants.remove(name);
- }
-
- public void addCommand(String scope, Object target, String function)
- {
- addCommand(scope, target, function, 0);
- }
-
- public void addCommand(String scope, Object target, String function, int ranking)
- {
- String key = (scope + ":" + function).toLowerCase();
- Map<Object, Integer> cmdMap = commands.get(key);
- if (cmdMap == null)
- {
- commands.putIfAbsent(key, new LinkedHashMap<Object, Integer>());
- cmdMap = commands.get(key);
- }
- cmdMap.put(target, ranking);
- }
-
- public void removeCommand(String scope, String function)
- {
- // TODO: WARNING: this method does remove all mapping for scope:function
- String key = (scope + ":" + function).toLowerCase();
- commands.remove(key);
- }
-
- public void removeCommand(String scope, String function, Object target)
- {
- // TODO: WARNING: this method does remove all mapping for scope:function
- String key = (scope + ":" + function).toLowerCase();
- Map<Object, Integer> cmdMap = commands.get(key);
- if (cmdMap != null)
- {
- cmdMap.remove(target);
- }
- }
-
- public void removeCommand(Object target)
- {
- for (Map<Object, Integer> cmdMap : commands.values())
- {
- cmdMap.remove(target);
- }
- }
-
- private String[] getFunctions(Class<?> target)
- {
- String[] functions;
- Set<String> list = new TreeSet<String>();
- Method methods[] = target.getMethods();
- for (Method m : methods)
- {
- if (m.getDeclaringClass().equals(Object.class))
- {
- continue;
- }
- list.add(m.getName());
- if (m.getName().startsWith("get"))
- {
- String s = m.getName().substring(3);
- if (s.length() > 0)
- {
- list.add(s.substring(0, 1).toLowerCase() + s.substring(1));
- }
- }
- }
-
- functions = list.toArray(new String[list.size()]);
- return functions;
- }
-
- public Object convert(Class<?> desiredType, Object in)
- {
- for (Converter c : converters)
- {
- try
- {
- Object converted = c.convert(desiredType, in);
- if (converted != null)
- {
- return converted;
- }
- }
- catch (Exception e)
- {
- e.printStackTrace();
- }
- }
- return null;
- }
-
- // eval is needed to force expansions to be treated as commands (FELIX-1473)
- public Object eval(CommandSession session, Object[] argv) throws Exception
- {
- StringBuilder buf = new StringBuilder();
-
- for (Object arg : argv)
- {
- if (buf.length() > 0)
- buf.append(' ');
- buf.append(arg);
- }
-
- return session.execute(buf);
- }
-
- void beforeExecute(CommandSession session, CharSequence commandline)
- {
- for (CommandSessionListener l : listeners)
- {
- try
- {
- l.beforeExecute(session, commandline);
- }
- catch (Throwable t)
- {
- // Ignore
- }
- }
- }
-
- void afterExecute(CommandSession session, CharSequence commandline,
- Exception exception)
- {
- for (CommandSessionListener l : listeners)
- {
- try
- {
- l.afterExecute(session, commandline, exception);
- }
- catch (Throwable t)
- {
- // Ignore
- }
- }
- }
-
- void afterExecute(CommandSession session, CharSequence commandline, Object result)
- {
- for (CommandSessionListener l : listeners)
- {
- try
- {
- l.afterExecute(session, commandline, result);
- }
- catch (Throwable t)
- {
- // Ignore
- }
- }
- }
-
-}