]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.document.linking.ui/src/org/simantics/document/linking/report/templates/DocumentWriter.java
Migrated source code from Simantics SVN
[simantics/platform.git] / bundles / org.simantics.document.linking.ui / src / org / simantics / document / linking / report / templates / DocumentWriter.java
1 package org.simantics.document.linking.report.templates;\r
2 \r
3 import java.net.URL;\r
4 import java.util.Collection;\r
5 import java.util.HashMap;\r
6 import java.util.Map;\r
7 \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
25 \r
26 \r
27 public abstract  class DocumentWriter<T> extends TableReportWriter<T> implements CustomizableContentProvider{\r
28         \r
29         Map<String, CustomizableContent> content = new HashMap<String, CustomizableContent>();\r
30         ReadGraph graph;\r
31         DocumentResource doc;\r
32         Document document;\r
33         Map<Object, Object> context;\r
34         \r
35         public DocumentWriter() {\r
36                 setDefaultContent(null);\r
37         }\r
38         \r
39         @Override\r
40         public void start(ReadGraph graph, Resource model, Document writer,\r
41                         Map<Object, Object> context) throws Exception {\r
42                 this.graph = graph;\r
43                 this.doc = DocumentResource.getInstance(graph);\r
44                 this.context = context;\r
45                 this.document = writer;\r
46         }\r
47         \r
48         \r
49         @Override\r
50         public CustomizableContent getContent(String id) {\r
51                 return content.get(id);\r
52         }\r
53         \r
54         @Override\r
55         public void setContent(String id, CustomizableContent content) {\r
56                 this.content.put(id, content);\r
57         }\r
58         \r
59         @Override\r
60         public void setDefaultContent(String id) {\r
61                 if ("Document".equals(id) || id == null) {\r
62                         EvaluatorCustomizableContent c = new EvaluatorCustomizableContent("Document format");\r
63                         Or item = new Or();\r
64                         item.addChild(new Variable("#HasLabel"));\r
65                         item.addChild(new Variable("#HasName"));\r
66                         c.setItem(item);\r
67                         c.setSupportStyles(false);\r
68                         c.setSupportMultiline(true);\r
69                         content.put("Document", c);\r
70                 } \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
80                         e.setItem(lines);\r
81                         e.setSupportStyles(true);\r
82                         e.setSupportMultiline(true);\r
83                         content.put("Title", e);\r
84                 }\r
85         }\r
86         \r
87         @Override\r
88         public Collection<String> getContentIds() {\r
89                 return content.keySet();\r
90         }\r
91         \r
92         protected TextItem getDocumentItem(Resource document) throws Exception{\r
93                 TextItem item;\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
97                 } else {\r
98                         item = this.document.newItem(TextItem.class);\r
99                 }\r
100                 item.setText(getContent("Document").getContent(graph, document,context));\r
101                 return item;\r
102         }\r
103         \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
107                 return item;\r
108         }\r
109 \r
110 \r
111 }\r