/******************************************************************************* * Copyright (c) 2006 Mountainminds GmbH & Co. KG * This software is provided under the terms of the Eclipse Public License v1.0 * See http://www.eclipse.org/legal/epl-v10.html. * * $Id: CoverageViewSorter.java 871 2010-01-24 20:48:38Z mtnminds $ ******************************************************************************/ package com.mountainminds.eclemma.internal.ui.coverageview; import org.eclipse.jdt.ui.JavaElementSorter; import org.eclipse.jface.viewers.Viewer; import org.eclipse.jface.viewers.ViewerSorter; import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.events.SelectionListener; import org.eclipse.swt.widgets.TreeColumn; import com.mountainminds.eclemma.core.CoverageTools; import com.mountainminds.eclemma.core.analysis.ICounter; import com.mountainminds.eclemma.internal.ui.coverageview.ViewSettings.ICounterMode; /** * Internal sorter for the coverage view. * * @author Marc R. Hoffmann * @version $Revision: 871 $ */ class CoverageViewSorter extends ViewerSorter { private final ViewSettings settings; private final CoverageView view; private final ViewerSorter elementsorter = new JavaElementSorter(); public CoverageViewSorter(ViewSettings settings, CoverageView view) { this.settings = settings; this.view = view; } void addColumn(final TreeColumn column, final int columnidx) { column.addSelectionListener(new SelectionListener() { public void widgetSelected(SelectionEvent e) { settings.toggleSortColumn(columnidx); TreeSortCompatibility.setTreeSortColumnAndDirection(column, settings .isReverseSort() ? SWT.DOWN : SWT.UP); view.refreshViewer(); } public void widgetDefaultSelected(SelectionEvent e) { } }); } public int compare(Viewer viewer, Object e1, Object e2) { ICounterMode mode = settings.getCounterMode(); ICounter c1 = mode.getCounter(CoverageTools.getCoverageInfo(e1)); ICounter c2 = mode.getCounter(CoverageTools.getCoverageInfo(e2)); int res = 0; switch (settings.getSortColumn()) { case CoverageView.COLUMN_ELEMENT: res = elementsorter.compare(viewer, e1, e2); break; case CoverageView.COLUMN_RATIO: res = Double.compare(c1.getRatio(), c2.getRatio()); break; case CoverageView.COLUMN_COVERED: res = (int) (c1.getCoveredCount() - c2.getCoveredCount()); break; case CoverageView.COLUMN_MISSED: res = (int) (c1.getMissedCount() - c2.getMissedCount()); break; case CoverageView.COLUMN_TOTAL: res = (int) (c1.getTotalCount() - c2.getTotalCount()); break; } if (res == 0) { res = elementsorter.compare(viewer, e1, e2); } else { res = settings.isReverseSort() ? -res : res; } return res; } }