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