package org.foo.shell; import java.io.IOException; import java.io.PrintStream; import java.util.*; import org.osgi.framework.ServiceReference; import org.osgi.framework.InvalidSyntaxException; import org.osgi.service.cm.Configuration; import org.osgi.service.cm.ConfigurationAdmin; public class ConfigAdminCommand extends BasicCommand { public void exec(String args, PrintStream out, PrintStream err) throws Exception { args=args.trim(); if (args.startsWith("list")) { listConfigurations(args.substring("list".length()).trim(), out); } else if (args.startsWith("add-cfg")) { addConfiguration(args.substring("add-cfg".length()).trim()); } else if (args.startsWith("remove-cfg")) { removeConfiguration(args.substring("remove-cfg".length()).trim()); } else if (args.startsWith("add-factory-cfg")) { addFactoryConfiguration(args.substring("add-factory-cfg".length()).trim()); } else if (args.startsWith("remove-factory-cfg")) { removeFactoryConfiguration(args.substring("remove-factory-cfg".length()).trim()); } } private void listConfigurations(String filter, PrintStream out) throws IOException, InvalidSyntaxException { Configuration[] configurations = admin().listConfigurations( ((filter.length() == 0) ? null : filter)); if (configurations != null) { for (Configuration configuration : configurations) { Dictionary properties = configuration.getProperties(); for (Enumeration e = properties.keys(); e .hasMoreElements();) { Object key = e.nextElement(); out.println(key + "=" + properties.get(key)); } out.println(); } } } private void addConfiguration(String args) throws IOException{ String pid = args.substring(0, args.indexOf(" ")).trim(); Configuration conf = admin().getConfiguration(pid, null); createConfiguration(args.substring(pid.length()).trim(), pid, conf); } private void removeConfiguration(String pid) throws IOException { Configuration conf = admin().getConfiguration(pid); conf.delete(); } private void addFactoryConfiguration(String args) throws IOException { String pid = args.substring(0, args.indexOf(" ")).trim(); Configuration conf = admin().createFactoryConfiguration(pid, null); createConfiguration(args.substring(pid.length()).trim(), pid, conf); } private void removeFactoryConfiguration(String pid) throws IOException, InvalidSyntaxException { Configuration[] configurations = admin().listConfigurations( "(service.pid=" + pid + ")"); configurations[0].delete(); } private void createConfiguration(String args, String pid, Configuration conf) throws IOException { conf.setBundleLocation(null); Dictionary dict = conf.getProperties(); if (dict == null) { dict = new Properties(); } StringTokenizer tok = new StringTokenizer(args, " "); while (tok.hasMoreTokens()) { String[] entry = tok.nextToken().split("="); dict.put(entry[0], entry[1]); } conf.update(dict); } private ConfigurationAdmin admin() { ServiceReference ref = m_context .getServiceReference(ConfigurationAdmin.class.getName()); if (ref != null) { return (ConfigurationAdmin) m_context.getService(ref); } return null; } }