Implemented a new shell command for explicitly resolving bundles.
git-svn-id: https://svn.apache.org/repos/asf/incubator/felix/trunk@409161 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/org.apache.felix.shell/src/main/java/org/apache/felix/shell/impl/Activator.java b/org.apache.felix.shell/src/main/java/org/apache/felix/shell/impl/Activator.java
index 3e9a038..1a7a3ec 100644
--- a/org.apache.felix.shell/src/main/java/org/apache/felix/shell/impl/Activator.java
+++ b/org.apache.felix.shell/src/main/java/org/apache/felix/shell/impl/Activator.java
@@ -120,6 +120,11 @@
org.apache.felix.shell.Command.class.getName(),
new RefreshCommandImpl(m_context), null);
+ // Register "resolve" command service.
+ context.registerService(
+ org.apache.felix.shell.Command.class.getName(),
+ new ResolveCommandImpl(m_context), null);
+
// Register "services" command service.
context.registerService(
org.apache.felix.shell.Command.class.getName(),
diff --git a/org.apache.felix.shell/src/main/java/org/apache/felix/shell/impl/ResolveCommandImpl.java b/org.apache.felix.shell/src/main/java/org/apache/felix/shell/impl/ResolveCommandImpl.java
new file mode 100644
index 0000000..8e8bf31
--- /dev/null
+++ b/org.apache.felix.shell/src/main/java/org/apache/felix/shell/impl/ResolveCommandImpl.java
@@ -0,0 +1,108 @@
+/*
+ * Copyright 2006 The Apache Software Foundation
+ *
+ * Licensed 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.shell.impl;
+
+import java.io.PrintStream;
+import java.util.*;
+
+import org.apache.felix.shell.Command;
+import org.osgi.framework.*;
+import org.osgi.service.packageadmin.PackageAdmin;
+
+public class ResolveCommandImpl implements Command
+{
+ private BundleContext m_context = null;
+
+ public ResolveCommandImpl(BundleContext context)
+ {
+ m_context = context;
+ }
+
+ public String getName()
+ {
+ return "resolve";
+ }
+
+ public String getUsage()
+ {
+ return "resolve [<id> ...]";
+ }
+
+ public String getShortDescription()
+ {
+ return "attempt to resolve the specified bundles.";
+ }
+
+ public void execute(String s, PrintStream out, PrintStream err)
+ {
+ // Get package admin service.
+ ServiceReference ref = m_context.getServiceReference(
+ org.osgi.service.packageadmin.PackageAdmin.class.getName());
+ if (ref == null)
+ {
+ out.println("PackageAdmin service is unavailable.");
+ return;
+ }
+
+ PackageAdmin pa = (PackageAdmin) m_context.getService(ref);
+ if (pa == null)
+ {
+ out.println("PackageAdmin service is unavailable.");
+ return;
+ }
+
+ // Array to hold the bundles.
+ Bundle[] bundles = null;
+
+ // Parse the bundle identifiers.
+ StringTokenizer st = new StringTokenizer(s, " ");
+ // Ignore the command name.
+ st.nextToken();
+
+ if (st.countTokens() >= 1)
+ {
+ List bundleList = new ArrayList();
+ while (st.hasMoreTokens())
+ {
+ String id = st.nextToken().trim();
+
+ try
+ {
+ long l = Long.parseLong(id);
+ Bundle bundle = m_context.getBundle(l);
+ if (bundle != null)
+ {
+ bundleList.add(bundle);
+ }
+ else
+ {
+ err.println("Bundle ID " + id + " is invalid.");
+ }
+ } catch (NumberFormatException ex) {
+ err.println("Unable to parse id '" + id + "'.");
+ }
+ }
+
+ if (bundleList.size() > 0)
+ {
+ bundles = (Bundle[]) bundleList.toArray(new Bundle[bundleList.size()]);
+ }
+ }
+
+ pa.resolveBundles(bundles);
+ }
+}
\ No newline at end of file