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