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);
+        }
     }
-
 }