You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by fm...@apache.org on 2013/08/05 12:08:51 UTC

svn commit: r1510413 [2/2] - in /sling/trunk/bundles: api/ api/src/main/java/org/apache/sling/api/resource/ extensions/serviceusermapper/ extensions/serviceusermapper/src/main/java/org/apache/sling/serviceusermapping/ extensions/serviceusermapper/src/m...

Modified: sling/trunk/bundles/jcr/resource/src/main/java/org/apache/sling/jcr/resource/internal/helper/jcr/JcrResourceProviderFactory.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/jcr/resource/src/main/java/org/apache/sling/jcr/resource/internal/helper/jcr/JcrResourceProviderFactory.java?rev=1510413&r1=1510412&r2=1510413&view=diff
==============================================================================
--- sling/trunk/bundles/jcr/resource/src/main/java/org/apache/sling/jcr/resource/internal/helper/jcr/JcrResourceProviderFactory.java (original)
+++ sling/trunk/bundles/jcr/resource/src/main/java/org/apache/sling/jcr/resource/internal/helper/jcr/JcrResourceProviderFactory.java Mon Aug  5 10:08:50 2013
@@ -47,8 +47,13 @@ import org.apache.sling.commons.osgi.Pro
 import org.apache.sling.jcr.api.SlingRepository;
 import org.apache.sling.jcr.resource.JcrResourceConstants;
 import org.apache.sling.jcr.resource.internal.JcrResourceListener;
+import org.osgi.framework.Bundle;
+import org.osgi.framework.BundleContext;
 import org.osgi.framework.Constants;
+import org.osgi.framework.ServiceReference;
 import org.osgi.service.component.ComponentContext;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 /**
  * The <code>JcrResourceProviderFactory</code> creates
@@ -65,20 +70,39 @@ import org.osgi.service.component.Compon
 })
 public class JcrResourceProviderFactory implements ResourceProviderFactory {
 
+    /** default log */
+    private final Logger log = LoggerFactory.getLogger(getClass());
+
+    private static final String REPOSITORY_REFERNENCE_NAME = "repository";
+
     /** The dynamic class loader */
     @Reference(cardinality = ReferenceCardinality.OPTIONAL_UNARY, policy = ReferencePolicy.DYNAMIC)
     private DynamicClassLoaderManager dynamicClassLoaderManager;
 
-    @Reference
+    @Reference(name = REPOSITORY_REFERNENCE_NAME, referenceInterface = SlingRepository.class)
+    private ServiceReference repositoryReference;
+
     private SlingRepository repository;
 
     /** The jcr resource listner. */
     private JcrResourceListener listener;
 
     @Activate
-    protected void activate(final ComponentContext context)
-    throws RepositoryException {
+    protected void activate(final ComponentContext context) throws RepositoryException {
+
+        SlingRepository repository = (SlingRepository) context.locateService(REPOSITORY_REFERNENCE_NAME,
+            this.repositoryReference);
+        if (repository == null) {
+            // concurrent unregistration of SlingRepository service
+            // don't care, this component is going to be deactivated
+            // so we just stop working
+            log.warn("activate: Activation failed because SlingRepository may have been unregistered concurrently");
+            return;
+        }
+
         final String root = PropertiesUtil.toString(context.getProperties().get(ResourceProvider.ROOTS), "/");
+
+        this.repository = repository;
         this.listener = new JcrResourceListener(root, null, this.repository, context.getBundleContext());
     }
 
@@ -99,6 +123,20 @@ public class JcrResourceProviderFactory 
         return null;
     }
 
+    @SuppressWarnings("unused")
+    private void bindRepository(final ServiceReference ref) {
+        this.repositoryReference = ref;
+        this.repository = null; // make sure ...
+    }
+
+    @SuppressWarnings("unused")
+    private void unbindRepository(final ServiceReference ref) {
+        if (this.repositoryReference == ref) {
+            this.repositoryReference = null;
+            this.repository = null; // make sure ...
+        }
+    }
+
     /**
      * @see org.apache.sling.api.resource.ResourceProviderFactory#getResourceProvider(java.util.Map)
      */
@@ -126,12 +164,14 @@ public class JcrResourceProviderFactory 
         // by default any session used by the resource resolver returned is
         // closed when the resource resolver is closed
         boolean logoutSession = true;
+        RepositoryHolder holder = new RepositoryHolder();
 
         // derive the session to be used
         Session session;
         try {
             final String workspace = getWorkspace(authenticationInfo);
             if (isAdmin) {
+
                 // requested admin session to any workspace (or default)
                 session = repository.loginAdministrative(workspace);
 
@@ -139,11 +179,49 @@ public class JcrResourceProviderFactory 
 
                 session = getSession(authenticationInfo);
                 if (session == null) {
-                    // requested non-admin session to any workspace (or default)
-                    final Credentials credentials = getCredentials(authenticationInfo);
-                    session = repository.login(credentials, workspace);
+
+                    final Object serviceBundleObject = authenticationInfo.get(SERVICE_BUNDLE);
+                    if (serviceBundleObject instanceof Bundle) {
+
+                        final String subServiceName = (authenticationInfo.get(ResourceResolverFactory.SUBSERVICE) instanceof String)
+                                ? (String) authenticationInfo.get(ResourceResolverFactory.SUBSERVICE)
+                                : null;
+
+                                final BundleContext bc = ((Bundle) serviceBundleObject).getBundleContext();
+
+                        final SlingRepository repo = (SlingRepository) bc.getService(repositoryReference);
+                        if (repo == null) {
+                            log.warn(
+                                "getResourceProviderInternal: Cannot login service because cannot get SlingRepository on behalf of bundle {} ({})",
+                                bc.getBundle().getSymbolicName(), bc.getBundle().getBundleId());
+                            throw new LoginException(); // TODO: correct ??
+                        }
+
+                        try {
+                            session = repo.loginService(subServiceName, workspace);
+                            holder.setRepositoryReference(bc, repositoryReference);
+                            holder.setSession(session);
+                        } finally {
+                            // unget the repository if the service cannot
+                            // login to it, otherwise the repository service
+                            // is let go off when the resource resolver is
+                            // closed and the session logged out
+                            if (session == null) {
+                                bc.ungetService(repositoryReference);
+                            }
+                        }
+
+                    } else {
+
+                        // requested non-admin session to any workspace (or
+                        // default)
+                        final Credentials credentials = getCredentials(authenticationInfo);
+                        session = repository.login(credentials, workspace);
+
+                    }
 
                 } else if (workspace != null) {
+
                     // session provided by map; but requested a different
                     // workspace impersonate can only change the user not switch
                     // the workspace as a workaround we login to the requested
@@ -166,6 +244,7 @@ public class JcrResourceProviderFactory 
                     }
 
                 } else {
+
                     // session provided; no special workspace; just make sure
                     // the session is not logged out when the resolver is closed
                     logoutSession = false;
@@ -177,7 +256,11 @@ public class JcrResourceProviderFactory 
 
         session = handleImpersonation(session, authenticationInfo, logoutSession);
 
-        return new JcrResourceProvider(session, this.getDynamicClassLoader(), logoutSession);
+        if (logoutSession) {
+            holder.setSession(session);
+        }
+
+        return new JcrResourceProvider(session, this.getDynamicClassLoader(), holder);
     }
 
     /**

Propchange: sling/trunk/bundles/resourceresolver/
------------------------------------------------------------------------------
--- svn:mergeinfo (added)
+++ svn:mergeinfo Mon Aug  5 10:08:50 2013
@@ -0,0 +1 @@
+/sling/whiteboard/fmeschbe/deprecate_login_administrative/resourceresolver:1458693-1499675

Modified: sling/trunk/bundles/resourceresolver/pom.xml
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/resourceresolver/pom.xml?rev=1510413&r1=1510412&r2=1510413&view=diff
==============================================================================
--- sling/trunk/bundles/resourceresolver/pom.xml (original)
+++ sling/trunk/bundles/resourceresolver/pom.xml Mon Aug  5 10:08:50 2013
@@ -119,6 +119,11 @@
             <scope>provided</scope>
         </dependency>
         <dependency>
+            <groupId>org.apache.sling</groupId>
+            <artifactId>org.apache.sling.serviceusermapper</artifactId>
+            <version>0.0.1-SNAPSHOT</version>
+        </dependency>
+        <dependency>
             <groupId>org.slf4j</groupId>
             <artifactId>slf4j-api</artifactId>
         </dependency>

Modified: sling/trunk/bundles/resourceresolver/src/main/java/org/apache/sling/resourceresolver/impl/ResourceResolverFactoryActivator.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/resourceresolver/src/main/java/org/apache/sling/resourceresolver/impl/ResourceResolverFactoryActivator.java?rev=1510413&r1=1510412&r2=1510413&view=diff
==============================================================================
--- sling/trunk/bundles/resourceresolver/src/main/java/org/apache/sling/resourceresolver/impl/ResourceResolverFactoryActivator.java (original)
+++ sling/trunk/bundles/resourceresolver/src/main/java/org/apache/sling/resourceresolver/impl/ResourceResolverFactoryActivator.java Mon Aug  5 10:08:50 2013
@@ -45,8 +45,11 @@ import org.apache.sling.resourceresolver
 import org.apache.sling.resourceresolver.impl.mapping.MapEntries;
 import org.apache.sling.resourceresolver.impl.mapping.Mapping;
 import org.apache.sling.resourceresolver.impl.tree.RootResourceProviderEntry;
+import org.apache.sling.serviceusermapping.ServiceUserMapper;
+import org.osgi.framework.Bundle;
 import org.osgi.framework.BundleContext;
 import org.osgi.framework.Constants;
+import org.osgi.framework.ServiceFactory;
 import org.osgi.framework.ServiceRegistration;
 import org.osgi.service.component.ComponentContext;
 import org.osgi.service.event.EventAdmin;
@@ -76,10 +79,6 @@ import org.osgi.service.event.EventAdmin
 public class ResourceResolverFactoryActivator {
 
     private static final class FactoryRegistration {
-
-        /** Registered resource resolver factory. */
-        public volatile ResourceResolverFactoryImpl factory;
-
         /** Registration .*/
         public volatile ServiceRegistration factoryRegistration;
     }
@@ -159,6 +158,10 @@ public class ResourceResolverFactoryActi
     @Reference
     EventAdmin eventAdmin;
 
+    /** Service User Mapper */
+    @Reference
+    private ServiceUserMapper serviceUserMapper;
+
     /** ComponentContext */
     private volatile ComponentContext componentContext;
 
@@ -324,9 +327,6 @@ public class ResourceResolverFactoryActi
             if ( local.factoryRegistration != null ) {
                 local.factoryRegistration.unregister();
             }
-            if ( local.factory != null ) {
-                local.factory.deactivate();
-            }
         }
     }
 
@@ -334,23 +334,38 @@ public class ResourceResolverFactoryActi
      * Try to register the factory.
      */
     private void registerFactory(final ComponentContext localContext) {
-        FactoryRegistration local = null;
-        synchronized ( this ) {
-            if ( this.factoryRegistration == null ) {
+        final FactoryRegistration local;
+        synchronized (this) {
+            if (this.factoryRegistration == null) {
                 this.factoryRegistration = new FactoryRegistration();
                 local = this.factoryRegistration;
+            } else {
+                local = null;
             }
         }
+
         if ( local != null ) {
             // activate and register factory
-            local.factory = new ResourceResolverFactoryImpl(this);
-            local.factory.activate(localContext.getBundleContext());
+
             final Dictionary<String, Object> serviceProps = new Hashtable<String, Object>();
             serviceProps.put(Constants.SERVICE_VENDOR, localContext.getProperties().get(Constants.SERVICE_VENDOR));
             serviceProps.put(Constants.SERVICE_DESCRIPTION, localContext.getProperties().get(Constants.SERVICE_DESCRIPTION));
 
-            local.factoryRegistration = localContext.getBundleContext().registerService(ResourceResolverFactory.class.getName(),
-                    local.factory, serviceProps);
+            local.factoryRegistration = localContext.getBundleContext().registerService(
+                ResourceResolverFactory.class.getName(), new ServiceFactory() {
+                    public Object getService(Bundle bundle, ServiceRegistration registration) {
+                        final ResourceResolverFactoryImpl r = new ResourceResolverFactoryImpl(
+                            ResourceResolverFactoryActivator.this, bundle,
+                            ResourceResolverFactoryActivator.this.serviceUserMapper);
+                        r.activate(localContext.getBundleContext());
+                        return r;
+                    }
+
+                    public void ungetService(Bundle bundle, ServiceRegistration registration, Object service) {
+                        ((ResourceResolverFactoryImpl) service).deactivate();
+                    }
+                }, serviceProps);
+
             // check if an unregister happened in between
             boolean doUnregister = false;
             synchronized ( this ) {

Modified: sling/trunk/bundles/resourceresolver/src/main/java/org/apache/sling/resourceresolver/impl/ResourceResolverFactoryImpl.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/resourceresolver/src/main/java/org/apache/sling/resourceresolver/impl/ResourceResolverFactoryImpl.java?rev=1510413&r1=1510412&r2=1510413&view=diff
==============================================================================
--- sling/trunk/bundles/resourceresolver/src/main/java/org/apache/sling/resourceresolver/impl/ResourceResolverFactoryImpl.java (original)
+++ sling/trunk/bundles/resourceresolver/src/main/java/org/apache/sling/resourceresolver/impl/ResourceResolverFactoryImpl.java Mon Aug  5 10:08:50 2013
@@ -18,10 +18,12 @@
  */
 package org.apache.sling.resourceresolver.impl;
 
+import java.util.HashMap;
 import java.util.Map;
 
 import org.apache.commons.collections.BidiMap;
 import org.apache.sling.api.resource.LoginException;
+import org.apache.sling.api.resource.ResourceProviderFactory;
 import org.apache.sling.api.resource.ResourceResolver;
 import org.apache.sling.api.resource.ResourceResolverFactory;
 import org.apache.sling.api.security.ResourceAccessSecurity;
@@ -32,6 +34,8 @@ import org.apache.sling.resourceresolver
 import org.apache.sling.resourceresolver.impl.mapping.MapEntries;
 import org.apache.sling.resourceresolver.impl.mapping.Mapping;
 import org.apache.sling.resourceresolver.impl.tree.RootResourceProviderEntry;
+import org.apache.sling.serviceusermapping.ServiceUserMapper;
+import org.osgi.framework.Bundle;
 import org.osgi.framework.BundleContext;
 import org.osgi.util.tracker.ServiceTracker;
 import org.slf4j.Logger;
@@ -57,26 +61,72 @@ public class ResourceResolverFactoryImpl
 
     /** The activator */
     private final ResourceResolverFactoryActivator activator;
-    
+
     private ServiceTracker resourceAccessSecurityTracker;
 
-    public ResourceResolverFactoryImpl(final ResourceResolverFactoryActivator activator) {
+    private final ServiceUserMapper serviceUserMapper;
+
+    private final Bundle usingBundle;
+
+    public ResourceResolverFactoryImpl(final ResourceResolverFactoryActivator activator, final Bundle usingBundle,
+            final ServiceUserMapper serviceUserMapper) {
         this.activator = activator;
+        this.serviceUserMapper = serviceUserMapper;
+        this.usingBundle = usingBundle;
     }
 
     // ---------- Resource Resolver Factory ------------------------------------
 
-    /**
-     * @see org.apache.sling.api.resource.ResourceResolverFactory#getAdministrativeResourceResolver(java.util.Map)
-     */
+    public ResourceResolver getServiceResourceResolver(Map<String, Object> authenticationInfo) throws LoginException {
+
+        // clean authenticaiton from password and get service info
+        final String subServiceName;
+        if (authenticationInfo != null) {
+            authenticationInfo.remove(PASSWORD);
+            final Object info = authenticationInfo.get(SUBSERVICE);
+            subServiceName = (info instanceof String) ? (String) info : null;
+        } else {
+            authenticationInfo = new HashMap<String, Object>();
+            subServiceName = null;
+        }
+
+        // Ensure a mapped user name: If no user is defined for a bundle
+        // acting as a service, the user may be null. We can decide whether
+        // this should yield guest access or no access at all. For now
+        // no access is granted if there is no service user defined for
+        // the bundle.
+        final String userName = this.serviceUserMapper.getServiceUserID(this.usingBundle, subServiceName);
+        if (userName == null) {
+            throw new LoginException("Cannot derive user name for service "
+                + this.serviceUserMapper.getServiceID(this.usingBundle, subServiceName));
+        }
+
+        // ensure proper user name and service bundle
+        authenticationInfo.put(ResourceResolverFactory.USER, userName);
+        authenticationInfo.put(ResourceProviderFactory.SERVICE_BUNDLE, this.usingBundle);
+
+        return getResourceResolverInternal(authenticationInfo, false);
+    }
+
     public ResourceResolver getAdministrativeResourceResolver(final Map<String, Object> authenticationInfo) throws LoginException {
+
+        // make sure there is no leaking of service bundle and info props
+        if (authenticationInfo != null) {
+            authenticationInfo.remove(ResourceProviderFactory.SERVICE_BUNDLE);
+            authenticationInfo.remove(SUBSERVICE);
+        }
+
         return getResourceResolverInternal(authenticationInfo, true);
     }
 
-    /**
-     * @see org.apache.sling.api.resource.ResourceResolverFactory#getResourceResolver(java.util.Map)
-     */
     public ResourceResolver getResourceResolver(final Map<String, Object> authenticationInfo) throws LoginException {
+
+        // make sure there is no leaking of service bundle and info props
+        if (authenticationInfo != null) {
+            authenticationInfo.remove(ResourceProviderFactory.SERVICE_BUNDLE);
+            authenticationInfo.remove(SUBSERVICE);
+        }
+
         return getResourceResolverInternal(authenticationInfo, false);
     }
 
@@ -121,7 +171,7 @@ public class ResourceResolverFactoryImpl
         } catch (final Exception e) {
             logger.error("activate: Cannot access repository, failed setting up Mapping Support", e);
         }
-        
+
         // create and open service tracker for ResourceAccessSecurity
         resourceAccessSecurityTracker = new ServiceTracker(bundleContext, ResourceAccessSecurity.class.getName(), null);
         resourceAccessSecurityTracker.open();
@@ -175,11 +225,11 @@ public class ResourceResolverFactoryImpl
     public int getDefaultVanityPathRedirectStatus() {
         return this.activator.getDefaultVanityPathRedirectStatus();
     }
-    
+
     /**
      * get's the ServiceTracker of the ResourceAccessSecurity service
      */
-    
+
     public ServiceTracker getResourceAccessSecurityTracker () {
         return resourceAccessSecurityTracker;
     }

Modified: sling/trunk/bundles/resourceresolver/src/test/java/org/apache/sling/resourceresolver/impl/MockedResourceResolverImplTest.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/resourceresolver/src/test/java/org/apache/sling/resourceresolver/impl/MockedResourceResolverImplTest.java?rev=1510413&r1=1510412&r2=1510413&view=diff
==============================================================================
--- sling/trunk/bundles/resourceresolver/src/test/java/org/apache/sling/resourceresolver/impl/MockedResourceResolverImplTest.java (original)
+++ sling/trunk/bundles/resourceresolver/src/test/java/org/apache/sling/resourceresolver/impl/MockedResourceResolverImplTest.java Mon Aug  5 10:08:50 2013
@@ -44,8 +44,10 @@ import org.mockito.ArgumentCaptor;
 import org.mockito.Mock;
 import org.mockito.Mockito;
 import org.mockito.MockitoAnnotations;
+import org.osgi.framework.Bundle;
 import org.osgi.framework.BundleContext;
 import org.osgi.framework.Constants;
+import org.osgi.framework.ServiceFactory;
 import org.osgi.service.component.ComponentContext;
 import org.osgi.service.event.EventAdmin;
 
@@ -73,6 +75,12 @@ public class MockedResourceResolverImplT
     @Mock
     private BundleContext bundleContext;
 
+    @Mock
+    private Bundle usingBundle;
+
+    @Mock
+    private BundleContext usingBundleContext;
+
     private Map<String, Object> services = new HashMap<String, Object>();
 
     private Map<String, Object> serviceProperties = new HashMap<String, Object>();
@@ -122,15 +130,15 @@ public class MockedResourceResolverImplT
         activator.eventAdmin = eventAdmin;
 
         activator.bindResourceProvider(resourceProvider,
-            buildResourceProviderProperties("org.apache.sling.resourceresolver.impl.DummyTestProvider", 
-                10L, 
+            buildResourceProviderProperties("org.apache.sling.resourceresolver.impl.DummyTestProvider",
+                10L,
                 new String[] { "/single" }));
-        
+
         // setup mapping resources at /etc/map to exercise vanity etc.
         // hmm, can't provide the resolver since its not up and ready.
         // mapping almost certainly work properly until this can be setup correctly.
         Resource etcMapResource = buildMappingResource("/etc/map", mappingResourceProvider, null);
-        
+
         activator.bindResourceProvider(mappingResourceProvider,
             buildResourceProviderProperties("org.apache.sling.resourceresolver.impl.MapProvider",
                 11L,
@@ -148,7 +156,7 @@ public class MockedResourceResolverImplT
         Mockito.when(
             resourceProviderFactory.getAdministrativeResourceProvider(Mockito.anyMap())).thenReturn(
             factoryAdministrativeResourceProvider);
-        
+
         activator.bindResourceProviderFactory(resourceProviderFactory,
             buildResourceProviderProperties("org.apache.sling.resourceresolver.impl.DummyTestProviderFactory",
                 12L,
@@ -162,6 +170,10 @@ public class MockedResourceResolverImplT
         // activate the components.
         activator.activate(componentContext);
 
+        // configure using Bundle
+        Mockito.when(usingBundle.getBundleContext()).thenReturn(usingBundleContext);
+        Mockito.when(usingBundleContext.getBundle()).thenReturn(usingBundle);
+
         // extract any services that were registered into a map.
         ArgumentCaptor<String> classesCaptor = ArgumentCaptor.forClass(String.class);
         ArgumentCaptor<Object> serviceCaptor = ArgumentCaptor.forClass(Object.class);
@@ -182,24 +194,27 @@ public class MockedResourceResolverImplT
         }
         // verify that a ResourceResolverFactoryImpl was created and registered.
         Assert.assertNotNull(services.get(ResourceResolverFactory.class.getName()));
-        ResourceResolverFactory rrf = (ResourceResolverFactory) services.get(ResourceResolverFactory.class.getName());
+        Object rrf = services.get(ResourceResolverFactory.class.getName());
+        if (rrf instanceof ServiceFactory) {
+            rrf = ((ServiceFactory) rrf).getService(usingBundle, null);
+        }
         Assert.assertTrue(rrf instanceof ResourceResolverFactoryImpl);
         resourceResolverFactory = (ResourceResolverFactoryImpl) rrf;
     }
-    
+
     private Resource buildMappingResource(String path,
             ResourceProvider provider, ResourceResolver resourceResolver) {
         List<Resource> localHostAnyList = new ArrayList<Resource>();
         localHostAnyList.add(buildResource(path+"/http/example.com.80/cgi-bin", EMPTY_RESOURCE_LIST, resourceResolver, provider, "sling:internalRedirect", "/scripts" ));
         localHostAnyList.add(buildResource(path+"/http/example.com.80/gateway", EMPTY_RESOURCE_LIST, resourceResolver, provider,"sling:internalRedirect", "http://gbiv.com"));
         localHostAnyList.add(buildResource(path+"/http/example.com.80/stories", EMPTY_RESOURCE_LIST, resourceResolver, provider,"sling:internalRedirect", "/anecdotes/$1"));
-        
+
         List<Resource> mappingChildren = new ArrayList<Resource>();
         mappingChildren.add(buildResource(path+"/http/example.com.80", EMPTY_RESOURCE_LIST, resourceResolver, provider,"sling:redirect", "http://www.example.com/"));
         mappingChildren.add(buildResource(path+"/http/www.example.com.80", EMPTY_RESOURCE_LIST, resourceResolver, provider,"sling:internalRedirect", "/example"));
         mappingChildren.add(buildResource(path+"/http/any_example.com.80", EMPTY_RESOURCE_LIST, resourceResolver, provider,"sling:match", ".+\\.example\\.com\\.80", "sling:redirect", "http://www.example.com/"));
         mappingChildren.add(buildResource(path+"/http/localhost_any", localHostAnyList, resourceResolver, provider,"sling:match", "localhost\\.\\d*", "sling:internalRedirect", "/content"));
-        
+
         Resource etcMapResource = buildResource(path+"/http", mappingChildren);
         Mockito.when(provider.getResource(Mockito.any(ResourceResolver.class), Mockito.eq(path))).thenReturn(etcMapResource);
         return etcMapResource;
@@ -265,10 +280,10 @@ public class MockedResourceResolverImplT
             Mockito.when(provider.listChildren(resource)).thenReturn(children.iterator());
             if ( resourceResolver != null) {
                 Mockito.when(provider.getResource(Mockito.eq(resourceResolver), Mockito.eq(fullpath))).thenReturn(resource);
-                Mockito.when(provider.getResource(Mockito.eq(resourceResolver), Mockito.any(HttpServletRequest.class), Mockito.eq(fullpath))).thenReturn(resource);                
+                Mockito.when(provider.getResource(Mockito.eq(resourceResolver), Mockito.any(HttpServletRequest.class), Mockito.eq(fullpath))).thenReturn(resource);
             } else {
                 Mockito.when(provider.getResource(Mockito.any(ResourceResolver.class), Mockito.eq(fullpath))).thenReturn(resource);
-                Mockito.when(provider.getResource(Mockito.any(ResourceResolver.class), Mockito.any(HttpServletRequest.class), Mockito.eq(fullpath))).thenReturn(resource);                
+                Mockito.when(provider.getResource(Mockito.any(ResourceResolver.class), Mockito.any(HttpServletRequest.class), Mockito.eq(fullpath))).thenReturn(resource);
             }
         }
         if ( properties != null ) {
@@ -279,10 +294,10 @@ public class MockedResourceResolverImplT
             }
             Mockito.when(resource.adaptTo(Mockito.eq(ValueMap.class))).thenReturn(vm);
         }
-        
+
         return resource;
     }
-        
+
 
     /**
      * extract the name from a path.
@@ -408,7 +423,7 @@ public class MockedResourceResolverImplT
         Resource resource = resourceResolver.getResource("/single/test.with/extra.dots/inthepath");
         Assert.assertEquals(singleResource, resource);
     }
-    
+
 
     /**
      * Test search paths
@@ -439,7 +454,7 @@ public class MockedResourceResolverImplT
         Resource resource = resourceResolver.getResource("/factory/test");
         Assert.assertEquals(factoryResource, resource);
     }
-    
+
 
     /**
      * Basic test of mapping functionality, at the moment needs more

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=1510413&r1=1510412&r2=1510413&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 Mon Aug  5 10:08:50 2013
@@ -53,7 +53,7 @@ public class ResourceResolverImplTest {
     private ResourceResolverFactoryImpl resFac;
 
     @Before public void setup() {
-        resFac = new ResourceResolverFactoryImpl(new ResourceResolverFactoryActivator());
+        resFac = new ResourceResolverFactoryImpl(new ResourceResolverFactoryActivator(), /* TODO: using Bundle */ null, null);
         resResolver = new ResourceResolverImpl(resFac, new ResourceResolverContext(false, null, null));
     }
 
@@ -345,7 +345,7 @@ public class ResourceResolverImplTest {
         // the resource resolver
         final List<ResourceResolver> resolvers = new ArrayList<ResourceResolver>();
         final PathBasedResourceResolverImpl resolver = new PathBasedResourceResolverImpl(
-                new ResourceResolverFactoryImpl(new ResourceResolverFactoryActivator()) {
+                new ResourceResolverFactoryImpl(new ResourceResolverFactoryActivator(), /* TODO: using Bundle */ null, null) {
 
                     @Override
                     public ResourceResolver getAdministrativeResourceResolver(
@@ -381,7 +381,7 @@ public class ResourceResolverImplTest {
 
         final List<ResourceResolver> resolvers = new ArrayList<ResourceResolver>();
         final PathBasedResourceResolverImpl resolver = new PathBasedResourceResolverImpl(
-                new ResourceResolverFactoryImpl(new ResourceResolverFactoryActivator()) {
+                new ResourceResolverFactoryImpl(new ResourceResolverFactoryActivator(), /* TODO: using Bundle */ null, null) {
 
                     @Override
                     public ResourceResolver getAdministrativeResourceResolver(

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=1510413&r1=1510412&r2=1510413&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 Mon Aug  5 10:08:50 2013
@@ -35,20 +35,20 @@ import org.mockito.MockitoAnnotations;
 /** Test ResourceResolverImpl.mangleNamespaces methods */
 public class ResourceResolverMangleNamespacesTest {
     private ResourceResolverImpl rr;
-    
+
     @Mock
     private Session mockedSession;
-    
+
     private Session activeSession;
-    
+
     public static final String NS_PREFIX = "testNS";
     public static final String NS_URL = "http://example.com/namespaces/testNS";
-    
-    @Before 
+
+    @Before
     public void setup() throws RepositoryException {
         MockitoAnnotations.initMocks(this);
         activeSession = mockedSession;
-        
+
         // Setup a ResourceResolverImpl with namespace mangling and unmangling
         final ResourceResolverFactoryActivator act = new ResourceResolverFactoryActivator() {
             @Override
@@ -56,9 +56,9 @@ public class ResourceResolverMangleNames
                 return true;
             }
         };
-        
+
         Mockito.when(mockedSession.getNamespacePrefix(NS_PREFIX)).thenReturn(NS_URL);
-        
+
         final RootResourceProviderEntry rrpe = new RootResourceProviderEntry() {
             @Override
             @SuppressWarnings("unchecked")
@@ -69,66 +69,66 @@ public class ResourceResolverMangleNames
                 return super.adaptTo(ctx, type);
             }
         };
-        
-        final ResourceResolverFactoryImpl fac = new ResourceResolverFactoryImpl(act) {
+
+        final ResourceResolverFactoryImpl fac = new ResourceResolverFactoryImpl(act, null, null) {
             @Override
             public RootResourceProviderEntry getRootProviderEntry() {
                 return rrpe;
             }
         };
-        
+
         rr = new ResourceResolverImpl(fac, new ResourceResolverContext(false, null, null));
     }
-    
-    @Test 
+
+    @Test
     public void testUrlWithPath() {
         assertEquals("http://example.com/some/path", rr.map("http://example.com/some/path"));
     }
-    
-    @Test 
+
+    @Test
     public void testMangleHttp() {
         assertEquals("http://example.com/path/_with_colon", rr.map("http://example.com/path/with:colon"));
     }
-    
-    @Test 
+
+    @Test
     public void testUnmangleHttp() {
         final Resource r = rr.resolve(null, "http://example.com/path/_with_mangling");
         assertEquals("/http://example.com/path/with:mangling", r.getPath());
     }
-    
-    @Test 
+
+    @Test
     public void testUnmangleNoSession() {
         activeSession = null;
         final Resource r = rr.resolve(null, "http://example.com/path/_with_mangling");
         assertEquals("/http://example.com/path/_with_mangling", r.getPath());
     }
-    
-    @Test 
+
+    @Test
     public void testManglePath() {
         assertEquals("/example.com/path/_with_colon", rr.map("/example.com/path/with:colon"));
     }
-    
-    @Test 
+
+    @Test
     public void testUnmanglePath() {
         final Resource r = rr.resolve(null, "/example.com/path/_with_mangling");
         assertEquals("/example.com/path/with:mangling", r.getPath());
     }
-    
-    @Test 
+
+    @Test
     public void testUrlNoPath() {
         assertEquals("http://withSlash.com/", rr.map("http://withSlash.com/"));
         assertEquals("http://noSlash.com", rr.map("http://noSlash.com"));
         assertEquals("http://nosuffix", rr.map("http://nosuffix"));
     }
-    
-    @Test 
+
+    @Test
     public void testWeirdCases() {
         assertEquals("http://foo", rr.map("http://foo"));
         assertEquals("http://", rr.map("http://"));
         assertEquals("http:/", rr.map("http:/"));
         assertEquals("http:", rr.map("http:"));
         assertEquals("http", rr.map("http"));
-        
+
         assertEquals("gopher://foo", rr.map("gopher://foo"));
         assertEquals("gopher://", rr.map("gopher://"));
         assertEquals("gopher:/", rr.map("gopher:/"));