You are viewing a plain text version of this content. The canonical link for it is here.
Posted to oak-commits@jackrabbit.apache.org by tr...@apache.org on 2013/10/08 00:19:39 UTC

svn commit: r1530094 - in /jackrabbit/oak/trunk: oak-core/src/main/java/org/apache/jackrabbit/oak/osgi/ oak-core/src/main/java/org/apache/jackrabbit/oak/security/ oak-core/src/main/java/org/apache/jackrabbit/oak/security/authentication/ oak-core/src/ma...

Author: tripod
Date: Mon Oct  7 22:19:38 2013
New Revision: 1530094

URL: http://svn.apache.org/r1530094
Log:
OAK-1082 Avoid empty instances of ConfigurationParameters

Modified:
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/osgi/Activator.java
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/osgi/OsgiSecurityProvider.java
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/SecurityProviderImpl.java
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authentication/AuthenticationConfigurationImpl.java
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/security/ConfigurationBase.java
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/security/ConfigurationParameters.java
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/security/authentication/AbstractLoginModule.java
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/security/authentication/external/SyncMode.java
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/security/user/action/DefaultAuthorizableActionProvider.java
    jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/ConfigurationParametersTest.java
    jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/authorization/evaluation/Jr2CompatibilityTest.java
    jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/authorization/permission/PermissionProviderImplTest.java
    jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/user/UserInitializerTest.java
    jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/user/UserProviderTest.java
    jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/spi/security/user/action/AccessControlActionTest.java
    jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/spi/security/user/action/PasswordValidationActionTest.java
    jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/security/user/AbstractImportTest.java

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/osgi/Activator.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/osgi/Activator.java?rev=1530094&r1=1530093&r2=1530094&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/osgi/Activator.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/osgi/Activator.java Mon Oct  7 22:19:38 2013
@@ -197,9 +197,9 @@ public class Activator implements Bundle
                 AccessControlConstants.PARAM_RESTRICTION_PROVIDER, restrictionProvider
         );
 
-        ConfigurationParameters securityConfig = new ConfigurationParameters(ImmutableMap.of(
-                UserConfiguration.NAME, new ConfigurationParameters(userMap),
-                AuthorizationConfiguration.NAME, new ConfigurationParameters(authorizMap)
+        ConfigurationParameters securityConfig = ConfigurationParameters.of(ImmutableMap.of(
+                UserConfiguration.NAME, ConfigurationParameters.of(userMap),
+                AuthorizationConfiguration.NAME, ConfigurationParameters.of(authorizMap)
         ));
         return securityConfig;
     }

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/osgi/OsgiSecurityProvider.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/osgi/OsgiSecurityProvider.java?rev=1530094&r1=1530093&r2=1530094&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/osgi/OsgiSecurityProvider.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/osgi/OsgiSecurityProvider.java Mon Oct  7 22:19:38 2013
@@ -78,7 +78,7 @@ public class OsgiSecurityProvider extend
         ConfigurationParameters params = config.getConfigValue(name, ConfigurationParameters.EMPTY);
         SecurityConfiguration sc = serviceMap.get(name);
         if (sc != null) {
-            return ConfigurationParameters.newInstance(params, sc.getParameters());
+            return ConfigurationParameters.of(params, sc.getParameters());
         } else {
             return params;
         }

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/SecurityProviderImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/SecurityProviderImpl.java?rev=1530094&r1=1530093&r2=1530094&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/SecurityProviderImpl.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/SecurityProviderImpl.java Mon Oct  7 22:19:38 2013
@@ -39,7 +39,7 @@ public class SecurityProviderImpl implem
     private final ConfigurationParameters configuration;
 
     public SecurityProviderImpl() {
-        this(new ConfigurationParameters());
+        this(ConfigurationParameters.EMPTY);
     }
 
     public SecurityProviderImpl(ConfigurationParameters configuration) {

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authentication/AuthenticationConfigurationImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authentication/AuthenticationConfigurationImpl.java?rev=1530094&r1=1530093&r2=1530094&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authentication/AuthenticationConfigurationImpl.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authentication/AuthenticationConfigurationImpl.java Mon Oct  7 22:19:38 2013
@@ -135,7 +135,7 @@ public class AuthenticationConfiguration
     @Nonnull
     @Override
     public TokenProvider getTokenProvider(Root root) {
-        ConfigurationParameters tokenOptions = getParameters().getConfigValue(PARAM_TOKEN_OPTIONS, new ConfigurationParameters());
+        ConfigurationParameters tokenOptions = getParameters().getConfigValue(PARAM_TOKEN_OPTIONS, ConfigurationParameters.EMPTY);
         UserConfiguration uc = getSecurityProvider().getConfiguration(UserConfiguration.class);
         return new TokenProviderImpl(root, tokenOptions, uc);
     }

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/security/ConfigurationBase.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/security/ConfigurationBase.java?rev=1530094&r1=1530093&r2=1530094&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/security/ConfigurationBase.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/security/ConfigurationBase.java Mon Oct  7 22:19:38 2013
@@ -62,6 +62,6 @@ public abstract class ConfigurationBase 
     //----------------------------------------------------< SCR Integration >---
     @Activate
     protected void activate(ComponentContext context) {
-        config = ConfigurationParameters.newInstance(context.getProperties());
+        config = ConfigurationParameters.of(context.getProperties());
     }
 }

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/security/ConfigurationParameters.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/security/ConfigurationParameters.java?rev=1530094&r1=1530093&r2=1530094&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/security/ConfigurationParameters.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/security/ConfigurationParameters.java Mon Oct  7 22:19:38 2013
@@ -16,53 +16,86 @@
  */
 package org.apache.jackrabbit.oak.spi.security;
 
+import java.util.Collection;
 import java.util.Collections;
 import java.util.Dictionary;
 import java.util.Enumeration;
 import java.util.HashMap;
 import java.util.Map;
 import java.util.Properties;
+import java.util.Set;
+
 import javax.annotation.CheckForNull;
 import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
 
-import com.google.common.collect.ImmutableMap;
-import com.google.common.collect.Maps;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 /**
- * ConfigurationParameters... TODO
+ * ConfigurationParameters is a convenience class that allows typed access to configuration properties. It implements
+ * the {@link Map} interface but is immutable.
  */
-public class ConfigurationParameters {
+public class ConfigurationParameters implements Map<String, Object> {
 
+    /**
+     * internal logger
+     */
     private static final Logger log = LoggerFactory.getLogger(ConfigurationParameters.class);
 
+    /**
+     * An empty configuration parameters
+     */
     public static final ConfigurationParameters EMPTY = new ConfigurationParameters();
 
+    /**
+     * internal map of the config parameters
+     */
     private final Map<String, Object> options;
 
-    public ConfigurationParameters() {
-        this(null);
+    /**
+     * creates an empty config parameters instance.
+     * Note: the constructor is private to avoid creation of empty maps.
+     */
+    private ConfigurationParameters() {
+        this.options = Collections.emptyMap();
     }
 
-    public ConfigurationParameters(@Nullable Map<String, ?> options) {
-        this.options = (options == null) ? Collections.<String, Object>emptyMap() : Collections.unmodifiableMap(options);
+    /**
+     * Creates an config parameter instance.
+     * Note: the constructor is private to avoid creation of empty maps.
+     * @param options the source options.
+     */
+    private ConfigurationParameters(@Nonnull Map<String, ?> options) {
+        this.options = Collections.unmodifiableMap(options);
     }
 
-    public static ConfigurationParameters newInstance(@Nonnull ConfigurationParameters... params) {
-        Map<String, Object> m = Maps.newHashMap();
+    /**
+     * Creates a new configuration parameters instance by merging all {@code params} sequentially.
+     * I.e. property define in subsequent arguments overwrite the ones before.
+     *
+     * @param params source parameters to merge
+     * @return merged configuration parameters or {@link #EMPTY} if all source params were empty.
+     */
+    @Nonnull
+    public static ConfigurationParameters of(@Nonnull ConfigurationParameters... params) {
+        Map<String, Object> m = new HashMap<String, Object>();
         for (ConfigurationParameters cp : params) {
             m.putAll(cp.options);
         }
-        return new ConfigurationParameters(ImmutableMap.copyOf(m));
+        return m.isEmpty() ? EMPTY : new ConfigurationParameters(m);
     }
 
-    public static ConfigurationParameters newInstance(@Nonnull Properties properties) {
-        if (properties.isEmpty()) {
+    /**
+     * Creates new a configuration parameters instance by copying the given properties.
+     * @param properties source properties
+     * @return configuration parameters or {@link #EMPTY} if the source properties were empty.
+     */
+    @Nonnull
+    public static ConfigurationParameters of(@Nonnull Properties properties) {
+        if (properties == null || properties.isEmpty()) {
             return EMPTY;
         }
-
         Map<String, Object> options = new HashMap<String, Object>(properties.size());
         for (String name : properties.stringPropertyNames()) {
             options.put(name, properties.getProperty(name));
@@ -70,11 +103,16 @@ public class ConfigurationParameters {
         return new ConfigurationParameters(options);
     }
 
-    public static ConfigurationParameters newInstance(@Nonnull Dictionary<String, Object> properties) {
-        if (properties.isEmpty()) {
+    /**
+     * Creates new a configuration parameters instance by copying the given properties.
+     * @param properties source properties
+     * @return configuration parameters or {@link #EMPTY} if the source properties were empty.
+     */
+    @Nonnull
+    public static ConfigurationParameters of(@Nonnull Dictionary<String, Object> properties) {
+        if (properties == null || properties.isEmpty()) {
             return EMPTY;
         }
-
         Map<String, Object> options = new HashMap<String, Object>(properties.size());
         for (Enumeration<String> keys = properties.keys(); keys.hasMoreElements();) {
             String key = keys.nextElement();
@@ -84,6 +122,23 @@ public class ConfigurationParameters {
     }
 
     /**
+     * Creates new a configuration parameters instance by copying the given map.
+     * @param map source map
+     * @return configuration parameters or {@link #EMPTY} if the source map was empty.
+     */
+    @Nonnull
+    public static ConfigurationParameters of(@Nonnull Map<?, ?> map) {
+        if (map == null || map.isEmpty()) {
+            return EMPTY;
+        }
+        Map<String, Object> options = new HashMap<String, Object>(map.size());
+        for (Map.Entry<?,?> e : map.entrySet()) {
+            options.put(String.valueOf(e.getKey()), e.getValue());
+        }
+        return new ConfigurationParameters(options);
+    }
+
+    /**
      * Returns {@code true} if this instance contains a configuration entry with
      * the specified key irrespective of the defined value; {@code false} otherwise.
      *
@@ -111,6 +166,7 @@ public class ConfigurationParameters {
      *     match the type of the default value.</li>
      * </ul>
      *
+     * TODO: shouldn't a NULL configuration value be treated the same as missing one, in respect to the default value handling? I don't think it's intuitive that NULL is returned.
      *
      * @param key The name of the configuration option.
      * @param defaultValue The default value to return if no such entry exists
@@ -128,54 +184,170 @@ public class ConfigurationParameters {
         }
     }
 
+    /**
+     * Returns the value of the configuration entry with the given {@code key}
+     * applying the following rules:
+     *
+     * <ul>
+     *     <li>If this instance doesn't contain a configuration entry with that
+     *     key, or if the entry is {@code null}, the specified {@code defaultValue} will be returned.</li>
+     *     <li>If the configured value is not {@code null} an attempt is made to convert the configured value to
+     *     match the type of the default value.</li>
+     * </ul>
+     *
+     * @param key The name of the configuration option.
+     * @param defaultValue The default value to return if no such entry exists
+     * or to use for conversion.
+     * @return The original or converted configuration value or {@code null}.
+     */
     @Nonnull
     public <T> T getConfigValue(@Nonnull String key, @Nonnull T defaultValue) {
-        if (options.containsKey(key)) {
-            T value = convert(options.get(key), defaultValue, null);
-            return (value == null) ? defaultValue : value;
-        } else {
+        Object property = options.get(key);
+        if (property == null) {
             return defaultValue;
+        } else {
+            return convert(property, defaultValue, null);
         }
     }
 
     //--------------------------------------------------------< private >---
     @SuppressWarnings("unchecked")
     @Nullable
-    private static <T> T convert(@Nullable Object configProperty, @Nullable T defaultValue, @Nullable Class<T> trgtClass) {
+    private static <T> T convert(@Nullable Object configProperty, @Nullable T defaultValue, @Nullable Class<T> targetClass) {
         if (configProperty == null) {
             return null;
         }
-
-        T value;
         String str = configProperty.toString();
-        Class targetClass;
-        if (trgtClass != null) {
-            targetClass = trgtClass;
-        } else {
-            targetClass = (defaultValue == null) ? configProperty.getClass() : defaultValue.getClass();
+        Class clazz = targetClass;
+        if (clazz == null) {
+            clazz = (defaultValue == null)
+                    ? configProperty.getClass()
+                    : defaultValue.getClass();
         }
         try {
-            if (targetClass.equals(configProperty.getClass()) || targetClass.isAssignableFrom(configProperty.getClass())) {
-                value = (T) configProperty;
-            } else if (targetClass == String.class) {
-                value = (T) str;
-            } else if (targetClass == Integer.class) {
-                value = (T) Integer.valueOf(str);
-            } else if (targetClass == Long.class) {
-                value = (T) Long.valueOf(str);
-            } else if (targetClass == Double.class) {
-                value = (T) Double.valueOf(str);
-            } else if (targetClass == Boolean.class) {
-                value = (T) Boolean.valueOf(str);
+            if (clazz.isAssignableFrom(configProperty.getClass())) {
+                return (T) configProperty;
+            } else if (clazz == String.class) {
+                return (T) str;
+            } else if (clazz == Integer.class || clazz == int.class) {
+                return (T) Integer.valueOf(str);
+            } else if (clazz == Long.class || clazz == long.class) {
+                return (T) Long.valueOf(str);
+            } else if (clazz == Float.class || clazz == float.class) {
+                return (T) Float.valueOf(str);
+            } else if (clazz == Double.class || clazz == double.class) {
+                return (T) Double.valueOf(str);
+            } else if (clazz == Boolean.class || clazz == boolean.class) {
+                return (T) Boolean.valueOf(str);
             } else {
                 // unsupported target type
-                log.warn("Unsupported target type {} for value {}", targetClass.getName(), str);
-                throw new IllegalArgumentException("Cannot convert config entry " + str + " to " + targetClass.getName());
+                log.warn("Unsupported target type {} for value {}", clazz.getName(), str);
+                throw new IllegalArgumentException("Cannot convert config entry " + str + " to " + clazz.getName());
             }
         } catch (NumberFormatException e) {
-            log.warn("Invalid value {}; cannot be parsed into {}", str, targetClass.getName());
-            throw new IllegalArgumentException("Cannot convert config entry " + str + " to " + targetClass.getName());
+            log.warn("Invalid value {}; cannot be parsed into {}", str, clazz.getName());
+            throw new IllegalArgumentException("Cannot convert config entry " + str + " to " + clazz.getName());
         }
-        return value;
+    }
+    //-----------------------------------------------------------------------------------< Map interface delegation >---
+
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    public int size() {
+        return options.size();
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    public boolean isEmpty() {
+        return options.isEmpty();
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    public boolean containsKey(Object key) {
+        return options.containsKey(key);
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    public boolean containsValue(Object value) {
+        return options.containsValue(value);
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    public Object get(Object key) {
+        return options.get(key);
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    public Object put(String key, Object value) {
+        // we rely on the immutability of the delegated map to throw the correct exceptions.
+        return options.put(key, value);
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    public Object remove(Object key) {
+        // we rely on the immutability of the delegated map to throw the correct exceptions.
+        return options.remove(key);
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    public void putAll(Map<? extends String, ?> m) {
+        // we rely on the immutability of the delegated map to throw the correct exceptions.
+        options.putAll(m);
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    public void clear() {
+        // we rely on the immutability of the delegated map to throw the correct exceptions.
+        options.clear();
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    public Set<String> keySet() {
+        return options.keySet();
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    public Collection<Object> values() {
+        return options.values();
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    public Set<Entry<String,Object>> entrySet() {
+        return options.entrySet();
     }
 }
\ No newline at end of file

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/security/authentication/AbstractLoginModule.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/security/authentication/AbstractLoginModule.java?rev=1530094&r1=1530093&r2=1530094&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/security/authentication/AbstractLoginModule.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/security/authentication/AbstractLoginModule.java Mon Oct  7 22:19:38 2013
@@ -171,7 +171,7 @@ public abstract class AbstractLoginModul
         this.subject = subject;
         this.callbackHandler = callbackHandler;
         this.sharedState = sharedState;
-        this.options = new ConfigurationParameters(options);
+        this.options = ConfigurationParameters.of(options);
     }
 
     @Override

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/security/authentication/external/SyncMode.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/security/authentication/external/SyncMode.java?rev=1530094&r1=1530093&r2=1530094&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/security/authentication/external/SyncMode.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/security/authentication/external/SyncMode.java Mon Oct  7 22:19:38 2013
@@ -71,7 +71,7 @@ public class SyncMode {
         return fromInt(mode);
     }
 
-    public static SyncMode fromStrings(String[] names) {
+    public static SyncMode fromStrings(String ... names) {
         int mode = MODE_NO_SYNC;
         for (String name : names) {
             mode |= fromString(name.trim()).mode;

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/security/user/action/DefaultAuthorizableActionProvider.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/security/user/action/DefaultAuthorizableActionProvider.java?rev=1530094&r1=1530093&r2=1530094&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/security/user/action/DefaultAuthorizableActionProvider.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/security/user/action/DefaultAuthorizableActionProvider.java Mon Oct  7 22:19:38 2013
@@ -84,6 +84,6 @@ public class DefaultAuthorizableActionPr
     //----------------------------------------------------< SCR Integration >---
     @Activate
     protected void activate(ComponentContext context) {
-        config = ConfigurationParameters.newInstance(context.getProperties());
+        config = ConfigurationParameters.of(context.getProperties());
     }
 }
\ No newline at end of file

Modified: jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/ConfigurationParametersTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/ConfigurationParametersTest.java?rev=1530094&r1=1530093&r2=1530094&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/ConfigurationParametersTest.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/ConfigurationParametersTest.java Mon Oct  7 22:19:38 2013
@@ -51,7 +51,7 @@ public class ConfigurationParametersTest
         Map<String, String> map = new HashMap<String, String>();
         map.put("key1", "v");
         map.put("key2", "v");
-        params = new ConfigurationParameters(map);
+        params = ConfigurationParameters.of(map);
         assertTrue(params.contains("key1"));
         assertTrue(params.contains("key2"));
         assertFalse(params.contains("another"));
@@ -62,7 +62,7 @@ public class ConfigurationParametersTest
     public void testGetConfigValue() {
         Map<String, String> map = new HashMap<String, String>();
         map.put("o1", "v");
-        ConfigurationParameters options = new ConfigurationParameters(map);
+        ConfigurationParameters options = ConfigurationParameters.of(map);
 
         assertEquals("v", options.getConfigValue("o1", "v2"));
         assertEquals("v2", options.getConfigValue("missing", "v2"));
@@ -72,7 +72,7 @@ public class ConfigurationParametersTest
     public void testGetNullableConfigValue() {
         Map<String, String> map = new HashMap<String, String>();
         map.put("o1", "v");
-        ConfigurationParameters options = new ConfigurationParameters(map);
+        ConfigurationParameters options = ConfigurationParameters.of(map);
 
         assertEquals("v", options.getConfigValue("o1", null, null));
         assertEquals("v", options.getConfigValue("o1", null, String.class));
@@ -91,9 +91,9 @@ public class ConfigurationParametersTest
     @Test
     public void testDefaultValue() {
         TestObject obj = new TestObject("t");
-        Integer int1000 = new Integer(1000);
+        Integer int1000 = 1000;
 
-        ConfigurationParameters options = new ConfigurationParameters();
+        ConfigurationParameters options = ConfigurationParameters.EMPTY;
 
         assertEquals(obj, options.getConfigValue("missing", obj));
         assertEquals(int1000, options.getConfigValue("missing", int1000));
@@ -114,7 +114,7 @@ public class ConfigurationParametersTest
         assertEquals(0, result.length);
         assertArrayEquals(testArray, ConfigurationParameters.EMPTY.getConfigValue("test", testArray));
 
-        ConfigurationParameters options = new ConfigurationParameters(Collections.singletonMap("test", testArray));
+        ConfigurationParameters options = ConfigurationParameters.of(Collections.singletonMap("test", testArray));
         assertArrayEquals(testArray, options.getConfigValue("test", new TestObject[] {new TestObject("s")}));
     }
 
@@ -128,7 +128,7 @@ public class ConfigurationParametersTest
         assertArrayEquals(testArray, ConfigurationParameters.EMPTY.getConfigValue("test", testArray, null));
         assertArrayEquals(testArray, ConfigurationParameters.EMPTY.getConfigValue("test", testArray, TestObject[].class));
 
-        ConfigurationParameters options = new ConfigurationParameters(Collections.singletonMap("test", testArray));
+        ConfigurationParameters options = ConfigurationParameters.of(Collections.singletonMap("test", testArray));
         assertArrayEquals(testArray, (TestObject[]) options.getConfigValue("test", null, null));
         assertArrayEquals(testArray, options.getConfigValue("test", null, TestObject[].class));
         assertArrayEquals(testArray, options.getConfigValue("test", new TestObject[]{new TestObject("s")}, null));
@@ -138,18 +138,20 @@ public class ConfigurationParametersTest
     @Test
     public void testConversion() {
         TestObject testObject = new TestObject("t");
-        Integer int1000 = new Integer(1000);
+        Integer int1000 = 1000;
 
         Map<String,Object> m = new HashMap<String, Object>();
         m.put("TEST", testObject);
         m.put("String", "1000");
         m.put("Int2", new Integer(1000));
         m.put("Int3", 1000);
-        ConfigurationParameters options = new ConfigurationParameters(m);
+        ConfigurationParameters options = ConfigurationParameters.of(m);
 
         assertEquals(testObject, options.getConfigValue("TEST", testObject));
         assertEquals("t", options.getConfigValue("TEST", "defaultString"));
 
+        assertTrue(1000 == options.getConfigValue("String", 10, int.class));
+        assertTrue(1000 == options.getConfigValue("String", 10));
         assertEquals(int1000, options.getConfigValue("String", new Integer(10)));
         assertEquals(new Long(1000), options.getConfigValue("String", new Long(10)));
         assertEquals("1000", options.getConfigValue("String", "10"));
@@ -171,7 +173,7 @@ public class ConfigurationParametersTest
         m.put("String", "1000");
         m.put("Int2", new Integer(1000));
         m.put("Int3", 1000);
-        ConfigurationParameters options = new ConfigurationParameters(m);
+        ConfigurationParameters options = ConfigurationParameters.of(m);
 
         assertNotNull(options.getConfigValue("TEST", null, null));
         assertNotNull(options.getConfigValue("TEST", null, TestObject.class));
@@ -212,7 +214,7 @@ public class ConfigurationParametersTest
         map.put("string", "v");
         map.put("obj", new TestObject("test"));
         map.put("int", new Integer(10));
-        ConfigurationParameters options = new ConfigurationParameters(map);
+        ConfigurationParameters options = ConfigurationParameters.of(map);
 
         Map<String, Class> impossible = new HashMap();
         impossible.put("string", TestObject.class);
@@ -234,7 +236,7 @@ public class ConfigurationParametersTest
 
     @Test
     public void testNullValue() {
-        ConfigurationParameters options = new ConfigurationParameters(Collections.singletonMap("test", null));
+        ConfigurationParameters options = ConfigurationParameters.of(Collections.singletonMap("test", null));
 
         assertNull(options.getConfigValue("test", null));
         assertEquals("value", options.getConfigValue("test", "value"));
@@ -245,7 +247,7 @@ public class ConfigurationParametersTest
 
     @Test
     public void testNullValue2() {
-        ConfigurationParameters options = new ConfigurationParameters(Collections.singletonMap("test", null));
+        ConfigurationParameters options = ConfigurationParameters.of(Collections.singletonMap("test", null));
 
         assertNull(options.getConfigValue("test", null, null));
         assertNull(options.getConfigValue("test", null, TestObject.class));

Modified: jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/authorization/evaluation/Jr2CompatibilityTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/authorization/evaluation/Jr2CompatibilityTest.java?rev=1530094&r1=1530093&r2=1530094&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/authorization/evaluation/Jr2CompatibilityTest.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/authorization/evaluation/Jr2CompatibilityTest.java Mon Oct  7 22:19:38 2013
@@ -83,9 +83,9 @@ public class Jr2CompatibilityTest extend
     @Override
     protected ConfigurationParameters getSecurityConfigParameters() {
         Map<String, String> map = Collections.singletonMap(PermissionConstants.PARAM_PERMISSIONS_JR2, PermissionConstants.VALUE_PERMISSIONS_JR2);
-        ConfigurationParameters acConfig = new ConfigurationParameters(map);
+        ConfigurationParameters acConfig = ConfigurationParameters.of(map);
 
-        return new ConfigurationParameters(ImmutableMap.of(AuthorizationConfiguration.NAME, acConfig));
+        return ConfigurationParameters.of(ImmutableMap.of(AuthorizationConfiguration.NAME, acConfig));
     }
 
     @Test

Modified: jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/authorization/permission/PermissionProviderImplTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/authorization/permission/PermissionProviderImplTest.java?rev=1530094&r1=1530093&r2=1530094&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/authorization/permission/PermissionProviderImplTest.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/authorization/permission/PermissionProviderImplTest.java Mon Oct  7 22:19:38 2013
@@ -87,9 +87,9 @@ public class PermissionProviderImplTest 
         Map<String, Object> map = new HashMap<String, Object>();
         map.put(PermissionConstants.PARAM_READ_PATHS, READ_PATHS);
         map.put(PermissionConstants.PARAM_ADMINISTRATIVE_PRINCIPALS, new String[] {ADMINISTRATOR_GROUP});
-        ConfigurationParameters acConfig = new ConfigurationParameters(map);
+        ConfigurationParameters acConfig = ConfigurationParameters.of(map);
 
-        return new ConfigurationParameters(ImmutableMap.of(AuthorizationConfiguration.NAME, acConfig));
+        return ConfigurationParameters.of(ImmutableMap.of(AuthorizationConfiguration.NAME, acConfig));
     }
 
     @Test

Modified: jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/user/UserInitializerTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/user/UserInitializerTest.java?rev=1530094&r1=1530093&r2=1530094&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/user/UserInitializerTest.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/user/UserInitializerTest.java Mon Oct  7 22:19:38 2013
@@ -148,7 +148,7 @@ public class UserInitializerTest extends
         userParams.put(UserConstants.PARAM_ADMIN_ID, "admin");
         userParams.put(UserConstants.PARAM_OMIT_ADMIN_PW, true);
 
-        ConfigurationParameters params = new ConfigurationParameters(ImmutableMap.of(UserConfiguration.NAME, new ConfigurationParameters(userParams)));
+        ConfigurationParameters params = ConfigurationParameters.of(ImmutableMap.of(UserConfiguration.NAME, ConfigurationParameters.of(userParams)));
         SecurityProvider sp = new SecurityProviderImpl(params);
         final ContentRepository repo = new Oak().with(new InitialContent())
                 .with(new PropertyIndexEditorProvider())
@@ -199,7 +199,7 @@ public class UserInitializerTest extends
         Map<String,Object> userParams = new HashMap();
         userParams.put(UserConstants.PARAM_ANONYMOUS_ID, "");
 
-        ConfigurationParameters params = new ConfigurationParameters(ImmutableMap.of(UserConfiguration.NAME, new ConfigurationParameters(userParams)));
+        ConfigurationParameters params = ConfigurationParameters.of(ImmutableMap.of(UserConfiguration.NAME, ConfigurationParameters.of(userParams)));
         SecurityProvider sp = new SecurityProviderImpl(params);
         final ContentRepository repo = new Oak().with(new InitialContent())
                 .with(new PropertyIndexEditorProvider())

Modified: jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/user/UserProviderTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/user/UserProviderTest.java?rev=1530094&r1=1530093&r2=1530094&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/user/UserProviderTest.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/user/UserProviderTest.java Mon Oct  7 22:19:38 2013
@@ -62,7 +62,7 @@ public class UserProviderTest {
                 .with(new PropertyIndexEditorProvider())
                 .createRoot();
 
-        defaultConfig = new ConfigurationParameters();
+        defaultConfig = ConfigurationParameters.EMPTY;
         defaultUserPath = defaultConfig.getConfigValue(UserConstants.PARAM_USER_PATH, UserConstants.DEFAULT_USER_PATH);
         defaultGroupPath = defaultConfig.getConfigValue(UserConstants.PARAM_GROUP_PATH, UserConstants.DEFAULT_GROUP_PATH);
 
@@ -83,7 +83,7 @@ public class UserProviderTest {
     private UserProvider createUserProvider(int defaultDepth) {
         Map<String, Object> options = new HashMap<String, Object>(customOptions);
         options.put(UserConstants.PARAM_DEFAULT_DEPTH, defaultDepth);
-        return new UserProvider(root, new ConfigurationParameters(options));
+        return new UserProvider(root, ConfigurationParameters.of(options));
     }
 
     @Test

Modified: jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/spi/security/user/action/AccessControlActionTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/spi/security/user/action/AccessControlActionTest.java?rev=1530094&r1=1530093&r2=1530094&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/spi/security/user/action/AccessControlActionTest.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/spi/security/user/action/AccessControlActionTest.java Mon Oct  7 22:19:38 2013
@@ -49,8 +49,8 @@ public class AccessControlActionTest ext
         map.put(AccessControlAction.GROUP_PRIVILEGE_NAMES, new String[] {PrivilegeConstants.JCR_READ});
         map.put(AccessControlAction.USER_PRIVILEGE_NAMES, new String[] {PrivilegeConstants.JCR_ALL});
 
-        ConfigurationParameters userConfig = new ConfigurationParameters(map);
-        return new ConfigurationParameters(ImmutableMap.of(UserConfiguration.NAME, userConfig));
+        ConfigurationParameters userConfig = ConfigurationParameters.of(map);
+        return ConfigurationParameters.of(ImmutableMap.of(UserConfiguration.NAME, userConfig));
     }
 
     @Test

Modified: jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/spi/security/user/action/PasswordValidationActionTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/spi/security/user/action/PasswordValidationActionTest.java?rev=1530094&r1=1530093&r2=1530094&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/spi/security/user/action/PasswordValidationActionTest.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/spi/security/user/action/PasswordValidationActionTest.java Mon Oct  7 22:19:38 2013
@@ -61,7 +61,7 @@ public class PasswordValidationActionTes
         user = (User) getUserManager(root).getAuthorizable(adminSession.getAuthInfo().getUserID());
 
         testAction.reset();
-        pwAction.init(getSecurityProvider(), new ConfigurationParameters(
+        pwAction.init(getSecurityProvider(), ConfigurationParameters.of(
                 Collections.singletonMap(PasswordValidationAction.CONSTRAINT, "^.*(?=.{8,})(?=.*[a-z])(?=.*[A-Z]).*")));
 
     }
@@ -143,7 +143,7 @@ public class PasswordValidationActionTes
         testUser = getUserManager(root).createUser("testuser", "testPw123456");
         root.commit();
         try {
-            pwAction.init(getSecurityProvider(), new ConfigurationParameters(Collections.singletonMap(PasswordValidationAction.CONSTRAINT, "abc")));
+            pwAction.init(getSecurityProvider(), ConfigurationParameters.of(Collections.singletonMap(PasswordValidationAction.CONSTRAINT, "abc")));
 
             String hashed = PasswordUtil.buildPasswordHash("abc");
             testUser.changePassword(hashed);
@@ -197,7 +197,7 @@ public class PasswordValidationActionTes
                     @Override
                     public ConfigurationParameters getParameters() {
                         Map<String, AuthorizableActionProvider> m = Collections.singletonMap(UserConstants.PARAM_AUTHORIZABLE_ACTION_PROVIDER, actionProvider);
-                        return ConfigurationParameters.newInstance(super.getParameters(), new ConfigurationParameters(m));
+                        return ConfigurationParameters.of(super.getParameters(), ConfigurationParameters.of(m));
                     }
                 };
             } else {

Modified: jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/security/user/AbstractImportTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/security/user/AbstractImportTest.java?rev=1530094&r1=1530093&r2=1530094&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/security/user/AbstractImportTest.java (original)
+++ jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/security/user/AbstractImportTest.java Mon Oct  7 22:19:38 2013
@@ -70,7 +70,7 @@ public abstract class AbstractImportTest
         if (importBehavior != null) {
             Map<String, String> userParams = new HashMap();
             userParams.put(ProtectedItemImporter.PARAM_IMPORT_BEHAVIOR, getImportBehavior());
-            ConfigurationParameters config = new ConfigurationParameters(ImmutableMap.of(UserConfiguration.NAME, new ConfigurationParameters(userParams)));
+            ConfigurationParameters config = ConfigurationParameters.of(ImmutableMap.of(UserConfiguration.NAME, ConfigurationParameters.of(userParams)));
 
             securityProvider = new SecurityProviderImpl(config);
         } else {