]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.document.linking.ui/src/org/simantics/document/linking/report/templates/PathComparator.java
Migrated source code from Simantics SVN
[simantics/platform.git] / bundles / org.simantics.document.linking.ui / src / org / simantics / document / linking / report / templates / PathComparator.java
1 package org.simantics.document.linking.report.templates;\r
2 \r
3 import java.util.Comparator;\r
4 import java.util.List;\r
5 \r
6 import org.simantics.db.ReadGraph;\r
7 import org.simantics.db.Resource;\r
8 import org.simantics.db.common.utils.NameUtils;\r
9 import org.simantics.db.exception.DatabaseException;\r
10 import org.simantics.utils.strings.AlphanumComparator;\r
11 \r
12 public class PathComparator implements Comparator<List<Resource>>{\r
13         \r
14         private ReadGraph graph;\r
15         \r
16         public PathComparator(ReadGraph graph) {\r
17                 this.graph = graph;\r
18         }\r
19         \r
20         @Override\r
21         public int compare(List<Resource> o1, List<Resource> o2) {\r
22                 int common = Math.min(o1.size(), o2.size());\r
23                 for (int i = 0; i < common; i++) {\r
24                         if (o1.get(i).equals(o2.get(i)))\r
25                                 continue;\r
26                         try {\r
27                                 Resource r1 = o1.get(i);\r
28                                 Resource r2 = o2.get(i);\r
29                                 String l1 = getText(r1);\r
30                                 String l2 = getText(r2);\r
31                                 int c = AlphanumComparator.COMPARATOR.compare(l1, l2);\r
32                                 if (c == 0) {\r
33                                         if (r1.getResourceId() > r2.getResourceId())\r
34                                                 return 1;\r
35                                         if (r1.getResourceId() < r2.getResourceId())\r
36                                                 return -1;\r
37                                         return 0;\r
38                                 }\r
39                                 return c;\r
40                         } catch (DatabaseException e) {\r
41                                 return 0;\r
42                         }\r
43                 }\r
44                 return o1.size() - o2.size();\r
45         }\r
46         \r
47         public String getText(Resource r) throws DatabaseException {\r
48                 String l1 = NameUtils.getSafeLabel(graph, r);\r
49                 if (l1.length() == 0)\r
50                         l1 = NameUtils.getSafeName(graph, r);\r
51                 return l1;\r
52         }\r
53 \r
54 }\r