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);
}