/* * JBoss, Home of Professional Open Source. * * See the LEGAL.txt file distributed with this work for information regarding copyright ownership and licensing. * * See the AUTHORS.txt file distributed with this work for a full listing of individual contributors. */ package org.teiid.designer.ui.wizards; import java.text.Collator; import org.eclipse.jface.viewers.ContentViewer; import org.eclipse.jface.viewers.IBaseLabelProvider; import org.eclipse.jface.viewers.ILabelProvider; import org.eclipse.jface.viewers.ITableLabelProvider; import org.eclipse.jface.viewers.Viewer; import org.eclipse.jface.viewers.ViewerSorter; /** * @since 8.0 */ public class SingleColumnTableViewerSorter extends ViewerSorter { public SingleColumnTableViewerSorter() { super(); } public SingleColumnTableViewerSorter(Collator collator) { super(collator); } /** * Returns a negative, zero, or positive number depending on whether the * first element is less than, equal to, or greater than the second element. * <p> * The default implementation of this method is based on comparing the * elements' categories as computed by the <code>category</code> framework * method. Elements within the same category are further subjected to a case * insensitive compare of their label strings, either as computed by the * content viewer's label provider, or their <code>toString</code> values * in other cases. Subclasses may override. * </p> * * @param viewer * the viewer * @param e1 * the first element * @param e2 * the second element * @return a negative number if the first element is less than the second * element; the value <code>0</code> if the first element is equal * to the second element; and a positive number if the first element * is greater than the second element */ @Override public int compare(Viewer viewer, Object e1, Object e2) { int cat1 = category(e1); int cat2 = category(e2); if (cat1 != cat2) return cat1 - cat2; // cat1 == cat2 String name1; String name2; if (viewer == null || !(viewer instanceof ContentViewer)) { name1 = e1.toString(); name2 = e2.toString(); } else { IBaseLabelProvider prov = ((ContentViewer) viewer) .getLabelProvider(); if (prov instanceof ILabelProvider) { ILabelProvider lprov = (ILabelProvider) prov; name1 = lprov.getText(e1); name2 = lprov.getText(e2); } else if (prov instanceof ITableLabelProvider) { ITableLabelProvider lprov = (ITableLabelProvider) prov; name1 = lprov.getColumnText(e1, 0); name2 = lprov.getColumnText(e2, 0); } else { name1 = e1.toString(); name2 = e2.toString(); } } if (name1 == null) name1 = "";//$NON-NLS-1$ if (name2 == null) name2 = "";//$NON-NLS-1$ return getComparator().compare(name1, name2); } }