This is an automated email from the ASF dual-hosted git repository. cschneider pushed a commit to branch SLING-12687-2 in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-distribution-core.git
commit 3f6cf61d66c6b120242b319ce6d86ba0d37d8767 Author: Christian Schneider <[email protected]> AuthorDate: Tue Mar 11 15:35:12 2025 +0100 SLING-12687 - Provide better interface --- .../DistributionContentSerializerProvider.java | 38 ++----------- .../distribution/serialization/ExportSettings.java | 63 ++++++++++++++++++++++ .../{impl/vlt => }/ImportSettings.java | 2 +- .../impl/vlt/FileVaultContentSerializer.java | 15 +++++- .../vlt/FileVaultContentSerializerProvider.java | 23 ++------ .../VaultDistributionPackageBuilderFactory.java | 1 + .../serialization/impl/vlt/VltUtils.java | 1 + .../LocalDistributionPackageImporterTest.java | 2 +- .../FileVaultContentSerializerProviderTest.java | 24 ++++----- .../impl/vlt/FileVaultContentSerializerTest.java | 1 + 10 files changed, 104 insertions(+), 66 deletions(-) diff --git a/src/main/java/org/apache/sling/distribution/serialization/DistributionContentSerializerProvider.java b/src/main/java/org/apache/sling/distribution/serialization/DistributionContentSerializerProvider.java index 1f1489b6..53691d72 100644 --- a/src/main/java/org/apache/sling/distribution/serialization/DistributionContentSerializerProvider.java +++ b/src/main/java/org/apache/sling/distribution/serialization/DistributionContentSerializerProvider.java @@ -18,13 +18,8 @@ */ package org.apache.sling.distribution.serialization; -import org.apache.jackrabbit.vault.fs.api.IdConflictPolicy; -import org.apache.jackrabbit.vault.fs.api.ImportMode; -import org.apache.jackrabbit.vault.fs.io.AccessControlHandling; import org.osgi.annotation.versioning.ConsumerType; -import java.util.Map; - /** * A provider for content serializer used to convert * distribution payloads to and from binary streams. @@ -34,36 +29,13 @@ public interface DistributionContentSerializerProvider { /** * @param name The serializer name - * @param importMode The serializer import mode - * @param aclHandling The serializer ACL handling mode - * @param cugHandling The serializer CUG handling mode - * @param packageRoots The serializer package roots - * @param nodeFilters The serializer node path filters - * @param propertyFilters The serializer property path filters - * @param useBinaryReferences {@code true} to pass binaries by reference ; - * {@code false} to inline binaries - * @param autosaveThreshold The number of resources to handle before - * automatically saving the changes. - * @param exportPathMapping The mapping for exported paths - * @param strict {@code true} to enforce import constraints; - * {@code false} otherwise - * @param overwritePrimaryTypesOfFolders {@code true} to overwrite folder primary types ; - * {@code false} otherwise - * @param idConflictPolicy The policy to handle conflicts + * @param exportSettings settings for export + * @param importSettings settings for import * @return a distribution content serializer */ DistributionContentSerializer build( String name, - ImportMode importMode, - AccessControlHandling aclHandling, - AccessControlHandling cugHandling, - String[] packageRoots, - String[] nodeFilters, - String[] propertyFilters, - boolean useBinaryReferences, - int autosaveThreshold, - Map<String, String> exportPathMapping, - boolean strict, - boolean overwritePrimaryTypesOfFolders, - IdConflictPolicy idConflictPolicy); + ExportSettings exportSettings, + ImportSettings importSettings); + } diff --git a/src/main/java/org/apache/sling/distribution/serialization/ExportSettings.java b/src/main/java/org/apache/sling/distribution/serialization/ExportSettings.java new file mode 100644 index 00000000..4930348e --- /dev/null +++ b/src/main/java/org/apache/sling/distribution/serialization/ExportSettings.java @@ -0,0 +1,63 @@ +/* + * 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.distribution.serialization; + +import java.util.Map; + +/** + * Settings that control the package export. + */ +public class ExportSettings { + private final String[] packageRoots; + private final String[] nodeFilters; + private final String[] propertyFilters; + private final boolean useBinaryReferences; + private final Map<String, String> exportPathMapping; + + public ExportSettings(String[] packageRoots, String[] nodeFilters, String[] propertyFilters, + boolean useBinaryReferences, Map<String, String> exportPathMapping) { + super(); + this.packageRoots = packageRoots; + this.nodeFilters = nodeFilters; + this.propertyFilters = propertyFilters; + this.useBinaryReferences = useBinaryReferences; + this.exportPathMapping = exportPathMapping; + } + + public String[] getPackageRoots() { + return packageRoots; + } + + public String[] getNodeFilters() { + return nodeFilters; + } + + public String[] getPropertyFilters() { + return propertyFilters; + } + + public boolean isUseBinaryReferences() { + return useBinaryReferences; + } + + public Map<String, String> getExportPathMapping() { + return exportPathMapping; + } + +} diff --git a/src/main/java/org/apache/sling/distribution/serialization/impl/vlt/ImportSettings.java b/src/main/java/org/apache/sling/distribution/serialization/ImportSettings.java similarity index 97% rename from src/main/java/org/apache/sling/distribution/serialization/impl/vlt/ImportSettings.java rename to src/main/java/org/apache/sling/distribution/serialization/ImportSettings.java index 5daab856..4a358eba 100644 --- a/src/main/java/org/apache/sling/distribution/serialization/impl/vlt/ImportSettings.java +++ b/src/main/java/org/apache/sling/distribution/serialization/ImportSettings.java @@ -16,7 +16,7 @@ * specific language governing permissions and limitations * under the License. */ -package org.apache.sling.distribution.serialization.impl.vlt; +package org.apache.sling.distribution.serialization; import org.apache.jackrabbit.vault.fs.api.IdConflictPolicy; import org.apache.jackrabbit.vault.fs.api.ImportMode; diff --git a/src/main/java/org/apache/sling/distribution/serialization/impl/vlt/FileVaultContentSerializer.java b/src/main/java/org/apache/sling/distribution/serialization/impl/vlt/FileVaultContentSerializer.java index ef060f18..126c7cee 100644 --- a/src/main/java/org/apache/sling/distribution/serialization/impl/vlt/FileVaultContentSerializer.java +++ b/src/main/java/org/apache/sling/distribution/serialization/impl/vlt/FileVaultContentSerializer.java @@ -44,6 +44,8 @@ import org.apache.sling.distribution.DistributionRequest; import org.apache.sling.distribution.common.DistributionException; import org.apache.sling.distribution.serialization.DistributionContentSerializer; import org.apache.sling.distribution.serialization.DistributionExportOptions; +import org.apache.sling.distribution.serialization.ExportSettings; +import org.apache.sling.distribution.serialization.ImportSettings; import org.apache.sling.distribution.util.DistributionJcrUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -89,7 +91,18 @@ public class FileVaultContentSerializer implements DistributionContentSerializer this.importSettings = importSettings; } - @Override + public FileVaultContentSerializer(String name, Packaging packaging, ExportSettings exportSettings, ImportSettings importSettings) { + this.name = name; + this.packaging = packaging; + this.packageRoots = exportSettings.getPackageRoots(); + this.nodeFilters = VltUtils.parseFilters(exportSettings.getNodeFilters()); + this.propertyFilters = VltUtils.parseFilters(exportSettings.getPropertyFilters()); + this.useBinaryReferences = exportSettings.isUseBinaryReferences(); + this.exportPathMapping = exportSettings.getExportPathMapping(); + this.importSettings = importSettings; + } + + @Override public void exportToStream(ResourceResolver resourceResolver, DistributionExportOptions exportOptions, OutputStream outputStream) throws DistributionException { Session session = null; try { diff --git a/src/main/java/org/apache/sling/distribution/serialization/impl/vlt/FileVaultContentSerializerProvider.java b/src/main/java/org/apache/sling/distribution/serialization/impl/vlt/FileVaultContentSerializerProvider.java index 2b37d759..93216541 100644 --- a/src/main/java/org/apache/sling/distribution/serialization/impl/vlt/FileVaultContentSerializerProvider.java +++ b/src/main/java/org/apache/sling/distribution/serialization/impl/vlt/FileVaultContentSerializerProvider.java @@ -18,12 +18,11 @@ */ package org.apache.sling.distribution.serialization.impl.vlt; -import org.apache.jackrabbit.vault.fs.api.IdConflictPolicy; -import org.apache.jackrabbit.vault.fs.api.ImportMode; -import org.apache.jackrabbit.vault.fs.io.AccessControlHandling; import org.apache.jackrabbit.vault.packaging.Packaging; import org.apache.sling.distribution.serialization.DistributionContentSerializer; import org.apache.sling.distribution.serialization.DistributionContentSerializerProvider; +import org.apache.sling.distribution.serialization.ExportSettings; +import org.apache.sling.distribution.serialization.ImportSettings; import org.osgi.service.component.annotations.Activate; import org.osgi.service.component.annotations.Component; import org.osgi.service.component.annotations.Reference; @@ -46,20 +45,8 @@ public class FileVaultContentSerializerProvider implements DistributionContentSe @Override public DistributionContentSerializer build( String name, - ImportMode importMode, - AccessControlHandling aclHandling, - AccessControlHandling cugHandling, - String[] packageRoots, - String[] nodeFilters, - String[] propertyFilters, - boolean useBinaryReferences, - int autosaveThreshold, - Map<String, String> exportPathMapping, - boolean strict, - boolean overwritePrimaryTypesOfFolders, - IdConflictPolicy idConflictPolicy) { - ImportSettings importSettings = new ImportSettings(importMode, aclHandling, cugHandling, autosaveThreshold, strict, - overwritePrimaryTypesOfFolders, idConflictPolicy); - return new FileVaultContentSerializer(name, packaging, packageRoots, nodeFilters, propertyFilters, useBinaryReferences, exportPathMapping, importSettings); + ExportSettings exportSettings, + ImportSettings importSettings) { + return new FileVaultContentSerializer(name, packaging, exportSettings, importSettings); } } diff --git a/src/main/java/org/apache/sling/distribution/serialization/impl/vlt/VaultDistributionPackageBuilderFactory.java b/src/main/java/org/apache/sling/distribution/serialization/impl/vlt/VaultDistributionPackageBuilderFactory.java index 6ce20390..f2b04fd7 100644 --- a/src/main/java/org/apache/sling/distribution/serialization/impl/vlt/VaultDistributionPackageBuilderFactory.java +++ b/src/main/java/org/apache/sling/distribution/serialization/impl/vlt/VaultDistributionPackageBuilderFactory.java @@ -37,6 +37,7 @@ import org.apache.sling.distribution.packaging.impl.InMemoryDistributionPackageB import org.apache.sling.distribution.packaging.impl.ResourceDistributionPackageBuilder; import org.apache.sling.distribution.packaging.impl.ResourceDistributionPackageCleanup; import org.apache.sling.distribution.serialization.DistributionContentSerializer; +import org.apache.sling.distribution.serialization.ImportSettings; import org.apache.sling.distribution.util.impl.FileBackedMemoryOutputStream.MemoryUnit; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; diff --git a/src/main/java/org/apache/sling/distribution/serialization/impl/vlt/VltUtils.java b/src/main/java/org/apache/sling/distribution/serialization/impl/vlt/VltUtils.java index 40cef7cb..7f778789 100644 --- a/src/main/java/org/apache/sling/distribution/serialization/impl/vlt/VltUtils.java +++ b/src/main/java/org/apache/sling/distribution/serialization/impl/vlt/VltUtils.java @@ -60,6 +60,7 @@ import org.apache.sling.distribution.DistributionRequest; import org.apache.sling.distribution.DistributionRequestType; import org.apache.sling.distribution.SimpleDistributionRequest; import org.apache.sling.distribution.component.impl.SettingsUtils; +import org.apache.sling.distribution.serialization.ImportSettings; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/src/test/java/org/apache/sling/distribution/packaging/impl/importer/LocalDistributionPackageImporterTest.java b/src/test/java/org/apache/sling/distribution/packaging/impl/importer/LocalDistributionPackageImporterTest.java index 64afbbe4..983f029c 100644 --- a/src/test/java/org/apache/sling/distribution/packaging/impl/importer/LocalDistributionPackageImporterTest.java +++ b/src/test/java/org/apache/sling/distribution/packaging/impl/importer/LocalDistributionPackageImporterTest.java @@ -35,8 +35,8 @@ import org.apache.sling.distribution.packaging.DistributionPackageBuilder; import org.apache.sling.distribution.packaging.DistributionPackageInfo; import org.apache.sling.distribution.packaging.impl.DistributionPackageUtils; import org.apache.sling.distribution.packaging.impl.FileDistributionPackageBuilder; +import org.apache.sling.distribution.serialization.ImportSettings; import org.apache.sling.distribution.serialization.impl.vlt.FileVaultContentSerializer; -import org.apache.sling.distribution.serialization.impl.vlt.ImportSettings; import org.apache.sling.testing.mock.sling.ResourceResolverType; import org.apache.sling.testing.mock.sling.junit.SlingContext; import org.junit.Rule; diff --git a/src/test/java/org/apache/sling/distribution/serialization/impl/vlt/FileVaultContentSerializerProviderTest.java b/src/test/java/org/apache/sling/distribution/serialization/impl/vlt/FileVaultContentSerializerProviderTest.java index b964fa5e..6bfa2797 100644 --- a/src/test/java/org/apache/sling/distribution/serialization/impl/vlt/FileVaultContentSerializerProviderTest.java +++ b/src/test/java/org/apache/sling/distribution/serialization/impl/vlt/FileVaultContentSerializerProviderTest.java @@ -18,23 +18,25 @@ */ package org.apache.sling.distribution.serialization.impl.vlt; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; + +import java.util.HashMap; +import java.util.Map; +import java.util.UUID; + import org.apache.jackrabbit.vault.fs.api.IdConflictPolicy; import org.apache.jackrabbit.vault.fs.api.ImportMode; import org.apache.jackrabbit.vault.fs.io.AccessControlHandling; import org.apache.jackrabbit.vault.packaging.Packaging; import org.apache.sling.distribution.serialization.DistributionContentSerializer; import org.apache.sling.distribution.serialization.DistributionContentSerializerProvider; +import org.apache.sling.distribution.serialization.ExportSettings; +import org.apache.sling.distribution.serialization.ImportSettings; import org.junit.Before; import org.junit.Test; import org.mockito.Mock; -import java.util.HashMap; -import java.util.Map; -import java.util.UUID; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; - /** * Tests for {@link FileVaultContentSerializerProvider} */ @@ -65,11 +67,9 @@ public class FileVaultContentSerializerProviderTest { boolean strict = false; boolean overwritePrimaryTypeFolders = false; IdConflictPolicy conflictPolicy = IdConflictPolicy.CREATE_NEW_ID; - - DistributionContentSerializer serializer = provider - .build(name, importMode, aclHandling, cugHandling, packageRoots, nodeFilters, propertyFilters, - useBinaryReference, autoSaveThreshold, exportPathMapping, strict, overwritePrimaryTypeFolders, - conflictPolicy); + ExportSettings exportSettings = new ExportSettings(packageRoots, nodeFilters, propertyFilters, useBinaryReference, exportPathMapping); + ImportSettings importSettings = new ImportSettings(importMode, aclHandling, cugHandling, autoSaveThreshold, strict, overwritePrimaryTypeFolders, conflictPolicy); + DistributionContentSerializer serializer = provider.build(name, exportSettings, importSettings); assertNotNull(serializer); assertEquals(name, serializer.getName()); diff --git a/src/test/java/org/apache/sling/distribution/serialization/impl/vlt/FileVaultContentSerializerTest.java b/src/test/java/org/apache/sling/distribution/serialization/impl/vlt/FileVaultContentSerializerTest.java index 8149c884..ded4f90e 100644 --- a/src/test/java/org/apache/sling/distribution/serialization/impl/vlt/FileVaultContentSerializerTest.java +++ b/src/test/java/org/apache/sling/distribution/serialization/impl/vlt/FileVaultContentSerializerTest.java @@ -38,6 +38,7 @@ import org.apache.sling.commons.testing.jcr.RepositoryUtil; import org.apache.sling.distribution.DistributionRequest; import org.apache.sling.distribution.serialization.DistributionExportFilter; import org.apache.sling.distribution.serialization.DistributionExportOptions; +import org.apache.sling.distribution.serialization.ImportSettings; import org.apache.sling.testing.mock.sling.ResourceResolverType; import org.apache.sling.testing.mock.sling.junit.SlingContext; import org.apache.sling.testing.resourceresolver.MockHelper;
