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 2014/01/29 15:28:08 UTC
svn commit: r1562454 - in /sling/trunk/contrib/extensions/resourcemerger: ./
src/main/java/org/apache/sling/resourcemerger/impl/
Author: cziegeler
Date: Wed Jan 29 14:28:08 2014
New Revision: 1562454
URL: http://svn.apache.org/r1562454
Log:
SLING-2986 : Fix path handling, especially when the root node is requested
Modified:
sling/trunk/contrib/extensions/resourcemerger/pom.xml
sling/trunk/contrib/extensions/resourcemerger/src/main/java/org/apache/sling/resourcemerger/impl/MergedResource.java
sling/trunk/contrib/extensions/resourcemerger/src/main/java/org/apache/sling/resourcemerger/impl/MergedResourceProvider.java
sling/trunk/contrib/extensions/resourcemerger/src/main/java/org/apache/sling/resourcemerger/impl/MergedResourceProviderFactory.java
Modified: sling/trunk/contrib/extensions/resourcemerger/pom.xml
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/resourcemerger/pom.xml?rev=1562454&r1=1562453&r2=1562454&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/resourcemerger/pom.xml (original)
+++ sling/trunk/contrib/extensions/resourcemerger/pom.xml Wed Jan 29 14:28:08 2014
@@ -83,26 +83,5 @@
<version>2.2.0</version>
<scope>provided</scope>
</dependency>
-
- <dependency>
- <groupId>org.apache.commons</groupId>
- <artifactId>commons-lang3</artifactId>
- <version>3.0.1</version>
- <scope>provided</scope>
- </dependency>
-
- <!-- Test dependencies -->
- <dependency>
- <groupId>org.apache.sling</groupId>
- <artifactId>org.apache.sling.commons.testing</artifactId>
- <version>2.0.14</version>
- <scope>test</scope>
- </dependency>
- <dependency>
- <groupId>javax.jcr</groupId>
- <artifactId>jcr</artifactId>
- <version>2.0</version>
- <scope>test</scope>
- </dependency>
</dependencies>
</project>
Modified: sling/trunk/contrib/extensions/resourcemerger/src/main/java/org/apache/sling/resourcemerger/impl/MergedResource.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/resourcemerger/src/main/java/org/apache/sling/resourcemerger/impl/MergedResource.java?rev=1562454&r1=1562453&r2=1562454&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/resourcemerger/src/main/java/org/apache/sling/resourcemerger/impl/MergedResource.java (original)
+++ sling/trunk/contrib/extensions/resourcemerger/src/main/java/org/apache/sling/resourcemerger/impl/MergedResource.java Wed Jan 29 14:28:08 2014
@@ -19,14 +19,12 @@
package org.apache.sling.resourcemerger.impl;
import java.util.ArrayList;
-import java.util.Iterator;
import java.util.List;
import org.apache.sling.api.resource.AbstractResource;
import org.apache.sling.api.resource.Resource;
import org.apache.sling.api.resource.ResourceMetadata;
import org.apache.sling.api.resource.ResourceResolver;
-import org.apache.sling.api.resource.ResourceUtil;
import org.apache.sling.api.resource.ValueMap;
/**
@@ -35,10 +33,12 @@ import org.apache.sling.api.resource.Val
public class MergedResource extends AbstractResource {
private final ResourceResolver resolver;
- private final String mergeRootPath;
+ private final String path;
private final String relativePath;
private final List<String> mappedResources = new ArrayList<String>();
+ private final ResourceMetadata metadata = new ResourceMetadata();
+
/**
* Constructor
*
@@ -49,9 +49,7 @@ public class MergedResource extends Abst
MergedResource(final ResourceResolver resolver,
final String mergeRootPath,
final String relativePath) {
- this.resolver = resolver;
- this.mergeRootPath = mergeRootPath;
- this.relativePath = relativePath;
+ this(resolver, mergeRootPath, relativePath, null);
}
/**
@@ -67,9 +65,14 @@ public class MergedResource extends Abst
final String relativePath,
final List<String> mappedResources) {
this.resolver = resolver;
- this.mergeRootPath = mergeRootPath;
- this.relativePath = relativePath;
- this.mappedResources.addAll(mappedResources);
+ this.path = (relativePath.length() == 0 ? mergeRootPath : mergeRootPath + "/" + relativePath);
+ this.relativePath = (relativePath.length() == 0 ? "/" : relativePath);
+ if ( mappedResources != null ) {
+ this.mappedResources.addAll(mappedResources);
+ }
+ metadata.put(ResourceMetadata.RESOLUTION_PATH, getPath());
+ metadata.put("sling.mergedResource", true);
+ metadata.put("sling.mappedResources", mappedResources.toArray(new String[mappedResources.size()]));
}
@@ -100,22 +103,14 @@ public class MergedResource extends Abst
* {@inheritDoc}
*/
public String getPath() {
- return ResourceUtil.normalize(mergeRootPath + "/" + relativePath);
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
- public Iterator<Resource> listChildren() {
- return resolver.listChildren(this);
+ return this.path;
}
/**
* {@inheritDoc}
*/
public String getResourceType() {
- return relativePath;
+ return this.relativePath;
}
/**
@@ -130,10 +125,6 @@ public class MergedResource extends Abst
* {@inheritDoc}
*/
public ResourceMetadata getResourceMetadata() {
- ResourceMetadata metadata = new ResourceMetadata();
- metadata.put(ResourceMetadata.RESOLUTION_PATH, getPath());
- metadata.put("sling.mergedResource", true);
- metadata.put("sling.mappedResources", mappedResources.toArray(new String[mappedResources.size()]));
return metadata;
}
Modified: sling/trunk/contrib/extensions/resourcemerger/src/main/java/org/apache/sling/resourcemerger/impl/MergedResourceProvider.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/resourcemerger/src/main/java/org/apache/sling/resourcemerger/impl/MergedResourceProvider.java?rev=1562454&r1=1562453&r2=1562454&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/resourcemerger/src/main/java/org/apache/sling/resourcemerger/impl/MergedResourceProvider.java (original)
+++ sling/trunk/contrib/extensions/resourcemerger/src/main/java/org/apache/sling/resourcemerger/impl/MergedResourceProvider.java Wed Jan 29 14:28:08 2014
@@ -25,7 +25,6 @@ import java.util.List;
import javax.servlet.http.HttpServletRequest;
-import org.apache.commons.lang3.StringUtils;
import org.apache.sling.api.resource.Resource;
import org.apache.sling.api.resource.ResourceProvider;
import org.apache.sling.api.resource.ResourceResolver;
@@ -55,24 +54,26 @@ public class MergedResourceProvider impl
* {@inheritDoc}
*/
public Resource getResource(final ResourceResolver resolver, final String path) {
- List<String> mappedResources = new ArrayList<String>();
if (resolver.getSearchPath() != null) {
final String relativePath = getRelativePath(path);
- // Loop over provided base paths
- for (final String basePath : resolver.getSearchPath()) {
- // Try to get the corresponding physical resource for this base path
- final Resource baseRes = resolver.getResource(ResourceUtil.normalize(basePath + "/" + relativePath));
- if (baseRes != null) {
- // Physical resource exists, add it to the list of mapped resources
- mappedResources.add(0, baseRes.getPath());
+ if ( relativePath != null ) {
+ final List<String> mappedResources = new ArrayList<String>();
+ // Loop over provided base paths
+ for (final String basePath : resolver.getSearchPath()) {
+ // Try to get the corresponding physical resource for this base path
+ final Resource baseRes = resolver.getResource(ResourceUtil.normalize(basePath + "/" + relativePath));
+ if (baseRes != null) {
+ // Physical resource exists, add it to the list of mapped resources
+ mappedResources.add(0, baseRes.getPath());
+ }
}
- }
- if (!mappedResources.isEmpty()) {
- // Create a new merged resource based on the list of mapped physical resources
- return new MergedResource(resolver, mergeRootPath, relativePath, mappedResources);
+ if (!mappedResources.isEmpty()) {
+ // Create a new merged resource based on the list of mapped physical resources
+ return new MergedResource(resolver, mergeRootPath, relativePath, mappedResources);
+ }
}
}
@@ -179,7 +180,15 @@ public class MergedResourceProvider impl
* @return Relative path
*/
private String getRelativePath(String path) {
- return StringUtils.removeStart(path, mergeRootPath);
+ if ( path.startsWith(mergeRootPath) ) {
+ path = path.substring(mergeRootPath.length());
+ if ( path.length() == 0 ) {
+ return path;
+ } else if ( path.charAt(0) == '/' ) {
+ return path.substring(1);
+ }
+ }
+ return null;
}
}
Modified: sling/trunk/contrib/extensions/resourcemerger/src/main/java/org/apache/sling/resourcemerger/impl/MergedResourceProviderFactory.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/resourcemerger/src/main/java/org/apache/sling/resourcemerger/impl/MergedResourceProviderFactory.java?rev=1562454&r1=1562453&r2=1562454&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/resourcemerger/src/main/java/org/apache/sling/resourcemerger/impl/MergedResourceProviderFactory.java (original)
+++ sling/trunk/contrib/extensions/resourcemerger/src/main/java/org/apache/sling/resourcemerger/impl/MergedResourceProviderFactory.java Wed Jan 29 14:28:08 2014
@@ -68,6 +68,8 @@ public class MergedResourceProviderFacto
@Activate
protected void configure(final Map<String, Object> properties) {
mergeRootPath = PropertiesUtil.toString(properties.get(ResourceProvider.ROOTS), DEFAULT_ROOT);
+ if ( mergeRootPath.endsWith("/") ) {
+ mergeRootPath = mergeRootPath.substring(mergeRootPath.length() - 1);
+ }
}
-
}