]> gerrit.simantics Code Review - simantics/interop.git/blob - org.simantics.interop/src/org/simantics/interop/utils/StringColumnComparator.java
b79e4a7e473175ab3afc43020da577b6440ebab7
[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         @Override\r
32         public int compare(Viewer viewer, Object e1, Object e2) {\r
33                 \r
34                 int rc = 0;\r
35                 \r
36                 int cat1 = category(e1);\r
37         int cat2 = category(e2);\r
38 \r
39         if (cat1 != cat2) {\r
40                         rc =  cat1 - cat2;\r
41                 } else {\r
42         \r
43                 String name1 = null;\r
44                 String name2 = null;\r
45                 \r
46                 \r
47                 \r
48                 if (viewer == null || !(viewer instanceof ContentViewer)) {\r
49                     name1 = e1.toString();\r
50                     name2 = e2.toString();\r
51                 } else {\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
59                         }\r
60                     }\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
70                             } else {\r
71                                 name1 = e1.toString();\r
72                                 name2 = e2.toString();\r
73                             }\r
74                     }\r
75                 }\r
76                 if (name1 == null) {\r
77                                 name1 = "";//$NON-NLS-1$\r
78                         }\r
79                 if (name2 == null) {\r
80                                 name2 = "";//$NON-NLS-1$\r
81                         }\r
82         \r
83                 // use the comparator to compare the strings\r
84                 rc = getComparator().compare(name1, name2);\r
85                 }\r
86                 if (direction != DESCENDING)\r
87                         rc = -rc;\r
88                 return rc;\r
89         }\r
90         \r
91 }\r
92 \r