11package fr .insee .genesis .domain .converter .rawdata ;
22
3- import fr .insee .bpm .metadata .model .Variable ;
43import fr .insee .bpm .metadata .model .VariablesMap ;
5- import fr .insee .genesis .Constants ;
64import fr .insee .genesis .domain .model .surveyunit .DataState ;
75import fr .insee .genesis .domain .model .surveyunit .SurveyUnitModel ;
8- import fr .insee .genesis .domain .model .surveyunit .VariableModel ;
96import fr .insee .genesis .domain .model .surveyunit .rawdata .LunaticJsonRawDataModel ;
107import fr .insee .genesis .domain .model .surveyunit .rawdata .RawDataModelType ;
118import fr .insee .genesis .domain .parser .rawdata .LunaticJsonRawDataPayloadParser ;
129import fr .insee .genesis .domain .service .surveyunit .SurveyUnitService ;
13- import fr .insee .genesis .domain .utils .GroupUtils ;
14- import fr .insee .genesis .domain .utils .JsonUtils ;
1510import lombok .extern .slf4j .Slf4j ;
16- import org .springframework .lang .Nullable ;
1711import org .springframework .stereotype .Component ;
1812
1913import java .time .Instant ;
2418
2519@ Component
2620@ Slf4j
27- public class LunaticJsonRawDataConverter extends RawDataConverter {
21+ public class LunaticJsonRawDataConverter extends RawDataConverter {
2822
2923 private final LunaticJsonRawDataPayloadParser payloadParser ;
3024
@@ -70,7 +64,7 @@ public List<SurveyUnitModel> convertRawDataAndCollectEmptyModels(
7064 .get (dataState );
7165 }
7266
73- SurveyUnitModel surveyUnitModel = SurveyUnitModel .builder ()
67+ SurveyUnitModel newSurveyUnitModel = SurveyUnitModel .builder ()
7468 .collectionInstrumentId (rawData .questionnaireId ())
7569 .mode (rawData .mode ())
7670 .interrogationId (rawData .interrogationId ())
@@ -85,32 +79,39 @@ public List<SurveyUnitModel> convertRawDataAndCollectEmptyModels(
8579 .externalVariables (new ArrayList <>())
8680 .build ();
8781
88- convertRawDataCollectedVariables (
89- rawData ,
82+ convertCollectedVariables (
83+ rawData .data (),
84+ rawData .interrogationId (),
9085 lastSurveyUnitModelForDataState ,
91- surveyUnitModel ,
86+ newSurveyUnitModel ,
9287 dataState ,
9388 rawDataModelType ,
9489 variablesMap
9590 );
9691
9792 if (dataState == DataState .COLLECTED ) {
98- convertRawDataExternalVariables (rawData , surveyUnitModel , rawDataModelType , variablesMap );
93+ convertExternalVariables (
94+ rawData .data (),
95+ lastSurveyUnitModelForDataState ,
96+ newSurveyUnitModel ,
97+ rawDataModelType ,
98+ variablesMap
99+ );
99100 }
100101
101- boolean hasNoVariable = surveyUnitModel .getCollectedVariables ().isEmpty ()
102- && surveyUnitModel .getExternalVariables ().isEmpty ();
102+ boolean hasNoVariable = newSurveyUnitModel .getCollectedVariables ().isEmpty ()
103+ && newSurveyUnitModel .getExternalVariables ().isEmpty ();
103104
104105 if (hasNoVariable ) {
105- if (surveyUnitModel .getState () == DataState .COLLECTED ) {
106+ if (newSurveyUnitModel .getState () == DataState .COLLECTED ) {
106107 log .warn ("No collected or external variable for interrogation {}, raw data is ignored." ,
107108 rawData .interrogationId ());
108109 }
109- emptySurveyUnitModels .add (surveyUnitModel );
110+ emptySurveyUnitModels .add (newSurveyUnitModel );
110111 continue ;
111112 }
112113
113- surveyUnitModels .add (surveyUnitModel );
114+ surveyUnitModels .add (newSurveyUnitModel );
114115 }
115116 }
116117
@@ -122,129 +123,4 @@ private static RawDataModelType getRawDataModelType(LunaticJsonRawDataModel rawD
122123 ? RawDataModelType .FILIERE
123124 : RawDataModelType .LEGACY ;
124125 }
125-
126- private void convertRawDataCollectedVariables (
127- LunaticJsonRawDataModel srcRawData ,
128- @ Nullable SurveyUnitModel lastSurveyUnitModel ,
129- SurveyUnitModel dstSurveyUnitModel ,
130- DataState dataState ,
131- RawDataModelType rawDataModelType ,
132- VariablesMap variablesMap
133- ) {
134- Map <String , Object > dataMap = srcRawData .data ();
135- if (rawDataModelType == RawDataModelType .FILIERE ) {
136- dataMap = JsonUtils .asMap (dataMap .get ("data" ));
137- }
138-
139- Map <String , Object > collectedMap = JsonUtils .asMap (dataMap .get ("COLLECTED" ));
140-
141- if (collectedMap == null || collectedMap .isEmpty ()) {
142- if (dataState == DataState .COLLECTED ) {
143- log .warn ("No collected data for interrogation {}" , srcRawData .interrogationId ());
144- }
145- return ;
146- }
147-
148- String stateKey = dataState .toString ();
149- List <VariableModel > destination = dstSurveyUnitModel .getCollectedVariables ();
150-
151- for (Map .Entry <String , Object > collectedVariable : collectedMap .entrySet ()) {
152- RawResponseRawDataConverter .processCollectedVariableForState (
153- collectedVariable ,
154- stateKey ,
155- variablesMap ,
156- lastSurveyUnitModel ,
157- dstSurveyUnitModel ,
158- destination
159- );
160- }
161- }
162-
163-
164- private static void convertRawDataExternalVariables (
165- LunaticJsonRawDataModel srcRawData ,
166- SurveyUnitModel dstSurveyUnitModel ,
167- RawDataModelType rawDataModelType ,
168- VariablesMap variablesMap
169- ) {
170- Map <String , Object > dataMap = srcRawData .data ();
171- if (rawDataModelType == RawDataModelType .FILIERE ) {
172- dataMap = JsonUtils .asMap (dataMap .get ("data" ));
173- }
174-
175- Map <String , Object > externalMap = JsonUtils .asMap (dataMap .get ("EXTERNAL" ));
176- if (externalMap != null && !externalMap .isEmpty ()) {
177- convertToExternalVar (dstSurveyUnitModel , variablesMap , externalMap );
178- }
179- }
180-
181- private static void convertToExternalVar (
182- SurveyUnitModel dstSurveyUnitModel ,
183- VariablesMap variablesMap ,
184- Map <String , Object > externalMap
185- ) {
186- for (Map .Entry <String , Object > externalVariableEntry : externalMap .entrySet ()) {
187- Object valueObject = externalVariableEntry .getValue ();
188-
189- if (valueObject instanceof List <?>) {
190- convertListVar (valueObject , externalVariableEntry , variablesMap , dstSurveyUnitModel .getExternalVariables ());
191- continue ;
192- }
193-
194- if (valueObject != null ) {
195- convertOneVar (
196- externalVariableEntry ,
197- valueObject .toString (),
198- variablesMap ,
199- 1 ,
200- dstSurveyUnitModel .getExternalVariables ()
201- );
202- }
203- }
204- }
205-
206- private static void convertListVar (
207- Object valuesForState ,
208- Map .Entry <String , Object > collectedVariable ,
209- VariablesMap variablesMap ,
210- List <VariableModel > destination
211- ) {
212- List <String > values = JsonUtils .asStringList (valuesForState );
213- if (!values .isEmpty ()) {
214- int iteration = 1 ;
215- for (String value : values ) {
216- if (value != null && !value .isEmpty ()) {
217- convertOneVar (collectedVariable , value , variablesMap , iteration , destination );
218- }
219- iteration ++;
220- }
221- }
222- }
223-
224- private static void convertOneVar (
225- Map .Entry <String , Object > variableEntry ,
226- String value ,
227- VariablesMap variablesMap ,
228- int iteration ,
229- List <VariableModel > destination
230- ) {
231- VariableModel variableModel = VariableModel .builder ()
232- .varId (variableEntry .getKey ())
233- .value (value )
234- .scope (getIdLoop (variablesMap , variableEntry .getKey ()))
235- .iteration (iteration )
236- .parentId (GroupUtils .getParentGroupName (variableEntry .getKey (), variablesMap ))
237- .build ();
238-
239- destination .add (variableModel );
240- }
241-
242- private static String getIdLoop (VariablesMap variablesMap , String variableName ) {
243- Variable variable = variablesMap .getVariable (variableName );
244- if (variable == null ) {
245- log .warn ("Variable {} not present in metadata, assigning to {}" , variableName , Constants .ROOT_GROUP_NAME );
246- return Constants .ROOT_GROUP_NAME ;
247- }
248- return variable .getGroupName ();
249- }
250126}
0 commit comments