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/05 12:46:56 UTC
[sling-whiteboard] branch master updated: [cp2fm] deflate all
non-bundles and non-configuration resources,
in order to repackage them later
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 225bc06 [cp2fm] deflate all non-bundles and non-configuration resources, in order to repackage them later
225bc06 is described below
commit 225bc06c4cb161a9057440ff3cb3131dd3a6bd65
Author: Simo Tripodi <st...@adobe.com>
AuthorDate: Tue Mar 5 13:46:48 2019 +0100
[cp2fm] deflate all non-bundles and non-configuration resources, in
order to repackage them later
---
.../ContentPackage2FeatureModelConverter.java | 46 +++++++++++-----------
.../AbstractConfigurationEntryHandler.java | 2 +-
.../cp2fm/handlers/AbstractRegexEntryHandler.java | 4 +-
.../sling/cp2fm/handlers/BundleEntryHandler.java | 2 +-
.../cp2fm/handlers/ContentPackageEntryHandler.java | 10 +++--
...eEntryHandler.java => DefaultEntryHandler.java} | 28 +++++++++----
.../org/apache/sling/cp2fm/spi/EntryHandler.java | 4 +-
7 files changed, 57 insertions(+), 39 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 ee894eb..38764f0 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
@@ -21,13 +21,13 @@ import java.io.FileWriter;
import java.util.Iterator;
import java.util.ServiceLoader;
-import org.apache.jackrabbit.vault.fs.api.VaultInputSource;
import org.apache.jackrabbit.vault.fs.io.Archive;
import org.apache.jackrabbit.vault.fs.io.Archive.Entry;
import org.apache.jackrabbit.vault.packaging.PackageManager;
import org.apache.jackrabbit.vault.packaging.PackageProperties;
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.EntryHandler;
import org.apache.sling.feature.ArtifactId;
import org.apache.sling.feature.Feature;
@@ -49,6 +49,8 @@ public final class ContentPackage2FeatureModelConverter {
private final ServiceLoader<EntryHandler> entryHandlers = ServiceLoader.load(EntryHandler.class);
+ private final EntryHandler defaultEntryHandler = new DefaultEntryHandler();
+
private boolean strictValidation = false;
private int bundlesStartOrder = 0;
@@ -168,49 +170,49 @@ public final class ContentPackage2FeatureModelConverter {
archive.open(strictValidation);
Entry jcrRoot = archive.getJcrRoot();
- traverse(archive, jcrRoot);
+ traverse(null, archive, jcrRoot);
} finally {
archive.close();
}
}
- private void traverse(Archive archive, Entry entry) throws Exception {
+ private void traverse(String path, Archive archive, Entry entry) throws Exception {
+ String entryPath = newPath(path, entry.getName());
+
if (entry.isDirectory()) {
for (Entry child : entry.getChildren()) {
- traverse(archive, child);
+ traverse(entryPath, archive, child);
}
return;
}
- VaultInputSource inputSource = archive.getInputSource(entry);
- String id = inputSource.getSystemId();
+ logger.info("Processing entry {}...", entryPath);
+
+ getEntryHandlerByEntryPath(entryPath).handle(entryPath, archive, entry, this);
+
+ logger.info("Entry {} successfully processed.", entryPath);
+ }
- if (id == null || id.isEmpty()) {
- id = entry.getName();
+ private static String newPath(String path, String entryName) {
+ if (path == null) {
+ return entryName;
}
- boolean found = false;
+ return path + '/' + entryName;
+ }
+ private EntryHandler getEntryHandlerByEntryPath(String path) {
Iterator<EntryHandler> entryHandlersIterator = entryHandlers.iterator();
- dance : while (entryHandlersIterator.hasNext()) {
+ while (entryHandlersIterator.hasNext()) {
EntryHandler entryHandler = entryHandlersIterator.next();
- if (entryHandler.matches(id)) {
- logger.info("Processing entry {}...", id);
-
- found = true;
- entryHandler.handle(archive, entry, this);
-
- logger.info("Entry {} successfully processed.", id);
-
- break dance;
+ if (entryHandler.matches(path)) {
+ return entryHandler;
}
}
- if (!found) {
- // TODO fallback to default action;
- }
+ return defaultEntryHandler;
}
}
diff --git a/content-package-2-feature-model/src/main/java/org/apache/sling/cp2fm/handlers/AbstractConfigurationEntryHandler.java b/content-package-2-feature-model/src/main/java/org/apache/sling/cp2fm/handlers/AbstractConfigurationEntryHandler.java
index 4dd454c..71e1d71 100644
--- a/content-package-2-feature-model/src/main/java/org/apache/sling/cp2fm/handlers/AbstractConfigurationEntryHandler.java
+++ b/content-package-2-feature-model/src/main/java/org/apache/sling/cp2fm/handlers/AbstractConfigurationEntryHandler.java
@@ -32,7 +32,7 @@ abstract class AbstractConfigurationEntryHandler extends AbstractRegexEntryHandl
}
@Override
- public final void handle(Archive archive, Entry entry, ContentPackage2FeatureModelConverter converter) throws Exception {
+ public final void handle(String path, Archive archive, Entry entry, ContentPackage2FeatureModelConverter converter) throws Exception {
String name = entry.getName().substring(0, entry.getName().lastIndexOf('.'));
logger.info("Processing configuration '{}'.", name);
diff --git a/content-package-2-feature-model/src/main/java/org/apache/sling/cp2fm/handlers/AbstractRegexEntryHandler.java b/content-package-2-feature-model/src/main/java/org/apache/sling/cp2fm/handlers/AbstractRegexEntryHandler.java
index c4e15e4..baf6655 100644
--- a/content-package-2-feature-model/src/main/java/org/apache/sling/cp2fm/handlers/AbstractRegexEntryHandler.java
+++ b/content-package-2-feature-model/src/main/java/org/apache/sling/cp2fm/handlers/AbstractRegexEntryHandler.java
@@ -33,8 +33,8 @@ abstract class AbstractRegexEntryHandler implements EntryHandler {
}
@Override
- public boolean matches(String sourceSystemId) {
- return pattern.matcher(sourceSystemId).matches();
+ public boolean matches(String path) {
+ return pattern.matcher(path).matches();
}
}
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 ac1a775..2666de7 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
@@ -50,7 +50,7 @@ public final class BundleEntryHandler extends AbstractRegexEntryHandler {
}
@Override
- public void handle(Archive archive, Entry entry, ContentPackage2FeatureModelConverter converter) throws Exception {
+ public void handle(String path, Archive archive, Entry entry, ContentPackage2FeatureModelConverter converter) throws Exception {
logger.info("Processing bundle {}...", entry.getName());
Properties properties = new Properties();
diff --git a/content-package-2-feature-model/src/main/java/org/apache/sling/cp2fm/handlers/ContentPackageEntryHandler.java b/content-package-2-feature-model/src/main/java/org/apache/sling/cp2fm/handlers/ContentPackageEntryHandler.java
index 12134c2..be8121b 100644
--- a/content-package-2-feature-model/src/main/java/org/apache/sling/cp2fm/handlers/ContentPackageEntryHandler.java
+++ b/content-package-2-feature-model/src/main/java/org/apache/sling/cp2fm/handlers/ContentPackageEntryHandler.java
@@ -16,6 +16,8 @@
*/
package org.apache.sling.cp2fm.handlers;
+import java.io.InputStream;
+
import org.apache.jackrabbit.vault.fs.io.Archive;
import org.apache.jackrabbit.vault.fs.io.Archive.Entry;
import org.apache.jackrabbit.vault.fs.io.ZipStreamArchive;
@@ -28,11 +30,13 @@ public final class ContentPackageEntryHandler extends AbstractRegexEntryHandler
}
@Override
- public void handle(Archive archive, Entry entry, ContentPackage2FeatureModelConverter converter) throws Exception {
+ public void handle(String path, Archive archive, Entry entry, ContentPackage2FeatureModelConverter converter) throws Exception {
logger.info("Processing sub-content package '{}'...", entry.getName());
- Archive subArchive = new ZipStreamArchive(archive.openInputStream(entry));
- converter.process(subArchive);
+ try (InputStream input = archive.openInputStream(entry)) {
+ Archive subArchive = new ZipStreamArchive(input);
+ converter.process(subArchive);
+ }
}
}
diff --git a/content-package-2-feature-model/src/main/java/org/apache/sling/cp2fm/handlers/ContentPackageEntryHandler.java b/content-package-2-feature-model/src/main/java/org/apache/sling/cp2fm/handlers/DefaultEntryHandler.java
similarity index 55%
copy from content-package-2-feature-model/src/main/java/org/apache/sling/cp2fm/handlers/ContentPackageEntryHandler.java
copy to content-package-2-feature-model/src/main/java/org/apache/sling/cp2fm/handlers/DefaultEntryHandler.java
index 12134c2..1706071 100644
--- a/content-package-2-feature-model/src/main/java/org/apache/sling/cp2fm/handlers/ContentPackageEntryHandler.java
+++ b/content-package-2-feature-model/src/main/java/org/apache/sling/cp2fm/handlers/DefaultEntryHandler.java
@@ -16,23 +16,35 @@
*/
package org.apache.sling.cp2fm.handlers;
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.InputStream;
+import java.io.OutputStream;
+
+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.jackrabbit.vault.fs.io.ZipStreamArchive;
import org.apache.sling.cp2fm.ContentPackage2FeatureModelConverter;
+import org.apache.sling.cp2fm.spi.EntryHandler;
-public final class ContentPackageEntryHandler extends AbstractRegexEntryHandler {
+public final class DefaultEntryHandler implements EntryHandler {
- public ContentPackageEntryHandler() {
- super("jcr_root/etc/packages/.+\\.zip");
+ @Override
+ public boolean matches(String sourceSystemId) {
+ return true;
}
@Override
- public void handle(Archive archive, Entry entry, ContentPackage2FeatureModelConverter converter) throws Exception {
- logger.info("Processing sub-content package '{}'...", entry.getName());
+ public void handle(String path, Archive archive, Entry entry, ContentPackage2FeatureModelConverter converter) throws Exception {
+ File deflatedDir = new File(converter.getOutputDirectory(), "tmp-deflated");
+ File target = new File(deflatedDir, path);
+
+ target.getParentFile().mkdirs();
- Archive subArchive = new ZipStreamArchive(archive.openInputStream(entry));
- converter.process(subArchive);
+ try (InputStream input = archive.openInputStream(entry);
+ OutputStream output = new FileOutputStream(target)) {
+ IOUtils.copy(input, output);
+ }
}
}
diff --git a/content-package-2-feature-model/src/main/java/org/apache/sling/cp2fm/spi/EntryHandler.java b/content-package-2-feature-model/src/main/java/org/apache/sling/cp2fm/spi/EntryHandler.java
index 3132f8f..88f7731 100644
--- a/content-package-2-feature-model/src/main/java/org/apache/sling/cp2fm/spi/EntryHandler.java
+++ b/content-package-2-feature-model/src/main/java/org/apache/sling/cp2fm/spi/EntryHandler.java
@@ -22,8 +22,8 @@ import org.apache.sling.cp2fm.ContentPackage2FeatureModelConverter;
public interface EntryHandler {
- boolean matches(String sourceSystemId);
+ boolean matches(String path);
- void handle(Archive archive, Entry entry, ContentPackage2FeatureModelConverter converter) throws Exception;
+ void handle(String path, Archive archive, Entry entry, ContentPackage2FeatureModelConverter converter) throws Exception;
}