This is an automated email from the ASF dual-hosted git repository.

git-site-role pushed a commit to branch asf-site
in repository https://gitbox.apache.org/repos/asf/sling-site.git


The following commit(s) were added to refs/heads/asf-site by this push:
     new a3a1c00  Automatic website deployment from 
https://ci-builds.apache.org/job/Sling/job/modules/job/sling-site/job/master/103/
a3a1c00 is described below

commit a3a1c00afbcc5e88b6f3256e25ea2253b83f3bb4
Author: jenkins <[email protected]>
AuthorDate: Thu Jan 28 17:49:02 2021 +0000

    Automatic website deployment from 
https://ci-builds.apache.org/job/Sling/job/modules/job/sling-site/job/master/103/
---
 documentation/bundles/sling-pipes.html             |  42 ++----
 documentation/bundles/sling-pipes/bindings.html    |   8 +-
 .../bundles/sling-pipes/execution-monitoring.html  |  10 +-
 documentation/bundles/sling-pipes/logical.html     |  69 +++++-----
 documentation/bundles/sling-pipes/readers.html     | 147 +++++++--------------
 documentation/bundles/sling-pipes/samples.html     |   4 +-
 documentation/bundles/sling-pipes/writers.html     |  85 +++++-------
 7 files changed, 142 insertions(+), 223 deletions(-)

diff --git a/documentation/bundles/sling-pipes.html 
b/documentation/bundles/sling-pipes.html
index c677666..e05201b 100644
--- a/documentation/bundles/sling-pipes.html
+++ b/documentation/bundles/sling-pipes.html
@@ -116,41 +116,27 @@
                         </nav><script src='/res/jquery-3.2.1.min.js' 
type='text/javascript'></script><script src='/res/tocjs-1-1-2.js' 
type='text/javascript'></script><script 
type='text/javascript'>$(document).ready(function() { 
$('#generatedToC').toc({'selector':'h1[class!=title],h2,h3','ulClass':'menu-list'});
 } );</script><div class="content is-marginless">
 <div class="row"><div><section><p>Sling pipes is a tool set for doing extract 
- transform - load operations by chaining proven code blocks.</p>
 <h2><a href="#introduction" id="introduction">Introduction</a></h2>
-<p>Sling Pipes can be seen as a language that optimizes communication between 
two developers knowing sling terminology, just as they would talk about it, 
e.g.</p>
+<p>Sling Pipes can be seen as a language that takes profit of optimized 
communication between two developers knowing sling terminology, e.g.</p>
 <pre><code>    searching for resources with type &quot;foo/bar&quot; and 
setting property id to 3
 </code></pre>
-<p>Such sentence with that limited amount of words is enough between two sling 
developers to understand fully what it is doing. However, implementing this as 
a servlet would take a lot more words, risks of failure, complexity of 
deployement and would be more opaque, not talking about monitoring or execution 
common, but complex features you'd like to add.</p>
+<p>Such sentence with that limited amount of words is enough between two sling 
developers to understand fully what it is doing. However, implementing that 
change with a computer language directly will take much more words, risks of 
failure, complexity of deployement and would be more opaque, not talking about 
monitoring or execution commons, but complex features you'd like to add.</p>
 <p>With Sling Pipes, what you need to develop, and what is readable by another 
developer is</p>
-<pre><code>    
plumber.newPipe(resolver).$(&quot;foo/bar&quot;).write(&quot;id&quot;,3).build(&quot;/etc/demo&quot;)
+<pre><code>    
plumber.newPipe(resolver).echo(&quot;content&quot;).$(&quot;foo/bar&quot;).write(&quot;id&quot;,3).build(&quot;/etc/demo&quot;)
 </code></pre>
-<p>this is enough to persist a pipe in <code>/etc/demo</code> that is 
executable as http, java, groovy console script, or JMX. You can monitor it 
with JMX, logs, http, you'll have dry run possibility of that execution for 
example, or asynchronous execution. You could also use a pipe to create a 
java-free json or csv servlet, or a list component whose list possibilities are 
pipes accessed through the <code>PipeModel</code></p>
-<p>or, if you are testing things from the command line, using a curl script 
named &quot;pipe&quot;</p>
-<pre><code>    pipe &quot;$ foo/bar | write id 3&quot; 
+<p>this is enough to persist a pipe in <code>/etc/demo</code> that is 
executable as http, java, groovy console script, or JMX. You can monitor it 
with JMX, logs, http, you'll have dry run possibility of that execution for 
example, or asynchronous execution. If it's a one-off execution, and you can 
access a groovy script or anything you can use external command line tool like 
<a 
href="https://github.com/adobe/adobe-dx/blob/master/apps/scripts/pipe";>pipe</a> 
to run</p>
+<pre><code>    pipe &quot;echo /content | $ foo/bar | write id=3&quot;  
 </code></pre>
-<p>you can check some introductions at different adaptTo presentations:</p>
-<h2><a href="#adaptto-introductions" id="adaptto-introductions">AdaptTo 
introductions</a></h2>
-<p>some presentations were made at the adaptTo conference, last two were:</p>
+<p>Those examples are using echo, find and <a 
href="/documentation/bundles/sling-pipes/writers.html#write-pipe-writeconf">write</a>
 subpipes.</p>
+<p>You could also use a pipe to create a java-free json or csv servlet, or a 
list component whose list possibilities are pipes accessed through the 
<code>PipeModel</code> you can check some introductions at different adaptTo 
presentations:</p>
+<h3><a href="#adaptto-introductions" id="adaptto-introductions">AdaptTo 
introductions</a></h3>
+<p>some presentations were made at the adaptTo conference, last three were: <a 
href="https://adapt.to/2020/en/schedule/lightning-talks/sling-pipes-400-update.html";>latest
 presentation at a 2021 lightning talk</a>. This introduces the change of being 
able to manipulate pipes through command line.</p>
+<iframe width="560" height="415" 
src="https://www.youtube.com/embed/Z5UtXh9XzwY"; frameborder="0" 
allow="autoplay; encrypted-media" allowfullscreen></iframe>
 <p><a 
href="https://adapt.to/2017/en/schedule/lightning-talks/apache-sling-pipes.html";>General
 introduction at a 2017 lightning talk</a>.</p>
-<iframe width="560" height="315" 
src="https://www.youtube.com/embed/XcWMB26bMxA?start=666"; frameborder="0" 
allow="autoplay; encrypted-media" allowfullscreen></iframe>
+<iframe width="560" height="415" 
src="https://www.youtube.com/embed/XcWMB26bMxA?start=666"; frameborder="0" 
allow="autoplay; encrypted-media" allowfullscreen></iframe>
 <p>and <a 
href="https://adapt.to/2018/en/schedule/lightning-talks/whats-new-with-filters-pipes.html";>latest
 news at a 2018 lightning talk</a></p>
-<iframe width="560" height="315" 
src="https://www.youtube.com/embed/LhxVE-56p2Y?start=122"; frameborder="0" 
allow="autoplay; encrypted-media" allowfullscreen></iframe>   
-<h2><a href="#what-is-a-pipe" id="what-is-a-pipe">What is a pipe</a></h2>
-<p>A sling pipe is essentially a sling resource stream, encapsulating a 
well-known sling operation</p>
-<ul>
-<li>it provides an output as a sling resource iterator,</li>
-<li>it gets its input either from a configured path, either from former pipe's 
output,</li>
-<li>each pipe can have scripted configuration, accessing bindings from 
others</li>
-</ul>
-<p>Important bits of a pipe are:</p>
-<ul>
-<li>its type, specifying what sling block you will use, through a RT property, 
or a method depending on what <a 
href="/documentation/bundles/sling-pipes/execution-monitoring.html">builder you 
use</a>,</li>
-<li>its <code>name</code>, used in logs, JCR persistence, and bindings,</li>
-<li>its input, forced with <code>path</code> property, or because the pipe 
follows another one,</li>
-<li>its optional expression, configured with <code>expr</code> property, that 
means different things depending on the pipe,</li>
-<li>its configuration node, configured with <code>conf</code> node, that means 
different things depending on the pipe</li>
-</ul>
+<iframe width="560" height="415" 
src="https://www.youtube.com/embed/LhxVE-56p2Y?start=122"; frameborder="0" 
allow="autoplay; encrypted-media" allowfullscreen></iframe>   
 <h2><a href="#get-started" id="get-started">Get Started</a></h2>
-<p>You can <a 
href="/documentation/bundles/sling-pipes/execution-monitoring.html">configure 
and execute a pipe with java, groovy console, http, or jmx</a></p>
+<p>You can either use it with <a 
href="https://github.com/adobe/adobe-dx/blob/master/apps/scripts";>adobe's 
scripts</a> or just <a 
href="/documentation/bundles/sling-pipes/execution-monitoring.html">configure 
and execute a pipe with java, groovy console, http, or jmx</a></p>
 <p>To get more familiar with pipes go through the 3 families of pipes to 
consider and the samples detailed:</p>
 <ul>
 <li><a href="/documentation/bundles/sling-pipes/readers.html">reader 
pipes</a>, that will just output a set of resource depending on the input, 
without modifying anything,</li>
@@ -172,7 +158,7 @@
             </div><footer class="footer">
                 <div class="content has-text-centered is-small">
 <div class="revisionInfo">
-                        Last modified by <span class="author">Nicolas 
Peltier</span> on <span class="comment">Wed Sep 30 16:12:41 2020 +0200</span>
+                        Last modified by <span class="author">Nicolas 
Peltier</span> on <span class="comment">Thu Jan 28 17:14:27 2021 +0100</span>
                     </div>                    <p>
                         Apache Sling, Sling, Apache, the Apache feather logo, 
and the Apache Sling project logo are trademarks of The Apache Software 
Foundation. All other marks mentioned may be trademarks or registered 
trademarks of their respective owners.
                     </p><p>
diff --git a/documentation/bundles/sling-pipes/bindings.html 
b/documentation/bundles/sling-pipes/bindings.html
index 8eb0aa3..6bccdb9 100644
--- a/documentation/bundles/sling-pipes/bindings.html
+++ b/documentation/bundles/sling-pipes/bindings.html
@@ -126,9 +126,7 @@
 <h2><a href="#output-binding" id="output-binding">output binding</a></h2>
 <p>each single pipe has to declare an output binding at the same time it 
outputs a resource. The binding will be named as the name of the pipe outputing 
it. If a pipe as been created as a sub pipe of a container with pipe builder 
api, it will have default name of &quot;one&quot;, &quot;two&quot;, ... 
depending on its position in the pipe, you can override the name with 
<code>.name(...)</code> api.</p>
 <p>so following pipe</p>
-<pre><code>    .echo('/content/foo')
-    .children('nt:unstructured').name('example')
-    .write('jcr:description','this node property prop = ${example.prop}')
+<pre><code>    echo /content/foo | children nt:unstructured @ name example | 
write jcr:description='this node property prop = ${example.prop}'
 </code></pre>
 <p>with following <code>/content/foo</code> tree</p>
 <pre><code>    { 
@@ -170,6 +168,8 @@
 <p>some times you want heavy js logic in your expression instantiation. In 
that case, you need to store your javascript somewhere in the JCR, and mentions 
the path in the <a 
href="/documentation/bundles/sling-pipes/execution-monitoring.html#jcr-persistence-of-a-pipe.html">additionalScripts
 MV property</a></p>
 <h2><a href="#bindings-forward" id="bindings-forward">bindings forward</a></h2>
 <p>in case a pipe references, or contain another pipe, same binding space will 
be used</p>
+<h2><a href="#context-aware-configuration" 
id="context-aware-configuration">Context Aware configuration</a></h2>
+<p>there is the possibility to use <a 
href="https://sling.apache.org/documentation/bundles/context-aware-configuration/context-aware-configuration.html";>context
 aware configurations</a> in the bindings like the following: 
<code>caconfig.pipeName.bucket.property</code> where <code>pipeName</code> is a 
pipe name, bucket &amp; property typical ca configuration accessors.</p>
 </section></div></div>                            
                         </div>
                     </div>
@@ -177,7 +177,7 @@
             </div><footer class="footer">
                 <div class="content has-text-centered is-small">
 <div class="revisionInfo">
-                        Last modified by <span class="author">Nicolas 
Peltier</span> on <span class="comment">Wed Sep 30 16:12:41 2020 +0200</span>
+                        Last modified by <span class="author">Nicolas 
Peltier</span> on <span class="comment">Thu Jan 28 17:14:27 2021 +0100</span>
                     </div>                    <p>
                         Apache Sling, Sling, Apache, the Apache feather logo, 
and the Apache Sling project logo are trademarks of The Apache Software 
Foundation. All other marks mentioned may be trademarks or registered 
trademarks of their respective owners.
                     </p><p>
diff --git a/documentation/bundles/sling-pipes/execution-monitoring.html 
b/documentation/bundles/sling-pipes/execution-monitoring.html
index 24816d5..5fd171f 100644
--- a/documentation/bundles/sling-pipes/execution-monitoring.html
+++ b/documentation/bundles/sling-pipes/execution-monitoring.html
@@ -137,9 +137,9 @@
 <tr><th> Configuration child node </th><th> Explanation </th></tr>
 </thead>
 <tbody>
-<tr><td> <code>conf</code> </td><td> optional, contains addition configuration 
of the pipe (depending on the type) </td></tr>
+<tr><td> <code>conf</code> </td><td> optional, contains addition configuration 
of the pipe (depending on the type) </td></tr>
 <tr><td> <code>additionalBinding</code>  </td><td> set &quot;global&quot; <a 
href="/documentation/bundles/sling-pipes/bindings.html">bindings</a> 
(property=value) in pipe execution </td></tr>
-<tr><td> <code>writer</code> </td><td> set a writer with key / value property 
being label, and value of each added entry. Those values can be <a 
href="/documentation/bundles/sling-pipes/bindings.html">expressions</a> 
</td></tr>
+<tr><td> <code>writer</code> </td><td> set a writer with key / value property 
being label, and value of each added entry. Those values can be <a 
href="/documentation/bundles/sling-pipes/bindings.html">expressions</a> 
</td></tr>
 </tbody>
 </table>
 <h3><a href="#java" id="java">Java</a></h3>
@@ -216,7 +216,7 @@
 <tr><td> request path </td><td> path of a pipe configuration resource (see 
above), or a resource of type <code>slingPipes/plumber</code> with a path 
parameter indicating the pipe configuration resource path.</td></tr>
 <tr><td> request method </td><td> <code>GET</code> or <code>POST</code>. Note 
that <code>GET</code> will not work on pipe modifying content (unless you are 
using a <code>dryRun</code>) </td></tr>
 <tr><td> request extension </td><td> <code>.json</code> or <code>.csv</code> 
</td></tr>
-<tr><td> request selectors </td><td> you can add <code>status</code> to get 
status on a currently executed pipe</td></tr>
+<tr><td> request selectors </td><td> you can add <code>status</code> to get 
status on a currently executed pipe</td></tr>
 </tbody>
 </table>
 <h5><a href="#pipe-http-request-parameter" 
id="pipe-http-request-parameter">Pipe HTTP Request parameter</a></h5>
@@ -225,7 +225,7 @@
 <tr><th> request parameter </th><th> Explanation </th></tr>
 </thead>
 <tbody>
-<tr><td> <code>size</code> </td><td> size of the returned excerpt. Default 
response is truncated to 10 items, if you need more (or less), you can modify 
that settings with the size parameter. 0 value will return all the items 
</td></tr>
+<tr><td> <code>size</code> </td><td> size of the returned excerpt. Default 
response is truncated to 10 items, if you need more (or less), you can modify 
that settings with the size parameter. 0 value will return all the items 
</td></tr>
 <tr><td> <code>binding</code> </td><td> json object of global bindings you 
want to add for the execution of the pipe e.g. <code>{testBinding:'foo'}</code> 
</td></tr>
 <tr><td> <code>writer</code> </td><td> you can configure output of your 
servlet, with <code>writer</code> parameter, a json object as a pattern to the 
result you want to have. The values of the json object are expressions and can 
reuse each pipe's subpipe binding. This will be entries of your json output, or 
headers and values of your csv output, e.g 
<code>{&quot;user&quot;:&quot;${user.fullName}&quot;}</code> </td></tr>
 <tr><td> <code>dryRun=true</code> </td><td> 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 <em>would</em> have done, without doing anything 
</td></tr>
@@ -272,7 +272,7 @@
             </div><footer class="footer">
                 <div class="content has-text-centered is-small">
 <div class="revisionInfo">
-                        Last modified by <span class="author">Nicolas 
Peltier</span> on <span class="comment">Wed Sep 30 16:12:41 2020 +0200</span>
+                        Last modified by <span class="author">Nicolas 
Peltier</span> on <span class="comment">Thu Jan 28 17:14:27 2021 +0100</span>
                     </div>                    <p>
                         Apache Sling, Sling, Apache, the Apache feather logo, 
and the Apache Sling project logo are trademarks of The Apache Software 
Foundation. All other marks mentioned may be trademarks or registered 
trademarks of their respective owners.
                     </p><p>
diff --git a/documentation/bundles/sling-pipes/logical.html 
b/documentation/bundles/sling-pipes/logical.html
index 81280ea..da86678 100644
--- a/documentation/bundles/sling-pipes/logical.html
+++ b/documentation/bundles/sling-pipes/logical.html
@@ -119,51 +119,58 @@
                             </ul>
                         </nav><script src='/res/jquery-3.2.1.min.js' 
type='text/javascript'></script><script src='/res/tocjs-1-1-2.js' 
type='text/javascript'></script><script 
type='text/javascript'>$(document).ready(function() { 
$('#generatedToC').toc({'selector':'h1[class!=title],h2,h3','ulClass':'menu-list'});
 } );</script><div class="content is-marginless">
 <div class="row"><div><section><p>Those pipes help assembling pipes, or 
modifying the resource streams <a 
href="/documentation/bundles/sling-pipes/readers.html">readers</a> or <a 
href="/documentation/bundles/sling-pipes/writers.html">writers</a> could 
create.</p>
-<h3><a href="#super-pipes" id="super-pipes">Super pipes</a></h3>
-<p>Pipes that litterally contains sub pipes</p>
-<h4><a href="#container-pipe" id="container-pipe">Container Pipe</a></h4>
-<p>assemble a simple sequence of pipes</p>
-<ul>
-<li><code>sling:resourceType</code> is <code>slingPipes/container</code></li>
-<li><code>conf</code> node contains child pipes' configurations, that will be 
configured in the order they are found (note you should use 
sling:OrderedFolder)</li>
-</ul>
-<p>Note that pipe builder api automatically creates one for you to chain the 
subpipe you are configuring.</p>
-<h4><a href="#referencepipe-refpath" id="referencepipe-refpath">ReferencePipe 
(<code>ref(path)</code>)</a></h4>
-<p>executes the pipe referenced in path property</p>
-<ul>
-<li><code>sling:resourceType</code> is <code>slingPipes/reference</code></li>
-<li><code>path</code> path of the referenced pipe</li>
-</ul>
-<h4><a href="#manifold" id="manifold">Manifold</a></h4>
-<p>allows parallel execution of the sub pipes listed in configuration</p>
-<ul>
-<li><code>sling:resourceType</code> is <code>slingPipes/manifold</code></li>
-<li><code>conf</code> node contains child pipes' configurations, that will be 
configured in the order they are found (note you should use 
sling:OrderedFolder)</li>
-<li><code>queueSize</code> size of the merged resource queue, default is 
10000</li>
-<li><code>numThread</code> thread pool size for the execution of the subpipes, 
default is 5 - resource output will be ordered randomly; setting it to 1 will 
guarantee serial execution with predictable output order (i.e. the first 
subpipe resources will be exhausted before the second subpipe resources are 
output etc.); setting numThreads to 1 will have similar effects to using a 
container pipe, with the notable exception of output termination: whereas a 
container pipe chains sub pipes and [...]
-<li><code>executionTimeout</code> execution time out for each sub pipe; given 
in seconds; default is 24h</li>
-</ul>
 <h3><a href="#filterpipe-grepconf" id="filterpipe-grepconf">FilterPipe 
(<code>grep(conf)</code>)</a></h3>
 <p>outputs the input resource if its matches its configuration</p>
+<pre><code>echo /content/foo | grep foo=bar integerProp=2 booleanOne=false
+</code></pre>
+<p>will outputs <code>/content/foo</code> only if it has properties specified, 
you can revert the logic with ̀ slingPipesFilter_not` set to true</p>
+<pre><code>echo /content/foo | grep foo=bar @ with slingPipesFilter_not=true
+</code></pre>
+<p>will either return <code>/content/foo</code> either nothing depending on it 
not containing <code>@foo=bar</code></p>
+<p>you can do more complex use case tackling direclty the &quot;compiled&quot; 
persistence of the pipe</p>
 <ul>
 <li><code>sling:resourceType</code> is <code>slingPipes/filter</code></li>
 <li><code>conf</code> node tree that will be tested against the current input 
of the pipe, each <code>/conf/sub@prop=value</code> will triggers a test on 
<code>./sub@prop</code> property of the current input, testing if its value 
matches <code>value</code> regex. If the special 
<code>slingPipesFilter_noChildren=${true}</code> property is there with the 
value instantiated as a true boolean, then filter will pass if corresponding 
node has no children.</li>
 <li><code>slingPipesFilter_test='${...}'</code> evaluates the property value, 
and filters out the stream if the expression is not a boolean or false</li>
 <li><code>slingPipesFilter_not='true'</code> inverts the expected result of 
the filter</li>
 </ul>
-<p>as an example,</p>
-<pre><code>echo('/content/foo').grep('foo','bar','slingPipesFilter_not',true).run()
+<h3><a href="#super-pipes" id="super-pipes">Super pipes</a></h3>
+<p>Pipes that litterally contains sub pipes, each super pipe share bindings 
with each others so data can be passed from one to another</p>
+<h4><a href="#referencepipe-ref-path" 
id="referencepipe-ref-path">ReferencePipe (<code>ref 
&lt;path&gt;</code>)</a></h4>
+<p>executes the pipe whose persistence is referenced in path property</p>
+<pre><code>    ref /conf/pipes/aPipePersistence
 </code></pre>
-<p>will either return <code>/content/foo</code> either nothing depending on it 
not containing <code>@foo=bar</code></p>
-<pre><code>echo('content/foo').name('FOO').grep('slingPipesFilter_test','${FOO.foo
 == &quot;bar&quot;}').run()
+<p>will execute the pipe <code>/conf/myPipes/aPipePersistence</code> if you 
add <code>/conf/myPipes</code> to plumberImpl <code>referencePaths</code> 
configuration, you can then execute</p>
+<pre><code>    ref aPipePersistence
 </code></pre>
-<p>is an equivalent</p>
 <h3><a href="#notpipe" id="notpipe">NotPipe</a></h3>
 <p>executes the pipe referenced in path property, passes input only if 
referenced pipe doesn't return any resource</p>
 <ul>
 <li><code>sling:resourceType</code> is <code>slingPipes/not</code></li>
-<li><code>path</code> path of the referenced pipe</li>
+<li><code>path</code> path of the referenced pipe
+<pre><code>not /conf/pipes/aPipePersistence
+</code></pre>
+</li>
 </ul>
+<p>or as for referenced pipe:</p>
+<pre><code>    not aPipePersistence
+</code></pre>
+<h4><a href="#manifold" id="manifold">Manifold</a></h4>
+<p>allows parallel execution of the sub pipes listed in configuration</p>
+<ul>
+<li><code>sling:resourceType</code> is <code>slingPipes/manifold</code></li>
+<li><code>conf</code> node contains child pipes' configurations, that will be 
configured in the order they are found (note you should use 
sling:OrderedFolder)</li>
+<li><code>queueSize</code> size of the merged resource queue, default is 
10000</li>
+<li><code>numThread</code> thread pool size for the execution of the subpipes, 
default is 5 - resource output will be ordered randomly; setting it to 1 will 
guarantee serial execution with predictable output order (i.e. the first 
subpipe resources will be exhausted before the second subpipe resources are 
output etc.); setting numThreads to 1 will have similar effects to using a 
container pipe, with the notable exception of output termination: whereas a 
container pipe chains sub pipes and [...]
+<li><code>executionTimeout</code> execution time out for each sub pipe; given 
in seconds; default is 24h</li>
+</ul>
+<h4><a href="#container-pipe" id="container-pipe">Container Pipe</a></h4>
+<p>assemble a simple sequence of pipes</p>
+<ul>
+<li><code>sling:resourceType</code> is <code>slingPipes/container</code></li>
+<li><code>conf</code> node contains child pipes' configurations, that will be 
configured in the order they are found (note you should use 
sling:OrderedFolder)</li>
+</ul>
+<p>Note that pipe builder api automatically creates one for you to chain the 
subpipe you are configuring.</p>
 </section></div></div>                            
                         </div>
                     </div>
@@ -171,7 +178,7 @@
             </div><footer class="footer">
                 <div class="content has-text-centered is-small">
 <div class="revisionInfo">
-                        Last modified by <span class="author">Stefan 
Popescu</span> on <span class="comment">Mon Oct 8 19:28:20 2018 +0300</span>
+                        Last modified by <span class="author">Nicolas 
Peltier</span> on <span class="comment">Thu Jan 28 17:14:27 2021 +0100</span>
                     </div>                    <p>
                         Apache Sling, Sling, Apache, the Apache feather logo, 
and the Apache Sling project logo are trademarks of The Apache Software 
Foundation. All other marks mentioned may be trademarks or registered 
trademarks of their respective owners.
                     </p><p>
diff --git a/documentation/bundles/sling-pipes/readers.html 
b/documentation/bundles/sling-pipes/readers.html
index c5464fe..eec9415 100644
--- a/documentation/bundles/sling-pipes/readers.html
+++ b/documentation/bundles/sling-pipes/readers.html
@@ -122,91 +122,56 @@
                                 </li>
                             </ul>
                         </nav><script src='/res/jquery-3.2.1.min.js' 
type='text/javascript'></script><script src='/res/tocjs-1-1-2.js' 
type='text/javascript'></script><script 
type='text/javascript'>$(document).ready(function() { 
$('#generatedToC').toc({'selector':'h1[class!=title],h2,h3','ulClass':'menu-list'});
 } );</script><div class="content is-marginless">
-<div class="row"><div><section><p>those are pipes that will spit out 
resources, without modifying them. They are usually combined with <a 
href="/documentation/bundles/sling-pipes/logical.html">logical</a> and/or <a 
href="/documentation/bundles/sling-pipes/writers.html">write</a> pipes</p>
-<h3><a href="#base-pipe-echopath" id="base-pipe-echopath">Base pipe 
(<code>echo(path)</code>)</a></h3>
+<div class="row"><div><section><p>those are pipes that will spit out 
resources, without modifying them. They are usually combined with <a 
href="/documentation/bundles/sling-pipes/logical.html">logical</a> and/or <a 
href="/documentation/bundles/sling-pipes/writers.html">writer</a> pipes</p>
+<h3><a href="#base-pipe-echo-path" id="base-pipe-echo-path">Base pipe 
(<code>echo &lt;path&gt;</code>)</a></h3>
 <p>outputs what is in input (so what is configured in path).</p>
-<ul>
-<li><code>sling:resourceType</code> is <code>slingPipes/base</code></li>
-</ul>
 <p>It's handy to set the input of a given sequence in a talkative manner:</p>
-<pre><code>    echo('/content/foo')
-    .write('bar',true)
+<pre><code>    echo /content | write foo=bar
 </code></pre>
-<p>is easier to read, more obvious also than</p>
-<pre><code>    write('bar',true).with('path','/content/foo')
+<p>You can also pipe it with relative path to go to a children:</p>
+<pre><code>    echo /content | $ some/parent | echo child/path | ...
 </code></pre>
-<h3><a href="#xpathpipe-xpathexpr" id="xpathpipe-xpathexpr">XPathPipe 
(<code>xpath(expr)</code>)</a></h3>
-<p>retrieve resources resulting of an xpath query</p>
-<ul>
-<li><code>sling:resourceType</code> is <code>slingPipes/xpath</code></li>
-<li><code>expr</code> should be a valid xpath query
-<pre><code>xpath('/jcr:root/content/foo//element(*,nt:unstructured)[@sling:resourceType=&quot;foo/bar&quot;]')
-.write('foo','bar')
+<h3><a href="#xpath-pipe-xpath-xpath-query" 
id="xpath-pipe-xpath-xpath-query">XPath Pipe (<code>xpath &lt;xpath 
query&gt;</code>)</a></h3>
+<pre><code>    xpath 
/jcr:root/content/foo//element(*,nt:unstructured)[@sling:resourceType=&quot;foo/bar&quot;]
 | write foo=bar
 </code></pre>
-</li>
-</ul>
-<h3><a href="#traversepipe-traverse" id="traversepipe-traverse">TraversePipe 
(<code>traverse()</code>)</a></h3>
+<h3><a href="#traverse-pipe-traverse" id="traverse-pipe-traverse">Traverse 
Pipe (<code>traverse</code>)</a></h3>
 <p>traverse current input resource's tree, outputing, as resources, either the 
node of the tree, either its properties</p>
 <ul>
-<li><code>sling:resourceType</code> is <code>slingPipes/traverse</code>,</li>
 <li><code>breadthFirst</code> the tree visit will be done deep first, unless 
this flag is set to true,</li>
 <li><code>depth</code> max depth the visit should go to,</li>
 <li><code>properties</code> is a flag mentioning the pipe should traverse 
node's property,</li>
-<li><code>nameGlobs</code> filters the property that should get outputed</li>
+<li><code>nameGlobs</code> filters the property that should get outputed
+<pre><code>echo /content | traverse @ with breadFirst=true depth=10 
properties=true | ...
+</code></pre>
+</li>
 </ul>
-<h3><a href="#multipropertypipe" 
id="multipropertypipe">MultiPropertyPipe</a></h3>
+<h3><a href="#multiproperty-pipe-mp" id="multiproperty-pipe-mp">MultiProperty 
Pipe (<code>mp</code>)</a></h3>
 <p>iterates through values of input multi value property and write them to 
bindings</p>
-<ul>
-<li><code>sling:resourceType</code> is 
<code>slingPipes/multiProperty</code></li>
-<li><code>path</code> should be the path of a mv property (if no input)</li>
-</ul>
+<pre><code>    echo /content/my/months | mp @ name currentMonth | echo 
/content/year/${currentMonth} | write visited=true
+</code></pre>
 <h2><a href="#sling-query-pipes" id="sling-query-pipes">Sling Query 
Pipes</a></h2>
 <p>Sling Query shares with Sling Pipes the same objective to write more 
concise (and efficient) code for most common operations. Below are the most 
common <a href="/documentation/bundles/sling-query.html">Sling Query</a> 
methods as reader pipes.</p>
-<h3><a href="#find-pipe-expr" id="find-pipe-expr">Find Pipe 
(<code>$(expr)</code>)</a></h3>
-<p>executes <a 
href="/documentation/bundles/sling-query/methods.html#findselector">find</a>(expression)
 that searches through the subtree below the current input resource</p>
-<ul>
-<li><code>sling:resourceType</code> is <code>slingPipes/find</code></li>
-<li><code>expr</code> mandatory property, contains Sling Query <a 
href="/documentation/bundles/sling-query/selectors.html">selector string</a>
-<pre><code>echo(&quot;/content/foo&quot;)
-.$(&quot;nt:unstructured[sling:resourceType=foo/bar]&quot;)
-.write('foo','bar')
+<h3><a href="#find-pipe-expr" id="find-pipe-expr">Find Pipe (<code>$ 
&lt;expr&gt;</code>)</a></h3>
+<p>executes <a 
href="/documentation/bundles/sling-query/methods.html#findselector">find</a>(expression)
 that searches through the subtree below the current input resource. Typical 
handy usage would be to use resource type selector like that:</p>
+<pre><code>    echo /content | $ foo/bar
 </code></pre>
-</li>
-</ul>
-<h3><a href="#children-pipe-childrenexpr" 
id="children-pipe-childrenexpr">Children Pipe 
(<code>children(expr)</code>)</a></h3>
+<h3><a href="#children-pipe-children-expr" 
id="children-pipe-children-expr">Children Pipe (<code>children 
&lt;expr&gt;</code>)</a></h3>
 <p>executes <a 
href="/documentation/bundles/sling-query/methods.html#childrenselector">children</a>(expression)
 that searches through the immediate children of the current input resource)</p>
-<ul>
-<li><code>sling:resourceType</code> is <code>slingPipes/children</code></li>
-<li><code>expr</code> mandatory property, contains Sling Query <a 
href="/documentation/bundles/sling-query/selectors.html">selector 
string</a></li>
-</ul>
-<h3><a href="#siblings-pipe-siblingsexpr" 
id="siblings-pipe-siblingsexpr">Siblings Pipe 
(<code>siblings(expr)</code>)</a></h3>
+<pre><code>    echo /content/some/container | children foo/bar
+</code></pre>
+<h3><a href="#siblings-pipe-siblings-expr" 
id="siblings-pipe-siblings-expr">Siblings Pipe (<code>siblings 
&lt;expr&gt;</code>)</a></h3>
 <p>executes <a 
href="/documentation/bundles/sling-query/methods.html#siblings-selector-">siblings</a>(expression)
 that searches through siblings of current input resource</p>
-<ul>
-<li><code>sling:resourceType</code> is <code>slingPipes/slingQuery</code></li>
-<li><code>expr</code> mandatory property, contains Sling Query <a 
href="/documentation/bundles/sling-query/selectors.html">selector 
string</a></li>
-</ul>
-<h3><a href="#parent-pipe-parent" id="parent-pipe-parent">Parent Pipe 
(<code>parent()</code>)</a></h3>
+<pre><code>    echo /content | siblings foo/bar
+</code></pre>
+<h3><a href="#parent-pipe-parent-expr" id="parent-pipe-parent-expr">Parent 
Pipe (<code>parent &lt;expr&gt;</code>)</a></h3>
 <p>executes <a 
href="/documentation/bundles/sling-query/methods.html#parent-">parent</a>() 
that retrieves current parent</p>
-<ul>
-<li><code>sling:resourceType</code> is <code>slingPipes/parent</code></li>
-</ul>
-<h3><a href="#closest-pipe-closestexpr" id="closest-pipe-closestexpr">Closest 
Pipe (<code>closest(expr)</code>)</a></h3>
+<h3><a href="#closest-pipe-closest-expr" 
id="closest-pipe-closest-expr">Closest Pipe (<code>closest 
&lt;expr&gt;</code>)</a></h3>
 <p>executes <a 
href="/documentation/bundles/sling-query/methods.html#closest-selector-">closest</a>(expression)
 that searches the closest parent resource of current input resource</p>
-<ul>
-<li><code>sling:resourceType</code> is <code>slingPipes/slingQuery</code></li>
-<li><code>expr</code> mandatory property, contains Sling Query <a 
href="/documentation/bundles/sling-query/selectors.html">selector string</a>
-<pre><code>.$(&quot;nt:unstructured[sling:resourceType=foo/bar]&quot;)
-.closest('jcr:content')
+<pre><code>    echo /content | $ foo/bar | closest jcr:content
 </code></pre>
-</li>
-</ul>
 <p>will find <code>jcr:content</code> nodes that have <code>foo/bar</code> 
typed resource somewhere in their tree</p>
-<h3><a href="#parents-pipe-parentsexpr" id="parents-pipe-parentsexpr">Parents 
Pipe (<code>parents(expr)</code>)</a></h3>
+<h3><a href="#parents-pipe-parents-expr" 
id="parents-pipe-parents-expr">Parents Pipe (<code>parents 
&lt;expr&gt;</code>)</a></h3>
 <p>executes <a 
href="/documentation/bundles/sling-query/methods.html#parents-selector-">parents</a>(expression)
 that searches all the parents of the current input resource</p>
-<ul>
-<li><code>sling:resourceType</code> is <code>slingPipes/slingQuery</code></li>
-<li><code>expr</code> mandatory property, contains Sling Query <a 
href="/documentation/bundles/sling-query/selectors.html">selector 
string</a></li>
-</ul>
 <h2><a href="#inputstream-reader-pipes" 
id="inputstream-reader-pipes">InputStream reader pipes</a></h2>
 <p>those are specific reader pipes, that read information an input stream from 
defined in expr configuration, that can be:</p>
 <ul>
@@ -215,48 +180,32 @@
 <li>a file passed as request parameter with <code>pipes_inputFile</code> as 
parameter name (in that case, expr can be empty)</li>
 <li>direct data stream in the expression</li>
 </ul>
-<h3><a href="#jsonpipe-jsonexpr" id="jsonpipe-jsonexpr">JsonPipe 
(<code>json(expr)</code>)</a></h3>
-<p>feeds bindings with json stream</p>
-<ul>
-<li><code>sling:resourceType</code> is <code>slingPipes/json</code></li>
-<li><code>expr</code> see above</li>
-<li><code>valuePath</code> json path like expression that defines where the 
json value we care about is. E.g. <code>$.items[2]</code> considers root is an 
object and that we want the 3rd item of items array, located at 
<code>items</code> key of the root object.</li>
-</ul>
+<h3><a href="#json-pipe-json-expr" id="json-pipe-json-expr">Json Pipe 
(<code>json expr</code>)</a></h3>
+<p>feeds bindings with json stream <code>valuePath</code> is a property as a 
json path like expression that defines where the json value we care about is. 
E.g. <code>$.items[2]</code> considers root is an object and that we want the 
3rd item of items array, located at <code>items</code> key of the root 
object.</p>
 <p>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.</p>
-<pre><code>    
.json('{items:[{val:1},{val:2},{val:3}]}').with('valuePath','$.items').name('demo')
-    .mkdir('/content/${demo.val}')
+<pre><code>    json 
{&quot;items&quot;:[{&quot;val&quot;:&quot;1&quot;},{&quot;val&quot;:&quot;2&quot;},{&quot;val&quot;:&quot;3&quot;}]}
 @ with valuePath=$.items @ name demo | mkdir /content/${demo.val}
 </code></pre>
-<p>should create a tree of 3 resources /content/1, /content/2 and 
/content/3.</p>
+<p>will create a tree of 3 resources /content/1, /content/2 and /content/3.</p>
 <p>An interesting usage of the JSON pipe can also be to loop over an array of 
Strings like</p>
-<pre><code>    
.json('[&quot;/content/mySite/page1&quot;,&quot;/content/mySite/page2&quot;,&quot;/content/mySite/page3&quot;]')
-    .echo('${one}')
-    .children(&quot;jcr:content&quot;)
-    .write(&quot;update&quot;,&quot;something&quot;)
+<pre><code>    json 
[&quot;/content/mySite/page1&quot;,&quot;/content/mySite/page2&quot;,&quot;/content/mySite/page3&quot;]
+    | echo ${one}
+    | echo jcr:content
+    | write update=something
 </code></pre>
-<h3><a href="#csvpipe-csvexpr" id="csvpipe-csvexpr">CsvPipe 
(<code>csv(expr)</code>)</a></h3>
+<h3><a href="#csv-pipe-csv-expr" id="csv-pipe-csv-expr">Csv Pipe (<code>csv 
&lt;expr&gt;</code>)</a></h3>
 <p>feeds bindings with csv stream</p>
-<ul>
-<li><code>sling:resourceType</code> is <code>slingPipes/csv</code></li>
-<li><code>expr</code> see above</li>
-<li><code>separator</code> separator character, default being comma 
<code>,</code>
-<pre><code>.csv('idx,val\n1,1\n2,2\n3,3').name('demo')
-.mkdir('/content/${demo.val}')
+<pre><code>    csv idx,val\\n1,1\n2,2\\n3,3 @ name demo
+    | mkdir /content/${demo.val}
 </code></pre>
-</li>
-</ul>
-<p>should create a tree of 3 resources /content/1, /content/2 and 
/content/3</p>
-<h3><a href="#regexp-pipe-egrepexpr" id="regexp-pipe-egrepexpr">Regexp pipe 
(<code>egrep(expr)</code>)</a></h3>
-<p>feeds bindings with text input stream, parsed with a regexp</p>
-<ul>
-<li><code>sling:resourceType</code> is <code>slingPipes/egrep</code></li>
-<li><code>expr</code> see above</li>
-<li><code>pattern</code> is a regular expression, with named group (e.g. 
<code>(?&lt;user&gt;.*)</code>) that will be used to produce the output binding 
names
-<pre><code>egrep(&quot;https://sling.apache.org/&quot;)
-      
.with(&quot;pattern&quot;,'src=\&quot;/res/(?&lt;asset&gt;/[\\-\\w\\.\\/0-9]+)\&quot;').name(&quot;demo&quot;)
-.echo('/content/assets/${demo.asset}')
+<p>should create a tree of 3 resources /content/1, /content/2 and /content/3. 
You can change separator with <code>separator</code> property</p>
+<pre><code>    csv a;b @ with separator=;
+</code></pre>
+<h3><a href="#regexp-pipe-egrep-expr" id="regexp-pipe-egrep-expr">Regexp pipe 
(<code>egrep &lt;expr&gt;</code>)</a></h3>
+<p>feeds bindings with text input stream, parsed with a regexp 
<code>pattern</code>, that is a regular expression, with named group (e.g. 
<code>(?&lt;user&gt;.*)</code>) that will be used to produce the output binding 
names</p>
+<pre><code>    egrep http://some.site.com @ 
pattern=/res/(?&lt;asset&gt;/[\-\w\.\/0-9]+) @ name demo
+    | echo /content/assets
+    | write test=demo.asset
 </code></pre>
-</li>
-</ul>
 </section></div></div>                            
                         </div>
                     </div>
@@ -264,7 +213,7 @@
             </div><footer class="footer">
                 <div class="content has-text-centered is-small">
 <div class="revisionInfo">
-                        Last modified by <span class="author">Nicolas 
Peltier</span> on <span class="comment">Mon Oct 8 17:09:17 2018 +0200</span>
+                        Last modified by <span class="author">Nicolas 
Peltier</span> on <span class="comment">Thu Jan 28 17:14:27 2021 +0100</span>
                     </div>                    <p>
                         Apache Sling, Sling, Apache, the Apache feather logo, 
and the Apache Sling project logo are trademarks of The Apache Software 
Foundation. All other marks mentioned may be trademarks or registered 
trademarks of their respective owners.
                     </p><p>
diff --git a/documentation/bundles/sling-pipes/samples.html 
b/documentation/bundles/sling-pipes/samples.html
index 4d576d0..14cd938 100644
--- a/documentation/bundles/sling-pipes/samples.html
+++ b/documentation/bundles/sling-pipes/samples.html
@@ -120,7 +120,7 @@
                         </nav><script src='/res/jquery-3.2.1.min.js' 
type='text/javascript'></script><script src='/res/tocjs-1-1-2.js' 
type='text/javascript'></script><script 
type='text/javascript'>$(document).ready(function() { 
$('#generatedToC').toc({'selector':'h1[class!=title],h2,h3','ulClass':'menu-list'});
 } );</script><div class="content is-marginless">
 <div class="row"><div><section><h2><a href="#pipebuilder-samples" 
id="pipebuilder-samples">Pipebuilder samples</a></h2>
 <p>those are samples built with pipebuilder api you can</p>
-<h3><a href="#echo-children-write" id="echo-children-write">echo | $ | 
children | write</a></h3>
+<h3><a href="#echo-children-write" id="echo-children-write">echo | $ | 
children | write</a></h3>
 <p>write repository user prefix Ms/Mr depending on gender</p>
 <pre><code>  echo('/home/users')
   .$('rep:User')
@@ -171,7 +171,7 @@
             </div><footer class="footer">
                 <div class="content has-text-centered is-small">
 <div class="revisionInfo">
-                        Last modified by <span class="author">npeltier</span> 
on <span class="comment">Sat Jan 27 22:17:38 2018 +0100</span>
+                        Last modified by <span class="author">Nicolas 
Peltier</span> on <span class="comment">Thu Jan 28 17:14:27 2021 +0100</span>
                     </div>                    <p>
                         Apache Sling, Sling, Apache, the Apache feather logo, 
and the Apache Sling project logo are trademarks of The Apache Software 
Foundation. All other marks mentioned may be trademarks or registered 
trademarks of their respective owners.
                     </p><p>
diff --git a/documentation/bundles/sling-pipes/writers.html 
b/documentation/bundles/sling-pipes/writers.html
index b3776ed..cd450ad 100644
--- a/documentation/bundles/sling-pipes/writers.html
+++ b/documentation/bundles/sling-pipes/writers.html
@@ -119,69 +119,48 @@
                             </ul>
                         </nav><script src='/res/jquery-3.2.1.min.js' 
type='text/javascript'></script><script src='/res/tocjs-1-1-2.js' 
type='text/javascript'></script><script 
type='text/javascript'>$(document).ready(function() { 
$('#generatedToC').toc({'selector':'h1[class!=title],h2,h3','ulClass':'menu-list'});
 } );</script><div class="content is-marginless">
 <div class="row"><div><section><p>those pipes all are using common sling (or 
other) APIs to modify content. You'll probably need some <a 
href="/documentation/bundles/sling-pipes/readers.html">reader</a> pipes and/or 
<a href="/documentation/bundles/sling-pipes/logical.html">logical</a> pipes 
first to put you into the right context.</p>
-<h5><a href="#write-pipe-writeconf" id="write-pipe-writeconf">Write Pipe 
(<code>write(conf)</code>)</a></h5>
+<h5><a href="#write-pipe-write-" id="write-pipe-write-">Write Pipe 
(<code>write &lt;...&gt;</code>)</a></h5>
 <p>writes given nodes and properties to current input resource</p>
-<ul>
-<li><code>sling:resourceType</code> is <code>slingPipes/write</code></li>
-<li><code>conf</code> node tree that will be copied to the current input of 
the pipe, each property's names and value will be written to the input 
resource. Input resource will be outputed. Note that properties that will be 
evaluated (in an expression) as <code>null</code> for a given input resource 
will be removed from it. E.g. <code>./conf/some/node@prop=${null}</code> will 
add <code>./conf/some/node</code> structure if not in current input resource, 
but remove its <code>prop</code> pr [...]
-<li><code>expr</code> used if no configuration node provided: path of a 
content tree this will write to the current destination (basically a deep 
copy)</li>
-</ul>
-<p>For most of the case where you just need to write properties, pipe builder 
API allows you to e.g.</p>
-<pre><code>    .echo('/content/foo')
-    .write('foo1','bar1','foo2','bar2')
+<pre><code>    echo /content/foo | write foo1=bar1 foo2=2 foo3=true 
foo4=one.old foo5=timeutil.of('2018-05-05T11:50:55+02:00')
 </code></pre>
-<p>will write <code>@foo1=bar1</code> and <code>@foo2=bar2</code> in 
<code>/content/foo</code>. For more complicated cases where you need a 
structure to be written, just use a JCR / Resource explorer to edit the 
persistence of the pipe, and create the given structured under conf. Note that 
you can use expressions in that node tree, and specifically, for a node name, 
parent of a tree you want to be conditionally written, use 
<code>$if${...}nodename</code> syntax, that will basically only  [...]
-<p>Note that using <code>expr</code> you need configuration node <em>not</em> 
to be here, and <code>write</code> shortcut creates one systematically. So if 
you want to use pipe builder and that, you'd need something like</p>
-<pre><code>    .echo('/content/destination')
-    .pipe(&quot;slingPipes/write&quot;).expr(&quot;/content/source&quot;)
+<p>will write <code>@foo1='bar1'</code>, <code>@foo2=2</code>, 
<code>@foo3=true</code>, <a 
href="/documentation/bundles/sling-pipes/bindings.html"><code>@foo4=${one.old}</code></a>,
 and @foo5 being a Date property in <code>/content/foo</code>.</p>
+<p>Another handy usage is to copy whole tree sections, using the expr 
configuration</p>
+<pre><code>    echo /content/foo | write @ expr /content/tree/to/copy
 </code></pre>
-<h5><a href="#movepipe-mvexpr" id="movepipe-mvexpr">MovePipe 
(<code>mv(expr)</code>)</a></h5>
+<p>Finally, for more complicated cases where you need a structure to be 
written, you can use  JCR / Resource explorer to edit the &quot;compiled&quot; 
persistence of the pipe, and create the given structured under conf. - 
<code>sling:resourceType</code> is <code>slingPipes/write</code> - 
<code>conf</code> node tree that will be copied to the current input of the 
pipe, each property's names and value will be written to the input resource. 
Input resource will be outputed. Note that propert [...]
+<p>Note that you can use expressions in that node tree, and specifically, for 
a node name, parent of a tree you want to be conditionally written, use 
<code>$if${...}nodename</code> syntax, that will basically only create such 
tree if the expression is true.</p>
+<h5><a href="#movepipe-mv-expr" id="movepipe-mv-expr">MovePipe (<code>mv 
&lt;expr&gt;</code>)</a></h5>
 <p>JCR move of current input to target path (can be a node or a property)</p>
-<ul>
-<li><code>sling:resourceType</code> is <code>slingPipes/mv</code></li>
-<li><code>expr</code> full target path, note that parent path must exists
-<pre><code>.echo(&quot;/content/foo/old/location&quot;)
-.mv(&quot;/content/bar/new/location&quot;)
+<pre><code>    echo /content/foo/old/location | mv /content/bar/new/location
 </code></pre>
-</li>
-</ul>
 <p>following will move resource at <code>/content/foo/old/oldlocation</code> 
to under <code>/content/bar/new</code> before <code>newlocation</code></p>
-<pre><code>    .echo(&quot;/content/foo/old/oldlocation&quot;)
-    .mv(&quot;/content/bar/new/newlocation&quot;).with('orderBeforeTarget', 
true)
+<pre><code>    echo /content/foo/old/oldlocation | mv 
/content/bar/new/newlocation @ with orderBeforeTarget=true
 </code></pre>
 <p>following will move resource at <code>/content/foo/old/oldlocation</code> 
to <code>/content/bar/new/newlocation</code> and overwrite 
<code>newlocation</code></p>
-<pre><code>    .echo(&quot;/content/foo/old/oldlocation&quot;)
-    .mv(&quot;/content/bar/new/newlocation&quot;).with('overwriteTarget', true)
+<pre><code>    echo /content/foo/old/oldlocation | mv 
/content/bar/new/newlocation @ with overwriteTarget=true
 </code></pre>
-<h5><a href="#removepipe-rm" id="removepipe-rm">RemovePipe 
(<code>rm()</code>)</a></h5>
-<p>removes the input resource, returns the parent, regardless of the resource 
being a node, or a property</p>
-<ul>
-<li><code>sling:resourceType</code> is <code>slingPipes/rm</code></li>
-<li><code>conf</code> node tree that will be used to filter relative 
properties &amp; subtrees to the current resource to remove. A subnode is 
considered to be removed if it has no property configured, nore any child.</li>
-</ul>
-<p>more common usage is just without configuration node, removing incoming 
resource</p>
-<pre><code>    .echo(&quot;/content/foo/toRemove&quot;)
-    .rm() 
+<h5><a href="#removepipe-rm" id="removepipe-rm">RemovePipe 
(<code>rm</code>)</a></h5>
+<p>removes the input resource, returns the parent, regardless of the resource 
being a node,</p>
+<pre><code>    echo /content/foo/nodeToRemove | rm 
+</code></pre>
+<p>or a property</p>
+<pre><code>    echo /content/foo/node/propertyToRemove | rm
 </code></pre>
-<h5><a href="#pathpipe-mkdirexpr" id="pathpipe-mkdirexpr">PathPipe 
(<code>mkdir(expr)</code>)</a></h5>
+<p>for more complex use cases, where you need to remove several resources in a 
row, at different level of a subtree, you can use the &quot;compiled&quot; 
persistence, where - <code>sling:resourceType</code> is 
<code>slingPipes/rm</code> - <code>conf</code> node tree that will be used to 
filter relative properties &amp; subtrees to the current resource to remove. A 
subnode is considered to be removed if it has no property configured, nore any 
child.</p>
+<h5><a href="#pathpipe-mkdir-expr" id="pathpipe-mkdir-expr">PathPipe 
(<code>mkdir &lt;expr&gt;</code>)</a></h5>
 <p>get or create path given in expression. Uses <a 
href="https://sling.apache.org/apidocs/sling8/org/apache/sling/api/resource/ResourceUtil.html#getOrCreateResource-org.apache.sling.api.resource.ResourceResolver-java.lang.String-java.lang.String-java.lang.String-boolean-";>ResourceUtil.getOrCreateResource</a></p>
-<ul>
-<li><code>sling:resourceType</code> is <code>slingPipes/path</code></li>
-<li><code>nodeType</code> node type of the intermediate nodes to create</li>
-<li><code>autosave</code> should save at each creation (will make things slow, 
but sometimes you don't have choice)
-<pre><code>.mkdir(&quot;/content/foo/bar&quot;)
+<pre><code>    mkdir /content/folders/to/create
 </code></pre>
-</li>
-</ul>
-<p>will create a <code>/content/foo/bar</code> path of 
<code>sling:Folder</code> nodes</p>
-<h5><a href="#packagepipe-pkgexpr" id="packagepipe-pkgexpr">PackagePipe 
(<code>pkg(expr)</code>)</a></h5>
-<p>will create a package and add current resource as a filter. At the end of 
super pipe execution, will attempt to build the package - 
<code>sling:resourceType</code> is <code>slingPipes/package</code> - 
<code>expr</code> package path</p>
+<p>will create a <code>/content/folders/to/create</code> path of 
<code>sling:Folder</code> nodes</p>
+<pre><code>    echo /content/folders/to/create | mkdir childWithDifferentType 
@ with nodeType=nt:unstructured        
+</code></pre>
+<p>will create a child with <code>nt:unstructured</code> node type.</p>
+<h5><a href="#packagepipe-pkg-expr" id="packagepipe-pkg-expr">PackagePipe 
(<code>pkg &lt;expr&gt;</code>)</a></h5>
+<p>will create a package and add current resource as a filter. At the end of 
super pipe execution, will attempt to build the package</p>
 <p>This example searches for folders in a given location and package them 
up</p>
-<pre><code>    .echo(&quot;/content/foo/bar&quot;)
-    .$(&quot;sling:Folder&quot;)
-    .pkg(&quot;/etc/packages/foobar-folders.zip&quot;)
+<pre><code>    echo /content/foo/bar | $ sling:Folder | pkg 
/etc/packages/foobar-folders.zip
 </code></pre>
-<h5><a href="#authorizablepipe-authconf" 
id="authorizablepipe-authconf">AuthorizablePipe 
(<code>auth(conf)</code>)</a></h5>
+<h5><a href="#authorizablepipe-auth-conf" 
id="authorizablepipe-auth-conf">AuthorizablePipe (<code>auth 
(conf)</code>)</a></h5>
 <p>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 <strong>can modify 
content</strong> in case additional configuration is added (see below)</p>
 <ul>
 <li><code>sling:resourceType</code> is 
<code>slingPipes/authorizable</code></li>
@@ -213,16 +192,14 @@
 <li><code>deny</code> (boolean) to deny some privileges for configured 
authorizable</li>
 </ul>
 <p>following will give bar-users authorizable the aggregate privilege 
(jcr:all) on /content/foo/bar</p>
-<pre><code>    .echo(&quot;/content/foo/bar&quot;)
-    .allow(&quot;bar-users&quot;)
+<pre><code>    echo /content/foo/bar | allow bar-users
 </code></pre>
 <p>following will give bar-users authorizable the specific rights to 
read|write on /content/foo/bar</p>
 <pre><code>    .echo(&quot;/content/foo/bar&quot;)
     
.allow(&quot;bar-users&quot;).with(&quot;jcr:privileges&quot;,[jcr:read,jcr:write]))
 </code></pre>
 <p>and following will deny bar-users authorizable to read on 
/content/foo/bar</p>
-<pre><code>    .echo(&quot;/content/foo/bar&quot;)
-    .deny(&quot;bar-users&quot;)
+<pre><code>    echo /content/foo/bar | deny bar-users
 </code></pre>
 </section></div></div>                            
                         </div>
@@ -231,7 +208,7 @@
             </div><footer class="footer">
                 <div class="content has-text-centered is-small">
 <div class="revisionInfo">
-                        Last modified by <span class="author">dichaudh</span> 
on <span class="comment">Fri Aug 23 15:59:41 2019 +0530</span>
+                        Last modified by <span class="author">Nicolas 
Peltier</span> on <span class="comment">Thu Jan 28 17:14:27 2021 +0100</span>
                     </div>                    <p>
                         Apache Sling, Sling, Apache, the Apache feather logo, 
and the Apache Sling project logo are trademarks of The Apache Software 
Foundation. All other marks mentioned may be trademarks or registered 
trademarks of their respective owners.
                     </p><p>

Reply via email to