You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@felix.apache.org by ri...@apache.org on 2010/05/05 18:37:30 UTC
svn commit: r941374 - in /felix/trunk/gogo/felixcommands: ./
src/main/java/org/apache/felix/gogo/felixcommands/Basic.java
Author: rickhall
Date: Wed May 5 16:37:29 2010
New Revision: 941374
URL: http://svn.apache.org/viewvc?rev=941374&view=rev
Log:
Improve rudimentary "help" command and change some exception handling
in some commands. (FELIX-2042)
Modified:
felix/trunk/gogo/felixcommands/ (props changed)
felix/trunk/gogo/felixcommands/src/main/java/org/apache/felix/gogo/felixcommands/Basic.java
Propchange: felix/trunk/gogo/felixcommands/
------------------------------------------------------------------------------
--- svn:ignore (added)
+++ svn:ignore Wed May 5 16:37:29 2010
@@ -0,0 +1 @@
+target
Modified: felix/trunk/gogo/felixcommands/src/main/java/org/apache/felix/gogo/felixcommands/Basic.java
URL: http://svn.apache.org/viewvc/felix/trunk/gogo/felixcommands/src/main/java/org/apache/felix/gogo/felixcommands/Basic.java?rev=941374&r1=941373&r2=941374&view=diff
==============================================================================
--- felix/trunk/gogo/felixcommands/src/main/java/org/apache/felix/gogo/felixcommands/Basic.java (original)
+++ felix/trunk/gogo/felixcommands/src/main/java/org/apache/felix/gogo/felixcommands/Basic.java Wed May 5 16:37:29 2010
@@ -6,9 +6,9 @@
* 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
@@ -21,6 +21,7 @@ package org.apache.felix.gogo.felixcomma
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintStream;
+import java.lang.annotation.Annotation;
import java.lang.reflect.Method;
import java.net.MalformedURLException;
import java.net.URL;
@@ -28,10 +29,10 @@ import java.util.ArrayList;
import java.util.Arrays;
import java.util.Dictionary;
import java.util.Enumeration;
-import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
+import java.util.TreeMap;
import org.osgi.framework.Bundle;
import org.osgi.framework.BundleContext;
import org.osgi.framework.BundleException;
@@ -39,6 +40,7 @@ import org.osgi.framework.Constants;
import org.osgi.framework.InvalidSyntaxException;
import org.osgi.framework.ServiceReference;
import org.osgi.service.command.Flag;
+import org.osgi.service.command.Option;
import org.osgi.service.packageadmin.PackageAdmin;
import org.osgi.service.startlevel.StartLevel;
@@ -180,6 +182,77 @@ public class Basic
public void help()
{
+ Map<String, List<Method>> commands = getCommands();
+ for (String name : commands.keySet())
+ {
+ System.out.println(name);
+ }
+ }
+
+ public void help(String name)
+ {
+ Map<String, List<Method>> commands = getCommands();
+ List<Method> methods = commands.get(name);
+ if ((methods != null) && (methods.size() > 0))
+ {
+ for (Method m : methods)
+ {
+ String s = m.toString();
+ int parenIdx = s.indexOf('(');
+ int idx = 0;
+ for (int dotIdx = s.indexOf('.');
+ (dotIdx >= 0) && (dotIdx < parenIdx);
+ dotIdx = s.indexOf('.', idx + 1))
+ {
+ idx = dotIdx + 1;
+ }
+
+ System.out.println(s.substring(idx));
+
+ // Get flags and options.
+ Map<String, Flag> flags = new TreeMap();
+ Map<String, Option> options = new TreeMap();
+ Annotation[][] anns = m.getParameterAnnotations();
+ for (int paramIdx = 0; paramIdx < anns.length; paramIdx++)
+ {
+ for (int annIdx = 0; annIdx < anns[paramIdx].length; annIdx++)
+ {
+ Annotation ann = anns[paramIdx][annIdx];
+ if (ann instanceof Flag)
+ {
+ flags.put(((Flag) ann).name(), (Flag) ann);
+ }
+ else if (ann instanceof Option)
+ {
+ options.put(((Option) ann).name(), (Option) ann);
+ }
+ }
+ }
+
+ // Print flags and options.
+ if (flags.size() > 0)
+ {
+ System.out.println(" flags:");
+ for (Entry<String, Flag> entry : flags.entrySet())
+ {
+ System.out.println(" " + entry.getValue().name());
+ }
+ }
+ if (options.size() > 0)
+ {
+ System.out.println(" options:");
+ for (Entry<String, Option> entry : options.entrySet())
+ {
+ System.out.println(" " + entry.getValue().name()
+ + ((entry.getValue().dflt() == null) ? "" : " [optional]"));
+ }
+ }
+ }
+ }
+ }
+
+ private Map<String, List<Method>> getCommands()
+ {
ServiceReference[] refs = null;
try
{
@@ -190,6 +263,8 @@ public class Basic
// This should never happen.
}
+ Map<String, List<Method>> commands = new TreeMap();
+
for (ServiceReference ref : refs)
{
Object svc = m_bc.getService(ref);
@@ -197,7 +272,6 @@ public class Basic
{
String[] funcs = (String[]) ref.getProperty("osgi.command.function");
- Map<String, List<Method>> commands = new HashMap();
for (String func : funcs)
{
commands.put(func, new ArrayList());
@@ -214,18 +288,11 @@ public class Basic
commandMethods.add(method);
}
}
-
- for (Entry<String, List<Method>> entry : commands.entrySet())
- {
- System.out.println(entry.getKey());
- for (Method m : entry.getValue())
- {
- System.out.println("--> " + m);
- }
- }
}
}
}
+
+ return commands;
}
public void install(String[] urls)
@@ -442,7 +509,7 @@ public class Basic
}
}
- public void stop(Long[] ids) throws BundleException
+ public void stop(Long[] ids)
{
List<Bundle> bundles = getBundles(m_bc, ids);
@@ -452,14 +519,33 @@ public class Basic
}
else
{
- for (Bundle bundle : bundles)
+ try
+ {
+ for (Bundle bundle : bundles)
+ {
+ bundle.stop();
+ }
+ }
+ catch (BundleException ex)
+ {
+ if (ex.getNestedException() != null)
+ {
+ ex.printStackTrace();
+ System.err.println(ex.getNestedException().toString());
+ }
+ else
+ {
+ System.err.println(ex.toString());
+ }
+ }
+ catch (Exception ex)
{
- bundle.stop();
+ System.err.println(ex.toString());
}
}
}
- public void uninstall(Long[] ids) throws BundleException
+ public void uninstall(Long[] ids)
{
List<Bundle> bundles = getBundles(m_bc, ids);
@@ -469,9 +555,28 @@ public class Basic
}
else
{
- for (Bundle bundle : bundles)
+ try
+ {
+ for (Bundle bundle : bundles)
+ {
+ bundle.uninstall();
+ }
+ }
+ catch (BundleException ex)
{
- bundle.uninstall();
+ if (ex.getNestedException() != null)
+ {
+ ex.printStackTrace();
+ System.err.println(ex.getNestedException().toString());
+ }
+ else
+ {
+ System.err.println(ex.toString());
+ }
+ }
+ catch (Exception ex)
+ {
+ System.err.println(ex.toString());
}
}
}