1 package org.simantics.interop.utils;
\r
3 import org.eclipse.jface.viewers.CellLabelProvider;
\r
4 import org.eclipse.jface.viewers.ContentViewer;
\r
5 import org.eclipse.jface.viewers.IBaseLabelProvider;
\r
6 import org.eclipse.jface.viewers.ILabelProvider;
\r
7 import org.eclipse.jface.viewers.ITableLabelProvider;
\r
8 import org.eclipse.jface.viewers.TableViewer;
\r
9 import org.eclipse.jface.viewers.Viewer;
\r
10 import org.eclipse.jface.viewers.ViewerComparator;
\r
12 public class StringColumnComparator extends ViewerComparator {
\r
13 private int propertyIndex;
\r
14 private static final int DESCENDING = 1;
\r
15 private int direction = DESCENDING;
\r
17 public StringColumnComparator() {
\r
18 this.propertyIndex = 0;
\r
19 this.direction = DESCENDING;
\r
22 public void setColumnt(int column) {
\r
23 if (column == this.propertyIndex) {
\r
24 direction = 1-direction;
\r
26 this.propertyIndex = column;
\r
27 direction = DESCENDING;
\r
31 @SuppressWarnings("unchecked")
\r
33 public int compare(Viewer viewer, Object e1, Object e2) {
\r
37 int cat1 = category(e1);
\r
38 int cat2 = category(e2);
\r
44 String name1 = null;
\r
45 String name2 = null;
\r
49 if (viewer == null || !(viewer instanceof ContentViewer)) {
\r
50 name1 = e1.toString();
\r
51 name2 = e2.toString();
\r
53 IBaseLabelProvider prov = ((ContentViewer) viewer).getLabelProvider();
\r
54 if (viewer instanceof TableViewer && ((TableViewer)viewer).getLabelProvider(propertyIndex) != null) {
\r
55 CellLabelProvider clp = ((TableViewer)viewer).getLabelProvider(propertyIndex);
\r
56 if (clp instanceof ILabelProvider) {
\r
57 ILabelProvider ilb = (ILabelProvider)clp;
\r
58 name1 = ilb.getText(e1);
\r
59 name2 = ilb.getText(e2);
\r
62 if (name1 == null) {
\r
63 if (prov instanceof ITableLabelProvider) {
\r
64 ITableLabelProvider lprov = (ITableLabelProvider) prov;
\r
65 name1 = lprov.getColumnText(e1,propertyIndex);
\r
66 name2 = lprov.getColumnText(e2,propertyIndex);
\r
67 } else if (prov instanceof ILabelProvider) {
\r
68 ILabelProvider lprov = (ILabelProvider) prov;
\r
69 name1 = lprov.getText(e1);
\r
70 name2 = lprov.getText(e2);
\r
72 name1 = e1.toString();
\r
73 name2 = e2.toString();
\r
77 if (name1 == null) {
\r
78 name1 = "";//$NON-NLS-1$
\r
80 if (name2 == null) {
\r
81 name2 = "";//$NON-NLS-1$
\r
84 // use the comparator to compare the strings
\r
85 rc = getComparator().compare(name1, name2);
\r
87 if (direction != DESCENDING)
\r