blob: f315f007b1a334945a97fd21a71b660176b29720 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2008, 2010 VMware Inc.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* VMware Inc. - initial contribution
*******************************************************************************/
package org.eclipse.virgo.kernel.config.internal;
import static org.eclipse.virgo.util.io.IOUtils.closeQuietly;
import java.io.IOException;
import java.io.Writer;
import java.util.Dictionary;
import java.util.Enumeration;
import org.osgi.service.cm.Configuration;
import org.osgi.service.cm.ConfigurationAdmin;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.eclipse.virgo.medic.dump.Dump;
import org.eclipse.virgo.medic.dump.DumpContributionFailedException;
import org.eclipse.virgo.medic.dump.DumpContributor;
public class ConfigurationAdminDumpContributor implements DumpContributor {
private static final String PROPERTY_PATTERN = "%s:\t%s\n";
private final Logger logger = LoggerFactory.getLogger(this.getClass());
private final ConfigurationAdmin configurationAdmin;
public ConfigurationAdminDumpContributor(ConfigurationAdmin configurationAdmin) {
this.configurationAdmin = configurationAdmin;
}
public void contribute(Dump dump) throws DumpContributionFailedException {
StringBuilder sb = new StringBuilder();
try {
for (Configuration configuration : configurationAdmin.listConfigurations(null)) {
appendHeader(sb, configuration.getPid());
appendProperties(sb, configuration.getProperties());
appendFooter(sb);
}
} catch (Exception e) {
logger.warn("Could not enumerate existing configurations");
}
Writer out = null;
try {
out = dump.createFileWriter("configurationAdmin.properties");
out.write(sb.toString());
} catch (IOException e) {
logger.warn("Could not write configurationAdmin dump");
} finally {
closeQuietly(out);
}
}
public String getName() {
return "configurationAdmin";
}
private void appendHeader(StringBuilder sb, String pid) {
for (int i = 0; i < pid.length() + 4; i++) {
sb.append("#");
}
sb.append("\n# ").append(pid).append(" #\n");
for (int i = 0; i < pid.length() + 4; i++) {
sb.append("#");
}
sb.append("\n\n");
}
private void appendProperties(StringBuilder sb, Dictionary properties) {
Enumeration keys = properties.keys();
while (keys.hasMoreElements()) {
Object key = keys.nextElement();
appendProperty(sb, key, properties.get(key));
}
}
private void appendProperty(StringBuilder sb, Object key, Object value) {
sb.append(String.format(PROPERTY_PATTERN, key, value));
}
private void appendFooter(StringBuilder sb) {
sb.append("\n\n");
}
}