Repository: karaf Updated Branches: refs/heads/karaf-3.0.x 440f7d90e -> 0e82adb01
[KARAF-3527] Appending config from feature doesn't work Project: http://git-wip-us.apache.org/repos/asf/karaf/repo Commit: http://git-wip-us.apache.org/repos/asf/karaf/commit/0e82adb0 Tree: http://git-wip-us.apache.org/repos/asf/karaf/tree/0e82adb0 Diff: http://git-wip-us.apache.org/repos/asf/karaf/diff/0e82adb0 Branch: refs/heads/karaf-3.0.x Commit: 0e82adb01ae533359b3355c8e7daa3d5a81bfdf1 Parents: 440f7d9 Author: Guillaume Nodet <[email protected]> Authored: Fri Feb 20 13:15:47 2015 +0100 Committer: Guillaume Nodet <[email protected]> Committed: Fri Feb 20 13:21:07 2015 +0100 ---------------------------------------------------------------------- .../internal/FeatureConfigInstaller.java | 44 ++++++-------------- .../org/apache/karaf/features/AppendTest.java | 38 ++++++++++++++++- 2 files changed, 49 insertions(+), 33 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/karaf/blob/0e82adb0/features/core/src/main/java/org/apache/karaf/features/internal/FeatureConfigInstaller.java ---------------------------------------------------------------------- diff --git a/features/core/src/main/java/org/apache/karaf/features/internal/FeatureConfigInstaller.java b/features/core/src/main/java/org/apache/karaf/features/internal/FeatureConfigInstaller.java index 3d2309e..155a756 100644 --- a/features/core/src/main/java/org/apache/karaf/features/internal/FeatureConfigInstaller.java +++ b/features/core/src/main/java/org/apache/karaf/features/internal/FeatureConfigInstaller.java @@ -88,53 +88,33 @@ public class FeatureConfigInstaller { return null; } - void installFeatureConfigs(Feature feature, boolean verbose) throws IOException, InvalidSyntaxException { -// for (String config : feature.getConfigurations().keySet()) { -// Dictionary<String,String> props = new Hashtable<String, String>(feature.getConfigurations().get(config)); -// String[] pid = parsePid(config); -// Configuration cfg = findExistingConfiguration(configAdmin, pid[0], pid[1]); -// if (cfg == null) { -// cfg = createConfiguration(configAdmin, pid[0], pid[1]); -// String key = createConfigurationKey(pid[0], pid[1]); -// props.put(CONFIG_KEY, key); -// if (cfg.getBundleLocation() != null) { -// cfg.setBundleLocation(null); -// } -// cfg.update(props); -// } -// } + public void installFeatureConfigs(Feature feature, boolean verbose) throws IOException, InvalidSyntaxException { for (ConfigInfo config : feature.getConfigurations()) { - String name = config.getName(); Properties props = config.getProperties(); // interpolation(props); String[] pid = parsePid(config.getName()); - Configuration cfg = findExistingConfiguration(configAdmin, pid[0], - pid[1]); + Configuration cfg = findExistingConfiguration(configAdmin, pid[0], pid[1]); if (cfg == null) { Dictionary<String, String> cfgProps = convertToDict(props); - cfg = createConfiguration(configAdmin, pid[0], pid[1]); String key = createConfigurationKey(pid[0], pid[1]); cfgProps.put(CONFIG_KEY, key); cfg.update(cfgProps); } else if (config.isAppend()) { + boolean update = false; Dictionary<String,Object> properties = cfg.getProperties(); - for (Enumeration<String> propKeys = properties.keys(); propKeys - .hasMoreElements();) { - String key = propKeys.nextElement(); - // remove existing entry, since it's about appending. - if (props.containsKey(key)) { - props.remove(key); - } - } - if (props.size() > 0) { - // convert props to dictionary - Dictionary<String, String> cfgProps = convertToDict(props); - cfg.update(cfgProps); - } + for (String key : props.stringPropertyNames()) { + if (properties.get(key) == null) { + properties.put(key, props.getProperty(key)); + update = true; + } + } + if (update) { + cfg.update(properties); + } } } for (ConfigFileInfo configFile : feature.getConfigurationFiles()) { http://git-wip-us.apache.org/repos/asf/karaf/blob/0e82adb0/features/core/src/test/java/org/apache/karaf/features/AppendTest.java ---------------------------------------------------------------------- diff --git a/features/core/src/test/java/org/apache/karaf/features/AppendTest.java b/features/core/src/test/java/org/apache/karaf/features/AppendTest.java index af64437..c4e4fb1 100644 --- a/features/core/src/test/java/org/apache/karaf/features/AppendTest.java +++ b/features/core/src/test/java/org/apache/karaf/features/AppendTest.java @@ -16,12 +16,17 @@ */ package org.apache.karaf.features; +import java.util.Hashtable; import java.util.Properties; import junit.framework.TestCase; +import org.apache.karaf.features.internal.FeatureConfigInstaller; import org.apache.karaf.features.internal.RepositoryImpl; +import org.easymock.EasyMock; +import org.osgi.service.cm.Configuration; +import org.osgi.service.cm.ConfigurationAdmin; public class AppendTest extends TestCase { @@ -45,5 +50,36 @@ public class AppendTest extends TestCase { assertNotNull(property); assertFalse(property.contains("${")); - } + ConfigurationAdmin admin = EasyMock.createMock(ConfigurationAdmin.class); + Configuration config = EasyMock.createMock(Configuration.class); + EasyMock.expect(admin.listConfigurations(EasyMock.eq("(service.pid=org.ops4j.pax.web)"))) + .andReturn(new Configuration[] { config }); + Hashtable<String, Object> original = new Hashtable<String, Object>(); + original.put("org.apache.karaf.features.configKey", "org.ops4j.pax.web"); + original.put("foo", "bar"); + EasyMock.expect(config.getProperties()).andReturn(original); + Hashtable<String, Object> expected = new Hashtable<String, Object>(); + expected.put("org.apache.karaf.features.configKey", "org.ops4j.pax.web"); + expected.put("javax.servlet.context.tempdir", "data/pax-web-jsp"); + expected.put("foo", "bar"); + config.update(EasyMock.eq(expected)); + EasyMock.expectLastCall(); + EasyMock.replay(admin, config); + FeatureConfigInstaller installer = new FeatureConfigInstaller(admin); + installer.installFeatureConfigs(feature, false); + EasyMock.verify(admin, config); + + EasyMock.reset(admin, config); + EasyMock.expect(admin.listConfigurations(EasyMock.eq("(service.pid=org.ops4j.pax.web)"))) + .andReturn(new Configuration[]{config}); + original = new Hashtable<String, Object>(); + original.put("org.apache.karaf.features.configKey", "org.ops4j.pax.web"); + original.put("javax.servlet.context.tempdir", "value"); + original.put("foo", "bar"); + EasyMock.expect(config.getProperties()).andReturn(original); + EasyMock.replay(admin, config); + installer.installFeatureConfigs(feature, false); + EasyMock.verify(admin, config); + } + }
