Skip to content

Instantly share code, notes, and snippets.

@techforum-repo
Created January 7, 2022 17:28
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save techforum-repo/71de0845e9787da1219d67066dbab9c0 to your computer and use it in GitHub Desktop.
Save techforum-repo/71de0845e9787da1219d67066dbab9c0 to your computer and use it in GitHub Desktop.
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