]> git.argeo.org Git - gpl/argeo-slc.git/blob - plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/utils/AkbItemsComparator.java
Prepare SLC v1.1.15 release
[gpl/argeo-slc.git] / plugins / org.argeo.slc.akb.ui / src / main / java / org / argeo / slc / akb / ui / utils / AkbItemsComparator.java
1 package org.argeo.slc.akb.ui.utils;
2
3 import javax.jcr.Node;
4 import javax.jcr.Property;
5 import javax.jcr.RepositoryException;
6
7 import org.argeo.slc.akb.AkbException;
8 import org.argeo.slc.akb.AkbTypes;
9 import org.argeo.slc.akb.ui.providers.ActiveTreeItem;
10 import org.argeo.slc.akb.utils.AkbJcrUtils;
11 import org.eclipse.jface.viewers.Viewer;
12 import org.eclipse.jface.viewers.ViewerComparator;
13
14 /** Enable specific sorting of the ResultTreeView */
15 public class AkbItemsComparator extends ViewerComparator {
16
17 @Override
18 public int category(Object element) {
19 Node currNode = null;
20 if (element instanceof ActiveTreeItem)
21 currNode = ((ActiveTreeItem) element).getNode();
22 else if (element instanceof Node)
23 currNode = (Node) element;
24 else if (element instanceof String)
25 // TODO why do we have strings
26 return 10;
27 else
28 throw new AkbException("Unsupported tree item element type "
29 + element);
30
31 try {
32 if (currNode.isNodeType(AkbTypes.AKB_ITEM_FOLDER))
33 // folder always first
34 return 5;
35 } catch (RepositoryException e) {
36 throw new AkbException("Cannot retrieve category for item", e);
37 }
38 return 10;
39 }
40
41 @Override
42 public int compare(Viewer viewer, Object e1, Object e2) {
43 int cat1 = category(e1);
44 int cat2 = category(e2);
45
46 if (cat1 != cat2) {
47 return cat1 - cat2;
48 }
49
50 // TODO we only check on one item, types are not mixed for the time
51 // being
52 Node an = null;
53 Node bn = null;
54 if (e1 instanceof ActiveTreeItem) {
55 an = ((ActiveTreeItem) e1).getNode();
56 bn = ((ActiveTreeItem) e2).getNode();
57 } else if (e1 instanceof Node) {
58 an = ((Node) e1);
59 bn = ((Node) e2);
60 } else
61 throw new AkbException("Unsupported tree item element type " + e1);
62
63 return super.compare(viewer, AkbJcrUtils.get(an, Property.JCR_TITLE),
64 AkbJcrUtils.get(bn, Property.JCR_TITLE));
65 }
66 }