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

npeltier pushed a commit to branch master
in repository 
https://gitbox.apache.org/repos/asf/sling-org-apache-sling-pipes.git


The following commit(s) were added to refs/heads/master by this push:
     new 5920120  SLING-9541 children count option for filter pipe
5920120 is described below

commit 592012006a19f2f4ea49051109f77871339263ad
Author: Nicolas Peltier <[email protected]>
AuthorDate: Mon Jun 22 17:45:42 2020 +0200

    SLING-9541 children count option for filter pipe
---
 src/main/java/org/apache/sling/pipes/internal/FilterPipe.java    | 9 +++++++++
 .../java/org/apache/sling/pipes/internal/FilterPipeTest.java     | 9 +++++++++
 2 files changed, 18 insertions(+)

diff --git a/src/main/java/org/apache/sling/pipes/internal/FilterPipe.java 
b/src/main/java/org/apache/sling/pipes/internal/FilterPipe.java
index 8b7ff47..3c7f70a 100644
--- a/src/main/java/org/apache/sling/pipes/internal/FilterPipe.java
+++ b/src/main/java/org/apache/sling/pipes/internal/FilterPipe.java
@@ -16,6 +16,7 @@
  */
 package org.apache.sling.pipes.internal;
 
+import org.apache.commons.collections.IteratorUtils;
 import org.apache.sling.api.resource.Resource;
 import org.apache.sling.api.resource.ValueMap;
 import org.apache.sling.pipes.BasePipe;
@@ -41,6 +42,8 @@ public class FilterPipe extends BasePipe {
     public static final String PN_NOT = PREFIX_FILTER + "not";
     public static final String PN_NOCHILDREN = PREFIX_FILTER + "noChildren";
     public static final String PN_TEST = PREFIX_FILTER + "test";
+    public static final String PN_INJECTCHILDRENCOUNT = PREFIX_FILTER + 
"injectChildrenCount";
+    public static final String BINDING_CHILDREN_COUNT = "childrenCount";
 
     public FilterPipe(Plumber plumber, Resource resource, PipeBindings 
upperBindings) throws Exception {
         super(plumber, resource, upperBindings);
@@ -69,6 +72,12 @@ public class FilterPipe extends BasePipe {
     boolean filterPasses(Resource currentResource, Resource filterResource) 
throws ScriptException, RepositoryException {
         ValueMap current = currentResource.adaptTo(ValueMap.class);
         ValueMap filter = filterResource.adaptTo(ValueMap.class);
+        boolean injectChildrenCount = (Boolean) 
bindings.instantiateObject(filter.get(PN_INJECTCHILDRENCOUNT, "${false}"));
+        if (injectChildrenCount) {
+            Node currentNode = currentResource.adaptTo(Node.class);
+            int childrenCount = 
IteratorUtils.toList(currentNode.getNodes()).size();
+            bindings.addBinding(BINDING_CHILDREN_COUNT, childrenCount);
+        }
         if (propertiesPass(current, filter)) {
             Node currentNode = currentResource.adaptTo(Node.class);
             boolean noChildren = (Boolean) 
bindings.instantiateObject(filter.get(PN_NOCHILDREN, "${false}"));
diff --git a/src/test/java/org/apache/sling/pipes/internal/FilterPipeTest.java 
b/src/test/java/org/apache/sling/pipes/internal/FilterPipeTest.java
index 5f16ba2..5c22e43 100644
--- a/src/test/java/org/apache/sling/pipes/internal/FilterPipeTest.java
+++ b/src/test/java/org/apache/sling/pipes/internal/FilterPipeTest.java
@@ -115,4 +115,13 @@ public class FilterPipeTest extends AbstractPipeTest {
                 
.grep("jcr:description",".*https://en.wikipedia.org.*";).run().getCurrentPathSet();
         assertEquals("there should be an item", 1, outputs.size());
     }
+
+    @Test
+    public void testChildrenCount() throws Exception {
+        Collection<String> outputs = 
plumber.newPipe(context.resourceResolver())
+            .echo(PATH_APPLE)
+            
.grep("slingPipesFilter_injectChildrenCount","${true}","slingPipesFilter_test","${childrenCount==1}")
+            .run().getCurrentPathSet();
+        assertEquals("there should be one output", 1, outputs.size());
+    }
 }

Reply via email to