Author: buildbot
Date: Fri Sep  1 15:00:17 2017
New Revision: 1017563

Log:
Staging update by buildbot for sling

Modified:
    websites/staging/sling/trunk/content/   (props changed)
    websites/staging/sling/trunk/content/documentation/bundles/sling-pipes.html

Propchange: websites/staging/sling/trunk/content/
------------------------------------------------------------------------------
--- cms:source-revision (original)
+++ cms:source-revision Fri Sep  1 15:00:17 2017
@@ -1 +1 @@
-1806960
+1806970

Modified: 
websites/staging/sling/trunk/content/documentation/bundles/sling-pipes.html
==============================================================================
--- websites/staging/sling/trunk/content/documentation/bundles/sling-pipes.html 
(original)
+++ websites/staging/sling/trunk/content/documentation/bundles/sling-pipes.html 
Fri Sep  1 15:00:17 2017
@@ -166,7 +166,7 @@ h2:hover > .headerlink, h3:hover > .head
 <p>Plumber can provider a PipeBuilder with <code>newPipe(ResourceResolver 
resolver)</code> API, that gives a fluent 
 API to quickly configure and run pipes.
 e.g. </p>
-<div class="codehilite"><pre>`<span class="n">plumber</span><span 
class="p">.</span><span class="n">newPipe</span><span class="p">(</span><span 
class="n">resolver</span><span class="p">).</span><span 
class="n">xpath</span><span class="p">(</span><span 
class="s">&#39;//element(*,nt:unstructured)[@sling:resourceType=&#39;</span><span
 class="n">to</span><span class="o">/</span><span class="n">delete</span><span 
class="o">&#39;</span><span class="p">]</span>&quot;<span 
class="p">).</span><span class="n">rm</span><span class="p">().</span><span 
class="n">run</span><span class="p">();</span>`
+<div class="codehilite"><pre><span class="n">plumber</span><span 
class="p">.</span><span class="n">newPipe</span><span class="p">(</span><span 
class="n">resolver</span><span class="p">).</span><span 
class="n">xpath</span><span class="p">(</span><span 
class="s">&#39;//element(*,nt:unstructured)[@sling:resourceType=&#39;</span><span
 class="n">to</span><span class="o">/</span><span class="n">delete</span><span 
class="o">&#39;</span><span class="p">]</span>&quot;<span 
class="p">).</span><span class="n">rm</span><span class="p">().</span><span 
class="n">run</span><span class="p">();</span>
 </pre></div>
 
 
@@ -182,7 +182,10 @@ e.g. </p>
 <li><code>conf(Object...)</code> add an extra configuration node with 
key/value properties/values</li>
 </ul>
 <p>note that that configuration part has shortcuts for some pipes. Typically, 
above sample is a shorter equivalent of </p>
-<p><code>plumber.newPipe(resolver).pipe('slingPipes/xpath').expr('//element(*,nt:unstructured)[@sling:resourceType='to/delete']").pipe('slingPipes/rm').run();</code></p>
+<div class="codehilite"><pre><span class="n">plumber</span><span 
class="p">.</span><span class="n">newPipe</span><span class="p">(</span><span 
class="n">resolver</span><span class="p">).</span><span 
class="n">pipe</span><span class="p">(</span><span 
class="s">&#39;slingPipes/xpath&#39;</span><span class="p">).</span><span 
class="n">expr</span><span class="p">(</span><span 
class="s">&#39;//element(*,nt:unstructured)[@sling:resourceType=&#39;</span><span
 class="n">to</span><span class="o">/</span><span class="n">delete</span><span 
class="o">&#39;</span><span class="p">]</span>&quot;<span 
class="p">).</span><span class="n">pipe</span><span class="p">(</span><span 
class="s">&#39;slingPipes/rm&#39;</span><span class="p">).</span><span 
class="n">run</span><span class="p">();</span>
+</pre></div>
+
+
 <p>when available, shortcuts will be specified next to each pipe type 
documentation.</p>
 <p>Once you are happy with the pipe you have created, you can terminate the 
builder with following command:</p>
 <ul>
@@ -205,7 +208,10 @@ e.g. </p>
 </ul>
 <p>which will return you the path of the resources that have been through the 
output of the configured pipe.</p>
 <p>In the eventuality of a long execution (synchronous or asynchronous), you 
can retrieve the status of a pipe, by executing</p>
-<p>GET /etc/pipes/mySamplePipe<strong>.status</strong>.json</p>
+<div class="codehilite"><pre><span class="n">GET</span> <span 
class="o">/</span><span class="n">etc</span><span class="o">/</span><span 
class="n">pipes</span><span class="o">/</span><span 
class="n">mySamplePipe</span><span class="o">**</span><span 
class="p">.</span><span class="n">status</span><span class="o">**</span><span 
class="p">.</span><span class="n">json</span>
+</pre></div>
+
+
 <h5 id="request-parameter-binding">Request Parameter <code>binding</code><a 
class="headerlink" href="#request-parameter-binding" title="Permanent 
link">&para;</a></h5>
 <p>you can add as <code>bindings</code> parameter a json object of global 
bindings you want to add for the execution of the pipe</p>
 <p>e.g.</p>
@@ -227,7 +233,10 @@ object are expressions and can reuse eac
 
 
 <p>will returns something similar to</p>
-<p>{"size":2, "items":[{'user':'John 
Smith','path':'/home/users/q/q123jk1UAZS'},{'user':'John 
Doe','path':'/home/users/q/q153jk1UAZS'}]}</p>
+<div class="codehilite"><pre><span class="p">{</span>&quot;<span 
class="nb">size</span>&quot;<span class="p">:</span>2<span class="p">,</span> 
&quot;<span class="n">items</span>&quot;<span class="p">:[{</span><span 
class="s">&#39;user&#39;</span><span class="p">:</span><span 
class="s">&#39;John Smith&#39;</span><span class="p">,</span><span 
class="s">&#39;path&#39;</span><span class="p">:</span><span 
class="s">&#39;/home/users/q/q123jk1UAZS&#39;</span><span 
class="p">},{</span><span class="s">&#39;user&#39;</span><span 
class="p">:</span><span class="s">&#39;John Doe&#39;</span><span 
class="p">,</span><span class="s">&#39;path&#39;</span><span 
class="p">:</span><span 
class="s">&#39;/home/users/q/q153jk1UAZS&#39;</span><span class="p">}]}</span>
+</pre></div>
+
+
 <h5 id="request-parameter-dryrun">Request Parameter <code>dryRun</code><a 
class="headerlink" href="#request-parameter-dryrun" title="Permanent 
link">&para;</a></h5>
 <p>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</p>
 <h5 id="request-parameter-size">Request Parameter <code>size</code><a 
class="headerlink" href="#request-parameter-size" title="Permanent 
link">&para;</a></h5>
@@ -367,7 +376,7 @@ is the path of the current resource of p
 <h2 id="sample-configurations">sample configurations<a class="headerlink" 
href="#sample-configurations" title="Permanent link">&para;</a></h2>
 <h5 id="slingquery-write">slingQuery | write<a class="headerlink" 
href="#slingquery-write" title="Permanent link">&para;</a></h5>
 <p>write repository user prefix Ms/Mr depending on gender</p>
-<div class="codehilite"><pre>  
.newPipe(resolver).xpath(&#39;/jcr:root/home/users//element(*,rep:Users)&#39;)
+<div class="codehilite"><pre>  
plumber.newPipe(resolver).xpath(&#39;/jcr:root/home/users//element(*,rep:Users)&#39;)
   .$(&#39;nt:unstructured#profile&#39;)
   .write(&quot;fullName&quot;,&quot;<span class="cp">${</span><span 
class="p">(</span><span class="n">profile</span><span class="o">.</span><span 
class="n">gender</span> <span class="o">===</span> <span 
class="s">&#39;female&#39;</span> <span class="err">?</span> <span 
class="s">&#39;Ms &#39;</span> <span class="o">+</span> <span 
class="n">profile</span><span class="o">.</span><span class="n">fullName</span> 
<span class="p">:</span> <span class="s">&#39;Mr &#39;</span> <span 
class="o">+</span> <span class="n">profile</span><span class="o">.</span><span 
class="n">fullName</span><span class="p">)</span><span 
class="cp">}</span>&quot;)
   .run()
@@ -376,7 +385,7 @@ is the path of the current resource of p
 
 <h5 id="slingquery-multiproperty-authorizable-write">slingQuery | 
multiProperty | authorizable | write<a class="headerlink" 
href="#slingquery-multiproperty-authorizable-write" title="Permanent 
link">&para;</a></h5>
 <p>move badge&lt;-&gt;user relation ship from badge-&gt;users MV property to a 
user-&gt;badges MV property</p>
-<div class="codehilite"><pre> 
.newPipe(resolver).echo(&#39;/etc/badges/jcr:content/par&#39;)
+<div class="codehilite"><pre> 
plumber.newPipe(resolver).echo(&#39;/etc/badges/jcr:content/par&#39;)
  
.$(&#39;[sling:resourceType=myApp/components/badge]&#39;).name(&#39;badge&#39;)
  .pipe(&#39;slingPipes/multiProperty&#39;).path(&#39;<span 
class="cp">${</span><span class="n">path</span><span class="o">.</span><span 
class="n">badge</span><span 
class="cp">}</span>/profiles&#39;).name(&#39;profile&#39;)
  .auth(&#39;<span class="cp">${</span><span class="n">profile</span><span 
class="cp">}</span>&#39;).name(&#39;user&#39;)
@@ -386,75 +395,37 @@ is the path of the current resource of p
 </pre></div>
 
 
-<h3 id="xpath-json-write">xpath | json | write<a class="headerlink" 
href="#xpath-json-write" title="Permanent link">&para;</a></h3>
-<p>this use case is for completing repository profiles with external system's 
data (that has an json api)</p>
-<div class="codehilite"><pre>{
-  &quot;jcr:primaryType&quot;: &quot;nt:unstructured&quot;,
-  &quot;jcr:description&quot;: &quot;this pipe retrieves json info from an 
external system and writes them to the user profile, uses moment.js, it
-  distributes modified resources using publish distribution agent&quot;,
-  &quot;sling:resourceType&quot;: &quot;slingPipes/container&quot;,
-  &quot;distribution.agent&quot;: &quot;publish&quot;,
-  &quot;additionalScripts&quot;: &quot;/etc/source/moment.js&quot;,
-  &quot;conf&quot;: {
-    &quot;jcr:primaryType&quot;: &quot;sling:OrderedFolder&quot;,
-    &quot;profile&quot;: {
-      &quot;jcr:primaryType&quot;: &quot;sling:OrderedFolder&quot;,
-      &quot;expr&quot;: 
&quot;/jcr:root/home/users//element(profile,nt:unstructured)[@uid]&quot;,
-      &quot;jcr:description&quot;: &quot;query all user profile nodes&quot;,
-      &quot;sling:resourceType&quot;: &quot;slingPipes/xpath&quot;
-    },
-    &quot;json&quot;: {
-      &quot;jcr:primaryType&quot;: &quot;sling:OrderedFolder&quot;,
-      &quot;expr&quot;: &quot;<span class="cp">${</span><span 
class="p">(</span><span class="n">profile</span><span class="o">.</span><span 
class="n">uid</span> <span class="err">?</span> <span 
class="s">&#39;https://my.external.system.corp.com/profiles/&#39;</span> <span 
class="o">+</span> <span class="n">profile</span><span class="o">.</span><span 
class="n">uid</span><span class="o">.</span><span class="n">substr</span><span 
class="p">(</span><span class="mi">0</span><span class="p">,</span><span 
class="mi">2</span><span class="p">)</span> <span class="o">+</span> <span 
class="s">&#39;/&#39;</span> <span class="o">+</span> <span 
class="n">profile</span><span class="o">.</span><span class="n">uid</span> 
<span class="o">+</span> <span class="s">&#39;.json&#39;</span> <span 
class="p">:</span> <span class="s">&#39;&#39;</span><span 
class="p">)</span><span class="s">&quot;,</span>
-      <span class="s">&quot;jcr:description&quot;</span><span 
class="p">:</span> <span class="s">&quot;retrieves json information relative to 
the given profile, if the uid is not found, expr is empty: the pipe will do 
nothing&quot;</span><span class="p">,</span>
-      <span class="s">&quot;sling:resourceType&quot;</span><span 
class="p">:</span> <span class="s">&quot;slingPipes/json&quot;</span>
-    <span class="cp">}</span>,
-    &quot;write&quot;: {
-      &quot;jcr:primaryType&quot;: &quot;sling:OrderedFolder&quot;,
-      &quot;path&quot;: &quot;path.profile&quot;,
-      &quot;jcr:description&quot;: &quot;write json information to the profile 
node&quot;,
-      &quot;sling:resourceType&quot;: &quot;slingPipes/write&quot;,
-      &quot;conf&quot;: {
-        &quot;jcr:primaryType&quot;: &quot;sling:OrderedFolder&quot;,
-        &quot;background&quot;: &quot;<span class="cp">${</span><span 
class="n">json</span><span class="o">.</span><span class="n">opt</span><span 
class="p">(</span><span class="s">&#39;background&#39;</span><span 
class="p">)</span><span class="cp">}</span>&quot;,
-        &quot;about&quot;: &quot;<span class="cp">${</span><span 
class="n">json</span><span class="o">.</span><span class="n">opt</span><span 
class="p">(</span><span class="s">&#39;about&#39;</span><span 
class="p">)</span><span class="cp">}</span>&quot;,
-        &quot;birthday&quot;: &quot;<span class="cp">${</span><span 
class="p">(</span><span class="n">json</span><span class="o">.</span><span 
class="n">opt</span><span class="p">(</span><span 
class="s">&#39;birthday&#39;</span><span class="p">)</span> <span 
class="err">?</span> <span class="n">moment</span><span class="p">(</span><span 
class="n">json</span><span class="o">.</span><span class="n">opt</span><span 
class="p">(</span><span class="s">&#39;birthday&#39;</span><span 
class="p">),</span> \<span class="s">&quot;MMMM DD</span><span 
class="se">\&quot;</span><span class="s">).toDate() : &#39;&#39;)</span><span 
class="cp">}</span>&quot;,
-        &quot;mobile&quot;: &quot;<span class="cp">${</span><span 
class="n">json</span><span class="o">.</span><span class="n">opt</span><span 
class="p">(</span><span class="s">&#39;mobile&#39;</span><span 
class="p">)</span><span class="cp">}</span>&quot;
-      }
-    }
-  }
-}
-</pre></div>
-
-
-<h3 id="xpath-parent-rm">xpath | parent | rm<a class="headerlink" 
href="#xpath-parent-rm" title="Permanent link">&para;</a></h3>
-<div class="codehilite"><pre><span class="p">{</span>
-  &quot;<span class="n">jcr</span><span class="p">:</span><span 
class="n">primaryType</span>&quot;<span class="p">:</span> &quot;<span 
class="n">nt</span><span class="p">:</span><span 
class="n">unstructured</span>&quot;<span class="p">,</span>
-  &quot;<span class="n">jcr</span><span class="p">:</span><span 
class="n">description</span>&quot;<span class="p">:</span> &quot;<span 
class="n">this</span> <span class="n">pipe</span> <span 
class="n">removes</span> <span class="n">user</span> <span 
class="n">with</span> <span class="n">bad</span> <span 
class="n">property</span> <span class="n">in</span> <span 
class="n">their</span> <span class="n">profile</span>&quot;<span 
class="p">,</span>
-  &quot;<span class="n">sling</span><span class="p">:</span><span 
class="n">resourceType</span>&quot;<span class="p">:</span> &quot;<span 
class="n">slingPipes</span><span class="o">/</span><span 
class="n">container</span>&quot;<span class="p">,</span>
-  &quot;<span class="n">conf</span>&quot;<span class="p">:</span> <span 
class="p">{</span>
-    &quot;<span class="n">jcr</span><span class="p">:</span><span 
class="n">primaryType</span>&quot;<span class="p">:</span> &quot;<span 
class="n">sling</span><span class="p">:</span><span 
class="n">OrderedFolder</span>&quot;<span class="p">,</span>
-    &quot;<span class="n">profile</span>&quot;<span class="p">:</span> <span 
class="p">{</span>
-      &quot;<span class="n">jcr</span><span class="p">:</span><span 
class="n">primaryType</span>&quot;<span class="p">:</span> &quot;<span 
class="n">sling</span><span class="p">:</span><span 
class="n">OrderedFolder</span>&quot;<span class="p">,</span>
-      &quot;<span class="n">expr</span>&quot;<span class="p">:</span> 
&quot;<span class="o">/</span><span class="n">jcr</span><span 
class="p">:</span><span class="n">root</span><span class="o">/</span><span 
class="n">home</span><span class="o">/</span><span class="n">users</span><span 
class="o">//</span><span class="n">element</span><span class="p">(</span><span 
class="n">profile</span><span class="p">,</span><span class="n">nt</span><span 
class="p">:</span><span class="n">unstructured</span><span 
class="p">)[@</span><span class="n">bad</span><span 
class="p">]</span>&quot;<span class="p">,</span>
-      &quot;<span class="n">jcr</span><span class="p">:</span><span 
class="n">description</span>&quot;<span class="p">:</span> &quot;<span 
class="n">query</span> <span class="n">all</span> <span class="n">user</span> 
<span class="n">profile</span> <span class="n">nodes</span> <span 
class="n">with</span> <span class="n">bad</span> <span 
class="k">properties</span>&quot;<span class="p">,</span>
-      &quot;<span class="n">sling</span><span class="p">:</span><span 
class="n">resourceType</span>&quot;<span class="p">:</span> &quot;<span 
class="n">slingPipes</span><span class="o">/</span><span 
class="n">xpath</span>&quot;
-    <span class="p">},</span>
-    &quot;<span class="n">parent</span>&quot;<span class="p">:</span> <span 
class="p">{</span>
-      &quot;<span class="n">jcr</span><span class="p">:</span><span 
class="n">primaryType</span>&quot;<span class="p">:</span> &quot;<span 
class="n">sling</span><span class="p">:</span><span 
class="n">OrderedFolder</span>&quot;<span class="p">,</span>
-      &quot;<span class="n">jcr</span><span class="p">:</span><span 
class="n">description</span>&quot;<span class="p">:</span> &quot;<span 
class="n">get</span> <span class="n">the</span> <span class="n">parent</span> 
<span class="n">node</span> <span class="p">(</span><span class="n">user</span> 
<span class="n">node</span><span class="p">)</span>&quot;<span 
class="p">,</span>
-      &quot;<span class="n">sling</span><span class="p">:</span><span 
class="n">resourceType</span>&quot;<span class="p">:</span> &quot;<span 
class="n">slingPipes</span><span class="o">/</span><span 
class="n">parent</span>&quot;
-    <span class="p">},</span>
-    &quot;<span class="n">rm</span>&quot;<span class="p">:</span> <span 
class="p">{</span>
-      &quot;<span class="n">jcr</span><span class="p">:</span><span 
class="n">primaryType</span>&quot;<span class="p">:</span> &quot;<span 
class="n">sling</span><span class="p">:</span><span 
class="n">OrderedFolder</span>&quot;<span class="p">,</span>
-      &quot;<span class="n">jcr</span><span class="p">:</span><span 
class="n">description</span>&quot;<span class="p">:</span> &quot;<span 
class="n">remove</span> <span class="n">it</span>&quot;<span class="p">,</span>
-      &quot;<span class="n">sling</span><span class="p">:</span><span 
class="n">resourceType</span>&quot;<span class="p">:</span> &quot;<span 
class="n">slingPipes</span><span class="o">/</span><span 
class="n">rm</span>&quot;<span class="p">,</span>
-    <span class="p">}</span>
-  <span class="p">}</span>
-<span class="p">}</span>
+<h5 id="echo-echo-json-write">echo | $ | $ | echo | json | write<a 
class="headerlink" href="#echo-echo-json-write" title="Permanent 
link">&para;</a></h5>
+<p>this use case is for completing repository website with external system's 
data (that has an json api),
+it does </p>
+<ul>
+<li>loop over "my:Page" country/language tree under 
<code>/content/mySite</code>, </li>
+<li>fetch json with contextual parameter that must be in upper case, </li>
+<li>and write part of the returned json in the current resource. </li>
+</ul>
+<p>This pipe is run asynchronously in case the execution takes long.</p>
+<div class="codehilite"><pre>plumber.newPipe(resolver)
+ .echo(&quot;/content/mySite&quot;)
+ .$(&#39;my:Page&#39;)
+ .$(&#39;my:Page&#39;).name(&quot;localePage&quot;)
+ .echo(&#39;<span class="cp">${</span><span class="n">path</span><span 
class="o">.</span><span class="n">localePage</span><span 
class="cp">}</span>/jcr:content&#39;).name(&quot;content&quot;)
+ .json(&#39;https://www.external.com/api/<span class="cp">${</span><span 
class="n">content</span><span class="o">.</span><span 
class="n">country</span><span class="o">.</span><span 
class="n">toUpperCase</span><span class="p">()</span><span 
class="cp">}</span>.json.name(&#39;api&#39;)
+ .write(&#39;cachedValue&#39;,&#39;<span class="cp">${</span><span 
class="n">api</span><span class="o">.</span><span 
class="n">remoteJsonValueWeWant</span><span class="cp">}</span>&#39;)
+ .runAsync(null)
 </pre></div>
 
 
+<h5 id="xpath-parent-rm">xpath | parent | rm<a class="headerlink" 
href="#xpath-parent-rm" title="Permanent link">&para;</a></h5>
+<ul>
+<li>query all user profile nodes with bad properties,</li>
+<li>get the parent node (user node)</li>
+<li>
+<p>remove it</p>
+<p>plumber.newPipe(resolver)
+.xpath("/jcr:root/home/users//element(profile,nt:unstructured)[@bad]")
+.parent().rm().run()</p>
+</li>
+</ul>
 <p>some other samples are in 
https://github.com/npeltier/sling-pipes/tree/master/src/test/</p>
 <h1 id="compatibility">Compatibility<a class="headerlink" 
href="#compatibility" title="Permanent link">&para;</a></h1>
 <p>For running this tool on a sling instance you need:</p>
@@ -464,7 +435,7 @@ is the path of the current resource of p
 <li>jackrabbit api (2.7.5+) (used in AuthorizablePipe)</li>
 </ul>
       <div class="timestamp" style="margin-top: 30px; font-size: 80%; 
text-align: right;">
-        Rev. 1806694 by npeltier on Wed, 30 Aug 2017 13:59:44 +0000
+        Rev. 1806970 by npeltier on Fri, 1 Sep 2017 14:59:54 +0000
       </div>
       <div class="trademarkFooter"> 
         Apache Sling, Sling, Apache, the Apache feather logo, and the Apache 
Sling project


Reply via email to