You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by cz...@apache.org on 2015/02/13 10:40:19 UTC

svn commit: r1659484 - in /sling/trunk/bundles/resourceresolver: ./ src/main/java/org/apache/sling/resourceresolver/impl/ src/main/java/org/apache/sling/resourceresolver/impl/helper/ src/main/java/org/apache/sling/resourceresolver/impl/tree/ src/test/j...

Author: cziegeler
Date: Fri Feb 13 09:40:19 2015
New Revision: 1659484

URL: http://svn.apache.org/r1659484
Log:
Reapply SLING-848 after release

Modified:
    sling/trunk/bundles/resourceresolver/pom.xml
    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/ResourceIterator.java
    sling/trunk/bundles/resourceresolver/src/main/java/org/apache/sling/resourceresolver/impl/tree/ProviderHandler.java
    sling/trunk/bundles/resourceresolver/src/main/java/org/apache/sling/resourceresolver/impl/tree/ResourceProviderEntry.java
    sling/trunk/bundles/resourceresolver/src/main/java/org/apache/sling/resourceresolver/impl/tree/ResourceProviderFactoryHandler.java
    sling/trunk/bundles/resourceresolver/src/main/java/org/apache/sling/resourceresolver/impl/tree/ResourceProviderHandler.java
    sling/trunk/bundles/resourceresolver/src/test/java/org/apache/sling/resourceresolver/impl/MockedResourceResolverImplTest.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/tree/ProviderHandlerTest.java
    sling/trunk/bundles/resourceresolver/src/test/java/org/apache/sling/resourceresolver/impl/tree/ResourceProviderEntryTest.java

Modified: sling/trunk/bundles/resourceresolver/pom.xml
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/resourceresolver/pom.xml?rev=1659484&r1=1659483&r2=1659484&view=diff
==============================================================================
--- sling/trunk/bundles/resourceresolver/pom.xml (original)
+++ sling/trunk/bundles/resourceresolver/pom.xml Fri Feb 13 09:40:19 2015
@@ -111,7 +111,7 @@
         <dependency>
             <groupId>org.apache.sling</groupId>
             <artifactId>org.apache.sling.api</artifactId>
-            <version>2.8.0</version>
+            <version>2.8.1-SNAPSHOT</version>
             <scope>provided</scope>
         </dependency>
         <dependency>

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=1659484&r1=1659483&r2=1659484&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 Fri Feb 13 09:40:19 2015
@@ -19,6 +19,7 @@
 package org.apache.sling.resourceresolver.impl;
 
 import java.util.Arrays;
+import java.util.Collections;
 import java.util.HashMap;
 import java.util.Iterator;
 import java.util.LinkedList;
@@ -55,6 +56,7 @@ import org.apache.sling.resourceresolver
 import org.apache.sling.resourceresolver.impl.helper.URI;
 import org.apache.sling.resourceresolver.impl.helper.URIException;
 import org.apache.sling.resourceresolver.impl.mapping.MapEntry;
+import org.apache.sling.resourceresolver.impl.tree.params.ParsedParameters;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -64,6 +66,8 @@ public class ResourceResolverImpl extend
     /** Default logger */
     private final Logger logger = LoggerFactory.getLogger(ResourceResolverImpl.class);
 
+    private static final Map<String, String> EMPTY_PARAMETERS = Collections.emptyMap();
+
     private static final String MANGLE_NAMESPACE_IN_SUFFIX = "_";
 
     private static final String MANGLE_NAMESPACE_IN_PREFIX = "/_";
@@ -301,7 +305,9 @@ public class ResourceResolverImpl extend
 
         Resource res = null;
         for (int i = 0; res == null && i < realPathList.length; i++) {
-            final String realPath = realPathList[i];
+            final ParsedParameters parsedPath = new ParsedParameters(realPathList[i]);
+            final String realPath = parsedPath.getRawPath();
+
 
             // first check whether the requested resource is a StarResource
             if (StarResource.appliesTo(realPath)) {
@@ -314,24 +320,24 @@ public class ResourceResolverImpl extend
 
                     // let's check it with a direct access first
                     logger.debug("resolve: Try absolute mapped path {}", realPath);
-                    res = resolveInternal(realPath);
+                    res = resolveInternal(realPath, parsedPath.getParameters());
 
                 } else {
 
                     final String[] searchPath = getSearchPath();
                     for (int spi = 0; res == null && spi < searchPath.length; spi++) {
                         logger.debug("resolve: Try relative mapped path with search path entry {}", searchPath[spi]);
-                        res = resolveInternal(searchPath[spi] + realPath);
+                        res = resolveInternal(searchPath[spi] + realPath, parsedPath.getParameters());
                     }
 
                 }
             }
-
         }
 
         // if no resource has been found, use a NonExistingResource
         if (res == null) {
-            final String resourcePath = ensureAbsPath(realPathList[0]);
+            final ParsedParameters parsedPath = new ParsedParameters(realPathList[0]);
+            final String resourcePath = ensureAbsPath(parsedPath.getRawPath());
             logger.debug("resolve: Path {} does not resolve, returning NonExistingResource at {}", absPath, resourcePath);
 
             res = new NonExistingResource(this, resourcePath);
@@ -344,6 +350,7 @@ public class ResourceResolverImpl extend
             if (index != -1) {
                 res.getResourceMetadata().setResolutionPathInfo(resourcePath.substring(index));
             }
+            res.getResourceMetadata().setParameterMap(parsedPath.getParameters());
         } else {
             logger.debug("resolve: Path {} resolves to Resource {}", absPath, res);
         }
@@ -408,7 +415,8 @@ public class ResourceResolverImpl extend
 
         }
 
-        final Resource res = resolveInternal(mappedPath);
+        ParsedParameters parsed = new ParsedParameters(mappedPath);
+        final Resource res = resolveInternal(parsed.getRawPath(), parsed.getParameters());
 
         if (res != null) {
 
@@ -592,21 +600,39 @@ public class ResourceResolverImpl extend
 
         String absolutePath = path;
         if (absolutePath != null && !absolutePath.startsWith("/") && base != null) {
-            absolutePath = base.getPath() + "/" + absolutePath;
+            absolutePath = appendToPath(base.getPath(), absolutePath);
         }
 
         final Resource result = getResourceInternal(absolutePath);
         return result;
     }
 
+    /**
+     * Methods concatenates two paths. If the first path contains parameters separated semicolon, they are
+     * moved at the end of the result.
+     *
+     * @param pathWithParameters
+     * @param segmentToAppend
+     * @return
+     */
+    private static String appendToPath(final String pathWithParameters, final String segmentToAppend) {
+        final ParsedParameters parsed = new ParsedParameters(pathWithParameters);
+        if (parsed.getParametersString() == null) {
+            return String.format("%s/%s", parsed.getRawPath(), segmentToAppend);
+        } else {
+            return String.format("%s/%s%s", parsed.getRawPath(), segmentToAppend, parsed.getParametersString());
+        }
+    }
+
     private Resource getResourceInternal(String path) {
 
         Resource result = null;
         if ( path != null ) {
             // if the path is absolute, normalize . and .. segments and get res
             if (path.startsWith("/")) {
-                path = ResourceUtil.normalize(path);
-                result = (path != null) ? getAbsoluteResourceInternal(path, false) : null;
+                ParsedParameters parsedPath = new ParsedParameters(path);
+                path = ResourceUtil.normalize(parsedPath.getRawPath());
+                result = (path != null) ? getAbsoluteResourceInternal(path, parsedPath.getParameters(), false) : null;
                 if (result != null) {
                     result = this.factory.getResourceDecoratorTracker().decorate(result);
                 }
@@ -807,14 +833,14 @@ public class ResourceResolverImpl extend
      *         the part of the <code>absPath</code> which has been cut off by
      *         the {@link ResourcePathIterator} to resolve the resource.
      */
-    private Resource resolveInternal(final String absPath) {
+    private Resource resolveInternal(final String absPath, final Map<String, String> parameters) {
         Resource resource = null;
         String curPath = absPath;
         try {
             final ResourcePathIterator it = new ResourcePathIterator(absPath);
             while (it.hasNext() && resource == null) {
                 curPath = it.next();
-                resource = getAbsoluteResourceInternal(curPath, true);
+                resource = getAbsoluteResourceInternal(curPath, parameters, true);
             }
         } catch (final Exception ex) {
             throw new SlingException("Problem trying " + curPath + " for request path " + absPath, ex);
@@ -828,6 +854,7 @@ public class ResourceResolverImpl extend
             final String rpi = absPath.substring(curPath.length());
             resource.getResourceMetadata().setResolutionPath(absPath.substring(0, curPath.length()));
             resource.getResourceMetadata().setResolutionPathInfo(rpi);
+            resource.getResourceMetadata().setParameterMap(parameters);
 
             logger.debug("resolveInternal: Found resource {} with path info {} for {}", new Object[] { resource, rpi, absPath });
 
@@ -835,7 +862,7 @@ public class ResourceResolverImpl extend
 
             // no direct resource found, so we have to drill down into the
             // resource tree to find a match
-            resource = getAbsoluteResourceInternal("/", true);
+            resource = getAbsoluteResourceInternal("/", parameters, true);
             final StringBuilder resolutionPath = new StringBuilder();
             final StringTokenizer tokener = new StringTokenizer(absPath, "/");
             while (resource != null && tokener.hasMoreTokens()) {
@@ -878,6 +905,7 @@ public class ResourceResolverImpl extend
 
                 resource.getResourceMetadata().setResolutionPath(path);
                 resource.getResourceMetadata().setResolutionPathInfo(pathInfo);
+                resource.getResourceMetadata().setParameterMap(parameters);
 
                 logger.debug("resolveInternal: Found resource {} with path info {} for {}", new Object[] { resource, pathInfo,
                         absPath });
@@ -894,7 +922,7 @@ public class ResourceResolverImpl extend
         } else {
             path = parent.getPath() + '/' + childName;
         }
-        Resource child = getAbsoluteResourceInternal( ResourceUtil.normalize(path), true );
+        Resource child = getAbsoluteResourceInternal( ResourceUtil.normalize(path), EMPTY_PARAMETERS, true );
         if (child != null) {
             final String alias = ResourceResolverContext.getProperty(child, PROP_REDIRECT_INTERNAL);
             if (alias != null) {
@@ -922,7 +950,7 @@ public class ResourceResolverImpl extend
                     } else {
                         aliasPath = parent.getPath() + '/' + aliasName;
                     }
-                    final Resource aliasedChild = getAbsoluteResourceInternal( ResourceUtil.normalize(aliasPath), true );
+                    final Resource aliasedChild = getAbsoluteResourceInternal( ResourceUtil.normalize(aliasPath), EMPTY_PARAMETERS, true );
                     logger.debug("getChildInternal: Found Resource {} with alias {} to use", aliasedChild, childName);
                     return aliasedChild;
                 }
@@ -938,7 +966,7 @@ public class ResourceResolverImpl extend
                         for (final String alias : aliases) {
                             if (childName.equals(alias)) {
                                 logger.debug("getChildInternal: Found Resource {} with alias {} to use", child, childName);
-                                final Resource aliasedChild = getAbsoluteResourceInternal( ResourceUtil.normalize(child.getPath()) , true);
+                                final Resource aliasedChild = getAbsoluteResourceInternal( ResourceUtil.normalize(child.getPath()) , EMPTY_PARAMETERS, true);
                                 return aliasedChild;
                             }
                         }
@@ -955,11 +983,12 @@ public class ResourceResolverImpl extend
     /**
      * Creates a resource with the given path if existing
      */
-    private Resource getAbsoluteResourceInternal(final String path, final boolean isResolve) {
+    private Resource getAbsoluteResourceInternal(final String path, final Map<String, String> parameters, final boolean isResolve) {
 
-        final Resource resource = this.factory.getRootProviderEntry().getResource(this.context, this, path ,isResolve);
+        final Resource resource = this.factory.getRootProviderEntry().getResource(this.context, this, path, parameters, isResolve);
         if (resource != null) {
             resource.getResourceMetadata().setResolutionPath(path);
+            resource.getResourceMetadata().setParameterMap(parameters);
             return resource;
         }
 

Modified: sling/trunk/bundles/resourceresolver/src/main/java/org/apache/sling/resourceresolver/impl/helper/ResourceIterator.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/resourceresolver/src/main/java/org/apache/sling/resourceresolver/impl/helper/ResourceIterator.java?rev=1659484&r1=1659483&r2=1659484&view=diff
==============================================================================
--- sling/trunk/bundles/resourceresolver/src/main/java/org/apache/sling/resourceresolver/impl/helper/ResourceIterator.java (original)
+++ sling/trunk/bundles/resourceresolver/src/main/java/org/apache/sling/resourceresolver/impl/helper/ResourceIterator.java Fri Feb 13 09:40:19 2015
@@ -19,6 +19,7 @@
 package org.apache.sling.resourceresolver.impl.helper;
 
 import java.util.Arrays;
+import java.util.Collections;
 import java.util.HashSet;
 import java.util.Iterator;
 import java.util.LinkedHashMap;
@@ -218,7 +219,7 @@ public class ResourceIterator implements
                     if (!visited.contains(resPath)) {
                         final ResourceResolver rr = parentResource.getResourceResolver();
                         final Resource res = rpw.getResourceFromProviders(this.resourceResolverContext, rr,
-                                resPath);
+                                resPath, Collections.<String,String>emptyMap());
                         if (res == null) {
                             if (!delayed.containsKey(resPath)) {
                                 delayed.put(

Modified: sling/trunk/bundles/resourceresolver/src/main/java/org/apache/sling/resourceresolver/impl/tree/ProviderHandler.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/resourceresolver/src/main/java/org/apache/sling/resourceresolver/impl/tree/ProviderHandler.java?rev=1659484&r1=1659483&r2=1659484&view=diff
==============================================================================
--- sling/trunk/bundles/resourceresolver/src/main/java/org/apache/sling/resourceresolver/impl/tree/ProviderHandler.java (original)
+++ sling/trunk/bundles/resourceresolver/src/main/java/org/apache/sling/resourceresolver/impl/tree/ProviderHandler.java Fri Feb 13 09:40:19 2015
@@ -341,7 +341,7 @@ public abstract class ProviderHandler im
     /**
      * @see ResourceProvider#getResource(ResourceResolver, String)
      */
-    public abstract Resource getResource(final ResourceResolverContext ctx, final ResourceResolver resourceResolver, final String path);
+    public abstract Resource getResource(final ResourceResolverContext ctx, final ResourceResolver resourceResolver, final String path, final Map<String, String> parameters);
 
     /**
      * @see ResourceProvider#listChildren(Resource)

Modified: sling/trunk/bundles/resourceresolver/src/main/java/org/apache/sling/resourceresolver/impl/tree/ResourceProviderEntry.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/resourceresolver/src/main/java/org/apache/sling/resourceresolver/impl/tree/ResourceProviderEntry.java?rev=1659484&r1=1659483&r2=1659484&view=diff
==============================================================================
--- sling/trunk/bundles/resourceresolver/src/main/java/org/apache/sling/resourceresolver/impl/tree/ResourceProviderEntry.java (original)
+++ sling/trunk/bundles/resourceresolver/src/main/java/org/apache/sling/resourceresolver/impl/tree/ResourceProviderEntry.java Fri Feb 13 09:40:19 2015
@@ -37,6 +37,7 @@ import org.apache.sling.api.resource.Res
 import org.apache.sling.api.resource.ResourceUtil;
 import org.apache.sling.api.resource.SyntheticResource;
 import org.apache.sling.resourceresolver.impl.helper.ResourceResolverContext;
+import org.apache.sling.resourceresolver.impl.tree.params.ParsedParameters;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -123,6 +124,7 @@ public class ResourceProviderEntry imple
      *
      * @param path
      *            The path to the resource to return.
+     * @param parameters 
      * @return The resource for the path or <code>null</code> if no resource can
      *         be found.
      * @throws org.apache.sling.api.SlingException
@@ -131,8 +133,9 @@ public class ResourceProviderEntry imple
     public Resource getResource(final ResourceResolverContext ctx,
             final ResourceResolver resourceResolver,
             final String path,
+            final Map<String, String> parameters,
             final boolean isResolve) {
-        return getInternalResource(ctx, resourceResolver, path, isResolve);
+        return getInternalResource(ctx, resourceResolver, path, parameters, isResolve);
     }
 
     // ------------------ Map methods, here so that we can delegate 2 maps
@@ -299,11 +302,13 @@ public class ResourceProviderEntry imple
      * @param ctx The resource resolver context
      * @param resourceResolver the ResourceResolver.
      * @param fullPath the Full path
+     * @param parameters 
      * @return null if no resource was found, a resource if one was found.
      */
     private Resource getInternalResource(final ResourceResolverContext ctx,
             final ResourceResolver resourceResolver,
             final String fullPath,
+            final Map<String, String> parameters,
             final boolean isResolve) {
         try {
 
@@ -323,7 +328,7 @@ public class ResourceProviderEntry imple
                 for (final ProviderHandler rp : rps) {
 
                     boolean foundFallback = false;
-                    final Resource resource = rp.getResource(ctx, resourceResolver, fullPath);
+                    final Resource resource = rp.getResource(ctx, resourceResolver, fullPath, parameters);
                     if (resource != null) {
                         if ( resource.getResourceMetadata() != null && resource.getResourceMetadata().get(ResourceMetadata.INTERNAL_CONTINUE_RESOLVING) != null ) {
                             if ( logger.isDebugEnabled() ) {
@@ -347,7 +352,7 @@ public class ResourceProviderEntry imple
             }
 
             // resolve against this one
-            final Resource resource = getResourceFromProviders(ctx, resourceResolver, fullPath);
+            final Resource resource = getResourceFromProviders(ctx, resourceResolver, fullPath, parameters);
             if (resource != null) {
                 return resource;
             }
@@ -383,13 +388,14 @@ public class ResourceProviderEntry imple
 
     public Resource getResourceFromProviders(final ResourceResolverContext ctx,
             final ResourceResolver resourceResolver,
-            final String fullPath) {
+            final String fullPath,
+            final Map<String, String> parameters) {
         Resource fallbackResource = null;
         final ProviderHandler[] rps = getResourceProviders();
         for (final ProviderHandler rp : rps) {
             boolean foundFallback = false;
 
-            final Resource resource = rp.getResource(ctx, resourceResolver, fullPath);
+            final Resource resource = rp.getResource(ctx, resourceResolver, fullPath, parameters);
             if (resource != null) {
                 if ( resource.getResourceMetadata() != null && resource.getResourceMetadata().get(ResourceMetadata.INTERNAL_CONTINUE_RESOLVING) != null ) {
                     logger.debug("Resolved Base {} using {} - continue resolving flag is set!", fullPath, rp);

Modified: sling/trunk/bundles/resourceresolver/src/main/java/org/apache/sling/resourceresolver/impl/tree/ResourceProviderFactoryHandler.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/resourceresolver/src/main/java/org/apache/sling/resourceresolver/impl/tree/ResourceProviderFactoryHandler.java?rev=1659484&r1=1659483&r2=1659484&view=diff
==============================================================================
--- sling/trunk/bundles/resourceresolver/src/main/java/org/apache/sling/resourceresolver/impl/tree/ResourceProviderFactoryHandler.java (original)
+++ sling/trunk/bundles/resourceresolver/src/main/java/org/apache/sling/resourceresolver/impl/tree/ResourceProviderFactoryHandler.java Fri Feb 13 09:40:19 2015
@@ -22,7 +22,9 @@ import java.util.Map;
 
 import javax.servlet.http.HttpServletRequest;
 
+import org.apache.commons.collections.MapUtils;
 import org.apache.sling.api.resource.LoginException;
+import org.apache.sling.api.resource.ParametrizableResourceProvider;
 import org.apache.sling.api.resource.Resource;
 import org.apache.sling.api.resource.ResourceProvider;
 import org.apache.sling.api.resource.ResourceProviderFactory;
@@ -101,10 +103,16 @@ public class ResourceProviderFactoryHand
     /**
      * @see ResourceProvider#getResource(ResourceResolver, String)
      */
-    public Resource getResource(final ResourceResolverContext ctx, final ResourceResolver resourceResolver, final String path) {
+    public Resource getResource(final ResourceResolverContext ctx, final ResourceResolver resourceResolver, final String path, final Map<String, String> parameters) {
         final ResourceProvider rp = this.getResourceProvider(ctx);
         if ( rp != null ) {
-            return getReadableResource(ctx, rp.getResource(resourceResolver, path) );
+            final Resource resource;
+            if (MapUtils.isNotEmpty(parameters) && rp instanceof ParametrizableResourceProvider) {
+                resource = ((ParametrizableResourceProvider) rp).getResource(resourceResolver, path, parameters);
+            } else {
+                resource = rp.getResource(resourceResolver, path);
+            }
+            return getReadableResource(ctx, resource);
         }
         return null;
     }

Modified: sling/trunk/bundles/resourceresolver/src/main/java/org/apache/sling/resourceresolver/impl/tree/ResourceProviderHandler.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/resourceresolver/src/main/java/org/apache/sling/resourceresolver/impl/tree/ResourceProviderHandler.java?rev=1659484&r1=1659483&r2=1659484&view=diff
==============================================================================
--- sling/trunk/bundles/resourceresolver/src/main/java/org/apache/sling/resourceresolver/impl/tree/ResourceProviderHandler.java (original)
+++ sling/trunk/bundles/resourceresolver/src/main/java/org/apache/sling/resourceresolver/impl/tree/ResourceProviderHandler.java Fri Feb 13 09:40:19 2015
@@ -20,6 +20,8 @@ package org.apache.sling.resourceresolve
 import java.util.Iterator;
 import java.util.Map;
 
+import org.apache.commons.collections.MapUtils;
+import org.apache.sling.api.resource.ParametrizableResourceProvider;
 import org.apache.sling.api.resource.Resource;
 import org.apache.sling.api.resource.ResourceProvider;
 import org.apache.sling.api.resource.ResourceResolver;
@@ -46,8 +48,14 @@ public class ResourceProviderHandler ext
     /**
      * @see ResourceProvider#getResource(ResourceResolver, String)
      */
-    public Resource getResource(final ResourceResolverContext ctx, final ResourceResolver resourceResolver, final String path) {
-        return getReadableResource(ctx, this.resourceProvider.getResource(resourceResolver, path) );
+    public Resource getResource(final ResourceResolverContext ctx, final ResourceResolver resourceResolver, final String path, final Map<String, String> parameters) {
+        final Resource resource;
+        if (MapUtils.isNotEmpty(parameters) && this.resourceProvider instanceof ParametrizableResourceProvider) {
+            resource = ((ParametrizableResourceProvider)this.resourceProvider).getResource(resourceResolver, path, parameters);
+        } else {
+            resource = this.resourceProvider.getResource(resourceResolver, path);
+        }
+        return getReadableResource(ctx, resource);
     }
 
     /**

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=1659484&r1=1659483&r2=1659484&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 Fri Feb 13 09:40:19 2015
@@ -17,9 +17,12 @@
  */
 package org.apache.sling.resourceresolver.impl;
 
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertTrue;
 
 import java.util.ArrayList;
+import java.util.Collections;
 import java.util.Dictionary;
 import java.util.HashMap;
 import java.util.HashSet;
@@ -593,13 +596,13 @@ public class MockedResourceResolverImplT
         }
         Assert.assertEquals(5,i);
     }
-    
+
     @Test
     public void testQueryResources() throws LoginException {
         final int n = 3;
         Mockito.when(queriableResourceProviderA.queryResources(Mockito.any(ResourceResolver.class), Mockito.any(String.class), Mockito.any(String.class)))
         .thenReturn(buildValueMapCollection(n, "A_").iterator());
-        
+
         final ResourceResolver rr = resourceResolverFactory.getResourceResolver(null);
         buildResource("/search/test/withchildren", buildChildResources("/search/test/withchildren"), rr, resourceProvider);
         final Iterator<Map<String, Object>> it = rr.queryResources("/search", FAKE_QUERY_LANGUAGE);
@@ -607,7 +610,7 @@ public class MockedResourceResolverImplT
         for(int i=0; i < n; i++) {
             toFind.add("A_" + i);
         }
-        
+
         assertTrue("Expecting non-empty result (" + n + ")", it.hasNext());
         while(it.hasNext()) {
             final Map<String, Object> m = it.next();
@@ -616,4 +619,25 @@ public class MockedResourceResolverImplT
         assertTrue("Expecting no leftovers (" + n + ") in" + toFind, toFind.isEmpty());
     }
 
+    @Test public void test_versions() throws LoginException {
+        ResourceResolver resourceResolver = resourceResolverFactory.getResourceResolver(null);
+
+        Resource resource = resourceResolver.resolve("/content/test.html;v=1.0");
+        Map<String, String> parameters = resource.getResourceMetadata().getParameterMap();
+        assertEquals("/content/test.html", resource.getPath());
+        assertEquals("test.html", resource.getName());
+        assertEquals(Collections.singletonMap("v", "1.0"), parameters);
+
+        resource = resourceResolver.resolve("/content/test;v='1.0'.html");
+        parameters = resource.getResourceMetadata().getParameterMap();
+        assertEquals("/content/test.html", resource.getPath());
+        assertEquals("test.html", resource.getName());
+        assertEquals(Collections.singletonMap("v", "1.0"), parameters);
+
+        buildResource("/single/test/withchildren", buildChildResources("/single/test/withchildren"), resourceResolver, resourceProvider);
+        resource = resourceResolver.getResource("/single/test/withchildren;v='1.0'");
+        assertNotNull(resource);
+        assertEquals("/single/test/withchildren", resource.getPath());
+        assertEquals("withchildren", resource.getName());
+    }
 }

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=1659484&r1=1659483&r2=1659484&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 Fri Feb 13 09:40:19 2015
@@ -26,6 +26,7 @@ import static org.junit.Assert.assertTru
 import static org.junit.Assert.fail;
 
 import java.util.ArrayList;
+import java.util.Collections;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.Iterator;

Modified: sling/trunk/bundles/resourceresolver/src/test/java/org/apache/sling/resourceresolver/impl/tree/ProviderHandlerTest.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/resourceresolver/src/test/java/org/apache/sling/resourceresolver/impl/tree/ProviderHandlerTest.java?rev=1659484&r1=1659483&r2=1659484&view=diff
==============================================================================
--- sling/trunk/bundles/resourceresolver/src/test/java/org/apache/sling/resourceresolver/impl/tree/ProviderHandlerTest.java (original)
+++ sling/trunk/bundles/resourceresolver/src/test/java/org/apache/sling/resourceresolver/impl/tree/ProviderHandlerTest.java Fri Feb 13 09:40:19 2015
@@ -23,6 +23,7 @@ import static org.junit.Assert.assertNot
 import static org.junit.Assert.assertNull;
 import static org.junit.Assert.assertTrue;
 
+import java.util.Collections;
 import java.util.HashMap;
 import java.util.Iterator;
 import java.util.Map;
@@ -84,6 +85,7 @@ public class ProviderHandlerTest {
 
     @Test public void testServletRegistrationAndSyntheticResources() {
         final String servletpath = "/libs/a/b/GET.servlet";
+        final Map<String, String> emptyParams = Collections.emptyMap();
 
         final Resource servletResource = Mockito.mock(Resource.class);
 
@@ -96,20 +98,20 @@ public class ProviderHandlerTest {
 
         root.bindResourceProvider(leaveProvider, leaveProperties);
 
-        final Resource parent = root.getResource(getResourceResolverContext(), null, ResourceUtil.getParent(servletpath), false);
+        final Resource parent = root.getResource(getResourceResolverContext(), null, ResourceUtil.getParent(servletpath), emptyParams, false);
         assertNotNull("Parent must be available", parent);
         assertTrue("Resource should be synthetic", ResourceUtil.isSyntheticResource(parent));
 
-        final Resource servlet = root.getResource(getResourceResolverContext(), null, servletpath, false);
+        final Resource servlet = root.getResource(getResourceResolverContext(), null, servletpath, emptyParams,false);
         assertNotNull("Servlet resource must not be null", servlet);
         assertEquals(servletResource, servlet);
 
-        assertNotNull(root.getResource(getResourceResolverContext(), null, "/libs", false));
+        assertNotNull(root.getResource(getResourceResolverContext(), null, "/libs", emptyParams, false));
 
         // now check when doing a resolve()
-        assertNull(root.getResource(getResourceResolverContext(), null, "/libs", true));
-        assertNull(root.getResource(getResourceResolverContext(), null, ResourceUtil.getParent(servletpath), true));
-        assertNotNull(root.getResource(getResourceResolverContext(), null, servletpath, true));
+        assertNull(root.getResource(getResourceResolverContext(), null, "/libs", emptyParams, true));
+        assertNull(root.getResource(getResourceResolverContext(), null, ResourceUtil.getParent(servletpath), emptyParams, true));
+        assertNotNull(root.getResource(getResourceResolverContext(), null, servletpath, emptyParams, true));
     }
 
     private ResourceResolverContext getResourceResolverContext() {
@@ -125,7 +127,7 @@ public class ProviderHandlerTest {
         }
 
         @Override
-        public Resource getResource(ResourceResolverContext ctx, ResourceResolver resourceResolver, String path) {
+        public Resource getResource(ResourceResolverContext ctx, ResourceResolver resourceResolver, String path, Map<String, String> parameters) {
             return null;
         }
 

Modified: sling/trunk/bundles/resourceresolver/src/test/java/org/apache/sling/resourceresolver/impl/tree/ResourceProviderEntryTest.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/resourceresolver/src/test/java/org/apache/sling/resourceresolver/impl/tree/ResourceProviderEntryTest.java?rev=1659484&r1=1659483&r2=1659484&view=diff
==============================================================================
--- sling/trunk/bundles/resourceresolver/src/test/java/org/apache/sling/resourceresolver/impl/tree/ResourceProviderEntryTest.java (original)
+++ sling/trunk/bundles/resourceresolver/src/test/java/org/apache/sling/resourceresolver/impl/tree/ResourceProviderEntryTest.java Fri Feb 13 09:40:19 2015
@@ -23,6 +23,7 @@ import static org.junit.Assert.assertFal
 import static org.junit.Assert.assertNull;
 import static org.junit.Assert.fail;
 
+import java.util.Collections;
 import java.util.HashMap;
 import java.util.Map;
 
@@ -41,6 +42,8 @@ import org.osgi.framework.Constants;
 
 public class ResourceProviderEntryTest {
 
+    private static final Map<String, String> EMPTY_PARAMS = Collections.emptyMap();
+    
     private ResourceResolver rootResolver;
 
     private ResourceProviderEntry root;
@@ -55,14 +58,14 @@ public class ResourceProviderEntryTest {
     }
 
     @Test public void testRootProvider() {
-        assertNull(root.getResource(null, null, "relpath", false));
+        assertNull(root.getResource(null, null, "relpath", EMPTY_PARAMS, false));
         final ResourceResolverContext ctx = getResourceResolverContext();
-        assertEqualsResolver(this.rootResolver, root.getResource(ctx, null, "/", false));
-        assertEqualsResolver(this.rootResolver, root.getResource(ctx, null, "/rootel", false));
-        assertEqualsResolver(this.rootResolver, root.getResource(ctx, null, "/rootel/child", false));
-        assertEqualsResolver(this.rootResolver, root.getResource(ctx, null, "/apps/sling/sample/html.js", false));
+        assertEqualsResolver(this.rootResolver, root.getResource(ctx, null, "/", EMPTY_PARAMS, false));
+        assertEqualsResolver(this.rootResolver, root.getResource(ctx, null, "/rootel", EMPTY_PARAMS, false));
+        assertEqualsResolver(this.rootResolver, root.getResource(ctx, null, "/rootel/child", EMPTY_PARAMS, false));
+        assertEqualsResolver(this.rootResolver, root.getResource(ctx, null, "/apps/sling/sample/html.js", EMPTY_PARAMS, false));
         assertEqualsResolver(this.rootResolver, root.getResource(ctx, null,
-            "/apps/sling/microsling/html.js", false));
+            "/apps/sling/microsling/html.js", EMPTY_PARAMS, false));
     }
 
     @Test public void testAdd1Provider() {
@@ -77,15 +80,15 @@ public class ResourceProviderEntryTest {
         root.addResourceProvider(firstPath, new ResourceProviderHandler(first, firstProps));
 
 
-        assertEqualsResolver(this.rootResolver, root.getResource(ctx, null, "/", false));
-        assertEqualsResolver(resolver, root.getResource(ctx, null, "/rootel", false));
-        assertEqualsResolver(resolver, root.getResource(ctx, null, "/rootel/html.js", false));
-        assertEqualsResolver(resolver, root.getResource(ctx, null, "/rootel/child", false));
-        assertEqualsResolver(resolver, root.getResource(ctx, null, "/rootel/child/html.js", false));
+        assertEqualsResolver(this.rootResolver, root.getResource(ctx, null, "/", EMPTY_PARAMS, false));
+        assertEqualsResolver(resolver, root.getResource(ctx, null, "/rootel", EMPTY_PARAMS, false));
+        assertEqualsResolver(resolver, root.getResource(ctx, null, "/rootel/html.js", EMPTY_PARAMS, false));
+        assertEqualsResolver(resolver, root.getResource(ctx, null, "/rootel/child", EMPTY_PARAMS, false));
+        assertEqualsResolver(resolver, root.getResource(ctx, null, "/rootel/child/html.js", EMPTY_PARAMS, false));
         assertEqualsResolver(this.rootResolver, root.getResource(ctx, null,
-            "/apps/sling/sample/html.js", false));
+            "/apps/sling/sample/html.js", EMPTY_PARAMS, false));
         assertEqualsResolver(this.rootResolver, root.getResource(ctx, null,
-            "/apps/sling/microsling/html.js", false));
+            "/apps/sling/microsling/html.js", EMPTY_PARAMS, false));
     }
 
     @Test public void testAdd3Providers() {
@@ -115,15 +118,15 @@ public class ResourceProviderEntryTest {
         root.addResourceProvider(secondPath, new ResourceProviderHandler(second, secondProps));
         root.addResourceProvider(thirdPath, new ResourceProviderHandler(third, thirdProps));
 
-        assertEqualsResolver(this.rootResolver, root.getResource(ctx, null, "/", false));
-        assertEqualsResolver(firstResolver, root.getResource(ctx, null, "/rootel", false));
-        assertEqualsResolver(firstResolver, root.getResource(ctx, null, "/rootel/html.js", false));
-        assertEqualsResolver(secondResolver, root.getResource(ctx, null, "/rootel/child", false));
-        assertEqualsResolver(secondResolver, root.getResource(ctx, null, "/rootel/child/html.js", false));
+        assertEqualsResolver(this.rootResolver, root.getResource(ctx, null, "/", EMPTY_PARAMS, false));
+        assertEqualsResolver(firstResolver, root.getResource(ctx, null, "/rootel", EMPTY_PARAMS, false));
+        assertEqualsResolver(firstResolver, root.getResource(ctx, null, "/rootel/html.js", EMPTY_PARAMS, false));
+        assertEqualsResolver(secondResolver, root.getResource(ctx, null, "/rootel/child", EMPTY_PARAMS, false));
+        assertEqualsResolver(secondResolver, root.getResource(ctx, null, "/rootel/child/html.js", EMPTY_PARAMS, false));
         assertEqualsResolver(thirdResolver,
-            root.getResource(ctx, null, "/apps/sling/sample/html.js", false));
+            root.getResource(ctx, null, "/apps/sling/sample/html.js", EMPTY_PARAMS, false));
         final Resource resource = root.getResource(ctx, null,
-            "/apps/sling/microsling/html.js", false);
+            "/apps/sling/microsling/html.js", EMPTY_PARAMS, false);
         assertEqualsResolver(this.rootResolver, resource);
     }
 
@@ -154,15 +157,15 @@ public class ResourceProviderEntryTest {
         root.addResourceProvider(secondPath, new ResourceProviderHandler(second, secondProps));
         root.addResourceProvider(thirdPath, new ResourceProviderHandler(third, thirdProps));
 
-        assertEqualsResolver(this.rootResolver, root.getResource(ctx, null, "/", false));
-        assertEqualsResolver(firstResolver, root.getResource(ctx, null, "/rootel", false));
-        assertEqualsResolver(firstResolver, root.getResource(ctx, null, "/rootel/html.js", false));
-        assertEqualsResolver(secondResolver, root.getResource(ctx, null, "/rootel/child", false));
-        assertEqualsResolver(secondResolver, root.getResource(ctx, null, "/rootel/child/html.js", false));
+        assertEqualsResolver(this.rootResolver, root.getResource(ctx, null, "/", EMPTY_PARAMS, false));
+        assertEqualsResolver(firstResolver, root.getResource(ctx, null, "/rootel", EMPTY_PARAMS, false));
+        assertEqualsResolver(firstResolver, root.getResource(ctx, null, "/rootel/html.js", EMPTY_PARAMS, false));
+        assertEqualsResolver(secondResolver, root.getResource(ctx, null, "/rootel/child", EMPTY_PARAMS, false));
+        assertEqualsResolver(secondResolver, root.getResource(ctx, null, "/rootel/child/html.js", EMPTY_PARAMS, false));
         assertEqualsResolver(thirdResolver,
-           root.getResource(ctx, null, "/apps/sling/sample/html.js", false));
+           root.getResource(ctx, null, "/apps/sling/sample/html.js", EMPTY_PARAMS, false));
         Resource resource = root.getResource(ctx, null,
-              "/apps/sling/microsling/html.js", false);
+              "/apps/sling/microsling/html.js", EMPTY_PARAMS, false);
         assertEqualsResolver(this.rootResolver, resource);
     }
 
@@ -193,22 +196,22 @@ public class ResourceProviderEntryTest {
         root.addResourceProvider(secondPath, new ResourceProviderHandler(second, secondProps));
         root.addResourceProvider(thirdPath, new ResourceProviderHandler(third, thirdProps));
 
-        assertEqualsResolver(this.rootResolver, root.getResource(ctx, null, "/", false));
-        assertEqualsResolver(firstResolver, root.getResource(ctx, null, "/rootel/html.js", false));
-        assertEqualsResolver(secondResolver, root.getResource(ctx, null, "/rootel/child/html.js", false));
+        assertEqualsResolver(this.rootResolver, root.getResource(ctx, null, "/", EMPTY_PARAMS, false));
+        assertEqualsResolver(firstResolver, root.getResource(ctx, null, "/rootel/html.js", EMPTY_PARAMS, false));
+        assertEqualsResolver(secondResolver, root.getResource(ctx, null, "/rootel/child/html.js", EMPTY_PARAMS, false));
 
         root.removeResourceProvider(firstPath, new ResourceProviderHandler(first, firstProps));
 
-        assertEqualsResolver(this.rootResolver, root.getResource(ctx, null, "/", false));
-        assertEqualsResolver(this.rootResolver, root.getResource(ctx, null, "/rootel/sddsf/sdfsdf/html.js", false));
-        assertEqualsResolver(this.rootResolver, root.getResource(ctx, null, "/rootel/html.js", false));
-        assertEqualsResolver(secondResolver, root.getResource(ctx, null, "/rootel/child/html.js", false));
+        assertEqualsResolver(this.rootResolver, root.getResource(ctx, null, "/", EMPTY_PARAMS, false));
+        assertEqualsResolver(this.rootResolver, root.getResource(ctx, null, "/rootel/sddsf/sdfsdf/html.js", EMPTY_PARAMS, false));
+        assertEqualsResolver(this.rootResolver, root.getResource(ctx, null, "/rootel/html.js", EMPTY_PARAMS, false));
+        assertEqualsResolver(secondResolver, root.getResource(ctx, null, "/rootel/child/html.js", EMPTY_PARAMS, false));
 
         root.addResourceProvider(firstPath, new ResourceProviderHandler(first, firstProps));
 
-        assertEqualsResolver(this.rootResolver, root.getResource(ctx, null, "/", false));
-        assertEqualsResolver(firstResolver, root.getResource(ctx, null, "/rootel/html.js", false));
-        assertEqualsResolver(secondResolver, root.getResource(ctx, null, "/rootel/child/html.js", false));
+        assertEqualsResolver(this.rootResolver, root.getResource(ctx, null, "/", EMPTY_PARAMS, false));
+        assertEqualsResolver(firstResolver, root.getResource(ctx, null, "/rootel/html.js", EMPTY_PARAMS, false));
+        assertEqualsResolver(secondResolver, root.getResource(ctx, null, "/rootel/child/html.js", EMPTY_PARAMS, false));
     }
 
     @Test public void testRemoveTheOnlyProvider() {
@@ -226,14 +229,14 @@ public class ResourceProviderEntryTest {
 
             e.addResourceProvider(path, new ResourceProviderHandler(p, props));
             {
-                final Resource r = e.getResource(ctx, null, path, false);
+                final Resource r = e.getResource(ctx, null, path, EMPTY_PARAMS, false);
                 assertEqualsResolver(resolver, r);
                 assertFalse(r instanceof SyntheticResource);
             }
 
             e.removeResourceProvider(path, new ResourceProviderHandler(p, props));
             {
-                final Resource r = e.getResource(ctx, null, path, false);
+                final Resource r = e.getResource(ctx, null, path, EMPTY_PARAMS, false);
                 // If our provider is indeed gone, we should get one of the following conditions
                 if(r == null) {
                     //fine