1 package org.simantics.document.linking.report.templates;
\r
4 import java.util.Collection;
\r
5 import java.util.HashMap;
\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.document.DocumentResource;
\r
11 import org.simantics.document.linking.report.Document.TextSize;
\r
12 import org.simantics.document.linking.report.TableColumn.Alignment;
\r
13 import org.simantics.document.linking.report.Document;
\r
14 import org.simantics.document.linking.report.TextItem;
\r
15 import org.simantics.document.linking.report.URLItem;
\r
16 import org.simantics.document.linking.report.evaluator.AlignmentHint;
\r
17 import org.simantics.document.linking.report.evaluator.Date;
\r
18 import org.simantics.document.linking.report.evaluator.EvaluatorNode;
\r
19 import org.simantics.document.linking.report.evaluator.Lines;
\r
20 import org.simantics.document.linking.report.evaluator.Or;
\r
21 import org.simantics.document.linking.report.evaluator.TextSizeHint;
\r
22 import org.simantics.document.linking.report.evaluator.Variable;
\r
23 import org.simantics.document.linking.report.templates.custom.CustomizableContent;
\r
24 import org.simantics.document.linking.report.templates.custom.EvaluatorCustomizableContent;
\r
27 public abstract class DocumentWriter<T> extends TableReportWriter<T> implements CustomizableContentProvider{
\r
29 Map<String, CustomizableContent> content = new HashMap<String, CustomizableContent>();
\r
31 DocumentResource doc;
\r
33 Map<Object, Object> context;
\r
35 public DocumentWriter() {
\r
36 setDefaultContent(null);
\r
40 public void start(ReadGraph graph, Resource model, Document writer,
\r
41 Map<Object, Object> context) throws Exception {
\r
43 this.doc = DocumentResource.getInstance(graph);
\r
44 this.context = context;
\r
45 this.document = writer;
\r
50 public CustomizableContent getContent(String id) {
\r
51 return content.get(id);
\r
55 public void setContent(String id, CustomizableContent content) {
\r
56 this.content.put(id, content);
\r
60 public void setDefaultContent(String id) {
\r
61 if ("Document".equals(id) || id == null) {
\r
62 EvaluatorCustomizableContent c = new EvaluatorCustomizableContent("Document format");
\r
64 item.addChild(new Variable("#HasLabel"));
\r
65 item.addChild(new Variable("#HasName"));
\r
67 c.setSupportStyles(false);
\r
68 c.setSupportMultiline(true);
\r
69 content.put("Document", c);
\r
71 if ("Title".equals(id) || id == null) {
\r
72 EvaluatorCustomizableContent e = new EvaluatorCustomizableContent("Document Title");
\r
73 EvaluatorNode lines = new Lines();
\r
74 Or nameOr = new Or();
\r
75 nameOr.createChild(Variable.class).setVariableRef("#HasLabel");
\r
76 nameOr.createChild(Variable.class).setVariableRef("#HasName");
\r
77 lines.createChild(TextSizeHint.class).setTextSize(TextSize.HUGE).createChild(AlignmentHint.class).setAlignment(Alignment.CENTER).addChild(nameOr.copy());
\r
78 lines.createChild(TextSizeHint.class).setTextSize(TextSize.HUGE).createChild(AlignmentHint.class).setAlignment(Alignment.CENTER).createChild(Variable.class).setVariableRef("DocumentName");
\r
79 lines.createChild(TextSizeHint.class).setTextSize(TextSize.LARGE).createChild(AlignmentHint.class).setAlignment(Alignment.CENTER).createChild(Date.class);
\r
81 e.setSupportStyles(true);
\r
82 e.setSupportMultiline(true);
\r
83 content.put("Title", e);
\r
88 public Collection<String> getContentIds() {
\r
89 return content.keySet();
\r
92 protected TextItem getDocumentItem(Resource document) throws Exception{
\r
94 if (graph.isInstanceOf(document, doc.UrlDocument)) {
\r
95 item = this.document.newItem(URLItem.class);
\r
96 ((URLItem)item).setURL(new URL((String)graph.getRelatedValue(document, doc.HasUrl)));
\r
98 item = this.document.newItem(TextItem.class);
\r
100 item.setText(getContent("Document").getContent(graph, document,context));
\r
104 protected TextItem getNonExistingDocumentItem() throws Exception{
\r
105 TextItem item = this.document.newItem(TextItem.class);
\r
106 item.setText("[DOCUMENT DOES NOT EXIST]");
\r