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.genericattributes.service.entrytype;
35
36 import java.awt.image.BufferedImage;
37 import java.io.ByteArrayInputStream;
38 import java.io.IOException;
39 import java.util.ArrayList;
40 import java.util.Arrays;
41 import java.util.List;
42 import java.util.Locale;
43
44 import javax.imageio.ImageIO;
45 import javax.servlet.http.HttpServletRequest;
46
47 import org.apache.commons.fileupload.FileItem;
48 import org.apache.commons.lang3.StringUtils;
49 import org.apache.commons.lang3.math.NumberUtils;
50
51 import fr.paris.lutece.plugins.asynchronousupload.service.IAsyncUploadHandler;
52 import fr.paris.lutece.plugins.genericattributes.business.Entry;
53 import fr.paris.lutece.plugins.genericattributes.business.Field;
54 import fr.paris.lutece.plugins.genericattributes.business.FieldHome;
55 import fr.paris.lutece.plugins.genericattributes.business.GenericAttributeError;
56 import fr.paris.lutece.plugins.genericattributes.business.Response;
57 import fr.paris.lutece.plugins.genericattributes.service.file.GenericAttributeFileService;
58 import fr.paris.lutece.plugins.genericattributes.util.FileAttributesUtils;
59 import fr.paris.lutece.portal.business.file.File;
60 import fr.paris.lutece.portal.business.regularexpression.RegularExpression;
61 import fr.paris.lutece.portal.service.fileupload.FileUploadService;
62 import fr.paris.lutece.portal.service.i18n.I18nService;
63 import fr.paris.lutece.portal.service.plugin.Plugin;
64 import fr.paris.lutece.portal.service.regularexpression.RegularExpressionService;
65 import fr.paris.lutece.portal.service.util.AppLogService;
66 import fr.paris.lutece.portal.service.util.AppPathService;
67 import fr.paris.lutece.util.ReferenceList;
68 import fr.paris.lutece.util.url.UrlItem;
69
70
71
72
73 public abstract class AbstractEntryTypeUpload extends EntryTypeService
74 {
75
76 protected static final String PARAMETER_ID_RESPONSE = "id_response";
77 protected static final String PARAMETER_MAX_FILES = "max_files";
78 protected static final String PARAMETER_FILE_MAX_SIZE = "file_max_size";
79 protected static final String PARAMETER_EXPORT_BINARY = "export_binary";
80 protected static final String PARAMETER_FILE_TYPE = "file_type";
81
82
83 protected static final String ALL = "*";
84 protected static final String COMMA = ",";
85
86
87 protected static final String PARAMETER_RESOURCE_TYPE = "resource_type";
88 protected static final String PARAMETER_ID = "id";
89 protected static final String URL_IMAGE_SERVLET = "image";
90
91
92 protected static final String MESSAGE_ERROR_NOT_AN_IMAGE = "genericattributes.message.notAnImage";
93
94
95
96
97
98
99 public abstract IAsyncUploadHandler getAsynchronousUploadHandler( );
100
101
102
103
104
105
106
107
108
109
110 public abstract String getUrlDownloadFile( int nResponseId, String strBaseUrl );
111
112
113
114
115
116
117 protected abstract boolean checkForImages( );
118
119
120
121
122
123
124
125
126
127
128 protected String getUrlDownloadImage( int nResponseId, String strBaseUrl )
129 {
130 UrlItem url = new UrlItem( strBaseUrl + URL_IMAGE_SERVLET );
131 url.addParameter( PARAMETER_RESOURCE_TYPE, Response.RESOURCE_TYPE );
132 url.addParameter( PARAMETER_ID, nResponseId );
133
134 return url.getUrl( );
135 }
136
137
138
139
140 @Override
141 public GenericAttributeError canUploadFiles( Entry entry, List<FileItem> listUploadedFileItems, List<FileItem> listFileItemsToUpload, Locale locale )
142 {
143
144 GenericAttributeError error = FileAttributesUtils.checkNumberFiles( entry, listUploadedFileItems, listFileItemsToUpload, locale );
145 if ( error != null )
146 {
147 return error;
148 }
149
150
151 error = FileAttributesUtils.checkFileSize( entry, listUploadedFileItems, listFileItemsToUpload, locale );
152 if ( error != null )
153 {
154 return error;
155 }
156
157 if ( listFileItemsToUpload != null )
158 {
159 for ( FileItem fileItem : listFileItemsToUpload )
160 {
161 if ( checkForImages( ) )
162 {
163 error = doCheckforImages( fileItem, entry, locale );
164
165 if ( error != null )
166 {
167 return error;
168 }
169 }
170 }
171 }
172
173 return null;
174 }
175
176
177
178
179 @Override
180 public String getResponseValueForExport( Entry entry, HttpServletRequest request, Response response, Locale locale )
181 {
182
183 if ( entry.getFields( ) == null )
184 {
185 entry.setFields( FieldHome.getFieldListByIdEntry( entry.getIdEntry( ) ) );
186 }
187
188 Field field = entry.getFieldByCode( FIELD_FILE_BINARY );
189
190 if ( ( field != null ) && StringUtils.isNotBlank( field.getValue( ) ) && Boolean.TRUE.equals( Boolean.valueOf( field.getValue( ) ) ) )
191 {
192 if ( response.getFile( ) != null )
193 {
194 File file = GenericAttributeFileService.getInstance().load( response.getFile( ).getFileKey( ) );
195
196 if ( ( file != null ) && ( file.getPhysicalFile( ) != null ) && ( file.getPhysicalFile( ).getValue( ) != null ) )
197 {
198 String strPhysicalFile = Arrays.toString( file.getPhysicalFile( ).getValue( ) );
199
200 if ( StringUtils.isNotBlank( strPhysicalFile ) )
201 {
202
203 return strPhysicalFile.substring( 1, strPhysicalFile.length( ) - 1 );
204 }
205 }
206 }
207
208 return StringUtils.EMPTY;
209 }
210
211 String strBaseUrl = AppPathService.getBaseUrl( request );
212
213 return getUrlDownloadFile( response.getIdResponse( ), strBaseUrl );
214 }
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231 protected GenericAttributeError checkResponseData( Entry entry, List<FileItem> listFilesSource, Locale locale, HttpServletRequest request )
232 {
233
234
235 GenericAttributeError error = canUploadFiles( entry, listFilesSource, new ArrayList<FileItem>( ), locale );
236
237 if ( error != null )
238 {
239 return error;
240 }
241 return FileAttributesUtils.checkResponseData( entry, listFilesSource, locale );
242 }
243
244
245
246
247
248
249
250
251
252
253
254
255 protected List<FileItem> getFileSources( HttpServletRequest request, String strAttributeName )
256 {
257 if ( request != null )
258 {
259
260 getAsynchronousUploadHandler( ).doRemoveFile( request, strAttributeName );
261
262
263 getAsynchronousUploadHandler( ).addFilesUploadedSynchronously( request, strAttributeName );
264
265 return getAsynchronousUploadHandler( ).getListUploadedFiles( strAttributeName, request.getSession( ) );
266 }
267
268 return new ArrayList<>( );
269 }
270
271
272
273
274
275
276
277
278
279
280 protected String getAttributeName( Entry entry, HttpServletRequest request )
281 {
282 String strAttributePrefix = IEntryTypeService.PREFIX_ATTRIBUTE + Integer.toString( entry.getIdEntry( ) );
283 int nIterationNumber = getResponseIterationValue( request );
284
285 if ( nIterationNumber != NumberUtils.INTEGER_MINUS_ONE )
286 {
287 strAttributePrefix = IEntryTypeService.PREFIX_ITERATION_ATTRIBUTE + nIterationNumber + "_" + strAttributePrefix;
288 }
289
290 return strAttributePrefix;
291 }
292
293
294
295
296
297
298 @Override
299 public String getRequestData( Entry entry, HttpServletRequest request, Locale locale )
300 {
301 initCommonRequestData( entry, request );
302 String strTitle = request.getParameter( PARAMETER_TITLE );
303 String strHelpMessage = ( request.getParameter( PARAMETER_HELP_MESSAGE ) != null ) ? request.getParameter( PARAMETER_HELP_MESSAGE ).trim( ) : null;
304 String strComment = request.getParameter( PARAMETER_COMMENT );
305 String strMandatory = request.getParameter( PARAMETER_MANDATORY );
306 String strCSSClass = request.getParameter( PARAMETER_CSS_CLASS );
307 String strCode = request.getParameter( PARAMETER_ENTRY_CODE );
308 String strOnlyDisplayInBack = request.getParameter( PARAMETER_ONLY_DISPLAY_IN_BACK );
309 String strIndexed = request.getParameter( PARAMETER_INDEXED );
310
311 String strError = FileAttributesUtils.checkEntryData( request, locale );
312
313 if ( StringUtils.isNotBlank( strError ) )
314 {
315 return strError;
316 }
317
318 entry.setTitle( strTitle );
319 entry.setCode( strCode );
320 entry.setHelpMessage( strHelpMessage );
321 entry.setComment( strComment );
322 entry.setCSSClass( strCSSClass );
323 entry.setIndexed( strIndexed != null );
324
325 FileAttributesUtils.createOrUpdateFileFields( entry, request );
326
327 entry.setMandatory( strMandatory != null );
328 entry.setOnlyDisplayInBack( strOnlyDisplayInBack != null );
329 return null;
330 }
331
332
333
334
335 @Override
336 public ReferenceList getReferenceListRegularExpression( Entry entry, Plugin plugin )
337 {
338 ReferenceList refListRegularExpression = null;
339
340 if ( RegularExpressionService.getInstance( ).isAvailable( ) )
341 {
342 refListRegularExpression = new ReferenceList( );
343
344 List<RegularExpression> listRegularExpression = RegularExpressionService.getInstance( ).getAllRegularExpression( );
345
346 for ( RegularExpression regularExpression : listRegularExpression )
347 {
348 if ( !entry.getFields( ).get( 0 ).getRegularExpressionList( ).contains( regularExpression ) )
349 {
350 refListRegularExpression.addItem( regularExpression.getIdExpression( ), regularExpression.getTitle( ) );
351 }
352 }
353 }
354
355 return refListRegularExpression;
356 }
357
358
359
360
361
362
363
364
365
366
367
368 @Override
369 public void setResponseToStringValue( Entry entry, Response response, Locale locale )
370 {
371
372 }
373
374
375
376
377 @Override
378 public String getResponseValueForRecap( Entry entry, HttpServletRequest request, Response response, Locale locale )
379 {
380 if ( ( response.getFile( ) != null ) && StringUtils.isNotBlank( response.getFile( ).getTitle( ) ) )
381 {
382 return response.getFile( ).getTitle( );
383 }
384
385 return StringUtils.EMPTY;
386 }
387
388
389
390
391
392
393
394
395
396
397
398
399 public GenericAttributeError doCheckforImages( FileItem fileItem, Entry entry, Locale locale )
400 {
401 String strFilename = FileUploadService.getFileNameOnly( fileItem );
402 BufferedImage image = null;
403
404 try
405 {
406 if ( fileItem.get( ) != null )
407 {
408 image = ImageIO.read( new ByteArrayInputStream( fileItem.get( ) ) );
409 }
410 }
411 catch( IOException e )
412 {
413 AppLogService.error( e );
414 }
415
416 if ( ( image == null ) && StringUtils.isNotBlank( strFilename ) )
417 {
418 GenericAttributeErrores/business/GenericAttributeError.html#GenericAttributeError">GenericAttributeError genAttError = new GenericAttributeError( );
419 genAttError.setMandatoryError( false );
420
421 Object [ ] args = {
422 fileItem.getName( )
423 };
424 genAttError.setErrorMessage( I18nService.getLocalizedString( MESSAGE_ERROR_NOT_AN_IMAGE, args, locale ) );
425 genAttError.setTitleQuestion( entry.getTitle( ) );
426
427 return genAttError;
428 }
429
430 return null;
431 }
432 }