--- /dev/null
+package org.simantics.document.linking.report.templates;\r
+\r
+import java.util.Collections;\r
+import java.util.Comparator;\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.common.utils.NameUtils;\r
+import org.simantics.db.exception.DatabaseException;\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.TableOfContents;\r
+import org.simantics.document.linking.report.TextItem;\r
+import org.simantics.document.linking.utils.SourceLinkUtil;\r
+\r
+/**\r
+ * ? Configuration folder 1\r
+ * \95 Diagram 1\r
+ * o Link1: Document information\r
+ * o Link2: Document information\r
+ * o Link3: Document information\r
+ * o Module 1\r
+ * ? Link4: Document information\r
+ * ? Link5: Document information\r
+ * ? Attribute 1\r
+ * ? Link6: Document information\r
+ * ? Attribute 2\r
+ * ? Link7: Document information\r
+ * ? Link8: Document information\r
+ * o Module 2\r
+ * ? Link9: Document information\r
+ * \r
+ * @author Marko Luukkainen <marko.luukkainen@vtt.fi>\r
+ *\r
+ */\r
+public class CompleteStructureWriter extends IndexQueryReport {\r
+ ReadGraph graph;\r
+ Resource model;\r
+ Map<Object, Object> context;\r
+ DocumentLink sl;\r
+ DocumentResource doc;\r
+ ResourceNameComparator parentComparator;\r
+ Comparator<Resource> hierarchyComparator;\r
+ \r
+ @Override\r
+ public String getName() {\r
+ return "Complete Structure";\r
+ }\r
+ \r
+ @Override\r
+ public void sort(List<Resource> list) throws DatabaseException{\r
+ Collections.sort(list, parentComparator);\r
+ }\r
+ \r
+ @Override\r
+ public void start(final ReadGraph graph, final Resource model, Document writer, Map<Object, Object> context) throws Exception{\r
+ super.start(graph, model, writer, context);\r
+ this.context = context;\r
+ DocumentTitlePage titlePage = writer.newElement(DocumentTitlePage.class);\r
+ titlePage.writeTitle(graph, context);\r
+ writer.newElement(TableOfContents.class);\r
+ Table table = writer.newElement(Table.class,Document.TOC);\r
+ \r
+ table.addColumn("Name", 0.2);\r
+ table.addColumn("Attribute", 0.2);\r
+ table.addColumn("Value", 0.15);\r
+ table.addColumn("Document", 0.2);\r
+ table.addColumn("Comment", 0.25);\r
+ \r
+ //lineWriter.nextPage();\r
+ \r
+ this.graph = graph;\r
+ this.sl = DocumentLink.getInstance(graph);\r
+ this.doc = DocumentResource.getInstance(graph);\r
+ this.model = model;\r
+ \r
+ \r
+ \r
+ parentComparator = new SourceParentHierarchyWithPropComparator(graph,model);\r
+ hierarchyComparator = new SourceParentDiagramComparator(graph,model);\r
+ \r
+ clearProviders();\r
+ addLineProvider(new HierarchyProvider());\r
+ addCellProvider(new LinkCellProvider());\r
+ \r
+ }\r
+ \r
+ private class HierarchyProvider implements RowContentProvider<Resource> {\r
+ \r
+ @Override\r
+ public void setText(Document writer, Resource previous, Resource current, Resource next, TextItem[] row) throws Exception {\r
+ boolean writeHierarchy = false;\r
+ if (previous == null)\r
+ writeHierarchy = true;\r
+ else {\r
+ if (hierarchyComparator.compare(previous, current) != 0)\r
+ writeHierarchy = true;\r
+ }\r
+ if (writeHierarchy) {\r
+ Resource obj = graph.getPossibleObject(current, sl.hasSource_Inverse);\r
+ Table table = writer.getCurrentElement(Table.class);\r
+\r
+ if (writer.getCurrentLine() > 2) {\r
+ writer.nextPage();\r
+ table = writer.nextElement(Table.class,Document.TOC);\r
+ }\r
+ \r
+ if (obj != null) {\r
+ String text = "";\r
+ List<Resource> path = SourceLinkUtil.getDiagramPath(graph, model, obj);\r
+ \r
+ if (path == null) {\r
+ path = parentComparator.getPath(obj);\r
+ for (int i = 0 ; i < path.size()-1; i++) {\r
+ Resource r = path.get(i);\r
+ text += parentComparator.getText(r);\r
+ if (i < path.size()-2)\r
+ text += "/";\r
+ }\r
+ } else {\r
+ for (int i = 0 ; i < path.size(); i++) {\r
+ Resource r = path.get(i);\r
+ text += parentComparator.getText(r);\r
+ if (i < path.size()-1)\r
+ text += "/";\r
+ }\r
+ }\r
+ //row[0] = text;\r
+ table.setTitle(text);\r
+ \r
+ TableOfContents toc = writer.getCurrentElement(TableOfContents.class);\r
+ toc.addTocElement(text, table);\r
+ } else {\r
+ //row[0] = "Hierarchy missing";\r
+ table.setTitle("Hierarchy missing");\r
+ }\r
+ }\r
+ }\r
+ }\r
+ \r
+ private class LinkCellProvider implements RowContentProvider<Resource> {\r
+ @Override\r
+ public void setText(Document writer, Resource previous, Resource source, Resource next, TextItem[] text)\r
+ throws Exception {\r
+ Resource holder = graph.getSingleObject(source, sl.hasSource_Inverse);\r
+ String holderName = NameUtils.getSafeLabel(graph, holder);\r
+ if (holderName.length() == 0)\r
+ holderName = NameUtils.getSafeName(graph, holder);\r
+ if (previous == null || !graph.getSingleObject(previous, sl.hasSource_Inverse).equals(graph.getSingleObject(source, sl.hasSource_Inverse))) {\r
+ text[0] = writer.newItem(TextItem.class);\r
+ text[0].setText(holderName);\r
+ }\r
+ if (graph.isInstanceOf(source, sl.FunctionalSource)) {\r
+ Resource relation = graph.getPossibleObject(source, sl.consernsRelation);\r
+ text[1] = writer.newItem(TextItem.class);\r
+ if (relation != null) {\r
+ String relationName = NameUtils.getSafeLabel(graph, relation);\r
+ if (relationName.length() == 0)\r
+ relationName = NameUtils.getSafeName(graph, relation);\r
+ Object value = graph.getPossibleRelatedValue(holder, relation);\r
+ text[1].setText(relationName);\r
+ if (value != null) {\r
+ text[2] = writer.newItem(TextItem.class);\r
+ text[2].setText(SourceLinkUtil.getValueString(value));\r
+ }\r
+ } else {\r
+ text[1].setText("Error in property reference");\r
+ }\r
+ }\r
+ Resource document = SourceLinkUtil.getReferredDocument(graph, source);\r
+ if (document != null) {\r
+ text[3] = getDocumentItem(document);\r
+ } else {\r
+ text[3] = getNonExistingDocumentItem();\r
+ }\r
+ \r
+ String comment = graph.getPossibleRelatedValue(source, sl.hasSourceComment);\r
+ if (comment != null) {\r
+ text[4] = writer.newItem(TextItem.class);\r
+ text[4].setText(comment);\r
+ }\r
+\r
+ }\r
+ }\r
+ }
\ No newline at end of file