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);
+       }
+
 }

Reply via email to