]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.document.linking.ui/src/org/simantics/document/linking/report/templates/DocumentStructureWriter.java
Migrated source code from Simantics SVN
[simantics/platform.git] / bundles / org.simantics.document.linking.ui / src / org / simantics / document / linking / report / templates / DocumentStructureWriter.java
diff --git a/bundles/org.simantics.document.linking.ui/src/org/simantics/document/linking/report/templates/DocumentStructureWriter.java b/bundles/org.simantics.document.linking.ui/src/org/simantics/document/linking/report/templates/DocumentStructureWriter.java
new file mode 100644 (file)
index 0000000..8f9491a
--- /dev/null
@@ -0,0 +1,214 @@
+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.linking.ontology.DocumentLink;\r
+import org.simantics.document.linking.report.Document;\r
+import org.simantics.document.linking.report.Document.TextSize;\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
+ * Model information\r
+ * ? Document 1 rev1\r
+ *    \95 Link1: Diagram, module, attribute information\r
+ *    \95 Link2: Diagram, module, attribute information\r
+ * ? Document 1 rev2\r
+ *    \95 Link3: Diagram, module, attribute information\r
+ * ? Document 1 rev3\r
+ *    \95 Link4: Diagram, module, attribute information\r
+ * ? Document 2\r
+ *    \95 Link5: Diagram, module, attribute information\r
+ *   \r
+ * @author Marko Luukkainen <marko.luukkainen@vtt.fi>\r
+ *\r
+ */\r
+public class DocumentStructureWriter extends IndexQueryReport {\r
+       ReadGraph graph;\r
+       Resource model;\r
+       Map<Object, Object> context;\r
+       DocumentLink sl;\r
+       Comparator<Resource> referenceComparator;\r
+       Comparator<Resource> parentComparator;\r
+       SourceParentDiagramComparator diagramComparator;\r
+       @Override\r
+       public void sort(List<Resource> list) throws DatabaseException{\r
+               NestedComparator<Resource> comp = new NestedComparator<Resource>();\r
+               comp.addComparator(referenceComparator);\r
+               comp.addComparator(parentComparator);\r
+               Collections.sort(list, comp);\r
+       }\r
+       \r
+       @Override\r
+       public String getName() {\r
+               return "Document Structure";\r
+       }\r
+       \r
+       @Override\r
+       public void start(ReadGraph graph, 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
+               table.addColumn("Name", 0.2);\r
+               table.addColumn("Attribute", 0.35);\r
+               table.addColumn("Value", 0.15);\r
+               table.addColumn("Comment", 0.3);\r
+               \r
+               //lineWriter.nextPage();\r
+               this.graph = graph;\r
+               this.sl = DocumentLink.getInstance(graph);\r
+               this.model = model;\r
+               referenceComparator = new SourceReferenceComparator(graph,model);\r
+               parentComparator = new SourceParentHierarchyComparator(graph,model);\r
+               diagramComparator = new SourceParentDiagramComparator(graph, model);\r
+               clearProviders();\r
+               LinkContentProvider linkContentProvider = new LinkContentProvider();\r
+               HierarchyContentProvider hierarchyContentProvider = new HierarchyContentProvider(linkContentProvider);\r
+               addLineProvider(hierarchyContentProvider);\r
+               addCellProvider(linkContentProvider);\r
+       }\r
+\r
+       private class HierarchyContentProvider implements RowContentProvider<Resource> {\r
+               \r
+               private LinkContentProvider linkContentProvider;\r
+               \r
+               \r
+               \r
+               public HierarchyContentProvider(LinkContentProvider linkContentProvider) {\r
+                       super();\r
+                       this.linkContentProvider = linkContentProvider;\r
+               }\r
+\r
+\r
+\r
+               @Override\r
+               public void setText(Document writer, Resource previous,\r
+                                       Resource current, Resource next, TextItem[] row) throws Exception {\r
+                       boolean writeDoc = false;\r
+                       boolean writeDiag = false;\r
+                       boolean writeToc = false;\r
+                       Table table = writer.getCurrentElement(Table.class);\r
+                       if (previous == null) {\r
+                               writeDoc = true;\r
+                               writeDiag = true;\r
+                               writeToc = true;\r
+                       } else if (writer.getCurrentLine() == 1) {\r
+                               writeDoc = true;\r
+                               writeDiag = true;\r
+                               writeToc = referenceComparator.compare(previous, current) != 0;\r
+                       } else  {\r
+                               if (referenceComparator.compare(previous, current) != 0) {\r
+                                       writeDoc = true;\r
+                                       writeDiag = true;\r
+                                       writeToc = true;\r
+                                       linkContentProvider.forceLabel = true;\r
+                               } else {\r
+                                       if (diagramComparator.compare(previous, current) != 0) {\r
+                                               writeDiag = true;\r
+                                               linkContentProvider.forceLabel = true;\r
+                                       }\r
+                               }\r
+                       }\r
+                       \r
+                       \r
+                       if (writeDoc) {\r
+                               if (writer.getAvailableLines() < 8) {\r
+                                       writer.nextPage();\r
+                                       table = writer.nextElement(Table.class,Document.TOC);\r
+                               }\r
+                               else if (writer.getCurrentLine() > 2)\r
+                                       table = writer.nextElement(Table.class,Document.TOC);\r
+                               \r
+                               \r
+                               Resource doc2 = SourceLinkUtil.getReferredDocument(graph, current);\r
+//                             TextSize size = table.getTextSize();\r
+//                             table.setTextSize(TextSize.MEDIUM);\r
+                               TextItem label = null;\r
+                               if (doc2 != null) {\r
+                                       label = getDocumentItem(doc2);\r
+                               } else {\r
+                                       label = getNonExistingDocumentItem();\r
+                               }\r
+                               if (writeToc) {\r
+                                       TableOfContents toc = writer.getCurrentElement(TableOfContents.class);\r
+                                       toc.addTocElement(label.getText(), table);\r
+                               }\r
+                               //table.writeRow(label);\r
+                               table.setTitle(label);\r
+//                             table.setTextSize(size);\r
+                       }\r
+                       if (writeDiag) {\r
+                               if (writer.getAvailableLines() < 3)\r
+                                       writer.nextPage();\r
+                               Resource parent = graph.getSingleObject(current, sl.hasSource_Inverse);\r
+                               List<Resource> path = SourceLinkUtil.getDiagramPath(graph, model, parent);\r
+                               if (path != null) {\r
+                                       TextSize size = table.getTextSize();\r
+                                       table.setTextSize(TextSize.MEDIUM);\r
+                                       table.writeRow("  " + diagramComparator.getText(path.get(path.size()-1)));\r
+                                       table.setTextSize(size);\r
+                               }\r
+                       }\r
+                               \r
+               }\r
+       }\r
+       \r
+       \r
+       private class LinkContentProvider implements RowContentProvider<Resource> {\r
+               \r
+               private boolean forceLabel = false;\r
+               \r
+               @Override\r
+               public void setText(Document writer, Resource previous,\r
+                               Resource source, Resource next, TextItem[] text) throws Exception {\r
+                       Resource holder = graph.getSingleObject(source, sl.hasSource_Inverse);\r
+                       if (forceLabel || previous == null || !graph.getSingleObject(previous, sl.hasSource_Inverse).equals(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
+                               text[0] = writer.newItem(TextItem.class);\r
+                               text[0].setText(holderName);\r
+                               forceLabel = false;\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
+                       \r
+                       String comment = graph.getPossibleRelatedValue(source, sl.hasSourceComment);\r
+                       if (comment != null) {\r
+                               text[3] = writer.newItem(TextItem.class);\r
+                               text[3].setText(comment);\r
+                       }\r
+                       \r
+               }\r
+               \r
+       }\r
+}
\ No newline at end of file