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
commit e5c3880a879b701aad7513a99b9153645748fe00 Author: Simo Tripodi <[email protected]> AuthorDate: Fri Mar 29 16:03:52 2019 +0100 SLING-8336 - [cp2fm] filter.xml files not properly merged --- .../ContentPackage2FeatureModelConverter.java | 16 ++++------- .../cpconverter/vltpkg/VaultPackageAssembler.java | 31 +++++++++++++++++++--- .../ContentPackage2FeatureModelConverterTest.java | 1 + 3 files changed, 34 insertions(+), 14 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 32c0197..6fde8d4 100644 --- a/src/main/java/org/apache/sling/feature/cpconverter/ContentPackage2FeatureModelConverter.java +++ b/src/main/java/org/apache/sling/feature/cpconverter/ContentPackage2FeatureModelConverter.java @@ -21,16 +21,13 @@ import java.io.FileWriter; import java.util.Dictionary; import java.util.Enumeration; import java.util.HashMap; -import java.util.HashSet; import java.util.Iterator; import java.util.Map; import java.util.Objects; import java.util.ServiceLoader; -import java.util.Set; import org.apache.jackrabbit.vault.fs.io.Archive; import org.apache.jackrabbit.vault.fs.io.Archive.Entry; -import org.apache.jackrabbit.vault.packaging.Dependency; import org.apache.jackrabbit.vault.packaging.PackageManager; import org.apache.jackrabbit.vault.packaging.PackageProperties; import org.apache.jackrabbit.vault.packaging.VaultPackage; @@ -77,8 +74,6 @@ public class ContentPackage2FeatureModelConverter { private final Map<String, Feature> runModes = new HashMap<>(); - private final Set<String> dependencies = new HashSet<>(); - private final RegexBasedResourceFilter filter = new RegexBasedResourceFilter(); private BundlesDeployer artifactDeployer; @@ -319,8 +314,13 @@ public class ContentPackage2FeatureModelConverter { Objects.requireNonNull(contentPackage, "Impossible to process a null vault package"); try (VaultPackage vaultPackage = packageManager.open(contentPackage, strictValidation)) { + // scan the detected package, first process(vaultPackage); + // merge filters to the main new package + mainPackageAssembler.mergeFilters(vaultPackage.getMetaInf().getFilter()); + + // add the metadata-only package one to the main package File clonedPackage = VaultPackageAssembler.create(vaultPackage).createPackage(); mainPackageAssembler.addEntry(path, clonedPackage); } @@ -333,12 +333,6 @@ public class ContentPackage2FeatureModelConverter { throw new IllegalStateException("Target Feature not initialized yet, please make sure convert() method was invoked first."); } - dependencies.remove(vaultPackage.getId().toString()); - - for (Dependency dependency : vaultPackage.getDependencies()) { - dependencies.add(dependency.toString()); - } - Archive archive = vaultPackage.getArchive(); try { archive.open(strictValidation); diff --git a/src/main/java/org/apache/sling/feature/cpconverter/vltpkg/VaultPackageAssembler.java b/src/main/java/org/apache/sling/feature/cpconverter/vltpkg/VaultPackageAssembler.java index d5ec573..b46ec61 100644 --- a/src/main/java/org/apache/sling/feature/cpconverter/vltpkg/VaultPackageAssembler.java +++ b/src/main/java/org/apache/sling/feature/cpconverter/vltpkg/VaultPackageAssembler.java @@ -27,8 +27,12 @@ import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.util.Properties; +import java.util.regex.Pattern; import org.apache.commons.io.IOUtils; +import org.apache.jackrabbit.vault.fs.api.PathFilterSet; +import org.apache.jackrabbit.vault.fs.api.WorkspaceFilter; +import org.apache.jackrabbit.vault.fs.config.DefaultWorkspaceFilter; import org.apache.jackrabbit.vault.fs.io.Archive; import org.apache.jackrabbit.vault.fs.io.Archive.Entry; import org.apache.jackrabbit.vault.packaging.PackageProperties; @@ -45,12 +49,16 @@ public final class VaultPackageAssembler implements EntryHandler { private static final String VAULT_PROPERTIES_FILE = META_INF_VAULT_DIRECTORY + "properties.xml"; + private static final String VAULT_FILTER_FILE = META_INF_VAULT_DIRECTORY + "filter.xml"; + private static final String NAME_PATH = "path"; private static final String[] INCLUDE_RESOURCES = { "definition/.content.xml", "config.xml", "settings.xml" }; private static final File TMP_DIR = new File(System.getProperty("java.io.tmpdir")); + private static final Pattern OSGI_BUNDLE_PATTERN = Pattern.compile("(jcr_root)?/apps/[^/]+/install(\\.([^/]+))?/.+\\.jar"); + public static VaultPackageAssembler create(VaultPackage vaultPackage) { File storingDirectory = new File(TMP_DIR, vaultPackage.getFile().getName() + "-deflated"); storingDirectory.mkdirs(); @@ -82,9 +90,13 @@ public final class VaultPackageAssembler implements EntryHandler { } } - return new VaultPackageAssembler(storingDirectory, properties); + VaultPackageAssembler assembler = new VaultPackageAssembler(storingDirectory, properties); + assembler.mergeFilters(vaultPackage.getMetaInf().getFilter()); + return assembler; } + private final DefaultWorkspaceFilter filter = new DefaultWorkspaceFilter(); + private final File storingDirectory; private final Properties properties; @@ -102,14 +114,20 @@ public final class VaultPackageAssembler implements EntryHandler { /** * This class can not be instantiated from outside - * - * @param properties */ private VaultPackageAssembler(File storingDirectory, Properties properties) { this.storingDirectory = storingDirectory; this.properties = properties; } + public void mergeFilters(WorkspaceFilter filter) { + for (PathFilterSet pathFilterSet : filter.getFilterSets()) { + if (!OSGI_BUNDLE_PATTERN.matcher(pathFilterSet.getRoot()).matches()) { + this.filter.add(pathFilterSet); + } + } + } + public void addEntry(String path, Archive archive, Entry entry) throws IOException { try (InputStream input = archive.openInputStream(entry)) { addEntry(path, input); @@ -146,6 +164,13 @@ public final class VaultPackageAssembler implements EntryHandler { properties.storeToXML(fos, null); } + // generate the Vault filter XML file + File xmlFilter = new File(storingDirectory, VAULT_FILTER_FILE); + try (InputStream input = filter.getSource(); + FileOutputStream output = new FileOutputStream(xmlFilter)) { + IOUtils.copy(input, output); + } + // copy the required resources for (String resource : INCLUDE_RESOURCES) { diff --git a/src/test/java/org/apache/sling/feature/cpconverter/ContentPackage2FeatureModelConverterTest.java b/src/test/java/org/apache/sling/feature/cpconverter/ContentPackage2FeatureModelConverterTest.java index 0514504..08ec0b2 100644 --- a/src/test/java/org/apache/sling/feature/cpconverter/ContentPackage2FeatureModelConverterTest.java +++ b/src/test/java/org/apache/sling/feature/cpconverter/ContentPackage2FeatureModelConverterTest.java @@ -150,6 +150,7 @@ public class ContentPackage2FeatureModelConverterTest { "META-INF/vault/properties.xml", "META-INF/vault/config.xml", "META-INF/vault/settings.xml", + "META-INF/vault/filter.xml", "META-INF/vault/definition/.content.xml", "jcr_root/etc/packages/asd/test-bundles.zip", "jcr_root/etc/packages/asd/test-configurations.zip",
