]> git.argeo.org Git - gpl/argeo-slc.git/blob - cms/org.argeo.slc.client.ui.dist/src/org/argeo/slc/client/ui/dist/controllers/ArtifactsTreeContentProvider.java
5559b44687e4e2da9f4f495c67b1910ec09c06d2
[gpl/argeo-slc.git] / cms / org.argeo.slc.client.ui.dist / src / org / argeo / slc / client / ui / dist / controllers / ArtifactsTreeContentProvider.java
1 package org.argeo.slc.client.ui.dist.controllers;
2
3 import java.util.ArrayList;
4 import java.util.Arrays;
5 import java.util.List;
6
7 import javax.jcr.Node;
8 import javax.jcr.NodeIterator;
9 import javax.jcr.RepositoryException;
10
11 import org.argeo.eclipse.ui.jcr.util.JcrItemsComparator;
12 import org.argeo.slc.SlcException;
13 import org.argeo.slc.SlcTypes;
14 import org.eclipse.jface.viewers.ITreeContentProvider;
15 import org.eclipse.jface.viewers.Viewer;
16
17 /** Enable specific browsing of an artifact tree */
18 public class ArtifactsTreeContentProvider implements ITreeContentProvider,
19 SlcTypes {
20 private static final long serialVersionUID = -8097817288192073987L;
21
22 // Utils
23 private boolean sortChildren = true;
24 private JcrItemsComparator itemComparator = new JcrItemsComparator();
25
26 public Object[] getElements(Object parent) {
27 return getChildren(parent);
28 }
29
30 public Object getParent(Object child) {
31 return null;
32 }
33
34 public Object[] getChildren(Object parent) {
35 Object[] elements = null;
36 try {
37 if (parent instanceof Node) {
38 Node node = (Node) parent;
39 NodeIterator ni = node.getNodes();
40 List<Node> nodesList = new ArrayList<Node>();
41 while (ni.hasNext()) {
42 nodesList.add(ni.nextNode());
43 }
44 if (sortChildren) {
45 Node[] arr = (Node[]) nodesList.toArray(new Node[nodesList
46 .size()]);
47 Arrays.sort(arr, itemComparator);
48 return arr;
49 } else
50 return nodesList.toArray();
51
52 }
53 } catch (RepositoryException e) {
54 throw new SlcException(
55 "Unexpected exception while listing node properties", e);
56 }
57 return elements;
58 }
59
60 public boolean hasChildren(Object parent) {
61 try {
62 if (parent instanceof Node) {
63 Node curNode = (Node) parent;
64 // We manually stop digging at this level
65 if (curNode.isNodeType(SLC_ARTIFACT_VERSION_BASE))
66 return false;
67 else if (curNode.hasNodes())
68 return true;
69 }
70 } catch (RepositoryException e) {
71 throw new SlcException(
72 "Unexpected exception while checking if property is multiple",
73 e);
74 }
75 return false;
76 }
77
78 public void setSortChildren(boolean sortChildren) {
79 this.sortChildren = sortChildren;
80 }
81
82 public boolean getSortChildren() {
83 return sortChildren;
84 }
85
86 public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
87 }
88
89 public void dispose() {
90 }
91 }