You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@felix.apache.org by cz...@apache.org on 2017/04/24 08:15:37 UTC

svn commit: r1792434 - /felix/trunk/osgi-r7/configurator/src/main/java/org/apache/felix/configurator/impl/Configurator.java

Author: cziegeler
Date: Mon Apr 24 08:15:37 2017
New Revision: 1792434

URL: http://svn.apache.org/viewvc?rev=1792434&view=rev
Log:
Implementing correct configuration admin handling (WiP)

Modified:
    felix/trunk/osgi-r7/configurator/src/main/java/org/apache/felix/configurator/impl/Configurator.java

Modified: felix/trunk/osgi-r7/configurator/src/main/java/org/apache/felix/configurator/impl/Configurator.java
URL: http://svn.apache.org/viewvc/felix/trunk/osgi-r7/configurator/src/main/java/org/apache/felix/configurator/impl/Configurator.java?rev=1792434&r1=1792433&r2=1792434&view=diff
==============================================================================
--- felix/trunk/osgi-r7/configurator/src/main/java/org/apache/felix/configurator/impl/Configurator.java (original)
+++ felix/trunk/osgi-r7/configurator/src/main/java/org/apache/felix/configurator/impl/Configurator.java Mon Apr 24 08:15:37 2017
@@ -389,36 +389,41 @@ public class Configurator {
         // if there is a configuration to activate, we can directly activate it
         // without deactivating (reducing the changes of the configuration from two
         // to one)
+        boolean noRetryNeeded = true;
         if ( toActivate != null && toActivate.getState() == ConfigState.INSTALL ) {
-            activate(configList, toActivate);
+            noRetryNeeded = activate(configList, toActivate);
         }
         if ( toActivate == null && toDeactivate != null ) {
-            deactivate(configList, toDeactivate);
+            noRetryNeeded = deactivate(configList, toDeactivate);
         }
 
-        // remove all uninstall(ed) configurations
-        final Iterator<Config> iter = configList.iterator();
-        boolean foundInstalled = false;
-        while ( iter.hasNext() ) {
-            final Config cfg = iter.next();
-            if ( cfg.getState() == ConfigState.UNINSTALL || cfg.getState() == ConfigState.UNINSTALLED ) {
-                if ( cfg.getFiles() != null ) {
-                    for(final File f : cfg.getFiles()) {
-                        f.delete();
+        if ( noRetryNeeded ) {
+            // remove all uninstall(ed) configurations
+            final Iterator<Config> iter = configList.iterator();
+            boolean foundInstalled = false;
+            while ( iter.hasNext() ) {
+                final Config cfg = iter.next();
+                if ( cfg.getState() == ConfigState.UNINSTALL || cfg.getState() == ConfigState.UNINSTALLED ) {
+                    if ( cfg.getFiles() != null ) {
+                        for(final File f : cfg.getFiles()) {
+                            f.delete();
+                        }
+                    }
+                    iter.remove();
+                } else if ( cfg.getState() == ConfigState.INSTALLED ) {
+                    if ( foundInstalled ) {
+                        cfg.setState(ConfigState.INSTALL);
+                    } else {
+                        foundInstalled = true;
                     }
-                }
-                iter.remove();
-            } else if ( cfg.getState() == ConfigState.INSTALLED ) {
-                if ( foundInstalled ) {
-                    cfg.setState(ConfigState.INSTALL);
-                } else {
-                    foundInstalled = true;
                 }
             }
-        }
 
-        // mark as processed
-        configList.setHasChanges(false);
+            // mark as processed
+            configList.setHasChanges(false);
+        } else {
+            // TODO
+        }
     }
 
     private ConfigurationAdmin getConfigurationAdmin(final long configAdminServiceBundleId) {
@@ -449,7 +454,7 @@ public class Configurator {
         // check for configuration admin
         Long configAdminServiceBundleId = this.state.getConfigAdminBundleId(cfg.getBundleId());
         if ( configAdminServiceBundleId == null ) {
-            final Bundle configBundle = this.bundleContext.getBundle(Constants.SYSTEM_BUNDLE_LOCATION).getBundleContext().getBundle(cfg.getBundleId());
+            final Bundle configBundle = cfg.getBundleId() == -1 ? this.bundleContext.getBundle() : this.bundleContext.getBundle(Constants.SYSTEM_BUNDLE_LOCATION).getBundleContext().getBundle(cfg.getBundleId());
             if ( configBundle != null ) {
                 try {
                     final Collection<ServiceReference<ConfigurationAdmin>> refs = configBundle.getBundleContext().getServiceReferences(ConfigurationAdmin.class, null);