1 8 package com.mountainminds.eclemma.internal.ui.coverageview; 9 10 import org.eclipse.jdt.ui.JavaElementSorter; 11 import org.eclipse.jface.viewers.Viewer; 12 import org.eclipse.jface.viewers.ViewerSorter; 13 import org.eclipse.swt.events.SelectionEvent; 14 import org.eclipse.swt.events.SelectionListener; 15 import org.eclipse.swt.widgets.TreeColumn; 16 17 import com.mountainminds.eclemma.core.CoverageTools; 18 import com.mountainminds.eclemma.core.analysis.ICounter; 19 import com.mountainminds.eclemma.internal.ui.coverageview.ViewSettings.ICounterMode; 20 21 27 class CoverageViewSorter extends ViewerSorter { 28 29 private final ViewSettings settings; 30 private final CoverageView view; 31 private final ViewerSorter elementsorter = new JavaElementSorter(); 32 33 public CoverageViewSorter(ViewSettings settings, CoverageView view) { 34 this.settings = settings; 35 this.view = view; 36 } 37 38 void addColumn(TreeColumn column, final int columnidx) { 39 column.addSelectionListener(new SelectionListener() { 40 public void widgetSelected(SelectionEvent e) { 41 settings.toggleSortColumn(columnidx); 42 view.refreshViewer(); 43 } 44 public void widgetDefaultSelected(SelectionEvent e) { } 45 }); 46 } 47 48 public int compare(Viewer viewer, Object e1, Object e2) { 49 ICounterMode mode = settings.getCounterMode(); 50 ICounter c1 = mode.getCounter(CoverageTools.getCoverageInfo(e1)); 51 ICounter c2 = mode.getCounter(CoverageTools.getCoverageInfo(e2)); 52 int res = 0; 53 switch (settings.getSortColumn()) { 54 case CoverageView.COLUMN_ELEMENT: 55 res = elementsorter.compare(viewer, e1, e2); 56 break; 57 case CoverageView.COLUMN_RATIO: 58 res = Double.compare(c1.getRatio(), c2.getRatio()); 59 break; 60 case CoverageView.COLUMN_COVERED: 61 res = (int) (c1.getCoveredCount() - c2.getCoveredCount()); 62 break; 63 case CoverageView.COLUMN_TOTAL: 64 res = (int) (c1.getTotalCount() - c2.getTotalCount()); 65 break; 66 } 67 if (res == 0) { 68 res = elementsorter.compare(viewer, e1, e2); 69 } else { 70 res = settings.isReverseSort() ? -res : res; 71 } 72 return res; 73 } 74 75 } 76 | Popular Tags |