You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@felix.apache.org by gn...@apache.org on 2010/11/30 19:08:03 UTC

svn commit: r1040664 - in /felix/trunk/fileinstall/src: main/java/org/apache/felix/fileinstall/internal/ConfigInstaller.java test/java/org/apache/felix/fileinstall/internal/ConfigInstallerTest.java

Author: gnodet
Date: Tue Nov 30 18:08:03 2010
New Revision: 1040664

URL: http://svn.apache.org/viewvc?rev=1040664&view=rev
Log:
[FELIX-2698] File Install Circular Configuration Update Loop

Modified:
    felix/trunk/fileinstall/src/main/java/org/apache/felix/fileinstall/internal/ConfigInstaller.java
    felix/trunk/fileinstall/src/test/java/org/apache/felix/fileinstall/internal/ConfigInstallerTest.java

Modified: felix/trunk/fileinstall/src/main/java/org/apache/felix/fileinstall/internal/ConfigInstaller.java
URL: http://svn.apache.org/viewvc/felix/trunk/fileinstall/src/main/java/org/apache/felix/fileinstall/internal/ConfigInstaller.java?rev=1040664&r1=1040663&r2=1040664&view=diff
==============================================================================
--- felix/trunk/fileinstall/src/main/java/org/apache/felix/fileinstall/internal/ConfigInstaller.java (original)
+++ felix/trunk/fileinstall/src/main/java/org/apache/felix/fileinstall/internal/ConfigInstaller.java Tue Nov 30 18:08:03 2010
@@ -21,6 +21,7 @@ package org.apache.felix.fileinstall.int
 import org.apache.felix.cm.file.ConfigurationHandler;
 import org.apache.felix.fileinstall.ArtifactInstaller;
 import org.apache.felix.fileinstall.internal.Util.Logger;
+import org.apache.felix.utils.collections.DictionaryAsMap;
 import org.apache.felix.utils.properties.InterpolationHelper;
 import org.osgi.framework.BundleContext;
 import org.osgi.framework.Constants;
@@ -116,7 +117,9 @@ public class ConfigInstaller implements 
                         for( Enumeration e  = dict.keys(); e.hasMoreElements(); )
                         {
                             String key = e.nextElement().toString();
-                            if( !Constants.SERVICE_PID.equals(key) && !DirectoryWatcher.FILENAME.equals(key) )
+                            if( !Constants.SERVICE_PID.equals(key)
+                                    && !ConfigurationAdmin.SERVICE_FACTORYPID.equals(key)
+                                    && !DirectoryWatcher.FILENAME.equals(key) )
                             {
                                 String val = dict.get( key ).toString();
                                 props.put( key, val );
@@ -195,14 +198,27 @@ public class ConfigInstaller implements 
         }
 
         String pid[] = parsePid(f.getName());
-        ht.put(DirectoryWatcher.FILENAME, f.getAbsolutePath());
         Configuration config = getConfiguration(f.getAbsolutePath(), pid[0], pid[1]);
-        if (config.getBundleLocation() != null)
+
+        Hashtable old = new Hashtable(new DictionaryAsMap(config.getProperties()));
+        old.remove( DirectoryWatcher.FILENAME );
+        old.remove( Constants.SERVICE_PID );
+        old.remove( ConfigurationAdmin.SERVICE_FACTORYPID );
+
+        if( !ht.equals( old ) )
+        {
+            ht.put(DirectoryWatcher.FILENAME, f.getAbsolutePath());
+            if (config.getBundleLocation() != null)
+            {
+                config.setBundleLocation(null);
+            }
+            config.update(ht);
+            return true;
+        }
+        else
         {
-            config.setBundleLocation(null);
+            return false;
         }
-        config.update(ht);
-        return true;
     }
 
     /**

Modified: felix/trunk/fileinstall/src/test/java/org/apache/felix/fileinstall/internal/ConfigInstallerTest.java
URL: http://svn.apache.org/viewvc/felix/trunk/fileinstall/src/test/java/org/apache/felix/fileinstall/internal/ConfigInstallerTest.java?rev=1040664&r1=1040663&r2=1040664&view=diff
==============================================================================
--- felix/trunk/fileinstall/src/test/java/org/apache/felix/fileinstall/internal/ConfigInstallerTest.java (original)
+++ felix/trunk/fileinstall/src/test/java/org/apache/felix/fileinstall/internal/ConfigInstallerTest.java Tue Nov 30 18:08:03 2010
@@ -170,6 +170,8 @@ public class ConfigInstallerTest extends
     {
         mockConfiguration.getBundleLocation();
         mockConfigurationControl.setReturnValue( null );
+        mockConfiguration.getProperties();
+        mockConfigurationControl.setReturnValue( new Hashtable() );
         mockConfiguration.update( new Hashtable() );
         mockConfigurationControl.setMatcher( new ArgumentsMatcher()
         {