Skip to content
Open
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
2 changes: 1 addition & 1 deletion pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@
<commons-lang3.version>3.20.0</commons-lang3.version>

<!-- Dependency versions not managed by Spring -->
<bpm.version>1.2.1</bpm.version>
<bpm.version>1.2.2</bpm.version>
<springdoc.version>3.0.3</springdoc.version>
<mapstruct.version>1.6.3</mapstruct.version>
<pitest.version>1.25.5</pitest.version>
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
package fr.insee.genesis.controller.dto;

public record ContextualVariableFileReportDto(
String fileName,
String type
) {}
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package fr.insee.genesis.controller.dto;

import java.util.List;

public record SaveContextualVariablesReportDto(
String questionnaireId,
int processedFiles,
List<ContextualVariableFileReportDto> files
) {}
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

import fr.insee.genesis.Constants;
import fr.insee.genesis.configuration.Config;
import fr.insee.genesis.controller.dto.SaveContextualVariablesReportDto;
import fr.insee.genesis.domain.model.surveyunit.Mode;
import fr.insee.genesis.domain.ports.api.ContextualExternalVariableApiPort;
import fr.insee.genesis.domain.ports.api.ContextualPreviousVariableApiPort;
Expand Down Expand Up @@ -62,6 +63,27 @@ public ResponseEntity<Object> saveContextualVariables(

}

@Operation(summary = "Save all contextual variables json files and return processed file details")
@PostMapping(path = "/json/report")
@PreAuthorize("hasAnyRole('USER_PLATINE','SCHEDULER')")
public ResponseEntity<SaveContextualVariablesReportDto> saveContextualVariablesWithReport(
@RequestParam("questionnaireId") String questionnaireId
) throws GenesisException {
FileUtils fileUtils = new FileUtils(config);

String contextualFolderPath =
fileUtils.getDataFolder(questionnaireId, "WEB", null) + Constants.CONTEXTUAL_FOLDER;

SaveContextualVariablesReportDto report =
contextualVariableApiPort.saveContextualVariableFilesWithReport(
questionnaireId,
fileUtils,
contextualFolderPath
);

return ResponseEntity.ok(report);
}

@Operation(summary = "Add contextual previous json file")
@PostMapping(path = "previous/json")
@PreAuthorize("hasAnyRole('USER_PLATINE','SCHEDULER','USER_BACK_OFFICE')")
Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,16 @@
package fr.insee.genesis.domain.ports.api;

import fr.insee.genesis.controller.dto.SaveContextualVariablesReportDto;
import fr.insee.genesis.domain.model.contextualvariable.ContextualVariableModel;
import fr.insee.genesis.exceptions.GenesisException;
import fr.insee.genesis.infrastructure.utils.FileUtils;

public interface ContextualVariableApiPort {
ContextualVariableModel getContextualVariable(String collectionInstrumentId, String interrogationId);
int saveContextualVariableFiles(String collectionInstrumentId, FileUtils fileUtils, String contextualFolderPath) throws GenesisException;
SaveContextualVariablesReportDto saveContextualVariableFilesWithReport(
String collectionInstrumentId,
FileUtils fileUtils,
String contextualFolderPath
) throws GenesisException;
}
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
package fr.insee.genesis.domain.service.contextualvariable;

import fr.insee.genesis.controller.dto.ContextualVariableFileReportDto;
import fr.insee.genesis.controller.dto.SaveContextualVariablesReportDto;
import fr.insee.genesis.controller.dto.VariableQualityToolDto;
import fr.insee.genesis.controller.dto.VariableStateDto;
import fr.insee.genesis.domain.model.contextualvariable.ContextualExternalVariableModel;
Expand All @@ -26,6 +28,7 @@
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.stream.Stream;

@Service
Expand Down Expand Up @@ -101,6 +104,95 @@ public int saveContextualVariableFiles(String collectionInstrumentId, FileUtils
return fileCount;
}

@Override
public SaveContextualVariablesReportDto saveContextualVariableFilesWithReport(
String collectionInstrumentId,
FileUtils fileUtils,
String contextualFolderPath
) throws GenesisException {
List<ContextualVariableFileReportDto> files = new ArrayList<>();

for (Mode mode : Mode.values()) {
try (Stream<Path> filePaths = Files.list(Path.of(contextualFolderPath))) {
Iterator<Path> it = filePaths
.filter(path -> path.toString().endsWith(".json"))
.iterator();

while (it.hasNext()) {
Path jsonFilePath = it.next();

Optional<ContextualVariableFileReportDto> report =
processContextualVariableFileForReport(collectionInstrumentId, jsonFilePath);

if (report.isPresent()) {
moveFile(collectionInstrumentId, mode, fileUtils, jsonFilePath.toString());
files.add(report.get());
}
}
} catch (NoSuchFileException nsfe) {
log.debug(nsfe.toString());
} catch (IOException ioe) {
log.warn(ioe.toString());
}
}

return new SaveContextualVariablesReportDto(
collectionInstrumentId,
files.size(),
files
);
}

private Optional<ContextualVariableFileReportDto> processContextualVariableFileForReport(
String collectionInstrumentId,
Path jsonFilePath
) throws GenesisException {
try {
Optional<String> type = processContextualVariableFileAndGetType(
collectionInstrumentId,
jsonFilePath
);

return type.map(value -> new ContextualVariableFileReportDto(
jsonFilePath.getFileName().toString(),
value
));
} catch (GenesisException e) {
throw new GenesisException(
e.getStatus(),
"Error while processing file '%s' : %s"
.formatted(jsonFilePath.getFileName().toString(), e.getMessage())
);
}
}

private Optional<String> processContextualVariableFileAndGetType(
String collectionInstrumentId,
Path jsonFilePath
) throws GenesisException {
boolean isPrevious = contextualPreviousVariableApiPort.readContextualPreviousFile(
collectionInstrumentId.toUpperCase(),
null,
jsonFilePath.toString()
);

if (isPrevious) {
return Optional.of("PREVIOUS");
}

boolean isExternal = contextualExternalVariableApiPort.readContextualExternalFile(
collectionInstrumentId.toUpperCase(),
jsonFilePath.toString()
);

if (isExternal) {
return Optional.of("EXTERNAL");
}

return Optional.empty();
}


private static void moveFile(String collectionInstrumentId, Mode mode, FileUtils fileUtils, String filePath) throws GenesisException {
try {
fileUtils.moveFiles(Path.of(filePath), fileUtils.getDoneFolder(collectionInstrumentId, mode.getFolder()));
Expand Down
Loading