blob: 722a166e1d61448197f612a83eb8987aa4d348d0 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2009 University of Illinois at Urbana-Champaign and others.
* 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:
* UIUC - Initial API and implementation
*******************************************************************************/
package org.eclipse.photran.internal.ui.views.vpgproblems;
import org.eclipse.core.resources.IMarker;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.jface.viewers.ViewerSorter;
import org.eclipse.photran.internal.ui.views.vpgproblems.VPGProblemView.VPGViewColumn;
import org.eclipse.ui.texteditor.MarkerUtilities;
/**
* Sorter for the VPG Problems view.
* <p>
* Based on Eclipse JFace TableView Tutorial; thanks to Lars Vogel
* for posting the tutorial
* (http://www.vogella.de/articles/EclipseJFaceTable/aritcle.html)
*
* @author Timofey Yuvashev
*
* @author Esfar Huq
* @author Rui Wang
*
* Fixed the method compare() by removing some outdated cases in the switch statement
*/
public class TableSorter extends ViewerSorter
{
private int columnIndex;
private boolean ascending = true;
public TableSorter()
{
this.columnIndex = 0;
this.ascending = true;
}
/**
* Invoked when the user clicks on a column header. Responds by changing the sort order.
*/
public void setColumn(int column)
{
if (column == this.columnIndex)
toggleSortOrder();
else
changeSortColumnTo(column);
}
private void toggleSortOrder()
{
this.ascending = !this.ascending;
}
private void changeSortColumnTo(int column)
{
this.columnIndex = column;
this.ascending = true;
}
/*
* Callback invoked to compare table items for sorting.
*/
@Override
public int compare(Viewer viewer, Object e1, Object e2)
{
IMarker m1 = (IMarker)e1;
IMarker m2 = (IMarker)e2;
return compare(m1, m2);
}
private int compare(IMarker m1, IMarker m2)
{
if (this.ascending)
return compareAscending(m1, m2);
else
return compareDescending(m1, m2);
}
private int compareAscending(IMarker m1, IMarker m2)
{
switch (VPGViewColumn.values()[this.columnIndex])
{
case DESCRIPTION:
{
String msg1 = MarkerUtilities.getMessage(m1);
String msg2 = MarkerUtilities.getMessage(m2);
return msg1.compareTo(msg2);
}
case RESOURCE:
{
String resource1 = m1.getResource().getName().toString();
String resource2 = m2.getResource().getName().toString();
return resource1.compareTo(resource2);
}
case PATH:
{
String path1 = m1.getResource().getProjectRelativePath().toString();
String path2 = m2.getResource().getProjectRelativePath().toString();
return path1.compareTo(path2);
}
default: throw new IllegalStateException();
}
}
private int compareDescending(IMarker m1, IMarker m2)
{
return -compareAscending(m1, m2);
}
}