1
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
28
29
30
31
32
33
34 package fr.paris.lutece.plugins.jasper.web;
35
36 import fr.paris.lutece.plugins.jasper.business.JasperReport;
37 import fr.paris.lutece.plugins.jasper.business.JasperReportHome;
38 import fr.paris.lutece.portal.service.database.AppConnectionService;
39 import fr.paris.lutece.portal.service.message.AdminMessage;
40 import fr.paris.lutece.portal.service.message.AdminMessageService;
41 import fr.paris.lutece.portal.service.template.AppTemplateService;
42 import fr.paris.lutece.portal.service.util.AppLogService;
43 import fr.paris.lutece.portal.service.util.AppPathService;
44 import fr.paris.lutece.portal.service.util.AppPropertiesService;
45 import fr.paris.lutece.portal.web.admin.PluginAdminPageJspBean;
46 import fr.paris.lutece.portal.web.constants.Messages;
47 import fr.paris.lutece.portal.web.upload.MultipartHttpServletRequest;
48 import fr.paris.lutece.util.ReferenceList;
49 import fr.paris.lutece.util.filesystem.UploadUtil;
50 import fr.paris.lutece.util.html.HtmlTemplate;
51 import fr.paris.lutece.util.html.Paginator;
52 import fr.paris.lutece.util.url.UrlItem;
53
54 import org.apache.commons.fileupload.FileItem;
55
56 import java.io.File;
57 import java.io.FileNotFoundException;
58 import java.io.FileOutputStream;
59 import java.io.IOException;
60
61 import java.util.Collection;
62 import java.util.HashMap;
63 import java.util.List;
64 import java.util.Map;
65
66 import javax.servlet.http.HttpServletRequest;
67
68
69
70
71 public class JasperJspBean extends PluginAdminPageJspBean
72 {
73
74
75
76
77 public static final String RIGHT_MANAGE_JASPER = "JASPER_MANAGEMENT";
78
79
80 private static final String PARAMETER_JASPERREPORT_ID_REPORT = "jasperreport_id_report";
81 private static final String PARAMETER_JASPERREPORT_CODE = "jasperreport_code";
82 private static final String PARAMETER_REPORT_TEMPLATE = "report_template";
83 private static final String PARAMETER_REPORT_POOL = "report_pool";
84 private static final String PARAMETER_PAGE_INDEX = "page_index";
85
86
87 private static final String TEMPLATE_MANAGE_JASPERREPORTS = "/admin/plugins/jasper/manage_jasperreport.html";
88 private static final String TEMPLATE_CREATE_JASPERREPORT = "/admin/plugins/jasper/create_jasperreport.html";
89 private static final String TEMPLATE_MODIFY_JASPERREPORT = "/admin/plugins/jasper/modify_jasperreport.html";
90
91
92 private static final String PROPERTY_PAGE_TITLE_MANAGE_JASPERREPORTS = "jasper.manage_jasperreports.pageTitle";
93 private static final String PROPERTY_PAGE_TITLE_MODIFY_JASPERREPORT = "jasper.modify_jasperreport.pageTitle";
94 private static final String PROPERTY_PAGE_TITLE_CREATE_JASPERREPORT = "jasper.create_jasperreport.pageTitle";
95
96
97 private static final String MARK_JASPERREPORT_LIST = "jasperreport_list";
98 private static final String MARK_JASPERREPORT = "jasperreport";
99 private static final String MARK_PAGINATOR = "paginator";
100 private static final String MARK_NB_ITEMS_PER_PAGE = "nb_items_per_page";
101 private static final String MARK_SECTION_POOL_LIST = "pool_list";
102
103
104 private static final String JSP_DO_REMOVE_JASPERREPORT = "jsp/admin/plugins/jasper/DoRemoveJasperReport.jsp";
105 private static final String JSP_MANAGE_JASPERREPORTS = "jsp/admin/plugins/jasper/ManageJasperReports.jsp";
106 private static final String JSP_REDIRECT_TO_MANAGE_JASPERREPORTS = "ManageJasperReports.jsp";
107 private static final String PROPERTY_FILES_PATH = "jasper.files.path";
108
109
110 private static final String PROPERTY_DEFAULT_LIST_JASPERREPORT_PER_PAGE = "jasper.listJasperReports.itemsPerPage";
111
112
113 private static final String MESSAGE_CONFIRM_REMOVE_JASPERREPORT = "jasper.message.confirmRemoveJasperReport";
114
115
116 private int _nDefaultItemsPerPage;
117 private String _strCurrentPageIndex;
118 private int _nItemsPerPage;
119
120
121
122
123
124
125
126
127 public String getManageJasperReports( HttpServletRequest request )
128 {
129 setPageTitleProperty( PROPERTY_PAGE_TITLE_MANAGE_JASPERREPORTS );
130
131 _strCurrentPageIndex = Paginator.getPageIndex( request, Paginator.PARAMETER_PAGE_INDEX, _strCurrentPageIndex );
132 _nDefaultItemsPerPage = AppPropertiesService.getPropertyInt( PROPERTY_DEFAULT_LIST_JASPERREPORT_PER_PAGE, 50 );
133 _nItemsPerPage = Paginator.getItemsPerPage( request, Paginator.PARAMETER_ITEMS_PER_PAGE, _nItemsPerPage, _nDefaultItemsPerPage );
134
135 UrlItem url = new UrlItem( JSP_MANAGE_JASPERREPORTS );
136 String strUrl = url.getUrl( );
137 Collection<JasperReport> listReports = JasperReportHome.getJasperReportsList( getPlugin( ) );
138 Paginator paginator = new Paginator( (List<JasperReport>) listReports, _nItemsPerPage, strUrl, PARAMETER_PAGE_INDEX, _strCurrentPageIndex );
139
140 Map<String, Object> model = new HashMap<String, Object>( );
141
142 model.put( MARK_NB_ITEMS_PER_PAGE, "" + _nItemsPerPage );
143 model.put( MARK_PAGINATOR, paginator );
144 model.put( MARK_JASPERREPORT_LIST, paginator.getPageItems( ) );
145
146 HtmlTemplate templateList = AppTemplateService.getTemplate( TEMPLATE_MANAGE_JASPERREPORTS, getLocale( ), model );
147
148 return getAdminPage( templateList.getHtml( ) );
149 }
150
151
152
153
154
155
156
157
158 public String getCreateJasperReport( HttpServletRequest request )
159 {
160 setPageTitleProperty( PROPERTY_PAGE_TITLE_CREATE_JASPERREPORT );
161
162 Map<String, Object> model = new HashMap<String, Object>( );
163
164 ReferenceList listPools = new ReferenceList( );
165 AppConnectionService.getPoolList( listPools );
166
167 model.put( MARK_SECTION_POOL_LIST, listPools );
168
169 HtmlTemplate template = AppTemplateService.getTemplate( TEMPLATE_CREATE_JASPERREPORT, getLocale( ), model );
170
171 return getAdminPage( template.getHtml( ) );
172 }
173
174
175
176
177
178
179
180
181 public String doCreateJasperReport( HttpServletRequest request )
182 {
183 MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
184 JasperReportiness/JasperReport.html#JasperReport">JasperReport jasperreport = new JasperReport( );
185
186 if ( request.getParameter( PARAMETER_JASPERREPORT_CODE ).equals( "" ) )
187 {
188 return AdminMessageService.getMessageUrl( request, Messages.MANDATORY_FIELDS, AdminMessage.TYPE_STOP );
189 }
190
191 String strReportCode = request.getParameter( PARAMETER_JASPERREPORT_CODE );
192 String strPoolName = request.getParameter( PARAMETER_REPORT_POOL );
193 String strCleanReportCode = UploadUtil.cleanFileName( strReportCode );
194 jasperreport.setCode( strCleanReportCode );
195 jasperreport.setPool( strPoolName );
196
197 FileItem fileItem = multipartRequest.getFile( PARAMETER_REPORT_TEMPLATE );
198
199 try
200 {
201 localTemplateFile( jasperreport, fileItem, strCleanReportCode, true );
202 }
203 catch( IOException e )
204 {
205 AppLogService.error( e );
206 }
207
208 JasperReportHome.create( jasperreport, getPlugin( ) );
209
210 return JSP_REDIRECT_TO_MANAGE_JASPERREPORTS;
211 }
212
213
214
215
216
217
218
219
220 public String getConfirmRemoveJasperReport( HttpServletRequest request )
221 {
222 int nId = Integer.parseInt( request.getParameter( PARAMETER_JASPERREPORT_ID_REPORT ) );
223 UrlItem url = new UrlItem( JSP_DO_REMOVE_JASPERREPORT );
224 url.addParameter( PARAMETER_JASPERREPORT_ID_REPORT, nId );
225
226 return AdminMessageService.getMessageUrl( request, MESSAGE_CONFIRM_REMOVE_JASPERREPORT, url.getUrl( ), AdminMessage.TYPE_CONFIRMATION );
227 }
228
229
230
231
232
233
234
235
236 public String doRemoveJasperReport( HttpServletRequest request )
237 {
238 int nId = Integer.parseInt( request.getParameter( PARAMETER_JASPERREPORT_ID_REPORT ) );
239
240
241 JasperReport report = JasperReportHome.findByPrimaryKey( nId, getPlugin( ) );
242 String strCleanReportName = UploadUtil.cleanFileName( report.getCode( ) );
243
244 String strDirectoryPath = AppPropertiesService.getProperty( PROPERTY_FILES_PATH );
245 String strFolderPath = AppPathService.getWebAppPath( ) + strDirectoryPath + strCleanReportName;
246 File folder = new File( strFolderPath );
247 deleteFolderWithContent( folder );
248 JasperReportHome.remove( nId, getPlugin( ) );
249
250 return JSP_REDIRECT_TO_MANAGE_JASPERREPORTS;
251 }
252
253
254
255
256
257
258
259
260 public String getModifyJasperReport( HttpServletRequest request )
261 {
262 setPageTitleProperty( PROPERTY_PAGE_TITLE_MODIFY_JASPERREPORT );
263
264 int nId = Integer.parseInt( request.getParameter( PARAMETER_JASPERREPORT_ID_REPORT ) );
265 JasperReport jasperreport = JasperReportHome.findByPrimaryKey( nId, getPlugin( ) );
266
267 Map<String, Object> model = new HashMap<String, Object>( );
268 model.put( MARK_JASPERREPORT, jasperreport );
269
270 HtmlTemplate template = AppTemplateService.getTemplate( TEMPLATE_MODIFY_JASPERREPORT, getLocale( ), model );
271
272 return getAdminPage( template.getHtml( ) );
273 }
274
275
276
277
278
279
280
281
282 public String doModifyJasperReport( HttpServletRequest request )
283 {
284 int nId = Integer.parseInt( request.getParameter( PARAMETER_JASPERREPORT_ID_REPORT ) );
285 JasperReport jasperreport = JasperReportHome.findByPrimaryKey( nId, getPlugin( ) );
286
287 if ( request.getParameter( PARAMETER_JASPERREPORT_ID_REPORT ).equals( "" ) )
288 {
289 return AdminMessageService.getMessageUrl( request, Messages.MANDATORY_FIELDS, AdminMessage.TYPE_STOP );
290 }
291
292 int nIdReport = Integer.parseInt( request.getParameter( PARAMETER_JASPERREPORT_ID_REPORT ) );
293 jasperreport.setIdReport( nIdReport );
294
295 if ( request.getParameter( PARAMETER_JASPERREPORT_CODE ).equals( "" ) )
296 {
297 return AdminMessageService.getMessageUrl( request, Messages.MANDATORY_FIELDS, AdminMessage.TYPE_STOP );
298 }
299
300 jasperreport.setCode( request.getParameter( PARAMETER_JASPERREPORT_CODE ) );
301 JasperReportHome.update( jasperreport, getPlugin( ) );
302
303 return JSP_REDIRECT_TO_MANAGE_JASPERREPORTS;
304 }
305
306
307
308
309
310
311
312
313
314 private void localTemplateFile( JasperReport report, FileItem fileItem, String strReportCode, boolean bUpdateJasper ) throws IOException
315 {
316 String strFileName = fileItem.getName( );
317 File file = new File( strFileName );
318
319 if ( !file.getName( ).equals( "" ) && strReportCode != null )
320 {
321 String strNameFile = file.getName( );
322
323 String strDirectoryPath = AppPropertiesService.getProperty( PROPERTY_FILES_PATH );
324 String strFolderPath = AppPathService.getWebAppPath( ) + strDirectoryPath + strReportCode;
325 File folder = new File( strFolderPath );
326
327 try
328 {
329 if ( !folder.exists( ) )
330 {
331 folder.mkdir( );
332 }
333 }
334 catch( Exception e )
335 {
336 AppLogService.error( e );
337 }
338
339 String filePath = AppPathService.getWebAppPath( ) + strDirectoryPath + strReportCode + "/" + strNameFile;
340
341 if ( !new File( filePath ).isDirectory( ) && bUpdateJasper )
342 {
343 file = new File( filePath );
344
345 if ( file.exists( ) )
346 {
347 file.delete( );
348 }
349
350 FileOutputStream fosFile = null;
351 try
352 {
353 fosFile = new FileOutputStream(file);
354 fosFile.flush( );
355 fosFile.write( fileItem.get( ) );
356 report.setUrl( strReportCode + "/" + strNameFile );
357 }
358 catch (FileNotFoundException e)
359 {
360 throw e;
361 }
362 finally
363 {
364 if (fosFile != null)
365 fosFile.close( );
366 }
367 }
368 }
369 else
370 {
371 report.setUrl( "" );
372 }
373 }
374
375 public static boolean deleteFolderWithContent( File folder )
376 {
377 if ( folder.isDirectory( ) )
378 {
379 String [ ] files = folder.list( );
380
381 for ( int i = 0; i < files.length; i++ )
382 {
383 boolean success = deleteFolderWithContent( new File( folder, files [i] ) );
384
385 if ( !success )
386 {
387 return false;
388 }
389 }
390 }
391
392 return folder.delete( );
393 }
394 }