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
32 public int compare(Viewer viewer, Object e1, Object e2) {
\r
36 int cat1 = category(e1);
\r
37 int cat2 = category(e2);
\r
43 String name1 = null;
\r
44 String name2 = null;
\r
48 if (viewer == null || !(viewer instanceof ContentViewer)) {
\r
49 name1 = e1.toString();
\r
50 name2 = e2.toString();
\r
52 IBaseLabelProvider prov = ((ContentViewer) viewer).getLabelProvider();
\r
53 if (viewer instanceof TableViewer && ((TableViewer)viewer).getLabelProvider(propertyIndex) != null) {
\r
54 CellLabelProvider clp = ((TableViewer)viewer).getLabelProvider(propertyIndex);
\r
55 if (clp instanceof ILabelProvider) {
\r
56 ILabelProvider ilb = (ILabelProvider)clp;
\r
57 name1 = ilb.getText(e1);
\r
58 name2 = ilb.getText(e2);
\r
61 if (name1 == null) {
\r
62 if (prov instanceof ITableLabelProvider) {
\r
63 ITableLabelProvider lprov = (ITableLabelProvider) prov;
\r
64 name1 = lprov.getColumnText(e1,propertyIndex);
\r
65 name2 = lprov.getColumnText(e2,propertyIndex);
\r
66 } else if (prov instanceof ILabelProvider) {
\r
67 ILabelProvider lprov = (ILabelProvider) prov;
\r
68 name1 = lprov.getText(e1);
\r
69 name2 = lprov.getText(e2);
\r
71 name1 = e1.toString();
\r
72 name2 = e2.toString();
\r
76 if (name1 == null) {
\r
77 name1 = "";//$NON-NLS-1$
\r
79 if (name2 == null) {
\r
80 name2 = "";//$NON-NLS-1$
\r
83 // use the comparator to compare the strings
\r
84 rc = getComparator().compare(name1, name2);
\r
86 if (direction != DESCENDING)
\r