This is an automated email from the ASF dual-hosted git repository.
cschneider pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/sling-whiteboard.git
The following commit(s) were added to refs/heads/master by this push:
new acf1062 SLING-10067 - Add support for additional node types
acf1062 is described below
commit acf1062ae5dadfaa9c1b6333547324f666d4f924
Author: Christian Schneider <[email protected]>
AuthorDate: Mon Feb 1 09:19:43 2021 +0100
SLING-10067 - Add support for additional node types
---
chunked-distribution/README.md | 17 +++++---------
.../distribution/chunked/ChunkedDistribution.java | 26 +++++++++++++++++-----
.../sling/distribution/chunked/DeepTree.java | 12 +++++-----
.../sling/distribution/chunked/DeepTreeTest.java | 2 +-
4 files changed, 32 insertions(+), 25 deletions(-)
diff --git a/chunked-distribution/README.md b/chunked-distribution/README.md
index 6136ddf..a0a36ca 100644
--- a/chunked-distribution/README.md
+++ b/chunked-distribution/README.md
@@ -9,31 +9,26 @@
},
- curl -i -u admin:admin -F action=install -F bundlestart=true -F
bundlefile=@"target/org.apache.sling.distribution.chunked-0.1.0-SNAPSHOT.jar"
http://localhost:8080/system/console/bundles
+ curl -i -u admin:${PASSWORD} -F action=install -F bundlestart=true -F
bundlefile=@"target/org.apache.sling.distribution.chunked-0.1.0-SNAPSHOT.jar"
http://localhost:8080/system/console/bundles
- curl -u admin:admin -X POST -d "apply=true" -d "propertylist=user.mapping"
-d
"user.mapping=org.apache.sling.distribution.chunked\=repository-reader-service"
-d
"factoryPid=org.apache.sling.serviceusermapping.impl.ServiceUserMapperImpl.amended"
http://localhost:8080/system/console/configMgr
+ curl -u admin:${PASSWORD} -X POST -d "apply=true" -d
"propertylist=user.mapping" -d
"user.mapping=org.apache.sling.distribution.chunked\=repository-reader-service"
-d
"factoryPid=org.apache.sling.serviceusermapping.impl.ServiceUserMapperImpl.amended"
http://localhost:8080/system/console/configMgr
## Stop job
- curl -i -u admin:admin -F command=stop -F id=<job id>
http://localhost:8080/libs/sling/distribution/tree
+ curl -i -u admin:${PASSWORD}
http://localhost:8080/libs/sling/distribution/tree -F command=stop -F id=<job
id>
## Distribute path with just hierarchy noes
- curl -i -u "admin:$PASSWORD"
http://localhost:8080/libs/sling/distribution/tree -F chunkSize=15 -F path=
+ curl -i -u admin:${PASSWORD}
http://localhost:8080/libs/sling/distribution/tree -F chunkSize=15 -F path=
-## Distribute path with all nodes
-
- curl -i -u admin:admin http://localhost:8080/libs/sling/distribution/tree
-F mode=AllNodes -F path=<path>
-
-
## Get jobs
- curl -i -u admin:admin http://localhost:8080/libs/sling/distribution/tree
+ curl -i -u admin:${PASSWORD}
http://localhost:8080/libs/sling/distribution/tree
## Observe progress
- watch -t -d curl -u admin:admin
http://localhost:8080/libs/sling/distribution/tree
+ watch -t -d curl -u admin:${PASSWORD}
http://localhost:8080/libs/sling/distribution/tree
## See history of failed or stopped jobs
diff --git
a/chunked-distribution/src/main/java/org/apache/sling/distribution/chunked/ChunkedDistribution.java
b/chunked-distribution/src/main/java/org/apache/sling/distribution/chunked/ChunkedDistribution.java
index 09c64ef..435b682 100644
---
a/chunked-distribution/src/main/java/org/apache/sling/distribution/chunked/ChunkedDistribution.java
+++
b/chunked-distribution/src/main/java/org/apache/sling/distribution/chunked/ChunkedDistribution.java
@@ -20,10 +20,10 @@ package org.apache.sling.distribution.chunked;
import java.util.ArrayList;
import java.util.HashSet;
+import java.util.Iterator;
import java.util.List;
import java.util.Objects;
import java.util.Set;
-import java.util.regex.Pattern;
import javax.jcr.Node;
@@ -55,6 +55,8 @@ public class ChunkedDistribution implements JobExecutor {
private Logger log = LoggerFactory.getLogger(this.getClass());
+ private Set<String> shallowNodeTypes = new HashSet<>();
+
Distributor distributor;
ResourceResolverFactory resolverFactory;
@@ -63,6 +65,9 @@ public class ChunkedDistribution implements JobExecutor {
public ChunkedDistribution(@Reference Distributor distributor, @Reference
ResourceResolverFactory resolverFactory) {
this.distributor = distributor;
this.resolverFactory = resolverFactory;
+ this.shallowNodeTypes.add("sling:Folder");
+ this.shallowNodeTypes.add("sling:OrderedFolder");
+ this.shallowNodeTypes.add("cq:Page");
}
@Override
@@ -93,7 +98,7 @@ public class ChunkedDistribution implements JobExecutor {
public void distribute(ResourceResolver resolver, String path, Mode mode,
Integer chunkSize, JobExecutionContext context) {
Resource parent = Objects.requireNonNull(resolver.getResource(path),
"No resource present at path " + path);
context.log("Getting tree nodes for path=" + path);
- List<String> paths = DeepTree.getPaths(parent, mode);
+ List<String> paths = DeepTree.getPaths(parent);
List<List<String>> chunks = getChunks(paths, chunkSize);
context.initProgress(chunks.size(), -1);
int progress = 0;
@@ -124,17 +129,26 @@ public class ChunkedDistribution implements JobExecutor {
private void distributeChunk(ResourceResolver resolver, List<String>
paths, JobExecutionContext context) {
try {
+ List<String> allPaths = new ArrayList<>();
Set<String> deepPaths = new HashSet<>();
for (String path : paths) {
+ allPaths.add(path);
Resource res = resolver.getResource(path);
- Node node = res.adaptTo(Node.class);
- if (node.isNodeType("dam:Asset")) {
- deepPaths.add(path);
+ Iterator<Resource> childIt = res.getChildren().iterator();
+ while (childIt.hasNext()) {
+ Resource child = childIt.next();
+ Node node = child.adaptTo(Node.class);
+ String type = node.getPrimaryNodeType().getName();
+ if (!shallowNodeTypes.contains(type)) {
+ String childPath = child.getPath();
+ allPaths.add(childPath);
+ deepPaths.add(child.getPath());
+ }
}
}
- String[] pathsAr = paths.toArray(new String[] {});
+ String[] pathsAr = allPaths.toArray(new String[] {});
DistributionRequest request = new
SimpleDistributionRequest(DistributionRequestType.ADD, pathsAr, deepPaths);
distributor.distribute("publish", resolver, request);
} catch (Exception e) {
diff --git
a/chunked-distribution/src/main/java/org/apache/sling/distribution/chunked/DeepTree.java
b/chunked-distribution/src/main/java/org/apache/sling/distribution/chunked/DeepTree.java
index 451057b..a1ffc27 100644
---
a/chunked-distribution/src/main/java/org/apache/sling/distribution/chunked/DeepTree.java
+++
b/chunked-distribution/src/main/java/org/apache/sling/distribution/chunked/DeepTree.java
@@ -34,26 +34,24 @@ import org.slf4j.LoggerFactory;
public class DeepTree {
private static Logger log = LoggerFactory.getLogger(DeepTree.class);
private List<String> paths = new ArrayList<>();
- private Mode mode;
- public static List<String> getPaths(Resource baseResource, Mode mode) {
+ public static List<String> getPaths(Resource baseResource) {
String path = Objects.requireNonNull(baseResource).getPath();
- log.info("Getting deep tree for {} using mode {}", path, mode);
- DeepTree walker = new DeepTree(mode);
+ log.info("Getting deep tree for {}", path);
+ DeepTree walker = new DeepTree();
walker.walkTreeRecursively(baseResource);
log.info("Getting deep tree for {} finished with {} results", path,
walker.paths.size());
return walker.paths;
}
- private DeepTree(Mode mode) {
- this.mode = mode;
+ private DeepTree() {
}
public void walkTreeRecursively(Resource baseResource) {
try {
Node baseNode = baseResource.adaptTo(Node.class);
boolean isHierarchyNode = baseNode.isNodeType("nt:hierarchyNode");
- if (mode == Mode.AllNodes || isHierarchyNode) {
+ if (isHierarchyNode) {
paths.add(baseResource.getPath());
Iterable<Resource> childrenIter = baseResource.getChildren();
List<Resource> children = getChildren(childrenIter.iterator());
diff --git
a/chunked-distribution/src/test/java/org/apache/sling/distribution/chunked/DeepTreeTest.java
b/chunked-distribution/src/test/java/org/apache/sling/distribution/chunked/DeepTreeTest.java
index 4b222c4..2e5f9e6 100644
---
a/chunked-distribution/src/test/java/org/apache/sling/distribution/chunked/DeepTreeTest.java
+++
b/chunked-distribution/src/test/java/org/apache/sling/distribution/chunked/DeepTreeTest.java
@@ -47,7 +47,7 @@ public class DeepTreeTest {
}
}
- List<String> paths = DeepTree.getPaths(base,
Mode.OnlyHierarchyNodes);
+ List<String> paths = DeepTree.getPaths(base);
assertThat(paths.size(), Matchers.equalTo(100 + 10 + 1));
}
}