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