]> git.argeo.org Git - lgpl/argeo-commons.git/blob - providers/FullVersioningTreeContentProvider.java
Prepare next development cycle
[lgpl/argeo-commons.git] / providers / FullVersioningTreeContentProvider.java
1 package org.argeo.jcr.ui.explorer.providers;
2
3 import java.util.ArrayList;
4 import java.util.List;
5
6 import javax.jcr.Node;
7 import javax.jcr.RepositoryException;
8 import javax.jcr.nodetype.NodeType;
9 import javax.jcr.version.Version;
10 import javax.jcr.version.VersionHistory;
11 import javax.jcr.version.VersionIterator;
12 import javax.jcr.version.VersionManager;
13
14 import org.argeo.ArgeoException;
15 import org.eclipse.jface.viewers.ITreeContentProvider;
16 import org.eclipse.jface.viewers.Viewer;
17
18 /**
19 * Implementation of the {@code ITreeContentProvider} in order to display some
20 * version informations of a JCR full versionable node in a tree like structure
21 *
22 */
23 public class FullVersioningTreeContentProvider implements ITreeContentProvider {
24 // private Node rootNode;
25 // private ItemComparator itemComparator = new ItemComparator();
26
27 /**
28 * Sends back the first level of the Tree. input element must be a single
29 * node object
30 */
31 public Object[] getElements(Object inputElement) {
32 try {
33 Node rootNode = (Node) inputElement;
34 String curPath = rootNode.getPath();
35 VersionManager vm = rootNode.getSession().getWorkspace()
36 .getVersionManager();
37
38 VersionHistory vh = vm.getVersionHistory(curPath);
39 List<Version> result = new ArrayList<Version>();
40 VersionIterator vi = vh.getAllLinearVersions();
41
42 while (vi.hasNext()) {
43 result.add(vi.nextVersion());
44 }
45 return result.toArray();
46 } catch (RepositoryException re) {
47 throw new ArgeoException(
48 "Unexpected error while getting version elements", re);
49 }
50 }
51
52 public Object[] getChildren(Object parentElement) {
53 try {
54 if (parentElement instanceof Version) {
55 List<Node> tmp = new ArrayList<Node>();
56 tmp.add(((Version) parentElement).getFrozenNode());
57 return tmp.toArray();
58 }
59 } catch (RepositoryException re) {
60 throw new ArgeoException("Unexpected error while getting child "
61 + "node for version element", re);
62 }
63 return null;
64 }
65
66 public Object getParent(Object element) {
67 try {
68 // this will not work in a simpleVersionning environment, parent is
69 // not a node.
70 if (element instanceof Node
71 && ((Node) element).isNodeType(NodeType.NT_FROZEN_NODE)) {
72 Node node = (Node) element;
73 return node.getParent();
74 } else
75 return null;
76 } catch (RepositoryException e) {
77 return null;
78 }
79 }
80
81 public boolean hasChildren(Object element) {
82 try {
83 if (element instanceof Version)
84 return true;
85 else if (element instanceof Node)
86 return ((Node) element).hasNodes();
87 else
88 return false;
89 } catch (RepositoryException e) {
90 throw new ArgeoException("Cannot check children of " + element, e);
91 }
92 }
93
94 public void dispose() {
95 }
96
97 public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
98 }
99
100 }