From 15fc977acd2d0b88ef6dd96c6615d9c29b148968 Mon Sep 17 00:00:00 2001 From: Laurent Caouissin Date: Wed, 17 Sep 2025 10:32:42 +0200 Subject: [PATCH 1/3] ref: init with renovate & readme --- README.md | 54 +++++++++++++++++++++++++++++++++++++++++++++++++++ renovate.json | 34 ++++++++++++++++++++++++++++++++ 2 files changed, 88 insertions(+) create mode 100644 README.md create mode 100644 renovate.json diff --git a/README.md b/README.md new file mode 100644 index 000000000..1267d7c34 --- /dev/null +++ b/README.md @@ -0,0 +1,54 @@ +# Eno XML Web-Service + +_This project contains the legacy REST API for Eno ("XML" version)._ + +It is based on two modules: + +- [Eno-Core](./eno-core/): logic of transformations based on XSLT +- [Eno-WS](/eno-ws/): the rest api that used eno-core + +--- + +## Summary + +[Eno](https://github.com/InseeFr/Eno) is a tool that generates survey questionnaires starting from their formal description in [DDI](https://ddialliance.org/Specification/DDI-Lifecycle/3.3/). + +Eno can create questionnaires in different formats from the same DDI description. + +Eno generates: + +- [Lunatic](https://github.com/InseeFr/Lunatic) questionnaires. +- XForms web questionnaires that can be executed on [Orbeon Forms Runner](http://www.orbeon.com/). +- XSL-FO questionnaires that can be converted to PDF files. + +## Docker image + +Docker images of the application are published in [Docker Hub](https://hub.docker.com/r/inseefr/eno-ws/tags). + +You can pull it, run it on port `8080`, and you're all set! + +## Usage example + +You can find DDI example files in the test resources of the project. + +## Developer requirements + +- JDK 17+ +- Maven 3 +- Tomcat 9 + +## Swagger UI + +The swagger-ui API documentation is mapped on the root url. + +Locally, you can get it at `http://localhost:8080` + +Note if you have trouble starting the application on IntelliJ with the error: + +``` +Field buildProperties in fr.insee.eno.ws.config.OpenApiConfiguration required a bean of type +'org.springframework.boot.info.BuildProperties' that could not be found. +``` + +you can configure the spring-boot:build-info plugin to "Execute After Rebuild" +(https://stackoverflow.com/a/77218232/13425151). diff --git a/renovate.json b/renovate.json new file mode 100644 index 000000000..c685d550e --- /dev/null +++ b/renovate.json @@ -0,0 +1,34 @@ +{ + "extends": ["config:recommended", ":semanticCommits", ":disableRateLimiting"], + "packageRules": [ + { + "matchPackagePatterns": ["*"], + "labels": ["dependencies"], + "bumpVersion": "patch", + "dependencyDashboardApproval": true + }, + { + "groupName": "spring", + "groupSlug": "spring", + "matchPackagePatterns": ["org.springframework.*"], + "bumpVersion": "minor", + "dependencyDashboardApproval": true + }, + { + "groupName": "all minor dependencies", + "groupSlug": "all-minor-patch", + "matchPackagePatterns": ["*"], + "matchUpdateTypes": ["minor", "patch"], + "bumpVersion": "patch", + "dependencyDashboardApproval": false + } + ], + "vulnerabilityAlerts": { + "enabled": true, + "addLabels": ["security"], + "bumpVersion": "patch", + "schedule": ["before 5:00am"] + }, + "schedule": ["every weekend"], + "timezone": "Europe/Paris" +} \ No newline at end of file From b79af188cee134c3866b8911a01923ab63579981 Mon Sep 17 00:00:00 2001 From: Laurent Caouissin Date: Wed, 17 Sep 2025 13:13:58 +0200 Subject: [PATCH 2/3] feat: add eno-ws --- Dockerfile | 20 + eno-core/pom.xml | 10 +- eno-ws/pom.xml | 190 +- eno-ws/src/main/java/fr/insee/eno/App.java | 13 - .../src/main/java/fr/insee/eno/ws/EnoWS.java | 19 + .../fr/insee/eno/ws/config/CorsConfig.java | 29 + .../eno/ws/config/OpenApiConfiguration.java | 54 + .../GenerationCustomController.java | 157 + .../GenerationPoguesController.java | 66 + .../GenerationStandardController.java | 149 + .../GenerationWithMappingController.java | 87 + .../eno/ws/controller/HomeController.java | 14 + .../ws/controller/ParametersController.java | 71 + .../exception/EnoExceptionController.java | 27 + .../eno/ws/controller/utils/HeaderUtils.java | 11 + .../ws/controller/utils/ResponseUtils.java | 37 + .../main/java/fr/insee/eno/ws/lombok.config | 1 + .../eno/ws/service/ParameterService.java | 90 + .../service/QuestionnaireGenerateService.java | 76 + .../src/main/resources/application.properties | 16 + eno-ws/src/main/resources/banner.txt | 10 + .../src/main/resources/params/ddi/default.xml | 12 + .../src/main/resources/params/fo/business.xml | 50 + .../src/main/resources/params/fo/default.xml | 31 + .../main/resources/params/fo/household.xml | 50 + .../main/resources/params/fodt/business.xml | 16 + .../main/resources/params/fodt/default.xml | 17 + .../main/resources/params/fodt/household.xml | 18 + .../params/lunatic-xml/capi/business.xml | 41 + .../params/lunatic-xml/capi/default.xml | 46 + .../params/lunatic-xml/capi/household.xml | 48 + .../params/lunatic-xml/cati/business.xml | 41 + .../params/lunatic-xml/cati/default.xml | 46 + .../params/lunatic-xml/cati/household.xml | 48 + .../params/lunatic-xml/cawi/business.xml | 44 + .../params/lunatic-xml/cawi/default.xml | 47 + .../params/lunatic-xml/cawi/household.xml | 41 + .../params/lunatic-xml/process/business.xml | 49 + .../params/lunatic-xml/process/default.xml | 47 + .../params/lunatic-xml/process/household.xml | 47 + .../main/resources/params/xforms/business.xml | 45 + .../main/resources/params/xforms/default.xml | 19 + .../resources/params/xforms/household.xml | 43 + .../src/test/java/fr/insee/eno/AppTest.java | 38 - .../ws/controller/ParametersFileNameTest.java | 32 + .../service/QuestionnaireGenerationTest.java | 37 + eno-ws/src/test/resources/log4j2.xml | 22 + eno-ws/src/test/resources/transforms/ddi.xml | 11005 ++++++++++++++++ .../test/resources/transforms/simple-ddi.xml | 319 + pom.xml | 17 +- 50 files changed, 13388 insertions(+), 75 deletions(-) create mode 100644 Dockerfile delete mode 100644 eno-ws/src/main/java/fr/insee/eno/App.java create mode 100644 eno-ws/src/main/java/fr/insee/eno/ws/EnoWS.java create mode 100644 eno-ws/src/main/java/fr/insee/eno/ws/config/CorsConfig.java create mode 100644 eno-ws/src/main/java/fr/insee/eno/ws/config/OpenApiConfiguration.java create mode 100644 eno-ws/src/main/java/fr/insee/eno/ws/controller/GenerationCustomController.java create mode 100644 eno-ws/src/main/java/fr/insee/eno/ws/controller/GenerationPoguesController.java create mode 100644 eno-ws/src/main/java/fr/insee/eno/ws/controller/GenerationStandardController.java create mode 100644 eno-ws/src/main/java/fr/insee/eno/ws/controller/GenerationWithMappingController.java create mode 100644 eno-ws/src/main/java/fr/insee/eno/ws/controller/HomeController.java create mode 100644 eno-ws/src/main/java/fr/insee/eno/ws/controller/ParametersController.java create mode 100644 eno-ws/src/main/java/fr/insee/eno/ws/controller/exception/EnoExceptionController.java create mode 100644 eno-ws/src/main/java/fr/insee/eno/ws/controller/utils/HeaderUtils.java create mode 100644 eno-ws/src/main/java/fr/insee/eno/ws/controller/utils/ResponseUtils.java create mode 100644 eno-ws/src/main/java/fr/insee/eno/ws/lombok.config create mode 100644 eno-ws/src/main/java/fr/insee/eno/ws/service/ParameterService.java create mode 100644 eno-ws/src/main/java/fr/insee/eno/ws/service/QuestionnaireGenerateService.java create mode 100644 eno-ws/src/main/resources/application.properties create mode 100644 eno-ws/src/main/resources/banner.txt create mode 100644 eno-ws/src/main/resources/params/ddi/default.xml create mode 100644 eno-ws/src/main/resources/params/fo/business.xml create mode 100644 eno-ws/src/main/resources/params/fo/default.xml create mode 100644 eno-ws/src/main/resources/params/fo/household.xml create mode 100644 eno-ws/src/main/resources/params/fodt/business.xml create mode 100644 eno-ws/src/main/resources/params/fodt/default.xml create mode 100644 eno-ws/src/main/resources/params/fodt/household.xml create mode 100644 eno-ws/src/main/resources/params/lunatic-xml/capi/business.xml create mode 100644 eno-ws/src/main/resources/params/lunatic-xml/capi/default.xml create mode 100644 eno-ws/src/main/resources/params/lunatic-xml/capi/household.xml create mode 100644 eno-ws/src/main/resources/params/lunatic-xml/cati/business.xml create mode 100644 eno-ws/src/main/resources/params/lunatic-xml/cati/default.xml create mode 100644 eno-ws/src/main/resources/params/lunatic-xml/cati/household.xml create mode 100644 eno-ws/src/main/resources/params/lunatic-xml/cawi/business.xml create mode 100644 eno-ws/src/main/resources/params/lunatic-xml/cawi/default.xml create mode 100644 eno-ws/src/main/resources/params/lunatic-xml/cawi/household.xml create mode 100644 eno-ws/src/main/resources/params/lunatic-xml/process/business.xml create mode 100644 eno-ws/src/main/resources/params/lunatic-xml/process/default.xml create mode 100644 eno-ws/src/main/resources/params/lunatic-xml/process/household.xml create mode 100644 eno-ws/src/main/resources/params/xforms/business.xml create mode 100644 eno-ws/src/main/resources/params/xforms/default.xml create mode 100644 eno-ws/src/main/resources/params/xforms/household.xml delete mode 100644 eno-ws/src/test/java/fr/insee/eno/AppTest.java create mode 100644 eno-ws/src/test/java/fr/insee/eno/ws/controller/ParametersFileNameTest.java create mode 100644 eno-ws/src/test/java/fr/insee/eno/ws/service/QuestionnaireGenerationTest.java create mode 100644 eno-ws/src/test/resources/log4j2.xml create mode 100644 eno-ws/src/test/resources/transforms/ddi.xml create mode 100644 eno-ws/src/test/resources/transforms/simple-ddi.xml diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 000000000..675b102ff --- /dev/null +++ b/Dockerfile @@ -0,0 +1,20 @@ +FROM eclipse-temurin:17.0.16_8-jre + +ENV PATH_TO_JAR=/opt/eno-ws/eno-ws.jar +WORKDIR /opt/eno-ws/ +ADD ./eno-ws/target/*.jar $PATH_TO_JAR + +ENV JAVA_TOOL_OPTIONS_DEFAULT \ + -XX:MaxRAMPercentage=75 \ + -XX:+UseZGC + +ENV JAVA_USER_ID=10001 +ENV JAVA_USER=java +RUN groupadd -g "$JAVA_USER_ID" "$JAVA_USER" && \ + useradd -r -u "$JAVA_USER_ID" -g "$JAVA_USER" "$JAVA_USER" + +USER $JAVA_USER_ID + +ENTRYPOINT [ "/bin/sh", "-c", \ + "export JAVA_TOOL_OPTIONS=\"$JAVA_TOOL_OPTIONS_DEFAULT $JAVA_TOOL_OPTIONS\"; \ + exec java -jar $PATH_TO_JAR" ] diff --git a/eno-core/pom.xml b/eno-core/pom.xml index afd2fedb4..43305aef0 100644 --- a/eno-core/pom.xml +++ b/eno-core/pom.xml @@ -103,7 +103,7 @@ ${java.version} ${java.version} - UTF-8 + ${project.encoding} 12.9 @@ -115,7 +115,6 @@ 2.0.17 - 5.13.4 2.10.4 3.18.0 2.25.1 @@ -198,7 +197,6 @@ org.junit.jupiter junit-jupiter-engine - ${junit.version} test @@ -239,7 +237,7 @@ fr.insee.eno.parameters - UTF-8 + ${project.encoding} src/main/resources/params/schemas/jaxb/bindings.xjb @@ -256,7 +254,7 @@ maven-surefire-plugin 3.5.4 - UTF-8 + ${project.encoding} -Dfile.encoding=UTF-8 -Djavax.xml.bind.JAXBContextFactory=org.eclipse.persistence.jaxb.JAXBContextFactory @@ -265,7 +263,7 @@ maven-resources-plugin 3.3.1 - UTF-8 + ${project.encoding} diff --git a/eno-ws/pom.xml b/eno-ws/pom.xml index 786397caa..869d26548 100644 --- a/eno-ws/pom.xml +++ b/eno-ws/pom.xml @@ -9,13 +9,185 @@ eno-ws Eno - Web-Service - http://maven.apache.org - - - junit - junit - 3.8.1 - test - - + + + + eno-ws + ${project.encoding} + ${project.encoding} + + + ${java.version} + ${java.version} + + 2.7.3 + 1.2.0 + 2.3.1 + 2.3.9 + 4.0.5 + 2.8.13 + + + 0.8.13 + jacoco + jacoco + reuseReports + Eno-WS + java + -Xms256m -Xmx512m -XX:MaxMetaspaceSize=128m -ea -Dfile.encoding=UTF-8 + + + + + oss.sonatype.org-snapshot + https://oss.sonatype.org/content/repositories/snapshots + + false + + + true + + + + + + + + org.springframework.boot + spring-boot-starter-web + + + org.springdoc + springdoc-openapi-starter-webmvc-ui + ${springdoc-openapi-ui.version} + + + org.springframework.boot + spring-boot-starter-actuator + + + + + fr.insee.eno + eno-core + ${project.version} + + + commons-logging + commons-logging + + + + + + + fr.insee.lunatic + lunatic-model + ${lunatic-model.version} + + + + + com.sun.activation + javax.activation + ${javax.activation.version} + + + javax.xml.bind + jaxb-api + ${jaxb-api.version} + + + com.sun.xml.bind + jaxb-impl + ${jaxb-impl.version} + + + com.sun.xml.bind + jaxb-core + ${jaxb-core.version} + + + + + org.springframework.boot + spring-boot-starter-test + test + + + org.springframework + spring-test + test + + + org.springframework.boot + spring-boot-test-autoconfigure + test + + + junit + junit + test + + + + + org.projectlombok + lombok + provided + + + + + ${final.jar.name} + + + org.jacoco + jacoco-maven-plugin + ${jacoco.version} + + + prepare-agent + + prepare-agent + + + + report + + report + + + + XML + + + + + + + org.sonarsource.scanner.maven + sonar-maven-plugin + 4.0.0.4121 + + + org.springframework.boot + spring-boot-maven-plugin + + + build-info + + build-info + + + + ${project.description} + + + + + + + + diff --git a/eno-ws/src/main/java/fr/insee/eno/App.java b/eno-ws/src/main/java/fr/insee/eno/App.java deleted file mode 100644 index d0d2ead49..000000000 --- a/eno-ws/src/main/java/fr/insee/eno/App.java +++ /dev/null @@ -1,13 +0,0 @@ -package fr.insee.eno; - -/** - * Hello world! - * - */ -public class App -{ - public static void main( String[] args ) - { - System.out.println( "Hello World!" ); - } -} diff --git a/eno-ws/src/main/java/fr/insee/eno/ws/EnoWS.java b/eno-ws/src/main/java/fr/insee/eno/ws/EnoWS.java new file mode 100644 index 000000000..46d9c2c0a --- /dev/null +++ b/eno-ws/src/main/java/fr/insee/eno/ws/EnoWS.java @@ -0,0 +1,19 @@ +package fr.insee.eno.ws; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.boot.builder.SpringApplicationBuilder; +import org.springframework.boot.context.properties.ConfigurationPropertiesScan; +import org.springframework.boot.web.servlet.support.SpringBootServletInitializer; + +@SpringBootApplication(scanBasePackages = "fr.insee.eno.ws") +@ConfigurationPropertiesScan +public class EnoWS extends SpringBootServletInitializer{ + + @Override + protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { + return application.sources(EnoWS.class); + } + + public static void main(String[] args) { SpringApplication.run(EnoWS.class, args); } +} diff --git a/eno-ws/src/main/java/fr/insee/eno/ws/config/CorsConfig.java b/eno-ws/src/main/java/fr/insee/eno/ws/config/CorsConfig.java new file mode 100644 index 000000000..e582ff973 --- /dev/null +++ b/eno-ws/src/main/java/fr/insee/eno/ws/config/CorsConfig.java @@ -0,0 +1,29 @@ +package fr.insee.eno.ws.config; + +import lombok.AllArgsConstructor; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.web.cors.CorsConfiguration; +import org.springframework.web.cors.CorsConfigurationSource; +import org.springframework.web.cors.UrlBasedCorsConfigurationSource; + +import java.util.List; + +@Configuration +@AllArgsConstructor +public class CorsConfig { + + @Bean + protected CorsConfigurationSource corsWebFilter () { + CorsConfiguration configuration = new CorsConfiguration(); + configuration.setAllowedOriginPatterns(List.of("*")); + configuration.setAllowedMethods(List.of("GET", "PUT", "POST", "DELETE", "OPTIONS")); + configuration.setAllowedHeaders(List.of("Authorization", "Content-Type")); + configuration.addExposedHeader("Content-Disposition"); + configuration.setMaxAge(3600L); + configuration.setAllowCredentials(true); + UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(); + source.registerCorsConfiguration("/**", configuration); + return source; + } +} \ No newline at end of file diff --git a/eno-ws/src/main/java/fr/insee/eno/ws/config/OpenApiConfiguration.java b/eno-ws/src/main/java/fr/insee/eno/ws/config/OpenApiConfiguration.java new file mode 100644 index 000000000..fa16af598 --- /dev/null +++ b/eno-ws/src/main/java/fr/insee/eno/ws/config/OpenApiConfiguration.java @@ -0,0 +1,54 @@ +package fr.insee.eno.ws.config; + +import io.swagger.v3.oas.models.OpenAPI; +import io.swagger.v3.oas.models.info.Info; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.info.BuildProperties; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.http.MediaType; +import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter; + +import java.util.ArrayList; + +@Configuration +public class OpenApiConfiguration { + + @Value("${fr.insee.enows.api.scheme}") + private String apiScheme; + + @Value("${fr.insee.enows.api.host}") + private String apiHost; + + @Value("${fr.insee.enows.enocore.version}") + private String enoVersion; + + @Value("${fr.insee.enows.lunatic.model.version}") + private String lunaticModelVersion; + + @Value("${fr.insee.enows.version}") + private String projectVersion; + + @Autowired + private BuildProperties buildProperties; + + @Bean + protected OpenAPI noAuthOpenAPI() { + return new OpenAPI().info( + new Info() + .title(buildProperties.getName()) + .description(String.format(""" +

Generator using :

+
Eno version : %s
+
Lunatic-Model version : %s
+ """,enoVersion,lunaticModelVersion)) + .version(buildProperties.getVersion()) + ); } + + public OpenApiConfiguration(MappingJackson2HttpMessageConverter converter) { + var supportedMediaTypes = new ArrayList<>(converter.getSupportedMediaTypes()); + supportedMediaTypes.add(new MediaType("application", "octet-stream")); + converter.setSupportedMediaTypes(supportedMediaTypes); + } +} diff --git a/eno-ws/src/main/java/fr/insee/eno/ws/controller/GenerationCustomController.java b/eno-ws/src/main/java/fr/insee/eno/ws/controller/GenerationCustomController.java new file mode 100644 index 000000000..683d6fbe4 --- /dev/null +++ b/eno-ws/src/main/java/fr/insee/eno/ws/controller/GenerationCustomController.java @@ -0,0 +1,157 @@ +package fr.insee.eno.ws.controller; + +import fr.insee.eno.exception.EnoParametersException; +import fr.insee.eno.parameters.*; +import fr.insee.eno.params.ValorizatorParameters; +import fr.insee.eno.params.ValorizatorParametersImpl; +import fr.insee.eno.service.MultiModelService; +import fr.insee.eno.service.ParameterizedGenerationService; +import fr.insee.eno.ws.controller.utils.ResponseUtils; +import fr.insee.eno.ws.service.ParameterService; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; +import lombok.extern.slf4j.Slf4j; +import org.springframework.http.MediaType; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestPart; +import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.multipart.MultipartFile; +import org.springframework.web.servlet.mvc.method.annotation.StreamingResponseBody; + +import java.io.ByteArrayOutputStream; +import java.io.InputStream; + +@Tag(name="Generation from DDI (custom parameters)") +@RestController +@RequestMapping("/questionnaire") +@Slf4j +public class GenerationCustomController { + // Eno-WS services + private final ParameterService parameterService; + + // Eno core service + private final MultiModelService multiModelService = new MultiModelService(); + private final ValorizatorParameters valorizatorParameters = new ValorizatorParametersImpl(); + + public GenerationCustomController(ParameterService parameterService) { + this.parameterService = parameterService; + } + + @Operation( + summary = "Generation of Xforms questionnaire from DDI.", + description = "Generation of a Xforms questionnaire from the given DDI with default business " + + "pipeline, using a custom parameters file _(required)_, a metadata file _(required)_ and a " + + "specific treatment file _(optional)_." + ) + @PostMapping(value = "ddi-2-xforms", + produces = MediaType.APPLICATION_OCTET_STREAM_VALUE, consumes = MediaType.MULTIPART_FORM_DATA_VALUE) + public ResponseEntity generateXformsCustomParams( + @RequestPart(value="in") MultipartFile in, + @RequestPart(value="params") MultipartFile params, + @RequestPart(value="metadata") MultipartFile metadata, + @RequestPart(value="specificTreatment",required=false) MultipartFile specificTreatment) throws Exception { + + log.info("Received request to transform DDI to a Xforms questionnaire."); + + InputStream paramsIS = params != null ? params.getInputStream() : null; + ENOParameters enoParameters = valorizatorParameters.getParameters(paramsIS); + Context context = enoParameters.getParameters().getContext(); + Mode mode = enoParameters.getMode(); + + nonNullContextCheck(context); + if (Context.HOUSEHOLD.equals(context)) + throw new EnoParametersException("Context 'HOUSEHOLD' is not compatible with Xforms format."); + nonNullModeCheck(mode); + if (Mode.CAPI.equals(mode) || Mode.CATI.equals(mode) || Mode.PAPI.equals(mode)) + throw new EnoParametersException("Mode '" + mode + "' is not compatible with Xforms format."); + + logModeAndContext(context, mode); + + ENOParameters defaultEnoParamsDDI2Xforms = parameterService.getDefaultCustomParameters( + context, OutFormat.XFORMS, null); + + Pipeline defaultPipeline = defaultEnoParamsDDI2Xforms.getPipeline(); + enoParameters.setPipeline(defaultPipeline); + + ByteArrayOutputStream enoOutput; + try( + InputStream enoInput = in.getInputStream(); + InputStream metadataIS = metadata != null ? metadata.getInputStream() : null; + InputStream specificTreatmentIS = specificTreatment != null ? specificTreatment.getInputStream() : null){ + + enoOutput = multiModelService.generateQuestionnaire(enoInput, enoParameters, metadataIS, specificTreatmentIS, null); + } + log.info("END of Eno Xforms generation processing"); + + return ResponseUtils.generateResponseFromOutputStream(enoOutput, parameterService.getFileNameFromCampagneName(enoParameters)); + } + + @Operation( + summary = "Generation of FO questionnaire from DDI.", + description = "Generation of a FO questionnaire from the given DDI with default pipeline, " + + "using a custom parameters file _(required)_, a metadata file _(optional)_ and a " + + "specific treatment file _(optional)_." + ) + @PostMapping(value = "ddi-2-fo", + produces = MediaType.APPLICATION_OCTET_STREAM_VALUE, consumes = MediaType.MULTIPART_FORM_DATA_VALUE) + public ResponseEntity generateFOCustomParams( + @RequestPart(value="in") MultipartFile in, + @RequestPart(value="params") MultipartFile params, + @RequestPart(value="metadata", required = false) MultipartFile metadata, + @RequestPart(value="specificTreatment",required=false) MultipartFile specificTreatment) throws Exception { + + log.info("Received request to transform DDI to a FO questionnaire."); + + InputStream paramsIS = params != null ? params.getInputStream() : null; + if (paramsIS == null) + throw new EnoParametersException("Parameters file's content is null."); + + log.debug("Parsing XML parameters file..."); + ENOParameters enoParameters = valorizatorParameters.getParameters(paramsIS); + log.debug("XML parameters parsed."); + Context context = enoParameters.getParameters().getContext(); + Mode mode = enoParameters.getMode(); + + nonNullContextCheck(context); + nonNullModeCheck(mode); + if (Mode.CAPI.equals(mode) || Mode.CATI.equals(mode) || Mode.CAWI.equals(mode)) + throw new EnoParametersException("Mode '" + mode + "' is not compatible with FO format."); + + logModeAndContext(context, mode); + + ENOParameters defaultEnoParamsDDI2Fo = parameterService.getDefaultCustomParameters( + context, OutFormat.FO, null); + + Pipeline defaultPipeline = defaultEnoParamsDDI2Fo.getPipeline(); + enoParameters.setPipeline(defaultPipeline); + + ByteArrayOutputStream enoOutput; + try( + InputStream enoInput = in.getInputStream(); + InputStream metadataIS = metadata != null ? metadata.getInputStream() : null; + InputStream specificTreatmentIS = specificTreatment != null ? specificTreatment.getInputStream() : null) { + + enoOutput = multiModelService.generateQuestionnaire(enoInput, enoParameters, metadataIS, specificTreatmentIS, null); + } + log.info("END of Eno FO generation processing"); + return ResponseUtils.generateResponseFromOutputStream(enoOutput, parameterService.getFileNameFromCampagneName(enoParameters)); + + } + + private static void nonNullContextCheck(Context context) { + if (context == null) + throw new EnoParametersException("No context defined in Eno parameters file given."); + } + + private static void nonNullModeCheck(Mode mode) { + if (mode == null) + throw new EnoParametersException("No mode defined in Eno parameters file given."); + } + + private static void logModeAndContext(Context context, Mode mode) { + log.info("Context={}, Mode={} defined in parameters file", context, mode); + } + +} diff --git a/eno-ws/src/main/java/fr/insee/eno/ws/controller/GenerationPoguesController.java b/eno-ws/src/main/java/fr/insee/eno/ws/controller/GenerationPoguesController.java new file mode 100644 index 000000000..2a18b9af4 --- /dev/null +++ b/eno-ws/src/main/java/fr/insee/eno/ws/controller/GenerationPoguesController.java @@ -0,0 +1,66 @@ +package fr.insee.eno.ws.controller; + +import fr.insee.eno.parameters.*; +import fr.insee.eno.service.ParameterizedGenerationService; +import fr.insee.eno.ws.controller.utils.ResponseUtils; +import fr.insee.eno.ws.service.ParameterService; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; +import lombok.extern.slf4j.Slf4j; +import org.springframework.http.MediaType; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestPart; +import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.multipart.MultipartFile; +import org.springframework.web.servlet.mvc.method.annotation.StreamingResponseBody; + +import java.io.ByteArrayOutputStream; +import java.io.InputStream; + +@Tag(name="Generation from Pogues") +@RestController +@RequestMapping("/questionnaire") +@Slf4j +public class GenerationPoguesController { + private final ParameterService parameterService; + + // Eno core service + private final ParameterizedGenerationService parametrizedGenerationService = new ParameterizedGenerationService(); + + public GenerationPoguesController(ParameterService parameterService) { + this.parameterService = parameterService; + } + + @Operation( + summary = "Generation DDI from Pogues XML questionnaire.", + description = "Generation of a DDI from the given Pogues XML questionnaire." + ) + @PostMapping(value="poguesxml-2-ddi", produces=MediaType.APPLICATION_OCTET_STREAM_VALUE, consumes= MediaType.MULTIPART_FORM_DATA_VALUE) + public ResponseEntity generateDDIQuestionnaire( + @RequestPart(value="in") MultipartFile in) throws Exception { + + InputStream enoInput = in.getInputStream(); + ENOParameters enoParameters = new ENOParameters(); + Pipeline pipeline = new Pipeline(); + pipeline.setInFormat(InFormat.POGUES_XML); + pipeline.setOutFormat(OutFormat.DDI); + pipeline.getPreProcessing().add(PreProcessing.POGUES_XML_INSERT_FILTER_LOOP_INTO_QUESTION_TREE); + pipeline.getPreProcessing().add(PreProcessing.POGUES_XML_GOTO_2_ITE); + + enoParameters.setPipeline(pipeline); + + ByteArrayOutputStream enoOutput = parametrizedGenerationService.generateQuestionnaire( + enoInput, enoParameters, null, null, null); + + + log.info("END of Eno DDI generation processing"); + + StreamingResponseBody stream = out -> out.write(enoOutput.toByteArray()); + enoOutput.close(); + + return ResponseUtils.generateResponseFromOutputStream(enoOutput, parameterService.getFileNameFromParameters(enoParameters, false)); + } + +} diff --git a/eno-ws/src/main/java/fr/insee/eno/ws/controller/GenerationStandardController.java b/eno-ws/src/main/java/fr/insee/eno/ws/controller/GenerationStandardController.java new file mode 100644 index 000000000..d3a3739ae --- /dev/null +++ b/eno-ws/src/main/java/fr/insee/eno/ws/controller/GenerationStandardController.java @@ -0,0 +1,149 @@ +package fr.insee.eno.ws.controller; + +import fr.insee.eno.parameters.*; +import fr.insee.eno.service.MultiModelService; +import fr.insee.eno.service.ParameterizedGenerationService; +import fr.insee.eno.ws.controller.utils.ResponseUtils; +import fr.insee.eno.ws.service.ParameterService; +import fr.insee.eno.ws.service.QuestionnaireGenerateService; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; +import lombok.extern.slf4j.Slf4j; +import org.springframework.http.MediaType; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; +import org.springframework.web.servlet.mvc.method.annotation.StreamingResponseBody; + +import java.io.ByteArrayOutputStream; +import java.io.InputStream; + +@Tag(name="Generation from DDI (standard parameters)") +@RestController +@RequestMapping("/questionnaire") +@Slf4j +public class GenerationStandardController { + + // Eno-WS services + private final ParameterService parameterService; + private final QuestionnaireGenerateService generateQuestionnaireService; + + // Eno core services + private final ParameterizedGenerationService parametrizedGenerationService; + private final MultiModelService multiModelService = new MultiModelService(); + + + public GenerationStandardController(ParameterService parameterService, + QuestionnaireGenerateService generateQuestionnaireService) { + this.parameterService = parameterService; + this.generateQuestionnaireService = generateQuestionnaireService; + this.parametrizedGenerationService = new ParameterizedGenerationService(); + } + + @Operation( + summary="Generation of Xforms questionnaire from DDI.", + description="Generation of one or multiple Xforms questionnaires from given DDI with standard parameters. " + + "If the multi-model option is set to true, the output questionnaire(s) are put in a zip file." + ) + @PostMapping(value="{context}/xforms", produces=MediaType.APPLICATION_OCTET_STREAM_VALUE, consumes= MediaType.MULTIPART_FORM_DATA_VALUE) + public ResponseEntity generateXforms( + // + @RequestPart(value="in") MultipartFile in, + @RequestPart(value="metadata",required=false) MultipartFile metadata, + @RequestPart(value="specificTreatment",required=false) MultipartFile specificTreatment, + // + @PathVariable Context context, + // + @RequestParam(value="multi-model",required=false,defaultValue="false") boolean multiModel) throws Exception { + + log.info( + "Received request to transform DDI to a Xforms questionnaire with context '{}' using standard parameters.", + context); + + ByteArrayOutputStream enoOutput; + if (!multiModel) + enoOutput = generateQuestionnaireService.generateQuestionnaireFile( + context, OutFormat.XFORMS, null, in, metadata, specificTreatment); + else + enoOutput = generateQuestionnaireService.generateMultiModelQuestionnaires( + context, OutFormat.XFORMS, null, in, metadata, specificTreatment); + + return ResponseUtils.generateResponseFromOutputStream(enoOutput, parameterService.getFileNameFromParameters(OutFormat.XFORMS, multiModel)); + } + + @Operation( + summary="Generation of FO questionnaire from DDI.", + description="Generation of a FO questionnaire from the given DDI with standard parameters. " + + "Custom values can be passed for format of columns and capture mode." + ) + @PostMapping(value="{context}/fo", produces=MediaType.APPLICATION_OCTET_STREAM_VALUE, consumes= MediaType.MULTIPART_FORM_DATA_VALUE) + public ResponseEntity generateFO( + // + @RequestPart(value="in") MultipartFile in, + @RequestPart(value="metadata",required=false) MultipartFile metadata, + @RequestPart(value="specificTreatment",required=false) MultipartFile specificTreatment, + // + @RequestParam(value="Format-column",required=false) Integer nbColumn, + @RequestParam(value="Capture",required=false) CaptureEnum capture, + // + @PathVariable Context context, + // + @RequestParam(value="multi-model",required=false,defaultValue="false") boolean multiModel) throws Exception { + + log.info( + "Received request to transform DDI to a FO questionnaire with context '{}' using standard parameters.", + context); + + InputStream enoInput = in.getInputStream(); + + ENOParameters enoParameters = parameterService.getDefaultCustomParameters(context,OutFormat.FO,null); + + FOParameters foParameters = enoParameters.getParameters().getFoParameters(); + if(capture!=null) { + Capture capture2 = foParameters.getCapture(); + capture2.setNumeric(capture); + foParameters.setCapture(capture2); + } + + if(nbColumn!=null) { + Format format = foParameters.getFormat(); + format.setColumns(nbColumn);} + + InputStream metadataIS = metadata != null ? metadata.getInputStream() : null; + InputStream specificTreatmentIS = specificTreatment!=null ? specificTreatment.getInputStream():null; + + ByteArrayOutputStream enoOutput; + if (! multiModel) + enoOutput = parametrizedGenerationService.generateQuestionnaire( + enoInput, enoParameters, metadataIS, specificTreatmentIS, null); + else + enoOutput = multiModelService.generateQuestionnaire( + enoInput, enoParameters, metadataIS, specificTreatmentIS, null); + + + log.info("END of Eno FO questionnaire processing"); + return ResponseUtils.generateResponseFromOutputStream(enoOutput,parameterService.getFileNameFromParameters(enoParameters, multiModel)); + } + + @Operation( + summary="Generation of FODT specifications from DDI.", + description="Generation of a FODT description of the questionnaire from the given DDI." + ) + @PostMapping(value="{context}/fodt", produces=MediaType.APPLICATION_OCTET_STREAM_VALUE, consumes= MediaType.MULTIPART_FORM_DATA_VALUE) + public ResponseEntity generateFODT( + // + @RequestPart(value="in") MultipartFile in, + // + @PathVariable Context context) throws Exception { + + log.info( + "Received request to transform DDI to a fodt specification file with context '{}' using standard parameters.", + context); + + ByteArrayOutputStream enoOutput = generateQuestionnaireService.generateQuestionnaireFile( + context, OutFormat.FODT, null, in, null, null); + + return ResponseUtils.generateResponseFromOutputStream(enoOutput, parameterService.getFileNameFromParameters(OutFormat.FODT, false)); + } + +} \ No newline at end of file diff --git a/eno-ws/src/main/java/fr/insee/eno/ws/controller/GenerationWithMappingController.java b/eno-ws/src/main/java/fr/insee/eno/ws/controller/GenerationWithMappingController.java new file mode 100644 index 000000000..64e152112 --- /dev/null +++ b/eno-ws/src/main/java/fr/insee/eno/ws/controller/GenerationWithMappingController.java @@ -0,0 +1,87 @@ +package fr.insee.eno.ws.controller; + +import fr.insee.eno.parameters.ENOParameters; +import fr.insee.eno.params.ValorizatorParameters; +import fr.insee.eno.params.ValorizatorParametersImpl; +import fr.insee.eno.service.MultiModelService; +import fr.insee.eno.service.ParameterizedGenerationService; +import fr.insee.eno.ws.controller.utils.ResponseUtils; +import fr.insee.eno.ws.service.ParameterService; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; +import lombok.extern.slf4j.Slf4j; +import org.springframework.http.MediaType; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; +import org.springframework.web.servlet.mvc.method.annotation.StreamingResponseBody; + +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.InputStream; + +@Tag(name="Generation with custom mapping") +@RestController +@RequestMapping("/questionnaire") +@Slf4j +public class GenerationWithMappingController { + + private final ParameterService parameterService; + // Eno core services + private final ParameterizedGenerationService parametrizedGenerationService = new ParameterizedGenerationService(); + + private ValorizatorParameters valorizatorParameters = new ValorizatorParametersImpl(); + private final MultiModelService multiModelService = new MultiModelService(); + + public GenerationWithMappingController(ParameterService parameterService) { + this.parameterService = parameterService; + } + + // Weird endpoint to do weird things + @Operation( + summary = "Questionnaire generation according to params, metadata, specific treatment and mapping.", + description = "Generation of one or multiple questionnaires from the input file given, " + + "using a parameters file _(required)_, a metadata file _(optional)_, a specific treatment file " + + "_(optional)_ and a mapping file _(optional)_. " + + "If the multi-model option is set to true, the output questionnaire(s) are put in a zip file." + ) + @PostMapping(value = "in-2-out", + produces = MediaType.APPLICATION_OCTET_STREAM_VALUE, consumes = MediaType.MULTIPART_FORM_DATA_VALUE) + public ResponseEntity generate( + // + @RequestPart(value="in") MultipartFile in, + @RequestPart(value="params") MultipartFile params, + @RequestPart(value="metadata",required=false) MultipartFile metadata, + @RequestPart(value="specificTreatment",required=false) MultipartFile specificTreatment, + @RequestPart(value="mapping",required=false) MultipartFile mapping, + // + @RequestParam(value="multi-model",required=false,defaultValue="false") boolean multiModel) throws Exception { + + + byte[] paramsBytes = params.getBytes(); + + ENOParameters enoParameters = valorizatorParameters.getParameters(new ByteArrayInputStream(paramsBytes)); + ByteArrayOutputStream enoOutput; + + try( + InputStream inputIS = in.getInputStream(); + InputStream paramIS = new ByteArrayInputStream(paramsBytes); + InputStream metadataIS = metadata!=null ? metadata.getInputStream():null; + InputStream specificTreatmentIS = specificTreatment!=null ? specificTreatment.getInputStream():null; + InputStream mappingIS = mapping!=null ? mapping.getInputStream():null){ + if(multiModel) { + enoOutput = multiModelService.generateQuestionnaire( + inputIS, paramIS, metadataIS, specificTreatmentIS, mappingIS); + } + else { + enoOutput = parametrizedGenerationService.generateQuestionnaire( + inputIS, paramIS, metadataIS, specificTreatmentIS, mappingIS); + } + + log.info("END of Eno 'in to out' processing"); + } + + return ResponseUtils.generateResponseFromOutputStream(enoOutput, parameterService.getFileNameFromParameters(enoParameters, multiModel)); + } + +} diff --git a/eno-ws/src/main/java/fr/insee/eno/ws/controller/HomeController.java b/eno-ws/src/main/java/fr/insee/eno/ws/controller/HomeController.java new file mode 100644 index 000000000..6e47fdf7f --- /dev/null +++ b/eno-ws/src/main/java/fr/insee/eno/ws/controller/HomeController.java @@ -0,0 +1,14 @@ +package fr.insee.eno.ws.controller; + +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; + +@Controller +public class HomeController { + + + @RequestMapping("/") + public String redirectToSwaggerUI() { + return "redirect:/swagger-ui.html"; + } +} diff --git a/eno-ws/src/main/java/fr/insee/eno/ws/controller/ParametersController.java b/eno-ws/src/main/java/fr/insee/eno/ws/controller/ParametersController.java new file mode 100644 index 000000000..0a57d4709 --- /dev/null +++ b/eno-ws/src/main/java/fr/insee/eno/ws/controller/ParametersController.java @@ -0,0 +1,71 @@ +package fr.insee.eno.ws.controller; + +import fr.insee.eno.parameters.Context; +import fr.insee.eno.parameters.Mode; +import fr.insee.eno.parameters.OutFormat; +import fr.insee.eno.ws.controller.utils.ResponseUtils; +import fr.insee.eno.ws.service.ParameterService; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; +import lombok.extern.slf4j.Slf4j; +import org.springframework.http.MediaType; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.servlet.mvc.method.annotation.StreamingResponseBody; + +import java.io.InputStream; + +@Tag(name="Parameters") +@RestController +@RequestMapping("/parameters/xml") +@Slf4j +public class ParametersController { + + private final ParameterService parameterService; + + public ParametersController(ParameterService parameterService) { + this.parameterService = parameterService; + } + + @Operation( + summary="Get all default out format parameters.", + description="It returns the default parameters file without Pipeline which is overloaded. This file don't be used directly : you have to fill Pipeline.") + @GetMapping(value="all", produces=MediaType.APPLICATION_OCTET_STREAM_VALUE) + public ResponseEntity getAllParameters() throws Exception { + + log.info("Get request for parameters file with all params."); + + + InputStream paramsInputStream = parameterService.getDefaultParametersIS(); + + return ResponseUtils.generateResponseFromInputStream(paramsInputStream, "default-params.xml"); + } + + @Operation( + summary="Get default xml parameters file for the given context according to the outFormat", + description="It returns parameters used by default according to the study unit and the outFormat.") + @GetMapping(value="{context}/{outFormat}", produces=MediaType.APPLICATION_OCTET_STREAM_VALUE) + public ResponseEntity getParameters( + @PathVariable Context context, + @PathVariable OutFormat outFormat, + @RequestParam(value="Mode",required=false) Mode mode) throws Exception { + + log.info("Get request for parameters file with context {}, mode {}, out format {}.", + context, mode, outFormat); + + InputStream fileParam = switch (outFormat) { + case XFORMS -> parameterService.getDefaultCustomParametersFile(context, OutFormat.XFORMS, mode); + case FO -> parameterService.getDefaultCustomParametersFile(context, OutFormat.FO, mode); + case LUNATIC_XML -> parameterService.getDefaultCustomParametersFile(context, OutFormat.LUNATIC_XML, mode); + case DDI -> parameterService.getDefaultCustomParametersFile(Context.DEFAULT, OutFormat.DDI, mode); + case FODT -> parameterService.getDefaultCustomParametersFile(context, OutFormat.FODT, mode); + }; + + return ResponseUtils.generateResponseFromInputStream(fileParam, parametersFileName(context, mode, outFormat)); + } + + public static String parametersFileName(Context context, Mode mode, OutFormat outFormat) { + return "eno-parameters-" + context + "-" + (mode != null ? mode + "-" : "") + outFormat + ".xml"; + } + +} diff --git a/eno-ws/src/main/java/fr/insee/eno/ws/controller/exception/EnoExceptionController.java b/eno-ws/src/main/java/fr/insee/eno/ws/controller/exception/EnoExceptionController.java new file mode 100644 index 000000000..946af379c --- /dev/null +++ b/eno-ws/src/main/java/fr/insee/eno/ws/controller/exception/EnoExceptionController.java @@ -0,0 +1,27 @@ +package fr.insee.eno.ws.controller.exception; + +import fr.insee.eno.exception.EnoGenerationException; +import fr.insee.eno.exception.EnoParametersException; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.ControllerAdvice; +import org.springframework.web.bind.annotation.ExceptionHandler; + +@ControllerAdvice +public class EnoExceptionController { + + @ExceptionHandler(value = EnoParametersException.class) + public ResponseEntity exception(EnoParametersException exception) { + return new ResponseEntity<>("Eno parameters error: "+exception.getMessage(), HttpStatus.BAD_REQUEST); + } + + @ExceptionHandler(value = EnoGenerationException.class) + public ResponseEntity exception(EnoGenerationException exception) { + return new ResponseEntity<>("Eno generation error: "+exception.getMessage(), HttpStatus.INTERNAL_SERVER_ERROR); + } + + @ExceptionHandler(value = Exception.class) + public ResponseEntity exception(Exception exception) { + return new ResponseEntity<>("Unknown error during generation ("+exception.getClass()+") : "+exception.getMessage(), HttpStatus.INTERNAL_SERVER_ERROR); + } +} \ No newline at end of file diff --git a/eno-ws/src/main/java/fr/insee/eno/ws/controller/utils/HeaderUtils.java b/eno-ws/src/main/java/fr/insee/eno/ws/controller/utils/HeaderUtils.java new file mode 100644 index 000000000..f1448b695 --- /dev/null +++ b/eno-ws/src/main/java/fr/insee/eno/ws/controller/utils/HeaderUtils.java @@ -0,0 +1,11 @@ +package fr.insee.eno.ws.controller.utils; + +public class HeaderUtils { + + private HeaderUtils() {} + + public static String headersAttachment(String outputFileName) { + return "attachment;filename=\"" + outputFileName + "\""; + } + +} diff --git a/eno-ws/src/main/java/fr/insee/eno/ws/controller/utils/ResponseUtils.java b/eno-ws/src/main/java/fr/insee/eno/ws/controller/utils/ResponseUtils.java new file mode 100644 index 000000000..ea4c5b05e --- /dev/null +++ b/eno-ws/src/main/java/fr/insee/eno/ws/controller/utils/ResponseUtils.java @@ -0,0 +1,37 @@ +package fr.insee.eno.ws.controller.utils; + +import org.springframework.http.HttpHeaders; +import org.springframework.http.ResponseEntity; +import org.springframework.web.servlet.mvc.method.annotation.StreamingResponseBody; + +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.io.InputStream; + +public class ResponseUtils { + + private ResponseUtils() {} + + public static ResponseEntity generateResponseFromOutputStream(ByteArrayOutputStream outputStream, String fileName) throws IOException { + + byte[] output = outputStream.toByteArray(); + outputStream.close(); + + StreamingResponseBody stream = out -> out.write(output); + return ResponseEntity.ok() + .header(HttpHeaders.CONTENT_DISPOSITION, HeaderUtils.headersAttachment(fileName)) + .body(stream); + } + + public static ResponseEntity generateResponseFromInputStream(InputStream inputStream, String fileName) throws IOException { + + byte[] output = inputStream.readAllBytes(); + inputStream.close(); + + StreamingResponseBody stream = out -> out.write(output); + return ResponseEntity.ok() + .header(HttpHeaders.CONTENT_DISPOSITION, HeaderUtils.headersAttachment(fileName)) + .body(stream); + } + +} diff --git a/eno-ws/src/main/java/fr/insee/eno/ws/lombok.config b/eno-ws/src/main/java/fr/insee/eno/ws/lombok.config new file mode 100644 index 000000000..74da8257f --- /dev/null +++ b/eno-ws/src/main/java/fr/insee/eno/ws/lombok.config @@ -0,0 +1 @@ +lombok.addLombokGeneratedAnnotation=true \ No newline at end of file diff --git a/eno-ws/src/main/java/fr/insee/eno/ws/service/ParameterService.java b/eno-ws/src/main/java/fr/insee/eno/ws/service/ParameterService.java new file mode 100644 index 000000000..e56423d84 --- /dev/null +++ b/eno-ws/src/main/java/fr/insee/eno/ws/service/ParameterService.java @@ -0,0 +1,90 @@ +package fr.insee.eno.ws.service; + +import fr.insee.eno.Constants; +import fr.insee.eno.exception.EnoParametersException; +import fr.insee.eno.parameters.Context; +import fr.insee.eno.parameters.ENOParameters; +import fr.insee.eno.parameters.Mode; +import fr.insee.eno.parameters.OutFormat; +import fr.insee.eno.params.ValorizatorParameters; +import fr.insee.eno.params.ValorizatorParametersImpl; +import fr.insee.eno.params.validation.ValidationMessage; +import fr.insee.eno.params.validation.Validator; +import fr.insee.eno.params.validation.ValidatorImpl; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.InputStream; + +@Service +@Slf4j +public class ParameterService { + + private ValorizatorParameters valorizatorParameters = new ValorizatorParametersImpl(); + private Validator validatorImp = new ValidatorImpl(); + + public ENOParameters getDefaultCustomParameters(Context context, OutFormat outFormat, Mode mode) throws Exception { + InputStream mergedParamsInputStream = getDefaultCustomParametersFile(context, outFormat, mode); + ENOParameters finalParams = valorizatorParameters.getParameters(mergedParamsInputStream); + return finalParams; + } + + public InputStream getDefaultCustomParametersFile(Context context, OutFormat outFormat, Mode mode) throws Exception { + context = context != null ? context : Context.DEFAULT; + String parametersPath = ""; + + ValidationMessage validation = validatorImp.validateMode(outFormat, mode); + + if (validation.isValid()) { + if (mode != null && outFormat == OutFormat.LUNATIC_XML) { + parametersPath = String.format("/params/%s/%s/%s.xml", outFormat.value().toLowerCase(), + mode.value().toLowerCase(), context.value().toLowerCase()); + } else { + parametersPath = String.format("/params/%s/%s.xml", outFormat.value().toLowerCase(), + context.value().toLowerCase()); + } + try(InputStream fileParam = Constants.getInputStreamFromPath(parametersPath)){ + ByteArrayOutputStream mergedParams = valorizatorParameters.mergeParameters(fileParam); + InputStream params = new ByteArrayInputStream(mergedParams.toByteArray()); + mergedParams.close(); + return params; + } + } else { + log.error(validation.getMessage()); + throw new EnoParametersException(validation.getMessage()); + } + } + public InputStream getDefaultParametersIS() { + InputStream xmlParameters = Constants.getInputStreamFromPath(Constants.PARAMETERS_DEFAULT_XML); + return xmlParameters; + } + + public String getFileNameFromCampagneName(ENOParameters enoParameters) { + if (enoParameters == null || enoParameters.getParameters() == null || enoParameters.getParameters().getCampagne() == null || + enoParameters.getParameters().getCampagne().isEmpty()) { + throw new EnoParametersException("The 'campagne' tag is null or empty."); + } + return enoParameters.getParameters().getCampagne() + ".zip"; + } + + public String getFileNameFromParameters(ENOParameters enoParameters, boolean multiModel){ + return getFileNameFromParameters(enoParameters.getPipeline().getOutFormat(), multiModel); + } + + public String getFileNameFromParameters (OutFormat outFormat,boolean multiModel){ + if (multiModel) return "questionnaires.zip"; + return switch (outFormat) { + case FO -> "questionnaire.fo"; + case FODT -> "questionnaire.fodt"; + case DDI -> "ddi-questionnaire.xml"; + case LUNATIC_XML -> "lunatic-questionnaire.xml"; + case XFORMS -> "questionnaire.xhtml"; + }; + } + } + + + + diff --git a/eno-ws/src/main/java/fr/insee/eno/ws/service/QuestionnaireGenerateService.java b/eno-ws/src/main/java/fr/insee/eno/ws/service/QuestionnaireGenerateService.java new file mode 100644 index 000000000..7e9d33474 --- /dev/null +++ b/eno-ws/src/main/java/fr/insee/eno/ws/service/QuestionnaireGenerateService.java @@ -0,0 +1,76 @@ +package fr.insee.eno.ws.service; + +import fr.insee.eno.parameters.Context; +import fr.insee.eno.parameters.ENOParameters; +import fr.insee.eno.parameters.Mode; +import fr.insee.eno.parameters.OutFormat; +import fr.insee.eno.service.MultiModelService; +import fr.insee.eno.service.ParameterizedGenerationService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; +import org.springframework.web.multipart.MultipartFile; + +import java.io.ByteArrayOutputStream; +import java.io.InputStream; +import java.util.zip.ZipOutputStream; + +@Service +@Slf4j +public class QuestionnaireGenerateService { + + // Eno core service + private final ParameterizedGenerationService generationService = new ParameterizedGenerationService(); + private final MultiModelService multiModelService = new MultiModelService(); + + // Eno-WS service + private final ParameterService parameterService; + + public QuestionnaireGenerateService(ParameterService parameterService) { + this.parameterService = parameterService; + } + + public ByteArrayOutputStream generateQuestionnaireFile(Context context, OutFormat outFormat, Mode mode, + MultipartFile in, + MultipartFile metadata, + MultipartFile specificTreatment) throws Exception { + + ENOParameters enoParameters = parameterService.getDefaultCustomParameters(context, outFormat, mode); + ByteArrayOutputStream enoOutput; + + try( + InputStream enoInput = in.getInputStream(); + InputStream metadataIS = metadata!=null ? metadata.getInputStream():null; + InputStream specificTreatmentIS = specificTreatment!=null ? specificTreatment.getInputStream():null + ){ + + enoOutput= generationService.generateQuestionnaire( + enoInput, enoParameters, metadataIS, specificTreatmentIS, null); + + log.info("END of Eno 'in to out' processing"); + } + return enoOutput; + } + + public ByteArrayOutputStream generateMultiModelQuestionnaires(Context context, OutFormat outFormat, Mode mode, + MultipartFile in, + MultipartFile metadata, + MultipartFile specificTreatment) throws Exception { + + ENOParameters enoParameters = parameterService.getDefaultCustomParameters(context, outFormat, mode); + ByteArrayOutputStream enoOutput; + + try( + InputStream enoInput = in.getInputStream(); + InputStream metadataIS = metadata!=null ? metadata.getInputStream():null; + InputStream specificTreatmentIS = specificTreatment!=null ? specificTreatment.getInputStream():null + ){ + + enoOutput= multiModelService.generateQuestionnaire( + enoInput, enoParameters, metadataIS, specificTreatmentIS, null); + + log.info("END of Eno multi-model questionnaires processing"); + } + return enoOutput; + } + +} diff --git a/eno-ws/src/main/resources/application.properties b/eno-ws/src/main/resources/application.properties new file mode 100644 index 000000000..23a7d6246 --- /dev/null +++ b/eno-ws/src/main/resources/application.properties @@ -0,0 +1,16 @@ +############# Swagger host ############# +fr.insee.enows.api.scheme=http +fr.insee.enows.api.host=localhost:8080 + +# Sort API tags alphabetically in the swagger ui +springdoc.swagger-ui.tagsSorter=alpha +springdoc.swagger-ui.syntax-highlight.activated=false + +# Config Swagger (only for display) +fr.insee.enows.lunatic.model.version=@lunatic-model.version@ +fr.insee.enows.enocore.version=@eno.version@ +fr.insee.enows.version=@project.version@ + +spring.servlet.multipart.max-file-size=-1 +spring.servlet.multipart.max-request-size=-1 +spring.servlet.multipart.enabled=true diff --git a/eno-ws/src/main/resources/banner.txt b/eno-ws/src/main/resources/banner.txt new file mode 100644 index 000000000..4833aac8d --- /dev/null +++ b/eno-ws/src/main/resources/banner.txt @@ -0,0 +1,10 @@ + _______ .__ __. ______ ____ __ ____ _______. +| ____|| \ | | / __ \ \ \ / \ / / / | +| |__ | \| | | | | | ______ \ \/ \/ / | (----` +| __| | . ` | | | | | |______| \ / \ \ +| |____ | |\ | | `--' | \ /\ / .----) | +|_______||__| \__| \______/ \__/ \__/ |_______/ + +${application.title} ${application.version} + +Powered by Spring Boot ${spring-boot.version} diff --git a/eno-ws/src/main/resources/params/ddi/default.xml b/eno-ws/src/main/resources/params/ddi/default.xml new file mode 100644 index 000000000..467b31f40 --- /dev/null +++ b/eno-ws/src/main/resources/params/ddi/default.xml @@ -0,0 +1,12 @@ + + + + pogues-xml + ddi + pogues-xml-insert-filter-loop-into-question-tree + pogues-xml-goto-2-ite + + none + + + diff --git a/eno-ws/src/main/resources/params/fo/business.xml b/eno-ws/src/main/resources/params/fo/business.xml new file mode 100644 index 000000000..ad7d9c7d8 --- /dev/null +++ b/eno-ws/src/main/resources/params/fo/business.xml @@ -0,0 +1,50 @@ + + + + ddi + fo + + ddi-multimodal-selection + ddi-markdownToXhtml + ddi-dereferencing + ddi-cleaning + ddi-titling + + fo-mailing + fo-tableColumn + fo-insertEndQuestion + fo-editStructurePages + fo-specificTreatment + fo-insertCoverPage + fo-insertAccompanyingMails + + papi + + + business + + + + + fr + + + + true + + + + true + true + + + + + manual + + + + + + + diff --git a/eno-ws/src/main/resources/params/fo/default.xml b/eno-ws/src/main/resources/params/fo/default.xml new file mode 100644 index 000000000..255308ead --- /dev/null +++ b/eno-ws/src/main/resources/params/fo/default.xml @@ -0,0 +1,31 @@ + + + + ddi + fo + + ddi-multimodal-selection + ddi-markdownToXhtml + ddi-dereferencing + ddi-cleaning + ddi-titling + + fo-mailing + fo-tableColumn + fo-insertEndQuestion + fo-editStructurePages + fo-specificTreatment + fo-insertCoverPage + fo-insertAccompanyingMails + + papi + + + + + fr + + + + + diff --git a/eno-ws/src/main/resources/params/fo/household.xml b/eno-ws/src/main/resources/params/fo/household.xml new file mode 100644 index 000000000..9c93a3efc --- /dev/null +++ b/eno-ws/src/main/resources/params/fo/household.xml @@ -0,0 +1,50 @@ + + + + ddi + fo + + ddi-multimodal-selection + ddi-markdownToXhtml + ddi-dereferencing + ddi-cleaning + ddi-titling + + fo-mailing + fo-tableColumn + fo-insertEndQuestion + fo-editStructurePages + fo-specificTreatment + fo-insertCoverPage + fo-insertAccompanyingMails + + + papi + + + + household + + + fr + + + + true + + + + + 2 + + + + + all  + true + true + + + + + diff --git a/eno-ws/src/main/resources/params/fodt/business.xml b/eno-ws/src/main/resources/params/fodt/business.xml new file mode 100644 index 000000000..b74759609 --- /dev/null +++ b/eno-ws/src/main/resources/params/fodt/business.xml @@ -0,0 +1,16 @@ + + + + ddi + fodt + + ddi-multimodal-selection + ddi-markdownToXhtml + ddi-dereferencing + ddi-cleaning + ddi-titling + + none + + + diff --git a/eno-ws/src/main/resources/params/fodt/default.xml b/eno-ws/src/main/resources/params/fodt/default.xml new file mode 100644 index 000000000..c532e794d --- /dev/null +++ b/eno-ws/src/main/resources/params/fodt/default.xml @@ -0,0 +1,17 @@ + + + + ddi + fodt + + ddi-multimodal-selection + ddi-markdownToXhtml + ddi-dereferencing + ddi-cleaning + ddi-titling + + none + + + + diff --git a/eno-ws/src/main/resources/params/fodt/household.xml b/eno-ws/src/main/resources/params/fodt/household.xml new file mode 100644 index 000000000..519b0e73b --- /dev/null +++ b/eno-ws/src/main/resources/params/fodt/household.xml @@ -0,0 +1,18 @@ + + + + ddi + fodt + + ddi-multimodal-selection + ddi-markdownToXhtml + ddi-dereferencing + ddi-cleaning + ddi-titling + + none + + + + + diff --git a/eno-ws/src/main/resources/params/lunatic-xml/capi/business.xml b/eno-ws/src/main/resources/params/lunatic-xml/capi/business.xml new file mode 100644 index 000000000..264f6fec5 --- /dev/null +++ b/eno-ws/src/main/resources/params/lunatic-xml/capi/business.xml @@ -0,0 +1,41 @@ + + + + + ddi + lunatic-xml + + ddi-multimodal-selection + ddi-markdownToXhtml + ddi-dereferencing + ddi-cleaning + ddi-titling + + lunatic-xml-sortComponents + lunatic-xml-insert-generic-questions + lunatic-xml-externalizeVariables + lunatic-xml-insertCleaningBlock + lunatic-xml-pagination + lunatic-xml-specificTreatment + + + capi + + + household + + + fr + + + + true + + + + no-number + + + + + diff --git a/eno-ws/src/main/resources/params/lunatic-xml/capi/default.xml b/eno-ws/src/main/resources/params/lunatic-xml/capi/default.xml new file mode 100644 index 000000000..fa117cc97 --- /dev/null +++ b/eno-ws/src/main/resources/params/lunatic-xml/capi/default.xml @@ -0,0 +1,46 @@ + + + + + ddi + lunatic-xml + + ddi-multimodal-selection + ddi-markdownToXhtml + ddi-dereferencing + ddi-cleaning + ddi-titling + + lunatic-xml-sortComponents + lunatic-xml-insert-generic-questions + lunatic-xml-externalizeVariables + lunatic-xml-insertCleaningBlock + lunatic-xml-pagination + lunatic-xml-specificTreatment + + + capi + + household + + + fr + + + + no-number + + + + true + + + + false + false + true + + + + + diff --git a/eno-ws/src/main/resources/params/lunatic-xml/capi/household.xml b/eno-ws/src/main/resources/params/lunatic-xml/capi/household.xml new file mode 100644 index 000000000..507cb1f36 --- /dev/null +++ b/eno-ws/src/main/resources/params/lunatic-xml/capi/household.xml @@ -0,0 +1,48 @@ + + + + + ddi + lunatic-xml + + ddi-multimodal-selection + ddi-markdownToXhtml + ddi-dereferencing + ddi-cleaning + ddi-titling + + lunatic-xml-sortComponents + lunatic-xml-insert-generic-questions + lunatic-xml-externalizeVariables + lunatic-xml-insertCleaningBlock + lunatic-xml-pagination + lunatic-xml-specificTreatment + + + capi + + household + + + fr + + + + no-number + false + + + + true + + + + false + false + true + true + + + + + diff --git a/eno-ws/src/main/resources/params/lunatic-xml/cati/business.xml b/eno-ws/src/main/resources/params/lunatic-xml/cati/business.xml new file mode 100644 index 000000000..fa73cb66e --- /dev/null +++ b/eno-ws/src/main/resources/params/lunatic-xml/cati/business.xml @@ -0,0 +1,41 @@ + + + + + ddi + lunatic-xml + + ddi-multimodal-selection + ddi-markdownToXhtml + ddi-dereferencing + ddi-cleaning + ddi-titling + + lunatic-xml-sortComponents + lunatic-xml-insert-generic-questions + lunatic-xml-externalizeVariables + lunatic-xml-insertCleaningBlock + lunatic-xml-pagination + lunatic-xml-specificTreatment + + + cati + + + household + + + fr + + + + true + + + + no-number + + + + + diff --git a/eno-ws/src/main/resources/params/lunatic-xml/cati/default.xml b/eno-ws/src/main/resources/params/lunatic-xml/cati/default.xml new file mode 100644 index 000000000..b70937b9e --- /dev/null +++ b/eno-ws/src/main/resources/params/lunatic-xml/cati/default.xml @@ -0,0 +1,46 @@ + + + + + ddi + lunatic-xml + + ddi-multimodal-selection + ddi-markdownToXhtml + ddi-dereferencing + ddi-cleaning + ddi-titling + + lunatic-xml-sortComponents + lunatic-xml-insert-generic-questions + lunatic-xml-externalizeVariables + lunatic-xml-insertCleaningBlock + lunatic-xml-pagination + lunatic-xml-specificTreatment + + + cati + + household + + + fr + + + + no-number + + + + true + + + + false + false + true + + + + + diff --git a/eno-ws/src/main/resources/params/lunatic-xml/cati/household.xml b/eno-ws/src/main/resources/params/lunatic-xml/cati/household.xml new file mode 100644 index 000000000..d68e8341a --- /dev/null +++ b/eno-ws/src/main/resources/params/lunatic-xml/cati/household.xml @@ -0,0 +1,48 @@ + + + + + ddi + lunatic-xml + + ddi-multimodal-selection + ddi-markdownToXhtml + ddi-dereferencing + ddi-cleaning + ddi-titling + + lunatic-xml-sortComponents + lunatic-xml-insert-generic-questions + lunatic-xml-externalizeVariables + lunatic-xml-insertCleaningBlock + lunatic-xml-pagination + lunatic-xml-specificTreatment + + + cati + + household + + + fr + + + + no-number + false + + + + true + + + + false + false + true + true + + + + + diff --git a/eno-ws/src/main/resources/params/lunatic-xml/cawi/business.xml b/eno-ws/src/main/resources/params/lunatic-xml/cawi/business.xml new file mode 100644 index 000000000..f9986eabd --- /dev/null +++ b/eno-ws/src/main/resources/params/lunatic-xml/cawi/business.xml @@ -0,0 +1,44 @@ + + + + + ddi + lunatic-xml + + ddi-multimodal-selection + ddi-dereferencing + ddi-cleaning + ddi-titling + + lunatic-xml-sortComponents + lunatic-xml-insert-generic-questions + lunatic-xml-externalizeVariables + lunatic-xml-insertCleaningBlock + lunatic-xml-pagination + lunatic-xml-specificTreatment + + + cawi + + business + + + fr + + + + true + + + + true + true + + + + sequence + true + + + + diff --git a/eno-ws/src/main/resources/params/lunatic-xml/cawi/default.xml b/eno-ws/src/main/resources/params/lunatic-xml/cawi/default.xml new file mode 100644 index 000000000..75bb82d39 --- /dev/null +++ b/eno-ws/src/main/resources/params/lunatic-xml/cawi/default.xml @@ -0,0 +1,47 @@ + + + + + ddi + lunatic-xml + + ddi-multimodal-selection + ddi-dereferencing + ddi-cleaning + ddi-titling + + lunatic-xml-sortComponents + lunatic-xml-insert-generic-questions + lunatic-xml-externalizeVariables + lunatic-xml-insertCleaningBlock + lunatic-xml-pagination + lunatic-xml-specificTreatment + + + cawi + + + household + + + fr + + + + + true + + + + question + true + + + + all  + + + + + + diff --git a/eno-ws/src/main/resources/params/lunatic-xml/cawi/household.xml b/eno-ws/src/main/resources/params/lunatic-xml/cawi/household.xml new file mode 100644 index 000000000..23006bfa1 --- /dev/null +++ b/eno-ws/src/main/resources/params/lunatic-xml/cawi/household.xml @@ -0,0 +1,41 @@ + + + + + ddi + lunatic-xml + + ddi-multimodal-selection + ddi-dereferencing + ddi-cleaning + ddi-titling + + lunatic-xml-sortComponents + lunatic-xml-insert-generic-questions + lunatic-xml-externalizeVariables + lunatic-xml-insertCleaningBlock + lunatic-xml-pagination + lunatic-xml-specificTreatment + + + cawi + + household + + + fr + + + + true + true + + + + no-number + false + + + + + diff --git a/eno-ws/src/main/resources/params/lunatic-xml/process/business.xml b/eno-ws/src/main/resources/params/lunatic-xml/process/business.xml new file mode 100644 index 000000000..ac1c800e3 --- /dev/null +++ b/eno-ws/src/main/resources/params/lunatic-xml/process/business.xml @@ -0,0 +1,49 @@ + + + + ddi + lunatic-xml + + ddi-multimodal-selection + ddi-markdownToXhtml + ddi-dereferencing + ddi-cleaning + ddi-titling + + lunatic-xml-sortComponents + lunatic-xml-insert-generic-questions + lunatic-xml-externalizeVariables + lunatic-xml-insertCleaningBlock + lunatic-xml-vtlParser + lunatic-xml-pagination + lunatic-xml-specificTreatment + + + process + + + business + + + fr + + + + true + + + + true + true + + + + false + true + none + true + + + + + diff --git a/eno-ws/src/main/resources/params/lunatic-xml/process/default.xml b/eno-ws/src/main/resources/params/lunatic-xml/process/default.xml new file mode 100644 index 000000000..40ba0c0c1 --- /dev/null +++ b/eno-ws/src/main/resources/params/lunatic-xml/process/default.xml @@ -0,0 +1,47 @@ + + + + ddi + lunatic-xml + + ddi-multimodal-selection + ddi-markdownToXhtml + ddi-dereferencing + ddi-cleaning + ddi-titling + + lunatic-xml-sortComponents + lunatic-xml-insert-generic-questions + lunatic-xml-externalizeVariables + lunatic-xml-insertCleaningBlock + lunatic-xml-vtlParser + lunatic-xml-pagination + lunatic-xml-specificTreatment + + + process + + + business + + + fr + + + + true + + + + true + true + + + + true + none + + + + + diff --git a/eno-ws/src/main/resources/params/lunatic-xml/process/household.xml b/eno-ws/src/main/resources/params/lunatic-xml/process/household.xml new file mode 100644 index 000000000..40ba0c0c1 --- /dev/null +++ b/eno-ws/src/main/resources/params/lunatic-xml/process/household.xml @@ -0,0 +1,47 @@ + + + + ddi + lunatic-xml + + ddi-multimodal-selection + ddi-markdownToXhtml + ddi-dereferencing + ddi-cleaning + ddi-titling + + lunatic-xml-sortComponents + lunatic-xml-insert-generic-questions + lunatic-xml-externalizeVariables + lunatic-xml-insertCleaningBlock + lunatic-xml-vtlParser + lunatic-xml-pagination + lunatic-xml-specificTreatment + + + process + + + business + + + fr + + + + true + + + + true + true + + + + true + none + + + + + diff --git a/eno-ws/src/main/resources/params/xforms/business.xml b/eno-ws/src/main/resources/params/xforms/business.xml new file mode 100644 index 000000000..5ef77181a --- /dev/null +++ b/eno-ws/src/main/resources/params/xforms/business.xml @@ -0,0 +1,45 @@ + + + + ddi + xforms + + ddi-multimodal-selection + ddi-markdownToXhtml + ddi-mapping + ddi-dereferencing + ddi-cleaning + ddi-titling + + xforms-insert-generic-questions + xforms-browsing + xforms-insee-model + xforms-insee-pattern + xforms-identification + xforms-insert-welcome + xforms-insert-end + xforms-specificTreatment + xforms-fix-adherence + + cawi + + + + + business + + + fr + + + + true + + + + true + true + + + + diff --git a/eno-ws/src/main/resources/params/xforms/default.xml b/eno-ws/src/main/resources/params/xforms/default.xml new file mode 100644 index 000000000..7356e79fc --- /dev/null +++ b/eno-ws/src/main/resources/params/xforms/default.xml @@ -0,0 +1,19 @@ + + + + ddi + xforms + + ddi-multimodal-selection + ddi-markdownToXhtml + ddi-dereferencing + ddi-cleaning + ddi-titling + + xforms-browsing + xforms-fix-adherence + + cawi + + + diff --git a/eno-ws/src/main/resources/params/xforms/household.xml b/eno-ws/src/main/resources/params/xforms/household.xml new file mode 100644 index 000000000..d635f0440 --- /dev/null +++ b/eno-ws/src/main/resources/params/xforms/household.xml @@ -0,0 +1,43 @@ + + + + ddi + xforms + + ddi-multimodal-selection + ddi-markdownToXhtml + ddi-mapping + ddi-dereferencing + ddi-cleaning + ddi-titling + + xforms-insert-generic-questions + xforms-browsing + xforms-insee-model + xforms-insee-pattern + xforms-insert-welcome + xforms-insert-end + xforms-specificTreatment + xforms-fix-adherence + + + cawi + + + + household + + + fr + + + + true + + + + <Browsing>template</Browsing> + + + + diff --git a/eno-ws/src/test/java/fr/insee/eno/AppTest.java b/eno-ws/src/test/java/fr/insee/eno/AppTest.java deleted file mode 100644 index 1d56fa316..000000000 --- a/eno-ws/src/test/java/fr/insee/eno/AppTest.java +++ /dev/null @@ -1,38 +0,0 @@ -package fr.insee.eno; - -import junit.framework.Test; -import junit.framework.TestCase; -import junit.framework.TestSuite; - -/** - * Unit test for simple App. - */ -public class AppTest - extends TestCase -{ - /** - * Create the test case - * - * @param testName name of the test case - */ - public AppTest( String testName ) - { - super( testName ); - } - - /** - * @return the suite of tests being tested - */ - public static Test suite() - { - return new TestSuite( AppTest.class ); - } - - /** - * Rigourous Test :-) - */ - public void testApp() - { - assertTrue( true ); - } -} diff --git a/eno-ws/src/test/java/fr/insee/eno/ws/controller/ParametersFileNameTest.java b/eno-ws/src/test/java/fr/insee/eno/ws/controller/ParametersFileNameTest.java new file mode 100644 index 000000000..f1e17b42a --- /dev/null +++ b/eno-ws/src/test/java/fr/insee/eno/ws/controller/ParametersFileNameTest.java @@ -0,0 +1,32 @@ +package fr.insee.eno.ws.controller; + +import fr.insee.eno.parameters.Context; +import fr.insee.eno.parameters.Mode; +import fr.insee.eno.parameters.OutFormat; +import org.junit.Assert; +import org.junit.Test; + +public class ParametersFileNameTest { + + @Test + public void businessCAWIXformsCase() { + // Given + Context context = Context.BUSINESS; + Mode mode = Mode.CAWI; + OutFormat outFormat = OutFormat.XFORMS; + // When + Then + Assert.assertEquals("eno-parameters-BUSINESS-CAWI-XFORMS.xml", + ParametersController.parametersFileName(context, mode, outFormat)); + } + + @Test + public void defaultDDI_nullMode() { + // Given + Context context = Context.DEFAULT; + OutFormat outFormat = OutFormat.DDI; + // When + Then + Assert.assertEquals("eno-parameters-DEFAULT-DDI.xml", + ParametersController.parametersFileName(context, null, outFormat)); + } + +} diff --git a/eno-ws/src/test/java/fr/insee/eno/ws/service/QuestionnaireGenerationTest.java b/eno-ws/src/test/java/fr/insee/eno/ws/service/QuestionnaireGenerationTest.java new file mode 100644 index 000000000..89c0b3ff1 --- /dev/null +++ b/eno-ws/src/test/java/fr/insee/eno/ws/service/QuestionnaireGenerationTest.java @@ -0,0 +1,37 @@ +package fr.insee.eno.ws.service; + +import fr.insee.eno.parameters.Context; +import fr.insee.eno.parameters.ENOParameters; +import fr.insee.eno.parameters.Mode; +import fr.insee.eno.parameters.OutFormat; +import fr.insee.eno.service.ParameterizedGenerationService; +import org.junit.jupiter.api.Test; + +import java.io.ByteArrayOutputStream; +import java.io.InputStream; + +import static org.junit.jupiter.api.Assertions.assertTrue; + +class QuestionnaireGenerationTest { + + @Test + void ddiToXformsTest_businessCAWI() throws Exception { + // Given + ParameterService parameterService = new ParameterService(); + ENOParameters parameters = parameterService.getDefaultCustomParameters( + Context.BUSINESS, OutFormat.XFORMS, Mode.CAWI); + try (InputStream ddiInputStream = this.getClass().getClassLoader().getResourceAsStream( + "transforms/simple-ddi.xml")) { + // When + ParameterizedGenerationService generationService = new ParameterizedGenerationService(); + ByteArrayOutputStream outputStream = generationService.generateQuestionnaire( + ddiInputStream, parameters, null, null, null); + // Then + String result = outputStream.toString(); + assertTrue(result.contains("")); + assertTrue(result.contains("orbeon.org")); + assertTrue(result.contains("Unique question")); + } + } + +} diff --git a/eno-ws/src/test/resources/log4j2.xml b/eno-ws/src/test/resources/log4j2.xml new file mode 100644 index 000000000..2b39f63fa --- /dev/null +++ b/eno-ws/src/test/resources/log4j2.xml @@ -0,0 +1,22 @@ + + + + + + + + + [%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %msg%n + + + + + + + + + + + + + \ No newline at end of file diff --git a/eno-ws/src/test/resources/transforms/ddi.xml b/eno-ws/src/test/resources/transforms/ddi.xml new file mode 100644 index 000000000..fb76627a4 --- /dev/null +++ b/eno-ws/src/test/resources/transforms/ddi.xml @@ -0,0 +1,11005 @@ + + fr.insee + INSEE-i6vwi0 + 1 + + + Questionnaire SIMPSONS + + + + fr.insee + RessourcePackage-i6vwi0 + 1 + + fr.insee + InterviewerInstructionScheme-i6vwi0 + 1 + + A définir + + + fr.insee + d1 + 1 + + comment + + + + We're going to test your knowledge about the simpsons series.Welcome in the simspons world! + + + + + fr.insee + d11 + 1 + + comment + + + + For your information, the date of the last broadcast was on + ¤LAST_BROADCAST¤ + + + + + fr.insee + d2 + 1 + + comment + + + + This module asks about your general knowledge of the Simpsons city + + + + + fr.insee + d3 + 1 + + instruction + + + + One possible answer + + + + + fr.insee + d4 + 1 + + instruction + + + + Only one possible answer + + + + + fr.insee + d5 + 1 + + instruction + + + + Several possible answers + + + + + fr.insee + j4nwc63q-CI-0-II-0 + 1 + + warning + + + + The sum of percentages is: ¤jbcggtca-GOP¤ %. The total of + percentages must be equal to 100%. + + + + fr.insee + jbcggtca-GOP + 1 + OutParameter + + + + + + fr.insee + d10 + 1 + + instruction + + + + Several answers possible: check off all the relevant boxes + + + + fr.inseeFTN-INSTRUCTION-11tooltipIncluded principalities + + fr.insee + ControlConstructScheme-i6vwi0 + 1 + + fr.insee + Sequence-i6vwi0 + 1 + + Questionnaire SIMPSONS + + template + + fr.insee + j6p0ti5h + 1 + Sequence + + + fr.insee + d1e119 + 1 + IfThenElse + + + fr.insee + j6z12s2d + 1 + Sequence + + + + fr.insee + j6p0ti5h + 1 + + MODULE1 + + + Introduction + + + fr.insee + d1 + 1 + Instruction + + module + + fr.insee + j6p3dkx6-QC + 1 + QuestionConstruct + + + fr.insee + j6p0np9q-QC + 1 + QuestionConstruct + + + fr.insee + d1e50 + 1 + IfThenElse + + + + fr.insee + j6p0s7o5 + 1 + + MODULE11 + + + General knowledge of the series + + submodule + + fr.insee + j3343qhx-QC + 1 + QuestionConstruct + + + fr.insee + j6q9h8tj-QC + 1 + QuestionConstruct + + + fr.insee + j334cyqb-QC + 1 + QuestionConstruct + + + fr.insee + j6z06z1e-QC + 1 + QuestionConstruct + + + + fr.insee + j3341528 + 1 + + MODULE2 + + + Simpsons' city + + + fr.insee + d2 + 1 + Instruction + + module + + fr.insee + j3343clt-QC + 1 + QuestionConstruct + + + fr.insee + j6qdfhvw-QC + 1 + QuestionConstruct + + + fr.insee + j4nw5cqz-QC + 1 + QuestionConstruct + + + + fr.insee + j6qe0h9q + 1 + + MODULE3 + + + Characters + + module + + fr.insee + j334akov-QC + 1 + QuestionConstruct + + + fr.insee + d12-SI + 1 + StatementItem + + + fr.insee + j6p29i81-QC + 1 + QuestionConstruct + + + fr.insee + j6qefnga-QC + 1 + QuestionConstruct + + + fr.insee + j6yzoc6g-QC + 1 + QuestionConstruct + + + + fr.insee + j4nw88h2 + 1 + + MODULE4 + + + General questions + + module + + fr.insee + j6qe237q + 1 + Sequence + + + fr.insee + j6qejudb + 1 + Sequence + + + fr.insee + j6qeh91y + 1 + Sequence + + + + fr.insee + j6qe237q + 1 + + MODULE41 + + + Kwik-E-Mart + + submodule + + fr.insee + j4nwc63q-QC + 1 + QuestionConstruct + + + fr.insee + j4nwc63q-CI-0 + 1 + ComputationItem + + + + fr.insee + j6qejudb + 1 + + MODULE42 + + + Clowning + + submodule + + fr.insee + j4nw0rr6-QC + 1 + QuestionConstruct + + + + fr.insee + j6qeh91y + 1 + + MODULE43 + + + Transport + + submodule + + fr.insee + j6p2lwuj-QC + 1 + QuestionConstruct + + + + fr.insee + j6qfx9qe + 1 + + MODULE5 + + + Favourite characters + + module + + fr.insee + j6qg8rc6-QC + 1 + QuestionConstruct + + + + fr.insee + j6z12s2d + 1 + + MODULE6 + + + Comment + + module + + fr.insee + j6z0z3us-QC + 1 + QuestionConstruct + + + + fr.insee + d1e50 + 1 + + A définir + + + + + hideable + + + xpath + + fr.insee + d1e50-IP-1 + 1 + + READY + + + + + fr.insee + j6p0np9q-QOP-jbgd3set + 1 + OutParameter + + + fr.insee + d1e50-IP-1 + 1 + InParameter + + + not( d1e50-IP-1!= '1') + + + + fr.insee + d1e50-THEN + 1 + Sequence + + + + fr.insee + d1e50-THEN + 1 + + + + + fr.insee + j6p0s7o5 + 1 + Sequence + + + + fr.insee + d1e119 + 1 + + A définir + + + + + hideable + + + xpath + + fr.insee + d1e119-IP-1 + 1 + + READY + + + + + fr.insee + j6p0np9q-QOP-jbgd3set + 1 + OutParameter + + + fr.insee + d1e119-IP-1 + 1 + InParameter + + + not( d1e119-IP-1!= '1') + + + + fr.insee + d1e119-THEN + 1 + Sequence + + + + fr.insee + d1e119-THEN + 1 + + + + + fr.insee + j3341528 + 1 + Sequence + + + fr.insee + j6qe0h9q + 1 + Sequence + + + fr.insee + j4nw88h2 + 1 + Sequence + + + fr.insee + j6qfx9qe + 1 + Sequence + + + + fr.insee + j6p3dkx6-QC + 1 + + COMMENT + + + fr.insee + j6p3dkx6 + 1 + QuestionItem + + + + fr.insee + j6p0np9q-QC + 1 + + READY + + + fr.insee + j6p0np9q + 1 + QuestionItem + + + + fr.insee + j3343qhx-QC + 1 + + PRODUCER + + + fr.insee + j3343qhx + 1 + QuestionItem + + + + fr.insee + j6q9h8tj-QC + 1 + + SEASON_NUMBER + + + fr.insee + j6q9h8tj + 1 + QuestionItem + + + + fr.insee + j334cyqb-QC + 1 + + DATEFIRST + + + fr.insee + j334cyqb + 1 + QuestionItem + + + + fr.insee + j6z06z1e-QC + 1 + + AUDIENCE_SHARE + + + fr.insee + j6z06z1e + 1 + QuestionItem + + + + fr.insee + j3343clt-QC + 1 + + CITY + + + fr.insee + j3343clt + 1 + QuestionItem + + + + fr.insee + j6qdfhvw-QC + 1 + + MAYOR + + + fr.insee + j6qdfhvw + 1 + QuestionItem + + + + fr.insee + j4nw5cqz-QC + 1 + + STATE + + + fr.insee + j4nw5cqz + 1 + QuestionItem + + + + fr.insee + j334akov-QC + 1 + + PET + + + fr.insee + j334akov + 1 + QuestionGrid + + + + fr.insee + j6p29i81-QC + 1 + + ICE_FLAVOUR + + + fr.insee + j6p29i81 + 1 + QuestionGrid + + + + fr.insee + j6qefnga-QC + 1 + + NUCLEAR_CHARACTER + + + fr.insee + j6qefnga + 1 + QuestionGrid + + + + fr.insee + j6yzoc6g-QC + 1 + + BIRTH_CHARACTER + + + fr.insee + j6yzoc6g + 1 + QuestionGrid + + + + fr.insee + j4nwc63q-QC + 1 + + PERCENTAGE_EXPENSES + + + fr.insee + j4nwc63q + 1 + QuestionGrid + + + + fr.insee + j4nw0rr6-QC + 1 + + CLOWNING + + + fr.insee + j4nw0rr6 + 1 + QuestionGrid + + + + fr.insee + j6p2lwuj-QC + 1 + + TRAVEL + + + fr.insee + j6p2lwuj + 1 + QuestionGrid + + + + fr.insee + j6qg8rc6-QC + 1 + + FAVOURITE_CHARACTERS + + + fr.insee + j6qg8rc6 + 1 + QuestionGrid + + + + fr.insee + j6z0z3us-QC + 1 + + SURVEY_COMMENT + + + fr.insee + j6z0z3us + 1 + QuestionItem + + + + fr.insee + j4nwc63q-CI-0 + 1 + + Total of percentages + + + Total of percentages + + + fr.insee + j4nwc63q-CI-0-II-0 + 1 + Instruction + + stumblingblock + + + xpath + + fr.insee + j4nwc63q-CI-0-IP-1 + 1 + + PERCENTAGE_EXPENSES11 + + + + fr.insee + j4nwc63q-CI-0-IP-2 + 1 + + PERCENTAGE_EXPENSES21 + + + + fr.insee + j4nwc63q-CI-0-IP-3 + 1 + + PERCENTAGE_EXPENSES31 + + + + fr.insee + j4nwc63q-CI-0-IP-4 + 1 + + PERCENTAGE_EXPENSES41 + + + + fr.insee + j4nwc63q-CI-0-IP-5 + 1 + + PERCENTAGE_EXPENSES51 + + + + fr.insee + j4nwc63q-CI-0-IP-6 + 1 + + PERCENTAGE_EXPENSES61 + + + + fr.insee + j4nwc63q-CI-0-IP-7 + 1 + + PERCENTAGE_EXPENSES71 + + + + fr.insee + j4nwc63q-CI-0-IP-8 + 1 + + PERCENTAGE_EXPENSES81 + + + + fr.insee + j4nwc63q-CI-0-IP-9 + 1 + + PERCENTAGE_EXPENSES91 + + + + fr.insee + j4nwc63q-CI-0-IP-10 + 1 + + PERCENTAGE_EXPENSES101 + + + + + fr.insee + j4nwc63q-QOP-jbgde5yl + 1 + OutParameter + + + fr.insee + j4nwc63q-CI-0-IP-1 + 1 + InParameter + + + + + fr.insee + j4nwc63q-QOP-jbgd2x2t + 1 + OutParameter + + + fr.insee + j4nwc63q-CI-0-IP-2 + 1 + InParameter + + + + + fr.insee + j4nwc63q-QOP-jbgdjypz + 1 + OutParameter + + + fr.insee + j4nwc63q-CI-0-IP-3 + 1 + InParameter + + + + + fr.insee + j4nwc63q-QOP-jbgdcftu + 1 + OutParameter + + + fr.insee + j4nwc63q-CI-0-IP-4 + 1 + InParameter + + + + + fr.insee + j4nwc63q-QOP-jbgdiyfe + 1 + OutParameter + + + fr.insee + j4nwc63q-CI-0-IP-5 + 1 + InParameter + + + + + fr.insee + j4nwc63q-QOP-jbgdj1wd + 1 + OutParameter + + + fr.insee + j4nwc63q-CI-0-IP-6 + 1 + InParameter + + + + + fr.insee + j4nwc63q-QOP-jbgddylk + 1 + OutParameter + + + fr.insee + j4nwc63q-CI-0-IP-7 + 1 + InParameter + + + + + fr.insee + j4nwc63q-QOP-jbgd3jj6 + 1 + OutParameter + + + fr.insee + j4nwc63q-CI-0-IP-8 + 1 + InParameter + + + + + fr.insee + j4nwc63q-QOP-jbgd4w3k + 1 + OutParameter + + + fr.insee + j4nwc63q-CI-0-IP-9 + 1 + InParameter + + + + + fr.insee + j4nwc63q-QOP-jbgd4w4k + 1 + OutParameter + + + fr.insee + j4nwc63q-CI-0-IP-10 + 1 + InParameter + + + number(if (j4nwc63q-CI-0-IP-1='') then '0' else j4nwc63q-CI-0-IP-1) + number(if (j4nwc63q-CI-0-IP-2='') then '0' else j4nwc63q-CI-0-IP-2) + + number(if (j4nwc63q-CI-0-IP-3='') then '0' else j4nwc63q-CI-0-IP-3)+ number(if (j4nwc63q-CI-0-IP-4='') then '0' else j4nwc63q-CI-0-IP-4)+ number(if (j4nwc63q-CI-0-IP-5='') then '0' else j4nwc63q-CI-0-IP-5)+ + number(if (j4nwc63q-CI-0-IP-6='') then '0' else j4nwc63q-CI-0-IP-6)+ number(if (j4nwc63q-CI-0-IP-7='') then '0' else j4nwc63q-CI-0-IP-7)+ number(if (j4nwc63q-CI-0-IP-8='') then '0' else j4nwc63q-CI-0-IP-8)+ + number(if (j4nwc63q-CI-0-IP-9='') then '0' else j4nwc63q-CI-0-IP-9)+ number(if (j4nwc63q-CI-0-IP-10='') then '0' else j4nwc63q-CI-0-IP-10)!= 100 + + + + + fr.insee + d12-SI + 1 + + + Now we are going to know if you think that Jay is a gluton. + + + + + + fr.insee + QuestionScheme-i6vwi0 + 1 + + A définir + + + fr.insee + j6p3dkx6 + 1 + + COMMENT + + + fr.insee + j6p3dkx6-QOP-jbgdhaht + 1 + + COMMENT + + + + + fr.insee + j6p3dkx6-RDOP-jbgdhaht + 1 + OutParameter + + + fr.insee + j6p3dkx6-QOP-jbgdhaht + 1 + OutParameter + + + + + Before starting, do you have any comments about the Simpsons family? + + + + + fr.insee + j6p3dkx6-RDOP-jbgdhaht + 1 + + + + + + fr.insee + j6p0np9q + 1 + + READY + + + fr.insee + j6p0np9q-QOP-jbgd3set + 1 + + READY + + + + + fr.insee + j6p0np9q-RDOP-jbgd3set + 1 + OutParameter + + + fr.insee + j6p0np9q-QOP-jbgd3set + 1 + OutParameter + + + + + Are you ready? + + + + + fr.insee + j6p0np9q-RDOP-jbgd3set + 1 + + + + + fr.insee + INSEE-COMMUN-CL-Booleen-1 + 1 + Code + + + + + + + + + + + fr.insee + j6p6my1d + 1 + + + + If you are not ready, please go to the end of the + questionnaire + $READY != '1' + j6z12s2d + + + + + + + + fr.insee + j3343qhx + 1 + + PRODUCER + + + fr.insee + j3343qhx-QOP-jbgd90cy + 1 + + PRODUCER + + + + + fr.insee + j3343qhx-RDOP-jbgd90cy + 1 + OutParameter + + + fr.insee + j3343qhx-QOP-jbgd90cy + 1 + OutParameter + + + + + Who is the producer? + + + + + fr.insee + j3343qhx-RDOP-jbgd90cy + 1 + + + + + + fr.insee + j6q9h8tj + 1 + + SEASON_NUMBER + + + fr.insee + j6q9h8tj-QOP-jbgdjy8h + 1 + + SEASON_NUMBER + + + + + fr.insee + j6q9h8tj-RDOP-jbgdjy8h + 1 + OutParameter + + + fr.insee + j6q9h8tj-QOP-jbgdjy8h + 1 + OutParameter + + + + + What is the current season number? + + + + + 0 + 99 + + Decimal + + fr.insee + j6q9h8tj-RDOP-jbgdjy8h + 1 + + + + + fr.insee + j334cyqb + 1 + + DATEFIRST + + + fr.insee + j334cyqb-QOP-jbgdih2z + 1 + + DATEFIRST + + + + + fr.insee + j334cyqb-RDOP-jbgdih2z + 1 + OutParameter + + + fr.insee + j334cyqb-QOP-jbgdih2z + 1 + OutParameter + + + + + When was the first episode of the Simpsons? + + + + fr.insee + INSEE-COMMUN-MNR-DateTimedate-YYYY-MM-DD + 1 + ManagedDateTimeRepresentation + + fr.insee + j334cyqb-RDOP-jbgdih2z + 1 + + fr.insee + INSEE-COMMUN-MNR-DateTimedate-YYYY-MM-DD + 1 + ManagedDateTimeRepresentation + + + + + fr.insee + d11 + 1 + Instruction + + + + fr.insee + j6z06z1e + 1 + + AUDIENCE_SHARE + + + fr.insee + j6z06z1e-QOP-jbgddnrd + 1 + + AUDIENCE_SHARE + + + + + fr.insee + j6z06z1e-RDOP-jbgddnrd + 1 + OutParameter + + + fr.insee + j6z06z1e-QOP-jbgddnrd + 1 + OutParameter + + + + + In your opinion, how much is the part of audience share in US for the 2016 + season? + + + + + 0 + 99 + + Decimal + + fr.insee + j6z06z1e-RDOP-jbgddnrd + 1 + + + + + fr.insee + j3343clt + 1 + + CITY + + + fr.insee + j3343clt-QOP-jbgdjdkn + 1 + + CITY + + + + + fr.insee + j3343clt-RDOP-jbgdjdkn + 1 + OutParameter + + + fr.insee + j3343clt-QOP-jbgdjdkn + 1 + OutParameter + + + + + In which city do the Simpsons reside? + + + + radio-button + + fr.insee + j334iumu + 1 + CodeList + + + fr.insee + j3343clt-RDOP-jbgdjdkn + 1 + + + fr.insee + j334iumu + 1 + CodeList + + + + + + + fr.insee + d3 + 1 + Instruction + + + + fr.insee + j6qdfhvw + 1 + + MAYOR + + + fr.insee + j6qdfhvw-QOP-jbgd8ghp + 1 + + MAYOR + + + + + fr.insee + j6qdfhvw-RDOP-jbgd8ghp + 1 + OutParameter + + + fr.insee + j6qdfhvw-QOP-jbgd8ghp + 1 + OutParameter + + + + + Who is the Simpsons city mayor? + + + + checkbox + + fr.insee + j6qdqoen + 1 + CodeList + + + fr.insee + j6qdfhvw-RDOP-jbgd8ghp + 1 + + + fr.insee + j6qdqoen + 1 + CodeList + + + + + + + fr.insee + d4 + 1 + Instruction + + + + fr.insee + j4nw5cqz + 1 + + STATE + + + fr.insee + j4nw5cqz-QOP-jbgdkd7v + 1 + + STATE + + + + + fr.insee + j4nw5cqz-RDOP-jbgdkd7v + 1 + OutParameter + + + fr.insee + j4nw5cqz-QOP-jbgdkd7v + 1 + OutParameter + + + + + In which state do The Simpsons reside? + + + + drop-down-list + + fr.insee + j4nwo00f + 1 + CodeList + + + fr.insee + j4nw5cqz-RDOP-jbgdkd7v + 1 + + + fr.insee + j4nwo00f + 1 + CodeList + + + + + + + + fr.insee + j6z0z3us + 1 + + SURVEY_COMMENT + + + fr.insee + j6z0z3us-QOP-jbgd6m6e + 1 + + SURVEY_COMMENT + + + + + fr.insee + j6z0z3us-RDOP-jbgd6m6e + 1 + OutParameter + + + fr.insee + j6z0z3us-QOP-jbgd6m6e + 1 + OutParameter + + + + + Do you have any comment about the survey? + + + + + fr.insee + j6z0z3us-RDOP-jbgd6m6e + 1 + + + + + + fr.insee + j334akov + 1 + + PET + + + fr.insee + j334akov-QOP-jbgd8qmn + 1 + + PET1 + + + + fr.insee + j334akov-QOP-jbgd60vl + 1 + + PET2 + + + + fr.insee + j334akov-QOP-jbgda2jo + 1 + + PET3 + + + + fr.insee + j334akov-QOP-jbgdfssy + 1 + + PET4 + + + + + fr.insee + j334akov-RDOP-jbgd8qmn + 1 + OutParameter + + + fr.insee + j334akov-QOP-jbgd8qmn + 1 + OutParameter + + + + + fr.insee + j334akov-RDOP-jbgd60vl + 1 + OutParameter + + + fr.insee + j334akov-QOP-jbgd60vl + 1 + OutParameter + + + + + fr.insee + j334akov-RDOP-jbgda2jo + 1 + OutParameter + + + fr.insee + j334akov-QOP-jbgda2jo + 1 + OutParameter + + + + + fr.insee + j334akov-RDOP-jbgdfssy + 1 + OutParameter + + + fr.insee + j334akov-QOP-jbgdfssy + 1 + OutParameter + + + + + What are the pet names that the Simpsons family had? + + + + + + fr.insee + j335cu3c + 1 + CodeList + + + + + + + + fr.insee + j334akov-RDOP-jbgd8qmn + 1 + + + + + fr.insee + INSEE-COMMUN-CL-Booleen-1 + 1 + Code + + + + + + + + + + + + + + + + + + fr.insee + j334akov-RDOP-jbgd60vl + 1 + + + + + fr.insee + INSEE-COMMUN-CL-Booleen-1 + 1 + Code + + + + + + + + + + + + + + + + + + fr.insee + j334akov-RDOP-jbgda2jo + 1 + + + + + fr.insee + INSEE-COMMUN-CL-Booleen-1 + 1 + Code + + + + + + + + + + + + + + + + + + fr.insee + j334akov-RDOP-jbgdfssy + 1 + + + + + fr.insee + INSEE-COMMUN-CL-Booleen-1 + 1 + Code + + + + + + + + + + + + + + + + + fr.insee + d5 + 1 + Instruction + + + + fr.insee + j6p29i81 + 1 + + ICE_FLAVOUR + + + fr.insee + j6p29i81-QOP-jbgdb3jx + 1 + + ICE_FLAVOUR1 + + + + fr.insee + j6p29i81-QOP-jbgdb61k + 1 + + ICE_FLAVOUR2 + + + + fr.insee + j6p29i81-QOP-jbgdl3kc + 1 + + ICE_FLAVOUR3 + + + + fr.insee + j6p29i81-QOP-jbgdcobo + 1 + + ICE_FLAVOUR4 + + + + + fr.insee + j6p29i81-RDOP-jbgdb3jx + 1 + OutParameter + + + fr.insee + j6p29i81-QOP-jbgdb3jx + 1 + OutParameter + + + + + fr.insee + j6p29i81-RDOP-jbgdb61k + 1 + OutParameter + + + fr.insee + j6p29i81-QOP-jbgdb61k + 1 + OutParameter + + + + + fr.insee + j6p29i81-RDOP-jbgdl3kc + 1 + OutParameter + + + fr.insee + j6p29i81-QOP-jbgdl3kc + 1 + OutParameter + + + + + fr.insee + j6p29i81-RDOP-jbgdcobo + 1 + OutParameter + + + fr.insee + j6p29i81-QOP-jbgdcobo + 1 + OutParameter + + + + + Does Jay like the following ice cream flavours? + + + + + + fr.insee + j6p2mvca + 1 + CodeList + + + + + + + radio-button + + fr.insee + jbdxh138 + 1 + CodeList + + + fr.insee + j6p29i81-RDOP-jbgdb3jx + 1 + + + fr.insee + jbdxh138 + 1 + CodeList + + + + + + + + + + + + + + radio-button + + fr.insee + jbdxh138 + 1 + CodeList + + + fr.insee + j6p29i81-RDOP-jbgdb61k + 1 + + + fr.insee + jbdxh138 + 1 + CodeList + + + + + + + + + + + + + + radio-button + + fr.insee + jbdxh138 + 1 + CodeList + + + fr.insee + j6p29i81-RDOP-jbgdl3kc + 1 + + + fr.insee + jbdxh138 + 1 + CodeList + + + + + + + + + + + + + + radio-button + + fr.insee + jbdxh138 + 1 + CodeList + + + fr.insee + j6p29i81-RDOP-jbgdcobo + 1 + + + fr.insee + jbdxh138 + 1 + CodeList + + + + + + + + + + + + + + + fr.insee + j6qefnga + 1 + + NUCLEAR_CHARACTER + + + fr.insee + j6qefnga-QOP-jbgd6p0k + 1 + + NUCLEAR_CHARACTER1 + + + + fr.insee + j6qefnga-QOP-jbgd9ato + 1 + + NUCLEAR_CHARACTER2 + + + + fr.insee + j6qefnga-QOP-jbgd3e0p + 1 + + NUCLEAR_CHARACTER3 + + + + fr.insee + j6qefnga-QOP-jbgdkxne + 1 + + NUCLEAR_CHARACTER4 + + + + + fr.insee + j6qefnga-RDOP-jbgd6p0k + 1 + OutParameter + + + fr.insee + j6qefnga-QOP-jbgd6p0k + 1 + OutParameter + + + + + fr.insee + j6qefnga-RDOP-jbgd9ato + 1 + OutParameter + + + fr.insee + j6qefnga-QOP-jbgd9ato + 1 + OutParameter + + + + + fr.insee + j6qefnga-RDOP-jbgd3e0p + 1 + OutParameter + + + fr.insee + j6qefnga-QOP-jbgd3e0p + 1 + OutParameter + + + + + fr.insee + j6qefnga-RDOP-jbgdkxne + 1 + OutParameter + + + fr.insee + j6qefnga-QOP-jbgdkxne + 1 + OutParameter + + + + + Which character works in the nuclear power plant? + + + + + + fr.insee + j6qeytgc + 1 + CodeList + + + + + + + drop-down-list + + fr.insee + jbdxh138 + 1 + CodeList + + + fr.insee + j6qefnga-RDOP-jbgd6p0k + 1 + + + fr.insee + jbdxh138 + 1 + CodeList + + + + + + + + + + + + + + drop-down-list + + fr.insee + jbdxh138 + 1 + CodeList + + + fr.insee + j6qefnga-RDOP-jbgd9ato + 1 + + + fr.insee + jbdxh138 + 1 + CodeList + + + + + + + + + + + + + + drop-down-list + + fr.insee + jbdxh138 + 1 + CodeList + + + fr.insee + j6qefnga-RDOP-jbgd3e0p + 1 + + + fr.insee + jbdxh138 + 1 + CodeList + + + + + + + + + + + + + + drop-down-list + + fr.insee + jbdxh138 + 1 + CodeList + + + fr.insee + j6qefnga-RDOP-jbgdkxne + 1 + + + fr.insee + jbdxh138 + 1 + CodeList + + + + + + + + + + + + + + + fr.insee + j6yzoc6g + 1 + + BIRTH_CHARACTER + + + fr.insee + j6yzoc6g-QOP-jbgd7fr6 + 1 + + BIRTH_CHARACTER1 + + + + fr.insee + j6yzoc6g-QOP-jbgd5e9f + 1 + + BIRTH_CHARACTER2 + + + + fr.insee + j6yzoc6g-QOP-jbgd912x + 1 + + BIRTH_CHARACTER3 + + + + fr.insee + j6yzoc6g-QOP-jbgd6bdy + 1 + + BIRTH_CHARACTER4 + + + + fr.insee + j6yzoc6g-QOP-jbgddyry + 1 + + BIRTH_CHARACTER5 + + + + + fr.insee + j6yzoc6g-RDOP-jbgd7fr6 + 1 + OutParameter + + + fr.insee + j6yzoc6g-QOP-jbgd7fr6 + 1 + OutParameter + + + + + fr.insee + j6yzoc6g-RDOP-jbgd5e9f + 1 + OutParameter + + + fr.insee + j6yzoc6g-QOP-jbgd5e9f + 1 + OutParameter + + + + + fr.insee + j6yzoc6g-RDOP-jbgd912x + 1 + OutParameter + + + fr.insee + j6yzoc6g-QOP-jbgd912x + 1 + OutParameter + + + + + fr.insee + j6yzoc6g-RDOP-jbgd6bdy + 1 + OutParameter + + + fr.insee + j6yzoc6g-QOP-jbgd6bdy + 1 + OutParameter + + + + + fr.insee + j6yzoc6g-RDOP-jbgddyry + 1 + OutParameter + + + fr.insee + j6yzoc6g-QOP-jbgddyry + 1 + OutParameter + + + + + In which city each character was born? + + + + + + fr.insee + j6z087mq + 1 + CodeList + + + + + + + checkbox + + fr.insee + jbdxricm + 1 + CodeList + + + fr.insee + j6yzoc6g-RDOP-jbgd7fr6 + 1 + + + fr.insee + jbdxricm + 1 + CodeList + + + + + + + + + + + + + + checkbox + + fr.insee + jbdxricm + 1 + CodeList + + + fr.insee + j6yzoc6g-RDOP-jbgd5e9f + 1 + + + fr.insee + jbdxricm + 1 + CodeList + + + + + + + + + + + + + + checkbox + + fr.insee + jbdxricm + 1 + CodeList + + + fr.insee + j6yzoc6g-RDOP-jbgd912x + 1 + + + fr.insee + jbdxricm + 1 + CodeList + + + + + + + + + + + + + + checkbox + + fr.insee + jbdxricm + 1 + CodeList + + + fr.insee + j6yzoc6g-RDOP-jbgd6bdy + 1 + + + fr.insee + jbdxricm + 1 + CodeList + + + + + + + + + + + + + + checkbox + + fr.insee + jbdxricm + 1 + CodeList + + + fr.insee + j6yzoc6g-RDOP-jbgddyry + 1 + + + fr.insee + jbdxricm + 1 + CodeList + + + + + + + + + + + + + + + fr.insee + j4nwc63q + 1 + + PERCENTAGE_EXPENSES + + + fr.insee + j4nwc63q-QOP-jbgde5yl + 1 + + PERCENTAGE_EXPENSES11 + + + + fr.insee + j4nwc63q-QOP-jbgd2x2t + 1 + + PERCENTAGE_EXPENSES21 + + + + fr.insee + j4nwc63q-QOP-jbgdjypz + 1 + + PERCENTAGE_EXPENSES31 + + + + fr.insee + j4nwc63q-QOP-jbgdcftu + 1 + + PERCENTAGE_EXPENSES41 + + + + fr.insee + j4nwc63q-QOP-jbgdiyfe + 1 + + PERCENTAGE_EXPENSES51 + + + + fr.insee + j4nwc63q-QOP-jbgdj1wd + 1 + + PERCENTAGE_EXPENSES61 + + + + fr.insee + j4nwc63q-QOP-jbgddylk + 1 + + PERCENTAGE_EXPENSES71 + + + + fr.insee + j4nwc63q-QOP-jbgd3jj6 + 1 + + PERCENTAGE_EXPENSES81 + + + + fr.insee + j4nwc63q-QOP-jbgd4w3k + 1 + + PERCENTAGE_EXPENSES91 + + + + fr.insee + j4nwc63q-QOP-jbgd4w4k + 1 + + PERCENTAGE_EXPENSES101 + + + + + fr.insee + j4nwc63q-RDOP-jbgde5yl + 1 + OutParameter + + + fr.insee + j4nwc63q-QOP-jbgde5yl + 1 + OutParameter + + + + + fr.insee + j4nwc63q-RDOP-jbgd2x2t + 1 + OutParameter + + + fr.insee + j4nwc63q-QOP-jbgd2x2t + 1 + OutParameter + + + + + fr.insee + j4nwc63q-RDOP-jbgdjypz + 1 + OutParameter + + + fr.insee + j4nwc63q-QOP-jbgdjypz + 1 + OutParameter + + + + + fr.insee + j4nwc63q-RDOP-jbgdcftu + 1 + OutParameter + + + fr.insee + j4nwc63q-QOP-jbgdcftu + 1 + OutParameter + + + + + fr.insee + j4nwc63q-RDOP-jbgdiyfe + 1 + OutParameter + + + fr.insee + j4nwc63q-QOP-jbgdiyfe + 1 + OutParameter + + + + + fr.insee + j4nwc63q-RDOP-jbgdj1wd + 1 + OutParameter + + + fr.insee + j4nwc63q-QOP-jbgdj1wd + 1 + OutParameter + + + + + fr.insee + j4nwc63q-RDOP-jbgddylk + 1 + OutParameter + + + fr.insee + j4nwc63q-QOP-jbgddylk + 1 + OutParameter + + + + + fr.insee + j4nwc63q-RDOP-jbgd3jj6 + 1 + OutParameter + + + fr.insee + j4nwc63q-QOP-jbgd3jj6 + 1 + OutParameter + + + + + fr.insee + j4nwc63q-RDOP-jbgd4w3k + 1 + OutParameter + + + fr.insee + j4nwc63q-QOP-jbgd4w3k + 1 + OutParameter + + + + + fr.insee + j4nwc63q-RDOP-jbgd4w4k + 1 + OutParameter + + + fr.insee + j4nwc63q-QOP-jbgd4w4k + 1 + OutParameter + + + + + Please, specify the percentage of Jay's expenses in the Kwik-E-Mart for each + product? + + + + + + fr.insee + j4nwh16i + 1 + CodeList + + + + + + + fr.insee + j4nwc63q-secondDimension-fakeCL-1 + 1 + CodeList + + + + + + + + 0 + 100 + + Decimal + + fr.insee + j4nwc63q-RDOP-jbgde5yl + 1 + + + + + + + + + + + + + 0 + 100 + + Decimal + + fr.insee + j4nwc63q-RDOP-jbgd2x2t + 1 + + + + + + + + + + + + + 0 + 100 + + Decimal + + fr.insee + j4nwc63q-RDOP-jbgdjypz + 1 + + + + + + + + + + + + + 0 + 100 + + Decimal + + fr.insee + j4nwc63q-RDOP-jbgdcftu + 1 + + + + + + + + + + + + + 0 + 100 + + Decimal + + fr.insee + j4nwc63q-RDOP-jbgdiyfe + 1 + + + + + + + + + + + + + 0 + 100 + + Decimal + + fr.insee + j4nwc63q-RDOP-jbgdj1wd + 1 + + + + + + + + + + + + + 0 + 100 + + Decimal + + fr.insee + j4nwc63q-RDOP-jbgddylk + 1 + + + + + + + + + + + + + 0 + 100 + + Decimal + + fr.insee + j4nwc63q-RDOP-jbgd3jj6 + 1 + + + + + + + + + + + + + 0 + 100 + + Decimal + + fr.insee + j4nwc63q-RDOP-jbgd4w3k + 1 + + + + + + + + + + + + + 0 + 100 + + Decimal + + fr.insee + j4nwc63q-RDOP-jbgd4w4k + 1 + + + + + + + + + + + + + fr.insee + j4nw0rr6 + 1 + + CLOWNING + + + fr.insee + j4nw0rr6-QOP-jbgd8tyr + 1 + + CLOWNING11 + + + + fr.insee + j4nw0rr6-QOP-jbgdep36 + 1 + + CLOWNING21 + + + + fr.insee + j4nw0rr6-QOP-jbgdjjgi + 1 + + CLOWNING31 + + + + fr.insee + j4nw0rr6-QOP-jbgdgh6k + 1 + + CLOWNING41 + + + + fr.insee + j4nw0rr6-QOP-jbgdit3o + 1 + + CLOWNING12 + + + + fr.insee + j4nw0rr6-QOP-jbgd366k + 1 + + CLOWNING22 + + + + fr.insee + j4nw0rr6-QOP-jbgdax06 + 1 + + CLOWNING32 + + + + fr.insee + j4nw0rr6-QOP-jbgdfo1j + 1 + + CLOWNING42 + + + + + fr.insee + j4nw0rr6-RDOP-jbgd8tyr + 1 + OutParameter + + + fr.insee + j4nw0rr6-QOP-jbgd8tyr + 1 + OutParameter + + + + + fr.insee + j4nw0rr6-RDOP-jbgdep36 + 1 + OutParameter + + + fr.insee + j4nw0rr6-QOP-jbgdep36 + 1 + OutParameter + + + + + fr.insee + j4nw0rr6-RDOP-jbgdjjgi + 1 + OutParameter + + + fr.insee + j4nw0rr6-QOP-jbgdjjgi + 1 + OutParameter + + + + + fr.insee + j4nw0rr6-RDOP-jbgdgh6k + 1 + OutParameter + + + fr.insee + j4nw0rr6-QOP-jbgdgh6k + 1 + OutParameter + + + + + fr.insee + j4nw0rr6-RDOP-jbgdit3o + 1 + OutParameter + + + fr.insee + j4nw0rr6-QOP-jbgdit3o + 1 + OutParameter + + + + + fr.insee + j4nw0rr6-RDOP-jbgd366k + 1 + OutParameter + + + fr.insee + j4nw0rr6-QOP-jbgd366k + 1 + OutParameter + + + + + fr.insee + j4nw0rr6-RDOP-jbgdax06 + 1 + OutParameter + + + fr.insee + j4nw0rr6-QOP-jbgdax06 + 1 + OutParameter + + + + + fr.insee + j4nw0rr6-RDOP-jbgdfo1j + 1 + OutParameter + + + fr.insee + j4nw0rr6-QOP-jbgdfo1j + 1 + OutParameter + + + + + Who did these clownings and tell us what you remember? + + + + + + fr.insee + j77dav9b + 1 + CodeList + + + + + + + fr.insee + j4nw0rr6-secondDimension-fakeCL-1 + 1 + CodeList + + + + + + + drop-down-list + + fr.insee + jbdyh6b5 + 1 + CodeList + + + fr.insee + j4nw0rr6-RDOP-jbgd8tyr + 1 + + + fr.insee + jbdyh6b5 + 1 + CodeList + + + + + + + + + + + + + + + drop-down-list + + fr.insee + jbdyh6b5 + 1 + CodeList + + + fr.insee + j4nw0rr6-RDOP-jbgdep36 + 1 + + + fr.insee + jbdyh6b5 + 1 + CodeList + + + + + + + + + + + + + + + drop-down-list + + fr.insee + jbdyh6b5 + 1 + CodeList + + + fr.insee + j4nw0rr6-RDOP-jbgdjjgi + 1 + + + fr.insee + jbdyh6b5 + 1 + CodeList + + + + + + + + + + + + + + + drop-down-list + + fr.insee + jbdyh6b5 + 1 + CodeList + + + fr.insee + j4nw0rr6-RDOP-jbgdgh6k + 1 + + + fr.insee + jbdyh6b5 + 1 + CodeList + + + + + + + + + + + + + + + + fr.insee + j4nw0rr6-RDOP-jbgdit3o + 1 + + + + + + + + + + + + + + fr.insee + j4nw0rr6-RDOP-jbgd366k + 1 + + + + + + + + + + + + + + fr.insee + j4nw0rr6-RDOP-jbgdax06 + 1 + + + + + + + + + + + + + + fr.insee + j4nw0rr6-RDOP-jbgdfo1j + 1 + + + + + + + + + + + + + + fr.insee + j6p2lwuj + 1 + + TRAVEL + + + fr.insee + j6p2lwuj-QOP-jbgd92mb + 1 + + TRAVEL11 + + + + fr.insee + j6p2lwuj-QOP-jbgdgsat + 1 + + TRAVEL21 + + + + fr.insee + j6p2lwuj-QOP-jbgdaxk2 + 1 + + TRAVEL31 + + + + fr.insee + j6p2lwuj-QOP-jbgd7myn + 1 + + TRAVEL41 + + + + fr.insee + j6p2lwuj-QOP-jbgdnxkt + 1 + + TRAVEL12 + + + + fr.insee + j6p2lwuj-QOP-jbgd3ef5 + 1 + + TRAVEL22 + + + + fr.insee + j6p2lwuj-QOP-jbgd8p1v + 1 + + TRAVEL32 + + + + fr.insee + j6p2lwuj-QOP-jbgdgm0c + 1 + + TRAVEL42 + + + + fr.insee + j6p2lwuj-QOP-jbgdcppc + 1 + + TRAVEL13 + + + + fr.insee + j6p2lwuj-QOP-jbgd4cm6 + 1 + + TRAVEL23 + + + + fr.insee + j6p2lwuj-QOP-jbgdd2lo + 1 + + TRAVEL33 + + + + fr.insee + j6p2lwuj-QOP-jbgdo0ay + 1 + + TRAVEL43 + + + + fr.insee + j6p2lwuj-QOP-jbgd4r2a + 1 + + TRAVEL14 + + + + fr.insee + j6p2lwuj-QOP-jbgdkfpq + 1 + + TRAVEL24 + + + + fr.insee + j6p2lwuj-QOP-jbgd7u52 + 1 + + TRAVEL34 + + + + fr.insee + j6p2lwuj-QOP-jbgdgfwl + 1 + + TRAVEL44 + + + + fr.insee + j6p2lwuj-QOP-jbgd9cff + 1 + + TRAVEL15 + + + + fr.insee + j6p2lwuj-QOP-jbgddwsp + 1 + + TRAVEL25 + + + + fr.insee + j6p2lwuj-QOP-jbgdncn8 + 1 + + TRAVEL35 + + + + fr.insee + j6p2lwuj-QOP-jbgdnz6b + 1 + + TRAVEL45 + + + + fr.insee + j6p2lwuj-QOP-jbgdiva0 + 1 + + TRAVEL16 + + + + fr.insee + j6p2lwuj-QOP-jbgd7dqf + 1 + + TRAVEL26 + + + + fr.insee + j6p2lwuj-QOP-jbgdnous + 1 + + TRAVEL36 + + + + fr.insee + j6p2lwuj-QOP-jbgdkfcz + 1 + + TRAVEL46 + + + + + fr.insee + j6p2lwuj-RDOP-jbgd92mb + 1 + OutParameter + + + fr.insee + j6p2lwuj-QOP-jbgd92mb + 1 + OutParameter + + + + + fr.insee + j6p2lwuj-RDOP-jbgdgsat + 1 + OutParameter + + + fr.insee + j6p2lwuj-QOP-jbgdgsat + 1 + OutParameter + + + + + fr.insee + j6p2lwuj-RDOP-jbgdaxk2 + 1 + OutParameter + + + fr.insee + j6p2lwuj-QOP-jbgdaxk2 + 1 + OutParameter + + + + + fr.insee + j6p2lwuj-RDOP-jbgd7myn + 1 + OutParameter + + + fr.insee + j6p2lwuj-QOP-jbgd7myn + 1 + OutParameter + + + + + fr.insee + j6p2lwuj-RDOP-jbgdnxkt + 1 + OutParameter + + + fr.insee + j6p2lwuj-QOP-jbgdnxkt + 1 + OutParameter + + + + + fr.insee + j6p2lwuj-RDOP-jbgd3ef5 + 1 + OutParameter + + + fr.insee + j6p2lwuj-QOP-jbgd3ef5 + 1 + OutParameter + + + + + fr.insee + j6p2lwuj-RDOP-jbgd8p1v + 1 + OutParameter + + + fr.insee + j6p2lwuj-QOP-jbgd8p1v + 1 + OutParameter + + + + + fr.insee + j6p2lwuj-RDOP-jbgdgm0c + 1 + OutParameter + + + fr.insee + j6p2lwuj-QOP-jbgdgm0c + 1 + OutParameter + + + + + fr.insee + j6p2lwuj-RDOP-jbgdcppc + 1 + OutParameter + + + fr.insee + j6p2lwuj-QOP-jbgdcppc + 1 + OutParameter + + + + + fr.insee + j6p2lwuj-RDOP-jbgd4cm6 + 1 + OutParameter + + + fr.insee + j6p2lwuj-QOP-jbgd4cm6 + 1 + OutParameter + + + + + fr.insee + j6p2lwuj-RDOP-jbgdd2lo + 1 + OutParameter + + + fr.insee + j6p2lwuj-QOP-jbgdd2lo + 1 + OutParameter + + + + + fr.insee + j6p2lwuj-RDOP-jbgdo0ay + 1 + OutParameter + + + fr.insee + j6p2lwuj-QOP-jbgdo0ay + 1 + OutParameter + + + + + fr.insee + j6p2lwuj-RDOP-jbgd4r2a + 1 + OutParameter + + + fr.insee + j6p2lwuj-QOP-jbgd4r2a + 1 + OutParameter + + + + + fr.insee + j6p2lwuj-RDOP-jbgdkfpq + 1 + OutParameter + + + fr.insee + j6p2lwuj-QOP-jbgdkfpq + 1 + OutParameter + + + + + fr.insee + j6p2lwuj-RDOP-jbgd7u52 + 1 + OutParameter + + + fr.insee + j6p2lwuj-QOP-jbgd7u52 + 1 + OutParameter + + + + + fr.insee + j6p2lwuj-RDOP-jbgdgfwl + 1 + OutParameter + + + fr.insee + j6p2lwuj-QOP-jbgdgfwl + 1 + OutParameter + + + + + fr.insee + j6p2lwuj-RDOP-jbgd9cff + 1 + OutParameter + + + fr.insee + j6p2lwuj-QOP-jbgd9cff + 1 + OutParameter + + + + + fr.insee + j6p2lwuj-RDOP-jbgddwsp + 1 + OutParameter + + + fr.insee + j6p2lwuj-QOP-jbgddwsp + 1 + OutParameter + + + + + fr.insee + j6p2lwuj-RDOP-jbgdncn8 + 1 + OutParameter + + + fr.insee + j6p2lwuj-QOP-jbgdncn8 + 1 + OutParameter + + + + + fr.insee + j6p2lwuj-RDOP-jbgdnz6b + 1 + OutParameter + + + fr.insee + j6p2lwuj-QOP-jbgdnz6b + 1 + OutParameter + + + + + fr.insee + j6p2lwuj-RDOP-jbgdiva0 + 1 + OutParameter + + + fr.insee + j6p2lwuj-QOP-jbgdiva0 + 1 + OutParameter + + + + + fr.insee + j6p2lwuj-RDOP-jbgd7dqf + 1 + OutParameter + + + fr.insee + j6p2lwuj-QOP-jbgd7dqf + 1 + OutParameter + + + + + fr.insee + j6p2lwuj-RDOP-jbgdnous + 1 + OutParameter + + + fr.insee + j6p2lwuj-QOP-jbgdnous + 1 + OutParameter + + + + + fr.insee + j6p2lwuj-RDOP-jbgdkfcz + 1 + OutParameter + + + fr.insee + j6p2lwuj-QOP-jbgdkfcz + 1 + OutParameter + + + + + Which of the following means of transport were used by the hero and in which + country? + + + + + + fr.insee + j6p2kivg + 1 + CodeList + + + + + + + fr.insee + jbdye1wa + 1 + CodeList + + + + + + + + fr.insee + j6p2lwuj-RDOP-jbgd92mb + 1 + + + + + fr.insee + INSEE-COMMUN-CL-Booleen-1 + 1 + Code + + + + + + + + + + + + + + + + + + + fr.insee + j6p2lwuj-RDOP-jbgdgsat + 1 + + + + + fr.insee + INSEE-COMMUN-CL-Booleen-1 + 1 + Code + + + + + + + + + + + + + + + + + + + fr.insee + j6p2lwuj-RDOP-jbgdaxk2 + 1 + + + + + fr.insee + INSEE-COMMUN-CL-Booleen-1 + 1 + Code + + + + + + + + + + + + + + + + + + + fr.insee + j6p2lwuj-RDOP-jbgd7myn + 1 + + + + + fr.insee + INSEE-COMMUN-CL-Booleen-1 + 1 + Code + + + + + + + + + + + + + + + + + + + fr.insee + j6p2lwuj-RDOP-jbgdnxkt + 1 + + + + + fr.insee + INSEE-COMMUN-CL-Booleen-1 + 1 + Code + + + + + + + + + + + + + + + + + + + fr.insee + j6p2lwuj-RDOP-jbgd3ef5 + 1 + + + + + fr.insee + INSEE-COMMUN-CL-Booleen-1 + 1 + Code + + + + + + + + + + + + + + + + + + + fr.insee + j6p2lwuj-RDOP-jbgd8p1v + 1 + + + + + fr.insee + INSEE-COMMUN-CL-Booleen-1 + 1 + Code + + + + + + + + + + + + + + + + + + + fr.insee + j6p2lwuj-RDOP-jbgdgm0c + 1 + + + + + fr.insee + INSEE-COMMUN-CL-Booleen-1 + 1 + Code + + + + + + + + + + + + + + + + + + + fr.insee + j6p2lwuj-RDOP-jbgdcppc + 1 + + + + + fr.insee + INSEE-COMMUN-CL-Booleen-1 + 1 + Code + + + + + + + + + + + + + + + + + + + fr.insee + j6p2lwuj-RDOP-jbgd4cm6 + 1 + + + + + fr.insee + INSEE-COMMUN-CL-Booleen-1 + 1 + Code + + + + + + + + + + + + + + + + + + + fr.insee + j6p2lwuj-RDOP-jbgdd2lo + 1 + + + + + fr.insee + INSEE-COMMUN-CL-Booleen-1 + 1 + Code + + + + + + + + + + + + + + + + + + + fr.insee + j6p2lwuj-RDOP-jbgdo0ay + 1 + + + + + fr.insee + INSEE-COMMUN-CL-Booleen-1 + 1 + Code + + + + + + + + + + + + + + + + + + + fr.insee + j6p2lwuj-RDOP-jbgd4r2a + 1 + + + + + fr.insee + INSEE-COMMUN-CL-Booleen-1 + 1 + Code + + + + + + + + + + + + + + + + + + + fr.insee + j6p2lwuj-RDOP-jbgdkfpq + 1 + + + + + fr.insee + INSEE-COMMUN-CL-Booleen-1 + 1 + Code + + + + + + + + + + + + + + + + + + + fr.insee + j6p2lwuj-RDOP-jbgd7u52 + 1 + + + + + fr.insee + INSEE-COMMUN-CL-Booleen-1 + 1 + Code + + + + + + + + + + + + + + + + + + + fr.insee + j6p2lwuj-RDOP-jbgdgfwl + 1 + + + + + fr.insee + INSEE-COMMUN-CL-Booleen-1 + 1 + Code + + + + + + + + + + + + + + + + + + + fr.insee + j6p2lwuj-RDOP-jbgd9cff + 1 + + + + + fr.insee + INSEE-COMMUN-CL-Booleen-1 + 1 + Code + + + + + + + + + + + + + + + + + + + fr.insee + j6p2lwuj-RDOP-jbgddwsp + 1 + + + + + fr.insee + INSEE-COMMUN-CL-Booleen-1 + 1 + Code + + + + + + + + + + + + + + + + + + + fr.insee + j6p2lwuj-RDOP-jbgdncn8 + 1 + + + + + fr.insee + INSEE-COMMUN-CL-Booleen-1 + 1 + Code + + + + + + + + + + + + + + + + + + + fr.insee + j6p2lwuj-RDOP-jbgdnz6b + 1 + + + + + fr.insee + INSEE-COMMUN-CL-Booleen-1 + 1 + Code + + + + + + + + + + + + + + + + + + + fr.insee + j6p2lwuj-RDOP-jbgdiva0 + 1 + + + + + fr.insee + INSEE-COMMUN-CL-Booleen-1 + 1 + Code + + + + + + + + + + + + + + + + + + + fr.insee + j6p2lwuj-RDOP-jbgd7dqf + 1 + + + + + fr.insee + INSEE-COMMUN-CL-Booleen-1 + 1 + Code + + + + + + + + + + + + + + + + + + + fr.insee + j6p2lwuj-RDOP-jbgdnous + 1 + + + + + fr.insee + INSEE-COMMUN-CL-Booleen-1 + 1 + Code + + + + + + + + + + + + + + + + + + + fr.insee + j6p2lwuj-RDOP-jbgdkfcz + 1 + + + + + fr.insee + INSEE-COMMUN-CL-Booleen-1 + 1 + Code + + + + + + + + + + + + + + + + + + fr.insee + d10 + 1 + Instruction + + + + fr.insee + j6qg8rc6 + 1 + + FAVOURITE_CHARACTERS + + + fr.insee + j6qg8rc6-QOP-jbgdl5jb + 1 + + FAVOURITE_CHARACTERS11 + + + + fr.insee + j6qg8rc6-QOP-jbgd8lwo + 1 + + FAVOURITE_CHARACTERS21 + + + + fr.insee + j6qg8rc6-QOP-jbgdbfag + 1 + + FAVOURITE_CHARACTERS31 + + + + fr.insee + j6qg8rc6-QOP-jbgdlgja + 1 + + FAVOURITE_CHARACTERS41 + + + + fr.insee + j6qg8rc6-QOP-jbgd745y + 1 + + FAVOURITE_CHARACTERS51 + + + + fr.insee + j6qg8rc6-QOP-jbgdjkts + 1 + + FAVOURITE_CHARACTERS61 + + + + fr.insee + j6qg8rc6-QOP-jbgdcax7 + 1 + + FAVOURITE_CHARACTERS71 + + + + fr.insee + j6qg8rc6-QOP-jbgdjye1 + 1 + + FAVOURITE_CHARACTERS81 + + + + fr.insee + j6qg8rc6-QOP-jbgd5jet + 1 + + FAVOURITE_CHARACTERS91 + + + + fr.insee + j6qg8rc6-QOP-jbgdjw90 + 1 + + FAVOURITE_CHARACTERS101 + + + + fr.insee + j6qg8rc6-QOP-jbgdfndq + 1 + + FAVOURITE_CHARACTERS12 + + + + fr.insee + j6qg8rc6-QOP-jbgd7osi + 1 + + FAVOURITE_CHARACTERS22 + + + + fr.insee + j6qg8rc6-QOP-jbgd7bnw + 1 + + FAVOURITE_CHARACTERS32 + + + + fr.insee + j6qg8rc6-QOP-jbgd9k71 + 1 + + FAVOURITE_CHARACTERS42 + + + + fr.insee + j6qg8rc6-QOP-jbgdimks + 1 + + FAVOURITE_CHARACTERS52 + + + + fr.insee + j6qg8rc6-QOP-jbgdjquz + 1 + + FAVOURITE_CHARACTERS62 + + + + fr.insee + j6qg8rc6-QOP-jbgdd2w3 + 1 + + FAVOURITE_CHARACTERS72 + + + + fr.insee + j6qg8rc6-QOP-jbgdkosc + 1 + + FAVOURITE_CHARACTERS82 + + + + fr.insee + j6qg8rc6-QOP-jbgdk0x4 + 1 + + FAVOURITE_CHARACTERS92 + + + + fr.insee + j6qg8rc6-QOP-jbgd2wgf + 1 + + FAVOURITE_CHARACTERS102 + + + + + fr.insee + j6qg8rc6-RDOP-jbgdl5jb + 1 + OutParameter + + + fr.insee + j6qg8rc6-QOP-jbgdl5jb + 1 + OutParameter + + + + + fr.insee + j6qg8rc6-RDOP-jbgd8lwo + 1 + OutParameter + + + fr.insee + j6qg8rc6-QOP-jbgd8lwo + 1 + OutParameter + + + + + fr.insee + j6qg8rc6-RDOP-jbgdbfag + 1 + OutParameter + + + fr.insee + j6qg8rc6-QOP-jbgdbfag + 1 + OutParameter + + + + + fr.insee + j6qg8rc6-RDOP-jbgdlgja + 1 + OutParameter + + + fr.insee + j6qg8rc6-QOP-jbgdlgja + 1 + OutParameter + + + + + fr.insee + j6qg8rc6-RDOP-jbgd745y + 1 + OutParameter + + + fr.insee + j6qg8rc6-QOP-jbgd745y + 1 + OutParameter + + + + + fr.insee + j6qg8rc6-RDOP-jbgdjkts + 1 + OutParameter + + + fr.insee + j6qg8rc6-QOP-jbgdjkts + 1 + OutParameter + + + + + fr.insee + j6qg8rc6-RDOP-jbgdcax7 + 1 + OutParameter + + + fr.insee + j6qg8rc6-QOP-jbgdcax7 + 1 + OutParameter + + + + + fr.insee + j6qg8rc6-RDOP-jbgdjye1 + 1 + OutParameter + + + fr.insee + j6qg8rc6-QOP-jbgdjye1 + 1 + OutParameter + + + + + fr.insee + j6qg8rc6-RDOP-jbgd5jet + 1 + OutParameter + + + fr.insee + j6qg8rc6-QOP-jbgd5jet + 1 + OutParameter + + + + + fr.insee + j6qg8rc6-RDOP-jbgdjw90 + 1 + OutParameter + + + fr.insee + j6qg8rc6-QOP-jbgdjw90 + 1 + OutParameter + + + + + fr.insee + j6qg8rc6-RDOP-jbgdfndq + 1 + OutParameter + + + fr.insee + j6qg8rc6-QOP-jbgdfndq + 1 + OutParameter + + + + + fr.insee + j6qg8rc6-RDOP-jbgd7osi + 1 + OutParameter + + + fr.insee + j6qg8rc6-QOP-jbgd7osi + 1 + OutParameter + + + + + fr.insee + j6qg8rc6-RDOP-jbgd7bnw + 1 + OutParameter + + + fr.insee + j6qg8rc6-QOP-jbgd7bnw + 1 + OutParameter + + + + + fr.insee + j6qg8rc6-RDOP-jbgd9k71 + 1 + OutParameter + + + fr.insee + j6qg8rc6-QOP-jbgd9k71 + 1 + OutParameter + + + + + fr.insee + j6qg8rc6-RDOP-jbgdimks + 1 + OutParameter + + + fr.insee + j6qg8rc6-QOP-jbgdimks + 1 + OutParameter + + + + + fr.insee + j6qg8rc6-RDOP-jbgdjquz + 1 + OutParameter + + + fr.insee + j6qg8rc6-QOP-jbgdjquz + 1 + OutParameter + + + + + fr.insee + j6qg8rc6-RDOP-jbgdd2w3 + 1 + OutParameter + + + fr.insee + j6qg8rc6-QOP-jbgdd2w3 + 1 + OutParameter + + + + + fr.insee + j6qg8rc6-RDOP-jbgdkosc + 1 + OutParameter + + + fr.insee + j6qg8rc6-QOP-jbgdkosc + 1 + OutParameter + + + + + fr.insee + j6qg8rc6-RDOP-jbgdk0x4 + 1 + OutParameter + + + fr.insee + j6qg8rc6-QOP-jbgdk0x4 + 1 + OutParameter + + + + + fr.insee + j6qg8rc6-RDOP-jbgd2wgf + 1 + OutParameter + + + fr.insee + j6qg8rc6-QOP-jbgd2wgf + 1 + OutParameter + + + + + Please, complete the following grid with your favourite characters + + + + + + + + + fr.insee + j6qg8rc6-secondDimension-fakeCL-1 + 1 + CodeList + + + + + + + + fr.insee + j6qg8rc6-RDOP-jbgdl5jb + 1 + + + + + + + + + + + + + + fr.insee + j6qg8rc6-RDOP-jbgd8lwo + 1 + + + + + + + + + + + + + + fr.insee + j6qg8rc6-RDOP-jbgdbfag + 1 + + + + + + + + + + + + + + fr.insee + j6qg8rc6-RDOP-jbgdlgja + 1 + + + + + + + + + + + + + + fr.insee + j6qg8rc6-RDOP-jbgd745y + 1 + + + + + + + + + + + + + + fr.insee + j6qg8rc6-RDOP-jbgdjkts + 1 + + + + + + + + + + + + + + fr.insee + j6qg8rc6-RDOP-jbgdcax7 + 1 + + + + + + + + + + + + + + fr.insee + j6qg8rc6-RDOP-jbgdjye1 + 1 + + + + + + + + + + + + + + fr.insee + j6qg8rc6-RDOP-jbgd5jet + 1 + + + + + + + + + + + + + + fr.insee + j6qg8rc6-RDOP-jbgdjw90 + 1 + + + + + + + + + + + + + + 0 + 120 + + Decimal + + fr.insee + j6qg8rc6-RDOP-jbgdfndq + 1 + + + + + + + + + + + + + 0 + 120 + + Decimal + + fr.insee + j6qg8rc6-RDOP-jbgd7osi + 1 + + + + + + + + + + + + + 0 + 120 + + Decimal + + fr.insee + j6qg8rc6-RDOP-jbgd7bnw + 1 + + + + + + + + + + + + + 0 + 120 + + Decimal + + fr.insee + j6qg8rc6-RDOP-jbgd9k71 + 1 + + + + + + + + + + + + + 0 + 120 + + Decimal + + fr.insee + j6qg8rc6-RDOP-jbgdimks + 1 + + + + + + + + + + + + + 0 + 120 + + Decimal + + fr.insee + j6qg8rc6-RDOP-jbgdjquz + 1 + + + + + + + + + + + + + 0 + 120 + + Decimal + + fr.insee + j6qg8rc6-RDOP-jbgdd2w3 + 1 + + + + + + + + + + + + + 0 + 120 + + Decimal + + fr.insee + j6qg8rc6-RDOP-jbgdkosc + 1 + + + + + + + + + + + + + 0 + 120 + + Decimal + + fr.insee + j6qg8rc6-RDOP-jbgdk0x4 + 1 + + + + + + + + + + + + + 0 + 120 + + Decimal + + fr.insee + j6qg8rc6-RDOP-jbgd2wgf + 1 + + + + + + + + + + + + + + fr.insee + CategoryScheme-j334iumu + 1 + + TOWN + + + fr.insee + CA-j334iumu-1 + 1 + + Springfield + + + + fr.insee + CA-j334iumu-2 + 1 + + Shelbyville + + + + fr.insee + CA-j334iumu-3 + 1 + + Seinfeld + + + + + fr.insee + CategoryScheme-j6qdqoen + 1 + + MAYOR + + + fr.insee + CA-j6qdqoen-1 + 1 + + Constance Harm + + + + fr.insee + CA-j6qdqoen-2 + 1 + + Timothy Lovejoy + + + + fr.insee + CA-j6qdqoen-3 + 1 + + Joe Quimby + + + + fr.insee + CA-j6qdqoen-4 + 1 + + Poochie + + + + + fr.insee + CategoryScheme-j4nwo00f + 1 + + State + + + fr.insee + CA-j4nwo00f-1 + 1 + + Washington + + + + fr.insee + CA-j4nwo00f-2 + 1 + + Kentucky + + + + fr.insee + CA-j4nwo00f-3 + 1 + + Ohio + + + + fr.insee + CA-j4nwo00f-4 + 1 + + Maine + + + + fr.insee + CA-j4nwo00f-5 + 1 + + North Dakota + + + + fr.insee + CA-j4nwo00f-6 + 1 + + Florida + + + + fr.insee + CA-j4nwo00f-7 + 1 + + North Takoma + + + + fr.insee + CA-j4nwo00f-8 + 1 + + California + + + + fr.insee + CA-j4nwo00f-9 + 1 + + Texas + + + + fr.insee + CA-j4nwo00f-10 + 1 + + Massachusetts + + + + fr.insee + CA-j4nwo00f-11 + 1 + + Nevada + + + + fr.insee + CA-j4nwo00f-12 + 1 + + Illinois + + + + fr.insee + CA-j4nwo00f-13 + 1 + + Not in any state, you fool! + + + + + fr.insee + CategoryScheme-j335cu3c + 1 + + ANIMALS + + + fr.insee + CA-j335cu3c-1 + 1 + + Santa's Little Helper + + + + fr.insee + CA-j335cu3c-2 + 1 + + Snowball I + + + + fr.insee + CA-j335cu3c-3 + 1 + + Coltrane + + + + fr.insee + CA-j335cu3c-4 + 1 + + Mojo the Helper Monkey + + + + + fr.insee + CategoryScheme-j6p2mvca + 1 + + Flavours + + + fr.insee + CA-j6p2mvca-1 + 1 + + Vanilla + + + + fr.insee + CA-j6p2mvca-2 + 1 + + Strawberry + + + + fr.insee + CA-j6p2mvca-3 + 1 + + Apple + + + + fr.insee + CA-j6p2mvca-4 + 1 + + Bacon + + + + + fr.insee + CategoryScheme-jbdxh138 + 1 + + YESNO + + + fr.insee + CA-jbdxh138-1 + 1 + + Yes + + + + fr.insee + CA-jbdxh138-2 + 1 + + No + + + + + fr.insee + CategoryScheme-j6qeytgc + 1 + + NUCLEAR_CHARACTERS + + + fr.insee + CA-j6qeytgc-1 + 1 + + Charles Montgomery Burns + + + + fr.insee + CA-j6qeytgc-2 + 1 + + Carl Carlson + + + + fr.insee + CA-j6qeytgc-3 + 1 + + Otto Mann + + + + fr.insee + CA-j6qeytgc-4 + 1 + + Carl Carlson + + + + + fr.insee + CategoryScheme-j6z087mq + 1 + + BIRTH_CHARACTER + + + fr.insee + CA-j6z087mq-1 + 1 + + Selma Bouvier + + + + fr.insee + CA-j6z087mq-2 + 1 + + Kent Brockman + + + + fr.insee + CA-j6z087mq-3 + 1 + + Milhouse Van Houten + + + + fr.insee + CA-j6z087mq-4 + 1 + + Nelson Muntz + + + + fr.insee + CA-j6z087mq-5 + 1 + + Crazy Cat Lady + + + + + fr.insee + CategoryScheme-jbdxricm + 1 + + CITY_BIRTH + + + fr.insee + CA-jbdxricm-1 + 1 + + Albuquerque + + + + fr.insee + CA-jbdxricm-2 + 1 + + Springfield + + + + fr.insee + CA-jbdxricm-3 + 1 + + Portland + + + + fr.insee + CA-jbdxricm-4 + 1 + + Shelbyville + + + + fr.insee + CA-jbdxricm-5 + 1 + + Dagstuhl + + + + + fr.insee + CategoryScheme-j4nwh16i + 1 + + Products + + + fr.insee + CA-j4nwh16i-1 + 1 + + Frozen products + + + + fr.insee + CA-j4nwh16i-2 + 1 + + Ice creams + + + + fr.insee + CA-j4nwh16i-3 + 1 + + Jasper Beardly + + + + fr.insee + CA-j4nwh16i-4 + 1 + + Meat + + + + fr.insee + CA-j4nwh16i-5 + 1 + + Bacon + + + + fr.insee + CA-j4nwh16i-6 + 1 + + Pork chop + + + + fr.insee + CA-j4nwh16i-7 + 1 + + Chicken + + + + fr.insee + CA-j4nwh16i-8 + 1 + + Compote + + + + fr.insee + CA-j4nwh16i-9 + 1 + + Powersauce + + + + fr.insee + CA-j4nwh16i-10 + 1 + + Other + + + + + fr.insee + CategoryScheme-j77dav9b + 1 + + Clownings + + + fr.insee + CA-j77dav9b-1 + 1 + + Break the windows of the whole city + + + + fr.insee + CA-j77dav9b-2 + 1 + + Loose the violin of his daughter playing poker + + + + fr.insee + CA-j77dav9b-3 + 1 + + Kill Mr Burns + + + + fr.insee + CA-j77dav9b-4 + 1 + + Leaving a mechanical object to control the nuclear power plant + + + + + fr.insee + CategoryScheme-jbdyh6b5 + 1 + + Clowning_Characters + + + fr.insee + CA-jbdyh6b5-1 + 1 + + Jay + + + + fr.insee + CA-jbdyh6b5-2 + 1 + + Bart + + + + fr.insee + CA-jbdyh6b5-3 + 1 + + Krusty the clown + + + + fr.insee + CA-jbdyh6b5-4 + 1 + + Maggie + + + + + fr.insee + CategoryScheme-j6p2kivg + 1 + + Means of transport + + + fr.insee + CA-j6p2kivg-1 + 1 + + Car + + + + fr.insee + CA-j6p2kivg-2 + 1 + + Bike + + + + fr.insee + CA-j6p2kivg-3 + 1 + + Skateboard + + + + fr.insee + CA-j6p2kivg-4 + 1 + + Plane + + + + + fr.insee + CategoryScheme-jbdye1wa + 1 + + Country + + + fr.insee + CA-jbdye1wa-1 + 1 + + Brazil + + + + fr.insee + CA-jbdye1wa-2 + 1 + + Canada + + + + fr.insee + CA-jbdye1wa-3 + 1 + + Japan + + + + fr.insee + CA-jbdye1wa-4 + 1 + + France + + + + fr.insee + CA-jbdye1wa-5 + 1 + + Other country + + + + fr.insee + CA-jbdye1wa-6 + 1 + + Other planet + + + + + fr.insee + CategoryScheme-j4nwc63q-secondDimension-fakeCL-1 + 1 + + FAKE-CODELIST-j4nwc63q-secondDimension-fakeCL-1 + + + fr.insee + CA-j4nwc63q-secondDimension-fakeCL-1-1 + 1 + + Percentage + + + + + fr.insee + CategoryScheme-j4nw0rr6-secondDimension-fakeCL-1 + 1 + + FAKE-CODELIST-j4nw0rr6-secondDimension-fakeCL-1 + + + fr.insee + CA-j4nw0rr6-secondDimension-fakeCL-1-1 + 1 + + Clowning + + + + fr.insee + CA-j4nw0rr6-secondDimension-fakeCL-1-2 + 1 + + Remember? + + + + + fr.insee + CategoryScheme-j6qg8rc6-secondDimension-fakeCL-1 + 1 + + FAKE-CODELIST-j6qg8rc6-secondDimension-fakeCL-1 + + + fr.insee + CA-j6qg8rc6-secondDimension-fakeCL-1-1 + 1 + + Name + + + + fr.insee + CA-j6qg8rc6-secondDimension-fakeCL-1-2 + 1 + + Age + + + + + fr.insee + CategoryScheme-i6vwi0 + 1 + + A définir + + + fr.insee + INSEE-COMMUN-CA-Booleen-1 + 1 + + + + + + + fr.insee + SIMPSONS-CLS + 1 + + SIMPSONS + + + fr.insee + j334iumu + 1 + + TOWN + + Regular + + Ordinal + + + fr.insee + j334iumu-1 + 1 + + fr.insee + CA-j334iumu-1 + 1 + Category + + 00001 + + + fr.insee + j334iumu-2 + 1 + + fr.insee + CA-j334iumu-2 + 1 + Category + + 00002 + + + fr.insee + j334iumu-3 + 1 + + fr.insee + CA-j334iumu-3 + 1 + Category + + 00003 + + + + fr.insee + j6qdqoen + 1 + + MAYOR + + Regular + + Ordinal + + + fr.insee + j6qdqoen-1 + 1 + + fr.insee + CA-j6qdqoen-1 + 1 + Category + + 1 + + + fr.insee + j6qdqoen-2 + 1 + + fr.insee + CA-j6qdqoen-2 + 1 + Category + + 2 + + + fr.insee + j6qdqoen-3 + 1 + + fr.insee + CA-j6qdqoen-3 + 1 + Category + + 3 + + + fr.insee + j6qdqoen-4 + 1 + + fr.insee + CA-j6qdqoen-4 + 1 + Category + + 4 + + + + fr.insee + j4nwo00f + 1 + + State + + Regular + + Ordinal + + + fr.insee + j4nwo00f-1 + 1 + + fr.insee + CA-j4nwo00f-1 + 1 + Category + + 1 + + + fr.insee + j4nwo00f-2 + 1 + + fr.insee + CA-j4nwo00f-2 + 1 + Category + + 2 + + + fr.insee + j4nwo00f-3 + 1 + + fr.insee + CA-j4nwo00f-3 + 1 + Category + + 3 + + + fr.insee + j4nwo00f-4 + 1 + + fr.insee + CA-j4nwo00f-4 + 1 + Category + + 4 + + + fr.insee + j4nwo00f-5 + 1 + + fr.insee + CA-j4nwo00f-5 + 1 + Category + + 5 + + + fr.insee + j4nwo00f-6 + 1 + + fr.insee + CA-j4nwo00f-6 + 1 + Category + + 6 + + + fr.insee + j4nwo00f-7 + 1 + + fr.insee + CA-j4nwo00f-7 + 1 + Category + + 7 + + + fr.insee + j4nwo00f-8 + 1 + + fr.insee + CA-j4nwo00f-8 + 1 + Category + + 8 + + + fr.insee + j4nwo00f-9 + 1 + + fr.insee + CA-j4nwo00f-9 + 1 + Category + + 9 + + + fr.insee + j4nwo00f-10 + 1 + + fr.insee + CA-j4nwo00f-10 + 1 + Category + + 10 + + + fr.insee + j4nwo00f-11 + 1 + + fr.insee + CA-j4nwo00f-11 + 1 + Category + + 11 + + + fr.insee + j4nwo00f-12 + 1 + + fr.insee + CA-j4nwo00f-12 + 1 + Category + + 12 + + + fr.insee + j4nwo00f-13 + 1 + + fr.insee + CA-j4nwo00f-13 + 1 + Category + + 13 + + + + fr.insee + j335cu3c + 1 + + ANIMALS + + Regular + + Ordinal + + + fr.insee + j335cu3c-1 + 1 + + fr.insee + CA-j335cu3c-1 + 1 + Category + + 1 + + + fr.insee + j335cu3c-2 + 1 + + fr.insee + CA-j335cu3c-2 + 1 + Category + + 2 + + + fr.insee + j335cu3c-3 + 1 + + fr.insee + CA-j335cu3c-3 + 1 + Category + + 3 + + + fr.insee + j335cu3c-4 + 1 + + fr.insee + CA-j335cu3c-4 + 1 + Category + + 4 + + + + fr.insee + j6p2mvca + 1 + + Flavours + + Regular + + Ordinal + + + fr.insee + j6p2mvca-1 + 1 + + fr.insee + CA-j6p2mvca-1 + 1 + Category + + 1 + + + fr.insee + j6p2mvca-2 + 1 + + fr.insee + CA-j6p2mvca-2 + 1 + Category + + 2 + + + fr.insee + j6p2mvca-3 + 1 + + fr.insee + CA-j6p2mvca-3 + 1 + Category + + 3 + + + fr.insee + j6p2mvca-4 + 1 + + fr.insee + CA-j6p2mvca-4 + 1 + Category + + 4 + + + + fr.insee + jbdxh138 + 1 + + YESNO + + Regular + + Ordinal + + + fr.insee + jbdxh138-1 + 1 + + fr.insee + CA-jbdxh138-1 + 1 + Category + + 1 + + + fr.insee + jbdxh138-2 + 1 + + fr.insee + CA-jbdxh138-2 + 1 + Category + + 0 + + + + fr.insee + j6qeytgc + 1 + + NUCLEAR_CHARACTERS + + Regular + + Ordinal + + + fr.insee + j6qeytgc-1 + 1 + + fr.insee + CA-j6qeytgc-1 + 1 + Category + + 1 + + + fr.insee + j6qeytgc-2 + 1 + + fr.insee + CA-j6qeytgc-2 + 1 + Category + + 2 + + + fr.insee + j6qeytgc-3 + 1 + + fr.insee + CA-j6qeytgc-3 + 1 + Category + + 3 + + + fr.insee + j6qeytgc-4 + 1 + + fr.insee + CA-j6qeytgc-4 + 1 + Category + + 4 + + + + fr.insee + j6z087mq + 1 + + BIRTH_CHARACTER + + Regular + + Ordinal + + + fr.insee + j6z087mq-1 + 1 + + fr.insee + CA-j6z087mq-1 + 1 + Category + + 1 + + + fr.insee + j6z087mq-2 + 1 + + fr.insee + CA-j6z087mq-2 + 1 + Category + + 2 + + + fr.insee + j6z087mq-3 + 1 + + fr.insee + CA-j6z087mq-3 + 1 + Category + + 3 + + + fr.insee + j6z087mq-4 + 1 + + fr.insee + CA-j6z087mq-4 + 1 + Category + + 4 + + + fr.insee + j6z087mq-5 + 1 + + fr.insee + CA-j6z087mq-5 + 1 + Category + + 5 + + + + fr.insee + jbdxricm + 1 + + CITY_BIRTH + + Regular + + Ordinal + + + fr.insee + jbdxricm-1 + 1 + + fr.insee + CA-jbdxricm-1 + 1 + Category + + 1 + + + fr.insee + jbdxricm-2 + 1 + + fr.insee + CA-jbdxricm-2 + 1 + Category + + 2 + + + fr.insee + jbdxricm-3 + 1 + + fr.insee + CA-jbdxricm-3 + 1 + Category + + 3 + + + fr.insee + jbdxricm-4 + 1 + + fr.insee + CA-jbdxricm-4 + 1 + Category + + 4 + + + fr.insee + jbdxricm-5 + 1 + + fr.insee + CA-jbdxricm-5 + 1 + Category + + 5 + + + + fr.insee + j4nwh16i + 1 + + Products + + Regular + + Ordinal + + + fr.insee + j4nwh16i-1 + 1 + + fr.insee + CA-j4nwh16i-1 + 1 + Category + + A + + fr.insee + j4nwh16i-2 + 1 + + fr.insee + CA-j4nwh16i-2 + 1 + Category + + A1 + + + fr.insee + j4nwh16i-3 + 1 + + fr.insee + CA-j4nwh16i-3 + 1 + Category + + A2 + + + + fr.insee + j4nwh16i-4 + 1 + + fr.insee + CA-j4nwh16i-4 + 1 + Category + + B + + fr.insee + j4nwh16i-5 + 1 + + fr.insee + CA-j4nwh16i-5 + 1 + Category + + B1 + + + fr.insee + j4nwh16i-6 + 1 + + fr.insee + CA-j4nwh16i-6 + 1 + Category + + B2 + + + fr.insee + j4nwh16i-7 + 1 + + fr.insee + CA-j4nwh16i-7 + 1 + Category + + B3 + + + + fr.insee + j4nwh16i-8 + 1 + + fr.insee + CA-j4nwh16i-8 + 1 + Category + + C + + fr.insee + j4nwh16i-9 + 1 + + fr.insee + CA-j4nwh16i-9 + 1 + Category + + C1 + + + + fr.insee + j4nwh16i-10 + 1 + + fr.insee + CA-j4nwh16i-10 + 1 + Category + + D + + + + fr.insee + j77dav9b + 1 + + Clownings + + Regular + + Ordinal + + + fr.insee + j77dav9b-1 + 1 + + fr.insee + CA-j77dav9b-1 + 1 + Category + + 1 + + + fr.insee + j77dav9b-2 + 1 + + fr.insee + CA-j77dav9b-2 + 1 + Category + + 2 + + + fr.insee + j77dav9b-3 + 1 + + fr.insee + CA-j77dav9b-3 + 1 + Category + + 3 + + + fr.insee + j77dav9b-4 + 1 + + fr.insee + CA-j77dav9b-4 + 1 + Category + + 4 + + + + fr.insee + jbdyh6b5 + 1 + + Clowning_Characters + + Regular + + Ordinal + + + fr.insee + jbdyh6b5-1 + 1 + + fr.insee + CA-jbdyh6b5-1 + 1 + Category + + 1 + + + fr.insee + jbdyh6b5-2 + 1 + + fr.insee + CA-jbdyh6b5-2 + 1 + Category + + 2 + + + fr.insee + jbdyh6b5-3 + 1 + + fr.insee + CA-jbdyh6b5-3 + 1 + Category + + 3 + + + fr.insee + jbdyh6b5-4 + 1 + + fr.insee + CA-jbdyh6b5-4 + 1 + Category + + 4 + + + + fr.insee + j6p2kivg + 1 + + Means of transport + + Regular + + Ordinal + + + fr.insee + j6p2kivg-1 + 1 + + fr.insee + CA-j6p2kivg-1 + 1 + Category + + 1 + + + fr.insee + j6p2kivg-2 + 1 + + fr.insee + CA-j6p2kivg-2 + 1 + Category + + 2 + + + fr.insee + j6p2kivg-3 + 1 + + fr.insee + CA-j6p2kivg-3 + 1 + Category + + 3 + + + fr.insee + j6p2kivg-4 + 1 + + fr.insee + CA-j6p2kivg-4 + 1 + Category + + 4 + + + + fr.insee + jbdye1wa + 1 + + Country + + Regular + + Ordinal + + + fr.insee + jbdye1wa-1 + 1 + + fr.insee + CA-jbdye1wa-1 + 1 + Category + + 1 + + + fr.insee + jbdye1wa-2 + 1 + + fr.insee + CA-jbdye1wa-2 + 1 + Category + + 2 + + + fr.insee + jbdye1wa-3 + 1 + + fr.insee + CA-jbdye1wa-3 + 1 + Category + + 3 + + + fr.insee + jbdye1wa-4 + 1 + + fr.insee + CA-jbdye1wa-4 + 1 + Category + + 4 + + + fr.insee + jbdye1wa-5 + 1 + + fr.insee + CA-jbdye1wa-5 + 1 + Category + + 5 + + + fr.insee + jbdye1wa-6 + 1 + + fr.insee + CA-jbdye1wa-6 + 1 + Category + + 6 + + + + fr.insee + j4nwc63q-secondDimension-fakeCL-1 + 1 + + FAKE-CODELIST-j4nwc63q-secondDimension-fakeCL-1 + + Regular + + Ordinal + + + fr.insee + j4nwc63q-secondDimension-fakeCL-1-1 + 1 + + fr.insee + CA-j4nwc63q-secondDimension-fakeCL-1-1 + 1 + Category + + 1 + + + + fr.insee + j4nw0rr6-secondDimension-fakeCL-1 + 1 + + FAKE-CODELIST-j4nw0rr6-secondDimension-fakeCL-1 + + Regular + + Ordinal + + + fr.insee + j4nw0rr6-secondDimension-fakeCL-1-1 + 1 + + fr.insee + CA-j4nw0rr6-secondDimension-fakeCL-1-1 + 1 + Category + + 1 + + + fr.insee + j4nw0rr6-secondDimension-fakeCL-1-2 + 1 + + fr.insee + CA-j4nw0rr6-secondDimension-fakeCL-1-2 + 1 + Category + + 2 + + + + fr.insee + j6qg8rc6-secondDimension-fakeCL-1 + 1 + + FAKE-CODELIST-j6qg8rc6-secondDimension-fakeCL-1 + + Regular + + Ordinal + + + fr.insee + j6qg8rc6-secondDimension-fakeCL-1-1 + 1 + + fr.insee + CA-j6qg8rc6-secondDimension-fakeCL-1-1 + 1 + Category + + 1 + + + fr.insee + j6qg8rc6-secondDimension-fakeCL-1-2 + 1 + + fr.insee + CA-j6qg8rc6-secondDimension-fakeCL-1-2 + 1 + Category + + 2 + + + + fr.insee + INSEE-COMMUN-CL-Booleen + 1 + + Booleen + + Regular + + Ordinal + + + fr.insee + INSEE-COMMUN-CL-Booleen-1 + 1 + + fr.insee + INSEE-COMMUN-CA-Booleen-1 + 1 + Category + + 1 + + + + + fr.insee + VariableScheme-i6vwi0 + 1 + + Variable Scheme for the survey + + + fr.insee + jbcggtca + 1 + + SUM_EXPENSES + + + SUM_EXPENSES label + + + fr.insee + jbcggtca-VROP + 1 + + + + fr.insee + jbcggtca-GI + 1 + GenerationInstruction + + + fr.insee + jbcggtca-GOP + 1 + OutParameter + + + fr.insee + jbcggtca-VROP + 1 + OutParameter + + + + + + + + fr.insee + jbcggtex + 1 + + LAST_BROADCAST + + + LAST_BROADCAST label + + + + fr.insee + jbcgfvir + 1 + + COMMENT + + + COMMENT label + + + fr.insee + j6p3dkx6-QOP-jbgdhaht + 1 + OutParameter + + + fr.insee + j6p3dkx6 + 1 + QuestionItem + + + + + + + fr.insee + jbcgm0ip + 1 + + READY + + + READY label + + + fr.insee + j6p0np9q-QOP-jbgd3set + 1 + OutParameter + + + fr.insee + j6p0np9q + 1 + QuestionItem + + + + + + + fr.insee + INSEE-COMMUN-CL-Booleen-1 + 1 + Code + + + + + + + + fr.insee + jbcgf11f + 1 + + PRODUCER + + + PRODUCER label + + + fr.insee + j3343qhx-QOP-jbgd90cy + 1 + OutParameter + + + fr.insee + j3343qhx + 1 + QuestionItem + + + + + + + fr.insee + jbcgcy2x + 1 + + SEASON_NUMBER + + + SEASON_NUMBER label + + + fr.insee + j6q9h8tj-QOP-jbgdjy8h + 1 + OutParameter + + + fr.insee + j6q9h8tj + 1 + QuestionItem + + + + + 0 + 99 + + Decimal + + + + + fr.insee + jbcgbg33 + 1 + + DATEFIRST + + + DATEFIRST label + + + fr.insee + j334cyqb-QOP-jbgdih2z + 1 + OutParameter + + + fr.insee + j334cyqb + 1 + QuestionItem + + + + fr.insee + INSEE-COMMUN-MNR-DateTimedate-YYYY-MM-DD + 1 + ManagedDateTimeRepresentation + + + + + fr.insee + jbcgieyw + 1 + + AUDIENCE_SHARE + + + AUDIENCE_SHARE label + + + fr.insee + j6z06z1e-QOP-jbgddnrd + 1 + OutParameter + + + fr.insee + j6z06z1e + 1 + QuestionItem + + + + + 0 + 99 + + Decimal + + + + + fr.insee + jbcgasbh + 1 + + CITY + + + CITY label + + + fr.insee + j3343clt-QOP-jbgdjdkn + 1 + OutParameter + + + fr.insee + j3343clt + 1 + QuestionItem + + + + + fr.insee + j334iumu + 1 + CodeList + + + + + + fr.insee + jbcg9yr6 + 1 + + MAYOR + + + MAYOR label + + + fr.insee + j6qdfhvw-QOP-jbgd8ghp + 1 + OutParameter + + + fr.insee + j6qdfhvw + 1 + QuestionItem + + + + + fr.insee + j6qdqoen + 1 + CodeList + + + + + + fr.insee + jbcgpija + 1 + + STATE + + + STATE label + + + fr.insee + j4nw5cqz-QOP-jbgdkd7v + 1 + OutParameter + + + fr.insee + j4nw5cqz + 1 + QuestionItem + + + + + fr.insee + j4nwo00f + 1 + CodeList + + + + + + fr.insee + jbdxewlq + 1 + + PET1 + + + 1 - Santa's Little Helper + + + fr.insee + j334akov-QOP-jbgd8qmn + 1 + OutParameter + + + fr.insee + j334akov + 1 + QuestionGrid + + + + + + + fr.insee + INSEE-COMMUN-CL-Booleen-1 + 1 + Code + + + + + + + + fr.insee + jbdxjmst + 1 + + PET2 + + + 2 - Snowball I + + + fr.insee + j334akov-QOP-jbgd60vl + 1 + OutParameter + + + fr.insee + j334akov + 1 + QuestionGrid + + + + + + + fr.insee + INSEE-COMMUN-CL-Booleen-1 + 1 + Code + + + + + + + + fr.insee + jbdxjuay + 1 + + PET3 + + + 3 - Coltrane + + + fr.insee + j334akov-QOP-jbgda2jo + 1 + OutParameter + + + fr.insee + j334akov + 1 + QuestionGrid + + + + + + + fr.insee + INSEE-COMMUN-CL-Booleen-1 + 1 + Code + + + + + + + + fr.insee + jbdxniuw + 1 + + PET4 + + + 4 - Mojo the Helper Monkey + + + fr.insee + j334akov-QOP-jbgdfssy + 1 + OutParameter + + + fr.insee + j334akov + 1 + QuestionGrid + + + + + + + fr.insee + INSEE-COMMUN-CL-Booleen-1 + 1 + Code + + + + + + + + fr.insee + jbdxtl1d + 1 + + ICE_FLAVOUR1 + + + 1 - Vanilla + + + fr.insee + j6p29i81-QOP-jbgdb3jx + 1 + OutParameter + + + fr.insee + j6p29i81 + 1 + QuestionGrid + + + + + fr.insee + jbdxh138 + 1 + CodeList + + + + + + fr.insee + jbdxvai9 + 1 + + ICE_FLAVOUR2 + + + 2 - Strawberry + + + fr.insee + j6p29i81-QOP-jbgdb61k + 1 + OutParameter + + + fr.insee + j6p29i81 + 1 + QuestionGrid + + + + + fr.insee + jbdxh138 + 1 + CodeList + + + + + + fr.insee + jbdxpltw + 1 + + ICE_FLAVOUR3 + + + 3 - Apple + + + fr.insee + j6p29i81-QOP-jbgdl3kc + 1 + OutParameter + + + fr.insee + j6p29i81 + 1 + QuestionGrid + + + + + fr.insee + jbdxh138 + 1 + CodeList + + + + + + fr.insee + jbdxzx2x + 1 + + ICE_FLAVOUR4 + + + 4 - Bacon + + + fr.insee + j6p29i81-QOP-jbgdcobo + 1 + OutParameter + + + fr.insee + j6p29i81 + 1 + QuestionGrid + + + + + fr.insee + jbdxh138 + 1 + CodeList + + + + + + fr.insee + jbdy4nhp + 1 + + NUCLEAR_CHARACTER1 + + + 1 - Charles Montgomery Burns + + + fr.insee + j6qefnga-QOP-jbgd6p0k + 1 + OutParameter + + + fr.insee + j6qefnga + 1 + QuestionGrid + + + + + fr.insee + jbdxh138 + 1 + CodeList + + + + + + fr.insee + jbdxtanu + 1 + + NUCLEAR_CHARACTER2 + + + 2 - Carl Carlson + + + fr.insee + j6qefnga-QOP-jbgd9ato + 1 + OutParameter + + + fr.insee + j6qefnga + 1 + QuestionGrid + + + + + fr.insee + jbdxh138 + 1 + CodeList + + + + + + fr.insee + jbdy25if + 1 + + NUCLEAR_CHARACTER3 + + + 3 - Otto Mann + + + fr.insee + j6qefnga-QOP-jbgd3e0p + 1 + OutParameter + + + fr.insee + j6qefnga + 1 + QuestionGrid + + + + + fr.insee + jbdxh138 + 1 + CodeList + + + + + + fr.insee + jbdxvta8 + 1 + + NUCLEAR_CHARACTER4 + + + 4 - Carl Carlson + + + fr.insee + j6qefnga-QOP-jbgdkxne + 1 + OutParameter + + + fr.insee + j6qefnga + 1 + QuestionGrid + + + + + fr.insee + jbdxh138 + 1 + CodeList + + + + + + fr.insee + jbdy3nh7 + 1 + + BIRTH_CHARACTER1 + + + 1 - Selma Bouvier + + + fr.insee + j6yzoc6g-QOP-jbgd7fr6 + 1 + OutParameter + + + fr.insee + j6yzoc6g + 1 + QuestionGrid + + + + + fr.insee + jbdxricm + 1 + CodeList + + + + + + fr.insee + jbdy6lk3 + 1 + + BIRTH_CHARACTER2 + + + 2 - Kent Brockman + + + fr.insee + j6yzoc6g-QOP-jbgd5e9f + 1 + OutParameter + + + fr.insee + j6yzoc6g + 1 + QuestionGrid + + + + + fr.insee + jbdxricm + 1 + CodeList + + + + + + fr.insee + jbdxsby0 + 1 + + BIRTH_CHARACTER3 + + + 3 - Milhouse Van Houten + + + fr.insee + j6yzoc6g-QOP-jbgd912x + 1 + OutParameter + + + fr.insee + j6yzoc6g + 1 + QuestionGrid + + + + + fr.insee + jbdxricm + 1 + CodeList + + + + + + fr.insee + jbdy7sra + 1 + + BIRTH_CHARACTER4 + + + 4 - Nelson Muntz + + + fr.insee + j6yzoc6g-QOP-jbgd6bdy + 1 + OutParameter + + + fr.insee + j6yzoc6g + 1 + QuestionGrid + + + + + fr.insee + jbdxricm + 1 + CodeList + + + + + + fr.insee + jbdy2wyl + 1 + + BIRTH_CHARACTER5 + + + 5 - Crazy Cat Lady + + + fr.insee + j6yzoc6g-QOP-jbgddyry + 1 + OutParameter + + + fr.insee + j6yzoc6g + 1 + QuestionGrid + + + + + fr.insee + jbdxricm + 1 + CodeList + + + + + + fr.insee + jbgdnfk7 + 1 + + PERCENTAGE_EXPENSES11 + + + Frozen products-Percentage + + + fr.insee + j4nwc63q-QOP-jbgde5yl + 1 + OutParameter + + + fr.insee + j4nwc63q + 1 + QuestionGrid + + + + % + + 0 + 100 + + Decimal + + + + + fr.insee + jbgdje4w + 1 + + PERCENTAGE_EXPENSES21 + + + Ice creams-Percentage + + + fr.insee + j4nwc63q-QOP-jbgd2x2t + 1 + OutParameter + + + fr.insee + j4nwc63q + 1 + QuestionGrid + + + + % + + 0 + 100 + + Decimal + + + + + fr.insee + jbgdlth7 + 1 + + PERCENTAGE_EXPENSES31 + + + Jasper Beardly-Percentage + + + fr.insee + j4nwc63q-QOP-jbgdjypz + 1 + OutParameter + + + fr.insee + j4nwc63q + 1 + QuestionGrid + + + + % + + 0 + 100 + + Decimal + + + + + fr.insee + jbgdelbl + 1 + + PERCENTAGE_EXPENSES41 + + + Meat-Percentage + + + fr.insee + j4nwc63q-QOP-jbgdcftu + 1 + OutParameter + + + fr.insee + j4nwc63q + 1 + QuestionGrid + + + + % + + 0 + 100 + + Decimal + + + + + fr.insee + jbgd95jq + 1 + + PERCENTAGE_EXPENSES51 + + + Bacon-Percentage + + + fr.insee + j4nwc63q-QOP-jbgdiyfe + 1 + OutParameter + + + fr.insee + j4nwc63q + 1 + QuestionGrid + + + + % + + 0 + 100 + + Decimal + + + + + fr.insee + jbgdadd9 + 1 + + PERCENTAGE_EXPENSES61 + + + Pork chop-Percentage + + + fr.insee + j4nwc63q-QOP-jbgdj1wd + 1 + OutParameter + + + fr.insee + j4nwc63q + 1 + QuestionGrid + + + + % + + 0 + 100 + + Decimal + + + + + fr.insee + jbgdlwzk + 1 + + PERCENTAGE_EXPENSES71 + + + Chicken-Percentage + + + fr.insee + j4nwc63q-QOP-jbgddylk + 1 + OutParameter + + + fr.insee + j4nwc63q + 1 + QuestionGrid + + + + % + + 0 + 100 + + Decimal + + + + + fr.insee + jbgdfz77 + 1 + + PERCENTAGE_EXPENSES81 + + + Compote-Percentage + + + fr.insee + j4nwc63q-QOP-jbgd3jj6 + 1 + OutParameter + + + fr.insee + j4nwc63q + 1 + QuestionGrid + + + + % + + 0 + 100 + + Decimal + + + + + fr.insee + jbgdepx6 + 1 + + PERCENTAGE_EXPENSES91 + + + Powersauce-Percentage + + + fr.insee + j4nwc63q-QOP-jbgd4w3k + 1 + OutParameter + + + fr.insee + j4nwc63q + 1 + QuestionGrid + + + + % + + 0 + 100 + + Decimal + + + + + fr.insee + jbgdepx7 + 1 + + PERCENTAGE_EXPENSES101 + + + Other-Percentage + + + fr.insee + j4nwc63q-QOP-jbgd4w4k + 1 + OutParameter + + + fr.insee + j4nwc63q + 1 + QuestionGrid + + + + % + + 0 + 100 + + Decimal + + + + + fr.insee + jbgd9vqv + 1 + + CLOWNING11 + + + Break the windows of the whole city-Clowning + + + fr.insee + j4nw0rr6-QOP-jbgd8tyr + 1 + OutParameter + + + fr.insee + j4nw0rr6 + 1 + QuestionGrid + + + + + fr.insee + jbdyh6b5 + 1 + CodeList + + + + + + fr.insee + jbgden0i + 1 + + CLOWNING21 + + + Loose the violin of his daughter playing poker-Clowning + + + fr.insee + j4nw0rr6-QOP-jbgdep36 + 1 + OutParameter + + + fr.insee + j4nw0rr6 + 1 + QuestionGrid + + + + + fr.insee + jbdyh6b5 + 1 + CodeList + + + + + + fr.insee + jbgdndju + 1 + + CLOWNING31 + + + Kill Mr Burns-Clowning + + + fr.insee + j4nw0rr6-QOP-jbgdjjgi + 1 + OutParameter + + + fr.insee + j4nw0rr6 + 1 + QuestionGrid + + + + + fr.insee + jbdyh6b5 + 1 + CodeList + + + + + + fr.insee + jbgdfwg9 + 1 + + CLOWNING41 + + + Leaving a mechanical object to control the nuclear power plant-Clowning + + + fr.insee + j4nw0rr6-QOP-jbgdgh6k + 1 + OutParameter + + + fr.insee + j4nw0rr6 + 1 + QuestionGrid + + + + + fr.insee + jbdyh6b5 + 1 + CodeList + + + + + + fr.insee + jbgdd3ky + 1 + + CLOWNING12 + + + Break the windows of the whole city-Remember? + + + fr.insee + j4nw0rr6-QOP-jbgdit3o + 1 + OutParameter + + + fr.insee + j4nw0rr6 + 1 + QuestionGrid + + + + + + + fr.insee + jbgdm9lm + 1 + + CLOWNING22 + + + Loose the violin of his daughter playing poker-Remember? + + + fr.insee + j4nw0rr6-QOP-jbgd366k + 1 + OutParameter + + + fr.insee + j4nw0rr6 + 1 + QuestionGrid + + + + + + + fr.insee + jbgdcdhv + 1 + + CLOWNING32 + + + Kill Mr Burns-Remember? + + + fr.insee + j4nw0rr6-QOP-jbgdax06 + 1 + OutParameter + + + fr.insee + j4nw0rr6 + 1 + QuestionGrid + + + + + + + fr.insee + jbgdjlit + 1 + + CLOWNING42 + + + Leaving a mechanical object to control the nuclear power plant-Remember? + + + fr.insee + j4nw0rr6-QOP-jbgdfo1j + 1 + OutParameter + + + fr.insee + j4nw0rr6 + 1 + QuestionGrid + + + + + + + fr.insee + jbgd1zxu + 1 + + TRAVEL11 + + + Car-Brazil-Means + + + fr.insee + j6p2lwuj-QOP-jbgd92mb + 1 + OutParameter + + + fr.insee + j6p2lwuj + 1 + QuestionGrid + + + + + + + fr.insee + INSEE-COMMUN-CL-Booleen-1 + 1 + Code + + + + + + + + fr.insee + jbgd8lfs + 1 + + TRAVEL21 + + + Bike-Brazil-Means + + + fr.insee + j6p2lwuj-QOP-jbgdgsat + 1 + OutParameter + + + fr.insee + j6p2lwuj + 1 + QuestionGrid + + + + + + + fr.insee + INSEE-COMMUN-CL-Booleen-1 + 1 + Code + + + + + + + + fr.insee + jbgd56qo + 1 + + TRAVEL31 + + + Skateboard-Brazil-Means + + + fr.insee + j6p2lwuj-QOP-jbgdaxk2 + 1 + OutParameter + + + fr.insee + j6p2lwuj + 1 + QuestionGrid + + + + + + + fr.insee + INSEE-COMMUN-CL-Booleen-1 + 1 + Code + + + + + + + + fr.insee + jbgd4wu8 + 1 + + TRAVEL41 + + + Plane-Brazil-Means + + + fr.insee + j6p2lwuj-QOP-jbgd7myn + 1 + OutParameter + + + fr.insee + j6p2lwuj + 1 + QuestionGrid + + + + + + + fr.insee + INSEE-COMMUN-CL-Booleen-1 + 1 + Code + + + + + + + + fr.insee + jbgdak6h + 1 + + TRAVEL12 + + + Car-Canada-Means + + + fr.insee + j6p2lwuj-QOP-jbgdnxkt + 1 + OutParameter + + + fr.insee + j6p2lwuj + 1 + QuestionGrid + + + + + + + fr.insee + INSEE-COMMUN-CL-Booleen-1 + 1 + Code + + + + + + + + fr.insee + jbgdmsy4 + 1 + + TRAVEL22 + + + Bike-Canada-Means + + + fr.insee + j6p2lwuj-QOP-jbgd3ef5 + 1 + OutParameter + + + fr.insee + j6p2lwuj + 1 + QuestionGrid + + + + + + + fr.insee + INSEE-COMMUN-CL-Booleen-1 + 1 + Code + + + + + + + + fr.insee + jbgd2zlu + 1 + + TRAVEL32 + + + Skateboard-Canada-Means + + + fr.insee + j6p2lwuj-QOP-jbgd8p1v + 1 + OutParameter + + + fr.insee + j6p2lwuj + 1 + QuestionGrid + + + + + + + fr.insee + INSEE-COMMUN-CL-Booleen-1 + 1 + Code + + + + + + + + fr.insee + jbgd6v73 + 1 + + TRAVEL42 + + + Plane-Canada-Means + + + fr.insee + j6p2lwuj-QOP-jbgdgm0c + 1 + OutParameter + + + fr.insee + j6p2lwuj + 1 + QuestionGrid + + + + + + + fr.insee + INSEE-COMMUN-CL-Booleen-1 + 1 + Code + + + + + + + + fr.insee + jbgdf5fg + 1 + + TRAVEL13 + + + Car-Japan-Means + + + fr.insee + j6p2lwuj-QOP-jbgdcppc + 1 + OutParameter + + + fr.insee + j6p2lwuj + 1 + QuestionGrid + + + + + + + fr.insee + INSEE-COMMUN-CL-Booleen-1 + 1 + Code + + + + + + + + fr.insee + jbgd2xg0 + 1 + + TRAVEL23 + + + Bike-Japan-Means + + + fr.insee + j6p2lwuj-QOP-jbgd4cm6 + 1 + OutParameter + + + fr.insee + j6p2lwuj + 1 + QuestionGrid + + + + + + + fr.insee + INSEE-COMMUN-CL-Booleen-1 + 1 + Code + + + + + + + + fr.insee + jbgdc06l + 1 + + TRAVEL33 + + + Skateboard-Japan-Means + + + fr.insee + j6p2lwuj-QOP-jbgdd2lo + 1 + OutParameter + + + fr.insee + j6p2lwuj + 1 + QuestionGrid + + + + + + + fr.insee + INSEE-COMMUN-CL-Booleen-1 + 1 + Code + + + + + + + + fr.insee + jbgdb8i9 + 1 + + TRAVEL43 + + + Plane-Japan-Means + + + fr.insee + j6p2lwuj-QOP-jbgdo0ay + 1 + OutParameter + + + fr.insee + j6p2lwuj + 1 + QuestionGrid + + + + + + + fr.insee + INSEE-COMMUN-CL-Booleen-1 + 1 + Code + + + + + + + + fr.insee + jbgdhzve + 1 + + TRAVEL14 + + + Car-France-Means + + + fr.insee + j6p2lwuj-QOP-jbgd4r2a + 1 + OutParameter + + + fr.insee + j6p2lwuj + 1 + QuestionGrid + + + + + + + fr.insee + INSEE-COMMUN-CL-Booleen-1 + 1 + Code + + + + + + + + fr.insee + jbgd93ks + 1 + + TRAVEL24 + + + Bike-France-Means + + + fr.insee + j6p2lwuj-QOP-jbgdkfpq + 1 + OutParameter + + + fr.insee + j6p2lwuj + 1 + QuestionGrid + + + + + + + fr.insee + INSEE-COMMUN-CL-Booleen-1 + 1 + Code + + + + + + + + fr.insee + jbgdfw7h + 1 + + TRAVEL34 + + + Skateboard-France-Means + + + fr.insee + j6p2lwuj-QOP-jbgd7u52 + 1 + OutParameter + + + fr.insee + j6p2lwuj + 1 + QuestionGrid + + + + + + + fr.insee + INSEE-COMMUN-CL-Booleen-1 + 1 + Code + + + + + + + + fr.insee + jbgdfavn + 1 + + TRAVEL44 + + + Plane-France-Means + + + fr.insee + j6p2lwuj-QOP-jbgdgfwl + 1 + OutParameter + + + fr.insee + j6p2lwuj + 1 + QuestionGrid + + + + + + + fr.insee + INSEE-COMMUN-CL-Booleen-1 + 1 + Code + + + + + + + + fr.insee + jbgdc199 + 1 + + TRAVEL15 + + + Car-Other country-Means + + + fr.insee + j6p2lwuj-QOP-jbgd9cff + 1 + OutParameter + + + fr.insee + j6p2lwuj + 1 + QuestionGrid + + + + + + + fr.insee + INSEE-COMMUN-CL-Booleen-1 + 1 + Code + + + + + + + + fr.insee + jbgdfqph + 1 + + TRAVEL25 + + + Bike-Other country-Means + + + fr.insee + j6p2lwuj-QOP-jbgddwsp + 1 + OutParameter + + + fr.insee + j6p2lwuj + 1 + QuestionGrid + + + + + + + fr.insee + INSEE-COMMUN-CL-Booleen-1 + 1 + Code + + + + + + + + fr.insee + jbgd8r0n + 1 + + TRAVEL35 + + + Skateboard-Other country-Means + + + fr.insee + j6p2lwuj-QOP-jbgdncn8 + 1 + OutParameter + + + fr.insee + j6p2lwuj + 1 + QuestionGrid + + + + + + + fr.insee + INSEE-COMMUN-CL-Booleen-1 + 1 + Code + + + + + + + + fr.insee + jbgd3aqk + 1 + + TRAVEL45 + + + Plane-Other country-Means + + + fr.insee + j6p2lwuj-QOP-jbgdnz6b + 1 + OutParameter + + + fr.insee + j6p2lwuj + 1 + QuestionGrid + + + + + + + fr.insee + INSEE-COMMUN-CL-Booleen-1 + 1 + Code + + + + + + + + fr.insee + jbgdltql + 1 + + TRAVEL16 + + + Car-Other Planet-Means + + + fr.insee + j6p2lwuj-QOP-jbgdiva0 + 1 + OutParameter + + + fr.insee + j6p2lwuj + 1 + QuestionGrid + + + + + + + fr.insee + INSEE-COMMUN-CL-Booleen-1 + 1 + Code + + + + + + + + fr.insee + jbgd9um3 + 1 + + TRAVEL26 + + + Bike-Other Planet-Means + + + fr.insee + j6p2lwuj-QOP-jbgd7dqf + 1 + OutParameter + + + fr.insee + j6p2lwuj + 1 + QuestionGrid + + + + + + + fr.insee + INSEE-COMMUN-CL-Booleen-1 + 1 + Code + + + + + + + + fr.insee + jbgddj7v + 1 + + TRAVEL36 + + + Skateboard-Other Planet-Means + + + fr.insee + j6p2lwuj-QOP-jbgdnous + 1 + OutParameter + + + fr.insee + j6p2lwuj + 1 + QuestionGrid + + + + + + + fr.insee + INSEE-COMMUN-CL-Booleen-1 + 1 + Code + + + + + + + + fr.insee + jbgdb4ym + 1 + + TRAVEL46 + + + Plane-Other Planet-Means + + + fr.insee + j6p2lwuj-QOP-jbgdkfcz + 1 + OutParameter + + + fr.insee + j6p2lwuj + 1 + QuestionGrid + + + + + + + fr.insee + INSEE-COMMUN-CL-Booleen-1 + 1 + Code + + + + + + + + fr.insee + jbgd3fkz + 1 + + FAVOURITE_CHARACTERS11 + + + Line1-Name + + + fr.insee + j6qg8rc6-QOP-jbgdl5jb + 1 + OutParameter + + + fr.insee + j6qg8rc6 + 1 + QuestionGrid + + + + + + + fr.insee + jbgdf2md + 1 + + FAVOURITE_CHARACTERS21 + + + Line2-Name + + + fr.insee + j6qg8rc6-QOP-jbgd8lwo + 1 + OutParameter + + + fr.insee + j6qg8rc6 + 1 + QuestionGrid + + + + + + + fr.insee + jbgdfle1 + 1 + + FAVOURITE_CHARACTERS31 + + + Line3-Name + + + fr.insee + j6qg8rc6-QOP-jbgdbfag + 1 + OutParameter + + + fr.insee + j6qg8rc6 + 1 + QuestionGrid + + + + + + + fr.insee + jbgdix8x + 1 + + FAVOURITE_CHARACTERS41 + + + Line4-Name + + + fr.insee + j6qg8rc6-QOP-jbgdlgja + 1 + OutParameter + + + fr.insee + j6qg8rc6 + 1 + QuestionGrid + + + + + + + fr.insee + jbgd782k + 1 + + FAVOURITE_CHARACTERS51 + + + Line5-Name + + + fr.insee + j6qg8rc6-QOP-jbgd745y + 1 + OutParameter + + + fr.insee + j6qg8rc6 + 1 + QuestionGrid + + + + + + + fr.insee + jbgd68rf + 1 + + FAVOURITE_CHARACTERS61 + + + Line6-Name + + + fr.insee + j6qg8rc6-QOP-jbgdjkts + 1 + OutParameter + + + fr.insee + j6qg8rc6 + 1 + QuestionGrid + + + + + + + fr.insee + jbgdfoj4 + 1 + + FAVOURITE_CHARACTERS71 + + + Line7-Name + + + fr.insee + j6qg8rc6-QOP-jbgdcax7 + 1 + OutParameter + + + fr.insee + j6qg8rc6 + 1 + QuestionGrid + + + + + + + fr.insee + jbgdb116 + 1 + + FAVOURITE_CHARACTERS81 + + + Line8-Name + + + fr.insee + j6qg8rc6-QOP-jbgdjye1 + 1 + OutParameter + + + fr.insee + j6qg8rc6 + 1 + QuestionGrid + + + + + + + fr.insee + jbgd7w5p + 1 + + FAVOURITE_CHARACTERS91 + + + Line9-Name + + + fr.insee + j6qg8rc6-QOP-jbgd5jet + 1 + OutParameter + + + fr.insee + j6qg8rc6 + 1 + QuestionGrid + + + + + + + fr.insee + jbgd8rj2 + 1 + + FAVOURITE_CHARACTERS101 + + + Line10-Name + + + fr.insee + j6qg8rc6-QOP-jbgdjw90 + 1 + OutParameter + + + fr.insee + j6qg8rc6 + 1 + QuestionGrid + + + + + + + fr.insee + jbgdidnp + 1 + + FAVOURITE_CHARACTERS12 + + + Line1-Age + + + fr.insee + j6qg8rc6-QOP-jbgdfndq + 1 + OutParameter + + + fr.insee + j6qg8rc6 + 1 + QuestionGrid + + + + + 0 + 120 + + Decimal + + + + + fr.insee + jbgd47wz + 1 + + FAVOURITE_CHARACTERS22 + + + Line2-Age + + + fr.insee + j6qg8rc6-QOP-jbgd7osi + 1 + OutParameter + + + fr.insee + j6qg8rc6 + 1 + QuestionGrid + + + + + 0 + 120 + + Decimal + + + + + fr.insee + jbgdj2nn + 1 + + FAVOURITE_CHARACTERS32 + + + Line3-Age + + + fr.insee + j6qg8rc6-QOP-jbgd7bnw + 1 + OutParameter + + + fr.insee + j6qg8rc6 + 1 + QuestionGrid + + + + + 0 + 120 + + Decimal + + + + + fr.insee + jbgd2ipx + 1 + + FAVOURITE_CHARACTERS42 + + + Line4-Age + + + fr.insee + j6qg8rc6-QOP-jbgd9k71 + 1 + OutParameter + + + fr.insee + j6qg8rc6 + 1 + QuestionGrid + + + + + 0 + 120 + + Decimal + + + + + fr.insee + jbgd4pe3 + 1 + + FAVOURITE_CHARACTERS52 + + + Line5-Age + + + fr.insee + j6qg8rc6-QOP-jbgdimks + 1 + OutParameter + + + fr.insee + j6qg8rc6 + 1 + QuestionGrid + + + + + 0 + 120 + + Decimal + + + + + fr.insee + jbgdjgb1 + 1 + + FAVOURITE_CHARACTERS62 + + + Line6-Age + + + fr.insee + j6qg8rc6-QOP-jbgdjquz + 1 + OutParameter + + + fr.insee + j6qg8rc6 + 1 + QuestionGrid + + + + + 0 + 120 + + Decimal + + + + + fr.insee + jbgdb5c1 + 1 + + FAVOURITE_CHARACTERS72 + + + Line7-Age + + + fr.insee + j6qg8rc6-QOP-jbgdd2w3 + 1 + OutParameter + + + fr.insee + j6qg8rc6 + 1 + QuestionGrid + + + + + 0 + 120 + + Decimal + + + + + fr.insee + jbgdju9y + 1 + + FAVOURITE_CHARACTERS82 + + + Line8-Age + + + fr.insee + j6qg8rc6-QOP-jbgdkosc + 1 + OutParameter + + + fr.insee + j6qg8rc6 + 1 + QuestionGrid + + + + + 0 + 120 + + Decimal + + + + + fr.insee + jbgdatyx + 1 + + FAVOURITE_CHARACTERS92 + + + Line9-Age + + + fr.insee + j6qg8rc6-QOP-jbgdk0x4 + 1 + OutParameter + + + fr.insee + j6qg8rc6 + 1 + QuestionGrid + + + + + 0 + 120 + + Decimal + + + + + fr.insee + jbgdi1dt + 1 + + FAVOURITE_CHARACTERS102 + + + Line10-Age + + + fr.insee + j6qg8rc6-QOP-jbgd2wgf + 1 + OutParameter + + + fr.insee + j6qg8rc6 + 1 + QuestionGrid + + + + + 0 + 120 + + Decimal + + + + + fr.insee + jbcggt4x + 1 + + SURVEY_COMMENT + + + SURVEY_COMMENT label + + + fr.insee + j6z0z3us-QOP-jbgd6m6e + 1 + OutParameter + + + fr.insee + j6z0z3us + 1 + QuestionItem + + + + + + + fr.insee + j6qg8rc6-gp + 1 + + + fr.insee + j6qg8rc6 + 1 + QuestionGrid + + + TableLoop + + FAVOURITE_CHARACTERS + + + fr.insee + jbgd3fkz + 1 + Variable + + + fr.insee + jbgdf2md + 1 + Variable + + + fr.insee + jbgdfle1 + 1 + Variable + + + fr.insee + jbgdix8x + 1 + Variable + + + fr.insee + jbgd782k + 1 + Variable + + + fr.insee + jbgd68rf + 1 + Variable + + + fr.insee + jbgdfoj4 + 1 + Variable + + + fr.insee + jbgdb116 + 1 + Variable + + + fr.insee + jbgd7w5p + 1 + Variable + + + fr.insee + jbgd8rj2 + 1 + Variable + + + fr.insee + jbgdidnp + 1 + Variable + + + fr.insee + jbgd47wz + 1 + Variable + + + fr.insee + jbgdj2nn + 1 + Variable + + + fr.insee + jbgd2ipx + 1 + Variable + + + fr.insee + jbgd4pe3 + 1 + Variable + + + fr.insee + jbgdjgb1 + 1 + Variable + + + fr.insee + jbgdb5c1 + 1 + Variable + + + fr.insee + jbgdju9y + 1 + Variable + + + fr.insee + jbgdatyx + 1 + Variable + + + fr.insee + jbgdi1dt + 1 + Variable + + + + + fr.insee + INSEE-SIMPSONS-PIS-1 + 1 + + SIMPSONS + + + Processing instructions of the Simpsons questionnaire + + + fr.insee + jbcggtca-GI + 1 + + + fr.insee + jbgdnfk7 + 1 + Variable + + + fr.insee + jbgdje4w + 1 + Variable + + + fr.insee + jbgdlth7 + 1 + Variable + + + fr.insee + jbgdelbl + 1 + Variable + + + fr.insee + jbgd95jq + 1 + Variable + + + fr.insee + jbgdadd9 + 1 + Variable + + + fr.insee + jbgdlwzk + 1 + Variable + + + fr.insee + jbgdfz77 + 1 + Variable + + + fr.insee + jbgdepx6 + 1 + Variable + + + fr.insee + jbgdepx7 + 1 + Variable + + + + xpath + + fr.insee + jbcggtca-IP-1 + 1 + + PERCENTAGE_EXPENSES11 + + + + fr.insee + jbcggtca-IP-2 + 1 + + PERCENTAGE_EXPENSES21 + + + + fr.insee + jbcggtca-IP-3 + 1 + + PERCENTAGE_EXPENSES31 + + + + fr.insee + jbcggtca-IP-4 + 1 + + PERCENTAGE_EXPENSES41 + + + + fr.insee + jbcggtca-IP-5 + 1 + + PERCENTAGE_EXPENSES51 + + + + fr.insee + jbcggtca-IP-6 + 1 + + PERCENTAGE_EXPENSES61 + + + + fr.insee + jbcggtca-IP-7 + 1 + + PERCENTAGE_EXPENSES71 + + + + fr.insee + jbcggtca-IP-8 + 1 + + PERCENTAGE_EXPENSES81 + + + + fr.insee + jbcggtca-IP-9 + 1 + + PERCENTAGE_EXPENSES91 + + + + fr.insee + jbcggtca-IP-10 + 1 + + PERCENTAGE_EXPENSES101 + + + + fr.insee + jbcggtca-GOP + 1 + + + + fr.insee + j4nwc63q-QOP-jbgde5yl + 1 + OutParameter + + + fr.insee + jbcggtca-IP-1 + 1 + InParameter + + + + + fr.insee + j4nwc63q-QOP-jbgd2x2t + 1 + OutParameter + + + fr.insee + jbcggtca-IP-2 + 1 + InParameter + + + + + fr.insee + j4nwc63q-QOP-jbgdjypz + 1 + OutParameter + + + fr.insee + jbcggtca-IP-3 + 1 + InParameter + + + + + fr.insee + j4nwc63q-QOP-jbgdcftu + 1 + OutParameter + + + fr.insee + jbcggtca-IP-4 + 1 + InParameter + + + + + fr.insee + j4nwc63q-QOP-jbgdiyfe + 1 + OutParameter + + + fr.insee + jbcggtca-IP-5 + 1 + InParameter + + + + + fr.insee + j4nwc63q-QOP-jbgdj1wd + 1 + OutParameter + + + fr.insee + jbcggtca-IP-6 + 1 + InParameter + + + + + fr.insee + j4nwc63q-QOP-jbgddylk + 1 + OutParameter + + + fr.insee + jbcggtca-IP-7 + 1 + InParameter + + + + + fr.insee + j4nwc63q-QOP-jbgd3jj6 + 1 + OutParameter + + + fr.insee + jbcggtca-IP-8 + 1 + InParameter + + + + + fr.insee + j4nwc63q-QOP-jbgd4w3k + 1 + OutParameter + + + fr.insee + jbcggtca-IP-9 + 1 + InParameter + + + + + fr.insee + j4nwc63q-QOP-jbgd4w4k + 1 + OutParameter + + + fr.insee + jbcggtca-IP-10 + 1 + InParameter + + + number(if (jbcggtca-IP-1='') then '0' else jbcggtca-IP-1) + number(if (jbcggtca-IP-2='') then '0' else jbcggtca-IP-2) + number(if (jbcggtca-IP-3='') then '0' else jbcggtca-IP-3)+ + number(if (jbcggtca-IP-4='') then '0' else jbcggtca-IP-4)+ number(if (jbcggtca-IP-5='') then '0' else jbcggtca-IP-5)+ number(if (jbcggtca-IP-6='') then '0' else jbcggtca-IP-6)+ + number(if (jbcggtca-IP-7='') then '0' else jbcggtca-IP-7)+ number(if (jbcggtca-IP-8='') then '0' else jbcggtca-IP-8)+ number(if (jbcggtca-IP-9='') then '0' else jbcggtca-IP-9)+ + number(if (jbcggtca-IP-10='') then '0' else jbcggtca-IP-10) + + + + fr.insee + Sequence-i6vwi0 + 1 + Sequence + + + + + fr.insee + INSEE-SIMPSONS-MRS + 1 + + Liste de formats numériques et dates de + l'enquête + Numeric and DateTime list for the survey + + + fr.insee + INSEE-COMMUN-MNR-DateTimedate-YYYY-MM-DD + 1 + YYYY-MM-DD + date + + 1900-01-01 + format-date(current-date(),'[Y0001]-[M01]-[D01]') + + + + + + fr.insee + StudyUnit-i6vwi0 + 1 + + + fr.insee + DataCollection-i6vwi0 + 1 + + fr.insee + QuestionScheme-i6vwi0 + 1 + QuestionScheme + + + fr.insee + ControlConstructScheme-i6vwi0 + 1 + ControlConstructScheme + + + fr.insee + InterviewerInstructionScheme-i6vwi0 + 1 + InterviewerInstructionScheme + + + fr.insee + InstrumentScheme-i6vwi0 + 1 + + fr.insee + Instrument-i6vwi0 + 1 + + SIMPSONS + + + Questionnaire SIMPSONS questionnaire + + A définir + + fr.insee + Sequence-i6vwi0 + 1 + Sequence + + + + + + \ No newline at end of file diff --git a/eno-ws/src/test/resources/transforms/simple-ddi.xml b/eno-ws/src/test/resources/transforms/simple-ddi.xml new file mode 100644 index 000000000..36ebee40f --- /dev/null +++ b/eno-ws/src/test/resources/transforms/simple-ddi.xml @@ -0,0 +1,319 @@ + + + fr.insee + INSEE-lmyoceix + 1 + + + Eno - Simple questionnaire + + + + fr.insee + RessourcePackage-lmyoceix + 1 + + fr.insee + InterviewerInstructionScheme-lmyoceix + 1 + + A définir + + + + fr.insee + ControlConstructScheme-lmyoceix + 1 + + fr.insee + Sequence-lmyoceix + 1 + + Eno - Simple questionnaire + + template + + fr.insee + lmynuv39 + 1 + Sequence + + + + fr.insee + lmynuv39 + 1 + + S1 + + + "Unique sequence" + + module + + fr.insee + lmyo3e0y-QC + 1 + QuestionConstruct + + + + fr.insee + lmyo3e0y-QC + 1 + + Q1 + + + fr.insee + lmyo3e0y + 1 + QuestionItem + + + + + fr.insee + QuestionScheme-lmyoceix + 1 + + A définir + + + fr.insee + lmyo3e0y + 1 + + Q1 + + + fr.insee + lmyo3e0y-QOP-lmynykd5 + 1 + + Q1 + + + + + fr.insee + lmyo3e0y-RDOP-lmynykd5 + 1 + OutParameter + + + fr.insee + lmyo3e0y-QOP-lmynykd5 + 1 + OutParameter + + + + + "Unique question" + + + + + fr.insee + lmyo3e0y-RDOP-lmynykd5 + 1 + + + + + + + fr.insee + CategoryScheme-lmyoceix + 1 + + A définir + + + fr.insee + INSEE-COMMUN-CA-Booleen-1 + 1 + + + + + + + fr.insee + ENOSIMPLE-CLS + 1 + + ENOSIMPLE + + + fr.insee + INSEE-COMMUN-CL-Booleen + 1 + + Booleen + + Regular + + Ordinal + + + fr.insee + INSEE-COMMUN-CL-Booleen-1 + 1 + + fr.insee + INSEE-COMMUN-CA-Booleen-1 + 1 + Category + + 1 + + + + + fr.insee + VariableScheme-lmyoceix + 1 + + Variable Scheme for the survey + + + fr.insee + lmyo22nw + 1 + + Q1 + + + Q1 label + + + fr.insee + lmyo3e0y-QOP-lmynykd5 + 1 + OutParameter + + + fr.insee + lmyo3e0y + 1 + QuestionItem + + + + + + + fr.insee + INSEE-Instrument-lmyoceix-vg + 1 + + + fr.insee + Instrument-lmyoceix + 1 + Instrument + + + Questionnaire + + ENOSIMPLE + + + fr.insee + lmyo22nw + 1 + Variable + + + + + fr.insee + INSEE-SIMPSONS-PIS-1 + 1 + + SIMPSONS + + + Processing instructions of the Simpsons questionnaire + + + + fr.insee + INSEE-SIMPSONS-MRS + 1 + + Liste de formats numériques et dates de + l'enquête + Numeric and DateTime list for the survey + + + + + fr.insee + StudyUnit-lmyoceix + 1 + + + fr.insee + DataCollection-lmyoceix + 1 + + fr.insee + QuestionScheme-lmyoceix + 1 + QuestionScheme + + + fr.insee + ControlConstructScheme-lmyoceix + 1 + ControlConstructScheme + + + fr.insee + InterviewerInstructionScheme-lmyoceix + 1 + InterviewerInstructionScheme + + + fr.insee + InstrumentScheme-lmyoceix + 1 + + fr.insee + Instrument-lmyoceix + 1 + + ENOSIMPLE + + + Eno - Simple questionnaire questionnaire + + A définir + + fr.insee + Sequence-lmyoceix + 1 + Sequence + + + + + + diff --git a/pom.xml b/pom.xml index ebeffda36..90a723fde 100644 --- a/pom.xml +++ b/pom.xml @@ -11,16 +11,15 @@ 2.20.1 17 - + UTF-8 + - - - junit - junit - 3.8.1 - test - - + + + org.springframework.boot + spring-boot-starter-parent + 3.5.5 + eno-core eno-ws From 2a7133719e827afe9f3e19db97f2a138d12682b2 Mon Sep 17 00:00:00 2001 From: Laurent Caouissin Date: Wed, 17 Sep 2025 13:23:54 +0200 Subject: [PATCH 3/3] chore: create .gitignore --- .gitignore | 1 + 1 file changed, 1 insertion(+) create mode 100644 .gitignore diff --git a/.gitignore b/.gitignore new file mode 100644 index 000000000..723ef36f4 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +.idea \ No newline at end of file