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