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