SLING-6718 : Use commons collections 4

git-svn-id: https://svn.apache.org/repos/asf/sling/trunk/bundles/resourceresolver@1788873 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/pom.xml b/pom.xml
index 15f9383..6466a71 100644
--- a/pom.xml
+++ b/pom.xml
@@ -127,9 +127,9 @@
             <scope>provided</scope>
         </dependency>
         <dependency>
-           <groupId>commons-collections</groupId>
-           <artifactId>commons-collections</artifactId>
-           <version>3.2.1</version>
+           <groupId>org.apache.commons</groupId>
+           <artifactId>commons-collections4</artifactId>
+           <version>4.1</version>
             <scope>provided</scope>
         </dependency>
         <dependency>
diff --git a/src/main/java/org/apache/sling/resourceresolver/impl/CommonResourceResolverFactoryImpl.java b/src/main/java/org/apache/sling/resourceresolver/impl/CommonResourceResolverFactoryImpl.java
index 609ff77..4d66db8 100644
--- a/src/main/java/org/apache/sling/resourceresolver/impl/CommonResourceResolverFactoryImpl.java
+++ b/src/main/java/org/apache/sling/resourceresolver/impl/CommonResourceResolverFactoryImpl.java
@@ -33,7 +33,7 @@
 
 import javax.annotation.Nonnull;
 
-import org.apache.commons.collections.BidiMap;
+import org.apache.commons.collections4.BidiMap;
 import org.apache.sling.api.resource.LoginException;
 import org.apache.sling.api.resource.ResourceResolver;
 import org.apache.sling.api.resource.ResourceResolverFactory;
@@ -73,16 +73,16 @@
     /**
      * Thread local holding the resource resolver stack
      */
-    private ThreadLocal<Stack<WeakReference<ResourceResolver>>> resolverStackHolder = new ThreadLocal<Stack<WeakReference<ResourceResolver>>>();
+    private ThreadLocal<Stack<WeakReference<ResourceResolver>>> resolverStackHolder = new ThreadLocal<>();
 
     /** Flag indicating whether this factory is still active. */
     private final AtomicBoolean isActive = new AtomicBoolean(true);
 
     /** The reference queue to handle disposing of resource resolver instances. */
-    private final ReferenceQueue<ResourceResolver> resolverReferenceQueue = new ReferenceQueue<ResourceResolver>();
+    private final ReferenceQueue<ResourceResolver> resolverReferenceQueue = new ReferenceQueue<>();
 
     /** Map of the ResourceResolverControl's hash code to the references to open resource resolver instances. */
-    private final Map<Integer, ResolverReference> refs = new ConcurrentHashMap<Integer, ResolverReference>();
+    private final Map<Integer, ResolverReference> refs = new ConcurrentHashMap<>();
 
     /** Background thread handling disposing of resource resolver instances. */
     private final Thread refQueueThread;
@@ -139,7 +139,7 @@
         checkIsLive();
 
         // create a copy of the passed authentication info as we modify the map
-        final Map<String, Object> authenticationInfo = new HashMap<String, Object>();
+        final Map<String, Object> authenticationInfo = new HashMap<>();
         authenticationInfo.put(ResourceProvider.AUTH_ADMIN, Boolean.TRUE);
         if ( passedAuthenticationInfo != null ) {
             authenticationInfo.putAll(passedAuthenticationInfo);
@@ -161,7 +161,7 @@
         checkIsLive();
 
         // create a copy of the passed authentication info as we modify the map
-        final Map<String, Object> authenticationInfo = new HashMap<String, Object>();
+        final Map<String, Object> authenticationInfo = new HashMap<>();
         if ( passedAuthenticationInfo != null ) {
             authenticationInfo.putAll(passedAuthenticationInfo);
             // make sure there is no leaking of service bundle and info props
@@ -172,10 +172,10 @@
         final ResourceResolver result = getResourceResolverInternal(authenticationInfo, false);
         Stack<WeakReference<ResourceResolver>> resolverStack = resolverStackHolder.get();
         if ( resolverStack == null ) {
-            resolverStack = new Stack<WeakReference<ResourceResolver>>();
+            resolverStack = new Stack<>();
             resolverStackHolder.set(resolverStack);
         }
-        resolverStack.push(new WeakReference<ResourceResolver>(result));
+        resolverStack.push(new WeakReference<>(result));
         return result;
     }
 
@@ -331,7 +331,7 @@
         resolverStackHolder = null;
 
         // copy and clear map before closing the remaining references
-        final Collection<ResolverReference> references = new ArrayList<ResolverReference>(refs.values());
+        final Collection<ResolverReference> references = new ArrayList<>(refs.values());
         refs.clear();
         for(final ResolverReference ref : references) {
             ref.close();
@@ -437,7 +437,7 @@
         if ( includes == null && excludes == null ) {
             return null;
         }
-        final List<VanityPathConfig> configs = new ArrayList<VanityPathConfig>();
+        final List<VanityPathConfig> configs = new ArrayList<>();
         if ( includes != null ) {
             for(final String val : includes) {
                 configs.add(new VanityPathConfig(val, false));
diff --git a/src/main/java/org/apache/sling/resourceresolver/impl/ResourceResolverFactoryActivator.java b/src/main/java/org/apache/sling/resourceresolver/impl/ResourceResolverFactoryActivator.java
index 7752d56..12aa1c5 100644
--- a/src/main/java/org/apache/sling/resourceresolver/impl/ResourceResolverFactoryActivator.java
+++ b/src/main/java/org/apache/sling/resourceresolver/impl/ResourceResolverFactoryActivator.java
@@ -30,13 +30,14 @@
 import java.util.Map;
 import java.util.Set;
 
-import org.apache.commons.collections.BidiMap;
-import org.apache.commons.collections.bidimap.TreeBidiMap;
+import org.apache.commons.collections4.BidiMap;
+import org.apache.commons.collections4.bidimap.TreeBidiMap;
 import org.apache.sling.api.resource.ResourceDecorator;
 import org.apache.sling.api.resource.ResourceResolverFactory;
 import org.apache.sling.api.resource.path.Path;
 import org.apache.sling.api.resource.runtime.RuntimeService;
 import org.apache.sling.resourceresolver.impl.helper.ResourceDecoratorTracker;
+import org.apache.sling.resourceresolver.impl.mapping.MapEntries;
 import org.apache.sling.resourceresolver.impl.mapping.Mapping;
 import org.apache.sling.resourceresolver.impl.observation.ResourceChangeListenerWhiteboard;
 import org.apache.sling.resourceresolver.impl.providers.ResourceProviderTracker;
@@ -249,7 +250,7 @@
         }
         virtualURLMap = virtuals;
 
-        final List<Mapping> maps = new ArrayList<Mapping>();
+        final List<Mapping> maps = new ArrayList<>();
         for (int i = 0; config.resource_resolver_mapping() != null && i < config.resource_resolver_mapping().length; i++) {
             maps.add(new Mapping(config.resource_resolver_mapping()[i]));
         }
@@ -296,7 +297,7 @@
         this.vanityPathWhiteList = null;
         String[] vanityPathPrefixes = config.resource_resolver_vanitypath_whitelist();
         if ( vanityPathPrefixes != null ) {
-            final List<String> prefixList = new ArrayList<String>();
+            final List<String> prefixList = new ArrayList<>();
             for(final String value : vanityPathPrefixes) {
                 if ( value.trim().length() > 0 ) {
                     if ( value.trim().endsWith("/") ) {
@@ -314,7 +315,7 @@
         this.vanityPathBlackList = null;
         vanityPathPrefixes = config.resource_resolver_vanitypath_blacklist();
         if ( vanityPathPrefixes != null ) {
-            final List<String> prefixList = new ArrayList<String>();
+            final List<String> prefixList = new ArrayList<>();
             for(final String value : vanityPathPrefixes) {
                 if ( value.trim().length() > 0 ) {
                     if ( value.trim().endsWith("/") ) {
@@ -354,11 +355,11 @@
         	if ( hasRequiredProvider ) {
                 logger.warn("ResourceResolverFactory is using deprecated required providers configuration (resource.resolver.required.providers" +
                         ") with value '" + ResourceResolverFactoryConfig.LEGACY_REQUIRED_PROVIDER_PID + ". Please remove this configuration property. " +
-                        ResourceResolverFactoryConfig.REQUIRED_PROVIDER_NAME + " is already contained in the property resource.resolver.required.providernames.");        		        		
+                        ResourceResolverFactoryConfig.REQUIRED_PROVIDER_NAME + " is already contained in the property resource.resolver.required.providernames.");
         	} else {
                 logger.warn("ResourceResolverFactory is using deprecated required providers configuration (resource.resolver.required.providers" +
                         ") with value '" + ResourceResolverFactoryConfig.LEGACY_REQUIRED_PROVIDER_PID + ". Please remove this configuration property and add " +
-                        ResourceResolverFactoryConfig.REQUIRED_PROVIDER_NAME + " to the property resource.resolver.required.providernames.");        		
+                        ResourceResolverFactoryConfig.REQUIRED_PROVIDER_NAME + " to the property resource.resolver.required.providernames.");
         	}
         }
 
@@ -366,9 +367,9 @@
         if ( this.resourceProviderTracker == null ) {
             this.resourceProviderTracker = new ResourceProviderTracker();
             this.changeListenerWhiteboard = new ResourceChangeListenerWhiteboard();
-            this.preconds.activate(this.bundleContext, 
-            		requiredResourceProvidersLegacy, 
-            		requiredResourceProviderNames, 
+            this.preconds.activate(this.bundleContext,
+            		requiredResourceProvidersLegacy,
+            		requiredResourceProviderNames,
             		resourceProviderTracker);
             this.changeListenerWhiteboard.activate(this.bundleContext,
                 this.resourceProviderTracker, searchPath);
@@ -395,9 +396,9 @@
                         }
                     });
         } else {
-            this.preconds.activate(this.bundleContext, 
-            		requiredResourceProvidersLegacy, 
-            		requiredResourceProviderNames, 
+            this.preconds.activate(this.bundleContext,
+            		requiredResourceProvidersLegacy,
+            		requiredResourceProviderNames,
             		resourceProviderTracker);
             this.checkFactoryPreconditions(null, null);
          }
@@ -476,7 +477,7 @@
 
         if ( localContext != null ) {
             // activate and register factory
-            final Dictionary<String, Object> serviceProps = new Hashtable<String, Object>();
+            final Dictionary<String, Object> serviceProps = new Hashtable<>();
             serviceProps.put(Constants.SERVICE_VENDOR, "The Apache Software Foundation");
             serviceProps.put(Constants.SERVICE_DESCRIPTION, "Apache Sling Resource Resolver Factory");
 
@@ -520,11 +521,11 @@
     public ServiceUserMapper getServiceUserMapper() {
     	return this.serviceUserMapper;
     }
-    
+
     public BundleContext getBundleContext() {
     	return this.bundleContext;
     }
-    
+
     /**
      * Check the preconditions and if it changed, either register factory or unregister
      */
@@ -592,7 +593,7 @@
     	}
     	return set.isEmpty() ? null : set;
     }
-    
+
     public static ResourceResolverFactoryConfig DEFAULT_CONFIG;
 
     static {
diff --git a/src/main/java/org/apache/sling/resourceresolver/impl/helper/ResourceResolverControl.java b/src/main/java/org/apache/sling/resourceresolver/impl/helper/ResourceResolverControl.java
index 54ccc17..018d96c 100644
--- a/src/main/java/org/apache/sling/resourceresolver/impl/helper/ResourceResolverControl.java
+++ b/src/main/java/org/apache/sling/resourceresolver/impl/helper/ResourceResolverControl.java
@@ -36,7 +36,7 @@
 import javax.annotation.CheckForNull;
 import javax.annotation.Nonnull;
 
-import org.apache.commons.collections.iterators.IteratorChain;
+import org.apache.commons.collections4.iterators.IteratorChain;
 import org.apache.commons.lang3.ArrayUtils;
 import org.apache.sling.api.resource.LoginException;
 import org.apache.sling.api.resource.PersistenceException;
diff --git a/src/test/java/org/apache/sling/resourceresolver/impl/ResourceResolverMangleNamespacesTest.java b/src/test/java/org/apache/sling/resourceresolver/impl/ResourceResolverMangleNamespacesTest.java
index f994979..420a572 100644
--- a/src/test/java/org/apache/sling/resourceresolver/impl/ResourceResolverMangleNamespacesTest.java
+++ b/src/test/java/org/apache/sling/resourceresolver/impl/ResourceResolverMangleNamespacesTest.java
@@ -28,7 +28,7 @@
 import javax.jcr.RepositoryException;
 import javax.jcr.Session;
 
-import org.apache.commons.collections.IteratorUtils;
+import org.apache.commons.collections4.IteratorUtils;
 import org.apache.sling.api.resource.LoginException;
 import org.apache.sling.api.resource.Resource;
 import org.apache.sling.resourceresolver.impl.providers.ResourceProviderStorage;
@@ -97,7 +97,7 @@
         final CommonResourceResolverFactoryImpl fac = new CommonResourceResolverFactoryImpl(act);
 
         rr = new ResourceResolverImpl(fac, false, null, new ResourceProviderStorageProvider() {
-            
+
             @Override
             public ResourceProviderStorage getResourceProviderStorage() {
                 return new ResourceProviderStorage(Arrays.asList(MockedResourceResolverImplTest.createRPHandler(rp, "rp1", 0, "/")));