diff --git a/pom.xml b/pom.xml index 65bdbf87..99303154 100644 --- a/pom.xml +++ b/pom.xml @@ -13,7 +13,7 @@ fr.insee Pogues-BO jar - 4.8.1 + 4.8.2-SNAPSHOT Pogues-Back-Office diff --git a/src/main/java/fr/insee/pogues/api/remote/eno/transforms/EnoClient.java b/src/main/java/fr/insee/pogues/api/remote/eno/transforms/EnoClient.java index 980f7709..9777176a 100644 --- a/src/main/java/fr/insee/pogues/api/remote/eno/transforms/EnoClient.java +++ b/src/main/java/fr/insee/pogues/api/remote/eno/transforms/EnoClient.java @@ -28,6 +28,8 @@ public interface EnoClient { String getDDITOLunaticJSON(String inputAsString, Map params) throws URISyntaxException, IOException, EnoException; String getDDITOXForms(String inputAsString) throws URISyntaxException, IOException, EnoException; + + String getJSONPoguesToLunaticJson(String inputAsString, Map params) throws URISyntaxException, IOException, EnoException; void getParameters () throws Exception; diff --git a/src/main/java/fr/insee/pogues/api/remote/eno/transforms/EnoClientImpl.java b/src/main/java/fr/insee/pogues/api/remote/eno/transforms/EnoClientImpl.java index 0d531170..b9038a38 100644 --- a/src/main/java/fr/insee/pogues/api/remote/eno/transforms/EnoClientImpl.java +++ b/src/main/java/fr/insee/pogues/api/remote/eno/transforms/EnoClientImpl.java @@ -15,7 +15,9 @@ import org.springframework.web.reactive.function.client.WebClientResponseException; import org.springframework.web.util.UriComponentsBuilder; +import java.io.IOException; import java.net.URI; +import java.net.URISyntaxException; import java.nio.charset.StandardCharsets; import java.util.Map; @@ -29,7 +31,11 @@ public class EnoClientImpl implements EnoClient{ @Autowired private WebClient webClient; - private static final String BASE_PATH = "/questionnaire/DEFAULT"; + private static String DEFAULT_CONTEXT = "DEFAULT"; + + private static final String DSFR_QUERY_PARAM = "dsfr"; + + private static final String BASE_PATH = "/questionnaire/" + DEFAULT_CONTEXT; private static final String MODE = "CAWI"; public EnoClientImpl(WebClient webClient) { @@ -63,7 +69,7 @@ public String getDDITOLunaticJSON(String inputAsString, Map para MultiValueMap queryParams = new LinkedMultiValueMap<>(); String modePathParam = params.get("mode") != null ? params.get("mode").toString() : MODE; String WSPath = BASE_PATH + "/lunatic-json/" + modePathParam; - queryParams.add("dsfr", Boolean.TRUE.equals(params.get("dsfr")) ? "true" : "false"); + queryParams.add(DSFR_QUERY_PARAM, Boolean.TRUE.equals(params.get("dsfr")) ? "true" : "false"); return callEnoApiWithParams(inputAsString, WSPath, queryParams); } @@ -72,6 +78,19 @@ public String getDDITOXForms(String inputAsString) throws EnoException, PoguesEx return callEnoApi(inputAsString, BASE_PATH+"/xforms"); } + @Override + public String getJSONPoguesToLunaticJson(String inputAsString, Map params) throws URISyntaxException, IOException, EnoException { + log.info("getJSONPoguesToLunaticJson - started"); + MultiValueMap queryParams = new LinkedMultiValueMap<>(); + String modePathParam = params.get("mode") != null ? params.get("mode").toString() : MODE; + String WSPath = String.format("/questionnaire/pogues-2-lunatic/%s/%s", + DEFAULT_CONTEXT, + modePathParam); + log.info("WSPath : {} ",WSPath); + queryParams.add(DSFR_QUERY_PARAM, Boolean.TRUE.equals(params.get("dsfr")) ? "true" : "false"); + return callEnoApiWithParams(inputAsString, WSPath, queryParams); + } + @Override public String getDDIToODT (String inputAsString) throws EnoException, PoguesException { return callEnoApi(inputAsString, BASE_PATH+"/fodt"); diff --git a/src/main/java/fr/insee/pogues/transforms/visualize/eno/PoguesJSONToLunaticJSON.java b/src/main/java/fr/insee/pogues/transforms/visualize/eno/PoguesJSONToLunaticJSON.java new file mode 100644 index 00000000..29524708 --- /dev/null +++ b/src/main/java/fr/insee/pogues/transforms/visualize/eno/PoguesJSONToLunaticJSON.java @@ -0,0 +1,6 @@ +package fr.insee.pogues.transforms.visualize.eno; + +import fr.insee.pogues.transforms.visualize.ModelTransformer; + +public interface PoguesJSONToLunaticJSON extends ModelTransformer { +} diff --git a/src/main/java/fr/insee/pogues/transforms/visualize/eno/PoguesJSONToLunaticJSONImpl.java b/src/main/java/fr/insee/pogues/transforms/visualize/eno/PoguesJSONToLunaticJSONImpl.java new file mode 100644 index 00000000..7061e6a8 --- /dev/null +++ b/src/main/java/fr/insee/pogues/transforms/visualize/eno/PoguesJSONToLunaticJSONImpl.java @@ -0,0 +1,30 @@ +package fr.insee.pogues.transforms.visualize.eno; + +import fr.insee.pogues.api.remote.eno.transforms.EnoClient; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.io.ByteArrayOutputStream; +import java.io.InputStream; +import java.util.Map; + +import static fr.insee.pogues.utils.IOStreamsUtils.inputStream2String; +import static fr.insee.pogues.utils.IOStreamsUtils.string2BOAS; + +@Service +public class PoguesJSONToLunaticJSONImpl implements PoguesJSONToLunaticJSON { + + @Autowired + private EnoClient enoClient; + + @Override + public ByteArrayOutputStream transform(InputStream inputStream, Map params, String surveyName) throws Exception { + String inputAsString = inputStream2String(inputStream); + String outputAsString = transform(inputAsString, params); + return string2BOAS(outputAsString); + } + + private String transform(String inputAsString, Map params) throws Exception { + return enoClient.getJSONPoguesToLunaticJson(inputAsString, params); + } +} diff --git a/src/main/java/fr/insee/pogues/webservice/rest/VisualizeWithURI.java b/src/main/java/fr/insee/pogues/webservice/rest/VisualizeWithURI.java index df9d80e5..91de4af0 100644 --- a/src/main/java/fr/insee/pogues/webservice/rest/VisualizeWithURI.java +++ b/src/main/java/fr/insee/pogues/webservice/rest/VisualizeWithURI.java @@ -5,6 +5,7 @@ import fr.insee.pogues.transforms.visualize.PoguesJSONToPoguesXML; import fr.insee.pogues.transforms.visualize.eno.DDIToLunaticJSON; import fr.insee.pogues.transforms.visualize.eno.DDIToXForms; +import fr.insee.pogues.transforms.visualize.eno.PoguesJSONToLunaticJSON; import fr.insee.pogues.transforms.visualize.eno.PoguesXMLToDDI; import fr.insee.pogues.transforms.visualize.uri.LunaticJSONToUriQueen; import fr.insee.pogues.transforms.visualize.uri.LunaticJSONToUriStromaeV2; @@ -52,7 +53,7 @@ public class VisualizeWithURI { XFormsToURIStromaeV1 xformToUri; @Autowired - DDIToLunaticJSON ddiToLunaticJSON; + PoguesJSONToLunaticJSON poguesJSONToLunaticJSON; @Autowired LunaticJSONToUriQueen lunaticJSONToUriQueen; @@ -69,8 +70,6 @@ public class VisualizeWithURI { @Autowired SuggesterVisuService suggesterVisuService; - private static final String CONTENT_DISPOSITION = HttpHeaders.CONTENT_DISPOSITION; - @PostMapping(path = "visualize/{dataCollection}/{questionnaire}", consumes = MediaType.APPLICATION_JSON_VALUE) @Operation(summary = "Get visualization URI from JSON serialized Pogues entity", description = "dataCollection MUST refer to the name attribute owned by the nested DataCollectionObject") @io.swagger.v3.oas.annotations.parameters.RequestBody(description = "JSON representation of the Pogues Model") @@ -108,9 +107,7 @@ public ResponseEntity visualizeCatiQueenFromBody(@RequestBody String req URI uri; ByteArrayOutputStream outputStream = pipeline.from(string2InputStream(request)) .map(jsonToJsonDeref::transform, params, questionnaireName.toLowerCase()) - .map(jsonToXML::transform, params, questionnaireName.toLowerCase()) - .map(poguesXMLToDDI::transform, params, questionnaireName.toLowerCase()) - .map(ddiToLunaticJSON::transform, params, questionnaireName.toLowerCase()) + .map(poguesJSONToLunaticJSON::transform, params, questionnaireName.toLowerCase()) .transform(); uri = lunaticJSONToUriQueen.transform(output2Input(outputStream), params, questionnaireName.toLowerCase()); return ResponseEntity.status(HttpStatus.OK).contentType(MediaType.TEXT_PLAIN).body(uri.toString()); @@ -129,9 +126,7 @@ public ResponseEntity visualizeQueenFromBody(@RequestBody String request URI uri; ByteArrayOutputStream outputStream = pipeline.from(new ByteArrayInputStream(request.getBytes(StandardCharsets.UTF_8))) .map(jsonToJsonDeref::transform, params, questionnaireName.toLowerCase()) - .map(jsonToXML::transform, params, questionnaireName.toLowerCase()) - .map(poguesXMLToDDI::transform, params, questionnaireName.toLowerCase()) - .map(ddiToLunaticJSON::transform, params, questionnaireName.toLowerCase()) + .map(poguesJSONToLunaticJSON::transform, params, questionnaireName.toLowerCase()) .transform(); uri = lunaticJSONToUriQueen.transform(output2Input(outputStream), params, questionnaireName.toLowerCase()); return ResponseEntity.status(HttpStatus.OK).contentType(MediaType.TEXT_PLAIN).body(uri.toString()); @@ -152,9 +147,7 @@ public ResponseEntity visualizeStromaeV2FromBody(@RequestBody String req URI uri; ByteArrayOutputStream outputStream = pipeline.from(string2InputStream(request)) .map(jsonToJsonDeref::transform, params, questionnaireName.toLowerCase()) - .map(jsonToXML::transform, params, questionnaireName.toLowerCase()) - .map(poguesXMLToDDI::transform, params, questionnaireName.toLowerCase()) - .map(ddiToLunaticJSON::transform, params, questionnaireName.toLowerCase()) + .map(poguesJSONToLunaticJSON::transform, params, questionnaireName.toLowerCase()) .transform(); uri = lunaticJSONToUriStromaeV2.transform(output2Input(outputStream), params, questionnaireName.toLowerCase()); @@ -176,9 +169,7 @@ public ResponseEntity visualizeStromaeV3FromBody(@RequestBody String req URI uri; ByteArrayOutputStream outputStream = pipeline.from(string2InputStream(request)) .map(jsonToJsonDeref::transform, params, questionnaireName.toLowerCase()) - .map(jsonToXML::transform, params, questionnaireName.toLowerCase()) - .map(poguesXMLToDDI::transform, params, questionnaireName.toLowerCase()) - .map(ddiToLunaticJSON::transform, params, questionnaireName.toLowerCase()) + .map(poguesJSONToLunaticJSON::transform, params, questionnaireName.toLowerCase()) .transform(); uri = lunaticJSONToUriStromaeV3.transform(output2Input(outputStream), params, questionnaireName.toLowerCase()); return ResponseEntity.status(HttpStatus.OK).contentType(MediaType.TEXT_PLAIN).body(uri.toString());