[sling-org-apache-sling-pipes] branch master updated: SLING-7171 add osgi sleep capability after each persistence
This is an automated email from the ASF dual-hosted git repository. npeltier pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-pipes.git The following commit(s) were added to refs/heads/master by this push: new 1586c3e SLING-7171 add osgi sleep capability after each persistence 1586c3e is described below commit 1586c3e23a20f084cffda33978b461984962af26 Author: npeltier <peltier.nico...@gmail.com> AuthorDate: Tue Oct 24 18:50:26 2017 +0200 SLING-7171 add osgi sleep capability after each persistence --- .../java/org/apache/sling/pipes/internal/PlumberImpl.java | 13 ++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/src/main/java/org/apache/sling/pipes/internal/PlumberImpl.java b/src/main/java/org/apache/sling/pipes/internal/PlumberImpl.java index 7135a42..2d6f0c8 100644 --- a/src/main/java/org/apache/sling/pipes/internal/PlumberImpl.java +++ b/src/main/java/org/apache/sling/pipes/internal/PlumberImpl.java @@ -86,6 +86,9 @@ public class PlumberImpl implements Plumber, JobConsumer { @AttributeDefinition(description="Number of iterations after which plumber should saves a pipe execution") int bufferSize() default PlumberImpl.DEFAULT_BUFFER_SIZE; +@AttributeDefinition(description="Number of milliseconds of sleep after each persistence") +long sleep() default 0L; + @AttributeDefinition(description="Name of service user, with appropriate rights, that will be used for async execution") String serviceUser(); @@ -97,7 +100,7 @@ public class PlumberImpl implements Plumber, JobConsumer { public static final String SLING_EVENT_TOPIC = "org/apache/sling/pipes/topic"; -private int bufferSize; +private Configuration configuration; private Map serviceUser; @@ -105,7 +108,7 @@ public class PlumberImpl implements Plumber, JobConsumer { @Activate public void activate(Configuration configuration){ -bufferSize = configuration.bufferSize(); +this.configuration = configuration; serviceUser = Collections.singletonMap(SUBSERVICE, configuration.serviceUser()); allowedUsers = Arrays.asList(configuration.authorizedUsers()); registry = new HashMap<>(); @@ -229,10 +232,14 @@ public class PlumberImpl implements Plumber, JobConsumer { */ protected void persist(ResourceResolver resolver, Pipe pipe, Set paths, Resource currentResource) throws Exception { if (pipe.modifiesContent() && resolver.hasChanges() && !pipe.isDryRun()){ -if (currentResource == null || paths.size() % bufferSize == 0){ +if (currentResource == null || paths.size() % configuration.bufferSize() == 0){ log.info("[{}] saving changes...", pipe.getName()); writeStatus(pipe, currentResource == null ? STATUS_FINISHED : currentResource.getPath()); resolver.commit(); +if (configuration.sleep() > 0){ +log.debug("sleeping for {}ms", configuration.sleep()); +Thread.sleep(configuration.sleep()); +} } if (currentResource == null && distributor != null && StringUtils.isNotBlank(pipe.getDistributionAgent())) { log.info("a distribution agent is configured, will try to distribute the changes"); -- To stop receiving notification emails like this one, please contact ['"commits@sling.apache.org" <commits@sling.apache.org>'].
[sling-org-apache-sling-pipes] branch master updated: SLING-7217 change to use find
This is an automated email from the ASF dual-hosted git repository. npeltier pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-pipes.git The following commit(s) were added to refs/heads/master by this push: new a1b1c72 SLING-7217 change to use find new ab1f421 Merge branch 'master' of github.com:apache/sling-org-apache-sling-pipes a1b1c72 is described below commit a1b1c72e413b8cd93a6a020ff9130c237a285c62 Author: npeltier <peltier.nico...@gmail.com> AuthorDate: Tue Oct 24 18:42:28 2017 +0200 SLING-7217 change to use find and added failing unit test --- .../java/org/apache/sling/pipes/internal/FilterPipe.java | 2 +- .../org/apache/sling/pipes/internal/FilterPipeTest.java| 14 ++ src/test/resources/SLING-INF/jcr_root/content/fruits.json | 1 + 3 files changed, 16 insertions(+), 1 deletion(-) diff --git a/src/main/java/org/apache/sling/pipes/internal/FilterPipe.java b/src/main/java/org/apache/sling/pipes/internal/FilterPipe.java index 5a8f97c..5748ab3 100644 --- a/src/main/java/org/apache/sling/pipes/internal/FilterPipe.java +++ b/src/main/java/org/apache/sling/pipes/internal/FilterPipe.java @@ -57,7 +57,7 @@ public class FilterPipe extends BasePipe { for (String key : filter.keySet()){ if (! IGNORED_PROPERTIES.contains(key) && !key.startsWith(PREFIX_FILTER)){ Pattern pattern = Pattern.compile(filter.get(key, String.class)); -if (!pattern.matcher(current.get(key, String.class)).matches()){ +if (!pattern.matcher(current.get(key, String.class)).find()){ return false; } } diff --git a/src/test/java/org/apache/sling/pipes/internal/FilterPipeTest.java b/src/test/java/org/apache/sling/pipes/internal/FilterPipeTest.java index dfdffe8..26fd634 100644 --- a/src/test/java/org/apache/sling/pipes/internal/FilterPipeTest.java +++ b/src/test/java/org/apache/sling/pipes/internal/FilterPipeTest.java @@ -21,6 +21,7 @@ import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; import java.util.Iterator; +import java.util.Set; import org.apache.commons.lang3.StringUtils; import org.apache.sling.api.resource.ModifiableValueMap; @@ -103,4 +104,17 @@ public class FilterPipeTest extends AbstractPipeTest { assertFalse("output has no resource...", resourceIterator.hasNext()); } +@Test +public void testPropertyRegexp() throws Exception { +Set outputs = plumber.newPipe(context.resourceResolver()) +.echo(PATH_APPLE) +.grep("jcr:description","https://en.wikipedia.org;).run(); +assertEquals("there should be an item", 1, outputs.size()); +outputs = plumber.newPipe(context.resourceResolver()) +.echo(PATH_APPLE) +.grep("jcr:description",".*https://en.wikipedia.org.*;).run(); +assertEquals("there should be an item", 1, outputs.size()); + +} + } diff --git a/src/test/resources/SLING-INF/jcr_root/content/fruits.json b/src/test/resources/SLING-INF/jcr_root/content/fruits.json index c9b2c71..eb53e89 100644 --- a/src/test/resources/SLING-INF/jcr_root/content/fruits.json +++ b/src/test/resources/SLING-INF/jcr_root/content/fruits.json @@ -5,6 +5,7 @@ "jcr:primaryType":"nt:unstructured", "sling:resourceType":"/apps/pipes-it/fruit", "jcr:title":"Apple", +"jcr:description":"This is an apple", "color":"green", "worm": true, "isnota":{ -- To stop receiving notification emails like this one, please contact ['"commits@sling.apache.org" <commits@sling.apache.org>'].
[sling-org-apache-sling-pipes] 04/04: Merge branch 'master' of github.com:apache/sling-org-apache-sling-pipes
This is an automated email from the ASF dual-hosted git repository. npeltier pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-pipes.git commit 17d88e43d3a372e50c80abfb66e6c18353937804 Merge: 07befc6 51194e6 Author: npeltier <npelt...@adobe.com> AuthorDate: Fri Oct 20 22:36:54 2017 +0200 Merge branch 'master' of github.com:apache/sling-org-apache-sling-pipes pom.xml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) -- To stop receiving notification emails like this one, please contact "commits@sling.apache.org" <commits@sling.apache.org>.
[sling-org-apache-sling-pipes] branch master updated (51194e6 -> 17d88e4)
This is an automated email from the ASF dual-hosted git repository. npeltier pushed a change to branch master in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-pipes.git. from 51194e6 SLING-7162 - Update SCM information in all POM files to reference Git new 3ce5caa SLING-7172 move $ to children pipe new af8e64e SLING-7172 add parent(s) pipes new 07befc6 SLING-7172 introduce siblings pipe new 17d88e4 Merge branch 'master' of github.com:apache/sling-org-apache-sling-pipes The 4 revisions listed above as "new" are entirely new to this repository and will be described in separate emails. The revisions listed as "add" were already present in the repository and have only been added to this reference. Summary of changes: README.md | 18 +- .../java/org/apache/sling/pipes/PipeBuilder.java | 23 + .../sling/pipes/internal/PipeBuilderImpl.java | 26 +++ .../apache/sling/pipes/internal/PlumberImpl.java | 10 -- .../sling/pipes/internal/PlumberServlet.java | 3 +- .../AbstractExpressionSlingQueryPipe.java} | 39 ++ .../AbstractSlingQueryPipe.java} | 39 +++--- .../pipes/internal/slingQuery/ChildrenPipe.java} | 28 +++- .../internal/{ => slingQuery}/ParentPipe.java | 21 +--- .../ParentsPipe.java} | 25 ++ .../pipes/internal/slingQuery/SiblingsPipe.java} | 30 +++-- .../java/org/apache/sling/pipes/package-info.java | 2 +- .../org/apache/sling/pipes/AbstractPipeTest.java | 3 ++ .../org/apache/sling/pipes/PipeBuilderTest.java| 8 ++--- .../ChildrenPipeTest.java} | 6 ++-- .../ParentPipeTest.java} | 29 ++-- .../ParentsPipeTest.java} | 32 -- .../SiblingsPipeTest.java} | 30 +++-- .../SLING-INF/jcr_root/content/fruits.json | 5 +++ .../jcr_root/etc/pipes-it/fruit-list.json | 2 +- .../resources/{slingQuery.json => children.json} | 2 +- 21 files changed, 192 insertions(+), 189 deletions(-) copy src/main/java/org/apache/sling/pipes/internal/{XPathPipe.java => slingQuery/AbstractExpressionSlingQueryPipe.java} (51%) rename src/main/java/org/apache/sling/pipes/internal/{SlingQueryPipe.java => slingQuery/AbstractSlingQueryPipe.java} (62%) copy src/{test/java/org/apache/sling/pipes/dummies/DummyNull.java => main/java/org/apache/sling/pipes/internal/slingQuery/ChildrenPipe.java} (60%) copy src/main/java/org/apache/sling/pipes/internal/{ => slingQuery}/ParentPipe.java (73%) rename src/main/java/org/apache/sling/pipes/internal/{ParentPipe.java => slingQuery/ParentsPipe.java} (67%) copy src/{test/java/org/apache/sling/pipes/dummies/DummyNull.java => main/java/org/apache/sling/pipes/internal/slingQuery/SiblingsPipe.java} (66%) copy src/test/java/org/apache/sling/pipes/internal/{SlingQueryPipeTest.java => slingQuery/ChildrenPipeTest.java} (89%) copy src/test/java/org/apache/sling/pipes/internal/{SlingQueryPipeTest.java => slingQuery/ParentPipeTest.java} (58%) copy src/test/java/org/apache/sling/pipes/internal/{SlingQueryPipeTest.java => slingQuery/ParentsPipeTest.java} (61%) rename src/test/java/org/apache/sling/pipes/internal/{SlingQueryPipeTest.java => slingQuery/SiblingsPipeTest.java} (58%) rename src/test/resources/{slingQuery.json => children.json} (75%) -- To stop receiving notification emails like this one, please contact ['"commits@sling.apache.org" <commits@sling.apache.org>'].
[sling-org-apache-sling-pipes] 03/04: SLING-7172 introduce siblings pipe
This is an automated email from the ASF dual-hosted git repository. npeltier pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-pipes.git commit 07befc6da634874f926659f70c5967f82c7facbe Author: npeltier <npelt...@adobe.com> AuthorDate: Fri Oct 20 22:31:59 2017 +0200 SLING-7172 introduce siblings pipe --- .../java/org/apache/sling/pipes/PipeBuilder.java | 16 ++ .../sling/pipes/internal/PipeBuilderImpl.java | 18 +++ .../apache/sling/pipes/internal/PlumberImpl.java | 2 ++ .../pipes/internal/slingQuery/SiblingsPipe.java| 37 ++ .../org/apache/sling/pipes/AbstractPipeTest.java | 1 + .../org/apache/sling/pipes/PipeBuilderTest.java| 2 +- .../internal/slingQuery/SiblingsPipeTest.java | 36 + .../SLING-INF/jcr_root/content/fruits.json | 4 +++ 8 files changed, 103 insertions(+), 13 deletions(-) diff --git a/src/main/java/org/apache/sling/pipes/PipeBuilder.java b/src/main/java/org/apache/sling/pipes/PipeBuilder.java index 3fe25c2..8033a3a 100644 --- a/src/main/java/org/apache/sling/pipes/PipeBuilder.java +++ b/src/main/java/org/apache/sling/pipes/PipeBuilder.java @@ -81,6 +81,13 @@ public interface PipeBuilder { PipeBuilder children(String expr); /** + * attach a sling query siblings pipe to the current context + * @param expr sling query expression + * @return updated instance of PipeBuilder + */ +PipeBuilder siblings(String expr); + +/** * attach a rm pipe to the current context * @return updated instance of PipeBuilder */ @@ -130,26 +137,23 @@ public interface PipeBuilder { * attach a parents pipe to the current context * @param expr expression * @return updated instance of PipeBuilder - * @throws IllegalAccessException in case it's called with wrong # of arguments */ -PipeBuilder parents(String expr) throws IllegalAccessException; +PipeBuilder parents(String expr); /** * attach a reference pipe to the current context * @param expr reference * @return updated instance of PipeBuilder - * @throws IllegalAccessException in case it's called with wrong # of arguments */ -PipeBuilder ref(String expr)throws IllegalAccessException; +PipeBuilder ref(String expr); /** * attach a not pipe to the current context * @param expr reference * @return updated instance of PipeBuilder - * @throws IllegalAccessException in case it's called with wrong # of arguments */ -PipeBuilder not(String expr)throws IllegalAccessException; +PipeBuilder not(String expr); /** * parameterized current pipe in the context diff --git a/src/main/java/org/apache/sling/pipes/internal/PipeBuilderImpl.java b/src/main/java/org/apache/sling/pipes/internal/PipeBuilderImpl.java index 85e78e5..87a4227 100644 --- a/src/main/java/org/apache/sling/pipes/internal/PipeBuilderImpl.java +++ b/src/main/java/org/apache/sling/pipes/internal/PipeBuilderImpl.java @@ -26,6 +26,7 @@ import org.apache.sling.pipes.*; import org.apache.sling.pipes.internal.slingQuery.ChildrenPipe; import org.apache.sling.pipes.internal.slingQuery.ParentPipe; import org.apache.sling.pipes.internal.slingQuery.ParentsPipe; +import org.apache.sling.pipes.internal.slingQuery.SiblingsPipe; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -165,18 +166,23 @@ public class PipeBuilderImpl implements PipeBuilder { } @Override -public PipeBuilder parents(String expr) throws IllegalAccessException { -return pipe(ParentsPipe.RESOURCE_TYPE).expr(expr); +public PipeBuilder parents(String expr) { +return pipeWithExpr(ParentsPipe.RESOURCE_TYPE, expr); } @Override -public PipeBuilder ref(String expr) throws IllegalAccessException { -return pipe(ReferencePipe.RESOURCE_TYPE).expr(expr); +public PipeBuilder siblings(String expr) { +return pipeWithExpr(SiblingsPipe.RESOURCE_TYPE, expr); } @Override -public PipeBuilder not(String expr) throws IllegalAccessException { -return pipe(NotPipe.RESOURCE_TYPE).expr(expr); +public PipeBuilder ref(String expr) { +return pipeWithExpr(ReferencePipe.RESOURCE_TYPE, expr); +} + +@Override +public PipeBuilder not(String expr) { +return pipeWithExpr(NotPipe.RESOURCE_TYPE, expr); } @Override diff --git a/src/main/java/org/apache/sling/pipes/internal/PlumberImpl.java b/src/main/java/org/apache/sling/pipes/internal/PlumberImpl.java index 31d4840..a1e43be 100644 --- a/src/main/java/org/apache/sling/pipes/internal/PlumberImpl.java +++ b/src/main/java/org/apache/sling/pipes/internal/PlumberImpl.java @@ -56,6 +56,7 @@ import org.apache.sling.pipes.*; import org.apache.sling.pipes.internal.slingQuery.ChildrenPipe; import org.apache.sling.pipes.internal.slingQuery.ParentPipe;
[sling-org-apache-sling-pipes] 02/04: SLING-7172 add parent(s) pipes
This is an automated email from the ASF dual-hosted git repository. npeltier pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-pipes.git commit af8e64ef6c7391490a9df483a58dea1e1ae923b3 Author: npeltier <npelt...@adobe.com> AuthorDate: Fri Oct 20 21:23:53 2017 +0200 SLING-7172 add parent(s) pipes - move parent pipe to be a sling query pipe, - added abstract sling query pipe to avoid duplications, - added parents pipe, - added unit tests for both parent and parents pipe --- .../java/org/apache/sling/pipes/PipeBuilder.java | 7 .../sling/pipes/internal/PipeBuilderImpl.java | 8 .../apache/sling/pipes/internal/PlumberImpl.java | 6 ++- .../sling/pipes/internal/PlumberServlet.java | 1 + .../AbstractExpressionSlingQueryPipe.java} | 44 +- .../AbstractSlingQueryPipe.java} | 39 ++- .../internal/{ => slingQuery}/ChildrenPipe.java| 29 +++--- .../internal/{ => slingQuery}/ParentPipe.java | 21 +-- .../ParentsPipe.java} | 25 ++-- .../org/apache/sling/pipes/AbstractPipeTest.java | 2 + .../{ => slingQuery}/ChildrenPipeTest.java | 2 +- .../ParentPipeTest.java} | 29 ++ .../ParentsPipeTest.java} | 32 +++- .../SLING-INF/jcr_root/content/fruits.json | 1 + 14 files changed, 111 insertions(+), 135 deletions(-) diff --git a/src/main/java/org/apache/sling/pipes/PipeBuilder.java b/src/main/java/org/apache/sling/pipes/PipeBuilder.java index 2082f23..3fe25c2 100644 --- a/src/main/java/org/apache/sling/pipes/PipeBuilder.java +++ b/src/main/java/org/apache/sling/pipes/PipeBuilder.java @@ -126,6 +126,13 @@ public interface PipeBuilder { */ PipeBuilder parent(); +/** + * attach a parents pipe to the current context + * @param expr expression + * @return updated instance of PipeBuilder + * @throws IllegalAccessException in case it's called with wrong # of arguments + */ +PipeBuilder parents(String expr) throws IllegalAccessException; /** * attach a reference pipe to the current context diff --git a/src/main/java/org/apache/sling/pipes/internal/PipeBuilderImpl.java b/src/main/java/org/apache/sling/pipes/internal/PipeBuilderImpl.java index 15e70f2..85e78e5 100644 --- a/src/main/java/org/apache/sling/pipes/internal/PipeBuilderImpl.java +++ b/src/main/java/org/apache/sling/pipes/internal/PipeBuilderImpl.java @@ -23,6 +23,9 @@ import org.apache.sling.api.resource.ResourceResolver; import org.apache.sling.api.resource.ResourceUtil; import org.apache.sling.event.jobs.Job; import org.apache.sling.pipes.*; +import org.apache.sling.pipes.internal.slingQuery.ChildrenPipe; +import org.apache.sling.pipes.internal.slingQuery.ParentPipe; +import org.apache.sling.pipes.internal.slingQuery.ParentsPipe; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -162,6 +165,11 @@ public class PipeBuilderImpl implements PipeBuilder { } @Override +public PipeBuilder parents(String expr) throws IllegalAccessException { +return pipe(ParentsPipe.RESOURCE_TYPE).expr(expr); +} + +@Override public PipeBuilder ref(String expr) throws IllegalAccessException { return pipe(ReferencePipe.RESOURCE_TYPE).expr(expr); } diff --git a/src/main/java/org/apache/sling/pipes/internal/PlumberImpl.java b/src/main/java/org/apache/sling/pipes/internal/PlumberImpl.java index c6002fc..31d4840 100644 --- a/src/main/java/org/apache/sling/pipes/internal/PlumberImpl.java +++ b/src/main/java/org/apache/sling/pipes/internal/PlumberImpl.java @@ -53,6 +53,9 @@ import org.apache.sling.event.jobs.Job; import org.apache.sling.event.jobs.JobManager; import org.apache.sling.event.jobs.consumer.JobConsumer; import org.apache.sling.pipes.*; +import org.apache.sling.pipes.internal.slingQuery.ChildrenPipe; +import org.apache.sling.pipes.internal.slingQuery.ParentPipe; +import org.apache.sling.pipes.internal.slingQuery.ParentsPipe; import org.osgi.service.component.annotations.Activate; import org.osgi.service.component.annotations.Component; import org.osgi.service.component.annotations.Reference; @@ -113,13 +116,14 @@ public class PlumberImpl implements Plumber, JobConsumer { registerPipe(XPathPipe.RESOURCE_TYPE, XPathPipe.class); registerPipe(ReferencePipe.RESOURCE_TYPE, ReferencePipe.class); registerPipe(RemovePipe.RESOURCE_TYPE, RemovePipe.class); -registerPipe(ParentPipe.RESOURCE_TYPE, ParentPipe.class); +registerPipe(ParentsPipe.RESOURCE_TYPE, ParentsPipe.class); registerPipe(MovePipe.RESOURCE_TYPE, MovePipe.class); registerPipe(PathPipe.RESOURCE_TYPE, PathPipe.class); registerPipe(FilterPipe.RESOURCE_TYPE, FilterPipe.class);
[sling-org-apache-sling-pipes] 01/04: SLING-7172 move $ to children pipe
This is an automated email from the ASF dual-hosted git repository. npeltier pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-pipes.git commit 3ce5caa8302616036874f01267f690682a02d4b1 Author: npeltier <npelt...@adobe.com> AuthorDate: Fri Oct 20 17:57:58 2017 +0200 SLING-7172 move $ to children pipe --- README.md | 18 +- src/main/java/org/apache/sling/pipes/PipeBuilder.java | 4 ++-- .../{SlingQueryPipe.java => ChildrenPipe.java} | 10 +- .../apache/sling/pipes/internal/PipeBuilderImpl.java | 4 ++-- .../org/apache/sling/pipes/internal/PlumberImpl.java | 2 +- .../apache/sling/pipes/internal/PlumberServlet.java| 2 +- src/main/java/org/apache/sling/pipes/package-info.java | 2 +- .../java/org/apache/sling/pipes/PipeBuilderTest.java | 6 +++--- .../{SlingQueryPipeTest.java => ChildrenPipeTest.java} | 4 ++-- .../SLING-INF/jcr_root/etc/pipes-it/fruit-list.json| 2 +- src/test/resources/{slingQuery.json => children.json} | 2 +- 11 files changed, 28 insertions(+), 28 deletions(-) diff --git a/README.md b/README.md index 2105803..badffb4 100644 --- a/README.md +++ b/README.md @@ -47,10 +47,10 @@ a pipe configuration is a jcr node, with: rather dummy pipe, outputs what is in input (so what is configured in path). Handy for doing some test mostly, and giving basic functionalities to others that inherit from it * `sling:resourceType` is `slingPipes/base` - SlingQuery Pipe + children Pipe executes $(getInput()).children(expression) -* `sling:resourceType` is `slingPipes/slingQuery` -* `expr` mandatory property, contains slingQuery expression through which getInput()'s children will be computed to getOutput() +* `sling:resourceType` is `slingPipes/children` +* `expr` mandatory property, contains children expression through which getInput()'s children will be computed to getOutput() JsonPipe feeds bindings with remote json @@ -110,7 +110,7 @@ execute the pipe referenced in path property Write Pipe writes given properties to current input -* `sling:resourceType` is `slingPipes/slingQuery` +* `sling:resourceType` is `slingPipes/children` * `conf` node tree that will be copied to the current input of the pipe, each node's properties names and value will be written to the input resource. Input resource will be outputed. @@ -201,7 +201,7 @@ if parameter dryRun is set to true, and the executed pipe is supposed to modify ## sample configurations -### slingQuery | write +### children | write this pipe parse all profile nodes, and ``` { @@ -210,7 +210,7 @@ this pipe parse all profile nodes, and "jcr:description":"prefix all full names of profile with "Mr" or "Ms" depending on gender", "conf":{ "profile": { -"sling:resourceType":"slingPipes/slingQuery", +"sling:resourceType":"slingPipes/children", "expr":"nt:unstructured#profile", "path":"/home/users" }, @@ -225,7 +225,7 @@ this pipe parse all profile nodes, and } ``` -### slingQuery | multiProperty | authorizable | write +### children | multiProperty | authorizable | write ``` { "jcr:primaryType": "sling:Folder", @@ -239,7 +239,7 @@ this pipe parse all profile nodes, and "jcr:description": "outputs all badge component resources", "expr": "[sling:resourceType=myApp/components/badge]", "path": "/etc/badges/badges-admin/jcr:content", - "sling:resourceType": "slingPipes/slingQuery" + "sling:resourceType": "slingPipes/children" }, "profile": { "jcr:primaryType": "sling:Folder", @@ -343,5 +343,5 @@ some other samples are in https://github.com/npeltier/sling-pipes/tree/master/sr # Compatibility For running this tool on a sling instance you need: - java 8 (Nashorn is used for expression) -- slingQuery (3.0.0) (used in SlingQueryPipe) +- children (3.0.0) (used in childrenPipe) - jackrabbit api (2.7.5+) (used in AuthorizablePipe) diff --git a/src/main/java/org/apache/sling/pipes/PipeBuilder.java b/src/main/java/org/apache/sling/pipes/PipeBuilder.java index 17089a3..2082f23 100644 --- a/src/main/java/org/apache/sling/pipes/PipeBuilder.java +++ b/src/main/java/org/apache/sling/pipes/PipeBuilder.java @@ -74,11 +74,11 @@ public interface PipeBuilder { PipeBuilder xpath(String expr); /** - * attach a sling query pipe to the current context + * attach a sling query children pipe to the current context * @param expr sling query expression * @return updated instance of PipeBuilder */ -PipeBuilder $(String expr); +
svn commit: r1812428 - in /sling/trunk/contrib/extensions/sling-pipes/src: main/java/org/apache/sling/pipes/ContainerPipe.java test/java/org/apache/sling/pipes/ContainerPipeTest.java
Author: npeltier Date: Tue Oct 17 17:07:57 2017 New Revision: 1812428 URL: http://svn.apache.org/viewvc?rev=1812428=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=1812427=1812428=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 pipeList = new ArrayList<>(); List 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 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 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=1812427=1812428=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.uti
svn commit: r1812362 - in /sling/trunk/contrib/extensions/sling-pipes: ./ src/main/java/org/apache/sling/pipes/ src/main/java/org/apache/sling/pipes/models/ src/test/java/org/apache/sling/pipes/ src/t
Author: npeltier Date: Tue Oct 17 07:40:22 2017 New Revision: 1812362 URL: http://svn.apache.org/viewvc?rev=1812362=rev Log: SLING-7170 introducing PipeModel - model that accepts pipes under pipes node of the current resource, and provide the outputs to the client script, - model provides to each executed pipe bindings extracted from current resource, - unit tests, - integration test testing sightly integration Added: sling/trunk/contrib/extensions/sling-pipes/src/main/java/org/apache/sling/pipes/models/ sling/trunk/contrib/extensions/sling-pipes/src/main/java/org/apache/sling/pipes/models/PipeModel.java sling/trunk/contrib/extensions/sling-pipes/src/test/java/org/apache/sling/pipes/it/PipeModelIT.java sling/trunk/contrib/extensions/sling-pipes/src/test/java/org/apache/sling/pipes/models/ sling/trunk/contrib/extensions/sling-pipes/src/test/java/org/apache/sling/pipes/models/PipeModelTest.java sling/trunk/contrib/extensions/sling-pipes/src/test/resources/SLING-INF/ sling/trunk/contrib/extensions/sling-pipes/src/test/resources/SLING-INF/jcr_root/ sling/trunk/contrib/extensions/sling-pipes/src/test/resources/SLING-INF/jcr_root/apps/ sling/trunk/contrib/extensions/sling-pipes/src/test/resources/SLING-INF/jcr_root/apps/pipes-it/ sling/trunk/contrib/extensions/sling-pipes/src/test/resources/SLING-INF/jcr_root/apps/pipes-it/fruit/ sling/trunk/contrib/extensions/sling-pipes/src/test/resources/SLING-INF/jcr_root/apps/pipes-it/fruit/fruit.html sling/trunk/contrib/extensions/sling-pipes/src/test/resources/SLING-INF/jcr_root/apps/pipes-it/list/ sling/trunk/contrib/extensions/sling-pipes/src/test/resources/SLING-INF/jcr_root/apps/pipes-it/list/list.html sling/trunk/contrib/extensions/sling-pipes/src/test/resources/SLING-INF/jcr_root/content/ sling/trunk/contrib/extensions/sling-pipes/src/test/resources/SLING-INF/jcr_root/content/fruits.json - copied, changed from r1812300, sling/trunk/contrib/extensions/sling-pipes/src/test/resources/fruits.json sling/trunk/contrib/extensions/sling-pipes/src/test/resources/SLING-INF/jcr_root/content/list-component.json sling/trunk/contrib/extensions/sling-pipes/src/test/resources/SLING-INF/jcr_root/etc/ sling/trunk/contrib/extensions/sling-pipes/src/test/resources/SLING-INF/jcr_root/etc/pipes-it/ sling/trunk/contrib/extensions/sling-pipes/src/test/resources/SLING-INF/jcr_root/etc/pipes-it/fruit-list.json sling/trunk/contrib/extensions/sling-pipes/src/test/resources/logback.xml Removed: sling/trunk/contrib/extensions/sling-pipes/src/test/resources/fruits.json Modified: sling/trunk/contrib/extensions/sling-pipes/pom.xml sling/trunk/contrib/extensions/sling-pipes/src/main/java/org/apache/sling/pipes/PipeBindings.java sling/trunk/contrib/extensions/sling-pipes/src/main/java/org/apache/sling/pipes/package-info.java sling/trunk/contrib/extensions/sling-pipes/src/test/java/org/apache/sling/pipes/AbstractPipeTest.java sling/trunk/contrib/extensions/sling-pipes/src/test/java/org/apache/sling/pipes/ContainerPipeTest.java sling/trunk/contrib/extensions/sling-pipes/src/test/java/org/apache/sling/pipes/PipeBindingsTest.java sling/trunk/contrib/extensions/sling-pipes/src/test/java/org/apache/sling/pipes/internal/FilterPipeTest.java sling/trunk/contrib/extensions/sling-pipes/src/test/java/org/apache/sling/pipes/internal/JsonPipeTest.java sling/trunk/contrib/extensions/sling-pipes/src/test/java/org/apache/sling/pipes/internal/MovePipeTest.java sling/trunk/contrib/extensions/sling-pipes/src/test/java/org/apache/sling/pipes/internal/MultiPropertyPipeTest.java sling/trunk/contrib/extensions/sling-pipes/src/test/java/org/apache/sling/pipes/internal/PlumberServletTest.java sling/trunk/contrib/extensions/sling-pipes/src/test/java/org/apache/sling/pipes/internal/SlingQueryPipeTest.java sling/trunk/contrib/extensions/sling-pipes/src/test/java/org/apache/sling/pipes/internal/TraversePipeTest.java sling/trunk/contrib/extensions/sling-pipes/src/test/java/org/apache/sling/pipes/internal/WritePipeTest.java sling/trunk/contrib/extensions/sling-pipes/src/test/java/org/apache/sling/pipes/it/PipesTestSupport.java sling/trunk/contrib/extensions/sling-pipes/src/test/resources/container.json Modified: sling/trunk/contrib/extensions/sling-pipes/pom.xml URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/sling-pipes/pom.xml?rev=1812362=1812361=1812362=diff == --- sling/trunk/contrib/extensions/sling-pipes/pom.xml (original) +++ sling/trunk/contrib/extensions/sling-pipes/pom.xml Tue Oct 17 07:40:22 2017 @@ -61,28 +61,11 @@ org.apache.sling.jcr.contentparser;inline="org/apache/sling/jcr/contentparser/impl/JsonTicksConverter.class" - - - - -org.apache.mav
svn commit: r1018791 - /websites/production/sling/content/
Author: npeltier Date: Wed Sep 27 10:41:32 2017 New Revision: 1018791 Log: Publishing svnmucc operation to sling site by npeltier Added: websites/production/sling/content/ - copied from r1018790, websites/staging/sling/trunk/content/
svn commit: r1809827 - /sling/site/trunk/content/documentation/bundles/sling-pipes.mdtext
Author: npeltier Date: Wed Sep 27 10:40:34 2017 New Revision: 1809827 URL: http://svn.apache.org/viewvc?rev=1809827=rev Log: sling pipes doc update Modified: sling/site/trunk/content/documentation/bundles/sling-pipes.mdtext Modified: sling/site/trunk/content/documentation/bundles/sling-pipes.mdtext URL: http://svn.apache.org/viewvc/sling/site/trunk/content/documentation/bundles/sling-pipes.mdtext?rev=1809827=1809826=1809827=diff == --- sling/site/trunk/content/documentation/bundles/sling-pipes.mdtext (original) +++ sling/site/trunk/content/documentation/bundles/sling-pipes.mdtext Wed Sep 27 10:40:34 2017 @@ -141,6 +141,7 @@ In that case you can monitor the pipes p ## Registered Pipes ### readers +those are pipes that will spit out resources, without modifying them # Base pipe `echo(path)` outputs what is in input (so what is configured in path) @@ -174,19 +175,10 @@ traverse current input resource's tree, - `properties` is a flag mentioning the pipe should traverse node's property, - `nameGlobs` filters the property that should get outputed -# JsonPipe (`json(expr)`) -feeds bindings with remote json - -- `sling:resourceType` is `slingPipes/json` -- `expr` mandatory property contains url that will be called, the json be sent to the output bindings, getOutput = getInput. -An empty url or a failing url will block the pipe at that given place. - -In case the json is an array, the pipe will loop over -the array elements, and output each one in the binding. Output resource remains each time the input one. - # AuthorizablePipe (`auth(conf)`) retrieve authorizable resource corresponding to the id passed in expression, or if not found (or void expression), from the input path, output the found authorizable's resource +caution this pipe **can modify content** in case additional configuration is added (see below) - `sling:resourceType` is `slingPipes/authorizable` - `expr` should be an authorizable id, or void (but then input should be an authorizable) @@ -222,6 +214,46 @@ not containing `@foo=bar` is an equivalent + +### InputStream reader pipes + +those are specific reader pipes, that read information an input stream from defined in expr configuration, +that can be: + +- a remote located file (starting with http), +- a file located in the repository (existing file stored in the repository), +- a file passed as request parameter with `pipes_inputFile` as parameter name (in that case, expr can be empty) +- direct data stream in the expression + +# JsonPipe (`json(expr)`) +feeds bindings with json stream + +- `sling:resourceType` is `slingPipes/json` +- `expr` see above +- `valuePath` json path like expression that defines where the json value we care about is. E.g. `$.items[2]` considers root is an object and that we want the 3rd item of items array, located at `items` key of the root object. + +In case the json value is an array, the pipe will loop over +the array elements, and output each one in the binding. +Output resource remains each time the input one. + + json('{items:[{val:1},{val:2},{val:3}]}').with('valuePath','$.items').name('demo') +mkdir('/content/${demo.val}.run() + +should create a tree of 3 resources /content/1, /content/2 and /content/3 + +# CsvPipe (`csv(expr)`) +feeds bindings with csv stream + +- `sling:resourceType` is `slingPipes/csv` +- `expr` see above +- `separator` separator character, default being comma `,` + +json('idx,val\n1,1\n2,2\n3,3').name('demo') +.mkdir('/content/${demo.val}.run() + +should create a tree of 3 resources /content/1, /content/2 and /content/3 + + ### containers # Container Pipe assemble a sequence of pipes @@ -232,11 +264,17 @@ assemble a sequence of pipes Note that pipe builder api automatically creates one for you to chain the subpipe you are configuring # ReferencePipe -execute the pipe referenced in path property +executes the pipe referenced in path property - `sling:resourceType` is `slingPipes/reference` - `path` path of the referenced pipe +# NotPipe +executes the pipe referenced in path property, passes input only if referenced pipe doesn't return any resource + +- `sling:resourceType` is `slingPipes/not` +- `path` path of the referenced pipe + ### writers # Write Pipe (`write(conf)`)
svn commit: r1018677 - /websites/production/sling/content/
Author: npeltier Date: Mon Sep 25 10:18:25 2017 New Revision: 1018677 Log: Publishing svnmucc operation to sling site by npeltier Added: websites/production/sling/content/ - copied from r1018676, websites/staging/sling/trunk/content/
svn commit: r1809598 - /sling/site/trunk/content/news.mdtext
Author: npeltier Date: Mon Sep 25 10:17:37 2017 New Revision: 1809598 URL: http://svn.apache.org/viewvc?rev=1809598=rev Log: add pipes 1.1.0 release entry Modified: sling/site/trunk/content/news.mdtext Modified: sling/site/trunk/content/news.mdtext URL: http://svn.apache.org/viewvc/sling/site/trunk/content/news.mdtext?rev=1809598=1809597=1809598=diff == --- sling/site/trunk/content/news.mdtext (original) +++ sling/site/trunk/content/news.mdtext Mon Sep 25 10:17:37 2017 @@ -1,4 +1,6 @@ Title: News + +* New Release: Apache Sling Pipes 1.1.0 (September 24th, 2017) * New Release: Apache Sling Maven Sling Plugin 2.3.2 (September 23th, 2017) * New Release: Apache Sling Repoinit JCR version 1.1.6, Apache Sling Repoinit Parser version 1.2.0 (September 22th, 2017) * New Release: Apache Sling Context-Aware Configuration Impl 1.4.4 (September 22th, 2017)
svn commit: r1809085 - /sling/trunk/contrib/extensions/sling-pipes/pom.xml
Author: npeltier Date: Wed Sep 20 21:14:13 2017 New Revision: 1809085 URL: http://svn.apache.org/viewvc?rev=1809085=rev Log: [maven-release-plugin] prepare for next development iteration Modified: sling/trunk/contrib/extensions/sling-pipes/pom.xml Modified: sling/trunk/contrib/extensions/sling-pipes/pom.xml URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/sling-pipes/pom.xml?rev=1809085=1809084=1809085=diff == --- sling/trunk/contrib/extensions/sling-pipes/pom.xml (original) +++ sling/trunk/contrib/extensions/sling-pipes/pom.xml Wed Sep 20 21:14:13 2017 @@ -30,7 +30,7 @@ org.apache.sling.pipes bundle - 1.1.0 + 1.1.1-SNAPSHOT Apache Sling Pipes bulk content changes tool @@ -41,9 +41,9 @@ - scm:svn:http://svn.apache.org/repos/asf/sling/tags/org.apache.sling.pipes-1.1.0 - scm:svn:https://svn.apache.org/repos/asf/sling/tags/org.apache.sling.pipes-1.1.0 - http://svn.apache.org/viewvc/sling/tags/org.apache.sling.pipes-1.1.0 + scm:svn:http://svn.apache.org/repos/asf/sling/trunk/contrib/extensions/sling-pipes + scm:svn:https://svn.apache.org/repos/asf/sling/trunk/contrib/extensions/sling-pipes + http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/sling-pipes
svn commit: r1809084 - /sling/tags/org.apache.sling.pipes-1.1.0/
Author: npeltier Date: Wed Sep 20 21:14:11 2017 New Revision: 1809084 URL: http://svn.apache.org/viewvc?rev=1809084=rev Log: [maven-release-plugin] copy for tag org.apache.sling.pipes-1.1.0 Added: sling/tags/org.apache.sling.pipes-1.1.0/ - copied from r1809083, sling/trunk/contrib/extensions/sling-pipes/
svn commit: r1809083 - /sling/trunk/contrib/extensions/sling-pipes/pom.xml
Author: npeltier Date: Wed Sep 20 21:13:56 2017 New Revision: 1809083 URL: http://svn.apache.org/viewvc?rev=1809083=rev Log: [maven-release-plugin] prepare release org.apache.sling.pipes-1.1.0 Modified: sling/trunk/contrib/extensions/sling-pipes/pom.xml Modified: sling/trunk/contrib/extensions/sling-pipes/pom.xml URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/sling-pipes/pom.xml?rev=1809083=1809082=1809083=diff == --- sling/trunk/contrib/extensions/sling-pipes/pom.xml (original) +++ sling/trunk/contrib/extensions/sling-pipes/pom.xml Wed Sep 20 21:13:56 2017 @@ -30,7 +30,7 @@ org.apache.sling.pipes bundle - 1.0.5-SNAPSHOT + 1.1.0 Apache Sling Pipes bulk content changes tool @@ -41,9 +41,9 @@ - scm:svn:http://svn.apache.org/repos/asf/sling/trunk/contrib/extensions/sling-pipes - scm:svn:https://svn.apache.org/repos/asf/sling/trunk/contrib/extensions/sling-pipes - http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/sling-pipes + scm:svn:http://svn.apache.org/repos/asf/sling/tags/org.apache.sling.pipes-1.1.0 + scm:svn:https://svn.apache.org/repos/asf/sling/tags/org.apache.sling.pipes-1.1.0 + http://svn.apache.org/viewvc/sling/tags/org.apache.sling.pipes-1.1.0
svn commit: r1809079 - in /sling/trunk/contrib/extensions/sling-pipes/src: main/java/org/apache/sling/pipes/internal/JsonPipe.java test/java/org/apache/sling/pipes/internal/JsonPipeTest.java
Author: npeltier Date: Wed Sep 20 20:46:35 2017 New Revision: 1809079 URL: http://svn.apache.org/viewvc?rev=1809079=rev Log: SLING-7117 add JsonPath configuration not full json path support even though it could be interesting, as it would need an external library Modified: sling/trunk/contrib/extensions/sling-pipes/src/main/java/org/apache/sling/pipes/internal/JsonPipe.java sling/trunk/contrib/extensions/sling-pipes/src/test/java/org/apache/sling/pipes/internal/JsonPipeTest.java Modified: sling/trunk/contrib/extensions/sling-pipes/src/main/java/org/apache/sling/pipes/internal/JsonPipe.java URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/sling-pipes/src/main/java/org/apache/sling/pipes/internal/JsonPipe.java?rev=1809079=1809078=1809079=diff == --- sling/trunk/contrib/extensions/sling-pipes/src/main/java/org/apache/sling/pipes/internal/JsonPipe.java (original) +++ sling/trunk/contrib/extensions/sling-pipes/src/main/java/org/apache/sling/pipes/internal/JsonPipe.java Wed Sep 20 20:46:35 2017 @@ -16,16 +16,6 @@ */ package org.apache.sling.pipes.internal; -import java.io.InputStream; -import java.nio.charset.StandardCharsets; -import java.util.Collections; -import java.util.Iterator; - -import javax.json.JsonArray; -import javax.json.JsonException; -import javax.json.JsonStructure; -import javax.json.JsonValue.ValueType; - import org.apache.commons.io.IOUtils; import org.apache.commons.lang3.StringUtils; import org.apache.sling.api.resource.Resource; @@ -34,12 +24,38 @@ import org.apache.sling.pipes.Plumber; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import javax.json.JsonArray; +import javax.json.JsonArrayBuilder; +import javax.json.JsonException; +import javax.json.JsonObject; +import javax.json.JsonStructure; +import javax.json.JsonValue.ValueType; +import java.io.InputStream; +import java.nio.charset.StandardCharsets; +import java.util.Collections; +import java.util.Iterator; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + /** * Pipe outputting binding related to a json stream: either an object */ public class JsonPipe extends AbstractInputStreamPipe { private static Logger logger = LoggerFactory.getLogger(JsonPipe.class); -public static final String RESOURCE_TYPE = RT_PREFIX + "json"; +public final static String RESOURCE_TYPE = RT_PREFIX + "json"; + +/** + * property specifying the json path where to fetched the used value + */ +protected static final String PN_VALUEPATH = "valuePath"; + +protected static final String JSONPATH_ROOT = "$"; + +protected static final String ARRAY_START = "["; + +protected static final String OBJ_START = "."; + +protected static final Pattern JSONPATH_FIRSTTOKEN = Pattern.compile("^\\" + JSONPATH_ROOT + "([\\" + OBJ_START + "\\" + ARRAY_START + "])([^\\" + OBJ_START + "\\]\\" + ARRAY_START + "]+)\\]?"); JsonArray array; int index = -1; @@ -63,35 +79,42 @@ public class JsonPipe extends AbstractIn JsonStructure json; try { json = JsonUtil.parse(jsonString); + } catch (JsonException ex) { json = null; } if (json == null) { binding = jsonString.trim(); output = inputSingletonIterator; -} else if (json.getValueType() != ValueType.ARRAY) { -binding = JsonUtil.unbox(json); -output = inputSingletonIterator; } else { -binding = array = (JsonArray) json; -index = 0; -output = new Iterator() { -@Override -public boolean hasNext() { -return index < array.size(); -} - -@Override -public Resource next() { -try { -binding = JsonUtil.unbox(array.get(index)); -} catch (Exception e) { -logger.error("Unable to retrieve {}nth item of jsonarray", index, e); +String valuePath = properties.get(PN_VALUEPATH, String.class); +if (StringUtils.isNotBlank(valuePath)){ +json = getValue(json, valuePath); +} +if (json.getValueType() != ValueType.ARRAY) { +binding = JsonUtil.unbox(json); +output = inputSingletonIterator; +} else { +binding = array = (JsonArray) json; +index = 0;
svn commit: r1808470 - in /sling/trunk/contrib/extensions/sling-pipes/src/main/java/org/apache/sling/pipes: PipeBuilder.java internal/PipeBuilderImpl.java
Author: npeltier Date: Fri Sep 15 17:33:07 2017 New Revision: 1808470 URL: http://svn.apache.org/viewvc?rev=1808470=rev Log: SLING-7126 add not pipe in pipe builder 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 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=1808470=1808469=1808470=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 15 17:33:07 2017 @@ -135,6 +135,15 @@ public interface PipeBuilder { */ PipeBuilder ref(String expr)throws IllegalAccessException; + +/** + * attach a not pipe to the current context + * @param expr reference + * @return updated instance of PipeBuilder + * @throws IllegalAccessException in case it's called with wrong # of arguments + */ +PipeBuilder not(String expr)throws IllegalAccessException; + /** * parameterized current pipe in the context * @param params key value pair of parameters 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=1808470=1808469=1808470=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 15 17:33:07 2017 @@ -167,6 +167,11 @@ public class PipeBuilderImpl implements } @Override +public PipeBuilder not(String expr) throws IllegalAccessException { +return pipe(NotPipe.RESOURCE_TYPE).expr(expr); +} + +@Override public PipeBuilder with(Object... params) throws IllegalAccessException { return writeToCurrentStep(null, params); }
svn commit: r1808090 - in /sling/trunk/contrib/extensions/sling-pipes/src: main/java/org/apache/sling/pipes/ main/java/org/apache/sling/pipes/internal/ test/java/org/apache/sling/pipes/internal/ test/
Author: npeltier Date: Tue Sep 12 09:31:49 2017 New Revision: 1808090 URL: http://svn.apache.org/viewvc?rev=1808090=rev Log: SLING-7099 split JsonPipe and inputstream capabilities Added: sling/trunk/contrib/extensions/sling-pipes/src/main/java/org/apache/sling/pipes/AbstractInputStreamPipe.java Modified: sling/trunk/contrib/extensions/sling-pipes/src/main/java/org/apache/sling/pipes/internal/JsonPipe.java sling/trunk/contrib/extensions/sling-pipes/src/main/java/org/apache/sling/pipes/internal/PlumberServlet.java sling/trunk/contrib/extensions/sling-pipes/src/test/java/org/apache/sling/pipes/internal/JsonPipeTest.java sling/trunk/contrib/extensions/sling-pipes/src/test/resources/json.json Added: sling/trunk/contrib/extensions/sling-pipes/src/main/java/org/apache/sling/pipes/AbstractInputStreamPipe.java URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/sling-pipes/src/main/java/org/apache/sling/pipes/AbstractInputStreamPipe.java?rev=1808090=auto == --- sling/trunk/contrib/extensions/sling-pipes/src/main/java/org/apache/sling/pipes/AbstractInputStreamPipe.java (added) +++ sling/trunk/contrib/extensions/sling-pipes/src/main/java/org/apache/sling/pipes/AbstractInputStreamPipe.java Tue Sep 12 09:31:49 2017 @@ -0,0 +1,126 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.sling.pipes; + +import org.apache.commons.httpclient.HttpClient; +import org.apache.commons.httpclient.HttpConnectionManager; +import org.apache.commons.httpclient.HttpState; +import org.apache.commons.httpclient.HttpStatus; +import org.apache.commons.httpclient.MultiThreadedHttpConnectionManager; +import org.apache.commons.httpclient.methods.GetMethod; +import org.apache.commons.httpclient.params.HttpConnectionManagerParams; +import org.apache.commons.io.IOUtils; +import org.apache.commons.lang3.StringUtils; +import org.apache.sling.api.resource.Resource; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.io.ByteArrayInputStream; +import java.io.File; +import java.io.FileInputStream; +import java.io.IOException; +import java.io.InputStream; +import java.nio.charset.StandardCharsets; +import java.util.Iterator; +import java.util.regex.Pattern; + +/** + * Input Stream based pipe, coming from web, from request, resource tree, web + */ +public abstract class AbstractInputStreamPipe extends BasePipe { +private static Logger LOGGER = LoggerFactory.getLogger(AbstractInputStreamPipe.class); + +public final String REMOTE_START = "http"; + +protected final Pattern VALID_PATH = Pattern.compile("/([\\w\\d]+/)+[\\w\\d]+"); + +public static final Object BINDING_IS = "org.apache.sling.pipes.RequestInputStream"; + +HttpClient client; + +protected Object binding; + +GetMethod method = null; + +InputStream is; + +public AbstractInputStreamPipe(Plumber plumber, Resource resource) throws Exception { +super(plumber, resource); +configureHttpClient(); +binding = null; +} + +/** + * Configure http client + */ +private void configureHttpClient(){ +HttpConnectionManager manager = new MultiThreadedHttpConnectionManager(); +HttpConnectionManagerParams params = new HttpConnectionManagerParams(); +manager.setParams(params); +client = new HttpClient(manager); +client.getParams().setAuthenticationPreemptive(false); +} + +InputStream getInputStream() throws IOException { +String expr = getExpr(); +if (expr.startsWith(REMOTE_START)) { +//first look at +HttpState httpState = new HttpState(); +String url = getExpr(); +if (StringUtils.isNotBlank(url)) { +method = new GetMethod(url); +LOGGER.debug("Executing GET {}", url); +int status = client.executeMethod(null, method, httpState); +if (status == HttpStatus.SC_OK) { +LOGGER.debug("200 received, streaming content"); +return method.getRes
svn commit: r1808091 - in /sling/trunk/contrib/extensions/sling-pipes: ./ src/main/java/org/apache/sling/pipes/ src/main/java/org/apache/sling/pipes/internal/ src/test/java/org/apache/sling/pipes/inte
Author: npeltier Date: Tue Sep 12 09:32:00 2017 New Revision: 1808091 URL: http://svn.apache.org/viewvc?rev=1808091=rev Log: SLING-7099 introducing csv pipe - adding also unit test (using repository based input stream for now), - adding PipeBuilder api, and fixing javadoc issues Added: sling/trunk/contrib/extensions/sling-pipes/src/main/java/org/apache/sling/pipes/internal/CsvPipe.java sling/trunk/contrib/extensions/sling-pipes/src/test/java/org/apache/sling/pipes/internal/CsvPipeTest.java sling/trunk/contrib/extensions/sling-pipes/src/test/resources/standardTest.csv Modified: sling/trunk/contrib/extensions/sling-pipes/pom.xml sling/trunk/contrib/extensions/sling-pipes/src/main/java/org/apache/sling/pipes/AbstractInputStreamPipe.java 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/main/java/org/apache/sling/pipes/internal/PlumberImpl.java sling/trunk/contrib/extensions/sling-pipes/src/main/java/org/apache/sling/pipes/internal/PlumberServlet.java Modified: sling/trunk/contrib/extensions/sling-pipes/pom.xml URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/sling-pipes/pom.xml?rev=1808091=1808090=1808091=diff == --- sling/trunk/contrib/extensions/sling-pipes/pom.xml (original) +++ sling/trunk/contrib/extensions/sling-pipes/pom.xml Tue Sep 12 09:32:00 2017 @@ -96,6 +96,16 @@ + +org.apache.rat +apache-rat-plugin + + + +src/test/resources/**/*.csv + + + Modified: sling/trunk/contrib/extensions/sling-pipes/src/main/java/org/apache/sling/pipes/AbstractInputStreamPipe.java URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/sling-pipes/src/main/java/org/apache/sling/pipes/AbstractInputStreamPipe.java?rev=1808091=1808090=1808091=diff == --- sling/trunk/contrib/extensions/sling-pipes/src/main/java/org/apache/sling/pipes/AbstractInputStreamPipe.java (original) +++ sling/trunk/contrib/extensions/sling-pipes/src/main/java/org/apache/sling/pipes/AbstractInputStreamPipe.java Tue Sep 12 09:32:00 2017 @@ -30,8 +30,6 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.io.ByteArrayInputStream; -import java.io.File; -import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.nio.charset.StandardCharsets; @@ -40,13 +38,14 @@ import java.util.regex.Pattern; /** * Input Stream based pipe, coming from web, from request, resource tree, web + * binding is updated by the returned iterator */ public abstract class AbstractInputStreamPipe extends BasePipe { private static Logger LOGGER = LoggerFactory.getLogger(AbstractInputStreamPipe.class); public final String REMOTE_START = "http"; -protected final Pattern VALID_PATH = Pattern.compile("/([\\w\\d]+/)+[\\w\\d]+"); +protected final Pattern VALID_PATH = Pattern.compile("/([\\w\\d\\.-_]+/)+[\\w\\d\\.-_]+"); public static final Object BINDING_IS = "org.apache.sling.pipes.RequestInputStream"; @@ -92,15 +91,14 @@ public abstract class AbstractInputStrea } } else if (VALID_PATH.matcher(expr).find() && resolver.getResource(expr) != null -&& resolver.getResource(expr).adaptTo(File.class) != null) { -return new FileInputStream(resolver.getResource(expr).adaptTo(File.class)); +&& resolver.getResource(expr).adaptTo(InputStream.class) != null) { +return resolver.getResource(expr).adaptTo(InputStream.class); } else if (getBindings().getBindings().get(BINDING_IS) != null){ return (InputStream)getBindings().getBindings().get(BINDING_IS); } return new ByteArrayInputStream(expr.getBytes(StandardCharsets.UTF_8)); } - @Override public Object getOutputBinding() { return binding; 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=1808091=1808090=1808091=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 Tue Sep 12 09:32:00 2017 @@ -87,8 +87,15 @@ public interface PipeBuild
svn commit: r1807821 - in /sling/trunk/contrib/extensions/sling-pipes/src: main/java/org/apache/sling/pipes/ main/java/org/apache/sling/pipes/internal/ test/java/org/apache/sling/pipes/ test/java/org/
Author: npeltier Date: Fri Sep 8 20:42:06 2017 New Revision: 1807821 URL: http://svn.apache.org/viewvc?rev=1807821=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=1807820=1807821=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 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 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=1807820=1807821=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 runWith(Object... bindings) throws Exception { +checkArguments(bindings); +Map bindingsMap = new HashMap(); +writeToMap(bindingsMap, bindings); +return run(bindingsMap); +} + +@Override public Set 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/
svn commit: r1807820 - in /sling/trunk/contrib/extensions/sling-pipes/src/main/java/org/apache/sling/pipes: PipeBuilder.java internal/PipeBuilderImpl.java
Author: npeltier Date: Fri Sep 8 20:41:56 2017 New Revision: 1807820 URL: http://svn.apache.org/viewvc?rev=1807820=rev Log: SLING-7110 add ref->reference pipe 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 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=1807820=1807819=1807820=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:41:56 2017 @@ -117,6 +117,14 @@ public interface PipeBuilder { */ PipeBuilder parent(); + +/** + * attach a reference pipe to the current context + * @param expr reference + * @return updated instance of PipeBuilder + */ +PipeBuilder ref(String expr) throws IllegalAccessException; + /** * parameterized current pipe in the context * @param params key value pair of parameters 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=1807820=1807819=1807820=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:41:56 2017 @@ -156,6 +156,11 @@ public class PipeBuilderImpl implements } @Override +public PipeBuilder ref(String expr) throws IllegalAccessException { +return pipe(ReferencePipe.RESOURCE_TYPE).expr(expr); +} + +@Override public PipeBuilder with(Object... params) throws IllegalAccessException { return writeToCurrentStep(null, params); }
svn commit: r1807818 - in /sling/trunk/contrib/extensions/sling-pipes/src/main/java/org/apache/sling/pipes: PipeBuilder.java internal/PipeBuilderImpl.java
Author: npeltier Date: Fri Sep 8 20:41:39 2017 New Revision: 1807818 URL: http://svn.apache.org/viewvc?rev=1807818=rev Log: SLING-7110 add build(path) api 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 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=1807818=1807817=1807818=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:41:39 2017 @@ -158,13 +158,21 @@ public interface PipeBuilder { PipeBuilder conf(Object... properties) throws IllegalAccessException; /** - * builds a configured pipe - * @return Created (not executed) Pipe instance + * builds a configured pipe. The configuration will be placed in a balanced tree under /var/pipes + * @return Created (not executed) Pipe instance. * @throws PersistenceException error occuring when saving the pipe configuration */ Pipe build() throws PersistenceException; /** + * builds a configured pipe. The configuration will be placed under path + * @param path path under which the generated configuration should be stored + * @return Created (not executed) Pipe instance + * @throws PersistenceException error occuring when saving the pipe configuration + */ +Pipe build(String path) throws PersistenceException; + +/** * builds and run configured pipe * @return set of resource path, output of the pipe execution * @throws Exception exceptions thrown by the build or the pipe execution itself 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=1807818=1807817=1807818=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:41:39 2017 @@ -219,7 +219,7 @@ public class PipeBuilderImpl implements * build a time + random based path under /var/pipes * @return full path of future Pipe */ -protected String buildPipePath() { +protected String buildRandomPipePath() { final Calendar now = Calendar.getInstance(); return PIPES_REPOSITORY_PATH + '/' + now.get(Calendar.YEAR) + '/' + now.get(Calendar.MONTH) + '/' + now.get(Calendar.DAY_OF_MONTH) + "/" + UUID.randomUUID().toString(); @@ -239,13 +239,17 @@ public class PipeBuilderImpl implements @Override public Pipe build() throws PersistenceException { -String rootPath = buildPipePath(); -Resource pipeResource = ResourceUtil.getOrCreateResource(resolver, rootPath, ContainerPipe.RESOURCE_TYPE, NT_SLING_FOLDER, true); +return build(buildRandomPipePath()); +} + +@Override +public Pipe build(String path) throws PersistenceException { +Resource pipeResource = ResourceUtil.getOrCreateResource(resolver, path, ContainerPipe.RESOURCE_TYPE, NT_SLING_FOLDER, true); int index = 0; for (Step step : steps){ String name = StringUtils.isNotBlank(step.name) ? step.name : DEFAULT_NAMES.length > index ? DEFAULT_NAMES[index] : Integer.toString(index); index++; -String subPipePath = rootPath + "/" + Pipe.NN_CONF + "/" + name; +String subPipePath = path + "/" + Pipe.NN_CONF + "/" + name; createResource(resolver, subPipePath, NT_SLING_ORDERED_FOLDER, step.properties); logger.debug("built subpipe {}", subPipePath); for (Map.Entry<String, Map> entry : step.confs.entrySet()){ @@ -254,7 +258,7 @@ public class PipeBuilderImpl implements } } resolver.commit(); -logger.debug("built pipe under {}", rootPath); +logger.debug("built pipe under {}", path); return plumber.getPipe(pipeResource); }
svn commit: r1807819 - in /sling/trunk/contrib/extensions/sling-pipes/src: main/java/org/apache/sling/pipes/ main/java/org/apache/sling/pipes/internal/ test/java/org/apache/sling/pipes/
Author: npeltier Date: Fri Sep 8 20:41:49 2017 New Revision: 1807819 URL: http://svn.apache.org/viewvc?rev=1807819=rev Log: SLING-7110 allow configuration of the container 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/main/java/org/apache/sling/pipes/package-info.java sling/trunk/contrib/extensions/sling-pipes/src/test/java/org/apache/sling/pipes/PipeBuilderTest.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=1807819=1807818=1807819=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:41:49 2017 @@ -121,7 +121,7 @@ public interface PipeBuilder { * parameterized current pipe in the context * @param params key value pair of parameters * @return updated instance of PipeBuilder - * @throws IllegalAccessException in case it's called before a pipe is configured, or with wrong # of arguments + * @throws IllegalAccessException in case it's called with wrong # of arguments */ PipeBuilder with(Object... params) throws IllegalAccessException; 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=1807819=1807818=1807819=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:41:49 2017 @@ -44,7 +44,9 @@ public class PipeBuilderImpl implements List steps; -Step currentStep; +Step containerStep = new Step(ContainerPipe.RESOURCE_TYPE); + +Step currentStep = containerStep; Plumber plumber; @@ -153,16 +155,6 @@ public class PipeBuilderImpl implements return pipe(ParentPipe.RESOURCE_TYPE); } -/** - * check of presence of a current step, fails loudly if it's not the case - * @throws IllegalAccessException exception thrown if current step is not present - */ -protected void checkCurrentStep() throws IllegalAccessException { -if (currentStep == null){ -throw new IllegalAccessException("A pipe should have been configured first"); -} -} - @Override public PipeBuilder with(Object... params) throws IllegalAccessException { return writeToCurrentStep(null, params); @@ -181,7 +173,6 @@ public class PipeBuilderImpl implements * @throws IllegalAccessException in case configuration is wrong */ protected PipeBuilder writeToCurrentStep(String name, Object... params) throws IllegalAccessException { -checkCurrentStep(); if (params.length % 2 > 0){ throw new IllegalArgumentException("there should be an even number of arguments"); } @@ -210,7 +201,6 @@ public class PipeBuilderImpl implements @Override public PipeBuilder name(String name) throws IllegalAccessException { -checkCurrentStep(); currentStep.name = name; return this; } @@ -233,8 +223,8 @@ public class PipeBuilderImpl implements * @param data map of properties to add * @throws PersistenceException in case configuration resource couldn't be persisted */ -protected void createResource(ResourceResolver resolver, String path, String type, Map data) throws PersistenceException { -ResourceUtil.getOrCreateResource(resolver, path, data, type, false); +protected Resource createResource(ResourceResolver resolver, String path, String type, Map data) throws PersistenceException { +return ResourceUtil.getOrCreateResource(resolver, path, data, type, false); } @Override @@ -242,20 +232,30 @@ public class PipeBuilderImpl implements return build(buildRandomPipePath()); } +/** + * Persist a step at a given path + * @param path + * @param step + * @return created resource + * @throws PersistenceException + */ +protected Resource persistStep(String path, String parentType, Step step) throws PersistenceException { +Resource re
svn commit: r1807809 - /sling/trunk/contrib/extensions/sling-pipes/src/main/java/org/apache/sling/pipes/internal/PlumberServlet.java
Author: npeltier Date: Fri Sep 8 19:36:21 2017 New Revision: 1807809 URL: http://svn.apache.org/viewvc?rev=1807809=rev Log: SLING-7100 only dryRun=false (or no dryRun param) for dry run Modified: sling/trunk/contrib/extensions/sling-pipes/src/main/java/org/apache/sling/pipes/internal/PlumberServlet.java Modified: sling/trunk/contrib/extensions/sling-pipes/src/main/java/org/apache/sling/pipes/internal/PlumberServlet.java URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/sling-pipes/src/main/java/org/apache/sling/pipes/internal/PlumberServlet.java?rev=1807809=1807808=1807809=diff == --- sling/trunk/contrib/extensions/sling-pipes/src/main/java/org/apache/sling/pipes/internal/PlumberServlet.java (original) +++ sling/trunk/contrib/extensions/sling-pipes/src/main/java/org/apache/sling/pipes/internal/PlumberServlet.java Fri Sep 8 19:36:21 2017 @@ -123,7 +123,7 @@ public class PlumberServlet extends Slin protected Map getBindingsFromRequest(SlingHttpServletRequest request, boolean writeAllowed){ Map bindings = new HashMap<>(); String dryRun = request.getParameter(BasePipe.DRYRUN_KEY); -if (StringUtils.isNotBlank(dryRun) && dryRun.equals(Boolean.TRUE.toString())) { +if (StringUtils.isNotBlank(dryRun) && !dryRun.equals(Boolean.FALSE.toString())) { bindings.put(BasePipe.DRYRUN_KEY, true); } String paramBindings = request.getParameter(PARAM_BINDINGS);
svn commit: r1807808 - /sling/trunk/contrib/extensions/sling-pipes/src/main/java/org/apache/sling/pipes/internal/JsonUtil.java
Author: npeltier Date: Fri Sep 8 19:25:55 2017 New Revision: 1807808 URL: http://svn.apache.org/viewvc?rev=1807808=rev Log: SLING-7115 filter null values out of maps Modified: sling/trunk/contrib/extensions/sling-pipes/src/main/java/org/apache/sling/pipes/internal/JsonUtil.java Modified: sling/trunk/contrib/extensions/sling-pipes/src/main/java/org/apache/sling/pipes/internal/JsonUtil.java URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/sling-pipes/src/main/java/org/apache/sling/pipes/internal/JsonUtil.java?rev=1807808=1807807=1807808=diff == --- sling/trunk/contrib/extensions/sling-pipes/src/main/java/org/apache/sling/pipes/internal/JsonUtil.java (original) +++ sling/trunk/contrib/extensions/sling-pipes/src/main/java/org/apache/sling/pipes/internal/JsonUtil.java Fri Sep 8 19:25:55 2017 @@ -80,6 +80,7 @@ public class JsonUtil { : ((JsonObject) json).entrySet().stream() .map(entry -> new AbstractMap.SimpleEntry<>(entry.getKey(),unbox(entry.getValue( +.filter(entry -> entry.getValue() != null) .collect(Collectors.toMap(Entry::getKey, Entry::getValue))); }
svn commit: r1017705 - /websites/production/sling/content/
Author: npeltier Date: Mon Sep 4 19:49:36 2017 New Revision: 1017705 Log: Publishing svnmucc operation to sling site by npeltier Added: websites/production/sling/content/ - copied from r1017704, websites/staging/sling/trunk/content/
svn commit: r1807296 - /sling/site/trunk/content/documentation/bundles/sling-pipes.mdtext
Author: npeltier Date: Mon Sep 4 19:48:33 2017 New Revision: 1807296 URL: http://svn.apache.org/viewvc?rev=1807296=rev Log: [sling pipes]Â update curl & status documentation Modified: sling/site/trunk/content/documentation/bundles/sling-pipes.mdtext Modified: sling/site/trunk/content/documentation/bundles/sling-pipes.mdtext URL: http://svn.apache.org/viewvc/sling/site/trunk/content/documentation/bundles/sling-pipes.mdtext?rev=1807296=1807295=1807296=diff == --- sling/site/trunk/content/documentation/bundles/sling-pipes.mdtext (original) +++ sling/site/trunk/content/documentation/bundles/sling-pipes.mdtext Mon Sep 4 19:48:33 2017 @@ -98,7 +98,7 @@ which will return you the path of the re In the eventuality of a long execution (synchronous or asynchronous), you can retrieve the status of a pipe, by executing -GET /etc/pipes/mySamplePipe**.status**.json +GET /etc/pipes/mySamplePipe.status.json # Request Parameter `binding` @@ -136,6 +136,7 @@ default response is truncated to 10 item # Request Parameter `async` allow asynchronous execution of the given type. This is advised in case you plan your pipe execution to last longer than the session of your HTTP client. If used, the returned value will be id of the created sling Job. +In that case you can monitor the pipes path with `status` selector as described above until it has the value `finished`. ## Registered Pipes @@ -217,7 +218,7 @@ as an example, will either return `/content/foo` either nothing depending on it not containing `@foo=bar` -echo('content/foo').name('FOO').grep('slingPipesFilter_test','${FOO.foo == "bar"}' +echo('content/foo').name('FOO').grep('slingPipesFilter_test','${FOO.foo == "bar"}').run() is an equivalent
svn commit: r1807293 - /sling/site/trunk/content/documentation/bundles/sling-pipes.mdtext
Author: npeltier Date: Mon Sep 4 19:37:23 2017 New Revision: 1807293 URL: http://svn.apache.org/viewvc?rev=1807293=rev Log: Yet another change for sling fitler pipe Modified: sling/site/trunk/content/documentation/bundles/sling-pipes.mdtext Modified: sling/site/trunk/content/documentation/bundles/sling-pipes.mdtext URL: http://svn.apache.org/viewvc/sling/site/trunk/content/documentation/bundles/sling-pipes.mdtext?rev=1807293=1807292=1807293=diff == --- sling/site/trunk/content/documentation/bundles/sling-pipes.mdtext (original) +++ sling/site/trunk/content/documentation/bundles/sling-pipes.mdtext Mon Sep 4 19:37:23 2017 @@ -209,6 +209,9 @@ property is there with the value instant - `slingPipesFilter_test='${...}'` evaluates the property value, and filters out the stream if the expression is not a boolean or false - `slingPipesFilter_not='true'` inverts the expected result of the filter + +as an example, + echo('/content/foo').grep('foo','bar','slingPipesFilter_not',true).run() will either return `/content/foo` either nothing depending on it
svn commit: r1807292 - /sling/site/trunk/content/documentation/bundles/sling-pipes.mdtext
Author: npeltier Date: Mon Sep 4 19:34:02 2017 New Revision: 1807292 URL: http://svn.apache.org/viewvc?rev=1807292=rev Log: enhance filter pipe documentation Modified: sling/site/trunk/content/documentation/bundles/sling-pipes.mdtext Modified: sling/site/trunk/content/documentation/bundles/sling-pipes.mdtext URL: http://svn.apache.org/viewvc/sling/site/trunk/content/documentation/bundles/sling-pipes.mdtext?rev=1807292=1807291=1807292=diff == --- sling/site/trunk/content/documentation/bundles/sling-pipes.mdtext (original) +++ sling/site/trunk/content/documentation/bundles/sling-pipes.mdtext Mon Sep 4 19:34:02 2017 @@ -206,11 +206,18 @@ outputs the input resource if its matche - `conf` node tree that will be tested against the current input of the pipe, each `/conf/sub@prop=value` will triggers a test on `./sub@prop` property of the current input, testing if its value matches `value` regex. If the special `slingPipesFilter_noChildren=${true}` property is there with the value instantiated as a true boolean, then filter will pass if corresponding node has no children. +- `slingPipesFilter_test='${...}'` evaluates the property value, and filters out the stream if the expression is not a boolean or false - `slingPipesFilter_not='true'` inverts the expected result of the filter -`echo('/content/foo').grep('foo','bar','slingPipesFilter_not',true).run()` will either return `/content/foo` either nothing depending on it +echo('/content/foo').grep('foo','bar','slingPipesFilter_not',true).run() + +will either return `/content/foo` either nothing depending on it not containing `@foo=bar` +echo('content/foo').name('FOO').grep('slingPipesFilter_test','${FOO.foo == "bar"}' + +is an equivalent + ### containers # Container Pipe assemble a sequence of pipes
svn commit: r1017566 - /websites/production/sling/content/
Author: npeltier Date: Fri Sep 1 15:17:06 2017 New Revision: 1017566 Log: Publishing svnmucc operation to sling site by npeltier Added: websites/production/sling/content/ - copied from r1017565, websites/staging/sling/trunk/content/
svn commit: r1806970 - /sling/site/trunk/content/documentation/bundles/sling-pipes.mdtext
Author: npeltier Date: Fri Sep 1 14:59:54 2017 New Revision: 1806970 URL: http://svn.apache.org/viewvc?rev=1806970=rev Log: [sling pipes]Â update samples & formatting Modified: sling/site/trunk/content/documentation/bundles/sling-pipes.mdtext Modified: sling/site/trunk/content/documentation/bundles/sling-pipes.mdtext URL: http://svn.apache.org/viewvc/sling/site/trunk/content/documentation/bundles/sling-pipes.mdtext?rev=1806970=1806969=1806970=diff == --- sling/site/trunk/content/documentation/bundles/sling-pipes.mdtext (original) +++ sling/site/trunk/content/documentation/bundles/sling-pipes.mdtext Fri Sep 1 14:59:54 2017 @@ -56,7 +56,7 @@ Plumber can provider a PipeBuilder with API to quickly configure and run pipes. e.g. - `plumber.newPipe(resolver).xpath('//element(*,nt:unstructured)[@sling:resourceType='to/delete']").rm().run();` + plumber.newPipe(resolver).xpath('//element(*,nt:unstructured)[@sling:resourceType='to/delete']").rm().run(); will search for resource of type `to/delete` and remove them. @@ -72,7 +72,7 @@ PipeBuilder basically will automatically note that that configuration part has shortcuts for some pipes. Typically, above sample is a shorter equivalent of -`plumber.newPipe(resolver).pipe('slingPipes/xpath').expr('//element(*,nt:unstructured)[@sling:resourceType='to/delete']").pipe('slingPipes/rm').run();` + plumber.newPipe(resolver).pipe('slingPipes/xpath').expr('//element(*,nt:unstructured)[@sling:resourceType='to/delete']").pipe('slingPipes/rm').run(); when available, shortcuts will be specified next to each pipe type documentation. @@ -98,7 +98,7 @@ which will return you the path of the re In the eventuality of a long execution (synchronous or asynchronous), you can retrieve the status of a pipe, by executing -GET /etc/pipes/mySamplePipe**.status**.json +GET /etc/pipes/mySamplePipe**.status**.json # Request Parameter `binding` @@ -125,7 +125,7 @@ e.g. will returns something similar to -{"size":2, "items":[{'user':'John Smith','path':'/home/users/q/q123jk1UAZS'},{'user':'John Doe','path':'/home/users/q/q153jk1UAZS'}]} +{"size":2, "items":[{'user':'John Smith','path':'/home/users/q/q123jk1UAZS'},{'user':'John Doe','path':'/home/users/q/q153jk1UAZS'}]} # Request Parameter `dryRun` if parameter dryRun is set to true, and the executed pipe is supposed to modify content, it will log (at best it can) the change it *would* have done, without doing anything @@ -282,7 +282,7 @@ global bindings can be set at pipe execu # slingQuery | write write repository user prefix Ms/Mr depending on gender - .newPipe(resolver).xpath('/jcr:root/home/users//element(*,rep:Users)') + plumber.newPipe(resolver).xpath('/jcr:root/home/users//element(*,rep:Users)') .$('nt:unstructured#profile') .write("fullName","${(profile.gender === 'female' ? 'Ms ' + profile.fullName : 'Mr ' + profile.fullName)}") .run() @@ -290,7 +290,7 @@ write repository user prefix Ms/Mr depen # slingQuery | multiProperty | authorizable | write move badge<->user relation ship from badge->users MV property to a user->badges MV property - .newPipe(resolver).echo('/etc/badges/jcr:content/par') + plumber.newPipe(resolver).echo('/etc/badges/jcr:content/par') .$('[sling:resourceType=myApp/components/badge]').name('badge') .pipe('slingPipes/multiProperty').path('${path.badge}/profiles').name('profile') .auth('${profile}').name('user') @@ -299,72 +299,37 @@ move badge<->user relation ship from bad .run() -### xpath | json | write -this use case is for completing repository profiles with external system's data (that has an json api) +# echo | $ | $ | echo | json | write +this use case is for completing repository website with external system's data (that has an json api), +it does -{ - "jcr:primaryType": "nt:unstructured", - "jcr:description": "this pipe retrieves json info from an external system and writes them to the user profile, uses moment.js, it - distributes modified resources using publish distribution agent", - "sling:resourceType": "slingPipes/container", - "distribution.agent": "publish", - "additionalScripts": "/etc/source/moment.js", - "conf": { -"jcr:primaryType": "sling:OrderedFolder", -"profile": { - "jcr:primaryType": "sling:OrderedFolder", - "expr": "/jcr:root/home/users//element(profile,nt:unstructured)[@uid]", - "jcr:description": "query all user profile nodes", - "sling:resourc
svn commit: r1017482 - /websites/production/sling/content/
Author: npeltier Date: Wed Aug 30 14:06:12 2017 New Revision: 1017482 Log: Publishing svnmucc operation to sling site by npeltier Added: websites/production/sling/content/ - copied from r1017481, websites/staging/sling/trunk/content/
svn commit: r1806694 - /sling/site/trunk/content/documentation/bundles/sling-pipes.mdtext
Author: npeltier Date: Wed Aug 30 13:59:44 2017 New Revision: 1806694 URL: http://svn.apache.org/viewvc?rev=1806694=rev Log: Update documentation to match release Apache Sling 1.0.4 Modified: sling/site/trunk/content/documentation/bundles/sling-pipes.mdtext Modified: sling/site/trunk/content/documentation/bundles/sling-pipes.mdtext URL: http://svn.apache.org/viewvc/sling/site/trunk/content/documentation/bundles/sling-pipes.mdtext?rev=1806694=1806693=1806694=diff == --- sling/site/trunk/content/documentation/bundles/sling-pipes.mdtext (original) +++ sling/site/trunk/content/documentation/bundles/sling-pipes.mdtext Wed Aug 30 13:59:44 2017 @@ -1,12 +1,13 @@ Title: Sling Pipes -tool for doing extract - transform - load operations through a resource tree configuration. +tool set for doing extract - transform - load operations by chaining proven code bits. often one-shot data transformations need sample code to be written & executed. This tiny tool set intends to provide ability to do such transformations with proven & reusable blocks called pipes, streaming resources from one to the other. ## What is a pipe getOutputBinding + ^ | getInput +---+---+ getOutput @@ -17,21 +18,22 @@ often one-shot data transformations need A sling pipe is essentially a sling resource stream: -- it provides an output as a sling resource iterator -- it gets its input either from a configured path, either, if its chained (see container pipes below), from another pipe's output -- each pipe can have additional dynamic inputs using other's bindings, and outputing its own bindings +- it provides an output as a sling resource iterator, +- it gets its input either from a configured path, either from former pipe's output, +- each pipe can have contextual inputs using any other pipe's bindings, and outputting its own bindings At this moment, there are 3 types of pipes to consider: - "reader" pipes, that will just output a set of resource depending on the input -- "writer" pipes, that write to the repository, depending on configuration and output +- "writer" pipes, that modify the repository, depending on configuration and input - "container" pipes, that contains pipes, and whose job is to chain their execution : input is the input of their first pipe, output is the output of the last pipe it contains. -A `Plumber` osgi service is provided to help getting & executing pipes. +A `Plumber` osgi service is provided to help getting, building & executing pipes. -## Registered Pipes -a pipe configuration is a jcr node, with: +## How to configure & execute a pipe + +A pipe configuration is ultimately a jcr node, with properties (varying a lot depending on the pipe type): - `sling:resourceType` property, which must be a pipe type registered by the plumber - `name` property, that will be used in bindings as an id, and will be the key for the output bindings (default value being a value map of the current output resource). Note that the node name will be used in case no name is provided. @@ -41,46 +43,147 @@ a pipe configuration is a jcr node, with - `additionalScripts` is a multi value property to declare scripts that can be reused in expressions - `conf` optional child node that contains addition configuration of the pipe (depending on the type) +This configuration can be generated quickly through Pipe Builder API. + +Once configuration is done, it's possible to execute Pipes + +- through plain java, with configured pipe resource as parameter, +- through PipeBuilder API, +- through HTTP API with GET (read) or POST (read/write) methods against configured pipe resource + +### Pipe Builder API +Plumber can provider a PipeBuilder with `newPipe(ResourceResolver resolver)` API, that gives a fluent +API to quickly configure and run pipes. +e.g. + + `plumber.newPipe(resolver).xpath('//element(*,nt:unstructured)[@sling:resourceType='to/delete']").rm().run();` + +will search for resource of type `to/delete` and remove them. + +PipeBuilder basically will automatically configure a container pipe, chaining pipes you can configure + with a fluent API: + +- `pipe(type)` generate a new subpipe, +- `with(Object...)` add to actual subpipe configuration node key/value configurations, +- `expr(String)` add an expression configuration +- `path(String)` add an input path, +- `name(String)` specify a name (there would be a default one, named 'one', 'two', ... depending on the position otherwise), +- `conf(Object...)` add an extra configuration node with key/value properties/values + +note that that configuration part has shortcuts for some pipes. Typically, above sample is a shorter equivalent of + +`plumber.newPipe(resolver).pipe('slingPipes/xpath').expr('//element(*,nt:unstructured)[@sling:
svn commit: r1806643 - /sling/tags/org.apache.sling.pipes-1.0.4/
Author: npeltier Date: Tue Aug 29 20:23:19 2017 New Revision: 1806643 URL: http://svn.apache.org/viewvc?rev=1806643=rev Log: [maven-release-plugin] copy for tag org.apache.sling.pipes-1.0.4 Added: sling/tags/org.apache.sling.pipes-1.0.4/ - copied from r1806641, sling/trunk/contrib/extensions/sling-pipes/
svn commit: r1806641 - /sling/trunk/contrib/extensions/sling-pipes/pom.xml
Author: npeltier Date: Tue Aug 29 20:23:05 2017 New Revision: 1806641 URL: http://svn.apache.org/viewvc?rev=1806641=rev Log: [maven-release-plugin] prepare release org.apache.sling.pipes-1.0.4 Modified: sling/trunk/contrib/extensions/sling-pipes/pom.xml Modified: sling/trunk/contrib/extensions/sling-pipes/pom.xml URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/sling-pipes/pom.xml?rev=1806641=1806640=1806641=diff == --- sling/trunk/contrib/extensions/sling-pipes/pom.xml (original) +++ sling/trunk/contrib/extensions/sling-pipes/pom.xml Tue Aug 29 20:23:05 2017 @@ -30,7 +30,7 @@ org.apache.sling.pipes bundle - 1.0.3-SNAPSHOT + 1.0.4 Apache Sling Pipes bulk content changes tool @@ -41,9 +41,9 @@ - scm:svn:http://svn.apache.org/repos/asf/sling/trunk/contrib/extensions/sling-pipes - scm:svn:https://svn.apache.org/repos/asf/sling/trunk/contrib/extensions/sling-pipes - http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/sling-pipes + scm:svn:http://svn.apache.org/repos/asf/sling/tags/org.apache.sling.pipes-1.0.4 + scm:svn:https://svn.apache.org/repos/asf/sling/tags/org.apache.sling.pipes-1.0.4 + http://svn.apache.org/viewvc/sling/tags/org.apache.sling.pipes-1.0.4
svn commit: r1806644 - /sling/trunk/contrib/extensions/sling-pipes/pom.xml
Author: npeltier Date: Tue Aug 29 20:23:22 2017 New Revision: 1806644 URL: http://svn.apache.org/viewvc?rev=1806644=rev Log: [maven-release-plugin] prepare for next development iteration Modified: sling/trunk/contrib/extensions/sling-pipes/pom.xml Modified: sling/trunk/contrib/extensions/sling-pipes/pom.xml URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/sling-pipes/pom.xml?rev=1806644=1806643=1806644=diff == --- sling/trunk/contrib/extensions/sling-pipes/pom.xml (original) +++ sling/trunk/contrib/extensions/sling-pipes/pom.xml Tue Aug 29 20:23:22 2017 @@ -30,7 +30,7 @@ org.apache.sling.pipes bundle - 1.0.4 + 1.0.5-SNAPSHOT Apache Sling Pipes bulk content changes tool @@ -41,9 +41,9 @@ - scm:svn:http://svn.apache.org/repos/asf/sling/tags/org.apache.sling.pipes-1.0.4 - scm:svn:https://svn.apache.org/repos/asf/sling/tags/org.apache.sling.pipes-1.0.4 - http://svn.apache.org/viewvc/sling/tags/org.apache.sling.pipes-1.0.4 + scm:svn:http://svn.apache.org/repos/asf/sling/trunk/contrib/extensions/sling-pipes + scm:svn:https://svn.apache.org/repos/asf/sling/trunk/contrib/extensions/sling-pipes + http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/sling-pipes
svn commit: r1806636 - in /sling/trunk/contrib/extensions/sling-pipes/src: main/java/org/apache/sling/pipes/ main/java/org/apache/sling/pipes/internal/ test/java/org/apache/sling/pipes/ test/java/org/
Author: npeltier Date: Tue Aug 29 19:55:37 2017 New Revision: 1806636 URL: http://svn.apache.org/viewvc?rev=1806636=rev Log: SLING-7013 pipe builder api updates - make with extensible, - add async run & binding run, - move filter api to grep, - remove exception throwing from the api, when it will never happen, - add some integration tests, - fix a specific case of reference call through pipebuilder (container -> reference -> container -> pipe) Added: sling/trunk/contrib/extensions/sling-pipes/src/test/java/org/apache/sling/pipes/internal/ReferencePipeTest.java - copied, changed from r1806595, sling/trunk/contrib/extensions/sling-pipes/src/test/java/org/apache/sling/pipes/ReferencePipeTest.java sling/trunk/contrib/extensions/sling-pipes/src/test/java/org/apache/sling/pipes/it/PipeBuilderIT.java Removed: sling/trunk/contrib/extensions/sling-pipes/src/test/java/org/apache/sling/pipes/ReferencePipeTest.java Modified: sling/trunk/contrib/extensions/sling-pipes/src/main/java/org/apache/sling/pipes/ContainerPipe.java 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/Plumber.java sling/trunk/contrib/extensions/sling-pipes/src/main/java/org/apache/sling/pipes/ReferencePipe.java sling/trunk/contrib/extensions/sling-pipes/src/main/java/org/apache/sling/pipes/internal/PipeBuilderImpl.java sling/trunk/contrib/extensions/sling-pipes/src/main/java/org/apache/sling/pipes/internal/PlumberImpl.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/internal/PathPipeTest.java sling/trunk/contrib/extensions/sling-pipes/src/test/java/org/apache/sling/pipes/it/PipesTestSupport.java sling/trunk/contrib/extensions/sling-pipes/src/test/java/org/apache/sling/pipes/it/PlumberTestIT.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=1806636=1806635=1806636=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 Aug 29 19:55:37 2017 @@ -77,6 +77,14 @@ public class ContainerPipe extends BaseP } @Override +public void setBindings(PipeBindings bindings) { +this.bindings = bindings; +for (Pipe pipe : pipeList){ +pipe.setBindings(bindings); +} +} + +@Override public Iterator getOutput() { return new ContainerResourceIterator(this); } 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=1806636=1806635=1806636=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 Tue Aug 29 19:55:37 2017 @@ -17,7 +17,9 @@ package org.apache.sling.pipes; import org.apache.sling.api.resource.PersistenceException; +import org.apache.sling.event.jobs.Job; +import java.util.Map; import java.util.Set; /** @@ -42,7 +44,7 @@ public interface PipeBuilder { * attach a write pipe to the current context * @param conf configuration parameters * @return updated instance of PipeBuilder - * @throws IllegalAccessException in case it's called in a bad time + * @throws IllegalAccessException in case it's called with bad configuration */ PipeBuilder write(Object... conf) throws IllegalAccessException; @@ -50,15 +52,15 @@ public interface PipeBuilder { * attach a filter pipe to the current context * @param conf configuration parameters * @return updated instance of PipeBuilder - * @throws IllegalAccessException in case it's called in a bad time + * @throws IllegalAccessException in case it's called with bad configuration */ -PipeBuilder filter(Object... conf) throws IllegalAccessException; +PipeBuilder grep(Object... conf) throws IllegalAccessException; /** * attach an authorizable pipe to the current context * @param conf configuration key value pairs for authorizable (see pipe's doc) * @return updated instance of PipeBuilder - * @throws IllegalAccessException
svn commit: r1806595 - in /sling/trunk/testing/mocks/jcr-mock/src: main/java/org/apache/sling/testing/mock/jcr/MockNode.java test/java/org/apache/sling/testing/mock/jcr/MockNodeTest.java
Author: npeltier Date: Tue Aug 29 14:02:30 2017 New Revision: 1806595 URL: http://svn.apache.org/viewvc?rev=1806595=rev Log: SLING-7089 support for MockNode.get* with globs Modified: sling/trunk/testing/mocks/jcr-mock/src/main/java/org/apache/sling/testing/mock/jcr/MockNode.java sling/trunk/testing/mocks/jcr-mock/src/test/java/org/apache/sling/testing/mock/jcr/MockNodeTest.java Modified: sling/trunk/testing/mocks/jcr-mock/src/main/java/org/apache/sling/testing/mock/jcr/MockNode.java URL: http://svn.apache.org/viewvc/sling/trunk/testing/mocks/jcr-mock/src/main/java/org/apache/sling/testing/mock/jcr/MockNode.java?rev=1806595=1806594=1806595=diff == --- sling/trunk/testing/mocks/jcr-mock/src/main/java/org/apache/sling/testing/mock/jcr/MockNode.java (original) +++ sling/trunk/testing/mocks/jcr-mock/src/main/java/org/apache/sling/testing/mock/jcr/MockNode.java Tue Aug 29 14:02:30 2017 @@ -42,6 +42,7 @@ import javax.jcr.version.VersionHistory; import org.apache.commons.lang3.StringUtils; import org.apache.jackrabbit.JcrConstants; +import org.apache.jackrabbit.commons.ItemNameMatcher; import org.apache.jackrabbit.commons.iterator.NodeIteratorAdapter; import org.apache.jackrabbit.commons.iterator.PropertyIteratorAdapter; @@ -106,6 +107,18 @@ class MockNode extends AbstractItem impl } @Override +public NodeIterator getNodes(final String[] nameGlobs) throws RepositoryException { +RangeIterator items = getMockedSession().listChildren(getPath(), new ItemFilter() { +@Override +public boolean accept(final ItemData item) throws RepositoryException { +return item.isNode() && ItemNameMatcher.matches(item.getName(), nameGlobs); +} +}); +return new NodeIteratorAdapter(items, items.getSize()); +} + + +@Override public PropertyIterator getProperties() throws RepositoryException { RangeIterator items = getMockedSession().listChildren(getPath(), new ItemFilter() { @Override @@ -129,6 +142,17 @@ class MockNode extends AbstractItem impl } @Override +public PropertyIterator getProperties(final String[] nameGlobs) throws RepositoryException { +RangeIterator items = getMockedSession().listChildren(getPath(), new ItemFilter() { +@Override +public boolean accept(final ItemData item) throws RepositoryException { +return item.isProperty() && ItemNameMatcher.matches(item.getName(), nameGlobs); +} +}); +return new PropertyIteratorAdapter(items, items.getSize()); +} + +@Override public Property getProperty(final String relPath) throws RepositoryException { String path = makeAbsolutePath(relPath); return getSession().getProperty(path); @@ -494,16 +518,6 @@ class MockNode extends AbstractItem impl throw new UnsupportedOperationException(); } -@Override -public NodeIterator getNodes(final String[] nameGlobs) throws RepositoryException { -throw new UnsupportedOperationException(); -} - -@Override -public PropertyIterator getProperties(final String[] nameGlobs) throws RepositoryException { -throw new UnsupportedOperationException(); -} - @Override public PropertyIterator getReferences(final String name) throws RepositoryException { throw new UnsupportedOperationException(); Modified: sling/trunk/testing/mocks/jcr-mock/src/test/java/org/apache/sling/testing/mock/jcr/MockNodeTest.java URL: http://svn.apache.org/viewvc/sling/trunk/testing/mocks/jcr-mock/src/test/java/org/apache/sling/testing/mock/jcr/MockNodeTest.java?rev=1806595=1806594=1806595=diff == --- sling/trunk/testing/mocks/jcr-mock/src/test/java/org/apache/sling/testing/mock/jcr/MockNodeTest.java (original) +++ sling/trunk/testing/mocks/jcr-mock/src/test/java/org/apache/sling/testing/mock/jcr/MockNodeTest.java Tue Aug 29 14:02:30 2017 @@ -45,6 +45,7 @@ public class MockNodeTest { private Node rootNode; private Node node1; private Property prop1; +private Property prop2; private Node node11; @Before @@ -72,6 +73,10 @@ public class MockNodeTest { assertEquals(1, nodes.getSize()); assertEquals(this.node11, nodes.nextNode()); +nodes = this.node1.getNodes(new String[]{"node*"}); +assertEquals(1, nodes.getSize()); +assertEquals(this.node11, nodes.nextNode()); + nodes = this.node1.getNodes("unknown?"); assertEquals(0, nodes.getSize()); } @@ -90,6 +95,10 @@ public class MockNodeTest { assertEquals(1, properties.getSize()); assertEquals(this.prop1, properties.next()); +properties = this.node1.getProperties(new String[
svn commit: r1806590 - in /sling/trunk/contrib/extensions/sling-pipes: ./ src/main/java/org/apache/sling/pipes/ src/main/java/org/apache/sling/pipes/internal/ src/test/java/org/apache/sling/pipes/inte
Author: npeltier Date: Tue Aug 29 13:22:11 2017 New Revision: 1806590 URL: http://svn.apache.org/viewvc?rev=1806590=rev Log: SLING-7076 introducing traverse pipe - pipe, - integration in pipe builder, - unit test, - integration test Added: sling/trunk/contrib/extensions/sling-pipes/src/main/java/org/apache/sling/pipes/internal/TraversePipe.java sling/trunk/contrib/extensions/sling-pipes/src/test/java/org/apache/sling/pipes/internal/TraversePipeTest.java sling/trunk/contrib/extensions/sling-pipes/src/test/resources/traverse.json Modified: sling/trunk/contrib/extensions/sling-pipes/pom.xml 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/main/java/org/apache/sling/pipes/internal/PlumberImpl.java sling/trunk/contrib/extensions/sling-pipes/src/test/java/org/apache/sling/pipes/it/PlumberTestIT.java Modified: sling/trunk/contrib/extensions/sling-pipes/pom.xml URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/sling-pipes/pom.xml?rev=1806590=1806589=1806590=diff == --- sling/trunk/contrib/extensions/sling-pipes/pom.xml (original) +++ sling/trunk/contrib/extensions/sling-pipes/pom.xml Tue Aug 29 13:22:11 2017 @@ -163,6 +163,12 @@ provided + commons-collections + commons-collections + 3.2.2 + provided + + commons-httpclient commons-httpclient 3.1 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=1806590=1806589=1806590=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 Tue Aug 29 13:22:11 2017 @@ -109,6 +109,13 @@ public interface PipeBuilder { PipeBuilder echo(String path) throws IllegalAccessException; /** + * attach a traverse pipe to the current context + * @return + * @throws IllegalAccessException + */ +PipeBuilder traverse() throws IllegalAccessException; + +/** * attach a parent pipe to the current context * @return updated instance of PipeBuilder */ 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=1806590=1806589=1806590=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 Tue Aug 29 13:22:11 2017 @@ -108,6 +108,11 @@ public class PipeBuilderImpl implements } @Override +public PipeBuilder traverse() { +return pipe(TraversePipe.RESOURCE_TYPE); +} + +@Override public PipeBuilder json(String expr) throws IllegalAccessException { return pipe(JsonPipe.RESOURCE_TYPE).expr(expr); } Modified: sling/trunk/contrib/extensions/sling-pipes/src/main/java/org/apache/sling/pipes/internal/PlumberImpl.java URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/sling-pipes/src/main/java/org/apache/sling/pipes/internal/PlumberImpl.java?rev=1806590=1806589=1806590=diff == --- sling/trunk/contrib/extensions/sling-pipes/src/main/java/org/apache/sling/pipes/internal/PlumberImpl.java (original) +++ sling/trunk/contrib/extensions/sling-pipes/src/main/java/org/apache/sling/pipes/internal/PlumberImpl.java Tue Aug 29 13:22:11 2017 @@ -118,6 +118,7 @@ public class PlumberImpl implements Plum registerPipe(PathPipe.RESOURCE_TYPE, PathPipe.class); registerPipe(FilterPipe.RESOURCE_TYPE, FilterPipe.class); registerPipe(NotPipe.RESOURCE_TYPE, NotPipe.class); +registerPipe(TraversePipe.RESOURCE_TYPE, TraversePipe.class); } @Reference(policy= ReferencePolicy.DYNAMIC, cardinality= ReferenceCardinality.OPTIONAL) Added: sling/trunk/contrib/extensions/sling-pipes/src/main/java/org/apache/sling/pipes/internal/TraversePipe.java URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/sling-pipes/src/main/java/org/apache/sling/pipes/internal/TraversePipe.java?rev=1806590=auto
svn commit: r1801865 - in /sling/trunk/contrib/extensions/sling-pipes: pom.xml src/main/java/org/apache/sling/pipes/internal/PathPipe.java
Author: npeltier Date: Thu Jul 13 18:58:29 2017 New Revision: 1801865 URL: http://svn.apache.org/viewvc?rev=1801865=rev Log: SLING-7008 remove private package import Modified: sling/trunk/contrib/extensions/sling-pipes/pom.xml sling/trunk/contrib/extensions/sling-pipes/src/main/java/org/apache/sling/pipes/internal/PathPipe.java Modified: sling/trunk/contrib/extensions/sling-pipes/pom.xml URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/sling-pipes/pom.xml?rev=1801865=1801864=1801865=diff == --- sling/trunk/contrib/extensions/sling-pipes/pom.xml (original) +++ sling/trunk/contrib/extensions/sling-pipes/pom.xml Thu Jul 13 18:58:29 2017 @@ -55,7 +55,6 @@ org.apache.sling.distribution;resolution:=optional, - org.apache.sling.query;version=3.0.0, * Modified: sling/trunk/contrib/extensions/sling-pipes/src/main/java/org/apache/sling/pipes/internal/PathPipe.java URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/sling-pipes/src/main/java/org/apache/sling/pipes/internal/PathPipe.java?rev=1801865=1801864=1801865=diff == --- sling/trunk/contrib/extensions/sling-pipes/src/main/java/org/apache/sling/pipes/internal/PathPipe.java (original) +++ sling/trunk/contrib/extensions/sling-pipes/src/main/java/org/apache/sling/pipes/internal/PathPipe.java Thu Jul 13 18:58:29 2017 @@ -24,7 +24,6 @@ import org.apache.sling.api.resource.Res import org.apache.sling.api.resource.ResourceUtil; import org.apache.sling.pipes.BasePipe; import org.apache.sling.pipes.Plumber; -import org.apache.sling.query.util.IteratorUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -71,7 +70,7 @@ public class PathPipe extends BasePipe { String expression = getExpr(); try { String path = expression.startsWith(SLASH) ? expression : getInput().getPath() + SLASH + expression; -output = IteratorUtils.singleElementIterator(ResourceUtil.getOrCreateResource(resolver, path, resourceType, intermediateType, autosave)); +output = Collections.singleton(ResourceUtil.getOrCreateResource(resolver, path, resourceType, intermediateType, autosave)).iterator(); } catch (PersistenceException e){ logger.error ("Not able to create path {}", expression, e); }
svn commit: r1801807 - /sling/tags/org.apache.sling.pipes-1.0.2/
Author: npeltier Date: Thu Jul 13 07:55:43 2017 New Revision: 1801807 URL: http://svn.apache.org/viewvc?rev=1801807=rev Log: cancelling the release Removed: sling/tags/org.apache.sling.pipes-1.0.2/
svn commit: r1015249 - /websites/production/sling/content/
Author: npeltier Date: Tue Jul 11 09:18:46 2017 New Revision: 1015249 Log: Publishing svnmucc operation to sling site by npeltier Added: websites/production/sling/content/ - copied from r1015248, websites/staging/sling/trunk/content/
svn commit: r1801579 - /sling/site/trunk/content/documentation/development/release-management.mdtext
Author: npeltier Date: Tue Jul 11 09:17:41 2017 New Revision: 1801579 URL: http://svn.apache.org/viewvc?rev=1801579=rev Log: Adding instructions in case releaser hit MGPG-59 Modified: sling/site/trunk/content/documentation/development/release-management.mdtext Modified: sling/site/trunk/content/documentation/development/release-management.mdtext URL: http://svn.apache.org/viewvc/sling/site/trunk/content/documentation/development/release-management.mdtext?rev=1801579=1801578=1801579=diff == --- sling/site/trunk/content/documentation/development/release-management.mdtext (original) +++ sling/site/trunk/content/documentation/development/release-management.mdtext Tue Jul 11 09:17:41 2017 @@ -66,6 +66,7 @@ First prepare your POMs for release: ... * If you experience an error during deployment like a HTTP 401 check your settings for the required server entries as outlined in the *Prerequisites* +* Depending on the OS & the gpg version you have, you might hit https://issues.apache.org/jira/browse/MGPG-59, in which case you need, before maven command, to run `gpg --use-agent --armor --detach-sign --output $(mktemp) pom.xml` * Make sure the generated artifacts respect the Apache release [rules](http://www.apache.org/dev/release.html): NOTICE and LICENSE files should be present in the META-INF directory within the jar. For \-sources artifacts, be sure that your POM does not use the maven-source-plugin:2.0.3 which is broken. The recommended version at this time is 2.0.4 * You should verify the deployment under the [snapshot](https://repository.apache.org/content/groups/snapshots/org/apache/sling) repository on Apache
svn commit: r1801576 - /sling/trunk/contrib/extensions/sling-pipes/pom.xml
Author: npeltier Date: Tue Jul 11 08:48:57 2017 New Revision: 1801576 URL: http://svn.apache.org/viewvc?rev=1801576=rev Log: [maven-release-plugin] prepare for next development iteration Modified: sling/trunk/contrib/extensions/sling-pipes/pom.xml Modified: sling/trunk/contrib/extensions/sling-pipes/pom.xml URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/sling-pipes/pom.xml?rev=1801576=1801575=1801576=diff == --- sling/trunk/contrib/extensions/sling-pipes/pom.xml (original) +++ sling/trunk/contrib/extensions/sling-pipes/pom.xml Tue Jul 11 08:48:57 2017 @@ -30,7 +30,7 @@ org.apache.sling.pipes bundle - 1.0.2 + 1.0.3-SNAPSHOT Apache Sling Pipes bulk content changes tool @@ -40,9 +40,9 @@ - scm:svn:http://svn.apache.org/repos/asf/sling/tags/org.apache.sling.pipes-1.0.2 - scm:svn:https://svn.apache.org/repos/asf/sling/tags/org.apache.sling.pipes-1.0.2 - http://svn.apache.org/viewvc/sling/tags/org.apache.sling.pipes-1.0.2 + scm:svn:http://svn.apache.org/repos/asf/sling/trunk/contrib/extensions/sling-pipes + scm:svn:https://svn.apache.org/repos/asf/sling/trunk/contrib/extensions/sling-pipes + http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/sling-pipes
svn commit: r1801575 - /sling/tags/org.apache.sling.pipes-1.0.2/
Author: npeltier Date: Tue Jul 11 08:48:55 2017 New Revision: 1801575 URL: http://svn.apache.org/viewvc?rev=1801575=rev Log: [maven-release-plugin] copy for tag org.apache.sling.pipes-1.0.2 Added: sling/tags/org.apache.sling.pipes-1.0.2/ - copied from r1801574, sling/trunk/contrib/extensions/sling-pipes/
svn commit: r1801574 - /sling/trunk/contrib/extensions/sling-pipes/pom.xml
Author: npeltier Date: Tue Jul 11 08:48:42 2017 New Revision: 1801574 URL: http://svn.apache.org/viewvc?rev=1801574=rev Log: [maven-release-plugin] prepare release org.apache.sling.pipes-1.0.2 Modified: sling/trunk/contrib/extensions/sling-pipes/pom.xml Modified: sling/trunk/contrib/extensions/sling-pipes/pom.xml URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/sling-pipes/pom.xml?rev=1801574=1801573=1801574=diff == --- sling/trunk/contrib/extensions/sling-pipes/pom.xml (original) +++ sling/trunk/contrib/extensions/sling-pipes/pom.xml Tue Jul 11 08:48:42 2017 @@ -30,7 +30,7 @@ org.apache.sling.pipes bundle - 1.0.1-SNAPSHOT + 1.0.2 Apache Sling Pipes bulk content changes tool @@ -40,9 +40,9 @@ - scm:svn:http://svn.apache.org/repos/asf/sling/trunk/contrib/extensions/sling-pipes - scm:svn:https://svn.apache.org/repos/asf/sling/trunk/contrib/extensions/sling-pipes - http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/sling-pipes + scm:svn:http://svn.apache.org/repos/asf/sling/tags/org.apache.sling.pipes-1.0.2 + scm:svn:https://svn.apache.org/repos/asf/sling/tags/org.apache.sling.pipes-1.0.2 + http://svn.apache.org/viewvc/sling/tags/org.apache.sling.pipes-1.0.2
svn commit: r1801566 - in /sling/trunk/contrib/extensions/sling-pipes/src: main/java/org/apache/sling/pipes/internal/PathPipe.java test/java/org/apache/sling/pipes/internal/PathPipeTest.java
Author: npeltier Date: Tue Jul 11 08:24:55 2017 New Revision: 1801566 URL: http://svn.apache.org/viewvc?rev=1801566=rev Log: SLING-6998 use ResourceUtil for path creation also added some unit tests for PathPipe Added: sling/trunk/contrib/extensions/sling-pipes/src/test/java/org/apache/sling/pipes/internal/PathPipeTest.java Modified: sling/trunk/contrib/extensions/sling-pipes/src/main/java/org/apache/sling/pipes/internal/PathPipe.java Modified: sling/trunk/contrib/extensions/sling-pipes/src/main/java/org/apache/sling/pipes/internal/PathPipe.java URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/sling-pipes/src/main/java/org/apache/sling/pipes/internal/PathPipe.java?rev=1801566=1801565=1801566=diff == --- sling/trunk/contrib/extensions/sling-pipes/src/main/java/org/apache/sling/pipes/internal/PathPipe.java (original) +++ sling/trunk/contrib/extensions/sling-pipes/src/main/java/org/apache/sling/pipes/internal/PathPipe.java Tue Jul 11 08:24:55 2017 @@ -18,83 +18,61 @@ package org.apache.sling.pipes.internal; import java.util.Collections; import java.util.Iterator; -import java.util.StringTokenizer; - -import javax.jcr.Node; -import javax.jcr.RepositoryException; -import javax.jcr.Session; +import org.apache.sling.api.resource.PersistenceException; import org.apache.sling.api.resource.Resource; import org.apache.sling.api.resource.ResourceUtil; import org.apache.sling.pipes.BasePipe; import org.apache.sling.pipes.Plumber; +import org.apache.sling.query.util.IteratorUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import static org.apache.sling.jcr.resource.JcrResourceConstants.NT_SLING_FOLDER; + /** * creates or get given expression's path and returns corresponding resource + * this pipe can be configured with the following properties: + * + * nodeType resource type with which the leaf node of the created path will be created + * intermediateType resource type with which intermediate nodse of the created path will be created + * autosave flag indicating wether this pipe should triggers a commit at the end of the execution + * */ public class PathPipe extends BasePipe { public static final String RESOURCE_TYPE = RT_PREFIX + "path"; -public static final String PN_NODETYPE = "nodeType"; +public static final String PN_RESOURCETYPE = "nodeType"; +public static final String PN_INTERMEDIATE = "intermediateType"; public static final String PN_AUTOSAVE = "autosave"; +public static final String SLASH = "/"; -String nodeType; - +String resourceType; +String intermediateType; boolean autosave; private final Logger logger = LoggerFactory.getLogger(PathPipe.class); public PathPipe(Plumber plumber, Resource resource) throws Exception { super(plumber, resource); -nodeType = properties.get(PN_NODETYPE, "sling:Folder"); +resourceType = properties.get(PN_RESOURCETYPE, NT_SLING_FOLDER); +intermediateType = properties.get(PN_INTERMEDIATE, NT_SLING_FOLDER); autosave = properties.get(PN_AUTOSAVE, true); } @Override +public boolean modifiesContent() { +return true; +} + +@Override public Iterator getOutput() { Iterator output = Collections.emptyIterator(); String expression = getExpr(); -Node leaf = null; -boolean transientChange = false; try { -String relativePath = expression.substring(1); -Node parentNode = resolver.adaptTo(Session.class).getRootNode(); -if (!parentNode.hasNode(relativePath)) { -Node node = parentNode; -int pos = relativePath.lastIndexOf('/'); -if (pos != -1) { -final StringTokenizer st = new StringTokenizer(relativePath.substring(0, pos), "/"); -while (st.hasMoreTokens()) { -final String token = st.nextToken(); -if (!node.hasNode(token)) { -try { -node.addNode(token, nodeType); -transientChange = true; -} catch (RepositoryException re) { -// we ignore this as this folder might be created from a different task -node.getSession().refresh(false); -} -} -node = node.getNode(token); -} -relativePath = relativePath.substring(pos + 1); -} -if (!node.hasNode(relativePath)) { -node.addNode(relativePath, nodeType); -transientChange = true; -} -
svn commit: r1801516 - /sling/tags/org.apache.sling.pipes-1.0.0/
Author: npeltier Date: Mon Jul 10 18:54:29 2017 New Revision: 1801516 URL: http://svn.apache.org/viewvc?rev=1801516=rev Log: cancelling the release Removed: sling/tags/org.apache.sling.pipes-1.0.0/
svn commit: r1801506 - in /sling/trunk/contrib/extensions/sling-pipes/src/main/java/org/apache/sling/pipes: PipeBuilder.java internal/PipeBuilderImpl.java
Author: npeltier Date: Mon Jul 10 17:39:14 2017 New Revision: 1801506 URL: http://svn.apache.org/viewvc?rev=1801506=rev Log: SLING-7002 fix PipeBuilder properties value 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 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=1801506=1801505=1801506=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 Mon Jul 10 17:39:14 2017 @@ -121,7 +121,7 @@ public interface PipeBuilder { * @return updated instance of PipeBuilder * @throws IllegalAccessException in case it's called in a bad time */ -PipeBuilder with(String param, String value) throws IllegalAccessException; +PipeBuilder with(String param, Object value) throws IllegalAccessException; /** * set an expr configuration to the current pipe in the context 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=1801506=1801505=1801506=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 Mon Jul 10 17:39:14 2017 @@ -138,7 +138,7 @@ public class PipeBuilderImpl implements } @Override -public PipeBuilder with(String param, String value) throws IllegalAccessException { +public PipeBuilder with(String param, Object value) throws IllegalAccessException { checkCurrentStep(); currentStep.properties.put(param, value); return this;
svn commit: r1801139 - /sling/trunk/contrib/extensions/sling-pipes/pom.xml
Author: npeltier Date: Fri Jul 7 10:32:05 2017 New Revision: 1801139 URL: http://svn.apache.org/viewvc?rev=1801139=rev Log: [maven-release-plugin] prepare release org.apache.sling.pipes-1.0.0 Modified: sling/trunk/contrib/extensions/sling-pipes/pom.xml Modified: sling/trunk/contrib/extensions/sling-pipes/pom.xml URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/sling-pipes/pom.xml?rev=1801139=1801138=1801139=diff == --- sling/trunk/contrib/extensions/sling-pipes/pom.xml (original) +++ sling/trunk/contrib/extensions/sling-pipes/pom.xml Fri Jul 7 10:32:05 2017 @@ -30,7 +30,7 @@ org.apache.sling.pipes bundle - 1.0.0-SNAPSHOT + 1.0.0 Apache Sling Pipes bulk content changes tool @@ -40,9 +40,9 @@ - scm:svn:http://svn.apache.org/repos/asf/sling/trunk/contrib/extensions/sling-pipes - scm:svn:https://svn.apache.org/repos/asf/sling/trunk/contrib/extensions/sling-pipes - http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/sling-pipes + scm:svn:http://svn.apache.org/repos/asf/sling/tags/org.apache.sling.pipes-1.0.0 + scm:svn:https://svn.apache.org/repos/asf/sling/tags/org.apache.sling.pipes-1.0.0 + http://svn.apache.org/viewvc/sling/tags/org.apache.sling.pipes-1.0.0
svn commit: r1801142 - /sling/trunk/contrib/extensions/sling-pipes/pom.xml
Author: npeltier Date: Fri Jul 7 10:32:21 2017 New Revision: 1801142 URL: http://svn.apache.org/viewvc?rev=1801142=rev Log: [maven-release-plugin] prepare for next development iteration Modified: sling/trunk/contrib/extensions/sling-pipes/pom.xml Modified: sling/trunk/contrib/extensions/sling-pipes/pom.xml URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/sling-pipes/pom.xml?rev=1801142=1801141=1801142=diff == --- sling/trunk/contrib/extensions/sling-pipes/pom.xml (original) +++ sling/trunk/contrib/extensions/sling-pipes/pom.xml Fri Jul 7 10:32:21 2017 @@ -30,7 +30,7 @@ org.apache.sling.pipes bundle - 1.0.0 + 1.0.1-SNAPSHOT Apache Sling Pipes bulk content changes tool @@ -40,9 +40,9 @@ - scm:svn:http://svn.apache.org/repos/asf/sling/tags/org.apache.sling.pipes-1.0.0 - scm:svn:https://svn.apache.org/repos/asf/sling/tags/org.apache.sling.pipes-1.0.0 - http://svn.apache.org/viewvc/sling/tags/org.apache.sling.pipes-1.0.0 + scm:svn:http://svn.apache.org/repos/asf/sling/trunk/contrib/extensions/sling-pipes + scm:svn:https://svn.apache.org/repos/asf/sling/trunk/contrib/extensions/sling-pipes + http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/sling-pipes
svn commit: r1801140 - /sling/tags/org.apache.sling.pipes-1.0.0/
Author: npeltier Date: Fri Jul 7 10:32:18 2017 New Revision: 1801140 URL: http://svn.apache.org/viewvc?rev=1801140=rev Log: [maven-release-plugin] copy for tag org.apache.sling.pipes-1.0.0 Added: sling/tags/org.apache.sling.pipes-1.0.0/ - copied from r1801139, sling/trunk/contrib/extensions/sling-pipes/
svn commit: r1801100 - in /sling/trunk/contrib/extensions/sling-pipes/src/main/java/org/apache/sling/pipes: OutputWriter.java Pipe.java PipeBuilder.java Plumber.java internal/PipeBuilderImpl.java inte
Author: npeltier Date: Thu Jul 6 19:38:20 2017 New Revision: 1801100 URL: http://svn.apache.org/viewvc?rev=1801100=rev Log: Fix javadoc error Modified: sling/trunk/contrib/extensions/sling-pipes/src/main/java/org/apache/sling/pipes/OutputWriter.java sling/trunk/contrib/extensions/sling-pipes/src/main/java/org/apache/sling/pipes/Pipe.java 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/Plumber.java sling/trunk/contrib/extensions/sling-pipes/src/main/java/org/apache/sling/pipes/internal/PipeBuilderImpl.java sling/trunk/contrib/extensions/sling-pipes/src/main/java/org/apache/sling/pipes/internal/PlumberImpl.java sling/trunk/contrib/extensions/sling-pipes/src/main/java/org/apache/sling/pipes/internal/PlumberServlet.java Modified: sling/trunk/contrib/extensions/sling-pipes/src/main/java/org/apache/sling/pipes/OutputWriter.java URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/sling-pipes/src/main/java/org/apache/sling/pipes/OutputWriter.java?rev=1801100=1801099=1801100=diff == --- sling/trunk/contrib/extensions/sling-pipes/src/main/java/org/apache/sling/pipes/OutputWriter.java (original) +++ sling/trunk/contrib/extensions/sling-pipes/src/main/java/org/apache/sling/pipes/OutputWriter.java Thu Jul 6 19:38:20 2017 @@ -55,7 +55,7 @@ public abstract class OutputWriter { * @param request request from which writer will output * @param response response on which writer will output * @throws IOException error handling streams - * @throws JSONException in case invalid json is written + * @throws JsonException in case invalid json is written */ public void init(SlingHttpServletRequest request, SlingHttpServletResponse response) throws IOException, JsonException { max = request.getParameter(PARAM_SIZE) != null ? Integer.parseInt(request.getParameter(PARAM_SIZE)) : NB_MAX; @@ -70,14 +70,14 @@ public abstract class OutputWriter { * @param request request from which writer will output * @param response response on which writer will output * @throws IOException error handling streams - * @throws JSONException in case invalid json is written + * @throws JsonException in case invalid json is written */ protected abstract void initInternal(SlingHttpServletRequest request, SlingHttpServletResponse response) throws IOException, JsonException; /** * Write a given resource * @param resource resource that will be written - * @throws JSONException in case write fails + * @throws JsonException in case write fails */ public void write(Resource resource) throws JsonException { if (size++ < max) { @@ -88,20 +88,20 @@ public abstract class OutputWriter { /** * Write a given resource * @param resource resource that will be written - * @throws JSONException in case write fails + * @throws JsonException in case write fails */ protected abstract void writeItem(Resource resource) throws JsonException; /** * writes the end of the output - * @throws JSONException in case invalid json is written + * @throws JsonException in case invalid json is written */ public abstract void ends() throws JsonException; /** - * - * @param pipe + * Setter + * @param pipe pipe this writer should be associated with */ public void setPipe(Pipe pipe) { this.pipe = pipe; Modified: sling/trunk/contrib/extensions/sling-pipes/src/main/java/org/apache/sling/pipes/Pipe.java URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/sling-pipes/src/main/java/org/apache/sling/pipes/Pipe.java?rev=1801100=1801099=1801100=diff == --- sling/trunk/contrib/extensions/sling-pipes/src/main/java/org/apache/sling/pipes/Pipe.java (original) +++ sling/trunk/contrib/extensions/sling-pipes/src/main/java/org/apache/sling/pipes/Pipe.java Thu Jul 6 19:38:20 2017 @@ -44,10 +44,13 @@ public interface Pipe { */ String NN_CONF = "conf"; +/** + * Distribution agent (for distributing output resources) + */ String PN_DISTRIBUTION_AGENT = "distribution.agent"; /** - * returns true if that pipe will modify content during its execution + * returns true if that pipe modifies content during its execution * @return true for write / false for read */ boolean modifiesContent(); @@ -92,7 +95,7 @@ public interface Pipe { /** * get the pipe configuration resource - * @return + * @return Pipe configruation root resource */ Resource getResource(); Modified: sling/trunk/contrib/extensions/sling-pipes/s
svn commit: r1801010 - in /sling/trunk/contrib/extensions/sling-pipes: ./ src/main/java/org/apache/sling/pipes/ src/main/java/org/apache/sling/pipes/internal/ src/test/java/org/apache/sling/pipes/ src
Author: npeltier Date: Thu Jul 6 10:04:52 2017 New Revision: 1801010 URL: http://svn.apache.org/viewvc?rev=1801010=rev Log: SLING-6078 sling pipes fluent API - allow easy creation & run of pipes from script & java, - added some tests Added: 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 Modified: sling/trunk/contrib/extensions/sling-pipes/pom.xml sling/trunk/contrib/extensions/sling-pipes/src/main/java/org/apache/sling/pipes/BasePipe.java sling/trunk/contrib/extensions/sling-pipes/src/main/java/org/apache/sling/pipes/Plumber.java sling/trunk/contrib/extensions/sling-pipes/src/main/java/org/apache/sling/pipes/internal/AuthorizablePipe.java sling/trunk/contrib/extensions/sling-pipes/src/main/java/org/apache/sling/pipes/internal/FilterPipe.java sling/trunk/contrib/extensions/sling-pipes/src/main/java/org/apache/sling/pipes/internal/JsonPipe.java sling/trunk/contrib/extensions/sling-pipes/src/main/java/org/apache/sling/pipes/internal/MovePipe.java sling/trunk/contrib/extensions/sling-pipes/src/main/java/org/apache/sling/pipes/internal/MultiPropertyPipe.java sling/trunk/contrib/extensions/sling-pipes/src/main/java/org/apache/sling/pipes/internal/NotPipe.java sling/trunk/contrib/extensions/sling-pipes/src/main/java/org/apache/sling/pipes/internal/ParentPipe.java sling/trunk/contrib/extensions/sling-pipes/src/main/java/org/apache/sling/pipes/internal/PathPipe.java sling/trunk/contrib/extensions/sling-pipes/src/main/java/org/apache/sling/pipes/internal/PlumberImpl.java sling/trunk/contrib/extensions/sling-pipes/src/main/java/org/apache/sling/pipes/internal/RemovePipe.java sling/trunk/contrib/extensions/sling-pipes/src/main/java/org/apache/sling/pipes/internal/SlingQueryPipe.java sling/trunk/contrib/extensions/sling-pipes/src/main/java/org/apache/sling/pipes/internal/WritePipe.java sling/trunk/contrib/extensions/sling-pipes/src/main/java/org/apache/sling/pipes/internal/XPathPipe.java sling/trunk/contrib/extensions/sling-pipes/src/test/java/org/apache/sling/pipes/internal/WritePipeTest.java sling/trunk/contrib/extensions/sling-pipes/src/test/resources/fruits.json sling/trunk/contrib/extensions/sling-pipes/src/test/resources/reference.json Modified: sling/trunk/contrib/extensions/sling-pipes/pom.xml URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/sling-pipes/pom.xml?rev=1801010=1801009=1801010=diff == --- sling/trunk/contrib/extensions/sling-pipes/pom.xml (original) +++ sling/trunk/contrib/extensions/sling-pipes/pom.xml Thu Jul 6 10:04:52 2017 @@ -150,6 +150,13 @@ org.apache.sling org.apache.sling.event.api 1.0.0 + provided + + + org.apache.sling + org.apache.sling.jcr.resource + 2.7.4 + compile @@ -167,15 +174,15 @@ org.apache.sling org.apache.sling.testing.sling-mock - 2.2.11-SNAPSHOT + 2.2.12 test -org.apache.geronimo.specs -geronimo-json_1.0_spec -1.0-alpha-1 -provided - + org.apache.geronimo.specs + geronimo-json_1.0_spec + 1.0-alpha-1 + provided + org.apache.sling org.apache.sling.commons.johnzon Modified: sling/trunk/contrib/extensions/sling-pipes/src/main/java/org/apache/sling/pipes/BasePipe.java URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/sling-pipes/src/main/java/org/apache/sling/pipes/BasePipe.java?rev=1801010=1801009=1801010=diff == --- sling/trunk/contrib/extensions/sling-pipes/src/main/java/org/apache/sling/pipes/BasePipe.java (original) +++ sling/trunk/contrib/extensions/sling-pipes/src/main/java/org/apache/sling/pipes/BasePipe.java Thu Jul 6 10:04:52 2017 @@ -35,7 +35,8 @@ public class BasePipe implements Pipe { private final Logger logger = LoggerFactory.getLogger(BasePipe.class); -public static final String RESOURCE_TYPE = "slingPipes/base"; +public static final String RT_PREFIX = "slingPipes/"; +public static final String RESOURCE_TYPE = RT_PREFIX + "base"; public static final String DRYRUN_KEY = "dryRun"; public static final String READ_ONLY = "readOnly"; public static final String PN_STATUS = "status"; Added: 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/sr
svn commit: r1800871 - in /sling/trunk/contrib/extensions/sling-pipes/src: main/java/org/apache/sling/pipes/PipeBindings.java test/java/org/apache/sling/pipes/PipeBindingsTest.java
Author: npeltier Date: Wed Jul 5 12:56:24 2017 New Revision: 1800871 URL: http://svn.apache.org/viewvc?rev=1800871=rev Log: SLING-6770 add resource names as bindings - 'name' is a map referring resource names just as 'path' - add some more comments, - add a unit test based on a container pipe Modified: sling/trunk/contrib/extensions/sling-pipes/src/main/java/org/apache/sling/pipes/PipeBindings.java sling/trunk/contrib/extensions/sling-pipes/src/test/java/org/apache/sling/pipes/PipeBindingsTest.java Modified: sling/trunk/contrib/extensions/sling-pipes/src/main/java/org/apache/sling/pipes/PipeBindings.java URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/sling-pipes/src/main/java/org/apache/sling/pipes/PipeBindings.java?rev=1800871=1800870=1800871=diff == --- sling/trunk/contrib/extensions/sling-pipes/src/main/java/org/apache/sling/pipes/PipeBindings.java (original) +++ sling/trunk/contrib/extensions/sling-pipes/src/main/java/org/apache/sling/pipes/PipeBindings.java Wed Jul 5 12:56:24 2017 @@ -55,10 +55,18 @@ public class PipeBindings { ScriptContext scriptContext = new SimpleScriptContext(); +/** + * add ${path.pipeName} binding allowing to retrieve pipeName's current resource path + */ public static final String PATH_BINDING = "path"; - Map<String, String> pathBindings = new HashMap<>(); +/** + * add ${name.pipeName} binding allowing to retrieve pipeName's current resource name + */ +public static final String NAME_BINDING = "name"; +Map<String, String> nameBindings = new HashMap<>(); + Map<String, Resource> outputResources = new HashMap<>(); private static final Pattern INJECTED_SCRIPT = Pattern.compile("\\$\\{(([^\\{^\\}]*(\\{[0-9,]+\\})?)*)\\}"); @@ -72,6 +80,9 @@ public class PipeBindings { //add path bindings where path.MyPipe will give MyPipe current resource path getBindings().put(PATH_BINDING, pathBindings); +//add name bindings where name.MyPipe will give MyPipe current resource name +getBindings().put(NAME_BINDING, nameBindings); + //additional bindings (global variables to use in child pipes expressions) Resource additionalBindings = resource.getChild(NN_ADDITIONALBINDINGS); if (additionalBindings != null) { @@ -152,6 +163,7 @@ public class PipeBindings { outputResources.put(pipe.getName(), resource); if (resource != null) { pathBindings.put(pipe.getName(), resource.getPath()); +nameBindings.put(pipe.getName(), resource.getName()); } addBinding(pipe.getName(), pipe.getOutputBinding()); } Modified: sling/trunk/contrib/extensions/sling-pipes/src/test/java/org/apache/sling/pipes/PipeBindingsTest.java URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/sling-pipes/src/test/java/org/apache/sling/pipes/PipeBindingsTest.java?rev=1800871=1800870=1800871=diff == --- sling/trunk/contrib/extensions/sling-pipes/src/test/java/org/apache/sling/pipes/PipeBindingsTest.java (original) +++ sling/trunk/contrib/extensions/sling-pipes/src/test/java/org/apache/sling/pipes/PipeBindingsTest.java Wed Jul 5 12:56:24 2017 @@ -22,6 +22,7 @@ import static org.junit.Assert.assertNul import java.util.Calendar; import java.util.HashMap; +import java.util.Iterator; import java.util.Map; import javax.script.ScriptException; @@ -123,4 +124,15 @@ public class PipeBindingsTest extends Ab Number expression = (Number)bindings.instantiateObject("${testSumFunction(1,2)}"); assertEquals("computed expression have testSum script's functionavailable", 3, expression.intValue()); } + +@Test +public void testNameBinding() throws Exception { +Pipe pipe = getPipe(PATH_PIPE + "/" + ContainerPipeTest.NN_ONEPIPE); +Iterator output = pipe.getOutput(); +output.next(); +PipeBindings bindings = pipe.getBindings(); +assertEquals("first name binding should be apple", bindings.instantiateExpression("${name.dummyParent}"), "apple"); +output.next(); +assertEquals("second name binding should be banana", bindings.instantiateExpression("${name.dummyParent}"), "banana"); +} } \ No newline at end of file
svn commit: r1800800 - /sling/trunk/contrib/extensions/sling-pipes/src/main/java/org/apache/sling/pipes/internal/WritePipe.java
Author: npeltier Date: Tue Jul 4 15:21:03 2017 New Revision: 1800800 URL: http://svn.apache.org/viewvc?rev=1800800=rev Log: SLING-6997 remove useless resourceExpression Modified: sling/trunk/contrib/extensions/sling-pipes/src/main/java/org/apache/sling/pipes/internal/WritePipe.java Modified: sling/trunk/contrib/extensions/sling-pipes/src/main/java/org/apache/sling/pipes/internal/WritePipe.java URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/sling-pipes/src/main/java/org/apache/sling/pipes/internal/WritePipe.java?rev=1800800=1800799=1800800=diff == --- sling/trunk/contrib/extensions/sling-pipes/src/main/java/org/apache/sling/pipes/internal/WritePipe.java (original) +++ sling/trunk/contrib/extensions/sling-pipes/src/main/java/org/apache/sling/pipes/internal/WritePipe.java Tue Jul 4 15:21:03 2017 @@ -45,7 +45,6 @@ public class WritePipe extends BasePipe private static final Logger logger = LoggerFactory.getLogger(WritePipe.class); public static final String RESOURCE_TYPE = "slingPipes/write"; Node confTree; -String resourceExpression; private List propertiesToRemove; Pattern addPatch = Pattern.compile("\\+\\[(.*)\\]"); Pattern multi = Pattern.compile("\\[(.*)\\]"); @@ -62,7 +61,6 @@ public class WritePipe extends BasePipe throw new Exception("write pipe is misconfigured: it should have a configuration node"); } confTree = getConfiguration().adaptTo(Node.class); -resourceExpression = getPath(); }
svn commit: r1013626 - in /websites/production/sling/content: ./ components/
Author: npeltier Date: Thu Jun 8 09:08:31 2017 New Revision: 1013626 Log: Publishing svnmucc operation to sling site by npeltier Added: websites/production/sling/content/ - copied from r1013625, websites/staging/sling/trunk/content/ websites/production/sling/content/components/ - copied from r1013625, websites/production/sling/content/components/