FELIX-2347: Configurations on features should not override existing configurations
git-svn-id: https://svn.apache.org/repos/asf/felix/trunk@945596 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/karaf/features/core/src/main/java/org/apache/felix/karaf/features/internal/FeaturesServiceImpl.java b/karaf/features/core/src/main/java/org/apache/felix/karaf/features/internal/FeaturesServiceImpl.java
index 9202d37..1212e81 100644
--- a/karaf/features/core/src/main/java/org/apache/felix/karaf/features/internal/FeaturesServiceImpl.java
+++ b/karaf/features/core/src/main/java/org/apache/felix/karaf/features/internal/FeaturesServiceImpl.java
@@ -375,13 +375,16 @@
for (String config : feature.getConfigurations().keySet()) {
Dictionary<String,String> props = new Hashtable<String, String>(feature.getConfigurations().get(config));
String[] pid = parsePid(config);
- String key = (pid[1] == null ? pid[0] : pid[0] + "-" + pid[1]);
- props.put(CONFIG_KEY, key);
- Configuration cfg = getConfiguration(configAdmin, pid[0], pid[1]);
- if (cfg.getBundleLocation() != null) {
- cfg.setBundleLocation(null);
+ Configuration cfg = findExistingConfiguration(configAdmin, pid[0], pid[1]);
+ if (cfg == null) {
+ cfg = createConfiguration(configAdmin, pid[0], pid[1]);
+ String key = (pid[1] == null ? pid[0] : pid[0] + "-" + pid[1]);
+ props.put(CONFIG_KEY, key);
+ if (cfg.getBundleLocation() != null) {
+ cfg.setBundleLocation(null);
+ }
+ cfg.update(props);
}
- cfg.update(props);
}
Set<Long> bundles = new HashSet<Long>();
for (String bundleLocation : feature.getBundles()) {
@@ -703,24 +706,24 @@
}
}
- protected Configuration getConfiguration(ConfigurationAdmin configurationAdmin,
- String pid, String factoryPid) throws IOException, InvalidSyntaxException {
- Configuration oldConfiguration = findExistingConfiguration(configurationAdmin, pid, factoryPid);
- if (oldConfiguration != null) {
- return oldConfiguration;
+ protected Configuration createConfiguration(ConfigurationAdmin configurationAdmin,
+ String pid, String factoryPid) throws IOException, InvalidSyntaxException {
+ if (factoryPid != null) {
+ return configurationAdmin.createFactoryConfiguration(pid, null);
} else {
- if (factoryPid != null) {
- return configurationAdmin.createFactoryConfiguration(pid, null);
- } else {
- return configurationAdmin.getConfiguration(pid, null);
- }
+ return configurationAdmin.getConfiguration(pid, null);
}
}
protected Configuration findExistingConfiguration(ConfigurationAdmin configurationAdmin,
String pid, String factoryPid) throws IOException, InvalidSyntaxException {
String key = (factoryPid == null ? pid : pid + "-" + factoryPid);
- String filter = "(" + CONFIG_KEY + "=" + key + ")";
+ String filter;
+ if (factoryPid == null) {
+ filter = "(" + Constants.SERVICE_PID + "=" + pid + ")";
+ } else {
+ filter = "(" + ConfigurationAdmin.SERVICE_FACTORYPID + "=" + factoryPid + ")";
+ }
Configuration[] configurations = configurationAdmin.listConfigurations(filter);
if (configurations != null && configurations.length > 0)
{