Skip to content

Commit ee797e8

Browse files
committed
Merge branch 'main' into devAuth
2 parents 010f218 + 9600f11 commit ee797e8

File tree

7 files changed

+145
-46
lines changed

7 files changed

+145
-46
lines changed

.github/workflows/maven.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ jobs:
4646

4747
# Optional: Uploads the full dependency graph to GitHub to improve the quality of Dependabot alerts this repository can receive
4848
- name: Update dependency graph
49-
uses: advanced-security/maven-dependency-submission-action@4bf8a28b006c80b3063c8b2c951742d65173255a
49+
uses: advanced-security/maven-dependency-submission-action@4b6fc92adc1df4c41b470e692a1688a448907248
5050

5151
- name: Coveralls GitHub Action
5252
uses: coverallsapp/[email protected]

pom.xml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@
3232
<pitest.version>1.19.3</pitest.version>
3333
<pitest.junit.version>1.2.2</pitest.junit.version>
3434
<jackson.version>2.19.0</jackson.version>
35-
<bpm.version>1.0.6</bpm.version>
35+
<bpm.version>1.0.7</bpm.version>
3636
</properties>
3737
<dependencies>
3838
<dependency>
@@ -92,7 +92,7 @@
9292
<dependency>
9393
<groupId>net.sf.saxon</groupId>
9494
<artifactId>Saxon-HE</artifactId>
95-
<version>12.6</version>
95+
<version>12.7</version>
9696
</dependency>
9797

9898
<!-- JSON -->

src/main/java/fr/insee/genesis/controller/rest/responses/ResponseController.java

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,8 @@
1111
import fr.insee.genesis.controller.dto.SurveyUnitInputDto;
1212
import fr.insee.genesis.controller.dto.SurveyUnitQualityToolDto;
1313
import fr.insee.genesis.controller.dto.SurveyUnitSimplified;
14-
import fr.insee.genesis.controller.services.MetadataService;
1514
import fr.insee.genesis.controller.rest.CommonApiResponse;
15+
import fr.insee.genesis.controller.services.MetadataService;
1616
import fr.insee.genesis.controller.sources.xml.LunaticXmlCampaign;
1717
import fr.insee.genesis.controller.sources.xml.LunaticXmlDataParser;
1818
import fr.insee.genesis.controller.sources.xml.LunaticXmlDataSequentialParser;
@@ -58,6 +58,7 @@
5858
import java.time.LocalDateTime;
5959
import java.util.ArrayList;
6060
import java.util.List;
61+
import java.util.Set;
6162
import java.util.stream.Stream;
6263

6364
@RequestMapping(path = "/responses" )
@@ -77,7 +78,6 @@ public class ResponseController implements CommonApiResponse {
7778
private final AuthUtils authUtils;
7879
private final MetadataService metadataService;
7980

80-
8181
public ResponseController(SurveyUnitApiPort surveyUnitService,
8282
SurveyUnitQualityService surveyUnitQualityService,
8383
FileUtils fileUtils,
@@ -105,7 +105,7 @@ public ResponseEntity<Object> saveResponsesFromXmlFile(@RequestParam("pathLunati
105105
VariablesMap variablesMap;
106106
if(withDDI) {
107107
//Parse DDI
108-
log.info(String.format("Try to read DDI file : %s", metadataFilePath));
108+
log.info("Try to read DDI file : {}", metadataFilePath);
109109
try {
110110
variablesMap =
111111
DDIReader.getMetadataFromDDI(Path.of(metadataFilePath).toFile().toURI().toURL().toString(),
@@ -115,12 +115,12 @@ public ResponseEntity<Object> saveResponsesFromXmlFile(@RequestParam("pathLunati
115115
}
116116
}else{
117117
//Parse Lunatic
118-
log.info(String.format("Try to read lunatic file : %s", metadataFilePath));
118+
log.info("Try to read lunatic file : {}", metadataFilePath);
119119

120120
variablesMap = LunaticReader.getMetadataFromLunatic(new FileInputStream(metadataFilePath)).getVariables();
121121
}
122122

123-
log.info(String.format("Try to read Xml file : %s", xmlFile));
123+
log.info("Try to read Xml file : {}", xmlFile);
124124
Path filepath = Paths.get(xmlFile);
125125

126126
if (getFileSizeInMB(filepath) <= Constants.MAX_FILE_SIZE_UNTIL_SEQUENTIAL) {
@@ -324,9 +324,18 @@ public ResponseEntity<List<SurveyUnitSimplified>> getLatestForInterrogationList(
324324
public ResponseEntity<Object> saveEditedVariables(
325325
@RequestBody SurveyUnitInputDto surveyUnitInputDto
326326
){
327+
//Code quality : we need to put all that logic out of this controller
327328
//Parse metadata
328329
//Try to look for DDI first, if no DDI found looks for lunatic components
329330
List<GenesisError> errors = new ArrayList<>();
331+
//We need to retrieve campaignId
332+
Set<String> campaignIds = surveyUnitService.findCampaignIdsFrom(surveyUnitInputDto);
333+
if (campaignIds.size() != 1){
334+
return ResponseEntity.status(500).body("Impossible to assign one campaignId to that response");
335+
}
336+
// If the size is equal to 1 we get this campaignId
337+
String campaignId = campaignIds.iterator().next();
338+
surveyUnitInputDto.setCampaignId(campaignId);
330339
VariablesMap variablesMap = metadataService.readMetadatas(surveyUnitInputDto.getCampaignId(),
331340
surveyUnitInputDto.getMode().getModeName(), fileUtils, errors);
332341
if(variablesMap == null){
@@ -373,6 +382,8 @@ public ResponseEntity<Object> saveEditedVariables(
373382
return ResponseEntity.ok(SUCCESS_MESSAGE);
374383
}
375384

385+
386+
376387
//Utilities
377388
/**
378389
* Process a campaign with a specific mode
@@ -489,7 +500,6 @@ private ResponseEntity<Object> processXmlFileSequentially(Path filepath, Mode mo
489500

490501
log.info("Saved {} survey units updates from Xml file {}", suCount, filepath.getFileName());
491502
}
492-
493503
return ResponseEntity.ok().build();
494504
}
495505

src/main/java/fr/insee/genesis/controller/services/MetadataService.java

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,14 @@
11
package fr.insee.genesis.controller.services;
22

33
import fr.insee.bpm.exceptions.MetadataParserException;
4+
import fr.insee.bpm.metadata.model.MetadataModel;
5+
import fr.insee.bpm.metadata.model.Variable;
6+
import fr.insee.bpm.metadata.model.VariableType;
47
import fr.insee.bpm.metadata.model.VariablesMap;
58
import fr.insee.bpm.metadata.reader.ddi.DDIReader;
69
import fr.insee.bpm.metadata.reader.lunatic.LunaticReader;
10+
import fr.insee.genesis.Constants;
11+
import fr.insee.genesis.domain.utils.GroupUtils;
712
import fr.insee.genesis.exceptions.GenesisError;
813
import fr.insee.genesis.infrastructure.utils.FileUtils;
914
import lombok.extern.slf4j.Slf4j;
@@ -12,6 +17,7 @@
1217
import java.io.FileInputStream;
1318
import java.io.IOException;
1419
import java.nio.file.Path;
20+
import java.util.Arrays;
1521
import java.util.List;
1622
@Slf4j
1723
@Service
@@ -31,9 +37,16 @@ public VariablesMap parseMetadata(String metadataFilePath, boolean withDDI) {
3137
try {
3238
log.info("Try to read {} file: {}", withDDI ? "DDI" : "Lunatic", metadataFilePath);
3339
if (withDDI) {
34-
return DDIReader.getMetadataFromDDI(
40+
MetadataModel metadataModel = DDIReader.getMetadataFromDDI(
3541
Path.of(metadataFilePath).toFile().toURI().toURL().toString(),
36-
new FileInputStream(metadataFilePath)).getVariables();
42+
new FileInputStream(metadataFilePath));
43+
// Temporary solution
44+
// the logic of adding variables from lunatic to the ones present in the DDI needs to be implemented in BPM
45+
// (only in Kraftwerk for the moment)
46+
for (String enoVar : Constants.getEnoVariables()){
47+
metadataModel.getVariables().putVariable(new Variable(enoVar, metadataModel.getRootGroup(), VariableType.STRING));
48+
}
49+
return metadataModel.getVariables();
3750
} else {
3851
return LunaticReader.getMetadataFromLunatic(
3952
new FileInputStream(metadataFilePath)).getVariables();
@@ -78,6 +91,11 @@ public VariablesMap readMetadatas(String campaignName, String modeName, FileUtil
7891
return null;
7992
}
8093
}
94+
/* // Adding Eno variables if necessary
95+
// For review : not sure if this the best way to do it
96+
for (String enoVar : Arrays.stream(Constants.getEnoVariables()).toList()){
97+
variablesMap.putVariable(new Variable(enoVar, ));
98+
}*/
8199
return variablesMap;
82100
}
83101
}

src/main/java/fr/insee/genesis/domain/ports/api/SurveyUnitApiPort.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,12 @@
22

33
import fr.insee.bpm.metadata.model.VariablesMap;
44
import fr.insee.genesis.controller.dto.CampaignWithQuestionnaire;
5+
import fr.insee.genesis.controller.dto.InterrogationId;
6+
import fr.insee.genesis.controller.dto.QuestionnaireWithCampaign;
57
import fr.insee.genesis.controller.dto.SurveyUnitDto;
68
import fr.insee.genesis.controller.dto.SurveyUnitInputDto;
79
import fr.insee.genesis.domain.model.surveyunit.Mode;
8-
import fr.insee.genesis.controller.dto.QuestionnaireWithCampaign;
910
import fr.insee.genesis.domain.model.surveyunit.SurveyUnitModel;
10-
import fr.insee.genesis.controller.dto.InterrogationId;
1111
import fr.insee.genesis.exceptions.GenesisException;
1212

1313
import java.util.List;
@@ -57,4 +57,6 @@ List<SurveyUnitModel> parseEditedVariables(SurveyUnitInputDto surveyUnitInputDto
5757
VariablesMap variablesMap) throws GenesisException;
5858

5959
String findQuestionnaireIdByInterrogationId(String interrogationId) throws GenesisException;
60+
61+
Set<String> findCampaignIdsFrom(SurveyUnitInputDto dto);
6062
}

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

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,9 @@
1010
import fr.insee.genesis.controller.dto.VariableInputDto;
1111
import fr.insee.genesis.controller.dto.VariableStateDto;
1212
import fr.insee.genesis.domain.model.surveyunit.DataState;
13-
import fr.insee.genesis.domain.model.surveyunit.VarIdScopeTuple;
1413
import fr.insee.genesis.domain.model.surveyunit.Mode;
1514
import fr.insee.genesis.domain.model.surveyunit.SurveyUnitModel;
15+
import fr.insee.genesis.domain.model.surveyunit.VarIdScopeTuple;
1616
import fr.insee.genesis.domain.model.surveyunit.VariableModel;
1717
import fr.insee.genesis.domain.ports.api.SurveyUnitApiPort;
1818
import fr.insee.genesis.domain.ports.spi.SurveyUnitPersistencePort;
@@ -29,6 +29,7 @@
2929
import java.util.List;
3030
import java.util.Map;
3131
import java.util.Set;
32+
import java.util.stream.Collectors;
3233
import java.util.stream.Stream;
3334

3435
@Service
@@ -315,6 +316,17 @@ public String findQuestionnaireIdByInterrogationId(String interrogationId) throw
315316
return questionnaireIds.iterator().next(); //Return first (and supposed only) element of set
316317
}
317318

319+
@Override
320+
public Set<String> findCampaignIdsFrom(SurveyUnitInputDto dto) {
321+
List<SurveyUnitModel> responses = findByIdsInterrogationAndQuestionnaire(
322+
dto.getInterrogationId(),
323+
dto.getQuestionnaireId()
324+
);
325+
return responses.stream()
326+
.map(SurveyUnitModel::getCampaignId)
327+
.collect(Collectors.toSet());
328+
}
329+
318330
//Utils
319331
private static List<Mode> getDistinctsModes(List<SurveyUnitModel> surveyUnitModels) {
320332
List<Mode> sources = new ArrayList<>();

0 commit comments

Comments
 (0)