Skip to content

Commit 1940fd6

Browse files
committed
Merge branch 'main' into devModeleFiliere
2 parents 0742eda + 2bdbaef commit 1940fd6

File tree

18 files changed

+41133
-78
lines changed

18 files changed

+41133
-78
lines changed

.github/workflows/create-release.yaml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,7 @@ jobs:
8989
mvn package --no-transfer-progress
9090
9191
- name: Upload app jar
92-
uses: actions/upload-artifact@v5
92+
uses: actions/upload-artifact@v6
9393
with:
9494
name: app-jar
9595
path: target/*.jar
@@ -165,7 +165,7 @@ jobs:
165165
- uses: actions/checkout@v6
166166

167167
- name: Download uploaded jar
168-
uses: actions/download-artifact@v6
168+
uses: actions/download-artifact@v7
169169
with:
170170
name: app-jar
171171
path: target/

.github/workflows/docker.yaml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ jobs:
4242
run: mvn package --no-transfer-progress
4343

4444
- name: Upload API jar
45-
uses: actions/upload-artifact@v5
45+
uses: actions/upload-artifact@v6
4646
with:
4747
name: app-jar
4848
path: target/*.jar
@@ -55,7 +55,7 @@ jobs:
5555
- uses: actions/checkout@v6
5656

5757
- name: Download uploaded jar
58-
uses: actions/download-artifact@v6
58+
uses: actions/download-artifact@v7
5959
with:
6060
name: app-jar
6161
path: target/

pom.xml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
<modelVersion>4.0.0</modelVersion>
55
<groupId>fr.insee.genesis</groupId>
66
<artifactId>genesis-api</artifactId>
7-
<version>1.13.2</version>
7+
<version>1.13.3</version>
88
<packaging>jar</packaging>
99
<name>genesis-api</name>
1010

@@ -36,7 +36,7 @@
3636
<pitest.version>1.22.0</pitest.version>
3737
<pitest.junit.version>1.2.3</pitest.junit.version>
3838
<jackson.version>2.19.0</jackson.version>
39-
<bpm.version>1.0.20</bpm.version>
39+
<bpm.version>1.0.21</bpm.version>
4040
</properties>
4141
<dependencies>
4242
<dependency>

src/main/java/fr/insee/genesis/Constants.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@ public class Constants {
5959
// Data extraction parameters
6060
public static final int BATCH_SIZE = 100; //Adapt to avoid OutOfMemoryException
6161
public static final String DIFFERENTIAL_DATA_FOLDER_NAME = "differential/data";
62+
public static final String CONTEXTUAL_FOLDER = "/contextual";
6263

6364
// Kraftwerk service path parameters
6465
public static final String KRAFTWERK_MAIN_ENDPOINT = "";

src/main/java/fr/insee/genesis/controller/rest/QuestionnaireMetadataController.java

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -9,12 +9,7 @@
99
import org.springframework.http.ResponseEntity;
1010
import org.springframework.security.access.prepost.PreAuthorize;
1111
import org.springframework.stereotype.Controller;
12-
import org.springframework.web.bind.annotation.DeleteMapping;
13-
import org.springframework.web.bind.annotation.GetMapping;
14-
import org.springframework.web.bind.annotation.PostMapping;
15-
import org.springframework.web.bind.annotation.RequestBody;
16-
import org.springframework.web.bind.annotation.RequestMapping;
17-
import org.springframework.web.bind.annotation.RequestParam;
12+
import org.springframework.web.bind.annotation.*;
1813

1914
@Controller
2015
@RequestMapping(path = "/questionnaire-metadata")

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

Lines changed: 21 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package fr.insee.genesis.controller.rest.responses;
22

3+
import fr.insee.genesis.Constants;
34
import fr.insee.genesis.configuration.Config;
45
import fr.insee.genesis.domain.model.surveyunit.Mode;
56
import fr.insee.genesis.domain.ports.api.ContextualExternalVariableApiPort;
@@ -10,6 +11,7 @@
1011
import io.swagger.v3.oas.annotations.Operation;
1112
import lombok.AllArgsConstructor;
1213
import lombok.extern.slf4j.Slf4j;
14+
import org.springframework.http.HttpStatus;
1315
import org.springframework.http.HttpStatusCode;
1416
import org.springframework.http.ResponseEntity;
1517
import org.springframework.security.access.prepost.PreAuthorize;
@@ -50,12 +52,16 @@ public ResponseEntity<Object> getContextualVariables(
5052
@PreAuthorize("hasAnyRole('USER_PLATINE','SCHEDULER')")
5153
public ResponseEntity<Object> saveContextualVariables(
5254
@RequestParam("questionnaireId") String questionnaireId
53-
){
55+
) {
5456
try {
5557
FileUtils fileUtils = new FileUtils(config);
56-
int fileCount = contextualVariableApiPort.saveContextualVariableFiles(questionnaireId, fileUtils);
58+
59+
String contextualFolderPath = fileUtils.getDataFolder(questionnaireId, "WEB", null) + Constants.CONTEXTUAL_FOLDER;
60+
61+
int fileCount = contextualVariableApiPort.saveContextualVariableFiles(questionnaireId, fileUtils,contextualFolderPath);
62+
5763
return ResponseEntity.ok("%d file(s) processed for questionnaire %s !".formatted(fileCount, questionnaireId));
58-
}catch (GenesisException ge){
64+
} catch (GenesisException ge) {
5965
return ResponseEntity.status(HttpStatusCode.valueOf(ge.getStatus())).body(ge.getMessage());
6066
}
6167
}
@@ -72,8 +78,11 @@ public ResponseEntity<Object> readContextualPreviousJson(
7278
try {
7379
FileUtils fileUtils = new FileUtils(config);
7480

75-
String filePath = "%s/%s".formatted(
81+
fileUtils.ensureContextualFolderExists(questionnaireId, mode);
82+
83+
String filePath = "%s%s/%s".formatted(
7684
fileUtils.getDataFolder(questionnaireId, mode.getFolder(), null),
85+
Constants.CONTEXTUAL_FOLDER,
7786
jsonFileName
7887
);
7988
if (!jsonFileName.toLowerCase().endsWith(".json")) {
@@ -84,7 +93,8 @@ public ResponseEntity<Object> readContextualPreviousJson(
8493
return ResponseEntity.ok("Contextual previous variable file %s saved !".formatted(filePath));
8594
}catch (GenesisException ge){
8695
return ResponseEntity.status(HttpStatusCode.valueOf(ge.getStatus())).body(ge.getMessage());
87-
}
96+
} catch (IOException ioe) {
97+
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body("Erreur IO : " + ioe.getMessage()); }
8898
}
8999

90100
@Operation(summary = "Add contextual external json file")
@@ -98,8 +108,11 @@ public ResponseEntity<Object> readContextualExternalJson(
98108
try {
99109
FileUtils fileUtils = new FileUtils(config);
100110

101-
String filePath = "%s/%s".formatted(
111+
fileUtils.ensureContextualFolderExists(questionnaireId, mode);
112+
113+
String filePath = "%s%s/%s".formatted(
102114
fileUtils.getDataFolder(questionnaireId, mode.getFolder(), null),
115+
Constants.CONTEXTUAL_FOLDER,
103116
jsonFileName
104117
);
105118
if (!jsonFileName.toLowerCase().endsWith(".json")) {
@@ -110,6 +123,8 @@ public ResponseEntity<Object> readContextualExternalJson(
110123
return ResponseEntity.ok("Contextual external variable file %s saved !".formatted(filePath));
111124
}catch (GenesisException ge){
112125
return ResponseEntity.status(HttpStatusCode.valueOf(ge.getStatus())).body(ge.getMessage());
126+
} catch (IOException ioe) {
127+
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body("Erreur IO : " + ioe.getMessage());
113128
}
114129
}
115130

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

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
import fr.insee.bpm.exceptions.MetadataParserException;
44
import fr.insee.bpm.metadata.model.MetadataModel;
55
import fr.insee.bpm.metadata.model.VariablesMap;
6-
import fr.insee.bpm.metadata.reader.ddi.DDIReader;
6+
import fr.insee.bpm.metadata.reader.ReaderUtils;
77
import fr.insee.bpm.metadata.reader.lunatic.LunaticReader;
88
import fr.insee.genesis.Constants;
99
import fr.insee.genesis.controller.adapter.LunaticXmlAdapter;
@@ -53,11 +53,7 @@
5353

5454
import javax.xml.parsers.ParserConfigurationException;
5555
import javax.xml.stream.XMLStreamException;
56-
import java.io.File;
57-
import java.io.FileInputStream;
58-
import java.io.FileNotFoundException;
59-
import java.io.IOException;
60-
import java.io.InputStream;
56+
import java.io.*;
6157
import java.net.MalformedURLException;
6258
import java.nio.file.Files;
6359
import java.nio.file.Path;
@@ -643,8 +639,9 @@ private static VariablesMap getVariablesMapWithPath(String metadataFilePath) thr
643639
//Parse DDI
644640
log.info("Try to read DDI file : {}", metadataFilePath);
645641
try {
646-
return DDIReader.getMetadataFromDDI(Path.of(metadataFilePath).toFile().toURI().toURL().toString(),
647-
new FileInputStream(metadataFilePath)).getVariables();
642+
InputStream metadataInputStream = new FileInputStream(metadataFilePath);
643+
return ReaderUtils.getMetadataFromDDIAndLunatic(Path.of(metadataFilePath).toFile().toURI().toURL().toString(),
644+
metadataInputStream,metadataInputStream).getVariables();
648645
} catch (MetadataParserException e) {
649646
throw new GenesisException(500, e.getMessage());
650647
} catch (FileNotFoundException fnfe){

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,5 +6,5 @@
66

77
public interface ContextualVariableApiPort {
88
ContextualVariableModel getContextualVariable(String collectionInstrumentId, String interrogationId);
9-
int saveContextualVariableFiles(String collectionInstrumentId, FileUtils fileUtils) throws GenesisException;
9+
int saveContextualVariableFiles(String collectionInstrumentId, FileUtils fileUtils, String contextualFolderPath) throws GenesisException;
1010
}

src/main/java/fr/insee/genesis/domain/service/contextualvariable/ContextualVariableJsonService.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@ public ContextualVariableModel getContextualVariable(String collectionInstrument
7575
}
7676

7777
@Override
78-
public int saveContextualVariableFiles(String collectionInstrumentId, FileUtils fileUtils) throws GenesisException {
78+
public int saveContextualVariableFiles(String collectionInstrumentId, FileUtils fileUtils, String contextualFolderPath) throws GenesisException {
7979
int fileCount = 0;
8080

8181
for (Mode mode : Mode.values()) {

src/main/java/fr/insee/genesis/domain/service/metadata/QuestionnaireMetadataService.java

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
import fr.insee.bpm.metadata.model.MetadataModel;
55
import fr.insee.bpm.metadata.model.Variable;
66
import fr.insee.bpm.metadata.model.VariableType;
7-
import fr.insee.bpm.metadata.reader.ddi.DDIReader;
7+
import fr.insee.bpm.metadata.reader.ReaderUtils;
88
import fr.insee.bpm.metadata.reader.lunatic.LunaticReader;
99
import fr.insee.genesis.Constants;
1010
import fr.insee.genesis.domain.model.metadata.QuestionnaireMetadataModel;
@@ -20,6 +20,7 @@
2020

2121
import java.io.FileInputStream;
2222
import java.io.IOException;
23+
import java.io.InputStream;
2324
import java.nio.file.Path;
2425
import java.util.List;
2526

@@ -53,7 +54,13 @@ public MetadataModel loadAndSaveIfNotExists(String campaignName, String collecti
5354
saveMetadata(collectionInstrumentId.toUpperCase(), mode, metadataModel);
5455
return metadataModel;
5556
}
56-
return questionnaireMetadataModels.getFirst().metadataModel();
57+
58+
MetadataModel metadataModel =
59+
readMetadatas(campaignName, mode.getModeName(), fileUtils, errors);
60+
61+
saveMetadata(questionnaireId.toUpperCase(), mode, metadataModel);
62+
63+
return metadataModel;
5764
}
5865

5966
private void saveMetadata(String collectionInstrumentId, Mode mode, MetadataModel metadataModel) {
@@ -119,16 +126,18 @@ private MetadataModel parseMetadata(String metadataFilePath, boolean withDDI) {
119126
try {
120127
log.info("Try to read {} file: {}", withDDI ? "DDI" : "Lunatic", metadataFilePath);
121128
if (withDDI) {
122-
MetadataModel metadataModel = DDIReader.getMetadataFromDDI(
129+
InputStream metadataInputStream = new FileInputStream(metadataFilePath);
130+
MetadataModel metadataModel = ReaderUtils.getMetadataFromDDIAndLunatic(
123131
Path.of(metadataFilePath).toFile().toURI().toURL().toString(),
124-
new FileInputStream(metadataFilePath));
132+
metadataInputStream,metadataInputStream);
125133
// Temporary solution
126134
// the logic of adding variables from lunatic to the ones present in the DDI needs to be implemented in BPM
127135
// (only in Kraftwerk for the moment)
128136
for (String enoVar : Constants.getEnoVariables()){
129137
metadataModel.getVariables().putVariable(new Variable(enoVar, metadataModel.getRootGroup(), VariableType.STRING));
130138
}
131139
return metadataModel;
140+
132141
} else {
133142
return LunaticReader.getMetadataFromLunatic(
134143
new FileInputStream(metadataFilePath));

0 commit comments

Comments
 (0)