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 2016/09/21 09:02:07 UTC

svn commit: r1761699 - in /sling/trunk/contrib/extensions/sling-pipes/src: main/java/org/apache/sling/pipes/ main/java/org/apache/sling/pipes/impl/ test/java/org/apache/sling/pipes/

Author: rombert
Date: Wed Sep 21 09:02:07 2016
New Revision: 1761699

URL: http://svn.apache.org/viewvc?rev=1761699&view=rev
Log:
SLING-6063 - plumber servlet doesn't persist changes anymore

Submitted-By: Nicolas Peltier

Modified:
    sling/trunk/contrib/extensions/sling-pipes/src/main/java/org/apache/sling/pipes/Plumber.java
    sling/trunk/contrib/extensions/sling-pipes/src/main/java/org/apache/sling/pipes/PlumberServlet.java
    sling/trunk/contrib/extensions/sling-pipes/src/main/java/org/apache/sling/pipes/impl/PlumberImpl.java
    sling/trunk/contrib/extensions/sling-pipes/src/test/java/org/apache/sling/pipes/PlumberServletTest.java

Modified: sling/trunk/contrib/extensions/sling-pipes/src/main/java/org/apache/sling/pipes/Plumber.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/sling-pipes/src/main/java/org/apache/sling/pipes/Plumber.java?rev=1761699&r1=1761698&r2=1761699&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/sling-pipes/src/main/java/org/apache/sling/pipes/Plumber.java (original)
+++ sling/trunk/contrib/extensions/sling-pipes/src/main/java/org/apache/sling/pipes/Plumber.java Wed Sep 21 09:02:07 2016
@@ -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);
+
+
 }

Modified: sling/trunk/contrib/extensions/sling-pipes/src/main/java/org/apache/sling/pipes/PlumberServlet.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/sling-pipes/src/main/java/org/apache/sling/pipes/PlumberServlet.java?rev=1761699&r1=1761698&r2=1761699&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/sling-pipes/src/main/java/org/apache/sling/pipes/PlumberServlet.java (original)
+++ sling/trunk/contrib/extensions/sling-pipes/src/main/java/org/apache/sling/pipes/PlumberServlet.java Wed Sep 21 09:02:07 2016
@@ -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 Slin
             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);
         }

Modified: sling/trunk/contrib/extensions/sling-pipes/src/main/java/org/apache/sling/pipes/impl/PlumberImpl.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/sling-pipes/src/main/java/org/apache/sling/pipes/impl/PlumberImpl.java?rev=1761699&r1=1761698&r2=1761699&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/sling-pipes/src/main/java/org/apache/sling/pipes/impl/PlumberImpl.java (original)
+++ sling/trunk/contrib/extensions/sling-pipes/src/main/java/org/apache/sling/pipes/impl/PlumberImpl.java Wed Sep 21 09:02:07 2016
@@ -23,6 +23,7 @@ import org.apache.felix.scr.annotations.
 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.Dis
 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 Plum
 
     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 Plum
                 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

Modified: sling/trunk/contrib/extensions/sling-pipes/src/test/java/org/apache/sling/pipes/PlumberServletTest.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/sling-pipes/src/test/java/org/apache/sling/pipes/PlumberServletTest.java?rev=1761699&r1=1761698&r2=1761699&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/sling-pipes/src/test/java/org/apache/sling/pipes/PlumberServletTest.java (original)
+++ sling/trunk/contrib/extensions/sling-pipes/src/test/java/org/apache/sling/pipes/PlumberServletTest.java Wed Sep 21 09:02:07 2016
@@ -103,6 +103,7 @@ public class PlumberServletTest  extends
         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());
     }
 
     /**