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/05/15 21:30:50 UTC

[sling-org-apache-sling-feature-cpconverter] branch master updated: VaultPackage traversal moved to an abstract implementation

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-org-apache-sling-feature-cpconverter.git


The following commit(s) were added to refs/heads/master by this push:
     new 2592635  VaultPackage traversal moved to an abstract implementation
     new a07cac2  Merge branch 'master' of github.com:apache/sling-org-apache-sling-feature-cpconverter
2592635 is described below

commit 2592635e05a3b0a97fc1af05a91aca100095b262
Author: stripodi <st...@simos-mbp>
AuthorDate: Wed May 15 23:27:11 2019 +0200

    VaultPackage traversal moved to an abstract implementation
---
 .../ContentPackage2FeatureModelConverter.java      | 58 +++-----------
 .../vltpkg/BaseVaultPackageScanner.java            | 92 ++++++++++++++++++++++
 2 files changed, 101 insertions(+), 49 deletions(-)

diff --git a/src/main/java/org/apache/sling/feature/cpconverter/ContentPackage2FeatureModelConverter.java b/src/main/java/org/apache/sling/feature/cpconverter/ContentPackage2FeatureModelConverter.java
index 2f8fa75..678fcf4 100644
--- a/src/main/java/org/apache/sling/feature/cpconverter/ContentPackage2FeatureModelConverter.java
+++ b/src/main/java/org/apache/sling/feature/cpconverter/ContentPackage2FeatureModelConverter.java
@@ -33,11 +33,12 @@ import org.apache.sling.feature.cpconverter.features.FeaturesManager;
 import org.apache.sling.feature.cpconverter.filtering.ResourceFilter;
 import org.apache.sling.feature.cpconverter.handlers.EntryHandler;
 import org.apache.sling.feature.cpconverter.handlers.EntryHandlersManager;
+import org.apache.sling.feature.cpconverter.vltpkg.BaseVaultPackageScanner;
 import org.apache.sling.feature.cpconverter.vltpkg.VaultPackageAssembler;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-public class ContentPackage2FeatureModelConverter {
+public class ContentPackage2FeatureModelConverter extends BaseVaultPackageScanner {
 
     public static final String ZIP_TYPE = "zip";
 
@@ -49,8 +50,6 @@ public class ContentPackage2FeatureModelConverter {
 
     private final PackageManager packageManager = new PackageManagerImpl();
 
-    private final boolean strictValidation;
-
     private EntryHandlersManager handlersManager;
 
     private AclManager aclManager;
@@ -68,11 +67,7 @@ public class ContentPackage2FeatureModelConverter {
     }
 
     public ContentPackage2FeatureModelConverter(boolean strictValidation) {
-        this.strictValidation = strictValidation;
-    }
-
-    public boolean isStrictValidation() {
-        return strictValidation;
+        super(strictValidation);
     }
 
     public ContentPackage2FeatureModelConverter setEntryHandlersManager(EntryHandlersManager handlersManager) {
@@ -127,7 +122,7 @@ public class ContentPackage2FeatureModelConverter {
 
         logger.info("Reading content-package '{}'...", contentPackage);
 
-        try (VaultPackage vaultPackage = packageManager.open(contentPackage, strictValidation)) {
+        try (VaultPackage vaultPackage = packageManager.open(contentPackage, isStrictValidation())) {
             logger.info("content-package '{}' successfully read!", contentPackage);
 
             mainPackageAssembler = VaultPackageAssembler.create(vaultPackage);
@@ -160,7 +155,7 @@ public class ContentPackage2FeatureModelConverter {
 
             logger.info("Converting content-package '{}'...", vaultPackage.getId());
 
-            process(vaultPackage);
+            traverse(vaultPackage);
 
             // attach all unmatched resources as new content-package
 
@@ -198,9 +193,9 @@ public class ContentPackage2FeatureModelConverter {
         requireNonNull(path, "Impossible to process a null vault package");
         requireNonNull(contentPackage, "Impossible to process a null vault package");
 
-        try (VaultPackage vaultPackage = packageManager.open(contentPackage, strictValidation)) {
+        try (VaultPackage vaultPackage = packageManager.open(contentPackage, isStrictValidation())) {
             // scan the detected package, first
-            process(vaultPackage);
+            traverse(vaultPackage);
 
             // merge filters to the main new package
             mainPackageAssembler.mergeFilters(vaultPackage.getMetaInf().getFilter());
@@ -211,33 +206,8 @@ public class ContentPackage2FeatureModelConverter {
         }
     }
 
-    private void process(VaultPackage vaultPackage) throws Exception {
-        requireNonNull(vaultPackage, "Impossible to process a null vault package");
-
-        Archive archive = vaultPackage.getArchive();
-        try {
-            archive.open(strictValidation);
-
-            Entry jcrRoot = archive.getJcrRoot();
-            traverse(null, archive, jcrRoot);
-        } finally {
-            archive.close();
-        }
-    }
-
-    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(entryPath, archive, child);
-            }
-
-            return;
-        }
-
-        logger.info("Processing entry {}...", entryPath);
-
+    @Override
+    protected void onFile(String entryPath, Archive archive, Entry entry) throws Exception {
         if (resourceFilter != null && resourceFilter.isFilteredOut(entryPath)) {
             throw new IllegalArgumentException("Path '"
                                                + entryPath
@@ -252,16 +222,6 @@ public class ContentPackage2FeatureModelConverter {
         }
 
         entryHandler.handle(entryPath, archive, entry, this);
-
-        logger.info("Entry {} successfully processed.", entryPath);
-    }
-
-    private static String newPath(String path, String entryName) {
-        if (path == null) {
-            return entryName;
-        }
-
-        return path + '/' + entryName;
     }
 
 }
diff --git a/src/main/java/org/apache/sling/feature/cpconverter/vltpkg/BaseVaultPackageScanner.java b/src/main/java/org/apache/sling/feature/cpconverter/vltpkg/BaseVaultPackageScanner.java
new file mode 100644
index 0000000..3fb300d
--- /dev/null
+++ b/src/main/java/org/apache/sling/feature/cpconverter/vltpkg/BaseVaultPackageScanner.java
@@ -0,0 +1,92 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with this
+ * work for additional information regarding copyright ownership. The ASF
+ * licenses this file to You under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ */
+
+package org.apache.sling.feature.cpconverter.vltpkg;
+
+import static java.util.Objects.requireNonNull;
+
+import org.apache.jackrabbit.vault.fs.io.Archive;
+import org.apache.jackrabbit.vault.fs.io.Archive.Entry;
+import org.apache.jackrabbit.vault.packaging.VaultPackage;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public abstract class BaseVaultPackageScanner {
+
+    private final Logger logger = LoggerFactory.getLogger(getClass());
+
+    private final boolean strictValidation;
+
+    public BaseVaultPackageScanner(boolean strictValidation) {
+        this.strictValidation = strictValidation;
+    }
+
+    public final boolean isStrictValidation() {
+        return strictValidation;
+    }
+
+    public final void traverse(VaultPackage vaultPackage) throws Exception {
+        requireNonNull(vaultPackage, "Impossible to process a null vault package");
+
+        Archive archive = vaultPackage.getArchive();
+        try {
+            archive.open(strictValidation);
+
+            Entry jcrRoot = archive.getJcrRoot();
+            traverse(null, archive, jcrRoot);
+        } finally {
+            archive.close();
+        }
+    }
+
+    private void traverse(String path, Archive archive, Entry entry) throws Exception {
+        String entryPath = newPath(path, entry.getName());
+
+        if (entry.isDirectory()) {
+            onDirectory(entryPath, archive, entry);
+
+            for (Entry child : entry.getChildren()) {
+                traverse(entryPath, archive, child);
+            }
+
+            return;
+        }
+
+        logger.info("Processing entry {}...", entryPath);
+
+        onFile(entryPath, archive, entry);
+
+        logger.info("Entry {} successfully processed.", entryPath);
+    }
+
+    private static String newPath(String path, String entryName) {
+        if (path == null) {
+            return entryName;
+        }
+
+        return path + '/' + entryName;
+    }
+
+    protected void onDirectory(String path, Archive archive, Entry entry) throws Exception {
+        // do nothing by default
+    }
+
+    protected void onFile(String path, Archive archive, Entry entry) throws Exception {
+        // do nothing by default
+    }
+
+}