You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by ro...@apache.org on 2017/11/07 09:57:00 UTC
[sling-org-apache-sling-pipes] 16/31: SLING-6063 - plumber servlet
doesn't persist changes anymore
This is an automated email from the ASF dual-hosted git repository.
rombert pushed a commit to annotated tag org.apache.sling.pipes-0.0.10
in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-pipes.git
commit bfffca211596b8c75afdec8784eaa826c4592d6d
Author: Robert Munteanu <ro...@apache.org>
AuthorDate: Wed Sep 21 09:02:07 2016 +0000
SLING-6063 - plumber servlet doesn't persist changes anymore
Submitted-By: Nicolas Peltier
git-svn-id: https://svn.apache.org/repos/asf/sling/trunk/contrib/extensions/sling-pipes@1761699 13f79535-47bb-0310-9956-ffa450edef68
---
src/main/java/org/apache/sling/pipes/Plumber.java | 13 +++++++-
.../org/apache/sling/pipes/PlumberServlet.java | 5 +++
.../org/apache/sling/pipes/impl/PlumberImpl.java | 39 +++++++++++++++++-----
.../org/apache/sling/pipes/PlumberServletTest.java | 1 +
4 files changed, 49 insertions(+), 9 deletions(-)
diff --git a/src/main/java/org/apache/sling/pipes/Plumber.java b/src/main/java/org/apache/sling/pipes/Plumber.java
index 88d550b..5438164 100644
--- a/src/main/java/org/apache/sling/pipes/Plumber.java
+++ b/src/main/java/org/apache/sling/pipes/Plumber.java
@@ -16,6 +16,7 @@
*/
package org.apache.sling.pipes;
+import org.apache.sling.api.resource.PersistenceException;
import org.apache.sling.api.resource.Resource;
import org.apache.sling.api.resource.ResourceResolver;
@@ -27,7 +28,7 @@ import java.util.Set;
*/
public interface Plumber {
- public static final String RESOURCE_TYPE = "slingPipes/plumber";
+ String RESOURCE_TYPE = "slingPipes/plumber";
/**
* Instantiate a pipe from the given resource and returns it
@@ -59,9 +60,19 @@ public interface Plumber {
Set<String> execute(ResourceResolver resolver, Pipe pipe, Map bindings, boolean save) throws Exception;
/**
+ * Persist some pipe changes, and eventually distribute changes
+ * @param resolver
+ * @param pipe pipe from which the change occurred
+ * @param paths set of changed paths
+ */
+ void persist(ResourceResolver resolver, Pipe pipe, Set<String> paths) throws PersistenceException;
+
+ /**
* Registers
* @param type
* @param pipeClass
*/
void registerPipe(String type, Class<? extends BasePipe> pipeClass);
+
+
}
diff --git a/src/main/java/org/apache/sling/pipes/PlumberServlet.java b/src/main/java/org/apache/sling/pipes/PlumberServlet.java
index 807b58e..b1529b6 100644
--- a/src/main/java/org/apache/sling/pipes/PlumberServlet.java
+++ b/src/main/java/org/apache/sling/pipes/PlumberServlet.java
@@ -33,7 +33,9 @@ import org.slf4j.LoggerFactory;
import javax.servlet.ServletException;
import java.io.IOException;
+import java.util.HashSet;
import java.util.Iterator;
+import java.util.Set;
/**
* Servlet executing plumber for a pipe path given as 'path' parameter,
@@ -110,13 +112,16 @@ public class PlumberServlet extends SlingAllMethodsServlet {
OutputWriter writer = getWriter(request, response, pipe);
int i = 0;
Iterator<Resource> resourceIterator = pipe.getOutput();
+ Set<String> paths = new HashSet<String>();
while (resourceIterator.hasNext()){
Resource resource = resourceIterator.next();
+ paths.add(resource.getPath());
if (++i < size) {
writer.writeItem(resource);
}
}
writer.ends(i);
+ plumber.persist(resolver, pipe, paths);
} catch (Exception e) {
throw new ServletException(e);
}
diff --git a/src/main/java/org/apache/sling/pipes/impl/PlumberImpl.java b/src/main/java/org/apache/sling/pipes/impl/PlumberImpl.java
index 3b9675b..a143a62 100644
--- a/src/main/java/org/apache/sling/pipes/impl/PlumberImpl.java
+++ b/src/main/java/org/apache/sling/pipes/impl/PlumberImpl.java
@@ -23,6 +23,7 @@ import org.apache.felix.scr.annotations.Reference;
import org.apache.felix.scr.annotations.ReferenceCardinality;
import org.apache.felix.scr.annotations.ReferencePolicy;
import org.apache.felix.scr.annotations.Service;
+import org.apache.sling.api.resource.PersistenceException;
import org.apache.sling.api.resource.Resource;
import org.apache.sling.api.resource.ResourceResolver;
import org.apache.sling.distribution.DistributionRequest;
@@ -30,17 +31,32 @@ import org.apache.sling.distribution.DistributionRequestType;
import org.apache.sling.distribution.DistributionResponse;
import org.apache.sling.distribution.Distributor;
import org.apache.sling.distribution.SimpleDistributionRequest;
-import org.apache.sling.pipes.*;
+import org.apache.sling.pipes.AuthorizablePipe;
+import org.apache.sling.pipes.BasePipe;
+import org.apache.sling.pipes.ContainerPipe;
+import org.apache.sling.pipes.FilterPipe;
+import org.apache.sling.pipes.JsonPipe;
+import org.apache.sling.pipes.MovePipe;
+import org.apache.sling.pipes.MultiPropertyPipe;
+import org.apache.sling.pipes.NotPipe;
+import org.apache.sling.pipes.ParentPipe;
+import org.apache.sling.pipes.PathPipe;
+import org.apache.sling.pipes.Pipe;
+import org.apache.sling.pipes.Plumber;
+import org.apache.sling.pipes.ReferencePipe;
+import org.apache.sling.pipes.RemovePipe;
+import org.apache.sling.pipes.SlingQueryPipe;
+import org.apache.sling.pipes.WritePipe;
+import org.apache.sling.pipes.XPathPipe;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import java.io.File;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
-import java.util.logging.Filter;
+
/**
* implements plumber interface, and registers default pipes
@@ -52,7 +68,7 @@ public class PlumberImpl implements Plumber {
Map<String, Class<? extends BasePipe>> registry;
- @Reference (policy= ReferencePolicy.DYNAMIC, cardinality= ReferenceCardinality.OPTIONAL_UNARY)
+ @Reference(policy= ReferencePolicy.DYNAMIC, cardinality= ReferenceCardinality.OPTIONAL_UNARY)
protected volatile Distributor distributor = null;
@Activate
@@ -115,18 +131,25 @@ public class PlumberImpl implements Plumber {
set.add(resource.getPath());
}
}
- if (pipe.modifiesContent() && save && resolver.hasChanges() && !pipe.isDryRun()){
+ if (save) {
+ persist(resolver, pipe, set);
+ }
+ log.info("[{}] done executing.", pipe.getName());
+ return set;
+ }
+
+ @Override
+ public void persist(ResourceResolver resolver, Pipe pipe, Set<String> paths) throws PersistenceException {
+ if (pipe.modifiesContent() && resolver.hasChanges() && !pipe.isDryRun()){
log.info("[{}] saving changes...", pipe.getName());
resolver.commit();
if (distributor != null && StringUtils.isNotBlank(pipe.getDistributionAgent())) {
log.info("a distribution agent is configured, will try to distribute the changes");
- DistributionRequest request = new SimpleDistributionRequest(DistributionRequestType.ADD, true, set.toArray(new String[set.size()]));
+ DistributionRequest request = new SimpleDistributionRequest(DistributionRequestType.ADD, true, paths.toArray(new String[paths.size()]));
DistributionResponse response = distributor.distribute(pipe.getDistributionAgent(), resolver, request);
log.info("distribution response : {}", response);
}
}
- log.info("[{}] done executing.", pipe.getName());
- return set;
}
@Override
diff --git a/src/test/java/org/apache/sling/pipes/PlumberServletTest.java b/src/test/java/org/apache/sling/pipes/PlumberServletTest.java
index 7d63794..01fb83f 100644
--- a/src/test/java/org/apache/sling/pipes/PlumberServletTest.java
+++ b/src/test/java/org/apache/sling/pipes/PlumberServletTest.java
@@ -103,6 +103,7 @@ public class PlumberServletTest extends AbstractPipeTest {
servlet.execute(request, response, true);
String finalResponse = stringResponse.toString();
assertFalse("There should be a response", StringUtils.isBlank(finalResponse));
+ assertFalse("There should be no more pending changes", context.resourceResolver().hasChanges());
}
/**
--
To stop receiving notification emails like this one, please contact
"commits@sling.apache.org" <co...@sling.apache.org>.