1 package org.simantics.document.linking.report.templates;
\r
3 import java.util.Collections;
\r
4 import java.util.Comparator;
\r
5 import java.util.List;
\r
6 import java.util.Map;
\r
8 import org.simantics.db.ReadGraph;
\r
9 import org.simantics.db.Resource;
\r
10 import org.simantics.db.common.utils.NameUtils;
\r
11 import org.simantics.db.exception.DatabaseException;
\r
12 import org.simantics.document.DocumentResource;
\r
13 import org.simantics.document.linking.ontology.DocumentLink;
\r
14 import org.simantics.document.linking.report.Document;
\r
15 import org.simantics.document.linking.report.DocumentTitlePage;
\r
16 import org.simantics.document.linking.report.RowContentProvider;
\r
17 import org.simantics.document.linking.report.Table;
\r
18 import org.simantics.document.linking.report.TableOfContents;
\r
19 import org.simantics.document.linking.report.TextItem;
\r
20 import org.simantics.document.linking.utils.SourceLinkUtil;
\r
23 * ? Configuration folder 1
\r
25 * o Link1: Document information
\r
26 * o Link2: Document information
\r
27 * o Link3: Document information
\r
29 * ? Link4: Document information
\r
30 * ? Link5: Document information
\r
32 * ? Link6: Document information
\r
34 * ? Link7: Document information
\r
35 * ? Link8: Document information
\r
37 * ? Link9: Document information
\r
39 * @author Marko Luukkainen <marko.luukkainen@vtt.fi>
\r
42 public class CompleteStructureWriter extends IndexQueryReport {
\r
45 Map<Object, Object> context;
\r
47 DocumentResource doc;
\r
48 ResourceNameComparator parentComparator;
\r
49 Comparator<Resource> hierarchyComparator;
\r
52 public String getName() {
\r
53 return "Complete Structure";
\r
57 public void sort(List<Resource> list) throws DatabaseException{
\r
58 Collections.sort(list, parentComparator);
\r
62 public void start(final ReadGraph graph, final Resource model, Document writer, Map<Object, Object> context) throws Exception{
\r
63 super.start(graph, model, writer, context);
\r
64 this.context = context;
\r
65 DocumentTitlePage titlePage = writer.newElement(DocumentTitlePage.class);
\r
66 titlePage.writeTitle(graph, context);
\r
67 writer.newElement(TableOfContents.class);
\r
68 Table table = writer.newElement(Table.class,Document.TOC);
\r
70 table.addColumn("Name", 0.2);
\r
71 table.addColumn("Attribute", 0.2);
\r
72 table.addColumn("Value", 0.15);
\r
73 table.addColumn("Document", 0.2);
\r
74 table.addColumn("Comment", 0.25);
\r
76 //lineWriter.nextPage();
\r
79 this.sl = DocumentLink.getInstance(graph);
\r
80 this.doc = DocumentResource.getInstance(graph);
\r
85 parentComparator = new SourceParentHierarchyWithPropComparator(graph,model);
\r
86 hierarchyComparator = new SourceParentDiagramComparator(graph,model);
\r
89 addLineProvider(new HierarchyProvider());
\r
90 addCellProvider(new LinkCellProvider());
\r
94 private class HierarchyProvider implements RowContentProvider<Resource> {
\r
97 public void setText(Document writer, Resource previous, Resource current, Resource next, TextItem[] row) throws Exception {
\r
98 boolean writeHierarchy = false;
\r
99 if (previous == null)
\r
100 writeHierarchy = true;
\r
102 if (hierarchyComparator.compare(previous, current) != 0)
\r
103 writeHierarchy = true;
\r
105 if (writeHierarchy) {
\r
106 Resource obj = graph.getPossibleObject(current, sl.hasSource_Inverse);
\r
107 Table table = writer.getCurrentElement(Table.class);
\r
109 if (writer.getCurrentLine() > 2) {
\r
111 table = writer.nextElement(Table.class,Document.TOC);
\r
116 List<Resource> path = SourceLinkUtil.getDiagramPath(graph, model, obj);
\r
118 if (path == null) {
\r
119 path = parentComparator.getPath(obj);
\r
120 for (int i = 0 ; i < path.size()-1; i++) {
\r
121 Resource r = path.get(i);
\r
122 text += parentComparator.getText(r);
\r
123 if (i < path.size()-2)
\r
127 for (int i = 0 ; i < path.size(); i++) {
\r
128 Resource r = path.get(i);
\r
129 text += parentComparator.getText(r);
\r
130 if (i < path.size()-1)
\r
135 table.setTitle(text);
\r
137 TableOfContents toc = writer.getCurrentElement(TableOfContents.class);
\r
138 toc.addTocElement(text, table);
\r
140 //row[0] = "Hierarchy missing";
\r
141 table.setTitle("Hierarchy missing");
\r
147 private class LinkCellProvider implements RowContentProvider<Resource> {
\r
149 public void setText(Document writer, Resource previous, Resource source, Resource next, TextItem[] text)
\r
151 Resource holder = graph.getSingleObject(source, sl.hasSource_Inverse);
\r
152 String holderName = NameUtils.getSafeLabel(graph, holder);
\r
153 if (holderName.length() == 0)
\r
154 holderName = NameUtils.getSafeName(graph, holder);
\r
155 if (previous == null || !graph.getSingleObject(previous, sl.hasSource_Inverse).equals(graph.getSingleObject(source, sl.hasSource_Inverse))) {
\r
156 text[0] = writer.newItem(TextItem.class);
\r
157 text[0].setText(holderName);
\r
159 if (graph.isInstanceOf(source, sl.FunctionalSource)) {
\r
160 Resource relation = graph.getPossibleObject(source, sl.consernsRelation);
\r
161 text[1] = writer.newItem(TextItem.class);
\r
162 if (relation != null) {
\r
163 String relationName = NameUtils.getSafeLabel(graph, relation);
\r
164 if (relationName.length() == 0)
\r
165 relationName = NameUtils.getSafeName(graph, relation);
\r
166 Object value = graph.getPossibleRelatedValue(holder, relation);
\r
167 text[1].setText(relationName);
\r
168 if (value != null) {
\r
169 text[2] = writer.newItem(TextItem.class);
\r
170 text[2].setText(SourceLinkUtil.getValueString(value));
\r
173 text[1].setText("Error in property reference");
\r
176 Resource document = SourceLinkUtil.getReferredDocument(graph, source);
\r
177 if (document != null) {
\r
178 text[3] = getDocumentItem(document);
\r
180 text[3] = getNonExistingDocumentItem();
\r
183 String comment = graph.getPossibleRelatedValue(source, sl.hasSourceComment);
\r
184 if (comment != null) {
\r
185 text[4] = writer.newItem(TextItem.class);
\r
186 text[4].setText(comment);
\r