Author: npeltier Date: Fri Sep 8 20:42:06 2017 New Revision: 1807821 URL: http://svn.apache.org/viewvc?rev=1807821&view=rev Log: SLING-7110 add PipeBuilder.runWith
Modified: sling/trunk/contrib/extensions/sling-pipes/src/main/java/org/apache/sling/pipes/PipeBuilder.java sling/trunk/contrib/extensions/sling-pipes/src/main/java/org/apache/sling/pipes/internal/PipeBuilderImpl.java sling/trunk/contrib/extensions/sling-pipes/src/test/java/org/apache/sling/pipes/PipeBuilderTest.java sling/trunk/contrib/extensions/sling-pipes/src/test/java/org/apache/sling/pipes/it/PipeBuilderIT.java Modified: sling/trunk/contrib/extensions/sling-pipes/src/main/java/org/apache/sling/pipes/PipeBuilder.java URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/sling-pipes/src/main/java/org/apache/sling/pipes/PipeBuilder.java?rev=1807821&r1=1807820&r2=1807821&view=diff ============================================================================== --- sling/trunk/contrib/extensions/sling-pipes/src/main/java/org/apache/sling/pipes/PipeBuilder.java (original) +++ sling/trunk/contrib/extensions/sling-pipes/src/main/java/org/apache/sling/pipes/PipeBuilder.java Fri Sep 8 20:42:06 2017 @@ -196,6 +196,14 @@ public interface PipeBuilder { Set<String> run(Map bindings) throws Exception; /** + * allow execution of a pipe, with more parameter + * @param bindings additional bindings, should be key/value format + * @return set of resource path, output of the pipe execution + * @throws Exception in case something goes wrong with pipe execution + */ + Set<String> runWith(Object... bindings) throws Exception; + + /** * run a pipe asynchronously * @param bindings additional bindings for the execution (can be null) * @return registered job for the pipe execution Modified: sling/trunk/contrib/extensions/sling-pipes/src/main/java/org/apache/sling/pipes/internal/PipeBuilderImpl.java URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/sling-pipes/src/main/java/org/apache/sling/pipes/internal/PipeBuilderImpl.java?rev=1807821&r1=1807820&r2=1807821&view=diff ============================================================================== --- sling/trunk/contrib/extensions/sling-pipes/src/main/java/org/apache/sling/pipes/internal/PipeBuilderImpl.java (original) +++ sling/trunk/contrib/extensions/sling-pipes/src/main/java/org/apache/sling/pipes/internal/PipeBuilderImpl.java Fri Sep 8 20:42:06 2017 @@ -171,6 +171,28 @@ public class PipeBuilderImpl implements } /** + * Checks arguments and throws exception if there is an issue + * @param params + * @throws IllegalArgumentException + */ + protected void checkArguments(Object... params) throws IllegalArgumentException { + if (params.length % 2 > 0){ + throw new IllegalArgumentException("there should be an even number of arguments"); + } + } + + /** + * write key/value pairs into a map + * @param map + * @param params + */ + protected void writeToMap(Map map, Object... params){ + for (int i = 0; i < params.length; i += 2){ + map.put(params[i], params[i + 1]); + } + } + + /** * Add some configurations to current's Step node defined by name (if null, will be step's properties) * @param name name of the configuration node, can be null in which case it's the subpipe itself * @param params key/value pair list of configuration @@ -178,9 +200,7 @@ public class PipeBuilderImpl implements * @throws IllegalAccessException in case configuration is wrong */ protected PipeBuilder writeToCurrentStep(String name, Object... params) throws IllegalAccessException { - if (params.length % 2 > 0){ - throw new IllegalArgumentException("there should be an even number of arguments"); - } + checkArguments(params); Map props = name != null ? currentStep.confs.get(name) : currentStep.properties; if (props == null){ props = new HashMap(); @@ -188,9 +208,7 @@ public class PipeBuilderImpl implements currentStep.confs.put(name, props); } } - for (int i = 0; i < params.length; i += 2){ - props.put(params[i], params[i + 1]); - } + writeToMap(props, params); return this; } @@ -273,6 +291,14 @@ public class PipeBuilderImpl implements } @Override + public Set<String> runWith(Object... bindings) throws Exception { + checkArguments(bindings); + Map bindingsMap = new HashMap(); + writeToMap(bindingsMap, bindings); + return run(bindingsMap); + } + + @Override public Set<String> run(Map bindings) throws Exception { Pipe pipe = this.build(); return plumber.execute(resolver, pipe, bindings, new NopWriter() , true); Modified: sling/trunk/contrib/extensions/sling-pipes/src/test/java/org/apache/sling/pipes/PipeBuilderTest.java URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/sling-pipes/src/test/java/org/apache/sling/pipes/PipeBuilderTest.java?rev=1807821&r1=1807820&r2=1807821&view=diff ============================================================================== --- sling/trunk/contrib/extensions/sling-pipes/src/test/java/org/apache/sling/pipes/PipeBuilderTest.java (original) +++ sling/trunk/contrib/extensions/sling-pipes/src/test/java/org/apache/sling/pipes/PipeBuilderTest.java Fri Sep 8 20:42:06 2017 @@ -88,6 +88,8 @@ public class PipeBuilderTest extends Abs Map bindings = new HashMap<>(); bindings.put("testedPath", PATH_FRUITS); Set<String> paths = plumber.newPipe(context.resourceResolver()).echo("${testedPath}").run(bindings); - assertTrue("paths should contain implemented testedPath", paths.contains(PATH_FRUITS)); + assertTrue("paths should contain implemented testedPath after run(bindings) is executed", paths.contains(PATH_FRUITS)); + paths = plumber.newPipe(context.resourceResolver()).echo("${testedPath}").runWith("testedPath", PATH_FRUITS); + assertTrue("paths should contain implemented testedPath after runWith is executed", paths.contains(PATH_FRUITS)); } } \ No newline at end of file Modified: sling/trunk/contrib/extensions/sling-pipes/src/test/java/org/apache/sling/pipes/it/PipeBuilderIT.java URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/sling-pipes/src/test/java/org/apache/sling/pipes/it/PipeBuilderIT.java?rev=1807821&r1=1807820&r2=1807821&view=diff ============================================================================== --- sling/trunk/contrib/extensions/sling-pipes/src/test/java/org/apache/sling/pipes/it/PipeBuilderIT.java (original) +++ sling/trunk/contrib/extensions/sling-pipes/src/test/java/org/apache/sling/pipes/it/PipeBuilderIT.java Fri Sep 8 20:42:06 2017 @@ -98,15 +98,11 @@ public class PipeBuilderIT extends Pipes try (ResourceResolver resolver = resolver()) { Pipe pipe = plumber.newPipe(resolver).mkdir(ROOT + "/test-${testedBinding}").write("jcr:title","${testedBinding}").build(); for (int i = 0; i < 10; i ++) { - Map bindings = new HashMap(); - bindings.put("testedBinding", i); - plumber.newPipe(resolver).pipe(ReferencePipe.RESOURCE_TYPE).expr(pipe.getResource().getPath()).run(bindings); + plumber.newPipe(resolver).ref(pipe.getResource().getPath()).runWith("testedBinding", i); } Set<String> results = plumber.newPipe(resolver).echo(ROOT).traverse().run(); LOGGER.info("Following results are found {}", results); assertEquals("we should have root and implemented children", 11, results.size()); } } - - }