]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.document.linking.ui/src/org/simantics/document/linking/report/templates/ReferredDocumentWriter.java
Migrated source code from Simantics SVN
[simantics/platform.git] / bundles / org.simantics.document.linking.ui / src / org / simantics / document / linking / report / templates / ReferredDocumentWriter.java
1 package org.simantics.document.linking.report.templates;\r
2 \r
3 import java.util.ArrayList;\r
4 import java.util.Collection;\r
5 import java.util.Collections;\r
6 import java.util.HashSet;\r
7 import java.util.List;\r
8 import java.util.Set;\r
9 \r
10 import org.simantics.db.ReadGraph;\r
11 import org.simantics.db.Resource;\r
12 import org.simantics.db.exception.DatabaseException;\r
13 import org.simantics.db.layer0.adapter.Instances;\r
14 import org.simantics.document.DocumentResource;\r
15 import org.simantics.document.linking.ontology.DocumentLink;\r
16 import org.simantics.document.linking.utils.SourceLinkUtil;\r
17 \r
18 /**\r
19  * Writes report of referred documents.\r
20  * \r
21  * Model information\r
22     □ Document folder 1\r
23         • Document 1-1\r
24         • Document 1-2 rev1\r
25         • Document 1-2 rev2\r
26         • Document 1-2 rev3\r
27         • Document 1-3\r
28     □ Document folder 2\r
29         • Document folder 3\r
30             o Document 3-1\r
31             o Document 3-2\r
32         • Document folder 4\r
33             o Document 4-1\r
34             o Document 4-2\r
35  * \r
36  * @author Marko Luukkainen <marko.luukkainen@vtt.fi>\r
37  *\r
38  */\r
39 public class ReferredDocumentWriter extends ModelDocumentWriter{\r
40 \r
41         @Override\r
42         public String getName() {\r
43                 return "Referred Documents";\r
44         }\r
45         \r
46 \r
47         @Override\r
48         public List<List<Resource>> getReportItems(ReadGraph graph)     throws DatabaseException {\r
49                 DocumentResource doc = DocumentResource.getInstance(graph);\r
50                 DocumentLink sl = DocumentLink.getInstance(graph);\r
51                 Instances instancesQuery = graph.adapt(sl.Source, Instances.class);\r
52         Collection<Resource> found = instancesQuery.find(graph, model);\r
53         Set<Resource> referred = new HashSet<Resource>();\r
54         for (Resource source : found) {\r
55                 Resource ref = SourceLinkUtil.getReferredDocument(graph, source);\r
56                 if (ref != null)\r
57                         referred.add(ref);\r
58         }\r
59         found = null;\r
60         List<List<Resource>> result = new ArrayList<List<Resource>>();\r
61         for (Resource ref : referred) {\r
62                 if (!graph.isInstanceOf(ref, doc.Document))\r
63                         continue;\r
64                 result.add(SourceLinkUtil.getPath(graph,model,ref));\r
65         }\r
66         referred = null;\r
67         Collections.sort(result, new PathComparator(graph));\r
68         return result;\r
69         }\r
70 \r
71 }\r