View Javadoc
1   package org.argeo.slc.repo;
2   
3   import java.util.ArrayList;
4   import java.util.List;
5   
6   import javax.jcr.ItemVisitor;
7   import javax.jcr.Node;
8   import javax.jcr.NodeIterator;
9   import javax.jcr.Property;
10  import javax.jcr.RepositoryException;
11  
12  /**
13   * Recursively visit a sub tree and apply the list of node indexer on supported
14   * nodes.
15   */
16  public class NodeIndexerVisitor implements ItemVisitor {
17  	/** order may be important */
18  	private List<NodeIndexer> nodeIndexers = new ArrayList<NodeIndexer>();
19  
20  	public NodeIndexerVisitor() {
21  	}
22  
23  	/** Convenience constructor */
24  	public NodeIndexerVisitor(NodeIndexer nodeIndexer) {
25  		nodeIndexers.add(nodeIndexer);
26  	}
27  
28  	public NodeIndexerVisitor(List<NodeIndexer> nodeIndexers) {
29  		this.nodeIndexers = nodeIndexers;
30  	}
31  
32  	public void visit(Node node) throws RepositoryException {
33  		for (NodeIndexer nodeIndexer : nodeIndexers)
34  			if (nodeIndexer.support(node.getPath()))
35  				nodeIndexer.index(node);
36  
37  		for (NodeIterator it = node.getNodes(); it.hasNext();)
38  			visit(it.nextNode());
39  	}
40  
41  	public void visit(Property property) throws RepositoryException {
42  	}
43  
44  	public void setNodeIndexers(List<NodeIndexer> nodeIndexers) {
45  		this.nodeIndexers = nodeIndexers;
46  	}
47  
48  }