]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.tests.modelled.ui/src/org/simantics/tests/modelled/ui/CoverageViewSorter.java
Sync git svn branch with SVN repository r33290.
[simantics/platform.git] / bundles / org.simantics.tests.modelled.ui / src / org / simantics / tests / modelled / ui / CoverageViewSorter.java
1 package org.simantics.tests.modelled.ui;\r
2 \r
3 import java.util.HashMap;\r
4 import java.util.Map;\r
5 \r
6 import org.eclipse.jface.viewers.TreeViewer;\r
7 import org.eclipse.jface.viewers.TreeViewerColumn;\r
8 import org.eclipse.jface.viewers.Viewer;\r
9 import org.eclipse.jface.viewers.ViewerComparator;\r
10 import org.eclipse.swt.SWT;\r
11 import org.eclipse.swt.events.SelectionEvent;\r
12 import org.eclipse.swt.events.SelectionListener;\r
13 import org.eclipse.swt.widgets.TreeColumn;\r
14 import org.simantics.scl.compiler.module.coverage.Coverage;\r
15 \r
16 class CoverageViewSorter extends ViewerComparator {\r
17 \r
18     private final TreeViewer viewer;\r
19 \r
20     public CoverageViewSorter(TreeViewer viewer) {\r
21         this.viewer = viewer;\r
22     }\r
23 \r
24     private Map<TreeColumn, Integer> columns = new HashMap<>();\r
25     private int currentDirection;\r
26     \r
27     void addColumn(final TreeViewerColumn viewerColumn, final int columnidx) {\r
28         final TreeColumn column = viewerColumn.getColumn();\r
29         setSortColumnAndDirection(column, SWT.UP);\r
30         column.addSelectionListener(new SelectionListener() {\r
31 \r
32             public void widgetSelected(SelectionEvent e) {\r
33                 TreeColumn current = column.getParent().getSortColumn();\r
34                 if (current.equals(column)) {\r
35                     int sortDirection = column.getParent().getSortDirection();\r
36                     setSortColumnAndDirection(column, sortDirection != SWT.DOWN ? SWT.DOWN : SWT.UP);\r
37                 } else {\r
38                     setSortColumnAndDirection(column, SWT.DOWN);\r
39                 }\r
40                 viewer.refresh();\r
41             }\r
42 \r
43             public void widgetDefaultSelected(SelectionEvent e) {\r
44             }\r
45         });\r
46         columns.put(column, columnidx);\r
47     }\r
48 \r
49     private void setSortColumnAndDirection(TreeColumn sortColumn, int direction) {\r
50         currentDirection = direction;\r
51         sortColumn.getParent().setSortColumn(sortColumn);\r
52         sortColumn.getParent().setSortDirection(direction);\r
53     }\r
54 \r
55     \r
56     @Override\r
57     public int compare(Viewer viewer, Object e1, Object e2) {\r
58 \r
59         TreeViewer v = (TreeViewer) viewer;\r
60         TreeColumn currentColumn = v.getTree().getSortColumn();\r
61         \r
62         int res = 0;\r
63         if (e1 instanceof Coverage && e2 instanceof Coverage) {\r
64             Coverage c1 = (Coverage) e1;\r
65             Coverage c2 = (Coverage) e2;\r
66             \r
67             int indx = columns.get(currentColumn);\r
68             switch (indx) {\r
69             case STSTestRunnerView.COLUMN_ELEMENT:\r
70                 res = c1.getIdentifier().compareToIgnoreCase(c2.getIdentifier());\r
71                 break;\r
72             case STSTestRunnerView.COLUMN_RATIO:\r
73                 res = Double.compare(c1.getCoverage(), c2.getCoverage());\r
74                 break;\r
75             case STSTestRunnerView.COLUMN_COVERED:\r
76                 res = (int) (c1.getCoveredCodeSize() - c2.getCoveredCodeSize());\r
77                 break;\r
78             case STSTestRunnerView.COLUMN_MISSED:\r
79                 res = (int) (c1.getMissedCodeSize()) - c2.getMissedCodeSize();\r
80                 break;\r
81             case STSTestRunnerView.COLUMN_TOTAL:\r
82                 res = (int) (c1.getTotalCodeSize() - c2.getTotalCodeSize());\r
83                 break;\r
84             }\r
85             if (res == 0) {\r
86                 res = c1.getIdentifier().compareTo(c2.getIdentifier());\r
87             } else {\r
88                 res = isReverseSort() ? -res : res;\r
89             }\r
90         }\r
91         return res;\r
92     }\r
93 \r
94     private boolean isReverseSort() {\r
95         return currentDirection == SWT.DOWN;\r
96     }\r
97 }\r