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;
}
}