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]>.
