/**
*
*/
package com.netifera.platform.ui.tasks.list;
import com.netifera.platform.api.tasks.ITaskRecord;
import com.netifera.platform.ui.util.AbstractFieldComparator;
/**
* @author kevin
*
*/
public class TaskRecordFieldComparator extends AbstractFieldComparator {
// TODO enum here
public final static int RUNSTATE = 0;
public final static int NAME = 1;
public final static int START_TIME = 2;
public final static int ELAPSED_TIME = 3;
protected AbstractFieldComparator nextFieldComparator;
public TaskRecordFieldComparator() {
this(null);
}
public TaskRecordFieldComparator(AbstractFieldComparator nextFieldComparator) {
super();
this.nextFieldComparator = nextFieldComparator;
setSortBy(START_TIME);
setAscending(false);
}
@Override
public int compare(Object o1, Object o2) {
int result = 0;
if (((o1 instanceof ITaskRecord) == false) || ((o2 instanceof ITaskRecord) == false))
return result;
ITaskRecord task1 = (ITaskRecord) o1;
ITaskRecord task2 = (ITaskRecord) o2;
if(!(sortByField instanceof Integer)) {
return result;
}
int sortBy = (Integer)sortByField;
switch (sortBy) {
case RUNSTATE:
result = task1.getRunState() - task2.getRunState();
break;
case START_TIME:
long time1 = task1.getStartTime();
long time2 = task2.getStartTime();
/* if not started (time == 0) consider future time */
result = Long.valueOf(
time1 == 0 ? Long.MAX_VALUE : time1).compareTo(
time2 == 0 ? Long.MAX_VALUE : time2);
break;
case ELAPSED_TIME:
result = Long.valueOf(task1.getElapsedTime()).compareTo(task2.getElapsedTime());
break;
/* for task name use a chained comparator, set it to ColumnViewerFieldComparator
* to get the task name string from the label provider. TaskRecord only have the
* class name. */
case NAME:
default:
if(nextFieldComparator != null) {
nextFieldComparator.setAscending(ascending);
nextFieldComparator.setSortBy(sortByField);
return nextFieldComparator.compare(o1, o2);
}
}
return ascending ? result : -result;
}
}