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.dansmarue.modules.rest.service;
35
36 import java.io.ByteArrayOutputStream;
37 import java.io.InputStream;
38 import java.text.SimpleDateFormat;
39 import java.time.Instant;
40 import java.time.LocalDate;
41 import java.time.ZoneOffset;
42 import java.time.format.DateTimeFormatter;
43 import java.time.format.DateTimeParseException;
44 import java.time.temporal.ChronoUnit;
45 import java.util.ArrayList;
46 import java.util.Calendar;
47 import java.util.Collection;
48 import java.util.Collections;
49 import java.util.Date;
50 import java.util.List;
51 import java.util.Locale;
52 import java.util.Map;
53 import java.util.Optional;
54
55 import javax.inject.Inject;
56 import javax.servlet.http.HttpServletRequest;
57
58 import org.apache.commons.codec.binary.Base64;
59 import org.apache.commons.io.IOUtils;
60 import org.apache.commons.lang.StringUtils;
61
62 import fr.paris.lutece.plugins.dansmarue.business.entities.Actualite;
63 import fr.paris.lutece.plugins.dansmarue.business.entities.Adresse;
64 import fr.paris.lutece.plugins.dansmarue.business.entities.Aide;
65 import fr.paris.lutece.plugins.dansmarue.business.entities.Arrondissement;
66 import fr.paris.lutece.plugins.dansmarue.business.entities.FeuilleDeTournee;
67 import fr.paris.lutece.plugins.dansmarue.business.entities.MessageTypologie;
68 import fr.paris.lutece.plugins.dansmarue.business.entities.NotificationSignalementUserMultiContents;
69 import fr.paris.lutece.plugins.dansmarue.business.entities.ObservationRejet;
70 import fr.paris.lutece.plugins.dansmarue.business.entities.Photo;
71 import fr.paris.lutece.plugins.dansmarue.business.entities.PhotoDMR;
72 import fr.paris.lutece.plugins.dansmarue.business.entities.Priorite;
73 import fr.paris.lutece.plugins.dansmarue.business.entities.Signalement;
74 import fr.paris.lutece.plugins.dansmarue.business.entities.SignalementGeoLoc;
75 import fr.paris.lutece.plugins.dansmarue.business.entities.Signaleur;
76 import fr.paris.lutece.plugins.dansmarue.business.entities.SiraUser;
77 import fr.paris.lutece.plugins.dansmarue.business.entities.Source;
78 import fr.paris.lutece.plugins.dansmarue.business.entities.TypeSignalement;
79 import fr.paris.lutece.plugins.dansmarue.business.exceptions.AlreadyFollowedException;
80 import fr.paris.lutece.plugins.dansmarue.business.exceptions.InvalidStateActionException;
81 import fr.paris.lutece.plugins.dansmarue.business.exceptions.NonExistentFollowItem;
82 import fr.paris.lutece.plugins.dansmarue.modules.rest.dto.SignalementRestDTO;
83 import fr.paris.lutece.plugins.dansmarue.modules.rest.pojo.ErrorSignalement;
84 import fr.paris.lutece.plugins.dansmarue.modules.rest.pojo.SignalementPOJO;
85 import fr.paris.lutece.plugins.dansmarue.modules.rest.pojo.SignalementsPOJO;
86 import fr.paris.lutece.plugins.dansmarue.modules.rest.service.formatters.CategoriesFormatterJson;
87 import fr.paris.lutece.plugins.dansmarue.modules.rest.service.formatters.ErrorSignalementFormatterJson;
88 import fr.paris.lutece.plugins.dansmarue.modules.rest.service.formatters.SignalementFormatterJson;
89 import fr.paris.lutece.plugins.dansmarue.modules.rest.service.formatters.SignalementRestDTOFormatterJson;
90 import fr.paris.lutece.plugins.dansmarue.modules.rest.util.StringUtilsDmr;
91 import fr.paris.lutece.plugins.dansmarue.modules.rest.util.constants.SignalementRestConstants;
92 import fr.paris.lutece.plugins.dansmarue.modules.rest.util.exception.ParseSignalementFromJSONException;
93 import fr.paris.lutece.plugins.dansmarue.service.IActualiteService;
94 import fr.paris.lutece.plugins.dansmarue.service.IAdresseService;
95 import fr.paris.lutece.plugins.dansmarue.service.IAideService;
96 import fr.paris.lutece.plugins.dansmarue.service.IArrondissementService;
97 import fr.paris.lutece.plugins.dansmarue.service.IFeuilleDeTourneeService;
98 import fr.paris.lutece.plugins.dansmarue.service.IMessageTypologieService;
99 import fr.paris.lutece.plugins.dansmarue.service.IObservationRejetService;
100 import fr.paris.lutece.plugins.dansmarue.service.IPhotoService;
101 import fr.paris.lutece.plugins.dansmarue.service.IPrioriteService;
102 import fr.paris.lutece.plugins.dansmarue.service.ISignalementExportService;
103 import fr.paris.lutece.plugins.dansmarue.service.ISignalementService;
104 import fr.paris.lutece.plugins.dansmarue.service.ISignaleurService;
105 import fr.paris.lutece.plugins.dansmarue.service.ISiraUserService;
106 import fr.paris.lutece.plugins.dansmarue.service.ITypeSignalementService;
107 import fr.paris.lutece.plugins.dansmarue.service.IWorkflowService;
108 import fr.paris.lutece.plugins.dansmarue.service.dto.DossierSignalementDTO;
109 import fr.paris.lutece.plugins.dansmarue.service.dto.TypeSignalementDTO;
110 import fr.paris.lutece.plugins.dansmarue.service.output.SignalementOutputPrcessor;
111 import fr.paris.lutece.plugins.dansmarue.util.constants.DateConstants;
112 import fr.paris.lutece.plugins.dansmarue.util.constants.SignalementConstants;
113 import fr.paris.lutece.plugins.dansmarue.utils.IDateUtils;
114 import fr.paris.lutece.plugins.dansmarue.utils.ImgUtils;
115 import fr.paris.lutece.plugins.identitystore.v1.web.rs.dto.IdentityDto;
116 import fr.paris.lutece.plugins.identitystore.v1.web.service.IdentityService;
117 import fr.paris.lutece.plugins.identitystore.web.exception.IdentityNotFoundException;
118 import fr.paris.lutece.plugins.identitystore.web.exception.IdentityStoreException;
119 import fr.paris.lutece.plugins.leaflet.modules.dansmarue.entities.Address;
120 import fr.paris.lutece.plugins.leaflet.modules.dansmarue.service.IAddressSuggestPOIService;
121 import fr.paris.lutece.plugins.rest.service.formatters.IFormatter;
122 import fr.paris.lutece.plugins.unittree.modules.dansmarue.business.sector.Sector;
123 import fr.paris.lutece.plugins.workflowcore.business.action.Action;
124 import fr.paris.lutece.plugins.workflowcore.business.action.ActionFilter;
125 import fr.paris.lutece.plugins.workflowcore.business.state.State;
126 import fr.paris.lutece.plugins.workflowcore.service.action.IActionService;
127 import fr.paris.lutece.plugins.workflowcore.service.state.IStateService;
128 import fr.paris.lutece.plugins.workflowcore.service.task.ITask;
129 import fr.paris.lutece.plugins.workflowcore.service.task.ITaskService;
130 import fr.paris.lutece.portal.business.user.AdminUser;
131 import fr.paris.lutece.portal.service.datastore.DatastoreService;
132 import fr.paris.lutece.portal.service.i18n.I18nService;
133 import fr.paris.lutece.portal.service.image.ImageResource;
134 import fr.paris.lutece.portal.service.spring.SpringContextService;
135 import fr.paris.lutece.portal.service.util.AppLogService;
136 import fr.paris.lutece.portal.service.util.AppPropertiesService;
137 import fr.paris.lutece.portal.service.workflow.WorkflowService;
138 import fr.paris.lutece.util.image.ImageUtil;
139 import net.sf.json.JSONArray;
140 import net.sf.json.JSONException;
141 import net.sf.json.JSONObject;
142 import net.sf.json.JSONSerializer;
143
144
145
146
147 public class SignalementRestService implements ISignalementRestService
148 {
149
150
151 private static final String PARAMETER_NULL = "null";
152
153
154
155 @Inject
156 private ISignalementService _signalementService;
157
158
159 @Inject
160 private IAdresseService _adresseService;
161
162
163 @Inject
164 private IArrondissementService _arrondissementService;
165
166
167 @Inject
168 private IPhotoService _photoService;
169
170
171 @Inject
172 private ISignaleurService _signaleurService;
173
174
175 @Inject
176 private IWorkflowService _signalementWorkflowService;
177
178
179 @Inject
180 private IObservationRejetService _observationRejetService;
181
182
183 @Inject
184 private ITypeSignalementService _typeSignalementService;
185
186
187 @Inject
188 private IPrioriteService _prioriteService;
189
190
191 @Inject
192 private ManageSignalementService _manageSignalementService;
193
194
195 @Inject
196 private ISiraUserService _siraUserService;
197
198
199 @Inject
200 private ITaskService _taskService;
201
202
203 @Inject
204 private IActionService _actionService;
205
206
207 @Inject
208 private IStateService _stateService;
209
210
211 @Inject
212 private IAddressSuggestPOIService _addressSuggestPOIService;
213
214
215 @Inject
216 private IMessageTypologieService _messageTypologieService;
217
218
219 @Inject
220 private IActualiteService _actualiteService;
221
222
223 @Inject
224 private IAideService _aideService;
225
226
227 @Inject
228 private IFeuilleDeTourneeService _feuilleTourneeService;
229
230
231 @Inject
232 private ISignalementExportService _signalementExportService;
233
234
235
236 @Inject
237 private IDateUtils _dateUtils;
238
239
240 private static final String PARAMETER_WEBSERVICE_COMMENT_VALUE = "webservice_comment_value";
241
242
243 private static final String ID_STATE_ETAT_INITIAL = "signalement.idStateEtatInitial";
244
245
246 private static final String PARAMETER_WEBSERVICE_CHOSEN_MESSAGE = "chosenMessage";
247
248
249 private static final String PARAMETER_WEBSERVICE_EMAIL_ACTEUR = "emailActeur";
250
251
252 private static final String PARAMETER_WEBSERVICE_IS_MESSAGE_TYPO = "isMessageTypo";
253
254
255 private static final String BASE_64 = ";base64,";
256
257
258
259
260 @Override
261 public String processResquestAnswer( String strRequest, HttpServletRequest request ) throws ParseSignalementFromJSONException
262 {
263 IFormatter<ErrorSignalement> formatterJson = new ErrorSignalementFormatterJson( );
264
265 try
266 {
267 JSONArray jsonArray = (JSONArray) JSONSerializer.toJSON( strRequest );
268 JSONObject json = jsonArray.getJSONObject( 0 );
269 String strRequestType = json.getString( SignalementRestConstants.JSON_TAG_REQUEST );
270 AppLogService.debug( "module-signalement-rest processResquestAnswer" + strRequestType );
271 String strRespons;
272
273 if ( strRequestType.equals( SignalementRestConstants.REQUEST_TYPE_INCIDENT_STATS ) )
274 {
275 strRespons = getIncidentStats( json, request );
276 }
277 else
278 if ( strRequestType.equals( SignalementRestConstants.REQUEST_TYPE_INCIDENTS_BY_ID ) )
279 {
280 strRespons = getIncidentsById( json );
281 }
282 else
283 if ( strRequestType.equals( SignalementRestConstants.REQUEST_TYPE_INCIDENT_BY_POSITION ) )
284 {
285 strRespons = getIncidentsByPosition( json );
286 }
287 else
288 if ( strRequestType.equals( SignalementRestConstants.REQUEST_TYPE_SAVE_INCIDENT ) )
289 {
290 strRespons = saveIncident( json );
291 }
292 else
293 if ( strRequestType.equals( SignalementRestConstants.REQUEST_TYPE_REPORTS ) )
294 {
295 strRespons = getReports( json );
296 }
297 else
298 if ( strRequestType.equals( SignalementRestConstants.REQUEST_TYPE_UPDATE_INCIDENT ) )
299 {
300 strRespons = updateIncident( json, request );
301 }
302 else
303 if ( strRequestType.equals( SignalementRestConstants.REQUEST_TYPE_USER_ACTIVITIES ) )
304 {
305 strRespons = getUsersActivities( json );
306 }
307 else
308 if ( strRequestType.equals( SignalementRestConstants.REQUEST_TYPE_CHANGE_INCIDENT ) )
309 {
310 strRespons = changeIncident( json );
311 }
312 else
313 if ( strRequestType.equals( SignalementRestConstants.REQUEST_TYPE_INCIDENT_PHOTOS ) )
314 {
315 strRespons = getIncidentPhotos( json );
316 }
317 else
318 if ( strRequestType.equals( SignalementRestConstants.REQUEST_TYPE_CATEGORIES_LIST ) )
319 {
320 strRespons = getCategoriesList( json );
321 }
322 else
323 if ( strRequestType.equals( SignalementRestConstants.REQUEST_TYPE_CHANGE_STATUS ) )
324 {
325 strRespons = changeStatus( json, request );
326 }
327 else
328 if ( strRequestType.equals( SignalementRestConstants.REQUEST_TYPE_ADD_ANOMALIE ) )
329 {
330 strRespons = addAnomalie( json );
331 }
332 else
333 if ( strRequestType.equals( SignalementRestConstants.REQUEST_TYPE_CONGRATULATE_ANOMALIE ) )
334 {
335 strRespons = congratulateAnomalie( json );
336 }
337 else
338 if ( strRequestType.equals( SignalementRestConstants.REQUEST_TYPE_INCIDENT_RESOLVED ) )
339 {
340 strRespons = setIncidentResolved( json, request );
341 }
342 else
343 if ( strRequestType.equals( SignalementRestConstants.REQUEST_TYPE_FOLLOW ) )
344 {
345 strRespons = addFollower( json );
346 }
347 else
348 if ( strRequestType.equals( SignalementRestConstants.REQUEST_TYPE_UNFOLLOW ) )
349 {
350 strRespons = removeFollower( json );
351 }
352 else
353 if ( strRequestType
354 .equals( SignalementRestConstants.REQUEST_TYPE_GET_INCIDENTS_BY_USER ) )
355 {
356 strRespons = getIncidentsByUser( json );
357 }
358 else
359 if ( strRequestType
360 .equals( SignalementRestConstants.REQUEST_TYPE_PROCESS_WORKFLOW ) )
361 {
362 strRespons = processWorkflow( json );
363 }
364 else
365 if ( strRequestType
366 .equals( SignalementRestConstants.REQUEST_TYPE_CHECK_VERSION ) )
367 {
368 strRespons = checkVersion( );
369 }
370 else
371 if ( strRequestType
372 .equals( SignalementRestConstants.REQUEST_TYPE_SAVE_PRECISIONS_TERRAIN ) )
373 {
374 strRespons = savePrecisionsTerrain( json );
375 }
376 else
377 if ( strRequestType
378 .equals( SignalementRestConstants.REQUEST_TYPE_SAVE_INFO_APRES_TOURNEE ) )
379 {
380 strRespons = saveInfoApresTournee( json );
381 }
382 else
383 {
384 ErrorSignalementansmarue/modules/rest/pojo/ErrorSignalement.html#ErrorSignalement">ErrorSignalement error = new ErrorSignalement( );
385 error.setErrorCode( SignalementRestConstants.ERROR_BAD_JSON_REQUEST );
386 error.setErrorMessage( StringUtils.EMPTY );
387
388 return formatterJson.format( error );
389 }
390
391 JSONArray jsonArrayRespons = new JSONArray( );
392 jsonArrayRespons.element( strRespons );
393
394 return jsonArrayRespons.toString( );
395 }
396 catch( JSONException e )
397 {
398 AppLogService.info( request.getHeader( "host" ) );
399 AppLogService.info( request.getHeader( "user-agent" ) );
400 AppLogService.info( request.getHeader( "origin" ) );
401 AppLogService.info( strRequest );
402 AppLogService.error( e.getMessage( ), e );
403
404 ErrorSignalementansmarue/modules/rest/pojo/ErrorSignalement.html#ErrorSignalement">ErrorSignalement error = new ErrorSignalement( );
405 error.setErrorCode( SignalementRestConstants.ERROR_BAD_JSON_REQUEST );
406 error.setErrorMessage( e.getMessage( ) );
407
408 return formatterJson.format( error );
409 }
410 }
411
412
413
414
415 @Override
416 public String getIncidentStats( JSONObject jsonSrc, HttpServletRequest request )
417 {
418 IFormatter<ErrorSignalement> formatterJsonError = new ErrorSignalementFormatterJson( );
419
420 _signalementService = SpringContextService.getBean( SignalementRestConstants.PARAMETER_SIGNALEMENT_SERVICE_BEAN );
421 _signalementWorkflowService = SpringContextService.getBean( SignalementRestConstants.PARAMETER_SIGNALEMENT_WORKFLOW_BEAN );
422
423 JSONObject jsonPosition = jsonSrc.getJSONObject( SignalementRestConstants.JSON_TAG_POSITION );
424 String strLatitude = jsonPosition.getString( SignalementRestConstants.JSON_TAG_LATITUDE );
425 String strLongitude = jsonPosition.getString( SignalementRestConstants.JSON_TAG_LONGITUDE );
426 String strRadius = AppPropertiesService.getProperty( SignalementRestConstants.PROPERTY_RADIUS );
427
428 if ( StringUtils.isBlank( strLatitude ) || StringUtils.isBlank( strLongitude ) || StringUtils.isBlank( strRadius ) )
429 {
430 ErrorSignalementansmarue/modules/rest/pojo/ErrorSignalement.html#ErrorSignalement">ErrorSignalement error = new ErrorSignalement( );
431 error.setErrorCode( SignalementRestConstants.ERROR_EMPTY_POSITION_PARAMETER );
432 error.setErrorMessage( StringUtils.EMPTY );
433
434 return formatterJsonError.format( error );
435 }
436
437 JSONObject jsonAnswer = new JSONObject( );
438 jsonAnswer.accumulate( SignalementRestConstants.JSON_TAG_REQUEST, SignalementRestConstants.REQUEST_TYPE_INCIDENT_STATS );
439
440 JSONObject json = new JSONObject( );
441
442 json.accumulate( SignalementRestConstants.JSON_TAG_STATUS, 0 );
443
444 List<Signalement> listSignalement = _signalementService.findAllSignalementInPerimeterWithInfo( Double.parseDouble( strLatitude ),
445 Double.parseDouble( strLongitude ), Integer.valueOf( strRadius ), StringUtils.EMPTY );
446
447 AppLogService.info( "module-signalement-rest getIncidentStats" );
448 int nOnGoingIncidents = 0;
449 int nResolvedIncidents = 0;
450 int nUpdatedIncidents = 0;
451
452
453 WorkflowService workflowService = WorkflowService.getInstance( );
454
455 if ( workflowService.isAvailable( ) )
456 {
457
458 Integer workflowId = _signalementWorkflowService.getSignalementWorkflowId( );
459
460 if ( workflowId != null )
461 {
462 classifiedByState( listSignalement, listSignalement, listSignalement, workflowService, workflowId, listSignalement );
463 }
464 }
465
466 json.accumulate( SignalementRestConstants.JSON_TAG_ONGOING_INCIDENTS, nOnGoingIncidents );
467 json.accumulate( SignalementRestConstants.JSON_TAG_RESOLVED_INCIDENTS, nResolvedIncidents );
468 json.accumulate( SignalementRestConstants.JSON_TAG_UPDATED_INCIDENTS, nUpdatedIncidents );
469
470 jsonAnswer.accumulate( SignalementRestConstants.JSON_TAG_ANSWER, json );
471
472 return jsonAnswer.toString( );
473 }
474
475 private void classifiedByState( List<Signalement> listDeclaredIncidents, List<Signalement> listResolvedIncidents, List<Signalement> listUpdatedIncidents,
476 WorkflowService workflowService, Integer workflowId, List<Signalement> listSignalement )
477 {
478
479 for ( Signalement signalement : listSignalement )
480 {
481 State state = workflowService.getState( signalement.getId( ).intValue( ), Signalement.WORKFLOW_RESOURCE_TYPE, workflowId, null );
482
483 int nStateId = state.getId( );
484
485 switch( nStateId )
486 {
487 case 7:
488 listDeclaredIncidents.add( signalement );
489
490 break;
491
492 case 8:
493 listUpdatedIncidents.add( signalement );
494
495 break;
496
497 case 9:
498 listUpdatedIncidents.add( signalement );
499
500 break;
501
502 case 10:
503 listResolvedIncidents.add( signalement );
504
505 break;
506
507 case 11:
508 break;
509
510 case 12:
511 listResolvedIncidents.add( signalement );
512
513 break;
514
515 case 13:
516 listDeclaredIncidents.add( signalement );
517
518 break;
519
520 default:
521 break;
522 }
523 }
524
525 }
526
527
528
529
530 @Override
531 public String savePrecisionsTerrain( JSONObject jsonSrc ){
532
533 Long nIdSignalement = jsonSrc.getLong( SignalementRestConstants.JSON_TAG_SIGNALEMENT_ID );
534 String strPrecisionTerrain = jsonSrc.getString( SignalementRestConstants.JSON_TAG_INCIDENT_PRECISION_TERRAIN );
535
536 _signalementService = SpringContextService.getBean( SignalementRestConstants.PARAMETER_SIGNALEMENT_SERVICE_BEAN );
537
538 IFormatter<ErrorSignalement> formatterJsonError = new ErrorSignalementFormatterJson( );
539
540 JSONObject jsonAnswer = new JSONObject( );
541 jsonAnswer.accumulate( SignalementRestConstants.JSON_TAG_REQUEST, SignalementRestConstants.REQUEST_TYPE_SAVE_PRECISIONS_TERRAIN );
542
543 JSONObject json = new JSONObject( );
544 json.accumulate( SignalementRestConstants.JSON_TAG_STATUS, 0 );
545
546 if ( StringUtils.isBlank( strPrecisionTerrain ) )
547 {
548 ErrorSignalementansmarue/modules/rest/pojo/ErrorSignalement.html#ErrorSignalement">ErrorSignalement error = new ErrorSignalement( );
549 error.setErrorCode( SignalementRestConstants.ERROR_EMPTY_INCIDENT_PRECISION_TERRAIN );
550 error.setErrorMessage( StringUtils.EMPTY );
551
552 return formatterJsonError.format( error );
553 }
554
555
556 Signalement signalement = _signalementService.loadById( nIdSignalement );
557
558
559 if ( signalement == null )
560 {
561 ErrorSignalementansmarue/modules/rest/pojo/ErrorSignalement.html#ErrorSignalement">ErrorSignalement error = new ErrorSignalement( );
562 error.setErrorCode( SignalementRestConstants.ERROR_GET_SIGNALEMENT_BY_ID );
563 error.setErrorMessage( AppPropertiesService.getProperty( SignalementRestConstants.ERROR_GET_SIG_BY_ID_NOT_FOUND ) );
564
565 return formatterJsonError.format( error );
566 }
567
568 jsonAnswer.accumulate( SignalementRestConstants.JSON_TAG_ANSWER, json );
569
570 signalement.setPrecisionTerrain( strPrecisionTerrain );
571 _signalementService.update( signalement );
572
573 return jsonAnswer.toString( );
574 }
575
576
577
578
579 @Override
580 public String saveInfoApresTournee( JSONObject jsonSrc ){
581
582 Integer nIdFdt = jsonSrc.getInt( SignalementRestConstants.JSON_TAG_FDT_ID );
583 String strInfoApresTournee = jsonSrc.getString( SignalementRestConstants.JSON_TAG_FDT_INFO_APRES_TOURNEE );
584
585 _feuilleTourneeService = SpringContextService.getBean( SignalementRestConstants.PARAMETER_FDT_SERVICE_BEAN );
586
587 IFormatter<ErrorSignalement> formatterJsonError = new ErrorSignalementFormatterJson( );
588
589 JSONObject jsonAnswer = new JSONObject( );
590 jsonAnswer.accumulate( SignalementRestConstants.JSON_TAG_REQUEST, SignalementRestConstants.REQUEST_TYPE_SAVE_INFO_APRES_TOURNEE );
591
592 JSONObject json = new JSONObject( );
593 json.accumulate( SignalementRestConstants.JSON_TAG_STATUS, 0 );
594
595 if ( StringUtils.isBlank( strInfoApresTournee ) )
596 {
597 ErrorSignalementansmarue/modules/rest/pojo/ErrorSignalement.html#ErrorSignalement">ErrorSignalement error = new ErrorSignalement( );
598 error.setErrorCode( SignalementRestConstants.ERROR_EMPTY_INCIDENT_PRECISION_TERRAIN );
599 error.setErrorMessage( StringUtils.EMPTY );
600
601 return formatterJsonError.format( error );
602 }
603
604
605 FeuilleDeTournee feuilleDeTournee = _feuilleTourneeService.load( nIdFdt );
606
607
608 if ( feuilleDeTournee == null )
609 {
610 ErrorSignalementansmarue/modules/rest/pojo/ErrorSignalement.html#ErrorSignalement">ErrorSignalement error = new ErrorSignalement( );
611 error.setErrorCode( SignalementRestConstants.ERROR_GET_FDT_BY_ID );
612 error.setErrorMessage( AppPropertiesService.getProperty( SignalementRestConstants.ERROR_GET_FDT_BY_ID_NOT_FOUND ) );
613
614 return formatterJsonError.format( error );
615 }
616
617 jsonAnswer.accumulate( SignalementRestConstants.JSON_TAG_ANSWER, json );
618
619 feuilleDeTournee.setInfoApresTournee( strInfoApresTournee );
620 _feuilleTourneeService.update( feuilleDeTournee );
621
622 return jsonAnswer.toString( );
623 }
624
625
626
627
628 @Override
629 public String getIncidentsById( JSONObject jsonSrc )
630 {
631 _signalementService = SpringContextService.getBean( SignalementRestConstants.PARAMETER_SIGNALEMENT_SERVICE_BEAN );
632
633 IFormatter<ErrorSignalement> formatterJsonError = new ErrorSignalementFormatterJson( );
634
635 String strIncidentId = jsonSrc.getString( SignalementRestConstants.JSON_TAG_INCIDENT_ID );
636
637 if ( StringUtils.isBlank( strIncidentId ) )
638 {
639 ErrorSignalementansmarue/modules/rest/pojo/ErrorSignalement.html#ErrorSignalement">ErrorSignalement error = new ErrorSignalement( );
640 error.setErrorCode( SignalementRestConstants.ERROR_EMPTY_INCIDENT_ID_BIS );
641 error.setErrorMessage( StringUtils.EMPTY );
642
643 return formatterJsonError.format( error );
644 }
645
646 String source = jsonSrc.getString( SignalementRestConstants.JSON_TAG_INCIDENT_SOURCE );
647 String sourceDMR = AppPropertiesService.getProperty( SignalementRestConstants.PROPERTY_INCIDENT_SOURCE_DMR );
648 String sourceRamen = AppPropertiesService.getProperty( SignalementRestConstants.PROPERTY_INCIDENT_SOURCE_RAMEN );
649 if ( !StringUtils.equals( source, sourceDMR ) && !StringUtils.equals( source, sourceRamen ) )
650 {
651 ErrorSignalementansmarue/modules/rest/pojo/ErrorSignalement.html#ErrorSignalement">ErrorSignalement error = new ErrorSignalement( );
652 error.setErrorCode( SignalementRestConstants.ERROR_BAD_SOURCE );
653 error.setErrorMessage( "Source " + source + " du signalement inconnue. " );
654 AppLogService.error( "Source " + source + " du signalement inconnue. " );
655 return formatterJsonError.format( error );
656 }
657
658 JSONObject jsonAnswer = new JSONObject( );
659 jsonAnswer.accumulate( SignalementRestConstants.JSON_TAG_REQUEST, SignalementRestConstants.REQUEST_TYPE_INCIDENTS_BY_ID );
660
661 JSONObject json = new JSONObject( );
662 json.accumulate( SignalementRestConstants.JSON_TAG_STATUS, 0 );
663
664 Signalement signalement = _signalementService.getSignalement( Long.parseLong( strIncidentId ) );
665
666 if ( signalement == null )
667 {
668 ErrorSignalementansmarue/modules/rest/pojo/ErrorSignalement.html#ErrorSignalement">ErrorSignalement error = new ErrorSignalement( );
669 error.setErrorCode( SignalementRestConstants.ERROR_BAD_INCIDENT_ID_BIS );
670 error.setErrorMessage( StringUtils.EMPTY );
671
672 return formatterJsonError.format( error );
673 }
674
675
676 String guid = StringUtils.EMPTY;
677 try
678 {
679 guid = jsonSrc.getString( SignalementRestConstants.JSON_TAG_GUID );
680 }
681 catch( Exception e )
682 {
683 AppLogService.error( e );
684 }
685
686 SignalementFormatterJson/rest/service/formatters/SignalementFormatterJson.html#SignalementFormatterJson">SignalementFormatterJson formatterJson = new SignalementFormatterJson( );
687 if ( !StringUtils.isBlank( guid ) )
688 {
689 formatterJson.setFormatWithGuid( guid );
690 }
691
692 json.accumulate( SignalementRestConstants.JSON_TAG_INCIDENT, formatterJson.format( signalement ) );
693
694 List<Signaleur> signaleurs = signalement.getSignaleurs( );
695
696 boolean signaleurFound = false;
697
698 for ( Signaleur signaleur : signaleurs )
699 {
700 if ( StringUtils.isNotBlank( guid ) && guid.equals( signaleur.getGuid( ) ) )
701 {
702 signaleurFound = true;
703 }
704 }
705
706 if ( !StringUtils.EMPTY.equals( guid ) )
707 {
708 json.accumulate( SignalementRestConstants.JSON_TAG_RESOLVED_AUTHORIZATION,
709 signaleurFound || StringUtilsDmr.endsWithAny( getIdentityStoreAttributeValue( guid, "login" ).toLowerCase( ), getEmailDomainAccept( ) ) );
710 }
711 else
712 {
713 json.accumulate( SignalementRestConstants.JSON_TAG_RESOLVED_AUTHORIZATION, false );
714 }
715
716 json.accumulate( SignalementRestConstants.JSON_TAG_MESSAGE_SF_GENERIC, getMessageServiceFaitGeneric( signalement.getId( ) ) );
717
718 json.accumulate( SignalementRestConstants.JSON_TAG_MESSAGE_SF_TYPOLOGIE, getMessageServiceFaitTypologie( signalement.getTypeSignalement( ).getId( ) ) );
719
720
721
722 jsonAnswer.accumulate( SignalementRestConstants.JSON_TAG_ANSWER, json );
723
724 return jsonAnswer.toString( );
725 }
726
727
728
729
730 @Override
731 @SuppressWarnings( "static-access" )
732 public String getIncidentsByPosition( JSONObject jsonSrc )
733 {
734 _signalementService = SpringContextService.getBean( SignalementRestConstants.PARAMETER_SIGNALEMENT_SERVICE_BEAN );
735
736 IFormatter<ErrorSignalement> formatterJsonError = new ErrorSignalementFormatterJson( );
737
738 JSONObject jsonAnswer = new JSONObject( );
739 jsonAnswer.accumulate( SignalementRestConstants.JSON_TAG_REQUEST, SignalementRestConstants.REQUEST_TYPE_INCIDENT_BY_POSITION );
740
741 JSONObject json = new JSONObject( );
742 json.accumulate( SignalementRestConstants.JSON_TAG_STATUS, 0 );
743
744 JSONObject jsonPosition = jsonSrc.getJSONObject( SignalementRestConstants.JSON_TAG_POSITION );
745 String strLatitude = jsonPosition.getString( SignalementRestConstants.JSON_TAG_LATITUDE );
746 String strLongitude = jsonPosition.getString( SignalementRestConstants.JSON_TAG_LONGITUDE );
747 String strRadius = AppPropertiesService.getProperty( SignalementRestConstants.PROPERTY_RADIUS );
748 String guid = jsonSrc.has( SignalementRestConstants.JSON_TAG_GUID ) ? jsonSrc.getString( SignalementRestConstants.JSON_TAG_GUID ) : null;
749
750
751 String specificSignalementNumberSearch = jsonSrc.has( SignalementRestConstants.JSON_TAG_SEARCH_BY_NUMBER )
752 ? jsonSrc.getString( SignalementRestConstants.JSON_TAG_SEARCH_BY_NUMBER )
753 : StringUtils.EMPTY;
754
755 if ( StringUtils.isBlank( strLatitude ) || StringUtils.isBlank( strLongitude ) || StringUtils.isBlank( strRadius ) )
756 {
757 ErrorSignalementansmarue/modules/rest/pojo/ErrorSignalement.html#ErrorSignalement">ErrorSignalement error = new ErrorSignalement( );
758 error.setErrorCode( SignalementRestConstants.ERROR_EMPTY_POSITION_PARAMETER );
759 error.setErrorMessage( StringUtils.EMPTY );
760
761 return formatterJsonError.format( error );
762 }
763
764 List<Signalement> listSignalement = _signalementService.findAllSignalementInPerimeterWithInfo( Double.parseDouble( strLatitude ),
765 Double.parseDouble( strLongitude ), Integer.valueOf( strRadius ), specificSignalementNumberSearch );
766
767 List<Signalement> listSignalementSorted = getSignalementListSorted( Double.parseDouble( strLatitude ), Double.parseDouble( strLongitude ),
768 listSignalement );
769
770 SignalementFormatterJson/rest/service/formatters/SignalementFormatterJson.html#SignalementFormatterJson">SignalementFormatterJson formatterJson = new SignalementFormatterJson( );
771 if ( !StringUtils.isBlank( guid ) )
772 {
773 formatterJson.setFormatWithGuid( guid );
774 }
775
776 JSONArray jsonArray = (JSONArray) JSONSerializer.toJSON( formatterJson.format( listSignalementSorted ) );
777
778 json.accumulate( SignalementRestConstants.JSON_TAG_CLOSEST_INCIDENTS, jsonArray.toString( ) );
779
780 jsonAnswer.accumulate( SignalementRestConstants.JSON_TAG_ANSWER, json );
781
782 return jsonAnswer.toString( );
783 }
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801 public Signalement parseSignalement( JSONObject jsonSrc, Signalement signalement, Signaleur signaleur, Adresse adresse )
802 throws ParseSignalementFromJSONException
803 {
804 IFormatter<ErrorSignalement> formatterJson = new ErrorSignalementFormatterJson( );
805 String strUDID = jsonSrc.getString( SignalementRestConstants.JSON_TAG_UDID );
806 String strEmail = StringUtils.EMPTY;
807 try
808 {
809 strEmail = jsonSrc.getString( SignalementRestConstants.JSON_TAG_EMAIL );
810 }
811 catch( Exception e )
812 {
813 AppLogService.error( e );
814 strEmail = AppPropertiesService.getProperty( SignalementRestConstants.PROPERTY_DEFAULT_EMAIL, "lutece@lutece.fr" );
815 }
816
817 String guid = StringUtils.EMPTY;
818 try
819 {
820 guid = jsonSrc.getString( SignalementRestConstants.JSON_TAG_GUID );
821 }
822 catch( Exception e )
823 {
824 AppLogService.error( e );
825 }
826
827 if ( StringUtils.isBlank( strUDID ) )
828 {
829 ErrorSignalementansmarue/modules/rest/pojo/ErrorSignalement.html#ErrorSignalement">ErrorSignalement error = new ErrorSignalement( );
830 error.setErrorCode( SignalementRestConstants.ERROR_BAD_USER_ID );
831 error.setErrorMessage( StringUtils.EMPTY );
832
833 throw new ParseSignalementFromJSONException( formatterJson.format( error ) );
834 }
835 JSONObject jsonIncident = jsonSrc.getJSONObject( SignalementRestConstants.JSON_TAG_INCIDENT );
836 String strCategoryId = jsonIncident.getString( SignalementRestConstants.JSON_TAG_INCIDENT_CATEGORIE_ID );
837 String strAddress = jsonIncident.getString( SignalementRestConstants.JSON_TAG_INCIDENT_ADDRESS );
838 String strDescriptive = jsonIncident.getString( SignalementRestConstants.JSON_TAG_INCIDENT_DESCRIPTIVE );
839 String strCommentaireAgentTerrain = getStringIfExist( jsonIncident, SignalementRestConstants.JSON_TAG_INCIDENT_COMMENTAIRE_AGENT );
840 long lIdPriorite = jsonIncident.getLong( SignalementRestConstants.JSON_TAG_INCIDENT_PRIORITE_ID );
841 AppLogService.info( "saveIncident, lIdPriorite " + lIdPriorite );
842
843 JSONObject jsonPosition = jsonSrc.getJSONObject( SignalementRestConstants.JSON_TAG_POSITION );
844 String strLatitude = jsonPosition.getString( SignalementRestConstants.JSON_TAG_LATITUDE );
845 String strLongitude = jsonPosition.getString( SignalementRestConstants.JSON_TAG_LONGITUDE );
846
847 if ( StringUtils.isBlank( strLatitude ) && StringUtils.isBlank( strLongitude ) )
848 {
849 ErrorSignalementansmarue/modules/rest/pojo/ErrorSignalement.html#ErrorSignalement">ErrorSignalement error = new ErrorSignalement( );
850 error.setErrorCode( SignalementRestConstants.ERROR_EMPTY_POSITION_PARAMETER );
851 error.setErrorMessage( StringUtils.EMPTY );
852
853 throw new ParseSignalementFromJSONException( formatterJson.format( error ) );
854 }
855
856
857 if ( StringUtils.isBlank( strCategoryId ) )
858 {
859 ErrorSignalementansmarue/modules/rest/pojo/ErrorSignalement.html#ErrorSignalement">ErrorSignalement error = new ErrorSignalement( );
860 error.setErrorCode( SignalementRestConstants.ERROR_EMPTY_CATEGORY_ID_PARAMETER );
861 error.setErrorMessage( StringUtils.EMPTY );
862
863 throw new ParseSignalementFromJSONException( formatterJson.format( error ) );
864 }
865
866 TypeSignalement typeSignalement = _typeSignalementService.findByIdTypeSignalement( Integer.parseInt( strCategoryId ) );
867
868 if ( typeSignalement == null )
869 {
870 AppLogService.error( "saveIncident, aucune catégorie trouvé pour l'strCategoryId = " + strCategoryId );
871 ErrorSignalementansmarue/modules/rest/pojo/ErrorSignalement.html#ErrorSignalement">ErrorSignalement error = new ErrorSignalement( );
872 error.setErrorCode( SignalementRestConstants.ERROR_BAD_CATEGORY_ID_PARAMETER );
873 error.setErrorMessage( "aucune catégorie trouvé pour l'strCategoryId = " + strCategoryId );
874
875 throw new ParseSignalementFromJSONException( formatterJson.format( error ) );
876 }
877 AppLogService.info( "saveIncident, category found " + typeSignalement.getFormatTypeSignalement( ) );
878
879 signalement.setTypeSignalement( typeSignalement );
880
881
882 signalement.setCommentaire( strDescriptive );
883
884
885 signalement.setCommentaireAgentTerrain( strCommentaireAgentTerrain );
886
887
888 signalement.setSuivi( 0 );
889
890
891 Priorite priorite = _prioriteService.load( lIdPriorite );
892 if ( priorite == null )
893 {
894 AppLogService.error( "saveIncident, no priorite founded " );
895 priorite = new Priorite( );
896 priorite.setId( 1 );
897 }
898 signalement.setPriorite( priorite );
899 AppLogService.info( "saveIncident, priorite found " + priorite.getLibelle( ) );
900
901
902 Arrondissement arrondissementByGeom = _adresseService.getArrondissementByGeom( Double.parseDouble( strLongitude ), Double.parseDouble( strLatitude ) );
903 if ( arrondissementByGeom == null )
904 {
905 ErrorSignalementansmarue/modules/rest/pojo/ErrorSignalement.html#ErrorSignalement">ErrorSignalement error = new ErrorSignalement( );
906 error.setErrorCode( SignalementRestConstants.ERROR_BAD_POSITION_PARAMETER );
907 error.setErrorMessage( "l'arrondissement n'est pas trouvé pour cette latitude et longitude. Etes vous bien dans Paris ? lat,lng : " + strLatitude
908 + "," + strLongitude );
909
910 throw new ParseSignalementFromJSONException( formatterJson.format( error ) );
911 }
912 signalement.setArrondissement( arrondissementByGeom );
913 AppLogService.info( "saveIncident, arrondissementByGeom found " + arrondissementByGeom.getNumero( ) );
914
915
916 Sector secteur = _adresseService.getSecteurByGeomAndTypeSignalement( Double.parseDouble( strLongitude ), Double.parseDouble( strLatitude ),
917 Integer.parseInt( strCategoryId ) );
918 if ( secteur == null )
919 {
920 ErrorSignalementansmarue/modules/rest/pojo/ErrorSignalement.html#ErrorSignalement">ErrorSignalement error = new ErrorSignalement( );
921 error.setErrorCode( SignalementRestConstants.ERROR_BAD_POSITION_PARAMETER );
922 error.setErrorMessage(
923 "le secteur auquel attribuer cette anomalie n'a pas été trouvé. Si vous êtes bien dans Paris, il s'agit d'un problème de configuration du serveur. lat,lng,cat : "
924 + strLatitude + "," + strLongitude + "," + strCategoryId );
925 AppLogService.error(
926 "le secteur auquel attribuer ce message n'a pas été trouvé. Si vous êtes bien dans Paris, il s'agit d'un problème de configuration du serveur. lat,lng,cat : "
927 + strLatitude + "," + strLongitude + "," + strCategoryId );
928
929 throw new ParseSignalementFromJSONException( formatterJson.format( error ) );
930 }
931
932 signalement.setSecteur( secteur );
933
934
935 SimpleDateFormat sdfDate = new SimpleDateFormat( DateConstants.DATE_FR );
936 String strCurrentDate = sdfDate.format( Calendar.getInstance( ).getTime( ) );
937 signalement.setDateCreation( strCurrentDate );
938
939
940 Date dateDay = _dateUtils.getDate( signalement.getDateCreation( ), false );
941 int moisSignalement = _dateUtils.getMoisInt( dateDay );
942 String strAnnee = _dateUtils.getAnnee( Calendar.getInstance( ).getTime( ) );
943 signalement.setAnnee( Integer.parseInt( strAnnee ) );
944 signalement.setMois( _signalementService.getLetterByMonth( moisSignalement ) );
945
946
947 try
948 {
949 String strOrigin = jsonIncident.getString( SignalementRestConstants.JSON_TAG_INCIDENT_ORIGIN );
950 if ( !SignalementRestConstants.SIGNALEMENT_PREFIXES.contains( strOrigin ) )
951 {
952 ErrorSignalementansmarue/modules/rest/pojo/ErrorSignalement.html#ErrorSignalement">ErrorSignalement error = new ErrorSignalement( );
953 error.setErrorCode( SignalementRestConstants.ERROR_BAD_ORIGIN );
954 error.setErrorMessage( "Le type d'origine " + strOrigin + " du signalement n'a pas été trouvé. " );
955 AppLogService.error( "Le type d'origine " + strOrigin + " du signalement n'a pas été trouvé. " );
956 throw new ParseSignalementFromJSONException( formatterJson.format( error ) );
957 }
958 signalement.setPrefix( strOrigin );
959 }
960 catch( Exception e )
961 {
962 AppLogService.error( e );
963 ErrorSignalementansmarue/modules/rest/pojo/ErrorSignalement.html#ErrorSignalement">ErrorSignalement error = new ErrorSignalement( );
964 error.setErrorCode( SignalementRestConstants.ERROR_BAD_ORIGIN );
965 error.setErrorMessage( "Le type d'origine est obligatoire : le webservice a été appelé a partir d'une app mobile V1" );
966 AppLogService.error( "Le type d'origine est obligatoire : le webservice a été appelé a partir d'une app mobile V1" );
967 throw new ParseSignalementFromJSONException( formatterJson.format( error ) );
968 }
969
970
971 _signalementService.affectToken( signalement );
972
973 signaleur.setMail( strEmail );
974 signaleur.setIdTelephone( strUDID );
975 signaleur.setSignalement( signalement );
976 signaleur.setGuid( guid );
977
978 adresse.setLat( Double.parseDouble( strLatitude ) );
979 adresse.setLng( Double.parseDouble( strLongitude ) );
980 adresse.setAdresse( strAddress );
981 signalement.getAdresses( ).add( adresse );
982
983 adresse.setSignalement( signalement );
984
985 return signalement;
986 }
987
988
989
990
991
992
993
994
995
996
997 private String getStringIfExist( JSONObject jsonObject, String key )
998 {
999 String value = "";
1000 if ( jsonObject.containsKey( key ) )
1001 {
1002 value = jsonObject.getString( key );
1003 }
1004 return value;
1005 }
1006
1007
1008
1009
1010 @Override
1011 public String saveIncident( JSONObject jsonSrc ) throws ParseSignalementFromJSONException
1012 {
1013
1014 AppLogService.info( "saveIncident BEGINNING" );
1015
1016 Signalement signalement = new Signalement( );
1017 Signaleur signaleur = new Signaleur( );
1018 Adresse adresse = new Adresse( );
1019 parseSignalement( jsonSrc, signalement, signaleur, adresse );
1020
1021
1022 String strUserToken = StringUtils.EMPTY;
1023 if ( StringUtils.isNotBlank( signaleur.getGuid( ) ) )
1024 {
1025 try
1026 {
1027 strUserToken = jsonSrc.getString( SignalementRestConstants.JSON_TAG_USER_TOKEN );
1028 }
1029 catch( Exception e )
1030 {
1031 AppLogService.error( e );
1032 }
1033 }
1034
1035
1036 Long nId = _signalementService.insert( signalement );
1037 signalement.setId( nId );
1038 AppLogService.info( "saveIncident, saved with the ID " + nId );
1039
1040 _adresseService.insert( adresse );
1041
1042
1043 _signaleurService.insert( signaleur );
1044
1045 int returnCode = 0;
1046
1047
1048 if ( StringUtils.isNotBlank( signaleur.getGuid( ) ) )
1049 {
1050 SiraUser siraUser = new SiraUser( );
1051 siraUser.setDevice( signalement.getPrefix( ) );
1052 siraUser.setGuid( signaleur.getGuid( ) );
1053 siraUser.setToken( strUserToken );
1054 siraUser.setMail( signaleur.getMail( ) );
1055 siraUser.setUdid( signaleur.getIdTelephone( ) );
1056
1057 _siraUserService.createUser( siraUser );
1058 }
1059
1060 JSONObject jsonObject = new JSONObject( );
1061 JSONObject jsonAnswer = new JSONObject( );
1062 jsonAnswer.accumulate( SignalementRestConstants.JSON_TAG_STATUS, returnCode );
1063 jsonAnswer.accumulate( SignalementRestConstants.JSON_TAG_LOG_INCIDENT_ID, nId );
1064 jsonObject.accumulate( SignalementRestConstants.JSON_TAG_ANSWER, jsonAnswer );
1065 jsonObject.accumulate( SignalementRestConstants.JSON_TAG_REQUEST, SignalementRestConstants.REQUEST_TYPE_SAVE_INCIDENT );
1066
1067 AppLogService.info( "saveIncident, OK " + signalement.getId( ) );
1068 return jsonObject.toString( );
1069 }
1070
1071
1072
1073
1074 @Override
1075 public String getReports( JSONObject jsonSrc )
1076 {
1077 _signalementService = SpringContextService.getBean( SignalementRestConstants.PARAMETER_SIGNALEMENT_SERVICE_BEAN );
1078 _signalementWorkflowService = SpringContextService.getBean( SignalementRestConstants.PARAMETER_SIGNALEMENT_WORKFLOW_BEAN );
1079
1080 IFormatter<ErrorSignalement> formatterJsonError = new ErrorSignalementFormatterJson( );
1081
1082 JSONObject jsonAnswer = new JSONObject( );
1083 String strUDID = jsonSrc.getString( SignalementRestConstants.JSON_TAG_UDID );
1084
1085 if ( StringUtils.isNotBlank( strUDID ) )
1086 {
1087 jsonAnswer.accumulate( SignalementRestConstants.JSON_TAG_REQUEST, SignalementRestConstants.REQUEST_TYPE_REPORTS );
1088
1089 JSONObject json = new JSONObject( );
1090
1091 JSONObject jsonIncidents = new JSONObject( );
1092
1093 List<Signalement> listSignalement = _signalementService.findSignalementsByIdTelephone( strUDID );
1094
1095 List<Signalement> listDeclaredIncidents = new ArrayList<>( );
1096 List<Signalement> listResolvedIncidents = new ArrayList<>( );
1097 List<Signalement> listUpdatedIncidents = new ArrayList<>( );
1098
1099
1100 WorkflowService workflowService = WorkflowService.getInstance( );
1101
1102 if ( workflowService.isAvailable( ) )
1103 {
1104
1105 Integer workflowId = _signalementWorkflowService.getSignalementWorkflowId( );
1106
1107 if ( workflowId != null )
1108 {
1109 classifiedByState( listDeclaredIncidents, listResolvedIncidents, listUpdatedIncidents, workflowService, workflowId, listSignalement );
1110 }
1111 }
1112
1113 json.accumulate( SignalementRestConstants.JSON_TAG_STATUS, 0 );
1114 json.accumulate( SignalementRestConstants.JSON_TAG_DECLARED_INCIDENTS, listDeclaredIncidents.size( ) );
1115 json.accumulate( SignalementRestConstants.JSON_TAG_RESOLVED_INCIDENTS, listResolvedIncidents.size( ) );
1116 json.accumulate( SignalementRestConstants.JSON_TAG_UPDATED_INCIDENTS, listUpdatedIncidents.size( ) );
1117
1118 IFormatter<Signalement> formatterJson = new SignalementFormatterJson( );
1119 jsonIncidents.accumulate( SignalementRestConstants.JSON_TAG_DECLARED_INCIDENTS, formatterJson.format( listDeclaredIncidents ) );
1120 jsonIncidents.accumulate( SignalementRestConstants.JSON_TAG_RESOLVED_INCIDENTS, formatterJson.format( listResolvedIncidents ) );
1121 jsonIncidents.accumulate( SignalementRestConstants.JSON_TAG_UPDATED_INCIDENTS, formatterJson.format( listUpdatedIncidents ) );
1122
1123 json.accumulate( SignalementRestConstants.JSON_TAG_INCIDENTS, jsonIncidents );
1124
1125 jsonAnswer.accumulate( SignalementRestConstants.JSON_TAG_ANSWER, json );
1126
1127 return jsonAnswer.toString( );
1128 }
1129 else
1130 {
1131 ErrorSignalementansmarue/modules/rest/pojo/ErrorSignalement.html#ErrorSignalement">ErrorSignalement error = new ErrorSignalement( );
1132 error.setErrorCode( SignalementRestConstants.ERROR_BAD_USER_ID );
1133 error.setErrorMessage( StringUtils.EMPTY );
1134
1135 return formatterJsonError.format( error );
1136 }
1137 }
1138
1139
1140
1141
1142 @Override
1143 public String updateIncident( JSONObject jsonSrc, HttpServletRequest request )
1144 {
1145 _signalementWorkflowService = SpringContextService.getBean( SignalementRestConstants.PARAMETER_SIGNALEMENT_WORKFLOW_BEAN );
1146 _signalementService = SpringContextService.getBean( SignalementRestConstants.PARAMETER_SIGNALEMENT_SERVICE_BEAN );
1147
1148 JSONObject jsonIncidentLog = jsonSrc.getJSONObject( SignalementRestConstants.JSON_TAG_INCIDENT_LOG );
1149 String strIncidentId = jsonIncidentLog.getString( SignalementRestConstants.JSON_TAG_LOG_INCIDENT_ID );
1150 String strStatus = jsonIncidentLog.getString( SignalementRestConstants.JSON_TAG_LOG_STATUS );
1151
1152 WorkflowService workflowService = WorkflowService.getInstance( );
1153 if ( workflowService.isAvailable( ) )
1154 {
1155
1156 Integer workflowId = _signalementWorkflowService.getSignalementWorkflowId( );
1157
1158 if ( workflowId != null )
1159 {
1160 if ( strStatus.equals( SignalementRestConstants.UPDATE_STATUS_RESOLVED ) )
1161 {
1162
1163 workflowService.doProcessAction( Integer.parseInt( strIncidentId ), Signalement.WORKFLOW_RESOURCE_TYPE, 18, null, request,
1164 request.getLocale( ), true );
1165 }
1166 else
1167 if ( strStatus.equals( SignalementRestConstants.UPDATE_STATUS_INVALID ) )
1168 {
1169 workflowService.doProcessAction( Integer.parseInt( strIncidentId ), Signalement.WORKFLOW_RESOURCE_TYPE, 16, null, request,
1170 request.getLocale( ), true );
1171 }
1172 }
1173 }
1174
1175 JSONObject jsonAnswer = new JSONObject( );
1176 jsonAnswer.accumulate( SignalementRestConstants.JSON_TAG_REQUEST, SignalementRestConstants.REQUEST_TYPE_UPDATE_INCIDENT );
1177
1178 JSONObject json = new JSONObject( );
1179 json.accumulate( SignalementRestConstants.JSON_TAG_STATUS, 0 );
1180 jsonAnswer.accumulate( SignalementRestConstants.JSON_TAG_ANSWER, json );
1181
1182 return jsonAnswer.toString( );
1183 }
1184
1185
1186
1187
1188 @Override
1189 public String getUsersActivities( JSONObject jsonSrc )
1190 {
1191 JSONObject jsonAnswer = new JSONObject( );
1192 jsonAnswer.accumulate( SignalementRestConstants.JSON_TAG_REQUEST, SignalementRestConstants.REQUEST_TYPE_USER_ACTIVITIES );
1193
1194 JSONObject json = new JSONObject( );
1195 json.accumulate( SignalementRestConstants.JSON_TAG_STATUS, 0 );
1196
1197 JSONArray jsonEmptyArray = new JSONArray( );
1198
1199 json.accumulate( SignalementRestConstants.JSON_TAG_INCIDENT_LOG, jsonEmptyArray );
1200
1201 JSONObject jsonIncidents = new JSONObject( );
1202
1203 jsonIncidents.accumulate( SignalementRestConstants.JSON_TAG_RESOLVED_INCIDENTS, jsonEmptyArray );
1204 jsonIncidents.accumulate( SignalementRestConstants.JSON_TAG_ONGOING_INCIDENTS, jsonEmptyArray );
1205 jsonIncidents.accumulate( SignalementRestConstants.JSON_TAG_UPDATED_INCIDENTS, jsonEmptyArray );
1206
1207 json.accumulate( SignalementRestConstants.JSON_TAG_INCIDENTS, jsonIncidents );
1208 jsonAnswer.accumulate( SignalementRestConstants.JSON_TAG_ANSWER, json );
1209
1210 return jsonAnswer.toString( );
1211 }
1212
1213
1214
1215
1216 @Override
1217 public String changeIncident( JSONObject jsonSrc )
1218 {
1219 _signalementService = SpringContextService.getBean( SignalementRestConstants.PARAMETER_SIGNALEMENT_SERVICE_BEAN );
1220 _adresseService = SpringContextService.getBean( SignalementRestConstants.PARAMETER_ADRESSE_SERVICE_BEAN );
1221
1222 String strIncidentId = jsonSrc.getString( SignalementRestConstants.JSON_TAG_LOG_INCIDENT_ID );
1223 String strCategoryId = jsonSrc.getString( SignalementRestConstants.JSON_TAG_INCIDENT_CATEGORIE_ID );
1224 String strAddress = jsonSrc.getString( SignalementRestConstants.JSON_TAG_INCIDENT_ADDRESS );
1225
1226 Signalement signalement = _signalementService.getSignalement( Long.parseLong( strIncidentId ) );
1227
1228 TypeSignalement typeSignalement = new TypeSignalement( );
1229 typeSignalement.setId( Integer.parseInt( strCategoryId ) );
1230 signalement.setTypeSignalement( typeSignalement );
1231
1232 Adresse adresse = _adresseService.loadByIdSignalement( Long.parseLong( strIncidentId ) );
1233
1234 adresse.setAdresse( strAddress );
1235 _adresseService.update( adresse );
1236
1237 _signalementService.update( signalement );
1238
1239 JSONObject jsonAnswer = new JSONObject( );
1240 jsonAnswer.accumulate( SignalementRestConstants.JSON_TAG_REQUEST, SignalementRestConstants.REQUEST_TYPE_CHANGE_INCIDENT );
1241
1242 JSONObject json = new JSONObject( );
1243 json.accumulate( SignalementRestConstants.JSON_TAG_STATUS, 0 );
1244 jsonAnswer.accumulate( SignalementRestConstants.JSON_TAG_ANSWER, json );
1245
1246 return jsonAnswer.toString( );
1247 }
1248
1249
1250
1251
1252 @Override
1253 public String getIncidentPhotos( JSONObject jsonSrc )
1254 {
1255 _signalementService = SpringContextService.getBean( SignalementRestConstants.PARAMETER_SIGNALEMENT_SERVICE_BEAN );
1256 _photoService = SpringContextService.getBean( SignalementRestConstants.PARAMETER_PHOTO_SERVICE_BEAN );
1257
1258 String strIncidentId = jsonSrc.getString( SignalementRestConstants.JSON_TAG_LOG_INCIDENT_ID );
1259 Signalement signalement = _signalementService.getSignalement( Long.parseLong( strIncidentId ) );
1260
1261 JSONObject jsonAnswer = new JSONObject( );
1262 jsonAnswer.accumulate( SignalementRestConstants.JSON_TAG_REQUEST, SignalementRestConstants.REQUEST_TYPE_INCIDENT_PHOTOS );
1263
1264 JSONObject json = new JSONObject( );
1265 json.accumulate( SignalementRestConstants.JSON_TAG_STATUS, 0 );
1266
1267 JSONArray jsonArrayPhotos = new JSONArray( );
1268 List<PhotoDMR> pPhotos = _photoService.findBySignalementId( signalement.getId( ) );
1269
1270 if ( pPhotos != null )
1271 {
1272 Collections.reverse( pPhotos );
1273 for ( PhotoDMR photo : pPhotos )
1274 {
1275 JSONObject jsonPhoto = new JSONObject( );
1276 jsonPhoto.accumulate( SignalementRestConstants.JSON_TAG_PHOTO_URL,
1277 AppPropertiesService.getProperty( SignalementRestConstants.PROPERTY_URL_PICTURE ) + photo.getId( ) );
1278 jsonPhoto.accumulate( SignalementRestConstants.JSON_TAG_COMMENTARY, StringUtils.EMPTY );
1279 jsonPhoto.accumulate( SignalementRestConstants.JSON_TAG_INCIDENT_DATE,
1280 fr.paris.lutece.plugins.dansmarue.modules.rest.util.date.DateUtils.convertDate( photo.getDate( ) ) );
1281 jsonArrayPhotos.element( jsonPhoto );
1282 }
1283 }
1284
1285 json.accumulate( SignalementRestConstants.JSON_TAG_PHOTOS, jsonArrayPhotos );
1286 jsonAnswer.accumulate( SignalementRestConstants.JSON_TAG_ANSWER, json );
1287
1288 return jsonAnswer.toString( );
1289 }
1290
1291
1292
1293
1294 @Override
1295 public String changeStatus( JSONObject jsonSrc, HttpServletRequest request )
1296 {
1297 JSONObject jsonObject = new JSONObject( );
1298 jsonObject.accumulate( SignalementRestConstants.JSON_TAG_REQUEST, SignalementRestConstants.REQUEST_TYPE_CHANGE_STATUS );
1299 JSONObject jsonAnswer = new JSONObject( );
1300
1301 if ( !isGoodFormat( jsonSrc ) )
1302 {
1303 jsonAnswer.accumulate( SignalementRestConstants.JSON_TAG_ERROR_ERROR,
1304 I18nService.getLocalizedString( SignalementRestConstants.ERROR_MESSAGE_WRONG_FORMAT, request.getLocale( ) ) );
1305 jsonObject.accumulate( SignalementRestConstants.JSON_TAG_ANSWER, jsonAnswer );
1306 }
1307 else
1308 if ( !isTypeSignalementSelectable( jsonSrc ) )
1309 {
1310 jsonAnswer.accumulate( SignalementRestConstants.JSON_TAG_ERROR_ERROR,
1311 I18nService.getLocalizedString( SignalementRestConstants.ERROR_MESSAGE_WRONG_TYPE, request.getLocale( ) ) );
1312 jsonObject.accumulate( SignalementRestConstants.JSON_TAG_ANSWER, jsonAnswer );
1313 }
1314 else
1315 {
1316 try
1317 {
1318 JSONObject answer = jsonSrc.getJSONObject( SignalementRestConstants.JSON_TAG_ANSWER );
1319
1320 int id = answer.getInt( SignalementRestConstants.JSON_TAG_INCIDENT_ID );
1321 String status = answer.getString( SignalementRestConstants.JSON_TAG_STATUS );
1322
1323 Signalement signalement;
1324
1325 signalement = _signalementService.getSignalement( id );
1326
1327 Integer workflowId = _signalementWorkflowService.getSignalementWorkflowId( );
1328 WorkflowService workflowService = WorkflowService.getInstance( );
1329 int stateid = workflowService.getState( id, Signalement.WORKFLOW_RESOURCE_TYPE, workflowId, null ).getId( );
1330
1331
1332 if ( signalement == null )
1333 {
1334 jsonAnswer.accumulate( SignalementRestConstants.JSON_TAG_ERROR_ERROR,
1335 I18nService.getLocalizedString( SignalementRestConstants.ERROR_MESSAGE_NO_ANOMALY_FOUND, request.getLocale( ) ) );
1336 jsonObject.accumulate( SignalementRestConstants.JSON_TAG_ANSWER, jsonAnswer );
1337 }
1338 else
1339 {
1340
1341 String comment = answer.getString( SignalementRestConstants.JSON_TAG_INCIDENT_COMMENT ).equals( PARAMETER_NULL ) ? null
1342 : answer.getString( SignalementRestConstants.JSON_TAG_INCIDENT_COMMENT );
1343 String token = answer.getString( SignalementRestConstants.JSON_TAG_TOKEN );
1344 String reference = answer.getString( SignalementRestConstants.JSON_TAG_REFERENCE );
1345 String motifRejetAutre;
1346 String strDateProgrammee;
1347 String chosenMessage = answer.getString( SignalementRestConstants.JSON_TAG_INCIDENT_CHOSEN_MESSAGE ).equals( PARAMETER_NULL ) ? null
1348 : answer.getString( SignalementRestConstants.JSON_TAG_INCIDENT_CHOSEN_MESSAGE );
1349 String emailActeur = answer.containsKey( SignalementRestConstants.JSON_TAG_EMAIL )
1350 ? answer.getString( SignalementRestConstants.JSON_TAG_EMAIL )
1351 : null;
1352
1353 String signalementreference = _signalementService.getSignalementReference( StringUtils.EMPTY, signalement );
1354
1355 if ( !reference.equals( signalementreference ) )
1356 {
1357
1358
1359 jsonAnswer.accumulate( SignalementRestConstants.JSON_TAG_ERROR_ERROR,
1360 I18nService.getLocalizedString( SignalementRestConstants.ERROR_MESSAGE_NO_ANOMALY_FOUND, request.getLocale( ) ) );
1361 jsonObject.accumulate( SignalementRestConstants.JSON_TAG_ANSWER, jsonAnswer );
1362 }
1363
1364
1365
1366 else if ( stateid == AppPropertiesService.getPropertyInt( ID_STATE_ETAT_INITIAL, -1 ) )
1367 {
1368 jsonAnswer.accumulate( SignalementRestConstants.JSON_TAG_ERROR_ERROR,
1369 I18nService.getLocalizedString( SignalementRestConstants.ERROR_MESSAGE_INITIAL_WRONG_STATUS, request.getLocale( ) ) );
1370 jsonObject.accumulate( SignalementRestConstants.JSON_TAG_ANSWER, jsonAnswer );
1371 }
1372
1373
1374 else
1375 if ( token.equals( signalement.getToken( ) ) )
1376 {
1377
1378
1379 if ( controleCoherenceStatus( jsonObject, answer, jsonAnswer, request, signalement ) )
1380 {
1381 motifRejetAutre = !StringUtils.isEmpty( answer.getString( SignalementRestConstants.JSON_TAG_INCIDENT_ID_REJET ) )
1382 ? answer.getString( SignalementRestConstants.JSON_TAG_INCIDENT_ID_REJET )
1383 : StringUtils.EMPTY;
1384 strDateProgrammee = StringUtils
1385 .isNotEmpty( answer.getString( SignalementRestConstants.JSON_TAG_INCIDENT_DATE_PROGRAMMATION ) )
1386 ? answer.getString( SignalementRestConstants.JSON_TAG_INCIDENT_DATE_PROGRAMMATION )
1387 : StringUtils.EMPTY;
1388 long idTypeAnomalie = PARAMETER_NULL.equals( answer.getString( SignalementRestConstants.JSON_TAG_INCIDENT_TYPE_ANOMALIE ) )
1389 ? -1
1390 : answer.getLong( SignalementRestConstants.JSON_TAG_INCIDENT_TYPE_ANOMALIE );
1391
1392 request.getSession( ).setAttribute( PARAMETER_WEBSERVICE_CHOSEN_MESSAGE, chosenMessage );
1393
1394 if(StringUtils.isNotBlank( emailActeur )) {
1395 request.getSession( ).setAttribute( PARAMETER_WEBSERVICE_EMAIL_ACTEUR, emailActeur );
1396 }
1397
1398 String photoSF = null;
1399 if ( answer.containsKey( SignalementRestConstants.JSON_TAG_INCIDENT_PHOTO ) )
1400 {
1401 photoSF = answer.getString( SignalementRestConstants.JSON_TAG_INCIDENT_PHOTO ).equals( PARAMETER_NULL ) ? null
1402 : answer.getString( SignalementRestConstants.JSON_TAG_INCIDENT_PHOTO );
1403 AppLogService.info( photoSF );
1404 }
1405
1406 if ( ( photoSF != null ) && SignalementRestConstants.JSON_TAG_ANOMALY_DONE.equals( status ) )
1407 {
1408 PhotoDMR photo = new PhotoDMR( );
1409
1410 ImageResource image = new ImageResource( );
1411 String width = AppPropertiesService.getProperty( SignalementConstants.IMAGE_THUMBNAIL_RESIZE_WIDTH );
1412 String height = AppPropertiesService.getProperty( SignalementConstants.IMAGE_THUMBNAIL_RESIZE_HEIGHT );
1413
1414 String mimeType = photoSF.substring( photoSF.indexOf( "image" ), photoSF.indexOf( BASE_64 ) );
1415
1416 String [ ] array = photoSF.split( BASE_64 );
1417
1418 byte [ ] photoDecode = java.util.Base64.getDecoder( ).decode( array [1] );
1419
1420 byte [ ] resizeImage = ImageUtil.resizeImage( photoDecode, width, height, 1 );
1421 image.setImage( photoDecode );
1422 mimeType = mimeType.replace( "x-png", "png" );
1423 image.setMimeType( mimeType );
1424 photo.setImage( image );
1425 photo.setImageContent( ImgUtils.checkQuality( image.getImage( ) ) );
1426 photo.setImageThumbnailWithBytes( resizeImage );
1427 photo.setSignalement( signalement );
1428 photo.setVue( SignalementRestConstants.VUE_SERVICE_FAIT );
1429 photo.setDate( new SimpleDateFormat( DateConstants.DATE_FR ).format( Calendar.getInstance( ).getTime( ) ) );
1430
1431
1432 _photoService.insert( photo );
1433
1434 }
1435
1436 _manageSignalementService.manageStatusWithWorkflow( request, jsonObject, jsonAnswer, id, signalementreference, status, null,
1437 motifRejetAutre, strDateProgrammee, idTypeAnomalie, comment, emailActeur );
1438
1439 }
1440
1441 }
1442 else
1443 {
1444
1445 jsonAnswer.accumulate( SignalementRestConstants.JSON_TAG_ERROR_ERROR,
1446 I18nService.getLocalizedString( SignalementRestConstants.ERROR_MESSAGE_NO_TOKEN_FOUND, request.getLocale( ) ) );
1447 jsonObject.accumulate( SignalementRestConstants.JSON_TAG_ANSWER, jsonAnswer );
1448 }
1449 }
1450 }
1451 catch( JSONException e )
1452 {
1453 AppLogService.error( e.getMessage( ), e );
1454 jsonAnswer.accumulate( SignalementRestConstants.JSON_TAG_ERROR_ERROR,
1455 I18nService.getLocalizedString( SignalementRestConstants.ERROR_MESSAGE_DONE_WRONG_STATUS, request.getLocale( ) ) );
1456 jsonObject.accumulate( SignalementRestConstants.JSON_TAG_ANSWER, jsonAnswer );
1457 }
1458 }
1459 return jsonObject.toString( );
1460 }
1461
1462
1463
1464
1465
1466
1467
1468
1469 public boolean isGoodFormat( JSONObject jsonSrc )
1470 {
1471 return jsonSrc.containsKey( SignalementRestConstants.JSON_TAG_ANSWER )
1472 && jsonSrc.getJSONObject( SignalementRestConstants.JSON_TAG_ANSWER ).containsKey( SignalementRestConstants.JSON_TAG_INCIDENT_ID )
1473 && jsonSrc.getJSONObject( SignalementRestConstants.JSON_TAG_ANSWER ).containsKey( SignalementRestConstants.JSON_TAG_STATUS )
1474 && jsonSrc.getJSONObject( SignalementRestConstants.JSON_TAG_ANSWER ).containsKey( SignalementRestConstants.JSON_TAG_INCIDENT_DATE_REEL_ACTION )
1475 && jsonSrc.getJSONObject( SignalementRestConstants.JSON_TAG_ANSWER ).containsKey( SignalementRestConstants.JSON_TAG_INCIDENT_COMMENT )
1476 && jsonSrc.getJSONObject( SignalementRestConstants.JSON_TAG_ANSWER ).containsKey( SignalementRestConstants.JSON_TAG_INCIDENT_ID_REJET )
1477 && jsonSrc.getJSONObject( SignalementRestConstants.JSON_TAG_ANSWER )
1478 .containsKey( SignalementRestConstants.JSON_TAG_INCIDENT_DATE_PROGRAMMATION )
1479 && jsonSrc.getJSONObject( SignalementRestConstants.JSON_TAG_ANSWER ).containsKey( SignalementRestConstants.JSON_TAG_INCIDENT_TYPE_ANOMALIE );
1480 }
1481
1482
1483
1484
1485
1486
1487
1488
1489 public boolean isTypeSignalementSelectable( JSONObject jsonSrc )
1490 {
1491 String status = jsonSrc.getJSONObject( SignalementRestConstants.JSON_TAG_ANSWER ).getString( SignalementRestConstants.JSON_TAG_STATUS );
1492 String idTypeAnomalie = jsonSrc.getJSONObject( SignalementRestConstants.JSON_TAG_ANSWER )
1493 .containsKey( SignalementRestConstants.JSON_TAG_INCIDENT_TYPE_ANOMALIE )
1494 ? jsonSrc.getJSONObject( SignalementRestConstants.JSON_TAG_ANSWER )
1495 .getString( SignalementRestConstants.JSON_TAG_INCIDENT_TYPE_ANOMALIE )
1496 : null;
1497
1498 if ( SignalementRestConstants.JSON_TAG_ANOMALY_REQUALIFIED.equals( status ) && StringUtils.isNumeric( idTypeAnomalie ) )
1499 {
1500 TypeSignalement selectedTypeSignalement = _typeSignalementService.getByIdTypeSignalement( Integer.parseInt( idTypeAnomalie ) );
1501
1502 return ( ( selectedTypeSignalement != null ) && selectedTypeSignalement.getActif( )
1503 && _typeSignalementService.isTypeSignalementSelectable( selectedTypeSignalement.getId( ) ) );
1504 }
1505 else
1506 {
1507 return true;
1508 }
1509 }
1510
1511
1512
1513
1514
1515
1516
1517
1518
1519
1520
1521
1522
1523
1524
1525
1526 private boolean controleCoherenceStatus( JSONObject jsonObject, JSONObject answer, JSONObject jsonAnswer, HttpServletRequest request, Signalement signalement )
1527 {
1528 boolean result = true;
1529
1530 String status = answer.getString( SignalementRestConstants.JSON_TAG_STATUS );
1531
1532 if ( status.equals( SignalementRestConstants.JSON_TAG_ANOMALY_REJECTED ) )
1533 {
1534
1535 String raisonDuRejet = answer.getString( SignalementRestConstants.JSON_TAG_INCIDENT_ID_REJET );
1536 if ( PARAMETER_NULL.equals( raisonDuRejet ) || StringUtils.isBlank( raisonDuRejet ) )
1537 {
1538
1539 jsonAnswer.accumulate( SignalementRestConstants.JSON_TAG_ERROR_ERROR,
1540 I18nService.getLocalizedString( SignalementRestConstants.ERROR_MESSAGE_REJECTED_WRONG_REJECT_CAUSE_ID, request.getLocale( ) ) );
1541 jsonObject.accumulate( SignalementRestConstants.JSON_TAG_ANSWER, jsonAnswer );
1542
1543 result = false;
1544 }
1545 }
1546 else
1547 if ( status.equals( SignalementRestConstants.JSON_TAG_ANOMALY_REQUALIFIED ) )
1548 {
1549
1550 String idTypeAnomalie = answer.getString( SignalementRestConstants.JSON_TAG_INCIDENT_TYPE_ANOMALIE );
1551 if ( PARAMETER_NULL.equals( idTypeAnomalie ) || StringUtils.isBlank( idTypeAnomalie ) || !StringUtils.isNumeric( idTypeAnomalie )
1552 || ( ( signalement.getTypeSignalement( ) != null ) && ( Integer.parseInt( idTypeAnomalie ) == signalement.getTypeSignalement( ).getId( ) ) ) )
1553 {
1554
1555 jsonAnswer.accumulate( SignalementRestConstants.JSON_TAG_ERROR_ERROR,
1556 I18nService.getLocalizedString( SignalementRestConstants.ERROR_MESSAGE_REQUALIFIED_WRONG_TYPE_ANOMALIE, request.getLocale( ) ) );
1557 jsonObject.accumulate( SignalementRestConstants.JSON_TAG_ANSWER, jsonAnswer );
1558
1559 result = false;
1560 }
1561 }
1562 else
1563 if ( status.equals( SignalementRestConstants.JSON_TAG_ANOMALY_PROGRAMMED ) )
1564 {
1565
1566 String strDateProgrammee = answer.getString( SignalementRestConstants.JSON_TAG_INCIDENT_DATE_PROGRAMMATION );
1567
1568 try
1569 {
1570 DateTimeFormatter formatter = DateTimeFormatter.ofPattern( "dd/MM/yyyy" );
1571 LocalDate dateTime = LocalDate.parse( strDateProgrammee, formatter );
1572 if ( dateTime.atStartOfDay( ).toInstant( ZoneOffset.UTC ).isBefore( Instant.now( ).truncatedTo( ChronoUnit.DAYS ) ) )
1573 {
1574 jsonAnswer.accumulate( SignalementRestConstants.JSON_TAG_ERROR_ERROR, I18nService
1575 .getLocalizedString( SignalementRestConstants.ERROR_MESSAGE_PROGRAMMED_DATE_BEFORE_TODAY, request.getLocale( ) ) );
1576 jsonObject.accumulate( SignalementRestConstants.JSON_TAG_ANSWER, jsonAnswer );
1577
1578 result = false;
1579 }
1580 }
1581 catch( DateTimeParseException e )
1582 {
1583 AppLogService.error( e.getMessage( ), e );
1584
1585 jsonAnswer.accumulate( SignalementRestConstants.JSON_TAG_ERROR_ERROR,
1586 I18nService.getLocalizedString( SignalementRestConstants.ERROR_MESSAGE_PROGRAMMED_WRONG_DATE_FORMAT, request.getLocale( ) ) );
1587 jsonObject.accumulate( SignalementRestConstants.JSON_TAG_ANSWER, jsonAnswer );
1588
1589 result = false;
1590 }
1591 }
1592 else
1593 if ( !status.equals( SignalementRestConstants.JSON_TAG_ANOMALY_DONE )
1594 && !status.equals( SignalementRestConstants.JSON_TAG_ANOMALY_REQUALIFIED )
1595 && !status.equals( SignalementRestConstants.JSON_TAG_ANOMALY_A_REQUALIFIED ) )
1596 {
1597
1598 jsonAnswer.accumulate( SignalementRestConstants.JSON_TAG_ERROR_ERROR,
1599 I18nService.getLocalizedString( SignalementRestConstants.ERROR_MESSAGE_DIFFERENT_STATUS, request.getLocale( ) ) );
1600 jsonObject.accumulate( SignalementRestConstants.JSON_TAG_ANSWER, jsonAnswer );
1601
1602 result = false;
1603 }
1604
1605 return result;
1606 }
1607
1608
1609
1610
1611
1612
1613
1614
1615 public String addAnomalie( JSONObject jsonSrc )
1616 {
1617 JSONObject anomalie = jsonSrc.getJSONObject( "anomalie" );
1618 int id = anomalie.getInt( SignalementRestConstants.JSON_TAG_INCIDENT_ID );
1619
1620 JSONObject jsonObject = new JSONObject( );
1621
1622 jsonObject.accumulate( SignalementRestConstants.JSON_TAG_REQUEST, SignalementRestConstants.REQUEST_TYPE_ADD_ANOMALIE );
1623
1624 JSONObject jsonAnswer = new JSONObject( );
1625 jsonAnswer.accumulate( SignalementRestConstants.JSON_TAG_INCIDENT_ID, id );
1626
1627 jsonObject.accumulate( "answer", jsonAnswer );
1628
1629 return jsonObject.toString( );
1630 }
1631
1632
1633
1634
1635 @Override
1636 public String getCategoriesList( JSONObject jsonSrc )
1637 {
1638 _typeSignalementService = SpringContextService.getBean( SignalementRestConstants.PARAMETER_TYPE_SIGNALEMENT_BEAN );
1639
1640 double dCurVersion = jsonSrc.getDouble( SignalementRestConstants.JSON_TAG_CATEGORIES_CURVERSION );
1641
1642 JSONObject jsonObject = new JSONObject( );
1643 jsonObject.accumulate( SignalementRestConstants.JSON_TAG_REQUEST, SignalementRestConstants.REQUEST_TYPE_CATEGORIES_LIST );
1644
1645 JSONObject jsonAnswer = new JSONObject( );
1646 jsonAnswer.accumulate( SignalementRestConstants.JSON_TAG_STATUS, 0 );
1647 double dVersion = _typeSignalementService.findLastVersionTypeSignalement( );
1648 jsonAnswer.accumulate( SignalementRestConstants.JSON_TAG_CATEGORIES_VERSION, dVersion );
1649
1650 if ( Double.compare( dVersion, dCurVersion ) != 0 )
1651 {
1652 if ( !jsonSrc.has( SignalementRestConstants.JSON_TAG_CATEGORIES_CURVERSION_MOBILE_PROD ) )
1653 {
1654 IFormatter<TypeSignalement> formatterJson = new CategoriesFormatterJson( );
1655 jsonAnswer.accumulate( SignalementRestConstants.JSON_TAG_CATEGORIES,
1656 formatterJson.format( _typeSignalementService.getAllTypeSignalementByIsAgent( false ) ) );
1657 }
1658 else
1659 {
1660 IFormatter<TypeSignalement> formatterJson = new CategoriesFormatterJson( );
1661 jsonAnswer.accumulate( SignalementRestConstants.JSON_TAG_CATEGORIES, formatterJson.format( _typeSignalementService.getAll( ) ) );
1662 }
1663
1664 }
1665 else
1666 {
1667 jsonAnswer.accumulate( SignalementRestConstants.JSON_TAG_CATEGORIES, PARAMETER_NULL );
1668 }
1669 jsonObject.accumulate( SignalementRestConstants.JSON_TAG_ANSWER, jsonAnswer );
1670
1671 return jsonObject.toString( );
1672 }
1673
1674
1675
1676
1677
1678
1679 public String getCategoriesListXml( )
1680 {
1681 _typeSignalementService = SpringContextService.getBean( SignalementRestConstants.PARAMETER_TYPE_SIGNALEMENT_BEAN );
1682
1683 StringBuilder strFormatted = new StringBuilder( );
1684 strFormatted.append( "<?xml version=\"1.0\" encoding=\"UTF-8\"?><!DOCTYPE annuaire SYSTEM \"signalement_nomenclature.dtd\"><elementList>" );
1685
1686 for ( TypeSignalementDTO ts : _typeSignalementService.getTypeSignalementTree( true ) )
1687 {
1688 formatXml( strFormatted, ts );
1689 }
1690
1691 strFormatted.append( "</elementList>" );
1692
1693 return strFormatted.toString( );
1694 }
1695
1696
1697
1698
1699
1700
1701 public String getCategoriesListJson( )
1702 {
1703 _typeSignalementService = SpringContextService.getBean( SignalementRestConstants.PARAMETER_TYPE_SIGNALEMENT_BEAN );
1704
1705 List<TypeSignalementDTO> lstSignalementDTO = _typeSignalementService.getTypeSignalementTree( true );
1706
1707 return lstSignalementDTOToString( lstSignalementDTO );
1708 }
1709
1710
1711
1712
1713
1714
1715
1716
1717 public String getCategoriesListJsonForSource( Integer nIdSource )
1718 {
1719 _typeSignalementService = SpringContextService.getBean( SignalementRestConstants.PARAMETER_TYPE_SIGNALEMENT_BEAN );
1720
1721 List<TypeSignalementDTO> lstSignalementDTO = _typeSignalementService.getTypeSignalementTreeFromSource( nIdSource );
1722
1723 return lstSignalementDTOToString( lstSignalementDTO );
1724 }
1725
1726
1727
1728
1729
1730
1731
1732
1733 public String getActualiteListJson( int mobileVersionActualite )
1734 {
1735 _actualiteService = SpringContextService.getBean( SignalementRestConstants.PARAMETER_ACTUALITE_BEAN );
1736
1737 int currentNewsVersion = _actualiteService.getVersionActualite( );
1738
1739 List<Actualite> lstActualite = _actualiteService.getActualiteWithVersion( mobileVersionActualite, currentNewsVersion );
1740
1741 JSONObject jsonObject = new JSONObject( );
1742 jsonObject.accumulate( SignalementRestConstants.JSON_TAG_REQUEST, SignalementRestConstants.REQUEST_TYPE_NEWS_LIST );
1743
1744 JSONObject jsonAnswer = new JSONObject( );
1745 jsonAnswer.accumulate( SignalementRestConstants.JSON_TAG_STATUS, 0 );
1746 jsonAnswer.accumulate( SignalementRestConstants.JSON_TAG_CATEGORIES_VERSION, currentNewsVersion );
1747 jsonAnswer.accumulate( SignalementRestConstants.JSON_TAG_ACTUALITE, lstActualiteToString( lstActualite ) );
1748
1749 jsonObject.accumulate( SignalementRestConstants.JSON_TAG_ANSWER, jsonAnswer );
1750
1751 return jsonObject.toString( );
1752 }
1753
1754 public String getAideListJson( int versionAide )
1755 {
1756 _aideService = SpringContextService.getBean( SignalementRestConstants.PARAMETER_AIDE_BEAN );
1757
1758 int currentAideVersion = _aideService.getVersionAide( );
1759
1760 List<Aide> lstAide = _aideService.getAideWithVersion( versionAide );
1761
1762 JSONObject jsonObject = new JSONObject( );
1763 jsonObject.accumulate( SignalementRestConstants.JSON_TAG_REQUEST, SignalementRestConstants.REQUEST_AIDES_LIST );
1764
1765 JSONObject jsonAnswer = new JSONObject( );
1766 jsonAnswer.accumulate( SignalementRestConstants.JSON_TAG_STATUS, 0 );
1767 jsonAnswer.accumulate( SignalementRestConstants.JSON_TAG_CATEGORIES_VERSION, currentAideVersion );
1768 jsonAnswer.accumulate( SignalementRestConstants.JSON_TAG_AIDES, lstAideToString( lstAide ) );
1769
1770 jsonObject.accumulate( SignalementRestConstants.JSON_TAG_ANSWER, jsonAnswer );
1771
1772 return jsonObject.toString( );
1773 }
1774
1775
1776
1777
1778
1779
1780
1781
1782 public String getAnomalieByNumber( String number, String guid )
1783 {
1784 _signalementService = SpringContextService.getBean( SignalementRestConstants.PARAMETER_SIGNALEMENT_SERVICE_BEAN );
1785
1786 IFormatter<ErrorSignalement> formatterJsonError = new ErrorSignalementFormatterJson( );
1787
1788 JSONObject jsonAnswer = new JSONObject( );
1789
1790 JSONObject json = new JSONObject( );
1791 json.accumulate( SignalementRestConstants.JSON_TAG_STATUS, 0 );
1792
1793
1794 Signalement signalement = _signalementService.getAnomalieByNumber( number );
1795
1796
1797 if ( signalement == null )
1798 {
1799 ErrorSignalementansmarue/modules/rest/pojo/ErrorSignalement.html#ErrorSignalement">ErrorSignalement error = new ErrorSignalement( );
1800 error.setErrorCode( SignalementRestConstants.ERROR_GET_SIGNALEMENT_BY_NUMBER_NOT_FOUND );
1801 error.setErrorMessage( AppPropertiesService.getProperty( SignalementRestConstants.ERROR_GET_SIG_BY_NUMBER_NOT_FOUND ) );
1802
1803 return formatterJsonError.format( error );
1804 }
1805
1806
1807 Integer nbJourMax = Integer.parseInt( DatastoreService.getDataValue( "sitelabels.site_property.mobile.nb.jour.recherche.ano.max", "90" ) );
1808
1809 if ( _dateUtils.isDateMoreThanXDay( signalement.getDateCreation( ), nbJourMax ) )
1810 {
1811 ErrorSignalementansmarue/modules/rest/pojo/ErrorSignalement.html#ErrorSignalement">ErrorSignalement error = new ErrorSignalement( );
1812 error.setErrorCode( SignalementRestConstants.ERROR_GET_SIGNALEMENT_BY_NUMBER_TOO_OLD );
1813 error.setErrorMessage( AppPropertiesService.getProperty( SignalementRestConstants.ERROR_GET_SIG_BY_NUMBER_TOO_OLD ) );
1814
1815 return formatterJsonError.format( error );
1816 }
1817
1818 SignalementFormatterJson/rest/service/formatters/SignalementFormatterJson.html#SignalementFormatterJson">SignalementFormatterJson formatterJson = new SignalementFormatterJson( );
1819
1820 if ( !StringUtils.isBlank( guid ) )
1821 {
1822 formatterJson.setFormatWithGuid( guid );
1823 }
1824
1825 List<Signalement> listSignalementRest = new ArrayList<>( );
1826 listSignalementRest.add( signalement );
1827
1828 JSONArray jsonArray = new JSONArray( );
1829 jsonArray.add( JSONSerializer.toJSON( formatterJson.format( signalement ) ) );
1830
1831 json.accumulate( SignalementRestConstants.JSON_TAG_INCIDENT, jsonArray.toString( ) );
1832
1833 jsonAnswer.accumulate( SignalementRestConstants.JSON_TAG_ANSWER, json );
1834
1835 return jsonAnswer.toString( );
1836 }
1837
1838
1839
1840
1841
1842
1843
1844 public String getAnomaliesByIdFDT(int idFDT) {
1845
1846 _feuilleTourneeService = SpringContextService.getBean( SignalementRestConstants.PARAMETER_FDT_SERVICE_BEAN );
1847 _signalementService = SpringContextService.getBean( SignalementRestConstants.PARAMETER_SIGNALEMENT_SERVICE_BEAN );
1848
1849 FeuilleDeTournee feuilleDeTournee = _feuilleTourneeService.load( idFDT );
1850
1851 JSONObject jsonAnswer = new JSONObject( );
1852 jsonAnswer.accumulate( SignalementRestConstants.JSON_TAG_REQUEST, SignalementRestConstants.REQUEST_SEARCH_INCIDENTS_BY_ID_FDT );
1853
1854
1855 JSONObject json = new JSONObject( );
1856 json.accumulate( SignalementRestConstants.JSON_TAG_STATUS, 0 );
1857
1858 JSONArray jsonArray = new JSONArray( );
1859
1860
1861 if ( feuilleDeTournee.getListSignalementIds( ) != null )
1862 {
1863 List<Signalement> listSignalementFDT = _signalementService.getAnomalieWithExtraInfoForMobilSearch(feuilleDeTournee.getListSignalementIds( ));
1864 SignalementFormatterJson/rest/service/formatters/SignalementFormatterJson.html#SignalementFormatterJson">SignalementFormatterJson formatterJson = new SignalementFormatterJson( );
1865 jsonArray = (JSONArray) JSONSerializer.toJSON( formatterJson.format( listSignalementFDT ) );
1866 } else {
1867 jsonAnswer.accumulate( SignalementRestConstants.JSON_TAG_ERROR_MESSAGE, AppPropertiesService.getProperty( SignalementRestConstants.ERROR_GET_ANOMALIES_FDT_BY_ID_NOT_FOUND ) );
1868 }
1869
1870
1871 json.accumulate( SignalementRestConstants.JSON_TAG_ID_FDT_SERCH, idFDT );
1872 json.accumulate( SignalementRestConstants.JSON_TAG_INFO_AVANT_TOURNEE, feuilleDeTournee.getInfoAvantTournee() );
1873 json.accumulate( SignalementRestConstants.JSON_TAG_INFO_APRES_TOURNEE, feuilleDeTournee.getInfoApresTournee() );
1874 json.accumulate( SignalementRestConstants.JSON_TAG_INCIDENTS, jsonArray.toString( ) );
1875 jsonAnswer.accumulate( SignalementRestConstants.JSON_TAG_ANSWER, json );
1876
1877 return jsonAnswer.toString( );
1878 }
1879
1880
1881
1882
1883
1884
1885
1886
1887 public Source getInfosForSource( Integer nIdSource )
1888 {
1889 _typeSignalementService = SpringContextService.getBean( SignalementRestConstants.PARAMETER_TYPE_SIGNALEMENT_BEAN );
1890
1891 return _typeSignalementService.getSourceById( nIdSource );
1892 }
1893
1894
1895
1896
1897
1898
1899
1900
1901 private String lstSignalementDTOToString( List<TypeSignalementDTO> lstSignalementDTO )
1902 {
1903 String result = "[";
1904 if ( !lstSignalementDTO.isEmpty( ) )
1905 {
1906 StringBuilder buf = new StringBuilder( );
1907 boolean first = true;
1908 for ( TypeSignalementDTO signalement : lstSignalementDTO )
1909 {
1910 buf.append( formatJson( signalement, first ) );
1911 first = false;
1912 }
1913 result += buf.toString( );
1914 }
1915 result += "]";
1916
1917 return result;
1918 }
1919
1920 private String lstActualiteToString( List<Actualite> lstActualite )
1921 {
1922 JSONArray actArr = new JSONArray();
1923
1924 String result = "";
1925
1926 if (!lstActualite.isEmpty( ))
1927 {
1928 for (Actualite actualite : lstActualite)
1929 {
1930 JSONObject json = new JSONObject();
1931
1932 json.put("id", actualite.getId());
1933 json.put("libelle", actualite.getLibelle( ));
1934 json.put("texte", actualite.getTexte( ));
1935 json.put("image_url", actualite.getImageUrl( ));
1936 json.put("actif", actualite.getActif( ));
1937 json.put("ordre", actualite.getOrdre( ));
1938
1939 actArr.add(json);
1940
1941 }
1942 }
1943
1944 result = actArr.toString( );
1945
1946 return result;
1947 }
1948
1949 private String lstAideToString( List<Aide> lstAide )
1950 {
1951 JSONArray aideArr = new JSONArray();
1952
1953 String result = "";
1954
1955 if (!lstAide.isEmpty( ))
1956 {
1957 for (Aide aide : lstAide)
1958 {
1959 JSONObject json = new JSONObject();
1960
1961 json.accumulate("id", aide.getId());
1962 json.accumulate("libelle", aide.getLibelle( ));
1963 json.accumulate("hypertexte_url", aide.getHypertexteUrl( ));
1964 json.accumulate("image_url", aide.getImageUrl( ));
1965 json.accumulate("actif", aide.getActif( ));
1966 json.accumulate("ordre", aide.getOrdre( ));
1967
1968 aideArr.add(json);
1969
1970 }
1971 }
1972
1973 result = aideArr.toString( );
1974
1975 return result;
1976 }
1977
1978
1979
1980
1981
1982
1983
1984
1985
1986
1987
1988 private void formatXml( StringBuilder strFormatted, TypeSignalementDTO ts )
1989 {
1990 strFormatted.append( "<element id=\"" + ts.getId( ) + "\">" );
1991 strFormatted.append( "<name>" );
1992 strFormatted.append( ts.getLibelle( ) );
1993 strFormatted.append( "</name>" );
1994
1995 List<TypeSignalementDTO> lts = ts.getListChild( );
1996
1997 if ( ( lts != null ) && ( !lts.isEmpty( ) ) )
1998 {
1999 strFormatted.append( "<elements>" );
2000
2001 for ( TypeSignalementDTO ts2 : lts )
2002 {
2003 formatXml( strFormatted, ts2 );
2004 }
2005
2006 strFormatted.append( "</elements>" );
2007 }
2008 else
2009 {
2010 strFormatted.append( "<to id=\"16\">DPE</to>" );
2011 }
2012
2013 strFormatted.append( "</element>" );
2014 }
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
2025 private String formatJson( TypeSignalementDTO ts, boolean firstElement )
2026 {
2027
2028 StringBuilder sb = new StringBuilder( );
2029 if ( !firstElement )
2030 {
2031 sb.append( "," );
2032 }
2033 sb.append( "{\"id\": " + ts.getId( ) + "," );
2034 sb.append( "\"libelle\": \"" + ts.getLibelle( ).replace( "\"", "" ) + "\"," );
2035 sb.append( "\"imageUrl\": \"" + getImageBase64( ts.getImage( ) ) + "\"," );
2036 sb.append( "\"isAgent\": \"" + ts.getIsAgent( ) + "\"," );
2037 sb.append( "\"entite\": \"" + ( ts.getUnit( ) != null ? ts.getUnit( ).getLabel( ) : "" ) + "\"" );
2038 if ( ts.getTypeSignalementParent( ) != null )
2039 {
2040 sb.append( ", \"typeSignalementParent\":{\"id\":" + ts.getTypeSignalementParent( ).getId( ) + "}" );
2041 }
2042 if ( !ts.getListChild( ).isEmpty( ) )
2043 {
2044 sb.append( ",\"listChild\": [" );
2045 boolean first = true;
2046 for ( TypeSignalementDTO child : ts.getListChild( ) )
2047 {
2048 sb.append( formatJson( child, first ) );
2049 first = false;
2050 }
2051
2052 sb.append( "]" );
2053 }
2054
2055 sb.append( "}" );
2056
2057 return sb.toString( );
2058 }
2059
2060
2061
2062
2063 @Override
2064 public String updatePictureIncident( HttpServletRequest request, InputStream requestBodyStream )
2065 {
2066
2067 _signalementService = SpringContextService.getBean( SignalementRestConstants.PARAMETER_SIGNALEMENT_SERVICE_BEAN );
2068 _photoService = SpringContextService.getBean( SignalementRestConstants.PARAMETER_PHOTO_SERVICE_BEAN );
2069
2070 IFormatter<ErrorSignalement> formatterJson = new ErrorSignalementFormatterJson( );
2071
2072 String strIdIncident = request.getHeader( SignalementRestConstants.PARAMETERS_HEADER_INCIDENT_ID );
2073 String strPhotoVue = request.getHeader( SignalementRestConstants.PARAMETERS_HEADER_TYPE );
2074 Signalement signalement = _signalementService.getSignalement( Long.parseLong( strIdIncident ) );
2075
2076 try
2077 {
2078 ByteArrayOutputStream out = new ByteArrayOutputStream( );
2079 IOUtils.copy( requestBodyStream, out );
2080
2081 if ( out.size( ) == 0 )
2082 {
2083 ErrorSignalementansmarue/modules/rest/pojo/ErrorSignalement.html#ErrorSignalement">ErrorSignalement error = new ErrorSignalement( );
2084 error.setErrorCode( SignalementRestConstants.ERROR_IMPOSSIBLE_READ_PICTURE );
2085 error.setErrorMessage( StringUtils.EMPTY );
2086
2087 return formatterJson.format( error );
2088 }
2089
2090 ImageResource image = new ImageResource( );
2091 image.setImage( out.toByteArray( ) );
2092 image.setMimeType( request.getContentType( ) );
2093
2094 String width = AppPropertiesService.getProperty( SignalementConstants.IMAGE_THUMBNAIL_RESIZE_WIDTH );
2095 String height = AppPropertiesService.getProperty( SignalementConstants.IMAGE_THUMBNAIL_RESIZE_HEIGHT );
2096 byte [ ] resizeImage = ImageUtil.resizeImage( out.toByteArray( ), width, height, 1 );
2097
2098 PhotoDMR photoSignalement = new PhotoDMR( );
2099 photoSignalement.setImage( image );
2100 photoSignalement.setImageContent( ImgUtils.checkQuality( image.getImage( ) ) );
2101 photoSignalement.setImageThumbnailWithBytes( resizeImage );
2102 photoSignalement.setMimeType( request.getContentType( ) );
2103 photoSignalement.setSignalement( signalement );
2104
2105 if ( StringUtils.isNotBlank( strPhotoVue ) )
2106 {
2107 if ( SignalementRestConstants.PICTURE_FAR.equals( strPhotoVue ) )
2108 {
2109 photoSignalement.setVue( SignalementRestConstants.VUE_ENSEMBLE );
2110 }
2111 else
2112 if ( SignalementRestConstants.PICTURE_CLOSE.equals( strPhotoVue ) )
2113 {
2114 photoSignalement.setVue( SignalementRestConstants.VUE_PRES );
2115 }
2116 else
2117 if ( SignalementRestConstants.PICTURE_DONE.equals( strPhotoVue ) )
2118 {
2119 photoSignalement.setVue( SignalementRestConstants.VUE_SERVICE_FAIT );
2120 }
2121 }
2122
2123
2124 SimpleDateFormat sdfDate = new SimpleDateFormat( DateConstants.DATE_FR );
2125 photoSignalement.setDate( sdfDate.format( Calendar.getInstance( ).getTime( ) ) );
2126
2127 Optional<PhotoDMR> existPhoto = _photoService.findBySignalementId( signalement.getId( ) ).stream( )
2128 .filter( photo -> photo.getVue( ).intValue( ) == photoSignalement.getVue( ).intValue( ) ).findFirst( );
2129
2130 if ( existPhoto.isPresent( ) )
2131 {
2132 PhotoDMR photoDMR = existPhoto.get( );
2133 _photoService.remove( photoDMR.getId( ) );
2134 }
2135 _photoService.insert( photoSignalement );
2136
2137 out.close( );
2138 }
2139
2140 catch( Exception e )
2141 {
2142
2143 AppLogService.error( e.getMessage( ), e );
2144
2145 ErrorSignalementansmarue/modules/rest/pojo/ErrorSignalement.html#ErrorSignalement">ErrorSignalement error = new ErrorSignalement( );
2146 error.setErrorCode( SignalementRestConstants.ERROR_BAD_PICTURE );
2147 error.setErrorMessage( e.getMessage( ) );
2148
2149 AppLogService.info( "java.awt.headless to true" );
2150 System.setProperty( "java.awt.headless", "true" );
2151
2152 return formatterJson.format( error );
2153 }
2154
2155 JSONObject jsonAnswer = new JSONObject( );
2156 JSONObject json = new JSONObject( );
2157 json.accumulate( SignalementRestConstants.JSON_TAG_STATUS, 0 );
2158 jsonAnswer.accumulate( SignalementRestConstants.JSON_TAG_ANSWER, json );
2159
2160 return jsonAnswer.toString( );
2161 }
2162
2163
2164
2165
2166
2167
2168
2169
2170
2171
2172 private SignalementsPOJO buildPOJO( List<Signalement> listeSignalements )
2173 {
2174 List<SignalementPOJO> signalements = new ArrayList<>( );
2175
2176 for ( Signalement signalement : listeSignalements )
2177 {
2178 SignalementPOJOins/dansmarue/modules/rest/pojo/SignalementPOJO.html#SignalementPOJO">SignalementPOJO e = new SignalementPOJO( );
2179 e.setId( signalement.getId( ) );
2180 signalements.add( e );
2181 }
2182
2183 SignalementsPOJO/dansmarue/modules/rest/pojo/SignalementsPOJO.html#SignalementsPOJO">SignalementsPOJO ret = new SignalementsPOJO( );
2184 ret.setSignalements( signalements );
2185
2186 return ret;
2187 }
2188
2189
2190
2191
2192 @Override
2193 public SignalementsPOJO signalementAArchiverRejete( )
2194 {
2195 _signalementService = SpringContextService.getBean( SignalementRestConstants.PARAMETER_SIGNALEMENT_SERVICE_BEAN );
2196
2197 List<Signalement> listeSignalements = _signalementService.getSignalementByStatusId( 11 );
2198
2199 return buildPOJO( listeSignalements );
2200 }
2201
2202
2203
2204
2205 @Override
2206 public SignalementsPOJO signalementAArchiverServiceFait( )
2207 {
2208 _signalementService = SpringContextService.getBean( SignalementRestConstants.PARAMETER_SIGNALEMENT_SERVICE_BEAN );
2209
2210 List<Signalement> listeSignalements = _signalementService.getSignalementByStatusId( 10 );
2211
2212 return buildPOJO( listeSignalements );
2213 }
2214
2215
2216
2217
2218
2219
2220
2221
2222
2223
2224
2225
2226
2227 private List<Signalement> getSignalementListSorted( double lat1, double lng1, List<Signalement> listSignalement )
2228 {
2229 _signalementService = SpringContextService.getBean( SignalementRestConstants.PARAMETER_SIGNALEMENT_SERVICE_BEAN );
2230
2231
2232 List<SignalementGeoLoc> listSignalementGeoLoc = new ArrayList<>( );
2233 for ( Signalement signalement : listSignalement )
2234 {
2235 Adresse adresse = signalement.getAdresses( ).get( 0 );
2236 if ( adresse != null )
2237 {
2238 Integer distance = _signalementService.getDistanceBetweenSignalement( lat1, lng1, adresse.getLat( ), adresse.getLng( ) );
2239 SignalementGeoLoc signalementGeoLoc = new SignalementGeoLoc( );
2240 signalementGeoLoc.setSignalement( signalement );
2241 signalementGeoLoc.setDistance( distance );
2242 listSignalementGeoLoc.add( signalementGeoLoc );
2243 }
2244 }
2245 Collections.sort( listSignalementGeoLoc );
2246
2247 List<Signalement> listSignalementSorted = new ArrayList<>( );
2248 for ( SignalementGeoLoc signalementGeoLoc : listSignalementGeoLoc )
2249 {
2250 listSignalementSorted.add( signalementGeoLoc.getSignalement( ) );
2251 }
2252 return listSignalementSorted;
2253 }
2254
2255
2256
2257
2258
2259
2260
2261
2262 public String congratulateAnomalie( JSONObject jsonSrc )
2263 {
2264 _signalementService = SpringContextService.getBean( SignalementRestConstants.PARAMETER_SIGNALEMENT_SERVICE_BEAN );
2265 String strIncidentId = jsonSrc.getString( SignalementRestConstants.JSON_TAG_LOG_INCIDENT_ID );
2266 IFormatter<ErrorSignalement> formatterJsonError = new ErrorSignalementFormatterJson( );
2267
2268 if ( StringUtils.isBlank( strIncidentId ) )
2269 {
2270 ErrorSignalementansmarue/modules/rest/pojo/ErrorSignalement.html#ErrorSignalement">ErrorSignalement error = new ErrorSignalement( );
2271 error.setErrorCode( SignalementRestConstants.ERROR_EMPTY_INCIDENT_ID_BIS );
2272 error.setErrorMessage( StringUtils.EMPTY );
2273 return formatterJsonError.format( error );
2274 }
2275
2276 _signalementService.incrementFelicitationsByIdSignalement( Integer.valueOf( strIncidentId ) );
2277
2278 JSONObject jsonAnswer = new JSONObject( );
2279 jsonAnswer.accumulate( SignalementRestConstants.JSON_TAG_REQUEST, SignalementRestConstants.REQUEST_TYPE_CONGRATULATE_ANOMALIE );
2280
2281 JSONObject json = new JSONObject( );
2282 json.accumulate( SignalementRestConstants.JSON_TAG_STATUS, 0 );
2283 jsonAnswer.accumulate( SignalementRestConstants.JSON_TAG_ANSWER, json );
2284
2285 return jsonAnswer.toString( );
2286 }
2287
2288
2289
2290
2291
2292
2293
2294
2295
2296
2297 public boolean validateServiceFaitSignalement( Signalement signalement, HttpServletRequest request )
2298 {
2299
2300 boolean response = false;
2301
2302 JSONObject jObject = new JSONObject( );
2303 jObject.accumulate( SignalementRestConstants.JSON_TAG_LOG_INCIDENT_ID, signalement.getId( ).toString( ) );
2304 jObject.accumulate( SignalementRestConstants.JSON_TAG_GUID, signalement.getSignaleurs( ).get( 0 ).getGuid( ) );
2305 jObject.accumulate( SignalementRestConstants.JSON_TAG_EMAIL, signalement.getSignaleurs( ).get( 0 ).getMail( ) );
2306
2307 String resolved = setIncidentResolved( jObject, request );
2308
2309 if ( !resolved.isEmpty( ) && !resolved.contains( "error" ) )
2310 {
2311 response = true;
2312 }
2313
2314 return response;
2315 }
2316
2317
2318
2319
2320
2321
2322
2323
2324
2325
2326 public String setIncidentResolved( JSONObject jsonSrc, HttpServletRequest request )
2327 {
2328
2329 _signalementService = SpringContextService.getBean( SignalementRestConstants.PARAMETER_SIGNALEMENT_SERVICE_BEAN );
2330
2331 String strIncidentId = jsonSrc.getString( SignalementRestConstants.JSON_TAG_LOG_INCIDENT_ID );
2332
2333 IFormatter<ErrorSignalement> formatterJsonError = new ErrorSignalementFormatterJson( );
2334 if ( StringUtils.isBlank( strIncidentId ) )
2335 {
2336 AppLogService.error( "Error id incident empty or null !! " );
2337 ErrorSignalementansmarue/modules/rest/pojo/ErrorSignalement.html#ErrorSignalement">ErrorSignalement error = new ErrorSignalement( );
2338 error.setErrorCode( SignalementRestConstants.ERROR_EMPTY_INCIDENT_ID_BIS );
2339 error.setErrorMessage( StringUtils.EMPTY );
2340 return formatterJsonError.format( error );
2341 }
2342 String guid = StringUtils.EMPTY;
2343 try
2344 {
2345 guid = jsonSrc.getString( SignalementRestConstants.JSON_TAG_GUID );
2346 }
2347 catch( Exception e )
2348 {
2349 AppLogService.error( e );
2350 }
2351
2352 String strUDID = StringUtils.EMPTY;
2353 try
2354 {
2355 strUDID = jsonSrc.getString( SignalementRestConstants.JSON_TAG_UDID );
2356 }
2357 catch( Exception e )
2358 {
2359 AppLogService.error( e );
2360 }
2361
2362 String email = StringUtils.EMPTY;
2363 try
2364 {
2365 email = jsonSrc.getString( SignalementRestConstants.JSON_TAG_EMAIL );
2366 }
2367 catch( Exception e )
2368 {
2369 AppLogService.error( e );
2370 }
2371
2372 if ( StringUtils.isBlank( guid ) && StringUtils.isBlank( strUDID ) )
2373 {
2374 AppLogService.error( "Error guid and strUDIDempty or null !! " );
2375 ErrorSignalementansmarue/modules/rest/pojo/ErrorSignalement.html#ErrorSignalement">ErrorSignalement error = new ErrorSignalement( );
2376 error.setErrorCode( SignalementRestConstants.ERROR_BAD_USER_ID );
2377 error.setErrorMessage( StringUtils.EMPTY );
2378 return formatterJsonError.format( error );
2379 }
2380
2381 Signalement signalement = _signalementService.getSignalement( Integer.parseInt( strIncidentId ) );
2382
2383 if ( signalement == null )
2384 {
2385 AppLogService.error( "signalement not found !! " );
2386 ErrorSignalementansmarue/modules/rest/pojo/ErrorSignalement.html#ErrorSignalement">ErrorSignalement error = new ErrorSignalement( );
2387 error.setErrorCode( SignalementRestConstants.ERROR_BAD_INCIDENT_ID_BIS );
2388 error.setErrorMessage( StringUtils.EMPTY );
2389
2390 return formatterJsonError.format( error );
2391 }
2392
2393 List<Signaleur> signaleurs = signalement.getSignaleurs( );
2394
2395 boolean signaleurFound = false;
2396
2397 for ( Signaleur signaleur : signaleurs )
2398 {
2399 if ( ( StringUtils.isNotBlank( guid ) && guid.equals( signaleur.getGuid( ) ) )
2400 || ( StringUtils.isNotBlank( email ) && email.equals( signaleur.getMail( ) ) ) )
2401 {
2402 signaleurFound = true;
2403 }
2404 }
2405
2406
2407 if ( !signaleurFound && !StringUtilsDmr.endsWithAny( getIdentityStoreAttributeValue( guid, "email" ).toLowerCase( ), getEmailDomainAccept( ) ) )
2408 {
2409 AppLogService.error( "signaleur not found and bad domain email !! " );
2410 ErrorSignalementansmarue/modules/rest/pojo/ErrorSignalement.html#ErrorSignalement">ErrorSignalement error = new ErrorSignalement( );
2411 error.setErrorCode( SignalementRestConstants.ERROR_BAD_OWNER );
2412 error.setErrorMessage( StringUtils.EMPTY );
2413 return formatterJsonError.format( error );
2414 }
2415
2416 String comment = StringUtils.EMPTY;
2417 try
2418 {
2419 comment = jsonSrc.getString( SignalementRestConstants.JSON_TAG_INCIDENT_COMMENT );
2420 }
2421 catch( Exception e )
2422 {
2423 AppLogService.error( e );
2424 }
2425
2426
2427 if ( jsonSrc.containsKey( SignalementRestConstants.JSON_TAG_NUMERO_MESSAGE_SERVICE_FAIT )
2428 && jsonSrc.containsKey( SignalementRestConstants.JSON_TAG_TYPE_MESSAGE_SERVICE_FAIT ) )
2429 {
2430 request.getSession( ).setAttribute( PARAMETER_WEBSERVICE_CHOSEN_MESSAGE,
2431 jsonSrc.getInt( SignalementRestConstants.JSON_TAG_NUMERO_MESSAGE_SERVICE_FAIT ) );
2432 request.getSession( ).setAttribute( PARAMETER_WEBSERVICE_IS_MESSAGE_TYPO,
2433 !jsonSrc.getBoolean( SignalementRestConstants.JSON_TAG_TYPE_MESSAGE_SERVICE_FAIT ) );
2434 }
2435
2436
2437 Integer workflowId = _signalementWorkflowService.getSignalementWorkflowId( );
2438
2439 int idIncident = Integer.parseInt( strIncidentId );
2440
2441 WorkflowService workflowService = WorkflowService.getInstance( );
2442
2443 int stateid = workflowService.getState( idIncident, Signalement.WORKFLOW_RESOURCE_TYPE, workflowId, null ).getId( );
2444
2445 int idStatutServiceFait = AppPropertiesService.getPropertyInt( SignalementRestConstants.PROPERTY_ID_STATE_SERVICE_FAIT, -1 );
2446
2447 int idActionServiceFait = _signalementWorkflowService.selectIdActionByStates( stateid, idStatutServiceFait );
2448
2449 JSONObject jsonAnswer = new JSONObject( );
2450 jsonAnswer.accumulate( SignalementRestConstants.JSON_TAG_REQUEST, SignalementRestConstants.REQUEST_TYPE_INCIDENT_RESOLVED );
2451
2452 JSONObject json = new JSONObject( );
2453
2454 AppLogService.debug( "Incident resolved id action Service Fait : " + idActionServiceFait);
2455 if ( idActionServiceFait > -1 )
2456 {
2457 if (StringUtils.isNotBlank( comment ) ) {
2458 request.getSession( ).setAttribute( PARAMETER_WEBSERVICE_COMMENT_VALUE, comment );
2459 }
2460
2461 workflowService.doProcessAction( idIncident, Signalement.WORKFLOW_RESOURCE_TYPE, idActionServiceFait, null, request, request.getLocale( ), true );
2462 AppLogService.debug( "Incident resolved workflow process action termine");
2463 if ( StringUtils.isNotEmpty( email ) )
2464 {
2465 AppLogService.debug( "Incident resolved mise a jour user_access_code avec le mail : " + email);
2466 _signalementWorkflowService.setUserAccessCodeHistoryResource( email, signalement.getId( ).intValue( ), idActionServiceFait );
2467 AppLogService.debug( "Incident resolved mise a jour user_access_code effectuée");
2468
2469 }
2470 }
2471 else
2472 {
2473 AppLogService.error( "idActionServiceFait not found !! " );
2474
2475 jsonAnswer.accumulate( SignalementRestConstants.JSON_TAG_ERROR_ERROR, SignalementRestConstants.ERROR_EMPTY_INCIDENT_ID_BIS );
2476 json.accumulate( SignalementRestConstants.JSON_TAG_STATUS, -1 );
2477 jsonAnswer.accumulate( SignalementRestConstants.JSON_TAG_ANSWER, json );
2478 return jsonAnswer.toString( );
2479 }
2480
2481 json.accumulate( SignalementRestConstants.JSON_TAG_STATUS, 0 );
2482 jsonAnswer.accumulate( SignalementRestConstants.JSON_TAG_ANSWER, json );
2483
2484 return jsonAnswer.toString( );
2485
2486 }
2487
2488
2489
2490
2491
2492
2493
2494
2495 public String getIdentityStoreAttributeValue( String guid, String attributeName )
2496 {
2497 IdentityService identityStore = SpringContextService.getBean( "identitystoremyluteceprovider.identitystore.identityService" );
2498 IdentityDto identityDTO = null;
2499 try
2500 {
2501 identityDTO = identityStore.getIdentityByConnectionId( guid,
2502 AppPropertiesService.getProperty( "identitystoremyluteceprovider.identityStoreApplicationCode" ) );
2503 }
2504 catch( IdentityNotFoundException | IdentityStoreException e )
2505 {
2506 AppLogService.error( e );
2507 return StringUtils.EMPTY;
2508 }
2509
2510 return identityDTO.getAttributes( ).get( attributeName ) != null ? identityDTO.getAttributes( ).get( attributeName ).getValue( ) : "";
2511 }
2512
2513
2514
2515
2516
2517
2518
2519
2520 public String addFollower( JSONObject jsonSrc )
2521 {
2522 IFormatter<ErrorSignalement> formatterJsonError = new ErrorSignalementFormatterJson( );
2523 String strIncidentId = jsonSrc.getString( SignalementRestConstants.JSON_TAG_LOG_INCIDENT_ID );
2524 if ( StringUtils.isBlank( strIncidentId ) )
2525 {
2526 ErrorSignalementansmarue/modules/rest/pojo/ErrorSignalement.html#ErrorSignalement">ErrorSignalement error = new ErrorSignalement( );
2527 error.setErrorCode( SignalementRestConstants.ERROR_EMPTY_INCIDENT_ID_BIS );
2528 error.setErrorMessage( StringUtils.EMPTY );
2529 return formatterJsonError.format( error );
2530 }
2531 String guid = jsonSrc.getString( SignalementRestConstants.JSON_TAG_GUID );
2532 if ( StringUtils.isBlank( guid ) )
2533 {
2534 ErrorSignalementansmarue/modules/rest/pojo/ErrorSignalement.html#ErrorSignalement">ErrorSignalement error = new ErrorSignalement( );
2535 error.setErrorCode( SignalementRestConstants.ERROR_BAD_USER_ID );
2536 error.setErrorMessage( StringUtils.EMPTY );
2537 return formatterJsonError.format( error );
2538 }
2539
2540 String strUDID = jsonSrc.getString( SignalementRestConstants.JSON_TAG_UDID );
2541 if ( StringUtils.isBlank( strUDID ) )
2542 {
2543 ErrorSignalementansmarue/modules/rest/pojo/ErrorSignalement.html#ErrorSignalement">ErrorSignalement error = new ErrorSignalement( );
2544 error.setErrorCode( SignalementRestConstants.ERROR_BAD_USER_ID );
2545 error.setErrorMessage( StringUtils.EMPTY );
2546 return formatterJsonError.format( error );
2547 }
2548
2549 String email = jsonSrc.getString( SignalementRestConstants.JSON_TAG_EMAIL );
2550 if ( StringUtils.isBlank( email ) )
2551 {
2552 ErrorSignalementansmarue/modules/rest/pojo/ErrorSignalement.html#ErrorSignalement">ErrorSignalement error = new ErrorSignalement( );
2553 error.setErrorCode( SignalementRestConstants.ERROR_BAD_USER_EMAIL );
2554 error.setErrorMessage( StringUtils.EMPTY );
2555 return formatterJsonError.format( error );
2556 }
2557
2558 String device = jsonSrc.getString( SignalementRestConstants.JSON_TAG_DEVICE );
2559 if ( StringUtils.isBlank( device ) || ( !device.equals( SignalementRestConstants.SIGNALEMENT_PREFIX_IOS )
2560 && !device.equals( SignalementRestConstants.SIGNALEMENT_PREFIX_ANDROID ) ) )
2561 {
2562 ErrorSignalementansmarue/modules/rest/pojo/ErrorSignalement.html#ErrorSignalement">ErrorSignalement error = new ErrorSignalement( );
2563 error.setErrorCode( SignalementRestConstants.ERROR_BAD_DEVICE );
2564 error.setErrorMessage( StringUtils.EMPTY );
2565 return formatterJsonError.format( error );
2566 }
2567
2568 String userToken = jsonSrc.getString( SignalementRestConstants.JSON_TAG_USER_TOKEN );
2569 if ( StringUtils.isBlank( userToken ) )
2570 {
2571 ErrorSignalementansmarue/modules/rest/pojo/ErrorSignalement.html#ErrorSignalement">ErrorSignalement error = new ErrorSignalement( );
2572 error.setErrorCode( SignalementRestConstants.ERROR_BAD_USER_TOKEN );
2573 error.setErrorMessage( StringUtils.EMPTY );
2574 return formatterJsonError.format( error );
2575 }
2576
2577 int returnCode = 0;
2578
2579
2580 try
2581 {
2582 _signalementService.addFollower( Long.parseLong( strIncidentId ), guid, strUDID, email, device, userToken, true );
2583 }
2584 catch( AlreadyFollowedException e )
2585 {
2586 AppLogService.error( e );
2587 ErrorSignalementansmarue/modules/rest/pojo/ErrorSignalement.html#ErrorSignalement">ErrorSignalement error = new ErrorSignalement( );
2588 error.setErrorCode( SignalementRestConstants.ERROR_ALREADY_FOLLOWED );
2589 error.setErrorMessage( e.getMessage( ) );
2590 return formatterJsonError.format( error );
2591 }
2592 catch( InvalidStateActionException e )
2593 {
2594 AppLogService.error( e );
2595 ErrorSignalementansmarue/modules/rest/pojo/ErrorSignalement.html#ErrorSignalement">ErrorSignalement error = new ErrorSignalement( );
2596 error.setErrorCode( SignalementRestConstants.ERROR_INVALID_STATE_ACTION );
2597 error.setErrorMessage( e.getMessage( ) );
2598 return formatterJsonError.format( error );
2599 }
2600
2601 JSONObject jsonAnswer = new JSONObject( );
2602 jsonAnswer.accumulate( SignalementRestConstants.JSON_TAG_REQUEST, SignalementRestConstants.REQUEST_TYPE_FOLLOW );
2603
2604 JSONObject json = new JSONObject( );
2605 json.accumulate( SignalementRestConstants.JSON_TAG_STATUS, returnCode );
2606 jsonAnswer.accumulate( SignalementRestConstants.JSON_TAG_ANSWER, json );
2607
2608 return jsonAnswer.toString( );
2609 }
2610
2611
2612
2613
2614
2615
2616
2617
2618 public String removeFollower( JSONObject jsonSrc )
2619 {
2620 IFormatter<ErrorSignalement> formatterJsonError = new ErrorSignalementFormatterJson( );
2621 String strIncidentId = jsonSrc.getString( SignalementRestConstants.JSON_TAG_LOG_INCIDENT_ID );
2622 if ( StringUtils.isBlank( strIncidentId ) )
2623 {
2624 ErrorSignalementansmarue/modules/rest/pojo/ErrorSignalement.html#ErrorSignalement">ErrorSignalement error = new ErrorSignalement( );
2625 error.setErrorCode( SignalementRestConstants.ERROR_EMPTY_INCIDENT_ID_BIS );
2626 error.setErrorMessage( StringUtils.EMPTY );
2627 return formatterJsonError.format( error );
2628 }
2629 String guid = jsonSrc.getString( SignalementRestConstants.JSON_TAG_GUID );
2630 if ( StringUtils.isBlank( guid ) )
2631 {
2632 ErrorSignalementansmarue/modules/rest/pojo/ErrorSignalement.html#ErrorSignalement">ErrorSignalement error = new ErrorSignalement( );
2633 error.setErrorCode( SignalementRestConstants.ERROR_BAD_USER_ID );
2634 error.setErrorMessage( StringUtils.EMPTY );
2635 return formatterJsonError.format( error );
2636 }
2637
2638 try
2639 {
2640 _signalementService.removeFollower( Long.parseLong( strIncidentId ), guid );
2641 }
2642 catch( NonExistentFollowItem e )
2643 {
2644 AppLogService.error( e );
2645 ErrorSignalementansmarue/modules/rest/pojo/ErrorSignalement.html#ErrorSignalement">ErrorSignalement error = new ErrorSignalement( );
2646 error.setErrorCode( SignalementRestConstants.ERROR_NON_EXISTENT_FOLLOW_ITEM );
2647 error.setErrorMessage( e.getMessage( ) );
2648 return formatterJsonError.format( error );
2649 }
2650
2651 JSONObject jsonAnswer = new JSONObject( );
2652 jsonAnswer.accumulate( SignalementRestConstants.JSON_TAG_REQUEST, SignalementRestConstants.REQUEST_TYPE_UNFOLLOW );
2653
2654 JSONObject json = new JSONObject( );
2655 json.accumulate( SignalementRestConstants.JSON_TAG_STATUS, 0 );
2656 jsonAnswer.accumulate( SignalementRestConstants.JSON_TAG_ANSWER, json );
2657
2658 return jsonAnswer.toString( );
2659 }
2660
2661
2662
2663
2664
2665
2666
2667
2668 public String getIncidentsByUser( JSONObject jsonSrc )
2669 {
2670
2671 IFormatter<ErrorSignalement> formatterJsonError = new ErrorSignalementFormatterJson( );
2672
2673 String guid = jsonSrc.getString( SignalementRestConstants.JSON_TAG_GUID );
2674 if ( StringUtils.isBlank( guid ) )
2675 {
2676 ErrorSignalementansmarue/modules/rest/pojo/ErrorSignalement.html#ErrorSignalement">ErrorSignalement error = new ErrorSignalement( );
2677 error.setErrorCode( SignalementRestConstants.ERROR_BAD_USER_ID );
2678 error.setErrorMessage( StringUtils.EMPTY );
2679 return formatterJsonError.format( error );
2680 }
2681
2682 boolean filterOnResolved = SignalementRestConstants.MOBILE_STATE_RESOLVED
2683 .equals( jsonSrc.getString( SignalementRestConstants.JSON_TAG_FILTER_INCIDENT_STATUS ) );
2684
2685 List<Signalement> listSignalement = _signalementService.getSignalementsByGuid( guid, filterOnResolved );
2686 List<SignalementRestDTO> listSignalementRestDTO = new ArrayList<>( );
2687 for ( Signalement signalement : listSignalement )
2688 {
2689 SignalementRestDTOs/rest/dto/SignalementRestDTO.html#SignalementRestDTO">SignalementRestDTO signalementRestDTO = new SignalementRestDTO( );
2690 signalementRestDTO.setSignalement( signalement );
2691 signalementRestDTO.setFollowedByUser( true );
2692 listSignalementRestDTO.add( signalementRestDTO );
2693 }
2694
2695 IFormatter<SignalementRestDTO> formatterJson = new SignalementRestDTOFormatterJson( );
2696
2697 JSONArray jsonArray = (JSONArray) JSONSerializer.toJSON( formatterJson.format( listSignalementRestDTO ) );
2698
2699 JSONObject json = new JSONObject( );
2700
2701 json.accumulate( SignalementRestConstants.JSON_TAG_STATUS, 0 );
2702 json.accumulate( SignalementRestConstants.JSON_TAG_INCIDENTS, jsonArray.toString( ) );
2703
2704 JSONObject jsonAnswer = new JSONObject( );
2705 jsonAnswer.accumulate( SignalementRestConstants.JSON_TAG_REQUEST, SignalementRestConstants.REQUEST_TYPE_GET_INCIDENTS_BY_USER );
2706
2707 jsonAnswer.accumulate( SignalementRestConstants.JSON_TAG_ANSWER, json );
2708
2709 return jsonAnswer.toString( );
2710 }
2711
2712
2713
2714
2715
2716
2717
2718
2719 public String processWorkflow( JSONObject jsonSrc )
2720 {
2721 IFormatter<ErrorSignalement> formatterJsonError = new ErrorSignalementFormatterJson( );
2722
2723 String idSignalement = jsonSrc.getString( SignalementRestConstants.JSON_TAG_INCIDENT_ID );
2724
2725 if ( StringUtils.isBlank( idSignalement ) )
2726 {
2727 ErrorSignalementansmarue/modules/rest/pojo/ErrorSignalement.html#ErrorSignalement">ErrorSignalement error = new ErrorSignalement( );
2728 error.setErrorCode( SignalementRestConstants.ERROR_EMPTY_INCIDENT_ID_BIS );
2729 error.setErrorMessage( StringUtils.EMPTY );
2730
2731 return formatterJsonError.format( error );
2732 }
2733
2734 Signalement signalement = new Signalement( );
2735 signalement.setId( Long.parseLong( idSignalement ) );
2736
2737
2738
2739 WorkflowService workflowService = WorkflowService.getInstance( );
2740
2741 if ( workflowService.isAvailable( ) )
2742 {
2743
2744 Integer workflowId = _signalementWorkflowService.getSignalementWorkflowId( );
2745
2746 if ( workflowId != null )
2747 {
2748 State state = workflowService.getState( signalement.getId( ).intValue( ), Signalement.WORKFLOW_RESOURCE_TYPE, workflowId, null );
2749
2750 int etatInitialId = AppPropertiesService.getPropertyInt( ID_STATE_ETAT_INITIAL, -1 );
2751
2752
2753 if ( ( state == null ) || ( state.getId( ) == etatInitialId ) )
2754 {
2755
2756 workflowService.executeActionAutomatic( signalement.getId( ).intValue( ), Signalement.WORKFLOW_RESOURCE_TYPE, workflowId, null );
2757 }
2758 else
2759 {
2760 ErrorSignalementansmarue/modules/rest/pojo/ErrorSignalement.html#ErrorSignalement">ErrorSignalement error = new ErrorSignalement( );
2761 error.setErrorCode( SignalementRestConstants.ERROR_INVALID_STATE_ACTION );
2762 error.setErrorMessage( "Le statut de l'anomalie ne permet pas cette action" );
2763 return formatterJsonError.format( error );
2764 }
2765 }
2766 else
2767 {
2768 ErrorSignalementansmarue/modules/rest/pojo/ErrorSignalement.html#ErrorSignalement">ErrorSignalement error = new ErrorSignalement( );
2769 error.setErrorCode( SignalementRestConstants.ERROR_NO_WORKFLOW_SELECTED );
2770 error.setErrorMessage( "No workflow selected" );
2771 return formatterJsonError.format( error );
2772 }
2773 }
2774 else
2775 {
2776 ErrorSignalementansmarue/modules/rest/pojo/ErrorSignalement.html#ErrorSignalement">ErrorSignalement error = new ErrorSignalement( );
2777 error.setErrorCode( SignalementRestConstants.ERROR_NO_WORKFLOW_AVAILABLE );
2778 error.setErrorMessage( "Workflow not available" );
2779 return formatterJsonError.format( error );
2780 }
2781
2782 Signaleur signaleur = _signaleurService.loadByIdSignalement( Long.parseLong( idSignalement ) );
2783
2784
2785 try
2786 {
2787 if ( ( null != signaleur ) && StringUtils.isNotBlank( signaleur.getGuid( ) ) )
2788 {
2789 _signalementService.addFollower( Long.parseLong( idSignalement ), signaleur.getGuid( ), signaleur.getIdTelephone( ), signaleur.getMail( ),
2790 signalement.getPrefix( ), null, false );
2791 }
2792 }
2793 catch( AlreadyFollowedException e )
2794 {
2795 AppLogService.error( e );
2796 ErrorSignalementansmarue/modules/rest/pojo/ErrorSignalement.html#ErrorSignalement">ErrorSignalement error = new ErrorSignalement( );
2797 error.setErrorCode( SignalementRestConstants.ERROR_ALREADY_FOLLOWED );
2798 error.setErrorMessage( e.getMessage( ) );
2799 return formatterJsonError.format( error );
2800 }
2801 catch( InvalidStateActionException e )
2802 {
2803 AppLogService.error( e );
2804 ErrorSignalementansmarue/modules/rest/pojo/ErrorSignalement.html#ErrorSignalement">ErrorSignalement error = new ErrorSignalement( );
2805 error.setErrorCode( SignalementRestConstants.ERROR_INVALID_STATE_ACTION );
2806 error.setErrorMessage( e.getMessage( ) );
2807 return formatterJsonError.format( error );
2808 }
2809
2810 JSONObject jsonObject = new JSONObject( );
2811 JSONObject jsonAnswer = new JSONObject( );
2812 jsonAnswer.accumulate( SignalementRestConstants.JSON_TAG_STATUS, 0 );
2813 jsonObject.accumulate( SignalementRestConstants.JSON_TAG_ANSWER, jsonAnswer );
2814 jsonObject.accumulate( SignalementRestConstants.JSON_TAG_REQUEST, SignalementRestConstants.REQUEST_TYPE_PROCESS_WORKFLOW );
2815
2816 AppLogService.info( "processWorkflow, OK " + signalement.getId( ) );
2817
2818 return jsonObject.toString( );
2819 }
2820
2821
2822
2823
2824
2825
2826 public String checkVersion( )
2827 {
2828 JSONObject jsonAnswer = new JSONObject( );
2829
2830 jsonAnswer.accumulate( SignalementRestConstants.JSON_TAG_REQUEST, SignalementRestConstants.REQUEST_TYPE_CHECK_VERSION );
2831
2832 JSONObject jsonObject = new JSONObject( );
2833 jsonObject.accumulate( "androidVersionStore", DatastoreService.getDataValue( "sitelabels.site_property.android.version.store", null ) );
2834 jsonObject.accumulate( "androidMajObligatoire", DatastoreService.getDataValue( "sitelabels.site_property.android.maj.obligatoire", null ) );
2835 jsonObject.accumulate( "derniereVersionObligatoire",
2836 DatastoreService.getDataValue( "sitelabels.site_property.android.derniere.version.obligatoire", null ) );
2837 jsonObject.accumulate( "iosMajObligatoire", DatastoreService.getDataValue( "sitelabels.site_property.ios.maj.obligatoire", null ) );
2838 jsonObject.accumulate( "iosDerniereVersionObligatoire",
2839 DatastoreService.getDataValue( "sitelabels.site_property.ios.derniere.version.obligatoire", null ) );
2840
2841 jsonAnswer.accumulate( SignalementRestConstants.JSON_TAG_ANSWER, jsonObject );
2842
2843 return jsonAnswer.toString( );
2844
2845 }
2846
2847
2848
2849
2850
2851
2852
2853
2854
2855
2856 public void getAllSousTypeSignalementCascade( Integer typeSignalementId, List<TypeSignalement> listeTypeSignalement )
2857 {
2858 _typeSignalementService.getAllSousTypeSignalementCascade( typeSignalementId, listeTypeSignalement );
2859 }
2860
2861
2862
2863
2864
2865
2866
2867
2868 public Signalement getSignalementByID( Long lIdSignalement )
2869 {
2870 _signalementService = SpringContextService.getBean( SignalementRestConstants.PARAMETER_SIGNALEMENT_SERVICE_BEAN );
2871 return _signalementService.getSignalement( lIdSignalement );
2872 }
2873
2874
2875
2876
2877
2878
2879
2880
2881 public List<Photo> getPhotosBySignalementId( Long lIdSignalement )
2882 {
2883 _photoService = SpringContextService.getBean( SignalementRestConstants.PARAMETER_PHOTO_SERVICE_BEAN );
2884 List<PhotoDMR> photosDMR = _photoService.findWithFullPhotoBySignalementId( lIdSignalement );
2885 List<Photo> photos = new ArrayList<>( );
2886 for ( PhotoDMR photoDMR : photosDMR )
2887 {
2888 Photo photo = new Photo( photoDMR.getId( ), null, photoDMR.getImageThumbnail( ), photoDMR.getDate( ), photoDMR.getVue( ) );
2889 photo.setImageThumbnailUrl( getImageBase64( photo.getImageThumbnail( ) ) );
2890 photos.add( photo );
2891 }
2892
2893 return photos;
2894 }
2895
2896
2897
2898
2899
2900
2901
2902
2903 public String getAdresseBySignalementId( Long lIdSignalement )
2904 {
2905 _adresseService = SpringContextService.getBean( SignalementRestConstants.PARAMETER_ADRESSE_SERVICE_BEAN );
2906 return _adresseService.loadByIdSignalement( lIdSignalement ).getAdresse( );
2907 }
2908
2909
2910
2911
2912
2913
2914
2915
2916 public TypeSignalement getTypeSignalement( Integer nIdSignalement )
2917 {
2918 _typeSignalementService = SpringContextService.getBean( SignalementRestConstants.PARAMETER_TYPE_SIGNALEMENT_BEAN );
2919 return _typeSignalementService.getTypeSignalement( nIdSignalement );
2920 }
2921
2922
2923
2924
2925
2926
2927
2928
2929 public TypeSignalement findByIdTypeSignalement( Integer nIdSignalement )
2930 {
2931 _typeSignalementService = SpringContextService.getBean( SignalementRestConstants.PARAMETER_TYPE_SIGNALEMENT_BEAN );
2932 return _typeSignalementService.findByIdTypeSignalement( nIdSignalement );
2933 }
2934
2935
2936
2937
2938 @Override
2939 public List<Address> getAddressItem( String address )
2940 {
2941 _addressSuggestPOIService = SpringContextService.getBean( "addressSuggestPOIService" );
2942 return _addressSuggestPOIService.getAddressItem( address );
2943 }
2944
2945
2946
2947
2948 @Override
2949 public Double [ ] getGeomFromLambertToWgs84( Double dLatLambert, Double dLngLambert )
2950 {
2951 _signalementService = SpringContextService.getBean( SignalementRestConstants.PARAMETER_SIGNALEMENT_SERVICE_BEAN );
2952 return _signalementService.getGeomFromLambertToWgs84( dLatLambert, dLngLambert );
2953 }
2954
2955
2956
2957
2958 @Override
2959 public Double [ ] getGeomFromLambert93ToWgs84( Double dLatLambert, Double dLngLambert )
2960 {
2961 _signalementService = SpringContextService.getBean( SignalementRestConstants.PARAMETER_SIGNALEMENT_SERVICE_BEAN );
2962 return _signalementService.getGeomFromLambert93ToWgs84( dLatLambert, dLngLambert );
2963 }
2964
2965
2966
2967
2968 @Override
2969 public List<DossierSignalementDTO> findAllSignalementInPerimeterWithDTO( Double lat, Double lng, Integer radius )
2970 {
2971 _signalementService = SpringContextService.getBean( SignalementRestConstants.PARAMETER_SIGNALEMENT_SERVICE_BEAN );
2972 return _signalementService.findAllSignalementInPerimeterWithDTO( lat, lng, radius );
2973 }
2974
2975
2976
2977
2978 @Override
2979 public Integer getDistanceBetweenSignalement( double lat1, double lng1, double lat2, double lng2 )
2980 {
2981 _signalementService = SpringContextService.getBean( SignalementRestConstants.PARAMETER_SIGNALEMENT_SERVICE_BEAN );
2982 return _signalementService.getDistanceBetweenSignalement( lat1, lng1, lat2, lng2 );
2983 }
2984
2985
2986
2987
2988 @Override
2989 public boolean isSignalementFollowableAndisSignalementFollowedByUser( int nIdSignalement, String userGuid )
2990 {
2991 _signalementService = SpringContextService.getBean( SignalementRestConstants.PARAMETER_SIGNALEMENT_SERVICE_BEAN );
2992
2993 boolean isSignalementFollowedByUser = false;
2994 if ( userGuid != null )
2995 {
2996 isSignalementFollowedByUser = _signalementService.isSignalementFollowedByUser( nIdSignalement, userGuid );
2997 }
2998
2999 return !_signalementService.isSignalementFollowable( nIdSignalement ) || isSignalementFollowedByUser;
3000 }
3001
3002
3003
3004
3005 @Override
3006 public List<Priorite> getAllPriorite( )
3007 {
3008 return _prioriteService.getAllPriorite( );
3009 }
3010
3011
3012
3013
3014 @Override
3015 public Priorite loadPrioriteById( long lId )
3016 {
3017 return _prioriteService.load( lId );
3018 }
3019
3020
3021
3022
3023 @Override
3024 public Arrondissement getArrondissementByGeom( double lng, double lat )
3025 {
3026 return _arrondissementService.getArrondissementByGeom( lng, lat );
3027 }
3028
3029
3030
3031
3032 @Override
3033 public void addFollower( Long signalementId, String guid, String strUDID, String email, String device, String userToken, boolean createUser )
3034 {
3035 _signalementService.addFollower( signalementId, guid, strUDID, email, device, userToken, createUser );
3036 }
3037
3038
3039
3040
3041 @Override
3042 public String getDossiersCourrantsByGeomWithLimit( Double longitude, Double latitude )
3043 {
3044 RamenClientService ramenClientService = SpringContextService.getBean( "signalement-rest.ramenClientService" );
3045
3046 return ramenClientService.getDossiersCourrantsByGeommWithLimit( longitude, latitude );
3047
3048 }
3049
3050
3051
3052
3053 @Override
3054 public JSONObject sauvegarderSignalement( Signalement demandeSignalement, String userName, String userMail )
3055 {
3056 SignalementOutputPrcessor signalementProcessor = new SignalementOutputPrcessor( );
3057 return signalementProcessor.sauvegarderSignalementFromWS( demandeSignalement, userName, userMail );
3058 }
3059
3060
3061
3062
3063 @Override
3064 public Collection<Action> getListActionsByIdSignalementAndUser( int nIdSignalement, AdminUser user )
3065 {
3066 return _signalementService.getListActionsByIdSignalementAndUser( nIdSignalement, _signalementWorkflowService.getSignalementWorkflowId( ), user );
3067 }
3068
3069
3070
3071
3072
3073
3074
3075
3076 public String getImageBase64( ImageResource image )
3077 {
3078 String dataImg = "";
3079 if ( ( image != null ) && ( image.getImage( ) != null ) )
3080 {
3081 Base64 codec = new Base64( );
3082 String data = new String( codec.encode( image.getImage( ) ) );
3083 String mimeType = ( image.getMimeType( ) == null ) ? "data:image/jpg;base64," : ( "data:" + image.getMimeType( ) + BASE_64 );
3084 dataImg = mimeType + data;
3085 }
3086
3087 return dataImg;
3088 }
3089
3090
3091
3092
3093
3094
3095 private String [ ] getEmailDomainAccept( )
3096 {
3097 String property = AppPropertiesService.getProperty( SignalementRestConstants.PROPERTY_LIST_DOMAIN_EMAIL );
3098 String [ ] listDomainArr = null;
3099 if ( StringUtils.isNotBlank( property ) )
3100 {
3101
3102 if ( property.contains( "," ) )
3103 {
3104 listDomainArr = property.split( "," );
3105 }
3106 else
3107 {
3108 listDomainArr = new String [ 1];
3109 listDomainArr [0] = property;
3110 }
3111
3112
3113 for ( int i = 0; i < listDomainArr.length; ++i )
3114 {
3115 listDomainArr [i] = listDomainArr [i].toLowerCase( );
3116 }
3117 }
3118 return listDomainArr;
3119 }
3120
3121
3122
3123
3124
3125
3126
3127
3128 public Signalement getSignalementByToken( String token )
3129 {
3130 return _signalementService.getSignalementByToken( token );
3131 }
3132
3133
3134
3135
3136
3137
3138
3139
3140
3141
3142 public JSONObject getHistorySignalement( Integer idSignalement, HttpServletRequest request )
3143 {
3144 return _signalementService.getHistorySignalement( idSignalement, request );
3145 }
3146
3147
3148
3149
3150
3151
3152
3153
3154 public JSONArray getMessageServiceFaitGeneric( Long idSignalement )
3155 {
3156
3157 WorkflowService workflowService = WorkflowService.getInstance( );
3158
3159 Integer workflowId = _signalementWorkflowService.getSignalementWorkflowId( );
3160
3161 int stateSignalement = workflowService.getState( idSignalement.intValue( ), Signalement.WORKFLOW_RESOURCE_TYPE, workflowId, null ).getId( );
3162
3163 ActionFilter filter = new ActionFilter( );
3164 filter.setIdStateBefore( stateSignalement );
3165 filter.setIdStateAfter( AppPropertiesService.getPropertyInt( SignalementRestConstants.PROPERTY_ID_STATE_SERVICE_FAIT, -1 ) );
3166 List<Action> actions = _actionService.getListActionByFilter( filter );
3167 List<NotificationSignalementUserMultiContents> lstMessages = new ArrayList<>( );
3168 for ( Action action : actions )
3169 {
3170 List<ITask> tasks = _taskService.getListTaskByIdAction( action.getId( ), Locale.FRENCH );
3171 lstMessages.addAll( _signalementWorkflowService.getMessagesServiceFait( tasks ) );
3172 }
3173
3174 JSONArray messages = new JSONArray( );
3175 for ( NotificationSignalementUserMultiContents message : lstMessages )
3176 {
3177 JSONObject jsonmessage = new JSONObject( );
3178 jsonmessage.accumulate( SignalementRestConstants.JSON_TAG_NUMERO_MESSAGE, message.getIdMessage( ) );
3179 jsonmessage.accumulate( SignalementRestConstants.JSON_TAG_MESSAGE, message.getTitle( ) );
3180
3181 messages.add( jsonmessage );
3182 }
3183
3184 return messages;
3185
3186 }
3187
3188
3189
3190
3191
3192
3193
3194
3195 public JSONArray getMessageServiceFaitTypologie( Integer idTypeSignalement )
3196 {
3197 List<MessageTypologie> listMessageTypologie = _messageTypologieService.loadAllMessageActifByIdType( idTypeSignalement );
3198
3199 JSONArray messages = new JSONArray( );
3200 for ( MessageTypologie message : listMessageTypologie )
3201 {
3202 JSONObject jsonmessage = new JSONObject( );
3203 jsonmessage.accumulate( SignalementRestConstants.JSON_TAG_NUMERO_MESSAGE, message.getId( ) );
3204 jsonmessage.accumulate( SignalementRestConstants.JSON_TAG_MESSAGE, message.getTypeMessage( ) );
3205
3206 messages.add( jsonmessage );
3207 }
3208
3209 return messages;
3210 }
3211
3212
3213
3214
3215
3216
3217 public JSONObject selectMessageServiceFaitPresta( )
3218 {
3219 JSONObject jsonAnswer = new JSONObject( );
3220 JSONArray jsonArray = new JSONArray( );
3221
3222 Map<Integer, List<NotificationSignalementUserMultiContents>> listMessages = _signalementWorkflowService.selectMessageServiceFaitPresta( null );
3223
3224
3225 for ( Map.Entry<Integer, List<NotificationSignalementUserMultiContents>> entry : listMessages.entrySet( ) )
3226 {
3227 JSONObject statesMessages = new JSONObject( );
3228
3229 JSONArray messages = new JSONArray( );
3230
3231 ITask task = _taskService.findByPrimaryKey( entry.getKey( ), Locale.FRENCH );
3232 Action action = _actionService.findByPrimaryKey( task.getAction( ).getId( ) );
3233 State state = _stateService.findByPrimaryKey( action.getStateBefore( ).getId( ) );
3234
3235 for ( NotificationSignalementUserMultiContents mess : entry.getValue( ) )
3236 {
3237 JSONObject message = new JSONObject( );
3238 message.accumulate( SignalementRestConstants.JSON_TAG_NUMERO_MESSAGE, mess.getIdMessage( ) );
3239 message.accumulate( SignalementRestConstants.JSON_TAG_MESSAGE, mess.getTitle( ) );
3240
3241 messages.add( message );
3242 }
3243
3244 statesMessages.accumulate( "statut_anomalie", state.getName( ) );
3245 statesMessages.accumulate( "messages", messages );
3246
3247 jsonArray.add( statesMessages );
3248 }
3249 jsonAnswer.accumulate( "messages_sf", jsonArray );
3250
3251 return jsonAnswer;
3252 }
3253
3254
3255
3256
3257
3258
3259 public List<ObservationRejet> getRaisonRejet( )
3260 {
3261 return _observationRejetService.getAllObservationRejetActif( );
3262 }
3263
3264
3265
3266
3267
3268
3269
3270
3271 public String processIdentityStore( String strRequest )
3272 {
3273 IFormatter<ErrorSignalement> formatterJson = new ErrorSignalementFormatterJson( );
3274 try
3275 {
3276 JSONObject json = (JSONObject) JSONSerializer.toJSON( strRequest );
3277 String guid = json.getString( SignalementRestConstants.JSON_TAG_GUID );
3278 String name = getIdentityStoreAttributeValue( guid, "family_name" );
3279 if ( null == name )
3280 {
3281 name = StringUtils.EMPTY;
3282 }
3283 String firstname = getIdentityStoreAttributeValue( guid, "first_name" );
3284 String mail = getIdentityStoreAttributeValue( guid, "login" );
3285 JSONObject userJson = new JSONObject( );
3286 userJson.accumulate( SignalementRestConstants.JSON_TAG_NAME, name );
3287 userJson.accumulate( SignalementRestConstants.JSON_TAG_FIRSTNAME, firstname );
3288 userJson.accumulate( SignalementRestConstants.JSON_TAG_MAIL, mail );
3289 userJson.accumulate( SignalementRestConstants.JSON_TAG_IS_AGENT, StringUtilsDmr.endsWithAny( mail.toLowerCase( ), getEmailDomainAccept( ) ) );
3290
3291 JSONObject jsonAnswer = new JSONObject( );
3292 JSONObject jsonData = new JSONObject( );
3293 jsonData.accumulate( SignalementRestConstants.JSON_TAG_STATUS, 0 );
3294 jsonData.accumulate( SignalementRestConstants.JSON_TAG_USER, userJson );
3295 jsonAnswer.accumulate( SignalementRestConstants.JSON_TAG_ANSWER, jsonData );
3296 return jsonAnswer.toString( );
3297 }
3298 catch( JSONException e )
3299 {
3300 AppLogService.error( e.getMessage( ), e );
3301 ErrorSignalementansmarue/modules/rest/pojo/ErrorSignalement.html#ErrorSignalement">ErrorSignalement error = new ErrorSignalement( );
3302 error.setErrorCode( SignalementRestConstants.ERROR_BAD_JSON_REQUEST );
3303 error.setErrorMessage( e.getMessage( ) );
3304 return formatterJson.format( error );
3305 }
3306 }
3307 }