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>'].