You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by mp...@apache.org on 2014/11/25 11:16:10 UTC

svn commit: r1641561 [1/3] - in /sling/trunk/contrib/extensions/distribution: api/src/main/java/org/apache/sling/distribution/agent/ api/src/main/java/org/apache/sling/distribution/component/ api/src/main/java/org/apache/sling/distribution/packaging/ a...

Author: mpetria
Date: Tue Nov 25 10:16:08 2014
New Revision: 1641561

URL: http://svn.apache.org/r1641561
Log:
SLING-4514: Generating OSGI configs from content and starting services using osgi services

Added:
    sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/agent/impl/PrivilegeDistributionRequestAuthorizationStrategyFactory.java
    sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/component/impl/DefaultDistributionComponentManager.java
    sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/component/impl/DistributionComponentUtils.java
    sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/serialization/impl/vlt/FileVaultDistributionPackageBuilderFactory.java
    sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/trigger/impl/LocalDistributionTriggerFactory.java
    sling/trunk/contrib/extensions/distribution/core/src/test/java/org/apache/sling/distribution/component/impl/DistributionComponentUtilsTest.java
    sling/trunk/contrib/extensions/distribution/sample/src/main/resources/SLING-CONTENT/libs/sling/distribution/install.osgi.author/
    sling/trunk/contrib/extensions/distribution/sample/src/main/resources/SLING-CONTENT/libs/sling/distribution/install.osgi.author/org.apache.sling.distribution.transport.authentication.impl.UserCredentialsTransportAuthenticationProviderFactory-publishAdmin.json
    sling/trunk/contrib/extensions/distribution/sample/src/main/resources/SLING-CONTENT/libs/sling/distribution/install.osgi.author/publish/
    sling/trunk/contrib/extensions/distribution/sample/src/main/resources/SLING-CONTENT/libs/sling/distribution/install.osgi.author/publish-reverse/
    sling/trunk/contrib/extensions/distribution/sample/src/main/resources/SLING-CONTENT/libs/sling/distribution/install.osgi.author/publish-reverse/org.apache.sling.distribution.agent.impl.SimpleDistributionAgentFactory-publish-reverse.json
    sling/trunk/contrib/extensions/distribution/sample/src/main/resources/SLING-CONTENT/libs/sling/distribution/install.osgi.author/publish-reverse/org.apache.sling.distribution.packaging.impl.exporter.RemoteDistributionPackageExporterFactory-publish-reverse.json
    sling/trunk/contrib/extensions/distribution/sample/src/main/resources/SLING-CONTENT/libs/sling/distribution/install.osgi.author/publish-reverse/org.apache.sling.distribution.packaging.impl.importer.LocalDistributionPackageImporterFactory-publish-reverse.json
    sling/trunk/contrib/extensions/distribution/sample/src/main/resources/SLING-CONTENT/libs/sling/distribution/install.osgi.author/publish-reverse/org.apache.sling.distribution.trigger.impl.LocalDistributionTriggerFactory-publish-reverse-scheduled.json
    sling/trunk/contrib/extensions/distribution/sample/src/main/resources/SLING-CONTENT/libs/sling/distribution/install.osgi.author/publish/org.apache.sling.distribution.agent.impl.SimpleDistributionAgentFactory-publish.json
    sling/trunk/contrib/extensions/distribution/sample/src/main/resources/SLING-CONTENT/libs/sling/distribution/install.osgi.author/publish/org.apache.sling.distribution.packaging.impl.exporter.LocalDistributionPackageExporterFactory-publish.json
    sling/trunk/contrib/extensions/distribution/sample/src/main/resources/SLING-CONTENT/libs/sling/distribution/install.osgi.author/publish/org.apache.sling.distribution.packaging.impl.importer.RemoteDistributionPackageImporterFactory-publish.json
    sling/trunk/contrib/extensions/distribution/sample/src/main/resources/SLING-CONTENT/libs/sling/distribution/install.osgi.author/pubsync/
    sling/trunk/contrib/extensions/distribution/sample/src/main/resources/SLING-CONTENT/libs/sling/distribution/install.osgi.author/pubsync/org.apache.sling.distribution.agent.impl.SimpleDistributionAgentFactory-pubsync.json
    sling/trunk/contrib/extensions/distribution/sample/src/main/resources/SLING-CONTENT/libs/sling/distribution/install.osgi.author/pubsync/org.apache.sling.distribution.packaging.impl.exporter.RemoteDistributionPackageExporterFactory-pubsync.json
    sling/trunk/contrib/extensions/distribution/sample/src/main/resources/SLING-CONTENT/libs/sling/distribution/install.osgi.author/pubsync/org.apache.sling.distribution.packaging.impl.importer.RemoteDistributionPackageImporterFactory-pubsync.json
    sling/trunk/contrib/extensions/distribution/sample/src/main/resources/SLING-CONTENT/libs/sling/distribution/install.osgi.publish/
    sling/trunk/contrib/extensions/distribution/sample/src/main/resources/SLING-CONTENT/libs/sling/distribution/install.osgi.publish/cache-flush/
    sling/trunk/contrib/extensions/distribution/sample/src/main/resources/SLING-CONTENT/libs/sling/distribution/install.osgi.publish/cache-flush/org.apache.sling.distribution.agent.impl.SimpleDistributionAgentFactory-cache-flush.json
    sling/trunk/contrib/extensions/distribution/sample/src/main/resources/SLING-CONTENT/libs/sling/distribution/install.osgi.publish/cache-flush/org.apache.sling.distribution.packaging.impl.importer.AdvancedRemoteDistributionPackageImporter-cache-flush.json
    sling/trunk/contrib/extensions/distribution/sample/src/main/resources/SLING-CONTENT/libs/sling/distribution/install.osgi.publish/org.apache.sling.distribution.packaging.impl.exporter.AgentDistributionPackageExporterFactory-reverse.json
    sling/trunk/contrib/extensions/distribution/sample/src/main/resources/SLING-CONTENT/libs/sling/distribution/install.osgi.publish/org.apache.sling.distribution.packaging.impl.exporter.LocalDistributionPackageExporterFactory-default.json
    sling/trunk/contrib/extensions/distribution/sample/src/main/resources/SLING-CONTENT/libs/sling/distribution/install.osgi.publish/org.apache.sling.distribution.packaging.impl.importer.LocalDistributionPackageImporterFactory-default.json
    sling/trunk/contrib/extensions/distribution/sample/src/main/resources/SLING-CONTENT/libs/sling/distribution/install.osgi.publish/reverse/
    sling/trunk/contrib/extensions/distribution/sample/src/main/resources/SLING-CONTENT/libs/sling/distribution/install.osgi.publish/reverse/org.apache.sling.distribution.agent.impl.SimpleDistributionAgentFactory-reverse.json
    sling/trunk/contrib/extensions/distribution/sample/src/main/resources/SLING-CONTENT/libs/sling/distribution/install.osgi.publish/reverse/org.apache.sling.distribution.packaging.impl.exporter.LocalDistributionPackageExporterFactory-reverse.json
    sling/trunk/contrib/extensions/distribution/sample/src/main/resources/SLING-CONTENT/libs/sling/distribution/install.osgi.publish/reverse/org.apache.sling.distribution.packaging.impl.importer.LocalDistributionPackageImporterFactory-reverse.json
    sling/trunk/contrib/extensions/distribution/sample/src/main/resources/SLING-CONTENT/libs/sling/distribution/install.osgi.publish/reverse/org.apache.sling.distribution.trigger.impl.LocalDistributionTriggerFactory-reverse-userGeneratedContent.json
    sling/trunk/contrib/extensions/distribution/sample/src/main/resources/SLING-CONTENT/libs/sling/distribution/install.publish/org.apache.sling.distribution.component.impl.ResourceBasedDistributionComponentFactory-agents.json
    sling/trunk/contrib/extensions/distribution/sample/src/main/resources/SLING-CONTENT/libs/sling/distribution/install/org.apache.sling.distribution.agent.impl.PrivilegeDistributionRequestAuthorizationStrategyFactory-privilegeRead.json
    sling/trunk/contrib/extensions/distribution/sample/src/main/resources/SLING-CONTENT/libs/sling/distribution/install/org.apache.sling.distribution.serialization.impl.vlt.FileVaultDistributionPackageBuilderFactory-vlt.json
    sling/trunk/contrib/extensions/distribution/sample/src/main/resources/SLING-CONTENT/libs/sling/distribution/settings.author/
    sling/trunk/contrib/extensions/distribution/sample/src/main/resources/SLING-CONTENT/libs/sling/distribution/settings.author/agents/
    sling/trunk/contrib/extensions/distribution/sample/src/main/resources/SLING-CONTENT/libs/sling/distribution/settings.author/agents/publish-reverse.json
    sling/trunk/contrib/extensions/distribution/sample/src/main/resources/SLING-CONTENT/libs/sling/distribution/settings.author/agents/publish.json
    sling/trunk/contrib/extensions/distribution/sample/src/main/resources/SLING-CONTENT/libs/sling/distribution/settings.author/agents/pubsync.json
    sling/trunk/contrib/extensions/distribution/sample/src/main/resources/SLING-CONTENT/libs/sling/distribution/settings.author/defaults/
    sling/trunk/contrib/extensions/distribution/sample/src/main/resources/SLING-CONTENT/libs/sling/distribution/settings.author/defaults/agents/
    sling/trunk/contrib/extensions/distribution/sample/src/main/resources/SLING-CONTENT/libs/sling/distribution/settings.author/defaults/agents/global.json
    sling/trunk/contrib/extensions/distribution/sample/src/main/resources/SLING-CONTENT/libs/sling/distribution/settings.publish/
    sling/trunk/contrib/extensions/distribution/sample/src/main/resources/SLING-CONTENT/libs/sling/distribution/settings.publish/agents/
    sling/trunk/contrib/extensions/distribution/sample/src/main/resources/SLING-CONTENT/libs/sling/distribution/settings.publish/agents/reverse.json
    sling/trunk/contrib/extensions/distribution/sample/src/main/resources/SLING-CONTENT/libs/sling/distribution/settings.publish/defaults/
    sling/trunk/contrib/extensions/distribution/sample/src/main/resources/SLING-CONTENT/libs/sling/distribution/settings.publish/defaults/agents/
    sling/trunk/contrib/extensions/distribution/sample/src/main/resources/SLING-CONTENT/libs/sling/distribution/settings.publish/defaults/agents/global.json
Removed:
    sling/trunk/contrib/extensions/distribution/api/src/main/java/org/apache/sling/distribution/component/
    sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/agent/impl/CoordinatingDistributionAgentFactory.java
    sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/component/impl/DefaultDistributionComponentFactory.java
    sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/component/impl/DefaultDistributionComponentFactoryConstants.java
    sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/component/impl/DistributionComponentFactoryManager.java
    sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/component/impl/GenericDistributionComponentFactory.java
    sling/trunk/contrib/extensions/distribution/core/src/test/java/org/apache/sling/distribution/agent/impl/CoordinatingDistributionAgentFactoryTest.java
    sling/trunk/contrib/extensions/distribution/core/src/test/java/org/apache/sling/distribution/component/impl/DefaultDistributionComponentFactoryTest.java
    sling/trunk/contrib/extensions/distribution/sample/src/main/resources/SLING-CONTENT/libs/sling/distribution/install.author/org.apache.sling.distribution.agent.impl.CoordinatingDistributionAgentFactory-pubsync.json
    sling/trunk/contrib/extensions/distribution/sample/src/main/resources/SLING-CONTENT/libs/sling/distribution/install.author/org.apache.sling.distribution.agent.impl.SimpleDistributionAgentFactory-publish-reverse.json
    sling/trunk/contrib/extensions/distribution/sample/src/main/resources/SLING-CONTENT/libs/sling/distribution/install.author/org.apache.sling.distribution.agent.impl.SimpleDistributionAgentFactory-publish.json
    sling/trunk/contrib/extensions/distribution/sample/src/main/resources/SLING-CONTENT/libs/sling/distribution/install.author/org.apache.sling.distribution.component.impl.GenericDistributionComponentFactory-trigger-remote-event.json
    sling/trunk/contrib/extensions/distribution/sample/src/main/resources/SLING-CONTENT/libs/sling/distribution/install.publish/org.apache.sling.distribution.agent.impl.SimpleDistributionAgentFactory-cache-flush.json
    sling/trunk/contrib/extensions/distribution/sample/src/main/resources/SLING-CONTENT/libs/sling/distribution/install.publish/org.apache.sling.distribution.agent.impl.SimpleDistributionAgentFactory-reverse.json
    sling/trunk/contrib/extensions/distribution/sample/src/main/resources/SLING-CONTENT/libs/sling/distribution/install.publish/org.apache.sling.distribution.component.impl.GenericDistributionComponentFactory-trigger-content-changed.json
    sling/trunk/contrib/extensions/distribution/sample/src/main/resources/SLING-CONTENT/libs/sling/distribution/install.publish/org.apache.sling.distribution.packaging.impl.importer.AdvancedRemoteDistributionPackageImporter-cache-flush.json
    sling/trunk/contrib/extensions/distribution/sample/src/main/resources/SLING-CONTENT/libs/sling/distribution/jcrsettings/
Modified:
    sling/trunk/contrib/extensions/distribution/api/src/main/java/org/apache/sling/distribution/agent/DistributionAgent.java
    sling/trunk/contrib/extensions/distribution/api/src/main/java/org/apache/sling/distribution/agent/DistributionRequestAuthorizationStrategy.java
    sling/trunk/contrib/extensions/distribution/api/src/main/java/org/apache/sling/distribution/packaging/DistributionPackageExporter.java
    sling/trunk/contrib/extensions/distribution/api/src/main/java/org/apache/sling/distribution/packaging/DistributionPackageImporter.java
    sling/trunk/contrib/extensions/distribution/api/src/main/java/org/apache/sling/distribution/queue/DistributionQueueDispatchingStrategy.java
    sling/trunk/contrib/extensions/distribution/api/src/main/java/org/apache/sling/distribution/queue/DistributionQueueProvider.java
    sling/trunk/contrib/extensions/distribution/api/src/main/java/org/apache/sling/distribution/transport/authentication/TransportAuthenticationProvider.java
    sling/trunk/contrib/extensions/distribution/api/src/main/java/org/apache/sling/distribution/trigger/DistributionTrigger.java
    sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/agent/impl/SimpleDistributionAgent.java
    sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/agent/impl/SimpleDistributionAgentFactory.java
    sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/component/impl/DefaultDistributionComponentProvider.java
    sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/component/impl/DistributionComponentManager.java
    sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/component/impl/ResourceBasedDistributionComponentFactory.java
    sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/packaging/impl/exporter/AgentDistributionPackageExporter.java
    sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/packaging/impl/exporter/AgentDistributionPackageExporterFactory.java
    sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/packaging/impl/exporter/LocalDistributionPackageExporterFactory.java
    sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/packaging/impl/exporter/RemoteDistributionPackageExporterFactory.java
    sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/packaging/impl/importer/AdvancedRemoteDistributionPackageImporter.java
    sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/packaging/impl/importer/LocalDistributionPackageImporterFactory.java
    sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/packaging/impl/importer/RemoteDistributionPackageImporterFactory.java
    sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/resources/DistributionConstants.java
    sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/resources/impl/OsgiConfigurationResourceProvider.java
    sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/resources/impl/OsgiServicePropertiesResourceProvider.java
    sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/resources/impl/OsgiUtils.java
    sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/transport/authentication/impl/UserCredentialsTransportAuthenticationProviderFactory.java
    sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/trigger/impl/AbstractJcrEventTrigger.java
    sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/trigger/impl/ChainDistributeDistributionTrigger.java
    sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/trigger/impl/PersistingJcrEventDistributionTrigger.java
    sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/trigger/impl/ResourceEventDistributionTrigger.java
    sling/trunk/contrib/extensions/distribution/it/src/test/java/org/apache/sling/distribution/it/DistributionAgentResourcesIntegrationTest.java
    sling/trunk/contrib/extensions/distribution/it/src/test/java/org/apache/sling/distribution/it/DistributionIntegrationTestBase.java
    sling/trunk/contrib/extensions/distribution/it/src/test/java/org/apache/sling/distribution/it/DistributionUtils.java
    sling/trunk/contrib/extensions/distribution/it/src/test/java/org/apache/sling/distribution/it/triggers/DistributionTriggerResourcesTest.java
    sling/trunk/contrib/extensions/distribution/it/src/test/java/org/apache/sling/distribution/it/triggers/ScheduledDistributionTriggerTest.java
    sling/trunk/contrib/extensions/distribution/sample/src/main/resources/SLING-CONTENT/libs/sling/distribution/install.author/org.apache.sling.distribution.component.impl.ResourceBasedDistributionComponentFactory-agents.json
    sling/trunk/contrib/extensions/distribution/sample/src/main/resources/SLING-CONTENT/libs/sling/distribution/install.publish/org.apache.sling.distribution.packaging.impl.exporter.AgentDistributionPackageExporterFactory-reverse.json
    sling/trunk/contrib/extensions/distribution/sample/src/main/resources/SLING-CONTENT/libs/sling/distribution/install.publish/org.apache.sling.distribution.packaging.impl.exporter.LocalDistributionPackageExporterFactory-default.json
    sling/trunk/contrib/extensions/distribution/sample/src/main/resources/SLING-CONTENT/libs/sling/distribution/install.publish/org.apache.sling.distribution.packaging.impl.importer.LocalDistributionPackageImporterFactory-default.json

Modified: sling/trunk/contrib/extensions/distribution/api/src/main/java/org/apache/sling/distribution/agent/DistributionAgent.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/distribution/api/src/main/java/org/apache/sling/distribution/agent/DistributionAgent.java?rev=1641561&r1=1641560&r2=1641561&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/distribution/api/src/main/java/org/apache/sling/distribution/agent/DistributionAgent.java (original)
+++ sling/trunk/contrib/extensions/distribution/api/src/main/java/org/apache/sling/distribution/agent/DistributionAgent.java Tue Nov 25 10:16:08 2014
@@ -25,7 +25,6 @@ import aQute.bnd.annotation.ProviderType
 import org.apache.sling.api.resource.ResourceResolver;
 import org.apache.sling.distribution.communication.DistributionRequest;
 import org.apache.sling.distribution.communication.DistributionResponse;
-import org.apache.sling.distribution.component.DistributionComponent;
 import org.apache.sling.distribution.queue.DistributionQueue;
 
 /**
@@ -36,7 +35,7 @@ import org.apache.sling.distribution.que
  * other instances.
  */
 @ProviderType
-public interface DistributionAgent extends DistributionComponent {
+public interface DistributionAgent {
 
     /**
      * retrieves the names of the queues for this agent.

Modified: sling/trunk/contrib/extensions/distribution/api/src/main/java/org/apache/sling/distribution/agent/DistributionRequestAuthorizationStrategy.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/distribution/api/src/main/java/org/apache/sling/distribution/agent/DistributionRequestAuthorizationStrategy.java?rev=1641561&r1=1641560&r2=1641561&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/distribution/api/src/main/java/org/apache/sling/distribution/agent/DistributionRequestAuthorizationStrategy.java (original)
+++ sling/trunk/contrib/extensions/distribution/api/src/main/java/org/apache/sling/distribution/agent/DistributionRequestAuthorizationStrategy.java Tue Nov 25 10:16:08 2014
@@ -23,13 +23,12 @@ import javax.annotation.Nonnull;
 import aQute.bnd.annotation.ConsumerType;
 import org.apache.sling.api.resource.ResourceResolver;
 import org.apache.sling.distribution.communication.DistributionRequest;
-import org.apache.sling.distribution.component.DistributionComponent;
 
 /**
  * Strategy for authorizing requests
  */
 @ConsumerType
-public interface DistributionRequestAuthorizationStrategy extends DistributionComponent {
+public interface DistributionRequestAuthorizationStrategy {
 
     /**
      * @param resourceResolver   a {@link org.apache.sling.api.resource.ResourceResolver} representing the calling 'user'

Modified: sling/trunk/contrib/extensions/distribution/api/src/main/java/org/apache/sling/distribution/packaging/DistributionPackageExporter.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/distribution/api/src/main/java/org/apache/sling/distribution/packaging/DistributionPackageExporter.java?rev=1641561&r1=1641560&r2=1641561&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/distribution/api/src/main/java/org/apache/sling/distribution/packaging/DistributionPackageExporter.java (original)
+++ sling/trunk/contrib/extensions/distribution/api/src/main/java/org/apache/sling/distribution/packaging/DistributionPackageExporter.java Tue Nov 25 10:16:08 2014
@@ -26,7 +26,6 @@ import java.util.List;
 import aQute.bnd.annotation.ConsumerType;
 import org.apache.sling.api.resource.ResourceResolver;
 import org.apache.sling.distribution.communication.DistributionRequest;
-import org.apache.sling.distribution.component.DistributionComponent;
 
 /**
  * A {@link DistributionPackageExporter ) is responsible of exporting
@@ -38,7 +37,7 @@ import org.apache.sling.distribution.com
  * executing an HTTP request to another Sling instance exposing already created packages (for remotely changed resources).
  */
 @ConsumerType
-public interface DistributionPackageExporter extends DistributionComponent {
+public interface DistributionPackageExporter {
 
     /**
      * Exports the {@link DistributionPackage}s built from the

Modified: sling/trunk/contrib/extensions/distribution/api/src/main/java/org/apache/sling/distribution/packaging/DistributionPackageImporter.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/distribution/api/src/main/java/org/apache/sling/distribution/packaging/DistributionPackageImporter.java?rev=1641561&r1=1641560&r2=1641561&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/distribution/api/src/main/java/org/apache/sling/distribution/packaging/DistributionPackageImporter.java (original)
+++ sling/trunk/contrib/extensions/distribution/api/src/main/java/org/apache/sling/distribution/packaging/DistributionPackageImporter.java Tue Nov 25 10:16:08 2014
@@ -24,14 +24,13 @@ import java.io.InputStream;
 
 import aQute.bnd.annotation.ConsumerType;
 import org.apache.sling.api.resource.ResourceResolver;
-import org.apache.sling.distribution.component.DistributionComponent;
 
 /**
  * A {@link DistributionPackageImporter} is responsible for importing
  * {@link DistributionPackage}s into the resource tree.
  */
 @ConsumerType
-public interface DistributionPackageImporter extends DistributionComponent {
+public interface DistributionPackageImporter {
 
     /**
      * Imports the given distribution package into the underlying system

Modified: sling/trunk/contrib/extensions/distribution/api/src/main/java/org/apache/sling/distribution/queue/DistributionQueueDispatchingStrategy.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/distribution/api/src/main/java/org/apache/sling/distribution/queue/DistributionQueueDispatchingStrategy.java?rev=1641561&r1=1641560&r2=1641561&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/distribution/api/src/main/java/org/apache/sling/distribution/queue/DistributionQueueDispatchingStrategy.java (original)
+++ sling/trunk/contrib/extensions/distribution/api/src/main/java/org/apache/sling/distribution/queue/DistributionQueueDispatchingStrategy.java Tue Nov 25 10:16:08 2014
@@ -22,7 +22,6 @@ import javax.annotation.Nonnull;
 import java.util.List;
 
 import aQute.bnd.annotation.ConsumerType;
-import org.apache.sling.distribution.component.DistributionComponent;
 import org.apache.sling.distribution.packaging.DistributionPackage;
 
 /**
@@ -34,7 +33,7 @@ import org.apache.sling.distribution.pac
  * (one for each queue) for a certain package.
  */
 @ConsumerType
-public interface DistributionQueueDispatchingStrategy extends DistributionComponent {
+public interface DistributionQueueDispatchingStrategy {
     String DEFAULT_QUEUE_NAME = "default";
 
     /**

Modified: sling/trunk/contrib/extensions/distribution/api/src/main/java/org/apache/sling/distribution/queue/DistributionQueueProvider.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/distribution/api/src/main/java/org/apache/sling/distribution/queue/DistributionQueueProvider.java?rev=1641561&r1=1641560&r2=1641561&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/distribution/api/src/main/java/org/apache/sling/distribution/queue/DistributionQueueProvider.java (original)
+++ sling/trunk/contrib/extensions/distribution/api/src/main/java/org/apache/sling/distribution/queue/DistributionQueueProvider.java Tue Nov 25 10:16:08 2014
@@ -21,13 +21,12 @@ package org.apache.sling.distribution.qu
 import javax.annotation.Nonnull;
 
 import aQute.bnd.annotation.ConsumerType;
-import org.apache.sling.distribution.component.DistributionComponent;
 
 /**
  * A provider for {@link DistributionQueue}s
  */
 @ConsumerType
-public interface DistributionQueueProvider extends DistributionComponent {
+public interface DistributionQueueProvider {
 
     /**
      * provide a named queue for the given agent

Modified: sling/trunk/contrib/extensions/distribution/api/src/main/java/org/apache/sling/distribution/transport/authentication/TransportAuthenticationProvider.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/distribution/api/src/main/java/org/apache/sling/distribution/transport/authentication/TransportAuthenticationProvider.java?rev=1641561&r1=1641560&r2=1641561&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/distribution/api/src/main/java/org/apache/sling/distribution/transport/authentication/TransportAuthenticationProvider.java (original)
+++ sling/trunk/contrib/extensions/distribution/api/src/main/java/org/apache/sling/distribution/transport/authentication/TransportAuthenticationProvider.java Tue Nov 25 10:16:08 2014
@@ -19,7 +19,6 @@
 package org.apache.sling.distribution.transport.authentication;
 
 import aQute.bnd.annotation.ConsumerType;
-import org.apache.sling.distribution.component.DistributionComponent;
 
 /**
  * A {@link org.apache.sling.distribution.transport.authentication.TransportAuthenticationProvider} is responsible for
@@ -29,7 +28,7 @@ import org.apache.sling.distribution.com
  *
  */
 @ConsumerType
-public interface TransportAuthenticationProvider<A, T> extends DistributionComponent {
+public interface TransportAuthenticationProvider<A, T> {
 
     /**
      * Check if this provider is able to authenticate objects belonging to given 'authenticable' class.

Modified: sling/trunk/contrib/extensions/distribution/api/src/main/java/org/apache/sling/distribution/trigger/DistributionTrigger.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/distribution/api/src/main/java/org/apache/sling/distribution/trigger/DistributionTrigger.java?rev=1641561&r1=1641560&r2=1641561&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/distribution/api/src/main/java/org/apache/sling/distribution/trigger/DistributionTrigger.java (original)
+++ sling/trunk/contrib/extensions/distribution/api/src/main/java/org/apache/sling/distribution/trigger/DistributionTrigger.java Tue Nov 25 10:16:08 2014
@@ -21,7 +21,6 @@ package org.apache.sling.distribution.tr
 import javax.annotation.Nonnull;
 
 import aQute.bnd.annotation.ConsumerType;
-import org.apache.sling.distribution.component.DistributionComponent;
 
 /**
  * A {@link DistributionTrigger} is responsible to trigger
@@ -31,7 +30,7 @@ import org.apache.sling.distribution.com
  * {@link DistributionRequestHandler} can be registered into the same trigger.
  */
 @ConsumerType
-public interface DistributionTrigger extends DistributionComponent {
+public interface DistributionTrigger {
 
     /**
      * register a request handler to be triggered and returns a corresponding registration id

Added: sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/agent/impl/PrivilegeDistributionRequestAuthorizationStrategyFactory.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/agent/impl/PrivilegeDistributionRequestAuthorizationStrategyFactory.java?rev=1641561&view=auto
==============================================================================
--- sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/agent/impl/PrivilegeDistributionRequestAuthorizationStrategyFactory.java (added)
+++ sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/agent/impl/PrivilegeDistributionRequestAuthorizationStrategyFactory.java Tue Nov 25 10:16:08 2014
@@ -0,0 +1,68 @@
+/*
+ * 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.agent.impl;
+
+import org.apache.felix.scr.annotations.*;
+import org.apache.sling.api.resource.ResourceResolver;
+import org.apache.sling.commons.osgi.PropertiesUtil;
+import org.apache.sling.distribution.agent.DistributionRequestAuthorizationException;
+import org.apache.sling.distribution.agent.DistributionRequestAuthorizationStrategy;
+import org.apache.sling.distribution.communication.DistributionRequest;
+import org.apache.sling.distribution.component.impl.DistributionComponentUtils;
+import org.osgi.framework.BundleContext;
+
+import javax.annotation.Nonnull;
+import java.util.Map;
+
+@Component(metatype = true,
+        label = "Sling Distribution - Privilege Request Authorization Strategy",
+        description = "OSGi configuration for request based authorization strategy based on privileges",
+        configurationFactory = true,
+        specVersion = "1.1",
+        policy = ConfigurationPolicy.REQUIRE,
+        immediate = true
+)
+@Service(DistributionRequestAuthorizationStrategy.class)
+public class PrivilegeDistributionRequestAuthorizationStrategyFactory implements DistributionRequestAuthorizationStrategy {
+
+    /**
+     * name of this component.
+     */
+    @Property
+    public static final String NAME = DistributionComponentUtils.NAME;
+
+    /**
+     * privilege request authorization strategy jcr privilege property
+     */
+    @Property
+    public static final String REQUEST_AUTHORIZATION_STRATEGY_PRIVILEGE_PROPERTY_JCR_PRIVILEGE = "jcrPrivilege";
+
+
+    DistributionRequestAuthorizationStrategy authorizationStrategy;
+
+    @Activate
+    public void activate(BundleContext context, Map<String, Object> config) {
+        String jcrPrivilege = PropertiesUtil.toString(config.get(REQUEST_AUTHORIZATION_STRATEGY_PRIVILEGE_PROPERTY_JCR_PRIVILEGE), null);
+        authorizationStrategy = new PrivilegeDistributionRequestAuthorizationStrategy(jcrPrivilege);
+    }
+
+    public void checkPermission(@Nonnull ResourceResolver resourceResolver, @Nonnull DistributionRequest distributionRequest) throws DistributionRequestAuthorizationException {
+        authorizationStrategy.checkPermission(resourceResolver, distributionRequest);
+    }
+}

Modified: sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/agent/impl/SimpleDistributionAgent.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/agent/impl/SimpleDistributionAgent.java?rev=1641561&r1=1641560&r2=1641561&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/agent/impl/SimpleDistributionAgent.java (original)
+++ sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/agent/impl/SimpleDistributionAgent.java Tue Nov 25 10:16:08 2014
@@ -39,7 +39,6 @@ import org.apache.sling.distribution.age
 import org.apache.sling.distribution.communication.DistributionRequest;
 import org.apache.sling.distribution.communication.DistributionRequestState;
 import org.apache.sling.distribution.communication.DistributionResponse;
-import org.apache.sling.distribution.component.ManagedDistributionComponent;
 import org.apache.sling.distribution.event.DistributionEventType;
 import org.apache.sling.distribution.event.impl.DistributionEventFactory;
 import org.apache.sling.distribution.packaging.DistributionPackage;
@@ -66,7 +65,7 @@ import static org.apache.sling.distribut
 /**
  * Basic implementation of a {@link org.apache.sling.distribution.agent.DistributionAgent}
  */
-public class SimpleDistributionAgent implements DistributionAgent, ManagedDistributionComponent {
+public class SimpleDistributionAgent implements DistributionAgent {
 
     private final Logger log = LoggerFactory.getLogger(getClass());
 
@@ -260,6 +259,7 @@ public class SimpleDistributionAgent imp
         // register triggers if any
         agentBasedRequestHandler = new AgentBasedRequestHandler(this);
 
+
         for (DistributionTrigger trigger : triggers) {
             try {
                 trigger.register(agentBasedRequestHandler);
@@ -268,6 +268,7 @@ public class SimpleDistributionAgent imp
             }
         }
 
+
         if (!isPassive()) {
             try {
                 queueProvider.enableQueueProcessing(new PackageQueueProcessor());
@@ -277,6 +278,23 @@ public class SimpleDistributionAgent imp
         }
     }
 
+    public void enableTrigger(DistributionTrigger trigger) {
+        try {
+            trigger.register(agentBasedRequestHandler);
+        } catch (DistributionTriggerException e) {
+            log.error("could not register handler {} from trigger {}", agentBasedRequestHandler, trigger);
+        }
+
+    }
+
+    public void disableTrigger(DistributionTrigger trigger) {
+        try {
+            trigger.register(agentBasedRequestHandler);
+        } catch (DistributionTriggerException e) {
+            log.error("could not register handler {} from trigger {}", agentBasedRequestHandler, trigger);
+        }
+    }
+
     public void disable() {
         log.info("disabling agent");
 

Modified: sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/agent/impl/SimpleDistributionAgentFactory.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/agent/impl/SimpleDistributionAgentFactory.java?rev=1641561&r1=1641560&r2=1641561&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/agent/impl/SimpleDistributionAgentFactory.java (original)
+++ sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/agent/impl/SimpleDistributionAgentFactory.java Tue Nov 25 10:16:08 2014
@@ -18,36 +18,25 @@
  */
 package org.apache.sling.distribution.agent.impl;
 
-import javax.annotation.Nonnull;
-import javax.annotation.Nullable;
-import java.util.Dictionary;
-import java.util.HashMap;
-import java.util.Hashtable;
-import java.util.Map;
-
-import org.apache.felix.scr.annotations.Activate;
-import org.apache.felix.scr.annotations.Component;
-import org.apache.felix.scr.annotations.ConfigurationPolicy;
-import org.apache.felix.scr.annotations.Deactivate;
-import org.apache.felix.scr.annotations.Property;
-import org.apache.felix.scr.annotations.Reference;
-import org.apache.felix.scr.annotations.ReferenceCardinality;
-import org.apache.felix.scr.annotations.ReferencePolicy;
+import java.util.*;
+import java.util.concurrent.CopyOnWriteArrayList;
+
+import org.apache.felix.scr.annotations.*;
+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.component.DistributionComponent;
-import org.apache.sling.distribution.component.DistributionComponentProvider;
-import org.apache.sling.distribution.component.ManagedDistributionComponent;
-import org.apache.sling.distribution.component.impl.DefaultDistributionComponentFactoryConstants;
-import org.apache.sling.distribution.component.impl.DistributionComponentManager;
-import org.apache.sling.distribution.component.impl.SettingsUtils;
+import org.apache.sling.distribution.agent.DistributionRequestAuthorizationStrategy;
+import org.apache.sling.distribution.component.impl.DistributionComponentUtils;
 import org.apache.sling.distribution.event.impl.DistributionEventFactory;
+import org.apache.sling.distribution.packaging.DistributionPackageExporter;
+import org.apache.sling.distribution.packaging.DistributionPackageImporter;
 import org.apache.sling.distribution.queue.DistributionQueueDispatchingStrategy;
 import org.apache.sling.distribution.queue.DistributionQueueProvider;
 import org.apache.sling.distribution.queue.impl.SingleQueueDispatchingStrategy;
 import org.apache.sling.distribution.queue.impl.jobhandling.JobHandlingDistributionQueueProvider;
+import org.apache.sling.distribution.resources.DistributionConstants;
 import org.apache.sling.distribution.resources.impl.OsgiUtils;
-import org.apache.sling.distribution.transport.authentication.TransportAuthenticationProvider;
+import org.apache.sling.distribution.trigger.DistributionTrigger;
 import org.apache.sling.event.jobs.JobManager;
 import org.apache.sling.settings.SlingSettingsService;
 import org.osgi.framework.BundleContext;
@@ -66,43 +55,39 @@ import org.slf4j.LoggerFactory;
         specVersion = "1.1",
         policy = ConfigurationPolicy.REQUIRE
 )
-public class SimpleDistributionAgentFactory implements DistributionComponentProvider {
-
-    private static final String TRANSPORT_AUTHENTICATION_PROVIDER_TARGET = DefaultDistributionComponentFactoryConstants.COMPONENT_TRANSPORT_AUTHENTICATION_PROVIDER + ".target";
-
+@Reference(name = "triggers", referenceInterface = DistributionTrigger.class, target = SimpleDistributionAgentFactory.DEFAULT_TARGET,
+        policy = ReferencePolicy.DYNAMIC, cardinality = ReferenceCardinality.OPTIONAL_MULTIPLE,
+        bind = "bindDistributionTrigger", unbind = "unbindDistributionTrigger")
+public class SimpleDistributionAgentFactory {
+    public static final String DEFAULT_TARGET = DistributionComponentUtils.DEFAULT_TARGET;
     private final Logger log = LoggerFactory.getLogger(getClass());
 
-    @Property(boolValue = true, label = "Enabled")
-    private static final String ENABLED = DefaultDistributionComponentFactoryConstants.COMPONENT_ENABLED;
+    @Property(label = "Name")
+    public static final String NAME = DistributionComponentUtils.NAME;
 
-    @Property(value = DefaultDistributionComponentFactoryConstants.AGENT_SIMPLE, propertyPrivate = true)
-    private static final String TYPE = DefaultDistributionComponentFactoryConstants.COMPONENT_TYPE;
+    @Property(boolValue = true, label = "Enabled")
+    private static final String ENABLED = "enabled";
 
-    @Property(label = "Name")
-    public static final String NAME = DefaultDistributionComponentFactoryConstants.COMPONENT_NAME;
 
     @Property(boolValue = false, label = "Use this agent as a passive one (only queueing)")
-    public static final String IS_PASSIVE = DefaultDistributionComponentFactoryConstants.AGENT_SIMPLE_PROPERTY_IS_PASSIVE;
+    public static final String IS_PASSIVE = "isPassive";
 
-    @Property(label = "Request Authorization Strategy Properties", cardinality = 100)
-    public static final String REQUEST_AUTHORIZATION_STRATEGY = DefaultDistributionComponentFactoryConstants.COMPONENT_REQUEST_AUTHORIZATION_STRATEGY;
 
-    @Property(label = "Package Exporter Properties", cardinality = 100)
-    public static final String PACKAGE_EXPORTER = DefaultDistributionComponentFactoryConstants.COMPONENT_PACKAGE_EXPORTER;
+    @Property(label = "Service Name")
+    public static final String SERVICE_NAME = "serviceName";
 
-    @Property(label = "Package Importer Properties", cardinality = 100)
-    public static final String PACKAGE_IMPORTER = DefaultDistributionComponentFactoryConstants.COMPONENT_PACKAGE_IMPORTER;
+    @Property(name = "packageExporter.target")
+    @Reference(name = "packageExporter", target = DEFAULT_TARGET)
+    private DistributionPackageExporter packageExporter;
 
-    @Property(label = "Trigger Properties", cardinality = 100)
-    public static final String TRIGGER = DefaultDistributionComponentFactoryConstants.COMPONENT_TRIGGER;
 
-    @Property(label = "Service Name")
-    public static final String SERVICE_NAME = DefaultDistributionComponentFactoryConstants.AGENT_SIMPLE_PROPERTY_SERVICE_NAME;
+    @Property(name = "packageImporter.target")
+    @Reference(name = "packageImporter", target = DEFAULT_TARGET)
+    private DistributionPackageImporter packageImporter;
 
-    @Property(label = "Target TransportAuthenticationProvider", name = TRANSPORT_AUTHENTICATION_PROVIDER_TARGET)
-    @Reference(name = "transportAuthenticationProvider", policy = ReferencePolicy.DYNAMIC,
-            cardinality = ReferenceCardinality.OPTIONAL_UNARY)
-    private volatile TransportAuthenticationProvider transportAuthenticationProvider;
+    @Property(name = "requestAuthorizationStrategy.target")
+    @Reference(name = "requestAuthorizationStrategy", target = DEFAULT_TARGET)
+    private DistributionRequestAuthorizationStrategy requestAuthorizationStrategy;
 
     @Reference
     private DistributionEventFactory distributionEventFactory;
@@ -114,12 +99,15 @@ public class SimpleDistributionAgentFact
     private JobManager jobManager;
 
     @Reference
-    private DistributionComponentManager componentFactoryManager;
+    private ResourceResolverFactory resourceResolverFactory;
 
     private ServiceRegistration componentReg;
     private BundleContext savedContext;
     private Map<String, Object> savedConfig;
     private String agentName;
+    List<DistributionTrigger> triggers = new CopyOnWriteArrayList<DistributionTrigger>();
+
+    private SimpleDistributionAgent agent;
 
     @Activate
     protected void activate(BundleContext context, Map<String, Object> config) {
@@ -139,25 +127,21 @@ public class SimpleDistributionAgentFact
 
             agentName = PropertiesUtil.toString(config.get(NAME), null);
             props.put(NAME, agentName);
+            props.put(DistributionConstants.PN_IS_RESOURCE, config.get(DistributionConstants.PN_IS_RESOURCE));
+
+            if (componentReg == null) {
 
-            if (componentReg == null && componentFactoryManager != null) {
+                String serviceName = PropertiesUtil.toString(config.get(SERVICE_NAME), null);
 
-                String[] requestAuthProperties = PropertiesUtil.toStringArray(config.get(REQUEST_AUTHORIZATION_STRATEGY), new String[0]);
-                String[] packageImporterProperties = PropertiesUtil.toStringArray(config.get(PACKAGE_IMPORTER), new String[0]);
-                String[] packageExporterProperties = PropertiesUtil.toStringArray(config.get(PACKAGE_EXPORTER), new String[0]);
-                String[] triggerProperties = PropertiesUtil.toStringArray(config.get(TRIGGER), new String[0]);
-
-                Map<String, Object> properties = new HashMap<String, Object>();
-                properties.putAll(config);
-
-                properties.put(REQUEST_AUTHORIZATION_STRATEGY, SettingsUtils.parseLines(requestAuthProperties));
-                properties.put(PACKAGE_IMPORTER, SettingsUtils.parseLines(packageImporterProperties));
-                properties.put(PACKAGE_EXPORTER, SettingsUtils.parseLines(packageExporterProperties));
-                properties.put(TRIGGER, SettingsUtils.parseLines(triggerProperties));
+                boolean isPassive = PropertiesUtil.toBoolean(config.get(IS_PASSIVE), false);
 
-                DistributionAgent agent = null;
                 try {
-                    agent = componentFactoryManager.createComponent(DistributionAgent.class, properties, this);
+
+                    DistributionQueueProvider queueProvider =  new JobHandlingDistributionQueueProvider(agentName, jobManager, savedContext);
+                    DistributionQueueDispatchingStrategy dispatchingStrategy = new SingleQueueDispatchingStrategy();
+                    agent = new SimpleDistributionAgent(agentName, isPassive, serviceName,
+                            packageImporter, packageExporter, requestAuthorizationStrategy,
+                            queueProvider, dispatchingStrategy, distributionEventFactory, resourceResolverFactory, triggers);
                 }
                 catch (IllegalArgumentException e) {
                     log.warn("cannot create agent", e);
@@ -169,12 +153,25 @@ public class SimpleDistributionAgentFact
 
                     // register agent service
                     componentReg = context.registerService(DistributionAgent.class.getName(), agent, props);
-                    if (agent instanceof ManagedDistributionComponent) {
-                        ((ManagedDistributionComponent) agent).enable();
-                    }
+                    agent.enable();
                 }
             }
+        }
+    }
 
+    private void bindDistributionTrigger(DistributionTrigger distributionTrigger, Map<String, Object> config) {
+        triggers.add(distributionTrigger);
+        if (agent != null) {
+            agent.enableTrigger(distributionTrigger);
+        }
+
+    }
+
+    private void unbindDistributionTrigger(DistributionTrigger distributionTrigger, Map<String, Object> config) {
+        triggers.remove(distributionTrigger);
+
+        if (agent != null) {
+            agent.disableTrigger(distributionTrigger);
         }
     }
 
@@ -183,49 +180,14 @@ public class SimpleDistributionAgentFact
         if (componentReg != null) {
             ServiceReference reference = componentReg.getReference();
             Object service = context.getService(reference);
-            if (service instanceof ManagedDistributionComponent) {
-                ((ManagedDistributionComponent) service).disable();
+            if (service instanceof SimpleDistributionAgent) {
+                ((SimpleDistributionAgent) service).disable();
             }
 
             componentReg.unregister();
             componentReg = null;
+            agent = null;
         }
 
     }
-
-    public <ComponentType extends DistributionComponent> ComponentType getComponent(@Nonnull Class<ComponentType> type,
-                                                                                   @Nullable String componentName) {
-        if (type.isAssignableFrom(DistributionQueueProvider.class)) {
-            return (ComponentType) new JobHandlingDistributionQueueProvider(agentName, jobManager, savedContext);
-        }
-        else if (type.isAssignableFrom(DistributionQueueDispatchingStrategy.class)) {
-            return (ComponentType) new SingleQueueDispatchingStrategy();
-        }
-        else if (type.isAssignableFrom(TransportAuthenticationProvider.class)) {
-            return (ComponentType) transportAuthenticationProvider;
-        }
-        return null;
-    }
-
-    private void refresh() {
-        if (savedContext != null && savedConfig != null) {
-            if (componentReg == null) {
-                activate(savedContext, savedConfig);
-            }
-            else {
-                deactivate(savedContext);
-                activate(savedContext, savedConfig);
-            }
-        }
-    }
-
-    private void bindTransportAuthenticationProvider(TransportAuthenticationProvider transportAuthenticationProvider) {
-        this.transportAuthenticationProvider = transportAuthenticationProvider;
-        refresh();
-    }
-
-    private void unbindTransportAuthenticationProvider(TransportAuthenticationProvider transportAuthenticationProvider) {
-        this.transportAuthenticationProvider = null;
-        refresh();
-    }
 }

Added: sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/component/impl/DefaultDistributionComponentManager.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/component/impl/DefaultDistributionComponentManager.java?rev=1641561&view=auto
==============================================================================
--- sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/component/impl/DefaultDistributionComponentManager.java (added)
+++ sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/component/impl/DefaultDistributionComponentManager.java Tue Nov 25 10:16:08 2014
@@ -0,0 +1,129 @@
+package org.apache.sling.distribution.component.impl;
+
+
+import org.apache.felix.scr.annotations.Activate;
+import org.apache.felix.scr.annotations.Component;
+import org.apache.felix.scr.annotations.Reference;
+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.resources.impl.OsgiUtils;
+import org.osgi.framework.InvalidSyntaxException;
+import org.osgi.service.cm.Configuration;
+import org.osgi.service.cm.ConfigurationAdmin;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import javax.annotation.Nonnull;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+
+@Component
+@Service(DistributionComponentManager.class)
+public class DefaultDistributionComponentManager implements DistributionComponentManager {
+
+    private final Logger log = LoggerFactory.getLogger(getClass());
+
+    DistributionComponentUtils componentUtils = new DistributionComponentUtils();
+
+
+    @Reference
+    ConfigurationAdmin configurationAdmin;
+
+    Map<String, List<String>> managedConfigPids = new ConcurrentHashMap<String, List<String>>();
+
+    @Activate
+    void activate() {
+    }
+
+    public void createComponent(@Nonnull Class type, @Nonnull String componentName, @Nonnull Map<String, Object> properties) {
+
+        String kind = componentUtils.getKind(type);
+
+        if (kind != null) {
+            properties.put(DistributionComponentUtils.KIND, kind);
+            Map<String, Map<String, Object>> osgiConfigs = componentUtils.transformToOsgi(properties);
+
+            List<String> createdPids = new ArrayList<String>();
+            for(Map.Entry<String, Map<String, Object>> entry : osgiConfigs.entrySet()) {
+                String factoryPid = componentUtils.getFactoryPid(entry.getKey());
+                if (factoryPid != null) {
+                    String configPid = createOsgiConfig(factoryPid, entry.getValue());
+                    createdPids.add(configPid);
+                }
+            }
+
+            String componentFullName = getComponentFullName(type, componentName);
+
+            managedConfigPids.put(componentFullName, createdPids);
+        }
+    }
+
+
+
+    private String createOsgiConfig(String factoryPid, Map<String, Object> properties) {
+        try {
+            String configName = PropertiesUtil.toString(properties.get(DistributionComponentUtils.NAME), null);
+            Configuration[] configurations = getConfigurations(factoryPid, configName);
+            Configuration configuration = null;
+            if (configurations == null || configurations.length == 0) {
+                configuration = configurationAdmin.createFactoryConfiguration(factoryPid);
+            }
+            else {
+                configuration = configurations[0];
+
+            }
+
+            properties = OsgiUtils.sanitize(properties);
+
+            configuration.update(OsgiUtils.toDictionary(properties));
+
+            return configuration.getPid();
+        } catch (IOException e) {
+
+        }
+
+        return null;
+    }
+
+
+    Configuration[] getConfigurations(String factoryPid, String configName) {
+        try {
+            String filter = OsgiUtils.getFilter(factoryPid, DistributionComponentUtils.NAME, configName);
+
+            return configurationAdmin.listConfigurations(filter);
+        } catch (IOException e) {
+            return null;
+        } catch (InvalidSyntaxException e) {
+            return null;
+        }
+    }
+
+
+    public void deleteComponent(@Nonnull Class type, String componentName) {
+        String componentFullName = getComponentFullName(type, componentName);
+        if (managedConfigPids.containsKey(componentFullName)) {
+            List<String> createdPids = managedConfigPids.get(componentFullName);
+
+            for (String createdPid : createdPids) {
+                try {
+                    Configuration configuration = configurationAdmin.getConfiguration(createdPid);
+                    configuration.delete();
+                }
+                catch (IOException ex) {
+                    log.error("Cannot delete config {} for {}", new Object[] { createdPid, componentFullName, ex } );
+
+                }
+
+            }
+        }
+    }
+
+    private String getComponentFullName(Class type, String componentName) {
+        String typeName = type.getSimpleName();
+        return typeName + DistributionComponentUtils.TARGET_DESCRIPTOR_SEPARATOR + componentName;
+    }
+}

Modified: sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/component/impl/DefaultDistributionComponentProvider.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/component/impl/DefaultDistributionComponentProvider.java?rev=1641561&r1=1641560&r2=1641561&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/component/impl/DefaultDistributionComponentProvider.java (original)
+++ sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/component/impl/DefaultDistributionComponentProvider.java Tue Nov 25 10:16:08 2014
@@ -31,8 +31,6 @@ import org.apache.felix.scr.annotations.
 import org.apache.felix.scr.annotations.References;
 import org.apache.felix.scr.annotations.Service;
 import org.apache.sling.distribution.agent.DistributionAgent;
-import org.apache.sling.distribution.component.DistributionComponent;
-import org.apache.sling.distribution.component.DistributionComponentProvider;
 import org.apache.sling.distribution.packaging.DistributionPackageExporter;
 import org.apache.sling.distribution.packaging.DistributionPackageImporter;
 import org.apache.sling.distribution.queue.DistributionQueueDispatchingStrategy;
@@ -42,11 +40,8 @@ import org.osgi.framework.BundleContext;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-/**
- * default implementation of {@link org.apache.sling.distribution.component.DistributionComponentProvider} (as an OSGi service).
- */
+
 @Component
-@Service(DistributionComponentProvider.class)
 @Property(name = "name", value = "default")
 @References({
         @Reference(name = "distributionAgent", referenceInterface = DistributionAgent.class, cardinality = ReferenceCardinality.OPTIONAL_MULTIPLE, policy = ReferencePolicy.DYNAMIC),
@@ -56,7 +51,7 @@ import org.slf4j.LoggerFactory;
         @Reference(name = "distributionQueueDistributionStrategy", referenceInterface = DistributionQueueDispatchingStrategy.class, cardinality = ReferenceCardinality.OPTIONAL_MULTIPLE, policy = ReferencePolicy.DYNAMIC),
         @Reference(name = "transportAuthenticationProvider", referenceInterface = TransportAuthenticationProvider.class, cardinality = ReferenceCardinality.OPTIONAL_MULTIPLE, policy = ReferencePolicy.DYNAMIC)
 })
-public class DefaultDistributionComponentProvider implements DistributionComponentProvider {
+public class DefaultDistributionComponentProvider {
 
     public static final String COMPONENT_TYPE = "type";
     public static final String NAME = "name";
@@ -71,7 +66,7 @@ public class DefaultDistributionComponen
     private Map<String, DistributionPackageExporter> distributionPackageExporterMap = new ConcurrentHashMap<String, DistributionPackageExporter>();
     private BundleContext bundleContext;
 
-    public <ComponentType extends DistributionComponent> ComponentType getComponent(@Nonnull Class<ComponentType> type,
+    public <ComponentType> ComponentType getComponent(@Nonnull Class<ComponentType> type,
                                                                                    @Nullable String componentName) {
         if (type.isAssignableFrom(DistributionPackageExporter.class)) {
             return (ComponentType) distributionPackageExporterMap.get(componentName);

Modified: sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/component/impl/DistributionComponentManager.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/component/impl/DistributionComponentManager.java?rev=1641561&r1=1641560&r2=1641561&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/component/impl/DistributionComponentManager.java (original)
+++ sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/component/impl/DistributionComponentManager.java Tue Nov 25 10:16:08 2014
@@ -19,24 +19,24 @@
 
 package org.apache.sling.distribution.component.impl;
 
-import org.apache.sling.distribution.component.DistributionComponent;
-import org.apache.sling.distribution.component.DistributionComponentProvider;
-
 import javax.annotation.Nonnull;
 import java.util.Map;
 
-/**
- * The componentManager is used to create components based on all {@link org.apache.sling.distribution.component.DistributionComponentFactory}s
- * registered in the system.
- */
 public interface DistributionComponentManager {
 
-    final static String TOPIC_DISTRIBUTION_COMPONENT_REFRESH = "org/apache/sling/distribution/component/REFRESH";
-
-    <ComponentType extends DistributionComponent> ComponentType createComponent(@Nonnull Class<ComponentType> type,
-                                                                                       @Nonnull Map<String, Object> properties,
-                                                                                       @Nonnull final DistributionComponentProvider componentProvider);
-
-    <ComponentType extends DistributionComponent> ComponentType createComponent(@Nonnull Class<ComponentType> type,
-                                                                                       @Nonnull Map<String, Object> properties);
+    /**
+     * Creates a component of a given type with the specified name. It also creates all the subcomponents defined as
+     * sub-maps in the map of properties.
+     * @param type
+     * @param componentName
+     * @param properties
+     */
+    void createComponent(@Nonnull Class type, @Nonnull String componentName, @Nonnull Map<String, Object> properties);
+
+    /**
+     * Deletes the component and the associated subcomponents.
+     * @param type
+     * @param componentName
+     */
+    void deleteComponent(@Nonnull Class type, String componentName);
 }

Added: sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/component/impl/DistributionComponentUtils.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/component/impl/DistributionComponentUtils.java?rev=1641561&view=auto
==============================================================================
--- sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/component/impl/DistributionComponentUtils.java (added)
+++ sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/component/impl/DistributionComponentUtils.java Tue Nov 25 10:16:08 2014
@@ -0,0 +1,215 @@
+package org.apache.sling.distribution.component.impl;
+
+
+import org.apache.sling.commons.osgi.PropertiesUtil;
+import org.apache.sling.distribution.agent.DistributionAgent;
+import org.apache.sling.distribution.agent.DistributionRequestAuthorizationStrategy;
+import org.apache.sling.distribution.agent.impl.PrivilegeDistributionRequestAuthorizationStrategy;
+import org.apache.sling.distribution.agent.impl.SimpleDistributionAgentFactory;
+import org.apache.sling.distribution.packaging.DistributionPackageExporter;
+import org.apache.sling.distribution.packaging.DistributionPackageImporter;
+import org.apache.sling.distribution.packaging.impl.exporter.AgentDistributionPackageExporterFactory;
+import org.apache.sling.distribution.packaging.impl.exporter.LocalDistributionPackageExporterFactory;
+import org.apache.sling.distribution.packaging.impl.exporter.RemoteDistributionPackageExporterFactory;
+import org.apache.sling.distribution.packaging.impl.importer.LocalDistributionPackageImporterFactory;
+import org.apache.sling.distribution.packaging.impl.importer.RemoteDistributionPackageImporterFactory;
+import org.apache.sling.distribution.serialization.DistributionPackageBuilder;
+import org.apache.sling.distribution.serialization.impl.vlt.FileVaultDistributionPackageBuilderFactory;
+import org.apache.sling.distribution.transport.authentication.TransportAuthenticationProvider;
+import org.apache.sling.distribution.transport.authentication.impl.UserCredentialsTransportAuthenticationProviderFactory;
+import org.apache.sling.distribution.trigger.DistributionTrigger;
+import org.apache.sling.distribution.trigger.impl.LocalDistributionTriggerFactory;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+public class DistributionComponentUtils {
+    public static final String DEFAULT_TARGET = "(name=)";
+    public static final String KIND = "kind";
+    public static final String TYPE = "type";
+    public static final String TARGET_DESCRIPTOR_SEPARATOR = "|";
+    public static final String NAME_SEPARATOR = "/";
+
+    public static final String TYPE_SERVICE = "service";
+    public static final String TYPE_LIST = "list";
+
+    public static final String NAME = "name";
+    public static final String PARENT_NAME = "parent.name";
+
+    public static final String OWNER_NAME = "owner.name";
+
+//    // kind|type=osgiFactory
+//    static String[] osgiConfigFactories = new String [] {
+//            "agent|simple=org.apache.sling.distribution.agent.impl.SimpleDistributionAgentFactory",
+//
+//            "exporter|local=org.apache.sling.distribution.packaging.impl.exporter.LocalDistributionPackageExporterFactory",
+//            "exporter|remote=org.apache.sling.distribution.packaging.impl.exporter.RemoteDistributionPackageExporterFactory",
+//            "exporter|agent=org.apache.sling.distribution.packaging.impl.exporter.AgentDistributionPackageExporterFactory",
+//
+//            "importer|local=org.apache.sling.distribution.packaging.impl.importer.LocalDistributionPackageImporterFactory",
+//            "importer|remote=org.apache.sling.distribution.packaging.impl.importer.RemoteDistributionPackageImporterFactory",
+//
+//            "packager|vlt=org.apache.sling.distribution.serialization.impl.vlt.FileVaultDistributionPackageBuilderFactory",
+//
+//            "requestAuthorization|privilege=org.apache.sling.distribution.agent.impl.PrivilegeDistributionRequestAuthorizationStrategy",
+//
+//            "transportAuthenticator|user=org.apache.sling.distribution.transport.authentication.impl.UserCredentialsTransportAuthenticationProviderFactory",
+//
+//            "trigger|resourceEvent=org.apache.sling.distribution.trigger.impl.LocalDistributionTriggerFactory",
+//            "trigger|scheduledEvent=org.apache.sling.distribution.trigger.impl.LocalDistributionTriggerFactory",
+//            "trigger|distributionEvent=org.apache.sling.distribution.trigger.impl.LocalDistributionTriggerFactory",
+//            "trigger|persistedJcrEvent=org.apache.sling.distribution.trigger.impl.LocalDistributionTriggerFactory",
+//
+//    };
+//
+//    // kind=osgiService
+//    static String[] osgiServices = new String [] {
+//            "agent=org.apache.sling.distribution.agent.DistributionAgent",
+//            "exporter=org.apache.sling.distribution.packaging.DistributionPackageExporter",
+//            "importer=org.apache.sling.distribution.packaging.DistributionPackageImporter",
+//            "packager=org.apache.sling.distribution.serialization.DistributionPackageBuilder",
+//            "requestAuthorization=org.apache.sling.distribution.agent.DistributionRequestAuthorizationStrategy",
+//            "transportAuthenticator=org.apache.sling.distribution.transport.authentication.TransportAuthenticationProvider",
+//            "trigger=org.apache.sling.distribution.trigger.DistributionTrigger",
+//
+//    };
+
+    static  {
+        osgiConfigFactoryMap = new HashMap<String, String>();
+        osgiServiceMap = new HashMap<String, String>();
+
+        addService("agent", DistributionAgent.class);
+        addService("exporter", DistributionPackageExporter.class);
+        addService("importer", DistributionPackageImporter.class);
+        addService("packager", DistributionPackageBuilder.class);
+        addService("requestAuthorization", DistributionRequestAuthorizationStrategy.class);
+        addService("transportAuthenticator", TransportAuthenticationProvider.class);
+        addService("trigger", DistributionTrigger.class);
+
+
+        addFactory("agent" ,"simple", SimpleDistributionAgentFactory.class);
+
+        addFactory("exporter", "local", LocalDistributionPackageExporterFactory.class);
+        addFactory("exporter", "remote", RemoteDistributionPackageExporterFactory.class);
+        addFactory("exporter", "agent", AgentDistributionPackageExporterFactory.class);
+
+        addFactory("importer", "local", LocalDistributionPackageImporterFactory.class);
+        addFactory("importer", "remote", RemoteDistributionPackageImporterFactory.class);
+
+        addFactory("packager", "vlt", FileVaultDistributionPackageBuilderFactory.class);
+
+        addFactory("requestAuthorization", "privilege", PrivilegeDistributionRequestAuthorizationStrategy.class);
+
+        addFactory("transportAuthenticator", "user", UserCredentialsTransportAuthenticationProviderFactory.class);
+
+        addFactory("trigger", "resourceEvent", LocalDistributionTriggerFactory.class);
+        addFactory("trigger", "scheduledEvent", LocalDistributionTriggerFactory.class);
+        addFactory("trigger", "distributionEvent", LocalDistributionTriggerFactory.class);
+        addFactory("trigger", "persistedJcrEvent", LocalDistributionTriggerFactory.class);
+
+    }
+
+
+    final static Map<String, String> osgiConfigFactoryMap;
+    final static Map<String, String> osgiServiceMap;
+
+
+
+    public DistributionComponentUtils() {
+
+    }
+
+
+    public Map<String, Map<String, Object>> transformToOsgi(Map<String, Object> settings) {
+        Map<String, Map<String, Object>> result = new HashMap<String, Map<String, Object>>();
+
+        String kind = PropertiesUtil.toString(settings.get(KIND), null);
+        String type = PropertiesUtil.toString(settings.get(TYPE), null);
+        String name = PropertiesUtil.toString(settings.get(NAME), null);
+
+
+        if (TYPE_LIST.equals(type)) {
+            name = PropertiesUtil.toString(settings.get(PARENT_NAME), null);
+        }
+
+        if (name == null || type == null || kind == null) {
+            return result;
+        }
+
+        if (!osgiServiceMap.containsKey(kind)) {
+            return result;
+        }
+
+        Map<String, Object> currentConfig = new HashMap<String, Object>();
+
+        for (Map.Entry<String, Object> entry : settings.entrySet()) {
+            String property = entry.getKey();
+
+            if (entry.getValue() instanceof Map) {
+                Map subComponentSettings = (Map) entry.getValue();
+                String subComponentType = PropertiesUtil.toString(subComponentSettings.get(TYPE), null);
+
+                if (TYPE_SERVICE.equals(subComponentType)) {
+                    String subComponentName = PropertiesUtil.toString(subComponentSettings.get(NAME), null);
+
+                    currentConfig.put(property + ".target", "(" + NAME + "=" + subComponentName + ")");
+                }
+                else {
+                    subComponentSettings.put(PARENT_NAME, name);
+
+                    if (TYPE_LIST.equals(type)) {
+                        subComponentSettings.put(KIND, kind);
+                    }
+
+                    subComponentSettings.put(NAME, name + NAME_SEPARATOR + property);
+                    Map<String, Map<String, Object>> subcomponentConfigs = transformToOsgi(subComponentSettings);
+
+                    currentConfig.put(property + ".target", "(" + PARENT_NAME + "=" + name + ")");
+                    result.putAll(subcomponentConfigs);
+                }
+            }
+            else {
+                currentConfig.put(entry.getKey(), entry.getValue());
+            }
+        }
+
+        if (!TYPE_LIST.equals(type)) {
+            result.put(kind + TARGET_DESCRIPTOR_SEPARATOR + type + TARGET_DESCRIPTOR_SEPARATOR + name, currentConfig);
+        }
+
+        return result;
+    }
+
+
+    public Map<String, Object> transformFromOsgi(List<Map<String, Object>> osgiConfigs) {
+        Map<String, Object> result = new HashMap<String, Object>();
+
+        return result;
+    }
+
+    public String  getFactoryPid(String resultKey) {
+        int index = resultKey.lastIndexOf(DistributionComponentUtils.TARGET_DESCRIPTOR_SEPARATOR);
+        String key = resultKey.substring(0, index);
+        return osgiConfigFactoryMap.get(key);
+    }
+
+    public String getKind(Class type) {
+        for (Map.Entry<String, String> entry : osgiServiceMap.entrySet()) {
+            if (type.getName().equals(entry.getValue())) {
+                return entry.getKey();
+            }
+        }
+
+        return null;
+    }
+
+
+    private static void addService(String kind, Class serviceClass) {
+        osgiServiceMap.put(kind, serviceClass.getName());
+    }
+
+    private static void addFactory(String kind, String type, Class factoryClass) {
+        osgiConfigFactoryMap.put(kind + TARGET_DESCRIPTOR_SEPARATOR + type, factoryClass.getName());
+    }
+}

Modified: sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/component/impl/ResourceBasedDistributionComponentFactory.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/component/impl/ResourceBasedDistributionComponentFactory.java?rev=1641561&r1=1641560&r2=1641561&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/component/impl/ResourceBasedDistributionComponentFactory.java (original)
+++ sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/component/impl/ResourceBasedDistributionComponentFactory.java Tue Nov 25 10:16:08 2014
@@ -23,9 +23,7 @@ import org.apache.sling.api.SlingConstan
 import org.apache.sling.api.resource.*;
 import org.apache.sling.commons.osgi.PropertiesUtil;
 import org.apache.sling.distribution.agent.DistributionAgent;
-import org.apache.sling.distribution.component.ManagedDistributionComponent;
 import org.osgi.framework.BundleContext;
-import org.osgi.framework.ServiceReference;
 import org.osgi.framework.ServiceRegistration;
 import org.osgi.service.event.Event;
 import org.osgi.service.event.EventConstants;
@@ -186,7 +184,7 @@ public class ResourceBasedDistributionCo
             Map<String, Object> componentConfig = extractMap(0, resource);
 
             putMap(0, componentConfig, config);
-            config.put(DefaultDistributionComponentFactoryConstants.COMPONENT_NAME, name);
+            config.put(DistributionComponentUtils.NAME, name);
 
             register(name, config);
         } catch (LoginException e) {
@@ -198,22 +196,18 @@ public class ResourceBasedDistributionCo
 
     }
 
-    private void unregister(String name) {
+    private void register(String componentName, Map<String, Object> config) {
 
-        ServiceRegistration componentReg = componentRegistrations.get(name);
+        if ("agent".equals(kind)) {
+            componentManager.createComponent(DistributionAgent.class, componentName,  config);
+        }
+    }
 
-        if (componentReg != null) {
-            ServiceReference reference = componentReg.getReference();
 
-            if ("agent".equals(kind)) {
-                Object replicationComponent =  savedContext.getService(reference);
-                if (replicationComponent instanceof ManagedDistributionComponent) {
-                    ((ManagedDistributionComponent) replicationComponent).disable();
-                }
-            }
-
-            componentReg.unregister();
+    private void unregister(String componentName) {
 
+        if ("agent".equals(kind)) {
+            componentManager.deleteComponent(DistributionAgent.class, componentName);
         }
     }
 
@@ -257,28 +251,6 @@ public class ResourceBasedDistributionCo
 
     }
 
-    private void register(String componentName, Map<String, Object> config) {
-        String componentClass = null;
-        Object componentObject = null;
-
-        if ("agent".equals(kind)) {
-            componentClass = DistributionAgent.class.getName();
-            componentObject = componentManager.createComponent(DistributionAgent.class, config);
-        }
-
-
-        if (componentObject != null && componentClass != null) {
-            if (componentObject instanceof ManagedDistributionComponent) {
-                ((ManagedDistributionComponent) componentObject).enable();
-            }
-
-            Dictionary<String, Object> props = new Hashtable<String, Object>();
-            props.put(NAME, componentName);
-            ServiceRegistration componentReg = savedContext.registerService(componentClass, componentObject, props);
-            componentRegistrations.put(componentName, componentReg);
-            log.debug("activated component kind {} name", kind, componentName);
-        }
-    }
 
     private class ResourceChangeEventHandler implements EventHandler {
 

Modified: sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/packaging/impl/exporter/AgentDistributionPackageExporter.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/packaging/impl/exporter/AgentDistributionPackageExporter.java?rev=1641561&r1=1641560&r2=1641561&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/packaging/impl/exporter/AgentDistributionPackageExporter.java (original)
+++ sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/packaging/impl/exporter/AgentDistributionPackageExporter.java Tue Nov 25 10:16:08 2014
@@ -38,17 +38,12 @@ import org.slf4j.LoggerFactory;
 public class AgentDistributionPackageExporter implements DistributionPackageExporter {
     private final Logger log = LoggerFactory.getLogger(getClass());
 
-    private static final String QUEUE_NAME = "queue";
 
     private DistributionAgent agent;
     private final DistributionPackageBuilder packageBuilder;
     private String queueName;
 
-    public AgentDistributionPackageExporter(Map<String, Object> config, DistributionAgent agent, DistributionPackageBuilder packageBuilder) {
-        this (PropertiesUtil.toString(config.get(QUEUE_NAME), ""), agent, packageBuilder);
-    }
-
-    private AgentDistributionPackageExporter(String queueName, DistributionAgent agent, DistributionPackageBuilder packageBuilder) {
+    public AgentDistributionPackageExporter(String queueName, DistributionAgent agent, DistributionPackageBuilder packageBuilder) {
 
         if (agent == null || packageBuilder == null) {
             throw new IllegalArgumentException("Agent and package builder are required");

Modified: sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/packaging/impl/exporter/AgentDistributionPackageExporterFactory.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/packaging/impl/exporter/AgentDistributionPackageExporterFactory.java?rev=1641561&r1=1641560&r2=1641561&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/packaging/impl/exporter/AgentDistributionPackageExporterFactory.java (original)
+++ sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/packaging/impl/exporter/AgentDistributionPackageExporterFactory.java Tue Nov 25 10:16:08 2014
@@ -20,7 +20,6 @@ package org.apache.sling.distribution.pa
 
 import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
-import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
@@ -29,20 +28,16 @@ import org.apache.felix.scr.annotations.
 import org.apache.felix.scr.annotations.ConfigurationPolicy;
 import org.apache.felix.scr.annotations.Property;
 import org.apache.felix.scr.annotations.Reference;
-import org.apache.felix.scr.annotations.ReferencePolicy;
 import org.apache.felix.scr.annotations.Service;
 import org.apache.sling.api.resource.ResourceResolver;
 import org.apache.sling.commons.osgi.PropertiesUtil;
 import org.apache.sling.distribution.agent.DistributionAgent;
 import org.apache.sling.distribution.communication.DistributionRequest;
-import org.apache.sling.distribution.component.DistributionComponent;
-import org.apache.sling.distribution.component.DistributionComponentProvider;
-import org.apache.sling.distribution.component.impl.DefaultDistributionComponentFactoryConstants;
-import org.apache.sling.distribution.component.impl.DistributionComponentManager;
-import org.apache.sling.distribution.component.impl.SettingsUtils;
+import org.apache.sling.distribution.component.impl.DistributionComponentUtils;
 import org.apache.sling.distribution.packaging.DistributionPackage;
 import org.apache.sling.distribution.packaging.DistributionPackageExportException;
 import org.apache.sling.distribution.packaging.DistributionPackageExporter;
+import org.apache.sling.distribution.serialization.DistributionPackageBuilder;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -52,25 +47,27 @@ import org.slf4j.LoggerFactory;
         specVersion = "1.1",
         policy = ConfigurationPolicy.REQUIRE)
 @Service(value = DistributionPackageExporter.class)
-public class AgentDistributionPackageExporterFactory implements DistributionPackageExporter, DistributionComponentProvider {
+public class AgentDistributionPackageExporterFactory implements DistributionPackageExporter {
     private final Logger log = LoggerFactory.getLogger(getClass());
 
-    @Property(value = DefaultDistributionComponentFactoryConstants.PACKAGE_EXPORTER_AGENT, propertyPrivate = true)
-    private static final String TYPE = DefaultDistributionComponentFactoryConstants.COMPONENT_TYPE;
 
+    /**
+     * name of this component.
+     */
     @Property
-    private static final String NAME = DefaultDistributionComponentFactoryConstants.COMPONENT_NAME;
+    public static final String NAME = DistributionComponentUtils.NAME;
 
-    @Property(label = "Target DistributionAgent", name = "DistributionAgent.target")
-    @Reference(name = "DistributionAgent", policy = ReferencePolicy.STATIC)
-    private DistributionAgent agent;
+    @Property
+    private static final String QUEUE_NAME = "queue";
 
+    @Property(name = "agent.target")
+    @Reference(name = "agent")
+    private DistributionAgent agent;
 
-    @Property(label = "Package Builder Properties", cardinality = 100)
-    public static final String PACKAGE_BUILDER = DefaultDistributionComponentFactoryConstants.COMPONENT_PACKAGE_BUILDER;
 
-    @Reference
-    private DistributionComponentManager componentManager;
+    @Property(name = "packageBuilder.target")
+    @Reference(name = "packageBuilder")
+    DistributionPackageBuilder packageBuilder;
 
     private DistributionPackageExporter packageExporter;
 
@@ -78,12 +75,9 @@ public class AgentDistributionPackageExp
     @Activate
     public void activate(Map<String, Object> config) throws Exception {
 
-        Map<String, Object> properties = new HashMap<String, Object>();
-        properties.putAll(config);
-        String[] packageBuilderProperties = PropertiesUtil.toStringArray(config.get(PACKAGE_BUILDER));
-        properties.put(PACKAGE_BUILDER, SettingsUtils.parseLines(packageBuilderProperties));
+        String queueName = PropertiesUtil.toString(config.get(QUEUE_NAME), "");
 
-        packageExporter = componentManager.createComponent(DistributionPackageExporter.class, properties, this);
+        packageExporter = new AgentDistributionPackageExporter(queueName, agent, packageBuilder);
     }
 
     @Nonnull
@@ -95,11 +89,4 @@ public class AgentDistributionPackageExp
         return packageExporter.getPackage(resourceResolver, distributionPackageId);
     }
 
-    public <ComponentType extends DistributionComponent> ComponentType getComponent(@Nonnull Class<ComponentType> type,
-                                                                                   @Nullable String componentName) {
-        if (type.isAssignableFrom(DistributionAgent.class)) {
-            return (ComponentType) agent;
-        }
-        return null;
-    }
 }

Modified: sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/packaging/impl/exporter/LocalDistributionPackageExporterFactory.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/packaging/impl/exporter/LocalDistributionPackageExporterFactory.java?rev=1641561&r1=1641560&r2=1641561&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/packaging/impl/exporter/LocalDistributionPackageExporterFactory.java (original)
+++ sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/packaging/impl/exporter/LocalDistributionPackageExporterFactory.java Tue Nov 25 10:16:08 2014
@@ -19,7 +19,6 @@
 package org.apache.sling.distribution.packaging.impl.exporter;
 
 import javax.annotation.Nonnull;
-import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
@@ -30,14 +29,12 @@ import org.apache.felix.scr.annotations.
 import org.apache.felix.scr.annotations.Reference;
 import org.apache.felix.scr.annotations.Service;
 import org.apache.sling.api.resource.ResourceResolver;
-import org.apache.sling.commons.osgi.PropertiesUtil;
 import org.apache.sling.distribution.communication.DistributionRequest;
-import org.apache.sling.distribution.component.impl.DefaultDistributionComponentFactoryConstants;
-import org.apache.sling.distribution.component.impl.DistributionComponentManager;
-import org.apache.sling.distribution.component.impl.SettingsUtils;
+import org.apache.sling.distribution.component.impl.DistributionComponentUtils;
 import org.apache.sling.distribution.packaging.DistributionPackage;
 import org.apache.sling.distribution.packaging.DistributionPackageExportException;
 import org.apache.sling.distribution.packaging.DistributionPackageExporter;
+import org.apache.sling.distribution.serialization.DistributionPackageBuilder;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -55,28 +52,21 @@ public class LocalDistributionPackageExp
 
     private final Logger log = LoggerFactory.getLogger(getClass());
 
-    @Property(value = DefaultDistributionComponentFactoryConstants.PACKAGE_EXPORTER_LOCAL, propertyPrivate = true)
-    private static final String TYPE = DefaultDistributionComponentFactoryConstants.COMPONENT_TYPE;
-
+    /**
+     * name of this component.
+     */
     @Property
-    private static final String NAME = DefaultDistributionComponentFactoryConstants.COMPONENT_NAME;
-
-    @Property(label = "Package Builder Properties", cardinality = 100)
-    public static final String PACKAGE_BUILDER = DefaultDistributionComponentFactoryConstants.COMPONENT_PACKAGE_BUILDER;
+    public static final String NAME = DistributionComponentUtils.NAME;
 
-    @Reference
-    private DistributionComponentManager componentManager;
+    @Property(name = "packageBuilder.target")
+    @Reference(name = "packageBuilder")
+    DistributionPackageBuilder packageBuilder;
 
     private DistributionPackageExporter exporter;
 
     @Activate
     public void activate(Map<String, Object> config) {
-        Map<String, Object> properties = new HashMap<String, Object>();
-        properties.putAll(config);
-        String[] packageBuilderProperties = PropertiesUtil.toStringArray(config.get(PACKAGE_BUILDER));
-        properties.put(PACKAGE_BUILDER, SettingsUtils.parseLines(packageBuilderProperties));
-
-        exporter = componentManager.createComponent(DistributionPackageExporter.class, properties, null);
+        exporter = new LocalDistributionPackageExporter(packageBuilder);
     }