]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.document.linking.ui/src/org/simantics/document/linking/report/templates/ResourceNameComparator.java
Migrated source code from Simantics SVN
[simantics/platform.git] / bundles / org.simantics.document.linking.ui / src / org / simantics / document / linking / report / templates / ResourceNameComparator.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.document.linking.utils.SourceLinkUtil;\r
11 import org.simantics.layer0.Layer0;\r
12 import org.simantics.utils.strings.AlphanumComparator;\r
13 \r
14 \r
15 class ResourceNameComparator implements Comparator<Resource> {\r
16         protected ReadGraph graph;\r
17         protected Layer0 l0;\r
18         protected Resource model;\r
19         \r
20         public ResourceNameComparator(ReadGraph graph, Resource model) {\r
21                 this.graph = graph;\r
22                 this.l0 = Layer0.getInstance(graph);\r
23                 this.model = model;\r
24         }\r
25         \r
26         @Override\r
27         public int compare(Resource r1, Resource r2) {\r
28                 if (r1.equals(r2))\r
29                         return 0;\r
30                 try {\r
31                         String l1 = getText(r1);\r
32                         String l2 = getText(r2);\r
33                         int c = AlphanumComparator.COMPARATOR.compare(l1, l2);\r
34                         if (c == 0) {\r
35                                 if (r1.getResourceId() > r2.getResourceId())\r
36                                         return 1;\r
37                                 if (r1.getResourceId() < r2.getResourceId())\r
38                                         return -1;\r
39                                 return 0;\r
40                         }\r
41                         return c;\r
42                 } catch (DatabaseException e) {\r
43                         return 0;\r
44                 }\r
45                 \r
46         }\r
47         \r
48         public String getText(Resource r) throws DatabaseException {\r
49                 String l1 = NameUtils.getSafeLabel(graph, r);\r
50                 if (l1.length() == 0)\r
51                         l1 = NameUtils.getSafeName(graph, r);\r
52                 return l1;\r
53         }\r
54         \r
55         public List<Resource> getPath(Resource obj) throws DatabaseException {\r
56                 return SourceLinkUtil.getPath(graph, model, obj);\r
57         }\r
58 }