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 2016/04/11 18:18:57 UTC

svn commit: r1738599 - in /sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution: packaging/impl/importer/ serialization/ serialization/impl/ serialization/impl/vlt/

Author: mpetria
Date: Mon Apr 11 16:18:57 2016
New Revision: 1738599

URL: http://svn.apache.org/viewvc?rev=1738599&view=rev
Log:
SLING-5577: the local importer should install streams  without persistening them

Modified:
    sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/packaging/impl/importer/LocalDistributionPackageImporter.java
    sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/serialization/DistributionPackageBuilder.java
    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/DistributionPackageBuilderFactory.java
    sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/serialization/impl/FileDistributionPackageBuilder.java
    sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/serialization/impl/ResourceDistributionPackageBuilder.java
    sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/serialization/impl/vlt/VaultDistributionPackageBuilderFactory.java

Modified: sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/packaging/impl/importer/LocalDistributionPackageImporter.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/packaging/impl/importer/LocalDistributionPackageImporter.java?rev=1738599&r1=1738598&r2=1738599&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/packaging/impl/importer/LocalDistributionPackageImporter.java (original)
+++ sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/packaging/impl/importer/LocalDistributionPackageImporter.java Mon Apr 11 16:18:57 2016
@@ -62,20 +62,9 @@ public class LocalDistributionPackageImp
 
     @Nonnull
     public DistributionPackageInfo importStream(@Nonnull ResourceResolver resourceResolver, @Nonnull InputStream stream) throws DistributionException {
-        DistributionPackage distributionPackage = null;
-        try {
-            distributionPackage = packageBuilder.readPackage(resourceResolver, stream);
+        DistributionPackageInfo packageInfo = packageBuilder.installPackage(resourceResolver, stream);
 
-            boolean success = packageBuilder.installPackage(resourceResolver, distributionPackage);
-
-            if (!success) {
-                log.warn("could not install distribution package {}", distributionPackage.getId());
-            }
-
-            return distributionPackage.getInfo();
-        } finally {
-            DistributionPackageUtils.deleteSafely(distributionPackage);
-        }
+        return packageInfo;
     }
 
 }

Modified: sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/serialization/DistributionPackageBuilder.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/serialization/DistributionPackageBuilder.java?rev=1738599&r1=1738598&r2=1738599&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/serialization/DistributionPackageBuilder.java (original)
+++ sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/serialization/DistributionPackageBuilder.java Mon Apr 11 16:18:57 2016
@@ -82,4 +82,16 @@ public interface DistributionPackageBuil
      */
     boolean installPackage(@Nonnull ResourceResolver resourceResolver, @Nonnull DistributionPackage distributionPackage) throws DistributionException;
 
+
+    /**
+     * install a stream and returns the associated to a {@link DistributionPackageInfo} this provider can read and install
+     *
+     * @param resourceResolver resource resolver used to store the eventually created package
+     * @param stream           the {@link InputStream} of the package to read
+     * @return a {@link DistributionPackage} if it can read it from the stream
+     * @throws DistributionException when the stream cannot be read as a {@link DistributionPackage}
+     */
+    @Nonnull
+    DistributionPackageInfo installPackage(@Nonnull ResourceResolver resourceResolver, @Nonnull InputStream stream) throws DistributionException;
+
 }

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=1738599&r1=1738598&r2=1738599&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 Apr 11 16:18:57 2016
@@ -23,10 +23,12 @@ import javax.annotation.Nonnull;
 import javax.jcr.RepositoryException;
 import javax.jcr.Session;
 import java.io.BufferedInputStream;
+import java.io.IOException;
 import java.io.InputStream;
 import java.util.HashMap;
 import java.util.Map;
 
+import org.apache.commons.io.IOUtils;
 import org.apache.sling.api.resource.ResourceResolver;
 import org.apache.sling.distribution.DistributionRequest;
 import org.apache.sling.distribution.DistributionRequestType;
@@ -34,6 +36,7 @@ import org.apache.sling.distribution.com
 import org.apache.sling.distribution.packaging.impl.DistributionPackageUtils;
 import org.apache.sling.distribution.serialization.DistributionPackage;
 import org.apache.sling.distribution.serialization.DistributionPackageBuilder;
+import org.apache.sling.distribution.serialization.DistributionPackageInfo;
 import org.apache.sling.distribution.serialization.impl.vlt.VltUtils;
 import org.apache.sling.distribution.util.DistributionJcrUtils;
 import org.slf4j.Logger;
@@ -118,12 +121,42 @@ public abstract class AbstractDistributi
             // do nothing for test packages
             installed = true;
         } else if (DistributionRequestType.ADD.equals(actionType)) {
-            installed = installPackageInternal(resourceResolver, distributionPackage);
+            installed = installAddPackage(resourceResolver, distributionPackage);
         }
 
         return installed;
     }
 
+    @Nonnull
+    @Override
+    public DistributionPackageInfo installPackage(@Nonnull ResourceResolver resourceResolver, @Nonnull InputStream stream) throws DistributionException {
+        if (!stream.markSupported()) {
+            stream = new BufferedInputStream(stream);
+        }
+        DistributionPackageInfo packageInfo = new DistributionPackageInfo(type);
+
+        DistributionPackageUtils.readInfo(stream, packageInfo);
+
+        DistributionPackage distributionPackage = SimpleDistributionPackage.fromStream(stream, type);
+
+        stream.mark(-1);
+
+        boolean installed;
+        // not a simple package
+        if (distributionPackage == null) {
+            installed = installPackageInternal(resourceResolver, stream);
+        } else {
+            installed = installPackage(resourceResolver, distributionPackage);
+            packageInfo.putAll(distributionPackage.getInfo());
+        }
+
+        if (installed) {
+            return packageInfo;
+        } else {
+            return null;
+        }
+    }
+
     private boolean installDeletePackage(@Nonnull ResourceResolver resourceResolver, @CheckForNull DistributionPackage distributionPackage) throws DistributionException {
         Session session = null;
         try {
@@ -145,6 +178,22 @@ public abstract class AbstractDistributi
         return false;
     }
 
+
+    private boolean installAddPackage(@Nonnull ResourceResolver resourceResolver, @Nonnull DistributionPackage distributionPackage)
+            throws DistributionException {
+        InputStream inputStream = null;
+        try {
+            inputStream = distributionPackage.createInputStream();
+            return installPackageInternal(resourceResolver, inputStream);
+        } catch (IOException e) {
+            throw new DistributionException(e);
+        } finally {
+            IOUtils.closeQuietly(inputStream);
+        }
+
+    }
+
+
     @CheckForNull
     public DistributionPackage getPackage(@Nonnull ResourceResolver resourceResolver, @Nonnull String id) {
         DistributionPackage distributionPackage = SimpleDistributionPackage.fromIdString(id, type);
@@ -178,6 +227,8 @@ public abstract class AbstractDistributi
         }
     }
 
+
+
     @CheckForNull
     protected abstract DistributionPackage createPackageForAdd(@Nonnull ResourceResolver resourceResolver, @Nonnull DistributionRequest request)
             throws DistributionException;
@@ -187,7 +238,7 @@ public abstract class AbstractDistributi
             throws DistributionException;
 
 
-    protected abstract boolean installPackageInternal(@Nonnull ResourceResolver resourceResolver, @Nonnull DistributionPackage distributionPackage)
+    protected abstract boolean installPackageInternal(@Nonnull ResourceResolver resourceResolver, @Nonnull InputStream stream)
             throws DistributionException;
 
     @CheckForNull

Modified: sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/serialization/impl/DistributionPackageBuilderFactory.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/serialization/impl/DistributionPackageBuilderFactory.java?rev=1738599&r1=1738598&r2=1738599&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/serialization/impl/DistributionPackageBuilderFactory.java (original)
+++ sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/serialization/impl/DistributionPackageBuilderFactory.java Mon Apr 11 16:18:57 2016
@@ -39,6 +39,7 @@ import org.apache.sling.distribution.com
 import org.apache.sling.distribution.serialization.DistributionPackage;
 import org.apache.sling.distribution.serialization.DistributionPackageBuilder;
 import org.apache.sling.distribution.serialization.DistributionContentSerializer;
+import org.apache.sling.distribution.serialization.DistributionPackageInfo;
 
 /**
  * A factory for package builders
@@ -125,4 +126,10 @@ public class DistributionPackageBuilderF
     public boolean installPackage(@Nonnull ResourceResolver resourceResolver, @Nonnull DistributionPackage distributionPackage) throws DistributionException {
         return packageBuilder.installPackage(resourceResolver, distributionPackage);
     }
+
+    @Nonnull
+    @Override
+    public DistributionPackageInfo installPackage(@Nonnull ResourceResolver resourceResolver, @Nonnull InputStream stream) throws DistributionException {
+        return packageBuilder.installPackage(resourceResolver, stream);
+    }
 }

Modified: sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/serialization/impl/FileDistributionPackageBuilder.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/serialization/impl/FileDistributionPackageBuilder.java?rev=1738599&r1=1738598&r2=1738599&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/serialization/impl/FileDistributionPackageBuilder.java (original)
+++ sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/serialization/impl/FileDistributionPackageBuilder.java Mon Apr 11 16:18:57 2016
@@ -94,20 +94,18 @@ public class FileDistributionPackageBuil
     }
 
     @Override
-    protected boolean installPackageInternal(@Nonnull ResourceResolver resourceResolver, @Nonnull DistributionPackage distributionPackage)
+    protected boolean installPackageInternal(@Nonnull ResourceResolver resourceResolver, @Nonnull InputStream  inputStream)
             throws DistributionException {
-        InputStream inputStream = null;
         try {
-            inputStream = distributionPackage.createInputStream();
             distributionContentSerializer.importFromStream(resourceResolver, inputStream);
+
             return true;
-        } catch (IOException e) {
-            throw new DistributionException(e);
         } finally {
             IOUtils.closeQuietly(inputStream);
         }
     }
 
+
     @Override
     protected DistributionPackage getPackageInternal(@Nonnull ResourceResolver resourceResolver, @Nonnull String id) {
         return new FileDistributionPackage(new File(id), getType());

Modified: sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/serialization/impl/ResourceDistributionPackageBuilder.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/serialization/impl/ResourceDistributionPackageBuilder.java?rev=1738599&r1=1738598&r2=1738599&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/serialization/impl/ResourceDistributionPackageBuilder.java (original)
+++ sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/serialization/impl/ResourceDistributionPackageBuilder.java Mon Apr 11 16:18:57 2016
@@ -117,15 +117,12 @@ public class ResourceDistributionPackage
     }
 
     @Override
-    protected boolean installPackageInternal(@Nonnull ResourceResolver resourceResolver, @Nonnull DistributionPackage distributionPackage)
+    protected boolean installPackageInternal(@Nonnull ResourceResolver resourceResolver, @Nonnull InputStream  inputStream)
             throws DistributionException {
-        InputStream  inputStream = null;
         try {
-            inputStream = distributionPackage.createInputStream();
             distributionContentSerializer.importFromStream(resourceResolver, inputStream);
+
             return true;
-        } catch (IOException e) {
-            throw new DistributionException(e);
         } finally {
             IOUtils.closeQuietly(inputStream);
         }

Modified: sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/serialization/impl/vlt/VaultDistributionPackageBuilderFactory.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/serialization/impl/vlt/VaultDistributionPackageBuilderFactory.java?rev=1738599&r1=1738598&r2=1738599&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/serialization/impl/vlt/VaultDistributionPackageBuilderFactory.java (original)
+++ sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/serialization/impl/vlt/VaultDistributionPackageBuilderFactory.java Mon Apr 11 16:18:57 2016
@@ -42,6 +42,7 @@ import org.apache.sling.distribution.com
 import org.apache.sling.distribution.serialization.DistributionContentSerializer;
 import org.apache.sling.distribution.serialization.DistributionPackage;
 import org.apache.sling.distribution.serialization.DistributionPackageBuilder;
+import org.apache.sling.distribution.serialization.DistributionPackageInfo;
 import org.apache.sling.distribution.serialization.impl.FileDistributionPackageBuilder;
 import org.apache.sling.distribution.serialization.impl.ResourceDistributionPackageBuilder;
 
@@ -181,4 +182,10 @@ public class VaultDistributionPackageBui
     public boolean installPackage(@Nonnull ResourceResolver resourceResolver, @Nonnull DistributionPackage distributionPackage) throws DistributionException {
         return packageBuilder.installPackage(resourceResolver, distributionPackage);
     }
+
+    @Nonnull
+    @Override
+    public DistributionPackageInfo installPackage(@Nonnull ResourceResolver resourceResolver, @Nonnull InputStream stream) throws DistributionException {
+        return packageBuilder.installPackage(resourceResolver, stream);
+    }
 }