1 package fr.ifremer.tutti.report;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27 import org.eclipse.birt.core.exception.BirtException;
28 import org.eclipse.birt.core.framework.Platform;
29 import org.eclipse.birt.report.engine.api.EngineConfig;
30 import org.eclipse.birt.report.engine.api.EngineConstants;
31 import org.eclipse.birt.report.engine.api.EngineException;
32 import org.eclipse.birt.report.engine.api.IRenderOption;
33 import org.eclipse.birt.report.engine.api.IReportEngine;
34 import org.eclipse.birt.report.engine.api.IReportEngineFactory;
35 import org.eclipse.birt.report.engine.api.IReportRunnable;
36 import org.eclipse.birt.report.engine.api.IRunAndRenderTask;
37 import org.eclipse.birt.report.engine.api.RenderOption;
38
39 import java.io.Closeable;
40 import java.io.File;
41 import java.util.HashMap;
42 import java.util.Map;
43 import java.util.logging.Level;
44
45
46
47
48
49
50
51 public class ReportEngine implements Closeable {
52
53 private static final int RENDER_DPI = 300;
54
55 private final IReportEngine engine;
56
57 public ReportEngine(File reportHomeDirectory, File reportLogDirectory) {
58
59 EngineConfig engineConfig = new EngineConfig();
60 engineConfig.setBIRTHome(reportHomeDirectory.getAbsolutePath());
61 engineConfig.setResourcePath(reportHomeDirectory.getAbsolutePath());
62 engineConfig.setLogConfig(reportLogDirectory.getAbsolutePath(), Level.ALL);
63
64 try {
65 Platform.startup(engineConfig);
66 } catch (BirtException e) {
67 throw new RuntimeException("Could not init birt", e);
68 }
69
70 IReportEngineFactory factory = (IReportEngineFactory) Platform.createFactoryObject(IReportEngineFactory.EXTENSION_REPORT_ENGINE_FACTORY);
71
72 engine = factory.createReportEngine(engineConfig);
73
74 }
75
76 public void generate(ReportConfig reportConfig) {
77
78 IReportRunnable rptDoc;
79
80 try {
81 rptDoc = engine.openReportDesign(reportConfig.getReportFile().getAbsolutePath());
82 } catch (EngineException e) {
83
84 throw new RuntimeException("Could not get report " + reportConfig.getReportFile(), e);
85
86 }
87
88
89
90
91
92
93
94
95 IRunAndRenderTask task = engine.createRunAndRenderTask(rptDoc);
96
97 try {
98
99
100 IRenderOption renderOption = new RenderOption();
101 renderOption.setOutputFileName(reportConfig.getOutputFile().getAbsolutePath());
102 renderOption.setOutputFormat(IRenderOption.OUTPUT_FORMAT_PDF);
103
104 task.setRenderOption(renderOption);
105
106
107 Map<String, Object> context = new HashMap<>();
108 context.put(EngineConstants.APPCONTEXT_CHART_RESOLUTION, RENDER_DPI);
109
110 task.setAppContext(context);
111 task.setParameterValue("rpt-param_dirfile", reportConfig.getDataDirectory().getAbsolutePath());
112 task.setParameterValue("rpt-param_codestation", reportConfig.getStationNumber());
113 task.setParameterValue("rpt-param_numerotrait", reportConfig.getFishingOperationNumber());
114
115 task.run();
116
117 } catch (EngineException e) {
118
119 throw new RuntimeException("Could not execute report", e);
120
121 } finally {
122
123
124 task.close();
125
126 }
127
128 }
129
130 @Override
131 public void close() {
132
133 try {
134 engine.destroy();
135 } finally {
136
137 Platform.shutdown();
138
139 }
140
141 }
142 }