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