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); + } }