/*
* 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);
}
}