You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by si...@apache.org on 2019/03/18 20:54:38 UTC

[sling-whiteboard] branch master updated: [cp2fm] changed bundles deploy method design in order to stream contents directly to the file system

This is an automated email from the ASF dual-hosted git repository.

simonetripodi pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/sling-whiteboard.git


The following commit(s) were added to refs/heads/master by this push:
     new a003a1c  [cp2fm] changed bundles deploy method design in order to stream contents directly to the file system
a003a1c is described below

commit a003a1c77f57ab8f53210f36637d2c94d5c2a7c1
Author: Simo Tripodi <st...@adobe.com>
AuthorDate: Mon Mar 18 21:54:23 2019 +0100

    [cp2fm] changed bundles deploy method design in order to stream contents
    directly to the file system
---
 .../ContentPackage2FeatureModelConverter.java      | 38 +++++++++----------
 .../sling/cp2fm/handlers/BundleEntryHandler.java   | 22 +++++++----
 .../package-info.java => spi/ArtifactWriter.java}  | 11 +++++-
 .../InputStreamArtifactWriter.java}                | 24 +++++++++++-
 .../MavenPomSupplierWriter.java}                   | 44 ++++++++++------------
 .../cp2fm/{utils => writers}/package-info.java     |  2 +-
 .../ContentPackage2FeatureModelConverterTest.java  | 10 ++---
 .../cp2fm/handlers/BundleEntryHandlerTest.java     |  5 ++-
 8 files changed, 94 insertions(+), 62 deletions(-)

diff --git a/content-package-2-feature-model/src/main/java/org/apache/sling/cp2fm/ContentPackage2FeatureModelConverter.java b/content-package-2-feature-model/src/main/java/org/apache/sling/cp2fm/ContentPackage2FeatureModelConverter.java
index 5995bb9..2d7914f 100644
--- a/content-package-2-feature-model/src/main/java/org/apache/sling/cp2fm/ContentPackage2FeatureModelConverter.java
+++ b/content-package-2-feature-model/src/main/java/org/apache/sling/cp2fm/ContentPackage2FeatureModelConverter.java
@@ -16,7 +16,6 @@
  */
 package org.apache.sling.cp2fm;
 
-import java.io.ByteArrayInputStream;
 import java.io.File;
 import java.io.FileInputStream;
 import java.io.FileOutputStream;
@@ -50,8 +49,10 @@ import org.apache.jackrabbit.vault.packaging.PackageType;
 import org.apache.jackrabbit.vault.packaging.VaultPackage;
 import org.apache.jackrabbit.vault.packaging.impl.PackageManagerImpl;
 import org.apache.sling.cp2fm.handlers.DefaultEntryHandler;
+import org.apache.sling.cp2fm.spi.ArtifactWriter;
 import org.apache.sling.cp2fm.spi.EntryHandler;
-import org.apache.sling.cp2fm.utils.MavenPomSupplier;
+import org.apache.sling.cp2fm.writers.InputStreamArtifactWriter;
+import org.apache.sling.cp2fm.writers.MavenPomSupplierWriter;
 import org.apache.sling.feature.Artifact;
 import org.apache.sling.feature.ArtifactId;
 import org.apache.sling.feature.Configuration;
@@ -276,7 +277,7 @@ public class ContentPackage2FeatureModelConverter {
 
                 try (InputStream input = new FileInputStream(destFile)) {
                     deployLocallyAndAttach(null,
-                                           input,
+                                           new InputStreamArtifactWriter(input),
                                            targetFeature.getId().getGroupId(),
                                            targetFeature.getId().getArtifactId(),
                                            targetFeature.getId().getVersion(),
@@ -288,18 +289,15 @@ public class ContentPackage2FeatureModelConverter {
 
                 // deploy the new zip content-package to the local mvn bundles dir
 
-                String pomModel = MavenPomSupplier.generatePom(targetFeature.getId().getGroupId(),
-                                                               targetFeature.getId().getArtifactId(),
-                                                               targetFeature.getId().getVersion(),
-                                                               ZIP_TYPE);
-                try (InputStream input = new ByteArrayInputStream(pomModel.getBytes())) {
-                    deployLocally(input,
-                                  targetFeature.getId().getGroupId(),
-                                  targetFeature.getId().getArtifactId(),
-                                  targetFeature.getId().getVersion(),
-                                  null,
-                                  POM_TYPE);
-                }
+                deployLocally(new MavenPomSupplierWriter(targetFeature.getId().getGroupId(),
+                                                         targetFeature.getId().getArtifactId(),
+                                                         targetFeature.getId().getVersion(),
+                                                         ZIP_TYPE),
+                              targetFeature.getId().getGroupId(),
+                              targetFeature.getId().getArtifactId(),
+                              targetFeature.getId().getVersion(),
+                              null,
+                              POM_TYPE);
             } else {
                 logger.info("No resources to be repackaged.");
             }
@@ -444,13 +442,13 @@ public class ContentPackage2FeatureModelConverter {
     }
 
     public void deployLocallyAndAttach(String runMode,
-                                       InputStream input,
+                                       ArtifactWriter artifactWriter,
                                        String groupId,
                                        String artifactId,
                                        String version,
                                        String classifier,
                                        String type) throws IOException {
-        deployLocally(input, groupId, artifactId, version, classifier, type);
+        deployLocally(artifactWriter, groupId, artifactId, version, classifier, type);
 
         Artifact artifact = new Artifact(new ArtifactId(groupId, artifactId, version, classifier, type));
 
@@ -472,13 +470,13 @@ public class ContentPackage2FeatureModelConverter {
         }
     }
 
-    public void deployLocally(InputStream input,
+    public void deployLocally(ArtifactWriter artifactWriter,
                               String groupId,
                               String artifactId,
                               String version,
                               String classifier,
                               String type) throws IOException {
-        Objects.requireNonNull(input, "Null Bundle input stream can not be installed to a Maven repository.");
+        Objects.requireNonNull(artifactWriter, "Null ArtifactWriter can not install an artifact to a Maven repository.");
         Objects.requireNonNull(groupId, "Bundle can not be installed to a Maven repository without specifying a valid 'groupId'.");
         Objects.requireNonNull(artifactId, "Bundle can not be installed to a Maven repository without specifying a valid 'artifactId'.");
         Objects.requireNonNull(version, "Bundle can not be installed to a Maven repository without specifying a valid 'version'.");
@@ -514,7 +512,7 @@ public class ContentPackage2FeatureModelConverter {
         logger.info("Writing data to {}...", targetFile);
 
         try (FileOutputStream targetStream = new FileOutputStream(targetFile)) {
-            IOUtils.copy(input, targetStream);
+            artifactWriter.write(targetStream);
         }
 
         logger.info("Data successfully written to {}.", targetFile);
diff --git a/content-package-2-feature-model/src/main/java/org/apache/sling/cp2fm/handlers/BundleEntryHandler.java b/content-package-2-feature-model/src/main/java/org/apache/sling/cp2fm/handlers/BundleEntryHandler.java
index 92843ad..449b4e5 100644
--- a/content-package-2-feature-model/src/main/java/org/apache/sling/cp2fm/handlers/BundleEntryHandler.java
+++ b/content-package-2-feature-model/src/main/java/org/apache/sling/cp2fm/handlers/BundleEntryHandler.java
@@ -17,7 +17,6 @@
 package org.apache.sling.cp2fm.handlers;
 
 import static org.apache.jackrabbit.vault.packaging.PackageProperties.NAME_VERSION;
-
 import static org.apache.sling.cp2fm.ContentPackage2FeatureModelConverter.NAME_ARTIFACT_ID;
 import static org.apache.sling.cp2fm.ContentPackage2FeatureModelConverter.NAME_GROUP_ID;
 import static org.apache.sling.cp2fm.ContentPackage2FeatureModelConverter.POM_TYPE;
@@ -36,7 +35,9 @@ import org.apache.commons.io.IOUtils;
 import org.apache.jackrabbit.vault.fs.io.Archive;
 import org.apache.jackrabbit.vault.fs.io.Archive.Entry;
 import org.apache.sling.cp2fm.ContentPackage2FeatureModelConverter;
-import org.apache.sling.cp2fm.utils.MavenPomSupplier;
+import org.apache.sling.cp2fm.spi.ArtifactWriter;
+import org.apache.sling.cp2fm.writers.InputStreamArtifactWriter;
+import org.apache.sling.cp2fm.writers.MavenPomSupplierWriter;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -99,16 +100,23 @@ public final class BundleEntryHandler extends AbstractRegexEntryHandler {
         }
 
         try (InputStream input = archive.openInputStream(entry)) {
-            converter.deployLocallyAndAttach(runMode, input, groupId, artifactId, version, null, JAR_TYPE);
+            converter.deployLocallyAndAttach(runMode,
+                                             new InputStreamArtifactWriter(input),
+                                             groupId,
+                                             artifactId,
+                                             version,
+                                             null,
+                                             JAR_TYPE);
         }
 
+        ArtifactWriter pomWriter;
         if (pomXml == null) {
-            pomXml = MavenPomSupplier.generatePom(groupId, artifactId, version, JAR_TYPE).getBytes();
+            pomWriter = new MavenPomSupplierWriter(groupId, artifactId, version, JAR_TYPE);
+        } else {
+            pomWriter = new InputStreamArtifactWriter(new ByteArrayInputStream(pomXml));
         }
 
-        try (ByteArrayInputStream input = new ByteArrayInputStream(pomXml)) {
-            converter.deployLocally(input, groupId, artifactId, version, null, POM_TYPE);
-        }
+        converter.deployLocally(pomWriter, groupId, artifactId, version, null, POM_TYPE);
     }
 
     private static String getCheckedProperty(Properties properties, String name) {
diff --git a/content-package-2-feature-model/src/main/java/org/apache/sling/cp2fm/utils/package-info.java b/content-package-2-feature-model/src/main/java/org/apache/sling/cp2fm/spi/ArtifactWriter.java
similarity index 80%
copy from content-package-2-feature-model/src/main/java/org/apache/sling/cp2fm/utils/package-info.java
copy to content-package-2-feature-model/src/main/java/org/apache/sling/cp2fm/spi/ArtifactWriter.java
index 76fa3b1..9d45678 100644
--- a/content-package-2-feature-model/src/main/java/org/apache/sling/cp2fm/utils/package-info.java
+++ b/content-package-2-feature-model/src/main/java/org/apache/sling/cp2fm/spi/ArtifactWriter.java
@@ -14,4 +14,13 @@
  * License for the specific language governing permissions and limitations under
  * the License.
  */
-package org.apache.sling.cp2fm.utils;
+package org.apache.sling.cp2fm.spi;
+
+import java.io.IOException;
+import java.io.OutputStream;
+
+public interface ArtifactWriter {
+
+    void write(OutputStream output) throws IOException;
+
+}
diff --git a/content-package-2-feature-model/src/main/java/org/apache/sling/cp2fm/utils/package-info.java b/content-package-2-feature-model/src/main/java/org/apache/sling/cp2fm/writers/InputStreamArtifactWriter.java
similarity index 59%
copy from content-package-2-feature-model/src/main/java/org/apache/sling/cp2fm/utils/package-info.java
copy to content-package-2-feature-model/src/main/java/org/apache/sling/cp2fm/writers/InputStreamArtifactWriter.java
index 76fa3b1..4f94e92 100644
--- a/content-package-2-feature-model/src/main/java/org/apache/sling/cp2fm/utils/package-info.java
+++ b/content-package-2-feature-model/src/main/java/org/apache/sling/cp2fm/writers/InputStreamArtifactWriter.java
@@ -14,4 +14,26 @@
  * License for the specific language governing permissions and limitations under
  * the License.
  */
-package org.apache.sling.cp2fm.utils;
+package org.apache.sling.cp2fm.writers;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+
+import org.apache.commons.io.IOUtils;
+import org.apache.sling.cp2fm.spi.ArtifactWriter;
+
+public class InputStreamArtifactWriter implements ArtifactWriter {
+
+    private final InputStream input;
+
+    public InputStreamArtifactWriter(InputStream input) {
+        this.input = input;
+    }
+
+    @Override
+    public void write(OutputStream output) throws IOException {
+        IOUtils.copy(input, output);
+    }
+
+}
diff --git a/content-package-2-feature-model/src/main/java/org/apache/sling/cp2fm/utils/MavenPomSupplier.java b/content-package-2-feature-model/src/main/java/org/apache/sling/cp2fm/writers/MavenPomSupplierWriter.java
similarity index 52%
rename from content-package-2-feature-model/src/main/java/org/apache/sling/cp2fm/utils/MavenPomSupplier.java
rename to content-package-2-feature-model/src/main/java/org/apache/sling/cp2fm/writers/MavenPomSupplierWriter.java
index f8b2cbc..9a7c3e4 100644
--- a/content-package-2-feature-model/src/main/java/org/apache/sling/cp2fm/utils/MavenPomSupplier.java
+++ b/content-package-2-feature-model/src/main/java/org/apache/sling/cp2fm/writers/MavenPomSupplierWriter.java
@@ -14,47 +14,41 @@
  * License for the specific language governing permissions and limitations under
  * the License.
  */
-package org.apache.sling.cp2fm.utils;
+package org.apache.sling.cp2fm.writers;
 
 import java.io.IOException;
-import java.io.StringWriter;
+import java.io.OutputStream;
 
 import org.apache.maven.model.Model;
 import org.apache.maven.model.io.xpp3.MavenXpp3Writer;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
+import org.apache.sling.cp2fm.spi.ArtifactWriter;
 
-public final class MavenPomSupplier {
+public final class MavenPomSupplierWriter implements ArtifactWriter {
 
-    private static final Logger LOGGER = LoggerFactory.getLogger(MavenPomSupplier.class);
+    private final String groupId;
 
-    /**
-     * Hidden constructor, this class can not be directly instantiated.
-     */
-    private MavenPomSupplier() {
-        // do nothing
-    }
+    private final String artifactId;
+
+    private final String version;
 
-    public static String generatePom(String groupId,
-                                     String artifactId,
-                                     String version,
-                                     String type) throws IOException {
-        LOGGER.info("Creating synthetic POM file for bundle [{}:{}:{}:{}]",
-                    groupId,
-                    artifactId,
-                    version,
-                    type);
+    private final String type;
+
+    public MavenPomSupplierWriter(String groupId, String artifactId, String version, String type) {
+        this.groupId = groupId;
+        this.artifactId = artifactId;
+        this.version = version;
+        this.type = type;
+    }
 
+    @Override
+    public void write(OutputStream outputStream) throws IOException {
         Model model = new Model();
         model.setGroupId(groupId);
         model.setArtifactId(artifactId);
         model.setVersion(version);
         model.setPackaging(type);
 
-        try (StringWriter stringWriter = new StringWriter()) {
-            new MavenXpp3Writer().write(stringWriter, model);
-            return stringWriter.toString();
-        }
+        new MavenXpp3Writer().write(outputStream, model);
     }
 
 }
diff --git a/content-package-2-feature-model/src/main/java/org/apache/sling/cp2fm/utils/package-info.java b/content-package-2-feature-model/src/main/java/org/apache/sling/cp2fm/writers/package-info.java
similarity index 95%
rename from content-package-2-feature-model/src/main/java/org/apache/sling/cp2fm/utils/package-info.java
rename to content-package-2-feature-model/src/main/java/org/apache/sling/cp2fm/writers/package-info.java
index 76fa3b1..09f546f 100644
--- a/content-package-2-feature-model/src/main/java/org/apache/sling/cp2fm/utils/package-info.java
+++ b/content-package-2-feature-model/src/main/java/org/apache/sling/cp2fm/writers/package-info.java
@@ -14,4 +14,4 @@
  * License for the specific language governing permissions and limitations under
  * the License.
  */
-package org.apache.sling.cp2fm.utils;
+package org.apache.sling.cp2fm.writers;
diff --git a/content-package-2-feature-model/src/test/java/org/apache/sling/cp2fm/ContentPackage2FeatureModelConverterTest.java b/content-package-2-feature-model/src/test/java/org/apache/sling/cp2fm/ContentPackage2FeatureModelConverterTest.java
index d22f99e..f4fd73b 100644
--- a/content-package-2-feature-model/src/test/java/org/apache/sling/cp2fm/ContentPackage2FeatureModelConverterTest.java
+++ b/content-package-2-feature-model/src/test/java/org/apache/sling/cp2fm/ContentPackage2FeatureModelConverterTest.java
@@ -23,7 +23,6 @@ import static org.mockito.Mockito.mock;
 
 import java.io.File;
 import java.io.FileReader;
-import java.io.InputStream;
 import java.io.Reader;
 import java.net.URL;
 import java.util.Arrays;
@@ -34,6 +33,7 @@ import java.util.zip.ZipFile;
 
 import org.apache.commons.io.FileUtils;
 import org.apache.jackrabbit.vault.packaging.VaultPackage;
+import org.apache.sling.cp2fm.spi.ArtifactWriter;
 import org.apache.sling.feature.ArtifactId;
 import org.apache.sling.feature.Feature;
 import org.apache.sling.feature.io.json.FeatureJSONReader;
@@ -98,22 +98,22 @@ public class ContentPackage2FeatureModelConverterTest {
 
     @Test(expected = NullPointerException.class)
     public void deployLocallyAndAttachRequiresNonNullGroupId() throws Exception {
-        converter.deployLocallyAndAttach(null, mock(InputStream.class), null, null, null, null, null);
+        converter.deployLocallyAndAttach(null, mock(ArtifactWriter.class), null, null, null, null, null);
     }
 
     @Test(expected = NullPointerException.class)
     public void deployLocallyAndAttachRequiresNonNullArtifactId() throws Exception {
-        converter.deployLocallyAndAttach(null, mock(InputStream.class), "org.apache.sling", null, null, null, null);
+        converter.deployLocallyAndAttach(null, mock(ArtifactWriter.class), "org.apache.sling", null, null, null, null);
     }
 
     @Test(expected = NullPointerException.class)
     public void deployLocallyAndAttachRequiresNonNullVersion() throws Exception {
-        converter.deployLocallyAndAttach(null, mock(InputStream.class), "org.apache.sling", "org.apache.sling.cm2fm", null, null, null);
+        converter.deployLocallyAndAttach(null, mock(ArtifactWriter.class), "org.apache.sling", "org.apache.sling.cm2fm", null, null, null);
     }
 
     @Test(expected = NullPointerException.class)
     public void deployLocallyAndAttachRequiresNonNullType() throws Exception {
-        converter.deployLocallyAndAttach(null, mock(InputStream.class), "org.apache.sling", "org.apache.sling.cm2fm", "0.0.1", null, null);
+        converter.deployLocallyAndAttach(null, mock(ArtifactWriter.class), "org.apache.sling", "org.apache.sling.cm2fm", "0.0.1", null, null);
     }
 
     @Test
diff --git a/content-package-2-feature-model/src/test/java/org/apache/sling/cp2fm/handlers/BundleEntryHandlerTest.java b/content-package-2-feature-model/src/test/java/org/apache/sling/cp2fm/handlers/BundleEntryHandlerTest.java
index 754a108..e5e4689 100644
--- a/content-package-2-feature-model/src/test/java/org/apache/sling/cp2fm/handlers/BundleEntryHandlerTest.java
+++ b/content-package-2-feature-model/src/test/java/org/apache/sling/cp2fm/handlers/BundleEntryHandlerTest.java
@@ -35,6 +35,7 @@ import org.apache.jackrabbit.vault.fs.io.Archive;
 import org.apache.jackrabbit.vault.fs.io.Archive.Entry;
 import org.apache.sling.cp2fm.ContentPackage2FeatureModelConverter;
 import org.apache.sling.cp2fm.handlers.BundleEntryHandler;
+import org.apache.sling.cp2fm.spi.ArtifactWriter;
 import org.apache.sling.cp2fm.spi.EntryHandler;
 import org.apache.sling.feature.ArtifactId;
 import org.apache.sling.feature.Feature;
@@ -87,8 +88,8 @@ public final class BundleEntryHandlerTest {
         File testDirectory = new File(System.getProperty("testDirectory"), getClass().getName() + '_' + System.currentTimeMillis());
         when(converter.getOutputDirectory()).thenReturn(testDirectory);
 
-        doCallRealMethod().when(converter).deployLocallyAndAttach(anyString(), any(InputStream.class), anyString(), anyString(), anyString(), anyString(), anyString());
-        doCallRealMethod().when(converter).deployLocally(any(InputStream.class), anyString(), anyString(), anyString(), anyString(), anyString());
+        doCallRealMethod().when(converter).deployLocallyAndAttach(anyString(), any(ArtifactWriter.class), anyString(), anyString(), anyString(), anyString(), anyString());
+        doCallRealMethod().when(converter).deployLocally(any(ArtifactWriter.class), anyString(), anyString(), anyString(), anyString(), anyString());
 
         Feature feature = new Feature(new ArtifactId("org.apache.sling", "org.apache.sling.cp2fm", "0.0.1", null, null));
         when(converter.getTargetFeature()).thenReturn(feature);