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