View Javadoc
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  /* This table specific comparator */
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  }