1 package org.simantics.document.linking.report;
\r
3 import java.awt.Font;
\r
5 import java.util.HashMap;
\r
6 import java.util.List;
\r
7 import java.util.Map;
\r
9 import org.eclipse.core.runtime.IProgressMonitor;
\r
10 import org.eclipse.core.runtime.IStatus;
\r
11 import org.eclipse.core.runtime.NullProgressMonitor;
\r
12 import org.eclipse.core.runtime.Status;
\r
13 import org.eclipse.core.runtime.jobs.Job;
\r
14 import org.simantics.Simantics;
\r
15 import org.simantics.db.ReadGraph;
\r
16 import org.simantics.db.Resource;
\r
17 import org.simantics.db.Session;
\r
18 import org.simantics.db.exception.DatabaseException;
\r
19 import org.simantics.db.request.Read;
\r
20 import org.simantics.document.linking.Activator;
\r
21 import org.simantics.document.linking.report.html.HTMLDocument;
\r
22 import org.simantics.document.linking.report.pdf.PDFDocument;
\r
23 import org.simantics.document.linking.report.templates.CompleteStructureWriter;
\r
24 import org.simantics.document.linking.report.templates.DocumentStructureWriter;
\r
25 import org.simantics.document.linking.report.templates.ReportWriter;
\r
28 public class ExportToPDF {
\r
29 public static final int DOCUMENT_BROWSE_STRCTURE = 0;
\r
30 public static final int DOCUMENT_STRUCTURE = 1;
\r
31 public static final int DIAGRAM_STRUCTURE = 2;
\r
32 public static final int COMPLETE_STRUCTURE = 3;
\r
34 private Session session;
\r
35 private Resource model;
\r
37 public ExportToPDF(Session session,Resource model) {
\r
39 this.session = session;
\r
42 public void exportPDF(String filename, int report) {
\r
43 ReportWriter<?> reportWriter = null;
\r
45 case DOCUMENT_BROWSE_STRCTURE:
\r
48 case DOCUMENT_STRUCTURE:
\r
49 reportWriter = new DocumentStructureWriter();
\r
51 case DIAGRAM_STRUCTURE:
\r
54 case COMPLETE_STRUCTURE:
\r
55 reportWriter = new CompleteStructureWriter();
\r
60 ExportJob job = new ExportJob(filename, reportWriter);
\r
66 private class ExportJob extends Job {
\r
69 ReportWriter<?> reportWriter;
\r
71 public ExportJob(String filename, ReportWriter<?> reportWriter) {
\r
72 super(reportWriter.getName());
\r
73 this.filename = filename;
\r
74 this.reportWriter = reportWriter;
\r
78 protected IStatus run(IProgressMonitor monitor) {
\r
79 return export(filename, reportWriter, monitor);
\r
83 public <T> IStatus export(String filename, ReportWriter<T> reportWriter, IProgressMonitor monitor) {
\r
85 Document lineWriter = null;
\r
87 if (filename.toLowerCase().endsWith(".pdf"))
\r
88 lineWriter = new PDFDocument(filename, new Font("Arial", Font.PLAIN, 10),new Font("Arial", Font.BOLD, 10));
\r
89 else if (filename.toLowerCase().endsWith(".html") ||
\r
90 filename.toLowerCase().endsWith(".htm"))
\r
91 lineWriter = new HTMLDocument(new File(filename));
\r
93 throw new Exception("File has unknow extension " + filename);
\r
95 export(lineWriter, reportWriter, monitor);
\r
97 } catch (Exception e) {
\r
98 return new Status(IStatus.ERROR, Activator.PLUGIN_ID, "Could not generate report", e);
\r
100 if (lineWriter != null) {
\r
102 lineWriter.close();
\r
103 } catch (Exception e) {
\r
104 e.printStackTrace();
\r
109 String status = "Report generated.";
\r
110 // if (lineWriter instanceof PDFTableWriter) {
\r
111 // status += " Report size " + ((PDFTableWriter)lineWriter).getCurrentPageIndex() + " pages.";
\r
114 return new Status(IStatus.OK, Activator.PLUGIN_ID, status);
\r
120 private <T> void export(final Document document, final ReportWriter<T> reportWriter, final IProgressMonitor monitor) throws DatabaseException{
\r
121 session.syncRequest(new Read<Object>() {
\r
123 public Object perform(ReadGraph graph) throws DatabaseException {
\r
126 Map<Object, Object> context = new HashMap<Object, Object>();
\r
127 context.put("model", model);
\r
128 context.put(Document.class, document);
\r
129 context.put(ReportWriter.class, reportWriter);
\r
130 context.put("DocumentName", reportWriter.getName());
\r
132 reportWriter.start(graph, model, document, context);
\r
134 List<T> list = reportWriter.getReportItems(graph);
\r
136 monitor.beginTask("Write Report", list.size());
\r
141 for (int i = 0; i < list.size(); i++) {
\r
142 current = list.get(i);
\r
144 previous = list.get(i-1);
\r
147 if (i < list.size()-1)
\r
148 next = list.get(i+1);
\r
151 reportWriter.write(previous, current, next, document);
\r
154 } catch (Exception e) {
\r
155 throw new DatabaseException(e);
\r
164 public static void exportDocumentToPDF(Resource model, String filename) {
\r
165 ExportToPDF exportPdf = new ExportToPDF(Simantics.getSession(), model);
\r
166 exportPdf.export(filename, new DocumentStructureWriter(), new NullProgressMonitor());
\r