You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by mp...@apache.org on 2015/04/07 13:11:27 UTC

svn commit: r1671804 - /sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/serialization/impl/vlt/

Author: mpetria
Date: Tue Apr  7 11:11:26 2015
New Revision: 1671804

URL: http://svn.apache.org/r1671804
Log:
SLING-4583: requiring less privileges to distribute a subtree

Modified:
    sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/serialization/impl/vlt/FileVaultDistributionPackageBuilder.java
    sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/serialization/impl/vlt/JcrVaultDistributionPackage.java
    sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/serialization/impl/vlt/JcrVaultDistributionPackageBuilder.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/vlt/FileVaultDistributionPackageBuilder.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/serialization/impl/vlt/FileVaultDistributionPackageBuilder.java?rev=1671804&r1=1671803&r2=1671804&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/serialization/impl/vlt/FileVaultDistributionPackageBuilder.java (original)
+++ sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/serialization/impl/vlt/FileVaultDistributionPackageBuilder.java Tue Apr  7 11:11:26 2015
@@ -77,10 +77,6 @@ public class FileVaultDistributionPackag
         try {
             session = getSession(resourceResolver);
 
-            // TODO : no tokens
-
-            final String[] paths = request.getPaths();
-
             String packageGroup = "sling/distribution";
             String packageName = getType() + "_" + System.currentTimeMillis() + "_" +  UUID.randomUUID();
 

Modified: sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/serialization/impl/vlt/JcrVaultDistributionPackage.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/serialization/impl/vlt/JcrVaultDistributionPackage.java?rev=1671804&r1=1671803&r2=1671804&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/serialization/impl/vlt/JcrVaultDistributionPackage.java (original)
+++ sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/serialization/impl/vlt/JcrVaultDistributionPackage.java Tue Apr  7 11:11:26 2015
@@ -70,6 +70,7 @@ public class JcrVaultDistributionPackage
     public void delete() {
         Node node = jcrPackage.getNode();
         try {
+            jcrPackage.close();
             node.remove();
             session.save();
         } catch (RepositoryException e) {

Modified: sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/serialization/impl/vlt/JcrVaultDistributionPackageBuilder.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/serialization/impl/vlt/JcrVaultDistributionPackageBuilder.java?rev=1671804&r1=1671803&r2=1671804&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/serialization/impl/vlt/JcrVaultDistributionPackageBuilder.java (original)
+++ sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/serialization/impl/vlt/JcrVaultDistributionPackageBuilder.java Tue Apr  7 11:11:26 2015
@@ -1,15 +1,19 @@
 package org.apache.sling.distribution.serialization.impl.vlt;
 
 
+import org.apache.commons.io.FileUtils;
+import org.apache.commons.io.IOUtils;
 import org.apache.jackrabbit.vault.fs.api.ImportMode;
 import org.apache.jackrabbit.vault.fs.api.WorkspaceFilter;
 import org.apache.jackrabbit.vault.fs.io.AccessControlHandling;
 import org.apache.jackrabbit.vault.fs.io.ImportOptions;
+import org.apache.jackrabbit.vault.packaging.ExportOptions;
 import org.apache.jackrabbit.vault.packaging.JcrPackage;
 import org.apache.jackrabbit.vault.packaging.JcrPackageDefinition;
 import org.apache.jackrabbit.vault.packaging.JcrPackageManager;
 import org.apache.jackrabbit.vault.packaging.PackageId;
 import org.apache.jackrabbit.vault.packaging.Packaging;
+import org.apache.jackrabbit.vault.packaging.VaultPackage;
 import org.apache.sling.api.resource.ResourceResolver;
 import org.apache.sling.distribution.DistributionRequest;
 import org.apache.sling.distribution.packaging.DistributionPackage;
@@ -22,8 +26,10 @@ import org.slf4j.LoggerFactory;
 
 import javax.jcr.RepositoryException;
 import javax.jcr.Session;
+import java.io.File;
 import java.io.IOException;
 import java.io.InputStream;
+import java.io.OutputStream;
 import java.util.UUID;
 /**
  * a {@link org.apache.sling.distribution.serialization.DistributionPackageBuilder} based on Apache Jackrabbit FileVault.
@@ -57,24 +63,21 @@ public class JcrVaultDistributionPackage
         Session session = null;
         try {
             session = getSession(resourceResolver);
-            JcrPackageManager packageManager = packaging.getPackageManager(session);
-
-            final String[] paths = request.getPaths();
 
             String packageGroup = PACKAGE_GROUP;
             String packageName = getType() + "_" + System.currentTimeMillis() + "_" +  UUID.randomUUID();
 
-
             WorkspaceFilter filter = VltUtils.createFilter(request);
+            ExportOptions opts = VltUtils.getExportOptions(filter, packageGroup, packageName, VERSION);
 
-            final JcrPackage jcrPackage = packageManager.create(packageGroup, packageName, VERSION);
-            final JcrPackageDefinition jcrPackageDefinition = jcrPackage.getDefinition();
+            log.debug("assembling package {}", packageGroup + '/' + packageName + "-" + VERSION);
 
+            VaultPackage vaultPackage = packaging.getPackageManager().assemble(session, opts, (File) null);
 
-            jcrPackageDefinition.setFilter(filter, true);
+            JcrPackageManager packageManager = packaging.getPackageManager(session);
+            JcrPackage jcrPackage = packageManager.upload(vaultPackage.getFile(), true, true, null);
+            vaultPackage.close();
 
-            log.debug("assembling package {}", packageGroup + '/' + packageName + "-" + VERSION);
-            packageManager.assemble(jcrPackage, null);
             return new JcrVaultDistributionPackage(getType(), jcrPackage, session);
         } catch (Exception e) {
             throw new DistributionPackageBuildingException(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=1671804&r1=1671803&r2=1671804&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 Tue Apr  7 11:11:26 2015
@@ -21,6 +21,7 @@ package org.apache.sling.distribution.se
 
 
 
+import org.apache.jackrabbit.util.Text;
 import org.apache.jackrabbit.vault.fs.api.ImportMode;
 import org.apache.jackrabbit.vault.fs.api.PathFilterSet;
 import org.apache.jackrabbit.vault.fs.api.WorkspaceFilter;
@@ -96,11 +97,47 @@ public class VltUtils {
         inf.setProperties(props);
 
         opts.setMetaInf(inf);
-        opts.setRootPath("/");
+
+        String root = getClosestRoot(filter.getFilterSets());
+        opts.setRootPath(root);
+        opts.setMountPath(root);
 
         return opts;
     }
 
+
+    private static String getClosestRoot(List<PathFilterSet> filterSets) {
+
+        String closestRoot = null;
+
+        for (PathFilterSet filterSet : filterSets) {
+            String root = filterSet.getRoot();
+
+            if (closestRoot == null) {
+                closestRoot = root;
+            } else {
+                while(!root.startsWith(closestRoot)) {
+                    closestRoot = Text.getRelativeParent(closestRoot, 1);
+                }
+            }
+
+            if (closestRoot.length() < 2) {
+                break;
+            }
+        }
+
+        if (closestRoot != null) {
+            closestRoot = Text.getRelativeParent(closestRoot, 1);
+        }
+
+        if (closestRoot == null || !closestRoot.startsWith("/")) {
+            closestRoot = "/";
+        }
+
+        return closestRoot;
+
+    }
+
     public static ImportOptions getImportOptions(AccessControlHandling aclHandling, ImportMode importMode) {
         ImportOptions opts = new ImportOptions();
         if (aclHandling != null) {