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.formatters;
35
36 import java.util.List;
37
38 import org.apache.commons.collections.CollectionUtils;
39 import org.apache.commons.lang.StringUtils;
40
41 import fr.paris.lutece.plugins.dansmarue.business.entities.Adresse;
42 import fr.paris.lutece.plugins.dansmarue.business.entities.PhotoDMR;
43 import fr.paris.lutece.plugins.dansmarue.business.entities.Signalement;
44 import fr.paris.lutece.plugins.dansmarue.business.entities.Signaleur;
45 import fr.paris.lutece.plugins.dansmarue.modules.rest.util.constants.SignalementRestConstants;
46 import fr.paris.lutece.plugins.dansmarue.modules.rest.util.date.DateUtils;
47 import fr.paris.lutece.plugins.dansmarue.service.IPhotoService;
48 import fr.paris.lutece.plugins.dansmarue.service.ISignalementSuiviService;
49 import fr.paris.lutece.plugins.dansmarue.service.ITypeSignalementService;
50 import fr.paris.lutece.plugins.dansmarue.service.IWorkflowService;
51 import fr.paris.lutece.plugins.rest.service.formatters.IFormatter;
52 import fr.paris.lutece.plugins.rest.util.json.JSONUtil;
53 import fr.paris.lutece.plugins.workflowcore.business.state.State;
54 import fr.paris.lutece.portal.service.spring.SpringContextService;
55 import fr.paris.lutece.portal.service.util.AppPropertiesService;
56 import fr.paris.lutece.portal.service.workflow.WorkflowService;
57 import net.sf.json.JSONArray;
58 import net.sf.json.JSONObject;
59
60
61
62
63 public class SignalementFormatterJson implements IFormatter<Signalement>
64 {
65
66
67 public static final String PHOTO_SERVICE_BEAN_NAME = "photoService";
68
69
70
71
72 private String _formatWithGuid = null;
73
74
75
76
77 @Override
78 public String format( Signalement signalement )
79 {
80 JSONObject jsonObject = formatSignalement( signalement );
81
82 if ( ( _formatWithGuid != null ) && ( signalement != null ) )
83 {
84 ISignalementSuiviService signalementSuiviService = SpringContextService.getBean( "signalementSuiviService" );
85
86 boolean isFallowByUser = signalementSuiviService.findByIdSignalementAndGuid( signalement.getId( ), _formatWithGuid ) != -1;
87 jsonObject.accumulate( SignalementRestConstants.JSON_TAG_IS_INCIDENT_FOLLOWED_BY_USER, isFallowByUser );
88 }
89
90 return jsonObject.toString( );
91 }
92
93
94
95
96 @Override
97 public String format( List<Signalement> listSignalement )
98 {
99 JSONArray jsonArray = new JSONArray( );
100
101 for ( Signalement signalement : listSignalement )
102 {
103 jsonArray.element( format( signalement ) );
104 }
105
106
107 return jsonArray.toString( );
108 }
109
110
111
112
113 @Override
114 public String formatError( String strCode, String strMessage )
115 {
116 if ( StringUtils.isNumeric( strCode ) )
117 {
118 return JSONUtil.formatError( strMessage, Integer.parseInt( strCode ) );
119 }
120 else
121 {
122 return JSONUtil.formatError( strMessage, -1 );
123 }
124 }
125
126
127
128
129
130
131
132
133 public static JSONObject formatSignalement( Signalement signalement )
134 {
135 IPhotoService photoService = SpringContextService.getBean( PHOTO_SERVICE_BEAN_NAME );
136 IWorkflowService signalementWorkflowService = SpringContextService.getBean( "signalement.workflowService" );
137 ITypeSignalementService typeSignalementService = SpringContextService.getBean( "typeSignalementService" );
138 ISignalementSuiviService signalementSuiviService = SpringContextService.getBean( "signalementSuiviService" );
139
140 JSONObject jsonObject = new JSONObject( );
141
142 if ( signalement != null )
143 {
144 jsonObject.accumulate( SignalementRestConstants.JSON_TAG_INCIDENT_ID, signalement.getId( ) );
145
146 int idCategory = typeSignalementService.getCategoryFromTypeId( signalement.getTypeSignalement( ).getId( ) );
147
148 jsonObject.accumulate( SignalementRestConstants.JSON_TAG_INCIDENT_CATEGORIE_ID, idCategory );
149
150 int nbFollowers = signalementSuiviService.getNbFollowersByIdSignalement( signalement.getId( ).intValue( ) );
151 jsonObject.accumulate( SignalementRestConstants.JSON_TAG_INCIDENT_FOLLOWERS, nbFollowers );
152
153 if ( CollectionUtils.isNotEmpty( signalement.getSignaleurs( ) ) )
154 {
155 Signaleur signaleur = signalement.getSignaleurs( ).get( 0 );
156 if ( StringUtils.isNotBlank( signaleur.getGuid( ) ) )
157 {
158 jsonObject.accumulate( SignalementRestConstants.JSON_TAG_INCIDENT_REPORTER_GUID, signaleur.getGuid( ) );
159 }
160
161 jsonObject.accumulate( SignalementRestConstants.JSON_TAG_IS_INCIDENT_ANONYME, StringUtils.isBlank( signaleur.getMail( ) )
162 && signalementSuiviService.findUsersMailByIdSignalement( signalement.getId( ) ).isEmpty( ) );
163 }
164
165 jsonObject.accumulate( SignalementRestConstants.JSON_TAG_INCIDENT_CONGRATULATIONS, signalement.getFelicitations( ) );
166
167 jsonObject.accumulate( SignalementRestConstants.JSON_TAG_INCIDENT_ALIAS, signalement.getTypeSignalement( ).getAliasMobileDefault( ) );
168 String strStatus = "O";
169 int nStateId = 0;
170 String stateName="";
171
172
173
174 WorkflowService workflowService = WorkflowService.getInstance( );
175
176 if ( workflowService.isAvailable( ) )
177 {
178
179 Integer workflowId = signalementWorkflowService.getSignalementWorkflowId( );
180
181 if ( workflowId != null )
182 {
183 if(( signalement.getStateName( ) == null ) && ( signalement.getIdState( ) <= 0 )) {
184 State state = workflowService.getState( signalement.getId( ).intValue( ), Signalement.WORKFLOW_RESOURCE_TYPE, workflowId, null );
185 stateName = state.getName( );
186 nStateId = state.getId( );
187 } else {
188 stateName = signalement.getStateName( );
189 nStateId = signalement.getIdState( );
190 }
191
192
193
194
195
196
197 if ( ( nStateId == 7 ) || ( nStateId == 13 ) || ( ( nStateId == 18 ) && !signalement.getIsSendWS( ) ) )
198 {
199 strStatus = "O";
200 }
201 else
202 if ( ( ( nStateId == 8 ) || ( nStateId == 9 ) ) || ( ( nStateId == 21 ) && !signalement.getIsSendWS( ) ) )
203 {
204 strStatus = "U";
205 }
206 else
207 if ( ( nStateId == 10 ) || ( nStateId == 11 ) || ( nStateId == 12 ) || ( nStateId == 22 ) )
208 {
209 strStatus = "R";
210 }
211 else
212 if ( ( nStateId == 15 ) || ( nStateId == 20 ) || ( nStateId == 12 ) )
213 {
214 strStatus = "ONR";
215 }
216 else
217 if ( ( ( nStateId == 18 ) || ( nStateId == 21 ) ) && signalement.getIsSendWS( ) )
218 {
219 strStatus = "T";
220 }
221 }
222 }
223
224 jsonObject.accumulate( SignalementRestConstants.JSON_TAG_INCIDENT_STATE, strStatus );
225 jsonObject.accumulate( SignalementRestConstants.JSON_TAG_INCIDENT_STATE_ID, nStateId );
226 jsonObject.accumulate( SignalementRestConstants.JSON_TAG_INCIDENT_STATE_NAME, stateName );
227
228
229 for ( Adresse adresse : signalement.getAdresses( ) )
230 {
231 jsonObject.accumulate( SignalementRestConstants.JSON_TAG_INCIDENT_ADDRESS, adresse.getAdresse( ) );
232 jsonObject.accumulate( SignalementRestConstants.JSON_TAG_INCIDENT_LAT, adresse.getLat( ) );
233 jsonObject.accumulate( SignalementRestConstants.JSON_TAG_INCIDENT_LNG, adresse.getLng( ) );
234 }
235
236 jsonObject.accumulate( SignalementRestConstants.JSON_TAG_INCIDENT_DESCRIPTIVE, signalement.getCommentaire( ) );
237 jsonObject.accumulate( SignalementRestConstants.JSON_TAG_INCIDENT_COMMENTAIRE_AGENT, signalement.getCommentaireAgentTerrain( ) );
238 jsonObject.accumulate( SignalementRestConstants.JSON_TAG_INCIDENT_DATE, DateUtils.convertDate( signalement.getDateCreation( ) ) );
239 jsonObject.accumulate( SignalementRestConstants.JSON_TAG_INCIDENT_HOUR, DateUtils.convertHour( signalement.getHeureCreation( ) ) );
240 jsonObject.accumulate( SignalementRestConstants.JSON_TAG_INCIDENT_PRECISION_TERRAIN, signalement.getPrecisionTerrain( ) );
241
242 JSONObject jsonObjectPictures = new JSONObject( );
243
244 List<PhotoDMR> listPhotos = photoService.findBySignalementId( signalement.getId( ) );
245 JSONArray jsonPictureFar = new JSONArray( );
246 JSONArray jsonPictureClose = new JSONArray( );
247 JSONArray jsonPictureDone = new JSONArray( );
248
249 for ( PhotoDMR photo : listPhotos )
250 {
251 String token = "";
252 if(StringUtils.isNotBlank( photo.getCheminPhoto( ) )) {
253 token = "_"+photo.getCheminPhoto( ).split("_")[0];
254 }
255
256 if ( photo.getVue( ).equals( SignalementRestConstants.VUE_PRES ) )
257 {
258 jsonPictureClose.element( AppPropertiesService.getProperty( SignalementRestConstants.PROPERTY_URL_PICTURE ) + photo.getId( )+token );
259 }
260 else
261 if ( photo.getVue( ).equals( SignalementRestConstants.VUE_ENSEMBLE ) )
262 {
263 jsonPictureFar.element( AppPropertiesService.getProperty( SignalementRestConstants.PROPERTY_URL_PICTURE ) + photo.getId( )+token );
264 }
265 else
266 if ( photo.getVue( ).equals( SignalementRestConstants.VUE_SERVICE_FAIT ) )
267 {
268 jsonPictureDone.element( AppPropertiesService.getProperty( SignalementRestConstants.PROPERTY_URL_PICTURE ) + photo.getId( )+token );
269 }
270 }
271
272 jsonObjectPictures.accumulate( SignalementRestConstants.JSON_TAG_INCIDENT_CLOSE, jsonPictureClose );
273 jsonObjectPictures.accumulate( SignalementRestConstants.JSON_TAG_INCIDENT_FAR, jsonPictureFar );
274 jsonObjectPictures.accumulate( SignalementRestConstants.JSON_TAG_INCIDENT_DONE, jsonPictureDone );
275
276 jsonObject.accumulate( SignalementRestConstants.JSON_TAG_INCIDENT_PICTURES, jsonObjectPictures );
277
278 jsonObject.accumulate( SignalementRestConstants.JSON_TAG_INCIDENT_CONFIRMS, signalement.getSuivi( ) );
279
280 jsonObject.accumulate( SignalementRestConstants.JSON_TAG_INCIDENT_PRIORITE_ID, signalement.getPriorite( ).getId( ) );
281
282 jsonObject.accumulate( SignalementRestConstants.JSON_TAG_INCIDENT_INVALIDATIONS, 0 );
283
284 jsonObject.accumulate( SignalementRestConstants.JSON_TAG_INCIDENT_SOURCE,
285 AppPropertiesService.getProperty( SignalementRestConstants.PROPERTY_INCIDENT_SOURCE_DMR ) );
286
287 jsonObject.accumulate( SignalementRestConstants.JSON_TAG_INCIDENT_NUEMERO, signalement.getNumeroSignalement( ) );
288 jsonObject.accumulate( SignalementRestConstants.JSON_TAG_INCIDENT_TOKEN, signalement.getToken( ) );
289
290 }
291
292 return jsonObject;
293 }
294
295
296
297
298
299
300
301 public void setFormatWithGuid( String formatWithGuid )
302 {
303 _formatWithGuid = formatWithGuid;
304 }
305
306 }