1 package org.argeo.activities.ui;
2
3 import java.util.Calendar;
4 import java.util.HashMap;
5 import java.util.Map;
6
7 import javax.jcr.Node;
8
9 import org.argeo.activities.ActivitiesService;
10 import org.argeo.connect.ui.util.NodeViewerComparator;
11 import org.eclipse.jface.viewers.ColumnLabelProvider;
12 import org.eclipse.jface.viewers.Viewer;
13
14
15 public class ActivityViewerComparator extends NodeViewerComparator {
16 private static final long serialVersionUID = 1L;
17
18 public final static String RELEVANT_DATE = "RELEVANT_DATE";
19
20 private final Map<String, ColumnLabelProvider> labelProviderMap = new HashMap<String, ColumnLabelProvider>();
21 private ActivitiesService activityService;
22
23 public ActivityViewerComparator(ActivitiesService activityService,
24 Map<String, ColumnLabelProvider> labelProviderMap) {
25 this.activityService = activityService;
26 if (labelProviderMap != null)
27 this.labelProviderMap.putAll(labelProviderMap);
28 }
29
30 @Override
31 public int compare(Viewer viewer, Object e1, Object e2) {
32 int rc = 0;
33
34 if (propertyName.equals(RELEVANT_DATE)) {
35 rc = compareRelevantDates(e1, e2);
36 } else if (labelProviderMap.containsKey(propertyName)) {
37 rc = compareWithLp(labelProviderMap.get(propertyName), e1, e2);
38 } else
39 return super.compare(viewer, e1, e2);
40
41 if (direction == DESCENDING) {
42 rc = -rc;
43 }
44 return rc;
45 }
46
47 protected int compareWithLp(ColumnLabelProvider labelProvider, Object e1, Object e2) {
48 String s1 = labelProvider.getText(e1);
49 String s2 = labelProvider.getText(e2);
50 return s1.compareTo(s2);
51 }
52
53 protected int compareRelevantDates(Object e1, Object e2) {
54 Calendar cal1 = activityService.getActivityRelevantDate((Node) e1);
55 Calendar cal2 = activityService.getActivityRelevantDate((Node) e2);
56 int rc = preCompareWithNull(cal1, cal2);
57 if (rc != 99)
58 return rc;
59 else
60 return cal1.compareTo(cal2);
61 }
62
63 protected int preCompareWithNull(Object v1, Object v2) {
64 if (v2 == null && v1 == null)
65 return 0;
66 else if (v2 == null)
67 return -1;
68 else if (v1 == null)
69 return 1;
70 return 99;
71 }
72
73 }