package org.foo.shell; import java.io.PrintStream; import java.net.URL; import org.osgi.framework.ServiceReference; import org.osgi.service.obr.*; public class RepositoryCommand extends BasicCommand { public void exec(String args, PrintStream out, PrintStream err) throws Exception { args = args.trim(); RepositoryAdmin admin = getRepositoryAdmin(); if (admin != null) { if ("list-urls".equalsIgnoreCase(args)) { for (Repository repo : admin.listRepositories()) { out.println(repo.getName() + " (" + repo.getURL() + ")"); } } else if (args != null) { if (args.startsWith("add-url")) { admin.addRepository(new URL(args.substring("add-url".length()))); } else if (args.startsWith("remove-url")) { admin.removeRepository(new URL(args.substring("remove-url".length()))); } else if (args.startsWith("list")) { String query = (args.equals("list")) ? "(symbolicname=*)" : args.substring("list".length()).trim(); for (Resource res : admin.discoverResources(query)) { out.println(res.getPresentationName() + " (" + res.getSymbolicName() + ") " + res.getVersion()); } } } else { out.println("Unknown command - use {list-urls|add-url|remove-url|list}"); } } else { out.println("No RepositoryAdmin service found..."); } } private RepositoryAdmin getRepositoryAdmin() { ServiceReference ref = m_context.getServiceReference(RepositoryAdmin.class.getName()); if (ref != null) { return (RepositoryAdmin) m_context.getService(ref); } return null; } }