]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.document.linking.ui/src/org/simantics/document/linking/report/templates/DiagramStructureWriter.java
Migrated source code from Simantics SVN
[simantics/platform.git] / bundles / org.simantics.document.linking.ui / src / org / simantics / document / linking / report / templates / DiagramStructureWriter.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.List;\r
7 import java.util.Map;\r
8 \r
9 import org.simantics.db.ReadGraph;\r
10 import org.simantics.db.Resource;\r
11 import org.simantics.db.layer0.adapter.Instances;\r
12 import org.simantics.document.DocumentResource;\r
13 import org.simantics.document.linking.ontology.DocumentLink;\r
14 import org.simantics.document.linking.report.Document;\r
15 import org.simantics.document.linking.report.DocumentTitlePage;\r
16 import org.simantics.document.linking.report.RowContentProvider;\r
17 import org.simantics.document.linking.report.Table;\r
18 import org.simantics.document.linking.report.TextItem;\r
19 import org.simantics.document.linking.utils.SourceLinkUtil;\r
20 import org.simantics.modeling.ModelingResources;\r
21 \r
22 public class DiagramStructureWriter extends DocumentWriter<Resource>{\r
23         ReadGraph graph;\r
24         Resource model;\r
25         Map<Object, Object> context;\r
26         DocumentLink sl;\r
27         ModelingResources mod;\r
28         DocumentResource doc;\r
29         NestedComparator<Resource> diagramDocumentComparator;\r
30         ResourceNameComparator diagramComparator;\r
31         \r
32         @Override\r
33         public String getName() {\r
34                 return "Diagram structure";\r
35         }\r
36         \r
37         @Override\r
38         public void start(ReadGraph graph, Resource model, Document lineWriter, Map<Object, Object> context)\r
39                         throws Exception {\r
40                 super.start(graph, model, lineWriter, context);\r
41                 this.context = context;\r
42                 DocumentTitlePage titlePage = lineWriter.newElement(DocumentTitlePage.class);\r
43                 titlePage.writeTitle(graph, context);\r
44                 \r
45                 Table table = lineWriter.newElement(Table.class);\r
46                 table.addColumn("Name", 0.4);\r
47                 table.addColumn("Document", 0.6);\r
48                 \r
49                 //lineWriter.nextPage();\r
50                 \r
51                 this.graph = graph;\r
52                 this.sl = DocumentLink.getInstance(graph);\r
53                 this.mod = ModelingResources.getInstance(graph);\r
54                 this.doc = DocumentResource.getInstance(graph);\r
55                 this.model = model;\r
56                 \r
57                 diagramComparator = new SourceParentDiagramComparator(graph,model);\r
58                 diagramDocumentComparator = new NestedComparator<Resource>();\r
59                 diagramDocumentComparator.addComparator(diagramComparator);\r
60                 diagramDocumentComparator.addComparator(new SourceReferenceComparator(graph, model));\r
61                 \r
62                 clearProviders();\r
63                 addCellProvider(new HierarchyContentProvider());\r
64                 addCellProvider(new DocumentContentProvider());\r
65         }\r
66         \r
67         \r
68         @Override\r
69         public List<Resource> getReportItems(ReadGraph graph)   throws Exception {\r
70                 Instances instancesQuery = graph.adapt(sl.Source, Instances.class);\r
71         Collection<Resource> found = instancesQuery.find(graph, model);\r
72         List<Resource> list = new ArrayList<Resource>();\r
73         for (Resource source : found) {\r
74                 Resource parent = graph.getSingleObject(source, sl.hasSource_Inverse);\r
75                 if (graph.hasStatement(parent, mod.CompositeToDiagram))\r
76                         list.add(source);\r
77         }\r
78         Collections.sort(list, diagramDocumentComparator);\r
79         return list;\r
80         \r
81         }\r
82 \r
83         private class HierarchyContentProvider implements RowContentProvider<Resource> {\r
84                 @Override\r
85                 public void setText(Document writer, Resource previous,\r
86                                 Resource current, Resource next, TextItem[] row) throws Exception {\r
87                         boolean writeHierarchy = false;\r
88                         if (previous == null)\r
89                                 writeHierarchy = true;\r
90                         else  {\r
91                                 if (diagramComparator.compare(previous, current) != 0)\r
92                                         writeHierarchy = true;\r
93                         }\r
94                         if (writeHierarchy) {\r
95 //                              if (lineWriter.getCurrentLine() > 4)\r
96 //                                      lineWriter.nextPage();\r
97                                 Resource obj = graph.getPossibleObject(current, sl.hasSource_Inverse);\r
98                                 row[0] = writer.newItem(TextItem.class);\r
99                                 if (obj != null) {\r
100                                         List<Resource> path = SourceLinkUtil.getDiagramPath(graph, model, obj);\r
101                                         if (writer.getAvailableLines() < 2)\r
102                                                 writer.nextPage();\r
103                                         String text = "";\r
104                                         for (int i = 0 ; i < path.size(); i++) {\r
105                                                 Resource r = path.get(i);\r
106                                                 text += diagramComparator.getText(r);\r
107                                                 if (i < path.size()-1)\r
108                                                         text += "/";\r
109                                         }\r
110                                         row[0].setText(text);\r
111                                 } else {\r
112                                         row[0].setText("Hierarchy missing");\r
113                                 }\r
114                         }\r
115                         \r
116                 }\r
117         }\r
118         \r
119         private class DocumentContentProvider implements RowContentProvider<Resource> {\r
120                 @Override\r
121                 public void setText(Document writer, Resource previous,\r
122                                 Resource current, Resource next, TextItem[] row) throws Exception {\r
123                         Resource document = SourceLinkUtil.getReferredDocument(graph, current);\r
124                         if (document != null) {\r
125                                 row[1] = getDocumentItem(document);\r
126                         } else {\r
127                                 row[1] = getNonExistingDocumentItem();\r
128                         }\r
129                         \r
130                 }\r
131         }\r
132         \r
133 \r
134 }\r