SLING-7994 add skipExecution to reference pipes
diff --git a/src/main/java/org/apache/sling/pipes/internal/NotPipe.java b/src/main/java/org/apache/sling/pipes/internal/NotPipe.java
index 892134a..36cc23e 100644
--- a/src/main/java/org/apache/sling/pipes/internal/NotPipe.java
+++ b/src/main/java/org/apache/sling/pipes/internal/NotPipe.java
@@ -36,7 +36,7 @@
}
@Override
- protected Iterator<Resource> computeSubpipesOutput() {
+ protected Iterator<Resource> computeReferredOutput() {
if (reference.getOutput().hasNext()){
return EMPTY_ITERATOR;
}
diff --git a/src/main/java/org/apache/sling/pipes/internal/ReferencePipe.java b/src/main/java/org/apache/sling/pipes/internal/ReferencePipe.java
index 71f9e32..ae780c0 100644
--- a/src/main/java/org/apache/sling/pipes/internal/ReferencePipe.java
+++ b/src/main/java/org/apache/sling/pipes/internal/ReferencePipe.java
@@ -34,6 +34,7 @@
private static final Logger log = LoggerFactory.getLogger(ReferencePipe.class);
public static final String RESOURCE_TYPE = "slingPipes/reference";
+ static final String PN_SKIPEXECUTION = "skipExecution";
protected Pipe reference;
@@ -67,10 +68,31 @@
}
}
- @Override
- protected Iterator<Resource> computeSubpipesOutput() {
+ /**
+ * @return boolean flag mentionning wether we could skip the execution of that pipe
+ */
+ boolean shouldBeSkipped() {
+ String skip = properties.get(PN_SKIPEXECUTION, String.class);
+ if (StringUtils.isNotBlank(skip)) {
+ Object object = bindings.instantiateObject(skip);
+ if (object instanceof Boolean) {
+ return (Boolean)object;
+ }
+ }
+ return false;
+ }
+
+ protected Iterator<Resource> computeReferredOutput() {
buildChildren();
log.debug("getting {} output", reference);
return reference.getOutput();
}
+
+ @Override
+ protected Iterator<Resource> computeSubpipesOutput() {
+ if (! shouldBeSkipped()) {
+ return computeReferredOutput();
+ }
+ return EMPTY_ITERATOR;
+ }
}
\ No newline at end of file
diff --git a/src/test/java/org/apache/sling/pipes/internal/ReferencePipeTest.java b/src/test/java/org/apache/sling/pipes/internal/ReferencePipeTest.java
index 7d95805..a20c64f 100644
--- a/src/test/java/org/apache/sling/pipes/internal/ReferencePipeTest.java
+++ b/src/test/java/org/apache/sling/pipes/internal/ReferencePipeTest.java
@@ -16,6 +16,7 @@
*/
package org.apache.sling.pipes.internal;
+import org.apache.sling.api.resource.PersistenceException;
import org.apache.sling.api.resource.ResourceUtil;
import org.apache.sling.pipes.AbstractPipeTest;
import org.apache.sling.pipes.ExecutionResult;
@@ -61,6 +62,19 @@
testOneResource(PATH_PIPE + "/isAppleWormy", PATH_APPLE);
}
+
+ @Test
+ public void testSkipExecution() throws PersistenceException, IllegalAccessException {
+ Pipe pipe = plumber.newPipe(context.resourceResolver()).echo(PATH_FRUITS).build();
+ String path = pipe.getResource().getPath();
+ assertEquals("there should be one result", 1, plumber.newPipe(context.resourceResolver())
+ .ref(path).run().size());
+ assertEquals("there should be one result", 1, plumber.newPipe(context.resourceResolver())
+ .ref(path).with("skipExecution","${false}").run().size());
+ assertEquals("there should be zero result", 0, plumber.newPipe(context.resourceResolver())
+ .ref(path).with("skipExecution","${true}").run().size());
+ }
+
@Test
public void testBuilderWithAdditionalBinding() throws Exception {
String newFruit = "watermelon";