]> git.argeo.org Git - gpl/argeo-slc.git/blob - org.argeo.slc.client.ui.dist/src/org/argeo/slc/client/ui/dist/controllers/DistTreeComparator.java
96a08812564ef8e7a4c77e1d94e3a759e3ea38e5
[gpl/argeo-slc.git] / org.argeo.slc.client.ui.dist / src / org / argeo / slc / client / ui / dist / controllers / DistTreeComparator.java
1 package org.argeo.slc.client.ui.dist.controllers;
2
3 import org.argeo.slc.client.ui.dist.model.DistParentElem;
4 import org.argeo.slc.client.ui.dist.model.ModularDistVersionElem;
5 import org.argeo.slc.client.ui.dist.model.RepoElem;
6 import org.argeo.slc.client.ui.dist.model.WkspGroupElem;
7 import org.argeo.slc.client.ui.dist.model.WorkspaceElem;
8 import org.argeo.slc.client.ui.dist.utils.NameVersionComparator;
9 import org.argeo.slc.client.ui.dist.utils.VersionComparator;
10 import org.eclipse.jface.viewers.Viewer;
11 import org.eclipse.jface.viewers.ViewerComparator;
12
13 /** Specific comparator to enhance Distribution tree browsers */
14 public class DistTreeComparator extends ViewerComparator {
15
16 private VersionComparator vc = new VersionComparator();
17 private NameVersionComparator nvc = new NameVersionComparator();
18
19 public int category(Object element) {
20 if (element instanceof RepoElem)
21 if (((RepoElem) element).inHome())
22 // Home repository always first
23 return 2;
24 else
25 return 5;
26 else if (element instanceof WkspGroupElem)
27 return 10;
28 else if (element instanceof WorkspaceElem)
29 return 15;
30 else
31 return 20;
32 }
33
34 public int compare(Viewer viewer, Object e1, Object e2) {
35 int cat1 = category(e1);
36 int cat2 = category(e2);
37
38 if (cat1 != cat2) {
39 return cat1 - cat2;
40 }
41
42 String s1, s2;
43
44 if (e1 instanceof DistParentElem) {
45 s1 = ((DistParentElem) e1).getName();
46 s2 = ((DistParentElem) e2).getName();
47 } else {
48 s1 = e1.toString();
49 s2 = e2.toString();
50 }
51
52 if (e1 instanceof WorkspaceElem)
53 // Reverse order for nameversions
54 return nvc.compare(viewer, s2, s1);
55 else if (e1 instanceof ModularDistVersionElem)
56 // Reverse order for versions
57 return vc.compare(viewer, s2, s1);
58 else
59 return s1.compareTo(s2);
60 }
61 }