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

cziegeler pushed a commit to branch issues/SLING-11741
in repository 
https://gitbox.apache.org/repos/asf/sling-org-apache-sling-jcr-base.git


The following commit(s) were added to refs/heads/issues/SLING-11741 by this 
push:
     new fe21eed  Merge code into a single class
fe21eed is described below

commit fe21eed18618c0d809dec8adc321b613ae33b0a2
Author: Carsten Ziegeler <cziege...@apache.org>
AuthorDate: Sun Jun 4 10:14:17 2023 +0200

    Merge code into a single class
---
 .../jcr/base/internal/ConfigurationUpdater.java    | 138 +++++++++++++--------
 .../ConfigurationUpdaterEventListener.java         |  73 -----------
 .../internal/mount/ProxyJackrabbitSession.java     |   1 -
 .../sling/jcr/base/RepositoryInitializersTest.java |   2 +-
 .../base/internal/ConfigurationUpdaterTest.java    |   6 +-
 5 files changed, 91 insertions(+), 129 deletions(-)

diff --git 
a/src/main/java/org/apache/sling/jcr/base/internal/ConfigurationUpdater.java 
b/src/main/java/org/apache/sling/jcr/base/internal/ConfigurationUpdater.java
index adae365..68b9156 100644
--- a/src/main/java/org/apache/sling/jcr/base/internal/ConfigurationUpdater.java
+++ b/src/main/java/org/apache/sling/jcr/base/internal/ConfigurationUpdater.java
@@ -19,9 +19,12 @@
 package org.apache.sling.jcr.base.internal;
 
 import java.io.IOException;
+import java.util.ArrayList;
 import java.util.Collections;
 import java.util.Dictionary;
+import java.util.HashMap;
 import java.util.Hashtable;
+import java.util.List;
 import java.util.Map;
 
 import org.osgi.framework.Constants;
@@ -29,54 +32,95 @@ import org.osgi.framework.InvalidSyntaxException;
 import org.osgi.service.cm.Configuration;
 import org.osgi.service.cm.ConfigurationAdmin;
 import org.osgi.service.cm.ConfigurationEvent;
+import org.osgi.service.cm.ConfigurationListener;
+import org.osgi.service.component.annotations.Activate;
+import org.osgi.service.component.annotations.Component;
+import org.osgi.service.component.annotations.Reference;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-public abstract class ConfigurationUpdater {
+@Component(service = ConfigurationListener.class)
+public class ConfigurationUpdater implements ConfigurationListener {
+
+    static final String LOGIN_ADMIN_WHITELIST_PID = 
"org.apache.sling.jcr.base.internal.LoginAdminWhitelist";
+    static final String LOGIN_ADMIN_ALLOWLIST_PID = 
"org.apache.sling.jcr.base.internal.LoginAdminAllowList";
+    private static final Map<String, String> 
LOGIN_ADMIN_WHITELIST_PROPS_TO_REPLACE = new HashMap<>();
+    static {
+        LOGIN_ADMIN_WHITELIST_PROPS_TO_REPLACE.put("whitelist.bypass", 
"allowlist.bypass");
+        LOGIN_ADMIN_WHITELIST_PROPS_TO_REPLACE.put("whitelist.bundles.regexp", 
"allowlist.bundles.regexp");
+    }
+    private static final String ALLOWLIST_FRAGMENT_PID = 
"org.apache.sling.jcr.base.internal.LoginAdminAllowList.fragment";
+    private static final String WHITELIST_FRAGMENT_PID = 
"org.apache.sling.jcr.base.internal.LoginAdminWhitelist.fragment";
+    private static final Map<String, String> FRAGMENT_PROPS_TO_REPLACE = new 
HashMap<>();
+
+    static {
+        FRAGMENT_PROPS_TO_REPLACE.put("whitelist.name", "allowlist.name");
+        FRAGMENT_PROPS_TO_REPLACE.put("whitelist.bundles", 
"allowlist.bundles");
+    }
 
     protected final Logger logger = LoggerFactory.getLogger(this.getClass());
 
-    protected final String oldPid;
-    protected final String newPid;
-    protected final Map<String, String> propsToReplace;
+    private final List<Updater> configurationUpdaterList = new ArrayList<>();
 
-    public ConfigurationUpdater(final String oldPid, final String newPid, 
final Map<String, String> propsToReplace) {
-        this.oldPid = oldPid;
-        this.newPid = newPid;
-        this.propsToReplace = propsToReplace;
+    private final ConfigurationAdmin configurationAdmin;
+
+    @Activate
+    public ConfigurationUpdater(@Reference ConfigurationAdmin 
configurationAdmin) {
+        this.configurationAdmin = configurationAdmin;
+        configurationUpdaterList.add(new 
PidConfigurationUpdater(LOGIN_ADMIN_WHITELIST_PID, LOGIN_ADMIN_ALLOWLIST_PID, 
LOGIN_ADMIN_WHITELIST_PROPS_TO_REPLACE));
+        configurationUpdaterList.add(new 
FactoryPidConfigurationUpdater(WHITELIST_FRAGMENT_PID, ALLOWLIST_FRAGMENT_PID, 
FRAGMENT_PROPS_TO_REPLACE));
+
+        configurationUpdaterList.forEach(configurationUpdater -> 
configurationUpdater.updateProps());
     }
 
-    public static ConfigurationUpdater forPid(final String oldPid, final 
String newPid, final Map<String, String> propsToReplace) {
-        return new PidConfigurationUpdater(oldPid, newPid, propsToReplace);
+    @Override
+    public void configurationEvent(final ConfigurationEvent event) {
+        if ( event.getType() == ConfigurationEvent.CM_UPDATED ) {
+            configurationUpdaterList.forEach(configurationUpdater -> {
+                configurationUpdater.updateProps(event);
+            });
+        }
     }
 
-    public static ConfigurationUpdater forFactoryPid(final String oldPid, 
final String newPid, final Map<String, String> propsToReplace) {
-        return new FactoryPidConfigurationUpdater(oldPid, newPid, 
propsToReplace);
+    /**
+     * Encode the value for the ldap filter: \, *, (, and ) should be escaped.
+     */
+    private static String encode(final String value) {
+        return value.replace("\\", "\\\\")
+                .replace("*", "\\*")
+                .replace("(", "\\(")
+                .replace(")", "\\)");
     }
+    
+    protected abstract class Updater {
 
-    public abstract void updateProps(ConfigurationAdmin configurationAdmin, 
ConfigurationEvent event);
+        protected final String oldPid;
+        protected final String newPid;
+        protected final Map<String, String> propsToReplace;
 
-    protected abstract void updateProps(ConfigurationAdmin configurationAdmin);
+        public Updater(final String oldPid, final String newPid, final 
Map<String, String> propsToReplace) {
+            this.oldPid = oldPid;
+            this.newPid = newPid;
+            this.propsToReplace = propsToReplace;
+        }
+
+        protected abstract void updateProps(ConfigurationEvent event);
 
-    protected abstract Configuration createConfiguration(ConfigurationAdmin 
configurationAdmin, String oldPid) throws IOException;
+        protected abstract void updateProps();
 
-    protected void updateProps(final Configuration sourceConfig, 
ConfigurationAdmin configurationAdmin) {
-        final Dictionary<String, Object> sourceProps = 
sourceConfig.getProperties();
-        final Dictionary<String, Object> targetProps = new Hashtable<>();
-        for(final String name : Collections.list(sourceProps.keys())) {
-            final Object value = sourceProps.get(name);
-            String newName = this.propsToReplace.get(name);
-            if (newName == null) {
-                newName = name;
-            } else {
-                logger.debug("Received configuration value: {} for old key: 
{}. Setting the new property {} to {}",
-                    value, name, newName, value);
+        protected abstract Configuration createConfiguration(String oldPid) 
throws IOException;
+
+        /**
+         * Update a configuration
+         */
+        protected void updateProps(final Configuration sourceConfig, 
ConfigurationAdmin configurationAdmin) {
+            final Dictionary<String, Object> sourceProps = 
sourceConfig.getProperties();
+            final Dictionary<String, Object> targetProps = new Hashtable<>();
+            for(final String name : Collections.list(sourceProps.keys())) {
+                targetProps.put(this.propsToReplace.getOrDefault(name, name), 
sourceProps.get(name));
             }
-            targetProps.put(newName, value);
-        }
-        if (!targetProps.isEmpty()) {
             try {
-                final Configuration cfg = 
this.createConfiguration(configurationAdmin, sourceConfig.getPid());
+                final Configuration cfg = 
this.createConfiguration(sourceConfig.getPid());
                 if (cfg==null) return;
                 logger.info("Creating new configuration with PID {} for source 
PID: {}", cfg.getPid(), sourceConfig.getPid());
                 cfg.update(targetProps);
@@ -88,35 +132,26 @@ public abstract class ConfigurationUpdater {
         }
     }
 
-    /**
-     * Encode the value for the ldap filter: \, *, (, and ) should be escaped.
-     */
-    private static String encode(final String value) {
-        return value.replace("\\", "\\\\")
-                .replace("*", "\\*")
-                .replace("(", "\\(")
-                .replace(")", "\\)");
-    }
-    
-    private static class PidConfigurationUpdater extends ConfigurationUpdater {
+    private class PidConfigurationUpdater extends Updater {
 
         public PidConfigurationUpdater(final String oldPid, final String 
newPid, final Map<String, String> propsToReplace) {
             super(oldPid, newPid, propsToReplace);
         }
 
         @Override
-        public void updateProps(final ConfigurationAdmin configurationAdmin, 
final ConfigurationEvent event) {
+        protected void updateProps(final ConfigurationEvent event) {
             if (this.oldPid.equals(event.getPid())) {
-                this.updateProps(configurationAdmin);
+                this.updateProps();
             }
         }
 
-        protected Configuration createConfiguration(final ConfigurationAdmin 
configurationAdmin, final String oldPid) throws IOException {
+        @Override
+        protected Configuration createConfiguration(final String oldPid) 
throws IOException {
             return configurationAdmin.getConfiguration(newPid, null);
         }
 
         @Override
-        protected void updateProps(final ConfigurationAdmin 
configurationAdmin) {
+        protected void updateProps() {
             final String filter = String.format("(%s=%s)", 
Constants.SERVICE_PID, encode(this.oldPid));
             try {
                 final Configuration[] configs = 
configurationAdmin.listConfigurations(filter);
@@ -124,27 +159,27 @@ public abstract class ConfigurationUpdater {
                     this.updateProps(configs[0], configurationAdmin);
                 }
             } catch (final IOException | InvalidSyntaxException e) {
-                this.logger.error("Failed to retrieve configuration for PID: 
{}. Configuration is not updated to PID {}.",
+                logger.error("Failed to retrieve configuration for PID: {}. 
Configuration is not updated to PID {}.",
                     oldPid, newPid, e);
             }
         }
     }
 
-    private static class FactoryPidConfigurationUpdater extends 
ConfigurationUpdater {
+    private class FactoryPidConfigurationUpdater extends Updater {
 
         public FactoryPidConfigurationUpdater(final String oldPid, final 
String newPid, final Map<String, String> propsToReplace) {
             super(oldPid, newPid, propsToReplace);
         }
 
         @Override
-        public void updateProps(final ConfigurationAdmin configurationAdmin, 
final ConfigurationEvent event) {
+        protected void updateProps(final ConfigurationEvent event) {
             if (this.oldPid.equals(event.getFactoryPid())) {
-                this.updateProps(configurationAdmin);
+                this.updateProps();
             }
         }
 
         @Override
-        protected void updateProps(final ConfigurationAdmin 
configurationAdmin) {
+        protected void updateProps() {
             final String filter = String.format("(%s=%s)", 
ConfigurationAdmin.SERVICE_FACTORYPID, encode(this.oldPid));
             try {
                 final Configuration[] configs = 
configurationAdmin.listConfigurations(filter);
@@ -158,7 +193,8 @@ public abstract class ConfigurationUpdater {
             }
         }
 
-        protected Configuration createConfiguration(final ConfigurationAdmin 
configurationAdmin, final String oldFullPid) throws IOException {
+        @Override
+        protected Configuration createConfiguration(final String oldFullPid) 
throws IOException {
             final String prefix = this.oldPid.concat("~");
             if (oldFullPid.startsWith(prefix)) {
                 return configurationAdmin.getFactoryConfiguration(newPid, 
oldFullPid.substring(prefix.length()), null);
diff --git 
a/src/main/java/org/apache/sling/jcr/base/internal/ConfigurationUpdaterEventListener.java
 
b/src/main/java/org/apache/sling/jcr/base/internal/ConfigurationUpdaterEventListener.java
deleted file mode 100644
index c0b4387..0000000
--- 
a/src/main/java/org/apache/sling/jcr/base/internal/ConfigurationUpdaterEventListener.java
+++ /dev/null
@@ -1,73 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.sling.jcr.base.internal;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import org.osgi.service.cm.ConfigurationAdmin;
-import org.osgi.service.cm.ConfigurationEvent;
-import org.osgi.service.cm.ConfigurationListener;
-import org.osgi.service.component.annotations.Activate;
-import org.osgi.service.component.annotations.Component;
-import org.osgi.service.component.annotations.Reference;
-
-@Component(service = ConfigurationListener.class)
-public class ConfigurationUpdaterEventListener implements 
ConfigurationListener {
-
-    static final String LOGIN_ADMIN_WHITELIST_PID = 
"org.apache.sling.jcr.base.internal.LoginAdminWhitelist";
-    static final String LOGIN_ADMIN_ALLOWLIST_PID = 
"org.apache.sling.jcr.base.internal.LoginAdminAllowList";
-    private static final Map<String, String> 
LOGIN_ADMIN_WHITELIST_PROPS_TO_REPLACE = new HashMap<>();
-    static {
-        LOGIN_ADMIN_WHITELIST_PROPS_TO_REPLACE.put("whitelist.bypass", 
"allowlist.bypass");
-        LOGIN_ADMIN_WHITELIST_PROPS_TO_REPLACE.put("whitelist.bundles.regexp", 
"allowlist.bundles.regexp");
-    }
-    private static final String ALLOWLIST_FRAGMENT_PID = 
"org.apache.sling.jcr.base.internal.LoginAdminAllowList.fragment";
-    private static final String WHITELIST_FRAGMENT_PID = 
"org.apache.sling.jcr.base.internal.LoginAdminWhitelist.fragment";
-    private static final Map<String, String> FRAGMENT_PROPS_TO_REPLACE = new 
HashMap<>();
-
-    static {
-        FRAGMENT_PROPS_TO_REPLACE.put("whitelist.name", "allowlist.name");
-        FRAGMENT_PROPS_TO_REPLACE.put("whitelist.bundles", 
"allowlist.bundles");
-    }
-
-    private final List<ConfigurationUpdater> configurationUpdaterList;
-
-    private final ConfigurationAdmin configurationAdmin;
-
-    @Activate
-    public ConfigurationUpdaterEventListener(@Reference ConfigurationAdmin 
configurationAdmin) {
-        this.configurationAdmin = configurationAdmin;
-        configurationUpdaterList = new ArrayList<>();
-        
configurationUpdaterList.add(ConfigurationUpdater.forPid(LOGIN_ADMIN_WHITELIST_PID,
 LOGIN_ADMIN_ALLOWLIST_PID, LOGIN_ADMIN_WHITELIST_PROPS_TO_REPLACE));
-        
configurationUpdaterList.add(ConfigurationUpdater.forFactoryPid(WHITELIST_FRAGMENT_PID,
 ALLOWLIST_FRAGMENT_PID, FRAGMENT_PROPS_TO_REPLACE));
-
-        configurationUpdaterList.forEach(configurationUpdater -> 
configurationUpdater.updateProps(this.configurationAdmin));
-    }
-
-    @Override
-    public void configurationEvent(final ConfigurationEvent event) {
-        if ( event.getType() == ConfigurationEvent.CM_UPDATED ) {
-            configurationUpdaterList.forEach(configurationUpdater -> {
-                configurationUpdater.updateProps(configurationAdmin, event);
-            });
-        }
-    }
-}
diff --git 
a/src/main/java/org/apache/sling/jcr/base/internal/mount/ProxyJackrabbitSession.java
 
b/src/main/java/org/apache/sling/jcr/base/internal/mount/ProxyJackrabbitSession.java
index 97ee586..ba529e7 100644
--- 
a/src/main/java/org/apache/sling/jcr/base/internal/mount/ProxyJackrabbitSession.java
+++ 
b/src/main/java/org/apache/sling/jcr/base/internal/mount/ProxyJackrabbitSession.java
@@ -18,7 +18,6 @@
  */
 package org.apache.sling.jcr.base.internal.mount;
 
-import java.util.HashSet;
 import java.util.Set;
 import javax.jcr.AccessDeniedException;
 import javax.jcr.Item;
diff --git 
a/src/test/java/org/apache/sling/jcr/base/RepositoryInitializersTest.java 
b/src/test/java/org/apache/sling/jcr/base/RepositoryInitializersTest.java
index bb8bdc5..0163b1d 100644
--- a/src/test/java/org/apache/sling/jcr/base/RepositoryInitializersTest.java
+++ b/src/test/java/org/apache/sling/jcr/base/RepositoryInitializersTest.java
@@ -83,7 +83,7 @@ public class RepositoryInitializersTest {
     private void registerInitializer(String id, int serviceRanking) {
         final SlingRepositoryInitializer init = new TestInitializer(id);
         final Hashtable<String, Object> props = new Hashtable<String, 
Object>();
-        props.put(Constants.SERVICE_RANKING, new Integer(serviceRanking));
+        props.put(Constants.SERVICE_RANKING, serviceRanking);
         
context.bundleContext().registerService(SlingRepositoryInitializer.class.getName(),
 init, props);
     }
     
diff --git 
a/src/test/java/org/apache/sling/jcr/base/internal/ConfigurationUpdaterTest.java
 
b/src/test/java/org/apache/sling/jcr/base/internal/ConfigurationUpdaterTest.java
index e619e9d..7b78759 100644
--- 
a/src/test/java/org/apache/sling/jcr/base/internal/ConfigurationUpdaterTest.java
+++ 
b/src/test/java/org/apache/sling/jcr/base/internal/ConfigurationUpdaterTest.java
@@ -56,7 +56,7 @@ public class ConfigurationUpdaterTest {
         expectedProperties.put("allowlist.bundles.regexp", 
"whitelistBundleValue");
         expectedProperties.put("prop", "value");
 
-        new ConfigurationUpdaterEventListener(mockConfigurationAdmin); 
+        new ConfigurationUpdater(mockConfigurationAdmin); 
 
         
verify(mockConfigurationAdmin).listConfigurations("(service.pid=org.apache.sling.jcr.base.internal.LoginAdminWhitelist)");
         
verify(mockConfigurationAdmin).getConfiguration("org.apache.sling.jcr.base.internal.LoginAdminAllowList",
 null);
@@ -86,7 +86,7 @@ public class ConfigurationUpdaterTest {
         expectedProperties.put("allowlist.bundles", "whitelistBundleValue");
         expectedProperties.put("prop", "value");
 
-        new ConfigurationUpdaterEventListener(mockConfigurationAdmin); 
+        new ConfigurationUpdater(mockConfigurationAdmin); 
 
         
verify(mockConfigurationAdmin).listConfigurations("(service.factoryPid=org.apache.sling.jcr.base.internal.LoginAdminWhitelist.fragment)");
         
verify(mockConfigurationAdmin).getFactoryConfiguration("org.apache.sling.jcr.base.internal.LoginAdminAllowList.fragment",
 "foo", null);
@@ -116,7 +116,7 @@ public class ConfigurationUpdaterTest {
        expectedProperties.put("allowlist.bundles", "whitelistBundleValue");
        expectedProperties.put("prop", "value");
 
-       new ConfigurationUpdaterEventListener(mockConfigurationAdmin); 
+       new ConfigurationUpdater(mockConfigurationAdmin); 
 
        
verify(mockConfigurationAdmin).listConfigurations("(service.factoryPid=org.apache.sling.jcr.base.internal.LoginAdminWhitelist.fragment)");
        
verify(mockConfigurationAdmin).createFactoryConfiguration("org.apache.sling.jcr.base.internal.LoginAdminAllowList.fragment",
 null);

Reply via email to