com.mountainminds.eclemma.internal.ui.coverageview.CoverageViewSorter.java Source code

Java tutorial

Introduction

Here is the source code for com.mountainminds.eclemma.internal.ui.coverageview.CoverageViewSorter.java

Source

/*******************************************************************************
 * Copyright (c) 2006, 2014 Mountainminds GmbH & Co. KG and Contributors
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v1.0
 * which accompanies this distribution, and is available at
 * http://www.eclipse.org/legal/epl-v10.html
 *
 * Contributors:
 *    Marc R. Hoffmann - initial API and implementation
 *    
 ******************************************************************************/
package com.mountainminds.eclemma.internal.ui.coverageview;

import org.eclipse.jdt.ui.JavaElementComparator;
import org.eclipse.jface.viewers.TreeViewerColumn;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.jface.viewers.ViewerComparator;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.SelectionListener;
import org.eclipse.swt.widgets.TreeColumn;
import org.jacoco.core.analysis.ICounter;
import org.jacoco.core.analysis.ICoverageNode.CounterEntity;

import com.mountainminds.eclemma.core.CoverageTools;

/**
 * Internal sorter for the coverage view.
 */
class CoverageViewSorter extends ViewerComparator {

    private final ViewSettings settings;
    private final CoverageView view;
    private final ViewerComparator elementsorter = new JavaElementComparator();

    public CoverageViewSorter(ViewSettings settings, CoverageView view) {
        this.settings = settings;
        this.view = view;
    }

    void addColumn(final TreeViewerColumn viewerColumn, final int columnidx) {
        final TreeColumn column = viewerColumn.getColumn();
        if (settings.getSortColumn() == columnidx) {
            setSortColumnAndDirection(column, settings.isReverseSort());
        }
        column.addSelectionListener(new SelectionListener() {
            public void widgetSelected(SelectionEvent e) {
                settings.toggleSortColumn(columnidx);
                setSortColumnAndDirection(column, settings.isReverseSort());
                view.refreshViewer();
            }

            public void widgetDefaultSelected(SelectionEvent e) {
            }
        });
    }

    private void setSortColumnAndDirection(TreeColumn sortColumn, boolean reverse) {
        sortColumn.getParent().setSortColumn(sortColumn);
        sortColumn.getParent().setSortDirection(reverse ? SWT.DOWN : SWT.UP);
    }

    public int compare(Viewer viewer, Object e1, Object e2) {
        CounterEntity counters = settings.getCounters();
        ICounter c1 = CoverageTools.getCoverageInfo(e1).getCounter(counters);
        ICounter c2 = CoverageTools.getCoverageInfo(e2).getCounter(counters);
        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.getCoveredRatio(), c2.getCoveredRatio());
            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;
    }

}