package com.deepnighttwo.resourceresolver.ui.views.utils; import org.eclipse.jface.viewers.Viewer; import org.eclipse.jface.viewers.ViewerSorter; import com.deepnighttwo.resourceresolver.ui.resolver.data.IResourceDetailsData; import com.deepnighttwo.resourceresolver.ui.views.ResourceDetailsView; public class ResourceViewSorter extends ViewerSorter { private int propertyIndex; private static final int DESCENDING = 1; private int direction = DESCENDING; public ResourceViewSorter() { this.propertyIndex = 1; direction = DESCENDING; } public void setColumn(int column) { if (column == this.propertyIndex) { // Same column as last sort; toggle the direction direction = 1 - direction; } else { // New column; do an ascending sort this.propertyIndex = column; direction = DESCENDING; } } @Override public int compare(Viewer viewer, Object e1, Object e2) { int ret = 0; Object[] row1 = (Object[]) e1; Object[] row2 = (Object[]) e2; Object ele1 = row1[propertyIndex]; Object ele2 = row2[propertyIndex]; ret = ResourceDetailsView.comparators[propertyIndex].compare( (IResourceDetailsData) ele1, (IResourceDetailsData) ele2); // if (ele1 instanceof IResourceDetailsData // && ele2 instanceof IResourceDetailsData) { // } else if (ele1 instanceof IResourceDetailsData // && ele2 instanceof IResourceDetailsData == false) { // ret = Integer.MAX_VALUE; // } else if (ele1 instanceof IResourceDetailsData == false // && ele2 instanceof IResourceDetailsData) { // ret = Integer.MIN_VALUE; // } else { // ret = stringCompare(ele1, ele2); // } if (direction == DESCENDING) { ret = -ret; } return ret; } // // private int stringCompare(Object ele1, Object ele2) { // if (ele1 == null && ele2 == null) { // return 0; // } // if (ele1 == null) { // return Integer.MIN_VALUE; // } // if (ele2 == null) { // return Integer.MAX_VALUE; // } // String str1 = ele1.toString(); // String str2 = ele2.toString(); // if (ele1 instanceof IResourceDetailsData) { // str1 = ((IResourceDetailsData) ele1).getDisplayText(); // } // if (ele2 instanceof IResourceDetailsData) { // str2 = ((IResourceDetailsData) ele2).getDisplayText(); // } // return str1.compareTo(str2); // } }