1 package org.argeo.tracker.ui;
2
3 import org.eclipse.jface.viewers.Viewer;
4 import org.eclipse.jface.viewers.ViewerComparator;
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 public class VersionComparator extends ViewerComparator {
20 private static final long serialVersionUID = 3760077835650538982L;
21
22 @Override
23 public int compare(Viewer viewer, Object e1, Object e2) {
24 String s1 = (String) e1;
25 String s2 = (String) e2;
26 return compareVersion(s1, s2);
27 }
28
29
30
31
32
33
34 private int compareVersion(String v1, String v2) {
35 String[] t1 = v1.split("\\.");
36 String[] t2 = v2.split("\\.");
37
38 for (int i = 0; i < t1.length && i < t2.length; i++) {
39 int result = compareToken(t1[i], t2[i]);
40 if (result != 0)
41 return result;
42 }
43 if (t1.length > t2.length)
44 return 1;
45 else if (t1.length < t2.length)
46 return -1;
47 else
48 return 0;
49 }
50
51 private int compareToken(String t1, String t2) {
52 if (t1 == null && t2 == null)
53 return 0;
54 else if (t1 == null)
55 return -1;
56 else if (t2 == null)
57 return 1;
58
59 Integer i1 = null, i2 = null;
60 try {
61 i1 = new Integer(t1);
62 i2 = new Integer(t2);
63 } catch (NumberFormatException nfe) {
64
65 return t1.compareTo(t2);
66 }
67 return i1.compareTo(i2);
68 }
69 }