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