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 "foo/bar" 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).$("foo/bar").write("id",3).build("/etc/demo")
+<pre><code>
plumber.newPipe(resolver).echo("content").$("foo/bar").write("id",3).build("/etc/demo")
</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 "pipe"</p>
-<pre><code> pipe "$ foo/bar | write id 3"
+<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 "echo /content | $ foo/bar | write id=3"
</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 "one", "two", ...
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 & 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 "global" <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>{"user":"${user.fullName}"}</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 "compiled"
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
<path></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
== "bar"}').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 <path></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="foo/bar"]')
-.write('foo','bar')
+<h3><a href="#xpath-pipe-xpath-xpath-query"
id="xpath-pipe-xpath-xpath-query">XPath Pipe (<code>xpath <xpath
query></code>)</a></h3>
+<pre><code> xpath
/jcr:root/content/foo//element(*,nt:unstructured)[@sling:resourceType="foo/bar"]
| 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("/content/foo")
-.$("nt:unstructured[sling:resourceType=foo/bar]")
-.write('foo','bar')
+<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. 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
<expr></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
<expr></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 <expr></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
<expr></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>.$("nt:unstructured[sling:resourceType=foo/bar]")
-.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
<expr></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
{"items":[{"val":"1"},{"val":"2"},{"val":"3"}]}
@ 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('["/content/mySite/page1","/content/mySite/page2","/content/mySite/page3"]')
- .echo('${one}')
- .children("jcr:content")
- .write("update","something")
+<pre><code> json
["/content/mySite/page1","/content/mySite/page2","/content/mySite/page3"]
+ | 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
<expr></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>(?<user>.*)</code>) that will be used to produce the output binding
names
-<pre><code>egrep("https://sling.apache.org/")
-
.with("pattern",'src=\"/res/(?<asset>/[\\-\\w\\.\\/0-9]+)\"').name("demo")
-.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 <expr></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>(?<user>.*)</code>) that will be used to produce the output binding
names</p>
+<pre><code> egrep http://some.site.com @
pattern=/res/(?<asset>/[\-\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 <...></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("slingPipes/write").expr("/content/source")
+<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 "compiled"
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
<expr></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("/content/foo/old/location")
-.mv("/content/bar/new/location")
+<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("/content/foo/old/oldlocation")
- .mv("/content/bar/new/newlocation").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("/content/foo/old/oldlocation")
- .mv("/content/bar/new/newlocation").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 & 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("/content/foo/toRemove")
- .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 "compiled"
persistence, where - <code>sling:resourceType</code> is
<code>slingPipes/rm</code> - <code>conf</code> node tree that will be used to
filter relative properties & 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 <expr></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("/content/foo/bar")
+<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 <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</p>
<p>This example searches for folders in a given location and package them
up</p>
-<pre><code> .echo("/content/foo/bar")
- .$("sling:Folder")
- .pkg("/etc/packages/foobar-folders.zip")
+<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("/content/foo/bar")
- .allow("bar-users")
+<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("/content/foo/bar")
.allow("bar-users").with("jcr:privileges",[jcr:read,jcr:write]))
</code></pre>
<p>and following will deny bar-users authorizable to read on
/content/foo/bar</p>
-<pre><code> .echo("/content/foo/bar")
- .deny("bar-users")
+<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>