--- /dev/null
+package org.simantics.document.linking.report.templates;\r
+\r
+import java.util.ArrayList;\r
+import java.util.Collection;\r
+import java.util.Collections;\r
+import java.util.List;\r
+import java.util.Map;\r
+\r
+import org.simantics.db.ReadGraph;\r
+import org.simantics.db.Resource;\r
+import org.simantics.db.layer0.adapter.Instances;\r
+import org.simantics.document.DocumentResource;\r
+import org.simantics.document.linking.ontology.DocumentLink;\r
+import org.simantics.document.linking.report.Document;\r
+import org.simantics.document.linking.report.DocumentTitlePage;\r
+import org.simantics.document.linking.report.RowContentProvider;\r
+import org.simantics.document.linking.report.Table;\r
+import org.simantics.document.linking.report.TextItem;\r
+import org.simantics.document.linking.utils.SourceLinkUtil;\r
+import org.simantics.modeling.ModelingResources;\r
+\r
+public class DiagramStructureWriter extends DocumentWriter<Resource>{\r
+ ReadGraph graph;\r
+ Resource model;\r
+ Map<Object, Object> context;\r
+ DocumentLink sl;\r
+ ModelingResources mod;\r
+ DocumentResource doc;\r
+ NestedComparator<Resource> diagramDocumentComparator;\r
+ ResourceNameComparator diagramComparator;\r
+ \r
+ @Override\r
+ public String getName() {\r
+ return "Diagram structure";\r
+ }\r
+ \r
+ @Override\r
+ public void start(ReadGraph graph, Resource model, Document lineWriter, Map<Object, Object> context)\r
+ throws Exception {\r
+ super.start(graph, model, lineWriter, context);\r
+ this.context = context;\r
+ DocumentTitlePage titlePage = lineWriter.newElement(DocumentTitlePage.class);\r
+ titlePage.writeTitle(graph, context);\r
+ \r
+ Table table = lineWriter.newElement(Table.class);\r
+ table.addColumn("Name", 0.4);\r
+ table.addColumn("Document", 0.6);\r
+ \r
+ //lineWriter.nextPage();\r
+ \r
+ this.graph = graph;\r
+ this.sl = DocumentLink.getInstance(graph);\r
+ this.mod = ModelingResources.getInstance(graph);\r
+ this.doc = DocumentResource.getInstance(graph);\r
+ this.model = model;\r
+ \r
+ diagramComparator = new SourceParentDiagramComparator(graph,model);\r
+ diagramDocumentComparator = new NestedComparator<Resource>();\r
+ diagramDocumentComparator.addComparator(diagramComparator);\r
+ diagramDocumentComparator.addComparator(new SourceReferenceComparator(graph, model));\r
+ \r
+ clearProviders();\r
+ addCellProvider(new HierarchyContentProvider());\r
+ addCellProvider(new DocumentContentProvider());\r
+ }\r
+ \r
+ \r
+ @Override\r
+ public List<Resource> getReportItems(ReadGraph graph) throws Exception {\r
+ Instances instancesQuery = graph.adapt(sl.Source, Instances.class);\r
+ Collection<Resource> found = instancesQuery.find(graph, model);\r
+ List<Resource> list = new ArrayList<Resource>();\r
+ for (Resource source : found) {\r
+ Resource parent = graph.getSingleObject(source, sl.hasSource_Inverse);\r
+ if (graph.hasStatement(parent, mod.CompositeToDiagram))\r
+ list.add(source);\r
+ }\r
+ Collections.sort(list, diagramDocumentComparator);\r
+ return list;\r
+ \r
+ }\r
+\r
+ private class HierarchyContentProvider implements RowContentProvider<Resource> {\r
+ @Override\r
+ public void setText(Document writer, Resource previous,\r
+ Resource current, Resource next, TextItem[] row) throws Exception {\r
+ boolean writeHierarchy = false;\r
+ if (previous == null)\r
+ writeHierarchy = true;\r
+ else {\r
+ if (diagramComparator.compare(previous, current) != 0)\r
+ writeHierarchy = true;\r
+ }\r
+ if (writeHierarchy) {\r
+// if (lineWriter.getCurrentLine() > 4)\r
+// lineWriter.nextPage();\r
+ Resource obj = graph.getPossibleObject(current, sl.hasSource_Inverse);\r
+ row[0] = writer.newItem(TextItem.class);\r
+ if (obj != null) {\r
+ List<Resource> path = SourceLinkUtil.getDiagramPath(graph, model, obj);\r
+ if (writer.getAvailableLines() < 2)\r
+ writer.nextPage();\r
+ String text = "";\r
+ for (int i = 0 ; i < path.size(); i++) {\r
+ Resource r = path.get(i);\r
+ text += diagramComparator.getText(r);\r
+ if (i < path.size()-1)\r
+ text += "/";\r
+ }\r
+ row[0].setText(text);\r
+ } else {\r
+ row[0].setText("Hierarchy missing");\r
+ }\r
+ }\r
+ \r
+ }\r
+ }\r
+ \r
+ private class DocumentContentProvider implements RowContentProvider<Resource> {\r
+ @Override\r
+ public void setText(Document writer, Resource previous,\r
+ Resource current, Resource next, TextItem[] row) throws Exception {\r
+ Resource document = SourceLinkUtil.getReferredDocument(graph, current);\r
+ if (document != null) {\r
+ row[1] = getDocumentItem(document);\r
+ } else {\r
+ row[1] = getNonExistingDocumentItem();\r
+ }\r
+ \r
+ }\r
+ }\r
+ \r
+\r
+}\r