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