org.eclipse.egit.gitflow.ui.internal.dialogs.BranchComparator.java Source code

Java tutorial

Introduction

Here is the source code for org.eclipse.egit.gitflow.ui.internal.dialogs.BranchComparator.java

Source

/*******************************************************************************
 * Copyright (C) 2016, Max Hohenegger <eclipse@hohenegger.eu>
 *
 * 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
 *******************************************************************************/
package org.eclipse.egit.gitflow.ui.internal.dialogs;

import org.eclipse.jface.viewers.ColumnLabelProvider;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.jface.viewers.ViewerComparator;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.TreeColumn;

/**
 * Comparator for {@link FilteredBranchesWidget}.
 *
 */
public class BranchComparator extends ViewerComparator {
    private TreeColumn currentColumn;

    private static final int DESCENDING = SWT.DOWN;

    private static final int ASCENDING = SWT.UP;

    private int direction = DESCENDING;

    private ColumnLabelProvider labelProvider;

    /**
     * Direction indicator to be supplied to
     * {@link org.eclipse.swt.widgets.Tree#setSortDirection(int)}
     *
     * @return one of <code>UP</code>, <code>DOWN</code> or <code>NONE</code>.
     */
    public int getDirection() {
        return direction;
    }

    /**
     * Set the column to sort by, flipping sort direction, if the same column
     * was set before.
     *
     * @param column
     *            to sort by
     * @param labelProvider
     *            to convert cells from selected column into text
     */
    public void setColumn(TreeColumn column, ColumnLabelProvider labelProvider) {
        this.labelProvider = labelProvider;
        if (column.equals(currentColumn)) {
            flipSortDirection();
        } else {
            currentColumn = column;
            direction = DESCENDING;
        }
    }

    private void flipSortDirection() {
        direction = (direction == DESCENDING) ? ASCENDING : DESCENDING;
    }

    @Override
    public int compare(Viewer viewer, Object e1, Object e2) {
        int rc = 0;

        String firstCell = labelProvider.getText(e1).toLowerCase();
        String secondCell = labelProvider.getText(e2).toLowerCase();
        if (direction == DESCENDING) {
            rc = secondCell.compareTo(firstCell);
        } else {
            rc = firstCell.compareTo(secondCell);
        }

        return rc;
    }
}