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