+package org.simantics.document.linking.report.templates;\r
+\r
+import java.net.URL;\r
+import java.util.Collection;\r
+import java.util.HashMap;\r
+import java.util.Map;\r
+\r
+import org.simantics.db.ReadGraph;\r
+import org.simantics.db.Resource;\r
+import org.simantics.document.DocumentResource;\r
+import org.simantics.document.linking.report.Document.TextSize;\r
+import org.simantics.document.linking.report.TableColumn.Alignment;\r
+import org.simantics.document.linking.report.Document;\r
+import org.simantics.document.linking.report.TextItem;\r
+import org.simantics.document.linking.report.URLItem;\r
+import org.simantics.document.linking.report.evaluator.AlignmentHint;\r
+import org.simantics.document.linking.report.evaluator.Date;\r
+import org.simantics.document.linking.report.evaluator.EvaluatorNode;\r
+import org.simantics.document.linking.report.evaluator.Lines;\r
+import org.simantics.document.linking.report.evaluator.Or;\r
+import org.simantics.document.linking.report.evaluator.TextSizeHint;\r
+import org.simantics.document.linking.report.evaluator.Variable;\r
+import org.simantics.document.linking.report.templates.custom.CustomizableContent;\r
+import org.simantics.document.linking.report.templates.custom.EvaluatorCustomizableContent;\r
+\r
+\r
+public abstract class DocumentWriter<T> extends TableReportWriter<T> implements CustomizableContentProvider{\r
+ \r
+ Map<String, CustomizableContent> content = new HashMap<String, CustomizableContent>();\r
+ ReadGraph graph;\r
+ DocumentResource doc;\r
+ Document document;\r
+ Map<Object, Object> context;\r
+ \r
+ public DocumentWriter() {\r
+ setDefaultContent(null);\r
+ }\r
+ \r
+ @Override\r
+ public void start(ReadGraph graph, Resource model, Document writer,\r
+ Map<Object, Object> context) throws Exception {\r
+ this.graph = graph;\r
+ this.doc = DocumentResource.getInstance(graph);\r
+ this.context = context;\r
+ this.document = writer;\r
+ }\r
+ \r
+ \r
+ @Override\r
+ public CustomizableContent getContent(String id) {\r
+ return content.get(id);\r
+ }\r
+ \r
+ @Override\r
+ public void setContent(String id, CustomizableContent content) {\r
+ this.content.put(id, content);\r
+ }\r
+ \r
+ @Override\r
+ public void setDefaultContent(String id) {\r
+ if ("Document".equals(id) || id == null) {\r
+ EvaluatorCustomizableContent c = new EvaluatorCustomizableContent("Document format");\r
+ Or item = new Or();\r
+ item.addChild(new Variable("#HasLabel"));\r
+ item.addChild(new Variable("#HasName"));\r
+ c.setItem(item);\r
+ c.setSupportStyles(false);\r
+ c.setSupportMultiline(true);\r
+ content.put("Document", c);\r
+ } \r
+ if ("Title".equals(id) || id == null) {\r
+ EvaluatorCustomizableContent e = new EvaluatorCustomizableContent("Document Title");\r
+ EvaluatorNode lines = new Lines();\r
+ Or nameOr = new Or();\r
+ nameOr.createChild(Variable.class).setVariableRef("#HasLabel");\r
+ nameOr.createChild(Variable.class).setVariableRef("#HasName");\r
+ lines.createChild(TextSizeHint.class).setTextSize(TextSize.HUGE).createChild(AlignmentHint.class).setAlignment(Alignment.CENTER).addChild(nameOr.copy());\r
+ lines.createChild(TextSizeHint.class).setTextSize(TextSize.HUGE).createChild(AlignmentHint.class).setAlignment(Alignment.CENTER).createChild(Variable.class).setVariableRef("DocumentName");\r
+ lines.createChild(TextSizeHint.class).setTextSize(TextSize.LARGE).createChild(AlignmentHint.class).setAlignment(Alignment.CENTER).createChild(Date.class);\r
+ e.setItem(lines);\r
+ e.setSupportStyles(true);\r
+ e.setSupportMultiline(true);\r
+ content.put("Title", e);\r
+ }\r
+ }\r
+ \r
+ @Override\r
+ public Collection<String> getContentIds() {\r
+ return content.keySet();\r
+ }\r
+ \r
+ protected TextItem getDocumentItem(Resource document) throws Exception{\r
+ TextItem item;\r
+ if (graph.isInstanceOf(document, doc.UrlDocument)) {\r
+ item = this.document.newItem(URLItem.class);\r
+ ((URLItem)item).setURL(new URL((String)graph.getRelatedValue(document, doc.HasUrl)));\r
+ } else {\r
+ item = this.document.newItem(TextItem.class);\r
+ }\r
+ item.setText(getContent("Document").getContent(graph, document,context));\r
+ return item;\r
+ }\r
+ \r
+ protected TextItem getNonExistingDocumentItem() throws Exception{\r
+ TextItem item = this.document.newItem(TextItem.class);\r
+ item.setText("[DOCUMENT DOES NOT EXIST]");\r
+ return item;\r
+ }\r
+\r
+\r
+}\r