SLING-7362 - Allow to configure the SCD default compression level
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 5547185..641a52c 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
@@ -80,10 +80,11 @@
     private final boolean useBinaryReferences;
     private final String name;
     private final Map<String, String> exportPathMapping;
+    private final int compressionLevel;
 
     public FileVaultContentSerializer(String name, Packaging packaging, ImportMode importMode, AccessControlHandling aclHandling, String[] packageRoots,
                                       String[] nodeFilters, String[] propertyFilters, boolean useBinaryReferences, int autosaveThreshold,
-                                      Map<String, String> exportPathMapping) {
+                                      Map<String, String> exportPathMapping, int compressionLevel) {
         this.name = name;
         this.packaging = packaging;
         this.importMode = importMode;
@@ -94,6 +95,7 @@
         this.propertyFilters = VltUtils.parseFilters(propertyFilters);
         this.useBinaryReferences = useBinaryReferences;
         this.exportPathMapping = exportPathMapping;
+        this.compressionLevel = compressionLevel;
     }
 
     @Override
@@ -107,6 +109,9 @@
             WorkspaceFilter filter = VltUtils.createFilter(exportOptions.getRequest(), nodeFilters, propertyFilters);
             ExportOptions opts = VltUtils.getExportOptions(filter, packageRoots, packageGroup, packageName, VERSION, useBinaryReferences, exportPathMapping);
 
+            // Set configured compression level (SLING-7362)
+            opts.setCompressionLevel(compressionLevel);
+
             log.debug("assembling package {} user {}", packageGroup + '/' + packageName + "-" + VERSION, resourceResolver.getUserID());
 
             packaging.getPackageManager().assemble(session, opts, outputStream);
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 d44dcbe..2ecefa5 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
@@ -204,6 +204,18 @@
               "The format is {sourcePattern}={destinationPattern}, e.g. /etc/(.*)=/var/$1/some or simply /data=/bak")
     private static final String PATHS_MAPPING = "pathsMapping";
 
+    private static final int DEFAULT_COMPRESSION_LEVEL = 1;
+
+    @Property(
+            label = "The Vault zlib compression level",
+            description = "The zlib compression level used by Vault to serialize content. The compression level is " +
+                    "an integer between -1 and 9, see http://www.zlib.net/manual.html. Default is '1' (BEST_SPEED).",
+            intValue = DEFAULT_COMPRESSION_LEVEL,
+            propertyPrivate = true
+    )
+    private static final String COMPRESSION_LEVEL = "compressionLevel";
+
+
     @Reference
     private Packaging packaging;
 
@@ -238,6 +250,8 @@
             digestAlgorithm = null;
         }
 
+        int compressionLevel = PropertiesUtil.toInteger(config.get(COMPRESSION_LEVEL), DEFAULT_COMPRESSION_LEVEL);
+
         ImportMode importMode = null;
         if (importModeString != null) {
             importMode = ImportMode.valueOf(importModeString.trim());
@@ -253,7 +267,7 @@
         pathsMapping = SettingsUtils.removeEmptyEntries(pathsMapping);
 
         DistributionContentSerializer contentSerializer = new FileVaultContentSerializer(name, packaging, importMode, aclHandling,
-                packageRoots, packageNodeFilters, packagePropertyFilters, useBinaryReferences, autosaveThreshold, pathsMapping);
+                packageRoots, packageNodeFilters, packagePropertyFilters, useBinaryReferences, autosaveThreshold, pathsMapping, compressionLevel);
 
         DistributionPackageBuilder wrapped;
         if ("filevlt".equals(type)) {
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 f1679b7..9111a52 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
@@ -81,7 +81,8 @@
                 new String[0],
                 false,
                 -1,
-                null
+                null,
+                1
         );
 
         DistributionPackageBuilder builder =
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 4f5cf98..8a1c01d 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
@@ -82,7 +82,7 @@
         boolean useReferences = false;
         int threshold = 1024;
         FileVaultContentSerializer fileVaultContentSerializer = new FileVaultContentSerializer("vlt", packaging, importMode,
-                aclHandling, packageRoots, nodeFilters, propertyFilters, useReferences, threshold, new HashMap<String, String>());
+                aclHandling, packageRoots, nodeFilters, propertyFilters, useReferences, threshold, new HashMap<String, String>(), 1);
 
         ResourceResolver sessionResolver = mock(ResourceResolver.class);
         Session session = mock(Session.class);
@@ -124,7 +124,7 @@
         boolean useReferences = false;
         int thershold = 1024;
         FileVaultContentSerializer fileVaultContentSerializer = new FileVaultContentSerializer("vlt", packaging, importMode,
-                aclHandling, packageRoots, nodeFilters, propertyFilters, useReferences, thershold, new HashMap<String, String>());
+                aclHandling, packageRoots, nodeFilters, propertyFilters, useReferences, thershold, new HashMap<String, String>(), 1);
 
         File file = new File(getClass().getResource("/vlt/dp.vlt").getFile());