tteofili closed pull request #4: SLING-7360: support creating delete
distribution packages by serializer
URL: https://github.com/apache/sling-org-apache-sling-distribution-core/pull/4
This is a PR merged from a forked repository.
As GitHub hides the original diff on merge, it is displayed below for
the sake of provenance:
As this is a foreign pull request (from a fork), the diff is supplied
below (as it won't show otherwise due to GitHub magic):
diff --git
a/src/main/java/org/apache/sling/distribution/packaging/impl/AbstractDistributionPackageBuilder.java
b/src/main/java/org/apache/sling/distribution/packaging/impl/AbstractDistributionPackageBuilder.java
index 0a32868..373c9ec 100644
---
a/src/main/java/org/apache/sling/distribution/packaging/impl/AbstractDistributionPackageBuilder.java
+++
b/src/main/java/org/apache/sling/distribution/packaging/impl/AbstractDistributionPackageBuilder.java
@@ -51,10 +51,12 @@
private final String type;
private final String contentType;
+ private final boolean serializerSupportsDeletion;
- AbstractDistributionPackageBuilder(String type, String contentType) {
+ AbstractDistributionPackageBuilder(String type, String contentType,
boolean serializerSupportsDeletion) {
this.type = type;
this.contentType = contentType;
+ this.serializerSupportsDeletion = serializerSupportsDeletion;
}
public String getType() {
@@ -75,7 +77,11 @@ public DistributionPackage createPackage(@Nonnull
ResourceResolver resourceResol
if (DistributionRequestType.ADD.equals(request.getRequestType())) {
distributionPackage = createPackageForAdd(resourceResolver,
request);
} else if
(DistributionRequestType.DELETE.equals(request.getRequestType())) {
- distributionPackage = new SimpleDistributionPackage(request, type);
+ if (this.serializerSupportsDeletion) {
+ distributionPackage = createPackageForDelete(resourceResolver,
request);
+ } else {
+ distributionPackage = new SimpleDistributionPackage(request,
type);
+ }
} else if
(DistributionRequestType.PULL.equals(request.getRequestType())) {
distributionPackage = new SimpleDistributionPackage(request, type);
} else if
(DistributionRequestType.TEST.equals(request.getRequestType())) {
@@ -245,11 +251,17 @@ private void ungetSession(Session session) {
}
}
-
@CheckForNull
protected abstract DistributionPackage createPackageForAdd(@Nonnull
ResourceResolver resourceResolver, @Nonnull DistributionRequest request)
throws DistributionException;
+ @CheckForNull
+ protected DistributionPackage createPackageForDelete(@Nonnull
ResourceResolver resourceResolver, @Nonnull DistributionRequest request)
+ throws DistributionException {
+ // normally this will work the same way as for add
+ return this.createPackageForAdd(resourceResolver, request);
+ }
+
@CheckForNull
protected abstract DistributionPackage readPackageInternal(@Nonnull
ResourceResolver resourceResolver, @Nonnull InputStream stream)
throws DistributionException;
diff --git
a/src/main/java/org/apache/sling/distribution/packaging/impl/FileDistributionPackageBuilder.java
b/src/main/java/org/apache/sling/distribution/packaging/impl/FileDistributionPackageBuilder.java
index 8e8e264..3e72aa3 100644
---
a/src/main/java/org/apache/sling/distribution/packaging/impl/FileDistributionPackageBuilder.java
+++
b/src/main/java/org/apache/sling/distribution/packaging/impl/FileDistributionPackageBuilder.java
@@ -66,7 +66,7 @@ public FileDistributionPackageBuilder(String type,
String tempFilesFolder,
String digestAlgorithm, String[]
nodeFilters,
String[] propertyFilters) {
- super(type, distributionContentSerializer.getContentType());
+ super(type, distributionContentSerializer.getContentType(),
distributionContentSerializer.isDeletionSupported());
this.distributionContentSerializer = distributionContentSerializer;
this.nodeFilters = VltUtils.parseFilters(nodeFilters);
this.propertyFilters = VltUtils.parseFilters(propertyFilters);
diff --git
a/src/main/java/org/apache/sling/distribution/packaging/impl/ResourceDistributionPackageBuilder.java
b/src/main/java/org/apache/sling/distribution/packaging/impl/ResourceDistributionPackageBuilder.java
index 04a4cfb..09556af 100644
---
a/src/main/java/org/apache/sling/distribution/packaging/impl/ResourceDistributionPackageBuilder.java
+++
b/src/main/java/org/apache/sling/distribution/packaging/impl/ResourceDistributionPackageBuilder.java
@@ -77,7 +77,7 @@ public ResourceDistributionPackageBuilder(String type,
boolean useOffHeapMemory,
String digestAlgorithm, String[]
nodeFilters,
String[] propertyFilters) {
- super(type, distributionContentSerializer.getContentType());
+ super(type, distributionContentSerializer.getContentType(),
distributionContentSerializer.isDeletionSupported());
this.distributionContentSerializer = distributionContentSerializer;
this.nodeFilters = VltUtils.parseFilters(nodeFilters);
this.propertyFilters = VltUtils.parseFilters(propertyFilters);
diff --git
a/src/main/java/org/apache/sling/distribution/serialization/DistributionContentSerializer.java
b/src/main/java/org/apache/sling/distribution/serialization/DistributionContentSerializer.java
index ab1735d..b4094c3 100644
---
a/src/main/java/org/apache/sling/distribution/serialization/DistributionContentSerializer.java
+++
b/src/main/java/org/apache/sling/distribution/serialization/DistributionContentSerializer.java
@@ -67,4 +67,10 @@ void exportToStream(ResourceResolver resourceResolver,
DistributionExportOptions
* @return {@code true} if it can build filters from a request, {@code
false} otherwise
*/
boolean isRequestFiltering();
+
+ /**
+ * whether or not this {@link DistributionContentSerializer} can build
packages for deletion
+ * @retur {@code} true if it can build packages for deletion
+ */
+ boolean isDeletionSupported();
}
diff --git
a/src/main/java/org/apache/sling/distribution/serialization/impl/vlt/FileVaultContentSerializer.java
b/src/main/java/org/apache/sling/distribution/serialization/impl/vlt/FileVaultContentSerializer.java
index 9b09665..4b0f94f 100644
---
a/src/main/java/org/apache/sling/distribution/serialization/impl/vlt/FileVaultContentSerializer.java
+++
b/src/main/java/org/apache/sling/distribution/serialization/impl/vlt/FileVaultContentSerializer.java
@@ -205,4 +205,8 @@ public String getContentType() {
public boolean isRequestFiltering() {
return true;
}
+
+ @Override public boolean isDeletionSupported() {
+ return false;
+ }
}
diff --git
a/src/test/java/org/apache/sling/distribution/packaging/impl/FileDistributionPackageBuilderTest.java
b/src/test/java/org/apache/sling/distribution/packaging/impl/FileDistributionPackageBuilderTest.java
index 33fc0c2..76a300f 100644
---
a/src/test/java/org/apache/sling/distribution/packaging/impl/FileDistributionPackageBuilderTest.java
+++
b/src/test/java/org/apache/sling/distribution/packaging/impl/FileDistributionPackageBuilderTest.java
@@ -77,5 +77,9 @@ public void testDefaultTempDirectory() throws
DistributionException, IOException
@Override public boolean isRequestFiltering() {
return true;
}
+
+ @Override public boolean isDeletionSupported() {
+ return false;
+ }
}
}
diff --git
a/src/test/java/org/apache/sling/distribution/trigger/impl/DistributionEventDistributeDistributionTriggerTest.java
b/src/test/java/org/apache/sling/distribution/trigger/impl/DistributionEventDistributeDistributionTriggerTest.java
index 1b2544e..a9b95d8 100644
---
a/src/test/java/org/apache/sling/distribution/trigger/impl/DistributionEventDistributeDistributionTriggerTest.java
+++
b/src/test/java/org/apache/sling/distribution/trigger/impl/DistributionEventDistributeDistributionTriggerTest.java
@@ -32,6 +32,8 @@
import org.junit.Rule;
import org.junit.Test;
import org.osgi.framework.BundleContext;
+import org.osgi.service.event.Event;
+import org.osgi.service.event.EventHandler;
import static org.mockito.Mockito.mock;
import static org.junit.Assert.*;
@@ -79,6 +81,8 @@ public void testDisable() throws Exception {
@Test
public void testDistributionLoop() throws Exception {
+ final Thread self = Thread.currentThread();
+
final AtomicInteger handled = new AtomicInteger(0);
final Map<String, Object> infoData = new HashMap<String, Object>();
infoData.put(DistributionPackageInfo.PROPERTY_REQUEST_PATHS, new
String[] { "/foo/bar" });
@@ -123,7 +127,7 @@ public void handle(ResourceResolver resourceResolver,
DistributionRequest reques
testExecution.setDaemon(true);
testExecution.run();
- Thread.sleep(200);
+ Thread.sleep(1000);
testExecution.interrupt();
assertEquals(1, handled.get());
----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on GitHub and use the
URL above to go to the specific comment.
For queries about this service, please contact Infrastructure at:
[email protected]
With regards,
Apache Git Services