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));
         }
     }

Reply via email to