SLING-7168 - Allow to implement custom distribution queue

* Export the org.apache.sling.distribution.agent package
* Export the org.apache.sling.distribution.agent.spi package
* Expose DistributionAgent as a consumer type
diff --git a/pom.xml b/pom.xml
index 9a91e6e..d51a4d8 100644
--- a/pom.xml
+++ b/pom.xml
@@ -74,7 +74,9 @@
                             org.apache.sling.distribution.serialization,
                             org.apache.sling.distribution.queue.spi,
                             org.apache.sling.distribution.queue,
-                            org.apache.sling.distribution.log.spi
+                            org.apache.sling.distribution.log.spi,
+                            org.apache.sling.distribution.agent,
+                            org.apache.sling.distribution.agent.spi
                         </Export-Package>
                         <Import-Package>
                             org.apache.http.nio.*;resolution:=optional,
diff --git a/src/main/java/org/apache/sling/distribution/agent/impl/AbstractDistributionAgentFactory.java b/src/main/java/org/apache/sling/distribution/agent/impl/AbstractDistributionAgentFactory.java
index 4082f47..275c747 100644
--- a/src/main/java/org/apache/sling/distribution/agent/impl/AbstractDistributionAgentFactory.java
+++ b/src/main/java/org/apache/sling/distribution/agent/impl/AbstractDistributionAgentFactory.java
@@ -27,7 +27,7 @@
 import javax.management.ObjectName;
 
 import org.apache.sling.commons.osgi.PropertiesUtil;
-import org.apache.sling.distribution.agent.DistributionAgent;
+import org.apache.sling.distribution.agent.spi.DistributionAgent;
 import org.apache.sling.distribution.component.impl.DistributionComponentConstants;
 import org.apache.sling.distribution.component.impl.DistributionComponentKind;
 import org.apache.sling.distribution.component.impl.SettingsUtils;
diff --git a/src/main/java/org/apache/sling/distribution/agent/impl/ForwardDistributionAgentFactory.java b/src/main/java/org/apache/sling/distribution/agent/impl/ForwardDistributionAgentFactory.java
index a5a5ff1..16a58fa 100644
--- a/src/main/java/org/apache/sling/distribution/agent/impl/ForwardDistributionAgentFactory.java
+++ b/src/main/java/org/apache/sling/distribution/agent/impl/ForwardDistributionAgentFactory.java
@@ -40,7 +40,7 @@
 import org.apache.sling.commons.osgi.PropertiesUtil;
 import org.apache.sling.commons.scheduler.Scheduler;
 import org.apache.sling.distribution.DistributionRequestType;
-import org.apache.sling.distribution.agent.DistributionAgent;
+import org.apache.sling.distribution.agent.spi.DistributionAgent;
 import org.apache.sling.distribution.component.impl.DistributionComponentConstants;
 import org.apache.sling.distribution.component.impl.SettingsUtils;
 import org.apache.sling.distribution.event.impl.DistributionEventFactory;
@@ -71,7 +71,7 @@
 import org.osgi.service.cm.ConfigurationAdmin;
 
 /**
- * An OSGi service factory for {@link org.apache.sling.distribution.agent.DistributionAgent}s which references already existing OSGi services.
+ * An OSGi service factory for {@link DistributionAgent}s which references already existing OSGi services.
  */
 @Component(metatype = true,
         label = "Apache Sling Distribution Agent - Forward Agents Factory",
diff --git a/src/main/java/org/apache/sling/distribution/agent/impl/QueueDistributionAgentFactory.java b/src/main/java/org/apache/sling/distribution/agent/impl/QueueDistributionAgentFactory.java
index 3dff208..fa92378 100644
--- a/src/main/java/org/apache/sling/distribution/agent/impl/QueueDistributionAgentFactory.java
+++ b/src/main/java/org/apache/sling/distribution/agent/impl/QueueDistributionAgentFactory.java
@@ -33,7 +33,7 @@
 import org.apache.sling.api.resource.ResourceResolverFactory;
 import org.apache.sling.commons.osgi.PropertiesUtil;
 import org.apache.sling.distribution.DistributionRequestType;
-import org.apache.sling.distribution.agent.DistributionAgent;
+import org.apache.sling.distribution.agent.spi.DistributionAgent;
 import org.apache.sling.distribution.component.impl.DistributionComponentConstants;
 import org.apache.sling.distribution.component.impl.SettingsUtils;
 import org.apache.sling.distribution.event.impl.DistributionEventFactory;
@@ -59,7 +59,7 @@
  * An OSGi service factory for "queuing agents" that queue resources from the local instance (and can be eventually
  * pulled from another remote "reverse agent").
  *
- * @see {@link org.apache.sling.distribution.agent.DistributionAgent}
+ * @see {@link DistributionAgent}
  */
 @Component(metatype = true,
         label = "Apache Sling Distribution Agent - Queue Agents Factory",
diff --git a/src/main/java/org/apache/sling/distribution/agent/impl/ReverseDistributionAgentFactory.java b/src/main/java/org/apache/sling/distribution/agent/impl/ReverseDistributionAgentFactory.java
index f25d6a9..7e9189b 100644
--- a/src/main/java/org/apache/sling/distribution/agent/impl/ReverseDistributionAgentFactory.java
+++ b/src/main/java/org/apache/sling/distribution/agent/impl/ReverseDistributionAgentFactory.java
@@ -35,7 +35,7 @@
 import org.apache.sling.api.resource.ResourceResolverFactory;
 import org.apache.sling.commons.osgi.PropertiesUtil;
 import org.apache.sling.distribution.DistributionRequestType;
-import org.apache.sling.distribution.agent.DistributionAgent;
+import org.apache.sling.distribution.agent.spi.DistributionAgent;
 import org.apache.sling.distribution.component.impl.DistributionComponentConstants;
 import org.apache.sling.distribution.component.impl.SettingsUtils;
 import org.apache.sling.distribution.event.impl.DistributionEventFactory;
@@ -63,7 +63,7 @@
 /**
  * An OSGi service factory for "reverse agents" that pull resources from remote instances (e.g. from "queueing agents").
  *
- * @see {@link org.apache.sling.distribution.agent.DistributionAgent}
+ * @see {@link DistributionAgent}
  */
 @Component(metatype = true,
         label = "Apache Sling Distribution Agent - Reverse Agents Factory",
diff --git a/src/main/java/org/apache/sling/distribution/agent/impl/SimpleDistributionAgent.java b/src/main/java/org/apache/sling/distribution/agent/impl/SimpleDistributionAgent.java
index c50fdf2..e9bed63 100644
--- a/src/main/java/org/apache/sling/distribution/agent/impl/SimpleDistributionAgent.java
+++ b/src/main/java/org/apache/sling/distribution/agent/impl/SimpleDistributionAgent.java
@@ -24,7 +24,7 @@
 import org.apache.sling.distribution.DistributionRequestState;
 import org.apache.sling.distribution.DistributionRequestType;
 import org.apache.sling.distribution.DistributionResponse;
-import org.apache.sling.distribution.agent.DistributionAgent;
+import org.apache.sling.distribution.agent.spi.DistributionAgent;
 import org.apache.sling.distribution.agent.DistributionAgentState;
 import org.apache.sling.distribution.common.DistributionException;
 import org.apache.sling.distribution.component.impl.DistributionComponentKind;
@@ -57,7 +57,7 @@
 import java.util.concurrent.atomic.AtomicInteger;
 
 /**
- * Basic implementation of a {@link org.apache.sling.distribution.agent.DistributionAgent}
+ * Basic implementation of a {@link DistributionAgent}
  */
 public class SimpleDistributionAgent implements DistributionAgent {
     private final static String DEFAULT_AGENT_SERVICE = "defaultAgentService";
diff --git a/src/main/java/org/apache/sling/distribution/agent/impl/SimpleDistributionAgentFactory.java b/src/main/java/org/apache/sling/distribution/agent/impl/SimpleDistributionAgentFactory.java
index 27c236c..2186610 100644
--- a/src/main/java/org/apache/sling/distribution/agent/impl/SimpleDistributionAgentFactory.java
+++ b/src/main/java/org/apache/sling/distribution/agent/impl/SimpleDistributionAgentFactory.java
@@ -33,7 +33,7 @@
 import org.apache.felix.scr.annotations.ReferencePolicy;
 import org.apache.sling.api.resource.ResourceResolverFactory;
 import org.apache.sling.commons.osgi.PropertiesUtil;
-import org.apache.sling.distribution.agent.DistributionAgent;
+import org.apache.sling.distribution.agent.spi.DistributionAgent;
 import org.apache.sling.distribution.component.impl.DistributionComponentConstants;
 import org.apache.sling.distribution.component.impl.SettingsUtils;
 import org.apache.sling.distribution.event.impl.DistributionEventFactory;
@@ -53,7 +53,7 @@
 import org.osgi.framework.BundleContext;
 
 /**
- * An OSGi service factory for {@link org.apache.sling.distribution.agent.DistributionAgent}s which references already existing OSGi services.
+ * An OSGi service factory for {@link DistributionAgent}s which references already existing OSGi services.
  */
 @Component(metatype = true,
         label = "Apache Sling Distribution Agent - Simple Agents Factory",
diff --git a/src/main/java/org/apache/sling/distribution/agent/impl/SyncDistributionAgentFactory.java b/src/main/java/org/apache/sling/distribution/agent/impl/SyncDistributionAgentFactory.java
index 0506ce0..b8cb5e0 100644
--- a/src/main/java/org/apache/sling/distribution/agent/impl/SyncDistributionAgentFactory.java
+++ b/src/main/java/org/apache/sling/distribution/agent/impl/SyncDistributionAgentFactory.java
@@ -23,7 +23,7 @@
 import org.apache.sling.api.resource.ResourceResolverFactory;
 import org.apache.sling.commons.osgi.PropertiesUtil;
 import org.apache.sling.distribution.DistributionRequestType;
-import org.apache.sling.distribution.agent.DistributionAgent;
+import org.apache.sling.distribution.agent.spi.DistributionAgent;
 import org.apache.sling.distribution.component.impl.DistributionComponentConstants;
 import org.apache.sling.distribution.component.impl.SettingsUtils;
 import org.apache.sling.distribution.event.impl.DistributionEventFactory;
@@ -54,7 +54,7 @@
 /**
  * An OSGi service factory for "synchronizing agents" that synchronize (pull and push) resources between remote instances.
  *
- * @see {@link org.apache.sling.distribution.agent.DistributionAgent}
+ * @see {@link DistributionAgent}
  */
 @Component(metatype = true,
         label = "Apache Sling Distribution Agent - Sync Agents Factory",
diff --git a/src/main/java/org/apache/sling/distribution/agent/impl/TriggerAgentRequestHandler.java b/src/main/java/org/apache/sling/distribution/agent/impl/TriggerAgentRequestHandler.java
index 07851dc..21b76c7 100644
--- a/src/main/java/org/apache/sling/distribution/agent/impl/TriggerAgentRequestHandler.java
+++ b/src/main/java/org/apache/sling/distribution/agent/impl/TriggerAgentRequestHandler.java
@@ -23,7 +23,7 @@
 
 import org.apache.sling.api.resource.ResourceResolver;
 import org.apache.sling.distribution.DistributionRequest;
-import org.apache.sling.distribution.agent.DistributionAgent;
+import org.apache.sling.distribution.agent.spi.DistributionAgent;
 import org.apache.sling.distribution.component.impl.DistributionComponentKind;
 import org.apache.sling.distribution.log.impl.DefaultDistributionLog;
 import org.apache.sling.distribution.trigger.DistributionRequestHandler;
diff --git a/src/main/java/org/apache/sling/distribution/agent/package-info.java b/src/main/java/org/apache/sling/distribution/agent/package-info.java
new file mode 100644
index 0000000..59b30d6
--- /dev/null
+++ b/src/main/java/org/apache/sling/distribution/agent/package-info.java
@@ -0,0 +1,24 @@
+/*
+ * 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.
+ */
+
+@Version("0.0.0")
+package org.apache.sling.distribution.agent;
+
+import aQute.bnd.annotation.Version;
+
diff --git a/src/main/java/org/apache/sling/distribution/agent/DistributionAgent.java b/src/main/java/org/apache/sling/distribution/agent/spi/DistributionAgent.java
similarity index 92%
rename from src/main/java/org/apache/sling/distribution/agent/DistributionAgent.java
rename to src/main/java/org/apache/sling/distribution/agent/spi/DistributionAgent.java
index f64f334..66b2ddb 100644
--- a/src/main/java/org/apache/sling/distribution/agent/DistributionAgent.java
+++ b/src/main/java/org/apache/sling/distribution/agent/spi/DistributionAgent.java
@@ -16,15 +16,16 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.sling.distribution.agent;
+package org.apache.sling.distribution.agent.spi;
 
 import javax.annotation.CheckForNull;
 import javax.annotation.Nonnull;
 
-import aQute.bnd.annotation.ProviderType;
+import aQute.bnd.annotation.ConsumerType;
 import org.apache.sling.api.resource.ResourceResolver;
 import org.apache.sling.distribution.DistributionRequest;
 import org.apache.sling.distribution.DistributionResponse;
+import org.apache.sling.distribution.agent.DistributionAgentState;
 import org.apache.sling.distribution.common.DistributionException;
 import org.apache.sling.distribution.log.spi.DistributionLog;
 import org.apache.sling.distribution.queue.spi.DistributionQueue;
@@ -36,7 +37,7 @@
  * specific path(s) which will resume pulling resources from a certain Sling instance and / or pushing resources to
  * other instances.
  */
-@ProviderType
+@ConsumerType
 public interface DistributionAgent {
 
     /**
@@ -77,7 +78,7 @@
      * The content to be sent will be assembled according to the information contained in the request.
      * A {@link org.apache.sling.distribution.DistributionResponse} holding the {@link org.apache.sling.distribution.DistributionRequestState}
      * of the provided request will be returned.
-     * Synchronous {@link org.apache.sling.distribution.agent.DistributionAgent}s will usually block until the execution has finished
+     * Synchronous {@link DistributionAgent}s will usually block until the execution has finished
      * while asynchronous agents will usually return the response as soon as the content to be distributed has been assembled
      * and scheduled for distribution.
      *
diff --git a/src/main/java/org/apache/sling/distribution/agent/spi/package-info.java b/src/main/java/org/apache/sling/distribution/agent/spi/package-info.java
new file mode 100644
index 0000000..e60a106
--- /dev/null
+++ b/src/main/java/org/apache/sling/distribution/agent/spi/package-info.java
@@ -0,0 +1,24 @@
+/*
+ * 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.
+ */
+
+@Version("0.0.0")
+package org.apache.sling.distribution.agent.spi;
+
+import aQute.bnd.annotation.Version;
+
diff --git a/src/main/java/org/apache/sling/distribution/component/impl/DefaultDistributionComponentProvider.java b/src/main/java/org/apache/sling/distribution/component/impl/DefaultDistributionComponentProvider.java
index 5745d38..1ba3743 100644
--- a/src/main/java/org/apache/sling/distribution/component/impl/DefaultDistributionComponentProvider.java
+++ b/src/main/java/org/apache/sling/distribution/component/impl/DefaultDistributionComponentProvider.java
@@ -31,7 +31,7 @@
 import org.apache.felix.scr.annotations.References;
 import org.apache.felix.scr.annotations.Service;
 import org.apache.sling.commons.osgi.PropertiesUtil;
-import org.apache.sling.distribution.agent.DistributionAgent;
+import org.apache.sling.distribution.agent.spi.DistributionAgent;
 import org.apache.sling.distribution.agent.impl.DistributionRequestAuthorizationStrategy;
 import org.apache.sling.distribution.packaging.DistributionPackageBuilder;
 import org.apache.sling.distribution.packaging.DistributionPackageExporter;
diff --git a/src/main/java/org/apache/sling/distribution/component/impl/DistributionComponentKind.java b/src/main/java/org/apache/sling/distribution/component/impl/DistributionComponentKind.java
index e34a2f0..f5316f8 100644
--- a/src/main/java/org/apache/sling/distribution/component/impl/DistributionComponentKind.java
+++ b/src/main/java/org/apache/sling/distribution/component/impl/DistributionComponentKind.java
@@ -34,7 +34,7 @@
 import java.util.Map;
 import java.util.Map.Entry;
 
-import org.apache.sling.distribution.agent.DistributionAgent;
+import org.apache.sling.distribution.agent.spi.DistributionAgent;
 import org.apache.sling.distribution.agent.impl.DistributionRequestAuthorizationStrategy;
 import org.apache.sling.distribution.agent.impl.ForwardDistributionAgentFactory;
 import org.apache.sling.distribution.agent.impl.PrivilegeDistributionRequestAuthorizationStrategy;
diff --git a/src/main/java/org/apache/sling/distribution/impl/DefaultDistributor.java b/src/main/java/org/apache/sling/distribution/impl/DefaultDistributor.java
index 4c84eb1..ef1bf87 100644
--- a/src/main/java/org/apache/sling/distribution/impl/DefaultDistributor.java
+++ b/src/main/java/org/apache/sling/distribution/impl/DefaultDistributor.java
@@ -29,7 +29,7 @@
 import org.apache.sling.distribution.DistributionRequestState;
 import org.apache.sling.distribution.DistributionResponse;
 import org.apache.sling.distribution.Distributor;
-import org.apache.sling.distribution.agent.DistributionAgent;
+import org.apache.sling.distribution.agent.spi.DistributionAgent;
 import org.apache.sling.distribution.component.impl.DistributionComponentProvider;
 import org.apache.sling.distribution.common.DistributionException;
 import org.slf4j.Logger;
diff --git a/src/main/java/org/apache/sling/distribution/log/spi/DistributionLog.java b/src/main/java/org/apache/sling/distribution/log/spi/DistributionLog.java
index d05a2bb..289f81b 100644
--- a/src/main/java/org/apache/sling/distribution/log/spi/DistributionLog.java
+++ b/src/main/java/org/apache/sling/distribution/log/spi/DistributionLog.java
@@ -25,7 +25,7 @@
 import aQute.bnd.annotation.ConsumerType;
 
 /**
- * The log of a distribution component activity (e.g. a {@link org.apache.sling.distribution.agent.DistributionAgent})
+ * The log of a distribution component activity (e.g. a DistributionAgent)
  */
 @ConsumerType
 public interface DistributionLog {
diff --git a/src/main/java/org/apache/sling/distribution/monitor/DistributionQueueHealthCheck.java b/src/main/java/org/apache/sling/distribution/monitor/DistributionQueueHealthCheck.java
index 15dc16d..38bf41e 100644
--- a/src/main/java/org/apache/sling/distribution/monitor/DistributionQueueHealthCheck.java
+++ b/src/main/java/org/apache/sling/distribution/monitor/DistributionQueueHealthCheck.java
@@ -35,7 +35,7 @@
 import org.apache.felix.scr.annotations.References;
 import org.apache.felix.scr.annotations.Service;
 import org.apache.sling.commons.osgi.PropertiesUtil;
-import org.apache.sling.distribution.agent.DistributionAgent;
+import org.apache.sling.distribution.agent.spi.DistributionAgent;
 import org.apache.sling.distribution.queue.spi.DistributionQueue;
 import org.apache.sling.distribution.queue.DistributionQueueEntry;
 import org.apache.sling.distribution.queue.DistributionQueueItemStatus;
diff --git a/src/main/java/org/apache/sling/distribution/monitor/impl/ForwardDistributionAgentMBeanImpl.java b/src/main/java/org/apache/sling/distribution/monitor/impl/ForwardDistributionAgentMBeanImpl.java
index 3baef0a..09a55f7 100644
--- a/src/main/java/org/apache/sling/distribution/monitor/impl/ForwardDistributionAgentMBeanImpl.java
+++ b/src/main/java/org/apache/sling/distribution/monitor/impl/ForwardDistributionAgentMBeanImpl.java
@@ -21,7 +21,7 @@
 import java.util.Map;
 
 import org.apache.sling.commons.osgi.PropertiesUtil;
-import org.apache.sling.distribution.agent.DistributionAgent;
+import org.apache.sling.distribution.agent.spi.DistributionAgent;
 
 /**
  * The ForwardDistributionAgent MBean implementation, based on the OSGi configuration.
diff --git a/src/main/java/org/apache/sling/distribution/monitor/impl/QueueDistributionAgentMBeanImpl.java b/src/main/java/org/apache/sling/distribution/monitor/impl/QueueDistributionAgentMBeanImpl.java
index ec9527b..1c7863c 100644
--- a/src/main/java/org/apache/sling/distribution/monitor/impl/QueueDistributionAgentMBeanImpl.java
+++ b/src/main/java/org/apache/sling/distribution/monitor/impl/QueueDistributionAgentMBeanImpl.java
@@ -21,7 +21,7 @@
 import java.util.Map;
 
 import org.apache.sling.commons.osgi.PropertiesUtil;
-import org.apache.sling.distribution.agent.DistributionAgent;
+import org.apache.sling.distribution.agent.spi.DistributionAgent;
 
 /**
  * The QueueDistributionAgent MBean implementation, based on the OSGi configuration.
diff --git a/src/main/java/org/apache/sling/distribution/monitor/impl/ReverseDistributionAgentMBeanImpl.java b/src/main/java/org/apache/sling/distribution/monitor/impl/ReverseDistributionAgentMBeanImpl.java
index c29323b..430b2e6 100644
--- a/src/main/java/org/apache/sling/distribution/monitor/impl/ReverseDistributionAgentMBeanImpl.java
+++ b/src/main/java/org/apache/sling/distribution/monitor/impl/ReverseDistributionAgentMBeanImpl.java
@@ -21,7 +21,7 @@
 import java.util.Map;
 
 import org.apache.sling.commons.osgi.PropertiesUtil;
-import org.apache.sling.distribution.agent.DistributionAgent;
+import org.apache.sling.distribution.agent.spi.DistributionAgent;
 
 /**
  * The ReverseDistributionAgent MBean implementation, based on the OSGi configuration.
diff --git a/src/main/java/org/apache/sling/distribution/monitor/impl/SimpleDistributionAgentMBeanImpl.java b/src/main/java/org/apache/sling/distribution/monitor/impl/SimpleDistributionAgentMBeanImpl.java
index 1ec1880..47187f7 100644
--- a/src/main/java/org/apache/sling/distribution/monitor/impl/SimpleDistributionAgentMBeanImpl.java
+++ b/src/main/java/org/apache/sling/distribution/monitor/impl/SimpleDistributionAgentMBeanImpl.java
@@ -21,7 +21,7 @@
 import java.util.Map;
 
 import org.apache.sling.commons.osgi.PropertiesUtil;
-import org.apache.sling.distribution.agent.DistributionAgent;
+import org.apache.sling.distribution.agent.spi.DistributionAgent;
 
 /**
  * The SimpleDistributionAgent MBean implementation, based on the OSGi configuration.
diff --git a/src/main/java/org/apache/sling/distribution/monitor/impl/SyncDistributionAgentMBeanImpl.java b/src/main/java/org/apache/sling/distribution/monitor/impl/SyncDistributionAgentMBeanImpl.java
index bcbfd92..8ba28af 100644
--- a/src/main/java/org/apache/sling/distribution/monitor/impl/SyncDistributionAgentMBeanImpl.java
+++ b/src/main/java/org/apache/sling/distribution/monitor/impl/SyncDistributionAgentMBeanImpl.java
@@ -21,7 +21,7 @@
 import java.util.Map;
 
 import org.apache.sling.commons.osgi.PropertiesUtil;
-import org.apache.sling.distribution.agent.DistributionAgent;
+import org.apache.sling.distribution.agent.spi.DistributionAgent;
 
 /**
  * The SyncDistributionAgent MBean implementation, based on the OSGi configuration.
diff --git a/src/main/java/org/apache/sling/distribution/packaging/impl/exporter/AgentDistributionPackageExporter.java b/src/main/java/org/apache/sling/distribution/packaging/impl/exporter/AgentDistributionPackageExporter.java
index 0bf46aa..cf2f7b1 100644
--- a/src/main/java/org/apache/sling/distribution/packaging/impl/exporter/AgentDistributionPackageExporter.java
+++ b/src/main/java/org/apache/sling/distribution/packaging/impl/exporter/AgentDistributionPackageExporter.java
@@ -23,7 +23,7 @@
 import org.apache.sling.api.resource.ResourceResolver;
 import org.apache.sling.distribution.DistributionRequest;
 import org.apache.sling.distribution.DistributionRequestType;
-import org.apache.sling.distribution.agent.DistributionAgent;
+import org.apache.sling.distribution.agent.spi.DistributionAgent;
 import org.apache.sling.distribution.common.DistributionException;
 import org.apache.sling.distribution.log.spi.DistributionLog;
 import org.apache.sling.distribution.log.impl.DefaultDistributionLog;
diff --git a/src/main/java/org/apache/sling/distribution/packaging/impl/exporter/AgentDistributionPackageExporterFactory.java b/src/main/java/org/apache/sling/distribution/packaging/impl/exporter/AgentDistributionPackageExporterFactory.java
index 73b9b1f..3837b7a 100644
--- a/src/main/java/org/apache/sling/distribution/packaging/impl/exporter/AgentDistributionPackageExporterFactory.java
+++ b/src/main/java/org/apache/sling/distribution/packaging/impl/exporter/AgentDistributionPackageExporterFactory.java
@@ -31,7 +31,7 @@
 import org.apache.sling.api.resource.ResourceResolver;
 import org.apache.sling.commons.osgi.PropertiesUtil;
 import org.apache.sling.distribution.DistributionRequest;
-import org.apache.sling.distribution.agent.DistributionAgent;
+import org.apache.sling.distribution.agent.spi.DistributionAgent;
 import org.apache.sling.distribution.common.DistributionException;
 import org.apache.sling.distribution.component.impl.DistributionComponentConstants;
 import org.apache.sling.distribution.packaging.DistributionPackage;
diff --git a/src/main/java/org/apache/sling/distribution/queue/impl/jobhandling/DistributionAgentJobConsumer.java b/src/main/java/org/apache/sling/distribution/queue/impl/jobhandling/DistributionAgentJobConsumer.java
index 1e2a142..2bd37e0 100644
--- a/src/main/java/org/apache/sling/distribution/queue/impl/jobhandling/DistributionAgentJobConsumer.java
+++ b/src/main/java/org/apache/sling/distribution/queue/impl/jobhandling/DistributionAgentJobConsumer.java
@@ -18,6 +18,7 @@
  */
 package org.apache.sling.distribution.queue.impl.jobhandling;
 
+import org.apache.sling.distribution.agent.spi.DistributionAgent;
 import org.apache.sling.distribution.queue.DistributionQueueEntry;
 import org.apache.sling.distribution.queue.impl.DistributionQueueProcessor;
 import org.apache.sling.event.jobs.Job;
@@ -26,7 +27,7 @@
 import org.slf4j.LoggerFactory;
 
 /**
- * {@link JobConsumer} for {@link org.apache.sling.distribution.agent.DistributionAgent}s using {@link JobHandlingDistributionQueue}
+ * {@link JobConsumer} for {@link DistributionAgent}s using {@link JobHandlingDistributionQueue}
  */
 class DistributionAgentJobConsumer implements JobConsumer {
 
diff --git a/src/main/java/org/apache/sling/distribution/queue/spi/DistributionQueue.java b/src/main/java/org/apache/sling/distribution/queue/spi/DistributionQueue.java
index 66642d6..f520d79 100644
--- a/src/main/java/org/apache/sling/distribution/queue/spi/DistributionQueue.java
+++ b/src/main/java/org/apache/sling/distribution/queue/spi/DistributionQueue.java
@@ -22,6 +22,7 @@
 import javax.annotation.Nonnull;
 
 import aQute.bnd.annotation.ConsumerType;
+import org.apache.sling.distribution.agent.spi.DistributionAgent;
 import org.apache.sling.distribution.packaging.DistributionPackage;
 import org.apache.sling.distribution.queue.DistributionQueueEntry;
 import org.apache.sling.distribution.queue.DistributionQueueItem;
@@ -31,7 +32,7 @@
 
 /**
  * A queue is responsible for collecting the {@link DistributionPackage}s
- * exported by a {@link org.apache.sling.distribution.agent.DistributionAgent} in
+ * exported by a {@link DistributionAgent} in
  * order to be able to process them also when there are multiple (concurrent)
  * {@link org.apache.sling.distribution.DistributionRequest}s executed
  * on that same agent.
diff --git a/src/main/java/org/apache/sling/distribution/resources/impl/ExtendedDistributionServiceResourceProvider.java b/src/main/java/org/apache/sling/distribution/resources/impl/ExtendedDistributionServiceResourceProvider.java
index 6d5ae84..57f75d1 100644
--- a/src/main/java/org/apache/sling/distribution/resources/impl/ExtendedDistributionServiceResourceProvider.java
+++ b/src/main/java/org/apache/sling/distribution/resources/impl/ExtendedDistributionServiceResourceProvider.java
@@ -26,7 +26,7 @@
 import java.util.Map;
 
 
-import org.apache.sling.distribution.agent.DistributionAgent;
+import org.apache.sling.distribution.agent.spi.DistributionAgent;
 import org.apache.sling.distribution.agent.DistributionAgentState;
 import org.apache.sling.distribution.component.impl.DistributionComponent;
 import org.apache.sling.distribution.component.impl.DistributionComponentKind;
diff --git a/src/main/java/org/apache/sling/distribution/servlet/DistributionAgentCreationFilter.java b/src/main/java/org/apache/sling/distribution/servlet/DistributionAgentCreationFilter.java
index 0721255..af24cbb 100644
--- a/src/main/java/org/apache/sling/distribution/servlet/DistributionAgentCreationFilter.java
+++ b/src/main/java/org/apache/sling/distribution/servlet/DistributionAgentCreationFilter.java
@@ -33,7 +33,7 @@
 import org.apache.felix.scr.annotations.Property;
 import org.apache.felix.scr.annotations.Service;
 import org.apache.sling.api.SlingHttpServletRequest;
-import org.apache.sling.distribution.agent.DistributionAgent;
+import org.apache.sling.distribution.agent.spi.DistributionAgent;
 import org.osgi.framework.BundleContext;
 import org.osgi.framework.InvalidSyntaxException;
 import org.osgi.framework.ServiceReference;
diff --git a/src/main/java/org/apache/sling/distribution/servlet/DistributionAgentLogServlet.java b/src/main/java/org/apache/sling/distribution/servlet/DistributionAgentLogServlet.java
index 95ad92b..1e2e485 100644
--- a/src/main/java/org/apache/sling/distribution/servlet/DistributionAgentLogServlet.java
+++ b/src/main/java/org/apache/sling/distribution/servlet/DistributionAgentLogServlet.java
@@ -27,6 +27,7 @@
 import org.apache.sling.api.SlingHttpServletResponse;
 import org.apache.sling.api.servlets.SlingAllMethodsServlet;
 import org.apache.sling.distribution.DistributionRequest;
+import org.apache.sling.distribution.agent.spi.DistributionAgent;
 import org.apache.sling.distribution.log.spi.DistributionLog;
 import org.apache.sling.distribution.resources.DistributionResourceTypes;
 import org.apache.sling.distribution.util.RequestUtils;
@@ -34,7 +35,7 @@
 import org.slf4j.LoggerFactory;
 
 /**
- * Servlet to ask {@link org.apache.sling.distribution.agent.DistributionAgent}s to distribute (via HTTP POST).
+ * Servlet to ask {@link DistributionAgent}s to distribute (via HTTP POST).
  */
 @SuppressWarnings("serial")
 @SlingServlet(resourceTypes = DistributionResourceTypes.LOG_RESOURCE_TYPE, methods = "GET", extensions = "txt")
diff --git a/src/main/java/org/apache/sling/distribution/servlet/DistributionAgentQueueServlet.java b/src/main/java/org/apache/sling/distribution/servlet/DistributionAgentQueueServlet.java
index bc0db4e..31f61fa 100644
--- a/src/main/java/org/apache/sling/distribution/servlet/DistributionAgentQueueServlet.java
+++ b/src/main/java/org/apache/sling/distribution/servlet/DistributionAgentQueueServlet.java
@@ -28,7 +28,7 @@
 import org.apache.sling.api.SlingHttpServletResponse;
 import org.apache.sling.api.resource.ResourceResolver;
 import org.apache.sling.api.servlets.SlingAllMethodsServlet;
-import org.apache.sling.distribution.agent.DistributionAgent;
+import org.apache.sling.distribution.agent.spi.DistributionAgent;
 import org.apache.sling.distribution.common.DistributionException;
 import org.apache.sling.distribution.packaging.DistributionPackage;
 import org.apache.sling.distribution.packaging.DistributionPackageInfo;
diff --git a/src/main/java/org/apache/sling/distribution/servlet/DistributionAgentServlet.java b/src/main/java/org/apache/sling/distribution/servlet/DistributionAgentServlet.java
index 3121bdc..edada7c 100644
--- a/src/main/java/org/apache/sling/distribution/servlet/DistributionAgentServlet.java
+++ b/src/main/java/org/apache/sling/distribution/servlet/DistributionAgentServlet.java
@@ -28,14 +28,14 @@
 import org.apache.sling.api.servlets.SlingAllMethodsServlet;
 import org.apache.sling.distribution.DistributionRequest;
 import org.apache.sling.distribution.DistributionResponse;
-import org.apache.sling.distribution.agent.DistributionAgent;
+import org.apache.sling.distribution.agent.spi.DistributionAgent;
 import org.apache.sling.distribution.resources.DistributionResourceTypes;
 import org.apache.sling.distribution.util.RequestUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 /**
- * Servlet to ask {@link org.apache.sling.distribution.agent.DistributionAgent}s to distribute (via HTTP POST).
+ * Servlet to ask {@link DistributionAgent}s to distribute (via HTTP POST).
  */
 @SuppressWarnings("serial")
 @SlingServlet(resourceTypes = DistributionResourceTypes.AGENT_RESOURCE_TYPE, methods = "POST")
diff --git a/src/main/java/org/apache/sling/distribution/trigger/impl/ScheduledDistributionTrigger.java b/src/main/java/org/apache/sling/distribution/trigger/impl/ScheduledDistributionTrigger.java
index c243b14..ad0464b 100644
--- a/src/main/java/org/apache/sling/distribution/trigger/impl/ScheduledDistributionTrigger.java
+++ b/src/main/java/org/apache/sling/distribution/trigger/impl/ScheduledDistributionTrigger.java
@@ -30,6 +30,7 @@
 import org.apache.sling.commons.scheduler.Scheduler;
 import org.apache.sling.distribution.DistributionRequestType;
 import org.apache.sling.distribution.SimpleDistributionRequest;
+import org.apache.sling.distribution.agent.spi.DistributionAgent;
 import org.apache.sling.distribution.common.DistributionException;
 import org.apache.sling.distribution.trigger.DistributionRequestHandler;
 import org.apache.sling.distribution.trigger.DistributionTrigger;
@@ -39,7 +40,7 @@
 
 /**
  * {@link org.apache.sling.distribution.trigger.DistributionTrigger} to schedule distributions on a certain
- * {@link org.apache.sling.distribution.agent.DistributionAgent}
+ * {@link DistributionAgent}
  */
 public class ScheduledDistributionTrigger implements DistributionTrigger {
     private final static String SCHEDULE_NAME = "scheduledEventTrigger";
diff --git a/src/test/java/org/apache/sling/distribution/agent/impl/TriggerAgentRequestHandlerTest.java b/src/test/java/org/apache/sling/distribution/agent/impl/TriggerAgentRequestHandlerTest.java
index 9f949e4..14ba6f7 100644
--- a/src/test/java/org/apache/sling/distribution/agent/impl/TriggerAgentRequestHandlerTest.java
+++ b/src/test/java/org/apache/sling/distribution/agent/impl/TriggerAgentRequestHandlerTest.java
@@ -20,7 +20,7 @@
 
 import org.apache.sling.api.resource.ResourceResolver;
 import org.apache.sling.distribution.DistributionRequest;
-import org.apache.sling.distribution.agent.DistributionAgent;
+import org.apache.sling.distribution.agent.spi.DistributionAgent;
 import org.apache.sling.distribution.log.impl.DefaultDistributionLog;
 import org.junit.Test;
 
diff --git a/src/test/java/org/apache/sling/distribution/monitor/DistributionQueueHealthCheckTest.java b/src/test/java/org/apache/sling/distribution/monitor/DistributionQueueHealthCheckTest.java
index 68ce1a4..3c33bab 100644
--- a/src/test/java/org/apache/sling/distribution/monitor/DistributionQueueHealthCheckTest.java
+++ b/src/test/java/org/apache/sling/distribution/monitor/DistributionQueueHealthCheckTest.java
@@ -24,7 +24,7 @@
 import java.util.HashMap;
 import java.util.List;
 
-import org.apache.sling.distribution.agent.DistributionAgent;
+import org.apache.sling.distribution.agent.spi.DistributionAgent;
 import org.apache.sling.distribution.queue.DistributionQueueItemState;
 import org.apache.sling.distribution.queue.spi.DistributionQueue;
 import org.apache.sling.distribution.queue.DistributionQueueEntry;
diff --git a/src/test/java/org/apache/sling/distribution/monitor/impl/ForwardDistributionAgentMBeanTest.java b/src/test/java/org/apache/sling/distribution/monitor/impl/ForwardDistributionAgentMBeanTest.java
index 8372600..5f25692 100644
--- a/src/test/java/org/apache/sling/distribution/monitor/impl/ForwardDistributionAgentMBeanTest.java
+++ b/src/test/java/org/apache/sling/distribution/monitor/impl/ForwardDistributionAgentMBeanTest.java
@@ -25,7 +25,7 @@
 import java.util.HashMap;
 import java.util.Map;
 
-import org.apache.sling.distribution.agent.DistributionAgent;
+import org.apache.sling.distribution.agent.spi.DistributionAgent;
 import org.apache.sling.distribution.agent.DistributionAgentState;
 import org.junit.Test;
 
diff --git a/src/test/java/org/apache/sling/distribution/monitor/impl/QueueDistributionAgentMBeanTest.java b/src/test/java/org/apache/sling/distribution/monitor/impl/QueueDistributionAgentMBeanTest.java
index f9426e4..fe77c0f 100644
--- a/src/test/java/org/apache/sling/distribution/monitor/impl/QueueDistributionAgentMBeanTest.java
+++ b/src/test/java/org/apache/sling/distribution/monitor/impl/QueueDistributionAgentMBeanTest.java
@@ -25,7 +25,7 @@
 import java.util.HashMap;
 import java.util.Map;
 
-import org.apache.sling.distribution.agent.DistributionAgent;
+import org.apache.sling.distribution.agent.spi.DistributionAgent;
 import org.apache.sling.distribution.agent.DistributionAgentState;
 import org.junit.Test;
 
diff --git a/src/test/java/org/apache/sling/distribution/monitor/impl/ReverseDistributionAgentMBeanTest.java b/src/test/java/org/apache/sling/distribution/monitor/impl/ReverseDistributionAgentMBeanTest.java
index 3886706..1854621 100644
--- a/src/test/java/org/apache/sling/distribution/monitor/impl/ReverseDistributionAgentMBeanTest.java
+++ b/src/test/java/org/apache/sling/distribution/monitor/impl/ReverseDistributionAgentMBeanTest.java
@@ -25,7 +25,7 @@
 import java.util.HashMap;
 import java.util.Map;
 
-import org.apache.sling.distribution.agent.DistributionAgent;
+import org.apache.sling.distribution.agent.spi.DistributionAgent;
 import org.apache.sling.distribution.agent.DistributionAgentState;
 import org.junit.Test;
 
diff --git a/src/test/java/org/apache/sling/distribution/monitor/impl/SimpleDistributionAgentMBeanTest.java b/src/test/java/org/apache/sling/distribution/monitor/impl/SimpleDistributionAgentMBeanTest.java
index 7e259f5..e94336c 100644
--- a/src/test/java/org/apache/sling/distribution/monitor/impl/SimpleDistributionAgentMBeanTest.java
+++ b/src/test/java/org/apache/sling/distribution/monitor/impl/SimpleDistributionAgentMBeanTest.java
@@ -25,7 +25,7 @@
 import java.util.HashMap;
 import java.util.Map;
 
-import org.apache.sling.distribution.agent.DistributionAgent;
+import org.apache.sling.distribution.agent.spi.DistributionAgent;
 import org.apache.sling.distribution.agent.DistributionAgentState;
 import org.junit.Test;
 
diff --git a/src/test/java/org/apache/sling/distribution/monitor/impl/SyncDistributionAgentMBeanTest.java b/src/test/java/org/apache/sling/distribution/monitor/impl/SyncDistributionAgentMBeanTest.java
index 4b0ff8d..03b8a6c 100644
--- a/src/test/java/org/apache/sling/distribution/monitor/impl/SyncDistributionAgentMBeanTest.java
+++ b/src/test/java/org/apache/sling/distribution/monitor/impl/SyncDistributionAgentMBeanTest.java
@@ -25,7 +25,7 @@
 import java.util.HashMap;
 import java.util.Map;
 
-import org.apache.sling.distribution.agent.DistributionAgent;
+import org.apache.sling.distribution.agent.spi.DistributionAgent;
 import org.apache.sling.distribution.agent.DistributionAgentState;
 import org.junit.Test;
 
diff --git a/src/test/java/org/apache/sling/distribution/packaging/impl/exporter/AgentDistributionPackageExporterTest.java b/src/test/java/org/apache/sling/distribution/packaging/impl/exporter/AgentDistributionPackageExporterTest.java
index e6351c8..80582dd 100644
--- a/src/test/java/org/apache/sling/distribution/packaging/impl/exporter/AgentDistributionPackageExporterTest.java
+++ b/src/test/java/org/apache/sling/distribution/packaging/impl/exporter/AgentDistributionPackageExporterTest.java
@@ -24,7 +24,7 @@
 import org.apache.sling.distribution.DistributionRequestType;
 import org.apache.sling.distribution.DistributionResponse;
 import org.apache.sling.distribution.SimpleDistributionRequest;
-import org.apache.sling.distribution.agent.DistributionAgent;
+import org.apache.sling.distribution.agent.spi.DistributionAgent;
 import org.apache.sling.distribution.packaging.DistributionPackageProcessor;
 import org.apache.sling.distribution.packaging.DistributionPackage;
 import org.apache.sling.distribution.packaging.DistributionPackageBuilderProvider;