Return-Path: Delivered-To: apmail-felix-commits-archive@www.apache.org Received: (qmail 48391 invoked from network); 26 Apr 2009 14:37:25 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (140.211.11.3) by minotaur.apache.org with SMTP; 26 Apr 2009 14:37:25 -0000 Received: (qmail 84203 invoked by uid 500); 26 Apr 2009 14:37:24 -0000 Delivered-To: apmail-felix-commits-archive@felix.apache.org Received: (qmail 84126 invoked by uid 500); 26 Apr 2009 14:37:24 -0000 Mailing-List: contact commits-help@felix.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@felix.apache.org Delivered-To: mailing list commits@felix.apache.org Received: (qmail 84117 invoked by uid 99); 26 Apr 2009 14:37:24 -0000 Received: from athena.apache.org (HELO athena.apache.org) (140.211.11.136) by apache.org (qpsmtpd/0.29) with ESMTP; Sun, 26 Apr 2009 14:37:24 +0000 X-ASF-Spam-Status: No, hits=-2000.0 required=10.0 tests=ALL_TRUSTED X-Spam-Check-By: apache.org Received: from [140.211.11.4] (HELO eris.apache.org) (140.211.11.4) by apache.org (qpsmtpd/0.29) with ESMTP; Sun, 26 Apr 2009 14:37:23 +0000 Received: by eris.apache.org (Postfix, from userid 65534) id 3C65A238899B; Sun, 26 Apr 2009 14:37:03 +0000 (UTC) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r768713 - in /felix/trunk/shell/src/main/java/org/apache/felix/shell/impl: Activator.java FindCommandImpl.java PsCommandImpl.java Date: Sun, 26 Apr 2009 14:37:03 -0000 To: commits@felix.apache.org From: rickhall@apache.org X-Mailer: svnmailer-1.0.8 Message-Id: <20090426143703.3C65A238899B@eris.apache.org> X-Virus-Checked: Checked by ClamAV on apache.org Author: rickhall Date: Sun Apr 26 14:37:02 2009 New Revision: 768713 URL: http://svn.apache.org/viewvc?rev=768713&view=rev Log: Applied patch (FELIX-1058) to add a shell command to allow you to find bundles by their name/symbolic name. Added: felix/trunk/shell/src/main/java/org/apache/felix/shell/impl/FindCommandImpl.java Modified: felix/trunk/shell/src/main/java/org/apache/felix/shell/impl/Activator.java felix/trunk/shell/src/main/java/org/apache/felix/shell/impl/PsCommandImpl.java Modified: felix/trunk/shell/src/main/java/org/apache/felix/shell/impl/Activator.java URL: http://svn.apache.org/viewvc/felix/trunk/shell/src/main/java/org/apache/felix/shell/impl/Activator.java?rev=768713&r1=768712&r2=768713&view=diff ============================================================================== --- felix/trunk/shell/src/main/java/org/apache/felix/shell/impl/Activator.java (original) +++ felix/trunk/shell/src/main/java/org/apache/felix/shell/impl/Activator.java Sun Apr 26 14:37:02 2009 @@ -1,4 +1,4 @@ -/* +/* * 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 @@ -97,6 +97,11 @@ org.apache.felix.shell.Command.class.getName(), new ExportsCommandImpl(m_context), null); + // Register "find" command service. + context.registerService( + org.apache.felix.shell.Command.class.getName(), + new FindCommandImpl(m_context), null); + // Register "headers" command service. context.registerService( org.apache.felix.shell.Command.class.getName(), Added: felix/trunk/shell/src/main/java/org/apache/felix/shell/impl/FindCommandImpl.java URL: http://svn.apache.org/viewvc/felix/trunk/shell/src/main/java/org/apache/felix/shell/impl/FindCommandImpl.java?rev=768713&view=auto ============================================================================== --- felix/trunk/shell/src/main/java/org/apache/felix/shell/impl/FindCommandImpl.java (added) +++ felix/trunk/shell/src/main/java/org/apache/felix/shell/impl/FindCommandImpl.java Sun Apr 26 14:37:02 2009 @@ -0,0 +1,99 @@ +/* + * 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.shell.impl; + +import java.io.PrintStream; +import java.util.ArrayList; +import java.util.List; +import java.util.StringTokenizer; + +import org.osgi.framework.Bundle; +import org.osgi.framework.BundleContext; +import org.osgi.framework.Constants; + +/** + * Shell command to display a list of bundles whose + * Bundle-Name or Bundle-Symbolic-Name contains + * a specified string + * + */ +public class FindCommandImpl extends PsCommandImpl +{ + public FindCommandImpl(BundleContext context) + { + super(context); + } + + public void execute(String line, PrintStream out, PrintStream err) + { + StringTokenizer st = new StringTokenizer(line); + if (st.countTokens() < 2) + { + out.println("Please specify a bundle name"); + return; + } + + st.nextToken(); + String pattern = st.nextToken(); + + Bundle[] bundles = m_context.getBundles(); + + List found = new ArrayList(); + + for (int i = 0; i < bundles.length; i++) + { + Bundle bundle = bundles[i]; + String name = (String) bundle.getHeaders().get(Constants.BUNDLE_NAME); + if (match(bundle.getSymbolicName(), pattern) || match(name, pattern)) + { + found.add(bundle); + } + } + + if (found.size() > 0) + { + printBundleList((Bundle[]) found.toArray(new Bundle[found.size()]), null, out, false, false, false); + } + else + { + out.println("No matching bundles found"); + } + + } + + private boolean match(String name, String pattern) + { + return name != null && name.toLowerCase().contains(pattern.toLowerCase()); + } + + public String getName() + { + return "find"; + } + + public String getShortDescription() + { + return "find bundles by name."; + } + + public String getUsage() + { + return "find "; + } +} \ No newline at end of file Modified: felix/trunk/shell/src/main/java/org/apache/felix/shell/impl/PsCommandImpl.java URL: http://svn.apache.org/viewvc/felix/trunk/shell/src/main/java/org/apache/felix/shell/impl/PsCommandImpl.java?rev=768713&r1=768712&r2=768713&view=diff ============================================================================== --- felix/trunk/shell/src/main/java/org/apache/felix/shell/impl/PsCommandImpl.java (original) +++ felix/trunk/shell/src/main/java/org/apache/felix/shell/impl/PsCommandImpl.java Sun Apr 26 14:37:02 2009 @@ -30,7 +30,7 @@ public class PsCommandImpl implements Command { - private BundleContext m_context = null; + protected final BundleContext m_context; public PsCommandImpl(BundleContext context) { @@ -100,88 +100,95 @@ Bundle[] bundles = m_context.getBundles(); if (bundles != null) { - // Display active start level. - if (sl != null) - { - out.println("START LEVEL " + sl.getStartLevel()); - } + printBundleList(bundles, sl, out, showLoc, showSymbolic, showUpdate); + } + else + { + out.println("There are no installed bundles."); + } + } + + protected void printBundleList( + Bundle[] bundles, StartLevel startLevel, PrintStream out, boolean showLoc, + boolean showSymbolic, boolean showUpdate) + { + // Display active start level. + if (startLevel != null) + { + out.println("START LEVEL " + startLevel.getStartLevel()); + } - // Print column headers. - String msg = " Name"; + // Print column headers. + String msg = " Name"; + if (showLoc) + { + msg = " Location"; + } + else if (showSymbolic) + { + msg = " Symbolic name"; + } + else if (showUpdate) + { + msg = " Update location"; + } + String level = (startLevel == null) ? "" : " Level "; + out.println(" ID " + " State " + level + msg); + for (int i = 0; i < bundles.length; i++) + { + // Get the bundle name or location. + String name = (String) + bundles[i].getHeaders().get(Constants.BUNDLE_NAME); + // If there is no name, then default to symbolic name. + name = (name == null) ? bundles[i].getSymbolicName() : name; + // If there is no symbolic name, resort to location. + name = (name == null) ? bundles[i].getLocation() : name; + + // Overwrite the default value is the user specifically + // requested to display one or the other. if (showLoc) { - msg = " Location"; + name = bundles[i].getLocation(); } else if (showSymbolic) { - msg = " Symbolic name"; + name = bundles[i].getSymbolicName(); + name = (name == null) + ? "" : name; } else if (showUpdate) { - msg = " Update location"; + name = (String) + bundles[i].getHeaders().get(Constants.BUNDLE_UPDATELOCATION); + name = (name == null) + ? bundles[i].getLocation() : name; } - String level = (sl == null) ? "" : " Level "; - out.println(" ID " + " State " + level + msg); - for (int i = 0; i < bundles.length; i++) - { - // Get the bundle name or location. - String name = (String) - bundles[i].getHeaders().get(Constants.BUNDLE_NAME); - // If there is no name, then default to symbolic name. - name = (name == null) ? bundles[i].getSymbolicName() : name; - // If there is no symbolic name, resort to location. - name = (name == null) ? bundles[i].getLocation() : name; - - // Overwrite the default value is the user specifically - // requested to display one or the other. - if (showLoc) - { - name = bundles[i].getLocation(); - } - else if (showSymbolic) - { - name = bundles[i].getSymbolicName(); - name = (name == null) - ? "" : name; - } - else if (showUpdate) - { - name = (String) - bundles[i].getHeaders().get(Constants.BUNDLE_UPDATELOCATION); - name = (name == null) - ? bundles[i].getLocation() : name; - } - // Show bundle version if not showing location. - String version = (String) - bundles[i].getHeaders().get(Constants.BUNDLE_VERSION); - name = (!showLoc && !showUpdate && (version != null)) - ? name + " (" + version + ")" : name; - long l = bundles[i].getBundleId(); - String id = String.valueOf(l); - if (sl == null) - { - level = "1"; - } - else - { - level = String.valueOf(sl.getBundleStartLevel(bundles[i])); - } - while (level.length() < 5) - { - level = " " + level; - } - while (id.length() < 4) - { - id = " " + id; - } - out.println("[" + id + "] [" - + getStateString(bundles[i].getState()) - + "] [" + level + "] " + name); + // Show bundle version if not showing location. + String version = (String) + bundles[i].getHeaders().get(Constants.BUNDLE_VERSION); + name = (!showLoc && !showUpdate && (version != null)) + ? name + " (" + version + ")" : name; + long l = bundles[i].getBundleId(); + String id = String.valueOf(l); + if (startLevel == null) + { + level = "1"; } - } - else - { - out.println("There are no installed bundles."); + else + { + level = String.valueOf(startLevel.getBundleStartLevel(bundles[i])); + } + while (level.length() < 5) + { + level = " " + level; + } + while (id.length() < 4) + { + id = " " + id; + } + out.println("[" + id + "] [" + + getStateString(bundles[i].getState()) + + "] [" + level + "] " + name); } } @@ -199,4 +206,4 @@ return "Stopping "; return "Unknown "; } -} +} \ No newline at end of file