@@ -139,25 +139,14 @@ public DataProcessResult processRawData(String campaignName, List<String> interr
139139
140140 //Increment data count
141141 dataCount += surveyUnitModels .size ();
142- formattedDataCount += surveyUnitModels .stream ().filter (
143- surveyUnitModel -> surveyUnitModel .getState ().equals (DataState .FORMATTED )
144- ).toList ().size ();
142+ formattedDataCount += surveyUnitModels .stream ()
143+ .filter (surveyUnitModel -> surveyUnitModel .getState ().equals (DataState .FORMATTED ))
144+ .toList ()
145+ .size ();
145146
146147 //Send processed ids grouped by questionnaire (if review activated)
147148 if (dataProcessingContext != null && dataProcessingContext .isWithReview ()) {
148- try {
149- ResponseEntity <Object > response =
150- surveyUnitQualityToolPort .sendProcessedIds (getProcessedIdsMap (surveyUnitModels ));
151-
152- if (response .getStatusCode ().is2xxSuccessful ()) {
153- log .info ("Successfully sent {} ids to quality tool" , getProcessedIdsMap (surveyUnitModels ).keySet ().size ());
154- }else {
155- log .warn ("Survey unit quality tool responded non-2xx code {} and body {}" ,
156- response .getStatusCode (), response .getBody ());
157- }
158- }catch (IOException e ){
159- log .error ("Error during Perret call request building : {}" , e .toString ());
160- }
149+ sendProcessedIdsToQualityTool (surveyUnitModels );
161150 }
162151
163152 //Remove processed ids from list
@@ -169,6 +158,22 @@ public DataProcessResult processRawData(String campaignName, List<String> interr
169158 return new DataProcessResult (dataCount , formattedDataCount );
170159 }
171160
161+ private void sendProcessedIdsToQualityTool (List <SurveyUnitModel > surveyUnitModels ) {
162+ try {
163+ ResponseEntity <Object > response =
164+ surveyUnitQualityToolPort .sendProcessedIds (getProcessedIdsMap (surveyUnitModels ));
165+
166+ if (response .getStatusCode ().is2xxSuccessful ()) {
167+ log .info ("Successfully sent {} ids to quality tool" , getProcessedIdsMap (surveyUnitModels ).size ());
168+ }else {
169+ log .warn ("Survey unit quality tool responded non-2xx code {} and body {}" ,
170+ response .getStatusCode (), response .getBody ());
171+ }
172+ }catch (IOException e ){
173+ log .error ("Error during Perret call request building : {}" , e .toString ());
174+ }
175+ }
176+
172177 private Map <String , Set <String >> getProcessedIdsMap (List <SurveyUnitModel > surveyUnitModels ) {
173178 Map <String , Set <String >> processedInterrogationIdsPerQuestionnaire = new HashMap <>();
174179 surveyUnitModels .forEach (model ->
@@ -186,24 +191,12 @@ public List<SurveyUnitModel> convertRawData(List<LunaticJsonRawDataModel> rawDat
186191 //For each possible data state (we receive COLLECTED or EDITED)
187192 for (DataState dataState : List .of (DataState .COLLECTED ,DataState .EDITED )){
188193 for (LunaticJsonRawDataModel rawData : rawDataList ) {
189- RawDataModelType rawDataModelType =
190- rawData .data ().containsKey ("data" ) ?
191- RawDataModelType .FILIERE :
192- RawDataModelType .DEFAULT ;
194+ RawDataModelType rawDataModelType = getRawDataModelType (rawData );
193195
194196 //Get optional fields
195- String contextualId = null ;
196- Boolean isCapturedIndirectly = null ;
197- LocalDateTime validationDate = null ;
198- try {
199- contextualId = rawData .data ().get ("contextualId" ) == null ? null : rawData .data ().get ("contextualId" ).toString ();
200- isCapturedIndirectly = rawData .data ().get ("isCapturedIndirectly" ) == null ? null :
201- Boolean .parseBoolean (rawData .data ().get ("isCapturedIndirectly" ).toString ());
202- validationDate = rawData .data ().get ("validationDate" ) == null ? null :
203- LocalDateTime .parse (rawData .data ().get ("validationDate" ).toString ());
204- }catch (Exception e ){
205- log .warn ("Exception during optional fields parsing : %s" .formatted (e .toString ()));
206- }
197+ String contextualId = getContextualId (rawData );
198+ Boolean isCapturedIndirectly = getIsCapturedIndirectly (rawData );
199+ LocalDateTime validationDate = getValidationDate (rawData );
207200
208201 SurveyUnitModel surveyUnitModel = SurveyUnitModel .builder ()
209202 .campaignId (rawData .campaignId ())
@@ -225,17 +218,18 @@ public List<SurveyUnitModel> convertRawData(List<LunaticJsonRawDataModel> rawDat
225218 convertRawDataCollectedVariables (rawData , surveyUnitModel , dataState , rawDataModelType , variablesMap );
226219
227220 //External variables conversion into COLLECTED document
228- if (dataState . equals ( DataState .COLLECTED ) ){
221+ if (dataState == DataState .COLLECTED ){
229222 convertRawDataExternalVariables (rawData , surveyUnitModel , rawDataModelType , variablesMap );
230223 }
231224
232- if (surveyUnitModel .getCollectedVariables ().isEmpty ()
233- && surveyUnitModel .getExternalVariables ().isEmpty ()
234- ){
225+ boolean hasNoVariable = surveyUnitModel .getCollectedVariables ().isEmpty ()
226+ && surveyUnitModel .getExternalVariables ().isEmpty ();
227+
228+ if (hasNoVariable ){
235229 if (surveyUnitModel .getState () == DataState .COLLECTED ){
236230 log .warn ("No collected or external variable for interrogation {}, raw data is ignored." , rawData .interrogationId ());
237231 }
238- continue ;
232+ continue ;// don't add suModel
239233 }
240234 surveyUnitModels .add (surveyUnitModel );
241235 }
@@ -244,6 +238,42 @@ public List<SurveyUnitModel> convertRawData(List<LunaticJsonRawDataModel> rawDat
244238 return surveyUnitModels ;
245239 }
246240
241+ private static RawDataModelType getRawDataModelType (LunaticJsonRawDataModel rawData ) {
242+ return rawData .data ().containsKey ("data" ) ?
243+ RawDataModelType .FILIERE :
244+ RawDataModelType .DEFAULT ;
245+ }
246+
247+ private static LocalDateTime getValidationDate (LunaticJsonRawDataModel rawData ) {
248+ try {
249+ return rawData .data ().get ("validationDate" ) == null ? null :
250+ LocalDateTime .parse (rawData .data ().get ("validationDate" ).toString ());
251+ }catch (Exception e ){
252+ log .warn ("Exception when parsing validation date : {}}" ,e .toString ());
253+ return null ;
254+ }
255+ }
256+
257+ private static Boolean getIsCapturedIndirectly (LunaticJsonRawDataModel rawData ) {
258+ try {
259+ return rawData .data ().get ("isCapturedIndirectly" ) == null ? null :
260+ Boolean .parseBoolean (rawData .data ().get ("isCapturedIndirectly" ).toString ());
261+ }catch (Exception e ){
262+ log .warn ("Exception when parsing isCapturedIndirectly : {}}" ,e .toString ());
263+ return Boolean .FALSE ;
264+ }
265+
266+ }
267+
268+ private static String getContextualId (LunaticJsonRawDataModel rawData ) {
269+ try {
270+ return rawData .data ().get ("contextualId" ) == null ? null : rawData .data ().get ("contextualId" ).toString ();
271+ }catch (Exception e ){
272+ log .warn ("Exception when parsing contextual id : {}}" ,e .toString ());
273+ return null ;
274+ }
275+ }
276+
247277 @ Override
248278 public List <LunaticJsonRawDataUnprocessedDto > getUnprocessedDataIds () {
249279 List <LunaticJsonRawDataUnprocessedDto > dtos = new ArrayList <>();
@@ -333,22 +363,34 @@ private void convertRawDataCollectedVariables(
333363
334364 }
335365
336- private static void convertToCollectedVar (SurveyUnitModel dstSurveyUnitModel , DataState dataState , VariablesMap variablesMap , Map <String , Object > collectedMap ) {
337- for (Map .Entry <String , Object > collectedVariable : collectedMap .entrySet ()) {
366+ private static void convertToCollectedVar (
367+ SurveyUnitModel dstSurveyUnitModel ,
368+ DataState dataState ,
369+ VariablesMap variablesMap ,
370+ Map <String , Object > collectedMap
371+ ) {
372+ final String stateKey = dataState .toString ();
373+ final var dest = dstSurveyUnitModel .getCollectedVariables ();
338374
339- //Skip if collected variable does not have state
340- if (!JsonUtils .asMap (collectedVariable .getValue ()).containsKey (dataState .toString ())){
341- continue ;
342- }
375+ for (Map .Entry <String , Object > collectedVariable : collectedMap .entrySet ()) {
376+ // Map for this variable (COLLECTED/EDITED -> value)
377+ Map <String , Object > states = JsonUtils .asMap (collectedVariable .getValue ());
343378
344- //Value
345- Object valuesForState = JsonUtils .asMap (collectedVariable .getValue ()).get (dataState .toString ());
346- if (valuesForState != null ) {
347- if (valuesForState instanceof List <?>) {
348- convertListVar (valuesForState , collectedVariable , variablesMap , dstSurveyUnitModel .getCollectedVariables ());
349- continue ;
379+ // nothing if no state
380+ if (states .containsKey (stateKey )) {
381+ Object value = states .get (stateKey );
382+
383+ // liste ?
384+ if (value instanceof List <?>) {
385+ // on garde exactement ta signature existante
386+ convertListVar (value , collectedVariable , variablesMap , dest );
387+ }
388+
389+ // scalaire non null ?
390+ if (value != null && !(value instanceof List <?>)) {
391+ // idem: on garde convertOneVar(entry, String, ...)
392+ convertOneVar (collectedVariable , String .valueOf (value ), variablesMap , 1 , dest );
350393 }
351- convertOneVar (collectedVariable , valuesForState .toString (), variablesMap , 1 , dstSurveyUnitModel .getCollectedVariables ());
352394 }
353395 }
354396 }
0 commit comments