This is an automated email from the ASF dual-hosted git repository.

tmaret pushed a commit to branch master
in repository 
https://gitbox.apache.org/repos/asf/sling-org-apache-sling-distribution-core.git


The following commit(s) were added to refs/heads/master by this push:
     new f79c2043 SLING-12687 - Provide better interface (#71)
f79c2043 is described below

commit f79c2043138aacec1a705e1fefdc4ab25dbbfb50
Author: Christian Schneider <[email protected]>
AuthorDate: Tue Mar 11 23:38:46 2025 +0100

    SLING-12687 - Provide better interface (#71)
    
    * Provide better interface
    * Add docs
    * Remove unused import
---
 .../DistributionContentSerializerProvider.java     | 38 ++----------
 .../distribution/serialization/ExportSettings.java | 72 ++++++++++++++++++++++
 .../{impl/vlt => }/ImportSettings.java             | 14 ++++-
 .../impl/vlt/FileVaultContentSerializer.java       | 15 ++++-
 .../vlt/FileVaultContentSerializerProvider.java    | 25 ++------
 .../VaultDistributionPackageBuilderFactory.java    |  1 +
 .../serialization/impl/vlt/VltUtils.java           |  1 +
 .../LocalDistributionPackageImporterTest.java      |  2 +-
 .../FileVaultContentSerializerProviderTest.java    | 24 ++++----
 .../impl/vlt/FileVaultContentSerializerTest.java   |  1 +
 10 files changed, 125 insertions(+), 68 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..2f1cdfc1
--- /dev/null
+++ 
b/src/main/java/org/apache/sling/distribution/serialization/ExportSettings.java
@@ -0,0 +1,72 @@
+/*
+ * 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;
+       
+       /**
+        * 
+        * @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 exportPathMapping The mapping for exported paths
+        */
+       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 78%
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..98306117 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;
@@ -34,6 +34,18 @@ public class ImportSettings {
     private final boolean overwritePrimaryTypesOfFolders;
     private final IdConflictPolicy idConflictPolicy;
 
+    /**
+     * 
+     * @param importMode The serializer import mode
+     * @param aclHandling The serializer ACL handling mode
+     * @param cugHandling The serializer CUG handling mode
+     * @param autosaveThreshold The number of resources to handle before 
automatically saving the changes.
+     * @param isStrict {@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
+     */
     public ImportSettings(ImportMode importMode, AccessControlHandling 
aclHandling, AccessControlHandling cugHandling, int autosaveThreshold,
                           boolean isStrict, boolean 
overwritePrimaryTypesOfFolders, IdConflictPolicy idConflictPolicy) {
         this.importMode = 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..c1876715 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,18 +18,15 @@
  */
 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;
 
-import java.util.Map;
-
 /**
  * Provides {@link DistributionContentSerializer} based on Apache Jackrabbit 
FileVault
  */
@@ -46,20 +43,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;

Reply via email to