/* * Copyright (C) 2006-2016 DLR, Germany * * All rights reserved * * http://www.rcenvironment.de/ */ package de.rcenvironment.core.gui.log.internal; import org.eclipse.jface.viewers.Viewer; import org.eclipse.jface.viewers.ViewerSorter; import de.rcenvironment.core.log.SerializableLogEntry; /** * Provides functionality of sorting a table column. * You can choose which column to sort on and in which direction. * * @author Enrico Tappert */ public class LogTableColumnSorter 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 myDirection; private int myColumnToSort; /** * * Sets the default sorting column and direction. * */ public LogTableColumnSorter() { myColumnToSort = 3; myDirection = 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 == myColumnToSort) { // same column as last sort: toggle direction if (SORT_ASCENDING == myDirection) { myDirection = SORT_DESCENDING; } else { myDirection = SORT_ASCENDING; } } else { // new column to sort myColumnToSort = column; myDirection = SORT_ASCENDING; } } @Override public int compare(Viewer viewer, Object object1, Object object2) { int returnValue = FIRST_IS_EQUAL; if (object1 instanceof SerializableLogEntry && object2 instanceof SerializableLogEntry) { SerializableLogEntry le1 = (SerializableLogEntry) object1; SerializableLogEntry le2 = (SerializableLogEntry) object2; switch (myColumnToSort) { // level column case 0: returnValue = new Integer(le1.getLevel()).compareTo(le2.getLevel()); break; // message column case 1: returnValue = le1.getMessage().compareTo(le2.getMessage()); break; // bundle column case 2: returnValue = le1.getBundleName().compareTo(le2.getBundleName()); break; // platform column case 3: returnValue = le1.getPlatformIdentifer().toString().compareTo(le2.getPlatformIdentifer().toString()); break; // date/time column case 4: returnValue = new Long(le1.getTime()).compareTo(le2.getTime()); break; // shouldn't occur default: break; } // is DESCENDING? then flip sorting! if (SORT_DESCENDING == myDirection) { returnValue = -returnValue; } } return returnValue; } }