You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by np...@apache.org on 2017/09/01 14:59:55 UTC
svn commit: r1806970 -
/sling/site/trunk/content/documentation/bundles/sling-pipes.mdtext
Author: npeltier
Date: Fri Sep 1 14:59:54 2017
New Revision: 1806970
URL: http://svn.apache.org/viewvc?rev=1806970&view=rev
Log:
[sling pipes] update samples & formatting
Modified:
sling/site/trunk/content/documentation/bundles/sling-pipes.mdtext
Modified: sling/site/trunk/content/documentation/bundles/sling-pipes.mdtext
URL: http://svn.apache.org/viewvc/sling/site/trunk/content/documentation/bundles/sling-pipes.mdtext?rev=1806970&r1=1806969&r2=1806970&view=diff
==============================================================================
--- sling/site/trunk/content/documentation/bundles/sling-pipes.mdtext (original)
+++ sling/site/trunk/content/documentation/bundles/sling-pipes.mdtext Fri Sep 1 14:59:54 2017
@@ -56,7 +56,7 @@ Plumber can provider a PipeBuilder with
API to quickly configure and run pipes.
e.g.
- `plumber.newPipe(resolver).xpath('//element(*,nt:unstructured)[@sling:resourceType='to/delete']").rm().run();`
+ plumber.newPipe(resolver).xpath('//element(*,nt:unstructured)[@sling:resourceType='to/delete']").rm().run();
will search for resource of type `to/delete` and remove them.
@@ -72,7 +72,7 @@ PipeBuilder basically will automatically
note that that configuration part has shortcuts for some pipes. Typically, above sample is a shorter equivalent of
-`plumber.newPipe(resolver).pipe('slingPipes/xpath').expr('//element(*,nt:unstructured)[@sling:resourceType='to/delete']").pipe('slingPipes/rm').run();`
+ plumber.newPipe(resolver).pipe('slingPipes/xpath').expr('//element(*,nt:unstructured)[@sling:resourceType='to/delete']").pipe('slingPipes/rm').run();
when available, shortcuts will be specified next to each pipe type documentation.
@@ -98,7 +98,7 @@ which will return you the path of the re
In the eventuality of a long execution (synchronous or asynchronous), you can retrieve the status of a pipe, by executing
-GET /etc/pipes/mySamplePipe**.status**.json
+ GET /etc/pipes/mySamplePipe**.status**.json
##### Request Parameter `binding`
@@ -125,7 +125,7 @@ e.g.
will returns something similar to
-{"size":2, "items":[{'user':'John Smith','path':'/home/users/q/q123jk1UAZS'},{'user':'John Doe','path':'/home/users/q/q153jk1UAZS'}]}
+ {"size":2, "items":[{'user':'John Smith','path':'/home/users/q/q123jk1UAZS'},{'user':'John Doe','path':'/home/users/q/q153jk1UAZS'}]}
##### Request Parameter `dryRun`
if parameter dryRun is set to true, and the executed pipe is supposed to modify content, it will log (at best it can) the change it *would* have done, without doing anything
@@ -282,7 +282,7 @@ global bindings can be set at pipe execu
##### slingQuery | write
write repository user prefix Ms/Mr depending on gender
- .newPipe(resolver).xpath('/jcr:root/home/users//element(*,rep:Users)')
+ plumber.newPipe(resolver).xpath('/jcr:root/home/users//element(*,rep:Users)')
.$('nt:unstructured#profile')
.write("fullName","${(profile.gender === 'female' ? 'Ms ' + profile.fullName : 'Mr ' + profile.fullName)}")
.run()
@@ -290,7 +290,7 @@ write repository user prefix Ms/Mr depen
##### slingQuery | multiProperty | authorizable | write
move badge<->user relation ship from badge->users MV property to a user->badges MV property
- .newPipe(resolver).echo('/etc/badges/jcr:content/par')
+ plumber.newPipe(resolver).echo('/etc/badges/jcr:content/par')
.$('[sling:resourceType=myApp/components/badge]').name('badge')
.pipe('slingPipes/multiProperty').path('${path.badge}/profiles').name('profile')
.auth('${profile}').name('user')
@@ -299,72 +299,37 @@ move badge<->user relation ship from bad
.run()
-### xpath | json | write
-this use case is for completing repository profiles with external system's data (that has an json api)
+##### echo | $ | $ | echo | json | write
+this use case is for completing repository website with external system's data (that has an json api),
+it does
- {
- "jcr:primaryType": "nt:unstructured",
- "jcr:description": "this pipe retrieves json info from an external system and writes them to the user profile, uses moment.js, it
- distributes modified resources using publish distribution agent",
- "sling:resourceType": "slingPipes/container",
- "distribution.agent": "publish",
- "additionalScripts": "/etc/source/moment.js",
- "conf": {
- "jcr:primaryType": "sling:OrderedFolder",
- "profile": {
- "jcr:primaryType": "sling:OrderedFolder",
- "expr": "/jcr:root/home/users//element(profile,nt:unstructured)[@uid]",
- "jcr:description": "query all user profile nodes",
- "sling:resourceType": "slingPipes/xpath"
- },
- "json": {
- "jcr:primaryType": "sling:OrderedFolder",
- "expr": "${(profile.uid ? 'https://my.external.system.corp.com/profiles/' + profile.uid.substr(0,2) + '/' + profile.uid + '.json' : '')",
- "jcr:description": "retrieves json information relative to the given profile, if the uid is not found, expr is empty: the pipe will do nothing",
- "sling:resourceType": "slingPipes/json"
- },
- "write": {
- "jcr:primaryType": "sling:OrderedFolder",
- "path": "path.profile",
- "jcr:description": "write json information to the profile node",
- "sling:resourceType": "slingPipes/write",
- "conf": {
- "jcr:primaryType": "sling:OrderedFolder",
- "background": "${json.opt('background')}",
- "about": "${json.opt('about')}",
- "birthday": "${(json.opt('birthday') ? moment(json.opt('birthday'), \"MMMM DD\").toDate() : '')}",
- "mobile": "${json.opt('mobile')}"
- }
- }
- }
- }
-
-### xpath | parent | rm
-
- {
- "jcr:primaryType": "nt:unstructured",
- "jcr:description": "this pipe removes user with bad property in their profile",
- "sling:resourceType": "slingPipes/container",
- "conf": {
- "jcr:primaryType": "sling:OrderedFolder",
- "profile": {
- "jcr:primaryType": "sling:OrderedFolder",
- "expr": "/jcr:root/home/users//element(profile,nt:unstructured)[@bad]",
- "jcr:description": "query all user profile nodes with bad properties",
- "sling:resourceType": "slingPipes/xpath"
- },
- "parent": {
- "jcr:primaryType": "sling:OrderedFolder",
- "jcr:description": "get the parent node (user node)",
- "sling:resourceType": "slingPipes/parent"
- },
- "rm": {
- "jcr:primaryType": "sling:OrderedFolder",
- "jcr:description": "remove it",
- "sling:resourceType": "slingPipes/rm",
- }
- }
- }
+- loop over "my:Page" country/language tree under `/content/mySite`,
+- fetch json with contextual parameter that must be in upper case,
+- and write part of the returned json in the current resource.
+
+This pipe is run asynchronously in case the execution takes long.
+
+
+
+ plumber.newPipe(resolver)
+ .echo("/content/mySite")
+ .$('my:Page')
+ .$('my:Page').name("localePage")
+ .echo('${path.localePage}/jcr:content').name("content")
+ .json('https://www.external.com/api/${content.country.toUpperCase()}.json.name('api')
+ .write('cachedValue','${api.remoteJsonValueWeWant}')
+ .runAsync(null)
+
+
+##### xpath | parent | rm
+
+- query all user profile nodes with bad properties,
+- get the parent node (user node)
+- remove it
+
+ plumber.newPipe(resolver)
+ .xpath("/jcr:root/home/users//element(profile,nt:unstructured)[@bad]")
+ .parent().rm().run()
some other samples are in https://github.com/npeltier/sling-pipes/tree/master/src/test/
@@ -373,4 +338,5 @@ For running this tool on a sling instanc
- java 8 (Nashorn is used for expression)
- slingQuery (3.0.0) (used in SlingQueryPipe)
-- jackrabbit api (2.7.5+) (used in AuthorizablePipe)
\ No newline at end of file
+- jackrabbit api (2.7.5+) (used in AuthorizablePipe)
+