]> git.argeo.org Git - lgpl/argeo-commons.git/blob - NodesWrapper.java
5765a389d0494618382ddd8ad608cbbc0ad6bc07
[lgpl/argeo-commons.git] / NodesWrapper.java
1 package org.argeo.eclipse.ui.jcr;
2
3 import java.util.ArrayList;
4 import java.util.List;
5
6 import javax.jcr.Node;
7 import javax.jcr.NodeIterator;
8 import javax.jcr.RepositoryException;
9
10 import org.argeo.ArgeoException;
11
12 /**
13 * Element of tree which is based on a node, but whose children are not
14 * necessarily this node children.
15 */
16 public class NodesWrapper {
17 private final Node node;
18
19 public NodesWrapper(Node node) {
20 super();
21 this.node = node;
22 }
23
24 protected List<WrappedNode> getWrappedNodes() throws RepositoryException {
25 List<WrappedNode> nodes = new ArrayList<WrappedNode>();
26 for (NodeIterator nit = node.getNodes(); nit.hasNext();)
27 nodes.add(new WrappedNode(this, nit.nextNode()));
28 return nodes;
29 }
30
31 public Object[] getChildren() {
32 try {
33 return getWrappedNodes().toArray();
34 } catch (RepositoryException e) {
35 throw new ArgeoException("Cannot get wrapped children", e);
36 }
37 }
38
39 /**
40 * @return true by default because we don't want to compute the wrapped
41 * nodes twice
42 */
43 public Boolean hasChildren() {
44 return true;
45 }
46
47 public Node getNode() {
48 return node;
49 }
50
51 @Override
52 public int hashCode() {
53 return node.hashCode();
54 }
55
56 @Override
57 public boolean equals(Object obj) {
58 if (obj instanceof NodesWrapper)
59 return node.equals(((NodesWrapper) obj).getNode());
60 else
61 return false;
62 }
63
64 public String toString() {
65 return "nodes wrapper based on " + node;
66 }
67 }