You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by cs...@apache.org on 2019/07/22 11:22:46 UTC

[sling-org-apache-sling-distribution-core] branch SLING-8591 created (now 5ee881c)

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

cschneider pushed a change to branch SLING-8591
in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-distribution-core.git.


      at 5ee881c  SLING-8591 - Hook to support custom code when installing or deleting distribution packages

This branch includes the following new commits:

     new 5ee881c  SLING-8591 - Hook to support custom code when installing or deleting distribution packages

The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.



[sling-org-apache-sling-distribution-core] 01/01: SLING-8591 - Hook to support custom code when installing or deleting distribution packages

Posted by cs...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit 5ee881ce9f3b1e32e928364c81142012dd1eb7d4
Author: Christian Schneider <cs...@adobe.com>
AuthorDate: Mon Jul 22 13:22:19 2019 +0200

    SLING-8591 - Hook to support custom code when installing or deleting distribution packages
---
 .../distribution/packaging/PackageInstallHook.java | 46 ++++++++++++++++++++++
 .../impl/AbstractDistributionPackageBuilder.java   | 13 +++++-
 .../impl/FileDistributionPackageBuilder.java       |  6 ++-
 .../impl/InMemoryDistributionPackageBuilder.java   |  6 ++-
 .../packaging/impl/NoopPackageInstallHook.java     | 43 ++++++++++++++++++++
 .../impl/ResourceDistributionPackageBuilder.java   |  6 ++-
 .../sling/distribution/packaging/package-info.java |  2 +-
 .../impl/DistributionPackageBuilderFactory.java    | 11 ++++--
 .../VaultDistributionPackageBuilderFactory.java    | 11 ++++--
 .../impl/FileDistributionPackageBuilderTest.java   |  4 +-
 .../InMemoryDistributionPackageBuilderTest.java    |  4 +-
 .../LocalDistributionPackageImporterTest.java      |  5 ++-
 12 files changed, 139 insertions(+), 18 deletions(-)

diff --git a/src/main/java/org/apache/sling/distribution/packaging/PackageInstallHook.java b/src/main/java/org/apache/sling/distribution/packaging/PackageInstallHook.java
new file mode 100644
index 0000000..622b737
--- /dev/null
+++ b/src/main/java/org/apache/sling/distribution/packaging/PackageInstallHook.java
@@ -0,0 +1,46 @@
+/*
+ * 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.packaging;
+
+import org.apache.sling.api.resource.ResourceResolver;
+
+import aQute.bnd.annotation.ProviderType;
+
+/**
+ * Callback that allows to run code after a DistributionPackage is installed.
+ */
+@ProviderType
+public interface PackageInstallHook {
+    public static String NOOP_NAME = "noop_install_hook";
+    public static String NOOP_FILTER = "(name=" + PackageInstallHook.NOOP_NAME + ")";
+    
+    /**
+     * Will be called after a package was installed into the repository
+     * @param resourceResolver 
+     * @param distPackage
+     */
+    void onPostAdd(ResourceResolver resourceResolver, DistributionPackage distPackage);
+    
+    /**
+     * Will be called after a package was installed into the repository
+     * @param resourceResolver 
+     * @param distPackage
+     */
+    void onPreRemove(ResourceResolver resourceResolver, DistributionPackage distPackage);
+}
diff --git a/src/main/java/org/apache/sling/distribution/packaging/impl/AbstractDistributionPackageBuilder.java b/src/main/java/org/apache/sling/distribution/packaging/impl/AbstractDistributionPackageBuilder.java
index 0993667..e6f090d 100644
--- a/src/main/java/org/apache/sling/distribution/packaging/impl/AbstractDistributionPackageBuilder.java
+++ b/src/main/java/org/apache/sling/distribution/packaging/impl/AbstractDistributionPackageBuilder.java
@@ -35,6 +35,7 @@ import org.apache.sling.distribution.common.DistributionException;
 import org.apache.sling.distribution.packaging.DistributionPackage;
 import org.apache.sling.distribution.packaging.DistributionPackageBuilder;
 import org.apache.sling.distribution.packaging.DistributionPackageInfo;
+import org.apache.sling.distribution.packaging.PackageInstallHook;
 import org.apache.sling.distribution.serialization.impl.vlt.VltUtils;
 import org.apache.sling.distribution.util.DistributionJcrUtils;
 import org.jetbrains.annotations.NotNull;
@@ -51,8 +52,11 @@ public abstract class AbstractDistributionPackageBuilder implements Distribution
 
     private final String type;
 
-    AbstractDistributionPackageBuilder(String type) {
+    private PackageInstallHook installHook;
+
+    AbstractDistributionPackageBuilder(String type, PackageInstallHook installHook) {
         this.type = type;
+        this.installHook = installHook;
     }
 
     public String getType() {
@@ -170,6 +174,7 @@ public abstract class AbstractDistributionPackageBuilder implements Distribution
         Session session = null;
         try {
             if (distributionPackage != null) {
+                installHook.onPreRemove(resourceResolver, distributionPackage);
                 session = getSession(resourceResolver);
                 for (String path : distributionPackage.getInfo().getPaths()) {
                     if (session.itemExists(path)) {
@@ -193,7 +198,11 @@ public abstract class AbstractDistributionPackageBuilder implements Distribution
         InputStream inputStream = null;
         try {
             inputStream = distributionPackage.createInputStream();
-            return installPackageInternal(resourceResolver, inputStream);
+            boolean isInstalled = installPackageInternal(resourceResolver, inputStream);
+            if (isInstalled) {
+                installHook.onPostAdd(resourceResolver, distributionPackage);
+            }
+            return isInstalled;
         } catch (IOException e) {
             throw new DistributionException(e);
         } finally {
diff --git a/src/main/java/org/apache/sling/distribution/packaging/impl/FileDistributionPackageBuilder.java b/src/main/java/org/apache/sling/distribution/packaging/impl/FileDistributionPackageBuilder.java
index a79a7a2..35dbf8b 100644
--- a/src/main/java/org/apache/sling/distribution/packaging/impl/FileDistributionPackageBuilder.java
+++ b/src/main/java/org/apache/sling/distribution/packaging/impl/FileDistributionPackageBuilder.java
@@ -37,6 +37,7 @@ import org.apache.sling.distribution.DistributionRequest;
 import org.apache.sling.distribution.common.DistributionException;
 import org.apache.sling.distribution.packaging.DistributionPackage;
 import org.apache.sling.distribution.packaging.DistributionPackageBuilder;
+import org.apache.sling.distribution.packaging.PackageInstallHook;
 import org.apache.sling.distribution.serialization.DistributionContentSerializer;
 import org.apache.sling.distribution.serialization.DistributionExportFilter;
 import org.apache.sling.distribution.serialization.DistributionExportOptions;
@@ -64,8 +65,9 @@ public class FileDistributionPackageBuilder extends AbstractDistributionPackageB
                                           DistributionContentSerializer distributionContentSerializer,
                                           String tempFilesFolder,
                                           String digestAlgorithm, String[] nodeFilters,
-                                          String[] propertyFilters) {
-        super(type);
+                                          String[] propertyFilters,
+                                          PackageInstallHook postInstallHook) {
+        super(type, postInstallHook);
         this.distributionContentSerializer = distributionContentSerializer;
         this.nodeFilters = VltUtils.parseFilters(nodeFilters);
         this.propertyFilters = VltUtils.parseFilters(propertyFilters);
diff --git a/src/main/java/org/apache/sling/distribution/packaging/impl/InMemoryDistributionPackageBuilder.java b/src/main/java/org/apache/sling/distribution/packaging/impl/InMemoryDistributionPackageBuilder.java
index d55b77e..d7e7cd1 100644
--- a/src/main/java/org/apache/sling/distribution/packaging/impl/InMemoryDistributionPackageBuilder.java
+++ b/src/main/java/org/apache/sling/distribution/packaging/impl/InMemoryDistributionPackageBuilder.java
@@ -33,6 +33,7 @@ import org.apache.sling.api.resource.ResourceResolver;
 import org.apache.sling.distribution.DistributionRequest;
 import org.apache.sling.distribution.common.DistributionException;
 import org.apache.sling.distribution.packaging.DistributionPackage;
+import org.apache.sling.distribution.packaging.PackageInstallHook;
 import org.apache.sling.distribution.serialization.DistributionContentSerializer;
 import org.apache.sling.distribution.serialization.DistributionExportFilter;
 import org.apache.sling.distribution.serialization.DistributionExportOptions;
@@ -58,8 +59,9 @@ public class InMemoryDistributionPackageBuilder extends AbstractDistributionPack
     public InMemoryDistributionPackageBuilder(@NotNull String type,
                                               @NotNull DistributionContentSerializer serializer,
                                               @Nullable String[] nodeFilters,
-                                              @Nullable String[] propertyFilters) {
-        super(type);
+                                              @Nullable String[] propertyFilters,
+                                              PackageInstallHook postInstallHook) {
+        super(type, postInstallHook);
         this.serializer = serializer;
         this.nodeFilters = VltUtils.parseFilters(nodeFilters);
         this.propertyFilters = VltUtils.parseFilters(propertyFilters);
diff --git a/src/main/java/org/apache/sling/distribution/packaging/impl/NoopPackageInstallHook.java b/src/main/java/org/apache/sling/distribution/packaging/impl/NoopPackageInstallHook.java
new file mode 100644
index 0000000..f99f92e
--- /dev/null
+++ b/src/main/java/org/apache/sling/distribution/packaging/impl/NoopPackageInstallHook.java
@@ -0,0 +1,43 @@
+/*
+ * 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.packaging.impl;
+
+import org.apache.felix.scr.annotations.Component;
+import org.apache.felix.scr.annotations.Property;
+import org.apache.felix.scr.annotations.Service;
+import org.apache.sling.api.resource.ResourceResolver;
+import org.apache.sling.distribution.packaging.DistributionPackage;
+import org.apache.sling.distribution.packaging.PackageInstallHook;
+
+/**
+ * Default hook that simply does nothing
+ */
+@Component
+@Service(PackageInstallHook.class)
+@Property(name = "name", value = "Builder name: {name}")
+public class NoopPackageInstallHook implements PackageInstallHook {
+
+    @Override
+    public void onPostAdd(ResourceResolver resourceResolver, DistributionPackage distPackage) {
+    }
+
+    @Override
+    public void onPreRemove(ResourceResolver resourceResolver, DistributionPackage distPackage) {
+    }
+}
diff --git a/src/main/java/org/apache/sling/distribution/packaging/impl/ResourceDistributionPackageBuilder.java b/src/main/java/org/apache/sling/distribution/packaging/impl/ResourceDistributionPackageBuilder.java
index 919d3d9..ada62d0 100644
--- a/src/main/java/org/apache/sling/distribution/packaging/impl/ResourceDistributionPackageBuilder.java
+++ b/src/main/java/org/apache/sling/distribution/packaging/impl/ResourceDistributionPackageBuilder.java
@@ -44,6 +44,7 @@ import org.apache.sling.api.resource.ResourceUtil;
 import org.apache.sling.distribution.DistributionRequest;
 import org.apache.sling.distribution.common.DistributionException;
 import org.apache.sling.distribution.packaging.DistributionPackage;
+import org.apache.sling.distribution.packaging.PackageInstallHook;
 import org.apache.sling.distribution.serialization.DistributionContentSerializer;
 import org.apache.sling.distribution.serialization.DistributionExportFilter;
 import org.apache.sling.distribution.serialization.DistributionExportOptions;
@@ -76,8 +77,9 @@ public class ResourceDistributionPackageBuilder extends AbstractDistributionPack
                                               MemoryUnit memoryUnit,
                                               boolean useOffHeapMemory,
                                               String digestAlgorithm, String[] nodeFilters,
-                                              String[] propertyFilters) {
-        super(type);
+                                              String[] propertyFilters, 
+                                              PackageInstallHook postInstallHook) {
+        super(type, postInstallHook);
         this.distributionContentSerializer = distributionContentSerializer;
         this.nodeFilters = VltUtils.parseFilters(nodeFilters);
         this.propertyFilters = VltUtils.parseFilters(propertyFilters);
diff --git a/src/main/java/org/apache/sling/distribution/packaging/package-info.java b/src/main/java/org/apache/sling/distribution/packaging/package-info.java
index 8f378be..e0a3160 100644
--- a/src/main/java/org/apache/sling/distribution/packaging/package-info.java
+++ b/src/main/java/org/apache/sling/distribution/packaging/package-info.java
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-@Version("0.0.1")
+@Version("0.1.0")
 package org.apache.sling.distribution.packaging;
 
 import aQute.bnd.annotation.Version;
diff --git a/src/main/java/org/apache/sling/distribution/serialization/impl/DistributionPackageBuilderFactory.java b/src/main/java/org/apache/sling/distribution/serialization/impl/DistributionPackageBuilderFactory.java
index 09b8c9b..7d7f30a 100644
--- a/src/main/java/org/apache/sling/distribution/serialization/impl/DistributionPackageBuilderFactory.java
+++ b/src/main/java/org/apache/sling/distribution/serialization/impl/DistributionPackageBuilderFactory.java
@@ -44,6 +44,7 @@ import org.apache.sling.distribution.monitor.impl.MonitoringDistributionPackageB
 import org.apache.sling.distribution.packaging.DistributionPackage;
 import org.apache.sling.distribution.packaging.DistributionPackageBuilder;
 import org.apache.sling.distribution.packaging.DistributionPackageInfo;
+import org.apache.sling.distribution.packaging.PackageInstallHook;
 import org.apache.sling.distribution.packaging.impl.FileDistributionPackageBuilder;
 import org.apache.sling.distribution.packaging.impl.InMemoryDistributionPackageBuilder;
 import org.apache.sling.distribution.packaging.impl.ResourceDistributionPackageBuilder;
@@ -193,6 +194,10 @@ public class DistributionPackageBuilderFactory implements DistributionPackageBui
 
     private ServiceRegistration packageCleanup = null;
 
+    @Property(name = "installHook.target", label = "install hook", description = "Hook to be called after package was installed and before package will be removed.", value = PackageInstallHook.NOOP_FILTER)
+    @Reference
+    private PackageInstallHook installHook;
+
     @Activate
     public void activate(BundleContext context,
                          Map<String, Object> config) {
@@ -209,15 +214,15 @@ public class DistributionPackageBuilderFactory implements DistributionPackageBui
 
         DistributionPackageBuilder wrapped;
         if ("file".equals(persistenceType)) {
-            wrapped = new FileDistributionPackageBuilder(contentSerializer.getName(), contentSerializer, tempFsFolder, digestAlgorithm, nodeFilters, propertyFilters);
+            wrapped = new FileDistributionPackageBuilder(contentSerializer.getName(), contentSerializer, tempFsFolder, digestAlgorithm, nodeFilters, propertyFilters, installHook);
         } else if ("inmemory".equals(persistenceType)) {
-            wrapped = new InMemoryDistributionPackageBuilder(contentSerializer.getName(), contentSerializer, nodeFilters, propertyFilters);
+            wrapped = new InMemoryDistributionPackageBuilder(contentSerializer.getName(), contentSerializer, nodeFilters, propertyFilters, installHook);
         } else {
             final int fileThreshold = PropertiesUtil.toInteger(config.get(FILE_THRESHOLD), DEFAULT_FILE_THRESHOLD_VALUE);
             String memoryUnitName = PropertiesUtil.toString(config.get(MEMORY_UNIT), DEFAULT_MEMORY_UNIT);
             final MemoryUnit memoryUnit = MemoryUnit.valueOf(memoryUnitName);
             final boolean useOffHeapMemory = PropertiesUtil.toBoolean(config.get(USE_OFF_HEAP_MEMORY), DEFAULT_USE_OFF_HEAP_MEMORY);
-            ResourceDistributionPackageBuilder resourceDistributionPackageBuilder = new ResourceDistributionPackageBuilder(contentSerializer.getName(), contentSerializer, tempFsFolder, fileThreshold, memoryUnit, useOffHeapMemory, digestAlgorithm, nodeFilters, propertyFilters);
+            ResourceDistributionPackageBuilder resourceDistributionPackageBuilder = new ResourceDistributionPackageBuilder(contentSerializer.getName(), contentSerializer, tempFsFolder, fileThreshold, memoryUnit, useOffHeapMemory, digestAlgorithm, nodeFilters, propertyFilters, installHook);
             Runnable cleanup = new ResourceDistributionPackageCleanup(resolverFactory, resourceDistributionPackageBuilder);
             Dictionary<String, Object> props = new Hashtable<String, Object>();
             props.put(Scheduler.PROPERTY_SCHEDULER_CONCURRENT, false);
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 cffed94..9db58a2 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
@@ -34,6 +34,7 @@ import org.apache.sling.distribution.monitor.impl.MonitoringDistributionPackageB
 import org.apache.sling.distribution.packaging.DistributionPackage;
 import org.apache.sling.distribution.packaging.DistributionPackageBuilder;
 import org.apache.sling.distribution.packaging.DistributionPackageInfo;
+import org.apache.sling.distribution.packaging.PackageInstallHook;
 import org.apache.sling.distribution.packaging.impl.FileDistributionPackageBuilder;
 import org.apache.sling.distribution.packaging.impl.InMemoryDistributionPackageBuilder;
 import org.apache.sling.distribution.packaging.impl.ResourceDistributionPackageBuilder;
@@ -226,6 +227,10 @@ public class VaultDistributionPackageBuilderFactory implements DistributionPacka
 
     private MonitoringDistributionPackageBuilder packageBuilder;
 
+    @Property(name = "postInstallHook.target", label = "Post install hook", description = "Hook to be called after package was installed.",
+            value = PackageInstallHook.NOOP_FILTER)
+    @Reference
+    private PackageInstallHook postInstallHook;
 
     @Activate
     public void activate(BundleContext context, Map<String, Object> config) {
@@ -271,15 +276,15 @@ public class VaultDistributionPackageBuilderFactory implements DistributionPacka
 
         DistributionPackageBuilder wrapped;
         if ("filevlt".equals(type)) {
-            wrapped = new FileDistributionPackageBuilder(name, contentSerializer, tempFsFolder, digestAlgorithm, packageNodeFilters, packagePropertyFilters);
+            wrapped = new FileDistributionPackageBuilder(name, contentSerializer, tempFsFolder, digestAlgorithm, packageNodeFilters, packagePropertyFilters, postInstallHook);
         } else if ("inmemory".equals(type)) {
-            wrapped = new InMemoryDistributionPackageBuilder(name, contentSerializer, packageNodeFilters, packagePropertyFilters);
+            wrapped = new InMemoryDistributionPackageBuilder(name, contentSerializer, packageNodeFilters, packagePropertyFilters, postInstallHook);
         } else {
             final int fileThreshold = PropertiesUtil.toInteger(config.get(FILE_THRESHOLD), DEFAULT_FILE_THRESHOLD_VALUE);
             String memoryUnitName = PropertiesUtil.toString(config.get(MEMORY_UNIT), DEFAULT_MEMORY_UNIT);
             final MemoryUnit memoryUnit = MemoryUnit.valueOf(memoryUnitName);
             final boolean useOffHeapMemory = PropertiesUtil.toBoolean(config.get(USE_OFF_HEAP_MEMORY), DEFAULT_USE_OFF_HEAP_MEMORY);
-            ResourceDistributionPackageBuilder resourceDistributionPackageBuilder = new ResourceDistributionPackageBuilder(contentSerializer.getName(), contentSerializer, tempFsFolder, fileThreshold, memoryUnit, useOffHeapMemory, digestAlgorithm, packageNodeFilters, packagePropertyFilters);
+            ResourceDistributionPackageBuilder resourceDistributionPackageBuilder = new ResourceDistributionPackageBuilder(contentSerializer.getName(), contentSerializer, tempFsFolder, fileThreshold, memoryUnit, useOffHeapMemory, digestAlgorithm, packageNodeFilters, packagePropertyFilters, postInstallHook);
             Runnable cleanup = new ResourceDistributionPackageCleanup(resolverFactory, resourceDistributionPackageBuilder);
             Dictionary<String, Object> props = new Hashtable<String, Object>();
             props.put(Scheduler.PROPERTY_SCHEDULER_CONCURRENT, false);
diff --git a/src/test/java/org/apache/sling/distribution/packaging/impl/FileDistributionPackageBuilderTest.java b/src/test/java/org/apache/sling/distribution/packaging/impl/FileDistributionPackageBuilderTest.java
index ea6072c..f9abb52 100644
--- a/src/test/java/org/apache/sling/distribution/packaging/impl/FileDistributionPackageBuilderTest.java
+++ b/src/test/java/org/apache/sling/distribution/packaging/impl/FileDistributionPackageBuilderTest.java
@@ -30,6 +30,7 @@ import org.apache.sling.api.resource.ResourceResolver;
 import org.apache.sling.distribution.DistributionRequest;
 import org.apache.sling.distribution.common.DistributionException;
 import org.apache.sling.distribution.packaging.DistributionPackage;
+import org.apache.sling.distribution.packaging.PackageInstallHook;
 import org.apache.sling.distribution.serialization.DistributionContentSerializer;
 import org.apache.sling.distribution.serialization.DistributionExportOptions;
 import org.junit.Test;
@@ -38,8 +39,9 @@ public class FileDistributionPackageBuilderTest {
 
     @Test
     public void testDefaultTempDirectory() throws DistributionException, IOException {
+        PackageInstallHook postInstallHook = new NoopPackageInstallHook();
         FileDistributionPackageBuilder builder = new FileDistributionPackageBuilder("test", new TestSerializer(), null, null, new String[0],
-                new String[0]);
+                new String[0], postInstallHook);
         DistributionPackage createdPackage = builder.createPackageForAdd(mock(ResourceResolver.class), mock(DistributionRequest.class));
 
         try {
diff --git a/src/test/java/org/apache/sling/distribution/packaging/impl/InMemoryDistributionPackageBuilderTest.java b/src/test/java/org/apache/sling/distribution/packaging/impl/InMemoryDistributionPackageBuilderTest.java
index f20dc66..5ed48ad 100644
--- a/src/test/java/org/apache/sling/distribution/packaging/impl/InMemoryDistributionPackageBuilderTest.java
+++ b/src/test/java/org/apache/sling/distribution/packaging/impl/InMemoryDistributionPackageBuilderTest.java
@@ -28,6 +28,7 @@ import org.apache.sling.distribution.DistributionRequestType;
 import org.apache.sling.distribution.SimpleDistributionRequest;
 import org.apache.sling.distribution.common.DistributionException;
 import org.apache.sling.distribution.packaging.DistributionPackage;
+import org.apache.sling.distribution.packaging.PackageInstallHook;
 import org.apache.sling.distribution.serialization.DistributionContentSerializer;
 import org.apache.sling.distribution.serialization.DistributionExportOptions;
 import org.junit.Test;
@@ -39,7 +40,8 @@ public class InMemoryDistributionPackageBuilderTest {
 
     @Test
     public void testCreatePackage() throws Exception {
-        InMemoryDistributionPackageBuilder builder = new InMemoryDistributionPackageBuilder("name", new InMemDistributionContentSerializer(), new String[0], new String[0]);
+        PackageInstallHook postInstallHook = new NoopPackageInstallHook();
+        InMemoryDistributionPackageBuilder builder = new InMemoryDistributionPackageBuilder("name", new InMemDistributionContentSerializer(), new String[0], new String[0], postInstallHook);
         DistributionPackage pkg = builder.createPackageForAdd(mock(ResourceResolver.class), new SimpleDistributionRequest(DistributionRequestType.ADD, false, "/test"));
         assertNotNull(pkg.createInputStream());
     }
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 d603237..99843db 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
@@ -32,8 +32,10 @@ import org.apache.sling.distribution.event.impl.DistributionEventFactory;
 import org.apache.sling.distribution.packaging.DistributionPackage;
 import org.apache.sling.distribution.packaging.DistributionPackageBuilder;
 import org.apache.sling.distribution.packaging.DistributionPackageInfo;
+import org.apache.sling.distribution.packaging.PackageInstallHook;
 import org.apache.sling.distribution.packaging.impl.DistributionPackageUtils;
 import org.apache.sling.distribution.packaging.impl.FileDistributionPackageBuilder;
+import org.apache.sling.distribution.packaging.impl.NoopPackageInstallHook;
 import org.apache.sling.distribution.serialization.impl.vlt.FileVaultContentSerializer;
 import org.apache.sling.testing.mock.sling.ResourceResolverType;
 import org.apache.sling.testing.mock.sling.junit.SlingContext;
@@ -92,8 +94,9 @@ public class LocalDistributionPackageImporterTest {
                 false
         );
 
+        PackageInstallHook postInstallHook = new NoopPackageInstallHook();
         DistributionPackageBuilder builder =
-                new FileDistributionPackageBuilder(DistributionRequestType.ADD.name(), vaultSerializer, null, null, null, null);
+                new FileDistributionPackageBuilder(DistributionRequestType.ADD.name(), vaultSerializer, null, null, null, null, postInstallHook);
 
         ResourceResolver resourceResolver = slingContext.resourceResolver();