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