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

svn commit: r1632062 - in /sling/trunk/contrib/extensions/replication: core/src/main/java/org/apache/sling/replication/agent/impl/ core/src/main/java/org/apache/sling/replication/packaging/impl/exporter/ core/src/main/java/org/apache/sling/replication/...

Author: tommaso
Date: Wed Oct 15 14:46:42 2014
New Revision: 1632062

URL: http://svn.apache.org/r1632062
Log:
SLING-4052 - cleaned up jcr pacakges

Added:
    sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/packaging/impl/exporter/AgentReplicationPackageExporter.java   (with props)
Modified:
    sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/agent/impl/CoordinatingReplicationAgentFactory.java
    sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/agent/impl/DefaultReplicationComponentFactory.java
    sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/agent/impl/DefaultReplicationComponentProvider.java
    sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/agent/impl/GenericReplicationComponentFactory.java
    sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/agent/impl/SimpleReplicationAgentFactory.java
    sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/packaging/impl/exporter/AgentReplicationPackageExporterFactory.java
    sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/packaging/impl/exporter/LocalReplicationPackageExporter.java
    sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/packaging/impl/exporter/LocalReplicationPackageExporterFactory.java
    sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/packaging/impl/exporter/RemoteReplicationPackageExporter.java
    sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/packaging/impl/exporter/RemoteReplicationPackageExporterFactory.java
    sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/packaging/impl/exporter/strategy/PrivilegeReplicationPackageExporterStrategy.java
    sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/packaging/impl/importer/LocalReplicationPackageImporter.java
    sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/packaging/impl/importer/LocalReplicationPackageImporterFactory.java
    sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/packaging/impl/importer/RemoteReplicationPackageImporter.java
    sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/packaging/impl/importer/RemoteReplicationPackageImporterFactory.java
    sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/serialization/impl/vlt/FileVaultReplicationPackage.java
    sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/serialization/impl/vlt/FileVaultReplicationPackageBuilder.java
    sling/trunk/contrib/extensions/replication/sample/src/main/resources/SLING-CONTENT/libs/sling/replication/install.publish/org.apache.sling.replication.agent.impl.SimpleReplicationAgentFactory-reverse.json
    sling/trunk/contrib/extensions/replication/sample/src/main/resources/SLING-CONTENT/libs/sling/replication/install.publish/org.apache.sling.replication.packaging.impl.exporter.AgentReplicationPackageExporterFactory-reverse.json
    sling/trunk/contrib/extensions/replication/sample/src/main/resources/SLING-CONTENT/libs/sling/replication/install.publish/org.apache.sling.replication.packaging.impl.exporter.LocalReplicationPackageExporterFactory-default.json
    sling/trunk/contrib/extensions/replication/sample/src/main/resources/SLING-CONTENT/libs/sling/replication/install.publish/org.apache.sling.replication.packaging.impl.importer.AdvancedRemoteReplicationPackageImporter-cache-flush.json
    sling/trunk/contrib/extensions/replication/sample/src/main/resources/SLING-CONTENT/libs/sling/replication/install.publish/org.apache.sling.replication.packaging.impl.importer.LocalReplicationPackageImporterFactory-default.json

Modified: sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/agent/impl/CoordinatingReplicationAgentFactory.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/agent/impl/CoordinatingReplicationAgentFactory.java?rev=1632062&r1=1632061&r2=1632062&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/agent/impl/CoordinatingReplicationAgentFactory.java (original)
+++ sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/agent/impl/CoordinatingReplicationAgentFactory.java Wed Oct 15 14:46:42 2014
@@ -55,7 +55,7 @@ import org.slf4j.LoggerFactory;
  * An OSGi service factory for 'Coordinate' {@link org.apache.sling.replication.agent.ReplicationAgent}s.
  */
 @Component(metatype = true,
-        label = "Coordinating Replication Agents Factory",
+        label = "Sling Replication - Coordinating Agents Factory",
         description = "OSGi configuration factory for coordinate agents",
         configurationFactory = true,
         specVersion = "1.1",

Modified: sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/agent/impl/DefaultReplicationComponentFactory.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/agent/impl/DefaultReplicationComponentFactory.java?rev=1632062&r1=1632061&r2=1632062&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/agent/impl/DefaultReplicationComponentFactory.java (original)
+++ sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/agent/impl/DefaultReplicationComponentFactory.java Wed Oct 15 14:46:42 2014
@@ -40,16 +40,17 @@ import org.apache.sling.replication.even
 import org.apache.sling.replication.packaging.ReplicationPackageExporter;
 import org.apache.sling.replication.packaging.ReplicationPackageExporterStrategy;
 import org.apache.sling.replication.packaging.ReplicationPackageImporter;
+import org.apache.sling.replication.packaging.impl.exporter.*;
 import org.apache.sling.replication.packaging.impl.exporter.strategy.DefaultReplicationPackageExporterStrategy;
-import org.apache.sling.replication.packaging.impl.exporter.LocalReplicationPackageExporterFactory;
-import org.apache.sling.replication.packaging.impl.exporter.RemoteReplicationPackageExporterFactory;
 import org.apache.sling.replication.packaging.impl.exporter.strategy.PrivilegeReplicationPackageExporterStrategy;
+import org.apache.sling.replication.packaging.impl.importer.LocalReplicationPackageImporter;
 import org.apache.sling.replication.packaging.impl.importer.LocalReplicationPackageImporterFactory;
+import org.apache.sling.replication.packaging.impl.importer.RemoteReplicationPackageImporter;
 import org.apache.sling.replication.packaging.impl.importer.RemoteReplicationPackageImporterFactory;
 import org.apache.sling.replication.queue.ReplicationQueueDistributionStrategy;
 import org.apache.sling.replication.queue.ReplicationQueueProvider;
 import org.apache.sling.replication.serialization.ReplicationPackageBuilder;
-import org.apache.sling.replication.serialization.impl.vlt.FileVaultReplicationPackageBuilderFactory;
+import org.apache.sling.replication.serialization.impl.vlt.FileVaultReplicationPackageBuilder;
 import org.apache.sling.replication.transport.authentication.TransportAuthenticationProvider;
 import org.apache.sling.replication.transport.authentication.impl.UserCredentialsTransportAuthenticationProvider;
 import org.apache.sling.replication.trigger.ReplicationTrigger;
@@ -78,7 +79,7 @@ import org.slf4j.LoggerFactory;
         immediate = true
 )
 @Service(ReplicationComponentFactory.class)
-public class DefaultReplicationComponentFactory implements ReplicationComponentFactory {
+public class DefaultReplicationComponentFactory implements ReplicationComponentFactory, ReplicationComponentProvider {
 
     public static final String COMPONENT_TYPE = "type";
     public static final String NAME = "name";
@@ -107,9 +108,12 @@ public class DefaultReplicationComponent
         this.bundleContext = bundleContext;
     }
 
-
     public <ComponentType> ComponentType createComponent(Class<ComponentType> type, Map<String, Object> properties,
                                                          ReplicationComponentProvider componentProvider) {
+
+        if (componentProvider == null) {
+            componentProvider = this;
+        }
         try {
             if (type.isAssignableFrom(ReplicationAgent.class)) {
                 return (ComponentType) createAgent(properties, componentProvider);
@@ -117,12 +121,17 @@ public class DefaultReplicationComponent
                 return (ComponentType) createTrigger(properties, componentProvider);
             } else if (type.isAssignableFrom(TransportAuthenticationProvider.class)) {
                 return (ComponentType) createTransportAuthenticationProvider(properties, componentProvider);
+            } else if (type.isAssignableFrom(ReplicationPackageImporter.class)) {
+                return (ComponentType) createImporter(properties, componentProvider);
+            } else if (type.isAssignableFrom(ReplicationPackageExporter.class)) {
+                return (ComponentType) createExporter(properties, componentProvider);
             }
+        }
+        catch (IllegalArgumentException e) {
+            log.debug("Cannot create component", e);
+        }
 
-        } catch (Throwable t) {
-            log.error("Cannot create component", t);
 
-        }
         return null;
     }
 
@@ -196,20 +205,30 @@ public class DefaultReplicationComponent
             String name = PropertiesUtil.toString(properties.get(NAME), null);
             return componentProvider.getComponent(ReplicationPackageExporter.class, name);
 
-        } else if ("local".equals(factory)) {
+        } else if (LocalReplicationPackageExporter.NAME.equals(factory)) {
             Map<String, Object> builderProperties = extractMap("packageBuilder", properties);
             ReplicationPackageBuilder packageBuilder = createBuilder(builderProperties);
-            return LocalReplicationPackageExporterFactory.getInstance(packageBuilder);
-        } else if ("remote".equals(factory)) {
+            return new LocalReplicationPackageExporter(packageBuilder);
+        } else if (RemoteReplicationPackageExporter.NAME.equals(factory)) {
             Map<String, Object> authenticationProviderProperties = extractMap("authenticationProvider", properties);
             TransportAuthenticationProvider authenticationProvider = createTransportAuthenticationProvider(authenticationProviderProperties, componentProvider);
 
             Map<String, Object> builderProperties = extractMap("packageBuilder", properties);
             ReplicationPackageBuilder packageBuilder = createBuilder(builderProperties);
 
-            return RemoteReplicationPackageExporterFactory.getInstance(properties, packageBuilder, authenticationProvider);
+            return new  RemoteReplicationPackageExporter(properties, packageBuilder, authenticationProvider);
+        } else if (AgentReplicationPackageExporter.NAME.equals(factory)) {
+            Map<String, Object> builderProperties = extractMap("packageBuilder", properties);
+            ReplicationPackageBuilder packageBuilder = createBuilder(builderProperties);
+
+            Map<String, Object> agentProperties = extractMap("agent", properties);
+            String agentName = PropertiesUtil.toString(agentProperties.get(NAME), null);
+            ReplicationAgent agent = componentProvider.getComponent(ReplicationAgent.class, agentName);
+
+            return new AgentReplicationPackageExporter(properties, agent, packageBuilder);
         }
 
+
         return null;
     }
 
@@ -220,15 +239,15 @@ public class DefaultReplicationComponent
         if ("service".equals(factory)) {
             String name = PropertiesUtil.toString(properties.get(NAME), null);
             return componentProvider.getComponent(ReplicationPackageImporter.class, name);
-        } else if ("local".equals(factory)) {
+        } else if (LocalReplicationPackageImporter.NAME.equals(factory)) {
             Map<String, Object> builderProperties = extractMap("packageBuilder", properties);
             ReplicationPackageBuilder packageBuilder = createBuilder(builderProperties);
-            return LocalReplicationPackageImporterFactory.getInstance(properties, packageBuilder, replicationEventFactory);
-        } else if ("remote".equals(factory)) {
+            return new LocalReplicationPackageImporter(properties, packageBuilder, replicationEventFactory);
+        } else if (RemoteReplicationPackageImporter.NAME.equals(factory)) {
             Map<String, Object> authenticationProviderProperties = extractMap("authenticationProvider", properties);
             TransportAuthenticationProvider authenticationProvider = createTransportAuthenticationProvider(authenticationProviderProperties, componentProvider);
 
-            return RemoteReplicationPackageImporterFactory.getInstance(properties, authenticationProvider);
+            return new RemoteReplicationPackageImporter(properties, authenticationProvider);
         }
 
         return null;
@@ -274,8 +293,8 @@ public class DefaultReplicationComponent
     public ReplicationPackageBuilder createBuilder(Map<String, Object> properties) {
         String factory = PropertiesUtil.toString(properties.get(COMPONENT_TYPE), "service");
 
-        if ("vlt".equals(factory)) {
-            return FileVaultReplicationPackageBuilderFactory.getInstance(properties, repository, packaging, replicationEventFactory);
+        if (FileVaultReplicationPackageBuilder.NAME.equals(factory)) {
+            return new FileVaultReplicationPackageBuilder(packaging, replicationEventFactory);
         }
 
         return null;
@@ -333,4 +352,7 @@ public class DefaultReplicationComponent
         return result;
     }
 
+    public <ComponentType> ComponentType getComponent(Class<ComponentType> type, String componentName) {
+        return null;
+    }
 }

Modified: sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/agent/impl/DefaultReplicationComponentProvider.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/agent/impl/DefaultReplicationComponentProvider.java?rev=1632062&r1=1632061&r2=1632062&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/agent/impl/DefaultReplicationComponentProvider.java (original)
+++ sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/agent/impl/DefaultReplicationComponentProvider.java Wed Oct 15 14:46:42 2014
@@ -28,6 +28,7 @@ import org.apache.felix.scr.annotations.
 import org.apache.felix.scr.annotations.ReferencePolicy;
 import org.apache.felix.scr.annotations.References;
 import org.apache.felix.scr.annotations.Service;
+import org.apache.sling.replication.agent.ReplicationAgent;
 import org.apache.sling.replication.agent.ReplicationComponentProvider;
 import org.apache.sling.replication.packaging.ReplicationPackageExporter;
 import org.apache.sling.replication.packaging.ReplicationPackageImporter;
@@ -45,6 +46,7 @@ import org.slf4j.LoggerFactory;
 @Service(ReplicationComponentProvider.class)
 @Property(name = "name", value = "default")
 @References({
+        @Reference(name = "replicationAgent", referenceInterface = ReplicationAgent.class, cardinality = ReferenceCardinality.OPTIONAL_MULTIPLE, policy = ReferencePolicy.DYNAMIC),
         @Reference(name = "replicationPackageImporter", referenceInterface = ReplicationPackageImporter.class, cardinality = ReferenceCardinality.OPTIONAL_MULTIPLE, policy = ReferencePolicy.DYNAMIC),
         @Reference(name = "replicationPackageExporter", referenceInterface = ReplicationPackageExporter.class, cardinality = ReferenceCardinality.OPTIONAL_MULTIPLE, policy = ReferencePolicy.DYNAMIC),
         @Reference(name = "replicationQueueProvider", referenceInterface = ReplicationQueueProvider.class, cardinality = ReferenceCardinality.OPTIONAL_MULTIPLE, policy = ReferencePolicy.DYNAMIC),
@@ -58,6 +60,7 @@ public class DefaultReplicationComponent
 
     private final Logger log = LoggerFactory.getLogger(getClass());
 
+    Map<String, ReplicationAgent> replicationAgentMap = new ConcurrentHashMap<String, ReplicationAgent>();
     Map<String, ReplicationQueueProvider> replicationQueueProviderMap = new ConcurrentHashMap<String, ReplicationQueueProvider>();
     Map<String, ReplicationQueueDistributionStrategy> replicationQueueDistributionStrategyMap = new ConcurrentHashMap<String, ReplicationQueueDistributionStrategy>();
     Map<String, TransportAuthenticationProvider> transportAuthenticationProviderMap = new ConcurrentHashMap<String, TransportAuthenticationProvider>();
@@ -166,4 +169,22 @@ public class DefaultReplicationComponent
 
     }
 
+    private void bindReplicationAgent(ReplicationAgent replicationAgent, Map<String, Object> config) {
+
+        String name = (String) config.get("name");
+        if (name != null) {
+            replicationAgentMap.put(name, replicationAgent);
+        }
+    }
+
+    private void unbindReplicationAgent(ReplicationAgent replicationAgent, Map<String, Object> config) {
+
+        String name = (String) config.get("name");
+        if (name != null) {
+            replicationAgentMap.remove(name);
+        }
+
+    }
+
+
 }

Modified: sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/agent/impl/GenericReplicationComponentFactory.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/agent/impl/GenericReplicationComponentFactory.java?rev=1632062&r1=1632061&r2=1632062&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/agent/impl/GenericReplicationComponentFactory.java (original)
+++ sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/agent/impl/GenericReplicationComponentFactory.java Wed Oct 15 14:46:42 2014
@@ -46,7 +46,7 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 @Component(metatype = true,
-        label = "Generic Replication Components Factory",
+        label = "Sling Replication - Generic Components Factory",
         description = "OSGi configuration factory for generic Replication Components",
         configurationFactory = true,
         specVersion = "1.1",

Modified: sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/agent/impl/SimpleReplicationAgentFactory.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/agent/impl/SimpleReplicationAgentFactory.java?rev=1632062&r1=1632061&r2=1632062&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/agent/impl/SimpleReplicationAgentFactory.java (original)
+++ sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/agent/impl/SimpleReplicationAgentFactory.java Wed Oct 15 14:46:42 2014
@@ -54,7 +54,7 @@ import org.slf4j.LoggerFactory;
  * An OSGi service factory for {@link ReplicationAgent}s which references already existing OSGi services.
  */
 @Component(metatype = true,
-        label = "Simple Replication Agents Factory",
+        label = "Sling Replication - Simple Agents Factory",
         description = "OSGi configuration factory for agents",
         configurationFactory = true,
         specVersion = "1.1",

Added: sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/packaging/impl/exporter/AgentReplicationPackageExporter.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/packaging/impl/exporter/AgentReplicationPackageExporter.java?rev=1632062&view=auto
==============================================================================
--- sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/packaging/impl/exporter/AgentReplicationPackageExporter.java (added)
+++ sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/packaging/impl/exporter/AgentReplicationPackageExporter.java Wed Oct 15 14:46:42 2014
@@ -0,0 +1,95 @@
+/*
+ * 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.replication.packaging.impl.exporter;
+
+import java.util.ArrayList;
+import java.util.List;
+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.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.replication.agent.ReplicationAgent;
+import org.apache.sling.replication.communication.ReplicationRequest;
+import org.apache.sling.replication.packaging.ReplicationPackage;
+import org.apache.sling.replication.packaging.ReplicationPackageExporter;
+import org.apache.sling.replication.queue.ReplicationQueue;
+import org.apache.sling.replication.queue.ReplicationQueueItem;
+import org.apache.sling.replication.serialization.ReplicationPackageBuilder;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class AgentReplicationPackageExporter implements ReplicationPackageExporter {
+    private final Logger log = LoggerFactory.getLogger(getClass());
+
+    public static final String NAME = "agent";
+    public static final String QUEUE_NAME = "queue";
+
+    private ReplicationAgent agent;
+    private final ReplicationPackageBuilder packageBuilder;
+    private String queueName;
+
+    public AgentReplicationPackageExporter(Map<String, Object> config, ReplicationAgent agent, ReplicationPackageBuilder packageBuilder) {
+        this (PropertiesUtil.toString(config.get(QUEUE_NAME), ""), agent, packageBuilder);
+    }
+
+    public AgentReplicationPackageExporter(String queueName, ReplicationAgent agent, ReplicationPackageBuilder packageBuilder) {
+
+        if (agent == null || packageBuilder == null) {
+            throw new IllegalArgumentException("Agent and package builder are required");
+        }
+        this.queueName = queueName;
+        this.agent = agent;
+        this.packageBuilder = packageBuilder;
+    }
+
+    public List<ReplicationPackage> exportPackage(ResourceResolver resourceResolver, ReplicationRequest replicationRequest) {
+
+        List<ReplicationPackage> result = new ArrayList<ReplicationPackage>();
+        try {
+            log.info("getting item from queue {}", queueName);
+
+            ReplicationQueue queue = agent.getQueue(queueName);
+            ReplicationQueueItem info = queue.getHead();
+            ReplicationPackage replicationPackage;
+            if (info != null) {
+                replicationPackage = packageBuilder.getPackage(resourceResolver, info.getId());
+                queue.remove(info.getId());
+                if (replicationPackage != null) {
+                    result.add(replicationPackage);
+                }
+            }
+
+        } catch (Exception ex) {
+            log.error("Error exporting package", ex);
+        }
+
+        return result;
+    }
+
+    public ReplicationPackage exportPackageById(ResourceResolver resourceResolver, String replicationPackageId) {
+        return null;
+    }
+}

Propchange: sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/packaging/impl/exporter/AgentReplicationPackageExporter.java
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/packaging/impl/exporter/AgentReplicationPackageExporterFactory.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/packaging/impl/exporter/AgentReplicationPackageExporterFactory.java?rev=1632062&r1=1632061&r2=1632062&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/packaging/impl/exporter/AgentReplicationPackageExporterFactory.java (original)
+++ sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/packaging/impl/exporter/AgentReplicationPackageExporterFactory.java Wed Oct 15 14:46:42 2014
@@ -32,72 +32,63 @@ import org.apache.felix.scr.annotations.
 import org.apache.sling.api.resource.ResourceResolver;
 import org.apache.sling.commons.osgi.PropertiesUtil;
 import org.apache.sling.replication.agent.ReplicationAgent;
+import org.apache.sling.replication.agent.ReplicationComponent;
+import org.apache.sling.replication.agent.ReplicationComponentFactory;
+import org.apache.sling.replication.agent.ReplicationComponentProvider;
 import org.apache.sling.replication.communication.ReplicationRequest;
 import org.apache.sling.replication.packaging.ReplicationPackage;
 import org.apache.sling.replication.packaging.ReplicationPackageExporter;
 import org.apache.sling.replication.queue.ReplicationQueue;
 import org.apache.sling.replication.queue.ReplicationQueueItem;
 import org.apache.sling.replication.serialization.ReplicationPackageBuilder;
+import org.apache.sling.replication.serialization.ReplicationPackageBuildingException;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-@Component(label = "Agent Based Replication Package Exporter",
+@Component(label = "Sling Replication - Agent Based Package Exporter",
+        metatype = true,
         configurationFactory = true,
         specVersion = "1.1",
         policy = ConfigurationPolicy.REQUIRE)
 @Service(value = ReplicationPackageExporter.class)
-public class AgentReplicationPackageExporterFactory implements ReplicationPackageExporter {
+public class AgentReplicationPackageExporterFactory implements ReplicationPackageExporter, ReplicationComponentProvider {
     private final Logger log = LoggerFactory.getLogger(getClass());
 
+    @Property(value = AgentReplicationPackageExporter.NAME, propertyPrivate = true)
+    private static final String TYPE = "type";
+
     @Property
     private static final String NAME = "name";
 
-    @Property(value = "exporters/agent", propertyPrivate = true)
-    private static final String FACTORY_NAME = "factoryName";
-
-    @Property(label = "Queue")
-    private static final String QUEUE_NAME = "queue";
-
     @Property(label = "Target ReplicationAgent", name = "ReplicationAgent.target")
     @Reference(name = "ReplicationAgent", policy = ReferencePolicy.STATIC)
     private ReplicationAgent agent;
 
-    @Property(label = "Target ReplicationPackageBuilder", name = "ReplicationPackageBuilder.target")
-    @Reference(name = "ReplicationPackageBuilder", policy = ReferencePolicy.STATIC)
-    private ReplicationPackageBuilder replicationPackageBuilder;
+    @Reference
+    ReplicationComponentFactory replicationComponentFactory;
 
-    private String queueName;
+    ReplicationPackageExporter packageExporter;
 
-    @Activate
-    public void activate(Map<String, ?> config) throws Exception {
-        queueName = PropertiesUtil.toString(config.get(QUEUE_NAME), "");
-    }
 
-    public List<ReplicationPackage> exportPackage(ResourceResolver resourceResolver, ReplicationRequest replicationRequest) {
+    @Activate
+    public void activate(Map<String, Object> config) throws Exception {
 
-        List<ReplicationPackage> result = new ArrayList<ReplicationPackage>();
-        try {
-            log.info("getting item from queue {}", queueName);
-
-            ReplicationQueue queue = agent.getQueue(queueName);
-            ReplicationQueueItem info = queue.getHead();
-            ReplicationPackage replicationPackage;
-            if (info != null) {
-                replicationPackage = replicationPackageBuilder.getPackage(resourceResolver, info.getId());
-                queue.remove(info.getId());
-                if (replicationPackage != null) {
-                    result.add(replicationPackage);
-                }
-            }
+        packageExporter = replicationComponentFactory.createComponent(ReplicationPackageExporter.class, config, this);
+    }
 
-        } catch (Exception ex) {
-            log.error("Error exporting package", ex);
-        }
+    public List<ReplicationPackage> exportPackage(ResourceResolver resourceResolver, ReplicationRequest replicationRequest) throws ReplicationPackageBuildingException {
 
-        return result;
+       return packageExporter.exportPackage(resourceResolver, replicationRequest);
     }
 
     public ReplicationPackage exportPackageById(ResourceResolver resourceResolver, String replicationPackageId) {
+        return packageExporter.exportPackageById(resourceResolver, replicationPackageId);
+    }
+
+    public <ComponentType> ComponentType getComponent(Class<ComponentType> type, String componentName) {
+        if (type.isAssignableFrom(ReplicationAgent.class)) {
+            return (ComponentType) agent;
+        }
         return null;
     }
 }

Modified: sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/packaging/impl/exporter/LocalReplicationPackageExporter.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/packaging/impl/exporter/LocalReplicationPackageExporter.java?rev=1632062&r1=1632061&r2=1632062&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/packaging/impl/exporter/LocalReplicationPackageExporter.java (original)
+++ sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/packaging/impl/exporter/LocalReplicationPackageExporter.java Wed Oct 15 14:46:42 2014
@@ -34,6 +34,8 @@ import org.apache.sling.replication.seri
  */
 public class LocalReplicationPackageExporter implements ReplicationPackageExporter {
 
+    public static final String NAME = "local";
+
     private ReplicationPackageBuilder packageBuilder;
 
     public LocalReplicationPackageExporter(ReplicationPackageBuilder packageBuilder) {

Modified: sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/packaging/impl/exporter/LocalReplicationPackageExporterFactory.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/packaging/impl/exporter/LocalReplicationPackageExporterFactory.java?rev=1632062&r1=1632061&r2=1632062&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/packaging/impl/exporter/LocalReplicationPackageExporterFactory.java (original)
+++ sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/packaging/impl/exporter/LocalReplicationPackageExporterFactory.java Wed Oct 15 14:46:42 2014
@@ -19,6 +19,7 @@
 package org.apache.sling.replication.packaging.impl.exporter;
 
 import java.util.List;
+import java.util.Map;
 
 import org.apache.felix.scr.annotations.Activate;
 import org.apache.felix.scr.annotations.Component;
@@ -28,6 +29,7 @@ import org.apache.felix.scr.annotations.
 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.replication.agent.ReplicationComponentFactory;
 import org.apache.sling.replication.communication.ReplicationRequest;
 import org.apache.sling.replication.packaging.ReplicationPackage;
 import org.apache.sling.replication.packaging.ReplicationPackageExporter;
@@ -40,7 +42,8 @@ import org.slf4j.LoggerFactory;
  * {@link org.apache.sling.replication.packaging.ReplicationPackageExporter} implementation which creates a FileVault based
  * {@link org.apache.sling.replication.packaging.ReplicationPackage} locally.
  */
-@Component(label = "Local Replication Package Exporter",
+@Component(label = "Sling Replication - Local Package Exporter Factory",
+        metatype = true,
         configurationFactory = true,
         specVersion = "1.1",
         policy = ConfigurationPolicy.REQUIRE)
@@ -49,24 +52,20 @@ public class LocalReplicationPackageExpo
 
     private final Logger log = LoggerFactory.getLogger(getClass());
 
+    @Property(value = LocalReplicationPackageExporter.NAME, propertyPrivate = true)
+    private static final String TYPE = "type";
+
     @Property
     private static final String NAME = "name";
 
-
-    @Property(label = "Target ReplicationPackageBuilder", name = "ReplicationPackageBuilder.target")
-    @Reference(name = "ReplicationPackageBuilder", policy = ReferencePolicy.STATIC)
-    private ReplicationPackageBuilder packageBuilder;
-
+    @Reference
+    ReplicationComponentFactory replicationComponentFactory;
 
     ReplicationPackageExporter exporter;
 
     @Activate
-    public void activate() {
-        exporter = getInstance(packageBuilder);
-    }
-
-    public static ReplicationPackageExporter getInstance(ReplicationPackageBuilder packageBuilder) {
-        return new LocalReplicationPackageExporter(packageBuilder);
+    public void activate(Map<String, Object> config) {
+        exporter = replicationComponentFactory.createComponent(ReplicationPackageExporter.class, config, null);
     }
 
 

Modified: sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/packaging/impl/exporter/RemoteReplicationPackageExporter.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/packaging/impl/exporter/RemoteReplicationPackageExporter.java?rev=1632062&r1=1632061&r2=1632062&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/packaging/impl/exporter/RemoteReplicationPackageExporter.java (original)
+++ sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/packaging/impl/exporter/RemoteReplicationPackageExporter.java Wed Oct 15 14:46:42 2014
@@ -20,8 +20,10 @@ package org.apache.sling.replication.pac
 
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Map;
 
 import org.apache.sling.api.resource.ResourceResolver;
+import org.apache.sling.commons.osgi.PropertiesUtil;
 import org.apache.sling.replication.communication.ReplicationEndpoint;
 import org.apache.sling.replication.communication.ReplicationRequest;
 import org.apache.sling.replication.packaging.ReplicationPackage;
@@ -31,6 +33,7 @@ import org.apache.sling.replication.seri
 import org.apache.sling.replication.transport.ReplicationTransportHandler;
 import org.apache.sling.replication.transport.authentication.TransportAuthenticationProvider;
 import org.apache.sling.replication.transport.impl.MultipleEndpointReplicationTransportHandler;
+import org.apache.sling.replication.transport.impl.ReplicationTransportConstants;
 import org.apache.sling.replication.transport.impl.SimpleHttpReplicationTransportHandler;
 import org.apache.sling.replication.transport.impl.TransportEndpointStrategyType;
 
@@ -39,16 +42,39 @@ import org.apache.sling.replication.tran
  */
 public class RemoteReplicationPackageExporter implements ReplicationPackageExporter {
 
+
+    public static final String NAME = "remote";
+    public static final String POLL_ITEMS = "poll.items";
+
+
     private final ReplicationPackageBuilder packageBuilder;
 
     ReplicationTransportHandler transportHandler;
 
-    public RemoteReplicationPackageExporter(ReplicationPackageBuilder packageBuilder, TransportAuthenticationProvider transportAuthenticationProvider,
+
+    public RemoteReplicationPackageExporter(Map<String, Object> config,
+                                            ReplicationPackageBuilder packageBuilder,
+                                            TransportAuthenticationProvider transportAuthenticationProvider) {
+
+        this(packageBuilder, transportAuthenticationProvider,
+                PropertiesUtil.toStringArray(config.get(ReplicationTransportConstants.ENDPOINTS), new String[0]),
+                PropertiesUtil.toString(config.get(ReplicationTransportConstants.ENDPOINT_STRATEGY), "One"),
+                PropertiesUtil.toInteger(config.get(POLL_ITEMS), Integer.MAX_VALUE));
+    }
+
+    public RemoteReplicationPackageExporter(ReplicationPackageBuilder packageBuilder,
+                                            TransportAuthenticationProvider transportAuthenticationProvider,
                                             String[] endpoints,
-                                            TransportEndpointStrategyType transportEndpointStrategyType,
+                                            String transportEndpointStrategyName,
                                             int pollItems) {
+        if (packageBuilder == null) {
+            throw new IllegalArgumentException("packageBuilder is required");
+        }
+
         this.packageBuilder = packageBuilder;
 
+        TransportEndpointStrategyType transportEndpointStrategyType = TransportEndpointStrategyType.valueOf(transportEndpointStrategyName);
+
         List<ReplicationTransportHandler> transportHandlers = new ArrayList<ReplicationTransportHandler>();
 
         for (String endpoint : endpoints) {

Modified: sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/packaging/impl/exporter/RemoteReplicationPackageExporterFactory.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/packaging/impl/exporter/RemoteReplicationPackageExporterFactory.java?rev=1632062&r1=1632061&r2=1632062&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/packaging/impl/exporter/RemoteReplicationPackageExporterFactory.java (original)
+++ sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/packaging/impl/exporter/RemoteReplicationPackageExporterFactory.java Wed Oct 15 14:46:42 2014
@@ -18,6 +18,7 @@
  */
 package org.apache.sling.replication.packaging.impl.exporter;
 
+import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
@@ -32,6 +33,8 @@ import org.apache.felix.scr.annotations.
 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.replication.agent.ReplicationComponentFactory;
+import org.apache.sling.replication.agent.ReplicationComponentProvider;
 import org.apache.sling.replication.communication.ReplicationRequest;
 import org.apache.sling.replication.packaging.ReplicationPackage;
 import org.apache.sling.replication.packaging.ReplicationPackageExporter;
@@ -46,27 +49,27 @@ import org.slf4j.LoggerFactory;
 /**
  * Default implementation of {@link org.apache.sling.replication.packaging.ReplicationPackageExporter}
  */
-@Component(label = "Remote Replication Package Exporter",
+@Component(label = "Sling Replication - Remote Package Exporter Factory",
+        metatype = true,
         configurationFactory = true,
         specVersion = "1.1",
         policy = ConfigurationPolicy.REQUIRE)
 @Service(value = ReplicationPackageExporter.class)
-public class RemoteReplicationPackageExporterFactory implements ReplicationPackageExporter {
+public class RemoteReplicationPackageExporterFactory implements ReplicationPackageExporter, ReplicationComponentProvider {
     private final Logger log = LoggerFactory.getLogger(getClass());
 
+    @Property(value = RemoteReplicationPackageExporter.NAME, propertyPrivate = true)
+    private static final String TYPE = "type";
+
     @Property
     private static final String NAME = "name";
 
-    @Property(value = "exporters/remote", propertyPrivate = true)
-    private static final String FACTORY_NAME = "factoryName";
-
     @Property(name = ReplicationTransportConstants.TRANSPORT_AUTHENTICATION_PROVIDER_TARGET)
-    @Reference(name = "TransportAuthenticationProviderFactory", policy = ReferencePolicy.DYNAMIC)
+    @Reference(name = "TransportAuthenticationProvider", policy = ReferencePolicy.STATIC)
     private volatile TransportAuthenticationProvider transportAuthenticationProvider;
 
-    @Property(label = "Target ReplicationPackageBuilder", name = "ReplicationPackageBuilder.target")
-    @Reference(name = "ReplicationPackageBuilder", policy = ReferencePolicy.DYNAMIC)
-    private volatile ReplicationPackageBuilder packageBuilder;
+    @Property(cardinality = 100)
+    public static final String ENDPOINTS = ReplicationTransportConstants.ENDPOINTS;
 
     @Property(name = "poll items", description = "number of subsequent poll requests to make", intValue = 1)
     public static final String POLL_ITEMS = "poll.items";
@@ -82,33 +85,17 @@ public class RemoteReplicationPackageExp
     )
     private static final String ENDPOINT_STRATEGY = ReplicationTransportConstants.ENDPOINT_STRATEGY;
 
+
+    @Reference
+    ReplicationComponentFactory replicationComponentFactory;
+
     ReplicationPackageExporter exporter;
 
     @Activate
     protected void activate(Map<String, Object> config) throws Exception {
-        exporter = getInstance(config, packageBuilder, transportAuthenticationProvider);
+        exporter = replicationComponentFactory.createComponent(ReplicationPackageExporter.class, config, this);
     }
 
-    public static ReplicationPackageExporter getInstance(Map<String, Object> config,
-                                                         ReplicationPackageBuilder packageBuilder,
-                                                         TransportAuthenticationProvider transportAuthenticationProvider) {
-
-        if (packageBuilder == null) {
-            throw new IllegalArgumentException("packageBuilder is required");
-        }
-
-        String[] endpoints = PropertiesUtil.toStringArray(config.get(ReplicationTransportConstants.ENDPOINTS), new String[0]);
-
-        int pollItems = PropertiesUtil.toInteger(config.get(POLL_ITEMS), Integer.MAX_VALUE);
-
-        String endpointStrategyName = PropertiesUtil.toString(config.get(ReplicationTransportConstants.ENDPOINT_STRATEGY), "One");
-        TransportEndpointStrategyType transportEndpointStrategyType = TransportEndpointStrategyType.valueOf(endpointStrategyName);
-
-        return new RemoteReplicationPackageExporter(packageBuilder, transportAuthenticationProvider,
-                endpoints,
-                transportEndpointStrategyType,
-                pollItems);
-    }
 
     @Deactivate
     protected void deactivate() {
@@ -122,4 +109,12 @@ public class RemoteReplicationPackageExp
     public ReplicationPackage exportPackageById(ResourceResolver resourceResolver, String replicationPackageId) {
         return exporter.exportPackageById(resourceResolver, replicationPackageId);
     }
+
+    public <ComponentType> ComponentType getComponent(Class<ComponentType> type, String componentName) {
+        if (type.isAssignableFrom(TransportAuthenticationProvider.class)) {
+            return (ComponentType) transportAuthenticationProvider;
+        }
+
+        return null;
+    }
 }

Modified: sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/packaging/impl/exporter/strategy/PrivilegeReplicationPackageExporterStrategy.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/packaging/impl/exporter/strategy/PrivilegeReplicationPackageExporterStrategy.java?rev=1632062&r1=1632061&r2=1632062&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/packaging/impl/exporter/strategy/PrivilegeReplicationPackageExporterStrategy.java (original)
+++ sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/packaging/impl/exporter/strategy/PrivilegeReplicationPackageExporterStrategy.java Wed Oct 15 14:46:42 2014
@@ -79,7 +79,7 @@ public class PrivilegeReplicationPackage
         for (String path : paths) {
             if(!acMgr.hasPrivileges(path, privileges)) {
                 throw new ReplicationPackageBuildingException("Not enough privileges");
-            };
+            }
         }
 
     }
@@ -92,7 +92,7 @@ public class PrivilegeReplicationPackage
         for (String path : paths) {
             if(session.nodeExists(path) && !acMgr.hasPrivileges(path, privileges)) {
                 throw new ReplicationPackageBuildingException("Not enough privileges");
-            };
+            }
         }
 
     }

Modified: sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/packaging/impl/importer/LocalReplicationPackageImporter.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/packaging/impl/importer/LocalReplicationPackageImporter.java?rev=1632062&r1=1632061&r2=1632062&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/packaging/impl/importer/LocalReplicationPackageImporter.java (original)
+++ sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/packaging/impl/importer/LocalReplicationPackageImporter.java Wed Oct 15 14:46:42 2014
@@ -22,6 +22,7 @@ import java.io.InputStream;
 import java.util.Arrays;
 import java.util.Dictionary;
 import java.util.Hashtable;
+import java.util.Map;
 
 import org.apache.sling.api.resource.ResourceResolver;
 import org.apache.sling.replication.event.ReplicationEventFactory;
@@ -39,6 +40,9 @@ import org.slf4j.LoggerFactory;
  */
 
 public class LocalReplicationPackageImporter implements ReplicationPackageImporter {
+
+    public static final String NAME = "local";
+    
     private final Logger log = LoggerFactory.getLogger(getClass());
 
     private final ReplicationPackageBuilder packageBuilder;
@@ -46,9 +50,24 @@ public class LocalReplicationPackageImpo
     private final ReplicationEventFactory replicationEventFactory;
 
 
+
+    public LocalReplicationPackageImporter(Map<String, Object> config,
+                                                              ReplicationPackageBuilder packageBuilder,
+                                                              ReplicationEventFactory replicationEventFactory) {
+
+        this(packageBuilder, replicationEventFactory);
+    }
+
     public LocalReplicationPackageImporter(ReplicationPackageBuilder packageBuilder,
                                            ReplicationEventFactory replicationEventFactory) {
 
+        if (packageBuilder == null) {
+            throw new IllegalArgumentException("A package builder is required");
+        }
+
+        if (replicationEventFactory == null) {
+            throw new IllegalArgumentException("An event factory is required");
+        }
         this.replicationEventFactory = replicationEventFactory;
         this.packageBuilder = packageBuilder;
     }

Modified: sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/packaging/impl/importer/LocalReplicationPackageImporterFactory.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/packaging/impl/importer/LocalReplicationPackageImporterFactory.java?rev=1632062&r1=1632061&r2=1632062&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/packaging/impl/importer/LocalReplicationPackageImporterFactory.java (original)
+++ sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/packaging/impl/importer/LocalReplicationPackageImporterFactory.java Wed Oct 15 14:46:42 2014
@@ -29,9 +29,11 @@ import org.apache.felix.scr.annotations.
 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.replication.agent.ReplicationComponentFactory;
 import org.apache.sling.replication.event.ReplicationEventFactory;
 import org.apache.sling.replication.packaging.ReplicationPackage;
 import org.apache.sling.replication.packaging.ReplicationPackageImporter;
+import org.apache.sling.replication.packaging.impl.exporter.LocalReplicationPackageExporter;
 import org.apache.sling.replication.serialization.ReplicationPackageBuilder;
 import org.apache.sling.replication.serialization.ReplicationPackageReadingException;
 import org.slf4j.Logger;
@@ -41,7 +43,8 @@ import org.slf4j.LoggerFactory;
  * {@link org.apache.sling.replication.packaging.ReplicationPackageImporter} implementation which imports a FileVault
  * based {@link ReplicationPackage} locally.
  */
-@Component(label = "Default Replication Package Importer",
+@Component(label = "Sling Replication - Local Package Importer Factory",
+        metatype = true,
         configurationFactory = true,
         specVersion = "1.1",
         policy = ConfigurationPolicy.REQUIRE)
@@ -49,36 +52,24 @@ import org.slf4j.LoggerFactory;
 public class LocalReplicationPackageImporterFactory implements ReplicationPackageImporter {
     private final Logger log = LoggerFactory.getLogger(getClass());
 
+    @Property(value = LocalReplicationPackageImporter.NAME, propertyPrivate = true)
+    private static final String TYPE = "type";
+
     @Property
     private static final String NAME = "name";
 
-    @Property(value = "importers/local", propertyPrivate = true)
-    private static final String FACTORY_NAME = "factoryName";
-
-    @Property(label = "Target ReplicationPackageBuilder", name = "ReplicationPackageBuilder.target")
-    @Reference(name = "ReplicationPackageBuilder", policy = ReferencePolicy.STATIC)
-    private ReplicationPackageBuilder packageBuilder;
-
     @Reference
-    private ReplicationEventFactory replicationEventFactory;
+    private ReplicationComponentFactory componentFactory;
 
-    LocalReplicationPackageImporter importer;
+    ReplicationPackageImporter importer;
 
     @Activate
     public void activate(Map<String, Object> config) {
-        importer = getInstance(config, packageBuilder, replicationEventFactory);
+        importer = componentFactory.createComponent(ReplicationPackageImporter.class, config, null);
     }
 
-    public static LocalReplicationPackageImporter getInstance(Map<String, Object> config,
-                                                              ReplicationPackageBuilder packageBuilder, ReplicationEventFactory replicationEventFactory) {
-        if (packageBuilder == null) {
-            throw new IllegalArgumentException("A package builder is required");
-        }
-        return new LocalReplicationPackageImporter(packageBuilder, replicationEventFactory);
-
-    }
 
-    public boolean importPackage(ResourceResolver resourceResolver, ReplicationPackage replicationPackage) {
+    public boolean importPackage(ResourceResolver resourceResolver, ReplicationPackage replicationPackage) throws ReplicationPackageReadingException {
         return importer.importPackage(resourceResolver, replicationPackage);
     }
 

Modified: sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/packaging/impl/importer/RemoteReplicationPackageImporter.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/packaging/impl/importer/RemoteReplicationPackageImporter.java?rev=1632062&r1=1632061&r2=1632062&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/packaging/impl/importer/RemoteReplicationPackageImporter.java (original)
+++ sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/packaging/impl/importer/RemoteReplicationPackageImporter.java Wed Oct 15 14:46:42 2014
@@ -21,8 +21,10 @@ package org.apache.sling.replication.pac
 import java.io.InputStream;
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Map;
 
 import org.apache.sling.api.resource.ResourceResolver;
+import org.apache.sling.commons.osgi.PropertiesUtil;
 import org.apache.sling.replication.communication.ReplicationEndpoint;
 import org.apache.sling.replication.event.ReplicationEventFactory;
 import org.apache.sling.replication.packaging.ReplicationPackage;
@@ -31,6 +33,7 @@ import org.apache.sling.replication.seri
 import org.apache.sling.replication.transport.ReplicationTransportHandler;
 import org.apache.sling.replication.transport.authentication.TransportAuthenticationProvider;
 import org.apache.sling.replication.transport.impl.MultipleEndpointReplicationTransportHandler;
+import org.apache.sling.replication.transport.impl.ReplicationTransportConstants;
 import org.apache.sling.replication.transport.impl.SimpleHttpReplicationTransportHandler;
 import org.apache.sling.replication.transport.impl.TransportEndpointStrategyType;
 import org.slf4j.Logger;
@@ -41,6 +44,10 @@ import org.slf4j.LoggerFactory;
  */
 public class RemoteReplicationPackageImporter implements ReplicationPackageImporter {
 
+    private static final String ENDPOINT_STRATEGY = ReplicationTransportConstants.ENDPOINT_STRATEGY;
+
+    public static final String NAME = "remote";
+
     private final Logger log = LoggerFactory.getLogger(getClass());
 
     private TransportAuthenticationProvider transportAuthenticationProviderFactory;
@@ -49,9 +56,25 @@ public class RemoteReplicationPackageImp
 
     private ReplicationTransportHandler transportHandler;
 
+
+    public RemoteReplicationPackageImporter(Map<String, Object> config, TransportAuthenticationProvider transportAuthenticationProvider) {
+
+        this(transportAuthenticationProvider,
+                PropertiesUtil.toStringArray(config.get(ReplicationTransportConstants.ENDPOINTS), new String[0]),
+                PropertiesUtil.toString(config.get(ENDPOINT_STRATEGY), TransportEndpointStrategyType.One.name()));
+
+    }
+
     public RemoteReplicationPackageImporter(TransportAuthenticationProvider transportAuthenticationProvider,
                                             String[] endpoints,
-                                            TransportEndpointStrategyType transportEndpointStrategyType) {
+                                            String  transportEndpointStrategyName) {
+
+        if (transportAuthenticationProvider == null) {
+            throw new IllegalArgumentException("transportAuthenticationProviderFactory is required");
+        }
+
+        TransportEndpointStrategyType transportEndpointStrategyType = TransportEndpointStrategyType.valueOf(transportEndpointStrategyName);
+
 
         List<ReplicationTransportHandler> transportHandlers = new ArrayList<ReplicationTransportHandler>();
 

Modified: sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/packaging/impl/importer/RemoteReplicationPackageImporterFactory.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/packaging/impl/importer/RemoteReplicationPackageImporterFactory.java?rev=1632062&r1=1632061&r2=1632062&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/packaging/impl/importer/RemoteReplicationPackageImporterFactory.java (original)
+++ sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/packaging/impl/importer/RemoteReplicationPackageImporterFactory.java Wed Oct 15 14:46:42 2014
@@ -34,6 +34,7 @@ import org.apache.sling.commons.osgi.Pro
 import org.apache.sling.replication.event.ReplicationEventFactory;
 import org.apache.sling.replication.packaging.ReplicationPackage;
 import org.apache.sling.replication.packaging.ReplicationPackageImporter;
+import org.apache.sling.replication.packaging.impl.exporter.LocalReplicationPackageExporter;
 import org.apache.sling.replication.serialization.ReplicationPackageReadingException;
 import org.apache.sling.replication.transport.authentication.TransportAuthenticationProvider;
 import org.apache.sling.replication.transport.impl.ReplicationTransportConstants;
@@ -45,7 +46,8 @@ import org.slf4j.LoggerFactory;
 /**
  * Remote implementation of {@link org.apache.sling.replication.packaging.ReplicationPackageImporter}
  */
-@Component(label = "Remote Replication Package Importer",
+@Component(label = "Sling Replication - Remote Package Importer Factory",
+        metatype = true,
         configurationFactory = true,
         specVersion = "1.1",
         policy = ConfigurationPolicy.REQUIRE)
@@ -54,13 +56,19 @@ public class RemoteReplicationPackageImp
 
     private final Logger log = LoggerFactory.getLogger(getClass());
 
+    @Property(value = LocalReplicationPackageExporter.NAME, propertyPrivate = true)
+    private static final String TYPE = "type";
+
     @Property
     private static final String NAME = "name";
 
     @Property(name = ReplicationTransportConstants.TRANSPORT_AUTHENTICATION_PROVIDER_TARGET)
-    @Reference(name = "TransportAuthenticationProviderFactory", policy = ReferencePolicy.DYNAMIC)
+    @Reference(name = "TransportAuthenticationProvider", policy = ReferencePolicy.STATIC)
     private volatile TransportAuthenticationProvider transportAuthenticationProvider;
 
+    @Property(cardinality = 100)
+    public static final String ENDPOINTS = ReplicationTransportConstants.ENDPOINTS;
+
     @Property(options = {
             @PropertyOption(name = "All",
                     value = "all endpoints"
@@ -72,32 +80,12 @@ public class RemoteReplicationPackageImp
     )
     private static final String ENDPOINT_STRATEGY = ReplicationTransportConstants.ENDPOINT_STRATEGY;
 
-    @Reference
-    private ReplicationEventFactory replicationEventFactory;
-
     private RemoteReplicationPackageImporter importer;
 
     @Activate
     protected void activate(BundleContext context, Map<String, Object> config) throws Exception {
 
-        importer = getInstance(config, transportAuthenticationProvider);
-
-    }
-
-    public static RemoteReplicationPackageImporter getInstance(Map<String, Object> config, TransportAuthenticationProvider transportAuthenticationProvider) {
-
-        if (transportAuthenticationProvider == null) {
-            throw new IllegalArgumentException("transportAuthenticationProviderFactory is required");
-        }
-
-        String[] endpoints = PropertiesUtil.toStringArray(config.get(ReplicationTransportConstants.ENDPOINTS), new String[0]);
-
-        String endpointStrategyName = PropertiesUtil.toString(config.get(ENDPOINT_STRATEGY),
-                TransportEndpointStrategyType.One.name());
-        TransportEndpointStrategyType transportEndpointStrategyType = TransportEndpointStrategyType.valueOf(endpointStrategyName);
-
-
-        return new RemoteReplicationPackageImporter(transportAuthenticationProvider, endpoints, transportEndpointStrategyType);
+        importer = new RemoteReplicationPackageImporter(config, transportAuthenticationProvider);
 
     }
 

Modified: sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/serialization/impl/vlt/FileVaultReplicationPackage.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/serialization/impl/vlt/FileVaultReplicationPackage.java?rev=1632062&r1=1632061&r2=1632062&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/serialization/impl/vlt/FileVaultReplicationPackage.java (original)
+++ sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/serialization/impl/vlt/FileVaultReplicationPackage.java Wed Oct 15 14:46:42 2014
@@ -85,7 +85,7 @@ public class FileVaultReplicationPackage
     }
 
     public String getType() {
-        return FileVaultReplicationPackageBuilderFactory.NAME;
+        return FileVaultReplicationPackageBuilder.NAME;
     }
 
     public String getAction() {

Modified: sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/serialization/impl/vlt/FileVaultReplicationPackageBuilder.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/serialization/impl/vlt/FileVaultReplicationPackageBuilder.java?rev=1632062&r1=1632061&r2=1632062&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/serialization/impl/vlt/FileVaultReplicationPackageBuilder.java (original)
+++ sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/serialization/impl/vlt/FileVaultReplicationPackageBuilder.java Wed Oct 15 14:46:42 2014
@@ -58,17 +58,13 @@ public class FileVaultReplicationPackage
 
     private final Logger log = LoggerFactory.getLogger(getClass());
 
-    private SlingRepository repository;
-
     private final Packaging packaging;
 
-    private static final String TYPE = "vlt";
+    public static final String NAME = "vlt";
 
-    public FileVaultReplicationPackageBuilder(SlingRepository repository, Packaging packaging,
-                                              ReplicationEventFactory replicationEventFactory) {
-        super(TYPE, replicationEventFactory);
+    public FileVaultReplicationPackageBuilder(Packaging packaging, ReplicationEventFactory replicationEventFactory) {
+        super(NAME, replicationEventFactory);
 
-        this.repository = repository;
         this.packaging = packaging;
     }
 
@@ -100,9 +96,8 @@ public class FileVaultReplicationPackage
             opts.setMetaInf(inf);
             opts.setRootPath("/");
             File tmpFile = File.createTempFile("rp-vlt-create-" + System.nanoTime(), ".zip");
-            packaging.getPackageManager().assemble(session, opts, tmpFile);
-            JcrPackage jcrPackage = packaging.getPackageManager(session).upload(tmpFile, false, true, null);
-            return new FileVaultReplicationPackage(jcrPackage.getPackage());
+            VaultPackage vaultPackage = packaging.getPackageManager().assemble(session, opts, tmpFile);
+            return new FileVaultReplicationPackage(vaultPackage);
         } catch (Exception e) {
             throw new ReplicationPackageBuildingException(e);
         } finally {
@@ -148,10 +143,6 @@ public class FileVaultReplicationPackage
                 VaultPackage pkg = packaging.getPackageManager().open(file);
                 replicationPackage = new FileVaultReplicationPackage(pkg);
             }
-//            else {
-//                VaultPackage pkg = packaging.getPackageManager(getSession()).open(PackageId.fromString(id)).getPackage();
-//                replicationPackage = new FileVaultReplicationPackage(pkg);
-//            }
         } catch (Exception e) {
             log.warn("could not find a package with id : {}", id);
         }
@@ -166,11 +157,6 @@ public class FileVaultReplicationPackage
         Session session = null;
         try {
             session = getSession(resourceResolver);
-//            if (session != null) {
-//                final JcrPackage jcrPackage = packaging.getPackageManager(getSession())
-//                        .open(PackageId.fromString(replicationPackage.getId()));
-//                jcrPackage.install(new ImportOptions());
-//            }
             File file = new File(replicationPackage.getId());
             if (file.exists()) {
                 VaultPackage pkg = packaging.getPackageManager().open(file);

Modified: sling/trunk/contrib/extensions/replication/sample/src/main/resources/SLING-CONTENT/libs/sling/replication/install.publish/org.apache.sling.replication.agent.impl.SimpleReplicationAgentFactory-reverse.json
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/replication/sample/src/main/resources/SLING-CONTENT/libs/sling/replication/install.publish/org.apache.sling.replication.agent.impl.SimpleReplicationAgentFactory-reverse.json?rev=1632062&r1=1632061&r2=1632062&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/replication/sample/src/main/resources/SLING-CONTENT/libs/sling/replication/install.publish/org.apache.sling.replication.agent.impl.SimpleReplicationAgentFactory-reverse.json (original)
+++ sling/trunk/contrib/extensions/replication/sample/src/main/resources/SLING-CONTENT/libs/sling/replication/install.publish/org.apache.sling.replication.agent.impl.SimpleReplicationAgentFactory-reverse.json Wed Oct 15 14:46:42 2014
@@ -4,10 +4,11 @@
 
     "isPassive": true,
 
+    "serviceName" : "replicationService",
+
     "packageExporter": [
         "type=local",
         "packageBuilder/type=vlt",
-        "packageBuilder/servicename=replicationService"
     ],
 
     "packageExporterStrategy" : [
@@ -18,7 +19,6 @@
     "packageImporter": [
         "type=local",
         "packageBuilder/type=vlt",
-        "packageBuilder/servicename=replicationService"
     ],
 
 

Modified: sling/trunk/contrib/extensions/replication/sample/src/main/resources/SLING-CONTENT/libs/sling/replication/install.publish/org.apache.sling.replication.packaging.impl.exporter.AgentReplicationPackageExporterFactory-reverse.json
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/replication/sample/src/main/resources/SLING-CONTENT/libs/sling/replication/install.publish/org.apache.sling.replication.packaging.impl.exporter.AgentReplicationPackageExporterFactory-reverse.json?rev=1632062&r1=1632061&r2=1632062&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/replication/sample/src/main/resources/SLING-CONTENT/libs/sling/replication/install.publish/org.apache.sling.replication.packaging.impl.exporter.AgentReplicationPackageExporterFactory-reverse.json (original)
+++ sling/trunk/contrib/extensions/replication/sample/src/main/resources/SLING-CONTENT/libs/sling/replication/install.publish/org.apache.sling.replication.packaging.impl.exporter.AgentReplicationPackageExporterFactory-reverse.json Wed Oct 15 14:46:42 2014
@@ -2,6 +2,8 @@
     "jcr:primaryType": "sling:OsgiConfig",
     "name": "reverse",
 
-    "ReplicationPackageBuilder.target": "(name=vlt)",
+    "packageBuilder": [ "type=vlt" ],
+    "agent" : [ "type=service"],
+
     "ReplicationAgent.target": "(name=reverse)"
 }
\ No newline at end of file

Modified: sling/trunk/contrib/extensions/replication/sample/src/main/resources/SLING-CONTENT/libs/sling/replication/install.publish/org.apache.sling.replication.packaging.impl.exporter.LocalReplicationPackageExporterFactory-default.json
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/replication/sample/src/main/resources/SLING-CONTENT/libs/sling/replication/install.publish/org.apache.sling.replication.packaging.impl.exporter.LocalReplicationPackageExporterFactory-default.json?rev=1632062&r1=1632061&r2=1632062&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/replication/sample/src/main/resources/SLING-CONTENT/libs/sling/replication/install.publish/org.apache.sling.replication.packaging.impl.exporter.LocalReplicationPackageExporterFactory-default.json (original)
+++ sling/trunk/contrib/extensions/replication/sample/src/main/resources/SLING-CONTENT/libs/sling/replication/install.publish/org.apache.sling.replication.packaging.impl.exporter.LocalReplicationPackageExporterFactory-default.json Wed Oct 15 14:46:42 2014
@@ -2,5 +2,5 @@
     "jcr:primaryType": "sling:OsgiConfig",
     "name": "default",
 
-    "ReplicationPackageBuilder.target": "(name=vlt)"
+    "packageBuilder": [ "type=vlt" ]
 }
\ No newline at end of file

Modified: sling/trunk/contrib/extensions/replication/sample/src/main/resources/SLING-CONTENT/libs/sling/replication/install.publish/org.apache.sling.replication.packaging.impl.importer.AdvancedRemoteReplicationPackageImporter-cache-flush.json
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/replication/sample/src/main/resources/SLING-CONTENT/libs/sling/replication/install.publish/org.apache.sling.replication.packaging.impl.importer.AdvancedRemoteReplicationPackageImporter-cache-flush.json?rev=1632062&r1=1632061&r2=1632062&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/replication/sample/src/main/resources/SLING-CONTENT/libs/sling/replication/install.publish/org.apache.sling.replication.packaging.impl.importer.AdvancedRemoteReplicationPackageImporter-cache-flush.json (original)
+++ sling/trunk/contrib/extensions/replication/sample/src/main/resources/SLING-CONTENT/libs/sling/replication/install.publish/org.apache.sling.replication.packaging.impl.importer.AdvancedRemoteReplicationPackageImporter-cache-flush.json Wed Oct 15 14:46:42 2014
@@ -8,6 +8,6 @@
         "delete -> Change : REMOVE" ],
     "useCustomBody": true,
     "customBody": "",
-    "TransportAuthenticationProviderFactory.target": "(name=nop)",
+    "TransportAuthenticationProvider.target": "(name=nop)",
     "endpoints": [ "http://localhost:8000/invalidatecache" ]
 }
\ No newline at end of file

Modified: sling/trunk/contrib/extensions/replication/sample/src/main/resources/SLING-CONTENT/libs/sling/replication/install.publish/org.apache.sling.replication.packaging.impl.importer.LocalReplicationPackageImporterFactory-default.json
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/replication/sample/src/main/resources/SLING-CONTENT/libs/sling/replication/install.publish/org.apache.sling.replication.packaging.impl.importer.LocalReplicationPackageImporterFactory-default.json?rev=1632062&r1=1632061&r2=1632062&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/replication/sample/src/main/resources/SLING-CONTENT/libs/sling/replication/install.publish/org.apache.sling.replication.packaging.impl.importer.LocalReplicationPackageImporterFactory-default.json (original)
+++ sling/trunk/contrib/extensions/replication/sample/src/main/resources/SLING-CONTENT/libs/sling/replication/install.publish/org.apache.sling.replication.packaging.impl.importer.LocalReplicationPackageImporterFactory-default.json Wed Oct 15 14:46:42 2014
@@ -1,5 +1,5 @@
 {
     "jcr:primaryType": "sling:OsgiConfig",
     "name": "default",
-    "ReplicationPackageBuilder.target": "(name=vlt)"
+    "packageBuilder": [ "type=vlt" ]
 }
\ No newline at end of file