View Javadoc
1   package org.argeo.support.freemarker;
2   
3   import java.util.ArrayList;
4   import java.util.List;
5   
6   import javax.jcr.Node;
7   import javax.jcr.NodeIterator;
8   
9   import freemarker.template.TemplateModel;
10  import freemarker.template.TemplateModelException;
11  import freemarker.template.TemplateSequenceModel;
12  
13  public class NodeIteratorModel implements TemplateSequenceModel {
14  	private final NodeIterator nodeIterator;
15  
16  	private final List<Node> nodes;
17  	private int size;
18  
19  	public NodeIteratorModel(NodeIterator nodeIterator) {
20  		super();
21  		this.nodeIterator = nodeIterator;
22  		this.size = (int) nodeIterator.getSize();
23  		this.nodes = new ArrayList<>(this.size);
24  		// TODO optimize with lazy loading
25  		while (this.nodeIterator.hasNext()) {
26  			Node node = this.nodeIterator.nextNode();
27  			nodes.add(node);
28  		}
29  		this.size = nodes.size();
30  	}
31  
32  	@Override
33  	public TemplateModel get(int index) throws TemplateModelException {
34  		return new JcrModel(nodes.get(index));
35  	}
36  
37  	@Override
38  	public int size() throws TemplateModelException {
39  		return size;
40  	}
41  
42  }