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 @@ -11,8 +11,8 @@
import fr.insee.genesis.controller.dto.SurveyUnitInputDto;
import fr.insee.genesis.controller.dto.SurveyUnitQualityToolDto;
import fr.insee.genesis.controller.dto.SurveyUnitSimplified;
import fr.insee.genesis.controller.services.MetadataService;
import fr.insee.genesis.controller.rest.CommonApiResponse;
import fr.insee.genesis.controller.services.MetadataService;
import fr.insee.genesis.controller.sources.xml.LunaticXmlCampaign;
import fr.insee.genesis.controller.sources.xml.LunaticXmlDataParser;
import fr.insee.genesis.controller.sources.xml.LunaticXmlDataSequentialParser;
Expand Down Expand Up @@ -58,6 +58,7 @@
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
import java.util.stream.Stream;

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


public ResponseController(SurveyUnitApiPort surveyUnitService,
SurveyUnitQualityService surveyUnitQualityService,
FileUtils fileUtils,
Expand Down Expand Up @@ -105,7 +105,7 @@ public ResponseEntity<Object> saveResponsesFromXmlFile(@RequestParam("pathLunati
VariablesMap variablesMap;
if(withDDI) {
//Parse DDI
log.info(String.format("Try to read DDI file : %s", metadataFilePath));
log.info("Try to read DDI file : {}", metadataFilePath);
try {
variablesMap =
DDIReader.getMetadataFromDDI(Path.of(metadataFilePath).toFile().toURI().toURL().toString(),
Expand All @@ -115,12 +115,12 @@ public ResponseEntity<Object> saveResponsesFromXmlFile(@RequestParam("pathLunati
}
}else{
//Parse Lunatic
log.info(String.format("Try to read lunatic file : %s", metadataFilePath));
log.info("Try to read lunatic file : {}", metadataFilePath);

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

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

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



//Utilities
/**
* Process a campaign with a specific mode
Expand Down Expand Up @@ -489,7 +500,6 @@ private ResponseEntity<Object> processXmlFileSequentially(Path filepath, Mode mo

log.info("Saved {} survey units updates from Xml file {}", suCount, filepath.getFileName());
}

return ResponseEntity.ok().build();
}

Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,14 @@
package fr.insee.genesis.controller.services;

import fr.insee.bpm.exceptions.MetadataParserException;
import fr.insee.bpm.metadata.model.MetadataModel;
import fr.insee.bpm.metadata.model.Variable;
import fr.insee.bpm.metadata.model.VariableType;
import fr.insee.bpm.metadata.model.VariablesMap;
import fr.insee.bpm.metadata.reader.ddi.DDIReader;
import fr.insee.bpm.metadata.reader.lunatic.LunaticReader;
import fr.insee.genesis.Constants;
import fr.insee.genesis.domain.utils.GroupUtils;
import fr.insee.genesis.exceptions.GenesisError;
import fr.insee.genesis.infrastructure.utils.FileUtils;
import lombok.extern.slf4j.Slf4j;
Expand All @@ -12,6 +17,7 @@
import java.io.FileInputStream;
import java.io.IOException;
import java.nio.file.Path;
import java.util.Arrays;
import java.util.List;
@Slf4j
@Service
Expand All @@ -31,9 +37,16 @@ public VariablesMap parseMetadata(String metadataFilePath, boolean withDDI) {
try {
log.info("Try to read {} file: {}", withDDI ? "DDI" : "Lunatic", metadataFilePath);
if (withDDI) {
return DDIReader.getMetadataFromDDI(
MetadataModel metadataModel = DDIReader.getMetadataFromDDI(
Path.of(metadataFilePath).toFile().toURI().toURL().toString(),
new FileInputStream(metadataFilePath)).getVariables();
new FileInputStream(metadataFilePath));
// Temporary solution
// the logic of adding variables from lunatic to the ones present in the DDI needs to be implemented in BPM
// (only in Kraftwerk for the moment)
for (String enoVar : Constants.getEnoVariables()){
metadataModel.getVariables().putVariable(new Variable(enoVar, metadataModel.getRootGroup(), VariableType.STRING));
}
return metadataModel.getVariables();
} else {
return LunaticReader.getMetadataFromLunatic(
new FileInputStream(metadataFilePath)).getVariables();
Expand Down Expand Up @@ -78,6 +91,11 @@ public VariablesMap readMetadatas(String campaignName, String modeName, FileUtil
return null;
}
}
/* // Adding Eno variables if necessary
// For review : not sure if this the best way to do it
for (String enoVar : Arrays.stream(Constants.getEnoVariables()).toList()){
variablesMap.putVariable(new Variable(enoVar, ));
}*/
return variablesMap;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,12 @@

import fr.insee.bpm.metadata.model.VariablesMap;
import fr.insee.genesis.controller.dto.CampaignWithQuestionnaire;
import fr.insee.genesis.controller.dto.InterrogationId;
import fr.insee.genesis.controller.dto.QuestionnaireWithCampaign;
import fr.insee.genesis.controller.dto.SurveyUnitDto;
import fr.insee.genesis.controller.dto.SurveyUnitInputDto;
import fr.insee.genesis.domain.model.surveyunit.Mode;
import fr.insee.genesis.controller.dto.QuestionnaireWithCampaign;
import fr.insee.genesis.domain.model.surveyunit.SurveyUnitModel;
import fr.insee.genesis.controller.dto.InterrogationId;
import fr.insee.genesis.exceptions.GenesisException;

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

String findQuestionnaireIdByInterrogationId(String interrogationId) throws GenesisException;

Set<String> findCampaignIdsFrom(SurveyUnitInputDto dto);
}
Original file line number Diff line number Diff line change
Expand Up @@ -10,9 +10,9 @@
import fr.insee.genesis.controller.dto.VariableInputDto;
import fr.insee.genesis.controller.dto.VariableStateDto;
import fr.insee.genesis.domain.model.surveyunit.DataState;
import fr.insee.genesis.domain.model.surveyunit.VarIdScopeTuple;
import fr.insee.genesis.domain.model.surveyunit.Mode;
import fr.insee.genesis.domain.model.surveyunit.SurveyUnitModel;
import fr.insee.genesis.domain.model.surveyunit.VarIdScopeTuple;
import fr.insee.genesis.domain.model.surveyunit.VariableModel;
import fr.insee.genesis.domain.ports.api.SurveyUnitApiPort;
import fr.insee.genesis.domain.ports.spi.SurveyUnitPersistencePort;
Expand All @@ -29,6 +29,7 @@
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.stream.Collectors;
import java.util.stream.Stream;

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

@Override
public Set<String> findCampaignIdsFrom(SurveyUnitInputDto dto) {
List<SurveyUnitModel> responses = findByIdsInterrogationAndQuestionnaire(
dto.getInterrogationId(),
dto.getQuestionnaireId()
);
return responses.stream()
.map(SurveyUnitModel::getCampaignId)
.collect(Collectors.toSet());
}

//Utils
private static List<Mode> getDistinctsModes(List<SurveyUnitModel> surveyUnitModels) {
List<Mode> sources = new ArrayList<>();
Expand Down
Loading
Loading