]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.document.linking.ui/src/org/simantics/document/linking/report/templates/SourceParentDiagramComparator.java
Migrated source code from Simantics SVN
[simantics/platform.git] / bundles / org.simantics.document.linking.ui / src / org / simantics / document / linking / report / templates / SourceParentDiagramComparator.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 import org.simantics.modeling.ModelingResources;\r
9 \r
10 class SourceParentDiagramComparator extends ResourceNameComparator {\r
11         DocumentLink sl;\r
12         ModelingResources mod;\r
13         \r
14         public SourceParentDiagramComparator(ReadGraph graph, Resource model) {\r
15                 super(graph,model);\r
16                 sl = DocumentLink.getInstance(graph);\r
17                 mod = ModelingResources.getInstance(graph);\r
18         }\r
19         \r
20         \r
21         @Override\r
22         public int compare(Resource o1, Resource o2) {\r
23                 try {\r
24                         Resource r1 = graph.getSingleObject(o1, sl.hasSource_Inverse);\r
25                         Resource r2 = graph.getSingleObject(o2, sl.hasSource_Inverse);\r
26                         List<Resource> path1 = getPath(r1);\r
27                         List<Resource> path2 = getPath(r2);\r
28                         int diag1 = -1;\r
29                         int diag2 = -1;\r
30                         for (int i = path1.size() -1; i >= 0; i--) {\r
31                                 if (graph.hasStatement(path1.get(i),mod.CompositeToDiagram)) {\r
32                                         diag1 = i;\r
33                                         break;\r
34                                 }\r
35                         }\r
36                         for (int i = path2.size() -1; i >= 0; i--) {\r
37                                 if (graph.hasStatement(path2.get(i),mod.CompositeToDiagram)) {\r
38                                         diag2 = i;\r
39                                         break;\r
40                                 }\r
41                         }\r
42                         int count = Math.min(diag1, diag2);\r
43                         \r
44                         int i = 0;\r
45                         int comp = 0;\r
46                         for (; i <= count; i++) {\r
47                                 comp = super.compare(path1.get(i), path2.get(i));\r
48                                 if (comp != 0)\r
49                                         return comp;\r
50                         }\r
51                         return diag1 - diag2;\r
52                         \r
53                 } catch (Exception e) {\r
54                         return 0;\r
55                 }\r
56                 \r
57         }\r
58 }