You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by ro...@apache.org on 2017/11/07 09:58:52 UTC

[sling-org-apache-sling-resourcemerger] 12/24: SLING-2986 : Reimplement listChildren and make MergedResource immutable

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 6c958101e21e58de72b7030e0fc3210e935a1dd4
Author: Carsten Ziegeler <cz...@apache.org>
AuthorDate: Thu Jan 30 08:11:18 2014 +0000

    SLING-2986 : Reimplement listChildren and make MergedResource immutable
    
    git-svn-id: https://svn.apache.org/repos/asf/sling/trunk/contrib/extensions/resourcemerger@1562716 13f79535-47bb-0310-9956-ffa450edef68
---
 .../sling/resourcemerger/impl/MergedResource.java  |  7 --
 .../impl/MergedResourceProvider.java               | 98 +++++++---------------
 2 files changed, 28 insertions(+), 77 deletions(-)

diff --git a/src/main/java/org/apache/sling/resourcemerger/impl/MergedResource.java b/src/main/java/org/apache/sling/resourcemerger/impl/MergedResource.java
index 4fc8d7a..df1da1a 100644
--- a/src/main/java/org/apache/sling/resourcemerger/impl/MergedResource.java
+++ b/src/main/java/org/apache/sling/resourcemerger/impl/MergedResource.java
@@ -90,13 +90,6 @@ public class MergedResource extends AbstractResource {
     /**
      * {@inheritDoc}
      */
-    public void addMappedResource(final String path) {
-        mappedResources.add(path);
-    }
-
-    /**
-     * {@inheritDoc}
-     */
     public Iterable<String> getMappedResources() {
         return mappedResources;
     }
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 d0c3083..53d0243 100644
--- a/src/main/java/org/apache/sling/resourcemerger/impl/MergedResourceProvider.java
+++ b/src/main/java/org/apache/sling/resourcemerger/impl/MergedResourceProvider.java
@@ -19,7 +19,6 @@
 package org.apache.sling.resourcemerger.impl;
 
 import java.util.ArrayList;
-import java.util.Arrays;
 import java.util.Iterator;
 import java.util.List;
 
@@ -54,7 +53,6 @@ public class MergedResourceProvider implements ResourceProvider {
      * {@inheritDoc}
      */
     public Resource getResource(final ResourceResolver resolver, final String path) {
-
         if (resolver.getSearchPath() != null) {
             final String relativePath = getRelativePath(path);
 
@@ -77,7 +75,7 @@ public class MergedResourceProvider implements ResourceProvider {
                             final String[] childrenToHideArray = parentProps.get(MergedResourceConstants.PN_HIDE_CHILDREN, String[].class);
                             if ( childrenToHideArray != null ) {
                                 for(final String name : childrenToHideArray ) {
-                                    if ( name.equals(baseRes.getName()) ) {
+                                    if ( name.equals(baseRes.getName()) || name.equals("*") ) {
                                         hidden = true;
                                         break;
                                     }
@@ -108,85 +106,45 @@ public class MergedResourceProvider implements ResourceProvider {
      * {@inheritDoc}
      */
     public Iterator<Resource> listChildren(final Resource resource) {
-        if (resource instanceof MergedResource) {
-            final MergedResource mergedResource = (MergedResource) resource;
-            final ResourceResolver resolver = mergedResource.getResourceResolver();
-            final List<Resource> children = new ArrayList<Resource>();
-
-            for (final String mappedResourcePath : mergedResource.getMappedResources()) {
-                final Resource mappedResource = resolver.getResource(mappedResourcePath);
+        final ResourceResolver resolver = resource.getResourceResolver();
 
-                // Check if the resource exists
-                if (mappedResource == null) {
-                    continue;
-                }
-
-                // Check if some previously defined children have to be ignored
-                final ValueMap mappedResourceProps = mappedResource.adaptTo(ValueMap.class);
-                final String[] childrenToHideArray = mappedResourceProps.get(MergedResourceConstants.PN_HIDE_CHILDREN, String[].class);
-                if ( childrenToHideArray != null ) {
-                    final List<String> childrenToHide = Arrays.asList(childrenToHideArray);
-                    if ( childrenToHide.contains("*") ) {
-                        // Clear current children list
-                        children.clear();
-                    } else {
-                        // Go through current children in order to hide them individually
-                        final Iterator<Resource> it = children.iterator();
-                        while (it.hasNext()) {
-                            if (childrenToHide.contains(it.next().getName())) {
-                                it.remove();
-                            }
-                        }
-                    }
-                }
+        if (resolver.getSearchPath() != null) {
+            final String relativePath = getRelativePath(resource.getPath());
 
-                // Browse children of current physical resource
-                for (final Resource child : mappedResource.getChildren()) {
-                    final String childRelativePath = mergedResource.getRelativePath() + "/" + child.getName();
-
-                    if (ResourceUtil.getValueMap(child).get(MergedResourceConstants.PN_HIDE_RESOURCE, Boolean.FALSE)) {
-                        // Child resource has to be hidden
-                        children.remove(new MergedResource(resolver, mergeRootPath, childRelativePath));
-
-                    } else {
-                        // Check if the child resource already exists in the children list
-                        MergedResource mergedResChild = new MergedResource(resolver, mergeRootPath, childRelativePath);
-                        int mergedResChildIndex = -1;
-                        if (children.contains(mergedResChild)) {
-                            // Get current index of the merged resource's child
-                            mergedResChildIndex = children.indexOf(mergedResChild);
-                            mergedResChild = (MergedResource) children.get(mergedResChildIndex);
+            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 ) {
+                        final String rsrcName = baseResource.getName();
+                        if ( !names.contains(rsrcName) ) {
+                            names.add(rsrcName);
                         }
-                        // Add a new mapped resource to the merged resource
-                        mergedResChild.addMappedResource(child.getPath());
-                        boolean mergedResChildExists = mergedResChildIndex > -1;
-
                         // Check if children need reordering
                         int orderBeforeIndex = -1;
-                        String orderBefore = ResourceUtil.getValueMap(child).get(MergedResourceConstants.PN_ORDER_BEFORE, String.class);
-                        if (orderBefore != null && !orderBefore.equals(mergedResChild.getName())) {
-                            // Get a dummy merged resource just to know the index of that merged resource
-                            MergedResource orderBeforeRes = new MergedResource(resolver, mergeRootPath, mergedResource.getRelativePath() + "/" + orderBefore);
-                            if (children.contains(orderBeforeRes)) {
-                                orderBeforeIndex = children.indexOf(orderBeforeRes);
-                            }
+                        final ValueMap vm = ResourceUtil.getValueMap(baseResource);
+                        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) {
-                            // Add merged resource's child at the right position
-                            children.add(orderBeforeIndex, mergedResChild);
-                            if (mergedResChildExists) {
-                                children.remove(mergedResChildIndex > orderBeforeIndex ? ++mergedResChildIndex : mergedResChildIndex);
-                            }
-                        } else if (!mergedResChildExists) {
-                            // Only add the merged resource's child if it did not exist yet
-                            children.add(mergedResChild);
+                            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);
+                    }
+                }
+                return children.iterator();
             }
-
-            return children.iterator();
         }
 
         // Return null for resources that aren't a MergedResource

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