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

cziegeler pushed a commit to branch master
in repository 
https://gitbox.apache.org/repos/asf/sling-org-apache-sling-installer-factory-configuration.git


The following commit(s) were added to refs/heads/master by this push:
     new 29e4537  SLING-7786 : Use R7 configuration admin supporting named 
factory configurations
29e4537 is described below

commit 29e4537f16194bd15e75c0dfca02e335086fce4e
Author: Carsten Ziegeler <[email protected]>
AuthorDate: Wed Aug 1 10:04:46 2018 +0200

    SLING-7786 : Use R7 configuration admin supporting named factory 
configurations
---
 .../configuration/impl/ConfigRemoveTask.java       | 13 +++++++-
 .../configuration/impl/ConfigTaskCreator.java      | 12 ++++++--
 .../factories/configuration/impl/ConfigUtil.java   | 35 ++++++++++++++++++++++
 3 files changed, 56 insertions(+), 4 deletions(-)

diff --git 
a/src/main/java/org/apache/sling/installer/factories/configuration/impl/ConfigRemoveTask.java
 
b/src/main/java/org/apache/sling/installer/factories/configuration/impl/ConfigRemoveTask.java
index bf767cb..e8b0011 100644
--- 
a/src/main/java/org/apache/sling/installer/factories/configuration/impl/ConfigRemoveTask.java
+++ 
b/src/main/java/org/apache/sling/installer/factories/configuration/impl/ConfigRemoveTask.java
@@ -46,7 +46,18 @@ public class ConfigRemoveTask extends AbstractConfigTask {
     public void execute(final InstallationContext ctx) {
         synchronized ( Coordinator.SHARED ) {
             try {
-                final Configuration cfg = 
ConfigUtil.getConfiguration(this.getConfigurationAdmin(), this.factoryPid, 
this.configPid);
+                Configuration cfg = 
ConfigUtil.getConfiguration(this.getConfigurationAdmin(), this.factoryPid, 
this.configPid);
+                if ( cfg == null && this.factoryPid != null ) {
+                    // try support for legacy factory config handling
+                    final String aliasPid;
+                    if ( this.getResourceGroup().getAlias() != null ) {
+                        aliasPid = 
this.getResourceGroup().getAlias().substring(this.factoryPid.length() + 1);
+                    } else {
+                        aliasPid = null;
+                    }
+                    cfg = 
ConfigUtil.getLegacyFactoryConfig(this.getConfigurationAdmin(), 
this.factoryPid, (this.factoryPid != null && aliasPid != null ? aliasPid : 
this.configPid));
+
+                }
                 if (cfg == null) {
                     this.getLogger().debug("Cannot delete config , pid={} not 
found, ignored ({})", getRealPID(), getResource());
                 } else {
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 61cdacf..3033a5a 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
@@ -158,10 +158,16 @@ public class ConfigTaskCreator
      */
     private TransformationResult[] checkConfiguration(final RegisteredResource 
resource) {
         final String url = separatorsToUnix(resource.getURL());
-        String lastIdPart = url;
-        final int pos = lastIdPart.lastIndexOf('/');
+        int pos = url.lastIndexOf('/');
+        if ( pos == -1 ) {
+            pos = url.indexOf(':');
+        }
+
+        final String lastIdPart;
         if ( pos != -1 ) {
-            lastIdPart = lastIdPart.substring(pos + 1);
+            lastIdPart = url.substring(pos + 1);
+        } else {
+            lastIdPart = url;
         }
 
         final String pid;
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 8a664f0..b8cca60 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
@@ -204,6 +204,41 @@ abstract class ConfigUtil {
         return result;
     }
 
+    public static Configuration getLegacyFactoryConfig(final 
ConfigurationAdmin ca,
+            final String factoryPid,
+            final String configPid)
+    throws IOException, InvalidSyntaxException {
+        Configuration result = null;
+
+        Configuration configs[] = null;
+        if ( configPid != null ) {
+            configs = ca.listConfigurations("(&("
+                    + ConfigurationAdmin.SERVICE_FACTORYPID + "=" + 
encode(factoryPid)
+                    + ")(" + Constants.SERVICE_PID + "=" + encode(configPid)
+                    + "))");
+        }
+        if (configs == null || configs.length == 0) {
+            configs = ca.listConfigurations("(&("
+                    + ConfigurationAdmin.SERVICE_FACTORYPID + "=" + 
encode(factoryPid)
+                    + ")(" + Constants.SERVICE_PID + "=" + encode(factoryPid + 
"." + configPid)
+                    + "))");
+        }
+        if (configs == null || configs.length == 0) {
+            // check for old style with alias pid
+            configs = ca.listConfigurations(
+                    "(&(" + ConfigurationAdmin.SERVICE_FACTORYPID
+                    + "=" + factoryPid + ")(" + ALIAS_KEY + "=" + 
encode(configPid)
+                    + "))");
+
+            if (configs != null && configs.length > 0) {
+                result = configs[0];
+            }
+        } else {
+            result = configs[0];
+        }
+        return result;
+    }
+
     public static boolean toBoolean(final Object obj, final boolean 
defaultValue) {
         boolean result = defaultValue;
         if ( obj != null ) {

Reply via email to