blob: e504d4a4007dbe5331421cfc6ba476c40df8a5b7 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2010 Oracle.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* and Apache License v2.0 which accompanies this distribution.
* The Eclipse Public License is available at
* http://www.eclipse.org/legal/epl-v10.html
* and the Apache License v2.0 is available at
* http://www.opensource.org/licenses/apache2.0.php.
* You may elect to redistribute this code under either of these licenses.
*
* Contributors:
* Hal Hildebrand - Initial JMX support
******************************************************************************/
package org.eclipse.gemini.mgmt.configurationadmin;
import static org.eclipse.gemini.mgmt.internal.OSGiProperties.*;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Dictionary;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.management.openmbean.TabularData;
import org.osgi.framework.InvalidSyntaxException;
import org.osgi.jmx.service.cm.ConfigurationAdminMBean;
import org.osgi.service.cm.Configuration;
import org.osgi.service.cm.ConfigurationAdmin;
/**
*
*/
public final class ConfigAdminManager implements ConfigurationAdminMBean {
private final ConfigurationAdmin admin;
private static final Logger log = Logger.getLogger(ConfigAdminManager.class.getCanonicalName());
public ConfigAdminManager(ConfigurationAdmin admin) {
this.admin = admin;
}
/**
* {@inheritDoc}
*/
public String createFactoryConfiguration(String factoryPid) throws IOException {
if (factoryPid == null) {
throw new IOException("Factory PID must not be null");
}
Configuration c = admin.createFactoryConfiguration(factoryPid);
c.setBundleLocation(null);
return c.getPid();
}
/**
* {@inheritDoc}
*/
public String createFactoryConfigurationForLocation(String factoryPid, String location) throws IOException {
if (factoryPid == null) {
throw new IOException("Factory PID must not be null");
}
Configuration c = admin.createFactoryConfiguration(factoryPid);
c.setBundleLocation(location);
return c.getPid();
}
/**
* {@inheritDoc}
*/
public void delete(String pid) throws IOException {
if (pid == null) {
throw new IOException("PID must not be null");
}
admin.getConfiguration(pid, null).delete();
}
/**
* {@inheritDoc}
*/
public void deleteForLocation(String pid, String location) throws IOException {
if (pid == null) {
throw new IOException("PID must not be null");
}
admin.getConfiguration(pid, location).delete();
}
/**
* {@inheritDoc}
*/
public void deleteConfigurations(String filter) throws IOException {
Configuration[] confs;
try {
confs = admin.listConfigurations(filter);
} catch (InvalidSyntaxException e) {
log.log(Level.SEVERE, "Invalid filter argument: " + filter, e);
throw new IOException("Invalid filter: " + e);
}
if (confs != null) {
for (Configuration conf : confs) {
conf.delete();
}
}
}
/**
* {@inheritDoc}
*/
public String getBundleLocation(String pid) throws IOException {
if (pid == null) {
throw new IOException("PID must not be null");
}
return admin.getConfiguration(pid, null).getBundleLocation();
}
/**
* {@inheritDoc}
*/
public String getFactoryPid(String pid) throws IOException {
if (pid == null) {
throw new IOException("PID must not be null");
}
return admin.getConfiguration(pid, null).getFactoryPid();
}
/**
* {@inheritDoc}
*/
public String getFactoryPidForLocation(String pid, String location)
throws IOException {
if (pid == null) {
throw new IOException("PID must not be null");
}
return admin.getConfiguration(pid, location).getFactoryPid();
}
/**
* {@inheritDoc}
*/
public TabularData getProperties(String pid) throws IOException {
if (pid == null) {
throw new IOException("PID must not be null");
}
@SuppressWarnings("unchecked")
Dictionary<String, Object> properties = admin.getConfiguration(pid, null).getProperties();
return properties == null ? null : tableFrom(properties);
}
/**
* {@inheritDoc}
*/
public TabularData getPropertiesForLocation(String pid, String location)
throws IOException {
if (pid == null) {
throw new IOException("PID must not be null");
}
@SuppressWarnings("unchecked")
Dictionary<String, Object> properties = admin.getConfiguration(pid, location).getProperties();
return properties == null ? null : tableFrom(properties);
}
/**
* {@inheritDoc}
*/
public String[][] getConfigurations(String filter) throws IOException {
ArrayList<String[]> pids = new ArrayList<String[]>();
Configuration[] configurations;
try {
configurations = admin.listConfigurations(filter);
} catch (InvalidSyntaxException e) {
log.log(Level.SEVERE, "Invalid filter argument: " + filter, e);
throw new IOException("Invalid filter: " + e);
}
if (configurations != null) {
for (Configuration config : configurations) {
pids.add(new String[] { config.getPid(), config.getBundleLocation() });
}
}
return pids.toArray(new String[pids.size()][]);
}
/**
* {@inheritDoc}
*/
public void setBundleLocation(String pid, String location) throws IOException {
if (pid == null) {
throw new IOException("PID must not be null");
}
admin.getConfiguration(pid).setBundleLocation(location);
}
/**
* {@inheritDoc}
*/
public void update(String pid, TabularData table) throws IOException {
if (pid == null) {
throw new IOException("PID must not be null");
}
admin.getConfiguration(pid, null).update(propertiesFrom(table));
}
/**
* {@inheritDoc}
*/
public void updateForLocation(String pid, String location, TabularData table) throws IOException {
if (pid == null) {
throw new IOException("PID must not be null");
}
admin.getConfiguration(pid, location).update(propertiesFrom(table));
}
}