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