]> gerrit.simantics Code Review - simantics/interop.git/blob - org.simantics.interop/src/org/simantics/interop/utils/StringColumnComparator.java
076559c49661682010d138fa32415d065f29f3c7
[simantics/interop.git] / org.simantics.interop / src / org / simantics / interop / utils / StringColumnComparator.java
1 package org.simantics.interop.utils;\r
2 \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
11 \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
16         \r
17         public StringColumnComparator() {\r
18                 this.propertyIndex = 0;\r
19                 this.direction = DESCENDING;\r
20         }\r
21         \r
22         public void setColumnt(int column) {\r
23                 if (column == this.propertyIndex) {\r
24                         direction = 1-direction;\r
25                 } else {\r
26                         this.propertyIndex = column;\r
27                         direction = DESCENDING;\r
28                 }\r
29         }\r
30         \r
31         @SuppressWarnings("unchecked")\r
32         @Override\r
33         public int compare(Viewer viewer, Object e1, Object e2) {\r
34                 \r
35                 int rc = 0;\r
36                 \r
37                 int cat1 = category(e1);\r
38         int cat2 = category(e2);\r
39 \r
40         if (cat1 != cat2) {\r
41                         rc =  cat1 - cat2;\r
42                 } else {\r
43         \r
44                 String name1 = null;\r
45                 String name2 = null;\r
46                 \r
47                 \r
48                 \r
49                 if (viewer == null || !(viewer instanceof ContentViewer)) {\r
50                     name1 = e1.toString();\r
51                     name2 = e2.toString();\r
52                 } else {\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
60                         }\r
61                     }\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
71                             } else {\r
72                                 name1 = e1.toString();\r
73                                 name2 = e2.toString();\r
74                             }\r
75                     }\r
76                 }\r
77                 if (name1 == null) {\r
78                                 name1 = "";//$NON-NLS-1$\r
79                         }\r
80                 if (name2 == null) {\r
81                                 name2 = "";//$NON-NLS-1$\r
82                         }\r
83         \r
84                 // use the comparator to compare the strings\r
85                 rc = getComparator().compare(name1, name2);\r
86                 }\r
87                 if (direction != DESCENDING)\r
88                         rc = -rc;\r
89                 return rc;\r
90         }\r
91         \r
92 }\r
93 \r