Skip to content

Commit d849c79

Browse files
Merge pull request #137 from InseeFr/devTableauxDynamiquesFix
Tableaux dynamiques fix perret
2 parents dc992ad + 5d665d0 commit d849c79

File tree

3 files changed

+33
-38
lines changed

3 files changed

+33
-38
lines changed

src/main/java/fr/insee/genesis/controller/dto/VariableDto.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
@Data
1111
public class VariableDto {
1212
private String variableName;
13+
private String idLoop;
1314

1415
@JsonProperty("variableStates")
1516
private List<VariableStateDto> variableStateDtoList;
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
package fr.insee.genesis.domain.model.surveyunit;
2+
3+
public record IdLoopTuple(String idVar, String idLoop) {
4+
}

src/main/java/fr/insee/genesis/domain/service/surveyunit/SurveyUnitService.java

Lines changed: 28 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,15 @@
11
package fr.insee.genesis.domain.service.surveyunit;
22

3-
import fr.insee.genesis.controller.dto.CampaignWithQuestionnaire;
4-
import fr.insee.genesis.controller.dto.QuestionnaireWithCampaign;
5-
import fr.insee.genesis.controller.dto.SurveyUnitDto;
6-
import fr.insee.genesis.controller.dto.SurveyUnitId;
7-
import fr.insee.genesis.controller.dto.VariableDto;
8-
import fr.insee.genesis.controller.dto.VariableStateDto;
9-
import fr.insee.genesis.domain.model.surveyunit.CollectedVariable;
10-
import fr.insee.genesis.domain.model.surveyunit.Mode;
11-
import fr.insee.genesis.domain.model.surveyunit.SurveyUnitModel;
12-
import fr.insee.genesis.domain.model.surveyunit.Variable;
3+
import fr.insee.genesis.controller.dto.*;
4+
import fr.insee.genesis.domain.model.surveyunit.*;
135
import fr.insee.genesis.domain.ports.api.SurveyUnitApiPort;
146
import fr.insee.genesis.domain.ports.spi.SurveyUnitPersistencePort;
157
import org.springframework.beans.factory.annotation.Autowired;
168
import org.springframework.beans.factory.annotation.Qualifier;
179
import org.springframework.stereotype.Service;
1810

1911
import java.time.LocalDateTime;
20-
import java.util.ArrayList;
21-
import java.util.HashMap;
22-
import java.util.List;
23-
import java.util.Map;
24-
import java.util.Set;
12+
import java.util.*;
2513
import java.util.stream.Stream;
2614

2715
@Service
@@ -77,7 +65,7 @@ public List<SurveyUnitModel> findLatestByIdAndByIdQuestionnaire(String idUE, Str
7765
//We had all the variables of the oldest update
7866
latestUpdatesbyVariables.add(suByMode.getFirst());
7967
//We keep the name of already added variables to skip them in older updates
80-
List<String> addedVariables = new ArrayList<>();
68+
List<IdLoopTuple> addedVariables = new ArrayList<>();
8169
SurveyUnitModel latestUpdate = suByMode.getFirst();
8270

8371
if(latestUpdate.getCollectedVariables() == null){
@@ -86,33 +74,33 @@ public List<SurveyUnitModel> findLatestByIdAndByIdQuestionnaire(String idUE, Str
8674
if(latestUpdate.getExternalVariables() == null){
8775
latestUpdate.setExternalVariables(new ArrayList<>());
8876
}
89-
latestUpdate.getCollectedVariables().forEach(variableStateDto -> addedVariables.add(variableStateDto.getIdVar()));
90-
latestUpdate.getExternalVariables().forEach(externalVariableDto -> addedVariables.add(externalVariableDto.getIdVar()));
77+
latestUpdate.getCollectedVariables().forEach(colVar -> addedVariables.add(new IdLoopTuple(colVar.getIdVar(), colVar.getIdLoop())));
78+
latestUpdate.getExternalVariables().forEach(extVar -> addedVariables.add(new IdLoopTuple(extVar.getIdVar(), "")));
9179

92-
suByMode.forEach(surveyUnitDto -> {
80+
suByMode.forEach(surveyUnitModel -> {
9381
List<CollectedVariable> variablesToKeep = new ArrayList<>();
9482
List<Variable> externalToKeep = new ArrayList<>();
9583
// We iterate over the variables of the update and add them to the list if they are not already added
96-
surveyUnitDto.getCollectedVariables().stream()
97-
.filter(variableStateDto -> !addedVariables.contains(variableStateDto.getIdVar()))
98-
.forEach(variableStateDto -> {
99-
variablesToKeep.add(variableStateDto);
100-
addedVariables.add(variableStateDto.getIdVar());
84+
surveyUnitModel.getCollectedVariables().stream()
85+
.filter(colVar -> !addedVariables.contains(new IdLoopTuple(colVar.getIdVar(), colVar.getIdLoop())))
86+
.forEach(colVar -> {
87+
variablesToKeep.add(colVar);
88+
addedVariables.add(new IdLoopTuple(colVar.getIdVar(), colVar.getIdLoop()));
10189
});
102-
if (surveyUnitDto.getExternalVariables() != null){
103-
surveyUnitDto.getExternalVariables().stream()
104-
.filter(externalVariableDto -> !addedVariables.contains(externalVariableDto.getIdVar()))
105-
.forEach(externalVariableDto -> {
106-
externalToKeep.add(externalVariableDto);
107-
addedVariables.add(externalVariableDto.getIdVar());
90+
if (surveyUnitModel.getExternalVariables() != null){
91+
surveyUnitModel.getExternalVariables().stream()
92+
.filter(extVar -> !addedVariables.contains(new IdLoopTuple(extVar.getIdVar(), "")))
93+
.forEach(extVar -> {
94+
externalToKeep.add(extVar);
95+
addedVariables.add(new IdLoopTuple(extVar.getIdVar(), ""));
10896
});
10997
}
11098

11199
// If there are new variables, we add the update to the list of latest updates
112100
if (!variablesToKeep.isEmpty() || !externalToKeep.isEmpty()){
113-
surveyUnitDto.setCollectedVariables(variablesToKeep);
114-
surveyUnitDto.setExternalVariables(externalToKeep);
115-
latestUpdatesbyVariables.add(surveyUnitDto);
101+
surveyUnitModel.setCollectedVariables(variablesToKeep);
102+
surveyUnitModel.setExternalVariables(externalToKeep);
103+
latestUpdatesbyVariables.add(surveyUnitModel);
116104
}
117105
});
118106
});
@@ -128,7 +116,7 @@ public SurveyUnitDto findLatestValuesByStateByIdAndByIdQuestionnaire(String idUE
128116
.build();
129117

130118
//Extract variables
131-
Map<String, VariableDto> collectedVariableMap = new HashMap<>();
119+
Map<IdLoopTuple, VariableDto> collectedVariableMap = new HashMap<>();
132120
Map<String, VariableDto> externalVariableMap = new HashMap<>();
133121
List<SurveyUnitModel> surveyUnitModels = surveyUnitPersistencePort.findByIds(idUE, idQuest);
134122
List<Mode> modes = getDistinctsModes(surveyUnitModels);
@@ -139,7 +127,7 @@ public SurveyUnitDto findLatestValuesByStateByIdAndByIdQuestionnaire(String idUE
139127
.toList();
140128
suByMode.forEach(surveyUnitModel -> extractVariables(surveyUnitModel, collectedVariableMap,externalVariableMap));
141129
});
142-
collectedVariableMap.keySet().forEach(variableName -> surveyUnitDto.getCollectedVariables().add(collectedVariableMap.get(variableName)));
130+
collectedVariableMap.keySet().forEach(variableTuple -> surveyUnitDto.getCollectedVariables().add(collectedVariableMap.get(variableTuple)));
143131
externalVariableMap.keySet().forEach(variableName -> surveyUnitDto.getExternalVariables().add(externalVariableMap.get(variableName)));
144132
return surveyUnitDto;
145133
}
@@ -241,22 +229,24 @@ private static List<Mode> getDistinctsModes(List<SurveyUnitModel> surveyUnitMode
241229
* @param externalVariableMap External variable DTO map to populate
242230
*/
243231
private void extractVariables(SurveyUnitModel surveyUnitModel,
244-
Map<String, VariableDto> collectedVariableMap,
232+
Map<IdLoopTuple, VariableDto> collectedVariableMap,
245233
Map<String, VariableDto> externalVariableMap) {
246234

247235
if(surveyUnitModel.getCollectedVariables() == null){
248236
surveyUnitModel.setCollectedVariables(new ArrayList<>());
249237
}
250238
for (CollectedVariable collectedVariable : surveyUnitModel.getCollectedVariables()) {
251-
VariableDto variableDto = collectedVariableMap.get(collectedVariable.getIdVar());
239+
IdLoopTuple idLoopTuple = new IdLoopTuple(collectedVariable.getIdVar(), collectedVariable.getIdLoop());
240+
VariableDto variableDto = collectedVariableMap.get(idLoopTuple);
252241

253242
//Create variable into map if not exists
254243
if (variableDto == null) {
255244
variableDto = VariableDto.builder()
256245
.variableName(collectedVariable.getIdVar())
246+
.idLoop(collectedVariable.getIdLoop())
257247
.variableStateDtoList(new ArrayList<>())
258248
.build();
259-
collectedVariableMap.put(collectedVariable.getIdVar(), variableDto);
249+
collectedVariableMap.put(idLoopTuple, variableDto);
260250
}
261251
//Extract variable state
262252
if (!collectedVariable.getValues().isEmpty() && isMostRecentForSameState(surveyUnitModel, variableDto)) {

0 commit comments

Comments
 (0)