1 package org.simantics.document.linking.report.templates;
\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
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
22 public class DiagramStructureWriter extends DocumentWriter<Resource>{
\r
25 Map<Object, Object> context;
\r
27 ModelingResources mod;
\r
28 DocumentResource doc;
\r
29 NestedComparator<Resource> diagramDocumentComparator;
\r
30 ResourceNameComparator diagramComparator;
\r
33 public String getName() {
\r
34 return "Diagram structure";
\r
38 public void start(ReadGraph graph, Resource model, Document lineWriter, Map<Object, Object> context)
\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
45 Table table = lineWriter.newElement(Table.class);
\r
46 table.addColumn("Name", 0.4);
\r
47 table.addColumn("Document", 0.6);
\r
49 //lineWriter.nextPage();
\r
52 this.sl = DocumentLink.getInstance(graph);
\r
53 this.mod = ModelingResources.getInstance(graph);
\r
54 this.doc = DocumentResource.getInstance(graph);
\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
63 addCellProvider(new HierarchyContentProvider());
\r
64 addCellProvider(new DocumentContentProvider());
\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
78 Collections.sort(list, diagramDocumentComparator);
\r
83 private class HierarchyContentProvider implements RowContentProvider<Resource> {
\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
91 if (diagramComparator.compare(previous, current) != 0)
\r
92 writeHierarchy = true;
\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
100 List<Resource> path = SourceLinkUtil.getDiagramPath(graph, model, obj);
\r
101 if (writer.getAvailableLines() < 2)
\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
110 row[0].setText(text);
\r
112 row[0].setText("Hierarchy missing");
\r
119 private class DocumentContentProvider implements RowContentProvider<Resource> {
\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
127 row[1] = getNonExistingDocumentItem();
\r