Author: tommaso
Date: Wed Aug 13 09:08:56 2014
New Revision: 1617694
URL: http://svn.apache.org/r1617694
Log:
SLING-3842 - applied Marius Petria's patch for testing of importers/exporters
Added:
sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/transport/impl/RequestUtils.java
(with props)
sling/trunk/contrib/extensions/replication/core/src/main/resources/SLING-CONTENT/libs/sling/replication/install/
sling/trunk/contrib/extensions/replication/core/src/main/resources/SLING-CONTENT/libs/sling/replication/install.author/
sling/trunk/contrib/extensions/replication/core/src/main/resources/SLING-CONTENT/libs/sling/replication/install.author/org.apache.sling.replication.agent.impl.SimpleReplicationAgentFactory-publish-reverse.json
sling/trunk/contrib/extensions/replication/core/src/main/resources/SLING-CONTENT/libs/sling/replication/install.author/org.apache.sling.replication.agent.impl.SimpleReplicationAgentFactory-publish.json
sling/trunk/contrib/extensions/replication/core/src/main/resources/SLING-CONTENT/libs/sling/replication/install.author/org.apache.sling.replication.packaging.impl.exporter.LocalReplicationPackageExporter-local.json
sling/trunk/contrib/extensions/replication/core/src/main/resources/SLING-CONTENT/libs/sling/replication/install.author/org.apache.sling.replication.packaging.impl.exporter.RemoteReplicationPackageExporter-publish.json
sling/trunk/contrib/extensions/replication/core/src/main/resources/SLING-CONTENT/libs/sling/replication/install.author/org.apache.sling.replication.packaging.impl.importer.LocalReplicationPackageImporter-local.json
sling/trunk/contrib/extensions/replication/core/src/main/resources/SLING-CONTENT/libs/sling/replication/install.author/org.apache.sling.replication.packaging.impl.importer.RemoteReplicationPackageImporter-publish.json
sling/trunk/contrib/extensions/replication/core/src/main/resources/SLING-CONTENT/libs/sling/replication/install.publish/
sling/trunk/contrib/extensions/replication/core/src/main/resources/SLING-CONTENT/libs/sling/replication/install.publish/org.apache.sling.replication.agent.impl.SimpleReplicationAgentFactory-cache-flush.json
sling/trunk/contrib/extensions/replication/core/src/main/resources/SLING-CONTENT/libs/sling/replication/install.publish/org.apache.sling.replication.agent.impl.SimpleReplicationAgentFactory-reverse.json
sling/trunk/contrib/extensions/replication/core/src/main/resources/SLING-CONTENT/libs/sling/replication/install.publish/org.apache.sling.replication.packaging.impl.exporter.AgentReplicationPackageExporter.json
sling/trunk/contrib/extensions/replication/core/src/main/resources/SLING-CONTENT/libs/sling/replication/install.publish/org.apache.sling.replication.packaging.impl.exporter.LocalReplicationPackageExporter-local.json
sling/trunk/contrib/extensions/replication/core/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/core/src/main/resources/SLING-CONTENT/libs/sling/replication/install.publish/org.apache.sling.replication.packaging.impl.importer.LocalReplicationPackageImporter-local.json
sling/trunk/contrib/extensions/replication/core/src/main/resources/SLING-CONTENT/libs/sling/replication/install/org.apache.sling.replication.serialization.impl.vlt.FileVaultReplicationPackageBuilder.json
sling/trunk/contrib/extensions/replication/core/src/main/resources/SLING-CONTENT/libs/sling/replication/install/resourceproviders/
sling/trunk/contrib/extensions/replication/core/src/main/resources/SLING-CONTENT/libs/sling/replication/install/resourceproviders/configs/
sling/trunk/contrib/extensions/replication/core/src/main/resources/SLING-CONTENT/libs/sling/replication/install/resourceproviders/configs/org.apache.sling.replication.resources.impl.OsgiPropertiesResourceProviderFactory-agentsConfig.json
sling/trunk/contrib/extensions/replication/core/src/main/resources/SLING-CONTENT/libs/sling/replication/install/resourceproviders/configs/org.apache.sling.replication.resources.impl.OsgiPropertiesResourceProviderFactory-remoteExportersConfig.json
sling/trunk/contrib/extensions/replication/core/src/main/resources/SLING-CONTENT/libs/sling/replication/install/resourceproviders/configs/org.apache.sling.replication.resources.impl.OsgiPropertiesResourceProviderFactory-remoteImportersConfig.json
sling/trunk/contrib/extensions/replication/core/src/main/resources/SLING-CONTENT/libs/sling/replication/install/resourceproviders/services/
sling/trunk/contrib/extensions/replication/core/src/main/resources/SLING-CONTENT/libs/sling/replication/install/resourceproviders/services/org.apache.sling.replication.resources.impl.OsgiPropertiesResourceProviderFactory-agents.json
sling/trunk/contrib/extensions/replication/core/src/main/resources/SLING-CONTENT/libs/sling/replication/install/resourceproviders/services/org.apache.sling.replication.resources.impl.OsgiPropertiesResourceProviderFactory-exporters.json
sling/trunk/contrib/extensions/replication/core/src/main/resources/SLING-CONTENT/libs/sling/replication/install/resourceproviders/services/org.apache.sling.replication.resources.impl.OsgiPropertiesResourceProviderFactory-importers.json
sling/trunk/contrib/extensions/replication/it/src/test/java/org/apache/sling/replication/it/ReplicationPackageExporterImporterTest.java
(with props)
Removed:
sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/communication/ReplicationHeader.java
sling/trunk/contrib/extensions/replication/core/src/main/resources/SLING-CONTENT/libs/sling/replication/config/
Modified:
sling/trunk/contrib/extensions/replication/core/pom.xml
sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/communication/ReplicationParameter.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/RemoteReplicationPackageExporter.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/servlet/ReplicationAgentServlet.java
sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/servlet/ReplicationPackageExporterServlet.java
sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/transport/ReplicationTransportHandler.java
sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/transport/impl/AdvancedHttpReplicationTransportHandler.java
sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/transport/impl/MultipleEndpointReplicationTransportHandler.java
sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/transport/impl/SimpleHttpReplicationTransportHandler.java
sling/trunk/contrib/extensions/replication/it/pom.xml
sling/trunk/contrib/extensions/replication/it/src/test/java/org/apache/sling/replication/it/ReplicationAgentResourcesIntegrationTest.java
sling/trunk/contrib/extensions/replication/it/src/test/java/org/apache/sling/replication/it/ReplicationPackageImporterResourcesIntegrationTest.java
sling/trunk/contrib/extensions/replication/it/src/test/java/org/apache/sling/replication/it/ReplicationUtils.java
Modified: sling/trunk/contrib/extensions/replication/core/pom.xml
URL:
http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/replication/core/pom.xml?rev=1617694&r1=1617693&r2=1617694&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/replication/core/pom.xml (original)
+++ sling/trunk/contrib/extensions/replication/core/pom.xml Wed Aug 13 09:08:56
2014
@@ -67,7 +67,7 @@
<configuration>
<instructions>
<Bundle-SymbolicName>org.apache.sling.replication</Bundle-SymbolicName>
-
<Sling-Initial-Content>SLING-CONTENT/libs/sling/replication/config;path:=/libs/sling/replication/install;overwrite:=true</Sling-Initial-Content>
+
<Sling-Initial-Content>SLING-CONTENT/libs/sling/replication;path:=/libs/sling/replication;overwrite:=true</Sling-Initial-Content>
<Export-Package>
org.apache.sling.replication.agent,
org.apache.sling.replication.communication,
Modified:
sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/communication/ReplicationParameter.java
URL:
http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/communication/ReplicationParameter.java?rev=1617694&r1=1617693&r2=1617694&view=diff
==============================================================================
---
sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/communication/ReplicationParameter.java
(original)
+++
sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/communication/ReplicationParameter.java
Wed Aug 13 09:08:56 2014
@@ -23,7 +23,10 @@ package org.apache.sling.replication.com
*/
public enum ReplicationParameter {
- QUEUE("queue");
+ QUEUE("queue"),
+ TYPE("type"),
+ ACTION("action"),
+ PATH("path");
private final String name;
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=1617694&r1=1617693&r2=1617694&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 Aug 13 09:08:56 2014
@@ -21,10 +21,9 @@ package org.apache.sling.replication.pac
import org.apache.felix.scr.annotations.*;
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.serialization.ReplicationPackageBuilder;
import
org.apache.sling.replication.serialization.ReplicationPackageBuildingException;
-import org.apache.sling.replication.packaging.ReplicationPackageExporter;
-import
org.apache.sling.replication.serialization.impl.vlt.FileVaultReplicationPackageBuilder;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -35,17 +34,17 @@ import java.util.List;
* {@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 = "Local Replication Package Exporter", configurationFactory
= true)
@Service(value = ReplicationPackageExporter.class)
-@Property(name = "name", value = LocalReplicationPackageExporter.NAME)
public class LocalReplicationPackageExporter implements
ReplicationPackageExporter {
private final Logger log = LoggerFactory.getLogger(getClass());
- public static final String NAME = "local";
+ @Property
+ private static final String NAME = "name";
- @Reference(name = "ReplicationPackageBuilder", target = "(name=" +
FileVaultReplicationPackageBuilder.NAME + ")",
- policy = ReferencePolicy.STATIC)
+ @Property(label = "Target ReplicationPackageBuilder", name =
"ReplicationPackageBuilder.target")
+ @Reference(name = "ReplicationPackageBuilder", policy =
ReferencePolicy.STATIC)
private ReplicationPackageBuilder packageBuilder;
public List<ReplicationPackage> exportPackage(ReplicationRequest
replicationRequest) throws ReplicationPackageBuildingException {
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=1617694&r1=1617693&r2=1617694&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 Aug 13 09:08:56 2014
@@ -110,7 +110,7 @@ public class RemoteReplicationPackageExp
public List<ReplicationPackage> exportPackage(ReplicationRequest
replicationRequest) throws ReplicationPackageBuildingException {
try {
- return transportHandler.retrievePackage();
+ return transportHandler.retrievePackages(replicationRequest);
} catch (Exception e) {
throw new ReplicationPackageBuildingException(e);
}
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=1617694&r1=1617693&r2=1617694&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 Aug 13 09:08:56 2014
@@ -27,10 +27,9 @@ import org.apache.felix.scr.annotations.
import org.apache.sling.replication.event.ReplicationEventFactory;
import org.apache.sling.replication.event.ReplicationEventType;
import org.apache.sling.replication.packaging.ReplicationPackage;
-import org.apache.sling.replication.serialization.ReplicationPackageBuilder;
import org.apache.sling.replication.packaging.ReplicationPackageImporter;
+import org.apache.sling.replication.serialization.ReplicationPackageBuilder;
import
org.apache.sling.replication.serialization.ReplicationPackageReadingException;
-import
org.apache.sling.replication.serialization.impl.vlt.FileVaultReplicationPackageBuilder;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -38,19 +37,17 @@ 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 = "Default Replication Package Importer",
configurationFactory = true)
@Service(value = ReplicationPackageImporter.class)
-@Property(name = "name", value = LocalReplicationPackageImporter.NAME)
public class LocalReplicationPackageImporter implements
ReplicationPackageImporter {
-
- public static final String NAME = "local";
-
private final Logger log = LoggerFactory.getLogger(getClass());
- @Reference(name = "ReplicationPackageBuilder",
- target = "(name=" + FileVaultReplicationPackageBuilder.NAME + ")",
- policy = ReferencePolicy.DYNAMIC)
- private ReplicationPackageBuilder replicationPackageBuilder;
+ @Property
+ private static final String NAME = "name";
+
+ @Property(label = "Target ReplicationPackageBuilder", name =
"ReplicationPackageBuilder.target")
+ @Reference(name = "ReplicationPackageBuilder", policy =
ReferencePolicy.STATIC)
+ private ReplicationPackageBuilder packageBuilder;
@Reference
private ReplicationEventFactory replicationEventFactory;
@@ -59,7 +56,7 @@ public class LocalReplicationPackageImpo
public boolean importPackage(ReplicationPackage replicationPackage) {
boolean success = false;
try {
- success =
replicationPackageBuilder.installPackage(replicationPackage);
+ success = packageBuilder.installPackage(replicationPackage);
if (success) {
log.info("replication package read and installed for path(s)
{}", Arrays.toString(replicationPackage.getPaths()));
@@ -81,7 +78,7 @@ public class LocalReplicationPackageImpo
public ReplicationPackage readPackage(InputStream stream) throws
ReplicationPackageReadingException {
try {
- return replicationPackageBuilder.readPackage(stream);
+ return packageBuilder.readPackage(stream);
} catch (Exception e) {
log.error("cannot read a package from the given stream");
}
Modified:
sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/servlet/ReplicationAgentServlet.java
URL:
http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/servlet/ReplicationAgentServlet.java?rev=1617694&r1=1617693&r2=1617694&view=diff
==============================================================================
---
sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/servlet/ReplicationAgentServlet.java
(original)
+++
sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/servlet/ReplicationAgentServlet.java
Wed Aug 13 09:08:56 2014
@@ -39,6 +39,7 @@ import org.apache.sling.replication.agen
import org.apache.sling.replication.communication.*;
import org.apache.sling.replication.queue.ReplicationQueueItemState.ItemState;
import org.apache.sling.replication.resources.ReplicationConstants;
+import org.apache.sling.replication.transport.impl.RequestUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -61,11 +62,7 @@ public class ReplicationAgentServlet ext
response.setContentType("application/json");
- String action = request.getHeader(ReplicationHeader.ACTION.toString());
- String[] path =
toStringArray(request.getHeaders(ReplicationHeader.PATH.toString()));
-
- ReplicationRequest replicationRequest = new
ReplicationRequest(System.currentTimeMillis(),
- ReplicationActionType.valueOf(action), path);
+ ReplicationRequest replicationRequest =
RequestUtils.fromServletRequest(request);
ReplicationAgent agent =
request.getResource().adaptTo(ReplicationAgent.class);
Modified:
sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/servlet/ReplicationPackageExporterServlet.java
URL:
http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/servlet/ReplicationPackageExporterServlet.java?rev=1617694&r1=1617693&r2=1617694&view=diff
==============================================================================
---
sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/servlet/ReplicationPackageExporterServlet.java
(original)
+++
sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/servlet/ReplicationPackageExporterServlet.java
Wed Aug 13 09:08:56 2014
@@ -33,9 +33,13 @@ import org.apache.http.entity.ContentTyp
import org.apache.sling.api.SlingHttpServletRequest;
import org.apache.sling.api.SlingHttpServletResponse;
import org.apache.sling.api.servlets.SlingAllMethodsServlet;
+import org.apache.sling.replication.communication.ReplicationActionType;
+import org.apache.sling.replication.communication.ReplicationParameter;
+import org.apache.sling.replication.communication.ReplicationRequest;
import org.apache.sling.replication.resources.ReplicationConstants;
import org.apache.sling.replication.packaging.ReplicationPackage;
import org.apache.sling.replication.packaging.ReplicationPackageExporter;
+import org.apache.sling.replication.transport.impl.RequestUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -65,9 +69,11 @@ public class ReplicationPackageExporterS
response.setContentType(ContentType.APPLICATION_OCTET_STREAM.toString());
+ ReplicationRequest replicationRequest =
RequestUtils.fromServletRequest(request);
+
try {
// get first item
- List<ReplicationPackage> replicationPackages =
replicationPackageExporter.exportPackage(null);
+ List<ReplicationPackage> replicationPackages =
replicationPackageExporter.exportPackage(replicationRequest);
if (replicationPackages.size() > 0) {
log.info("{} package(s) available for fetching, the first will
be delivered", replicationPackages.size());
Modified:
sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/transport/ReplicationTransportHandler.java
URL:
http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/transport/ReplicationTransportHandler.java?rev=1617694&r1=1617693&r2=1617694&view=diff
==============================================================================
---
sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/transport/ReplicationTransportHandler.java
(original)
+++
sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/transport/ReplicationTransportHandler.java
Wed Aug 13 09:08:56 2014
@@ -19,6 +19,7 @@
package org.apache.sling.replication.transport;
import org.apache.sling.replication.communication.ReplicationEndpoint;
+import org.apache.sling.replication.communication.ReplicationRequest;
import org.apache.sling.replication.packaging.ReplicationPackage;
import java.util.List;
@@ -42,6 +43,6 @@ public interface ReplicationTransportHan
*
* @throws ReplicationTransportException if any error occurs during the
transport
*/
- public List<ReplicationPackage> retrievePackage() throws
ReplicationTransportException;
+ public List<ReplicationPackage> retrievePackages(ReplicationRequest
replicationRequest) throws ReplicationTransportException;
}
\ No newline at end of file
Modified:
sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/transport/impl/AdvancedHttpReplicationTransportHandler.java
URL:
http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/transport/impl/AdvancedHttpReplicationTransportHandler.java?rev=1617694&r1=1617693&r2=1617694&view=diff
==============================================================================
---
sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/transport/impl/AdvancedHttpReplicationTransportHandler.java
(original)
+++
sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/transport/impl/AdvancedHttpReplicationTransportHandler.java
Wed Aug 13 09:08:56 2014
@@ -32,7 +32,6 @@ import org.apache.http.client.fluent.Req
import org.apache.http.client.fluent.Response;
import org.apache.http.entity.ContentType;
import org.apache.sling.replication.communication.ReplicationEndpoint;
-import org.apache.sling.replication.communication.ReplicationHeader;
import org.apache.sling.replication.packaging.ReplicationPackage;
import org.apache.sling.replication.serialization.ReplicationPackageBuilder;
import org.apache.sling.replication.transport.ReplicationTransportException;
@@ -153,8 +152,6 @@ public class AdvancedHttpReplicationTran
for (String header : customizedHeaders) {
addHeader(req, header);
}
- } else {
- req.addHeader(ReplicationHeader.TYPE.toString(), type);
}
InputStream inputStream = null;
Modified:
sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/transport/impl/MultipleEndpointReplicationTransportHandler.java
URL:
http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/transport/impl/MultipleEndpointReplicationTransportHandler.java?rev=1617694&r1=1617693&r2=1617694&view=diff
==============================================================================
---
sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/transport/impl/MultipleEndpointReplicationTransportHandler.java
(original)
+++
sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/transport/impl/MultipleEndpointReplicationTransportHandler.java
Wed Aug 13 09:08:56 2014
@@ -21,6 +21,7 @@ package org.apache.sling.replication.tra
import java.util.ArrayList;
import java.util.List;
+import org.apache.sling.replication.communication.ReplicationRequest;
import org.apache.sling.replication.packaging.ReplicationPackage;
import org.apache.sling.replication.transport.ReplicationTransportException;
import org.apache.sling.replication.transport.ReplicationTransportHandler;
@@ -41,8 +42,7 @@ public class MultipleEndpointReplication
this.endpointStrategyType = endpointStrategyType;
}
- private List<ReplicationPackage> doTransport(boolean isPolling,
- ReplicationPackage
replicationPackage) throws ReplicationTransportException {
+ private List<ReplicationPackage> doTransport(ReplicationRequest
replicationRequest, ReplicationPackage replicationPackage) throws
ReplicationTransportException {
int offset = 0;
if (endpointStrategyType.equals(TransportEndpointStrategyType.One)) {
@@ -56,10 +56,10 @@ public class MultipleEndpointReplication
int currentId = (offset + i) % length;
ReplicationTransportHandler transportHelper =
transportHelpers.get(currentId);
- if (!isPolling) {
+ if (replicationPackage != null) {
transportHelper.deliverPackage(replicationPackage);
- } else {
- List<ReplicationPackage> retrievedPackages =
transportHelper.retrievePackage();
+ } else if (replicationRequest != null) {
+ List<ReplicationPackage> retrievedPackages =
transportHelper.retrievePackages(replicationRequest);
result.addAll(retrievedPackages);
}
@@ -72,11 +72,11 @@ public class MultipleEndpointReplication
}
public void deliverPackage(ReplicationPackage replicationPackage) throws
ReplicationTransportException {
- doTransport(false, replicationPackage);
+ doTransport(null, replicationPackage);
}
- public List<ReplicationPackage> retrievePackage() throws
ReplicationTransportException {
- return doTransport(true, null);
+ public List<ReplicationPackage> retrievePackages(ReplicationRequest
replicationRequest) throws ReplicationTransportException {
+ return doTransport(replicationRequest, null);
}
Added:
sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/transport/impl/RequestUtils.java
URL:
http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/transport/impl/RequestUtils.java?rev=1617694&view=auto
==============================================================================
---
sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/transport/impl/RequestUtils.java
(added)
+++
sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/transport/impl/RequestUtils.java
Wed Aug 13 09:08:56 2014
@@ -0,0 +1,55 @@
+/*
+ * 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.transport.impl;
+
+import org.apache.http.client.utils.URIBuilder;
+import org.apache.sling.api.SlingHttpServletRequest;
+import org.apache.sling.replication.communication.ReplicationActionType;
+import org.apache.sling.replication.communication.ReplicationParameter;
+import org.apache.sling.replication.communication.ReplicationRequest;
+
+import javax.servlet.http.HttpServletRequest;
+import java.net.URI;
+import java.net.URISyntaxException;
+
+public class RequestUtils {
+
+ public static ReplicationRequest fromServletRequest(HttpServletRequest
request) {
+ String action =
request.getParameter(ReplicationParameter.ACTION.toString());
+ String[] paths =
request.getParameterValues(ReplicationParameter.PATH.toString());
+
+ ReplicationRequest replicationRequest = new
ReplicationRequest(System.currentTimeMillis(),
+ ReplicationActionType.fromName(action),
+ paths);
+
+ return replicationRequest;
+
+ }
+
+ public static URI appendReplicationRequest(URI uri, ReplicationRequest
replicationRequest) throws URISyntaxException {
+ URIBuilder uriBuilder = new URIBuilder(uri);
+ uriBuilder.addParameter(ReplicationParameter.ACTION.toString(),
ReplicationActionType.POLL.getName());
+ for (String path : replicationRequest.getPaths()) {
+ uriBuilder.addParameter(ReplicationParameter.PATH.toString(),
path);
+ }
+ return uriBuilder.build();
+ }
+
+}
Propchange:
sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/transport/impl/RequestUtils.java
------------------------------------------------------------------------------
svn:eol-style = native
Modified:
sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/transport/impl/SimpleHttpReplicationTransportHandler.java
URL:
http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/transport/impl/SimpleHttpReplicationTransportHandler.java?rev=1617694&r1=1617693&r2=1617694&view=diff
==============================================================================
---
sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/transport/impl/SimpleHttpReplicationTransportHandler.java
(original)
+++
sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/transport/impl/SimpleHttpReplicationTransportHandler.java
Wed Aug 13 09:08:56 2014
@@ -28,7 +28,7 @@ import org.apache.http.conn.HttpHostConn
import org.apache.http.entity.ContentType;
import org.apache.sling.replication.communication.ReplicationActionType;
import org.apache.sling.replication.communication.ReplicationEndpoint;
-import org.apache.sling.replication.communication.ReplicationHeader;
+import org.apache.sling.replication.communication.ReplicationRequest;
import org.apache.sling.replication.packaging.ReplicationPackage;
import org.apache.sling.replication.serialization.ReplicationPackageBuilder;
import org.apache.sling.replication.transport.ReplicationTransportException;
@@ -38,6 +38,7 @@ import org.apache.sling.replication.tran
import java.io.IOException;
import java.io.InputStream;
+import java.net.URI;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
@@ -110,10 +111,11 @@ public class SimpleHttpReplicationTransp
}
- public List<ReplicationPackage> retrievePackage() throws
ReplicationTransportException {
+ public List<ReplicationPackage> retrievePackages(ReplicationRequest
replicationRequest) throws ReplicationTransportException {
log.debug("polling from {}", replicationEndpoint.getUri());
try {
+ URI replicationURI =
RequestUtils.appendReplicationRequest(replicationEndpoint.getUri(),
replicationRequest);
List<ReplicationPackage> result = new
ArrayList<ReplicationPackage>();
Executor executor = Executor.newInstance();
@@ -121,8 +123,7 @@ public class SimpleHttpReplicationTransp
context.addAttribute("endpoint", replicationEndpoint);
executor = transportAuthenticationProvider.authenticate(executor,
context);
- Request req = Request.Post(replicationEndpoint.getUri())
- .addHeader(ReplicationHeader.ACTION.toString(),
ReplicationActionType.POLL.getName())
+ Request req = Request.Post(replicationURI)
.useExpectContinue();
// TODO : add queue parameter
Added:
sling/trunk/contrib/extensions/replication/core/src/main/resources/SLING-CONTENT/libs/sling/replication/install.author/org.apache.sling.replication.agent.impl.SimpleReplicationAgentFactory-publish-reverse.json
URL:
http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/replication/core/src/main/resources/SLING-CONTENT/libs/sling/replication/install.author/org.apache.sling.replication.agent.impl.SimpleReplicationAgentFactory-publish-reverse.json?rev=1617694&view=auto
==============================================================================
---
sling/trunk/contrib/extensions/replication/core/src/main/resources/SLING-CONTENT/libs/sling/replication/install.author/org.apache.sling.replication.agent.impl.SimpleReplicationAgentFactory-publish-reverse.json
(added)
+++
sling/trunk/contrib/extensions/replication/core/src/main/resources/SLING-CONTENT/libs/sling/replication/install.author/org.apache.sling.replication.agent.impl.SimpleReplicationAgentFactory-publish-reverse.json
Wed Aug 13 09:08:56 2014
@@ -0,0 +1,10 @@
+{
+ "jcr:primaryType" : "sling:OsgiConfig",
+ "name" : "publish-reverse",
+ "ReplicationPackageExporter.target" : "(name=publish)",
+ "ReplicationPackageImporter.target" : "(name=local)",
+ "ReplicationQueueProvider.target" : "(name=sjh)",
+ "ReplicationQueueDistributionStrategy.target" : "(name=error)",
+ "rules" : ["scheduled poll every 30 sec"],
+ "runModes" : ["author"]
+}
Added:
sling/trunk/contrib/extensions/replication/core/src/main/resources/SLING-CONTENT/libs/sling/replication/install.author/org.apache.sling.replication.agent.impl.SimpleReplicationAgentFactory-publish.json
URL:
http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/replication/core/src/main/resources/SLING-CONTENT/libs/sling/replication/install.author/org.apache.sling.replication.agent.impl.SimpleReplicationAgentFactory-publish.json?rev=1617694&view=auto
==============================================================================
---
sling/trunk/contrib/extensions/replication/core/src/main/resources/SLING-CONTENT/libs/sling/replication/install.author/org.apache.sling.replication.agent.impl.SimpleReplicationAgentFactory-publish.json
(added)
+++
sling/trunk/contrib/extensions/replication/core/src/main/resources/SLING-CONTENT/libs/sling/replication/install.author/org.apache.sling.replication.agent.impl.SimpleReplicationAgentFactory-publish.json
Wed Aug 13 09:08:56 2014
@@ -0,0 +1,9 @@
+{
+ "jcr:primaryType" : "sling:OsgiConfig",
+ "name" : "publish",
+ "ReplicationPackageExporter.target" : "(name=local)",
+ "ReplicationPackageImporter.target" : "(name=publish)",
+ "ReplicationQueueProvider.target" : "(name=sjh)",
+ "ReplicationQueueDistributionStrategy.target" : "(name=single)",
+ "runModes" : ["author"]
+}
Added:
sling/trunk/contrib/extensions/replication/core/src/main/resources/SLING-CONTENT/libs/sling/replication/install.author/org.apache.sling.replication.packaging.impl.exporter.LocalReplicationPackageExporter-local.json
URL:
http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/replication/core/src/main/resources/SLING-CONTENT/libs/sling/replication/install.author/org.apache.sling.replication.packaging.impl.exporter.LocalReplicationPackageExporter-local.json?rev=1617694&view=auto
==============================================================================
---
sling/trunk/contrib/extensions/replication/core/src/main/resources/SLING-CONTENT/libs/sling/replication/install.author/org.apache.sling.replication.packaging.impl.exporter.LocalReplicationPackageExporter-local.json
(added)
+++
sling/trunk/contrib/extensions/replication/core/src/main/resources/SLING-CONTENT/libs/sling/replication/install.author/org.apache.sling.replication.packaging.impl.exporter.LocalReplicationPackageExporter-local.json
Wed Aug 13 09:08:56 2014
@@ -0,0 +1,5 @@
+{
+ "jcr:primaryType" : "sling:OsgiConfig",
+ "name": "local",
+ "ReplicationPackageBuilder.target" : "(name=vlt)"
+}
\ No newline at end of file
Added:
sling/trunk/contrib/extensions/replication/core/src/main/resources/SLING-CONTENT/libs/sling/replication/install.author/org.apache.sling.replication.packaging.impl.exporter.RemoteReplicationPackageExporter-publish.json
URL:
http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/replication/core/src/main/resources/SLING-CONTENT/libs/sling/replication/install.author/org.apache.sling.replication.packaging.impl.exporter.RemoteReplicationPackageExporter-publish.json?rev=1617694&view=auto
==============================================================================
---
sling/trunk/contrib/extensions/replication/core/src/main/resources/SLING-CONTENT/libs/sling/replication/install.author/org.apache.sling.replication.packaging.impl.exporter.RemoteReplicationPackageExporter-publish.json
(added)
+++
sling/trunk/contrib/extensions/replication/core/src/main/resources/SLING-CONTENT/libs/sling/replication/install.author/org.apache.sling.replication.packaging.impl.exporter.RemoteReplicationPackageExporter-publish.json
Wed Aug 13 09:08:56 2014
@@ -0,0 +1,9 @@
+{
+ "jcr:primaryType" : "sling:OsgiConfig",
+ "name": "publish",
+ "TransportAuthenticationProviderFactory.target" : "(name=user)",
+ "authentication.properties" : ["user=admin","password=admin"],
+ "ReplicationPackageBuilder.target" : "(name=vlt)",
+ "endpoints" : [
"http://localhost:4503/libs/sling/replication/exporters/agent" ],
+ "runModes" : ["author"]
+}
\ No newline at end of file
Added:
sling/trunk/contrib/extensions/replication/core/src/main/resources/SLING-CONTENT/libs/sling/replication/install.author/org.apache.sling.replication.packaging.impl.importer.LocalReplicationPackageImporter-local.json
URL:
http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/replication/core/src/main/resources/SLING-CONTENT/libs/sling/replication/install.author/org.apache.sling.replication.packaging.impl.importer.LocalReplicationPackageImporter-local.json?rev=1617694&view=auto
==============================================================================
---
sling/trunk/contrib/extensions/replication/core/src/main/resources/SLING-CONTENT/libs/sling/replication/install.author/org.apache.sling.replication.packaging.impl.importer.LocalReplicationPackageImporter-local.json
(added)
+++
sling/trunk/contrib/extensions/replication/core/src/main/resources/SLING-CONTENT/libs/sling/replication/install.author/org.apache.sling.replication.packaging.impl.importer.LocalReplicationPackageImporter-local.json
Wed Aug 13 09:08:56 2014
@@ -0,0 +1,5 @@
+{
+ "jcr:primaryType" : "sling:OsgiConfig",
+ "name": "local",
+ "ReplicationPackageBuilder.target" : "(name=vlt)"
+}
\ No newline at end of file
Added:
sling/trunk/contrib/extensions/replication/core/src/main/resources/SLING-CONTENT/libs/sling/replication/install.author/org.apache.sling.replication.packaging.impl.importer.RemoteReplicationPackageImporter-publish.json
URL:
http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/replication/core/src/main/resources/SLING-CONTENT/libs/sling/replication/install.author/org.apache.sling.replication.packaging.impl.importer.RemoteReplicationPackageImporter-publish.json?rev=1617694&view=auto
==============================================================================
---
sling/trunk/contrib/extensions/replication/core/src/main/resources/SLING-CONTENT/libs/sling/replication/install.author/org.apache.sling.replication.packaging.impl.importer.RemoteReplicationPackageImporter-publish.json
(added)
+++
sling/trunk/contrib/extensions/replication/core/src/main/resources/SLING-CONTENT/libs/sling/replication/install.author/org.apache.sling.replication.packaging.impl.importer.RemoteReplicationPackageImporter-publish.json
Wed Aug 13 09:08:56 2014
@@ -0,0 +1,9 @@
+{
+ "jcr:primaryType" : "sling:OsgiConfig",
+ "name": "publish",
+ "TransportAuthenticationProviderFactory.target" : "(name=user)",
+ "authentication.properties" : ["user=admin","password=admin"],
+ "ReplicationPackageBuilder.target" : "(name=vlt)",
+ "endpoints" : [
"http://localhost:4503/libs/sling/replication/importers/local" ],
+ "runModes" : ["author"]
+}
\ No newline at end of file
Added:
sling/trunk/contrib/extensions/replication/core/src/main/resources/SLING-CONTENT/libs/sling/replication/install.publish/org.apache.sling.replication.agent.impl.SimpleReplicationAgentFactory-cache-flush.json
URL:
http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/replication/core/src/main/resources/SLING-CONTENT/libs/sling/replication/install.publish/org.apache.sling.replication.agent.impl.SimpleReplicationAgentFactory-cache-flush.json?rev=1617694&view=auto
==============================================================================
---
sling/trunk/contrib/extensions/replication/core/src/main/resources/SLING-CONTENT/libs/sling/replication/install.publish/org.apache.sling.replication.agent.impl.SimpleReplicationAgentFactory-cache-flush.json
(added)
+++
sling/trunk/contrib/extensions/replication/core/src/main/resources/SLING-CONTENT/libs/sling/replication/install.publish/org.apache.sling.replication.agent.impl.SimpleReplicationAgentFactory-cache-flush.json
Wed Aug 13 09:08:56 2014
@@ -0,0 +1,11 @@
+{
+ "jcr:primaryType" : "sling:OsgiConfig",
+ "name" : "cache-flush",
+ "ReplicationPackageImporter.target" : "(name=cache-flush)",
+ "useAggregatePaths" : false,
+ "ReplicationPackageExporter.target" : "(name=void)",
+ "ReplicationQueueDistributionStrategy.target" : "(name=single)",
+ "rules" : ["trigger on path: /content/usergenerated"],
+ "enabled" : false,
+ "runModes" : ["publish"]
+}
Added:
sling/trunk/contrib/extensions/replication/core/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/core/src/main/resources/SLING-CONTENT/libs/sling/replication/install.publish/org.apache.sling.replication.agent.impl.SimpleReplicationAgentFactory-reverse.json?rev=1617694&view=auto
==============================================================================
---
sling/trunk/contrib/extensions/replication/core/src/main/resources/SLING-CONTENT/libs/sling/replication/install.publish/org.apache.sling.replication.agent.impl.SimpleReplicationAgentFactory-reverse.json
(added)
+++
sling/trunk/contrib/extensions/replication/core/src/main/resources/SLING-CONTENT/libs/sling/replication/install.publish/org.apache.sling.replication.agent.impl.SimpleReplicationAgentFactory-reverse.json
Wed Aug 13 09:08:56 2014
@@ -0,0 +1,11 @@
+{
+ "jcr:primaryType" : "sling:OsgiConfig",
+ "name" : "reverse",
+ "ReplicationPackageExporter.target" : "(name=local)",
+ "ReplicationPackageImporter.target" : "(name=local)",
+ "ReplicationQueueProvider.target" : "(name=sjh)",
+ "ReplicationQueueDistributionStrategy.target" : "(name=error)",
+ "rules" : ["trigger on path: /content/usergenerated"],
+ "runModes" : ["publish"],
+ "isPassive" : true
+}
Added:
sling/trunk/contrib/extensions/replication/core/src/main/resources/SLING-CONTENT/libs/sling/replication/install.publish/org.apache.sling.replication.packaging.impl.exporter.AgentReplicationPackageExporter.json
URL:
http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/replication/core/src/main/resources/SLING-CONTENT/libs/sling/replication/install.publish/org.apache.sling.replication.packaging.impl.exporter.AgentReplicationPackageExporter.json?rev=1617694&view=auto
==============================================================================
---
sling/trunk/contrib/extensions/replication/core/src/main/resources/SLING-CONTENT/libs/sling/replication/install.publish/org.apache.sling.replication.packaging.impl.exporter.AgentReplicationPackageExporter.json
(added)
+++
sling/trunk/contrib/extensions/replication/core/src/main/resources/SLING-CONTENT/libs/sling/replication/install.publish/org.apache.sling.replication.packaging.impl.exporter.AgentReplicationPackageExporter.json
Wed Aug 13 09:08:56 2014
@@ -0,0 +1,6 @@
+{
+ "jcr:primaryType" : "sling:OsgiConfig",
+ "ReplicationPackageBuilder.target" : "(name=vlt)",
+ "ReplicationAgent.target" : "(name=reverse)",
+ "runModes" : ["publish"]
+}
\ No newline at end of file
Added:
sling/trunk/contrib/extensions/replication/core/src/main/resources/SLING-CONTENT/libs/sling/replication/install.publish/org.apache.sling.replication.packaging.impl.exporter.LocalReplicationPackageExporter-local.json
URL:
http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/replication/core/src/main/resources/SLING-CONTENT/libs/sling/replication/install.publish/org.apache.sling.replication.packaging.impl.exporter.LocalReplicationPackageExporter-local.json?rev=1617694&view=auto
==============================================================================
---
sling/trunk/contrib/extensions/replication/core/src/main/resources/SLING-CONTENT/libs/sling/replication/install.publish/org.apache.sling.replication.packaging.impl.exporter.LocalReplicationPackageExporter-local.json
(added)
+++
sling/trunk/contrib/extensions/replication/core/src/main/resources/SLING-CONTENT/libs/sling/replication/install.publish/org.apache.sling.replication.packaging.impl.exporter.LocalReplicationPackageExporter-local.json
Wed Aug 13 09:08:56 2014
@@ -0,0 +1,5 @@
+{
+ "jcr:primaryType" : "sling:OsgiConfig",
+ "name": "local",
+ "ReplicationPackageBuilder.target" : "(name=vlt)"
+}
\ No newline at end of file
Added:
sling/trunk/contrib/extensions/replication/core/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/core/src/main/resources/SLING-CONTENT/libs/sling/replication/install.publish/org.apache.sling.replication.packaging.impl.importer.AdvancedRemoteReplicationPackageImporter-cache-flush.json?rev=1617694&view=auto
==============================================================================
---
sling/trunk/contrib/extensions/replication/core/src/main/resources/SLING-CONTENT/libs/sling/replication/install.publish/org.apache.sling.replication.packaging.impl.importer.AdvancedRemoteReplicationPackageImporter-cache-flush.json
(added)
+++
sling/trunk/contrib/extensions/replication/core/src/main/resources/SLING-CONTENT/libs/sling/replication/install.publish/org.apache.sling.replication.packaging.impl.importer.AdvancedRemoteReplicationPackageImporter-cache-flush.json
Wed Aug 13 09:08:56 2014
@@ -0,0 +1,13 @@
+{
+ "jcr:primaryType" : "sling:OsgiConfig",
+ "name" : "cache-flush",
+ "useCustomHeaders" : true,
+ "customHeaders" : [
+ "Path: {path}",
+ "add -> Action : REFRESH",
+ "delete -> Change : REMOVE" ],
+ "useCustomBody": true,
+ "customBody" : "",
+ "TransportAuthenticationProviderFactory.target" : "(name=nop)",
+ "endpoints" : [ "http://localhost:8000/invalidatecache" ]
+}
\ No newline at end of file
Added:
sling/trunk/contrib/extensions/replication/core/src/main/resources/SLING-CONTENT/libs/sling/replication/install.publish/org.apache.sling.replication.packaging.impl.importer.LocalReplicationPackageImporter-local.json
URL:
http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/replication/core/src/main/resources/SLING-CONTENT/libs/sling/replication/install.publish/org.apache.sling.replication.packaging.impl.importer.LocalReplicationPackageImporter-local.json?rev=1617694&view=auto
==============================================================================
---
sling/trunk/contrib/extensions/replication/core/src/main/resources/SLING-CONTENT/libs/sling/replication/install.publish/org.apache.sling.replication.packaging.impl.importer.LocalReplicationPackageImporter-local.json
(added)
+++
sling/trunk/contrib/extensions/replication/core/src/main/resources/SLING-CONTENT/libs/sling/replication/install.publish/org.apache.sling.replication.packaging.impl.importer.LocalReplicationPackageImporter-local.json
Wed Aug 13 09:08:56 2014
@@ -0,0 +1,5 @@
+{
+ "jcr:primaryType" : "sling:OsgiConfig",
+ "name": "local",
+ "ReplicationPackageBuilder.target" : "(name=vlt)"
+}
\ No newline at end of file
Added:
sling/trunk/contrib/extensions/replication/core/src/main/resources/SLING-CONTENT/libs/sling/replication/install/org.apache.sling.replication.serialization.impl.vlt.FileVaultReplicationPackageBuilder.json
URL:
http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/replication/core/src/main/resources/SLING-CONTENT/libs/sling/replication/install/org.apache.sling.replication.serialization.impl.vlt.FileVaultReplicationPackageBuilder.json?rev=1617694&view=auto
==============================================================================
---
sling/trunk/contrib/extensions/replication/core/src/main/resources/SLING-CONTENT/libs/sling/replication/install/org.apache.sling.replication.serialization.impl.vlt.FileVaultReplicationPackageBuilder.json
(added)
+++
sling/trunk/contrib/extensions/replication/core/src/main/resources/SLING-CONTENT/libs/sling/replication/install/org.apache.sling.replication.serialization.impl.vlt.FileVaultReplicationPackageBuilder.json
Wed Aug 13 09:08:56 2014
@@ -0,0 +1,6 @@
+{
+ "jcr:primaryType" : "sling:OsgiConfig",
+ "name" : "vlt",
+ "username" : "admin",
+ "password" : "admin"
+}
\ No newline at end of file
Added:
sling/trunk/contrib/extensions/replication/core/src/main/resources/SLING-CONTENT/libs/sling/replication/install/resourceproviders/configs/org.apache.sling.replication.resources.impl.OsgiPropertiesResourceProviderFactory-agentsConfig.json
URL:
http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/replication/core/src/main/resources/SLING-CONTENT/libs/sling/replication/install/resourceproviders/configs/org.apache.sling.replication.resources.impl.OsgiPropertiesResourceProviderFactory-agentsConfig.json?rev=1617694&view=auto
==============================================================================
---
sling/trunk/contrib/extensions/replication/core/src/main/resources/SLING-CONTENT/libs/sling/replication/install/resourceproviders/configs/org.apache.sling.replication.resources.impl.OsgiPropertiesResourceProviderFactory-agentsConfig.json
(added)
+++
sling/trunk/contrib/extensions/replication/core/src/main/resources/SLING-CONTENT/libs/sling/replication/install/resourceproviders/configs/org.apache.sling.replication.resources.impl.OsgiPropertiesResourceProviderFactory-agentsConfig.json
Wed Aug 13 09:08:56 2014
@@ -0,0 +1,18 @@
+{
+ "jcr:primaryType" : "sling:OsgiConfig",
+ "name" : "replicationAgentsConfig",
+ "provider.roots" : [ "/libs/sling/replication/config/agents" ],
+ "serviceType" :
"org.apache.sling.replication.agent.impl.SimpleReplicationAgentFactory",
+ "providerType" : "osgiConfig",
+ "resourceProperties" : [
+ "sling:resourceType=replication/config/agent",
+ "name={name}",
+ "runModes={runModes}",
+ "queueProvider={ReplicationQueueProvider.target}",
+ "packageExporter={ReplicationPackageExporter.target}",
+ "packageImporter={ReplicationPackageImporter.target}",
+ "queueStrategy={ReplicationQueueDistributionStrategy.target}",
+ ]
+
+
+}
\ No newline at end of file
Added:
sling/trunk/contrib/extensions/replication/core/src/main/resources/SLING-CONTENT/libs/sling/replication/install/resourceproviders/configs/org.apache.sling.replication.resources.impl.OsgiPropertiesResourceProviderFactory-remoteExportersConfig.json
URL:
http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/replication/core/src/main/resources/SLING-CONTENT/libs/sling/replication/install/resourceproviders/configs/org.apache.sling.replication.resources.impl.OsgiPropertiesResourceProviderFactory-remoteExportersConfig.json?rev=1617694&view=auto
==============================================================================
---
sling/trunk/contrib/extensions/replication/core/src/main/resources/SLING-CONTENT/libs/sling/replication/install/resourceproviders/configs/org.apache.sling.replication.resources.impl.OsgiPropertiesResourceProviderFactory-remoteExportersConfig.json
(added)
+++
sling/trunk/contrib/extensions/replication/core/src/main/resources/SLING-CONTENT/libs/sling/replication/install/resourceproviders/configs/org.apache.sling.replication.resources.impl.OsgiPropertiesResourceProviderFactory-remoteExportersConfig.json
Wed Aug 13 09:08:56 2014
@@ -0,0 +1,13 @@
+{
+ "jcr:primaryType" : "sling:OsgiConfig",
+ "name" : "replicationExportersConfig",
+ "provider.roots" : [ "/libs/sling/replication/config/exporters/remote" ],
+ "serviceType" :
"org.apache.sling.replication.packaging.impl.exporter.RemoteReplicationPackageExporter",
+ "providerType" : "osgiConfig",
+
+ "resourceProperties" : [
+ "sling:resourceType=replication/config/exporter/remote",
+ "name={name}",
+ "endpoints={endpoints}"
+ ]
+}
\ No newline at end of file
Added:
sling/trunk/contrib/extensions/replication/core/src/main/resources/SLING-CONTENT/libs/sling/replication/install/resourceproviders/configs/org.apache.sling.replication.resources.impl.OsgiPropertiesResourceProviderFactory-remoteImportersConfig.json
URL:
http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/replication/core/src/main/resources/SLING-CONTENT/libs/sling/replication/install/resourceproviders/configs/org.apache.sling.replication.resources.impl.OsgiPropertiesResourceProviderFactory-remoteImportersConfig.json?rev=1617694&view=auto
==============================================================================
---
sling/trunk/contrib/extensions/replication/core/src/main/resources/SLING-CONTENT/libs/sling/replication/install/resourceproviders/configs/org.apache.sling.replication.resources.impl.OsgiPropertiesResourceProviderFactory-remoteImportersConfig.json
(added)
+++
sling/trunk/contrib/extensions/replication/core/src/main/resources/SLING-CONTENT/libs/sling/replication/install/resourceproviders/configs/org.apache.sling.replication.resources.impl.OsgiPropertiesResourceProviderFactory-remoteImportersConfig.json
Wed Aug 13 09:08:56 2014
@@ -0,0 +1,13 @@
+{
+ "jcr:primaryType" : "sling:OsgiConfig",
+ "name" : "replicationImportersConfig",
+ "provider.roots" : [ "/libs/sling/replication/config/importers/remote" ],
+ "serviceType" :
"org.apache.sling.replication.packaging.impl.importer.RemoteReplicationPackageImporter",
+ "providerType" : "osgiConfig",
+
+ "resourceProperties" : [
+ "sling:resourceType=replication/config/importer/remote",
+ "name={name}",
+ "endpoints={endpoints}"
+ ]
+}
\ No newline at end of file
Added:
sling/trunk/contrib/extensions/replication/core/src/main/resources/SLING-CONTENT/libs/sling/replication/install/resourceproviders/services/org.apache.sling.replication.resources.impl.OsgiPropertiesResourceProviderFactory-agents.json
URL:
http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/replication/core/src/main/resources/SLING-CONTENT/libs/sling/replication/install/resourceproviders/services/org.apache.sling.replication.resources.impl.OsgiPropertiesResourceProviderFactory-agents.json?rev=1617694&view=auto
==============================================================================
---
sling/trunk/contrib/extensions/replication/core/src/main/resources/SLING-CONTENT/libs/sling/replication/install/resourceproviders/services/org.apache.sling.replication.resources.impl.OsgiPropertiesResourceProviderFactory-agents.json
(added)
+++
sling/trunk/contrib/extensions/replication/core/src/main/resources/SLING-CONTENT/libs/sling/replication/install/resourceproviders/services/org.apache.sling.replication.resources.impl.OsgiPropertiesResourceProviderFactory-agents.json
Wed Aug 13 09:08:56 2014
@@ -0,0 +1,12 @@
+{
+ "jcr:primaryType" : "sling:OsgiConfig",
+ "name" : "replicationAgents",
+ "provider.roots" : [ "/libs/sling/replication/agents" ],
+ "serviceType" : "org.apache.sling.replication.agent.ReplicationAgent",
+ "resourceProperties" : [
+ "sling:resourceType=replication/agent",
+ "name={name}",
+
+ "queue/sling:resourceType=replication/agent/queue"
+ ]
+}
\ No newline at end of file
Added:
sling/trunk/contrib/extensions/replication/core/src/main/resources/SLING-CONTENT/libs/sling/replication/install/resourceproviders/services/org.apache.sling.replication.resources.impl.OsgiPropertiesResourceProviderFactory-exporters.json
URL:
http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/replication/core/src/main/resources/SLING-CONTENT/libs/sling/replication/install/resourceproviders/services/org.apache.sling.replication.resources.impl.OsgiPropertiesResourceProviderFactory-exporters.json?rev=1617694&view=auto
==============================================================================
---
sling/trunk/contrib/extensions/replication/core/src/main/resources/SLING-CONTENT/libs/sling/replication/install/resourceproviders/services/org.apache.sling.replication.resources.impl.OsgiPropertiesResourceProviderFactory-exporters.json
(added)
+++
sling/trunk/contrib/extensions/replication/core/src/main/resources/SLING-CONTENT/libs/sling/replication/install/resourceproviders/services/org.apache.sling.replication.resources.impl.OsgiPropertiesResourceProviderFactory-exporters.json
Wed Aug 13 09:08:56 2014
@@ -0,0 +1,10 @@
+{
+ "jcr:primaryType" : "sling:OsgiConfig",
+ "name" : "replicationExporters",
+ "provider.roots" : [ "/libs/sling/replication/exporters" ],
+ "serviceType" :
"org.apache.sling.replication.packaging.ReplicationPackageExporter",
+ "resourceProperties" : [
+ "sling:resourceType=replication/exporter",
+ "name={name}"
+ ]
+}
\ No newline at end of file
Added:
sling/trunk/contrib/extensions/replication/core/src/main/resources/SLING-CONTENT/libs/sling/replication/install/resourceproviders/services/org.apache.sling.replication.resources.impl.OsgiPropertiesResourceProviderFactory-importers.json
URL:
http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/replication/core/src/main/resources/SLING-CONTENT/libs/sling/replication/install/resourceproviders/services/org.apache.sling.replication.resources.impl.OsgiPropertiesResourceProviderFactory-importers.json?rev=1617694&view=auto
==============================================================================
---
sling/trunk/contrib/extensions/replication/core/src/main/resources/SLING-CONTENT/libs/sling/replication/install/resourceproviders/services/org.apache.sling.replication.resources.impl.OsgiPropertiesResourceProviderFactory-importers.json
(added)
+++
sling/trunk/contrib/extensions/replication/core/src/main/resources/SLING-CONTENT/libs/sling/replication/install/resourceproviders/services/org.apache.sling.replication.resources.impl.OsgiPropertiesResourceProviderFactory-importers.json
Wed Aug 13 09:08:56 2014
@@ -0,0 +1,10 @@
+{
+ "jcr:primaryType" : "sling:OsgiConfig",
+ "name" : "replicationImporters",
+ "provider.roots" : [ "/libs/sling/replication/importers" ],
+ "serviceType" :
"org.apache.sling.replication.packaging.ReplicationPackageImporter",
+ "resourceProperties" : [
+ "sling:resourceType=replication/importer",
+ "name={name}"
+ ]
+}
\ No newline at end of file
Modified: sling/trunk/contrib/extensions/replication/it/pom.xml
URL:
http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/replication/it/pom.xml?rev=1617694&r1=1617693&r2=1617694&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/replication/it/pom.xml (original)
+++ sling/trunk/contrib/extensions/replication/it/pom.xml Wed Aug 13 09:08:56
2014
@@ -332,7 +332,7 @@
<groupId>org.apache.sling</groupId>
<artifactId>org.apache.sling.launchpad</artifactId>
<classifier>standalone</classifier>
- <version>6</version>
+ <version>7-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
Modified:
sling/trunk/contrib/extensions/replication/it/src/test/java/org/apache/sling/replication/it/ReplicationAgentResourcesIntegrationTest.java
URL:
http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/replication/it/src/test/java/org/apache/sling/replication/it/ReplicationAgentResourcesIntegrationTest.java?rev=1617694&r1=1617693&r2=1617694&view=diff
==============================================================================
---
sling/trunk/contrib/extensions/replication/it/src/test/java/org/apache/sling/replication/it/ReplicationAgentResourcesIntegrationTest.java
(original)
+++
sling/trunk/contrib/extensions/replication/it/src/test/java/org/apache/sling/replication/it/ReplicationAgentResourcesIntegrationTest.java
Wed Aug 13 09:08:56 2014
@@ -30,15 +30,26 @@ import static org.apache.sling.replicati
public class ReplicationAgentResourcesIntegrationTest extends
ReplicationIntegrationTestBase {
@Test
- public void testDefaultAgentConfigurationResources() throws Exception {
+ public void testDefaultAgentConfigurationResourcesOnAuthor() throws
Exception {
String[] defaultAgentNames = new String[]{
"publish",
- "publish-reverse",
+ "publish-reverse"
+ };
+ for (String agentName : defaultAgentNames) {
+ assertExists(authorClient, agentConfigUrl(agentName));
+ }
+
+ }
+
+
+ @Test
+ public void testDefaultAgentConfigurationResourcesOnPublish() throws
Exception {
+ String[] defaultAgentNames = new String[]{
"reverse",
"cache-flush"
};
for (String agentName : defaultAgentNames) {
- assertExists(authorClient, agentConfigUrl(agentName));
+ assertExists(publishClient, agentConfigUrl(agentName));
}
}
Added:
sling/trunk/contrib/extensions/replication/it/src/test/java/org/apache/sling/replication/it/ReplicationPackageExporterImporterTest.java
URL:
http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/replication/it/src/test/java/org/apache/sling/replication/it/ReplicationPackageExporterImporterTest.java?rev=1617694&view=auto
==============================================================================
---
sling/trunk/contrib/extensions/replication/it/src/test/java/org/apache/sling/replication/it/ReplicationPackageExporterImporterTest.java
(added)
+++
sling/trunk/contrib/extensions/replication/it/src/test/java/org/apache/sling/replication/it/ReplicationPackageExporterImporterTest.java
Wed Aug 13 09:08:56 2014
@@ -0,0 +1,51 @@
+/*
+ * 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.it;
+
+import org.apache.http.protocol.HTTP;
+import org.apache.sling.replication.communication.ReplicationActionType;
+import org.junit.Test;
+
+import static org.apache.sling.replication.it.ReplicationUtils.*;
+
+public class ReplicationPackageExporterImporterTest extends
ReplicationIntegrationTestBase {
+
+ @Test
+ public void testAddExportImport() throws Exception {
+ String nodePath = createRandomNode(authorClient, "/content/export_" +
System.nanoTime());
+ assertExists(authorClient, nodePath);
+
+ String content = doExport(author, "local", ReplicationActionType.ADD,
nodePath);
+
+ doImport(publish, "local",
content.getBytes(HTTP.DEFAULT_CONTENT_CHARSET));
+ assertExists(publishClient, nodePath);
+
+ }
+
+ @Test
+ public void testDeleteExportImport() throws Exception {
+ String nodePath = createRandomNode(publishClient, "/content/export_" +
System.nanoTime());
+ assertExists(publishClient, nodePath);
+
+ String content = doExport(author, "local",
ReplicationActionType.DELETE, nodePath);
+
+ doImport(publish, "local",
content.getBytes(HTTP.DEFAULT_CONTENT_CHARSET));
+ assertNotExits(publishClient, nodePath);
+ }
+}
Propchange:
sling/trunk/contrib/extensions/replication/it/src/test/java/org/apache/sling/replication/it/ReplicationPackageExporterImporterTest.java
------------------------------------------------------------------------------
svn:eol-style = native
Modified:
sling/trunk/contrib/extensions/replication/it/src/test/java/org/apache/sling/replication/it/ReplicationPackageImporterResourcesIntegrationTest.java
URL:
http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/replication/it/src/test/java/org/apache/sling/replication/it/ReplicationPackageImporterResourcesIntegrationTest.java?rev=1617694&r1=1617693&r2=1617694&view=diff
==============================================================================
---
sling/trunk/contrib/extensions/replication/it/src/test/java/org/apache/sling/replication/it/ReplicationPackageImporterResourcesIntegrationTest.java
(original)
+++
sling/trunk/contrib/extensions/replication/it/src/test/java/org/apache/sling/replication/it/ReplicationPackageImporterResourcesIntegrationTest.java
Wed Aug 13 09:08:56 2014
@@ -23,7 +23,7 @@ import org.junit.Test;
import static org.apache.sling.replication.it.ReplicationUtils.*;
/**
- * Integration test for {@link
org.apache.sling.replication.serialization.ReplicationPackageImporter} resources
+ * Integration test for {@link
org.apache.sling.replication.packaging.ReplicationPackageImporter} resources
*/
public class ReplicationPackageImporterResourcesIntegrationTest extends
ReplicationIntegrationTestBase {
Modified:
sling/trunk/contrib/extensions/replication/it/src/test/java/org/apache/sling/replication/it/ReplicationUtils.java
URL:
http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/replication/it/src/test/java/org/apache/sling/replication/it/ReplicationUtils.java?rev=1617694&r1=1617693&r2=1617694&view=diff
==============================================================================
---
sling/trunk/contrib/extensions/replication/it/src/test/java/org/apache/sling/replication/it/ReplicationUtils.java
(original)
+++
sling/trunk/contrib/extensions/replication/it/src/test/java/org/apache/sling/replication/it/ReplicationUtils.java
Wed Aug 13 09:08:56 2014
@@ -26,9 +26,11 @@ import java.util.UUID;
import org.apache.http.NameValuePair;
import org.apache.http.client.entity.UrlEncodedFormEntity;
+import org.apache.http.entity.ByteArrayEntity;
import org.apache.http.message.BasicNameValuePair;
import org.apache.sling.replication.communication.ReplicationActionType;
-import org.apache.sling.replication.communication.ReplicationHeader;
+import org.apache.sling.replication.communication.ReplicationParameter;
+import org.apache.sling.replication.communication.ReplicationRequest;
import org.apache.sling.testing.tools.http.Request;
import org.apache.sling.testing.tools.sling.SlingClient;
import org.apache.sling.testing.tools.sling.SlingInstance;
@@ -43,8 +45,8 @@ public class ReplicationUtils {
private static final String JSON_SELECTOR = ".json";
private static final String REPLICATION_ROOT_PATH =
"/libs/sling/replication";
- private static void assertPostResourceWithParameters(SlingInstance
slingInstance,
- int status, String
path, String... parameters) throws IOException {
+ private static String assertPostResourceWithParameters(SlingInstance
slingInstance,
+ int status, String
path, String... parameters) throws IOException {
Request request =
slingInstance.getRequestBuilder().buildPostRequest(path);
if (parameters != null) {
@@ -57,25 +59,30 @@ public class ReplicationUtils {
UrlEncodedFormEntity entity = new
UrlEncodedFormEntity(valuePairList);
request.withEntity(entity);
}
- slingInstance.getRequestExecutor().execute(
+ String content = slingInstance.getRequestExecutor().execute(
request.withCredentials(slingInstance.getServerUsername(),
slingInstance.getServerPassword())
- ).assertStatus(status);
+ ).assertStatus(status).getContent();
+
+ return content;
}
- private static void assertPostResourceWithHeaders(SlingInstance
slingInstance,
- int status, String path,
String... headers) throws IOException {
+ private static String assertPostResource(SlingInstance slingInstance,
+ int status, String path, byte[]
bytes) throws IOException {
Request request =
slingInstance.getRequestBuilder().buildPostRequest(path);
- if (headers != null) {
- assertEquals(0, headers.length % 2);
- for (int i = 0; i < headers.length; i += 2) {
- request = request.withHeader(headers[i], headers[i + 1]);
- }
+
+ if (bytes != null) {
+
+ ByteArrayEntity entity = new ByteArrayEntity(bytes);
+ request.withEntity(entity);
}
- slingInstance.getRequestExecutor().execute(
+ String content = slingInstance.getRequestExecutor().execute(
request.withCredentials(slingInstance.getServerUsername(),
slingInstance.getServerPassword())
- ).assertStatus(status);
+ ).assertStatus(status).getContent();
+
+ return content;
}
+
public static void assertResponseContains(SlingInstance slingInstance,
String resource, String...
parameters) throws IOException {
if (!resource.endsWith(JSON_SELECTOR)) {
@@ -98,18 +105,35 @@ public class ReplicationUtils {
public static void replicate(SlingInstance slingInstance, String
agentName, ReplicationActionType action, String... paths) throws IOException {
String agentResource = agentUrl(agentName);
+ executeReplicationRequest(slingInstance, 202, agentResource, action,
paths);
+ }
+
+ public static String executeReplicationRequest(SlingInstance
slingInstance, int status, String resource, ReplicationActionType action,
String... paths) throws IOException {
+
List<String> args = new ArrayList<String>();
- args.add(ReplicationHeader.ACTION.toString());
+ args.add(ReplicationParameter.ACTION.toString());
args.add(action.toString());
if (paths != null) {
for (String path : paths) {
- args.add(ReplicationHeader.PATH.toString());
+ args.add(ReplicationParameter.PATH.toString());
args.add(path);
}
}
- assertPostResourceWithHeaders(slingInstance, 202, agentResource,
args.toArray(new String[args.size()]));
+ return assertPostResourceWithParameters(slingInstance, status,
resource, args.toArray(new String[args.size()]));
+ }
+
+ public static String doExport(SlingInstance slingInstance, String
exporterName, ReplicationActionType action, String... paths) throws IOException
{
+ String agentResource = exporterUrl(exporterName);
+
+ return executeReplicationRequest(slingInstance, 200, agentResource,
action, paths);
+ }
+
+ public static String doImport(SlingInstance slingInstance, String
importerName, byte[] bytes) throws IOException {
+ String agentResource = importerUrl(importerName);
+
+ return assertPostResource(slingInstance, 200, agentResource, bytes);
}
public static void deleteNode(SlingInstance slingInstance, String path)
throws IOException {
@@ -165,4 +189,12 @@ public class ReplicationUtils {
public static String importerUrl(String importerName) {
return REPLICATION_ROOT_PATH + "/importers/" + importerName;
}
+
+ public static String exporterRootUrl() {
+ return REPLICATION_ROOT_PATH + "/exporters";
+ }
+
+ public static String exporterUrl(String exporterName) {
+ return REPLICATION_ROOT_PATH + "/exporters/" + exporterName;
+ }
}