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