-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
+package org.simantics.document.linking.report.templates;
+
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.List;
+import java.util.Map;
+
+import org.simantics.db.ReadGraph;
+import org.simantics.db.Resource;
+import org.simantics.db.common.utils.NameUtils;
+import org.simantics.db.exception.DatabaseException;
+import org.simantics.document.linking.ontology.DocumentLink;
+import org.simantics.document.linking.report.Document;
+import org.simantics.document.linking.report.Document.TextSize;
+import org.simantics.document.linking.report.DocumentTitlePage;
+import org.simantics.document.linking.report.RowContentProvider;
+import org.simantics.document.linking.report.Table;
+import org.simantics.document.linking.report.TableOfContents;
+import org.simantics.document.linking.report.TextItem;
+import org.simantics.document.linking.utils.SourceLinkUtil;
+
+/**
+ * Model information
+ * ? Document 1 rev1
+ * \95 Link1: Diagram, module, attribute information
+ * \95 Link2: Diagram, module, attribute information
+ * ? Document 1 rev2
+ * \95 Link3: Diagram, module, attribute information
+ * ? Document 1 rev3
+ * \95 Link4: Diagram, module, attribute information
+ * ? Document 2
+ * \95 Link5: Diagram, module, attribute information
+ *
+ * @author Marko Luukkainen <marko.luukkainen@vtt.fi>
+ *
+ */
+public class DocumentStructureWriter extends IndexQueryReport {
+ ReadGraph graph;
+ Resource model;
+ Map<Object, Object> context;
+ DocumentLink sl;
+ Comparator<Resource> referenceComparator;
+ Comparator<Resource> parentComparator;
+ SourceParentDiagramComparator diagramComparator;
+ @Override
+ public void sort(List<Resource> list) throws DatabaseException{
+ NestedComparator<Resource> comp = new NestedComparator<Resource>();
+ comp.addComparator(referenceComparator);
+ comp.addComparator(parentComparator);
+ Collections.sort(list, comp);
+ }
+
+ @Override
+ public String getName() {
+ return "Document Structure";
+ }
+
+ @Override
+ public void start(ReadGraph graph, Resource model,Document writer, Map<Object, Object> context) throws Exception{
+ super.start(graph, model, writer, context);
+ this.context = context;
+ DocumentTitlePage titlePage = writer.newElement(DocumentTitlePage.class);
+ titlePage.writeTitle(graph, context);
+ writer.newElement(TableOfContents.class);
+ Table table = writer.newElement(Table.class,Document.TOC);
+ table.addColumn("Name", 0.2);
+ table.addColumn("Attribute", 0.35);
+ table.addColumn("Value", 0.15);
+ table.addColumn("Comment", 0.3);
+
+ //lineWriter.nextPage();
+ this.graph = graph;
+ this.sl = DocumentLink.getInstance(graph);
+ this.model = model;
+ referenceComparator = new SourceReferenceComparator(graph,model);
+ parentComparator = new SourceParentHierarchyComparator(graph,model);
+ diagramComparator = new SourceParentDiagramComparator(graph, model);
+ clearProviders();
+ LinkContentProvider linkContentProvider = new LinkContentProvider();
+ HierarchyContentProvider hierarchyContentProvider = new HierarchyContentProvider(linkContentProvider);
+ addLineProvider(hierarchyContentProvider);
+ addCellProvider(linkContentProvider);
+ }
+
+ private class HierarchyContentProvider implements RowContentProvider<Resource> {
+
+ private LinkContentProvider linkContentProvider;
+
+
+
+ public HierarchyContentProvider(LinkContentProvider linkContentProvider) {
+ super();
+ this.linkContentProvider = linkContentProvider;
+ }
+
+
+
+ @Override
+ public void setText(Document writer, Resource previous,
+ Resource current, Resource next, TextItem[] row) throws Exception {
+ boolean writeDoc = false;
+ boolean writeDiag = false;
+ boolean writeToc = false;
+ Table table = writer.getCurrentElement(Table.class);
+ if (previous == null) {
+ writeDoc = true;
+ writeDiag = true;
+ writeToc = true;
+ } else if (writer.getCurrentLine() == 1) {
+ writeDoc = true;
+ writeDiag = true;
+ writeToc = referenceComparator.compare(previous, current) != 0;
+ } else {
+ if (referenceComparator.compare(previous, current) != 0) {
+ writeDoc = true;
+ writeDiag = true;
+ writeToc = true;
+ linkContentProvider.forceLabel = true;
+ } else {
+ if (diagramComparator.compare(previous, current) != 0) {
+ writeDiag = true;
+ linkContentProvider.forceLabel = true;
+ }
+ }
+ }
+
+
+ if (writeDoc) {
+ if (writer.getAvailableLines() < 8) {
+ writer.nextPage();
+ table = writer.nextElement(Table.class,Document.TOC);
+ }
+ else if (writer.getCurrentLine() > 2)
+ table = writer.nextElement(Table.class,Document.TOC);
+
+
+ Resource doc2 = SourceLinkUtil.getReferredDocument(graph, current);
+// TextSize size = table.getTextSize();
+// table.setTextSize(TextSize.MEDIUM);
+ TextItem label = null;
+ if (doc2 != null) {
+ label = getDocumentItem(doc2);
+ } else {
+ label = getNonExistingDocumentItem();
+ }
+ if (writeToc) {
+ TableOfContents toc = writer.getCurrentElement(TableOfContents.class);
+ toc.addTocElement(label.getText(), table);
+ }
+ //table.writeRow(label);
+ table.setTitle(label);
+// table.setTextSize(size);
+ }
+ if (writeDiag) {
+ if (writer.getAvailableLines() < 3)
+ writer.nextPage();
+ Resource parent = graph.getSingleObject(current, sl.hasSource_Inverse);
+ List<Resource> path = SourceLinkUtil.getDiagramPath(graph, model, parent);
+ if (path != null) {
+ TextSize size = table.getTextSize();
+ table.setTextSize(TextSize.MEDIUM);
+ table.writeRow(" " + diagramComparator.getText(path.get(path.size()-1)));
+ table.setTextSize(size);
+ }
+ }
+
+ }
+ }
+
+
+ private class LinkContentProvider implements RowContentProvider<Resource> {
+
+ private boolean forceLabel = false;
+
+ @Override
+ public void setText(Document writer, Resource previous,
+ Resource source, Resource next, TextItem[] text) throws Exception {
+ Resource holder = graph.getSingleObject(source, sl.hasSource_Inverse);
+ if (forceLabel || previous == null || !graph.getSingleObject(previous, sl.hasSource_Inverse).equals(graph.getSingleObject(source, sl.hasSource_Inverse))) {
+ String holderName = NameUtils.getSafeLabel(graph, holder);
+ if (holderName.length() == 0)
+ holderName = NameUtils.getSafeName(graph, holder);
+ text[0] = writer.newItem(TextItem.class);
+ text[0].setText(holderName);
+ forceLabel = false;
+ }
+ if (graph.isInstanceOf(source, sl.FunctionalSource)) {
+ Resource relation = graph.getPossibleObject(source, sl.consernsRelation);
+ text[1] = writer.newItem(TextItem.class);
+ if (relation != null) {
+ String relationName = NameUtils.getSafeLabel(graph, relation);
+ if (relationName.length() == 0)
+ relationName = NameUtils.getSafeName(graph, relation);
+ Object value = graph.getPossibleRelatedValue(holder, relation);
+ text[1].setText(relationName);
+ if (value != null) {
+ text[2] = writer.newItem(TextItem.class);
+ text[2].setText(SourceLinkUtil.getValueString(value));
+ }
+ } else {
+ text[1].setText("Error in property reference ");
+ }
+ }
+
+ String comment = graph.getPossibleRelatedValue(source, sl.hasSourceComment);
+ if (comment != null) {
+ text[3] = writer.newItem(TextItem.class);
+ text[3].setText(comment);
+ }
+
+ }
+
+ }