Skip to content

Commit 256b1e0

Browse files
committed
refactor: moved common raw process logic into abstract class
1 parent d550698 commit 256b1e0

7 files changed

Lines changed: 382 additions & 492 deletions

File tree

Lines changed: 18 additions & 142 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,13 @@
11
package fr.insee.genesis.domain.converter.rawdata;
22

3-
import fr.insee.bpm.metadata.model.Variable;
43
import fr.insee.bpm.metadata.model.VariablesMap;
5-
import fr.insee.genesis.Constants;
64
import fr.insee.genesis.domain.model.surveyunit.DataState;
75
import fr.insee.genesis.domain.model.surveyunit.SurveyUnitModel;
8-
import fr.insee.genesis.domain.model.surveyunit.VariableModel;
96
import fr.insee.genesis.domain.model.surveyunit.rawdata.LunaticJsonRawDataModel;
107
import fr.insee.genesis.domain.model.surveyunit.rawdata.RawDataModelType;
118
import fr.insee.genesis.domain.parser.rawdata.LunaticJsonRawDataPayloadParser;
129
import fr.insee.genesis.domain.service.surveyunit.SurveyUnitService;
13-
import fr.insee.genesis.domain.utils.GroupUtils;
14-
import fr.insee.genesis.domain.utils.JsonUtils;
1510
import lombok.extern.slf4j.Slf4j;
16-
import org.springframework.lang.Nullable;
1711
import org.springframework.stereotype.Component;
1812

1913
import java.time.Instant;
@@ -24,7 +18,7 @@
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

Comments
 (0)