Author: cziegeler
Date: Thu Feb 11 08:45:03 2016
New Revision: 1729773

URL: http://svn.apache.org/viewvc?rev=1729773&view=rev
Log:
SLING-5510 : Resource resolver should always use most current set of providers. 
Apply patch from Justin Edelson

Added:
    
sling/trunk/bundles/resourceresolver/src/main/java/org/apache/sling/resourceresolver/impl/providers/ResourceProviderStorageProvider.java
   (with props)
Modified:
    
sling/trunk/bundles/resourceresolver/src/main/java/org/apache/sling/resourceresolver/impl/ResourceResolverImpl.java
    
sling/trunk/bundles/resourceresolver/src/main/java/org/apache/sling/resourceresolver/impl/helper/ResourceResolverControl.java
    
sling/trunk/bundles/resourceresolver/src/main/java/org/apache/sling/resourceresolver/impl/providers/ResourceProviderHandler.java
    
sling/trunk/bundles/resourceresolver/src/main/java/org/apache/sling/resourceresolver/impl/providers/ResourceProviderTracker.java
    
sling/trunk/bundles/resourceresolver/src/test/java/org/apache/sling/resourceresolver/impl/ProviderHandlerTest.java
    
sling/trunk/bundles/resourceresolver/src/test/java/org/apache/sling/resourceresolver/impl/ResourceDecoratorTestBase.java
    
sling/trunk/bundles/resourceresolver/src/test/java/org/apache/sling/resourceresolver/impl/ResourceProviderEntryTest.java
    
sling/trunk/bundles/resourceresolver/src/test/java/org/apache/sling/resourceresolver/impl/ResourceResolverImplTest.java
    
sling/trunk/bundles/resourceresolver/src/test/java/org/apache/sling/resourceresolver/impl/ResourceResolverMangleNamespacesTest.java
    
sling/trunk/bundles/resourceresolver/src/test/java/org/apache/sling/resourceresolver/impl/helper/ResourceResolverControlTest.java

Modified: 
sling/trunk/bundles/resourceresolver/src/main/java/org/apache/sling/resourceresolver/impl/ResourceResolverImpl.java
URL: 
http://svn.apache.org/viewvc/sling/trunk/bundles/resourceresolver/src/main/java/org/apache/sling/resourceresolver/impl/ResourceResolverImpl.java?rev=1729773&r1=1729772&r2=1729773&view=diff
==============================================================================
--- 
sling/trunk/bundles/resourceresolver/src/main/java/org/apache/sling/resourceresolver/impl/ResourceResolverImpl.java
 (original)
+++ 
sling/trunk/bundles/resourceresolver/src/main/java/org/apache/sling/resourceresolver/impl/ResourceResolverImpl.java
 Thu Feb 11 08:45:03 2016
@@ -60,7 +60,8 @@ import org.apache.sling.resourceresolver
 import org.apache.sling.resourceresolver.impl.helper.URIException;
 import org.apache.sling.resourceresolver.impl.mapping.MapEntry;
 import org.apache.sling.resourceresolver.impl.params.ParsedParameters;
-import 
org.apache.sling.resourceresolver.impl.providers.ResourceProviderStorage;
+import 
org.apache.sling.resourceresolver.impl.providers.ResourceProviderStorageProvider;
+import 
org.apache.sling.resourceresolver.impl.providers.ResourceProviderTracker;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -106,13 +107,13 @@ public class ResourceResolverImpl extend
     private volatile Exception closedResolverException;
 
     public ResourceResolverImpl(final CommonResourceResolverFactoryImpl 
factory, final boolean isAdmin, final Map<String, Object> authenticationInfo) 
throws LoginException {
-        this(factory, isAdmin, authenticationInfo, 
factory.getResourceProviderTracker().getResourceProviderStorage());
+        this(factory, isAdmin, authenticationInfo, 
factory.getResourceProviderTracker());
     }
 
-    ResourceResolverImpl(final CommonResourceResolverFactoryImpl factory, 
final boolean isAdmin, final Map<String, Object> authenticationInfo, final 
ResourceProviderStorage storage) throws LoginException {
+    ResourceResolverImpl(final CommonResourceResolverFactoryImpl factory, 
final boolean isAdmin, final Map<String, Object> authenticationInfo, final 
ResourceProviderStorageProvider resourceProviderTracker) throws LoginException {
         this.factory = factory;
         this.context = new ResourceResolverContext(this, 
factory.getResourceAccessSecurityTracker());
-        this.control = createControl(storage, authenticationInfo, isAdmin);
+        this.control = createControl(resourceProviderTracker, 
authenticationInfo, isAdmin);
         this.factory.register(this, control);
     }
 
@@ -132,7 +133,7 @@ public class ResourceResolverImpl extend
             authInfo.putAll(authenticationInfo);
         }
         this.context = new ResourceResolverContext(this, 
factory.getResourceAccessSecurityTracker());
-        this.control = 
createControl(factory.getResourceProviderTracker().getResourceProviderStorage(),
 authInfo, resolver.control.isAdmin());
+        this.control = createControl(factory.getResourceProviderTracker(), 
authInfo, resolver.control.isAdmin());
         this.factory.register(this, control);
     }
 
@@ -144,13 +145,13 @@ public class ResourceResolverImpl extend
      * @return A control
      * @throws LoginException If auth to the required providers fails.
      */
-    private ResourceResolverControl createControl(final 
ResourceProviderStorage storage,
+    private ResourceResolverControl createControl(final 
ResourceProviderStorageProvider resourceProviderTracker,
             final Map<String, Object> authenticationInfo,
             final boolean isAdmin)
     throws LoginException {
-        final ResourceResolverControl control = new 
ResourceResolverControl(isAdmin, authenticationInfo, storage);
+        final ResourceResolverControl control = new 
ResourceResolverControl(isAdmin, authenticationInfo, resourceProviderTracker);
 
-        
this.context.getProviderManager().authenticateAll(storage.getAuthRequiredHandlers(),
 control);
+        
this.context.getProviderManager().authenticateAll(resourceProviderTracker.getResourceProviderStorage().getAuthRequiredHandlers(),
 control);
 
         return control;
     }

Modified: 
sling/trunk/bundles/resourceresolver/src/main/java/org/apache/sling/resourceresolver/impl/helper/ResourceResolverControl.java
URL: 
http://svn.apache.org/viewvc/sling/trunk/bundles/resourceresolver/src/main/java/org/apache/sling/resourceresolver/impl/helper/ResourceResolverControl.java?rev=1729773&r1=1729772&r2=1729773&view=diff
==============================================================================
--- 
sling/trunk/bundles/resourceresolver/src/main/java/org/apache/sling/resourceresolver/impl/helper/ResourceResolverControl.java
 (original)
+++ 
sling/trunk/bundles/resourceresolver/src/main/java/org/apache/sling/resourceresolver/impl/helper/ResourceResolverControl.java
 Thu Feb 11 08:45:03 2016
@@ -48,6 +48,7 @@ import org.apache.sling.api.resource.pat
 import 
org.apache.sling.resourceresolver.impl.providers.ResourceProviderHandler;
 import org.apache.sling.resourceresolver.impl.providers.ResourceProviderInfo;
 import 
org.apache.sling.resourceresolver.impl.providers.ResourceProviderStorage;
+import 
org.apache.sling.resourceresolver.impl.providers.ResourceProviderStorageProvider;
 import 
org.apache.sling.resourceresolver.impl.providers.stateful.AuthenticatedResourceProvider;
 import org.apache.sling.resourceresolver.impl.providers.tree.Node;
 import org.apache.sling.spi.resource.provider.ResourceProvider;
@@ -80,7 +81,7 @@ public class ResourceResolverControl {
     /** Flag for handling multiple calls to close. */
     private final AtomicBoolean isClosed = new AtomicBoolean(false);
 
-    private final ResourceProviderStorage storage;
+    private final ResourceProviderStorageProvider resourceProviderTracker;
 
     private final Map<ResourceProviderHandler, Object> authenticatedProviders;
 
@@ -89,11 +90,11 @@ public class ResourceResolverControl {
      */
     public ResourceResolverControl(final boolean isAdmin,
             final Map<String, Object> authenticationInfo,
-            final ResourceProviderStorage storage) {
+            final ResourceProviderStorageProvider resourceProviderTracker) {
         this.authenticatedProviders = new 
IdentityHashMap<ResourceProviderHandler, Object>();
         this.authenticationInfo = authenticationInfo;
         this.isAdmin = isAdmin;
-        this.storage = storage;
+        this.resourceProviderTracker = resourceProviderTracker;
     }
 
     /**
@@ -229,7 +230,7 @@ public class ResourceResolverControl {
     }
 
     private boolean isIntermediatePath(final String fullPath) {
-        return storage.getTree().getNode(fullPath) != null;
+        return getResourceProviderStorage().getTree().getNode(fullPath) != 
null;
     }
 
     /**
@@ -263,7 +264,7 @@ public class ResourceResolverControl {
         }
 
         // synthetic and providers are done in one loop
-        final Node<ResourceProviderHandler> node = 
storage.getTree().getNode(parent.getPath());
+        final Node<ResourceProviderHandler> node = 
getResourceProviderStorage().getTree().getNode(parent.getPath());
         if (node != null) {
             final List<Resource> syntheticList = new ArrayList<Resource>();
             final List<Resource> providerList = new ArrayList<Resource>();
@@ -315,7 +316,7 @@ public class ResourceResolverControl {
      */
     public Collection<String> getAttributeNames(final ResourceResolverContext 
context) {
         final Set<String> names = new LinkedHashSet<String>();
-        for (final AuthenticatedResourceProvider p : 
context.getProviderManager().getAllBestEffort(storage.getAttributableHandlers(),
 this)) {
+        for (final AuthenticatedResourceProvider p : 
context.getProviderManager().getAllBestEffort(getResourceProviderStorage().getAttributableHandlers(),
 this)) {
             p.getAttributeNames(names);
         }
         if ( this.authenticationInfo != null ) {
@@ -334,7 +335,7 @@ public class ResourceResolverControl {
         if (FORBIDDEN_ATTRIBUTE.equals(name)) {
             return null;
         }
-        for (final AuthenticatedResourceProvider p : 
context.getProviderManager().getAllBestEffort(storage.getAttributableHandlers(),
 this)) {
+        for (final AuthenticatedResourceProvider p : 
context.getProviderManager().getAllBestEffort(getResourceProviderStorage().getAttributableHandlers(),
 this)) {
             final Object attribute = p.getAttribute(name);
             if (attribute != null) {
                 return attribute;
@@ -421,7 +422,7 @@ public class ResourceResolverControl {
      */
     public String[] getSupportedLanguages(final ResourceResolverContext 
context) {
         final Set<String> supportedLanguages = new LinkedHashSet<String>();
-        for (AuthenticatedResourceProvider p : 
context.getProviderManager().getAllBestEffort(storage.getLanguageQueryableHandlers(),
 this)) {
+        for (AuthenticatedResourceProvider p : 
context.getProviderManager().getAllBestEffort(getResourceProviderStorage().getLanguageQueryableHandlers(),
 this)) {
             
supportedLanguages.addAll(Arrays.asList(p.getSupportedLanguages()));
         }
         return supportedLanguages.toArray(new 
String[supportedLanguages.size()]);
@@ -444,7 +445,7 @@ public class ResourceResolverControl {
             final ResourceResolverContext context,
             final String language) {
         final List<AuthenticatedResourceProvider> queryableProviders = new 
ArrayList<AuthenticatedResourceProvider>();
-        for (final AuthenticatedResourceProvider p : 
context.getProviderManager().getAllBestEffort(storage.getLanguageQueryableHandlers(),
 this)) {
+        for (final AuthenticatedResourceProvider p : 
context.getProviderManager().getAllBestEffort(getResourceProviderStorage().getLanguageQueryableHandlers(),
 this)) {
             if (ArrayUtils.contains(p.getSupportedLanguages(), language)) {
                 queryableProviders.add(p);
             }
@@ -471,7 +472,7 @@ public class ResourceResolverControl {
      */
     @SuppressWarnings("unchecked")
     public <AdapterType> AdapterType adaptTo(final ResourceResolverContext 
context, Class<AdapterType> type) {
-        for (AuthenticatedResourceProvider p : 
context.getProviderManager().getAllBestEffort(storage.getAdaptableHandlers(), 
this)) {
+        for (AuthenticatedResourceProvider p : 
context.getProviderManager().getAllBestEffort(getResourceProviderStorage().getAdaptableHandlers(),
 this)) {
             final Object adaptee = p.adaptTo(type);
             if (adaptee != null) {
                 return (AdapterType) adaptee;
@@ -483,7 +484,7 @@ public class ResourceResolverControl {
     private AuthenticatedResourceProvider checkSourceAndDest(final 
ResourceResolverContext context,
             final String srcAbsPath, final String destAbsPath) throws 
PersistenceException {
         // check source
-        final Node<ResourceProviderHandler> srcNode = 
storage.getTree().getBestMatchingNode(srcAbsPath);
+        final Node<ResourceProviderHandler> srcNode = 
getResourceProviderStorage().getTree().getBestMatchingNode(srcAbsPath);
         if ( srcNode == null ) {
             throw new PersistenceException("Source resource does not exist.", 
null, srcAbsPath, null);
         }
@@ -502,7 +503,7 @@ public class ResourceResolverControl {
         }
 
         // check destination
-        final Node<ResourceProviderHandler> destNode = 
storage.getTree().getBestMatchingNode(destAbsPath);
+        final Node<ResourceProviderHandler> destNode = 
getResourceProviderStorage().getTree().getBestMatchingNode(destAbsPath);
         if ( destNode == null ) {
             throw new PersistenceException("Destination resource does not 
exist.", null, destAbsPath, null);
         }
@@ -613,7 +614,7 @@ public class ResourceResolverControl {
     }
 
     public ResourceProviderStorage getResourceProviderStorage() {
-        return this.storage;
+        return this.resourceProviderTracker.getResourceProviderStorage();
     }
 
     /**
@@ -623,7 +624,7 @@ public class ResourceResolverControl {
     private @CheckForNull AuthenticatedResourceProvider 
getBestMatchingProvider(final ResourceResolverContext context,
             final String path) {
         try {
-            final Node<ResourceProviderHandler> node = 
storage.getTree().getBestMatchingNode(path);
+            final Node<ResourceProviderHandler> node = 
resourceProviderTracker.getResourceProviderStorage().getTree().getBestMatchingNode(path);
             return node == null ? null : 
context.getProviderManager().getOrCreateProvider(node.getValue(), this);
         } catch ( final LoginException le ) {
             // ignore
@@ -638,7 +639,7 @@ public class ResourceResolverControl {
     private @CheckForNull AuthenticatedResourceProvider 
getBestMatchingModifiableProvider(
             final ResourceResolverContext context,
             final String path)  {
-        final Node<ResourceProviderHandler> node = 
storage.getTree().getBestMatchingNode(path);
+        final Node<ResourceProviderHandler> node = 
resourceProviderTracker.getResourceProviderStorage().getTree().getBestMatchingNode(path);
         if ( node != null && node.getValue().getInfo().isModifiable() ) {
             try {
                 return 
context.getProviderManager().getOrCreateProvider(node.getValue(), this);

Modified: 
sling/trunk/bundles/resourceresolver/src/main/java/org/apache/sling/resourceresolver/impl/providers/ResourceProviderHandler.java
URL: 
http://svn.apache.org/viewvc/sling/trunk/bundles/resourceresolver/src/main/java/org/apache/sling/resourceresolver/impl/providers/ResourceProviderHandler.java?rev=1729773&r1=1729772&r2=1729773&view=diff
==============================================================================
--- 
sling/trunk/bundles/resourceresolver/src/main/java/org/apache/sling/resourceresolver/impl/providers/ResourceProviderHandler.java
 (original)
+++ 
sling/trunk/bundles/resourceresolver/src/main/java/org/apache/sling/resourceresolver/impl/providers/ResourceProviderHandler.java
 Thu Feb 11 08:45:03 2016
@@ -28,11 +28,11 @@ import org.osgi.framework.BundleContext;
  */
 public class ResourceProviderHandler implements 
Comparable<ResourceProviderHandler>, Pathable {
 
-    private final ResourceProviderInfo info;
+    private volatile ResourceProviderInfo info;
 
-    private final BundleContext bundleContext;
+    private volatile BundleContext bundleContext;
 
-    private final ProviderContextImpl context = new ProviderContextImpl();
+    private volatile ProviderContextImpl context = new ProviderContextImpl();
 
     private volatile ResourceProvider<Object> provider;
 
@@ -55,6 +55,15 @@ public class ResourceProviderHandler imp
         return this.provider != null;
     }
 
+    /**C
+     * Clear all references.
+     */
+    public void dispose() {
+        this.info = null;
+        this.bundleContext = null;
+        this.context = null;
+    }
+
     public ResourceProvider<Object> getResourceProvider() {
         return this.provider;
     }
@@ -70,6 +79,15 @@ public class ResourceProviderHandler imp
 
     @Override
     public int compareTo(final ResourceProviderHandler o) {
+        if ( this.getInfo() == null ) {
+            if ( o.getInfo() == null ) {
+                return 0;
+            }
+            return 1;
+        }
+        if ( o.getInfo() == null ) {
+            return -1;
+        }
         return this.getInfo().compareTo(o.getInfo());
     }
 

Added: 
sling/trunk/bundles/resourceresolver/src/main/java/org/apache/sling/resourceresolver/impl/providers/ResourceProviderStorageProvider.java
URL: 
http://svn.apache.org/viewvc/sling/trunk/bundles/resourceresolver/src/main/java/org/apache/sling/resourceresolver/impl/providers/ResourceProviderStorageProvider.java?rev=1729773&view=auto
==============================================================================
--- 
sling/trunk/bundles/resourceresolver/src/main/java/org/apache/sling/resourceresolver/impl/providers/ResourceProviderStorageProvider.java
 (added)
+++ 
sling/trunk/bundles/resourceresolver/src/main/java/org/apache/sling/resourceresolver/impl/providers/ResourceProviderStorageProvider.java
 Thu Feb 11 08:45:03 2016
@@ -0,0 +1,28 @@
+/*
+ * 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.resourceresolver.impl.providers;
+
+/**
+ * Interface which allows access to a ResourceProviderStorage object.
+ */ 
+public interface ResourceProviderStorageProvider {
+
+    ResourceProviderStorage getResourceProviderStorage();
+
+}

Propchange: 
sling/trunk/bundles/resourceresolver/src/main/java/org/apache/sling/resourceresolver/impl/providers/ResourceProviderStorageProvider.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
sling/trunk/bundles/resourceresolver/src/main/java/org/apache/sling/resourceresolver/impl/providers/ResourceProviderStorageProvider.java
------------------------------------------------------------------------------
    svn:keywords = author date id revision rev url

Modified: 
sling/trunk/bundles/resourceresolver/src/main/java/org/apache/sling/resourceresolver/impl/providers/ResourceProviderTracker.java
URL: 
http://svn.apache.org/viewvc/sling/trunk/bundles/resourceresolver/src/main/java/org/apache/sling/resourceresolver/impl/providers/ResourceProviderTracker.java?rev=1729773&r1=1729772&r2=1729773&view=diff
==============================================================================
--- 
sling/trunk/bundles/resourceresolver/src/main/java/org/apache/sling/resourceresolver/impl/providers/ResourceProviderTracker.java
 (original)
+++ 
sling/trunk/bundles/resourceresolver/src/main/java/org/apache/sling/resourceresolver/impl/providers/ResourceProviderTracker.java
 Thu Feb 11 08:45:03 2016
@@ -55,7 +55,7 @@ import org.slf4j.LoggerFactory;
 /**
  * This service keeps track of all resource providers.
  */
-public class ResourceProviderTracker {
+public class ResourceProviderTracker implements 
ResourceProviderStorageProvider {
 
     public interface ObservationReporterGenerator {
 
@@ -244,8 +244,10 @@ public class ResourceProviderTracker {
         Iterator<ResourceProviderHandler> it = infos.iterator();
         boolean removed = false;
         while (it.hasNext()) {
-            if (it.next().getInfo() == info) {
+            final ResourceProviderHandler h = it.next();
+            if (h.getInfo() == info) {
                 it.remove();
+                h.dispose();
                 removed = true;
                 break;
             }
@@ -337,6 +339,7 @@ public class ResourceProviderTracker {
         dto.failedProviders = failures.toArray(new 
ResourceProviderFailureDTO[failures.size()]);
     }
 
+    @Override
     public ResourceProviderStorage getResourceProviderStorage() {
         ResourceProviderStorage result = storage;
         if (result == null) {

Modified: 
sling/trunk/bundles/resourceresolver/src/test/java/org/apache/sling/resourceresolver/impl/ProviderHandlerTest.java
URL: 
http://svn.apache.org/viewvc/sling/trunk/bundles/resourceresolver/src/test/java/org/apache/sling/resourceresolver/impl/ProviderHandlerTest.java?rev=1729773&r1=1729772&r2=1729773&view=diff
==============================================================================
--- 
sling/trunk/bundles/resourceresolver/src/test/java/org/apache/sling/resourceresolver/impl/ProviderHandlerTest.java
 (original)
+++ 
sling/trunk/bundles/resourceresolver/src/test/java/org/apache/sling/resourceresolver/impl/ProviderHandlerTest.java
 Thu Feb 11 08:45:03 2016
@@ -33,6 +33,7 @@ import org.apache.sling.api.resource.Res
 import org.apache.sling.api.resource.ResourceUtil;
 import 
org.apache.sling.resourceresolver.impl.providers.ResourceProviderHandler;
 import 
org.apache.sling.resourceresolver.impl.providers.ResourceProviderStorage;
+import 
org.apache.sling.resourceresolver.impl.providers.ResourceProviderStorageProvider;
 import org.apache.sling.spi.resource.provider.ResolveContext;
 import org.apache.sling.spi.resource.provider.ResourceContext;
 import org.apache.sling.spi.resource.provider.ResourceProvider;
@@ -56,10 +57,16 @@ public class ProviderHandlerTest {
 
         final ResourceProvider<?> leaveProvider = 
Mockito.mock(ResourceProvider.class);
         
Mockito.when(leaveProvider.getResource(Mockito.any(ResolveContext.class), 
Mockito.eq(servletpath), Mockito.any(ResourceContext.class), 
Mockito.any(Resource.class))).thenReturn(servletResource);
-        ResourceProviderHandler h = createRPHandler(leaveProvider, "my-pid", 
0, servletpath);
+        final ResourceProviderHandler h = createRPHandler(leaveProvider, 
"my-pid", 0, servletpath);
         ResourceResolverFactoryActivator activator = new 
ResourceResolverFactoryActivator();
         activator.resourceAccessSecurityTracker = new 
ResourceAccessSecurityTracker();
-        ResourceResolver resolver = new ResourceResolverImpl(new 
CommonResourceResolverFactoryImpl(activator), false, null, new 
ResourceProviderStorage(Arrays.asList(h)));
+        ResourceResolver resolver = new ResourceResolverImpl(new 
CommonResourceResolverFactoryImpl(activator), false, null, new 
ResourceProviderStorageProvider() {
+                
+                @Override
+                public ResourceProviderStorage getResourceProviderStorage() {
+                    return new ResourceProviderStorage(Arrays.asList(h));
+                }
+            });
 
         final Resource parent = 
resolver.getResource(ResourceUtil.getParent(servletpath));
         assertNotNull("Parent must be available", parent);

Modified: 
sling/trunk/bundles/resourceresolver/src/test/java/org/apache/sling/resourceresolver/impl/ResourceDecoratorTestBase.java
URL: 
http://svn.apache.org/viewvc/sling/trunk/bundles/resourceresolver/src/test/java/org/apache/sling/resourceresolver/impl/ResourceDecoratorTestBase.java?rev=1729773&r1=1729772&r2=1729773&view=diff
==============================================================================
--- 
sling/trunk/bundles/resourceresolver/src/test/java/org/apache/sling/resourceresolver/impl/ResourceDecoratorTestBase.java
 (original)
+++ 
sling/trunk/bundles/resourceresolver/src/test/java/org/apache/sling/resourceresolver/impl/ResourceDecoratorTestBase.java
 Thu Feb 11 08:45:03 2016
@@ -39,6 +39,7 @@ import org.apache.sling.api.resource.Val
 import org.apache.sling.resourceresolver.impl.helper.ResourceDecoratorTracker;
 import 
org.apache.sling.resourceresolver.impl.providers.ResourceProviderHandler;
 import 
org.apache.sling.resourceresolver.impl.providers.ResourceProviderStorage;
+import 
org.apache.sling.resourceresolver.impl.providers.ResourceProviderStorageProvider;
 import org.apache.sling.spi.resource.provider.QueryLanguageProvider;
 import org.apache.sling.spi.resource.provider.ResolveContext;
 import org.apache.sling.spi.resource.provider.ResourceContext;
@@ -142,8 +143,14 @@ public abstract class ResourceDecoratorT
             }
         };
 
-        List<ResourceProviderHandler> list = 
Arrays.asList(MockedResourceResolverImplTest.createRPHandler(provider, 
"A-provider", 0L, "/"));
-        resolver = new ResourceResolverImpl(crf, false, null, new 
ResourceProviderStorage(list));
+        final List<ResourceProviderHandler> list = 
Arrays.asList(MockedResourceResolverImplTest.createRPHandler(provider, 
"A-provider", 0L, "/"));
+        resolver = new ResourceResolverImpl(crf, false, null, new 
ResourceProviderStorageProvider() {
+
+            @Override
+            public ResourceProviderStorage getResourceProviderStorage() {
+                return new ResourceProviderStorage(list);
+            }
+        });
     }
 
     protected void assertExistent(Resource r, boolean existent) {

Modified: 
sling/trunk/bundles/resourceresolver/src/test/java/org/apache/sling/resourceresolver/impl/ResourceProviderEntryTest.java
URL: 
http://svn.apache.org/viewvc/sling/trunk/bundles/resourceresolver/src/test/java/org/apache/sling/resourceresolver/impl/ResourceProviderEntryTest.java?rev=1729773&r1=1729772&r2=1729773&view=diff
==============================================================================
--- 
sling/trunk/bundles/resourceresolver/src/test/java/org/apache/sling/resourceresolver/impl/ResourceProviderEntryTest.java
 (original)
+++ 
sling/trunk/bundles/resourceresolver/src/test/java/org/apache/sling/resourceresolver/impl/ResourceProviderEntryTest.java
 Thu Feb 11 08:45:03 2016
@@ -37,6 +37,7 @@ import org.apache.sling.api.resource.Res
 import org.apache.sling.api.resource.SyntheticResource;
 import 
org.apache.sling.resourceresolver.impl.providers.ResourceProviderHandler;
 import 
org.apache.sling.resourceresolver.impl.providers.ResourceProviderStorage;
+import 
org.apache.sling.resourceresolver.impl.providers.ResourceProviderStorageProvider;
 import org.apache.sling.spi.resource.provider.ResolveContext;
 import org.apache.sling.spi.resource.provider.ResourceContext;
 import org.apache.sling.spi.resource.provider.ResourceProvider;
@@ -245,7 +246,13 @@ public class ResourceProviderEntryTest {
             final ResourceResolverFactoryActivator activator = new 
ResourceResolverFactoryActivator();
             activator.resourceAccessSecurityTracker = new 
ResourceAccessSecurityTracker();
             providersBasedResolver = new ResourceResolverImpl(new 
CommonResourceResolverFactoryImpl(activator), false, null,
-                    new ResourceProviderStorage(providers));
+                    new ResourceProviderStorageProvider() {
+
+                        @Override
+                        public ResourceProviderStorage 
getResourceProviderStorage() {
+                            return new ResourceProviderStorage(providers);
+                        }
+                    });
         }
         return providersBasedResolver;
     }

Modified: 
sling/trunk/bundles/resourceresolver/src/test/java/org/apache/sling/resourceresolver/impl/ResourceResolverImplTest.java
URL: 
http://svn.apache.org/viewvc/sling/trunk/bundles/resourceresolver/src/test/java/org/apache/sling/resourceresolver/impl/ResourceResolverImplTest.java?rev=1729773&r1=1729772&r2=1729773&view=diff
==============================================================================
--- 
sling/trunk/bundles/resourceresolver/src/test/java/org/apache/sling/resourceresolver/impl/ResourceResolverImplTest.java
 (original)
+++ 
sling/trunk/bundles/resourceresolver/src/test/java/org/apache/sling/resourceresolver/impl/ResourceResolverImplTest.java
 Thu Feb 11 08:45:03 2016
@@ -96,7 +96,7 @@ public class ResourceResolverImplTest {
 
     @SuppressWarnings("deprecation")
     @Test public void testClose() throws Exception {
-        final ResourceResolver rr = new ResourceResolverImpl(commonFactory, 
false, null, resourceProviderTracker.getResourceProviderStorage());
+        final ResourceResolver rr = new ResourceResolverImpl(commonFactory, 
false, null, resourceProviderTracker);
         assertTrue(rr.isLive());
         rr.close();
         assertFalse(rr.isLive());
@@ -208,7 +208,7 @@ public class ResourceResolverImplTest {
         ResourceResolverFactoryActivator rrfa = spy(new 
ResourceResolverFactoryActivator());
         Whitebox.setInternalState(rrfa, "logResourceResolverClosing", true);
         CommonResourceResolverFactoryImpl crrfi = new 
CommonResourceResolverFactoryImpl(rrfa);
-        final ResourceResolver rr = new ResourceResolverImpl(crrfi, false, 
null, resourceProviderTracker.getResourceProviderStorage());
+        final ResourceResolver rr = new ResourceResolverImpl(crrfi, false, 
null, resourceProviderTracker);
         assertTrue(rr.isLive());
         rr.close();
         assertFalse(rr.isLive());
@@ -622,7 +622,7 @@ public class ResourceResolverImplTest {
         }
 
         public PathBasedResourceResolverImpl(CommonResourceResolverFactoryImpl 
factory, ResourceProviderTracker resourceProviderTracker) throws LoginException 
{
-            super(factory, false, null, 
resourceProviderTracker.getResourceProviderStorage());
+            super(factory, false, null, resourceProviderTracker);
         }
 
         public Resource add(final Resource r) {

Modified: 
sling/trunk/bundles/resourceresolver/src/test/java/org/apache/sling/resourceresolver/impl/ResourceResolverMangleNamespacesTest.java
URL: 
http://svn.apache.org/viewvc/sling/trunk/bundles/resourceresolver/src/test/java/org/apache/sling/resourceresolver/impl/ResourceResolverMangleNamespacesTest.java?rev=1729773&r1=1729772&r2=1729773&view=diff
==============================================================================
--- 
sling/trunk/bundles/resourceresolver/src/test/java/org/apache/sling/resourceresolver/impl/ResourceResolverMangleNamespacesTest.java
 (original)
+++ 
sling/trunk/bundles/resourceresolver/src/test/java/org/apache/sling/resourceresolver/impl/ResourceResolverMangleNamespacesTest.java
 Thu Feb 11 08:45:03 2016
@@ -32,6 +32,7 @@ import org.apache.commons.collections.It
 import org.apache.sling.api.resource.LoginException;
 import org.apache.sling.api.resource.Resource;
 import 
org.apache.sling.resourceresolver.impl.providers.ResourceProviderStorage;
+import 
org.apache.sling.resourceresolver.impl.providers.ResourceProviderStorageProvider;
 import org.apache.sling.spi.resource.provider.ResolveContext;
 import org.apache.sling.spi.resource.provider.ResourceContext;
 import org.apache.sling.spi.resource.provider.ResourceProvider;
@@ -95,8 +96,13 @@ public class ResourceResolverMangleNames
 
         final CommonResourceResolverFactoryImpl fac = new 
CommonResourceResolverFactoryImpl(act);
 
-        rr = new ResourceResolverImpl(fac, false, null,
-                new 
ResourceProviderStorage(Arrays.asList(MockedResourceResolverImplTest.createRPHandler(rp,
 "rp1", 0, "/"))));
+        rr = new ResourceResolverImpl(fac, false, null, new 
ResourceProviderStorageProvider() {
+            
+            @Override
+            public ResourceProviderStorage getResourceProviderStorage() {
+                return new 
ResourceProviderStorage(Arrays.asList(MockedResourceResolverImplTest.createRPHandler(rp,
 "rp1", 0, "/")));
+            }
+        });
     }
 
     @Test

Modified: 
sling/trunk/bundles/resourceresolver/src/test/java/org/apache/sling/resourceresolver/impl/helper/ResourceResolverControlTest.java
URL: 
http://svn.apache.org/viewvc/sling/trunk/bundles/resourceresolver/src/test/java/org/apache/sling/resourceresolver/impl/helper/ResourceResolverControlTest.java?rev=1729773&r1=1729772&r2=1729773&view=diff
==============================================================================
--- 
sling/trunk/bundles/resourceresolver/src/test/java/org/apache/sling/resourceresolver/impl/helper/ResourceResolverControlTest.java
 (original)
+++ 
sling/trunk/bundles/resourceresolver/src/test/java/org/apache/sling/resourceresolver/impl/helper/ResourceResolverControlTest.java
 Thu Feb 11 08:45:03 2016
@@ -52,6 +52,7 @@ import org.apache.sling.resourceresolver
 import 
org.apache.sling.resourceresolver.impl.providers.ResourceProviderHandler;
 import org.apache.sling.resourceresolver.impl.providers.ResourceProviderInfo;
 import 
org.apache.sling.resourceresolver.impl.providers.ResourceProviderStorage;
+import 
org.apache.sling.resourceresolver.impl.providers.ResourceProviderStorageProvider;
 import org.apache.sling.spi.resource.provider.QueryLanguageProvider;
 import org.apache.sling.spi.resource.provider.ResolveContext;
 import org.apache.sling.spi.resource.provider.ResourceContext;
@@ -138,9 +139,15 @@ public class ResourceResolverControlTest
         authInfo = Collections.emptyMap();
 
         handlers = Arrays.asList(rootHandler, handler);
-        ResourceProviderStorage storage = new 
ResourceProviderStorage(handlers);
+        final ResourceProviderStorage storage = new 
ResourceProviderStorage(handlers);
 
-        crp = new ResourceResolverControl(false, authInfo, storage);
+        crp = new ResourceResolverControl(false, authInfo, new 
ResourceProviderStorageProvider() {
+            
+            @Override
+            public ResourceProviderStorage getResourceProviderStorage() {
+                return storage;
+            }
+        });
         context = new ResourceResolverContext(rr, securityTracker);
     }
 


Reply via email to