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.util.List;
37 import java.util.Locale;
38
39 import javax.servlet.http.HttpServletRequest;
40 import org.apache.commons.collections.CollectionUtils;
41 import org.apache.commons.fileupload.FileItem;
42 import org.apache.commons.lang3.StringUtils;
43
44 import fr.paris.lutece.plugins.genericattributes.business.Entry;
45 import fr.paris.lutece.plugins.genericattributes.business.Field;
46 import fr.paris.lutece.plugins.genericattributes.business.GenericAttributeError;
47 import fr.paris.lutece.plugins.genericattributes.business.MandatoryError;
48 import fr.paris.lutece.plugins.genericattributes.business.Response;
49 import fr.paris.lutece.plugins.genericattributes.util.GenericAttributesUtils;
50 import fr.paris.lutece.portal.business.regularexpression.RegularExpression;
51 import fr.paris.lutece.portal.service.fileimage.FileImagePublicService;
52 import fr.paris.lutece.portal.service.i18n.I18nService;
53 import fr.paris.lutece.portal.service.image.ImageResourceManager;
54 import fr.paris.lutece.portal.service.message.AdminMessage;
55 import fr.paris.lutece.portal.service.message.AdminMessageService;
56 import fr.paris.lutece.portal.service.plugin.Plugin;
57 import fr.paris.lutece.portal.service.regularexpression.RegularExpressionService;
58 import fr.paris.lutece.portal.service.util.AppException;
59 import fr.paris.lutece.portal.service.util.AppLogService;
60 import fr.paris.lutece.util.ReferenceList;
61 import fr.paris.lutece.util.string.StringUtil;
62 import fr.paris.lutece.portal.web.upload.MultipartHttpServletRequest;
63
64
65
66
67 public abstract class AbstractEntryTypeText extends EntryTypeService
68 {
69 private static final String MESSAGE_ERROR_FILE_IMAGE = "Error importing file.";
70
71
72
73 @Override
74 public String getRequestData( Entry entry, HttpServletRequest request, Locale locale )
75 {
76 initCommonRequestData( entry, request );
77 String strCode = request.getParameter( PARAMETER_ENTRY_CODE );
78 String strTitle = request.getParameter( PARAMETER_TITLE );
79 String strHelpMessage = ( request.getParameter( PARAMETER_HELP_MESSAGE ) != null ) ? request.getParameter( PARAMETER_HELP_MESSAGE ).trim( ) : null;
80 String strComment = request.getParameter( PARAMETER_COMMENT );
81 String strValue = request.getParameter( PARAMETER_VALUE );
82 String strMandatory = request.getParameter( PARAMETER_MANDATORY );
83 String strWidth = request.getParameter( PARAMETER_WIDTH );
84 String strMaxSizeEnter = request.getParameter( PARAMETER_MAX_SIZE_ENTER );
85 String strConfirmField = request.getParameter( PARAMETER_CONFIRM_FIELD );
86 String strConfirmFieldTitle = request.getParameter( PARAMETER_CONFIRM_FIELD_TITLE );
87 String strUnique = request.getParameter( PARAMETER_UNIQUE );
88 String strCSSClass = request.getParameter( PARAMETER_CSS_CLASS );
89 String strOnlyDisplayInBack = request.getParameter( PARAMETER_ONLY_DISPLAY_IN_BACK );
90 String strErrorMessage = request.getParameter( PARAMETER_ERROR_MESSAGE );
91 String strIndexed = request.getParameter( PARAMETER_INDEXED );
92 String strPlaceholder = request.getParameter( PARAMETER_PLACEHOLDER );
93 FileItem imageFileItem = null;
94 if( request instanceof MultipartHttpServletRequest )
95 {
96 MultipartHttpServletRequest multipartRequest = ( MultipartHttpServletRequest ) request;
97 imageFileItem = multipartRequest.getFile( PARAMETER_ILLUSTRATION_IMAGE );
98 }
99
100 int nWidth = -1;
101 int nMaxSizeEnter = -1;
102
103 String strFieldError = StringUtils.EMPTY;
104
105 if ( StringUtils.isBlank( strTitle ) )
106 {
107 strFieldError = ERROR_FIELD_TITLE;
108 }
109
110 else
111 if ( StringUtils.isBlank( strWidth ) )
112 {
113 strFieldError = ERROR_FIELD_WIDTH;
114 }
115
116 if ( ( strConfirmField != null ) && StringUtils.isBlank( strConfirmFieldTitle ) )
117 {
118 strFieldError = FIELD_CONFIRM_FIELD_TITLE;
119 }
120
121 if ( StringUtils.isNotBlank( strFieldError ) )
122 {
123 Object [ ] tabRequiredFields = {
124 I18nService.getLocalizedString( strFieldError, locale )
125 };
126
127 return AdminMessageService.getMessageUrl( request, MESSAGE_MANDATORY_FIELD, tabRequiredFields, AdminMessage.TYPE_STOP );
128 }
129
130 try
131 {
132 nWidth = Integer.parseInt( strWidth );
133 }
134 catch( NumberFormatException ne )
135 {
136 strFieldError = ERROR_FIELD_WIDTH;
137 }
138
139 try
140 {
141 if ( StringUtils.isNotBlank( strMaxSizeEnter ) )
142 {
143 nMaxSizeEnter = Integer.parseInt( strMaxSizeEnter );
144 }
145 }
146 catch( NumberFormatException ne )
147 {
148 strFieldError = FIELD_MAX_SIZE_ENTER;
149 }
150
151 if ( StringUtils.isNotBlank( strFieldError ) )
152 {
153 Object [ ] tabRequiredFields = {
154 I18nService.getLocalizedString( strFieldError, locale )
155 };
156
157 return AdminMessageService.getMessageUrl( request, MESSAGE_NUMERIC_FIELD, tabRequiredFields, AdminMessage.TYPE_STOP );
158 }
159
160 entry.setTitle( strTitle );
161 entry.setHelpMessage( strHelpMessage );
162 entry.setComment( strComment );
163 entry.setCSSClass( strCSSClass );
164 entry.setIndexed( strIndexed != null );
165 entry.setErrorMessage( strErrorMessage );
166 entry.setCode( strCode );
167
168 if ( imageFileItem != null && imageFileItem.getSize( ) > 0 )
169 {
170 try
171 {
172 String strFileStoreKey = ImageResourceManager.addImageResource( FileImagePublicService.IMAGE_RESOURCE_TYPE_ID, imageFileItem );
173 GenericAttributesUtils.createOrUpdateField( entry, FIELD_ILLUSTRATION_IMAGE, imageFileItem.getName( ), strFileStoreKey );
174 }
175 catch ( Exception e )
176 {
177 AppLogService.error( MESSAGE_ERROR_FILE_IMAGE, e );
178 throw new AppException( MESSAGE_ERROR_FILE_IMAGE, e );
179 }
180 }
181
182 GenericAttributesUtils.createOrUpdateField( entry, FIELD_TEXT_CONF, null, strValue );
183 GenericAttributesUtils.createOrUpdateField( entry, FIELD_WIDTH, null, String.valueOf( nWidth ) );
184 GenericAttributesUtils.createOrUpdateField( entry, FIELD_MAX_SIZE, null, String.valueOf( nMaxSizeEnter ) );
185 GenericAttributesUtils.createOrUpdateField( entry, FIELD_PLACEHOLDER, null, strPlaceholder != null ? strPlaceholder : StringUtils.EMPTY );
186
187 entry.setMandatory( strMandatory != null );
188 entry.setOnlyDisplayInBack( strOnlyDisplayInBack != null );
189
190 boolean confirm = false;
191 String fieldTitle = null;
192 if ( strConfirmField != null )
193 {
194 confirm = true;
195 fieldTitle = strConfirmFieldTitle;
196 }
197
198 GenericAttributesUtils.createOrUpdateField( entry, FIELD_CONFIRM, fieldTitle, String.valueOf( confirm ) );
199 entry.setUnique( strUnique != null );
200 return null;
201 }
202
203
204
205
206 @Override
207 public ReferenceList getReferenceListRegularExpression( Entry entry, Plugin plugin )
208 {
209 ReferenceList refListRegularExpression = null;
210
211 if ( RegularExpressionService.getInstance( ).isAvailable( ) )
212 {
213 refListRegularExpression = new ReferenceList( );
214
215 List<RegularExpression> listRegularExpression = RegularExpressionService.getInstance( ).getAllRegularExpression( );
216
217 for ( RegularExpression regularExpression : listRegularExpression )
218 {
219 if ( !entry.getFieldByCode( FIELD_TEXT_CONF ).getRegularExpressionList( ).contains( regularExpression ) )
220 {
221 refListRegularExpression.addItem( regularExpression.getIdExpression( ), regularExpression.getTitle( ) );
222 }
223 }
224 }
225
226 return refListRegularExpression;
227 }
228
229
230
231
232 @Override
233 public GenericAttributeError getResponseData( Entry entry, HttpServletRequest request, List<Response> listResponse, Locale locale )
234 {
235 String strValueEntry = request.getParameter( PREFIX_ATTRIBUTE + entry.getIdEntry( ) ).trim( );
236 Field confirmField = entry.getFieldByCode( FIELD_CONFIRM );
237
238 boolean bConfirmField = confirmField != null && Boolean.valueOf( confirmField.getValue( ) );
239
240 String strValueEntryConfirmField = null;
241
242 if ( bConfirmField )
243 {
244 strValueEntryConfirmField = request.getParameter( PREFIX_ATTRIBUTE + entry.getIdEntry( ) + SUFFIX_CONFIRM_FIELD ).trim( );
245 }
246
247 List<RegularExpression> listRegularExpression = entry.getFieldByCode( FIELD_TEXT_CONF ).getRegularExpressionList( );
248 Response/genericattributes/business/Response.html#Response">Response response = new Response( );
249 response.setEntry( entry );
250
251 if ( strValueEntry == null )
252 {
253 return null;
254 }
255
256 response.setResponseValue( strValueEntry );
257
258 if ( StringUtils.isNotBlank( response.getResponseValue( ) ) )
259 {
260 response.setToStringValueResponse( getResponseValueForRecap( entry, request, response, locale ) );
261 }
262 else
263 {
264 response.setToStringValueResponse( StringUtils.EMPTY );
265 }
266
267 response.setIterationNumber( getResponseIterationValue( request ) );
268
269 listResponse.add( response );
270
271 return checkErrors( entry, confirmField, strValueEntry, strValueEntryConfirmField, listRegularExpression, bConfirmField, locale );
272 }
273
274 private GenericAttributeError checkErrors( Entry entry, Field confirmField, String strValueEntry, String strValueEntryConfirmField,
275 List<RegularExpression> listRegularExpression, boolean bConfirmField, Locale locale )
276 {
277
278 if ( StringUtil.containsXssCharacters( strValueEntry ) )
279 {
280 GenericAttributeErrortributes/business/GenericAttributeError.html#GenericAttributeError">GenericAttributeError error = new GenericAttributeError( );
281 error.setMandatoryError( false );
282 error.setTitleQuestion( entry.getTitle( ) );
283 error.setErrorMessage( I18nService.getLocalizedString( MESSAGE_XSS_FIELD, locale ) );
284
285 return error;
286 }
287
288 if ( entry.isMandatory( ) && StringUtils.isBlank( strValueEntry ) )
289 {
290 if ( StringUtils.isNotEmpty( entry.getErrorMessage( ) ) )
291 {
292 GenericAttributeErrortributes/business/GenericAttributeError.html#GenericAttributeError">GenericAttributeError error = new GenericAttributeError( );
293 error.setMandatoryError( true );
294 error.setErrorMessage( entry.getErrorMessage( ) );
295
296 return error;
297 }
298
299 return new MandatoryError( entry, locale );
300 }
301
302 if ( ( !strValueEntry.equals( StringUtils.EMPTY ) ) && CollectionUtils.isNotEmpty( listRegularExpression )
303 && RegularExpressionService.getInstance( ).isAvailable( ) )
304 {
305 for ( RegularExpression regularExpression : listRegularExpression )
306 {
307 if ( !RegularExpressionService.getInstance( ).isMatches( strValueEntry, regularExpression ) )
308 {
309 GenericAttributeErrortributes/business/GenericAttributeError.html#GenericAttributeError">GenericAttributeError error = new GenericAttributeError( );
310 error.setMandatoryError( false );
311 error.setTitleQuestion( entry.getTitle( ) );
312 error.setErrorMessage( regularExpression.getErrorMessage( ) );
313
314 return error;
315 }
316 }
317 }
318
319 if ( bConfirmField && ( ( strValueEntryConfirmField == null ) || !strValueEntry.equals( strValueEntryConfirmField ) ) )
320 {
321 GenericAttributeErrortributes/business/GenericAttributeError.html#GenericAttributeError">GenericAttributeError error = new GenericAttributeError( );
322 error.setMandatoryError( false );
323 error.setTitleQuestion( confirmField.getTitle( ) );
324 error.setErrorMessage( I18nService.getLocalizedString( MESSAGE_CONFIRM_FIELD, new String [ ] {
325 entry.getTitle( )
326 }, locale ) );
327
328 return error;
329 }
330 return null;
331 }
332
333
334
335
336 @Override
337 public String getResponseValueForExport( Entry entry, HttpServletRequest request, Response response, Locale locale )
338 {
339 return response.getResponseValue( );
340 }
341
342
343
344
345 @Override
346 public String getResponseValueForRecap( Entry entry, HttpServletRequest request, Response response, Locale locale )
347 {
348 return response.getResponseValue( );
349 }
350 }