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/10/22 16:52:53 UTC

[sling-org-apache-sling-pipes] branch master updated: SLING-7172 introduce closest pipe

This is an automated email from the ASF dual-hosted git repository.

npeltier pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-pipes.git


The following commit(s) were added to refs/heads/master by this push:
     new a4eac83  SLING-7172 introduce closest pipe
a4eac83 is described below

commit a4eac833f541795bb9e463c4c1105a91e68474c2
Author: npeltier <np...@adobe.com>
AuthorDate: Sun Oct 22 18:52:42 2017 +0200

    SLING-7172 introduce closest pipe
---
 .../java/org/apache/sling/pipes/PipeBuilder.java     | 11 +++++++++--
 .../apache/sling/pipes/internal/PipeBuilderImpl.java |  6 ++++++
 .../org/apache/sling/pipes/internal/PlumberImpl.java |  2 ++
 .../sling/pipes/internal/slingQuery/ClosestPipe.java | 20 ++++++++++++++++++++
 .../pipes/internal/slingQuery/ClosestPipeTest.java   | 20 ++++++++++++++++++++
 5 files changed, 57 insertions(+), 2 deletions(-)

diff --git a/src/main/java/org/apache/sling/pipes/PipeBuilder.java b/src/main/java/org/apache/sling/pipes/PipeBuilder.java
index 8033a3a..b3357f4 100644
--- a/src/main/java/org/apache/sling/pipes/PipeBuilder.java
+++ b/src/main/java/org/apache/sling/pipes/PipeBuilder.java
@@ -128,19 +128,26 @@ public interface PipeBuilder {
     PipeBuilder traverse();
 
     /**
-     * attach a parent pipe to the current context
+     * attach a sling query parent pipe to the current context
      * @return updated instance of PipeBuilder
      */
     PipeBuilder parent();
 
     /**
-     * attach a parents pipe to the current context
+     * attach a sling query parents pipe to the current context
      * @param expr expression
      * @return updated instance of PipeBuilder
      */
     PipeBuilder parents(String expr);
 
     /**
+     * attach a sling query closest pipe to the current context
+     * @param expr expression
+     * @return updated instance of PipeBuilder
+     */
+    PipeBuilder closest(String expr);
+
+    /**
      * attach a reference pipe to the current context
      * @param expr reference
      * @return updated instance of PipeBuilder
diff --git a/src/main/java/org/apache/sling/pipes/internal/PipeBuilderImpl.java b/src/main/java/org/apache/sling/pipes/internal/PipeBuilderImpl.java
index 87a4227..2319c7b 100644
--- a/src/main/java/org/apache/sling/pipes/internal/PipeBuilderImpl.java
+++ b/src/main/java/org/apache/sling/pipes/internal/PipeBuilderImpl.java
@@ -24,6 +24,7 @@ import org.apache.sling.api.resource.ResourceUtil;
 import org.apache.sling.event.jobs.Job;
 import org.apache.sling.pipes.*;
 import org.apache.sling.pipes.internal.slingQuery.ChildrenPipe;
+import org.apache.sling.pipes.internal.slingQuery.ClosestPipe;
 import org.apache.sling.pipes.internal.slingQuery.ParentPipe;
 import org.apache.sling.pipes.internal.slingQuery.ParentsPipe;
 import org.apache.sling.pipes.internal.slingQuery.SiblingsPipe;
@@ -176,6 +177,11 @@ public class PipeBuilderImpl implements PipeBuilder {
     }
 
     @Override
+    public PipeBuilder closest(String expr) {
+        return pipeWithExpr(ClosestPipe.RESOURCE_TYPE, expr);
+    }
+
+    @Override
     public PipeBuilder ref(String expr) {
         return pipeWithExpr(ReferencePipe.RESOURCE_TYPE, expr);
     }
diff --git a/src/main/java/org/apache/sling/pipes/internal/PlumberImpl.java b/src/main/java/org/apache/sling/pipes/internal/PlumberImpl.java
index a1e43be..e2e6da2 100644
--- a/src/main/java/org/apache/sling/pipes/internal/PlumberImpl.java
+++ b/src/main/java/org/apache/sling/pipes/internal/PlumberImpl.java
@@ -54,6 +54,7 @@ import org.apache.sling.event.jobs.JobManager;
 import org.apache.sling.event.jobs.consumer.JobConsumer;
 import org.apache.sling.pipes.*;
 import org.apache.sling.pipes.internal.slingQuery.ChildrenPipe;
+import org.apache.sling.pipes.internal.slingQuery.ClosestPipe;
 import org.apache.sling.pipes.internal.slingQuery.ParentPipe;
 import org.apache.sling.pipes.internal.slingQuery.ParentsPipe;
 import org.apache.sling.pipes.internal.slingQuery.SiblingsPipe;
@@ -126,6 +127,7 @@ public class PlumberImpl implements Plumber, JobConsumer {
         registerPipe(CsvPipe.RESOURCE_TYPE, CsvPipe.class);
         registerPipe(ParentPipe.RESOURCE_TYPE, ParentPipe.class);
         registerPipe(SiblingsPipe.RESOURCE_TYPE, SiblingsPipe.class);
+        registerPipe(ClosestPipe.RESOURCE_TYPE, ClosestPipe.class);
     }
 
     @Reference(policy= ReferencePolicy.DYNAMIC, cardinality= ReferenceCardinality.OPTIONAL)
diff --git a/src/main/java/org/apache/sling/pipes/internal/slingQuery/ClosestPipe.java b/src/main/java/org/apache/sling/pipes/internal/slingQuery/ClosestPipe.java
new file mode 100644
index 0000000..51f18a2
--- /dev/null
+++ b/src/main/java/org/apache/sling/pipes/internal/slingQuery/ClosestPipe.java
@@ -0,0 +1,20 @@
+package org.apache.sling.pipes.internal.slingQuery;
+
+import org.apache.sling.api.resource.Resource;
+import org.apache.sling.pipes.Plumber;
+import org.apache.sling.query.SlingQuery;
+
+import static org.apache.sling.query.SlingQuery.$;
+
+public class ClosestPipe extends AbstractExpressionSlingQueryPipe {
+    public static final String RESOURCE_TYPE = RT_PREFIX + "closest";
+
+    public ClosestPipe(Plumber plumber, Resource resource) throws Exception {
+        super(plumber, resource);
+    }
+
+    @Override
+    protected SlingQuery getQuery(Resource resource, String expression) {
+        return $(resource).closest(expression);
+    }
+}
diff --git a/src/test/java/org/apache/sling/pipes/internal/slingQuery/ClosestPipeTest.java b/src/test/java/org/apache/sling/pipes/internal/slingQuery/ClosestPipeTest.java
new file mode 100644
index 0000000..070cbfb
--- /dev/null
+++ b/src/test/java/org/apache/sling/pipes/internal/slingQuery/ClosestPipeTest.java
@@ -0,0 +1,20 @@
+package org.apache.sling.pipes.internal.slingQuery;
+
+import org.apache.sling.pipes.AbstractPipeTest;
+import org.junit.Test;
+
+import java.util.Set;
+
+import static org.junit.Assert.*;
+
+public class ClosestPipeTest extends AbstractPipeTest {
+
+    @Test
+    public void testClosest() throws Exception {
+        Set<String> outputs = plumber.newPipe(context.resourceResolver())
+                .echo(SAME_COLOR)
+                .closest("[color=green]").run();
+        assertEquals("there should be 1 output", 1, outputs.size());
+        assertTrue("there should be pea", outputs.contains(PATH_PEA));
+    }
+}
\ No newline at end of file

-- 
To stop receiving notification emails like this one, please contact
['"commits@sling.apache.org" <co...@sling.apache.org>'].