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 2016/02/18 11:52:59 UTC
svn commit: r1731044 - in /sling/trunk/contrib/extensions/sling-pipes/src:
main/java/org/apache/sling/pipes/FilterPipe.java
test/java/org/apache/sling/pipes/FilterPipeTest.java
Author: rombert
Date: Thu Feb 18 10:52:59 2016
New Revision: 1731044
URL: http://svn.apache.org/viewvc?rev=1731044&view=rev
Log:
SLING-5523 - filter pipe should be able to filter out resources that *have* a configured child
Submitted-By: Nicolas Peltier
Modified:
sling/trunk/contrib/extensions/sling-pipes/src/main/java/org/apache/sling/pipes/FilterPipe.java
sling/trunk/contrib/extensions/sling-pipes/src/test/java/org/apache/sling/pipes/FilterPipeTest.java
Modified: sling/trunk/contrib/extensions/sling-pipes/src/main/java/org/apache/sling/pipes/FilterPipe.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/sling-pipes/src/main/java/org/apache/sling/pipes/FilterPipe.java?rev=1731044&r1=1731043&r2=1731044&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/sling-pipes/src/main/java/org/apache/sling/pipes/FilterPipe.java (original)
+++ sling/trunk/contrib/extensions/sling-pipes/src/main/java/org/apache/sling/pipes/FilterPipe.java Thu Feb 18 10:52:59 2016
@@ -34,6 +34,7 @@ public class FilterPipe extends BasePipe
private static Logger logger = LoggerFactory.getLogger(FilterPipe.class);
public static final String RESOURCE_TYPE = "slingPipes/filter";
public static final String PREFIX_FILTER = "slingPipesFilter_";
+ 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";
@@ -91,7 +92,12 @@ public class FilterPipe extends BasePipe
public Iterator<Resource> getOutput() {
Resource resource = getInput();
if (resource != null){
- if (filterPasses(resource, getConfiguration())){
+ boolean not = properties.get(PN_NOT, false);
+ //the not does a exclusive or with the filter:
+ // - true filter with "true" not is false,
+ // - false filter with false not is false,
+ // - all the other combinations should pass
+ if (filterPasses(resource, getConfiguration()) ^ not){
logger.debug("filter passes for {}", resource.getPath());
return super.getOutput();
} else {
Modified: sling/trunk/contrib/extensions/sling-pipes/src/test/java/org/apache/sling/pipes/FilterPipeTest.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/sling-pipes/src/test/java/org/apache/sling/pipes/FilterPipeTest.java?rev=1731044&r1=1731043&r2=1731044&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/sling-pipes/src/test/java/org/apache/sling/pipes/FilterPipeTest.java (original)
+++ sling/trunk/contrib/extensions/sling-pipes/src/test/java/org/apache/sling/pipes/FilterPipeTest.java Thu Feb 18 10:52:59 2016
@@ -17,6 +17,8 @@
package org.apache.sling.pipes;
import org.apache.commons.lang3.StringUtils;
+import org.apache.sling.api.resource.ModifiableValueMap;
+import org.apache.sling.api.resource.PersistenceException;
import org.apache.sling.api.resource.Resource;
import org.apache.sling.api.resource.ValueMap;
import org.junit.Test;
@@ -84,6 +86,29 @@ public class FilterPipeTest extends Abst
Pipe pipe = plumber.getPipe(resource);
Iterator<Resource> resourceIterator = pipe.getOutput();
assertFalse("output has no resource...", resourceIterator.hasNext());
+ }
+
+ @Test
+ public void testTestPassesWithNot() throws PersistenceException {
+ Resource resource = context.resourceResolver().getResource(PATH_PIPE + "/" + NN_TEST_FAILS);
+ //we modify the pipe with the value NOT
+ resource.adaptTo(ModifiableValueMap.class).put(FilterPipe.PN_NOT, true);
+ context.resourceResolver().commit();
+
+ Pipe pipe = plumber.getPipe(resource);
+ Iterator<Resource> resourceIterator = pipe.getOutput();
+ assertTrue("output has one resource...", resourceIterator.hasNext());
+ }
+
+ @Test
+ public void testTestFailsWithNot() throws PersistenceException {
+ Resource resource = context.resourceResolver().getResource(PATH_PIPE + "/" + NN_TEST);
+ //we modify the pipe with the value NOT
+ resource.adaptTo(ModifiableValueMap.class).put(FilterPipe.PN_NOT, true);
+ context.resourceResolver().commit();
+ Pipe pipe = plumber.getPipe(resource);
+ Iterator<Resource> resourceIterator = pipe.getOutput();
+ assertFalse("output has no resource...", resourceIterator.hasNext());
}
}
\ No newline at end of file