You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@karaf.apache.org by gn...@apache.org on 2015/02/20 13:16:31 UTC

karaf git commit: [KARAF-3527] Appending config from feature doesn't work

Repository: karaf
Updated Branches:
  refs/heads/master 47414d989 -> 9ecba38a4


[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/9ecba38a
Tree: http://git-wip-us.apache.org/repos/asf/karaf/tree/9ecba38a
Diff: http://git-wip-us.apache.org/repos/asf/karaf/diff/9ecba38a

Branch: refs/heads/master
Commit: 9ecba38a4569fad00fc7a454b05bd486d8e63ae3
Parents: 47414d9
Author: Guillaume Nodet <gn...@gmail.com>
Authored: Fri Feb 20 13:15:47 2015 +0100
Committer: Guillaume Nodet <gn...@gmail.com>
Committed: Fri Feb 20 13:15:47 2015 +0100

----------------------------------------------------------------------
 .../service/FeatureConfigInstaller.java         | 31 +++++++---------
 .../org/apache/karaf/features/AppendTest.java   | 38 ++++++++++++++++++--
 2 files changed, 48 insertions(+), 21 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/karaf/blob/9ecba38a/features/core/src/main/java/org/apache/karaf/features/internal/service/FeatureConfigInstaller.java
----------------------------------------------------------------------
diff --git a/features/core/src/main/java/org/apache/karaf/features/internal/service/FeatureConfigInstaller.java b/features/core/src/main/java/org/apache/karaf/features/internal/service/FeatureConfigInstaller.java
index aa5c21e..1940868 100644
--- a/features/core/src/main/java/org/apache/karaf/features/internal/service/FeatureConfigInstaller.java
+++ b/features/core/src/main/java/org/apache/karaf/features/internal/service/FeatureConfigInstaller.java
@@ -89,41 +89,34 @@ public class FeatureConfigInstaller {
         return null;
     }
 
-    void installFeatureConfigs(Feature feature) throws IOException, InvalidSyntaxException {
+    public void installFeatureConfigs(Feature feature) throws IOException, InvalidSyntaxException {
     	for (ConfigInfo config : feature.getConfigurations()) {
-    		String name = config.getName();
 			Properties props = config.getProperties();
 			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()) {
             installConfigurationFile(configFile.getLocation(), configFile.getFinalname(), configFile.isOverride());
         }
-
     }
 
 	private Dictionary<String, String> convertToDict(Properties props) {

http://git-wip-us.apache.org/repos/asf/karaf/blob/9ecba38a/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 da7e3cc..f0fb326 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,10 +16,15 @@
  */
 package org.apache.karaf.features;
 
+import java.util.Hashtable;
 import java.util.Properties;
 
 import junit.framework.TestCase;
+import org.apache.karaf.features.internal.service.FeatureConfigInstaller;
 import org.apache.karaf.features.internal.service.RepositoryImpl;
+import org.easymock.EasyMock;
+import org.osgi.service.cm.Configuration;
+import org.osgi.service.cm.ConfigurationAdmin;
 
 public class AppendTest extends TestCase {
 
@@ -39,10 +44,39 @@ public class AppendTest extends TestCase {
 
 		Properties properties = configInfo.getProperties();
 		assertNotNull(properties);
-		String property = properties
-				.getProperty("javax.servlet.context.tempdir");
+		String property = properties.getProperty("javax.servlet.context.tempdir");
 		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<>();
+		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<>();
+		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);
+		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<>();
+		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);
+		EasyMock.verify(admin, config);
 	}
 }