]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.document.linking.ui/src/org/simantics/document/linking/report/templates/CompleteStructureWriter.java
Migrated source code from Simantics SVN
[simantics/platform.git] / bundles / org.simantics.document.linking.ui / src / org / simantics / document / linking / report / templates / CompleteStructureWriter.java
diff --git a/bundles/org.simantics.document.linking.ui/src/org/simantics/document/linking/report/templates/CompleteStructureWriter.java b/bundles/org.simantics.document.linking.ui/src/org/simantics/document/linking/report/templates/CompleteStructureWriter.java
new file mode 100644 (file)
index 0000000..7cf01f8
--- /dev/null
@@ -0,0 +1,191 @@
+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