X-Git-Url: https://git.argeo.org/?a=blobdiff_plain;f=org.argeo.slc.repo%2Fsrc%2Forg%2Fargeo%2Fslc%2Frepo%2FNodeIndexerVisitor.java;fp=org.argeo.slc.repo%2Fsrc%2Forg%2Fargeo%2Fslc%2Frepo%2FNodeIndexerVisitor.java;h=c0f90d14666fd8778eabd5ff114249912e6401f0;hb=825d60c5348dbe3f5be25b0bccf7bdebfe694219;hp=0000000000000000000000000000000000000000;hpb=5e991fff5cba01858dcc5747a27e637325bc5c8e;p=gpl%2Fargeo-jcr.git diff --git a/org.argeo.slc.repo/src/org/argeo/slc/repo/NodeIndexerVisitor.java b/org.argeo.slc.repo/src/org/argeo/slc/repo/NodeIndexerVisitor.java new file mode 100644 index 0000000..c0f90d1 --- /dev/null +++ b/org.argeo.slc.repo/src/org/argeo/slc/repo/NodeIndexerVisitor.java @@ -0,0 +1,48 @@ +package org.argeo.slc.repo; + +import java.util.ArrayList; +import java.util.List; + +import javax.jcr.ItemVisitor; +import javax.jcr.Node; +import javax.jcr.NodeIterator; +import javax.jcr.Property; +import javax.jcr.RepositoryException; + +/** + * Recursively visit a sub tree and apply the list of node indexer on supported + * nodes. + */ +public class NodeIndexerVisitor implements ItemVisitor { + /** order may be important */ + private List nodeIndexers = new ArrayList(); + + public NodeIndexerVisitor() { + } + + /** Convenience constructor */ + public NodeIndexerVisitor(NodeIndexer nodeIndexer) { + nodeIndexers.add(nodeIndexer); + } + + public NodeIndexerVisitor(List nodeIndexers) { + this.nodeIndexers = nodeIndexers; + } + + public void visit(Node node) throws RepositoryException { + for (NodeIndexer nodeIndexer : nodeIndexers) + if (nodeIndexer.support(node.getPath())) + nodeIndexer.index(node); + + for (NodeIterator it = node.getNodes(); it.hasNext();) + visit(it.nextNode()); + } + + public void visit(Property property) throws RepositoryException { + } + + public void setNodeIndexers(List nodeIndexers) { + this.nodeIndexers = nodeIndexers; + } + +}