You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by to...@apache.org on 2016/07/20 14:46:38 UTC

svn commit: r1753527 - /sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/component/impl/OsgiConfigurationManager.java

Author: tommaso
Date: Wed Jul 20 14:46:38 2016
New Revision: 1753527

URL: http://svn.apache.org/viewvc?rev=1753527&view=rev
Log:
This closes #154
commit d24ef381afdc4d4c93378694772c9afe53e45ba9
Author: tmaret <tm...@adobe.com>
Date: 2016-07-20T07:02:52Z
SLING-5872 - Management of agent configurations must identify configurations by name
Remove the agents with the same name wich are not bind to the same factory

Modified:
    sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/component/impl/OsgiConfigurationManager.java

Modified: sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/component/impl/OsgiConfigurationManager.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/component/impl/OsgiConfigurationManager.java?rev=1753527&r1=1753526&r2=1753527&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/component/impl/OsgiConfigurationManager.java (original)
+++ sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/component/impl/OsgiConfigurationManager.java Wed Jul 20 14:46:38 2016
@@ -32,6 +32,7 @@ import java.io.IOException;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Dictionary;
+import java.util.Iterator;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -39,13 +40,11 @@ import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
 /**
- * Created by mpetria on 5/31/16.
+ * Manager implementation which represents the distribution configurations as OSGI configuration.
  */
 public class OsgiConfigurationManager implements DistributionConfigurationManager {
-    private final Logger log = LoggerFactory.getLogger(getClass());
-
-
     final ConfigurationAdmin configurationAdmin;
+    private final Logger log = LoggerFactory.getLogger(getClass());
 
     public OsgiConfigurationManager(ConfigurationAdmin configurationAdmin) {
 
@@ -57,7 +56,7 @@ public class OsgiConfigurationManager im
         List<Configuration> configurations = getOsgiConfigurations(kind, null);
 
         List<DistributionConfiguration> result = new ArrayList<DistributionConfiguration>();
-        if (configurations == null || configurations.size() == 0) {
+        if (configurations == null || configurations.isEmpty()) {
             return result;
         }
 
@@ -78,10 +77,15 @@ public class OsgiConfigurationManager im
     public DistributionConfiguration getConfig(ResourceResolver resolver, DistributionComponentKind kind, String name) {
         List<Configuration> configurations = getOsgiConfigurations(kind, name);
 
-        if (configurations == null || configurations.size() == 0) {
+        if (configurations == null || configurations.isEmpty()) {
             return null;
         }
 
+        if (configurations.size() > 1) {
+            log.warn("Found more than one configuration of kind: {} and with name: {}",
+                    new String[]{kind.getName(), name});
+        }
+
         Configuration configuration = configurations.get(0);
 
         if (configuration != null) {
@@ -111,6 +115,18 @@ public class OsgiConfigurationManager im
 
         String factoryPid = componentKind.getFactory(componentType);
         if (factoryPid != null) {
+
+            // SLING-5872 - Management of agent configurations must identify configurations by name
+            // Remove the agents with the same name wich are not bind to the same factory.
+            List<Configuration> configs = getOsgiConfigurations(componentKind, componentName);
+            for (Iterator<Configuration> iter = configs.iterator() ; iter.hasNext() ; ) {
+                Configuration conf = iter.next();
+                if (factoryPid.equals(conf.getFactoryPid())) {
+                    iter.remove();
+                }
+            }
+            deleteOsgiConfigs(configs);
+
             properties.put(DistributionComponentConstants.PN_NAME, componentName);
             Configuration configuration = saveOsgiConfig(factoryPid, componentName, properties);
         }
@@ -157,7 +173,7 @@ public class OsgiConfigurationManager im
         try {
             List<Configuration> configurations = getOsgiConfigurationsFromFactory(factoryPid, componentName);
             Configuration configuration = null;
-            if (configurations == null || configurations.size() == 0) {
+            if (configurations == null || configurations.isEmpty()) {
                 configuration = configurationAdmin.createFactoryConfiguration(factoryPid);
             } else {
                 configuration = configurations.get(0);