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 <[email protected]> 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 "[email protected]" <[email protected]>.
