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
35
36
37 package fr.paris.lutece.plugins.genericattributes.service.entrytype;
38
39 import java.util.List;
40 import java.util.Locale;
41 import java.util.Objects;
42
43 import javax.servlet.http.HttpServletRequest;
44
45 import org.apache.commons.lang3.StringUtils;
46
47 import fr.paris.lutece.plugins.genericattributes.business.Entry;
48 import fr.paris.lutece.plugins.genericattributes.business.Field;
49 import fr.paris.lutece.plugins.genericattributes.business.FieldHome;
50 import fr.paris.lutece.plugins.genericattributes.business.GenericAttributeError;
51 import fr.paris.lutece.plugins.genericattributes.business.IMapProvider;
52 import fr.paris.lutece.plugins.genericattributes.business.MandatoryError;
53 import fr.paris.lutece.plugins.genericattributes.business.MapProviderManager;
54 import fr.paris.lutece.plugins.genericattributes.business.Response;
55 import fr.paris.lutece.plugins.genericattributes.util.GenericAttributesUtils;
56 import fr.paris.lutece.portal.service.i18n.I18nService;
57 import fr.paris.lutece.portal.service.message.AdminMessage;
58 import fr.paris.lutece.portal.service.message.AdminMessageService;
59 import fr.paris.lutece.portal.service.util.AppPropertiesService;
60 import fr.paris.lutece.util.ReferenceList;
61
62
63
64
65
66 public abstract class AbstractEntryTypeGeolocation extends EntryTypeService
67 {
68
69
70 public static final String PARAMETER_MAP_PROVIDER = "map_provider";
71
72
73 public static final String PARAMETER_EDIT_MODE = "edit_mode";
74
75
76 public static final String PARAMETER_VIEW_NUMBER = "view_number";
77
78
79 public static final String PARAMETER_SUFFIX_ID_ADDRESS = "_idAddress";
80
81
82 public static final String PARAMETER_SUFFIX_ADDRESS = "_address";
83
84
85 public static final String PARAMETER_SUFFIX_ADDITIONAL_ADDRESS = "_additional_address";
86
87
88 public static final String PARAMETER_SUFFIX_X = "_x";
89
90
91 public static final String PARAMETER_SUFFIX_Y = "_y";
92
93
94 public static final String PARAMETER_SUFFIX_GEOMETRY = "_geometry";
95
96
97
98 public static final String PARAMETER_PREFIX_ITERATION = "nIt";
99
100
101
102
103 public static final String PARAMETER_NUMBER_ITERATION = "number_iteration_geolocation";
104
105
106
107
108 public static final String ATTRIBUTE_LAST_ITERATION_GEOLOCATION = "last_iteration_geolocation";
109
110 private static final String MESSAGE_SPECIFY_BOTH_X_AND_Y = "genericattributes.message.specifyBothXAndY";
111 public static final String PARAMETER_EDIT_MODE_LIST = "gismap.edit.mode.list";
112
113 public static final String PROPERTY_ENTRY_TYPE_GEOLOCALISATION_EXPORT_WITH_FIELD_NAME = "genericattributes.entrytype.geolocalisation.export.field.name";
114
115
116
117
118 @Override
119 public String getRequestData( Entry entry, HttpServletRequest request, Locale locale )
120 {
121 initCommonRequestData( entry, request );
122 String strTitle = request.getParameter( PARAMETER_TITLE );
123 String strCode = request.getParameter( PARAMETER_ENTRY_CODE );
124 String strHelpMessage = ( request.getParameter( PARAMETER_HELP_MESSAGE ) != null ) ? request.getParameter( PARAMETER_HELP_MESSAGE ).trim( ) : null;
125 String strComment = request.getParameter( PARAMETER_COMMENT );
126 String strMandatory = request.getParameter( PARAMETER_MANDATORY );
127 String strMapProvider = request.getParameter( PARAMETER_MAP_PROVIDER );
128 String strEditMode = request.getParameter( PARAMETER_EDIT_MODE );
129 String strViewNumber = request.getParameter( PARAMETER_VIEW_NUMBER );
130 String strCSSClass = request.getParameter( PARAMETER_CSS_CLASS );
131 String strIndexed = request.getParameter( PARAMETER_INDEXED );
132 String strFieldError = StringUtils.EMPTY;
133
134 if ( StringUtils.isBlank( strTitle ) )
135 {
136 strFieldError = ERROR_FIELD_TITLE;
137 }
138
139 if ( StringUtils.isNotBlank( strFieldError ) )
140 {
141 Object [ ] tabRequiredFields = {
142 I18nService.getLocalizedString( strFieldError, locale )
143 };
144
145 return AdminMessageService.getMessageUrl( request, MESSAGE_MANDATORY_FIELD, tabRequiredFields, AdminMessage.TYPE_STOP );
146 }
147
148
149
150
151
152 createOrUpdateProviderField( entry, strMapProvider );
153 GenericAttributesUtils.createOrUpdateField( entry, FIELD_EDIT_MODE, null, strEditMode );
154 GenericAttributesUtils.createOrUpdateField( entry, FIELD_VIEW_NUMBER, null, strViewNumber );
155 GenericAttributesUtils.createOrUpdateField( entry, FIELD_ID_ADDRESS, null, FIELD_ID_ADDRESS );
156 GenericAttributesUtils.createOrUpdateField( entry, FIELD_ADDRESS, null, FIELD_ADDRESS );
157 GenericAttributesUtils.createOrUpdateField( entry, FIELD_ADDITIONAL_ADDRESS, null, FIELD_ADDITIONAL_ADDRESS );
158 GenericAttributesUtils.createOrUpdateField( entry, FIELD_X, null, FIELD_X );
159 GenericAttributesUtils.createOrUpdateField( entry, FIELD_Y, null, FIELD_Y );
160 GenericAttributesUtils.createOrUpdateField( entry, FIELD_GEOMETRY, null, FIELD_GEOMETRY );
161
162 entry.setTitle( strTitle );
163 entry.setHelpMessage( strHelpMessage );
164 entry.setComment( strComment );
165 entry.setCSSClass( strCSSClass );
166 entry.setIndexed( strIndexed != null );
167 entry.setMandatory( strMandatory != null );
168 entry.setCode( strCode );
169 return null;
170 }
171
172 private void createOrUpdateProviderField( Entry entry, String fieldValue )
173 {
174 Field field = entry.getFieldByCode( FIELD_PROVIDER );
175 if ( field == null )
176 {
177 entry.getFields( ).add( buildFieldMapProvider( entry, fieldValue ) );
178 }
179 else
180 {
181 Field newProvider = buildFieldMapProvider( entry, fieldValue );
182 field.setValue( newProvider.getValue( ) );
183 }
184 }
185
186
187
188
189 @Override
190 public GenericAttributeError getResponseData(Entry entry, HttpServletRequest request, List<Response> listResponse, Locale locale) {
191 Integer maxIterationGeolocation = 0;
192 Integer lastIterationGeolocation = 0;
193 Integer iterationNumberToSave = 0;
194
195 if (request.getSession().getAttribute(ATTRIBUTE_LAST_ITERATION_GEOLOCATION) != null) {
196 lastIterationGeolocation = (Integer) request.getSession().getAttribute(ATTRIBUTE_LAST_ITERATION_GEOLOCATION);
197 request.getSession().setAttribute(ATTRIBUTE_LAST_ITERATION_GEOLOCATION, lastIterationGeolocation + 1);
198 lastIterationGeolocation = lastIterationGeolocation + 1;
199 } else {
200 request.getSession().setAttribute(ATTRIBUTE_LAST_ITERATION_GEOLOCATION, 0);
201 }
202 if (request.getParameter(PARAMETER_NUMBER_ITERATION) != null) {
203 maxIterationGeolocation = Integer.parseInt(request.getParameter(PARAMETER_NUMBER_ITERATION));
204 iterationNumberToSave = lastIterationGeolocation;
205 } else {
206 iterationNumberToSave = -1;
207 }
208 String prefixIteration = PARAMETER_PREFIX_ITERATION + lastIterationGeolocation + "_" + IEntryTypeService.PREFIX_ATTRIBUTE + entry.getIdEntry();
209
210 String strIdAddressValue = request.getParameter(prefixIteration + PARAMETER_SUFFIX_ID_ADDRESS);
211
212 String strAddressValue = request.getParameter(prefixIteration + PARAMETER_SUFFIX_ADDRESS);
213 String strAdditionalAddressValue = request.getParameter(prefixIteration + entry.getIdEntry() + PARAMETER_SUFFIX_ADDITIONAL_ADDRESS);
214 String strXValue = request.getParameter(prefixIteration + PARAMETER_SUFFIX_X);
215 String strYValue = request.getParameter(prefixIteration + PARAMETER_SUFFIX_Y);
216 String strGeometryValue = request.getParameter(prefixIteration + PARAMETER_SUFFIX_GEOMETRY);
217
218 Field fieldIdAddress = entry.getFieldByCode(FIELD_ID_ADDRESS);
219 Field fieldAddress = entry.getFieldByCode(FIELD_ADDRESS);
220 Field fieldAdditionalAddress = entry.getFieldByCode(FIELD_ADDITIONAL_ADDRESS);
221 Field fieldX = entry.getFieldByCode(FIELD_X);
222 Field fieldY = entry.getFieldByCode(FIELD_Y);
223 Field fieldGeometry = entry.getFieldByCode(FIELD_GEOMETRY);
224
225
226
227
228 if (fieldIdAddress == null) {
229 fieldIdAddress = GenericAttributesUtils.createOrUpdateField(entry, FIELD_ID_ADDRESS, null, FIELD_ID_ADDRESS);
230 FieldHome.create(fieldIdAddress);
231 }
232
233
234 if (strIdAddressValue != null) {
235 Responsettributes/business/Response.html#Response">Response responseIdAddress = new Response();
236 responseIdAddress.setEntry(entry);
237 responseIdAddress.setResponseValue(strIdAddressValue);
238 responseIdAddress.setField(fieldIdAddress);
239 responseIdAddress.setToStringValueResponse(strIdAddressValue);
240 responseIdAddress.setIterationNumber(iterationNumberToSave);
241 listResponse.add(responseIdAddress);
242
243
244 }
245
246
247 if (strAddressValue != null) {
248 Responsecattributes/business/Response.html#Response">Response responseAddress = new Response();
249 responseAddress.setEntry(entry);
250 responseAddress.setResponseValue(strAddressValue);
251 responseAddress.setField(fieldAddress);
252 responseAddress.setToStringValueResponse(strAddressValue);
253 responseAddress.setIterationNumber(iterationNumberToSave);
254 listResponse.add(responseAddress);
255 }
256
257
258 if (strAdditionalAddressValue != null) {
259 Responses/business/Response.html#Response">Response responseAdditionalAddress = new Response();
260 responseAdditionalAddress.setEntry(entry);
261 responseAdditionalAddress.setResponseValue(strAdditionalAddressValue);
262 responseAdditionalAddress.setField(fieldAdditionalAddress);
263 responseAdditionalAddress.setToStringValueResponse(strAdditionalAddressValue);
264 responseAdditionalAddress.setIterationNumber(iterationNumberToSave);
265 listResponse.add(responseAdditionalAddress);
266 }
267
268 if (strXValue != null) {
269 Responsegenericattributes/business/Response.html#Response">Response responseX = new Response();
270 responseX.setEntry(entry);
271 responseX.setResponseValue(strXValue);
272 responseX.setField(fieldX);
273 responseX.setToStringValueResponse(strXValue);
274 responseX.setIterationNumber(iterationNumberToSave);
275 listResponse.add(responseX);
276 }
277
278
279 if (strXValue != null) {
280 Responsegenericattributes/business/Response.html#Response">Response responseY = new Response();
281 responseY.setEntry(entry);
282 responseY.setResponseValue(strYValue);
283 responseY.setField(fieldY);
284 responseY.setToStringValueResponse(strYValue);
285 responseY.setIterationNumber(iterationNumberToSave);
286 listResponse.add(responseY);
287 }
288
289
290 if (strGeometryValue != null) {
291 Responseattributes/business/Response.html#Response">Response responseGeomerty = new Response();
292 responseGeomerty.setEntry(entry);
293 responseGeomerty.setResponseValue(strGeometryValue);
294 responseGeomerty.setField(fieldGeometry);
295 responseGeomerty.setToStringValueResponse(strGeometryValue);
296 responseGeomerty.setIterationNumber(iterationNumberToSave);
297 listResponse.add(responseGeomerty);
298 }
299
300
301 if (entry.isMandatory() && StringUtils.isBlank(strAddressValue)) {
302 return new MandatoryError(entry, locale);
303 }
304
305 if (((StringUtils.isBlank(strXValue) && StringUtils.isNotBlank(strYValue))
306 || (StringUtils.isNotBlank(strXValue) && StringUtils.isBlank(strYValue))) && StringUtils.isBlank(strAddressValue)) {
307 GenericAttributeErrortributes/business/GenericAttributeError.html#GenericAttributeError">GenericAttributeError error = new GenericAttributeError();
308
309 error.setMandatoryError(entry.isMandatory());
310 error.setTitleQuestion(entry.getTitle());
311 error.setErrorMessage(MESSAGE_SPECIFY_BOTH_X_AND_Y);
312
313 return error;
314 }
315 if (request.getSession().getAttribute(ATTRIBUTE_LAST_ITERATION_GEOLOCATION) != null) {
316 if (lastIterationGeolocation >= maxIterationGeolocation) {
317 request.getSession().removeAttribute(ATTRIBUTE_LAST_ITERATION_GEOLOCATION);
318 }
319 }
320 return super.getResponseData(entry, request, listResponse, locale);
321 }
322
323
324
325
326 @Override
327 public String getResponseValueForRecap( Entry entry, HttpServletRequest request, Response response, Locale locale )
328 {
329 if ( response.getField( ) != null )
330 {
331 String strCode = response.getField( ).getCode( );
332
333 if ( FIELD_ADDRESS.equals( strCode ) )
334 {
335 return response.getResponseValue( );
336 }
337 }
338
339 return StringUtils.EMPTY;
340 }
341
342
343
344
345
346
347 public List<IMapProvider> getMaproviders( )
348 {
349 return MapProviderManager.getMapProvidersList( );
350 }
351
352
353
354
355
356
357 public ReferenceList getMapProvidersRefList( )
358 {
359 ReferenceList refList = new ReferenceList( );
360
361 refList.addItem( StringUtils.EMPTY, StringUtils.EMPTY );
362
363 for ( IMapProvider mapProvider : MapProviderManager.getMapProvidersList( ) )
364 {
365 refList.add( mapProvider.toRefItem( ) );
366 }
367
368 return refList;
369 }
370
371
372
373
374
375
376 public ReferenceList getEditModeRefList( )
377 {
378 String strEditModeListProperty = AppPropertiesService.getProperty( PARAMETER_EDIT_MODE_LIST );
379 ReferenceList refList = new ReferenceList( );
380 refList.addItem( StringUtils.EMPTY, StringUtils.EMPTY );
381
382 if ( strEditModeListProperty != null )
383 {
384 String [ ] strEditModeListPropertyArray = strEditModeListProperty.split( "," );
385
386 for ( int i = 0; i < strEditModeListPropertyArray.length; i++ )
387 {
388 refList.addItem( strEditModeListPropertyArray [i], strEditModeListPropertyArray [i] );
389 }
390 }
391
392 return refList;
393 }
394
395
396
397
398
399 @Override
400 public String getResponseValueForExport( Entry entry, HttpServletRequest request, Response response, Locale locale )
401 {
402 String result = StringUtils.EMPTY;
403
404 boolean isExportWithFieldName = AppPropertiesService.getPropertyBoolean( PROPERTY_ENTRY_TYPE_GEOLOCALISATION_EXPORT_WITH_FIELD_NAME, true );
405
406 if ( isExportWithFieldName && response.getField( ) != null )
407 {
408 result = Objects.toString( response.getField( ).getCode( ) ) + GenericAttributesUtils.CONSTANT_EQUAL;
409 }
410 result += response.getResponseValue( );
411 return result;
412 }
413
414
415
416
417
418
419
420
421
422
423
424
425 private Field buildFieldMapProvider( Entry entry, String strMapProvider )
426 {
427 Fieldricattributes/business/Field.html#Field">Field fieldMapProvider = new Field( );
428 fieldMapProvider.setCode( FIELD_PROVIDER );
429
430 if ( StringUtils.isNotBlank( strMapProvider ) )
431 {
432 String strTrimedMapProvider = strMapProvider.trim( );
433 fieldMapProvider.setValue( strTrimedMapProvider );
434 }
435 else
436 {
437 fieldMapProvider.setValue( StringUtils.EMPTY );
438 }
439
440 fieldMapProvider.setParentEntry( entry );
441
442 return fieldMapProvider;
443 }
444 }