You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by mp...@apache.org on 2015/01/22 16:32:45 UTC
svn commit: r1653915 - in /sling/trunk/contrib/extensions/distribution:
core/src/main/java/org/apache/sling/distribution/component/impl/
core/src/main/java/org/apache/sling/distribution/packaging/impl/exporter/
core/src/main/java/org/apache/sling/distr...
Author: mpetria
Date: Thu Jan 22 15:32:44 2015
New Revision: 1653915
URL: http://svn.apache.org/r1653915
Log:
SLING-4341: removing package also when a package is deleted from queue
Added:
sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/serialization/DistributionPackageBuilderProvider.java
sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/serialization/impl/DefaultDistributionPackageBuilderProvider.java
sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/serialization/impl/SimpleDistributionPackage.java
sling/trunk/contrib/extensions/distribution/core/src/test/java/org/apache/sling/distribution/serialization/impl/SimpleDistributionPackageTest.java
Removed:
sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/serialization/impl/VoidDistributionPackage.java
sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/serialization/impl/VoidDistributionPackageBuilder.java
sling/trunk/contrib/extensions/distribution/core/src/test/java/org/apache/sling/distribution/serialization/impl/VoidDistributionPackageBuilderTest.java
sling/trunk/contrib/extensions/distribution/core/src/test/java/org/apache/sling/distribution/serialization/impl/VoidDistributionPackageTest.java
Modified:
sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/component/impl/DefaultDistributionComponentProvider.java
sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/packaging/impl/exporter/AgentDistributionPackageExporter.java
sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/packaging/impl/exporter/AgentDistributionPackageExporterFactory.java
sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/queue/impl/jobhandling/JobHandlingDistributionQueueProvider.java
sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/serialization/DistributionPackageBuilder.java
sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/serialization/impl/AbstractDistributionPackageBuilder.java
sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/serialization/impl/ResourceSharedDistributionPackageBuilder.java
sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/serialization/impl/vlt/FileVaultDistributionPackage.java
sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/serialization/impl/vlt/FileVaultDistributionPackageBuilder.java
sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/serialization/impl/vlt/JcrVaultDistributionPackageBuilder.java
sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/serialization/impl/vlt/VaultDistributionPackageBuilderFactory.java
sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/servlet/DistributionAgentQueueServlet.java
sling/trunk/contrib/extensions/distribution/core/src/test/java/org/apache/sling/distribution/serialization/impl/vlt/FileVaultDistributionPackageBuilderTest.java
sling/trunk/contrib/extensions/distribution/core/src/test/java/org/apache/sling/distribution/serialization/impl/vlt/FileVaultDistributionPackageTest.java
sling/trunk/contrib/extensions/distribution/it/src/test/java/org/apache/sling/distribution/it/DistributionIntegrationTestBase.java
sling/trunk/contrib/extensions/distribution/it/src/test/java/org/apache/sling/distribution/it/MultipleForwardDistributionTest.java
sling/trunk/contrib/extensions/distribution/sample/src/main/resources/SLING-CONTENT/libs/sling/distribution/install.publish/org.apache.sling.distribution.packaging.impl.exporter.AgentDistributionPackageExporterFactory-reverse.json
Modified: sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/component/impl/DefaultDistributionComponentProvider.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/component/impl/DefaultDistributionComponentProvider.java?rev=1653915&r1=1653914&r2=1653915&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/component/impl/DefaultDistributionComponentProvider.java (original)
+++ sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/component/impl/DefaultDistributionComponentProvider.java Thu Jan 22 15:32:44 2015
@@ -32,10 +32,12 @@ import org.apache.felix.scr.annotations.
import org.apache.felix.scr.annotations.Service;
import org.apache.sling.commons.osgi.PropertiesUtil;
import org.apache.sling.distribution.agent.DistributionAgent;
+import org.apache.sling.distribution.packaging.DistributionPackage;
import org.apache.sling.distribution.packaging.DistributionPackageExporter;
import org.apache.sling.distribution.packaging.DistributionPackageImporter;
import org.apache.sling.distribution.queue.impl.DistributionQueueDispatchingStrategy;
import org.apache.sling.distribution.queue.DistributionQueueProvider;
+import org.apache.sling.distribution.serialization.DistributionPackageBuilder;
import org.apache.sling.distribution.transport.DistributionTransportSecretProvider;
import org.osgi.framework.BundleContext;
import org.slf4j.Logger;
@@ -50,7 +52,8 @@ import org.slf4j.LoggerFactory;
@Reference(name = "distributionPackageExporter", referenceInterface = DistributionPackageExporter.class, cardinality = ReferenceCardinality.OPTIONAL_MULTIPLE, policy = ReferencePolicy.DYNAMIC),
@Reference(name = "distributionQueueProvider", referenceInterface = DistributionQueueProvider.class, cardinality = ReferenceCardinality.OPTIONAL_MULTIPLE, policy = ReferencePolicy.DYNAMIC),
@Reference(name = "distributionQueueDistributionStrategy", referenceInterface = DistributionQueueDispatchingStrategy.class, cardinality = ReferenceCardinality.OPTIONAL_MULTIPLE, policy = ReferencePolicy.DYNAMIC),
- @Reference(name = "distributionTransportSecretProvider", referenceInterface = DistributionTransportSecretProvider.class, cardinality = ReferenceCardinality.OPTIONAL_MULTIPLE, policy = ReferencePolicy.DYNAMIC)
+ @Reference(name = "distributionTransportSecretProvider", referenceInterface = DistributionTransportSecretProvider.class, cardinality = ReferenceCardinality.OPTIONAL_MULTIPLE, policy = ReferencePolicy.DYNAMIC),
+ @Reference(name = "distributionPackageBuilder", referenceInterface = DistributionPackageBuilder.class, cardinality = ReferenceCardinality.OPTIONAL_MULTIPLE, policy = ReferencePolicy.DYNAMIC),
})
@Service(DistributionComponentProvider.class)
public class DefaultDistributionComponentProvider implements DistributionComponentProvider {
@@ -65,6 +68,8 @@ public class DefaultDistributionComponen
private Map<String, DistributionComponent<DistributionTransportSecretProvider>> distributionTransportSecretProviderMap = new ConcurrentHashMap<String, DistributionComponent<DistributionTransportSecretProvider>>();
private Map<String, DistributionComponent<DistributionPackageImporter>> distributionPackageImporterMap = new ConcurrentHashMap<String, DistributionComponent<DistributionPackageImporter>>();
private Map<String, DistributionComponent<DistributionPackageExporter>> distributionPackageExporterMap = new ConcurrentHashMap<String, DistributionComponent<DistributionPackageExporter>>();
+ private Map<String, DistributionComponent<DistributionPackageBuilder>> distributionPackageBuilderMap = new ConcurrentHashMap<String, DistributionComponent<DistributionPackageBuilder>>();
+
private BundleContext bundleContext;
@@ -107,6 +112,8 @@ public class DefaultDistributionComponen
return (Map) distributionQueueDistributionStrategyMap;
} else if (type.isAssignableFrom(DistributionTransportSecretProvider.class)) {
return (Map) distributionTransportSecretProviderMap;
+ } else if (type.isAssignableFrom(DistributionPackageBuilder.class)) {
+ return (Map) distributionPackageBuilderMap;
}
return null;
@@ -175,6 +182,18 @@ public class DefaultDistributionComponen
}
+
+ private void bindDistributionPackageBuilder(DistributionPackageBuilder distributionPackageBuilder, Map<String, Object> config) {
+
+ put(DistributionPackageBuilder.class, distributionPackageBuilder, config);
+ }
+
+ private void unbindDistributionPackageBuilder(DistributionPackageBuilder distributionPackageBuilder, Map<String, Object> config) {
+
+ remove(DistributionPackageBuilder.class, distributionPackageBuilder, config);
+
+ }
+
private <ComponentType> void put(Class<ComponentType> typeClass, ComponentType service, Map<String, Object> config) {
Map<String, DistributionComponent<ComponentType>> componentMap = getComponentMap(typeClass);
Modified: sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/packaging/impl/exporter/AgentDistributionPackageExporter.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/packaging/impl/exporter/AgentDistributionPackageExporter.java?rev=1653915&r1=1653914&r2=1653915&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/packaging/impl/exporter/AgentDistributionPackageExporter.java (original)
+++ sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/packaging/impl/exporter/AgentDistributionPackageExporter.java Thu Jan 22 15:32:44 2015
@@ -30,25 +30,26 @@ import org.apache.sling.distribution.pac
import org.apache.sling.distribution.queue.DistributionQueue;
import org.apache.sling.distribution.queue.DistributionQueueItem;
import org.apache.sling.distribution.serialization.DistributionPackageBuilder;
+import org.apache.sling.distribution.serialization.DistributionPackageBuilderProvider;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class AgentDistributionPackageExporter implements DistributionPackageExporter {
private final Logger log = LoggerFactory.getLogger(getClass());
+ private final DistributionPackageBuilderProvider packageBuilderProvider;
private DistributionAgent agent;
- private final DistributionPackageBuilder packageBuilder;
private String queueName;
- public AgentDistributionPackageExporter(String queueName, DistributionAgent agent, DistributionPackageBuilder packageBuilder) {
+ public AgentDistributionPackageExporter(String queueName, DistributionAgent agent, DistributionPackageBuilderProvider packageBuilderProvider) {
+ this.packageBuilderProvider = packageBuilderProvider;
- if (agent == null || packageBuilder == null) {
+ if (agent == null || packageBuilderProvider == null) {
throw new IllegalArgumentException("Agent and package builder are required");
}
this.queueName = queueName;
this.agent = agent;
- this.packageBuilder = packageBuilder;
}
@Nonnull
@@ -62,12 +63,19 @@ public class AgentDistributionPackageExp
DistributionQueueItem info = queue.getHead();
DistributionPackage distributionPackage;
if (info != null) {
- distributionPackage = packageBuilder.getPackage(resourceResolver, info.getId());
- DistributionQueueItem item = queue.remove(info.getId());
- log.info("item {} fetched and removed from the queue", item);
- if (distributionPackage != null) {
- result.add(distributionPackage);
+ DistributionPackageBuilder packageBuilder = packageBuilderProvider.getPackageBuilder(info.getType());
+
+ if (packageBuilder != null) {
+ distributionPackage = packageBuilder.getPackage(resourceResolver, info.getId());
+ DistributionQueueItem item = queue.remove(info.getId());
+ log.info("item {} fetched and removed from the queue", item);
+ if (distributionPackage != null) {
+ result.add(distributionPackage);
+ }
+ } else {
+ log.warn("cannot find package builder with type {}", info.getType());
}
+
}
} catch (Exception ex) {
Modified: sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/packaging/impl/exporter/AgentDistributionPackageExporterFactory.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/packaging/impl/exporter/AgentDistributionPackageExporterFactory.java?rev=1653915&r1=1653914&r2=1653915&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/packaging/impl/exporter/AgentDistributionPackageExporterFactory.java (original)
+++ sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/packaging/impl/exporter/AgentDistributionPackageExporterFactory.java Thu Jan 22 15:32:44 2015
@@ -37,6 +37,7 @@ import org.apache.sling.distribution.pac
import org.apache.sling.distribution.packaging.DistributionPackageExportException;
import org.apache.sling.distribution.packaging.DistributionPackageExporter;
import org.apache.sling.distribution.serialization.DistributionPackageBuilder;
+import org.apache.sling.distribution.serialization.DistributionPackageBuilderProvider;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -64,10 +65,8 @@ public class AgentDistributionPackageExp
private DistributionAgent agent;
- @Property(name = "packageBuilder.target", label = "Package Builder", description = "The target reference for the DistributionPackageBuilder used to create distribution packages, " +
- "e.g. use target=(name=...) to bind to services by name.")
- @Reference(name = "packageBuilder")
- private DistributionPackageBuilder packageBuilder;
+ @Reference
+ private DistributionPackageBuilderProvider packageBuilderProvider;
private DistributionPackageExporter packageExporter;
@@ -77,7 +76,7 @@ public class AgentDistributionPackageExp
String queueName = PropertiesUtil.toString(config.get(QUEUE_NAME), "");
- packageExporter = new AgentDistributionPackageExporter(queueName, agent, packageBuilder);
+ packageExporter = new AgentDistributionPackageExporter(queueName, agent, packageBuilderProvider);
}
@Nonnull
Modified: sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/queue/impl/jobhandling/JobHandlingDistributionQueueProvider.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/queue/impl/jobhandling/JobHandlingDistributionQueueProvider.java?rev=1653915&r1=1653914&r2=1653915&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/queue/impl/jobhandling/JobHandlingDistributionQueueProvider.java (original)
+++ sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/queue/impl/jobhandling/JobHandlingDistributionQueueProvider.java Thu Jan 22 15:32:44 2015
@@ -61,7 +61,7 @@ public class JobHandlingDistributionQueu
@Nonnull
public DistributionQueue getQueue(@Nonnull String queueName) throws DistributionQueueException {
String topic = JobHandlingDistributionQueue.DISTRIBUTION_QUEUE_TOPIC + '/' + name + "/" + queueName;
- return new JobHandlingDistributionQueue(name, topic, jobManager);
+ return new JobHandlingDistributionQueue(queueName, topic, jobManager);
}
Modified: sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/serialization/DistributionPackageBuilder.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/serialization/DistributionPackageBuilder.java?rev=1653915&r1=1653914&r2=1653915&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/serialization/DistributionPackageBuilder.java (original)
+++ sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/serialization/DistributionPackageBuilder.java Thu Jan 22 15:32:44 2015
@@ -32,6 +32,12 @@ import org.apache.sling.distribution.pac
public interface DistributionPackageBuilder {
/**
+ * returns the type of a package. Only packages of this type will be accepted by the package builder.
+ * @return the package type.
+ */
+ String getType();
+
+ /**
* creates a {@link org.apache.sling.distribution.packaging.DistributionPackage} for a specific {@link org.apache.sling.distribution.DistributionRequest}
*
* @param resourceResolver the resource resolver used to access the resources to be packaged
Added: sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/serialization/DistributionPackageBuilderProvider.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/serialization/DistributionPackageBuilderProvider.java?rev=1653915&view=auto
==============================================================================
--- sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/serialization/DistributionPackageBuilderProvider.java (added)
+++ sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/serialization/DistributionPackageBuilderProvider.java Thu Jan 22 15:32:44 2015
@@ -0,0 +1,16 @@
+package org.apache.sling.distribution.serialization;
+
+
+/**
+ * A helper interface to allow finding registered {@link org.apache.sling.distribution.serialization.DistributionPackageBuilder}s
+ */
+public interface DistributionPackageBuilderProvider {
+
+ /**
+ * Finds a package builder that has the specified package type.
+ * @param type the package type
+ * @return a {@link org.apache.sling.distribution.serialization.DistributionPackageBuilder} if one is already registered for that type
+ * or null otherwise
+ */
+ DistributionPackageBuilder getPackageBuilder(String type);
+}
Modified: sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/serialization/impl/AbstractDistributionPackageBuilder.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/serialization/impl/AbstractDistributionPackageBuilder.java?rev=1653915&r1=1653914&r2=1653915&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/serialization/impl/AbstractDistributionPackageBuilder.java (original)
+++ sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/serialization/impl/AbstractDistributionPackageBuilder.java Thu Jan 22 15:32:44 2015
@@ -23,8 +23,6 @@ import javax.annotation.Nonnull;
import javax.jcr.RepositoryException;
import javax.jcr.Session;
import java.io.BufferedInputStream;
-import java.io.ByteArrayInputStream;
-import java.io.IOException;
import java.io.InputStream;
import org.apache.sling.api.resource.ResourceResolver;
@@ -51,6 +49,11 @@ public abstract class AbstractDistributi
this.type = type;
}
+
+ public String getType() {
+ return type;
+ }
+
@CheckForNull
public DistributionPackage createPackage(@Nonnull ResourceResolver resourceResolver, @Nonnull DistributionRequest request)
throws DistributionPackageBuildingException {
@@ -58,9 +61,9 @@ public abstract class AbstractDistributi
if (DistributionRequestType.ADD.equals(request.getRequestType())) {
distributionPackage = createPackageForAdd(resourceResolver, request);
} else if (DistributionRequestType.DELETE.equals(request.getRequestType())) {
- distributionPackage = new VoidDistributionPackage(request, type);
+ distributionPackage = new SimpleDistributionPackage(request, type);
} else if (DistributionRequestType.PULL.equals(request.getRequestType())) {
- distributionPackage = new VoidDistributionPackage(request, type);
+ distributionPackage = new SimpleDistributionPackage(request, type);
} else {
throw new DistributionPackageBuildingException("unknown action type "
+ request.getRequestType());
@@ -78,21 +81,12 @@ public abstract class AbstractDistributi
if (!stream.markSupported()) {
stream = new BufferedInputStream(stream);
}
- try {
- stream.mark(6);
- byte[] buffer = new byte[6];
- int bytesRead = stream.read(buffer, 0, 6);
- stream.reset();
- String s = new String(buffer, "UTF-8");
- log.info("read {} bytes as {}", bytesRead, s);
+ distributionPackage = SimpleDistributionPackage.fromStream(stream);
+
- if (bytesRead > 0 && buffer[0] > 0 && s.startsWith("DEL")) {
- distributionPackage = VoidDistributionPackage.fromStream(stream);
- }
- } catch (Exception e) {
- log.warn("cannot parse stream", e);
- }
stream.mark(-1);
+
+ // not a simple package
if (distributionPackage == null) {
distributionPackage = readPackageInternal(resourceResolver, stream);
}
@@ -100,6 +94,7 @@ public abstract class AbstractDistributi
}
public boolean installPackage(@Nonnull ResourceResolver resourceResolver, @Nonnull DistributionPackage distributionPackage) throws DistributionPackageReadingException {
+
DistributionRequestType actionType = distributionPackage.getInfo().getRequestType();
boolean installed;
if (DistributionRequestType.DELETE.equals(actionType)) {
@@ -134,13 +129,10 @@ public abstract class AbstractDistributi
}
public DistributionPackage getPackage(@Nonnull ResourceResolver resourceResolver, @Nonnull String id) {
- DistributionPackage distributionPackage = null;
- try {
- distributionPackage = VoidDistributionPackage.fromStream(new ByteArrayInputStream(id.getBytes("UTF-8")));
- } catch (IOException ex) {
- // not a void package
- }
+ DistributionPackage distributionPackage = SimpleDistributionPackage.fromIdString(id);
+
+ // not a simple package
if (distributionPackage == null) {
distributionPackage = getPackageInternal(resourceResolver, id);
}
Added: sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/serialization/impl/DefaultDistributionPackageBuilderProvider.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/serialization/impl/DefaultDistributionPackageBuilderProvider.java?rev=1653915&view=auto
==============================================================================
--- sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/serialization/impl/DefaultDistributionPackageBuilderProvider.java (added)
+++ sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/serialization/impl/DefaultDistributionPackageBuilderProvider.java Thu Jan 22 15:32:44 2015
@@ -0,0 +1,52 @@
+package org.apache.sling.distribution.serialization.impl;
+
+
+
+import org.apache.felix.scr.annotations.Component;
+import org.apache.felix.scr.annotations.Reference;
+import org.apache.felix.scr.annotations.Service;
+import org.apache.sling.distribution.component.impl.DistributionComponent;
+import org.apache.sling.distribution.component.impl.DistributionComponentKind;
+import org.apache.sling.distribution.component.impl.DistributionComponentProvider;
+import org.apache.sling.distribution.component.impl.DistributionComponentUtils;
+import org.apache.sling.distribution.serialization.DistributionPackageBuilder;
+import org.apache.sling.distribution.serialization.DistributionPackageBuilderProvider;
+
+import java.util.List;
+
+@Component
+@Service(DistributionPackageBuilderProvider.class)
+public class DefaultDistributionPackageBuilderProvider implements DistributionPackageBuilderProvider {
+
+ @Reference
+ DistributionComponentProvider componentProvider;
+
+ public DistributionPackageBuilder getPackageBuilder(String type) {
+ List<DistributionComponent> componentList = componentProvider.getComponents(DistributionComponentKind.PACKAGE_BUILDER);
+ DistributionPackageBuilder packageBuilder = filterPackageBuildersByType(componentList, type);
+
+ return packageBuilder;
+ }
+
+
+ private static DistributionPackageBuilder filterPackageBuildersByType(List<DistributionComponent> componentList, String type) {
+
+ if (type == null) {
+ return null;
+ }
+
+ for (DistributionComponent component : componentList) {
+ Object service = component.getService();
+
+ if (service instanceof DistributionPackageBuilder) {
+ DistributionPackageBuilder packageBuilder = (DistributionPackageBuilder) service;
+
+ if (type.equals(packageBuilder.getType())) {
+ return packageBuilder;
+ }
+ }
+ }
+
+ return null;
+ }
+}
Modified: sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/serialization/impl/ResourceSharedDistributionPackageBuilder.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/serialization/impl/ResourceSharedDistributionPackageBuilder.java?rev=1653915&r1=1653914&r2=1653915&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/serialization/impl/ResourceSharedDistributionPackageBuilder.java (original)
+++ sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/serialization/impl/ResourceSharedDistributionPackageBuilder.java Thu Jan 22 15:32:44 2015
@@ -45,7 +45,7 @@ public class ResourceSharedDistributionP
private final String PN_ORIGINAL_PATHS = "original.package.paths";
private final String PACKAGE_NAME_PREFIX = "distrpackage";
- private final String sharedPackagesRoot = "/var/sling/distribution/";
+ private final String SHARED_PACKAGES_ROOT = "/var/sling/distribution/packages";
private final DistributionPackageBuilder distributionPackageBuilder;
@@ -53,6 +53,10 @@ public class ResourceSharedDistributionP
this.distributionPackageBuilder = distributionPackageExporter;
}
+ public String getType() {
+ return distributionPackageBuilder.getType();
+ }
+
@CheckForNull
public DistributionPackage createPackage(@Nonnull ResourceResolver resourceResolver, @Nonnull DistributionRequest request) throws DistributionPackageBuildingException {
DistributionPackage distributionPackage = distributionPackageBuilder.createPackage(resourceResolver, request);
@@ -152,7 +156,7 @@ public class ResourceSharedDistributionP
}
private String getPathFromName(String name) {
- String packagePath = sharedPackagesRoot + name;
+ String packagePath = SHARED_PACKAGES_ROOT + "/" + name;
return packagePath;
}
Added: sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/serialization/impl/SimpleDistributionPackage.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/serialization/impl/SimpleDistributionPackage.java?rev=1653915&view=auto
==============================================================================
--- sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/serialization/impl/SimpleDistributionPackage.java (added)
+++ sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/serialization/impl/SimpleDistributionPackage.java Thu Jan 22 15:32:44 2015
@@ -0,0 +1,166 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.sling.distribution.serialization.impl;
+
+import javax.annotation.Nonnull;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.regex.Pattern;
+
+import org.apache.commons.io.IOUtils;
+import org.apache.sling.distribution.DistributionRequest;
+import org.apache.sling.distribution.DistributionRequestType;
+import org.apache.sling.distribution.SimpleDistributionRequest;
+import org.apache.sling.distribution.packaging.DistributionPackage;
+
+/**
+ * A simple {@link org.apache.sling.distribution.packaging.DistributionPackage}Â is used for deletion of certain paths on the target instance
+ */
+public class SimpleDistributionPackage extends AbstractDistributionPackage implements DistributionPackage {
+
+ private final static String PACKAGE_START = "DSTRPCK:";
+ private final static String DELIM = "|";
+ private final static String PATH_DELIM = ",";
+
+
+ private final String type;
+
+ private final String[] paths;
+
+ private final String id;
+
+ private final DistributionRequestType requestType;
+
+
+ public SimpleDistributionPackage(DistributionRequest request, String type) {
+ this.type = type;
+ this.paths = request.getPaths();
+ this.requestType = request.getRequestType();
+ this.id = toIdString(request, type);
+
+ this.getInfo().setPaths(paths);
+ this.getInfo().setRequestType(requestType);
+ }
+
+ public static String toIdString(DistributionRequest request, String type) {
+
+ StringBuilder b = new StringBuilder();
+
+ b.append(PACKAGE_START);
+
+ b.append(request.getRequestType().toString());
+ b.append(DELIM);
+
+ String[] paths = request.getPaths();
+
+ if (paths == null || paths.length == 0) {
+ // do nothing
+ } else {
+ for (int i = 0; i < paths.length; i++) {
+ b.append(paths[i]);
+ if (i < paths.length-1) {
+ b.append(PATH_DELIM);
+ }
+ }
+ }
+
+ b.append(DELIM);
+ b.append(type);
+
+
+ return b.toString();
+ }
+
+ public static SimpleDistributionPackage fromIdString(String id) {
+ if (!id.startsWith(PACKAGE_START)) {
+ return null;
+ }
+
+ id = id.substring(PACKAGE_START.length());
+
+
+ String[] parts = id.split(Pattern.quote(DELIM));
+
+ if (parts.length < 3) return null;
+
+ String actionString = parts[0];
+ String pathsString = parts[1];
+ String typeString = parts[2];
+
+
+ DistributionRequestType distributionRequestType = DistributionRequestType.fromName(actionString);
+
+ SimpleDistributionPackage distributionPackage = null;
+ if (distributionRequestType != null) {
+ String[] paths = pathsString.split(PATH_DELIM);
+
+ DistributionRequest request = new SimpleDistributionRequest(distributionRequestType, paths);
+ distributionPackage = new SimpleDistributionPackage(request, typeString);
+ }
+
+ return distributionPackage;
+ }
+
+
+ @Nonnull
+ public String getType() {
+ return type;
+ }
+
+ @Nonnull
+ public InputStream createInputStream() throws IOException {
+ return IOUtils.toInputStream(id, "UTF-8");
+ }
+
+ @Nonnull
+ public String getId() {
+ return id;
+ }
+
+ public void delete() {
+ // there's nothing to delete
+ }
+
+ @Override
+ public String toString() {
+ return id;
+ }
+
+ public static SimpleDistributionPackage fromStream(InputStream stream) {
+
+ try {
+ int size = SimpleDistributionPackage.PACKAGE_START.getBytes("UTF-8").length;
+ stream.mark(size);
+ byte[] buffer = new byte[size];
+ int bytesRead = stream.read(buffer, 0, size);
+ stream.reset();
+ String s = new String(buffer, "UTF-8");
+
+ if (bytesRead > 0 && buffer[0] > 0 && s.startsWith(SimpleDistributionPackage.PACKAGE_START)) {
+ String streamString = IOUtils.toString(stream, "UTF-8");
+
+ return fromIdString(streamString);
+ }
+ } catch (Exception e) {
+
+ }
+
+ return null;
+ }
+}
Modified: sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/serialization/impl/vlt/FileVaultDistributionPackage.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/serialization/impl/vlt/FileVaultDistributionPackage.java?rev=1653915&r1=1653914&r2=1653915&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/serialization/impl/vlt/FileVaultDistributionPackage.java (original)
+++ sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/serialization/impl/vlt/FileVaultDistributionPackage.java Thu Jan 22 15:32:44 2015
@@ -38,9 +38,11 @@ public class FileVaultDistributionPackag
private final String id;
+ private final String type;
private final VaultPackage pkg;
- public FileVaultDistributionPackage(VaultPackage pkg) {
+ public FileVaultDistributionPackage(String type, VaultPackage pkg) {
+ this.type = type;
this.pkg = pkg;
String[] paths = VltUtils.getPaths(pkg.getMetaInf());
this.getInfo().setPaths(paths);
@@ -60,7 +62,7 @@ public class FileVaultDistributionPackag
@Nonnull
public String getType() {
- return FileVaultDistributionPackageBuilder.PACKAGING_TYPE;
+ return type;
}
public void close() {
Modified: sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/serialization/impl/vlt/FileVaultDistributionPackageBuilder.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/serialization/impl/vlt/FileVaultDistributionPackageBuilder.java?rev=1653915&r1=1653914&r2=1653915&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/serialization/impl/vlt/FileVaultDistributionPackageBuilder.java (original)
+++ sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/serialization/impl/vlt/FileVaultDistributionPackageBuilder.java Thu Jan 22 15:32:44 2015
@@ -53,8 +53,6 @@ public class FileVaultDistributionPackag
private static final String VERSION = "0.0.1";
- public static final String PACKAGING_TYPE = "filevlt";
-
private final Logger log = LoggerFactory.getLogger(getClass());
private final Packaging packaging;
@@ -63,8 +61,8 @@ public class FileVaultDistributionPackag
private AccessControlHandling aclHandling;
- public FileVaultDistributionPackageBuilder(Packaging packaging, ImportMode importMode, AccessControlHandling aclHandling) {
- super(PACKAGING_TYPE);
+ public FileVaultDistributionPackageBuilder(String type, Packaging packaging, ImportMode importMode, AccessControlHandling aclHandling) {
+ super(type);
this.packaging = packaging;
this.importMode = importMode;
this.aclHandling = aclHandling;
@@ -82,7 +80,7 @@ public class FileVaultDistributionPackag
final String[] paths = request.getPaths();
String packageGroup = "sling/distribution";
- String packageName = PACKAGING_TYPE + "_" + System.currentTimeMillis() + "_" + UUID.randomUUID();
+ String packageName = getType() + "_" + System.currentTimeMillis() + "_" + UUID.randomUUID();
WorkspaceFilter filter = VltUtils.createFilter(request);
ExportOptions opts = VltUtils.getExportOptions(filter, packageGroup, packageName, VERSION);
@@ -90,7 +88,7 @@ public class FileVaultDistributionPackag
log.debug("assembling package {}", packageGroup + '/' + packageName + "-" + VERSION);
File tmpFile = File.createTempFile("rp-vlt-create-" + System.nanoTime(), ".zip");
VaultPackage vaultPackage = packaging.getPackageManager().assemble(session, opts, tmpFile);
- return new FileVaultDistributionPackage(vaultPackage);
+ return new FileVaultDistributionPackage(getType(), vaultPackage);
} catch (Exception e) {
throw new DistributionPackageBuildingException(e);
} finally {
@@ -112,7 +110,7 @@ public class FileVaultDistributionPackag
VaultPackage vaultPackage = packaging.getPackageManager().open(tmpFile);
if (vaultPackage != null) {
- pkg = new FileVaultDistributionPackage(vaultPackage);
+ pkg = new FileVaultDistributionPackage(getType(), vaultPackage);
} else {
log.warn("stream could not be read as a vlt package");
}
@@ -131,7 +129,7 @@ public class FileVaultDistributionPackag
File file = new File(id);
if (file.exists()) {
VaultPackage pkg = packaging.getPackageManager().open(file);
- distributionPackage = new FileVaultDistributionPackage(pkg);
+ distributionPackage = new FileVaultDistributionPackage(getType(), pkg);
}
} catch (Exception e) {
log.warn("could not find a package with id : {}", id);
@@ -164,4 +162,6 @@ public class FileVaultDistributionPackag
}
return false;
}
+
+
}
Modified: sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/serialization/impl/vlt/JcrVaultDistributionPackageBuilder.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/serialization/impl/vlt/JcrVaultDistributionPackageBuilder.java?rev=1653915&r1=1653914&r2=1653915&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/serialization/impl/vlt/JcrVaultDistributionPackageBuilder.java (original)
+++ sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/serialization/impl/vlt/JcrVaultDistributionPackageBuilder.java Thu Jan 22 15:32:44 2015
@@ -37,13 +37,12 @@ public class JcrVaultDistributionPackage
private static final String VERSION = "0.0.1";
private static final String PACKAGE_GROUP = "sling/distribution";
- public static final String PACKAGING_TYPE = "jcrvlt";
private final Packaging packaging;
private ImportMode importMode;
private AccessControlHandling aclHandling;
- public JcrVaultDistributionPackageBuilder(Packaging packaging, ImportMode importMode, AccessControlHandling aclHandling) {
- super(PACKAGING_TYPE);
+ public JcrVaultDistributionPackageBuilder(String type, Packaging packaging, ImportMode importMode, AccessControlHandling aclHandling) {
+ super(type);
this.packaging = packaging;
@@ -61,7 +60,7 @@ public class JcrVaultDistributionPackage
final String[] paths = request.getPaths();
String packageGroup = PACKAGE_GROUP;
- String packageName = PACKAGING_TYPE + "_" + System.currentTimeMillis() + "_" + UUID.randomUUID();
+ String packageName = getType() + "_" + System.currentTimeMillis() + "_" + UUID.randomUUID();
WorkspaceFilter filter = VltUtils.createFilter(request);
@@ -74,7 +73,7 @@ public class JcrVaultDistributionPackage
log.debug("assembling package {}", packageGroup + '/' + packageName + "-" + VERSION);
packageManager.assemble(jcrPackage, null);
- return new JcrVaultDistributionPackage(PACKAGING_TYPE, jcrPackage, session);
+ return new JcrVaultDistributionPackage(getType(), jcrPackage, session);
} catch (Exception e) {
throw new DistributionPackageBuildingException(e);
} finally {
@@ -91,7 +90,7 @@ public class JcrVaultDistributionPackage
JcrPackage jcrPackage = packageManager.upload(stream, true);
- return new JcrVaultDistributionPackage(PACKAGING_TYPE, jcrPackage, session);
+ return new JcrVaultDistributionPackage(getType(), jcrPackage, session);
} catch (Exception e) {
throw new DistributionPackageReadingException(e);
} finally {
@@ -135,7 +134,7 @@ public class JcrVaultDistributionPackage
if (jcrPackage == null) {
return null;
}
- return new JcrVaultDistributionPackage(PACKAGING_TYPE, jcrPackage, session);
+ return new JcrVaultDistributionPackage(getType(), jcrPackage, session);
} catch (Exception e) {
return null;
} finally {
Modified: sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/serialization/impl/vlt/VaultDistributionPackageBuilderFactory.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/serialization/impl/vlt/VaultDistributionPackageBuilderFactory.java?rev=1653915&r1=1653914&r2=1653915&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/serialization/impl/vlt/VaultDistributionPackageBuilderFactory.java (original)
+++ sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/serialization/impl/vlt/VaultDistributionPackageBuilderFactory.java Thu Jan 22 15:32:44 2015
@@ -96,6 +96,7 @@ public class VaultDistributionPackageBui
@Activate
public void activate(Map<String, Object> config) {
+ String name = PropertiesUtil.toString(config.get(NAME), null);
String type = PropertiesUtil.toString(config.get(TYPE), null);
String importModeString = PropertiesUtil.toString(config.get(IMPORT_MODE), null);
String aclHandlingString = PropertiesUtil.toString(config.get(ACL_HANDLING), null);
@@ -109,14 +110,19 @@ public class VaultDistributionPackageBui
if (aclHandlingString != null) {
aclHandling= AccessControlHandling.valueOf(aclHandlingString);
}
- if (FileVaultDistributionPackageBuilder.PACKAGING_TYPE.equals(type)) {
- packageBuilder = new ResourceSharedDistributionPackageBuilder(new FileVaultDistributionPackageBuilder(packaging, importMode, aclHandling));
+ if ("filevlt".equals(type)) {
+ packageBuilder = new ResourceSharedDistributionPackageBuilder(new FileVaultDistributionPackageBuilder(name, packaging, importMode, aclHandling));
} else {
- packageBuilder = new ResourceSharedDistributionPackageBuilder(new JcrVaultDistributionPackageBuilder(packaging, importMode, aclHandling));
+ packageBuilder = new ResourceSharedDistributionPackageBuilder(new JcrVaultDistributionPackageBuilder(name, packaging, importMode, aclHandling));
}
}
+ public String getType() {
+ return packageBuilder.getType();
+ }
+
+
public DistributionPackage createPackage(@Nonnull ResourceResolver resourceResolver, @Nonnull DistributionRequest request) throws DistributionPackageBuildingException {
return packageBuilder.createPackage(resourceResolver, request);
}
Modified: sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/servlet/DistributionAgentQueueServlet.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/servlet/DistributionAgentQueueServlet.java?rev=1653915&r1=1653914&r2=1653915&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/servlet/DistributionAgentQueueServlet.java (original)
+++ sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/servlet/DistributionAgentQueueServlet.java Thu Jan 22 15:32:44 2015
@@ -20,14 +20,25 @@ package org.apache.sling.distribution.se
import javax.servlet.ServletException;
import java.io.IOException;
+import java.util.List;
+import org.apache.felix.scr.annotations.Reference;
import org.apache.felix.scr.annotations.sling.SlingServlet;
import org.apache.sling.api.SlingHttpServletRequest;
import org.apache.sling.api.SlingHttpServletResponse;
+import org.apache.sling.api.resource.ResourceResolver;
import org.apache.sling.api.servlets.SlingAllMethodsServlet;
+import org.apache.sling.distribution.component.impl.DistributionComponent;
+import org.apache.sling.distribution.component.impl.DistributionComponentKind;
+import org.apache.sling.distribution.component.impl.DistributionComponentProvider;
+import org.apache.sling.distribution.component.impl.DistributionComponentUtils;
+import org.apache.sling.distribution.packaging.DistributionPackage;
+import org.apache.sling.distribution.packaging.SharedDistributionPackage;
import org.apache.sling.distribution.queue.DistributionQueue;
import org.apache.sling.distribution.queue.DistributionQueueItem;
import org.apache.sling.distribution.resources.DistributionResourceTypes;
+import org.apache.sling.distribution.serialization.DistributionPackageBuilder;
+import org.apache.sling.distribution.serialization.DistributionPackageBuilderProvider;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -40,6 +51,10 @@ public class DistributionAgentQueueServl
private final Logger log = LoggerFactory.getLogger(getClass());
+ @Reference
+ DistributionPackageBuilderProvider packageBuilderProvider;
+
+
@Override
protected void doPost(SlingHttpServletRequest request, SlingHttpServletResponse response)
throws ServletException, IOException {
@@ -51,10 +66,12 @@ public class DistributionAgentQueueServl
String limitParam = request.getParameter("limit");
String[] idParam = request.getParameterValues("id");
+ ResourceResolver resourceResolver = request.getResourceResolver();
+
if ("delete".equals(operation)) {
if (idParam != null) {
- deleteItem(queue, idParam);
+ deleteItems(resourceResolver, queue, idParam);
}
else {
int limit = 1;
@@ -64,20 +81,42 @@ public class DistributionAgentQueueServl
catch (NumberFormatException ex) {
}
- deleteItems(queue, limit);
+ deleteItems(resourceResolver, queue, limit);
}
}
}
- protected void deleteItems(DistributionQueue queue, int limit) {
+ protected void deleteItems(ResourceResolver resourceResolver, DistributionQueue queue, int limit) {
for(DistributionQueueItem item : queue.getItems(0, limit)) {
- queue.remove(item.getId());
+ deleteItem(resourceResolver, queue, item);
}
}
- protected void deleteItem(DistributionQueue queue, String[] ids) {
+ protected void deleteItems(ResourceResolver resourceResolver, DistributionQueue queue, String[] ids) {
for(String id : ids) {
- queue.remove(id);
+ DistributionQueueItem item = queue.getItem(id);
+ deleteItem(resourceResolver, queue, item);
+ }
+ }
+
+ protected void deleteItem(ResourceResolver resourceResolver, DistributionQueue queue, DistributionQueueItem item) {
+ String id = item.getId();
+ queue.remove(id);
+ String type = item.getType();
+
+ DistributionPackageBuilder packageBuilder = packageBuilderProvider.getPackageBuilder(type);
+
+ if (packageBuilder != null) {
+
+ DistributionPackage distributionPackage = packageBuilder.getPackage(resourceResolver, id);
+
+ if (distributionPackage != null) {
+ if (distributionPackage instanceof SharedDistributionPackage) {
+ ((SharedDistributionPackage) distributionPackage).release(queue.getName());
+ } else {
+ distributionPackage.delete();
+ }
+ }
}
}
}
Added: sling/trunk/contrib/extensions/distribution/core/src/test/java/org/apache/sling/distribution/serialization/impl/SimpleDistributionPackageTest.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/distribution/core/src/test/java/org/apache/sling/distribution/serialization/impl/SimpleDistributionPackageTest.java?rev=1653915&view=auto
==============================================================================
--- sling/trunk/contrib/extensions/distribution/core/src/test/java/org/apache/sling/distribution/serialization/impl/SimpleDistributionPackageTest.java (added)
+++ sling/trunk/contrib/extensions/distribution/core/src/test/java/org/apache/sling/distribution/serialization/impl/SimpleDistributionPackageTest.java Thu Jan 22 15:32:44 2015
@@ -0,0 +1,49 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.sling.distribution.serialization.impl;
+
+import java.io.ByteArrayInputStream;
+import java.util.Arrays;
+
+import org.apache.commons.io.IOUtils;
+import org.apache.sling.distribution.DistributionRequest;
+import org.apache.sling.distribution.DistributionRequestType;
+import org.apache.sling.distribution.SimpleDistributionRequest;
+import org.junit.Test;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+
+/**
+ * Testcase for {@link SimpleDistributionPackage}
+ */
+public class SimpleDistributionPackageTest {
+
+ @Test
+ public void testCreatedAndReadPackagesEquality() throws Exception {
+ DistributionRequest request = new SimpleDistributionRequest(DistributionRequestType.DELETE, "/abc");
+ SimpleDistributionPackage createdPackage = new SimpleDistributionPackage(request, "VOID");
+ SimpleDistributionPackage readPackage = SimpleDistributionPackage.fromStream(new ByteArrayInputStream(("DSTRPCK:DELETE|/abc|VOID").getBytes()));
+ assertEquals(createdPackage.getType(), readPackage.getType());
+ assertEquals(createdPackage.getInfo().getRequestType(), readPackage.getInfo().getRequestType());
+ assertEquals(Arrays.toString(createdPackage.getInfo().getPaths()), Arrays.toString(readPackage.getInfo().getPaths()));
+ assertEquals(createdPackage.getId(), readPackage.getId());
+ assertTrue(IOUtils.contentEquals(createdPackage.createInputStream(), readPackage.createInputStream()));
+ }
+}
Modified: sling/trunk/contrib/extensions/distribution/core/src/test/java/org/apache/sling/distribution/serialization/impl/vlt/FileVaultDistributionPackageBuilderTest.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/distribution/core/src/test/java/org/apache/sling/distribution/serialization/impl/vlt/FileVaultDistributionPackageBuilderTest.java?rev=1653915&r1=1653914&r2=1653915&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/distribution/core/src/test/java/org/apache/sling/distribution/serialization/impl/vlt/FileVaultDistributionPackageBuilderTest.java (original)
+++ sling/trunk/contrib/extensions/distribution/core/src/test/java/org/apache/sling/distribution/serialization/impl/vlt/FileVaultDistributionPackageBuilderTest.java Thu Jan 22 15:32:44 2015
@@ -76,7 +76,7 @@ public class FileVaultDistributionPackag
when(resourceResolver.adaptTo(Session.class)).thenReturn(session);
- FileVaultDistributionPackageBuilder fileVaultdistributionPackageBuilder = new FileVaultDistributionPackageBuilder(packaging, null, null);
+ FileVaultDistributionPackageBuilder fileVaultdistributionPackageBuilder = new FileVaultDistributionPackageBuilder("filevlt", packaging, null, null);
DistributionRequest request = new SimpleDistributionRequest(DistributionRequestType.ADD, new String[]{"/"});
DistributionPackage distributionPackage = fileVaultdistributionPackageBuilder.createPackageForAdd(resourceResolver, request);
assertNotNull(distributionPackage);
@@ -88,7 +88,7 @@ public class FileVaultDistributionPackag
PackageManager packageManager = mock(PackageManager.class);
when(packaging.getPackageManager()).thenReturn(packageManager);
- FileVaultDistributionPackageBuilder fileVaultdistributionPackageBuilder = new FileVaultDistributionPackageBuilder(packaging, null, null);
+ FileVaultDistributionPackageBuilder fileVaultdistributionPackageBuilder = new FileVaultDistributionPackageBuilder("filevlt", packaging, null, null);
ResourceResolver resourceResolver = mock(ResourceResolver.class);
InputStream stream = new ByteArrayInputStream("some binary".getBytes("UTF-8"));
@@ -102,7 +102,7 @@ public class FileVaultDistributionPackag
PackageManager packageManager = mock(PackageManager.class);
when(packaging.getPackageManager()).thenReturn(packageManager);
- FileVaultDistributionPackageBuilder fileVaultdistributionPackageBuilder = new FileVaultDistributionPackageBuilder(packaging, null, null);
+ FileVaultDistributionPackageBuilder fileVaultdistributionPackageBuilder = new FileVaultDistributionPackageBuilder("filevlt", packaging, null, null);
ResourceResolver resourceResolver = mock(ResourceResolver.class);
String id = "some-id";
@@ -119,7 +119,7 @@ public class FileVaultDistributionPackag
when(packageManager.open(tempFile)).thenReturn(vaultPackage);
when(packaging.getPackageManager()).thenReturn(packageManager);
- FileVaultDistributionPackageBuilder fileVaultdistributionPackageBuilder = new FileVaultDistributionPackageBuilder(packaging, null, null);
+ FileVaultDistributionPackageBuilder fileVaultdistributionPackageBuilder = new FileVaultDistributionPackageBuilder("filevlt", packaging, null, null);
ResourceResolver resourceResolver = mock(ResourceResolver.class);
Session session = mock(Session.class);
@@ -148,7 +148,7 @@ public class FileVaultDistributionPackag
when(packageManager.open(tempFile)).thenReturn(vaultPackage);
when(packaging.getPackageManager()).thenReturn(packageManager);
- FileVaultDistributionPackageBuilder fileVaultdistributionPackageBuilder = new FileVaultDistributionPackageBuilder(packaging,
+ FileVaultDistributionPackageBuilder fileVaultdistributionPackageBuilder = new FileVaultDistributionPackageBuilder("filevlt", packaging,
ImportMode.MERGE, AccessControlHandling.MERGE);
ResourceResolver resourceResolver = mock(ResourceResolver.class);
Modified: sling/trunk/contrib/extensions/distribution/core/src/test/java/org/apache/sling/distribution/serialization/impl/vlt/FileVaultDistributionPackageTest.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/distribution/core/src/test/java/org/apache/sling/distribution/serialization/impl/vlt/FileVaultDistributionPackageTest.java?rev=1653915&r1=1653914&r2=1653915&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/distribution/core/src/test/java/org/apache/sling/distribution/serialization/impl/vlt/FileVaultDistributionPackageTest.java (original)
+++ sling/trunk/contrib/extensions/distribution/core/src/test/java/org/apache/sling/distribution/serialization/impl/vlt/FileVaultDistributionPackageTest.java Thu Jan 22 15:32:44 2015
@@ -39,7 +39,7 @@ public class FileVaultDistributionPackag
File file = mock(File.class);
when(file.getAbsolutePath()).thenReturn("/path/to/file.txt");
when(vaultPackage.getFile()).thenReturn(file);
- FileVaultDistributionPackage fileVaultdistributionPackage = new FileVaultDistributionPackage(vaultPackage);
+ FileVaultDistributionPackage fileVaultdistributionPackage = new FileVaultDistributionPackage("filevlt", vaultPackage);
assertNotNull(fileVaultdistributionPackage.getId());
}
@@ -49,7 +49,7 @@ public class FileVaultDistributionPackag
File file = mock(File.class);
when(file.getAbsolutePath()).thenReturn("/path/to/file.txt");
when(vaultPackage.getFile()).thenReturn(file);
- FileVaultDistributionPackage fileVaultdistributionPackage = new FileVaultDistributionPackage(vaultPackage);
+ FileVaultDistributionPackage fileVaultdistributionPackage = new FileVaultDistributionPackage("filevlt", vaultPackage);
assertNull(fileVaultdistributionPackage.getInfo().getPaths());
}
@@ -58,7 +58,7 @@ public class FileVaultDistributionPackag
VaultPackage vaultPackage = mock(VaultPackage.class);
File file = File.createTempFile("sample", "txt");
when(vaultPackage.getFile()).thenReturn(file);
- FileVaultDistributionPackage fileVaultdistributionPackage = new FileVaultDistributionPackage(vaultPackage);
+ FileVaultDistributionPackage fileVaultdistributionPackage = new FileVaultDistributionPackage("filevlt", vaultPackage);
assertNotNull(fileVaultdistributionPackage.createInputStream());
}
@@ -68,7 +68,7 @@ public class FileVaultDistributionPackag
File file = mock(File.class);
when(file.getAbsolutePath()).thenReturn("/path/to/file.txt");
when(vaultPackage.getFile()).thenReturn(file);
- FileVaultDistributionPackage fileVaultdistributionPackage = new FileVaultDistributionPackage(vaultPackage);
+ FileVaultDistributionPackage fileVaultdistributionPackage = new FileVaultDistributionPackage("filevlt", vaultPackage);
assertNotNull(fileVaultdistributionPackage.getType());
}
@@ -78,7 +78,7 @@ public class FileVaultDistributionPackag
File file = mock(File.class);
when(file.getAbsolutePath()).thenReturn("/path/to/file.txt");
when(vaultPackage.getFile()).thenReturn(file);
- FileVaultDistributionPackage fileVaultdistributionPackage = new FileVaultDistributionPackage(vaultPackage);
+ FileVaultDistributionPackage fileVaultdistributionPackage = new FileVaultDistributionPackage("filevlt", vaultPackage);
assertNotNull(fileVaultdistributionPackage.getInfo().getRequestType());
}
@@ -88,7 +88,7 @@ public class FileVaultDistributionPackag
File file = mock(File.class);
when(file.getAbsolutePath()).thenReturn("/path/to/file.txt");
when(vaultPackage.getFile()).thenReturn(file);
- FileVaultDistributionPackage fileVaultdistributionPackage = new FileVaultDistributionPackage(vaultPackage);
+ FileVaultDistributionPackage fileVaultdistributionPackage = new FileVaultDistributionPackage("filevlt", vaultPackage);
fileVaultdistributionPackage.close();
}
@@ -98,7 +98,7 @@ public class FileVaultDistributionPackag
File file = mock(File.class);
when(file.getAbsolutePath()).thenReturn("/path/to/file.txt");
when(vaultPackage.getFile()).thenReturn(file);
- FileVaultDistributionPackage fileVaultdistributionPackage = new FileVaultDistributionPackage(vaultPackage);
+ FileVaultDistributionPackage fileVaultdistributionPackage = new FileVaultDistributionPackage("filevlt", vaultPackage);
fileVaultdistributionPackage.delete();
}
}
\ No newline at end of file
Modified: sling/trunk/contrib/extensions/distribution/it/src/test/java/org/apache/sling/distribution/it/DistributionIntegrationTestBase.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/distribution/it/src/test/java/org/apache/sling/distribution/it/DistributionIntegrationTestBase.java?rev=1653915&r1=1653914&r2=1653915&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/distribution/it/src/test/java/org/apache/sling/distribution/it/DistributionIntegrationTestBase.java (original)
+++ sling/trunk/contrib/extensions/distribution/it/src/test/java/org/apache/sling/distribution/it/DistributionIntegrationTestBase.java Thu Jan 22 15:32:44 2015
@@ -19,10 +19,14 @@
package org.apache.sling.distribution.it;
import java.io.IOException;
+import java.util.Iterator;
+import org.apache.sling.commons.json.JSONException;
+import org.apache.sling.commons.json.JSONObject;
import org.apache.sling.testing.tools.sling.SlingClient;
import org.apache.sling.testing.tools.sling.SlingInstance;
import org.apache.sling.testing.tools.sling.SlingInstanceManager;
+import org.junit.AfterClass;
import org.junit.BeforeClass;
import static org.apache.sling.distribution.it.DistributionUtils.agentUrl;
@@ -30,8 +34,10 @@ import static org.apache.sling.distribut
import static org.apache.sling.distribution.it.DistributionUtils.assertPostResourceWithParameters;
import static org.apache.sling.distribution.it.DistributionUtils.authorAgentConfigUrl;
import static org.apache.sling.distribution.it.DistributionUtils.exporterUrl;
+import static org.apache.sling.distribution.it.DistributionUtils.getResource;
import static org.apache.sling.distribution.it.DistributionUtils.importerUrl;
import static org.apache.sling.distribution.it.DistributionUtils.setArrayProperties;
+import static org.junit.Assert.assertFalse;
/**
* Integration test base class for distribution
@@ -96,5 +102,29 @@ public abstract class DistributionIntegr
}
}
+
+
+ @AfterClass
+ public static void checkNoPackagesLeft() throws IOException, JSONException {
+ if (authorClient.exists("/var/sling/distribution/packages")) {
+ JSONObject authorJson = getResource(author, "/var/sling/distribution/packages.1.json");
+ Iterator<String> it = authorJson.keys();
+ while (it.hasNext()) {
+ String key = it.next();
+ assertFalse(key.startsWith("distrpackage"));
+ }
+ }
+
+ if (publishClient.exists("/var/sling/distribution/packages")) {
+ JSONObject authorJson = getResource(publish, "/var/sling/distribution/packages.1.json");
+ Iterator<String> it = authorJson.keys();
+ while (it.hasNext()) {
+ String key = it.next();
+ assertFalse(key.startsWith("distrpackage"));
+ }
+ }
+
+
+ }
}
Modified: sling/trunk/contrib/extensions/distribution/it/src/test/java/org/apache/sling/distribution/it/MultipleForwardDistributionTest.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/distribution/it/src/test/java/org/apache/sling/distribution/it/MultipleForwardDistributionTest.java?rev=1653915&r1=1653914&r2=1653915&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/distribution/it/src/test/java/org/apache/sling/distribution/it/MultipleForwardDistributionTest.java (original)
+++ sling/trunk/contrib/extensions/distribution/it/src/test/java/org/apache/sling/distribution/it/MultipleForwardDistributionTest.java Thu Jan 22 15:32:44 2015
@@ -19,19 +19,27 @@
package org.apache.sling.distribution.it;
import org.apache.sling.distribution.DistributionRequestType;
+import org.junit.After;
import org.junit.Test;
+import java.io.IOException;
+
import static org.apache.sling.distribution.it.DistributionUtils.assertExists;
import static org.apache.sling.distribution.it.DistributionUtils.assertNotExists;
+import static org.apache.sling.distribution.it.DistributionUtils.assertPostResourceWithParameters;
import static org.apache.sling.distribution.it.DistributionUtils.createRandomNode;
import static org.apache.sling.distribution.it.DistributionUtils.distribute;
import static org.apache.sling.distribution.it.DistributionUtils.distributeDeep;
+import static org.apache.sling.distribution.it.DistributionUtils.queueUrl;
/**
* Integration test for forward distribution
*/
public class MultipleForwardDistributionTest extends DistributionIntegrationTestBase {
+ final static String DELETE_LIMIT = "100";
+
+
@Test
public void testAddContent() throws Exception {
String nodePath = createRandomNode(authorClient, "/content/forward_add_" + System.nanoTime());
@@ -48,4 +56,15 @@ public class MultipleForwardDistribution
assertNotExists(publishClient, nodePath);
}
+
+ @After
+ public void clean() throws IOException {
+ assertPostResourceWithParameters(author, 200, queueUrl("publish-multiple") + "/endpoint1",
+ "operation", "delete", "limit", DELETE_LIMIT);
+
+ assertPostResourceWithParameters(author, 200, queueUrl("publish-multiple") + "/endpoint2",
+ "operation", "delete", "limit", DELETE_LIMIT);
+
+ }
+
}
Modified: sling/trunk/contrib/extensions/distribution/sample/src/main/resources/SLING-CONTENT/libs/sling/distribution/install.publish/org.apache.sling.distribution.packaging.impl.exporter.AgentDistributionPackageExporterFactory-reverse.json
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/distribution/sample/src/main/resources/SLING-CONTENT/libs/sling/distribution/install.publish/org.apache.sling.distribution.packaging.impl.exporter.AgentDistributionPackageExporterFactory-reverse.json?rev=1653915&r1=1653914&r2=1653915&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/distribution/sample/src/main/resources/SLING-CONTENT/libs/sling/distribution/install.publish/org.apache.sling.distribution.packaging.impl.exporter.AgentDistributionPackageExporterFactory-reverse.json (original)
+++ sling/trunk/contrib/extensions/distribution/sample/src/main/resources/SLING-CONTENT/libs/sling/distribution/install.publish/org.apache.sling.distribution.packaging.impl.exporter.AgentDistributionPackageExporterFactory-reverse.json Thu Jan 22 15:32:44 2015
@@ -2,7 +2,5 @@
"jcr:primaryType": "sling:OsgiConfig",
"name": "reverse",
- "packageBuilder.target" : "(name=vlt)",
-
"agent.target": "(name=reverse)"
}
\ No newline at end of file