Created
January 7, 2022 17:28
-
-
Save techforum-repo/71de0845e9787da1219d67066dbab9c0 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import java.io.IOException; | |
import java.util.HashMap; | |
import javax.servlet.Servlet; | |
import javax.servlet.ServletException; | |
import org.apache.sling.api.SlingHttpServletRequest; | |
import org.apache.sling.api.SlingHttpServletResponse; | |
import org.apache.sling.api.resource.Resource; | |
import org.apache.sling.api.servlets.SlingSafeMethodsServlet; | |
import org.apache.sling.pipes.Plumber; | |
import org.apache.sling.pipes.internal.ContainerPipe; | |
import org.apache.sling.servlets.annotations.SlingServletPaths; | |
import org.osgi.service.component.annotations.Component; | |
import org.osgi.service.component.annotations.Reference; | |
/** | |
* Sample Servlet to demo Apache Sling Pipes | |
* | |
*/ | |
@Component(service = { Servlet.class }) | |
@SlingServletPaths("/bin/servlet/pipes") | |
public class SampleSlingPipesServlet extends SlingSafeMethodsServlet { | |
private static final long serialVersionUID = 1L; | |
@Reference | |
Plumber plumber; | |
@Override | |
protected void doGet(final SlingHttpServletRequest req, final SlingHttpServletResponse resp) | |
throws ServletException, IOException { | |
try { | |
resp.getWriter().println("Echo: " + plumber.newPipe(req.getResourceResolver()) | |
.echo("/content/wknd/jcr:content") | |
.name("content") | |
.outputs("title", "${content['jcr:title']}", "createdBy", | |
"${content['jcr:createdBy']}") | |
.run()); | |
resp.getWriter().println(); | |
resp.getWriter().println("XPath: " + plumber.newPipe(req.getResourceResolver()) | |
.xpath("/jcr:root/content/wknd//*[(@sling:resourceType = 'wknd/components/page')]") | |
.run()); | |
resp.getWriter().println(); | |
resp.getWriter().println("Traverse: " + plumber.newPipe(req.getResourceResolver()) | |
.echo("/content/wknd") | |
.traverse() | |
.run()); | |
resp.getWriter().println(); | |
resp.getWriter().println("Traverse Depth: " + plumber.newPipe(req.getResourceResolver()) | |
.echo("/content/wknd") | |
.traverse() | |
.with("breadFirst", true, "depth", 1) | |
.run()); | |
resp.getWriter().println(); | |
resp.getWriter().println("Multi Propert: " + plumber.newPipe(req.getResourceResolver()) | |
.echo("/content/wknd/jcr:content/months") | |
.mp() | |
.name("currentMonth") | |
.echo("/content/wknd/year/${currentMonth}") | |
.write("visited", true) | |
.run()); | |
resp.getWriter().println(); | |
resp.getWriter().println("Sling Query - Find: "+ plumber.newPipe(req.getResourceResolver()) | |
.echo("/content/wknd") | |
.$("wknd/components/page") | |
.run()); | |
resp.getWriter().println(); | |
resp.getWriter().println("Sling Query - Children: " + plumber.newPipe(req.getResourceResolver()) | |
.echo("/content/wknd/us/en") | |
.children("wknd/components/page") | |
.run()); | |
resp.getWriter().println(); | |
resp.getWriter().println("Sling Query - Siblings: "+ plumber.newPipe(req.getResourceResolver()) | |
.echo("/content/wknd/us/en") | |
.siblings("cq:Page") | |
.run()); | |
resp.getWriter().println(); | |
resp.getWriter().println("Sling Query - Parent: "+ plumber.newPipe(req.getResourceResolver()) | |
.echo("/content/wknd") | |
.parent() | |
.run()); | |
resp.getWriter().println(); | |
resp.getWriter().println("Sling Query - Closest: " + plumber.newPipe(req.getResourceResolver()) | |
.echo("/content/wknd/us/en") | |
.$("wknd/components/page") | |
.closest("[jcr:content]") | |
.run()); | |
resp.getWriter().println(); | |
resp.getWriter().println("Sling Query - Parents: "+ plumber.newPipe(req.getResourceResolver()) | |
.echo("/content/wknd/us/en") | |
.parents("cq:Page") | |
.run()); | |
resp.getWriter().println(); | |
resp.getWriter().println("JSON Pipe - Expression: " + plumber.newPipe(req.getResourceResolver()) | |
.json("{\"items\":[{\"val\":\"1\"},{\"val\":\"2\"},{\"val\":\"3\"}]}") | |
.with("valuePath", "$.items") | |
.name("demo") | |
.mkdir("/content/wknd/${demo.val}") | |
.run()); | |
resp.getWriter().println(); | |
resp.getWriter().println("JSON Pipe - Array: " + plumber.newPipe(req.getResourceResolver()) | |
.json("[\"/content/wknd/us\",\"/content/wknd/us/en\",\"/content/wknd/us/en/test\"]") | |
.echo("${one}") | |
.echo("jcr:content") | |
.write("test","testdata") | |
.run()); | |
resp.getWriter().println(); | |
resp.getWriter().println("JSON Pipe - Remote: " + plumber.newPipe(req.getResourceResolver()) | |
.json("http://localhost:8000/data") | |
.with("valuePath", "$.items") | |
.name("demo") | |
.mkdir("/content/wknd/${demo.val}") | |
.run()); | |
resp.getWriter().println(); | |
resp.getWriter().println("JSON Pipe - AEM File: " + plumber.newPipe(req.getResourceResolver()) | |
.json("/content/wknd/test.json") | |
.with("valuePath", "$.items") | |
.name("demo") | |
.mkdir("/content/wknd/${demo.val}") | |
.run()); | |
resp.getWriter().println(); | |
resp.getWriter().println("CSV Pipe: Default Seperator" + plumber.newPipe(req.getResourceResolver()) | |
.csv("idx,val\r\n" + "n1,12\r\n" + "n2,13\r\n" + "n3,14") | |
.name("demo") | |
.mkdir("/content/wknd/${demo.val}") | |
.run()); | |
resp.getWriter().println(); | |
resp.getWriter().println("CSV Pipe: Custom Seperator" + plumber.newPipe(req.getResourceResolver()) | |
.csv("idx;val\r\n" + "n1;15\r\n"+"n2;16\r\n" +"n3;17") | |
.name("demo") | |
.with("separator", ";") | |
.name("demo") | |
.mkdir("/content/wknd/${demo.val}") | |
.run()); | |
resp.getWriter().println(); | |
resp.getWriter().println("CSV Pipe: Local AEM File" + plumber.newPipe(req.getResourceResolver()) | |
.csv("/content/wknd/test.csv") | |
.name("demo") | |
.mkdir("/content/wknd/${demo.val}") | |
.run()); | |
resp.getWriter().println(); | |
resp.getWriter().println("Move " + plumber.newPipe(req.getResourceResolver()) | |
.echo("/content/wknd/1") | |
.mv("/content/wknd/100") | |
.run()); | |
resp.getWriter().println(); | |
resp.getWriter().println("Remove " + plumber.newPipe(req.getResourceResolver()) | |
.echo("/content/wknd/100") | |
.rm() | |
.run()); | |
resp.getWriter().println(); | |
//Looks to be an defect - the referred package should be available before using this pipe, the actual expectation is the package should be created if not available. | |
resp.getWriter().println("Package Create/Build with Filter" +plumber.newPipe(req.getResourceResolver()) | |
.echo("/content/wknd") | |
.pkg("/etc/packages/my_packages/wknd-content.zip") | |
.run()); | |
resp.getWriter().println(); | |
resp.getWriter().println("Package Create with Filter (no build)" +plumber.newPipe(req.getResourceResolver()) | |
.echo("/content/wknd") | |
.pkg("/etc/packages/my_packages/wknd-content.zip") | |
.with("assemble",false) | |
.run()); | |
resp.getWriter().println(); | |
resp.getWriter().println("Authorizable Create Group " + plumber.newPipe(req.getResourceResolver()) | |
.auth("createGroup", true) | |
.expr("testgrp") | |
.run()); | |
resp.getWriter().println(); | |
resp.getWriter().println("Authorizable Add To Group " + plumber.newPipe(req.getResourceResolver()) | |
.echo("/home/users").$("[rep:authorizableId=testusr]") | |
.auth("addToGroup", "testgrp") | |
.run()); | |
resp.getWriter().println(); | |
resp.getWriter().println("Authorizable Bind Members " + plumber.newPipe(req.getResourceResolver()) | |
.auth("bindMembers",true).expr("administrators") | |
.json("${one}") | |
.mkdir("/content/wknd/${two}") | |
.run()); | |
resp.getWriter().println(); //Defect boolean allow property should be passed | |
resp.getWriter().println("Authorizable Allow " + plumber.newPipe(req.getResourceResolver()) | |
.echo("/content/wknd") | |
.allow("testusr") | |
.with("allow",true) | |
.run()); | |
resp.getWriter().println(); //Defect boolean allow property should be passed | |
resp.getWriter().println("Authorizable Allow With Privileges " + plumber.newPipe(req.getResourceResolver()) | |
.echo("/content/wknd") | |
.allow("testusr").with("allow",true) | |
.withStrings("jcr:privileges","[jcr:read,jcr:write]") | |
.run()); | |
resp.getWriter().println(); //Defect boolean deny property should be passed | |
resp.getWriter().println("Authorizable Deny " +plumber.newPipe(req.getResourceResolver()) | |
.echo("/content/wknd") | |
.deny("testusr") | |
.with("deny",true) | |
.run()); | |
resp.getWriter().println(); //Defect boolean deny property should be passed | |
resp.getWriter().println("Authorizable Deny With Privileges" +plumber.newPipe(req.getResourceResolver()) | |
.echo("/content/wknd") | |
.deny("testusr") | |
.with("deny",true) | |
.withStrings("jcr:privileges","[jcr:read,jcr:write]") | |
.run()); | |
resp.getWriter().println(); | |
resp.getWriter().println("Grep " +plumber.newPipe(req.getResourceResolver()) | |
.echo("/content/wknd/us/en/jcr:content") | |
.grep("data","externaldata","jcr:title","en") | |
.run()); | |
resp.getWriter().println("Grep Not Filter " +plumber.newPipe(req.getResourceResolver()) | |
.echo("/content/wknd/us/en/jcr:content") | |
.grep("data","externaldata","jcr:title","en") | |
.with("slingPipesFilter_not",true) | |
.run()); | |
resp.getWriter().println(); | |
resp.getWriter().println("Parallel"+ plumber.newPipe(req.getResourceResolver()) | |
.echo("/content/wknd/us/en/jcr:content") | |
.echo("/content/wknd/us/en") | |
.runParallel(2, null)); | |
resp.getWriter().println(); | |
//build | |
resp.getWriter().println("Build - Read: " + plumber.newPipe(req.getResourceResolver()) | |
.echo("/content/wknd/jcr:content") | |
.name("content") | |
.outputs("title", "${content['jcr:title']}", "createdBy", "${content['jcr:createdBy']}") | |
.build("/etc/pipes/getData")); | |
resp.getWriter().println(); | |
resp.getWriter().println("Build - Modify " + plumber.newPipe(req.getResourceResolver()) | |
.echo("/content/wknd/us/en/jcr:content") | |
.write("data","externaldata") | |
.build("/etc/pipes/modifyData")); | |
resp.getWriter().println(); | |
resp.getWriter().println("Monitor - JMX : " + plumber.newPipe(req.getResourceResolver()) | |
.with("monitored",true) | |
.echo("/content/wknd/jcr:content") | |
.write("foo","bar","foo2","bar2") | |
.build("/etc/pipes/monitor")); | |
resp.getWriter().println(); | |
resp.getWriter().println("Run Async: "); | |
String path= plumber.newPipe(req.getResourceResolver()).echo("/content/wknd/jcr:content") | |
.write("foo","bar","foo2","bar2") | |
.runAsync(new HashMap<>()) | |
.getProperty("path").toString(); | |
resp.getWriter().println(); | |
Resource asyncResource = req.getResourceResolver().getResource(path); | |
resp.getWriter().println("Get Pipe Status: "+ plumber.getStatus(asyncResource)); | |
resp.getWriter().println(); | |
Resource resource = req.getResourceResolver().getResource("/etc/pipes/getData"); | |
ContainerPipe pipe = (ContainerPipe) plumber.getPipe(resource); | |
resp.getWriter().println("Execute Pipe - Get Pipe Output: "+ "title: "+ pipe.getOutput().next().getValueMap().get("jcr:title")+" Created By: "+ pipe.getOutput().next().getValueMap().get("jcr:createdBy")); | |
resp.getWriter().println(); | |
CustomJsonWriter writer= new CustomJsonWriter(); | |
writer.starts(); | |
resp.getWriter().println(); | |
resp.getWriter().println(plumber.execute(req.getResourceResolver(), "/etc/pipes/getData", null,writer , false)); | |
resp.getWriter().println(); | |
resp.getWriter().println(plumber.executeAsync(req.getResourceResolver(), "/etc/pipes/getData", new HashMap<>())); | |
resp.getWriter().println(); | |
resp.getWriter().println("Job Status: "+ plumber.getStatus(resource)); | |
} catch (IllegalAccessException | IOException e) { | |
e.printStackTrace(); | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment