This is an automated email from the ASF dual-hosted git repository.

rombert pushed a commit to annotated tag org.apache.sling.resourcemerger-1.0.0
in repository 
https://gitbox.apache.org/repos/asf/sling-org-apache-sling-resourcemerger.git

commit 861888312df60fa38490cbef5842cc4e6a14335c
Author: Carsten Ziegeler <cziege...@apache.org>
AuthorDate: Thu Jan 30 10:15:31 2014 +0000

    SLING-2986 : Remove unneeded null checks for search path, add test for 
property merging
    
    git-svn-id: 
https://svn.apache.org/repos/asf/sling/trunk/contrib/extensions/resourcemerger@1562762
 13f79535-47bb-0310-9956-ffa450edef68
---
 .../impl/MergedResourceProvider.java               | 137 ++++++++---------
 .../impl/MergedResourceProviderTest.java           | 166 ++++++++++++++++++++-
 2 files changed, 228 insertions(+), 75 deletions(-)

diff --git 
a/src/main/java/org/apache/sling/resourcemerger/impl/MergedResourceProvider.java
 
b/src/main/java/org/apache/sling/resourcemerger/impl/MergedResourceProvider.java
index 5ce1d25..a152c2f 100644
--- 
a/src/main/java/org/apache/sling/resourcemerger/impl/MergedResourceProvider.java
+++ 
b/src/main/java/org/apache/sling/resourcemerger/impl/MergedResourceProvider.java
@@ -53,52 +53,49 @@ public class MergedResourceProvider implements 
ResourceProvider {
      * {@inheritDoc}
      */
     public Resource getResource(final ResourceResolver resolver, final String 
path) {
-        if (resolver.getSearchPath() != null) {
-            final String relativePath = getRelativePath(path);
-
-            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(basePath + 
"/" + relativePath);
-                    if (baseRes != null) {
-                        // check if resource is hidden
-                        boolean hidden = false;
-                        final ValueMap props = 
ResourceUtil.getValueMap(baseRes);
-                        if ( 
props.get(MergedResourceConstants.PN_HIDE_RESOURCE, Boolean.FALSE) ) {
-                            hidden = true;
-                        }
-                        if ( !hidden ) {
-                            // check parent
-                            final ValueMap parentProps = 
ResourceUtil.getValueMap(baseRes.getParent());
-                            final String[] childrenToHideArray = 
parentProps.get(MergedResourceConstants.PN_HIDE_CHILDREN, String[].class);
-                            if ( childrenToHideArray != null ) {
-                                for(final String name : childrenToHideArray ) {
-                                    if ( name.equals(baseRes.getName()) || 
name.equals("*") ) {
-                                        hidden = true;
-                                        break;
-                                    }
+        final String relativePath = getRelativePath(path);
+
+        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(basePath + "/" + 
relativePath);
+                if (baseRes != null) {
+                    // check if resource is hidden
+                    boolean hidden = false;
+                    final ValueMap props = ResourceUtil.getValueMap(baseRes);
+                    if ( props.get(MergedResourceConstants.PN_HIDE_RESOURCE, 
Boolean.FALSE) ) {
+                        hidden = true;
+                    }
+                    if ( !hidden ) {
+                        // check parent
+                        final ValueMap parentProps = 
ResourceUtil.getValueMap(baseRes.getParent());
+                        final String[] childrenToHideArray = 
parentProps.get(MergedResourceConstants.PN_HIDE_CHILDREN, String[].class);
+                        if ( childrenToHideArray != null ) {
+                            for(final String name : childrenToHideArray ) {
+                                if ( name.equals(baseRes.getName()) || 
name.equals("*") ) {
+                                    hidden = true;
+                                    break;
                                 }
                             }
                         }
-                        if ( !hidden ) {
-                            // Physical resource exists, add it to the list of 
mapped resources
-                            mappedResources.add(0, baseRes.getPath());
-                        } else {
-                            mappedResources.clear();
-                        }
+                    }
+                    if ( !hidden ) {
+                        // Physical resource exists, add it to the list of 
mapped resources
+                        mappedResources.add(0, baseRes.getPath());
+                    } else {
+                        mappedResources.clear();
                     }
                 }
+            }
 
-                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);
             }
         }
 
-        // Either base paths were not defined, or the resource does not exist 
in any of them
         return null;
     }
 
@@ -108,48 +105,45 @@ public class MergedResourceProvider implements 
ResourceProvider {
     public Iterator<Resource> listChildren(final Resource resource) {
         final ResourceResolver resolver = resource.getResourceResolver();
 
-        if (resolver.getSearchPath() != null) {
-            final String relativePath = getRelativePath(resource.getPath());
-
-            if ( relativePath != null ) {
-                final List<String> names = new ArrayList<String>();
-                // Loop over provided base paths
-                for (final String basePath : resolver.getSearchPath()) {
-                    final Resource baseResource = 
resolver.getResource(basePath + "/" + relativePath);
-                    if ( baseResource != null ) {
-                        for(final Resource child : baseResource.getChildren()) 
{
-                            final String rsrcName = child.getName();
-                            if ( !names.contains(rsrcName) ) {
-                                names.add(rsrcName);
-                            }
-                            // Check if children need reordering
-                            int orderBeforeIndex = -1;
-                            final ValueMap vm = 
ResourceUtil.getValueMap(child);
-                            final String orderBefore = 
vm.get(MergedResourceConstants.PN_ORDER_BEFORE, String.class);
-                            if (orderBefore != null && 
!orderBefore.equals(rsrcName)) {
-                                // search entry
-                                orderBeforeIndex = names.indexOf(orderBefore);
-                            }
+        final String relativePath = getRelativePath(resource.getPath());
+
+        if ( relativePath != null ) {
+            final List<String> names = new ArrayList<String>();
+            // Loop over provided base paths
+            for (final String basePath : resolver.getSearchPath()) {
+                final Resource baseResource = resolver.getResource(basePath + 
"/" + relativePath);
+                if ( baseResource != null ) {
+                    for(final Resource child : baseResource.getChildren()) {
+                        final String rsrcName = child.getName();
+                        if ( !names.contains(rsrcName) ) {
+                            names.add(rsrcName);
+                        }
+                        // Check if children need reordering
+                        int orderBeforeIndex = -1;
+                        final ValueMap vm = ResourceUtil.getValueMap(child);
+                        final String orderBefore = 
vm.get(MergedResourceConstants.PN_ORDER_BEFORE, String.class);
+                        if (orderBefore != null && 
!orderBefore.equals(rsrcName)) {
+                            // search entry
+                            orderBeforeIndex = names.indexOf(orderBefore);
+                        }
 
-                            if (orderBeforeIndex > -1) {
-                                names.add(orderBeforeIndex, rsrcName);
-                                names.remove(names.size() - 1);
-                            }
+                        if (orderBeforeIndex > -1) {
+                            names.add(orderBeforeIndex, rsrcName);
+                            names.remove(names.size() - 1);
                         }
                     }
                 }
-                final List<Resource> children = new ArrayList<Resource>();
-                for(final String name : names) {
-                    final Resource mergedResource = this.getResource(resolver, 
resource.getPath() + "/" + name);
-                    if ( mergedResource != null ) {
-                        children.add(mergedResource);
-                    }
+            }
+            final List<Resource> children = new ArrayList<Resource>();
+            for(final String name : names) {
+                final Resource mergedResource = this.getResource(resolver, 
resource.getPath() + "/" + name);
+                if ( mergedResource != null ) {
+                    children.add(mergedResource);
                 }
-                return children.iterator();
             }
+            return children.iterator();
         }
 
-        // Return null for resources that aren't a MergedResource
         return null;
     }
 
@@ -170,5 +164,4 @@ public class MergedResourceProvider implements 
ResourceProvider {
         }
         return null;
     }
-
 }
diff --git 
a/src/test/java/org/apache/sling/resourcemerger/impl/MergedResourceProviderTest.java
 
b/src/test/java/org/apache/sling/resourcemerger/impl/MergedResourceProviderTest.java
index bde3a55..e4e4185 100644
--- 
a/src/test/java/org/apache/sling/resourcemerger/impl/MergedResourceProviderTest.java
+++ 
b/src/test/java/org/apache/sling/resourcemerger/impl/MergedResourceProviderTest.java
@@ -23,12 +23,19 @@ import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertTrue;
 
 import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.Iterator;
 import java.util.List;
+import java.util.Map;
 
+import javax.servlet.http.HttpServletRequest;
+
+import org.apache.sling.api.resource.LoginException;
+import org.apache.sling.api.resource.PersistenceException;
 import org.apache.sling.api.resource.Resource;
 import org.apache.sling.api.resource.ResourceResolver;
 import org.apache.sling.api.resource.ResourceResolverFactory;
+import org.apache.sling.api.resource.ValueMap;
 import org.apache.sling.testing.resourceresolver.MockResourceResolverFactory;
 import org.junit.Before;
 import org.junit.Test;
@@ -41,7 +48,7 @@ public class MergedResourceProviderTest {
 
     @Before public void setup() throws Exception {
         final ResourceResolverFactory factory = new 
MockResourceResolverFactory();
-        this.resolver = factory.getAdministrativeResourceResolver(null);
+        this.resolver = new 
ResourceResolverWrapper(factory.getAdministrativeResourceResolver(null));
         final Resource root = this.resolver.getResource("/");
         final Resource apps = this.resolver.create(root, "apps", null);
         final Resource libs = this.resolver.create(root, "libs", null);
@@ -49,8 +56,8 @@ public class MergedResourceProviderTest {
         final Resource appsA = this.resolver.create(apps, "a", null);
         final Resource libsA = this.resolver.create(libs, "a", null);
 
-        this.resolver.create(appsA, "1", null);
-        this.resolver.create(libsA, "1", null);
+        this.resolver.create(appsA, "1", new map().p("a", "1").p("b", "2"));
+        this.resolver.create(libsA, "1", new map().p("a", "5").p("c", "2"));
         this.resolver.create(appsA, "2", null);
         this.resolver.create(libsA, "2", null);
         this.resolver.create(appsA, "X", null);
@@ -76,4 +83,157 @@ public class MergedResourceProviderTest {
         assertTrue(names.contains("Y"));
         assertTrue(names.contains("X"));
     }
+
+    @Test public void testProperties() {
+        final Resource rsrcA1 = this.provider.getResource(this.resolver, 
"/merged/a/1");
+        final ValueMap vm = rsrcA1.adaptTo(ValueMap.class);
+        assertNotNull(vm);
+        assertEquals(3, vm.size());
+        assertEquals("1", vm.get("a"));
+        assertEquals("2", vm.get("b"));
+        assertEquals("2", vm.get("c"));
+    }
+
+    protected static final class map extends HashMap<String, Object> {
+
+        private static final long serialVersionUID = 1L;
+
+        public map p(final String name, final String value) {
+            this.put(name, value);
+            return this;
+        }
+    }
+
+    /**
+     *  We have to use a wrapper until Sling testing resource resolver mock 
0.2.0 is out
+     *  Fixing SLING-3354
+     */
+    public static class ResourceResolverWrapper implements ResourceResolver {
+
+        private final ResourceResolver resolver;
+
+        public ResourceResolverWrapper(final ResourceResolver r) {
+            this.resolver = r;
+        }
+
+        public <AdapterType> AdapterType adaptTo(Class<AdapterType> type) {
+            return resolver.adaptTo(type);
+        }
+
+        public Resource resolve(HttpServletRequest request, String absPath) {
+            return resolver.resolve(request, absPath);
+        }
+
+        public Resource resolve(String absPath) {
+            return resolver.resolve(absPath);
+        }
+
+        public Resource resolve(HttpServletRequest request) {
+            return resolver.resolve(request);
+        }
+
+        public String map(String resourcePath) {
+            return resolver.map(resourcePath);
+        }
+
+        public String map(HttpServletRequest request, String resourcePath) {
+            return resolver.map(request, resourcePath);
+        }
+
+        public Resource getResource(String path) {
+            return resolver.getResource(path);
+        }
+
+        public Resource getResource(Resource base, String path) {
+            return resolver.getResource(base, path);
+        }
+
+        public String[] getSearchPath() {
+            return new String[] {"/apps", "/libs"};
+        }
+
+        public Iterator<Resource> listChildren(Resource parent) {
+            return resolver.listChildren(parent);
+        }
+
+        public Iterable<Resource> getChildren(Resource parent) {
+            return resolver.getChildren(parent);
+        }
+
+        public Iterator<Resource> findResources(String query, String language) 
{
+            return resolver.findResources(query, language);
+        }
+
+        public Iterator<Map<String, Object>> queryResources(String query,
+                String language) {
+            return resolver.queryResources(query, language);
+        }
+
+        public boolean hasChildren(Resource resource) {
+            return resolver.hasChildren(resource);
+        }
+
+        public ResourceResolver clone(Map<String, Object> authenticationInfo)
+                throws LoginException {
+            return resolver.clone(authenticationInfo);
+        }
+
+        public boolean isLive() {
+            return resolver.isLive();
+        }
+
+        public void close() {
+            resolver.close();
+        }
+
+        public String getUserID() {
+            return resolver.getUserID();
+        }
+
+        public Iterator<String> getAttributeNames() {
+            return resolver.getAttributeNames();
+        }
+
+        public Object getAttribute(String name) {
+            return resolver.getAttribute(name);
+        }
+
+        public void delete(Resource resource) throws PersistenceException {
+            resolver.delete(resource);
+        }
+
+        public Resource create(Resource parent, String name,
+                Map<String, Object> properties) throws PersistenceException {
+            return resolver.create(parent, name, properties);
+        }
+
+        public void revert() {
+            resolver.revert();
+        }
+
+        public void commit() throws PersistenceException {
+            resolver.commit();
+        }
+
+        public boolean hasChanges() {
+            return resolver.hasChanges();
+        }
+
+        public String getParentResourceType(Resource resource) {
+            return resolver.getParentResourceType(resource);
+        }
+
+        public String getParentResourceType(String resourceType) {
+            return resolver.getParentResourceType(resourceType);
+        }
+
+        public boolean isResourceType(Resource resource, String resourceType) {
+            return resolver.isResourceType(resource, resourceType);
+        }
+
+        public void refresh() {
+            resolver.refresh();
+        }
+
+    }
 }

-- 
To stop receiving notification emails like this one, please contact
"commits@sling.apache.org" <commits@sling.apache.org>.

Reply via email to