Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -2,36 +2,35 @@

import fr.insee.bpm.metadata.model.VariablesMap;
import fr.insee.genesis.controller.sources.xml.LunaticXmlCollectedData;
import fr.insee.genesis.controller.sources.xml.LunaticXmlOtherData;
import fr.insee.genesis.controller.sources.xml.LunaticXmlSurveyUnit;
import fr.insee.genesis.controller.sources.xml.ValueType;
import fr.insee.genesis.domain.model.surveyunit.SurveyUnitModel;
import fr.insee.genesis.domain.utils.LoopIdentifier;
import fr.insee.genesis.domain.model.surveyunit.CollectedVariable;
import fr.insee.genesis.domain.model.surveyunit.DataState;
import fr.insee.genesis.domain.model.surveyunit.Mode;
import fr.insee.genesis.domain.model.surveyunit.Variable;
import fr.insee.genesis.domain.model.surveyunit.VariableModel;
import lombok.experimental.UtilityClass;

import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;

@UtilityClass
public class LunaticXmlAdapter {

/**
* Convert a Lunatic XML survey unit into a genesis survey unit DTO
* Convert a Lunatic XML survey unit into a genesis survey unit model
* @param su Lunatic XML survey unit to convert
* @param variablesMap variable definitions (used for loops)
* @param idCampaign survey id
* @return a genesis survey unit DTO
* @return Genesis SurveyUnitModels for each data state
*/
public static List<SurveyUnitModel> convert(LunaticXmlSurveyUnit su, VariablesMap variablesMap, String idCampaign, Mode mode){
//Get COLLECTED Data and external variables
List<SurveyUnitModel> surveyUnitModelList = new ArrayList<>();
SurveyUnitModel surveyUnitModel = getStateDataFromSurveyUnit(su, variablesMap, idCampaign, DataState.COLLECTED, mode);
getExternalDataFromSurveyUnit(su, surveyUnitModel);
getExternalDataFromSurveyUnit(su, surveyUnitModel, variablesMap);

surveyUnitModelList.add(surveyUnitModel);

Expand Down Expand Up @@ -65,8 +64,8 @@ public static List<SurveyUnitModel> convert(LunaticXmlSurveyUnit su, VariablesMa
* @param su source XML Survey Unit
* @param variablesMap variable definitions (used for loops)
* @param idCampaign survey id
* @param dataState state of the DTO to generate
* @return Survey Unit DTO with a specific state
* @param dataState state of the SurveyUnitModel to generate
* @return SurveyUnitModel with a specific state
*/
private static SurveyUnitModel getStateDataFromSurveyUnit(LunaticXmlSurveyUnit su, VariablesMap variablesMap, String idCampaign, DataState dataState, Mode mode) {
SurveyUnitModel surveyUnitModel = SurveyUnitModel.builder()
Expand All @@ -84,15 +83,15 @@ private static SurveyUnitModel getStateDataFromSurveyUnit(LunaticXmlSurveyUnit s


/**
* Gets data from a specific state and put it into DTO's data
* Gets data from a specific state and put it into Model's data
* @param su XML survey unit to extract from
* @param surveyUnitModel DTO to aliment
* @param surveyUnitModel Model to aliment
* @param variablesMap variables definitions (used for loops)
* @param dataState data state from XML
* @return the DTO containing data, null if no data and not COLLECTED
* @return the SurveyUnitModel containing data, null if no data and not COLLECTED
*/
private static SurveyUnitModel getCollectedDataFromSurveyUnit(LunaticXmlSurveyUnit su, SurveyUnitModel surveyUnitModel, VariablesMap variablesMap, DataState dataState) {
List<CollectedVariable> variablesUpdate = new ArrayList<>();
List<VariableModel> variableModels = new ArrayList<>();

int dataCount = 0;
for (LunaticXmlCollectedData lunaticXmlCollectedData : su.getData().getCollected()){
Expand All @@ -116,23 +115,24 @@ private static SurveyUnitModel getCollectedDataFromSurveyUnit(LunaticXmlSurveyUn
default:
return null;
}
if(valueTypeList != null) {
for (int i = 1; i <= valueTypeList.size(); i++) {
List<String> variableValues = new ArrayList<>();
if (valueTypeList.get(i-1).getValue()!=null) {
variableValues.add(valueTypeList.get(i-1).getValue());
variablesUpdate.add(CollectedVariable.collectedVariableBuilder()
.idVar(lunaticXmlCollectedData.getVariableName())
.values(variableValues)
.idLoop(LoopIdentifier.getLoopIdentifier(lunaticXmlCollectedData.getVariableName(), variablesMap, i))
.idParent(LoopIdentifier.getRelatedVariableName(lunaticXmlCollectedData.getVariableName(), variablesMap))
.build());
dataCount++;
}
if(valueTypeList == null) {
continue; //Go to next data
}
for (int i = 1; i <= valueTypeList.size(); i++) {
List<String> variableValues = new ArrayList<>();
if (valueTypeList.get(i-1).getValue()!=null) {
variableValues.add(valueTypeList.get(i-1).getValue());
variableModels.add(VariableModel.builder()
.idVar(lunaticXmlCollectedData.getVariableName())
.values(variableValues)
.idLoop(LoopIdentifier.getLoopIdentifier(lunaticXmlCollectedData.getVariableName(), variablesMap, i))
.idParent(LoopIdentifier.getRelatedVariableName(lunaticXmlCollectedData.getVariableName(), variablesMap))
.build());
dataCount++;
}
}
}
surveyUnitModel.setCollectedVariables(variablesUpdate);
surveyUnitModel.setCollectedVariables(variableModels);

//Return null if no data and not COLLECTED
if(dataCount > 0 || dataState.equals(DataState.COLLECTED)){
Expand All @@ -144,29 +144,31 @@ private static SurveyUnitModel getCollectedDataFromSurveyUnit(LunaticXmlSurveyUn


/**
* Extract external data from XML survey unit and put it into DTO
* Extract external data from XML survey unit and put it into Model
* @param su XML survey unit
* @param surveyUnitModel DTO to aliment
* @param surveyUnitModel Model to aliment
*/
private static void getExternalDataFromSurveyUnit(LunaticXmlSurveyUnit su, SurveyUnitModel surveyUnitModel) {
List<Variable> externalVariables = new ArrayList<>();
su.getData().getExternal().forEach(lunaticXmlExternalData ->
externalVariables.add(Variable.builder()
.idVar(lunaticXmlExternalData.getVariableName())
.values(getValuesFromValueTypeList(lunaticXmlExternalData.getValues()))
.build())
);
surveyUnitModel.setExternalVariables(externalVariables);
}
private static void getExternalDataFromSurveyUnit(LunaticXmlSurveyUnit su, SurveyUnitModel surveyUnitModel, VariablesMap variablesMap) {
List<VariableModel> variableModels = new ArrayList<>();

private static List<String> getValuesFromValueTypeList(List<ValueType> valueTypeList) {
if (!valueTypeList.isEmpty()){
return valueTypeList.stream()
.map(ValueType::getValue)
.filter(Objects::nonNull)
.toList();
for(LunaticXmlOtherData lunaticXmlExternalData : su.getData().getExternal()){
List<ValueType> valueTypeList = lunaticXmlExternalData.getValues();
if(valueTypeList == null) {
continue; //Go to next data
}
for (int i = 1; i <= valueTypeList.size(); i++) {
List<String> variableValues = new ArrayList<>();
if (valueTypeList.get(i-1).getValue()!=null) {
variableValues.add(valueTypeList.get(i-1).getValue());
variableModels.add(VariableModel.builder()
.idVar(lunaticXmlExternalData.getVariableName())
.values(variableValues)
.idLoop(LoopIdentifier.getLoopIdentifier(lunaticXmlExternalData.getVariableName(), variablesMap, i))
.idParent(LoopIdentifier.getRelatedVariableName(lunaticXmlExternalData.getVariableName(), variablesMap))
.build());
}
}
}
return List.of();
surveyUnitModel.setExternalVariables(variableModels);
}

}
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
package fr.insee.genesis.controller.dto;

import fr.insee.genesis.domain.model.surveyunit.CollectedVariable;
import fr.insee.genesis.domain.model.surveyunit.Variable;
import fr.insee.genesis.domain.model.surveyunit.VariableModel;
import fr.insee.genesis.domain.model.surveyunit.Mode;
import lombok.Builder;
import lombok.Data;
Expand All @@ -16,6 +15,6 @@ public class SurveyUnitSimplified {
private String idCampaign;
private String idUE;
private Mode mode;
private List<CollectedVariable> variablesUpdate;
private List<Variable> externalVariables;
private List<VariableModel> variablesUpdate;
private List<VariableModel> externalVariables;
}
Original file line number Diff line number Diff line change
Expand Up @@ -17,10 +17,9 @@
import fr.insee.genesis.controller.sources.xml.LunaticXmlSurveyUnit;
import fr.insee.genesis.controller.utils.AuthUtils;
import fr.insee.genesis.controller.utils.ControllerUtils;
import fr.insee.genesis.domain.model.surveyunit.CollectedVariable;
import fr.insee.genesis.domain.model.surveyunit.Mode;
import fr.insee.genesis.domain.model.surveyunit.SurveyUnitModel;
import fr.insee.genesis.domain.model.surveyunit.Variable;
import fr.insee.genesis.domain.model.surveyunit.VariableModel;
import fr.insee.genesis.domain.ports.api.LunaticJsonRawDataApiPort;
import fr.insee.genesis.domain.ports.api.LunaticXmlRawDataApiPort;
import fr.insee.genesis.domain.ports.api.SurveyUnitApiPort;
Expand Down Expand Up @@ -319,8 +318,8 @@ public ResponseEntity<SurveyUnitSimplified> getLatestByUEOneObject(@RequestParam
@RequestParam("idQuestionnaire") String idQuestionnaire,
@RequestParam("mode") Mode mode) {
List<SurveyUnitModel> responses = surveyUnitService.findLatestByIdAndByIdQuestionnaire(idUE, idQuestionnaire);
List<CollectedVariable> outputVariables = new ArrayList<>();
List<Variable> outputExternalVariables = new ArrayList<>();
List<VariableModel> outputVariables = new ArrayList<>();
List<VariableModel> outputExternalVariables = new ArrayList<>();
responses.stream().filter(rep -> rep.getMode().equals(mode)).forEach(response -> {
outputVariables.addAll(response.getCollectedVariables());
outputExternalVariables.addAll(response.getExternalVariables());
Expand All @@ -346,8 +345,8 @@ public ResponseEntity<List<SurveyUnitSimplified>> getLatestForUEList(@RequestPar
idUEs.forEach(idUE -> {
List<SurveyUnitModel> responses = surveyUnitService.findLatestByIdAndByIdQuestionnaire(idUE.getIdUE(), idQuestionnaire);
modes.forEach(mode -> {
List<CollectedVariable> outputVariables = new ArrayList<>();
List<Variable> outputExternalVariables = new ArrayList<>();
List<VariableModel> outputVariables = new ArrayList<>();
List<VariableModel> outputExternalVariables = new ArrayList<>();
responses.stream().filter(rep -> rep.getMode().equals(mode)).forEach(response -> {
outputVariables.addAll(response.getCollectedVariables());
outputExternalVariables.addAll(response.getExternalVariables());
Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -26,8 +26,8 @@ public class SurveyUnitModel {
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd'T'hh:mm")
private LocalDateTime fileDate;

private List<CollectedVariable> collectedVariables;
private List<Variable> externalVariables;
private List<VariableModel> collectedVariables;
private List<VariableModel> externalVariables;

private String modifiedBy;

Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package fr.insee.genesis.domain.model.surveyunit;

import lombok.Builder;

import java.util.List;

@Builder
public record VariableModel(
String idVar,
List<String> values,
String idLoop,
String idParent
) {}
Loading
Loading