]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.document.linking.ui/src/org/simantics/document/linking/report/templates/SourceParentHierarchyWithPropComparator.java
Migrated source code from Simantics SVN
[simantics/platform.git] / bundles / org.simantics.document.linking.ui / src / org / simantics / document / linking / report / templates / SourceParentHierarchyWithPropComparator.java
1 package org.simantics.document.linking.report.templates;\r
2 \r
3 import java.util.List;\r
4 \r
5 import org.simantics.db.ReadGraph;\r
6 import org.simantics.db.Resource;\r
7 import org.simantics.document.linking.ontology.DocumentLink;\r
8 \r
9 class SourceParentHierarchyWithPropComparator extends ResourceNameComparator {\r
10         DocumentLink sl;\r
11         \r
12         public SourceParentHierarchyWithPropComparator(ReadGraph graph, Resource model) {\r
13                 super(graph,model);\r
14                 sl = DocumentLink.getInstance(graph);\r
15         }\r
16         @Override\r
17         public int compare(Resource o1, Resource o2) {\r
18                 try {\r
19                         Resource r1 = graph.getSingleObject(o1, sl.hasSource_Inverse);\r
20                         Resource r2 = graph.getSingleObject(o2, sl.hasSource_Inverse);\r
21                         List<Resource> path1 = getPath(r1);\r
22                         List<Resource> path2 = getPath(r2);\r
23                         int count = Math.min(path1.size(), path2.size());\r
24                         int i = 0;\r
25                         int comp = 0;\r
26                         for (; i < count; i++) {\r
27                                 comp = super.compare(path1.get(i), path2.get(i));\r
28                                 if (comp != 0)\r
29                                         return comp;\r
30                         }\r
31                         if (path1.size() < path2.size())\r
32                                 return -1;\r
33                         else if (path2.size() > path1.size())\r
34                                 return 1;\r
35                         \r
36                         Resource rel1 = graph.getPossibleObject(o1, sl.consernsRelation);\r
37                         Resource rel2 = graph.getPossibleObject(o2, sl.consernsRelation);\r
38                         if (rel1 != null) {\r
39                                 if (rel2 != null)\r
40                                         return super.compare(rel1,rel2);\r
41                                 return 1;\r
42                         } else if (rel2 != null)\r
43                                 return -1;\r
44                         return 0;\r
45                         \r
46                 } catch (Exception e) {\r
47                         return 0;\r
48                 }\r
49                 \r
50         }\r
51 }