/*
* Copyright (C) 2006-2016 DLR, Germany
*
* All rights reserved
*
* http://www.rcenvironment.de/
*/
package de.rcenvironment.core.gui.cluster.view.internal;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.jface.viewers.ViewerSorter;
import de.rcenvironment.core.utils.cluster.ClusterJobInformation;
/**
* Provides functionality of sorting a table column.
* You can choose which column to sort on and in which direction.
*
* @author Doreen Seider
*/
public class ClusterJobInformationTableColumnSorter extends ViewerSorter {
private static final int FIRST_IS_EQUAL = 0;
private static final int SORT_ASCENDING = 1;
private static final int SORT_DESCENDING = 2;
private int direction;
private int columnToSort;
/**
* Sets the default sorting column and direction.
*/
public ClusterJobInformationTableColumnSorter() {
columnToSort = 3;
direction = SORT_DESCENDING;
}
/**
* Lets set another column than default one to sort on.
*
* @param column The index (beginning with 0) of column to sort.
*/
public void setColumn(int column) {
if (column == columnToSort) {
if (SORT_ASCENDING == direction) {
direction = SORT_DESCENDING;
} else {
direction = SORT_ASCENDING;
}
} else {
columnToSort = column;
direction = SORT_ASCENDING;
}
}
@Override
public int compare(Viewer viewer, Object object1, Object object2) {
int returnValue = FIRST_IS_EQUAL;
if (object1 instanceof ClusterJobInformation && object2 instanceof ClusterJobInformation) {
ClusterJobInformation jobInformation1 = (ClusterJobInformation) object1;
ClusterJobInformation jobInformation2 = (ClusterJobInformation) object2;
switch (columnToSort) {
case 0:
returnValue = jobInformation1.getJobId().compareTo(jobInformation2.getJobId());
break;
case 1:
returnValue = jobInformation1.getJobName().compareTo(jobInformation2.getJobName());
break;
case 2:
returnValue = jobInformation1.getUser().compareTo(jobInformation2.getUser());
break;
case 3:
returnValue = jobInformation1.getQueue().toString().compareTo(jobInformation2.getQueue().toString());
break;
case 4:
returnValue = jobInformation1.getRemainingTime().compareTo(jobInformation2.getRemainingTime());
break;
case 5:
returnValue = jobInformation1.getStartTime().compareTo(jobInformation2.getStartTime());
break;
case 6:
returnValue = jobInformation1.getQueueTime().compareTo(jobInformation2.getQueueTime());
break;
case 7:
returnValue = jobInformation1.getJobState().compareTo(jobInformation2.getJobState());
break;
default:
break;
}
// is DESCENDING? then flip sorting!
if (SORT_DESCENDING == direction) {
returnValue = -returnValue;
}
}
return returnValue;
}
}