1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.itracker.services.implementations;
20
21 import java.io.File;
22 import java.io.IOException;
23 import java.util.HashMap;
24 import java.util.List;
25 import java.util.Locale;
26 import java.util.Map;
27
28 import javax.servlet.ServletOutputStream;
29 import javax.servlet.http.HttpServletRequest;
30 import javax.servlet.http.HttpServletResponse;
31 import javax.servlet.http.HttpSession;
32 import javax.swing.JFrame;
33
34 import net.sf.jasperreports.engine.JRDataSource;
35 import net.sf.jasperreports.engine.JRException;
36 import net.sf.jasperreports.engine.JRExporterParameter;
37 import net.sf.jasperreports.engine.JasperExportManager;
38 import net.sf.jasperreports.engine.JasperFillManager;
39 import net.sf.jasperreports.engine.JasperPrint;
40 import net.sf.jasperreports.engine.JasperReport;
41 import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource;
42 import net.sf.jasperreports.engine.export.JRCsvExporter;
43 import net.sf.jasperreports.engine.export.JRHtmlExporter;
44 import net.sf.jasperreports.engine.export.JRHtmlExporterParameter;
45 import net.sf.jasperreports.engine.export.JRXlsExporter;
46 import net.sf.jasperreports.engine.util.JRLoader;
47 import net.sf.jasperreports.view.JRViewer;
48
49 import org.apache.struts.action.ActionMapping;
50 import org.apache.struts.util.RequestUtils;
51 import org.itracker.core.resources.ITrackerResources;
52 import org.itracker.model.Issue;
53 import org.itracker.model.Report;
54 import org.itracker.persistence.dao.ReportDAO;
55 import org.itracker.services.ReportService;
56 import org.itracker.services.exceptions.ReportException;
57 import org.itracker.web.util.Constants;
58
59 public class ReportServiceImpl implements ReportService {
60
61 private final ReportDAO reportDAO;
62
63 public ReportServiceImpl(ReportDAO reportDAO) {
64 this.reportDAO = reportDAO;
65 }
66
67
68 public List<Report> getAllReports() {
69 return reportDAO.findAll();
70 }
71
72
73 public int getNumberReports() {
74 return reportDAO.findAll().size();
75 }
76
77
78 public Report createReport(Report report) {
79
80
81 reportDAO.save(report);
82 return report;
83 }
84
85 private JasperPrint generateReport(Report report,
86 Map<String, Object> parameters, Object datasource) {
87 try {
88
89 JasperReport jasperReport = getJasperReport(report);
90 JasperPrint jasperPrint = JasperFillManager.fillReport(
91 jasperReport, parameters, (JRDataSource) datasource);
92 return jasperPrint;
93 } catch (JRException e) {
94 throw new ReportException(e);
95 }
96
97 }
98
99 private JasperReport getJasperReport(Report report) throws JRException {
100 return (JasperReport) JRLoader.loadObject(report.getReportDefinition());
101 }
102
103 public ReportDAO getReportDAO() {
104 return reportDAO;
105 }
106
107
108
109
110
111
112
113 public void outputPDF(List<Issue> reportDataArray, Report report,
114 Locale userLocale, String reportOutput, HttpSession session,
115 HttpServletRequest request, HttpServletResponse response,
116 ActionMapping mapping) {
117
118 try {
119
120
121 JRBeanCollectionDataSource beanCollectionDataSource;
122
123
124
125
126
127
128
129
130
131
132 beanCollectionDataSource = new JRBeanCollectionDataSource(
133 reportDataArray);
134
135
136 Map<String, Object> parameters = new HashMap<String, Object>();
137 String reportTitle = report.getName();
138 if (report.getNameKey() != null) {
139 reportTitle = ITrackerResources.getString(report.getNameKey());
140 }
141 parameters.put("ReportTitle", reportTitle);
142 parameters.put("BaseDir", new File("."));
143 JasperPrint jasperPrint = generateReport(report, parameters,
144 beanCollectionDataSource);
145
146
147 JRViewer jrViewer = new JRViewer(jasperPrint);
148 JFrame frame = new JFrame();
149 frame.add(jrViewer);
150
151
152 response.setHeader("Content-Type", "application/pdf");
153 ServletOutputStream out = response.getOutputStream();
154
155 JasperExportManager.exportReportToPdfStream(jasperPrint, out);
156
157 out.flush();
158 out.close();
159 } catch (JRException e) {
160
161 throw new ReportException(e);
162 } catch (IOException e) {
163 throw new ReportException(e);
164 }
165 }
166
167
168
169
170
171
172
173
174 public void outputCSV(HttpServletRequest request,
175 HttpServletResponse response, ActionMapping mapping)
176 throws ReportException {
177 try {
178
179
180
181
182
183 JRCsvExporter exporter = new JRCsvExporter();
184
185 response.setHeader("Content-Disposition",
186 "inline; filename=\"itrackerreport.csv\"");
187 response.setHeader("Content-Type", "text/csv; charset=UTF-8");
188 ServletOutputStream out = response.getOutputStream();
189
190 exporter.setParameter(JRExporterParameter.JASPER_PRINT, null);
191 exporter.setParameter(JRExporterParameter.OUTPUT_STREAM, out);
192 exporter.exportReport();
193
194 out.flush();
195 out.close();
196 } catch (Exception e) {
197
198 throw new ReportException(e.getMessage());
199 }
200 }
201
202
203
204
205
206
207
208
209 public void outputXLS(HttpServletRequest request,
210 HttpServletResponse response, ActionMapping mapping)
211 throws ReportException {
212 try {
213
214
215
216
217
218 JRXlsExporter exporter = new JRXlsExporter();
219
220 response.setHeader("Content-Disposition",
221 "inline; filename=\"itrackerreport.xls\"");
222 response.setHeader("Content-Type",
223 "application/vnd.ms-excel; charset=UTF-8");
224 ServletOutputStream out = response.getOutputStream();
225
226 exporter.setParameter(JRExporterParameter.JASPER_PRINT, null);
227 exporter.setParameter(JRExporterParameter.OUTPUT_STREAM, out);
228 exporter.exportReport();
229
230 out.flush();
231 out.close();
232 } catch (Exception e) {
233
234 throw new ReportException(e.getMessage());
235 }
236 }
237
238
239
240
241
242
243
244
245 public void outputHTML(HttpServletRequest request,
246 HttpServletResponse response, ActionMapping mapping)
247 throws ReportException {
248 try {
249
250
251
252
253
254 JRHtmlExporter exporter = new JRHtmlExporter();
255
256 Map<Object, Object> imagesMap = new HashMap<Object, Object>();
257 HttpSession session = request.getSession(true);
258 session.setAttribute(Constants.REPORT_IMAGEMAP_KEY, imagesMap);
259
260 response.setHeader("Content-Disposition",
261 "inline; filename=\"itrackerreport.html\"");
262 response.setHeader("Content-Type", "text/html; charset=UTF-8");
263 ServletOutputStream out = response.getOutputStream();
264
265 exporter.setParameter(JRExporterParameter.JASPER_PRINT, null);
266 exporter.setParameter(JRExporterParameter.OUTPUT_STREAM, out);
267 exporter
268 .setParameter(JRHtmlExporterParameter.IMAGES_MAP, imagesMap);
269
270
271 exporter.setParameter(JRHtmlExporterParameter.IMAGES_URI,
272 RequestUtils.printableURL(RequestUtils.absoluteURL(request,
273 RequestUtils.forwardURL(request, mapping
274 .findForward("imagesurl"))))
275 + "?image=");
276
277 exporter.exportReport();
278
279 out.flush();
280 out.close();
281 } catch (Exception e) {
282
283 throw new ReportException(e.getMessage());
284 }
285 }
286
287 }