Author: npeltier Date: Tue Oct 17 17:07:57 2017 New Revision: 1812428 URL: http://svn.apache.org/viewvc?rev=1812428&view=rev Log: SLING-7171 set sleep for container pipe
Modified: sling/trunk/contrib/extensions/sling-pipes/src/main/java/org/apache/sling/pipes/ContainerPipe.java sling/trunk/contrib/extensions/sling-pipes/src/test/java/org/apache/sling/pipes/ContainerPipeTest.java Modified: sling/trunk/contrib/extensions/sling-pipes/src/main/java/org/apache/sling/pipes/ContainerPipe.java URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/sling-pipes/src/main/java/org/apache/sling/pipes/ContainerPipe.java?rev=1812428&r1=1812427&r2=1812428&view=diff ============================================================================== --- sling/trunk/contrib/extensions/sling-pipes/src/main/java/org/apache/sling/pipes/ContainerPipe.java (original) +++ sling/trunk/contrib/extensions/sling-pipes/src/main/java/org/apache/sling/pipes/ContainerPipe.java Tue Oct 17 17:07:57 2017 @@ -36,12 +36,18 @@ public class ContainerPipe extends BaseP public static final String RESOURCE_TYPE = "slingPipes/container"; + /** + * Sleep time, in ms, after each resource returned + */ + public static final String PN_SLEEP = "sleep"; + Map<String, Pipe> pipes = new HashMap<>(); List<Pipe> pipeList = new ArrayList<>(); List<Pipe> reversePipeList = new ArrayList<>(); + long sleep = 0L; /** * Constructor * @param plumber plumber @@ -50,6 +56,7 @@ public class ContainerPipe extends BaseP */ public ContainerPipe(Plumber plumber, Resource resource) throws Exception{ super(plumber, resource); + sleep = properties.get(PN_SLEEP, 0L); for (Iterator<Resource> childPipeResources = getConfiguration().listChildren(); childPipeResources.hasNext();){ Resource pipeResource = childPipeResources.next(); Pipe pipe = plumber.getPipe(pipeResource); @@ -86,7 +93,7 @@ public class ContainerPipe extends BaseP @Override public Iterator<Resource> getOutput() { - return new ContainerResourceIterator(this); + return new ContainerResourceIterator(this, sleep); } /** @@ -148,17 +155,19 @@ public class ContainerPipe extends BaseP boolean computedCursor = false; boolean hasNext = false; + long sleep = 0L; int cursor = 0; /** * Constructor * @param containerPipe corresponding container pipe */ - ContainerResourceIterator(ContainerPipe containerPipe) { + ContainerResourceIterator(ContainerPipe containerPipe, long sleep) { container = containerPipe; bindings = container.bindings; iterators = new HashMap<>(); Pipe firstPipe = container.getFirstPipe(); + this.sleep = sleep; //we initialize the first iterator the only one not to be updated iterators.put(firstPipe, firstPipe.getOutput()); } @@ -214,13 +223,20 @@ public class ContainerPipe extends BaseP @Override public Resource next() { - hasNext = computedCursor && hasNext || hasNext(); - if (hasNext) { - computedCursor = false; - hasNext = false; - Resource resource = iterators.get(container.getLastPipe()).next(); - bindings.updateBindings(container.getLastPipe(), resource); - return resource; + try { + hasNext = computedCursor && hasNext || hasNext(); + if (hasNext) { + computedCursor = false; + hasNext = false; + Resource resource = iterators.get(container.getLastPipe()).next(); + bindings.updateBindings(container.getLastPipe(), resource); + if (sleep > 0) { + Thread.sleep(sleep); + } + return resource; + } + } catch (InterruptedException e){ + log.error("interrupted while sleeping", e); } return null; } Modified: sling/trunk/contrib/extensions/sling-pipes/src/test/java/org/apache/sling/pipes/ContainerPipeTest.java URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/sling-pipes/src/test/java/org/apache/sling/pipes/ContainerPipeTest.java?rev=1812428&r1=1812427&r2=1812428&view=diff ============================================================================== --- sling/trunk/contrib/extensions/sling-pipes/src/test/java/org/apache/sling/pipes/ContainerPipeTest.java (original) +++ sling/trunk/contrib/extensions/sling-pipes/src/test/java/org/apache/sling/pipes/ContainerPipeTest.java Tue Oct 17 17:07:57 2017 @@ -23,6 +23,7 @@ import static org.junit.Assert.assertTru import java.util.Iterator; +import org.apache.sling.api.resource.ModifiableValueMap; import org.apache.sling.api.resource.PersistenceException; import org.apache.sling.api.resource.Resource; import org.junit.Before; @@ -46,9 +47,7 @@ public class ContainerPipeTest extends A @Test public void testDummyTree() throws Exception { - ContainerPipe pipe = (ContainerPipe)getPipe(PATH_PIPE + "/" + NN_DUMMYTREE); - assertNotNull("A container pipe should be built out from the given configuration", pipe); - Iterator<Resource> resourceIterator = pipe.getOutput(); + Iterator<Resource> resourceIterator = getOutput(PATH_PIPE + "/" + NN_DUMMYTREE); assertTrue("There should be some results", resourceIterator.hasNext()); Resource firstResource = resourceIterator.next(); assertNotNull("First resource should not be null", firstResource); @@ -78,8 +77,7 @@ public class ContainerPipeTest extends A @Test public void testOtherTree() throws Exception { - ContainerPipe pipe = (ContainerPipe)getPipe(PATH_PIPE + "/" + NN_OTHERTREE); - Iterator<Resource> resourceIterator = pipe.getOutput(); + Iterator<Resource> resourceIterator = getOutput(PATH_PIPE + "/" + NN_OTHERTREE); assertTrue("There should be some results", resourceIterator.hasNext()); Resource firstResource = resourceIterator.next(); assertNotNull("First resource should not be null", firstResource); @@ -104,4 +102,16 @@ public class ContainerPipeTest extends A public void testOnePipe() throws Exception { assertTrue("There should be children", getOutput(PATH_PIPE + "/" + NN_ONEPIPE).hasNext()); } + + @Test + public void testSleep() throws Exception { + long interval = 100L; + String path = PATH_PIPE + "/" + NN_DUMMYTREE; + context.resourceResolver().getResource(path).adaptTo(ModifiableValueMap.class).put(ContainerPipe.PN_SLEEP, interval); + context.resourceResolver().commit(); + Iterator<Resource> outputs = getOutput(path); + long start = System.currentTimeMillis(); + outputs.next(); + assertTrue("time spent should be bigger than interval", System.currentTimeMillis() - start > interval); + } } \ No newline at end of file