Author: mpetria
Date: Mon Sep 21 11:35:14 2015
New Revision: 1704271

URL: http://svn.apache.org/viewvc?rev=1704271&view=rev
Log:
SLING-5048: always distribute the entire rep:policy node

Modified:
    
sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/serialization/impl/AbstractDistributionPackageBuilder.java
    
sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/serialization/impl/vlt/VltUtils.java

Modified: 
sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/serialization/impl/AbstractDistributionPackageBuilder.java
URL: 
http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/serialization/impl/AbstractDistributionPackageBuilder.java?rev=1704271&r1=1704270&r2=1704271&view=diff
==============================================================================
--- 
sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/serialization/impl/AbstractDistributionPackageBuilder.java
 (original)
+++ 
sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/serialization/impl/AbstractDistributionPackageBuilder.java
 Mon Sep 21 11:35:14 2015
@@ -33,6 +33,7 @@ import org.apache.sling.distribution.pac
 import org.apache.sling.distribution.serialization.DistributionPackageBuilder;
 import 
org.apache.sling.distribution.serialization.DistributionPackageBuildingException;
 import 
org.apache.sling.distribution.serialization.DistributionPackageReadingException;
+import org.apache.sling.distribution.serialization.impl.vlt.VltUtils;
 import org.apache.sling.distribution.util.DistributionJcrUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -58,6 +59,10 @@ public abstract class AbstractDistributi
     public DistributionPackage createPackage(@Nonnull ResourceResolver 
resourceResolver, @Nonnull DistributionRequest request)
             throws DistributionPackageBuildingException {
         DistributionPackage distributionPackage;
+
+        request = VltUtils.sanitizeRequest(request);
+
+
         if (DistributionRequestType.ADD.equals(request.getRequestType())) {
             distributionPackage = createPackageForAdd(resourceResolver, 
request);
         } else if 
(DistributionRequestType.DELETE.equals(request.getRequestType())) {
@@ -127,7 +132,6 @@ public abstract class AbstractDistributi
                         session.removeItem(path);
                     }
                 }
-                session.save();
                 return true;
             }
         } catch (Exception e) {

Modified: 
sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/serialization/impl/vlt/VltUtils.java
URL: 
http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/serialization/impl/vlt/VltUtils.java?rev=1704271&r1=1704270&r2=1704271&view=diff
==============================================================================
--- 
sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/serialization/impl/vlt/VltUtils.java
 (original)
+++ 
sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/serialization/impl/vlt/VltUtils.java
 Mon Sep 21 11:35:14 2015
@@ -25,9 +25,12 @@ import java.io.File;
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.OutputStream;
+import java.util.ArrayList;
+import java.util.HashSet;
 import java.util.List;
 import java.util.NavigableMap;
 import java.util.Properties;
+import java.util.Set;
 import java.util.TreeMap;
 
 import org.apache.commons.io.FileUtils;
@@ -46,13 +49,19 @@ import org.apache.jackrabbit.vault.packa
 import org.apache.jackrabbit.vault.packaging.PackageManager;
 import org.apache.jackrabbit.vault.packaging.VaultPackage;
 import org.apache.sling.distribution.DistributionRequest;
+import org.apache.sling.distribution.DistributionRequestType;
+import org.apache.sling.distribution.SimpleDistributionRequest;
 import org.apache.sling.distribution.component.impl.SettingsUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 /**
  * Utility class for creating vlt filters and import/export options
  */
 public class VltUtils {
 
+    final static Logger log = LoggerFactory.getLogger(VltUtils.class);
+
     public static WorkspaceFilter createFilter(DistributionRequest 
distributionRequest, NavigableMap<String, PathFilterSet> filters) {
         DefaultWorkspaceFilter filter = new DefaultWorkspaceFilter();
 
@@ -300,4 +309,37 @@ public class VltUtils {
 
         return result;
     }
+
+    public static DistributionRequest sanitizeRequest(DistributionRequest 
request) {
+
+        DistributionRequestType requestType = request.getRequestType();
+
+        if (!DistributionRequestType.ADD.equals(requestType) && 
!DistributionRequestType.DELETE.equals(requestType)) {
+            return request;
+        }
+
+        Set<String> deepPaths = new HashSet<String>();
+        List<String> paths = new ArrayList<String>();
+
+        for (String path : request.getPaths()) {
+            if (VltUtils.findParent(path, "rep:policy") != null) {
+                if (DistributionRequestType.DELETE.equals(requestType)) {
+                    // vlt cannot properly install delete of rep:policy 
subnodes
+                    throw new IllegalArgumentException("cannot distribute 
DELETE node " + path);
+                } else if (DistributionRequestType.ADD.equals(requestType)) {
+                    String newPath = VltUtils.findParent(path, "rep:policy") + 
"/rep:policy";
+                    paths.add(newPath);
+                    deepPaths.add(newPath);
+                    log.debug("changed distribution path {} to deep path {}", 
path, newPath);
+                }
+            } else if (request.isDeep(path)) {
+                paths.add(path);
+                deepPaths.add(path);
+            } else {
+                paths.add(path);
+            }
+        }
+
+        return new SimpleDistributionRequest(requestType, paths.toArray(new 
String[0]), deepPaths);
+    }
 }


Reply via email to