This is an automated email from the ASF dual-hosted git repository.

rombert pushed a commit to annotated tag 
org.apache.sling.installer.factory.configuration-1.0.0
in repository 
https://gitbox.apache.org/repos/asf/sling-org-apache-sling-installer-factory-configuration.git

commit 18c23bc81d9ebf7824caca48abe90d0ed8679c66
Author: Carsten Ziegeler <[email protected]>
AuthorDate: Tue Mar 1 16:13:34 2011 +0000

    SLING-2005 : Don't add alias as a property to factory configurations
    
    git-svn-id: 
https://svn.apache.org/repos/asf/sling/trunk/installer/factories/configuration@1075872
 13f79535-47bb-0310-9956-ffa450edef68
---
 pom.xml                                            |  2 +-
 .../configuration/impl/AbstractConfigTask.java     | 34 +++++++---------
 .../configuration/impl/ConfigInstallTask.java      |  7 +++-
 .../configuration/impl/ConfigTaskCreator.java      |  4 +-
 .../factories/configuration/impl/ConfigUtil.java   | 46 +++++++++++++++++-----
 5 files changed, 58 insertions(+), 35 deletions(-)

diff --git a/pom.xml b/pom.xml
index 17a3d65..60eb1c4 100644
--- a/pom.xml
+++ b/pom.xml
@@ -29,7 +29,7 @@
     <version>0.9.0-SNAPSHOT</version>
     <packaging>bundle</packaging>
 
-    <name>Apache Sling Configuration Admin Installer</name>
+    <name>Apache Sling Installer Configuration Admin Support</name>
     <description> 
         Provides support for configurations to the Apache Sling OSGi installer
     </description>
diff --git 
a/src/main/java/org/apache/sling/installer/factories/configuration/impl/AbstractConfigTask.java
 
b/src/main/java/org/apache/sling/installer/factories/configuration/impl/AbstractConfigTask.java
index 69081b7..5b98118 100644
--- 
a/src/main/java/org/apache/sling/installer/factories/configuration/impl/AbstractConfigTask.java
+++ 
b/src/main/java/org/apache/sling/installer/factories/configuration/impl/AbstractConfigTask.java
@@ -20,8 +20,6 @@ package 
org.apache.sling.installer.factories.configuration.impl;
 
 import java.io.IOException;
 import java.util.Dictionary;
-import java.util.Enumeration;
-import java.util.Hashtable;
 
 import org.apache.sling.installer.api.tasks.InstallTask;
 import org.apache.sling.installer.api.tasks.TaskResourceGroup;
@@ -43,6 +41,9 @@ abstract class AbstractConfigTask extends InstallTask {
     /** Factory PID or null */
     protected final String factoryPid;
 
+    /** Alias factory pid or null. */
+    protected String aliasPid;
+
     /** Configuration admin. */
     private final ConfigurationAdmin configAdmin;
 
@@ -53,6 +54,11 @@ abstract class AbstractConfigTask extends InstallTask {
         this.configAdmin = configAdmin;
         this.configPid = 
(String)getResource().getAttribute(Constants.SERVICE_PID);
         this.factoryPid = 
(String)getResource().getAttribute(ConfigurationAdmin.SERVICE_FACTORYPID);
+        if ( r.getAlias() != null ) {
+            this.aliasPid = r.getAlias().substring(this.factoryPid.length() + 
1);
+        } else {
+            this.aliasPid = null;
+        }
     }
 
     protected Logger getLogger() {
@@ -70,30 +76,20 @@ abstract class AbstractConfigTask extends InstallTask {
         return (factoryPid == null ? "" : factoryPid + ".") + configPid;
     }
 
-    protected Dictionary<String, Object> getDictionary() {
-        // Copy dictionary and add pseudo-properties
-        final Dictionary<String, Object> d = 
this.getResource().getDictionary();
-        if ( d == null ) {
+    protected String getCompositeAliasPid() {
+        if ( this.aliasPid == null || this.factoryPid == null ) {
             return null;
         }
+        return factoryPid + "." + this.aliasPid;
+    }
 
-        final Dictionary<String, Object> result = new Hashtable<String, 
Object>();
-        final Enumeration<String> e = d.keys();
-        while(e.hasMoreElements()) {
-            final String key = e.nextElement();
-            result.put(key, d.get(key));
-        }
-
-        if ( this.factoryPid != null ) {
-            result.put(ConfigTaskCreator.ALIAS_KEY, configPid);
-        }
-
-        return result;
+    protected Dictionary<String, Object> getDictionary() {
+        return this.getResource().getDictionary();
     }
 
     protected Configuration getConfiguration(final ConfigurationAdmin ca,
                                              final boolean createIfNeeded)
     throws IOException, InvalidSyntaxException {
-        return ConfigUtil.getConfiguration(ca, this.factoryPid, 
this.configPid, createIfNeeded, true);
+        return ConfigUtil.getConfiguration(ca, this.factoryPid, 
(this.factoryPid != null ? this.aliasPid : this.configPid), createIfNeeded);
     }
 }
diff --git 
a/src/main/java/org/apache/sling/installer/factories/configuration/impl/ConfigInstallTask.java
 
b/src/main/java/org/apache/sling/installer/factories/configuration/impl/ConfigInstallTask.java
index bc9308e..3b0d657 100644
--- 
a/src/main/java/org/apache/sling/installer/factories/configuration/impl/ConfigInstallTask.java
+++ 
b/src/main/java/org/apache/sling/installer/factories/configuration/impl/ConfigInstallTask.java
@@ -67,12 +67,15 @@ public class ConfigInstallTask extends AbstractConfigTask {
                 }
                 config.update(getDictionary());
                 ctx.log("Installed configuration {} from resource {}", 
config.getPid(), getResource());
-                this.setFinishedState(ResourceState.INSTALLED);
+                if ( this.factoryPid != null ) {
+                    this.aliasPid = config.getPid();
+                }
+                this.setFinishedState(ResourceState.INSTALLED, 
this.getCompositeAliasPid());
                 this.getLogger().debug("Configuration " + config.getPid()
                             + " " + (created ? "created" : "updated")
                             + " from " + getResource());
             } else {
-                this.setFinishedState(ResourceState.IGNORED);
+                this.setFinishedState(ResourceState.IGNORED, 
this.getCompositeAliasPid());
             }
         } catch (Exception e) {
             this.getLogger().debug("Exception during installation of config " 
+ this.getResource() + " : " + e.getMessage() + ". Retrying later.", e);
diff --git 
a/src/main/java/org/apache/sling/installer/factories/configuration/impl/ConfigTaskCreator.java
 
b/src/main/java/org/apache/sling/installer/factories/configuration/impl/ConfigTaskCreator.java
index e5c1551..da6d602 100644
--- 
a/src/main/java/org/apache/sling/installer/factories/configuration/impl/ConfigTaskCreator.java
+++ 
b/src/main/java/org/apache/sling/installer/factories/configuration/impl/ConfigTaskCreator.java
@@ -44,8 +44,6 @@ import org.osgi.service.cm.ConfigurationListener;
 public class ConfigTaskCreator
     implements InstallTaskFactory, ConfigurationListener, ResourceTransformer {
 
-    public static final String ALIAS_KEY = 
"org.apache.sling.installer.osgi.factoryaliaspid";
-
     /** Configuration admin. */
     private ConfigurationAdmin configAdmin;
 
@@ -90,7 +88,7 @@ public class ConfigTaskCreator
                 final Configuration config = 
ConfigUtil.getConfiguration(configAdmin,
                         event.getFactoryPid(),
                         event.getPid(),
-                        false, false);
+                        false);
                 if ( config != null ) {
                     final Dictionary<String, Object> dict = 
ConfigUtil.cleanConfiguration(config.getProperties());
                     
this.changeListener.resourceAddedOrUpdated(InstallableResource.TYPE_CONFIG, id, 
null, dict);
diff --git 
a/src/main/java/org/apache/sling/installer/factories/configuration/impl/ConfigUtil.java
 
b/src/main/java/org/apache/sling/installer/factories/configuration/impl/ConfigUtil.java
index d956589..582e6ca 100644
--- 
a/src/main/java/org/apache/sling/installer/factories/configuration/impl/ConfigUtil.java
+++ 
b/src/main/java/org/apache/sling/installer/factories/configuration/impl/ConfigUtil.java
@@ -19,6 +19,7 @@
 package org.apache.sling.installer.factories.configuration.impl;
 
 import java.io.IOException;
+import java.util.Arrays;
 import java.util.Dictionary;
 import java.util.Enumeration;
 import java.util.HashSet;
@@ -41,12 +42,19 @@ abstract class ConfigUtil {
      */
     private static final String CONFIG_PATH_KEY = 
"org.apache.sling.installer.osgi.path";
 
+    /**
+     * This property has been used in older versions to keep track of factory
+     * configurations.
+     */
+    private static final String ALIAS_KEY = 
"org.apache.sling.installer.osgi.factoryaliaspid";
+
     /** Configuration properties to ignore when comparing configs */
     private static final Set<String> IGNORED_PROPERTIES = new 
HashSet<String>();
     static {
         IGNORED_PROPERTIES.add(Constants.SERVICE_PID);
         IGNORED_PROPERTIES.add(CONFIG_PATH_KEY);
-        IGNORED_PROPERTIES.add(ConfigTaskCreator.ALIAS_KEY);
+        IGNORED_PROPERTIES.add(ALIAS_KEY);
+        IGNORED_PROPERTIES.add(ConfigurationAdmin.SERVICE_FACTORYPID);
     }
 
     private static Set<String> collectKeys(final Dictionary<String, Object>a) {
@@ -69,8 +77,25 @@ abstract class ConfigUtil {
             final Set<String> keysB = collectKeys(b);
             if ( keysA.size() == keysB.size() && keysA.containsAll(keysB) ) {
                 for(final String key : keysA ) {
-                    if ( !a.get(key).equals(b.get(key)) ) {
-                        return result;
+                    final Object valA = a.get(key);
+                    final Object valB = b.get(key);
+                    if ( valA.getClass().isArray() ) {
+                        if ( !Arrays.equals((Object[])valA, (Object[])valB) ) {
+                            return result;
+                        }
+                    } else if ( valA instanceof Number ) {
+                        // JCR only supports Long but not Integer
+                        // therefore we have to add a special case here!
+                        if ( ! (valB instanceof Number) ) {
+                            return result;
+                        }
+                        if ( 
!(String.valueOf(valA).equals(String.valueOf(valB))) ) {
+                            return result;
+                        }
+                    } else {
+                        if ( !a.get(key).equals(b.get(key)) ) {
+                            return result;
+                        }
                     }
                 }
                 result = true;
@@ -98,8 +123,7 @@ abstract class ConfigUtil {
     public static Configuration getConfiguration(final ConfigurationAdmin ca,
             final String factoryPid,
             final String configPid,
-            final boolean createIfNeeded,
-            final boolean useAliasForFactory)
+            final boolean createIfNeeded)
     throws IOException, InvalidSyntaxException {
         Configuration result = null;
 
@@ -115,11 +139,13 @@ abstract class ConfigUtil {
                 }
             }
         } else {
-            Configuration configs[] = ca.listConfigurations("(&("
-                    + ConfigurationAdmin.SERVICE_FACTORYPID + "=" + factoryPid
-                    + ")(" + (useAliasForFactory ? ConfigTaskCreator.ALIAS_KEY 
: Constants.SERVICE_PID) + "=" + configPid
-                    + "))");
-
+            Configuration configs[] = null;
+            if ( configPid != null ) {
+                configs = ca.listConfigurations("(&("
+                        + ConfigurationAdmin.SERVICE_FACTORYPID + "=" + 
factoryPid
+                        + ")(" + Constants.SERVICE_PID + "=" + configPid
+                        + "))");
+            }
             if (configs == null || configs.length == 0) {
                 if (createIfNeeded) {
                     result = ca.createFactoryConfiguration(factoryPid, null);

-- 
To stop receiving notification emails like this one, please contact
"[email protected]" <[email protected]>.

Reply via email to