diff --git a/.gitignore b/.gitignore index 73b99a1e4..4c608e1c5 100644 --- a/.gitignore +++ b/.gitignore @@ -37,11 +37,16 @@ src/main/resources/xslt/inputs/*/templates.xsl src/main/resources/xslt/inputs/*/functions.xsl src/main/resources/xslt/transformations/*/*.xsl src/main/resources/xml/null.xml - + +# Ignore temp and debug files +*-temp.* +*-debug.* + # Don't ignore not generated files looking like generated ones !src/main/resources/xslt/inputs/fods/source.xsl !src/main/resources/xslt/inputs/xml/source.xsl !src/main/resources/xslt/transformations/*/*-fixed.xsl #Oxygen project -enojs.xpr \ No newline at end of file +Eno.xpr +questionnaires/test/ diff --git a/.travis.yml b/.travis.yml index ed04b39c8..6843b21eb 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,7 +1,7 @@ language: java jdk: -- openjdk8 + - openjdk8 install: -- mvn install -DskipTests=true -Dmaven.javadoc.skip=true -B -V -- mvn test -B + - mvn install -DskipTests=true -Dmaven.javadoc.skip=true -B -V + - mvn test -B diff --git a/Eno.xpr b/Eno.xpr deleted file mode 100644 index 1532e02ab..000000000 --- a/Eno.xpr +++ /dev/null @@ -1,27 +0,0 @@ - - - - - - - - - enable.project.master.files.support - true - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/ddi-qg-guide.html b/docs/ddi-qg-guide.html index 023951f1e..001382568 100644 --- a/docs/ddi-qg-guide.html +++ b/docs/ddi-qg-guide.html @@ -447,7 +447,7 @@

DDI Modelling

-

Case 2: Drop-down box

diff --git a/pom.xml b/pom.xml index cf1ad16e7..a7e7a2b20 100644 --- a/pom.xml +++ b/pom.xml @@ -1,9 +1,10 @@ - 4.0.0 fr.insee.eno eno-core - 1.1.0 + 2.0.0 jar Eno – Questionnaire generator @@ -50,6 +51,14 @@ 2.5 9.7.0-8 2.2 + 2.7.1 + 1.7.25 + + 3.5 + 4.12 + 2.3.0 + 2.11.0 + 3.0.1 3.0.0 UTF-8 @@ -67,7 +76,7 @@ xalan xalan - 2.7.1 + ${xalan.version} com.google.inject @@ -87,41 +96,55 @@ ${fop.version} - + org.slf4j slf4j-api - 1.7.25 + ${slf4j.version} + + + + + org.eclipse.persistence + org.eclipse.persistence.moxy + 2.6.0 + + + org.eclipse.persistence + eclipselink + 2.6.0 + + + javax.xml.bind + jaxb-api + 2.3.1 org.apache.commons commons-lang3 - 3.5 + ${apache-commons.version} test junit junit - 4.12 + ${junit.version} test org.xmlunit xmlunit-matchers - 2.3.0 + ${xmlunit.version} test org.apache.logging.log4j log4j-slf4j-impl - 2.11.0 + ${log4j-slf4j.version} test - - - @@ -135,6 +158,91 @@ ${compiler.target} + + org.codehaus.mojo + jaxb2-maven-plugin + 2.5.0 + + + xjc-schema + generate-sources + + xjc + + + fr.insee.eno.parameters + UTF-8 + + src/main/resources/params/schemas/jaxb/bindings.xjb + + + src/main/resources/params/schemas/ENOParameters.xsd + + false + + + + + + org.apache.maven.plugins + maven-surefire-plugin + 2.22.0 + + UTF-8 + UTF-8 + UTF-8 + -Dfile.encoding=UTF-8 + -Djavax.xml.bind.context.factory=org.eclipse.persistence.jaxb.JAXBContextFactory + + + + maven-resources-plugin + 2.7 + + UTF-8 + + + + copy-resources + process-resources + + copy-resources + + + target/generated-sources/jaxb/fr/insee/eno/parameters + + + src/main/resources/params/schemas/jaxb + + bindings.xml + jaxb.properties + + + + + + + + + + org.codehaus.mojo + build-helper-maven-plugin + 1.7 + + + add-source + generate-sources + + add-source + + + + ${project.build.directory}/generated-sources/jaxb + + + + + org.codehaus.mojo exec-maven-plugin @@ -234,6 +342,9 @@ Benoit Werquin + + Laurent Caouissin + diff --git a/questionnaires/simpsons/ddi/simpsons.xml b/questionnaires/simpsons/ddi/simpsons.xml index 383252d9c..fb76627a4 100644 --- a/questionnaires/simpsons/ddi/simpsons.xml +++ b/questionnaires/simpsons/ddi/simpsons.xml @@ -1,10 +1,7 @@ - + fr.insee - INSEE-i6vwid - 0.1.0 + INSEE-i6vwi0 + 1 Questionnaire SIMPSONS @@ -12,46 +9,46 @@ fr.insee - RessourcePackage-i6vwid - 0.1.0 + RessourcePackage-i6vwi0 + 1 fr.insee - InterviewerInstructionScheme-i6vwid - 0.1.0 + InterviewerInstructionScheme-i6vwi0 + 1 A définir fr.insee d1 - 0.1.0 + 1 comment - We're going to test your knowledge about the simpsons series.Welcome in the simspons world! + We're going to test your knowledge about the simpsons series.Welcome in the simspons world! fr.insee d11 - 0.1.0 + 1 comment For your information, the date of the last broadcast was on - øLAST_BROADCASTø + ¤LAST_BROADCAST¤ fr.insee d2 - 0.1.0 + 1 comment @@ -64,7 +61,7 @@ fr.insee d3 - 0.1.0 + 1 instruction @@ -77,7 +74,7 @@ fr.insee d4 - 0.1.0 + 1 instruction @@ -90,33 +87,33 @@ fr.insee d5 - 0.1.0 + 1 instruction - Several possible answers + Several possible answers fr.insee j4nwc63q-CI-0-II-0 - 0.1.0 + 1 warning The sum of percentages is: ¤jbcggtca-GOP¤ %. The total of - percentages must be equal to 100%. + percentages must be equal to 100%. fr.insee jbcggtca-GOP - 0.1.0 + 1 OutParameter @@ -125,52 +122,52 @@ fr.insee d10 - 0.1.0 + 1 instruction - Several answers possible: check off all the relevant boxes + Several answers possible: check off all the relevant boxes - fr.inseeFTN-INSTRUCTION-10.1.0tooltipIncluded principalities + fr.inseeFTN-INSTRUCTION-11tooltipIncluded principalities fr.insee - ControlConstructScheme-i6vwid - 0.1.0 + ControlConstructScheme-i6vwi0 + 1 fr.insee - Sequence-i6vwid - 0.1.0 + Sequence-i6vwi0 + 1 Questionnaire SIMPSONS - template + template fr.insee j6p0ti5h - 0.1.0 + 1 Sequence fr.insee - d1e101 - 0.1.0 + d1e119 + 1 IfThenElse fr.insee j6z12s2d - 0.1.0 + 1 Sequence fr.insee j6p0ti5h - 0.1.0 + 1 MODULE1 @@ -180,69 +177,69 @@ fr.insee d1 - 0.1.0 + 1 Instruction - module + module fr.insee j6p3dkx6-QC - 0.1.0 + 1 QuestionConstruct fr.insee j6p0np9q-QC - 0.1.0 + 1 QuestionConstruct fr.insee - d1e42 - 0.1.0 + d1e50 + 1 IfThenElse fr.insee j6p0s7o5 - 0.1.0 + 1 MODULE11 General knowledge of the series - submodule + submodule fr.insee j3343qhx-QC - 0.1.0 + 1 QuestionConstruct fr.insee j6q9h8tj-QC - 0.1.0 + 1 QuestionConstruct fr.insee j334cyqb-QC - 0.1.0 + 1 QuestionConstruct fr.insee j6z06z1e-QC - 0.1.0 + 1 QuestionConstruct fr.insee j3341528 - 0.1.0 + 1 MODULE2 @@ -252,208 +249,215 @@ fr.insee d2 - 0.1.0 + 1 Instruction - module + module fr.insee j3343clt-QC - 0.1.0 + 1 QuestionConstruct fr.insee j6qdfhvw-QC - 0.1.0 + 1 QuestionConstruct fr.insee j4nw5cqz-QC - 0.1.0 + 1 QuestionConstruct fr.insee j6qe0h9q - 0.1.0 + 1 MODULE3 Characters - module + module fr.insee j334akov-QC - 0.1.0 + 1 QuestionConstruct fr.insee d12-SI - 0.1.0 + 1 StatementItem fr.insee j6p29i81-QC - 0.1.0 + 1 QuestionConstruct fr.insee j6qefnga-QC - 0.1.0 + 1 QuestionConstruct fr.insee j6yzoc6g-QC - 0.1.0 + 1 QuestionConstruct fr.insee j4nw88h2 - 0.1.0 + 1 MODULE4 General questions - module + module fr.insee j6qe237q - 0.1.0 + 1 Sequence fr.insee j6qejudb - 0.1.0 + 1 Sequence fr.insee j6qeh91y - 0.1.0 + 1 Sequence fr.insee j6qe237q - 0.1.0 + 1 MODULE41 Kwik-E-Mart - submodule + submodule fr.insee j4nwc63q-QC - 0.1.0 + 1 QuestionConstruct fr.insee j4nwc63q-CI-0 - 0.1.0 + 1 ComputationItem fr.insee j6qejudb - 0.1.0 + 1 MODULE42 Clowning - submodule + submodule fr.insee j4nw0rr6-QC - 0.1.0 + 1 QuestionConstruct fr.insee j6qeh91y - 0.1.0 + 1 MODULE43 Transport - submodule + submodule fr.insee j6p2lwuj-QC - 0.1.0 + 1 QuestionConstruct fr.insee j6qfx9qe - 0.1.0 + 1 MODULE5 Favourite characters - module + module fr.insee j6qg8rc6-QC - 0.1.0 + 1 QuestionConstruct fr.insee j6z12s2d - 0.1.0 + 1 MODULE6 Comment - module + module fr.insee j6z0z3us-QC - 0.1.0 + 1 QuestionConstruct fr.insee - d1e42 - 0.1.0 + d1e50 + 1 + + A définir + + + + + hideable xpath fr.insee - d1e42-IP-1 - 0.1.0 + d1e50-IP-1 + 1 READY @@ -462,52 +466,58 @@ fr.insee j6p0np9q-QOP-jbgd3set - 0.1.0 + 1 OutParameter fr.insee - d1e42-IP-1 - 0.1.0 + d1e50-IP-1 + 1 InParameter - not( d1e42-IP-1 != '1') + not( d1e50-IP-1!= '1') fr.insee - d1e42-THEN - 0.1.0 + d1e50-THEN + 1 Sequence fr.insee - d1e42-THEN - 0.1.0 + d1e50-THEN + 1 - hideable fr.insee j6p0s7o5 - 0.1.0 + 1 Sequence fr.insee - d1e101 - 0.1.0 + d1e119 + 1 + + A définir + + + + + hideable xpath fr.insee - d1e101-IP-1 - 0.1.0 + d1e119-IP-1 + 1 READY @@ -516,315 +526,314 @@ fr.insee j6p0np9q-QOP-jbgd3set - 0.1.0 + 1 OutParameter fr.insee - d1e101-IP-1 - 0.1.0 + d1e119-IP-1 + 1 InParameter - not( d1e101-IP-1 != '1') + not( d1e119-IP-1!= '1') fr.insee - d1e101-THEN - 0.1.0 + d1e119-THEN + 1 Sequence fr.insee - d1e101-THEN - 0.1.0 + d1e119-THEN + 1 - hideable fr.insee j3341528 - 0.1.0 + 1 Sequence fr.insee j6qe0h9q - 0.1.0 + 1 Sequence fr.insee j4nw88h2 - 0.1.0 + 1 Sequence fr.insee j6qfx9qe - 0.1.0 + 1 Sequence fr.insee j6p3dkx6-QC - 0.1.0 + 1 COMMENT fr.insee j6p3dkx6 - 0.1.0 + 1 QuestionItem fr.insee j6p0np9q-QC - 0.1.0 + 1 READY fr.insee j6p0np9q - 0.1.0 + 1 QuestionItem fr.insee j3343qhx-QC - 0.1.0 + 1 PRODUCER fr.insee j3343qhx - 0.1.0 + 1 QuestionItem fr.insee j6q9h8tj-QC - 0.1.0 + 1 SEASON_NUMBER fr.insee j6q9h8tj - 0.1.0 + 1 QuestionItem fr.insee j334cyqb-QC - 0.1.0 + 1 DATEFIRST fr.insee j334cyqb - 0.1.0 + 1 QuestionItem fr.insee j6z06z1e-QC - 0.1.0 + 1 AUDIENCE_SHARE fr.insee j6z06z1e - 0.1.0 + 1 QuestionItem fr.insee j3343clt-QC - 0.1.0 + 1 CITY fr.insee j3343clt - 0.1.0 + 1 QuestionItem fr.insee j6qdfhvw-QC - 0.1.0 + 1 MAYOR fr.insee j6qdfhvw - 0.1.0 + 1 QuestionItem fr.insee j4nw5cqz-QC - 0.1.0 + 1 STATE fr.insee j4nw5cqz - 0.1.0 + 1 QuestionItem fr.insee j334akov-QC - 0.1.0 + 1 PET fr.insee j334akov - 0.1.0 + 1 QuestionGrid fr.insee j6p29i81-QC - 0.1.0 + 1 ICE_FLAVOUR fr.insee j6p29i81 - 0.1.0 + 1 QuestionGrid fr.insee j6qefnga-QC - 0.1.0 + 1 NUCLEAR_CHARACTER fr.insee j6qefnga - 0.1.0 + 1 QuestionGrid fr.insee j6yzoc6g-QC - 0.1.0 + 1 BIRTH_CHARACTER fr.insee j6yzoc6g - 0.1.0 + 1 QuestionGrid fr.insee j4nwc63q-QC - 0.1.0 + 1 PERCENTAGE_EXPENSES fr.insee j4nwc63q - 0.1.0 + 1 QuestionGrid fr.insee j4nw0rr6-QC - 0.1.0 + 1 CLOWNING fr.insee j4nw0rr6 - 0.1.0 + 1 QuestionGrid fr.insee j6p2lwuj-QC - 0.1.0 + 1 TRAVEL fr.insee j6p2lwuj - 0.1.0 + 1 QuestionGrid fr.insee j6qg8rc6-QC - 0.1.0 + 1 FAVOURITE_CHARACTERS fr.insee j6qg8rc6 - 0.1.0 + 1 QuestionGrid fr.insee j6z0z3us-QC - 0.1.0 + 1 SURVEY_COMMENT fr.insee j6z0z3us - 0.1.0 + 1 QuestionItem fr.insee j4nwc63q-CI-0 - 0.1.0 + 1 Total of percentages @@ -834,16 +843,17 @@ fr.insee j4nwc63q-CI-0-II-0 - 0.1.0 + 1 Instruction + stumblingblock xpath fr.insee j4nwc63q-CI-0-IP-1 - 0.1.0 + 1 PERCENTAGE_EXPENSES11 @@ -851,7 +861,7 @@ fr.insee j4nwc63q-CI-0-IP-2 - 0.1.0 + 1 PERCENTAGE_EXPENSES21 @@ -859,7 +869,7 @@ fr.insee j4nwc63q-CI-0-IP-3 - 0.1.0 + 1 PERCENTAGE_EXPENSES31 @@ -867,7 +877,7 @@ fr.insee j4nwc63q-CI-0-IP-4 - 0.1.0 + 1 PERCENTAGE_EXPENSES41 @@ -875,7 +885,7 @@ fr.insee j4nwc63q-CI-0-IP-5 - 0.1.0 + 1 PERCENTAGE_EXPENSES51 @@ -883,7 +893,7 @@ fr.insee j4nwc63q-CI-0-IP-6 - 0.1.0 + 1 PERCENTAGE_EXPENSES61 @@ -891,7 +901,7 @@ fr.insee j4nwc63q-CI-0-IP-7 - 0.1.0 + 1 PERCENTAGE_EXPENSES71 @@ -899,7 +909,7 @@ fr.insee j4nwc63q-CI-0-IP-8 - 0.1.0 + 1 PERCENTAGE_EXPENSES81 @@ -907,7 +917,7 @@ fr.insee j4nwc63q-CI-0-IP-9 - 0.1.0 + 1 PERCENTAGE_EXPENSES91 @@ -915,7 +925,7 @@ fr.insee j4nwc63q-CI-0-IP-10 - 0.1.0 + 1 PERCENTAGE_EXPENSES101 @@ -924,13 +934,13 @@ fr.insee j4nwc63q-QOP-jbgde5yl - 0.1.0 + 1 OutParameter fr.insee j4nwc63q-CI-0-IP-1 - 0.1.0 + 1 InParameter @@ -938,13 +948,13 @@ fr.insee j4nwc63q-QOP-jbgd2x2t - 0.1.0 + 1 OutParameter fr.insee j4nwc63q-CI-0-IP-2 - 0.1.0 + 1 InParameter @@ -952,13 +962,13 @@ fr.insee j4nwc63q-QOP-jbgdjypz - 0.1.0 + 1 OutParameter fr.insee j4nwc63q-CI-0-IP-3 - 0.1.0 + 1 InParameter @@ -966,13 +976,13 @@ fr.insee j4nwc63q-QOP-jbgdcftu - 0.1.0 + 1 OutParameter fr.insee j4nwc63q-CI-0-IP-4 - 0.1.0 + 1 InParameter @@ -980,13 +990,13 @@ fr.insee j4nwc63q-QOP-jbgdiyfe - 0.1.0 + 1 OutParameter fr.insee j4nwc63q-CI-0-IP-5 - 0.1.0 + 1 InParameter @@ -994,13 +1004,13 @@ fr.insee j4nwc63q-QOP-jbgdj1wd - 0.1.0 + 1 OutParameter fr.insee j4nwc63q-CI-0-IP-6 - 0.1.0 + 1 InParameter @@ -1008,13 +1018,13 @@ fr.insee j4nwc63q-QOP-jbgddylk - 0.1.0 + 1 OutParameter fr.insee j4nwc63q-CI-0-IP-7 - 0.1.0 + 1 InParameter @@ -1022,13 +1032,13 @@ fr.insee j4nwc63q-QOP-jbgd3jj6 - 0.1.0 + 1 OutParameter fr.insee j4nwc63q-CI-0-IP-8 - 0.1.0 + 1 InParameter @@ -1036,13 +1046,13 @@ fr.insee j4nwc63q-QOP-jbgd4w3k - 0.1.0 + 1 OutParameter fr.insee j4nwc63q-CI-0-IP-9 - 0.1.0 + 1 InParameter @@ -1050,27 +1060,27 @@ fr.insee j4nwc63q-QOP-jbgd4w4k - 0.1.0 + 1 OutParameter fr.insee j4nwc63q-CI-0-IP-10 - 0.1.0 + 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 + 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 - 0.1.0 + 1 Now we are going to know if you think that Jay is a gluton. @@ -1080,22 +1090,22 @@ fr.insee - QuestionScheme-i6vwid - 0.1.0 + QuestionScheme-i6vwi0 + 1 A définir fr.insee j6p3dkx6 - 0.1.0 + 1 COMMENT fr.insee j6p3dkx6-QOP-jbgdhaht - 0.1.0 + 1 COMMENT @@ -1104,26 +1114,26 @@ fr.insee j6p3dkx6-RDOP-jbgdhaht - 0.1.0 + 1 OutParameter fr.insee j6p3dkx6-QOP-jbgdhaht - 0.1.0 + 1 OutParameter - Before starting, do you have any comments about the Simpsons family? + Before starting, do you have any comments about the Simpsons family? fr.insee j6p3dkx6-RDOP-jbgdhaht - 0.1.0 + 1 @@ -1131,14 +1141,14 @@ fr.insee j6p0np9q - 0.1.0 + 1 READY fr.insee j6p0np9q-QOP-jbgd3set - 0.1.0 + 1 READY @@ -1147,13 +1157,13 @@ fr.insee j6p0np9q-RDOP-jbgd3set - 0.1.0 + 1 OutParameter fr.insee j6p0np9q-QOP-jbgd3set - 0.1.0 + 1 OutParameter @@ -1166,14 +1176,14 @@ fr.insee j6p0np9q-RDOP-jbgd3set - 0.1.0 + 1 fr.insee INSEE-COMMUN-CL-Booleen-1 - 0.1.0 + 1 Code @@ -1184,32 +1194,34 @@ - fr.insee - j6p6my1d - 0.1.0 - - - - If you are not ready, please go to the end of the - questionnaire - $READY != '1' - j6z12s2d - - - + + fr.insee + j6p6my1d + 1 + + + + If you are not ready, please go to the end of the + questionnaire + $READY != '1' + j6z12s2d + + + + fr.insee j3343qhx - 0.1.0 + 1 PRODUCER fr.insee j3343qhx-QOP-jbgd90cy - 0.1.0 + 1 PRODUCER @@ -1218,13 +1230,13 @@ fr.insee j3343qhx-RDOP-jbgd90cy - 0.1.0 + 1 OutParameter fr.insee j3343qhx-QOP-jbgd90cy - 0.1.0 + 1 OutParameter @@ -1237,7 +1249,7 @@ fr.insee j3343qhx-RDOP-jbgd90cy - 0.1.0 + 1 @@ -1245,14 +1257,14 @@ fr.insee j6q9h8tj - 0.1.0 + 1 SEASON_NUMBER fr.insee j6q9h8tj-QOP-jbgdjy8h - 0.1.0 + 1 SEASON_NUMBER @@ -1261,13 +1273,13 @@ fr.insee j6q9h8tj-RDOP-jbgdjy8h - 0.1.0 + 1 OutParameter fr.insee j6q9h8tj-QOP-jbgdjy8h - 0.1.0 + 1 OutParameter @@ -1281,25 +1293,25 @@ 0 99 - Decimal + Decimal fr.insee j6q9h8tj-RDOP-jbgdjy8h - 0.1.0 + 1 fr.insee j334cyqb - 0.1.0 + 1 DATEFIRST fr.insee j334cyqb-QOP-jbgdih2z - 0.1.0 + 1 DATEFIRST @@ -1308,13 +1320,13 @@ fr.insee j334cyqb-RDOP-jbgdih2z - 0.1.0 + 1 OutParameter fr.insee j334cyqb-QOP-jbgdih2z - 0.1.0 + 1 OutParameter @@ -1325,17 +1337,17 @@ fr.insee - INSEE-COMMUN-MNR-DateTimedate - 0.1.0 + INSEE-COMMUN-MNR-DateTimedate-YYYY-MM-DD + 1 ManagedDateTimeRepresentation fr.insee j334cyqb-RDOP-jbgdih2z - 0.1.0 + 1 fr.insee - INSEE-COMMUN-MNR-DateTimedate - 0.1.0 + INSEE-COMMUN-MNR-DateTimedate-YYYY-MM-DD + 1 ManagedDateTimeRepresentation @@ -1343,21 +1355,21 @@ fr.insee d11 - 0.1.0 + 1 Instruction fr.insee j6z06z1e - 0.1.0 + 1 AUDIENCE_SHARE fr.insee j6z06z1e-QOP-jbgddnrd - 0.1.0 + 1 AUDIENCE_SHARE @@ -1366,20 +1378,20 @@ fr.insee j6z06z1e-RDOP-jbgddnrd - 0.1.0 + 1 OutParameter fr.insee j6z06z1e-QOP-jbgddnrd - 0.1.0 + 1 OutParameter In your opinion, how much is the part of audience share in US for the 2016 - season? + season? @@ -1387,25 +1399,25 @@ 0 99 - Decimal + Decimal fr.insee j6z06z1e-RDOP-jbgddnrd - 0.1.0 + 1 fr.insee j3343clt - 0.1.0 + 1 CITY fr.insee j3343clt-QOP-jbgdjdkn - 0.1.0 + 1 CITY @@ -1414,13 +1426,13 @@ fr.insee j3343clt-RDOP-jbgdjdkn - 0.1.0 + 1 OutParameter fr.insee j3343clt-QOP-jbgdjdkn - 0.1.0 + 1 OutParameter @@ -1430,46 +1442,46 @@ - radio-button + radio-button fr.insee j334iumu - 0.1.0 + 1 CodeList fr.insee j3343clt-RDOP-jbgdjdkn - 0.1.0 + 1 fr.insee j334iumu - 0.1.0 + 1 CodeList - + fr.insee d3 - 0.1.0 + 1 Instruction fr.insee j6qdfhvw - 0.1.0 + 1 MAYOR fr.insee j6qdfhvw-QOP-jbgd8ghp - 0.1.0 + 1 MAYOR @@ -1478,13 +1490,13 @@ fr.insee j6qdfhvw-RDOP-jbgd8ghp - 0.1.0 + 1 OutParameter fr.insee j6qdfhvw-QOP-jbgd8ghp - 0.1.0 + 1 OutParameter @@ -1494,22 +1506,22 @@ - checkbox + checkbox fr.insee j6qdqoen - 0.1.0 + 1 CodeList fr.insee j6qdfhvw-RDOP-jbgd8ghp - 0.1.0 + 1 fr.insee j6qdqoen - 0.1.0 + 1 CodeList @@ -1519,21 +1531,21 @@ fr.insee d4 - 0.1.0 + 1 Instruction fr.insee j4nw5cqz - 0.1.0 + 1 STATE fr.insee j4nw5cqz-QOP-jbgdkd7v - 0.1.0 + 1 STATE @@ -1542,13 +1554,13 @@ fr.insee j4nw5cqz-RDOP-jbgdkd7v - 0.1.0 + 1 OutParameter fr.insee j4nw5cqz-QOP-jbgdkd7v - 0.1.0 + 1 OutParameter @@ -1558,22 +1570,22 @@ - drop-down-list + drop-down-list fr.insee j4nwo00f - 0.1.0 + 1 CodeList fr.insee j4nw5cqz-RDOP-jbgdkd7v - 0.1.0 + 1 fr.insee j4nwo00f - 0.1.0 + 1 CodeList @@ -1584,14 +1596,14 @@ fr.insee j6z0z3us - 0.1.0 + 1 SURVEY_COMMENT fr.insee j6z0z3us-QOP-jbgd6m6e - 0.1.0 + 1 SURVEY_COMMENT @@ -1600,13 +1612,13 @@ fr.insee j6z0z3us-RDOP-jbgd6m6e - 0.1.0 + 1 OutParameter fr.insee j6z0z3us-QOP-jbgd6m6e - 0.1.0 + 1 OutParameter @@ -1619,7 +1631,7 @@ fr.insee j6z0z3us-RDOP-jbgd6m6e - 0.1.0 + 1 @@ -1627,14 +1639,14 @@ fr.insee j334akov - 0.1.0 + 1 PET fr.insee j334akov-QOP-jbgd8qmn - 0.1.0 + 1 PET1 @@ -1642,7 +1654,7 @@ fr.insee j334akov-QOP-jbgd60vl - 0.1.0 + 1 PET2 @@ -1650,7 +1662,7 @@ fr.insee j334akov-QOP-jbgda2jo - 0.1.0 + 1 PET3 @@ -1658,7 +1670,7 @@ fr.insee j334akov-QOP-jbgdfssy - 0.1.0 + 1 PET4 @@ -1667,13 +1679,13 @@ fr.insee j334akov-RDOP-jbgd8qmn - 0.1.0 + 1 OutParameter fr.insee j334akov-QOP-jbgd8qmn - 0.1.0 + 1 OutParameter @@ -1681,13 +1693,13 @@ fr.insee j334akov-RDOP-jbgd60vl - 0.1.0 + 1 OutParameter fr.insee j334akov-QOP-jbgd60vl - 0.1.0 + 1 OutParameter @@ -1695,13 +1707,13 @@ fr.insee j334akov-RDOP-jbgda2jo - 0.1.0 + 1 OutParameter fr.insee j334akov-QOP-jbgda2jo - 0.1.0 + 1 OutParameter @@ -1709,13 +1721,13 @@ fr.insee j334akov-RDOP-jbgdfssy - 0.1.0 + 1 OutParameter fr.insee j334akov-QOP-jbgdfssy - 0.1.0 + 1 OutParameter @@ -1729,25 +1741,25 @@ fr.insee j335cu3c - 0.1.0 + 1 CodeList - + fr.insee j334akov-RDOP-jbgd8qmn - 0.1.0 + 1 fr.insee INSEE-COMMUN-CL-Booleen-1 - 0.1.0 + 1 Code @@ -1762,20 +1774,20 @@ - - + + fr.insee j334akov-RDOP-jbgd60vl - 0.1.0 + 1 fr.insee INSEE-COMMUN-CL-Booleen-1 - 0.1.0 + 1 Code @@ -1790,20 +1802,20 @@ - - + + fr.insee j334akov-RDOP-jbgda2jo - 0.1.0 + 1 fr.insee INSEE-COMMUN-CL-Booleen-1 - 0.1.0 + 1 Code @@ -1818,20 +1830,20 @@ - - + + fr.insee j334akov-RDOP-jbgdfssy - 0.1.0 + 1 fr.insee INSEE-COMMUN-CL-Booleen-1 - 0.1.0 + 1 Code @@ -1846,26 +1858,26 @@ - + fr.insee d5 - 0.1.0 + 1 Instruction fr.insee j6p29i81 - 0.1.0 + 1 ICE_FLAVOUR fr.insee j6p29i81-QOP-jbgdb3jx - 0.1.0 + 1 ICE_FLAVOUR1 @@ -1873,7 +1885,7 @@ fr.insee j6p29i81-QOP-jbgdb61k - 0.1.0 + 1 ICE_FLAVOUR2 @@ -1881,7 +1893,7 @@ fr.insee j6p29i81-QOP-jbgdl3kc - 0.1.0 + 1 ICE_FLAVOUR3 @@ -1889,7 +1901,7 @@ fr.insee j6p29i81-QOP-jbgdcobo - 0.1.0 + 1 ICE_FLAVOUR4 @@ -1898,13 +1910,13 @@ fr.insee j6p29i81-RDOP-jbgdb3jx - 0.1.0 + 1 OutParameter fr.insee j6p29i81-QOP-jbgdb3jx - 0.1.0 + 1 OutParameter @@ -1912,13 +1924,13 @@ fr.insee j6p29i81-RDOP-jbgdb61k - 0.1.0 + 1 OutParameter fr.insee j6p29i81-QOP-jbgdb61k - 0.1.0 + 1 OutParameter @@ -1926,13 +1938,13 @@ fr.insee j6p29i81-RDOP-jbgdl3kc - 0.1.0 + 1 OutParameter fr.insee j6p29i81-QOP-jbgdl3kc - 0.1.0 + 1 OutParameter @@ -1940,13 +1952,13 @@ fr.insee j6p29i81-RDOP-jbgdcobo - 0.1.0 + 1 OutParameter fr.insee j6p29i81-QOP-jbgdcobo - 0.1.0 + 1 OutParameter @@ -1960,30 +1972,30 @@ fr.insee j6p2mvca - 0.1.0 + 1 CodeList - + - radio-button + radio-button fr.insee jbdxh138 - 0.1.0 + 1 CodeList fr.insee j6p29i81-RDOP-jbgdb3jx - 0.1.0 + 1 fr.insee jbdxh138 - 0.1.0 + 1 CodeList @@ -1995,25 +2007,25 @@ - - + + - radio-button + radio-button fr.insee jbdxh138 - 0.1.0 + 1 CodeList fr.insee j6p29i81-RDOP-jbgdb61k - 0.1.0 + 1 fr.insee jbdxh138 - 0.1.0 + 1 CodeList @@ -2025,25 +2037,25 @@ - - + + - radio-button + radio-button fr.insee jbdxh138 - 0.1.0 + 1 CodeList fr.insee j6p29i81-RDOP-jbgdl3kc - 0.1.0 + 1 fr.insee jbdxh138 - 0.1.0 + 1 CodeList @@ -2055,25 +2067,25 @@ - - + + - radio-button + radio-button fr.insee jbdxh138 - 0.1.0 + 1 CodeList fr.insee j6p29i81-RDOP-jbgdcobo - 0.1.0 + 1 fr.insee jbdxh138 - 0.1.0 + 1 CodeList @@ -2085,20 +2097,20 @@ - + fr.insee j6qefnga - 0.1.0 + 1 NUCLEAR_CHARACTER fr.insee j6qefnga-QOP-jbgd6p0k - 0.1.0 + 1 NUCLEAR_CHARACTER1 @@ -2106,7 +2118,7 @@ fr.insee j6qefnga-QOP-jbgd9ato - 0.1.0 + 1 NUCLEAR_CHARACTER2 @@ -2114,7 +2126,7 @@ fr.insee j6qefnga-QOP-jbgd3e0p - 0.1.0 + 1 NUCLEAR_CHARACTER3 @@ -2122,7 +2134,7 @@ fr.insee j6qefnga-QOP-jbgdkxne - 0.1.0 + 1 NUCLEAR_CHARACTER4 @@ -2131,13 +2143,13 @@ fr.insee j6qefnga-RDOP-jbgd6p0k - 0.1.0 + 1 OutParameter fr.insee j6qefnga-QOP-jbgd6p0k - 0.1.0 + 1 OutParameter @@ -2145,13 +2157,13 @@ fr.insee j6qefnga-RDOP-jbgd9ato - 0.1.0 + 1 OutParameter fr.insee j6qefnga-QOP-jbgd9ato - 0.1.0 + 1 OutParameter @@ -2159,13 +2171,13 @@ fr.insee j6qefnga-RDOP-jbgd3e0p - 0.1.0 + 1 OutParameter fr.insee j6qefnga-QOP-jbgd3e0p - 0.1.0 + 1 OutParameter @@ -2173,13 +2185,13 @@ fr.insee j6qefnga-RDOP-jbgdkxne - 0.1.0 + 1 OutParameter fr.insee j6qefnga-QOP-jbgdkxne - 0.1.0 + 1 OutParameter @@ -2193,30 +2205,30 @@ fr.insee j6qeytgc - 0.1.0 + 1 CodeList - + - drop-down-list + drop-down-list fr.insee jbdxh138 - 0.1.0 + 1 CodeList fr.insee j6qefnga-RDOP-jbgd6p0k - 0.1.0 + 1 fr.insee jbdxh138 - 0.1.0 + 1 CodeList @@ -2228,25 +2240,25 @@ - - + + - drop-down-list + drop-down-list fr.insee jbdxh138 - 0.1.0 + 1 CodeList fr.insee j6qefnga-RDOP-jbgd9ato - 0.1.0 + 1 fr.insee jbdxh138 - 0.1.0 + 1 CodeList @@ -2258,25 +2270,25 @@ - - + + - drop-down-list + drop-down-list fr.insee jbdxh138 - 0.1.0 + 1 CodeList fr.insee j6qefnga-RDOP-jbgd3e0p - 0.1.0 + 1 fr.insee jbdxh138 - 0.1.0 + 1 CodeList @@ -2288,25 +2300,25 @@ - - + + - drop-down-list + drop-down-list fr.insee jbdxh138 - 0.1.0 + 1 CodeList fr.insee j6qefnga-RDOP-jbgdkxne - 0.1.0 + 1 fr.insee jbdxh138 - 0.1.0 + 1 CodeList @@ -2318,20 +2330,20 @@ - + fr.insee j6yzoc6g - 0.1.0 + 1 BIRTH_CHARACTER fr.insee j6yzoc6g-QOP-jbgd7fr6 - 0.1.0 + 1 BIRTH_CHARACTER1 @@ -2339,7 +2351,7 @@ fr.insee j6yzoc6g-QOP-jbgd5e9f - 0.1.0 + 1 BIRTH_CHARACTER2 @@ -2347,7 +2359,7 @@ fr.insee j6yzoc6g-QOP-jbgd912x - 0.1.0 + 1 BIRTH_CHARACTER3 @@ -2355,7 +2367,7 @@ fr.insee j6yzoc6g-QOP-jbgd6bdy - 0.1.0 + 1 BIRTH_CHARACTER4 @@ -2363,7 +2375,7 @@ fr.insee j6yzoc6g-QOP-jbgddyry - 0.1.0 + 1 BIRTH_CHARACTER5 @@ -2372,13 +2384,13 @@ fr.insee j6yzoc6g-RDOP-jbgd7fr6 - 0.1.0 + 1 OutParameter fr.insee j6yzoc6g-QOP-jbgd7fr6 - 0.1.0 + 1 OutParameter @@ -2386,13 +2398,13 @@ fr.insee j6yzoc6g-RDOP-jbgd5e9f - 0.1.0 + 1 OutParameter fr.insee j6yzoc6g-QOP-jbgd5e9f - 0.1.0 + 1 OutParameter @@ -2400,13 +2412,13 @@ fr.insee j6yzoc6g-RDOP-jbgd912x - 0.1.0 + 1 OutParameter fr.insee j6yzoc6g-QOP-jbgd912x - 0.1.0 + 1 OutParameter @@ -2414,13 +2426,13 @@ fr.insee j6yzoc6g-RDOP-jbgd6bdy - 0.1.0 + 1 OutParameter fr.insee j6yzoc6g-QOP-jbgd6bdy - 0.1.0 + 1 OutParameter @@ -2428,13 +2440,13 @@ fr.insee j6yzoc6g-RDOP-jbgddyry - 0.1.0 + 1 OutParameter fr.insee j6yzoc6g-QOP-jbgddyry - 0.1.0 + 1 OutParameter @@ -2448,30 +2460,30 @@ fr.insee j6z087mq - 0.1.0 + 1 CodeList - + - checkbox + checkbox fr.insee jbdxricm - 0.1.0 + 1 CodeList fr.insee j6yzoc6g-RDOP-jbgd7fr6 - 0.1.0 + 1 fr.insee jbdxricm - 0.1.0 + 1 CodeList @@ -2483,25 +2495,25 @@ - - + + - checkbox + checkbox fr.insee jbdxricm - 0.1.0 + 1 CodeList fr.insee j6yzoc6g-RDOP-jbgd5e9f - 0.1.0 + 1 fr.insee jbdxricm - 0.1.0 + 1 CodeList @@ -2513,25 +2525,25 @@ - - + + - checkbox + checkbox fr.insee jbdxricm - 0.1.0 + 1 CodeList fr.insee j6yzoc6g-RDOP-jbgd912x - 0.1.0 + 1 fr.insee jbdxricm - 0.1.0 + 1 CodeList @@ -2543,25 +2555,25 @@ - - + + - checkbox + checkbox fr.insee jbdxricm - 0.1.0 + 1 CodeList fr.insee j6yzoc6g-RDOP-jbgd6bdy - 0.1.0 + 1 fr.insee jbdxricm - 0.1.0 + 1 CodeList @@ -2573,25 +2585,25 @@ - - + + - checkbox + checkbox fr.insee jbdxricm - 0.1.0 + 1 CodeList fr.insee j6yzoc6g-RDOP-jbgddyry - 0.1.0 + 1 fr.insee jbdxricm - 0.1.0 + 1 CodeList @@ -2603,20 +2615,20 @@ - + fr.insee j4nwc63q - 0.1.0 + 1 PERCENTAGE_EXPENSES fr.insee j4nwc63q-QOP-jbgde5yl - 0.1.0 + 1 PERCENTAGE_EXPENSES11 @@ -2624,7 +2636,7 @@ fr.insee j4nwc63q-QOP-jbgd2x2t - 0.1.0 + 1 PERCENTAGE_EXPENSES21 @@ -2632,7 +2644,7 @@ fr.insee j4nwc63q-QOP-jbgdjypz - 0.1.0 + 1 PERCENTAGE_EXPENSES31 @@ -2640,7 +2652,7 @@ fr.insee j4nwc63q-QOP-jbgdcftu - 0.1.0 + 1 PERCENTAGE_EXPENSES41 @@ -2648,7 +2660,7 @@ fr.insee j4nwc63q-QOP-jbgdiyfe - 0.1.0 + 1 PERCENTAGE_EXPENSES51 @@ -2656,7 +2668,7 @@ fr.insee j4nwc63q-QOP-jbgdj1wd - 0.1.0 + 1 PERCENTAGE_EXPENSES61 @@ -2664,7 +2676,7 @@ fr.insee j4nwc63q-QOP-jbgddylk - 0.1.0 + 1 PERCENTAGE_EXPENSES71 @@ -2672,7 +2684,7 @@ fr.insee j4nwc63q-QOP-jbgd3jj6 - 0.1.0 + 1 PERCENTAGE_EXPENSES81 @@ -2680,7 +2692,7 @@ fr.insee j4nwc63q-QOP-jbgd4w3k - 0.1.0 + 1 PERCENTAGE_EXPENSES91 @@ -2688,7 +2700,7 @@ fr.insee j4nwc63q-QOP-jbgd4w4k - 0.1.0 + 1 PERCENTAGE_EXPENSES101 @@ -2697,13 +2709,13 @@ fr.insee j4nwc63q-RDOP-jbgde5yl - 0.1.0 + 1 OutParameter fr.insee j4nwc63q-QOP-jbgde5yl - 0.1.0 + 1 OutParameter @@ -2711,13 +2723,13 @@ fr.insee j4nwc63q-RDOP-jbgd2x2t - 0.1.0 + 1 OutParameter fr.insee j4nwc63q-QOP-jbgd2x2t - 0.1.0 + 1 OutParameter @@ -2725,13 +2737,13 @@ fr.insee j4nwc63q-RDOP-jbgdjypz - 0.1.0 + 1 OutParameter fr.insee j4nwc63q-QOP-jbgdjypz - 0.1.0 + 1 OutParameter @@ -2739,13 +2751,13 @@ fr.insee j4nwc63q-RDOP-jbgdcftu - 0.1.0 + 1 OutParameter fr.insee j4nwc63q-QOP-jbgdcftu - 0.1.0 + 1 OutParameter @@ -2753,13 +2765,13 @@ fr.insee j4nwc63q-RDOP-jbgdiyfe - 0.1.0 + 1 OutParameter fr.insee j4nwc63q-QOP-jbgdiyfe - 0.1.0 + 1 OutParameter @@ -2767,13 +2779,13 @@ fr.insee j4nwc63q-RDOP-jbgdj1wd - 0.1.0 + 1 OutParameter fr.insee j4nwc63q-QOP-jbgdj1wd - 0.1.0 + 1 OutParameter @@ -2781,13 +2793,13 @@ fr.insee j4nwc63q-RDOP-jbgddylk - 0.1.0 + 1 OutParameter fr.insee j4nwc63q-QOP-jbgddylk - 0.1.0 + 1 OutParameter @@ -2795,13 +2807,13 @@ fr.insee j4nwc63q-RDOP-jbgd3jj6 - 0.1.0 + 1 OutParameter fr.insee j4nwc63q-QOP-jbgd3jj6 - 0.1.0 + 1 OutParameter @@ -2809,13 +2821,13 @@ fr.insee j4nwc63q-RDOP-jbgd4w3k - 0.1.0 + 1 OutParameter fr.insee j4nwc63q-QOP-jbgd4w3k - 0.1.0 + 1 OutParameter @@ -2823,20 +2835,20 @@ fr.insee j4nwc63q-RDOP-jbgd4w4k - 0.1.0 + 1 OutParameter fr.insee j4nwc63q-QOP-jbgd4w4k - 0.1.0 + 1 OutParameter Please, specify the percentage of Jay's expenses in the Kwik-E-Mart for each - product? + product? @@ -2844,7 +2856,7 @@ fr.insee j4nwh16i - 0.1.0 + 1 CodeList @@ -2854,23 +2866,23 @@ fr.insee j4nwc63q-secondDimension-fakeCL-1 - 0.1.0 + 1 CodeList - + 0 100 - Decimal + Decimal fr.insee j4nwc63q-RDOP-jbgde5yl - 0.1.0 + 1 @@ -2879,18 +2891,18 @@ - - + + 0 100 - Decimal + Decimal fr.insee j4nwc63q-RDOP-jbgd2x2t - 0.1.0 + 1 @@ -2899,18 +2911,18 @@ - - + + 0 100 - Decimal + Decimal fr.insee j4nwc63q-RDOP-jbgdjypz - 0.1.0 + 1 @@ -2919,18 +2931,18 @@ - - + + 0 100 - Decimal + Decimal fr.insee j4nwc63q-RDOP-jbgdcftu - 0.1.0 + 1 @@ -2939,18 +2951,18 @@ - - + + 0 100 - Decimal + Decimal fr.insee j4nwc63q-RDOP-jbgdiyfe - 0.1.0 + 1 @@ -2959,18 +2971,18 @@ - - + + 0 100 - Decimal + Decimal fr.insee j4nwc63q-RDOP-jbgdj1wd - 0.1.0 + 1 @@ -2979,18 +2991,18 @@ - - + + 0 100 - Decimal + Decimal fr.insee j4nwc63q-RDOP-jbgddylk - 0.1.0 + 1 @@ -2999,18 +3011,18 @@ - - + + 0 100 - Decimal + Decimal fr.insee j4nwc63q-RDOP-jbgd3jj6 - 0.1.0 + 1 @@ -3019,18 +3031,18 @@ - - + + 0 100 - Decimal + Decimal fr.insee j4nwc63q-RDOP-jbgd4w3k - 0.1.0 + 1 @@ -3039,18 +3051,18 @@ - - + + 0 100 - Decimal + Decimal fr.insee j4nwc63q-RDOP-jbgd4w4k - 0.1.0 + 1 @@ -3059,20 +3071,20 @@ - + fr.insee j4nw0rr6 - 0.1.0 + 1 CLOWNING fr.insee j4nw0rr6-QOP-jbgd8tyr - 0.1.0 + 1 CLOWNING11 @@ -3080,7 +3092,7 @@ fr.insee j4nw0rr6-QOP-jbgdep36 - 0.1.0 + 1 CLOWNING21 @@ -3088,7 +3100,7 @@ fr.insee j4nw0rr6-QOP-jbgdjjgi - 0.1.0 + 1 CLOWNING31 @@ -3096,7 +3108,7 @@ fr.insee j4nw0rr6-QOP-jbgdgh6k - 0.1.0 + 1 CLOWNING41 @@ -3104,7 +3116,7 @@ fr.insee j4nw0rr6-QOP-jbgdit3o - 0.1.0 + 1 CLOWNING12 @@ -3112,7 +3124,7 @@ fr.insee j4nw0rr6-QOP-jbgd366k - 0.1.0 + 1 CLOWNING22 @@ -3120,7 +3132,7 @@ fr.insee j4nw0rr6-QOP-jbgdax06 - 0.1.0 + 1 CLOWNING32 @@ -3128,7 +3140,7 @@ fr.insee j4nw0rr6-QOP-jbgdfo1j - 0.1.0 + 1 CLOWNING42 @@ -3137,13 +3149,13 @@ fr.insee j4nw0rr6-RDOP-jbgd8tyr - 0.1.0 + 1 OutParameter fr.insee j4nw0rr6-QOP-jbgd8tyr - 0.1.0 + 1 OutParameter @@ -3151,13 +3163,13 @@ fr.insee j4nw0rr6-RDOP-jbgdep36 - 0.1.0 + 1 OutParameter fr.insee j4nw0rr6-QOP-jbgdep36 - 0.1.0 + 1 OutParameter @@ -3165,13 +3177,13 @@ fr.insee j4nw0rr6-RDOP-jbgdjjgi - 0.1.0 + 1 OutParameter fr.insee j4nw0rr6-QOP-jbgdjjgi - 0.1.0 + 1 OutParameter @@ -3179,13 +3191,13 @@ fr.insee j4nw0rr6-RDOP-jbgdgh6k - 0.1.0 + 1 OutParameter fr.insee j4nw0rr6-QOP-jbgdgh6k - 0.1.0 + 1 OutParameter @@ -3193,13 +3205,13 @@ fr.insee j4nw0rr6-RDOP-jbgdit3o - 0.1.0 + 1 OutParameter fr.insee j4nw0rr6-QOP-jbgdit3o - 0.1.0 + 1 OutParameter @@ -3207,13 +3219,13 @@ fr.insee j4nw0rr6-RDOP-jbgd366k - 0.1.0 + 1 OutParameter fr.insee j4nw0rr6-QOP-jbgd366k - 0.1.0 + 1 OutParameter @@ -3221,13 +3233,13 @@ fr.insee j4nw0rr6-RDOP-jbgdax06 - 0.1.0 + 1 OutParameter fr.insee j4nw0rr6-QOP-jbgdax06 - 0.1.0 + 1 OutParameter @@ -3235,19 +3247,19 @@ fr.insee j4nw0rr6-RDOP-jbgdfo1j - 0.1.0 + 1 OutParameter fr.insee j4nw0rr6-QOP-jbgdfo1j - 0.1.0 + 1 OutParameter - Who did these clownings and tell us what you remember? + Who did these clownings and tell us what you remember? @@ -3255,7 +3267,7 @@ fr.insee j77dav9b - 0.1.0 + 1 CodeList @@ -3265,30 +3277,30 @@ fr.insee j4nw0rr6-secondDimension-fakeCL-1 - 0.1.0 + 1 CodeList - + - drop-down-list + drop-down-list fr.insee jbdyh6b5 - 0.1.0 + 1 CodeList fr.insee j4nw0rr6-RDOP-jbgd8tyr - 0.1.0 + 1 fr.insee jbdyh6b5 - 0.1.0 + 1 CodeList @@ -3301,25 +3313,25 @@ - - + + - drop-down-list + drop-down-list fr.insee jbdyh6b5 - 0.1.0 + 1 CodeList fr.insee j4nw0rr6-RDOP-jbgdep36 - 0.1.0 + 1 fr.insee jbdyh6b5 - 0.1.0 + 1 CodeList @@ -3332,25 +3344,25 @@ - - + + - drop-down-list + drop-down-list fr.insee jbdyh6b5 - 0.1.0 + 1 CodeList fr.insee j4nw0rr6-RDOP-jbgdjjgi - 0.1.0 + 1 fr.insee jbdyh6b5 - 0.1.0 + 1 CodeList @@ -3363,25 +3375,25 @@ - - + + - drop-down-list + drop-down-list fr.insee jbdyh6b5 - 0.1.0 + 1 CodeList fr.insee j4nw0rr6-RDOP-jbgdgh6k - 0.1.0 + 1 fr.insee jbdyh6b5 - 0.1.0 + 1 CodeList @@ -3394,13 +3406,13 @@ - - + + fr.insee j4nw0rr6-RDOP-jbgdit3o - 0.1.0 + 1 @@ -3410,13 +3422,13 @@ - - + + fr.insee j4nw0rr6-RDOP-jbgd366k - 0.1.0 + 1 @@ -3426,13 +3438,13 @@ - - + + fr.insee j4nw0rr6-RDOP-jbgdax06 - 0.1.0 + 1 @@ -3442,13 +3454,13 @@ - - + + fr.insee j4nw0rr6-RDOP-jbgdfo1j - 0.1.0 + 1 @@ -3458,20 +3470,20 @@ - + fr.insee j6p2lwuj - 0.1.0 + 1 TRAVEL fr.insee j6p2lwuj-QOP-jbgd92mb - 0.1.0 + 1 TRAVEL11 @@ -3479,7 +3491,7 @@ fr.insee j6p2lwuj-QOP-jbgdgsat - 0.1.0 + 1 TRAVEL21 @@ -3487,7 +3499,7 @@ fr.insee j6p2lwuj-QOP-jbgdaxk2 - 0.1.0 + 1 TRAVEL31 @@ -3495,7 +3507,7 @@ fr.insee j6p2lwuj-QOP-jbgd7myn - 0.1.0 + 1 TRAVEL41 @@ -3503,7 +3515,7 @@ fr.insee j6p2lwuj-QOP-jbgdnxkt - 0.1.0 + 1 TRAVEL12 @@ -3511,7 +3523,7 @@ fr.insee j6p2lwuj-QOP-jbgd3ef5 - 0.1.0 + 1 TRAVEL22 @@ -3519,7 +3531,7 @@ fr.insee j6p2lwuj-QOP-jbgd8p1v - 0.1.0 + 1 TRAVEL32 @@ -3527,7 +3539,7 @@ fr.insee j6p2lwuj-QOP-jbgdgm0c - 0.1.0 + 1 TRAVEL42 @@ -3535,7 +3547,7 @@ fr.insee j6p2lwuj-QOP-jbgdcppc - 0.1.0 + 1 TRAVEL13 @@ -3543,7 +3555,7 @@ fr.insee j6p2lwuj-QOP-jbgd4cm6 - 0.1.0 + 1 TRAVEL23 @@ -3551,7 +3563,7 @@ fr.insee j6p2lwuj-QOP-jbgdd2lo - 0.1.0 + 1 TRAVEL33 @@ -3559,7 +3571,7 @@ fr.insee j6p2lwuj-QOP-jbgdo0ay - 0.1.0 + 1 TRAVEL43 @@ -3567,7 +3579,7 @@ fr.insee j6p2lwuj-QOP-jbgd4r2a - 0.1.0 + 1 TRAVEL14 @@ -3575,7 +3587,7 @@ fr.insee j6p2lwuj-QOP-jbgdkfpq - 0.1.0 + 1 TRAVEL24 @@ -3583,7 +3595,7 @@ fr.insee j6p2lwuj-QOP-jbgd7u52 - 0.1.0 + 1 TRAVEL34 @@ -3591,7 +3603,7 @@ fr.insee j6p2lwuj-QOP-jbgdgfwl - 0.1.0 + 1 TRAVEL44 @@ -3599,7 +3611,7 @@ fr.insee j6p2lwuj-QOP-jbgd9cff - 0.1.0 + 1 TRAVEL15 @@ -3607,7 +3619,7 @@ fr.insee j6p2lwuj-QOP-jbgddwsp - 0.1.0 + 1 TRAVEL25 @@ -3615,7 +3627,7 @@ fr.insee j6p2lwuj-QOP-jbgdncn8 - 0.1.0 + 1 TRAVEL35 @@ -3623,7 +3635,7 @@ fr.insee j6p2lwuj-QOP-jbgdnz6b - 0.1.0 + 1 TRAVEL45 @@ -3631,7 +3643,7 @@ fr.insee j6p2lwuj-QOP-jbgdiva0 - 0.1.0 + 1 TRAVEL16 @@ -3639,7 +3651,7 @@ fr.insee j6p2lwuj-QOP-jbgd7dqf - 0.1.0 + 1 TRAVEL26 @@ -3647,7 +3659,7 @@ fr.insee j6p2lwuj-QOP-jbgdnous - 0.1.0 + 1 TRAVEL36 @@ -3655,7 +3667,7 @@ fr.insee j6p2lwuj-QOP-jbgdkfcz - 0.1.0 + 1 TRAVEL46 @@ -3664,13 +3676,13 @@ fr.insee j6p2lwuj-RDOP-jbgd92mb - 0.1.0 + 1 OutParameter fr.insee j6p2lwuj-QOP-jbgd92mb - 0.1.0 + 1 OutParameter @@ -3678,13 +3690,13 @@ fr.insee j6p2lwuj-RDOP-jbgdgsat - 0.1.0 + 1 OutParameter fr.insee j6p2lwuj-QOP-jbgdgsat - 0.1.0 + 1 OutParameter @@ -3692,13 +3704,13 @@ fr.insee j6p2lwuj-RDOP-jbgdaxk2 - 0.1.0 + 1 OutParameter fr.insee j6p2lwuj-QOP-jbgdaxk2 - 0.1.0 + 1 OutParameter @@ -3706,13 +3718,13 @@ fr.insee j6p2lwuj-RDOP-jbgd7myn - 0.1.0 + 1 OutParameter fr.insee j6p2lwuj-QOP-jbgd7myn - 0.1.0 + 1 OutParameter @@ -3720,13 +3732,13 @@ fr.insee j6p2lwuj-RDOP-jbgdnxkt - 0.1.0 + 1 OutParameter fr.insee j6p2lwuj-QOP-jbgdnxkt - 0.1.0 + 1 OutParameter @@ -3734,13 +3746,13 @@ fr.insee j6p2lwuj-RDOP-jbgd3ef5 - 0.1.0 + 1 OutParameter fr.insee j6p2lwuj-QOP-jbgd3ef5 - 0.1.0 + 1 OutParameter @@ -3748,13 +3760,13 @@ fr.insee j6p2lwuj-RDOP-jbgd8p1v - 0.1.0 + 1 OutParameter fr.insee j6p2lwuj-QOP-jbgd8p1v - 0.1.0 + 1 OutParameter @@ -3762,13 +3774,13 @@ fr.insee j6p2lwuj-RDOP-jbgdgm0c - 0.1.0 + 1 OutParameter fr.insee j6p2lwuj-QOP-jbgdgm0c - 0.1.0 + 1 OutParameter @@ -3776,13 +3788,13 @@ fr.insee j6p2lwuj-RDOP-jbgdcppc - 0.1.0 + 1 OutParameter fr.insee j6p2lwuj-QOP-jbgdcppc - 0.1.0 + 1 OutParameter @@ -3790,13 +3802,13 @@ fr.insee j6p2lwuj-RDOP-jbgd4cm6 - 0.1.0 + 1 OutParameter fr.insee j6p2lwuj-QOP-jbgd4cm6 - 0.1.0 + 1 OutParameter @@ -3804,13 +3816,13 @@ fr.insee j6p2lwuj-RDOP-jbgdd2lo - 0.1.0 + 1 OutParameter fr.insee j6p2lwuj-QOP-jbgdd2lo - 0.1.0 + 1 OutParameter @@ -3818,13 +3830,13 @@ fr.insee j6p2lwuj-RDOP-jbgdo0ay - 0.1.0 + 1 OutParameter fr.insee j6p2lwuj-QOP-jbgdo0ay - 0.1.0 + 1 OutParameter @@ -3832,13 +3844,13 @@ fr.insee j6p2lwuj-RDOP-jbgd4r2a - 0.1.0 + 1 OutParameter fr.insee j6p2lwuj-QOP-jbgd4r2a - 0.1.0 + 1 OutParameter @@ -3846,13 +3858,13 @@ fr.insee j6p2lwuj-RDOP-jbgdkfpq - 0.1.0 + 1 OutParameter fr.insee j6p2lwuj-QOP-jbgdkfpq - 0.1.0 + 1 OutParameter @@ -3860,13 +3872,13 @@ fr.insee j6p2lwuj-RDOP-jbgd7u52 - 0.1.0 + 1 OutParameter fr.insee j6p2lwuj-QOP-jbgd7u52 - 0.1.0 + 1 OutParameter @@ -3874,13 +3886,13 @@ fr.insee j6p2lwuj-RDOP-jbgdgfwl - 0.1.0 + 1 OutParameter fr.insee j6p2lwuj-QOP-jbgdgfwl - 0.1.0 + 1 OutParameter @@ -3888,13 +3900,13 @@ fr.insee j6p2lwuj-RDOP-jbgd9cff - 0.1.0 + 1 OutParameter fr.insee j6p2lwuj-QOP-jbgd9cff - 0.1.0 + 1 OutParameter @@ -3902,13 +3914,13 @@ fr.insee j6p2lwuj-RDOP-jbgddwsp - 0.1.0 + 1 OutParameter fr.insee j6p2lwuj-QOP-jbgddwsp - 0.1.0 + 1 OutParameter @@ -3916,13 +3928,13 @@ fr.insee j6p2lwuj-RDOP-jbgdncn8 - 0.1.0 + 1 OutParameter fr.insee j6p2lwuj-QOP-jbgdncn8 - 0.1.0 + 1 OutParameter @@ -3930,13 +3942,13 @@ fr.insee j6p2lwuj-RDOP-jbgdnz6b - 0.1.0 + 1 OutParameter fr.insee j6p2lwuj-QOP-jbgdnz6b - 0.1.0 + 1 OutParameter @@ -3944,13 +3956,13 @@ fr.insee j6p2lwuj-RDOP-jbgdiva0 - 0.1.0 + 1 OutParameter fr.insee j6p2lwuj-QOP-jbgdiva0 - 0.1.0 + 1 OutParameter @@ -3958,13 +3970,13 @@ fr.insee j6p2lwuj-RDOP-jbgd7dqf - 0.1.0 + 1 OutParameter fr.insee j6p2lwuj-QOP-jbgd7dqf - 0.1.0 + 1 OutParameter @@ -3972,13 +3984,13 @@ fr.insee j6p2lwuj-RDOP-jbgdnous - 0.1.0 + 1 OutParameter fr.insee j6p2lwuj-QOP-jbgdnous - 0.1.0 + 1 OutParameter @@ -3986,20 +3998,20 @@ fr.insee j6p2lwuj-RDOP-jbgdkfcz - 0.1.0 + 1 OutParameter fr.insee j6p2lwuj-QOP-jbgdkfcz - 0.1.0 + 1 OutParameter Which of the following means of transport were used by the hero and in which - country? + country? @@ -4007,7 +4019,7 @@ fr.insee j6p2kivg - 0.1.0 + 1 CodeList @@ -4017,25 +4029,25 @@ fr.insee jbdye1wa - 0.1.0 + 1 CodeList - + fr.insee j6p2lwuj-RDOP-jbgd92mb - 0.1.0 + 1 fr.insee INSEE-COMMUN-CL-Booleen-1 - 0.1.0 + 1 Code @@ -4051,20 +4063,20 @@ - - + + fr.insee j6p2lwuj-RDOP-jbgdgsat - 0.1.0 + 1 fr.insee INSEE-COMMUN-CL-Booleen-1 - 0.1.0 + 1 Code @@ -4080,20 +4092,20 @@ - - + + fr.insee j6p2lwuj-RDOP-jbgdaxk2 - 0.1.0 + 1 fr.insee INSEE-COMMUN-CL-Booleen-1 - 0.1.0 + 1 Code @@ -4109,20 +4121,20 @@ - - + + fr.insee j6p2lwuj-RDOP-jbgd7myn - 0.1.0 + 1 fr.insee INSEE-COMMUN-CL-Booleen-1 - 0.1.0 + 1 Code @@ -4138,20 +4150,20 @@ - - + + fr.insee j6p2lwuj-RDOP-jbgdnxkt - 0.1.0 + 1 fr.insee INSEE-COMMUN-CL-Booleen-1 - 0.1.0 + 1 Code @@ -4167,20 +4179,20 @@ - - + + fr.insee j6p2lwuj-RDOP-jbgd3ef5 - 0.1.0 + 1 fr.insee INSEE-COMMUN-CL-Booleen-1 - 0.1.0 + 1 Code @@ -4196,20 +4208,20 @@ - - + + fr.insee j6p2lwuj-RDOP-jbgd8p1v - 0.1.0 + 1 fr.insee INSEE-COMMUN-CL-Booleen-1 - 0.1.0 + 1 Code @@ -4225,20 +4237,20 @@ - - + + fr.insee j6p2lwuj-RDOP-jbgdgm0c - 0.1.0 + 1 fr.insee INSEE-COMMUN-CL-Booleen-1 - 0.1.0 + 1 Code @@ -4254,20 +4266,20 @@ - - + + fr.insee j6p2lwuj-RDOP-jbgdcppc - 0.1.0 + 1 fr.insee INSEE-COMMUN-CL-Booleen-1 - 0.1.0 + 1 Code @@ -4283,20 +4295,20 @@ - - + + fr.insee j6p2lwuj-RDOP-jbgd4cm6 - 0.1.0 + 1 fr.insee INSEE-COMMUN-CL-Booleen-1 - 0.1.0 + 1 Code @@ -4312,20 +4324,20 @@ - - + + fr.insee j6p2lwuj-RDOP-jbgdd2lo - 0.1.0 + 1 fr.insee INSEE-COMMUN-CL-Booleen-1 - 0.1.0 + 1 Code @@ -4341,20 +4353,20 @@ - - + + fr.insee j6p2lwuj-RDOP-jbgdo0ay - 0.1.0 + 1 fr.insee INSEE-COMMUN-CL-Booleen-1 - 0.1.0 + 1 Code @@ -4370,20 +4382,20 @@ - - + + fr.insee j6p2lwuj-RDOP-jbgd4r2a - 0.1.0 + 1 fr.insee INSEE-COMMUN-CL-Booleen-1 - 0.1.0 + 1 Code @@ -4399,20 +4411,20 @@ - - + + fr.insee j6p2lwuj-RDOP-jbgdkfpq - 0.1.0 + 1 fr.insee INSEE-COMMUN-CL-Booleen-1 - 0.1.0 + 1 Code @@ -4428,20 +4440,20 @@ - - + + fr.insee j6p2lwuj-RDOP-jbgd7u52 - 0.1.0 + 1 fr.insee INSEE-COMMUN-CL-Booleen-1 - 0.1.0 + 1 Code @@ -4457,20 +4469,20 @@ - - + + fr.insee j6p2lwuj-RDOP-jbgdgfwl - 0.1.0 + 1 fr.insee INSEE-COMMUN-CL-Booleen-1 - 0.1.0 + 1 Code @@ -4486,20 +4498,20 @@ - - + + fr.insee j6p2lwuj-RDOP-jbgd9cff - 0.1.0 + 1 fr.insee INSEE-COMMUN-CL-Booleen-1 - 0.1.0 + 1 Code @@ -4515,20 +4527,20 @@ - - + + fr.insee j6p2lwuj-RDOP-jbgddwsp - 0.1.0 + 1 fr.insee INSEE-COMMUN-CL-Booleen-1 - 0.1.0 + 1 Code @@ -4544,20 +4556,20 @@ - - + + fr.insee j6p2lwuj-RDOP-jbgdncn8 - 0.1.0 + 1 fr.insee INSEE-COMMUN-CL-Booleen-1 - 0.1.0 + 1 Code @@ -4573,20 +4585,20 @@ - - + + fr.insee j6p2lwuj-RDOP-jbgdnz6b - 0.1.0 + 1 fr.insee INSEE-COMMUN-CL-Booleen-1 - 0.1.0 + 1 Code @@ -4602,20 +4614,20 @@ - - + + fr.insee j6p2lwuj-RDOP-jbgdiva0 - 0.1.0 + 1 fr.insee INSEE-COMMUN-CL-Booleen-1 - 0.1.0 + 1 Code @@ -4631,20 +4643,20 @@ - - + + fr.insee j6p2lwuj-RDOP-jbgd7dqf - 0.1.0 + 1 fr.insee INSEE-COMMUN-CL-Booleen-1 - 0.1.0 + 1 Code @@ -4660,20 +4672,20 @@ - - + + fr.insee j6p2lwuj-RDOP-jbgdnous - 0.1.0 + 1 fr.insee INSEE-COMMUN-CL-Booleen-1 - 0.1.0 + 1 Code @@ -4689,20 +4701,20 @@ - - + + fr.insee j6p2lwuj-RDOP-jbgdkfcz - 0.1.0 + 1 fr.insee INSEE-COMMUN-CL-Booleen-1 - 0.1.0 + 1 Code @@ -4718,26 +4730,26 @@ - + fr.insee d10 - 0.1.0 + 1 Instruction fr.insee j6qg8rc6 - 0.1.0 + 1 FAVOURITE_CHARACTERS fr.insee j6qg8rc6-QOP-jbgdl5jb - 0.1.0 + 1 FAVOURITE_CHARACTERS11 @@ -4745,7 +4757,7 @@ fr.insee j6qg8rc6-QOP-jbgd8lwo - 0.1.0 + 1 FAVOURITE_CHARACTERS21 @@ -4753,7 +4765,7 @@ fr.insee j6qg8rc6-QOP-jbgdbfag - 0.1.0 + 1 FAVOURITE_CHARACTERS31 @@ -4761,7 +4773,7 @@ fr.insee j6qg8rc6-QOP-jbgdlgja - 0.1.0 + 1 FAVOURITE_CHARACTERS41 @@ -4769,7 +4781,7 @@ fr.insee j6qg8rc6-QOP-jbgd745y - 0.1.0 + 1 FAVOURITE_CHARACTERS51 @@ -4777,7 +4789,7 @@ fr.insee j6qg8rc6-QOP-jbgdjkts - 0.1.0 + 1 FAVOURITE_CHARACTERS61 @@ -4785,7 +4797,7 @@ fr.insee j6qg8rc6-QOP-jbgdcax7 - 0.1.0 + 1 FAVOURITE_CHARACTERS71 @@ -4793,7 +4805,7 @@ fr.insee j6qg8rc6-QOP-jbgdjye1 - 0.1.0 + 1 FAVOURITE_CHARACTERS81 @@ -4801,7 +4813,7 @@ fr.insee j6qg8rc6-QOP-jbgd5jet - 0.1.0 + 1 FAVOURITE_CHARACTERS91 @@ -4809,7 +4821,7 @@ fr.insee j6qg8rc6-QOP-jbgdjw90 - 0.1.0 + 1 FAVOURITE_CHARACTERS101 @@ -4817,7 +4829,7 @@ fr.insee j6qg8rc6-QOP-jbgdfndq - 0.1.0 + 1 FAVOURITE_CHARACTERS12 @@ -4825,7 +4837,7 @@ fr.insee j6qg8rc6-QOP-jbgd7osi - 0.1.0 + 1 FAVOURITE_CHARACTERS22 @@ -4833,7 +4845,7 @@ fr.insee j6qg8rc6-QOP-jbgd7bnw - 0.1.0 + 1 FAVOURITE_CHARACTERS32 @@ -4841,7 +4853,7 @@ fr.insee j6qg8rc6-QOP-jbgd9k71 - 0.1.0 + 1 FAVOURITE_CHARACTERS42 @@ -4849,7 +4861,7 @@ fr.insee j6qg8rc6-QOP-jbgdimks - 0.1.0 + 1 FAVOURITE_CHARACTERS52 @@ -4857,7 +4869,7 @@ fr.insee j6qg8rc6-QOP-jbgdjquz - 0.1.0 + 1 FAVOURITE_CHARACTERS62 @@ -4865,7 +4877,7 @@ fr.insee j6qg8rc6-QOP-jbgdd2w3 - 0.1.0 + 1 FAVOURITE_CHARACTERS72 @@ -4873,7 +4885,7 @@ fr.insee j6qg8rc6-QOP-jbgdkosc - 0.1.0 + 1 FAVOURITE_CHARACTERS82 @@ -4881,7 +4893,7 @@ fr.insee j6qg8rc6-QOP-jbgdk0x4 - 0.1.0 + 1 FAVOURITE_CHARACTERS92 @@ -4889,7 +4901,7 @@ fr.insee j6qg8rc6-QOP-jbgd2wgf - 0.1.0 + 1 FAVOURITE_CHARACTERS102 @@ -4898,13 +4910,13 @@ fr.insee j6qg8rc6-RDOP-jbgdl5jb - 0.1.0 + 1 OutParameter fr.insee j6qg8rc6-QOP-jbgdl5jb - 0.1.0 + 1 OutParameter @@ -4912,13 +4924,13 @@ fr.insee j6qg8rc6-RDOP-jbgd8lwo - 0.1.0 + 1 OutParameter fr.insee j6qg8rc6-QOP-jbgd8lwo - 0.1.0 + 1 OutParameter @@ -4926,13 +4938,13 @@ fr.insee j6qg8rc6-RDOP-jbgdbfag - 0.1.0 + 1 OutParameter fr.insee j6qg8rc6-QOP-jbgdbfag - 0.1.0 + 1 OutParameter @@ -4940,13 +4952,13 @@ fr.insee j6qg8rc6-RDOP-jbgdlgja - 0.1.0 + 1 OutParameter fr.insee j6qg8rc6-QOP-jbgdlgja - 0.1.0 + 1 OutParameter @@ -4954,13 +4966,13 @@ fr.insee j6qg8rc6-RDOP-jbgd745y - 0.1.0 + 1 OutParameter fr.insee j6qg8rc6-QOP-jbgd745y - 0.1.0 + 1 OutParameter @@ -4968,13 +4980,13 @@ fr.insee j6qg8rc6-RDOP-jbgdjkts - 0.1.0 + 1 OutParameter fr.insee j6qg8rc6-QOP-jbgdjkts - 0.1.0 + 1 OutParameter @@ -4982,13 +4994,13 @@ fr.insee j6qg8rc6-RDOP-jbgdcax7 - 0.1.0 + 1 OutParameter fr.insee j6qg8rc6-QOP-jbgdcax7 - 0.1.0 + 1 OutParameter @@ -4996,13 +5008,13 @@ fr.insee j6qg8rc6-RDOP-jbgdjye1 - 0.1.0 + 1 OutParameter fr.insee j6qg8rc6-QOP-jbgdjye1 - 0.1.0 + 1 OutParameter @@ -5010,13 +5022,13 @@ fr.insee j6qg8rc6-RDOP-jbgd5jet - 0.1.0 + 1 OutParameter fr.insee j6qg8rc6-QOP-jbgd5jet - 0.1.0 + 1 OutParameter @@ -5024,13 +5036,13 @@ fr.insee j6qg8rc6-RDOP-jbgdjw90 - 0.1.0 + 1 OutParameter fr.insee j6qg8rc6-QOP-jbgdjw90 - 0.1.0 + 1 OutParameter @@ -5038,13 +5050,13 @@ fr.insee j6qg8rc6-RDOP-jbgdfndq - 0.1.0 + 1 OutParameter fr.insee j6qg8rc6-QOP-jbgdfndq - 0.1.0 + 1 OutParameter @@ -5052,13 +5064,13 @@ fr.insee j6qg8rc6-RDOP-jbgd7osi - 0.1.0 + 1 OutParameter fr.insee j6qg8rc6-QOP-jbgd7osi - 0.1.0 + 1 OutParameter @@ -5066,13 +5078,13 @@ fr.insee j6qg8rc6-RDOP-jbgd7bnw - 0.1.0 + 1 OutParameter fr.insee j6qg8rc6-QOP-jbgd7bnw - 0.1.0 + 1 OutParameter @@ -5080,13 +5092,13 @@ fr.insee j6qg8rc6-RDOP-jbgd9k71 - 0.1.0 + 1 OutParameter fr.insee j6qg8rc6-QOP-jbgd9k71 - 0.1.0 + 1 OutParameter @@ -5094,13 +5106,13 @@ fr.insee j6qg8rc6-RDOP-jbgdimks - 0.1.0 + 1 OutParameter fr.insee j6qg8rc6-QOP-jbgdimks - 0.1.0 + 1 OutParameter @@ -5108,13 +5120,13 @@ fr.insee j6qg8rc6-RDOP-jbgdjquz - 0.1.0 + 1 OutParameter fr.insee j6qg8rc6-QOP-jbgdjquz - 0.1.0 + 1 OutParameter @@ -5122,13 +5134,13 @@ fr.insee j6qg8rc6-RDOP-jbgdd2w3 - 0.1.0 + 1 OutParameter fr.insee j6qg8rc6-QOP-jbgdd2w3 - 0.1.0 + 1 OutParameter @@ -5136,13 +5148,13 @@ fr.insee j6qg8rc6-RDOP-jbgdkosc - 0.1.0 + 1 OutParameter fr.insee j6qg8rc6-QOP-jbgdkosc - 0.1.0 + 1 OutParameter @@ -5150,13 +5162,13 @@ fr.insee j6qg8rc6-RDOP-jbgdk0x4 - 0.1.0 + 1 OutParameter fr.insee j6qg8rc6-QOP-jbgdk0x4 - 0.1.0 + 1 OutParameter @@ -5164,13 +5176,13 @@ fr.insee j6qg8rc6-RDOP-jbgd2wgf - 0.1.0 + 1 OutParameter fr.insee j6qg8rc6-QOP-jbgd2wgf - 0.1.0 + 1 OutParameter @@ -5187,18 +5199,18 @@ fr.insee j6qg8rc6-secondDimension-fakeCL-1 - 0.1.0 + 1 CodeList - + fr.insee j6qg8rc6-RDOP-jbgdl5jb - 0.1.0 + 1 @@ -5208,13 +5220,13 @@ - - + + fr.insee j6qg8rc6-RDOP-jbgd8lwo - 0.1.0 + 1 @@ -5224,13 +5236,13 @@ - - + + fr.insee j6qg8rc6-RDOP-jbgdbfag - 0.1.0 + 1 @@ -5240,13 +5252,13 @@ - - + + fr.insee j6qg8rc6-RDOP-jbgdlgja - 0.1.0 + 1 @@ -5256,13 +5268,13 @@ - - + + fr.insee j6qg8rc6-RDOP-jbgd745y - 0.1.0 + 1 @@ -5272,13 +5284,13 @@ - - + + fr.insee j6qg8rc6-RDOP-jbgdjkts - 0.1.0 + 1 @@ -5288,13 +5300,13 @@ - - + + fr.insee j6qg8rc6-RDOP-jbgdcax7 - 0.1.0 + 1 @@ -5304,13 +5316,13 @@ - - + + fr.insee j6qg8rc6-RDOP-jbgdjye1 - 0.1.0 + 1 @@ -5320,13 +5332,13 @@ - - + + fr.insee j6qg8rc6-RDOP-jbgd5jet - 0.1.0 + 1 @@ -5336,13 +5348,13 @@ - - + + fr.insee j6qg8rc6-RDOP-jbgdjw90 - 0.1.0 + 1 @@ -5352,18 +5364,18 @@ - - + + 0 120 - Decimal + Decimal fr.insee j6qg8rc6-RDOP-jbgdfndq - 0.1.0 + 1 @@ -5372,18 +5384,18 @@ - - + + 0 120 - Decimal + Decimal fr.insee j6qg8rc6-RDOP-jbgd7osi - 0.1.0 + 1 @@ -5392,18 +5404,18 @@ - - + + 0 120 - Decimal + Decimal fr.insee j6qg8rc6-RDOP-jbgd7bnw - 0.1.0 + 1 @@ -5412,18 +5424,18 @@ - - + + 0 120 - Decimal + Decimal fr.insee j6qg8rc6-RDOP-jbgd9k71 - 0.1.0 + 1 @@ -5432,18 +5444,18 @@ - - + + 0 120 - Decimal + Decimal fr.insee j6qg8rc6-RDOP-jbgdimks - 0.1.0 + 1 @@ -5452,18 +5464,18 @@ - - + + 0 120 - Decimal + Decimal fr.insee j6qg8rc6-RDOP-jbgdjquz - 0.1.0 + 1 @@ -5472,18 +5484,18 @@ - - + + 0 120 - Decimal + Decimal fr.insee j6qg8rc6-RDOP-jbgdd2w3 - 0.1.0 + 1 @@ -5492,18 +5504,18 @@ - - + + 0 120 - Decimal + Decimal fr.insee j6qg8rc6-RDOP-jbgdkosc - 0.1.0 + 1 @@ -5512,18 +5524,18 @@ - - + + 0 120 - Decimal + Decimal fr.insee j6qg8rc6-RDOP-jbgdk0x4 - 0.1.0 + 1 @@ -5532,18 +5544,18 @@ - - + + 0 120 - Decimal + Decimal fr.insee j6qg8rc6-RDOP-jbgd2wgf - 0.1.0 + 1 @@ -5552,37 +5564,37 @@ - + fr.insee CategoryScheme-j334iumu - 0.1.0 + 1 TOWN fr.insee - CA-j334iumu--1 - 0.1.0 + CA-j334iumu-1 + 1 Springfield fr.insee - CA-j334iumu-0 - 0.1.0 + CA-j334iumu-2 + 1 Shelbyville fr.insee - CA-j334iumu-1 - 0.1.0 + CA-j334iumu-3 + 1 Seinfeld @@ -5591,38 +5603,38 @@ fr.insee CategoryScheme-j6qdqoen - 0.1.0 + 1 - MAYOR + MAYOR fr.insee - CA-j6qdqoen--1 - 0.1.0 + CA-j6qdqoen-1 + 1 Constance Harm fr.insee - CA-j6qdqoen-0 - 0.1.0 + CA-j6qdqoen-2 + 1 Timothy Lovejoy fr.insee - CA-j6qdqoen-1 - 0.1.0 + CA-j6qdqoen-3 + 1 Joe Quimby fr.insee - CA-j6qdqoen-2 - 0.1.0 + CA-j6qdqoen-4 + 1 Poochie @@ -5631,110 +5643,110 @@ fr.insee CategoryScheme-j4nwo00f - 0.1.0 + 1 State fr.insee - CA-j4nwo00f--1 - 0.1.0 + CA-j4nwo00f-1 + 1 Washington fr.insee - CA-j4nwo00f-0 - 0.1.0 + CA-j4nwo00f-2 + 1 Kentucky fr.insee - CA-j4nwo00f-1 - 0.1.0 + CA-j4nwo00f-3 + 1 Ohio fr.insee - CA-j4nwo00f-2 - 0.1.0 + CA-j4nwo00f-4 + 1 Maine fr.insee - CA-j4nwo00f-3 - 0.1.0 + CA-j4nwo00f-5 + 1 North Dakota fr.insee - CA-j4nwo00f-4 - 0.1.0 + CA-j4nwo00f-6 + 1 Florida fr.insee - CA-j4nwo00f-5 - 0.1.0 + CA-j4nwo00f-7 + 1 North Takoma fr.insee - CA-j4nwo00f-6 - 0.1.0 + CA-j4nwo00f-8 + 1 California fr.insee - CA-j4nwo00f-7 - 0.1.0 + CA-j4nwo00f-9 + 1 Texas fr.insee - CA-j4nwo00f-8 - 0.1.0 + CA-j4nwo00f-10 + 1 Massachusetts fr.insee - CA-j4nwo00f-9 - 0.1.0 + CA-j4nwo00f-11 + 1 Nevada fr.insee - CA-j4nwo00f-10 - 0.1.0 + CA-j4nwo00f-12 + 1 Illinois fr.insee - CA-j4nwo00f-11 - 0.1.0 + CA-j4nwo00f-13 + 1 Not in any state, you fool! @@ -5743,38 +5755,38 @@ fr.insee CategoryScheme-j335cu3c - 0.1.0 + 1 ANIMALS fr.insee - CA-j335cu3c--1 - 0.1.0 + CA-j335cu3c-1 + 1 Santa's Little Helper fr.insee - CA-j335cu3c-0 - 0.1.0 + CA-j335cu3c-2 + 1 Snowball I fr.insee - CA-j335cu3c-1 - 0.1.0 + CA-j335cu3c-3 + 1 Coltrane fr.insee - CA-j335cu3c-2 - 0.1.0 + CA-j335cu3c-4 + 1 Mojo the Helper Monkey @@ -5783,38 +5795,38 @@ fr.insee CategoryScheme-j6p2mvca - 0.1.0 + 1 Flavours fr.insee - CA-j6p2mvca--1 - 0.1.0 + CA-j6p2mvca-1 + 1 Vanilla fr.insee - CA-j6p2mvca-0 - 0.1.0 + CA-j6p2mvca-2 + 1 Strawberry fr.insee - CA-j6p2mvca-1 - 0.1.0 + CA-j6p2mvca-3 + 1 Apple fr.insee - CA-j6p2mvca-2 - 0.1.0 + CA-j6p2mvca-4 + 1 Bacon @@ -5823,22 +5835,22 @@ fr.insee CategoryScheme-jbdxh138 - 0.1.0 + 1 YESNO fr.insee - CA-jbdxh138--1 - 0.1.0 + CA-jbdxh138-1 + 1 Yes fr.insee - CA-jbdxh138-0 - 0.1.0 + CA-jbdxh138-2 + 1 No @@ -5847,38 +5859,38 @@ fr.insee CategoryScheme-j6qeytgc - 0.1.0 + 1 NUCLEAR_CHARACTERS fr.insee - CA-j6qeytgc--1 - 0.1.0 + CA-j6qeytgc-1 + 1 Charles Montgomery Burns fr.insee - CA-j6qeytgc-0 - 0.1.0 + CA-j6qeytgc-2 + 1 Carl Carlson fr.insee - CA-j6qeytgc-1 - 0.1.0 + CA-j6qeytgc-3 + 1 Otto Mann fr.insee - CA-j6qeytgc-2 - 0.1.0 + CA-j6qeytgc-4 + 1 Carl Carlson @@ -5887,46 +5899,46 @@ fr.insee CategoryScheme-j6z087mq - 0.1.0 + 1 BIRTH_CHARACTER fr.insee - CA-j6z087mq--1 - 0.1.0 + CA-j6z087mq-1 + 1 Selma Bouvier fr.insee - CA-j6z087mq-0 - 0.1.0 + CA-j6z087mq-2 + 1 Kent Brockman fr.insee - CA-j6z087mq-1 - 0.1.0 + CA-j6z087mq-3 + 1 Milhouse Van Houten fr.insee - CA-j6z087mq-2 - 0.1.0 + CA-j6z087mq-4 + 1 Nelson Muntz fr.insee - CA-j6z087mq-3 - 0.1.0 + CA-j6z087mq-5 + 1 Crazy Cat Lady @@ -5935,46 +5947,46 @@ fr.insee CategoryScheme-jbdxricm - 0.1.0 + 1 CITY_BIRTH fr.insee - CA-jbdxricm--1 - 0.1.0 + CA-jbdxricm-1 + 1 Albuquerque fr.insee - CA-jbdxricm-0 - 0.1.0 + CA-jbdxricm-2 + 1 Springfield fr.insee - CA-jbdxricm-1 - 0.1.0 + CA-jbdxricm-3 + 1 Portland fr.insee - CA-jbdxricm-2 - 0.1.0 + CA-jbdxricm-4 + 1 Shelbyville fr.insee - CA-jbdxricm-3 - 0.1.0 + CA-jbdxricm-5 + 1 Dagstuhl @@ -5983,86 +5995,86 @@ fr.insee CategoryScheme-j4nwh16i - 0.1.0 + 1 Products fr.insee - CA-j4nwh16i--1 - 0.1.0 + CA-j4nwh16i-1 + 1 Frozen products fr.insee - CA-j4nwh16i-0 - 0.1.0 + CA-j4nwh16i-2 + 1 Ice creams fr.insee - CA-j4nwh16i-1 - 0.1.0 + CA-j4nwh16i-3 + 1 Jasper Beardly fr.insee - CA-j4nwh16i-2 - 0.1.0 + CA-j4nwh16i-4 + 1 Meat fr.insee - CA-j4nwh16i-3 - 0.1.0 + CA-j4nwh16i-5 + 1 Bacon fr.insee - CA-j4nwh16i-4 - 0.1.0 + CA-j4nwh16i-6 + 1 Pork chop fr.insee - CA-j4nwh16i-5 - 0.1.0 + CA-j4nwh16i-7 + 1 Chicken fr.insee - CA-j4nwh16i-6 - 0.1.0 + CA-j4nwh16i-8 + 1 Compote fr.insee - CA-j4nwh16i-7 - 0.1.0 + CA-j4nwh16i-9 + 1 Powersauce fr.insee - CA-j4nwh16i-8 - 0.1.0 + CA-j4nwh16i-10 + 1 Other @@ -6071,38 +6083,38 @@ fr.insee CategoryScheme-j77dav9b - 0.1.0 + 1 Clownings fr.insee - CA-j77dav9b--1 - 0.1.0 + CA-j77dav9b-1 + 1 Break the windows of the whole city fr.insee - CA-j77dav9b-0 - 0.1.0 + CA-j77dav9b-2 + 1 Loose the violin of his daughter playing poker fr.insee - CA-j77dav9b-1 - 0.1.0 + CA-j77dav9b-3 + 1 Kill Mr Burns fr.insee - CA-j77dav9b-2 - 0.1.0 + CA-j77dav9b-4 + 1 Leaving a mechanical object to control the nuclear power plant @@ -6111,38 +6123,38 @@ fr.insee CategoryScheme-jbdyh6b5 - 0.1.0 + 1 Clowning_Characters fr.insee - CA-jbdyh6b5--1 - 0.1.0 + CA-jbdyh6b5-1 + 1 Jay fr.insee - CA-jbdyh6b5-0 - 0.1.0 + CA-jbdyh6b5-2 + 1 Bart fr.insee - CA-jbdyh6b5-1 - 0.1.0 + CA-jbdyh6b5-3 + 1 Krusty the clown fr.insee - CA-jbdyh6b5-2 - 0.1.0 + CA-jbdyh6b5-4 + 1 Maggie @@ -6151,38 +6163,38 @@ fr.insee CategoryScheme-j6p2kivg - 0.1.0 + 1 Means of transport fr.insee - CA-j6p2kivg--1 - 0.1.0 + CA-j6p2kivg-1 + 1 Car fr.insee - CA-j6p2kivg-0 - 0.1.0 + CA-j6p2kivg-2 + 1 Bike fr.insee - CA-j6p2kivg-1 - 0.1.0 + CA-j6p2kivg-3 + 1 Skateboard fr.insee - CA-j6p2kivg-2 - 0.1.0 + CA-j6p2kivg-4 + 1 Plane @@ -6191,54 +6203,54 @@ fr.insee CategoryScheme-jbdye1wa - 0.1.0 + 1 Country fr.insee - CA-jbdye1wa--1 - 0.1.0 + CA-jbdye1wa-1 + 1 Brazil fr.insee - CA-jbdye1wa-0 - 0.1.0 + CA-jbdye1wa-2 + 1 Canada fr.insee - CA-jbdye1wa-1 - 0.1.0 + CA-jbdye1wa-3 + 1 Japan fr.insee - CA-jbdye1wa-2 - 0.1.0 + CA-jbdye1wa-4 + 1 France fr.insee - CA-jbdye1wa-3 - 0.1.0 + CA-jbdye1wa-5 + 1 Other country fr.insee - CA-jbdye1wa-4 - 0.1.0 + CA-jbdye1wa-6 + 1 Other planet @@ -6247,14 +6259,14 @@ fr.insee CategoryScheme-j4nwc63q-secondDimension-fakeCL-1 - 0.1.0 + 1 FAKE-CODELIST-j4nwc63q-secondDimension-fakeCL-1 fr.insee - CA-j4nwc63q-secondDimension-fakeCL-1--1 - 0.1.0 + CA-j4nwc63q-secondDimension-fakeCL-1-1 + 1 Percentage @@ -6263,22 +6275,22 @@ fr.insee CategoryScheme-j4nw0rr6-secondDimension-fakeCL-1 - 0.1.0 + 1 FAKE-CODELIST-j4nw0rr6-secondDimension-fakeCL-1 fr.insee - CA-j4nw0rr6-secondDimension-fakeCL-1--1 - 0.1.0 + CA-j4nw0rr6-secondDimension-fakeCL-1-1 + 1 Clowning fr.insee - CA-j4nw0rr6-secondDimension-fakeCL-1-0 - 0.1.0 + CA-j4nw0rr6-secondDimension-fakeCL-1-2 + 1 Remember? @@ -6287,22 +6299,22 @@ fr.insee CategoryScheme-j6qg8rc6-secondDimension-fakeCL-1 - 0.1.0 + 1 FAKE-CODELIST-j6qg8rc6-secondDimension-fakeCL-1 fr.insee - CA-j6qg8rc6-secondDimension-fakeCL-1--1 - 0.1.0 + CA-j6qg8rc6-secondDimension-fakeCL-1-1 + 1 Name fr.insee - CA-j6qg8rc6-secondDimension-fakeCL-1-0 - 0.1.0 + CA-j6qg8rc6-secondDimension-fakeCL-1-2 + 1 Age @@ -6310,15 +6322,15 @@ fr.insee - CategoryScheme-i6vwid - 0.1.0 + CategoryScheme-i6vwi0 + 1 A définir fr.insee INSEE-COMMUN-CA-Booleen-1 - 0.1.0 + 1 @@ -6327,14 +6339,14 @@ fr.insee SIMPSONS-CLS - 0.1.0 + 1 SIMPSONS fr.insee j334iumu - 0.1.0 + 1 TOWN @@ -6344,36 +6356,36 @@ fr.insee - j334iumu--1 - 0.1.0 + j334iumu-1 + 1 fr.insee - CA-j334iumu--1 - 0.1.0 + CA-j334iumu-1 + 1 Category 00001 fr.insee - j334iumu-0 - 0.1.0 + j334iumu-2 + 1 fr.insee - CA-j334iumu-0 - 0.1.0 + CA-j334iumu-2 + 1 Category 00002 fr.insee - j334iumu-1 - 0.1.0 + j334iumu-3 + 1 fr.insee - CA-j334iumu-1 - 0.1.0 + CA-j334iumu-3 + 1 Category 00003 @@ -6382,9 +6394,9 @@ fr.insee j6qdqoen - 0.1.0 + 1 - MAYOR + MAYOR Regular @@ -6392,48 +6404,48 @@ fr.insee - j6qdqoen--1 - 0.1.0 + j6qdqoen-1 + 1 fr.insee - CA-j6qdqoen--1 - 0.1.0 + CA-j6qdqoen-1 + 1 Category 1 fr.insee - j6qdqoen-0 - 0.1.0 + j6qdqoen-2 + 1 fr.insee - CA-j6qdqoen-0 - 0.1.0 + CA-j6qdqoen-2 + 1 Category 2 fr.insee - j6qdqoen-1 - 0.1.0 + j6qdqoen-3 + 1 fr.insee - CA-j6qdqoen-1 - 0.1.0 + CA-j6qdqoen-3 + 1 Category 3 fr.insee - j6qdqoen-2 - 0.1.0 + j6qdqoen-4 + 1 fr.insee - CA-j6qdqoen-2 - 0.1.0 + CA-j6qdqoen-4 + 1 Category 4 @@ -6442,7 +6454,7 @@ fr.insee j4nwo00f - 0.1.0 + 1 State @@ -6452,156 +6464,156 @@ fr.insee - j4nwo00f--1 - 0.1.0 + j4nwo00f-1 + 1 fr.insee - CA-j4nwo00f--1 - 0.1.0 + CA-j4nwo00f-1 + 1 Category 1 fr.insee - j4nwo00f-0 - 0.1.0 + j4nwo00f-2 + 1 fr.insee - CA-j4nwo00f-0 - 0.1.0 + CA-j4nwo00f-2 + 1 Category 2 fr.insee - j4nwo00f-1 - 0.1.0 + j4nwo00f-3 + 1 fr.insee - CA-j4nwo00f-1 - 0.1.0 + CA-j4nwo00f-3 + 1 Category 3 fr.insee - j4nwo00f-2 - 0.1.0 + j4nwo00f-4 + 1 fr.insee - CA-j4nwo00f-2 - 0.1.0 + CA-j4nwo00f-4 + 1 Category 4 fr.insee - j4nwo00f-3 - 0.1.0 + j4nwo00f-5 + 1 fr.insee - CA-j4nwo00f-3 - 0.1.0 + CA-j4nwo00f-5 + 1 Category 5 fr.insee - j4nwo00f-4 - 0.1.0 + j4nwo00f-6 + 1 fr.insee - CA-j4nwo00f-4 - 0.1.0 + CA-j4nwo00f-6 + 1 Category 6 fr.insee - j4nwo00f-5 - 0.1.0 + j4nwo00f-7 + 1 fr.insee - CA-j4nwo00f-5 - 0.1.0 + CA-j4nwo00f-7 + 1 Category 7 fr.insee - j4nwo00f-6 - 0.1.0 + j4nwo00f-8 + 1 fr.insee - CA-j4nwo00f-6 - 0.1.0 + CA-j4nwo00f-8 + 1 Category 8 fr.insee - j4nwo00f-7 - 0.1.0 + j4nwo00f-9 + 1 fr.insee - CA-j4nwo00f-7 - 0.1.0 + CA-j4nwo00f-9 + 1 Category 9 fr.insee - j4nwo00f-8 - 0.1.0 + j4nwo00f-10 + 1 fr.insee - CA-j4nwo00f-8 - 0.1.0 + CA-j4nwo00f-10 + 1 Category 10 fr.insee - j4nwo00f-9 - 0.1.0 + j4nwo00f-11 + 1 fr.insee - CA-j4nwo00f-9 - 0.1.0 + CA-j4nwo00f-11 + 1 Category 11 fr.insee - j4nwo00f-10 - 0.1.0 + j4nwo00f-12 + 1 fr.insee - CA-j4nwo00f-10 - 0.1.0 + CA-j4nwo00f-12 + 1 Category 12 fr.insee - j4nwo00f-11 - 0.1.0 + j4nwo00f-13 + 1 fr.insee - CA-j4nwo00f-11 - 0.1.0 + CA-j4nwo00f-13 + 1 Category 13 @@ -6610,7 +6622,7 @@ fr.insee j335cu3c - 0.1.0 + 1 ANIMALS @@ -6620,48 +6632,48 @@ fr.insee - j335cu3c--1 - 0.1.0 + j335cu3c-1 + 1 fr.insee - CA-j335cu3c--1 - 0.1.0 + CA-j335cu3c-1 + 1 Category 1 fr.insee - j335cu3c-0 - 0.1.0 + j335cu3c-2 + 1 fr.insee - CA-j335cu3c-0 - 0.1.0 + CA-j335cu3c-2 + 1 Category 2 fr.insee - j335cu3c-1 - 0.1.0 + j335cu3c-3 + 1 fr.insee - CA-j335cu3c-1 - 0.1.0 + CA-j335cu3c-3 + 1 Category 3 fr.insee - j335cu3c-2 - 0.1.0 + j335cu3c-4 + 1 fr.insee - CA-j335cu3c-2 - 0.1.0 + CA-j335cu3c-4 + 1 Category 4 @@ -6670,7 +6682,7 @@ fr.insee j6p2mvca - 0.1.0 + 1 Flavours @@ -6680,48 +6692,48 @@ fr.insee - j6p2mvca--1 - 0.1.0 + j6p2mvca-1 + 1 fr.insee - CA-j6p2mvca--1 - 0.1.0 + CA-j6p2mvca-1 + 1 Category 1 fr.insee - j6p2mvca-0 - 0.1.0 + j6p2mvca-2 + 1 fr.insee - CA-j6p2mvca-0 - 0.1.0 + CA-j6p2mvca-2 + 1 Category 2 fr.insee - j6p2mvca-1 - 0.1.0 + j6p2mvca-3 + 1 fr.insee - CA-j6p2mvca-1 - 0.1.0 + CA-j6p2mvca-3 + 1 Category 3 fr.insee - j6p2mvca-2 - 0.1.0 + j6p2mvca-4 + 1 fr.insee - CA-j6p2mvca-2 - 0.1.0 + CA-j6p2mvca-4 + 1 Category 4 @@ -6730,7 +6742,7 @@ fr.insee jbdxh138 - 0.1.0 + 1 YESNO @@ -6740,24 +6752,24 @@ fr.insee - jbdxh138--1 - 0.1.0 + jbdxh138-1 + 1 fr.insee - CA-jbdxh138--1 - 0.1.0 + CA-jbdxh138-1 + 1 Category 1 fr.insee - jbdxh138-0 - 0.1.0 + jbdxh138-2 + 1 fr.insee - CA-jbdxh138-0 - 0.1.0 + CA-jbdxh138-2 + 1 Category 0 @@ -6766,7 +6778,7 @@ fr.insee j6qeytgc - 0.1.0 + 1 NUCLEAR_CHARACTERS @@ -6776,48 +6788,48 @@ fr.insee - j6qeytgc--1 - 0.1.0 + j6qeytgc-1 + 1 fr.insee - CA-j6qeytgc--1 - 0.1.0 + CA-j6qeytgc-1 + 1 Category 1 fr.insee - j6qeytgc-0 - 0.1.0 + j6qeytgc-2 + 1 fr.insee - CA-j6qeytgc-0 - 0.1.0 + CA-j6qeytgc-2 + 1 Category 2 fr.insee - j6qeytgc-1 - 0.1.0 + j6qeytgc-3 + 1 fr.insee - CA-j6qeytgc-1 - 0.1.0 + CA-j6qeytgc-3 + 1 Category 3 fr.insee - j6qeytgc-2 - 0.1.0 + j6qeytgc-4 + 1 fr.insee - CA-j6qeytgc-2 - 0.1.0 + CA-j6qeytgc-4 + 1 Category 4 @@ -6826,7 +6838,7 @@ fr.insee j6z087mq - 0.1.0 + 1 BIRTH_CHARACTER @@ -6836,60 +6848,60 @@ fr.insee - j6z087mq--1 - 0.1.0 + j6z087mq-1 + 1 fr.insee - CA-j6z087mq--1 - 0.1.0 + CA-j6z087mq-1 + 1 Category 1 fr.insee - j6z087mq-0 - 0.1.0 + j6z087mq-2 + 1 fr.insee - CA-j6z087mq-0 - 0.1.0 + CA-j6z087mq-2 + 1 Category 2 fr.insee - j6z087mq-1 - 0.1.0 + j6z087mq-3 + 1 fr.insee - CA-j6z087mq-1 - 0.1.0 + CA-j6z087mq-3 + 1 Category 3 fr.insee - j6z087mq-2 - 0.1.0 + j6z087mq-4 + 1 fr.insee - CA-j6z087mq-2 - 0.1.0 + CA-j6z087mq-4 + 1 Category 4 fr.insee - j6z087mq-3 - 0.1.0 + j6z087mq-5 + 1 fr.insee - CA-j6z087mq-3 - 0.1.0 + CA-j6z087mq-5 + 1 Category 5 @@ -6898,7 +6910,7 @@ fr.insee jbdxricm - 0.1.0 + 1 CITY_BIRTH @@ -6908,60 +6920,60 @@ fr.insee - jbdxricm--1 - 0.1.0 + jbdxricm-1 + 1 fr.insee - CA-jbdxricm--1 - 0.1.0 + CA-jbdxricm-1 + 1 Category 1 fr.insee - jbdxricm-0 - 0.1.0 + jbdxricm-2 + 1 fr.insee - CA-jbdxricm-0 - 0.1.0 + CA-jbdxricm-2 + 1 Category 2 fr.insee - jbdxricm-1 - 0.1.0 + jbdxricm-3 + 1 fr.insee - CA-jbdxricm-1 - 0.1.0 + CA-jbdxricm-3 + 1 Category 3 fr.insee - jbdxricm-2 - 0.1.0 + jbdxricm-4 + 1 fr.insee - CA-jbdxricm-2 - 0.1.0 + CA-jbdxricm-4 + 1 Category 4 fr.insee - jbdxricm-3 - 0.1.0 + jbdxricm-5 + 1 fr.insee - CA-jbdxricm-3 - 0.1.0 + CA-jbdxricm-5 + 1 Category 5 @@ -6970,7 +6982,7 @@ fr.insee j4nwh16i - 0.1.0 + 1 Products @@ -6980,35 +6992,35 @@ fr.insee - j4nwh16i--1 - 0.1.0 + j4nwh16i-1 + 1 fr.insee - CA-j4nwh16i--1 - 0.1.0 + CA-j4nwh16i-1 + 1 Category A fr.insee - j4nwh16i-0 - 0.1.0 + j4nwh16i-2 + 1 fr.insee - CA-j4nwh16i-0 - 0.1.0 + CA-j4nwh16i-2 + 1 Category A1 fr.insee - j4nwh16i-1 - 0.1.0 + j4nwh16i-3 + 1 fr.insee - CA-j4nwh16i-1 - 0.1.0 + CA-j4nwh16i-3 + 1 Category A2 @@ -7016,47 +7028,47 @@ fr.insee - j4nwh16i-2 - 0.1.0 + j4nwh16i-4 + 1 fr.insee - CA-j4nwh16i-2 - 0.1.0 + CA-j4nwh16i-4 + 1 Category B fr.insee - j4nwh16i-3 - 0.1.0 + j4nwh16i-5 + 1 fr.insee - CA-j4nwh16i-3 - 0.1.0 + CA-j4nwh16i-5 + 1 Category B1 fr.insee - j4nwh16i-4 - 0.1.0 + j4nwh16i-6 + 1 fr.insee - CA-j4nwh16i-4 - 0.1.0 + CA-j4nwh16i-6 + 1 Category B2 fr.insee - j4nwh16i-5 - 0.1.0 + j4nwh16i-7 + 1 fr.insee - CA-j4nwh16i-5 - 0.1.0 + CA-j4nwh16i-7 + 1 Category B3 @@ -7064,23 +7076,23 @@ fr.insee - j4nwh16i-6 - 0.1.0 + j4nwh16i-8 + 1 fr.insee - CA-j4nwh16i-6 - 0.1.0 + CA-j4nwh16i-8 + 1 Category C fr.insee - j4nwh16i-7 - 0.1.0 + j4nwh16i-9 + 1 fr.insee - CA-j4nwh16i-7 - 0.1.0 + CA-j4nwh16i-9 + 1 Category C1 @@ -7088,12 +7100,12 @@ fr.insee - j4nwh16i-8 - 0.1.0 + j4nwh16i-10 + 1 fr.insee - CA-j4nwh16i-8 - 0.1.0 + CA-j4nwh16i-10 + 1 Category D @@ -7102,7 +7114,7 @@ fr.insee j77dav9b - 0.1.0 + 1 Clownings @@ -7112,48 +7124,48 @@ fr.insee - j77dav9b--1 - 0.1.0 + j77dav9b-1 + 1 fr.insee - CA-j77dav9b--1 - 0.1.0 + CA-j77dav9b-1 + 1 Category 1 fr.insee - j77dav9b-0 - 0.1.0 + j77dav9b-2 + 1 fr.insee - CA-j77dav9b-0 - 0.1.0 + CA-j77dav9b-2 + 1 Category 2 fr.insee - j77dav9b-1 - 0.1.0 + j77dav9b-3 + 1 fr.insee - CA-j77dav9b-1 - 0.1.0 + CA-j77dav9b-3 + 1 Category 3 fr.insee - j77dav9b-2 - 0.1.0 + j77dav9b-4 + 1 fr.insee - CA-j77dav9b-2 - 0.1.0 + CA-j77dav9b-4 + 1 Category 4 @@ -7162,7 +7174,7 @@ fr.insee jbdyh6b5 - 0.1.0 + 1 Clowning_Characters @@ -7172,48 +7184,48 @@ fr.insee - jbdyh6b5--1 - 0.1.0 + jbdyh6b5-1 + 1 fr.insee - CA-jbdyh6b5--1 - 0.1.0 + CA-jbdyh6b5-1 + 1 Category 1 fr.insee - jbdyh6b5-0 - 0.1.0 + jbdyh6b5-2 + 1 fr.insee - CA-jbdyh6b5-0 - 0.1.0 + CA-jbdyh6b5-2 + 1 Category 2 fr.insee - jbdyh6b5-1 - 0.1.0 + jbdyh6b5-3 + 1 fr.insee - CA-jbdyh6b5-1 - 0.1.0 + CA-jbdyh6b5-3 + 1 Category 3 fr.insee - jbdyh6b5-2 - 0.1.0 + jbdyh6b5-4 + 1 fr.insee - CA-jbdyh6b5-2 - 0.1.0 + CA-jbdyh6b5-4 + 1 Category 4 @@ -7222,7 +7234,7 @@ fr.insee j6p2kivg - 0.1.0 + 1 Means of transport @@ -7232,48 +7244,48 @@ fr.insee - j6p2kivg--1 - 0.1.0 + j6p2kivg-1 + 1 fr.insee - CA-j6p2kivg--1 - 0.1.0 + CA-j6p2kivg-1 + 1 Category 1 fr.insee - j6p2kivg-0 - 0.1.0 + j6p2kivg-2 + 1 fr.insee - CA-j6p2kivg-0 - 0.1.0 + CA-j6p2kivg-2 + 1 Category 2 fr.insee - j6p2kivg-1 - 0.1.0 + j6p2kivg-3 + 1 fr.insee - CA-j6p2kivg-1 - 0.1.0 + CA-j6p2kivg-3 + 1 Category 3 fr.insee - j6p2kivg-2 - 0.1.0 + j6p2kivg-4 + 1 fr.insee - CA-j6p2kivg-2 - 0.1.0 + CA-j6p2kivg-4 + 1 Category 4 @@ -7282,7 +7294,7 @@ fr.insee jbdye1wa - 0.1.0 + 1 Country @@ -7292,72 +7304,72 @@ fr.insee - jbdye1wa--1 - 0.1.0 + jbdye1wa-1 + 1 fr.insee - CA-jbdye1wa--1 - 0.1.0 + CA-jbdye1wa-1 + 1 Category 1 fr.insee - jbdye1wa-0 - 0.1.0 + jbdye1wa-2 + 1 fr.insee - CA-jbdye1wa-0 - 0.1.0 + CA-jbdye1wa-2 + 1 Category 2 fr.insee - jbdye1wa-1 - 0.1.0 + jbdye1wa-3 + 1 fr.insee - CA-jbdye1wa-1 - 0.1.0 + CA-jbdye1wa-3 + 1 Category 3 fr.insee - jbdye1wa-2 - 0.1.0 + jbdye1wa-4 + 1 fr.insee - CA-jbdye1wa-2 - 0.1.0 + CA-jbdye1wa-4 + 1 Category 4 fr.insee - jbdye1wa-3 - 0.1.0 + jbdye1wa-5 + 1 fr.insee - CA-jbdye1wa-3 - 0.1.0 + CA-jbdye1wa-5 + 1 Category 5 fr.insee - jbdye1wa-4 - 0.1.0 + jbdye1wa-6 + 1 fr.insee - CA-jbdye1wa-4 - 0.1.0 + CA-jbdye1wa-6 + 1 Category 6 @@ -7366,7 +7378,7 @@ fr.insee j4nwc63q-secondDimension-fakeCL-1 - 0.1.0 + 1 FAKE-CODELIST-j4nwc63q-secondDimension-fakeCL-1 @@ -7376,12 +7388,12 @@ fr.insee - j4nwc63q-secondDimension-fakeCL-1--1 - 0.1.0 + j4nwc63q-secondDimension-fakeCL-1-1 + 1 fr.insee - CA-j4nwc63q-secondDimension-fakeCL-1--1 - 0.1.0 + CA-j4nwc63q-secondDimension-fakeCL-1-1 + 1 Category 1 @@ -7390,7 +7402,7 @@ fr.insee j4nw0rr6-secondDimension-fakeCL-1 - 0.1.0 + 1 FAKE-CODELIST-j4nw0rr6-secondDimension-fakeCL-1 @@ -7400,24 +7412,24 @@ fr.insee - j4nw0rr6-secondDimension-fakeCL-1--1 - 0.1.0 + j4nw0rr6-secondDimension-fakeCL-1-1 + 1 fr.insee - CA-j4nw0rr6-secondDimension-fakeCL-1--1 - 0.1.0 + CA-j4nw0rr6-secondDimension-fakeCL-1-1 + 1 Category 1 fr.insee - j4nw0rr6-secondDimension-fakeCL-1-0 - 0.1.0 + j4nw0rr6-secondDimension-fakeCL-1-2 + 1 fr.insee - CA-j4nw0rr6-secondDimension-fakeCL-1-0 - 0.1.0 + CA-j4nw0rr6-secondDimension-fakeCL-1-2 + 1 Category 2 @@ -7426,7 +7438,7 @@ fr.insee j6qg8rc6-secondDimension-fakeCL-1 - 0.1.0 + 1 FAKE-CODELIST-j6qg8rc6-secondDimension-fakeCL-1 @@ -7436,24 +7448,24 @@ fr.insee - j6qg8rc6-secondDimension-fakeCL-1--1 - 0.1.0 + j6qg8rc6-secondDimension-fakeCL-1-1 + 1 fr.insee - CA-j6qg8rc6-secondDimension-fakeCL-1--1 - 0.1.0 + CA-j6qg8rc6-secondDimension-fakeCL-1-1 + 1 Category 1 fr.insee - j6qg8rc6-secondDimension-fakeCL-1-0 - 0.1.0 + j6qg8rc6-secondDimension-fakeCL-1-2 + 1 fr.insee - CA-j6qg8rc6-secondDimension-fakeCL-1-0 - 0.1.0 + CA-j6qg8rc6-secondDimension-fakeCL-1-2 + 1 Category 2 @@ -7462,7 +7474,7 @@ fr.insee INSEE-COMMUN-CL-Booleen - 0.1.0 + 1 Booleen @@ -7473,11 +7485,11 @@ fr.insee INSEE-COMMUN-CL-Booleen-1 - 0.1.0 + 1 fr.insee INSEE-COMMUN-CA-Booleen-1 - 0.1.0 + 1 Category 1 @@ -7486,231 +7498,348 @@ fr.insee - VariableScheme-i6vwid - 0.1.0 + 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 - 0.1.0 + 1 COMMENT - COMMENT label + COMMENT label fr.insee j6p3dkx6-QOP-jbgdhaht - 0.1.0 + 1 OutParameter fr.insee j6p3dkx6 - 0.1.0 + 1 QuestionItem - + + + fr.insee jbcgm0ip - 0.1.0 + 1 READY - READY label + READY label fr.insee j6p0np9q-QOP-jbgd3set - 0.1.0 + 1 OutParameter fr.insee j6p0np9q - 0.1.0 + 1 QuestionItem - + + + + + + fr.insee + INSEE-COMMUN-CL-Booleen-1 + 1 + Code + + + + + fr.insee jbcgf11f - 0.1.0 + 1 PRODUCER - PRODUCER label + PRODUCER label fr.insee j3343qhx-QOP-jbgd90cy - 0.1.0 + 1 OutParameter fr.insee j3343qhx - 0.1.0 + 1 QuestionItem - + + + fr.insee jbcgcy2x - 0.1.0 + 1 SEASON_NUMBER - SEASON_NUMBER label + SEASON_NUMBER label fr.insee j6q9h8tj-QOP-jbgdjy8h - 0.1.0 + 1 OutParameter fr.insee j6q9h8tj - 0.1.0 + 1 QuestionItem - + + + + 0 + 99 + + Decimal + + fr.insee jbcgbg33 - 0.1.0 + 1 DATEFIRST - DATEFIRST label + DATEFIRST label fr.insee j334cyqb-QOP-jbgdih2z - 0.1.0 + 1 OutParameter fr.insee j334cyqb - 0.1.0 + 1 QuestionItem - + + + fr.insee + INSEE-COMMUN-MNR-DateTimedate-YYYY-MM-DD + 1 + ManagedDateTimeRepresentation + + fr.insee jbcgieyw - 0.1.0 + 1 AUDIENCE_SHARE - AUDIENCE_SHARE label + AUDIENCE_SHARE label fr.insee j6z06z1e-QOP-jbgddnrd - 0.1.0 + 1 OutParameter fr.insee j6z06z1e - 0.1.0 + 1 QuestionItem - + + + + 0 + 99 + + Decimal + + fr.insee jbcgasbh - 0.1.0 + 1 CITY - CITY label + CITY label fr.insee j3343clt-QOP-jbgdjdkn - 0.1.0 + 1 OutParameter fr.insee j3343clt - 0.1.0 + 1 QuestionItem - + + + + fr.insee + j334iumu + 1 + CodeList + + + fr.insee jbcg9yr6 - 0.1.0 + 1 MAYOR - MAYOR label + MAYOR label fr.insee j6qdfhvw-QOP-jbgd8ghp - 0.1.0 + 1 OutParameter fr.insee j6qdfhvw - 0.1.0 + 1 QuestionItem - + + + + fr.insee + j6qdqoen + 1 + CodeList + + + fr.insee jbcgpija - 0.1.0 + 1 STATE - STATE label + STATE label fr.insee j4nw5cqz-QOP-jbgdkd7v - 0.1.0 + 1 OutParameter fr.insee j4nw5cqz - 0.1.0 + 1 QuestionItem - + + + + fr.insee + j4nwo00f + 1 + CodeList + + + fr.insee jbdxewlq - 0.1.0 + 1 PET1 @@ -7720,21 +7849,34 @@ fr.insee j334akov-QOP-jbgd8qmn - 0.1.0 + 1 OutParameter fr.insee j334akov - 0.1.0 + 1 QuestionGrid - + + + + + + fr.insee + INSEE-COMMUN-CL-Booleen-1 + 1 + Code + + + + + fr.insee jbdxjmst - 0.1.0 + 1 PET2 @@ -7744,21 +7886,34 @@ fr.insee j334akov-QOP-jbgd60vl - 0.1.0 + 1 OutParameter fr.insee j334akov - 0.1.0 + 1 QuestionGrid - + + + + + + fr.insee + INSEE-COMMUN-CL-Booleen-1 + 1 + Code + + + + + fr.insee jbdxjuay - 0.1.0 + 1 PET3 @@ -7768,21 +7923,34 @@ fr.insee j334akov-QOP-jbgda2jo - 0.1.0 + 1 OutParameter fr.insee j334akov - 0.1.0 + 1 QuestionGrid - + + + + + + fr.insee + INSEE-COMMUN-CL-Booleen-1 + 1 + Code + + + + + fr.insee jbdxniuw - 0.1.0 + 1 PET4 @@ -7792,21 +7960,34 @@ fr.insee j334akov-QOP-jbgdfssy - 0.1.0 + 1 OutParameter fr.insee j334akov - 0.1.0 + 1 QuestionGrid - + + + + + + fr.insee + INSEE-COMMUN-CL-Booleen-1 + 1 + Code + + + + + fr.insee jbdxtl1d - 0.1.0 + 1 ICE_FLAVOUR1 @@ -7816,21 +7997,30 @@ fr.insee j6p29i81-QOP-jbgdb3jx - 0.1.0 + 1 OutParameter fr.insee j6p29i81 - 0.1.0 + 1 QuestionGrid - + + + + fr.insee + jbdxh138 + 1 + CodeList + + + fr.insee jbdxvai9 - 0.1.0 + 1 ICE_FLAVOUR2 @@ -7840,21 +8030,30 @@ fr.insee j6p29i81-QOP-jbgdb61k - 0.1.0 + 1 OutParameter fr.insee j6p29i81 - 0.1.0 + 1 QuestionGrid - + + + + fr.insee + jbdxh138 + 1 + CodeList + + + fr.insee jbdxpltw - 0.1.0 + 1 ICE_FLAVOUR3 @@ -7864,21 +8063,30 @@ fr.insee j6p29i81-QOP-jbgdl3kc - 0.1.0 + 1 OutParameter fr.insee j6p29i81 - 0.1.0 + 1 QuestionGrid - + + + + fr.insee + jbdxh138 + 1 + CodeList + + + fr.insee jbdxzx2x - 0.1.0 + 1 ICE_FLAVOUR4 @@ -7888,21 +8096,30 @@ fr.insee j6p29i81-QOP-jbgdcobo - 0.1.0 + 1 OutParameter fr.insee j6p29i81 - 0.1.0 + 1 QuestionGrid - + + + + fr.insee + jbdxh138 + 1 + CodeList + + + fr.insee jbdy4nhp - 0.1.0 + 1 NUCLEAR_CHARACTER1 @@ -7912,21 +8129,30 @@ fr.insee j6qefnga-QOP-jbgd6p0k - 0.1.0 + 1 OutParameter fr.insee j6qefnga - 0.1.0 + 1 QuestionGrid - + + + + fr.insee + jbdxh138 + 1 + CodeList + + + fr.insee jbdxtanu - 0.1.0 + 1 NUCLEAR_CHARACTER2 @@ -7936,21 +8162,30 @@ fr.insee j6qefnga-QOP-jbgd9ato - 0.1.0 + 1 OutParameter fr.insee j6qefnga - 0.1.0 + 1 QuestionGrid - + + + + fr.insee + jbdxh138 + 1 + CodeList + + + fr.insee jbdy25if - 0.1.0 + 1 NUCLEAR_CHARACTER3 @@ -7960,21 +8195,30 @@ fr.insee j6qefnga-QOP-jbgd3e0p - 0.1.0 + 1 OutParameter fr.insee j6qefnga - 0.1.0 + 1 QuestionGrid - + + + + fr.insee + jbdxh138 + 1 + CodeList + + + fr.insee jbdxvta8 - 0.1.0 + 1 NUCLEAR_CHARACTER4 @@ -7984,21 +8228,30 @@ fr.insee j6qefnga-QOP-jbgdkxne - 0.1.0 + 1 OutParameter fr.insee j6qefnga - 0.1.0 + 1 QuestionGrid - + + + + fr.insee + jbdxh138 + 1 + CodeList + + + fr.insee jbdy3nh7 - 0.1.0 + 1 BIRTH_CHARACTER1 @@ -8008,21 +8261,30 @@ fr.insee j6yzoc6g-QOP-jbgd7fr6 - 0.1.0 + 1 OutParameter fr.insee j6yzoc6g - 0.1.0 + 1 QuestionGrid - + + + + fr.insee + jbdxricm + 1 + CodeList + + + fr.insee jbdy6lk3 - 0.1.0 + 1 BIRTH_CHARACTER2 @@ -8032,21 +8294,30 @@ fr.insee j6yzoc6g-QOP-jbgd5e9f - 0.1.0 + 1 OutParameter fr.insee j6yzoc6g - 0.1.0 + 1 QuestionGrid - + + + + fr.insee + jbdxricm + 1 + CodeList + + + fr.insee jbdxsby0 - 0.1.0 + 1 BIRTH_CHARACTER3 @@ -8056,21 +8327,30 @@ fr.insee j6yzoc6g-QOP-jbgd912x - 0.1.0 + 1 OutParameter fr.insee j6yzoc6g - 0.1.0 + 1 QuestionGrid - + + + + fr.insee + jbdxricm + 1 + CodeList + + + fr.insee jbdy7sra - 0.1.0 + 1 BIRTH_CHARACTER4 @@ -8080,21 +8360,30 @@ fr.insee j6yzoc6g-QOP-jbgd6bdy - 0.1.0 + 1 OutParameter fr.insee j6yzoc6g - 0.1.0 + 1 QuestionGrid - + + + + fr.insee + jbdxricm + 1 + CodeList + + + fr.insee jbdy2wyl - 0.1.0 + 1 BIRTH_CHARACTER5 @@ -8104,21 +8393,30 @@ fr.insee j6yzoc6g-QOP-jbgddyry - 0.1.0 + 1 OutParameter fr.insee j6yzoc6g - 0.1.0 + 1 QuestionGrid - + + + + fr.insee + jbdxricm + 1 + CodeList + + + fr.insee jbgdnfk7 - 0.1.0 + 1 PERCENTAGE_EXPENSES11 @@ -8128,23 +8426,30 @@ fr.insee j4nwc63q-QOP-jbgde5yl - 0.1.0 + 1 OutParameter fr.insee j4nwc63q - 0.1.0 + 1 QuestionGrid - % + + % + + 0 + 100 + + Decimal + fr.insee jbgdje4w - 0.1.0 + 1 PERCENTAGE_EXPENSES21 @@ -8154,23 +8459,30 @@ fr.insee j4nwc63q-QOP-jbgd2x2t - 0.1.0 + 1 OutParameter fr.insee j4nwc63q - 0.1.0 + 1 QuestionGrid - % + + % + + 0 + 100 + + Decimal + fr.insee jbgdlth7 - 0.1.0 + 1 PERCENTAGE_EXPENSES31 @@ -8180,23 +8492,30 @@ fr.insee j4nwc63q-QOP-jbgdjypz - 0.1.0 + 1 OutParameter fr.insee j4nwc63q - 0.1.0 + 1 QuestionGrid - % + + % + + 0 + 100 + + Decimal + fr.insee jbgdelbl - 0.1.0 + 1 PERCENTAGE_EXPENSES41 @@ -8206,23 +8525,30 @@ fr.insee j4nwc63q-QOP-jbgdcftu - 0.1.0 + 1 OutParameter fr.insee j4nwc63q - 0.1.0 + 1 QuestionGrid - % + + % + + 0 + 100 + + Decimal + fr.insee jbgd95jq - 0.1.0 + 1 PERCENTAGE_EXPENSES51 @@ -8232,23 +8558,30 @@ fr.insee j4nwc63q-QOP-jbgdiyfe - 0.1.0 + 1 OutParameter fr.insee j4nwc63q - 0.1.0 + 1 QuestionGrid - % + + % + + 0 + 100 + + Decimal + fr.insee jbgdadd9 - 0.1.0 + 1 PERCENTAGE_EXPENSES61 @@ -8258,23 +8591,30 @@ fr.insee j4nwc63q-QOP-jbgdj1wd - 0.1.0 + 1 OutParameter fr.insee j4nwc63q - 0.1.0 + 1 QuestionGrid - % + + % + + 0 + 100 + + Decimal + fr.insee jbgdlwzk - 0.1.0 + 1 PERCENTAGE_EXPENSES71 @@ -8284,23 +8624,30 @@ fr.insee j4nwc63q-QOP-jbgddylk - 0.1.0 + 1 OutParameter fr.insee j4nwc63q - 0.1.0 + 1 QuestionGrid - % + + % + + 0 + 100 + + Decimal + fr.insee jbgdfz77 - 0.1.0 + 1 PERCENTAGE_EXPENSES81 @@ -8310,23 +8657,30 @@ fr.insee j4nwc63q-QOP-jbgd3jj6 - 0.1.0 + 1 OutParameter fr.insee j4nwc63q - 0.1.0 + 1 QuestionGrid - % + + % + + 0 + 100 + + Decimal + fr.insee jbgdepx6 - 0.1.0 + 1 PERCENTAGE_EXPENSES91 @@ -8336,23 +8690,30 @@ fr.insee j4nwc63q-QOP-jbgd4w3k - 0.1.0 + 1 OutParameter fr.insee j4nwc63q - 0.1.0 + 1 QuestionGrid - % + + % + + 0 + 100 + + Decimal + fr.insee jbgdepx7 - 0.1.0 + 1 PERCENTAGE_EXPENSES101 @@ -8362,23 +8723,30 @@ fr.insee j4nwc63q-QOP-jbgd4w4k - 0.1.0 + 1 OutParameter fr.insee j4nwc63q - 0.1.0 + 1 QuestionGrid - % + + % + + 0 + 100 + + Decimal + fr.insee jbgd9vqv - 0.1.0 + 1 CLOWNING11 @@ -8388,45 +8756,63 @@ fr.insee j4nw0rr6-QOP-jbgd8tyr - 0.1.0 + 1 OutParameter fr.insee j4nw0rr6 - 0.1.0 + 1 QuestionGrid - + + + + fr.insee + jbdyh6b5 + 1 + CodeList + + + fr.insee jbgden0i - 0.1.0 + 1 CLOWNING21 - Loose the violin of his daughter playing poker-Clowning + Loose the violin of his daughter playing poker-Clowning fr.insee j4nw0rr6-QOP-jbgdep36 - 0.1.0 + 1 OutParameter fr.insee j4nw0rr6 - 0.1.0 + 1 QuestionGrid - + + + + fr.insee + jbdyh6b5 + 1 + CodeList + + + fr.insee jbgdndju - 0.1.0 + 1 CLOWNING31 @@ -8436,21 +8822,30 @@ fr.insee j4nw0rr6-QOP-jbgdjjgi - 0.1.0 + 1 OutParameter fr.insee j4nw0rr6 - 0.1.0 + 1 QuestionGrid - + + + + fr.insee + jbdyh6b5 + 1 + CodeList + + + fr.insee jbgdfwg9 - 0.1.0 + 1 CLOWNING41 @@ -8460,21 +8855,30 @@ fr.insee j4nw0rr6-QOP-jbgdgh6k - 0.1.0 + 1 OutParameter fr.insee j4nw0rr6 - 0.1.0 + 1 QuestionGrid - + + + + fr.insee + jbdyh6b5 + 1 + CodeList + + + fr.insee jbgdd3ky - 0.1.0 + 1 CLOWNING12 @@ -8484,45 +8888,49 @@ fr.insee j4nw0rr6-QOP-jbgdit3o - 0.1.0 + 1 OutParameter fr.insee j4nw0rr6 - 0.1.0 + 1 QuestionGrid - + + + fr.insee jbgdm9lm - 0.1.0 + 1 CLOWNING22 - Loose the violin of his daughter playing poker-Remember? + Loose the violin of his daughter playing poker-Remember? fr.insee j4nw0rr6-QOP-jbgd366k - 0.1.0 + 1 OutParameter fr.insee j4nw0rr6 - 0.1.0 + 1 QuestionGrid - + + + fr.insee jbgdcdhv - 0.1.0 + 1 CLOWNING32 @@ -8532,21 +8940,23 @@ fr.insee j4nw0rr6-QOP-jbgdax06 - 0.1.0 + 1 OutParameter fr.insee j4nw0rr6 - 0.1.0 + 1 QuestionGrid - + + + fr.insee jbgdjlit - 0.1.0 + 1 CLOWNING42 @@ -8556,21 +8966,23 @@ fr.insee j4nw0rr6-QOP-jbgdfo1j - 0.1.0 + 1 OutParameter fr.insee j4nw0rr6 - 0.1.0 + 1 QuestionGrid - + + + fr.insee jbgd1zxu - 0.1.0 + 1 TRAVEL11 @@ -8580,21 +8992,34 @@ fr.insee j6p2lwuj-QOP-jbgd92mb - 0.1.0 + 1 OutParameter fr.insee j6p2lwuj - 0.1.0 + 1 QuestionGrid - + + + + + + fr.insee + INSEE-COMMUN-CL-Booleen-1 + 1 + Code + + + + + fr.insee jbgd8lfs - 0.1.0 + 1 TRAVEL21 @@ -8604,21 +9029,34 @@ fr.insee j6p2lwuj-QOP-jbgdgsat - 0.1.0 + 1 OutParameter fr.insee j6p2lwuj - 0.1.0 + 1 QuestionGrid - + + + + + + fr.insee + INSEE-COMMUN-CL-Booleen-1 + 1 + Code + + + + + fr.insee jbgd56qo - 0.1.0 + 1 TRAVEL31 @@ -8628,21 +9066,34 @@ fr.insee j6p2lwuj-QOP-jbgdaxk2 - 0.1.0 + 1 OutParameter fr.insee j6p2lwuj - 0.1.0 + 1 QuestionGrid - + + + + + + fr.insee + INSEE-COMMUN-CL-Booleen-1 + 1 + Code + + + + + fr.insee jbgd4wu8 - 0.1.0 + 1 TRAVEL41 @@ -8652,21 +9103,34 @@ fr.insee j6p2lwuj-QOP-jbgd7myn - 0.1.0 + 1 OutParameter fr.insee j6p2lwuj - 0.1.0 + 1 QuestionGrid - + + + + + + fr.insee + INSEE-COMMUN-CL-Booleen-1 + 1 + Code + + + + + fr.insee jbgdak6h - 0.1.0 + 1 TRAVEL12 @@ -8676,21 +9140,34 @@ fr.insee j6p2lwuj-QOP-jbgdnxkt - 0.1.0 + 1 OutParameter fr.insee j6p2lwuj - 0.1.0 + 1 QuestionGrid - + + + + + + fr.insee + INSEE-COMMUN-CL-Booleen-1 + 1 + Code + + + + + fr.insee jbgdmsy4 - 0.1.0 + 1 TRAVEL22 @@ -8700,21 +9177,34 @@ fr.insee j6p2lwuj-QOP-jbgd3ef5 - 0.1.0 + 1 OutParameter fr.insee j6p2lwuj - 0.1.0 + 1 QuestionGrid - + + + + + + fr.insee + INSEE-COMMUN-CL-Booleen-1 + 1 + Code + + + + + fr.insee jbgd2zlu - 0.1.0 + 1 TRAVEL32 @@ -8724,21 +9214,34 @@ fr.insee j6p2lwuj-QOP-jbgd8p1v - 0.1.0 + 1 OutParameter fr.insee j6p2lwuj - 0.1.0 + 1 QuestionGrid - + + + + + + fr.insee + INSEE-COMMUN-CL-Booleen-1 + 1 + Code + + + + + fr.insee jbgd6v73 - 0.1.0 + 1 TRAVEL42 @@ -8748,21 +9251,34 @@ fr.insee j6p2lwuj-QOP-jbgdgm0c - 0.1.0 + 1 OutParameter fr.insee j6p2lwuj - 0.1.0 + 1 QuestionGrid - + + + + + + fr.insee + INSEE-COMMUN-CL-Booleen-1 + 1 + Code + + + + + fr.insee jbgdf5fg - 0.1.0 + 1 TRAVEL13 @@ -8772,21 +9288,34 @@ fr.insee j6p2lwuj-QOP-jbgdcppc - 0.1.0 + 1 OutParameter fr.insee j6p2lwuj - 0.1.0 + 1 QuestionGrid - + + + + + + fr.insee + INSEE-COMMUN-CL-Booleen-1 + 1 + Code + + + + + fr.insee jbgd2xg0 - 0.1.0 + 1 TRAVEL23 @@ -8796,21 +9325,34 @@ fr.insee j6p2lwuj-QOP-jbgd4cm6 - 0.1.0 + 1 OutParameter fr.insee j6p2lwuj - 0.1.0 + 1 QuestionGrid - + + + + + + fr.insee + INSEE-COMMUN-CL-Booleen-1 + 1 + Code + + + + + fr.insee jbgdc06l - 0.1.0 + 1 TRAVEL33 @@ -8820,21 +9362,34 @@ fr.insee j6p2lwuj-QOP-jbgdd2lo - 0.1.0 + 1 OutParameter fr.insee j6p2lwuj - 0.1.0 + 1 QuestionGrid - + + + + + + fr.insee + INSEE-COMMUN-CL-Booleen-1 + 1 + Code + + + + + fr.insee jbgdb8i9 - 0.1.0 + 1 TRAVEL43 @@ -8844,21 +9399,34 @@ fr.insee j6p2lwuj-QOP-jbgdo0ay - 0.1.0 + 1 OutParameter fr.insee j6p2lwuj - 0.1.0 + 1 QuestionGrid - + + + + + + fr.insee + INSEE-COMMUN-CL-Booleen-1 + 1 + Code + + + + + fr.insee jbgdhzve - 0.1.0 + 1 TRAVEL14 @@ -8868,21 +9436,34 @@ fr.insee j6p2lwuj-QOP-jbgd4r2a - 0.1.0 + 1 OutParameter fr.insee j6p2lwuj - 0.1.0 + 1 QuestionGrid - + + + + + + fr.insee + INSEE-COMMUN-CL-Booleen-1 + 1 + Code + + + + + fr.insee jbgd93ks - 0.1.0 + 1 TRAVEL24 @@ -8892,21 +9473,34 @@ fr.insee j6p2lwuj-QOP-jbgdkfpq - 0.1.0 + 1 OutParameter fr.insee j6p2lwuj - 0.1.0 + 1 QuestionGrid - + + + + + + fr.insee + INSEE-COMMUN-CL-Booleen-1 + 1 + Code + + + + + fr.insee jbgdfw7h - 0.1.0 + 1 TRAVEL34 @@ -8916,21 +9510,34 @@ fr.insee j6p2lwuj-QOP-jbgd7u52 - 0.1.0 + 1 OutParameter fr.insee j6p2lwuj - 0.1.0 + 1 QuestionGrid - + + + + + + fr.insee + INSEE-COMMUN-CL-Booleen-1 + 1 + Code + + + + + fr.insee jbgdfavn - 0.1.0 + 1 TRAVEL44 @@ -8940,21 +9547,34 @@ fr.insee j6p2lwuj-QOP-jbgdgfwl - 0.1.0 + 1 OutParameter fr.insee j6p2lwuj - 0.1.0 + 1 QuestionGrid - + + + + + + fr.insee + INSEE-COMMUN-CL-Booleen-1 + 1 + Code + + + + + fr.insee jbgdc199 - 0.1.0 + 1 TRAVEL15 @@ -8964,21 +9584,34 @@ fr.insee j6p2lwuj-QOP-jbgd9cff - 0.1.0 + 1 OutParameter fr.insee j6p2lwuj - 0.1.0 + 1 QuestionGrid - + + + + + + fr.insee + INSEE-COMMUN-CL-Booleen-1 + 1 + Code + + + + + fr.insee jbgdfqph - 0.1.0 + 1 TRAVEL25 @@ -8988,21 +9621,34 @@ fr.insee j6p2lwuj-QOP-jbgddwsp - 0.1.0 + 1 OutParameter fr.insee j6p2lwuj - 0.1.0 + 1 QuestionGrid - + + + + + + fr.insee + INSEE-COMMUN-CL-Booleen-1 + 1 + Code + + + + + fr.insee jbgd8r0n - 0.1.0 + 1 TRAVEL35 @@ -9012,21 +9658,34 @@ fr.insee j6p2lwuj-QOP-jbgdncn8 - 0.1.0 + 1 OutParameter fr.insee j6p2lwuj - 0.1.0 + 1 QuestionGrid - + + + + + + fr.insee + INSEE-COMMUN-CL-Booleen-1 + 1 + Code + + + + + fr.insee jbgd3aqk - 0.1.0 + 1 TRAVEL45 @@ -9036,21 +9695,34 @@ fr.insee j6p2lwuj-QOP-jbgdnz6b - 0.1.0 + 1 OutParameter fr.insee j6p2lwuj - 0.1.0 + 1 QuestionGrid - + + + + + + fr.insee + INSEE-COMMUN-CL-Booleen-1 + 1 + Code + + + + + fr.insee jbgdltql - 0.1.0 + 1 TRAVEL16 @@ -9060,21 +9732,34 @@ fr.insee j6p2lwuj-QOP-jbgdiva0 - 0.1.0 + 1 OutParameter fr.insee j6p2lwuj - 0.1.0 + 1 QuestionGrid - + + + + + + fr.insee + INSEE-COMMUN-CL-Booleen-1 + 1 + Code + + + + + fr.insee jbgd9um3 - 0.1.0 + 1 TRAVEL26 @@ -9084,21 +9769,34 @@ fr.insee j6p2lwuj-QOP-jbgd7dqf - 0.1.0 + 1 OutParameter fr.insee j6p2lwuj - 0.1.0 + 1 QuestionGrid - + + + + + + fr.insee + INSEE-COMMUN-CL-Booleen-1 + 1 + Code + + + + + fr.insee jbgddj7v - 0.1.0 + 1 TRAVEL36 @@ -9108,21 +9806,34 @@ fr.insee j6p2lwuj-QOP-jbgdnous - 0.1.0 + 1 OutParameter fr.insee j6p2lwuj - 0.1.0 + 1 QuestionGrid - + + + + + + fr.insee + INSEE-COMMUN-CL-Booleen-1 + 1 + Code + + + + + fr.insee jbgdb4ym - 0.1.0 + 1 TRAVEL46 @@ -9132,21 +9843,34 @@ fr.insee j6p2lwuj-QOP-jbgdkfcz - 0.1.0 + 1 OutParameter fr.insee j6p2lwuj - 0.1.0 + 1 QuestionGrid - + + + + + + fr.insee + INSEE-COMMUN-CL-Booleen-1 + 1 + Code + + + + + fr.insee jbgd3fkz - 0.1.0 + 1 FAVOURITE_CHARACTERS11 @@ -9156,21 +9880,23 @@ fr.insee j6qg8rc6-QOP-jbgdl5jb - 0.1.0 + 1 OutParameter fr.insee j6qg8rc6 - 0.1.0 + 1 QuestionGrid - + + + fr.insee jbgdf2md - 0.1.0 + 1 FAVOURITE_CHARACTERS21 @@ -9180,21 +9906,23 @@ fr.insee j6qg8rc6-QOP-jbgd8lwo - 0.1.0 + 1 OutParameter fr.insee j6qg8rc6 - 0.1.0 + 1 QuestionGrid - + + + fr.insee jbgdfle1 - 0.1.0 + 1 FAVOURITE_CHARACTERS31 @@ -9204,21 +9932,23 @@ fr.insee j6qg8rc6-QOP-jbgdbfag - 0.1.0 + 1 OutParameter fr.insee j6qg8rc6 - 0.1.0 + 1 QuestionGrid - + + + fr.insee jbgdix8x - 0.1.0 + 1 FAVOURITE_CHARACTERS41 @@ -9228,21 +9958,23 @@ fr.insee j6qg8rc6-QOP-jbgdlgja - 0.1.0 + 1 OutParameter fr.insee j6qg8rc6 - 0.1.0 + 1 QuestionGrid - + + + fr.insee jbgd782k - 0.1.0 + 1 FAVOURITE_CHARACTERS51 @@ -9252,21 +9984,23 @@ fr.insee j6qg8rc6-QOP-jbgd745y - 0.1.0 + 1 OutParameter fr.insee j6qg8rc6 - 0.1.0 + 1 QuestionGrid - + + + fr.insee jbgd68rf - 0.1.0 + 1 FAVOURITE_CHARACTERS61 @@ -9276,21 +10010,23 @@ fr.insee j6qg8rc6-QOP-jbgdjkts - 0.1.0 + 1 OutParameter fr.insee j6qg8rc6 - 0.1.0 + 1 QuestionGrid - + + + fr.insee jbgdfoj4 - 0.1.0 + 1 FAVOURITE_CHARACTERS71 @@ -9300,21 +10036,23 @@ fr.insee j6qg8rc6-QOP-jbgdcax7 - 0.1.0 + 1 OutParameter fr.insee j6qg8rc6 - 0.1.0 + 1 QuestionGrid - + + + fr.insee jbgdb116 - 0.1.0 + 1 FAVOURITE_CHARACTERS81 @@ -9324,21 +10062,23 @@ fr.insee j6qg8rc6-QOP-jbgdjye1 - 0.1.0 + 1 OutParameter fr.insee j6qg8rc6 - 0.1.0 + 1 QuestionGrid - + + + fr.insee jbgd7w5p - 0.1.0 + 1 FAVOURITE_CHARACTERS91 @@ -9348,21 +10088,23 @@ fr.insee j6qg8rc6-QOP-jbgd5jet - 0.1.0 + 1 OutParameter fr.insee j6qg8rc6 - 0.1.0 + 1 QuestionGrid - + + + fr.insee jbgd8rj2 - 0.1.0 + 1 FAVOURITE_CHARACTERS101 @@ -9372,21 +10114,23 @@ fr.insee j6qg8rc6-QOP-jbgdjw90 - 0.1.0 + 1 OutParameter fr.insee j6qg8rc6 - 0.1.0 + 1 QuestionGrid - + + + fr.insee jbgdidnp - 0.1.0 + 1 FAVOURITE_CHARACTERS12 @@ -9396,21 +10140,29 @@ fr.insee j6qg8rc6-QOP-jbgdfndq - 0.1.0 + 1 OutParameter fr.insee j6qg8rc6 - 0.1.0 + 1 QuestionGrid - + + + + 0 + 120 + + Decimal + + fr.insee jbgd47wz - 0.1.0 + 1 FAVOURITE_CHARACTERS22 @@ -9420,21 +10172,29 @@ fr.insee j6qg8rc6-QOP-jbgd7osi - 0.1.0 + 1 OutParameter fr.insee j6qg8rc6 - 0.1.0 + 1 QuestionGrid - + + + + 0 + 120 + + Decimal + + fr.insee jbgdj2nn - 0.1.0 + 1 FAVOURITE_CHARACTERS32 @@ -9444,21 +10204,29 @@ fr.insee j6qg8rc6-QOP-jbgd7bnw - 0.1.0 + 1 OutParameter fr.insee j6qg8rc6 - 0.1.0 + 1 QuestionGrid - + + + + 0 + 120 + + Decimal + + fr.insee jbgd2ipx - 0.1.0 + 1 FAVOURITE_CHARACTERS42 @@ -9468,21 +10236,29 @@ fr.insee j6qg8rc6-QOP-jbgd9k71 - 0.1.0 + 1 OutParameter fr.insee j6qg8rc6 - 0.1.0 + 1 QuestionGrid - + + + + 0 + 120 + + Decimal + + fr.insee jbgd4pe3 - 0.1.0 + 1 FAVOURITE_CHARACTERS52 @@ -9492,21 +10268,29 @@ fr.insee j6qg8rc6-QOP-jbgdimks - 0.1.0 + 1 OutParameter fr.insee j6qg8rc6 - 0.1.0 + 1 QuestionGrid - + + + + 0 + 120 + + Decimal + + fr.insee jbgdjgb1 - 0.1.0 + 1 FAVOURITE_CHARACTERS62 @@ -9516,21 +10300,29 @@ fr.insee j6qg8rc6-QOP-jbgdjquz - 0.1.0 + 1 OutParameter fr.insee j6qg8rc6 - 0.1.0 + 1 QuestionGrid - + + + + 0 + 120 + + Decimal + + fr.insee jbgdb5c1 - 0.1.0 + 1 FAVOURITE_CHARACTERS72 @@ -9540,21 +10332,29 @@ fr.insee j6qg8rc6-QOP-jbgdd2w3 - 0.1.0 + 1 OutParameter fr.insee j6qg8rc6 - 0.1.0 + 1 QuestionGrid - + + + + 0 + 120 + + Decimal + + fr.insee jbgdju9y - 0.1.0 + 1 FAVOURITE_CHARACTERS82 @@ -9564,21 +10364,29 @@ fr.insee j6qg8rc6-QOP-jbgdkosc - 0.1.0 + 1 OutParameter fr.insee j6qg8rc6 - 0.1.0 + 1 QuestionGrid - + + + + 0 + 120 + + Decimal + + fr.insee jbgdatyx - 0.1.0 + 1 FAVOURITE_CHARACTERS92 @@ -9588,21 +10396,29 @@ fr.insee j6qg8rc6-QOP-jbgdk0x4 - 0.1.0 + 1 OutParameter fr.insee j6qg8rc6 - 0.1.0 + 1 QuestionGrid - + + + + 0 + 120 + + Decimal + + fr.insee jbgdi1dt - 0.1.0 + 1 FAVOURITE_CHARACTERS102 @@ -9612,96 +10428,193 @@ fr.insee j6qg8rc6-QOP-jbgd2wgf - 0.1.0 + 1 OutParameter fr.insee j6qg8rc6 - 0.1.0 + 1 QuestionGrid - + + + + 0 + 120 + + Decimal + + fr.insee jbcggt4x - 0.1.0 + 1 SURVEY_COMMENT - SURVEY_COMMENT label + SURVEY_COMMENT label fr.insee j6z0z3us-QOP-jbgd6m6e - 0.1.0 + 1 OutParameter fr.insee j6z0z3us - 0.1.0 + 1 QuestionItem - - - - fr.insee - jbcggtca - 0.1.0 - - SUM_EXPENSES - - - SUM_EXPENSES label - - - fr.insee - jbcggtca-VROP - 0.1.0 - - - fr.insee - jbcggtca-GI - 0.1.0 - GenerationInstruction - - - fr.insee - jbcggtca-GOP - 0.1.0 - OutParameter - - - fr.insee - jbcggtca-VROP - 0.1.0 - OutParameter - - - - + - - fr.insee - jbcggtex - 0.1.0 - - LAST_BROADCAST - - - LAST_BROADCAST label - - + + 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 - 0.1.0 + 1 SIMPSONS @@ -9711,66 +10624,66 @@ fr.insee jbcggtca-GI - 0.1.0 - + 1 + fr.insee jbgdnfk7 - 0.1.0 + 1 Variable fr.insee jbgdje4w - 0.1.0 + 1 Variable fr.insee jbgdlth7 - 0.1.0 + 1 Variable fr.insee jbgdelbl - 0.1.0 + 1 Variable fr.insee jbgd95jq - 0.1.0 + 1 Variable fr.insee jbgdadd9 - 0.1.0 + 1 Variable fr.insee jbgdlwzk - 0.1.0 + 1 Variable fr.insee jbgdfz77 - 0.1.0 + 1 Variable fr.insee jbgdepx6 - 0.1.0 + 1 Variable fr.insee jbgdepx7 - 0.1.0 + 1 Variable @@ -9779,7 +10692,7 @@ fr.insee jbcggtca-IP-1 - 0.1.0 + 1 PERCENTAGE_EXPENSES11 @@ -9787,7 +10700,7 @@ fr.insee jbcggtca-IP-2 - 0.1.0 + 1 PERCENTAGE_EXPENSES21 @@ -9795,7 +10708,7 @@ fr.insee jbcggtca-IP-3 - 0.1.0 + 1 PERCENTAGE_EXPENSES31 @@ -9803,7 +10716,7 @@ fr.insee jbcggtca-IP-4 - 0.1.0 + 1 PERCENTAGE_EXPENSES41 @@ -9811,7 +10724,7 @@ fr.insee jbcggtca-IP-5 - 0.1.0 + 1 PERCENTAGE_EXPENSES51 @@ -9819,7 +10732,7 @@ fr.insee jbcggtca-IP-6 - 0.1.0 + 1 PERCENTAGE_EXPENSES61 @@ -9827,7 +10740,7 @@ fr.insee jbcggtca-IP-7 - 0.1.0 + 1 PERCENTAGE_EXPENSES71 @@ -9835,7 +10748,7 @@ fr.insee jbcggtca-IP-8 - 0.1.0 + 1 PERCENTAGE_EXPENSES81 @@ -9843,7 +10756,7 @@ fr.insee jbcggtca-IP-9 - 0.1.0 + 1 PERCENTAGE_EXPENSES91 @@ -9851,7 +10764,7 @@ fr.insee jbcggtca-IP-10 - 0.1.0 + 1 PERCENTAGE_EXPENSES101 @@ -9859,19 +10772,19 @@ fr.insee jbcggtca-GOP - 0.1.0 + 1 fr.insee j4nwc63q-QOP-jbgde5yl - 0.1.0 + 1 OutParameter fr.insee jbcggtca-IP-1 - 0.1.0 + 1 InParameter @@ -9879,13 +10792,13 @@ fr.insee j4nwc63q-QOP-jbgd2x2t - 0.1.0 + 1 OutParameter fr.insee jbcggtca-IP-2 - 0.1.0 + 1 InParameter @@ -9893,13 +10806,13 @@ fr.insee j4nwc63q-QOP-jbgdjypz - 0.1.0 + 1 OutParameter fr.insee jbcggtca-IP-3 - 0.1.0 + 1 InParameter @@ -9907,13 +10820,13 @@ fr.insee j4nwc63q-QOP-jbgdcftu - 0.1.0 + 1 OutParameter fr.insee jbcggtca-IP-4 - 0.1.0 + 1 InParameter @@ -9921,13 +10834,13 @@ fr.insee j4nwc63q-QOP-jbgdiyfe - 0.1.0 + 1 OutParameter fr.insee jbcggtca-IP-5 - 0.1.0 + 1 InParameter @@ -9935,13 +10848,13 @@ fr.insee j4nwc63q-QOP-jbgdj1wd - 0.1.0 + 1 OutParameter fr.insee jbcggtca-IP-6 - 0.1.0 + 1 InParameter @@ -9949,13 +10862,13 @@ fr.insee j4nwc63q-QOP-jbgddylk - 0.1.0 + 1 OutParameter fr.insee jbcggtca-IP-7 - 0.1.0 + 1 InParameter @@ -9963,13 +10876,13 @@ fr.insee j4nwc63q-QOP-jbgd3jj6 - 0.1.0 + 1 OutParameter fr.insee jbcggtca-IP-8 - 0.1.0 + 1 InParameter @@ -9977,13 +10890,13 @@ fr.insee j4nwc63q-QOP-jbgd4w3k - 0.1.0 + 1 OutParameter fr.insee jbcggtca-IP-9 - 0.1.0 + 1 InParameter @@ -9991,26 +10904,26 @@ fr.insee j4nwc63q-QOP-jbgd4w4k - 0.1.0 + 1 OutParameter fr.insee jbcggtca-IP-10 - 0.1.0 + 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) + 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-i6vwid - 0.1.0 + Sequence-i6vwi0 + 1 Sequence @@ -10018,7 +10931,7 @@ fr.insee INSEE-SIMPSONS-MRS - 0.1.0 + 1 Liste de formats numériques et dates de l'enquête @@ -10026,56 +10939,63 @@ fr.insee - INSEE-COMMUN-MNR-DateTimedate - 0.1.0 - jj/mm/aaaa - date + 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-i6vwid - 0.1.0 + StudyUnit-i6vwi0 + 1 fr.insee - DataCollection-i6vwid - 0.1.0 + DataCollection-i6vwi0 + 1 fr.insee - QuestionScheme-i6vwid - 0.1.0 + QuestionScheme-i6vwi0 + 1 QuestionScheme fr.insee - ControlConstructScheme-i6vwid - 0.1.0 + ControlConstructScheme-i6vwi0 + 1 ControlConstructScheme fr.insee - InterviewerInstructionScheme-i6vwid - 0.1.0 + InterviewerInstructionScheme-i6vwi0 + 1 InterviewerInstructionScheme fr.insee - InstrumentScheme-i6vwid - 0.1.0 - + InstrumentScheme-i6vwi0 + 1 + fr.insee - Instrument-i6vwid - 0.1.0 + Instrument-i6vwi0 + 1 + + SIMPSONS + Questionnaire SIMPSONS questionnaire A définir fr.insee - Sequence-i6vwid - 0.1.0 + Sequence-i6vwi0 + 1 Sequence diff --git a/questionnaires/simpsons/parameters.xml b/questionnaires/simpsons/parameters.xml index f5ce07621..cfa8ce1c8 100644 --- a/questionnaires/simpsons/parameters.xml +++ b/questionnaires/simpsons/parameters.xml @@ -1,53 +1,117 @@ - - - - - fr - en - - - 1 - - 0 - - - - - - - - household - - <Browsing>module</Browsing> - <Sequence> - <Level name="template"/> - <Level name="module"> - <PreSeq/> - <NumParent>N</NumParent> - <PostNumParentSeq/> - <StyleNumSeq>I</StyleNumSeq> - <PostNumSeq> - </PostNumSeq> - </Level> - <Level name="submodule"/> - </Sequence> - <Question> - <Level name="module"> - <PreQuest>➡ </PreQuest> - <NumParent>N</NumParent> - <PostNumParentQuest/> - <StyleNumQuest>1</StyleNumQuest> - <PostNumQuest>. </PostNumQuest> - </Level> - <Level name="submodule"> - <PreQuest>➡ </PreQuest> - <NumParent>N</NumParent> - <PostNumParentQuest/> - <StyleNumQuest>1</StyleNumQuest> - <PostNumQuest>. </PostNumQuest> - </Level> - </Question> - - - 7 - - \ No newline at end of file + + + + + + + default + + test + + + fr + en + + + + false + + + + false + false + + + + false + false + false + 7 + , + + + + + + 0 + 1 + + + + 15 + + + + + + 19 + +
+ + optical + + + + + +
+ + + false + + + + + + <!-- no-number ; template ; module ; submodule ; unnumbered-filter --> + <Browsing>module</Browsing> + <Sequence> + <!-- niveau template utile car permet de définir la hiérarchie des séquences, alors même qu'il n'est pas numéroté --> + <Level name="template"/> + <Level name="module"> + <!-- toujours affiché --> + <PreSeq></PreSeq> + <!-- true ; false --> + <NumParent>false</NumParent> + <!-- Affiché seulement si un numéro est affiché pour le parent --> + <PostNumParentSeq></PostNumParentSeq> + <!-- 1 ; A ; a ; I ; i --> + <StyleNumSeq>I</StyleNumSeq> + <!-- Affiché seulement si un numéro est affiché pour la séquence --> + <PostNumSeq> - </PostNumSeq> + </Level> + <!-- pas de numérotation au niveau submodule = pas d'élément --> + <Level name="submodule"/> + </Sequence> + <Question> + <!-- Question niveau module --> + <Level name="module"> + <!-- toujours affiché --> + <PreQuest>➡ </PreQuest> + <!-- true ; false --> + <NumParent>false</NumParent> + <!-- Affiché seulement si un numéro est affiché pour le parent --> + <PostNumParentQuest></PostNumParentQuest> + <!-- 1 ; A ; a ; I ; i --> + <StyleNumQuest>1</StyleNumQuest> + <!-- Affiché seulement si un numéro est affiché pour la question --> + <PostNumQuest>. </PostNumQuest> + </Level> + <!-- La présentation des questions de niveau module et submodule doit être précisée si les deux sont présents ; elle peut être distincte --> + <!-- Question niveau sous-module --> + <Level name="submodule"> + <PreQuest>➡ </PreQuest> + <NumParent>false</NumParent> + <PostNumParentQuest></PostNumParentQuest> + <StyleNumQuest>1</StyleNumQuest> + <PostNumQuest>. </PostNumQuest> + </Level> + </Question> + +
+ +
diff --git a/src/main/java/fr/insee/eno/Constants.java b/src/main/java/fr/insee/eno/Constants.java index 003028fbf..135222fac 100644 --- a/src/main/java/fr/insee/eno/Constants.java +++ b/src/main/java/fr/insee/eno/Constants.java @@ -17,81 +17,103 @@ * */ public final class Constants { - - + + private static final Logger logger = LoggerFactory.getLogger(Constants.class); private Constants() { - } - + // ---------- Core resources: references to XSL, XML, etc. resources used to generate a questionnaire - + // ----- Folders public static final String UTIL_FOLDER_PATH = "/xslt/util"; + public static final String PARAMS_DEFAULT_FOLDER_PATH = "/params/default"; + public static final String PARAMS_SCHEMAS_FOLDER_PATH = "/params/schemas"; public static final String TRANSFORMATIONS_FOLDER = "/xslt/transformations"; public static final String CONFIG_FOLDER = "/config"; public static final String INPUTS_FOLDER = "/xslt/inputs"; public static final File LABEL_FOLDER = getFileFromUrl(Constants.class.getResource("/lang/fr")); + public static final String PARAMETERS_DEFAULT_XML = PARAMS_DEFAULT_FOLDER_PATH+"/parameters.xml"; - // ----- Ref - public static final String PARAMETERS_XML = "parameters.xml"; - + + + // Params : schema + public static final URL ENO_PARAMETERS_XSD = Constants.class.getResource(PARAMS_SCHEMAS_FOLDER_PATH+"/ENOParameters.xsd"); + // ----- XSL Parameters path public static final String CONFIG_DDI2FR = CONFIG_FOLDER + "/ddi2fr.xml"; public static final String CONFIG_DDI2ODT = CONFIG_FOLDER + "/ddi2odt.xml"; public static final String CONFIG_DDI2PDF = CONFIG_FOLDER + "/ddi2pdf.xml"; public static final String CONFIG_POGUES_XML2DDI = CONFIG_FOLDER + "/pogues-xml2ddi.xml"; public static final String CONFIG_DDI2JS = CONFIG_FOLDER + "/ddi2js.xml"; - public static final String PARAMETERS = "/parameters.xml"; + public static final String PARAMETERS_DEFAULT = PARAMS_DEFAULT_FOLDER_PATH + "/parameters.xml"; + public static final String METADATA_DEFAULT = PARAMS_DEFAULT_FOLDER_PATH + "/metadata.xml"; + public static final String MAPPING_DEFAULT = PARAMS_DEFAULT_FOLDER_PATH + "/mapping.xml"; public static final String LABELS_FOLDER = "/lang/fr/"; + + + /********************************************************/ + /********************** Pre-processing ******************/ + /********************************************************/ + public static final String PRE_PROCESSING_FOLDER = "/xslt/pre-processing"; + + /******************* DDI - Pre-processing ****************/ + public static final String DDI_DEREFERENCING_XSL = PRE_PROCESSING_FOLDER + "/ddi/dereferencing.xsl"; + public static final String UTIL_DDI_DEREFERENCING_XSL = UTIL_FOLDER_PATH + "/ddi/dereferencing.xsl"; + public static final String UTIL_DDI_TITLING_XSL = PRE_PROCESSING_FOLDER + "/ddi/titling.xsl"; + public static final String UTIL_DDI_MAPPING_XSL = PRE_PROCESSING_FOLDER + "/ddi/mapping.xsl"; + public static final String UTIL_DDI_CLEANING_XSL = PRE_PROCESSING_FOLDER + "/ddi/cleaning.xsl"; + public static final String UTIL_DDI32_TO_DDI33_XSL = UTIL_FOLDER_PATH + "/ddi/ddi32toddi33.xsl"; + /*************** PoguesXML - Pre-processing **************/ + public static final String UTIL_POGUES_XML_SUPP_GOTO_XSL = PRE_PROCESSING_FOLDER + "/pogues-xml/2suppressionGoto.xsl"; + public static final String UTIL_POGUES_XML_MERGE_ITE_XSL = PRE_PROCESSING_FOLDER + "/pogues-xml/tweak-to-merge-equivalent-ite.xsl"; + public static final String UTIL_POGUES_XML_GOTO_ITE_XSL = PRE_PROCESSING_FOLDER + "/pogues-xml/goto-2-if-then-else.xsl"; + + + + /********************************************************/ + /********************* Post-processing ******************/ + /********************************************************/ + public static final String POST_PROCESSING_FOLDER = "/xslt/post-processing"; + + /********************* DDI - Post-processing ******************/ + public static final String UTIL_DDI_MW2XHTML_XSL = POST_PROCESSING_FOLDER + "/ddi/mw2xhtml.xsl"; + public static final String UTIL_DDI_TWEAK_XHTML_FOR_DDI_XSL = POST_PROCESSING_FOLDER + "/ddi/tweak-xhtml-for-ddi.xsl"; - // ----- Files - public static final String DDI_DEREFERENCING_XSL = UTIL_FOLDER_PATH + "/ddi/dereferencing.xsl"; - public static final String PARAMETERS_FILE = "/" + PARAMETERS_XML; - public static final String UTIL_DDI_TITLING_XSL = UTIL_FOLDER_PATH + "/ddi/titling.xsl"; - public static final String UTIL_POGUES_XML_SUPP_GOTO_XSL = UTIL_FOLDER_PATH + "/pogues-xml/2suppressionGoto.xsl"; - public static final String UTIL_POGUES_XML_MERGE_ITE_XSL = UTIL_FOLDER_PATH + "/pogues-xml/tweak-to-merge-equivalent-ite.xsl"; - public static final String UTIL_POGUES_XML_GOTO_ITE_XSL = UTIL_FOLDER_PATH + "/pogues-xml/goto-2-if-then-else.xsl"; - public static final String UTIL_DDI_MW2XHTML_XSL = UTIL_FOLDER_PATH + "/ddi/mw2xhtml.xsl"; - public static final String UTIL_DDI_TWEAK_XHTML_FOR_DDI_XSL = UTIL_FOLDER_PATH + "/ddi/tweak-xhtml-for-ddi.xsl"; - public static final String UTIL_DDI_CLEANING_XSL = UTIL_FOLDER_PATH + "/ddi/cleaning.xsl"; public static final String UTIL_FODS_PREFORMATTING_XSL = UTIL_FOLDER_PATH + "/fods/preformatting.xsl"; public static final String UTIL_XSL_INCORPORATION_XSL = UTIL_FOLDER_PATH + "/xsl/incorporation.xsl"; - public static final String UTIL_DDI_DEREFERENCING_XSL = UTIL_FOLDER_PATH + "/ddi/dereferencing.xsl"; - public static final String BROWSING_FR_TEMPLATE_XSL = UTIL_FOLDER_PATH + "/fr/browsing.xsl"; - public static final String BROWSING_JS_TEMPLATE_XSL = UTIL_FOLDER_PATH + "/js/browsing.xsl"; -// public static final String PROPERTIES_FILE_FR = CONFIG_FOLDER + "/ddi2fr.xml"; -// public static final String PROPERTIES_FILE_ODT = CONFIG_FOLDER + "/ddi2odt.xml"; -// public static final String PROPERTIES_FILE_PDF = CONFIG_FOLDER + "/ddi2pdf.xml"; -// public static final String PROPERTIES_FILE_DDI = CONFIG_FOLDER + "/pogues-xml2ddi.xml"; + - // ---------- XSL generation + public static final String BROWSING_FR_TEMPLATE_XSL = UTIL_FOLDER_PATH + "/fr/browsing.xsl"; + + /********************* XSL generation ******************/ public static final String TRANSFORMATIONS_DDI2FR_DDI2FR_XSL = TRANSFORMATIONS_FOLDER + "/ddi2fr/ddi2fr.xsl"; public static final String TRANSFORMATIONS_DDI2ODT_DDI2ODT_XSL = TRANSFORMATIONS_FOLDER + "/ddi2odt/ddi2odt.xsl"; public static final String TRANSFORMATIONS_DDI2PDF_DDI2PDF_XSL = TRANSFORMATIONS_FOLDER + "/ddi2pdf/ddi2pdf.xsl"; public static final String TRANSFORMATIONS_POGUES_XML2DDI_POGUES_XML2DDI_XSL = TRANSFORMATIONS_FOLDER + "/pogues-xml2ddi/pogues-xml2ddi.xsl"; + public static final String TRANSFORMATIONS_DDI2POGUES_XML_XSL = TRANSFORMATIONS_FOLDER + "/ddi2pogues-xml/ddi2pogues-xml.xsl"; public static final String TRANSFORMATIONS_DDI2JS_DDI2JS_XSL = TRANSFORMATIONS_FOLDER + "/ddi2js/ddi2js.xsl"; - + public static final String TRANSFORMATIONS_DDI2FR_DRIVERS_FODS = TRANSFORMATIONS_FOLDER + "/ddi2fr/drivers.fods"; public static final String TRANSFORMATIONS_DDI2ODT_DRIVERS_FODS = TRANSFORMATIONS_FOLDER + "/ddi2odt/drivers.fods"; public static final String TRANSFORMATIONS_DDI2PDF_DRIVERS_FODS = TRANSFORMATIONS_FOLDER + "/ddi2pdf/drivers.fods"; public static final String TRANSFORMATIONS_POGUES_XML2DDI_DRIVERS_FODS = TRANSFORMATIONS_FOLDER + "/pogues-xml2ddi/drivers.fods"; public static final String TRANSFORMATIONS_DDI2JS_DRIVERS_FODS = TRANSFORMATIONS_FOLDER + "/ddi2js/drivers.fods"; - + public static final String TRANSFORMATIONS_DDI2FR_FUNCTIONS_FODS = TRANSFORMATIONS_FOLDER + "/ddi2fr/functions.fods"; public static final String TRANSFORMATIONS_DDI2ODT_FUNCTIONS_FODS = TRANSFORMATIONS_FOLDER + "/ddi2odt/functions.fods"; public static final String TRANSFORMATIONS_DDI2PDF_FUNCTIONS_FODS = TRANSFORMATIONS_FOLDER + "/ddi2pdf/functions.fods"; public static final String TRANSFORMATIONS_POGUES_XML2DDI_FUNCTIONS_FODS = TRANSFORMATIONS_FOLDER + "/pogues-xml2ddi/functions.fods"; public static final String TRANSFORMATIONS_DDI2JS_FUNCTIONS_FODS = TRANSFORMATIONS_FOLDER + "/ddi2js/functions.fods"; - + public static final String TRANSFORMATIONS_DDI2FR_FUNCTIONS_XSL = TRANSFORMATIONS_FOLDER + "/ddi2fr/functions.xsl"; public static final String TRANSFORMATIONS_DDI2ODT_FUNCTIONS_XSL = TRANSFORMATIONS_FOLDER + "/ddi2odt/functions.xsl"; public static final String TRANSFORMATIONS_DDI2PDF_FUNCTIONS_XSL = TRANSFORMATIONS_FOLDER + "/ddi2pdf/functions.xsl"; public static final String TRANSFORMATIONS_POGUES_XML2DDI_FUNCTIONS_XSL = TRANSFORMATIONS_FOLDER + "/pogues-xml2ddi/functions.xsl"; public static final String TRANSFORMATIONS_DDI2JS_FUNCTIONS_XSL = TRANSFORMATIONS_FOLDER + "/ddi2js/functions.xsl"; - + public static final String TRANSFORMATIONS_DDI2FR_TREE_NAVIGATION_FODS = TRANSFORMATIONS_FOLDER + "/ddi2fr/tree-navigation.fods"; public static final String TRANSFORMATIONS_DDI2ODT_TREE_NAVIGATION_FODS = TRANSFORMATIONS_FOLDER + "/ddi2odt/tree-navigation.fods"; public static final String TRANSFORMATIONS_DDI2PDF_TREE_NAVIGATION_FODS = TRANSFORMATIONS_FOLDER + "/ddi2pdf/tree-navigation.fods"; @@ -102,81 +124,97 @@ private Constants() { public static final String TRANSFORMATIONS_DDI2PDF_TREE_NAVIGATION_XSL = TRANSFORMATIONS_FOLDER + "/ddi2pdf/tree-navigation.xsl"; public static final String TRANSFORMATIONS_POGUES_XML2DDI_TREE_NAVIGATION_XSL = TRANSFORMATIONS_FOLDER + "/pogues-xml2ddi/tree-navigation.xsl"; public static final String TRANSFORMATIONS_DDI2JS_TREE_NAVIGATION_XSL = TRANSFORMATIONS_FOLDER + "/ddi2js/tree-navigation.xsl"; - + public static final String TRANSFORMATIONS_DDI2FR_DDI2FR_FIXED_XSL = TRANSFORMATIONS_FOLDER + "/ddi2fr/ddi2fr-fixed.xsl"; public static final String TRANSFORMATIONS_DDI2ODT_DDI2ODT_FIXED_XSL = TRANSFORMATIONS_FOLDER + "/ddi2odt/ddi2odt-fixed.xsl"; public static final String TRANSFORMATIONS_DDI2PDF_DDI2PDF_FIXED_XSL = TRANSFORMATIONS_FOLDER + "/ddi2pdf/ddi2pdf-fixed.xsl"; public static final String TRANSFORMATIONS_DDI2JS_DDI2JS_FIXED_XSL = TRANSFORMATIONS_FOLDER + "/ddi2js/ddi2js-fixed.xsl"; public static final String TRANSFORMATIONS_POGUES_XML2DDI_POGUES_XML2DDI_FIXED_XSL = TRANSFORMATIONS_FOLDER + "/pogues-xml2ddi/pogues-xml2ddi-fixed.xsl"; - + // ---------- public static final String INPUTS_DDI_FUNCTIONS_FODS = INPUTS_FOLDER + "/ddi/functions.fods"; public static final String INPUTS_DDI_FUNCTIONS_XSL = INPUTS_FOLDER + "/ddi/functions.xsl"; public static final String INPUTS_DDI_TEMPLATES_FODS = INPUTS_FOLDER + "/ddi/templates.fods"; public static final String INPUTS_DDI_TEMPLATES_XSL = INPUTS_FOLDER + "/ddi/templates.xsl"; - + public static final String INPUTS_POGUES_XML_FUNCTIONS_FODS = INPUTS_FOLDER + "/pogues-xml/functions.fods"; public static final String INPUTS_POGUES_XML_FUNCTIONS_XSL = INPUTS_FOLDER + "/pogues-xml/functions.xsl"; public static final String INPUTS_POGUES_XML_TEMPLATES_FODS = INPUTS_FOLDER + "/pogues-xml/templates.fods"; public static final String INPUTS_POGUES_XML_TEMPLATES_XSL = INPUTS_FOLDER + "/pogues-xml/templates.xsl"; - + public static final String INPUTS_DDI_SOURCE_FIXED_XSL = INPUTS_FOLDER + "/ddi/source-fixed.xsl"; public static final String INPUTS_POGUES_XML_SOURCE_FIXED_XSL = INPUTS_FOLDER + "/pogues-xml/source-fixed.xsl"; public static final String FODS_2_XML_XSL = TRANSFORMATIONS_FOLDER + "/fods2xml.xsl"; public static final String XML_2_XSL_XSL = TRANSFORMATIONS_FOLDER + "/xml2xsl.xsl"; + /********************* Merging paramters ******************/ + public static final String MERGE_PARAMETERS_XSL = UTIL_FOLDER_PATH + "/params/merge-parameters.xsl"; + + + + /********************************************************/ + /********************* Post-processing ******************/ + /********************************************************/ public static final String OUPUTS_FOLDER = "/xslt/outputs/pdf"; - public static final String OUPUTS_FOLDER_2 = "/xslt/util/pdf"; - public static final String OUPUTS_FOLDER_JS = "/xslt/util/js"; + public static final String POST_PROCESSING_FOLDER_PDF = "/xslt/post-processing/pdf"; + public static final String POST_PROCESSING_FOLDER_JS = "/xslt/post-processing/js"; + public static final String POST_PROCESSING_FOLDER_FR = "/xslt/post-processing/fr"; public static final String TRANSFORMATIONS_CUSTOMIZATION_FO_4PDF = OUPUTS_FOLDER + "/publipostage.xsl"; - public static final String TRANSFORMATIONS_CUSTOMIZATION_FO_4PDF_2 = OUPUTS_FOLDER_2 + "/mailing-vtl.xsl"; - public static final String TRANSFORMATIONS_SPECIF_TREATMENT_FO_4PDF = "/pdf-specific-treatment.xsl"; - public static final String TRANSFORMATIONS_ACCOMPANYING_MAILS_FO_4PDF = OUPUTS_FOLDER_2 + "/accompanying-mails.xsl"; - public static final String TRANSFORMATIONS_COVER_PAGE_FO_4PDF = OUPUTS_FOLDER_2 + "/insert-cover-page.xsl"; - public static final String TRANSFORMATIONS_END_QUESTION_FO_4PDF = OUPUTS_FOLDER_2 + "/insert-end-questions.xsl"; - public static final String TRANSFORMATIONS_EDIT_STRUCTURE_PAGES_FO_4PDF = OUPUTS_FOLDER_2 + "/edit-structure-page.xsl"; - public static final String STATIC_PAGES = OUPUTS_FOLDER_2 +"/static-pages.fo"; - public static final String TRANSFORMATIONS_SORT_COMPONENTS_JS = OUPUTS_FOLDER_JS + "/sort-components.xsl"; - public static final String TRANSFORMATIONS_EXTERNALIZE_VARIABLES_JS = OUPUTS_FOLDER_JS + "/externalize-variables.xsl"; - // ---------- Temporary file system + + /********************* PDF/FO - Post-processing ******************/ + public static final String TRANSFORMATIONS_CUSTOMIZATION_FO_4PDF_2 = POST_PROCESSING_FOLDER_PDF + "/mailing-vtl.xsl"; + public static final String TRANSFORMATIONS_SPECIF_TREATMENT_FO_4PDF = POST_PROCESSING_FOLDER_PDF +"/pdf-specific-treatment.xsl"; + public static final String TRANSFORMATIONS_ACCOMPANYING_MAILS_FO_4PDF = POST_PROCESSING_FOLDER_PDF + "/accompanying-mails.xsl"; + public static final String TRANSFORMATIONS_COVER_PAGE_FO_4PDF = POST_PROCESSING_FOLDER_PDF + "/insert-cover-page.xsl"; + public static final String TRANSFORMATIONS_END_QUESTION_FO_4PDF = POST_PROCESSING_FOLDER_PDF + "/insert-end-questions.xsl"; + public static final String TRANSFORMATIONS_EDIT_STRUCTURE_PAGES_FO_4PDF = POST_PROCESSING_FOLDER_PDF + "/edit-structure-page.xsl"; + + /********************* JS/XML-Lunatic - Post-processing ******************/ + public static final String TRANSFORMATIONS_SORT_COMPONENTS_JS = POST_PROCESSING_FOLDER_JS + "/sort-components.xsl"; + public static final String TRANSFORMATIONS_EXTERNALIZE_VARIABLES_JS = POST_PROCESSING_FOLDER_JS + "/externalize-variables.xsl"; + public static final String TRANSFORMATIONS_INSERT_GENERIC_QUESTIONS_JS = POST_PROCESSING_FOLDER_JS + "/insert-generic-questions.xsl"; + + /********************* FR/Xform Post-processing ******************/ + public static final String UTIL_FR_BROWSING_XSL = POST_PROCESSING_FOLDER_FR + "/browsing.xsl"; + public static final String UTIL_FR_FIX_ADHERENCE_XSL = POST_PROCESSING_FOLDER_FR + "/fix-adherence.xsl"; + public static final String UTIL_FR_EDIT_PATRON_XSL = POST_PROCESSING_FOLDER_FR + "/edit-patron.xsl"; + public static final String UTIL_FR_IDENTIFICATION_XSL = POST_PROCESSING_FOLDER_FR + "/identification.xsl"; + public static final String UTIL_FR_INSERT_END_XSL = POST_PROCESSING_FOLDER_FR + "/insert-end.xsl"; + public static final String UTIL_FR_INSERT_GENERIC_QUESTIONS_XSL = POST_PROCESSING_FOLDER_FR + "/insert-generic-questions.xsl"; + public static final String UTIL_FR_INSERT_WELCOME_XSL = POST_PROCESSING_FOLDER_FR + "/insert-welcome.xsl"; + public static final String UTIL_FR_MODELE_COLTRANE_XSL = POST_PROCESSING_FOLDER_FR + "/modele-coltrane.xsl"; + public static final String UTIL_FR_SPECIFIC_TREATMENT_XSL = POST_PROCESSING_FOLDER_FR + "/fr-specific-treatment.xsl"; + + /********************* Temporary file system ******************/ // ----- Folders - //public static final String TEMP_FOLDER_PATH = "/target/eno"; public static final String TEMP_FOLDER_PATH = System.getProperty("java.io.tmpdir") + "/eno"; - + public static final File TEMP_FOLDER = getFileOrDirectoryFromPath(TEMP_FOLDER_PATH); - //public static final File SUB_TEMP_FOLDER = getFileOrDirectoryFromPath(TEMP_FOLDER_PATH + "/temp"); + + public static final File TEMP_FILE_PARAMS(String file) { + return getFileOrDirectoryFromPath(TEMP_FOLDER_PATH +"/"+file); + } public static File sUB_TEMP_FOLDER_FILE (String survey){ return getFileOrDirectoryFromPath(TEMP_FOLDER_PATH + "/"+survey); } - + public static String sUB_TEMP_FOLDER (String survey){ return TEMP_FOLDER_PATH + "/"+survey; } - - + // ----- Files - //public static final File TEMP_NULL_TMP = getFileOrDirectoryFromPath(SUB_TEMP_FOLDER + "/null.tmp"); public static File tEMP_NULL_TMP (String sUB_TEMP_FOLDER){ return getFileOrDirectoryFromPath(sUB_TEMP_FOLDER + "/null.tmp"); } + public static File tEMP_MAPPING_TMP (String sUB_TEMP_FOLDER){ + return getFileOrDirectoryFromPath(sUB_TEMP_FOLDER + "/mapping.xml"); + } public static final File TEMP_PREFORMATE_TMP = getFileOrDirectoryFromPath(TEMP_FOLDER_PATH + "/temp/preformate.tmp"); -// public static File tEMP_PREFORMATE_TMP (String sUB_TEMP_FOLDER) { -// return getFileOrDirectoryFromPath(sUB_TEMP_FOLDER + "/preformate.tmp"); -// } public static final File TEMP_XML_TMP = getFileOrDirectoryFromPath(TEMP_FOLDER_PATH + "/temp/xml.tmp"); -// public static File tEMP_XML_TMP (String sUB_TEMP_FOLDER){ -// return getFileOrDirectoryFromPath(sUB_TEMP_FOLDER + "/xml.tmp"); -// } public static final File TEMP_TEMP_TMP = getFileOrDirectoryFromPath(TEMP_FOLDER_PATH + "/temp/temp.tmp"); -// public static File tEMP_TEMP_TMP(String sUB_TEMP_FOLDER){ -// return getFileOrDirectoryFromPath(sUB_TEMP_FOLDER + "/temp.tmp"); -// } public static final File TEMP_TEMP_BIS_TMP = getFileOrDirectoryFromPath(TEMP_FOLDER_PATH + "/temp/temp-bis.tmp"); -// public static File tEMP_TEMP_BIS_TMP(String sUB_TEMP_FOLDER){ -// return getFileOrDirectoryFromPath(sUB_TEMP_FOLDER + "/temp-bis.tmp"); -// } - + // Those files holds the XSL generated from FODS ; they will be then copied to resource directory when packaging to JAR public static final File TRANSFORMATIONS_DDI2FR_DDI2FR_XSL_TMP = getFileOrDirectoryFromPath(TEMP_FOLDER_PATH + "/ddi2fr/ddi2fr.xsl"); public static final File TRANSFORMATIONS_DDI2ODT_DDI2ODT_XSL_TMP = getFileOrDirectoryFromPath(TEMP_FOLDER_PATH + "/ddi2odt/ddi2odt.xsl"); @@ -198,15 +236,15 @@ public static File tEMP_NULL_TMP (String sUB_TEMP_FOLDER){ public static final File TRANSFORMATIONS_DDI2PDF_TREE_NAVIGATION_XSL_TMP = getFileOrDirectoryFromPath(TEMP_FOLDER_PATH + "/ddi2pdf/tree-navigation.xsl"); public static final File TRANSFORMATIONS_POGUES_XML2DDI_TREE_NAVIGATION_XSL_TMP = getFileOrDirectoryFromPath(TEMP_FOLDER_PATH + "/pogues-xml2ddi/tree-navigation.xsl"); public static final File TRANSFORMATIONS_DDI2JS_TREE_NAVIGATION_XSL_TMP = getFileOrDirectoryFromPath(TEMP_FOLDER_PATH + "/ddi2js/tree-navigation.xsl"); - + public static final File INPUTS_DDI_FUNCTIONS_XSL_TMP = getFileOrDirectoryFromPath(TEMP_FOLDER_PATH + "/ddi/functions.xsl"); public static final File INPUTS_DDI_TEMPLATES_XSL_TMP = getFileOrDirectoryFromPath(TEMP_FOLDER_PATH + "/ddi/templates.xsl"); public static final File INPUTS_DDI_SOURCE_XSL_TMP = getFileOrDirectoryFromPath(TEMP_FOLDER_PATH + "/ddi/source.xsl"); - + public static final File INPUTS_POGUES_XML_FUNCTIONS_XSL_TMP = getFileOrDirectoryFromPath(TEMP_FOLDER_PATH + "/pogues-xml/functions.xsl"); public static final File INPUTS_POGUES_XML_TEMPLATES_XSL_TMP = getFileOrDirectoryFromPath(TEMP_FOLDER_PATH + "/pogues-xml/templates.xsl"); public static final File INPUTS_POGUES_XML_SOURCE_XSL_TMP = getFileOrDirectoryFromPath(TEMP_FOLDER_PATH + "/pogues-xml/source.xsl"); - + // ---------- Utilies /** Generic file getter from classpath * @return the file or null when not found. @@ -220,78 +258,66 @@ public static InputStream getInputStreamFromPath(String path) { return null; } } - - + + /** Generic getter for files or directories */ private static File getFileOrDirectoryFromPath(String path) { return Paths.get(path).toFile(); } - + @SuppressWarnings("finally") public static File getFileFromUrl(URL url) { File file = null; - try { - file = new File(url.toURI()); - } catch (URISyntaxException e) { - file = new File(url.getPath()); - } finally { - return file; - } + try { + file = new File(url.toURI()); + } catch (URISyntaxException e) { + file = new File(url.getPath()); + } finally { + return file; + } } - // TODO Under this comment are the legacy references to files and directories that eventually will be deleted. - // ----------------------------------------------- // - - // Root folder of the project : must be filled - // FIXME use a dynamic path -// public static final String ROOT_FOLDER = "D:/arkn1q/Mes Documents/eclipse_workspace/Eno"; -// -// public static final String QUESTIONNAIRE_FOLDER = ROOT_FOLDER + "/questionnaires"; -// public static final String TEMP_TEST_FOLDER = TEMP_FOLDER_PATH + "/nonRegressionTest"; - /********************************************************/ - /******************* ENOPreprocessing *******************/ + /*********************** Temp foder ********************/ /********************************************************/ - - + public static String tEMP_XFORMS_FOLDER (String sUB_TEMP_FOLDER){ + return sUB_TEMP_FOLDER + "/xforms"; + } + public static String tEMP_ODT_FOLDER(String sUB_TEMP_FOLDER){ + return sUB_TEMP_FOLDER + "/odt"; + } + public static String tEMP_JS_FOLDER(String sUB_TEMP_FOLDER){ + return sUB_TEMP_FOLDER+ "/js"; + } + public static String tEMP_PDF_FOLDER(String sUB_TEMP_FOLDER){ + return sUB_TEMP_FOLDER+ "/pdf"; + } + public static String tEMP_DDI_FOLDER(String sUB_TEMP_FOLDER){ + return sUB_TEMP_FOLDER + "/ddi"; + } + public static String tEMP_POGUES_XML_FOLDER(String sUB_TEMP_FOLDER){ + return sUB_TEMP_FOLDER + "/pogues-xml"; + } + public static final String BASIC_FORM_TMP_FILENAME = "basic-form.tmp"; + - - ////// INCORPORATION TARGET - //// Temporary files used in INCORPORATION - - - //// Xsl stylesheets used in INCORPORATION - - /********************************************************/ - /******************* DDIPreprocessing *******************/ - /********************************************************/ - //// Plugin Conf - public static final String PDF_PLUGIN_XML_CONF = "src/main/resources/config/plugins-conf.xml"; - public static final File PDF_PLUGIN_XML_CONF_FILE = getFileFromUrl(Constants.class.getResource(CONFIG_FOLDER + "/plugins-conf.xml")); - - - /********************************************************/ - /******************* DDIPreprocessing *******************/ /********************************************************/ - - //// Temporary files used in DDIPreprocessing - //public static final String OLD_TEMP_NULL_TMP2 = SUB_TEMP_FOLDER + "/null.tmp"; - public String oLD_TEMP_NULL_TMP2(String sUB_TEMP_FOLDER){ - return sUB_TEMP_FOLDER + "/null.tmp"; - } - - //// Xsl stylesheets used in DDIPreprocessing - + /********************* File Extension *******************/ + /************** (used during post-processing) ***********/ + public static final String BASE_NAME_FORM_FILE = "/form"; + + /************ DDI and pogues-xml extension ***************/ public static final String CLEANED_EXTENSION = "-cleaned.tmp"; public static final String MW_EXTENSION = "-mw.tmp"; public static final String FINAL_EXTENSION = "-final.tmp"; public static final String TEMP_EXTENSION = "-temp.xml"; public static final String FINAL_DDI_EXTENSION = "-final.xml"; - + public static final String DDI32_DDI33_EXTENSION = "-ddi33.xml"; + /********************* pdf/fo extension *******************/ public static final String ACCOMPANYING_MAILS_FO_EXTENSION = "-accompanying-mails.fo"; public static final String COVER_PAGE_FO_EXTENSION = "-cover-page.fo"; public static final String EDIT_STRUCTURE_FO_EXTENSION = "-edit-structure.fo"; @@ -299,34 +325,23 @@ public String oLD_TEMP_NULL_TMP2(String sUB_TEMP_FOLDER){ public static final String SPECIFIC_TREAT_PDF_EXTENSION = "-specific-form.fo"; public static final String TABLE_COL_SIZE_PDF_EXTENSION = "-temp.fo"; public static final String FINAL_PDF_EXTENSION = "-final-out.fo"; - //public static final String CUSTOM_FO_EXTENSION = "-out.fo"; public static final String MAILING_FO_EXTENSION = "-mailing-vtl.fo"; + + /****************** js/xml-lunatic extension **************/ public static final String SORT_COMPONENTS_JS_EXTENSION = "-sorted.xml"; + public static final String INSERT_GENERIC_QUESTIONS_JS_EXTENSION = "-insert-questions.xml"; + public static final String EXTERNALIZE_VARIABLES_JS_EXTENSION = "-ext-variables.xml"; + public static final String VTL_PARSER_JS_EXTENSION = "-vtl-parsed.xml"; public static final String FINAL_JS_EXTENSION = "-lunatic.xml"; - - //public static final String TEMP_XFORMS_FOLDER = SUB_TEMP_FOLDER + "/xforms"; - public static String tEMP_XFORMS_FOLDER (String sUB_TEMP_FOLDER){ - return sUB_TEMP_FOLDER + "/xforms"; - } - //public static final String TEMP_ODT_FOLDER = SUB_TEMP_FOLDER + "/odt"; - public static String tEMP_ODT_FOLDER(String sUB_TEMP_FOLDER){ - return sUB_TEMP_FOLDER + "/odt"; - } - - //public static final String TEMP_PDF_FOLDER = SUB_TEMP_FOLDER + "/pdf"; - public static String tEMP_PDF_FOLDER(String sUB_TEMP_FOLDER){ - return sUB_TEMP_FOLDER+ "/pdf"; - } - //public static final String TEMP_DDI_FOLDER = SUB_TEMP_FOLDER + "/ddi"; - public static String tEMP_DDI_FOLDER(String sUB_TEMP_FOLDER){ - return sUB_TEMP_FOLDER + "/ddi"; - } - //public static final String TEMP_POGUES_XML_FOLDER = SUB_TEMP_FOLDER + "/pogues-xml"; - public static String tEMP_POGUES_XML_FOLDER(String sUB_TEMP_FOLDER){ - return sUB_TEMP_FOLDER + "/pogues-xml"; - } - public static final String BASIC_FORM_TMP_FILENAME = "basic-form.tmp"; - - + /******************** fr/xform extension ******************/ + public static final String BROWSING_FR_EXTENSION = "-browsing.xhtml"; + public static final String EDIT_PATRON_FR_EXTENSION = "-edit-patron.xhtml"; + public static final String FIX_ADHERENCE_FR_EXTENSION = "-fix-adherence.xhtml"; + public static final String IDENTIFICATION_FR_EXTENSION = "-identification.xhtml"; + public static final String INSERT_END_FR_EXTENSION = "-insert-end.xhtml"; + public static final String INSERT_WELCOME_FR_EXTENSION = "-insert-welcome.xhtml"; + public static final String INSERT_GENERIC_QUESTIONS_FR_EXTENSION = "-insert-questions.xhtml"; + public static final String MODELE_COLTRANE_FR_EXTENSION = "-modele-coltrane.xhtml"; + public static final String SPECIFIC_TREATMENT_FR_EXTENSION = "-specific-treatment.xhtml"; } diff --git a/src/main/java/fr/insee/eno/GenerationService.java b/src/main/java/fr/insee/eno/GenerationService.java index 4ab05da92..03e1a65aa 100644 --- a/src/main/java/fr/insee/eno/GenerationService.java +++ b/src/main/java/fr/insee/eno/GenerationService.java @@ -4,10 +4,14 @@ import java.io.File; import java.io.IOException; import java.io.InputStream; +import java.util.Arrays; +import org.apache.commons.io.FilenameUtils; +import org.apache.commons.io.IOUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import com.google.common.io.Files; import com.google.inject.Inject; import fr.insee.eno.generation.Generator; @@ -27,6 +31,9 @@ public class GenerationService { private final Postprocessor[] postprocessors; private byte[] parameters; + private byte[] metadata; + private byte[] specificTreatment; + private byte[] mapping; @Inject public GenerationService(final Preprocessor[] preprocessors, final Generator generator, @@ -63,45 +70,76 @@ public GenerationService(final Preprocessor preprocessor, final Generator genera * bim */ public File generateQuestionnaire(File inputFile, String surveyName) throws Exception { + logger.info(this.toString()); logger.info("Generating questionnaire for: " + surveyName); String tempFolder = System.getProperty("java.io.tmpdir") + "/" + surveyName; logger.debug("Temp folder: " + tempFolder); cleanTempFolder(surveyName); - - File preprocessResultFileName = this.preprocessors[0].process(inputFile, parameters, surveyName, - generator.in2out()); + File preprocessResultFileName = null; + + preprocessResultFileName = this.preprocessors[0].process(inputFile, parameters, surveyName,generator.in2out()); + for (int i = 1; i < preprocessors.length; i++) { - preprocessResultFileName = this.preprocessors[0].process(preprocessResultFileName, parameters, surveyName, + preprocessResultFileName = this.preprocessors[i].process(preprocessResultFileName, parameters, surveyName, generator.in2out()); } File generatedForm = this.generator.generate(preprocessResultFileName, parameters, surveyName); - - File outputForm = this.postprocessors[0].process(generatedForm, parameters, surveyName); + File outputForm = this.postprocessors[0].process(generatedForm, parameters, metadata, specificTreatment, mapping, surveyName); for (int i = 1; i < postprocessors.length; i++) { - outputForm = this.postprocessors[i].process(outputForm, parameters, surveyName); + outputForm = this.postprocessors[i].process(outputForm, parameters, metadata, specificTreatment, mapping,surveyName); } - logger.debug("Path to generated questionnaire: " + outputForm.getAbsolutePath()); + File finalForm = new File(outputForm.getParent()+Constants.BASE_NAME_FORM_FILE+"."+FilenameUtils.getExtension(outputForm.getAbsolutePath())); + if(!finalForm.equals(outputForm)) { + Files.move(outputForm, finalForm); + } + logger.debug("Path to generated questionnaire: " + finalForm.getAbsolutePath()); - return outputForm; + return finalForm; } + + + public void setParameters(ByteArrayOutputStream parametersBAOS) { + this.parameters = parametersBAOS.toByteArray(); + } public void setParameters(InputStream parametersIS) throws IOException { - - ByteArrayOutputStream baos = new ByteArrayOutputStream(); - byte[] buf = new byte[1024]; - int n = 0; - while ((n = parametersIS.read(buf)) >= 0) { - baos.write(buf, 0, n); + if(parametersIS!=null) { + this.parameters = IOUtils.toByteArray(parametersIS); + } + } + + public void setMetadata(InputStream metadataIS) throws IOException { + if(metadataIS!=null) { + this.metadata = IOUtils.toByteArray(metadataIS); + } + } + + public void setSpecificTreatment(InputStream specificTreatmentIS) throws IOException { + if(specificTreatmentIS!=null) { + this.specificTreatment = IOUtils.toByteArray(specificTreatmentIS); + } + } + + public void setMapping(InputStream mappingIS) throws IOException { + if(mappingIS!=null) { + this.mapping = IOUtils.toByteArray(mappingIS); } - this.parameters = baos.toByteArray(); - } public byte[] getParameters() { return parameters; } + public byte[] getMetadata() { + return metadata; + } + public byte[] getSpecificTreatment() { + return specificTreatment; + } + public byte[] getMapping() { + return mapping; + } /** * Clean the temp dir if it exists @@ -149,4 +187,12 @@ private void cleanTempFolder(File folder) throws IOException { } } + @Override + public String toString() { + return "GenerationService [preprocessors=" + Arrays.toString(preprocessors) + ", generator=" + generator.in2out() + + ", postprocessors=" + Arrays.toString(postprocessors) + "]"; + } + + + } diff --git a/src/main/java/fr/insee/eno/ParameterizedGenerationService.java b/src/main/java/fr/insee/eno/ParameterizedGenerationService.java new file mode 100644 index 000000000..f4b52639e --- /dev/null +++ b/src/main/java/fr/insee/eno/ParameterizedGenerationService.java @@ -0,0 +1,180 @@ +package fr.insee.eno; + +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.File; +import java.io.InputStream; + +import org.apache.commons.io.FileUtils; +import org.apache.commons.io.IOUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import fr.insee.eno.exception.EnoParametersException; +import fr.insee.eno.parameters.ENOParameters; +import fr.insee.eno.parameters.Pipeline; +import fr.insee.eno.params.ValorizatorParameters; +import fr.insee.eno.params.ValorizatorParametersImpl; +import fr.insee.eno.params.pipeline.PipeLineGeneratorImpl; +import fr.insee.eno.params.pipeline.PipelineGenerator; +import fr.insee.eno.params.validation.SchemaValidator; +import fr.insee.eno.params.validation.SchemaValidatorImpl; +import fr.insee.eno.params.validation.ValidationMessage; +import fr.insee.eno.params.validation.Validator; +import fr.insee.eno.params.validation.ValidatorImpl; + +/** + * Orchestrates the whole parameterized generation process. + */ +public class ParameterizedGenerationService { + + private static final Logger LOGGER = LoggerFactory.getLogger(ParameterizedGenerationService.class); + + private PipelineGenerator pipelineGenerator = new PipeLineGeneratorImpl(); + + private ValorizatorParameters valorizatorParameters = new ValorizatorParametersImpl(); + + private Validator validator = new ValidatorImpl(); + + private SchemaValidator schemaValidator = new SchemaValidatorImpl(); + + /** + * It generates File using transformations defined in ENOParameters + * @param inputFile : the xml input File (required) + * @param params : java object ENOParameter (required) + * @param metadata : InputStream of metadata xml file (optional) + * @param specificTreatment : InputStream of an xsl sheet (optional) + * @param mapping : InputStream of a xml file using in FRModeleColtranePostProcessor (optional) + * @return the file resulting from the xslt transformations + * @throws Exception + */ + public File generateQuestionnaire(File inputFile, ENOParameters params, InputStream metadata, InputStream specificTreatment, InputStream mapping) throws Exception{ + File output=null; + Pipeline pipeline = params.getPipeline(); + + ValidationMessage valid = validator.validate(params); + if(valid.isValid()) { + GenerationService generationService = pipelineGenerator.setPipeLine(pipeline); + ByteArrayOutputStream paramsFinal = valorizatorParameters.mergeParameters(params); + LOGGER.info("Setting paramaters to the pipeline."); + generationService.setParameters(paramsFinal); + LOGGER.info("Setting metadata to the pipeline."); + generationService.setMetadata(metadata); + LOGGER.info("Setting specific treamtment to the pipeline."); + generationService.setSpecificTreatment(specificTreatment); + LOGGER.info("Setting mapping file to the pipeline."); + generationService.setMapping(mapping); + String survey = params.getParameters()!=null?params.getParameters().getCampagne():"test"; + output = generationService.generateQuestionnaire(inputFile, survey); + paramsFinal.close(); + } + else { + LOGGER.error(valid.getMessage()); + throw new EnoParametersException(valid.getMessage()); + } + + return output; + + } + + /** + * It generates File using transformations defined in ENOParameters + * @param inputFile : the xml input File (required) + * @param params : InputStream of parameters xml file (required) + * @param metadata : InputStream of metadata xml file (optional) + * @param specificTreatment : InputStream of an xsl sheet (optional) + * @param mapping : InputStream of a xml file using in FRModeleColtranePostProcessor (optional) + * @return the file resulting from the xslt transformations + * @throws Exception + */ + public File generateQuestionnaire(File inputFile, InputStream params, InputStream metadata, InputStream specificTreatment, InputStream mapping) throws Exception { + LOGGER.info("Parameterized Generation of questionnaire -- STARTED --"); + File output=null; + + if(params!=null) { + byte[] paramsBytes = IOUtils.toByteArray(params); + + LOGGER.info("First validation ..."); + ValidationMessage validSchema = schemaValidator.validate(new ByteArrayInputStream(paramsBytes)); + + if(validSchema.isValid()) { + LOGGER.info(validSchema.getMessage()); + LOGGER.info("Parameters reading ..."); + ENOParameters enoParameters = null; + enoParameters = valorizatorParameters.getParameters(new ByteArrayInputStream(paramsBytes)); + LOGGER.info("Parameters read."); + + LOGGER.info("Second validation ..."); + ValidationMessage valid = validator.validate(enoParameters); + + if(valid.isValid()) { + LOGGER.info(valid.getMessage()); + Pipeline pipeline = enoParameters.getPipeline(); + GenerationService generationService = pipelineGenerator.setPipeLine(pipeline); + ByteArrayOutputStream paramsFinal = valorizatorParameters.mergeParameters(enoParameters); + LOGGER.info("Setting paramaters to the pipeline."); + generationService.setParameters(paramsFinal); + LOGGER.info("Setting metadata to the pipeline."); + generationService.setMetadata(metadata); + LOGGER.info("Setting specific treamtment to the pipeline."); + generationService.setSpecificTreatment(specificTreatment); + LOGGER.info("Setting mapping file to the pipeline."); + generationService.setMapping(mapping); + String survey = enoParameters.getParameters().getCampagne(); + output = generationService.generateQuestionnaire(inputFile, survey); + paramsFinal.close(); + } + else { + LOGGER.error(valid.getMessage()); + throw new EnoParametersException(valid.getMessage()); + } + } + else { + LOGGER.error(validSchema.getMessage()); + throw new EnoParametersException(validSchema.getMessage()); + } + } + else { + String error = getClass().getName() + " needs the parameters file."; + LOGGER.error(error); + throw new EnoParametersException(error); + } + + + LOGGER.info("Parameterized Generation of questionnaire -- FINISHED --"); + return output; + + } + + /** + * It generates File using transformations defined in ENOParameters + * @param inputFile : the xml input File (required) + * @param params : xml File of ENOParameter (required) + * @param metadata : xml File of metadata (optional) + * @param specificTreatment : xsl file of the xsl sheet (optional) + * @param mapping : a xml File using in FRModeleColtranePostProcessor (optional) + * @return the file resulting from the xslt transformations + * @throws Exception + */ + public File generateQuestionnaire(File inputFile, File params, File metadata, File specificTreatment, File mapping) throws Exception{ + File output = null; + + InputStream parametersIS = null; + InputStream metadataIS = null; + InputStream specificTreatmentIS = null; + InputStream mappingIS = null; + parametersIS = params!=null ? FileUtils.openInputStream(params):null; + metadataIS = metadata!=null ? FileUtils.openInputStream(metadata):null; + specificTreatmentIS = specificTreatment!=null ? FileUtils.openInputStream(specificTreatment):null; + mappingIS = mapping!=null ? FileUtils.openInputStream(mapping):null; + output = generateQuestionnaire(inputFile, parametersIS, metadataIS, specificTreatmentIS, mappingIS); + + if(parametersIS!=null) {parametersIS.close();}; + if(metadataIS!=null) {metadataIS.close();}; + if(specificTreatmentIS!=null) {specificTreatmentIS.close();}; + if(mappingIS!=null) {mappingIS.close();}; + + return output; + + } +} diff --git a/src/main/java/fr/insee/eno/exception/EnoGenerationException.java b/src/main/java/fr/insee/eno/exception/EnoGenerationException.java new file mode 100644 index 000000000..652d90a5b --- /dev/null +++ b/src/main/java/fr/insee/eno/exception/EnoGenerationException.java @@ -0,0 +1,13 @@ +package fr.insee.eno.exception; + +/** + * EnoGenerationException which is thrown when a error was occured during an xslt tranformation of Eno. + */ +public class EnoGenerationException extends RuntimeException { + + private static final long serialVersionUID = 1L; + + public EnoGenerationException(String message) { + super(message); + } +} \ No newline at end of file diff --git a/src/main/java/fr/insee/eno/exception/EnoParametersException.java b/src/main/java/fr/insee/eno/exception/EnoParametersException.java new file mode 100644 index 000000000..f14b3b3f8 --- /dev/null +++ b/src/main/java/fr/insee/eno/exception/EnoParametersException.java @@ -0,0 +1,13 @@ +package fr.insee.eno.exception; + +/** + * EnoParametersException which is thrown when a error was occured during validation of the parameters. + */ +public class EnoParametersException extends RuntimeException { + + private static final long serialVersionUID = 1L; + + public EnoParametersException(String message) { + super(message); + } +} \ No newline at end of file diff --git a/src/main/java/fr/insee/eno/generation/DDI2FRGenerator.java b/src/main/java/fr/insee/eno/generation/DDI2FRGenerator.java index 55501dc31..bae86c912 100644 --- a/src/main/java/fr/insee/eno/generation/DDI2FRGenerator.java +++ b/src/main/java/fr/insee/eno/generation/DDI2FRGenerator.java @@ -10,16 +10,15 @@ import org.slf4j.LoggerFactory; import fr.insee.eno.Constants; +import fr.insee.eno.exception.EnoGenerationException; import fr.insee.eno.transform.xsl.XslParameters; import fr.insee.eno.transform.xsl.XslTransformation; public class DDI2FRGenerator implements Generator { - private static final Logger logger = LoggerFactory.getLogger(DDI2FRGenerator.class); - // FIXME Inject ! - private static XslTransformation saxonService = new XslTransformation(); + private XslTransformation saxonService = new XslTransformation(); @Override public File generate(File finalInput, byte[] parameters, String surveyName) throws Exception { @@ -41,26 +40,20 @@ public File generate(File finalInput, byte[] parameters, String surveyName) thro InputStream isFinalInput = FileUtils.openInputStream(finalInput); OutputStream osOutputBasicForm = FileUtils.openOutputStream(new File(outputBasicFormPath)); - - saxonService.transformDDI2FR(isFinalInput, osOutputBasicForm, isTRANSFORMATIONS_DDI2FR_DDI2FR_XSL, - parameters); + try { + saxonService.transformDDI2FR(isFinalInput, osOutputBasicForm, isTRANSFORMATIONS_DDI2FR_DDI2FR_XSL, + parameters); + }catch(Exception e) { + String errorMessage = "An error was occured during the "+in2out()+" transformation. "+e.getMessage(); + logger.error(errorMessage); + throw new EnoGenerationException(errorMessage); + } isTRANSFORMATIONS_DDI2FR_DDI2FR_XSL.close(); isFinalInput.close(); osOutputBasicForm.close(); - String outputForm = Constants.TEMP_FOLDER_PATH + "/" + surveyName + "/" + formNameFolder + "/form/form.xhtml"; - - InputStream isOutputBasicFormPath = FileUtils.openInputStream(new File(outputBasicFormPath)); - OutputStream osOutputForm = FileUtils.openOutputStream(new File(outputForm)); - InputStream isBROWSING_TEMPLATE_XSL = Constants.getInputStreamFromPath(Constants.BROWSING_FR_TEMPLATE_XSL); - saxonService.transformBrowsingDDI2FR(isOutputBasicFormPath, osOutputForm, isBROWSING_TEMPLATE_XSL, - Constants.LABEL_FOLDER); - isOutputBasicFormPath.close(); - osOutputForm.close(); - isBROWSING_TEMPLATE_XSL.close(); - - return new File(outputForm); + return new File(outputBasicFormPath); } /** diff --git a/src/main/java/fr/insee/eno/generation/DDI2JSGenerator.java b/src/main/java/fr/insee/eno/generation/DDI2JSGenerator.java index 5daca617c..81470e1b9 100644 --- a/src/main/java/fr/insee/eno/generation/DDI2JSGenerator.java +++ b/src/main/java/fr/insee/eno/generation/DDI2JSGenerator.java @@ -10,6 +10,7 @@ import org.slf4j.LoggerFactory; import fr.insee.eno.Constants; +import fr.insee.eno.exception.EnoGenerationException; import fr.insee.eno.transform.xsl.XslParameters; import fr.insee.eno.transform.xsl.XslTransformation; @@ -17,8 +18,7 @@ public class DDI2JSGenerator implements Generator { private static final Logger logger = LoggerFactory.getLogger(DDI2JSGenerator.class); - // FIXME Inject ! - private static XslTransformation saxonService = new XslTransformation(); + private XslTransformation saxonService = new XslTransformation(); @Override public File generate(File finalInput, byte[] parameters, String surveyName) throws Exception { @@ -35,14 +35,21 @@ public File generate(File finalInput, byte[] parameters, String surveyName) thro logger.debug("Output folder for basic-form : " + outputBasicFormPath); String outputForm = outputBasicFormPath + "/form.xml"; + InputStream isTRANSFORMATIONS_DDI2JS_DDI2JS_XSL = Constants .getInputStreamFromPath(Constants.TRANSFORMATIONS_DDI2JS_DDI2JS_XSL); InputStream isFinalInput = FileUtils.openInputStream(finalInput); OutputStream osOutputFile = FileUtils.openOutputStream(new File(outputForm)); - - saxonService.transformDDI2JS(isFinalInput, osOutputFile, isTRANSFORMATIONS_DDI2JS_DDI2JS_XSL, parameters); - + + try { + saxonService.transformDDI2JS(isFinalInput, osOutputFile, isTRANSFORMATIONS_DDI2JS_DDI2JS_XSL, parameters); + }catch(Exception e) { + String errorMessage = "An error was occured during the "+in2out()+" transformation. "+e.getMessage(); + logger.error(errorMessage); + throw new EnoGenerationException(errorMessage); + } + isTRANSFORMATIONS_DDI2JS_DDI2JS_XSL.close(); isFinalInput.close(); diff --git a/src/main/java/fr/insee/eno/generation/DDI2ODTGenerator.java b/src/main/java/fr/insee/eno/generation/DDI2ODTGenerator.java index df3071916..7f18958f5 100644 --- a/src/main/java/fr/insee/eno/generation/DDI2ODTGenerator.java +++ b/src/main/java/fr/insee/eno/generation/DDI2ODTGenerator.java @@ -10,6 +10,7 @@ import org.slf4j.LoggerFactory; import fr.insee.eno.Constants; +import fr.insee.eno.exception.EnoGenerationException; import fr.insee.eno.transform.xsl.XslParameters; import fr.insee.eno.transform.xsl.XslTransformation; @@ -17,8 +18,7 @@ public class DDI2ODTGenerator implements Generator { private static final Logger logger = LoggerFactory.getLogger(DDI2ODTGenerator.class); - // FIXME Inject ! - private static XslTransformation saxonService = new XslTransformation(); + private XslTransformation saxonService = new XslTransformation(); @Override public File generate(File finalInput, byte[] parameters, String surveyName) throws Exception { @@ -34,15 +34,21 @@ public File generate(File finalInput, byte[] parameters, String surveyName) thro outputBasicFormPath = Constants.TEMP_FOLDER_PATH + "/" + surveyName + "/" + formNameFolder + "/form"; logger.debug("Output folder for basic-form : " + outputBasicFormPath); - String outputForm = outputBasicFormPath + "/form.odt"; + String outputForm = outputBasicFormPath + "/form.fodt"; InputStream isTRANSFORMATIONS_DDI2ODT_DDI2ODT_XSL = Constants .getInputStreamFromPath(Constants.TRANSFORMATIONS_DDI2ODT_DDI2ODT_XSL); InputStream isFinalInput = FileUtils.openInputStream(finalInput); OutputStream osOutputFile = FileUtils.openOutputStream(new File(outputForm)); - saxonService.transformDDI2ODT(isFinalInput, osOutputFile, isTRANSFORMATIONS_DDI2ODT_DDI2ODT_XSL, parameters); - + try { + saxonService.transformDDI2ODT(isFinalInput, osOutputFile, isTRANSFORMATIONS_DDI2ODT_DDI2ODT_XSL, parameters); + }catch(Exception e) { + String errorMessage = "An error was occured during the "+in2out()+" transformation. "+e.getMessage(); + logger.error(errorMessage); + throw new EnoGenerationException(errorMessage); + } + isTRANSFORMATIONS_DDI2ODT_DDI2ODT_XSL.close(); isFinalInput.close(); diff --git a/src/main/java/fr/insee/eno/generation/DDI2PDFGenerator.java b/src/main/java/fr/insee/eno/generation/DDI2PDFGenerator.java index 37db8093f..31396d1c0 100644 --- a/src/main/java/fr/insee/eno/generation/DDI2PDFGenerator.java +++ b/src/main/java/fr/insee/eno/generation/DDI2PDFGenerator.java @@ -10,6 +10,7 @@ import org.slf4j.LoggerFactory; import fr.insee.eno.Constants; +import fr.insee.eno.exception.EnoGenerationException; import fr.insee.eno.transform.xsl.XslParameters; import fr.insee.eno.transform.xsl.XslTransformation; @@ -17,8 +18,7 @@ public class DDI2PDFGenerator implements Generator { private static final Logger logger = LoggerFactory.getLogger(DDI2PDFGenerator.class); - // FIXME Inject ! - private static XslTransformation saxonService = new XslTransformation(); + private XslTransformation saxonService = new XslTransformation(); @Override public File generate(File finalInput, byte[] parameters, String surveyName) throws Exception { @@ -41,8 +41,14 @@ public File generate(File finalInput, byte[] parameters, String surveyName) thro InputStream isFinalInput = FileUtils.openInputStream(finalInput); OutputStream osOutputForm = FileUtils.openOutputStream(new File(outputForm)); - saxonService.transformDDI2PDF(isFinalInput, osOutputForm, isTRANSFORMATIONS_DDI2PDF_DDI2PDF_XSL, parameters); + try { + saxonService.transformDDI2PDF(isFinalInput, osOutputForm, isTRANSFORMATIONS_DDI2PDF_DDI2PDF_XSL, parameters); + }catch(Exception e) { + String errorMessage = "An error was occured during the "+in2out()+" transformation. "+e.getMessage(); + logger.error(errorMessage); + throw new EnoGenerationException(errorMessage); + } isTRANSFORMATIONS_DDI2PDF_DDI2PDF_XSL.close(); isFinalInput.close(); diff --git a/src/main/java/fr/insee/eno/generation/DDI2PoguesXMLGenerator.java b/src/main/java/fr/insee/eno/generation/DDI2PoguesXMLGenerator.java new file mode 100644 index 000000000..679d1e53e --- /dev/null +++ b/src/main/java/fr/insee/eno/generation/DDI2PoguesXMLGenerator.java @@ -0,0 +1,39 @@ +package fr.insee.eno.generation; + +import java.io.File; + +import org.apache.commons.io.FilenameUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import fr.insee.eno.transform.xsl.XslParameters; +import fr.insee.eno.transform.xsl.XslTransformation; + +public class DDI2PoguesXMLGenerator implements Generator { + + private static final Logger logger = LoggerFactory.getLogger(DDI2PoguesXMLGenerator.class); + + private XslTransformation saxonService = new XslTransformation(); + + @Override + public File generate(File finalInput, byte[] parameters, String surveyName) throws Exception { + //TODO:implement this generator + return null; + } + + /** + * @param finalInput + * @return + */ + private String getFormNameFolder(File finalInput) { + String formNameFolder; + formNameFolder = FilenameUtils.getBaseName(finalInput.getAbsolutePath()); + formNameFolder = FilenameUtils.removeExtension(formNameFolder); + formNameFolder = formNameFolder.replace(XslParameters.TITLED_EXTENSION, ""); + return formNameFolder; + } + + public String in2out() { + return "xml-pogues2ddi"; + } +} diff --git a/src/main/java/fr/insee/eno/generation/Generator.java b/src/main/java/fr/insee/eno/generation/Generator.java index d61ee1775..a8c17e459 100644 --- a/src/main/java/fr/insee/eno/generation/Generator.java +++ b/src/main/java/fr/insee/eno/generation/Generator.java @@ -30,9 +30,7 @@ public interface Generator { * This method return in2out implementation * * @return the in2out implementation - * @throws Exception - * Generic exception */ - public String in2out() throws Exception; + public String in2out() ; } diff --git a/src/main/java/fr/insee/eno/generation/IdentityGenerator.java b/src/main/java/fr/insee/eno/generation/IdentityGenerator.java new file mode 100644 index 000000000..fc0e3bf77 --- /dev/null +++ b/src/main/java/fr/insee/eno/generation/IdentityGenerator.java @@ -0,0 +1,47 @@ +package fr.insee.eno.generation; + +import java.io.File; + +import org.apache.commons.io.FileUtils; +import org.apache.commons.io.FilenameUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import fr.insee.eno.Constants; +import fr.insee.eno.transform.xsl.XslParameters; + +public class IdentityGenerator implements Generator { + + private static final Logger logger = LoggerFactory.getLogger(IdentityGenerator.class); + + @Override + public File generate(File finalInput, byte[] parameters, String surveyName) throws Exception { + logger.info("Identity generation : START"); + logger.info("Identity generation : simply copying input file in another file"); + logger.debug("Arguments : finalInput : " + finalInput + " surveyName " + surveyName); + String formNameFolder = null; + String outputBasicFormPath = null; + + formNameFolder = getFormNameFolder(finalInput); + + logger.debug("formNameFolder : " + formNameFolder); + outputBasicFormPath = Constants.TEMP_FOLDER_PATH + "/" + surveyName + "/" + formNameFolder + "/form"; + logger.debug("Output folder for basic-form : " + outputBasicFormPath); + String outputForm = outputBasicFormPath + "/form.xml"; + FileUtils.copyFile(finalInput, new File(outputForm)); + logger.info("Identity generation : END"); + return new File(outputForm); + } + + private String getFormNameFolder(File finalInput) { + String formNameFolder; + formNameFolder = FilenameUtils.getBaseName(finalInput.getAbsolutePath()); + formNameFolder = FilenameUtils.removeExtension(formNameFolder); + formNameFolder = formNameFolder.replace(XslParameters.TITLED_EXTENSION, ""); + return formNameFolder; + } + + public String in2out() { + return "identity"; + } +} diff --git a/src/main/java/fr/insee/eno/generation/PoguesXML2DDIGenerator.java b/src/main/java/fr/insee/eno/generation/PoguesXML2DDIGenerator.java index a11f44483..1ade4dc5d 100644 --- a/src/main/java/fr/insee/eno/generation/PoguesXML2DDIGenerator.java +++ b/src/main/java/fr/insee/eno/generation/PoguesXML2DDIGenerator.java @@ -10,6 +10,7 @@ import org.slf4j.LoggerFactory; import fr.insee.eno.Constants; +import fr.insee.eno.exception.EnoGenerationException; import fr.insee.eno.transform.xsl.XslParameters; import fr.insee.eno.transform.xsl.XslTransformation; @@ -17,8 +18,7 @@ public class PoguesXML2DDIGenerator implements Generator { private static final Logger logger = LoggerFactory.getLogger(PoguesXML2DDIGenerator.class); - // FIXME Inject ! - private static XslTransformation saxonService = new XslTransformation(); + private XslTransformation saxonService = new XslTransformation(); @Override public File generate(File finalInput, byte[] parameters, String surveyName) throws Exception { @@ -40,8 +40,14 @@ public File generate(File finalInput, byte[] parameters, String surveyName) thro InputStream isFinalInput = FileUtils.openInputStream(finalInput); OutputStream osOutputBasicForm = FileUtils.openOutputStream(new File(outputBasicFormPath)); - saxonService.transformPoguesXML2DDI(isFinalInput, osOutputBasicForm, - isTRANSFORMATIONS_POGUES_XML2DDI_POGUES_XML2DDI_XSL, parameters); + try { + saxonService.transformPoguesXML2DDI(isFinalInput, osOutputBasicForm, + isTRANSFORMATIONS_POGUES_XML2DDI_POGUES_XML2DDI_XSL, parameters); + }catch(Exception e) { + String errorMessage = "An error was occured during the "+in2out()+" transformation. "+e.getMessage(); + logger.error(errorMessage); + throw new EnoGenerationException(errorMessage); + } isTRANSFORMATIONS_POGUES_XML2DDI_POGUES_XML2DDI_XSL.close(); isFinalInput.close(); diff --git a/src/main/java/fr/insee/eno/params/ValorizatorParameters.java b/src/main/java/fr/insee/eno/params/ValorizatorParameters.java new file mode 100644 index 000000000..884582621 --- /dev/null +++ b/src/main/java/fr/insee/eno/params/ValorizatorParameters.java @@ -0,0 +1,43 @@ +package fr.insee.eno.params; + +import java.io.ByteArrayOutputStream; +import java.io.File; +import java.io.InputStream; + +import fr.insee.eno.parameters.ENOParameters; + +public interface ValorizatorParameters { + + /** + * + * @param enoParameters + * @return ByteArrayOutputStream which represents xml parameter file + * @throws Exception + */ + ByteArrayOutputStream mergeParameters(ENOParameters enoParameters) throws Exception; + + /** + * + * @param enoParameters java object + * @return ENOParameters object which is the result of the merging of default ENOParameters object and the param + * @throws Exception + */ + ENOParameters mergeEnoParameters(ENOParameters enoParameters) throws Exception; + + /** + * + * @param inputStream which represents xml parameter file + * @return ENOParameters object which represents xml file according to xsd schema + * @throws Exception + */ + ENOParameters getParameters(InputStream inputStream) throws Exception; + + /** + * + * @param enoParameters xml file + * @return File (xml) which is the result of the merging of default xml parameter file and the param + * @throws Exception + */ + File mergeParameters(File enoParameters) throws Exception; + +} diff --git a/src/main/java/fr/insee/eno/params/ValorizatorParametersImpl.java b/src/main/java/fr/insee/eno/params/ValorizatorParametersImpl.java new file mode 100644 index 000000000..a40b49206 --- /dev/null +++ b/src/main/java/fr/insee/eno/params/ValorizatorParametersImpl.java @@ -0,0 +1,182 @@ +package fr.insee.eno.params; + +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.File; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.io.StringReader; +import java.io.UnsupportedEncodingException; +import java.lang.reflect.Field; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +import javax.xml.bind.JAXBContext; +import javax.xml.bind.JAXBException; +import javax.xml.bind.Marshaller; +import javax.xml.bind.Unmarshaller; +import javax.xml.transform.Source; +import javax.xml.transform.Transformer; +import javax.xml.transform.TransformerFactory; +import javax.xml.transform.stream.StreamSource; + +import org.apache.commons.io.FileUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import fr.insee.eno.Constants; +import fr.insee.eno.exception.EnoGenerationException; +import fr.insee.eno.parameters.ENOParameters; +import fr.insee.eno.parameters.LevelAbstract; +import fr.insee.eno.parameters.LevelQuestion; +import fr.insee.eno.parameters.LevelSequence; +import fr.insee.eno.transform.xsl.ClasspathURIResolver; +import fr.insee.eno.transform.xsl.EnoErrorListener; +import fr.insee.eno.transform.xsl.XslParameters; +import fr.insee.eno.transform.xsl.XslTransformation; + + +public class ValorizatorParametersImpl implements ValorizatorParameters { + + private static final Logger LOGGER = LoggerFactory.getLogger(ValorizatorParametersImpl.class); + + private XslTransformation saxonService = new XslTransformation(); + + + @Override + public ByteArrayOutputStream mergeParameters(ENOParameters enoParameters) throws JAXBException, IllegalArgumentException, IllegalAccessException, IOException { + + ByteArrayOutputStream tempByteArrayOutputStream = new ByteArrayOutputStream(); + + JAXBContext context = JAXBContext.newInstance(ENOParameters.class); + Marshaller jaxbMarshaller = context.createMarshaller(); + jaxbMarshaller.setProperty(Marshaller.JAXB_ENCODING, "UTF-8"); + jaxbMarshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); + jaxbMarshaller.marshal(enoParameters, tempByteArrayOutputStream); + + InputStream PARAM_XSL = Constants.getInputStreamFromPath(Constants.MERGE_PARAMETERS_XSL); + InputStream inputStream = new ByteArrayInputStream(tempByteArrayOutputStream.toByteArray()); + ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); + + try { + saxonService.mergeEnoParameters(inputStream, outputStream, PARAM_XSL); + }catch(Exception e) { + String errorMessage = "An error was occured during the valorisation of parameters. "+e.getMessage(); + LOGGER.error(errorMessage); + throw new EnoGenerationException(errorMessage); + } + + tempByteArrayOutputStream.close(); + inputStream.close(); + PARAM_XSL.close(); + + return outputStream; + } + + @Override + public File mergeParameters(File enoParameters) throws JAXBException, IllegalArgumentException, IllegalAccessException, IOException { + File finalParam = Constants.TEMP_FILE_PARAMS("new-params.xml"); + + InputStream PARAM_XSL = Constants.getInputStreamFromPath(Constants.MERGE_PARAMETERS_XSL); + InputStream inputStream = FileUtils.openInputStream(enoParameters); + OutputStream outputStream = FileUtils.openOutputStream(finalParam); + + try { + saxonService.mergeEnoParameters(inputStream, outputStream, PARAM_XSL); + }catch(Exception e) { + String errorMessage = "An error was occured during the valorisation of parameters. "+e.getMessage(); + LOGGER.error(errorMessage); + throw new EnoGenerationException(errorMessage); + } + + inputStream.close(); + outputStream.close(); + PARAM_XSL.close(); + + return finalParam; + } + + @Override + public ENOParameters mergeEnoParameters(ENOParameters enoParameters) throws JAXBException, IOException, IllegalArgumentException, IllegalAccessException { + LOGGER.info("Merging eno Parameters"); + ByteArrayOutputStream outputStream = this.mergeParameters(enoParameters); + ENOParameters finalEnoParam = this.getParameters(new ByteArrayInputStream(outputStream.toByteArray())); + outputStream.close(); + return finalEnoParam; + } + + + + + /** + * + * @return the java object representing parameters of default parameters xml file + * @throws JAXBException + * @throws IOException + */ + public ENOParameters getDefaultParameters() throws JAXBException, IOException { + InputStream xmlParameters = Constants.getInputStreamFromPath(Constants.PARAMETERS_DEFAULT_XML); + StreamSource xml = new StreamSource(xmlParameters); + return this.getParameters(xml); + } + + + @Override + public ENOParameters getParameters(InputStream inputStream) throws JAXBException, UnsupportedEncodingException { + + if (inputStream == null) + return null; + + LOGGER.debug("Preparing to translate from XML to java"); + + + + JAXBContext context = JAXBContext.newInstance(ENOParameters.class); + Unmarshaller unmarshaller = context.createUnmarshaller(); + unmarshaller.setListener(new UnmarshallLogger()); + + ENOParameters enoParameters = (ENOParameters) unmarshaller.unmarshal(inputStream); + + return enoParameters; + } + + public ENOParameters getParameters(StreamSource xmlStream) throws JAXBException, UnsupportedEncodingException { + + if (xmlStream == null) + return null; + + LOGGER.debug("Preparing to translate from XML to java"); + + JAXBContext context = JAXBContext.newInstance(ENOParameters.class); + Unmarshaller unmarshaller = context.createUnmarshaller(); + unmarshaller.setListener(new UnmarshallLogger()); + + ENOParameters enoParameters = (ENOParameters) unmarshaller.unmarshal(xmlStream); + + return enoParameters; + } + + private class UnmarshallLogger extends Unmarshaller.Listener { + + @Override + public void beforeUnmarshal(Object target, Object parent) { + LOGGER.debug("Before unmarshalling object " + target); + } + + @Override + public void afterUnmarshal(Object target, Object parent) { + LOGGER.debug("After unmarshalling object " + target); + } + } + + public List getAllFields(List fields, Class type) { + fields.addAll(Arrays.asList(type.getDeclaredFields())); + if (type.getSuperclass() != null) { + getAllFields(fields, type.getSuperclass()); + } + + return fields; + } +} diff --git a/src/main/java/fr/insee/eno/params/pipeline/PipeLineGeneratorImpl.java b/src/main/java/fr/insee/eno/params/pipeline/PipeLineGeneratorImpl.java new file mode 100644 index 000000000..c1b375891 --- /dev/null +++ b/src/main/java/fr/insee/eno/params/pipeline/PipeLineGeneratorImpl.java @@ -0,0 +1,325 @@ +package fr.insee.eno.params.pipeline; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import fr.insee.eno.GenerationService; +import fr.insee.eno.generation.DDI2FRGenerator; +import fr.insee.eno.generation.DDI2JSGenerator; +import fr.insee.eno.generation.DDI2ODTGenerator; +import fr.insee.eno.generation.DDI2PDFGenerator; +import fr.insee.eno.generation.DDI2PoguesXMLGenerator; +import fr.insee.eno.generation.Generator; +import fr.insee.eno.generation.IdentityGenerator; +import fr.insee.eno.generation.PoguesXML2DDIGenerator; +import fr.insee.eno.parameters.InFormat; +import fr.insee.eno.parameters.OutFormat; +import fr.insee.eno.parameters.Pipeline; +import fr.insee.eno.parameters.PostProcessing; +import fr.insee.eno.parameters.PreProcessing; +import fr.insee.eno.postprocessing.NoopPostprocessor; +import fr.insee.eno.postprocessing.Postprocessor; +import fr.insee.eno.postprocessing.ddi.DDIMarkdown2XhtmlPostprocessor; +import fr.insee.eno.postprocessing.fr.FRBrowsingPostprocessor; +import fr.insee.eno.postprocessing.fr.FREditPatronPostprocessor; +import fr.insee.eno.postprocessing.fr.FRFixAdherencePostprocessor; +import fr.insee.eno.postprocessing.fr.FRIdentificationPostprocessor; +import fr.insee.eno.postprocessing.fr.FRInsertEndPostprocessor; +import fr.insee.eno.postprocessing.fr.FRInsertGenericQuestionsPostprocessor; +import fr.insee.eno.postprocessing.fr.FRInsertWelcomePostprocessor; +import fr.insee.eno.postprocessing.fr.FRModeleColtranePostprocessor; +import fr.insee.eno.postprocessing.fr.FRSpecificTreatmentPostprocessor; +import fr.insee.eno.postprocessing.js.JSExternalizeVariablesPostprocessor; +import fr.insee.eno.postprocessing.js.JSInsertGenericQuestionsPostprocessor; +import fr.insee.eno.postprocessing.js.JSSortComponentsPostprocessor; +import fr.insee.eno.postprocessing.js.JSVTLParserPostprocessor; +import fr.insee.eno.postprocessing.pdf.PDFEditStructurePagesPostprocessor; +import fr.insee.eno.postprocessing.pdf.PDFInsertAccompanyingMailsPostprocessor; +import fr.insee.eno.postprocessing.pdf.PDFInsertCoverPagePostprocessor; +import fr.insee.eno.postprocessing.pdf.PDFInsertEndQuestionPostprocessor; +import fr.insee.eno.postprocessing.pdf.PDFMailingPostprocessor; +import fr.insee.eno.postprocessing.pdf.PDFSpecificTreatmentPostprocessor; +import fr.insee.eno.postprocessing.pdf.PDFTableColumnPostprocessorFake; +import fr.insee.eno.preprocessing.DDI32ToDDI33Preprocessor; +import fr.insee.eno.preprocessing.DDICleaningPreprocessor; +import fr.insee.eno.preprocessing.DDIDereferencingPreprocessor; +import fr.insee.eno.preprocessing.DDIMappingPreprocessor; +import fr.insee.eno.preprocessing.DDITitlingPreprocessor; +import fr.insee.eno.preprocessing.PoguesXMLPreprocessorGoToTreatment; +import fr.insee.eno.preprocessing.Preprocessor; + +public class PipeLineGeneratorImpl implements PipelineGenerator { + + private static final Logger LOGGER = LoggerFactory.getLogger(PipeLineGeneratorImpl.class); + + // In2Out Generator + private IdentityGenerator identityGenerator = new IdentityGenerator(); + + private DDI2FRGenerator ddi2frGenerator = new DDI2FRGenerator(); + + private DDI2JSGenerator ddi2jsGenerator = new DDI2JSGenerator(); + + private DDI2ODTGenerator ddi2odtGenerator = new DDI2ODTGenerator(); + + private DDI2PDFGenerator ddi2pdfGenerator = new DDI2PDFGenerator(); + + private DDI2PoguesXMLGenerator ddi2poguesXmlGenerator = new DDI2PoguesXMLGenerator(); + + private PoguesXML2DDIGenerator poguesXml2ddiGenerator = new PoguesXML2DDIGenerator(); + + // PreProcessing + private DDIDereferencingPreprocessor ddiDereferencing = new DDIDereferencingPreprocessor(); + + private DDICleaningPreprocessor ddiCleaning = new DDICleaningPreprocessor(); + + private DDITitlingPreprocessor ddiTitling = new DDITitlingPreprocessor(); + + private DDIMappingPreprocessor ddiMapping = new DDIMappingPreprocessor(); + + private PoguesXMLPreprocessorGoToTreatment poguesXmlGoTo = new PoguesXMLPreprocessorGoToTreatment(); + + private DDI32ToDDI33Preprocessor ddi32ToDDI33Preprocessor = new DDI32ToDDI33Preprocessor(); + + // PostProcessing + private DDIMarkdown2XhtmlPostprocessor ddiMW2XHTML = new DDIMarkdown2XhtmlPostprocessor(); + + private FRBrowsingPostprocessor frBrowsing = new FRBrowsingPostprocessor(); + + private FREditPatronPostprocessor frEditPatron = new FREditPatronPostprocessor(); + + private FRFixAdherencePostprocessor frFixAdherence = new FRFixAdherencePostprocessor(); + + private FRIdentificationPostprocessor frIdentification = new FRIdentificationPostprocessor(); + + private FRInsertEndPostprocessor frInsertEnd = new FRInsertEndPostprocessor(); + + private FRInsertGenericQuestionsPostprocessor frInsertGenericQuestions = new FRInsertGenericQuestionsPostprocessor(); + + private FRInsertWelcomePostprocessor frInsertWelcome = new FRInsertWelcomePostprocessor(); + + private FRModeleColtranePostprocessor frModeleColtrane = new FRModeleColtranePostprocessor(); + + private FRSpecificTreatmentPostprocessor frSpecificTreatment = new FRSpecificTreatmentPostprocessor(); + + private PDFEditStructurePagesPostprocessor pdfEditStructurePages = new PDFEditStructurePagesPostprocessor(); + + private PDFInsertAccompanyingMailsPostprocessor pdfInsertAccompanyingMails = new PDFInsertAccompanyingMailsPostprocessor(); + + private PDFInsertCoverPagePostprocessor pdfInsertCoverPage = new PDFInsertCoverPagePostprocessor(); + + private PDFInsertEndQuestionPostprocessor pdfInsertEndQuestion = new PDFInsertEndQuestionPostprocessor(); + + private PDFMailingPostprocessor pdfMailing = new PDFMailingPostprocessor(); + + private PDFSpecificTreatmentPostprocessor pdfSpecificTreatment = new PDFSpecificTreatmentPostprocessor(); + + private PDFTableColumnPostprocessorFake pdfTableColumn = new PDFTableColumnPostprocessorFake(); + + private JSInsertGenericQuestionsPostprocessor jsInsertGenericQuestions = new JSInsertGenericQuestionsPostprocessor(); + + private JSExternalizeVariablesPostprocessor jsExternalizeVariables = new JSExternalizeVariablesPostprocessor(); + + private JSSortComponentsPostprocessor jsSortComponents = new JSSortComponentsPostprocessor(); + + private JSVTLParserPostprocessor jsvtlParser = new JSVTLParserPostprocessor(); + + private NoopPostprocessor noop = new NoopPostprocessor(); + + + @Override + public GenerationService setPipeLine(Pipeline pipeline) throws Exception { + LOGGER.info("Creating new pipeline..."); + Preprocessor[] preprocessors = setPreProcessors(pipeline.getPreProcessing()); + Generator generator = setGenerator(pipeline.getInFormat(), pipeline.getOutFormat()); + Postprocessor[] postprocessors = setPostProcessors(pipeline.getPostProcessing()); + + LOGGER.info("PreProccesings : "+Arrays.toString(preprocessors)); + LOGGER.info("Core generation : "+generator.in2out()); + LOGGER.info("PostProccesings : "+Arrays.toString(postprocessors)); + return new GenerationService(preprocessors, generator, postprocessors); + } + + @Override + public Postprocessor[] setPostProcessors(List postProcessings) { + List postprocessors = new ArrayList(); + if(!postProcessings.isEmpty()) { + for(PostProcessing postProcessing : postProcessings) { + postprocessors.add(getPostPorcessor(postProcessing)); + } + } + else { + postprocessors.add(new NoopPostprocessor()); + } + + return postprocessors.toArray(new Postprocessor[postprocessors.size()]); + } + + @Override + public Preprocessor[] setPreProcessors(List preProcessings) { + List preprocessors = new ArrayList(); + for(PreProcessing preProcessing : preProcessings) { + preprocessors.add(getPrePorcessor(preProcessing)); + } + return preprocessors.toArray(new Preprocessor[preprocessors.size()]); + } + + @Override + public Generator setGenerator(InFormat inFormat, OutFormat outFormat) { + Generator generator=null; + + switch (inFormat) { + case DDI: + switch (outFormat) { + case DDI: + generator = identityGenerator; + break; + case FR: + generator = ddi2frGenerator; + break; + case JS: + generator = ddi2jsGenerator; + break; + case ODT: + generator = ddi2odtGenerator; + break; + case PDF: + generator = ddi2pdfGenerator; + break; + case POGUES_XML: + generator = ddi2poguesXmlGenerator; + break; + } + break; + case POGUES_XML: + switch (outFormat) { + case DDI: + generator = poguesXml2ddiGenerator; + break; + default: + generator = identityGenerator; + break; + } + break; + case FR: + generator = identityGenerator; + break; + } + return generator; + } + + @Override + public Postprocessor getPostPorcessor(PostProcessing postProcessing) { + Postprocessor postprocessor = null; + switch (postProcessing) { + case DDI_MARKDOWN_TO_XHTML: + postprocessor = ddiMW2XHTML; + break; + case FR_BROWSING: + postprocessor = frBrowsing; + break; + case FR_EDIT_PATRON: + postprocessor = frEditPatron; + break; + case FR_FIX_ADHERENCE: + postprocessor = frFixAdherence; + break; + case FR_IDENTIFICATION: + postprocessor = frIdentification; + break; + case FR_INSERT_END: + postprocessor = frInsertEnd; + break; + case FR_INSERT_GENERIC_QUESTIONS: + postprocessor = frInsertGenericQuestions; + break; + case FR_INSERT_WELCOME: + postprocessor = frInsertWelcome; + break; + case FR_MODELE_COLTRANE: + postprocessor = frModeleColtrane; + break; + case FR_SPECIFIC_TREATMENT: + postprocessor = frSpecificTreatment; + break; + case PDF_EDIT_STRUCTURE_PAGES: + postprocessor = pdfEditStructurePages; + break; + case PDF_INSERT_ACCOMPANYING_MAILS: + postprocessor = pdfInsertAccompanyingMails; + break; + case PDF_INSERT_COVER_PAGE: + postprocessor = pdfInsertCoverPage; + break; + case PDF_INSERT_END_QUESTION: + postprocessor = pdfInsertEndQuestion; + break; + case PDF_MAILING: + postprocessor = pdfMailing; + break; + case PDF_SPECIFIC_TREATMENT: + postprocessor = pdfSpecificTreatment; + break; + case PDF_TABLE_COLUMN: + postprocessor = pdfTableColumn; + break; + case JS_EXTERNALIZE_VARIABLES: + postprocessor = jsExternalizeVariables; + break; + case JS_INSERT_GENERIC_QUESTIONS: + postprocessor= jsInsertGenericQuestions; + break; + case JS_SORT_COMPONENTS: + postprocessor = jsSortComponents; + break; + case JS_VTL_PARSER: + postprocessor = jsvtlParser; + break; + case JS_SPECIFIC_TREATMENT: + postprocessor = noop; + break; + case DDI_SPECIFIC_TREATMENT: + postprocessor = noop; + break; + case ODT_SPECIFIC_TREATMENT: + postprocessor = noop; + break; + } + return postprocessor; + } + + @Override + public Preprocessor getPrePorcessor(PreProcessing preProcessing) { + Preprocessor preprocessor = null; + switch (preProcessing) { + case DDI_32_TO_DDI_33: + preprocessor = ddi32ToDDI33Preprocessor; + break; + case DDI_DEREFERENCING: + preprocessor = ddiDereferencing; + break; + case DDI_CLEANING: + preprocessor = ddiCleaning; + break; + case DDI_TITLING: + preprocessor = ddiTitling; + break; + case DDI_MAPPING: + preprocessor = ddiMapping; + break; + case POGUES_XML_GOTO_2_ITE: + preprocessor = poguesXmlGoTo; + break; + case POGUES_XML_SUPPRESSION_GOTO: + break; + case POGUES_XML_TWEAK_TO_MERGE_EQUIVALENT_ITE: + break; + } + return preprocessor; + } + + +} diff --git a/src/main/java/fr/insee/eno/params/pipeline/PipelineGenerator.java b/src/main/java/fr/insee/eno/params/pipeline/PipelineGenerator.java new file mode 100644 index 000000000..2d6707b0f --- /dev/null +++ b/src/main/java/fr/insee/eno/params/pipeline/PipelineGenerator.java @@ -0,0 +1,61 @@ +package fr.insee.eno.params.pipeline; + +import java.util.List; + +import fr.insee.eno.GenerationService; +import fr.insee.eno.generation.Generator; +import fr.insee.eno.parameters.InFormat; +import fr.insee.eno.parameters.OutFormat; +import fr.insee.eno.parameters.Pipeline; +import fr.insee.eno.parameters.PostProcessing; +import fr.insee.eno.parameters.PreProcessing; +import fr.insee.eno.postprocessing.Postprocessor; +import fr.insee.eno.preprocessing.Preprocessor; + +public interface PipelineGenerator { + + /** + * + * @param pipeline + * @return a GenerationService with the Eno transformation (PreProcessor, Generator and PostProcessor) according to the param. + * @throws Exception + */ + public GenerationService setPipeLine(Pipeline pipeline) throws Exception; + + /** + * + * @param postProcessings + * @return a list of Postprocessor (Java class) according to a List of PostProcessing (Enum) + */ + public Postprocessor[] setPostProcessors(List postProcessings); + + /** + * + * @param a list of Preprocessor (Java class) according to a List of PreProcessing (Enum) + * @return + */ + public Preprocessor[] setPreProcessors(List preProcessings); + + /** + * + * @param inFormat + * @param outFormat + * @return the Generator according to the inFormat(Enum) and outFormat(Enum) + */ + public Generator setGenerator(InFormat inFormat, OutFormat outFormat); + + /** + * Linking function : Postprocessor with PostProcessing + * @param postProcessing + * @return the Postprocessor java class according to PostProcessing(Enum) + */ + public Postprocessor getPostPorcessor(PostProcessing postProcessing); + + /** + * Linking function : Preprocessor with PreProcessing + * @param postProcessing + * @return the Preprocessor java class according to PreProcessing(Enum) + */ + public Preprocessor getPrePorcessor(PreProcessing preProcessing); + +} diff --git a/src/main/java/fr/insee/eno/params/validation/SchemaValidator.java b/src/main/java/fr/insee/eno/params/validation/SchemaValidator.java new file mode 100644 index 000000000..e6ca928fa --- /dev/null +++ b/src/main/java/fr/insee/eno/params/validation/SchemaValidator.java @@ -0,0 +1,15 @@ +package fr.insee.eno.params.validation; + +import java.io.InputStream; + +public interface SchemaValidator { + + /** + * + * @param paramsIS + * @return + */ + ValidationMessage validate(InputStream paramsIS); + + +} diff --git a/src/main/java/fr/insee/eno/params/validation/SchemaValidatorImpl.java b/src/main/java/fr/insee/eno/params/validation/SchemaValidatorImpl.java new file mode 100644 index 000000000..e02bfb8cc --- /dev/null +++ b/src/main/java/fr/insee/eno/params/validation/SchemaValidatorImpl.java @@ -0,0 +1,78 @@ +package fr.insee.eno.params.validation; + +import java.io.InputStream; + +import javax.xml.XMLConstants; +import javax.xml.transform.Source; +import javax.xml.transform.Transformer; +import javax.xml.transform.TransformerFactory; +import javax.xml.transform.dom.DOMResult; +import javax.xml.transform.dom.DOMSource; +import javax.xml.transform.stream.StreamSource; +import javax.xml.validation.Schema; +import javax.xml.validation.SchemaFactory; +import javax.xml.validation.Validator; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.xml.sax.SAXException; + +import fr.insee.eno.Constants; + +public class SchemaValidatorImpl implements SchemaValidator { + + + private static final Logger LOGGER = LoggerFactory.getLogger(SchemaValidatorImpl.class); + + private Schema schema; + private Validator validator; + + public SchemaValidatorImpl() { + SchemaFactory sf = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI); + try { + schema = sf.newSchema(Constants.ENO_PARAMETERS_XSD); + } catch (SAXException e) { + e.printStackTrace(); + } + validator = schema.newValidator(); + + } + + @Override + public ValidationMessage validate(InputStream paramsIS) { + LOGGER.info("Validation of parameters file..."); + boolean valid=false; + String message=""; + try { + validateIS(paramsIS); + valid=true; + } catch (Exception e) { + e.printStackTrace(); + message = e.getMessage(); + LOGGER.error(message); + } + finally { + LOGGER.info("Validation :"+valid); + } + message = valid ? "Parameters respect schema." : message; + return new ValidationMessage(message, valid); + } + + public void validateIS(InputStream paramsIS) throws Exception { + validator.reset(); + Source source = new StreamSource(paramsIS); + source = toDOMSource(source); + validator.validate(source); + } + + public DOMSource toDOMSource(Source source) throws Exception { + if (source instanceof DOMSource) { + return (DOMSource) source; + } + Transformer trans = TransformerFactory.newInstance().newTransformer(); + DOMResult result = new DOMResult(); + trans.transform(source, result); + return new DOMSource(result.getNode()); + } + +} diff --git a/src/main/java/fr/insee/eno/params/validation/ValidationMessage.java b/src/main/java/fr/insee/eno/params/validation/ValidationMessage.java new file mode 100644 index 000000000..3f49a3a8d --- /dev/null +++ b/src/main/java/fr/insee/eno/params/validation/ValidationMessage.java @@ -0,0 +1,28 @@ +package fr.insee.eno.params.validation; + +public class ValidationMessage { + + public ValidationMessage(String message, boolean valid) { + super(); + this.message = message; + this.valid = valid; + } + private String message; + private boolean valid; + + + + public String getMessage() { + return message; + } + public void setMessage(String message) { + this.message = message; + } + public boolean isValid() { + return valid; + } + public void setValid(boolean valid) { + this.valid = valid; + } + +} diff --git a/src/main/java/fr/insee/eno/params/validation/Validator.java b/src/main/java/fr/insee/eno/params/validation/Validator.java new file mode 100644 index 000000000..417be55c1 --- /dev/null +++ b/src/main/java/fr/insee/eno/params/validation/Validator.java @@ -0,0 +1,39 @@ +package fr.insee.eno.params.validation; + +import fr.insee.eno.parameters.ENOParameters; +import fr.insee.eno.parameters.InFormat; +import fr.insee.eno.parameters.OutFormat; +import fr.insee.eno.parameters.Pipeline; + +public interface Validator { + + /** + * It validates all ENOParameters and it is based on the following function + * @param pipeline + * @return a ValidationMessage with a message and the boolean if it is valid. + */ + ValidationMessage validate(ENOParameters parametersType); + + /** + * It validates the combination of InFormat/OutFormat. + * @param pipeline + * @return a ValidationMessage with a message and the boolean if it is valid. + */ + ValidationMessage validateIn2Out(InFormat inFormat, OutFormat outFormat); + + /** + * It validates PreProcessing according to the pipeline. + * @param pipeline + * @return a ValidationMessage with a message and the boolean if it is valid. + */ + ValidationMessage validatePreProcessings(Pipeline pipeline); + + /** + * It validates PostProcessing according to the pipeline. + * @param pipeline + * @return a ValidationMessage with a message and the boolean if it is valid. + */ + ValidationMessage validatePostProcessings(Pipeline pipeline); + + +} diff --git a/src/main/java/fr/insee/eno/params/validation/ValidatorImpl.java b/src/main/java/fr/insee/eno/params/validation/ValidatorImpl.java new file mode 100644 index 000000000..ed9ac397b --- /dev/null +++ b/src/main/java/fr/insee/eno/params/validation/ValidatorImpl.java @@ -0,0 +1,144 @@ +package fr.insee.eno.params.validation; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.List; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import fr.insee.eno.parameters.ENOParameters; +import fr.insee.eno.parameters.InFormat; +import fr.insee.eno.parameters.OutFormat; +import fr.insee.eno.parameters.Pipeline; +import fr.insee.eno.parameters.PostProcessing; +import fr.insee.eno.parameters.PreProcessing; + +public class ValidatorImpl implements Validator { + + private static final Logger LOGGER = LoggerFactory.getLogger(ValidatorImpl.class); + + public static final PostProcessing[] POST_PROCESSINGS_FULL = PostProcessing.class.getEnumConstants(); + public static final PreProcessing[] PRE_PROCESSINGS_FULL = PreProcessing.class.getEnumConstants(); + + @Override + public ValidationMessage validate(ENOParameters parametersType) { + Pipeline pipeline = parametersType.getPipeline(); + ValidationMessage validationIn2Out = validateIn2Out(pipeline.getInFormat(), pipeline.getOutFormat()); + ValidationMessage validationPreProcessings = validatePreProcessings(pipeline); + ValidationMessage validationPostProcessings = validatePostProcessings(pipeline); + + boolean isValid = validationIn2Out.isValid() + && validationPreProcessings.isValid() + && validationPostProcessings.isValid(); + String message = validationIn2Out.getMessage() +", "+ + validationPreProcessings.getMessage() +", "+ + validationPostProcessings.getMessage(); + + return new ValidationMessage(message,isValid); + } + + @Override + public ValidationMessage validateIn2Out(InFormat inFormat, OutFormat outFormat) { + boolean isValid = inFormat!=null && outFormat!=null; + String message = ""; + if(isValid) { + switch (inFormat) { + case DDI: + isValid = true; + break; + case POGUES_XML: + isValid = outFormat.equals(OutFormat.DDI) || outFormat.equals(OutFormat.POGUES_XML); + break; + case FR: + isValid = outFormat.equals(OutFormat.FR); + default: + isValid=false; + break; + } + message += isValid ? "" : "The combination (in:'"+inFormat.value()+"'/out:'"+ outFormat.value() +"')"+" format is not valid"; + } + else { + message = "One of In/Out format doesn't exist in Eno. "; + } + + message += isValid ? "The combination In/Out format is valid" : ""; + LOGGER.info(message); + return new ValidationMessage(message, isValid); + } + + @Override + public ValidationMessage validatePreProcessings(Pipeline pipeline) { + boolean isValid=true; + String message=""; + InFormat inFormat = pipeline.getInFormat(); + boolean preProcessingNeeded = pipeline.getPostProcessing().contains(PostProcessing.FR_MODELE_COLTRANE); + List preProcessings = pipeline.getPreProcessing(); + List preProcessingsCopy = new ArrayList<>(preProcessings); + + if(inFormat!=null) { + if(isValid) { + Collections.sort(preProcessingsCopy); + List preProcessingInFormat = Arrays.asList(Arrays.stream(PRE_PROCESSINGS_FULL).filter(p->p.value().contains(inFormat.value()+"-")).toArray(PreProcessing[]::new)); + + boolean order = preProcessingsCopy.equals(preProcessings); + boolean consistency = preProcessingInFormat.containsAll(preProcessingsCopy); + boolean mapping = preProcessingNeeded ? preProcessings.contains(PreProcessing.DDI_MAPPING) || inFormat.equals(InFormat.FR):true; + + isValid = order && consistency && mapping; + + message += order ? "" : "PreProcessings are not in the right order. The right order should be : "+preProcessingsCopy; + message += consistency ? "" : "PreProcessings are not valid according to the InFormat ('"+inFormat.value()+"') "; + message += mapping ? "" : "The PostProcessing '"+PostProcessing.FR_MODELE_COLTRANE.value()+"', need the PreProcessing '"+PreProcessing.DDI_MAPPING.value()+"' "; + + } + else { + message+="One of PreProcessings doesn't exist in Eno."; + } + } + else { + isValid = false; + message+="The inFormat doesn't exist in Eno, validator can't check PreProcessings."; + } + message += isValid ? "PreProcessing are valid" : ""; + LOGGER.info(message); + return new ValidationMessage(message, isValid); + } + + @Override + public ValidationMessage validatePostProcessings(Pipeline pipeline) { + boolean isValid = true; + String message=""; + OutFormat outFormat = pipeline.getOutFormat(); + List postProcessings = pipeline.getPostProcessing(); + List postProcessingsCopy = new ArrayList<>(postProcessings); + + if(outFormat!=null) { + if(isValid) { + + Collections.sort(postProcessingsCopy); + List postProcessingOutFormat = Arrays.asList(Arrays.stream(POST_PROCESSINGS_FULL).filter(p->p.value().contains(outFormat.value()+"-")).toArray(PostProcessing[]::new)); + + boolean order = postProcessingsCopy.equals(postProcessings); + boolean consistency = postProcessingOutFormat.containsAll(postProcessingsCopy); + + isValid = order && consistency; + + message += order ? "" : "PostProcessings are not in the right order. The order should be : "+postProcessingsCopy; + message += consistency ? "" : "PostProcessings are not valid according to the OutFormat ('"+outFormat.value()+"') "; + } + else { + message+="One of PostProcessings doesn't exist in Eno."; + } + } + else { + isValid = false; + message+="The outFormat doesn't exist in Eno, validator can't check PostProcessings."; + } + + message += isValid ? "PostProcessing are valid" : ""; + LOGGER.info(message); + return new ValidationMessage(message, isValid); + } +} diff --git a/src/main/java/fr/insee/eno/postprocessing/DDIPostprocessor.java b/src/main/java/fr/insee/eno/postprocessing/DDIPostprocessor.java index b69c7f8a7..c2a7151ee 100644 --- a/src/main/java/fr/insee/eno/postprocessing/DDIPostprocessor.java +++ b/src/main/java/fr/insee/eno/postprocessing/DDIPostprocessor.java @@ -15,6 +15,7 @@ /** * DDI postprocessor. */ +@Deprecated public class DDIPostprocessor implements Postprocessor { private static final Logger logger = LoggerFactory.getLogger(DDIPostprocessor.class); @@ -24,7 +25,7 @@ public class DDIPostprocessor implements Postprocessor { @Override public File process(File input, byte[] parameters, String survey) throws Exception { - logger.info("DDIPostprocessor Target : START"); + logger.info("DDIMarkdown2XhtmlPostprocessor Target : START"); String mw2xhtmlOutput = FilenameUtils.removeExtension(input.getPath()) + Constants.MW_EXTENSION; // ----- mw2xhtml logger.debug("Markdown to XHTML : -Input : " + input + " -Output : " + mw2xhtmlOutput + " -Stylesheet : " @@ -59,7 +60,7 @@ public File process(File input, byte[] parameters, String survey) throws Excepti isUTIL_DDI_TWEAK_XHTML_FOR_DDI_XSL.close(); osTweakXhtmlForDdi.close(); - logger.debug("DDIPostprocessor : END"); + logger.debug("DDIMarkdown2XhtmlPostprocessor : END"); return new File(outputTweakXhtmlForDdi); } diff --git a/src/main/java/fr/insee/eno/postprocessing/JSExternalizeVariablesPostprocessor.java b/src/main/java/fr/insee/eno/postprocessing/JSExternalizeVariablesPostprocessor.java index ab3322d74..13dd5288b 100644 --- a/src/main/java/fr/insee/eno/postprocessing/JSExternalizeVariablesPostprocessor.java +++ b/src/main/java/fr/insee/eno/postprocessing/JSExternalizeVariablesPostprocessor.java @@ -14,6 +14,7 @@ /** * Customization of JS postprocessor. */ +@Deprecated public class JSExternalizeVariablesPostprocessor implements Postprocessor { private static final Logger logger = LoggerFactory.getLogger(JSExternalizeVariablesPostprocessor.class); @@ -25,7 +26,7 @@ public class JSExternalizeVariablesPostprocessor implements Postprocessor { public File process(File input, byte[] parameters, String surveyName) throws Exception { File outputCustomFOFile = new File( - input.getPath().replace(Constants.SORT_COMPONENTS_JS_EXTENSION, Constants.FINAL_JS_EXTENSION)); + input.getPath().replace(Constants.SORT_COMPONENTS_JS_EXTENSION, Constants.EXTERNALIZE_VARIABLES_JS_EXTENSION)); InputStream JS_XSL = Constants.getInputStreamFromPath(Constants.TRANSFORMATIONS_EXTERNALIZE_VARIABLES_JS); diff --git a/src/main/java/fr/insee/eno/postprocessing/JSSortComponentsPostprocessor.java b/src/main/java/fr/insee/eno/postprocessing/JSSortComponentsPostprocessor.java index 89204651e..eb0104cb9 100644 --- a/src/main/java/fr/insee/eno/postprocessing/JSSortComponentsPostprocessor.java +++ b/src/main/java/fr/insee/eno/postprocessing/JSSortComponentsPostprocessor.java @@ -15,6 +15,7 @@ /** * Customization of JS postprocessor. */ +@Deprecated public class JSSortComponentsPostprocessor implements Postprocessor { private static final Logger logger = LoggerFactory.getLogger(JSSortComponentsPostprocessor.class); diff --git a/src/main/java/fr/insee/eno/postprocessing/PDFEditStructurePagesPostprocessor.java b/src/main/java/fr/insee/eno/postprocessing/PDFEditStructurePagesPostprocessor.java index 2ee9ad683..f3504f16e 100644 --- a/src/main/java/fr/insee/eno/postprocessing/PDFEditStructurePagesPostprocessor.java +++ b/src/main/java/fr/insee/eno/postprocessing/PDFEditStructurePagesPostprocessor.java @@ -12,6 +12,7 @@ import fr.insee.eno.Constants; import fr.insee.eno.transform.xsl.XslTransformation; +@Deprecated public class PDFEditStructurePagesPostprocessor implements Postprocessor { private static final Logger logger = LoggerFactory.getLogger(PDFEditStructurePagesPostprocessor.class); diff --git a/src/main/java/fr/insee/eno/postprocessing/PDFInsertAccompanyingMailsPostprocessor.java b/src/main/java/fr/insee/eno/postprocessing/PDFInsertAccompanyingMailsPostprocessor.java index fdb5f22af..cf9d730b3 100644 --- a/src/main/java/fr/insee/eno/postprocessing/PDFInsertAccompanyingMailsPostprocessor.java +++ b/src/main/java/fr/insee/eno/postprocessing/PDFInsertAccompanyingMailsPostprocessor.java @@ -12,6 +12,7 @@ import fr.insee.eno.Constants; import fr.insee.eno.transform.xsl.XslTransformation; +@Deprecated public class PDFInsertAccompanyingMailsPostprocessor implements Postprocessor { private static final Logger logger = LoggerFactory.getLogger(PDFInsertAccompanyingMailsPostprocessor.class); diff --git a/src/main/java/fr/insee/eno/postprocessing/PDFInsertCoverPagePostprocessor.java b/src/main/java/fr/insee/eno/postprocessing/PDFInsertCoverPagePostprocessor.java index 1927b6890..aca31bcac 100644 --- a/src/main/java/fr/insee/eno/postprocessing/PDFInsertCoverPagePostprocessor.java +++ b/src/main/java/fr/insee/eno/postprocessing/PDFInsertCoverPagePostprocessor.java @@ -12,6 +12,7 @@ import fr.insee.eno.Constants; import fr.insee.eno.transform.xsl.XslTransformation; +@Deprecated public class PDFInsertCoverPagePostprocessor implements Postprocessor { private static final Logger logger = LoggerFactory.getLogger(PDFInsertCoverPagePostprocessor.class); diff --git a/src/main/java/fr/insee/eno/postprocessing/PDFInsertEndQuestionPostprocessor.java b/src/main/java/fr/insee/eno/postprocessing/PDFInsertEndQuestionPostprocessor.java index bcbf5509e..5468c9ff6 100644 --- a/src/main/java/fr/insee/eno/postprocessing/PDFInsertEndQuestionPostprocessor.java +++ b/src/main/java/fr/insee/eno/postprocessing/PDFInsertEndQuestionPostprocessor.java @@ -12,6 +12,7 @@ import fr.insee.eno.Constants; import fr.insee.eno.transform.xsl.XslTransformation; +@Deprecated public class PDFInsertEndQuestionPostprocessor implements Postprocessor { private static final Logger logger = LoggerFactory.getLogger(PDFInsertEndQuestionPostprocessor.class); diff --git a/src/main/java/fr/insee/eno/postprocessing/PDFMailingPostprocessor.java b/src/main/java/fr/insee/eno/postprocessing/PDFMailingPostprocessor.java index 55948b036..f9abaa2b5 100644 --- a/src/main/java/fr/insee/eno/postprocessing/PDFMailingPostprocessor.java +++ b/src/main/java/fr/insee/eno/postprocessing/PDFMailingPostprocessor.java @@ -14,6 +14,7 @@ /** * Customization of FO postprocessor. */ +@Deprecated public class PDFMailingPostprocessor implements Postprocessor { private static final Logger logger = LoggerFactory.getLogger(PDFMailingPostprocessor.class); diff --git a/src/main/java/fr/insee/eno/postprocessing/PDFSpecificTreatmentPostprocessor.java b/src/main/java/fr/insee/eno/postprocessing/PDFSpecificTreatmentPostprocessor.java index 9418296f6..6e8902f87 100644 --- a/src/main/java/fr/insee/eno/postprocessing/PDFSpecificTreatmentPostprocessor.java +++ b/src/main/java/fr/insee/eno/postprocessing/PDFSpecificTreatmentPostprocessor.java @@ -11,6 +11,7 @@ import fr.insee.eno.Constants; import fr.insee.eno.transform.xsl.XslTransformation; +@Deprecated public class PDFSpecificTreatmentPostprocessor implements Postprocessor { private static final Logger logger = LoggerFactory.getLogger(PDFSpecificTreatmentPostprocessor.class); diff --git a/src/main/java/fr/insee/eno/postprocessing/PDFTableColumnPostprocessorFake.java b/src/main/java/fr/insee/eno/postprocessing/PDFTableColumnPostprocessorFake.java index b10557433..8d6241693 100644 --- a/src/main/java/fr/insee/eno/postprocessing/PDFTableColumnPostprocessorFake.java +++ b/src/main/java/fr/insee/eno/postprocessing/PDFTableColumnPostprocessorFake.java @@ -12,6 +12,7 @@ /** * PDF postprocessor. */ +@Deprecated public class PDFTableColumnPostprocessorFake implements Postprocessor { private static final Logger logger = LoggerFactory.getLogger(PDFTableColumnPostprocessorFake.class); diff --git a/src/main/java/fr/insee/eno/postprocessing/Postprocessor.java b/src/main/java/fr/insee/eno/postprocessing/Postprocessor.java index b1bc29953..66f0f148f 100644 --- a/src/main/java/fr/insee/eno/postprocessing/Postprocessor.java +++ b/src/main/java/fr/insee/eno/postprocessing/Postprocessor.java @@ -10,4 +10,17 @@ public interface Postprocessor { File process(File input, byte[] parametersFile, String survey) throws Exception; + default File process(File input, byte[] parametersFile, byte[] metadata, String survey) throws Exception{ + return this.process(input,parametersFile,survey); + } + + default File process(File input, byte[] parametersFile, byte[] metadata, byte[] specificTreatmentXsl, String survey) throws Exception{ + return this.process(input,parametersFile,metadata,survey); + } + + default File process(File input, byte[] parametersFile, byte[] metadata, byte[] specificTreatmentXsl, byte[] mapping, String survey) throws Exception{ + return this.process(input,parametersFile,metadata,specificTreatmentXsl,survey); + } + + public String toString(); } diff --git a/src/main/java/fr/insee/eno/postprocessing/ddi/DDIMarkdown2XhtmlPostprocessor.java b/src/main/java/fr/insee/eno/postprocessing/ddi/DDIMarkdown2XhtmlPostprocessor.java new file mode 100644 index 000000000..f6398afa4 --- /dev/null +++ b/src/main/java/fr/insee/eno/postprocessing/ddi/DDIMarkdown2XhtmlPostprocessor.java @@ -0,0 +1,79 @@ +package fr.insee.eno.postprocessing.ddi; + +import java.io.File; +import java.io.InputStream; +import java.io.OutputStream; + +import org.apache.commons.io.FileUtils; +import org.apache.commons.io.FilenameUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import fr.insee.eno.Constants; +import fr.insee.eno.exception.EnoGenerationException; +import fr.insee.eno.postprocessing.Postprocessor; +import fr.insee.eno.transform.xsl.XslTransformation; + +/** + * DDI postprocessor. + */ +public class DDIMarkdown2XhtmlPostprocessor implements Postprocessor { + + private static final Logger logger = LoggerFactory.getLogger(DDIMarkdown2XhtmlPostprocessor.class); + + private XslTransformation saxonService = new XslTransformation(); + + @Override + public File process(File input, byte[] parameters, String survey) throws Exception { + logger.info("DDIMarkdown2XhtmlPostprocessor Target : START"); + String mw2xhtmlOutput = FilenameUtils.removeExtension(input.getPath()) + Constants.MW_EXTENSION; + // ----- mw2xhtml + logger.debug("Markdown to XHTML : -Input : " + input + " -Output : " + mw2xhtmlOutput + " -Stylesheet : " + + Constants.UTIL_DDI_MW2XHTML_XSL + " -Parameters : " + Constants.sUB_TEMP_FOLDER(survey)); + + InputStream isDDI_MW2XHTML_XSL = Constants.getInputStreamFromPath(Constants.UTIL_DDI_MW2XHTML_XSL); + InputStream isInputFile = FileUtils.openInputStream(input); + + OutputStream osTEMP_NULL_TMP = FileUtils.openOutputStream(new File(mw2xhtmlOutput)); + + try { + saxonService.transformMw2XHTML(isInputFile, isDDI_MW2XHTML_XSL, osTEMP_NULL_TMP, + Constants.sUB_TEMP_FOLDER_FILE(survey)); + }catch(Exception e) { + throw new EnoGenerationException("An error was occured during the Markdown2Xhtml transformation. "+e.getMessage()); + } + isInputFile.close(); + isDDI_MW2XHTML_XSL.close(); + osTEMP_NULL_TMP.close(); + + // ----- tweak-xhtml-for-ddi + // tweak-xhtml-for-ddi-input = mw2xhtml-output + + String outputTweakXhtmlForDdi = FilenameUtils.removeExtension(input.getPath()) + Constants.FINAL_DDI_EXTENSION; + + logger.debug("Tweak-xhtml-for-ddi : -Input : " + mw2xhtmlOutput + " -Output : " + outputTweakXhtmlForDdi + + " -Stylesheet : " + Constants.UTIL_DDI_TWEAK_XHTML_FOR_DDI_XSL + " -Parameters : " + + (parameters == null ? "Default parameters" : "Provided parameters")); + + InputStream isTweakXhtmlForDdi = FileUtils.openInputStream(new File(mw2xhtmlOutput)); + InputStream isUTIL_DDI_TWEAK_XHTML_FOR_DDI_XSL = Constants + .getInputStreamFromPath(Constants.UTIL_DDI_TWEAK_XHTML_FOR_DDI_XSL); + OutputStream osTweakXhtmlForDdi = FileUtils.openOutputStream(new File(outputTweakXhtmlForDdi)); + try { + saxonService.transformTweakXhtmlForDdi(isTweakXhtmlForDdi, isUTIL_DDI_TWEAK_XHTML_FOR_DDI_XSL, + osTweakXhtmlForDdi, Constants.sUB_TEMP_FOLDER_FILE(survey)); + }catch(Exception e) { + String errorMessage = "An error was occured during the Markdown2Xhtml transformation. "+e.getMessage(); + logger.error(errorMessage); + throw new EnoGenerationException(errorMessage); + } + isTweakXhtmlForDdi.close(); + isUTIL_DDI_TWEAK_XHTML_FOR_DDI_XSL.close(); + osTweakXhtmlForDdi.close(); + + logger.debug("DDIMarkdown2XhtmlPostprocessor : END"); + return new File(outputTweakXhtmlForDdi); + + } + +} diff --git a/src/main/java/fr/insee/eno/postprocessing/fr/FRBrowsingPostprocessor.java b/src/main/java/fr/insee/eno/postprocessing/fr/FRBrowsingPostprocessor.java new file mode 100644 index 000000000..2fee529af --- /dev/null +++ b/src/main/java/fr/insee/eno/postprocessing/fr/FRBrowsingPostprocessor.java @@ -0,0 +1,58 @@ +package fr.insee.eno.postprocessing.fr; + +import java.io.File; +import java.io.InputStream; +import java.io.OutputStream; + +import org.apache.commons.io.FileUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import fr.insee.eno.Constants; +import fr.insee.eno.exception.EnoGenerationException; +import fr.insee.eno.parameters.PostProcessing; +import fr.insee.eno.postprocessing.Postprocessor; +import fr.insee.eno.transform.xsl.XslTransformation; + +public class FRBrowsingPostprocessor implements Postprocessor { + + private static final Logger logger = LoggerFactory.getLogger(FRBrowsingPostprocessor.class); + + private XslTransformation saxonService = new XslTransformation();; + + @Override + public File process(File input, byte[] parameters, String survey) throws Exception { + + File outputForFRFile = new File(input.getParent(), + Constants.BASE_NAME_FORM_FILE + + Constants.BROWSING_FR_EXTENSION); + + logger.debug("Output folder for basic-form : " + outputForFRFile.getAbsolutePath()); + + InputStream FO_XSL = Constants.getInputStreamFromPath(Constants.UTIL_FR_BROWSING_XSL); + + InputStream inputStream = FileUtils.openInputStream(input); + OutputStream outputStream = FileUtils.openOutputStream(outputForFRFile); + try { + saxonService.transformBrowsingFr(inputStream, outputStream, FO_XSL); + }catch(Exception e) { + String errorMessage = "An error was occured during the " + toString() + " transformation. "+e.getMessage(); + logger.error(errorMessage); + throw new EnoGenerationException(errorMessage); + } + + inputStream.close(); + outputStream.close(); + FO_XSL.close(); + logger.info("End of Browsing post-processing " + outputForFRFile.getAbsolutePath()); + + return outputForFRFile; + } + + @Override + public String toString() { + return PostProcessing.FR_BROWSING.name(); + } + + +} diff --git a/src/main/java/fr/insee/eno/postprocessing/fr/FREditPatronPostprocessor.java b/src/main/java/fr/insee/eno/postprocessing/fr/FREditPatronPostprocessor.java new file mode 100644 index 000000000..339925386 --- /dev/null +++ b/src/main/java/fr/insee/eno/postprocessing/fr/FREditPatronPostprocessor.java @@ -0,0 +1,58 @@ +package fr.insee.eno.postprocessing.fr; + +import java.io.File; +import java.io.InputStream; +import java.io.OutputStream; + +import org.apache.commons.io.FileUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import fr.insee.eno.Constants; +import fr.insee.eno.exception.EnoGenerationException; +import fr.insee.eno.parameters.PostProcessing; +import fr.insee.eno.postprocessing.Postprocessor; +import fr.insee.eno.transform.xsl.XslTransformation; + +public class FREditPatronPostprocessor implements Postprocessor { + + private static final Logger logger = LoggerFactory.getLogger(FREditPatronPostprocessor.class); + + private XslTransformation saxonService = new XslTransformation(); + + @Override + public File process(File input, byte[] parameters, String survey) throws Exception { + return this.process(input, parameters, null, survey); + } + + @Override + public File process(File input, byte[] parameters, byte[] metadata, String survey) throws Exception { + File outputForFRFile = new File(input.getParent(), + Constants.BASE_NAME_FORM_FILE + + Constants.EDIT_PATRON_FR_EXTENSION); + + logger.debug("Output folder for basic-form : " + outputForFRFile.getAbsolutePath()); + + InputStream FO_XSL = Constants.getInputStreamFromPath(Constants.UTIL_FR_EDIT_PATRON_XSL); + + InputStream inputStream = FileUtils.openInputStream(input); + OutputStream outputStream = FileUtils.openOutputStream(outputForFRFile); + try { + saxonService.transformWithMetadata(inputStream, outputStream, FO_XSL, parameters, metadata); + }catch(Exception e) { + String errorMessage = "An error was occured during the " + toString() + " transformation. "+e.getMessage(); + logger.error(errorMessage); + throw new EnoGenerationException(errorMessage); + } + inputStream.close(); + outputStream.close(); + FO_XSL.close(); + logger.info("End of EditPatron post-processing " + outputForFRFile.getAbsolutePath()); + return outputForFRFile; + } + + @Override + public String toString() { + return PostProcessing.FR_EDIT_PATRON.name(); + } +} diff --git a/src/main/java/fr/insee/eno/postprocessing/fr/FRFixAdherencePostprocessor.java b/src/main/java/fr/insee/eno/postprocessing/fr/FRFixAdherencePostprocessor.java new file mode 100644 index 000000000..31ba427e1 --- /dev/null +++ b/src/main/java/fr/insee/eno/postprocessing/fr/FRFixAdherencePostprocessor.java @@ -0,0 +1,58 @@ +package fr.insee.eno.postprocessing.fr; + +import java.io.File; +import java.io.InputStream; +import java.io.OutputStream; + +import org.apache.commons.io.FileUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import fr.insee.eno.Constants; +import fr.insee.eno.exception.EnoGenerationException; +import fr.insee.eno.parameters.PostProcessing; +import fr.insee.eno.postprocessing.Postprocessor; +import fr.insee.eno.transform.xsl.XslTransformation; + +public class FRFixAdherencePostprocessor implements Postprocessor { + + private static final Logger logger = LoggerFactory.getLogger(FRFixAdherencePostprocessor.class); + + private XslTransformation saxonService = new XslTransformation(); + + @Override + public File process(File input, byte[] parameters, String survey) throws Exception { + + + File outputForFRFile = new File(input.getParent(), + Constants.BASE_NAME_FORM_FILE + + Constants.FIX_ADHERENCE_FR_EXTENSION); + + logger.debug("Output folder for basic-form : " + outputForFRFile.getAbsolutePath()); + + InputStream FR_XSL = Constants.getInputStreamFromPath(Constants.UTIL_FR_FIX_ADHERENCE_XSL); + + InputStream inputStream = FileUtils.openInputStream(input); + OutputStream outputStream = FileUtils.openOutputStream(outputForFRFile); + + try { + saxonService.transformSimple(inputStream, outputStream, FR_XSL); + }catch(Exception e) { + String errorMessage = "An error was occured during the " + toString() + " transformation. "+e.getMessage(); + logger.error(errorMessage); + throw new EnoGenerationException(errorMessage); + } + + inputStream.close(); + outputStream.close(); + FR_XSL.close(); + logger.info("End of fix adherence treatment post-processing " + outputForFRFile.getAbsolutePath()); + + return outputForFRFile; + } + + @Override + public String toString() { + return PostProcessing.FR_FIX_ADHERENCE.name(); + } +} diff --git a/src/main/java/fr/insee/eno/postprocessing/fr/FRIdentificationPostprocessor.java b/src/main/java/fr/insee/eno/postprocessing/fr/FRIdentificationPostprocessor.java new file mode 100644 index 000000000..e44926c12 --- /dev/null +++ b/src/main/java/fr/insee/eno/postprocessing/fr/FRIdentificationPostprocessor.java @@ -0,0 +1,57 @@ +package fr.insee.eno.postprocessing.fr; + +import java.io.File; +import java.io.InputStream; +import java.io.OutputStream; + +import org.apache.commons.io.FileUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import fr.insee.eno.Constants; +import fr.insee.eno.exception.EnoGenerationException; +import fr.insee.eno.parameters.PostProcessing; +import fr.insee.eno.postprocessing.Postprocessor; +import fr.insee.eno.transform.xsl.XslTransformation; + +public class FRIdentificationPostprocessor implements Postprocessor { + + private static final Logger logger = LoggerFactory.getLogger(FRIdentificationPostprocessor.class); + + private XslTransformation saxonService = new XslTransformation(); + + @Override + public File process(File input, byte[] parameters, String survey) throws Exception { + + File outputForFRFile = new File(input.getParent(), + Constants.BASE_NAME_FORM_FILE + + Constants.IDENTIFICATION_FR_EXTENSION); + + logger.debug("Output folder for basic-form : " + outputForFRFile.getAbsolutePath()); + + InputStream FO_XSL = Constants.getInputStreamFromPath(Constants.UTIL_FR_IDENTIFICATION_XSL); + + InputStream inputStream = FileUtils.openInputStream(input); + OutputStream outputStream = FileUtils.openOutputStream(outputForFRFile); + + try { + saxonService.transformSimple(inputStream, outputStream, FO_XSL); + }catch(Exception e) { + String errorMessage = "An error was occured during the " + toString() + " transformation. "+e.getMessage(); + logger.error(errorMessage); + throw new EnoGenerationException(errorMessage); + } + + inputStream.close(); + outputStream.close(); + FO_XSL.close(); + logger.info("End of identification post-processing " + outputForFRFile.getAbsolutePath()); + + return outputForFRFile; + } + + @Override + public String toString() { + return PostProcessing.FR_IDENTIFICATION.name(); + } +} diff --git a/src/main/java/fr/insee/eno/postprocessing/fr/FRInsertEndPostprocessor.java b/src/main/java/fr/insee/eno/postprocessing/fr/FRInsertEndPostprocessor.java new file mode 100644 index 000000000..854d21fcb --- /dev/null +++ b/src/main/java/fr/insee/eno/postprocessing/fr/FRInsertEndPostprocessor.java @@ -0,0 +1,63 @@ +package fr.insee.eno.postprocessing.fr; + +import java.io.File; +import java.io.InputStream; +import java.io.OutputStream; + +import org.apache.commons.io.FileUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import fr.insee.eno.Constants; +import fr.insee.eno.exception.EnoGenerationException; +import fr.insee.eno.parameters.PostProcessing; +import fr.insee.eno.postprocessing.Postprocessor; +import fr.insee.eno.transform.xsl.XslTransformation; + +public class FRInsertEndPostprocessor implements Postprocessor { + + private static final Logger logger = LoggerFactory.getLogger(FRInsertEndPostprocessor.class); + + private XslTransformation saxonService = new XslTransformation(); + + @Override + public File process(File input, byte[] parameters, String survey) throws Exception { + return this.process(input, parameters, null, survey); + } + + @Override + public File process(File input, byte[] parameters, byte[] metadata, String survey) throws Exception { + + File outputForFRFile = new File(input.getParent(), + Constants.BASE_NAME_FORM_FILE + + Constants.INSERT_END_FR_EXTENSION); + + logger.debug("Output folder for basic-form : " + outputForFRFile.getAbsolutePath()); + + InputStream FO_XSL = Constants.getInputStreamFromPath(Constants.UTIL_FR_INSERT_END_XSL); + + InputStream inputStream = FileUtils.openInputStream(input); + OutputStream outputStream = FileUtils.openOutputStream(outputForFRFile); + + try { + saxonService.transformWithMetadata(inputStream, outputStream, FO_XSL, parameters, metadata); + }catch(Exception e) { + String errorMessage = "An error was occured during the " + toString() + " transformation. "+e.getMessage(); + logger.error(errorMessage); + throw new EnoGenerationException(errorMessage); + } + + inputStream.close(); + outputStream.close(); + FO_XSL.close(); + logger.info("End of insert end post-processing " + outputForFRFile.getAbsolutePath()); + + return outputForFRFile; + } + + @Override + public String toString() { + return PostProcessing.FR_INSERT_END.name(); + } + +} diff --git a/src/main/java/fr/insee/eno/postprocessing/fr/FRInsertGenericQuestionsPostprocessor.java b/src/main/java/fr/insee/eno/postprocessing/fr/FRInsertGenericQuestionsPostprocessor.java new file mode 100644 index 000000000..f5d088686 --- /dev/null +++ b/src/main/java/fr/insee/eno/postprocessing/fr/FRInsertGenericQuestionsPostprocessor.java @@ -0,0 +1,56 @@ +package fr.insee.eno.postprocessing.fr; + +import java.io.File; +import java.io.InputStream; +import java.io.OutputStream; + +import org.apache.commons.io.FileUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import fr.insee.eno.Constants; +import fr.insee.eno.exception.EnoGenerationException; +import fr.insee.eno.parameters.PostProcessing; +import fr.insee.eno.postprocessing.Postprocessor; +import fr.insee.eno.transform.xsl.XslTransformation; + +public class FRInsertGenericQuestionsPostprocessor implements Postprocessor { + + private static final Logger logger = LoggerFactory.getLogger(FRInsertGenericQuestionsPostprocessor.class); + + private XslTransformation saxonService = new XslTransformation(); + + @Override + public File process(File input, byte[] parameters, String surveyName) throws Exception { + + File outputForFRFile = new File(input.getParent(), + Constants.BASE_NAME_FORM_FILE + + Constants.INSERT_GENERIC_QUESTIONS_FR_EXTENSION); + + logger.debug("Output folder for basic-form : " + outputForFRFile.getAbsolutePath()); + + InputStream inputStream = FileUtils.openInputStream(input); + OutputStream outputStream = FileUtils.openOutputStream(outputForFRFile); + + InputStream FR_XSL = Constants.getInputStreamFromPath(Constants.UTIL_FR_INSERT_GENERIC_QUESTIONS_XSL); + try { + saxonService.transformFRToFRSimplePost(inputStream,outputStream, FR_XSL,parameters); + }catch(Exception e) { + String errorMessage = "An error was occured during the " + toString() + " transformation. "+e.getMessage(); + logger.error(errorMessage); + throw new EnoGenerationException(errorMessage); + } + inputStream.close(); + outputStream.close(); + FR_XSL.close(); + logger.info("End of Insert-generic-questions post-processing." + outputForFRFile.getAbsolutePath()); + + return outputForFRFile; + } + + @Override + public String toString() { + return PostProcessing.FR_INSERT_GENERIC_QUESTIONS.name(); + } + +} diff --git a/src/main/java/fr/insee/eno/postprocessing/fr/FRInsertWelcomePostprocessor.java b/src/main/java/fr/insee/eno/postprocessing/fr/FRInsertWelcomePostprocessor.java new file mode 100644 index 000000000..cd3a24c57 --- /dev/null +++ b/src/main/java/fr/insee/eno/postprocessing/fr/FRInsertWelcomePostprocessor.java @@ -0,0 +1,63 @@ +package fr.insee.eno.postprocessing.fr; + +import java.io.File; +import java.io.InputStream; +import java.io.OutputStream; + +import org.apache.commons.io.FileUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import fr.insee.eno.Constants; +import fr.insee.eno.exception.EnoGenerationException; +import fr.insee.eno.parameters.PostProcessing; +import fr.insee.eno.postprocessing.Postprocessor; +import fr.insee.eno.transform.xsl.XslTransformation; + +public class FRInsertWelcomePostprocessor implements Postprocessor { + + private static final Logger logger = LoggerFactory.getLogger(FRInsertWelcomePostprocessor.class); + + private XslTransformation saxonService = new XslTransformation(); + + @Override + public File process(File input, byte[] parameters, String survey) throws Exception { + return this.process(input, parameters, null, survey); + } + + @Override + public File process(File input, byte[] parameters, byte[] metadata, String survey) throws Exception { + + File outputForFRFile = new File(input.getParent(), + Constants.BASE_NAME_FORM_FILE + + Constants.INSERT_WELCOME_FR_EXTENSION); + + logger.debug("Output folder for basic-form : " + outputForFRFile.getAbsolutePath()); + + InputStream FO_XSL = Constants.getInputStreamFromPath(Constants.UTIL_FR_INSERT_WELCOME_XSL); + + InputStream inputStream = FileUtils.openInputStream(input); + OutputStream outputStream = FileUtils.openOutputStream(outputForFRFile); + + try { + saxonService.transformWithMetadata(inputStream, outputStream, FO_XSL, parameters, metadata); + }catch(Exception e) { + String errorMessage = "An error was occured during the " + toString() + " transformation. "+e.getMessage(); + logger.error(errorMessage); + throw new EnoGenerationException(errorMessage); + } + + inputStream.close(); + outputStream.close(); + FO_XSL.close(); + logger.info("End of insert welcome post-processing " + outputForFRFile.getAbsolutePath()); + + return outputForFRFile; + } + + @Override + public String toString() { + return PostProcessing.FR_INSERT_WELCOME.name(); + } + +} diff --git a/src/main/java/fr/insee/eno/postprocessing/fr/FRModeleColtranePostprocessor.java b/src/main/java/fr/insee/eno/postprocessing/fr/FRModeleColtranePostprocessor.java new file mode 100644 index 000000000..90c7773be --- /dev/null +++ b/src/main/java/fr/insee/eno/postprocessing/fr/FRModeleColtranePostprocessor.java @@ -0,0 +1,79 @@ +package fr.insee.eno.postprocessing.fr; + +import java.io.ByteArrayInputStream; +import java.io.File; +import java.io.InputStream; +import java.io.OutputStream; + +import org.apache.commons.io.FileUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import fr.insee.eno.Constants; +import fr.insee.eno.exception.EnoGenerationException; +import fr.insee.eno.parameters.PostProcessing; +import fr.insee.eno.postprocessing.Postprocessor; +import fr.insee.eno.transform.xsl.XslTransformation; + +public class FRModeleColtranePostprocessor implements Postprocessor { + + private static final Logger logger = LoggerFactory.getLogger(FRModeleColtranePostprocessor.class); + + private XslTransformation saxonService = new XslTransformation(); + + + @Override + public File process(File input, byte[] parameters, String survey) throws Exception { + return this.process(input, parameters, null, null, null, survey); + } + + @Override + public File process(File input, byte[] parametersFile, byte[] metadata, byte[] specificTreatmentXsl, byte[] mapping, String survey) throws Exception { + File outputForFRFile = new File(input.getParent(), + Constants.BASE_NAME_FORM_FILE + + Constants.MODELE_COLTRANE_FR_EXTENSION); + + logger.debug("Output folder for basic-form : " + outputForFRFile.getAbsolutePath()); + + String sUB_TEMP_FOLDER = Constants.tEMP_DDI_FOLDER(Constants.sUB_TEMP_FOLDER(survey)); + + InputStream FO_XSL = Constants.getInputStreamFromPath(Constants.UTIL_FR_MODELE_COLTRANE_XSL); + + InputStream inputStream = FileUtils.openInputStream(input); + OutputStream outputStream = FileUtils.openOutputStream(outputForFRFile); + InputStream mappingStream=null; + if(mapping!=null) { + mappingStream = new ByteArrayInputStream(mapping); + } + else { + File mappingFile = Constants.tEMP_MAPPING_TMP(sUB_TEMP_FOLDER); + if(mappingFile.exists()) { + logger.info("Loading mapping.xml file : "+mappingFile.getAbsolutePath()); + mappingStream = FileUtils.openInputStream(mappingFile); + } + } + + try { + saxonService.transformModelColtraneFr(inputStream, outputStream, FO_XSL, mappingStream); + }catch(Exception e) { + String errorMessage = "An error was occured during the " + toString() + " transformation. "+e.getMessage(); + logger.error(errorMessage); + throw new EnoGenerationException(errorMessage); + } + + inputStream.close(); + outputStream.close(); + FO_XSL.close(); + mappingStream.close(); + logger.info("End of ModeleColtrane post-processing " + outputForFRFile.getAbsolutePath()); + + return outputForFRFile; + + } + + @Override + public String toString() { + return PostProcessing.FR_MODELE_COLTRANE.name(); + } + +} diff --git a/src/main/java/fr/insee/eno/postprocessing/fr/FRSpecificTreatmentPostprocessor.java b/src/main/java/fr/insee/eno/postprocessing/fr/FRSpecificTreatmentPostprocessor.java new file mode 100644 index 000000000..7019c6f82 --- /dev/null +++ b/src/main/java/fr/insee/eno/postprocessing/fr/FRSpecificTreatmentPostprocessor.java @@ -0,0 +1,75 @@ +package fr.insee.eno.postprocessing.fr; + +import java.io.ByteArrayInputStream; +import java.io.File; +import java.io.InputStream; +import java.io.OutputStream; + +import org.apache.commons.io.FileUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import fr.insee.eno.Constants; +import fr.insee.eno.exception.EnoGenerationException; +import fr.insee.eno.parameters.PostProcessing; +import fr.insee.eno.postprocessing.Postprocessor; +import fr.insee.eno.transform.xsl.XslTransformation; + +public class FRSpecificTreatmentPostprocessor implements Postprocessor { + + private static final Logger logger = LoggerFactory.getLogger(FRSpecificTreatmentPostprocessor.class); + + private XslTransformation saxonService = new XslTransformation(); + + @Override + public File process(File input, byte[] parameters, String survey) throws Exception { + return this.process(input, parameters, null, null, survey); + } + + @Override + public File process(File input, byte[] parametersFile, byte[] metadata, String survey) throws Exception { + return this.process(input, parametersFile, metadata, null, survey); + } + + @Override + public File process(File input, byte[] parametersFile, byte[] metadata, byte[] specificTreatmentXsl, String survey) throws Exception { + File outputForFRFile = new File(input.getParent(), + Constants.BASE_NAME_FORM_FILE + + Constants.SPECIFIC_TREATMENT_FR_EXTENSION); + + logger.debug("Output folder for basic-form : " + outputForFRFile.getAbsolutePath()); + + InputStream specificTreatmentXslIS = null; + + if(specificTreatmentXsl!=null) { + specificTreatmentXslIS = new ByteArrayInputStream(specificTreatmentXsl); + InputStream inputStream = FileUtils.openInputStream(input); + OutputStream outputStream = FileUtils.openOutputStream(outputForFRFile); + try { + saxonService.transformWithFRSpecificTreatment(inputStream, outputStream, specificTreatmentXslIS, parametersFile); + }catch(Exception e) { + String errorMessage = "An error was occured during the " + toString() + " transformation. "+e.getMessage(); + logger.error(errorMessage); + throw new EnoGenerationException(errorMessage); + } + + inputStream.close(); + outputStream.close(); + specificTreatmentXslIS.close(); + + } + else { + logger.info("Not specific treatment in params : simply copying this file" + input.getAbsolutePath()); + FileUtils.copyFile(input, outputForFRFile); + } + logger.info("End of specific treatment post-processing " + outputForFRFile.getAbsolutePath()); + + return outputForFRFile; + } + + @Override + public String toString() { + return PostProcessing.FR_SPECIFIC_TREATMENT.name(); + } + +} diff --git a/src/main/java/fr/insee/eno/postprocessing/js/JSExternalizeVariablesPostprocessor.java b/src/main/java/fr/insee/eno/postprocessing/js/JSExternalizeVariablesPostprocessor.java new file mode 100644 index 000000000..805fd95dd --- /dev/null +++ b/src/main/java/fr/insee/eno/postprocessing/js/JSExternalizeVariablesPostprocessor.java @@ -0,0 +1,58 @@ +package fr.insee.eno.postprocessing.js; + +import java.io.File; +import java.io.InputStream; +import java.io.OutputStream; + +import org.apache.commons.io.FileUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import fr.insee.eno.Constants; +import fr.insee.eno.exception.EnoGenerationException; +import fr.insee.eno.parameters.PostProcessing; +import fr.insee.eno.postprocessing.Postprocessor; +import fr.insee.eno.transform.xsl.XslTransformation; + +/** + * Customization of JS postprocessor. + */ +public class JSExternalizeVariablesPostprocessor implements Postprocessor { + + private static final Logger logger = LoggerFactory.getLogger(JSExternalizeVariablesPostprocessor.class); + + private XslTransformation saxonService = new XslTransformation(); + + @Override + public File process(File input, byte[] parameters, String surveyName) throws Exception { + + File outputForJSFile = new File(input.getParent(), + Constants.BASE_NAME_FORM_FILE + + Constants.EXTERNALIZE_VARIABLES_JS_EXTENSION); + logger.debug("Output folder for basic-form : " + outputForJSFile.getAbsolutePath()); + + InputStream JS_XSL = Constants.getInputStreamFromPath(Constants.TRANSFORMATIONS_EXTERNALIZE_VARIABLES_JS); + InputStream inputStream = FileUtils.openInputStream(input); + OutputStream outputStream = FileUtils.openOutputStream(outputForJSFile); + + try { + saxonService.transformJSToJSPost(inputStream,outputStream, JS_XSL); + }catch(Exception e) { + String errorMessage = "An error was occured during the " + toString() + " transformation. "+e.getMessage(); + logger.error(errorMessage); + throw new EnoGenerationException(errorMessage); + } + + inputStream.close(); + outputStream.close(); + JS_XSL.close(); + logger.info("End JS externalize codeLists post-processing"); + + return outputForJSFile; + } + + public String toString() { + return PostProcessing.JS_EXTERNALIZE_VARIABLES.name(); + } + +} diff --git a/src/main/java/fr/insee/eno/postprocessing/js/JSInsertGenericQuestionsPostprocessor.java b/src/main/java/fr/insee/eno/postprocessing/js/JSInsertGenericQuestionsPostprocessor.java new file mode 100644 index 000000000..43c4bc64e --- /dev/null +++ b/src/main/java/fr/insee/eno/postprocessing/js/JSInsertGenericQuestionsPostprocessor.java @@ -0,0 +1,57 @@ +package fr.insee.eno.postprocessing.js; + +import java.io.File; +import java.io.InputStream; +import java.io.OutputStream; + +import org.apache.commons.io.FileUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import fr.insee.eno.Constants; +import fr.insee.eno.exception.EnoGenerationException; +import fr.insee.eno.parameters.PostProcessing; +import fr.insee.eno.postprocessing.Postprocessor; +import fr.insee.eno.transform.xsl.XslTransformation; + +public class JSInsertGenericQuestionsPostprocessor implements Postprocessor { + + private static final Logger logger = LoggerFactory.getLogger(JSInsertGenericQuestionsPostprocessor.class); + + private XslTransformation saxonService = new XslTransformation(); + + @Override + public File process(File input, byte[] parameters, String surveyName) throws Exception { + + File outputForJSFile = new File(input.getParent(), + Constants.BASE_NAME_FORM_FILE + + Constants.INSERT_GENERIC_QUESTIONS_JS_EXTENSION); + + logger.debug("Output folder for basic-form : " + outputForJSFile.getAbsolutePath()); + + InputStream inputStream = FileUtils.openInputStream(input); + OutputStream outputStream = FileUtils.openOutputStream(outputForJSFile); + + InputStream JS_XSL = Constants.getInputStreamFromPath(Constants.TRANSFORMATIONS_INSERT_GENERIC_QUESTIONS_JS); + try { + saxonService.transformJSToJSSimplePost(inputStream,outputStream, JS_XSL,parameters); + }catch(Exception e) { + String errorMessage = "An error was occured during the " + toString() + " transformation. "+e.getMessage(); + logger.error(errorMessage); + throw new EnoGenerationException(errorMessage); + } + + inputStream.close(); + outputStream.close(); + JS_XSL.close(); + logger.info("End of Insert-generic-questions post-processing."); + + return outputForJSFile; + } + + @Override + public String toString() { + return PostProcessing.JS_INSERT_GENERIC_QUESTIONS.name(); + } + +} diff --git a/src/main/java/fr/insee/eno/postprocessing/js/JSSortComponentsPostprocessor.java b/src/main/java/fr/insee/eno/postprocessing/js/JSSortComponentsPostprocessor.java new file mode 100644 index 000000000..0308ac483 --- /dev/null +++ b/src/main/java/fr/insee/eno/postprocessing/js/JSSortComponentsPostprocessor.java @@ -0,0 +1,57 @@ +package fr.insee.eno.postprocessing.js; + +import java.io.File; +import java.io.InputStream; +import java.io.OutputStream; + +import org.apache.commons.io.FileUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import fr.insee.eno.Constants; +import fr.insee.eno.exception.EnoGenerationException; +import fr.insee.eno.parameters.PostProcessing; +import fr.insee.eno.postprocessing.Postprocessor; +import fr.insee.eno.transform.xsl.XslTransformation; + +/** + * Customization of JS postprocessor. + */ +public class JSSortComponentsPostprocessor implements Postprocessor { + + private static final Logger logger = LoggerFactory.getLogger(JSSortComponentsPostprocessor.class); + + private XslTransformation saxonService = new XslTransformation(); + + @Override + public File process(File input, byte[] parameters, String surveyName) throws Exception { + + File outputForJSFile = new File(input.getParent(), + Constants.BASE_NAME_FORM_FILE + + Constants.SORT_COMPONENTS_JS_EXTENSION); + logger.debug("Output folder for basic-form : " + outputForJSFile.getAbsolutePath()); + + InputStream JS_XSL = Constants.getInputStreamFromPath(Constants.TRANSFORMATIONS_SORT_COMPONENTS_JS); + InputStream inputStream = FileUtils.openInputStream(input); + OutputStream outputStream = FileUtils.openOutputStream(outputForJSFile); + try { + saxonService.transformJSToJSPost(inputStream,outputStream, JS_XSL); + }catch(Exception e) { + String errorMessage = "An error was occured during the " + toString() + " transformation. "+e.getMessage(); + logger.error(errorMessage); + throw new EnoGenerationException(errorMessage); + } + + inputStream.close(); + outputStream.close(); + JS_XSL.close(); + logger.info("End JS sort component post-processing"); + + return outputForJSFile; + } + + public String toString() { + return PostProcessing.JS_SORT_COMPONENTS.name(); + } + +} diff --git a/src/main/java/fr/insee/eno/postprocessing/js/JSVTLParserPostprocessor.java b/src/main/java/fr/insee/eno/postprocessing/js/JSVTLParserPostprocessor.java new file mode 100644 index 000000000..f3ed84b10 --- /dev/null +++ b/src/main/java/fr/insee/eno/postprocessing/js/JSVTLParserPostprocessor.java @@ -0,0 +1,244 @@ +package fr.insee.eno.postprocessing.js; + +import java.io.File; +import java.nio.charset.StandardCharsets; +import java.util.ArrayList; +import java.util.List; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import org.apache.commons.io.FileUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import fr.insee.eno.Constants; +import fr.insee.eno.exception.EnoGenerationException; +import fr.insee.eno.parameters.PostProcessing; +import fr.insee.eno.postprocessing.Postprocessor; + +/** + * Customization of JS postprocessor. + */ +public class JSVTLParserPostprocessor implements Postprocessor { + + + + private static final Logger logger = LoggerFactory.getLogger(JSVTLParserPostprocessor.class); + + + @Override + public File process(File input, byte[] parameters, String surveyName) throws Exception { + + File outputCustomFOFile = new File(input.getParent(), + Constants.BASE_NAME_FORM_FILE + + Constants.FINAL_JS_EXTENSION); + logger.info("Start JS parsing xpath to vtl post-processing"); + + String inputString = FileUtils.readFileToString(input, StandardCharsets.UTF_8); + try { + FileUtils.writeStringToFile(outputCustomFOFile, parseToVTLInNodes(inputString), StandardCharsets.UTF_8); + }catch(Exception e) { + String errorMessage = "An error was occured during the " + toString() + " transformation. "+e.getMessage(); + logger.error(errorMessage); + throw new EnoGenerationException(errorMessage); + } + logger.info("End JS parsing xpath to vtl post-processing"); + + return outputCustomFOFile; + } + public static final String XPATH_CONCAT_FUNCTION = "concat"; + public static final String XPATH_SUBSTRING_FUNCTION = "substring"; + public static final String XPATH_CAST_FUNCTION = "cast"; + public static final String XPATH_DIVISION_FUNCTION = " div "; + public static final String XPATH_NOT_EQUAL_TO = "!="; + + public static final String VTL_CONCAT_FUNCTION = "||"; + public static final String VTL_SUBSTRING_FUNCTION = "substr"; + public static final String VTL_CAST_FUNCTION = "cast"; + public static final String VTL_DIVISION_FUNCTION = " / "; + public static final String VTL_NOT_EQUAL_TO = " <> "; + + public static final String XML_NODE_LABEL = "label"; + public static final String XML_NODE_CONDITIONFILTER = "conditionFilter"; + public static final String XML_NODE_VALUE = "value"; + public static final String XML_NODE_EXPRESSION = "expression"; + + public String parseToVTLInNodes(String input) { + String possibleNodes = "("+XML_NODE_LABEL+"|"+XML_NODE_CONDITIONFILTER+"|"+XML_NODE_VALUE+"|"+XML_NODE_EXPRESSION+")"; + Pattern pattern = Pattern.compile("(<"+possibleNodes+">)((.)*?)()"); + + Matcher matcher = pattern.matcher(input); + StringBuffer stringBuffer = new StringBuffer(); + while(matcher.find()){ + //matcher.group(0)=all expression + //matcher.group(1)=start of xml node ex: + //matcher.group(6)=name of xml node ex:label + String replacement = matcher.group(1) + parseToVTL(matcher.group(3)) + matcher.group(5); + matcher.appendReplacement(stringBuffer,""); + stringBuffer.append(replacement); + } + matcher.appendTail(stringBuffer); + return stringBuffer.toString(); + } + + + + /** + * This function translates XPATH expression to VTL(sdmx) expression + * + * Definition of used variables in this function: + * - finalString is the output + * - context is the current string read before a '(' (if there is the char , (comma), context is reset) + * - listContext is the list which contains all context (the last context corresponds to the function wrote before '(' ) + * - isBetweenRealDoubleQuote : boolean, true if the current char is between the char \" literally (and not " char), so if true, the current char is plain text + * - isBetweenRealSimpleQuote : boolean, true if the current char is between ' literally + * - lastCastType is a string which defines what is the type fo the cast function (example : cast(ABCD,string) -> string) + * + * Transformations: + * x!=y -> x <> y (x <> y) + * x div y -> x / y + * substring(A,1,2) -> substr(A,1,2) + * concat(A,B,C) -> A || B || C + * cast(ABCD,string) = '1' -> cast(ABCD,string) = \"1\" + * cast(ABCD,integer) = '1' -> cast(ABCD,integer) = 1 + * + * @param input : the string to parse + * @return finalString : the result of parsing + */ + public String parseToVTL(String input) { + String finalString="";String context=""; + List listContext = new ArrayList(); + boolean isBetweenRealDoubleQuote=false; + boolean isBetweenRealSimpleQuote=false; + String contentBetweenSimpleQuote=""; + String lastCastType=""; // number, string or integer TODO:date/duration/etc + for(int i=0;i contexts) { + return contexts.isEmpty() ?"": contexts.get(contexts.size()-1); + } + + public void removeLast(List contexts) { + if (!contexts.isEmpty()) { + contexts.remove(contexts.size()-1); + } + } + + /** + * Function which replaces the last occurences of a string to another in the input + * @param string : the input + * @param substring : the target to replace + * @param replacement : the replacement + * @return the new string + */ + public String replaceLast(String string, String substring, String replacement){ + int index = string.lastIndexOf(substring); + if (index == -1) + return string; + return string.substring(0, index) + replacement + string.substring(index+substring.length()); + } + + public boolean isNumeric(String strNum) { + if (strNum == null) { + return false; + } + try { + double d = Double.parseDouble(strNum); + } catch (NumberFormatException nfe) { + return false; + } + return true; + } + + public String toString() { + return PostProcessing.JS_VTL_PARSER.name(); + } + +} diff --git a/src/main/java/fr/insee/eno/postprocessing/pdf/PDFEditStructurePagesPostprocessor.java b/src/main/java/fr/insee/eno/postprocessing/pdf/PDFEditStructurePagesPostprocessor.java new file mode 100644 index 000000000..cb9a62931 --- /dev/null +++ b/src/main/java/fr/insee/eno/postprocessing/pdf/PDFEditStructurePagesPostprocessor.java @@ -0,0 +1,67 @@ +package fr.insee.eno.postprocessing.pdf; + +import java.io.File; +import java.io.InputStream; +import java.io.OutputStream; + +import org.apache.commons.io.FileUtils; +import org.apache.commons.io.FilenameUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import fr.insee.eno.Constants; +import fr.insee.eno.exception.EnoGenerationException; +import fr.insee.eno.parameters.PostProcessing; +import fr.insee.eno.postprocessing.Postprocessor; +import fr.insee.eno.transform.xsl.XslTransformation; + +/** + * A PDF post processing + */ +public class PDFEditStructurePagesPostprocessor implements Postprocessor { + + private static final Logger logger = LoggerFactory.getLogger(PDFEditStructurePagesPostprocessor.class); + + private XslTransformation saxonService = new XslTransformation(); + + @Override + public File process(File input, byte[] parameters, String survey) throws Exception { + + + File outputForFOFile = new File(input.getParent(), + Constants.BASE_NAME_FORM_FILE + + Constants.EDIT_STRUCTURE_FO_EXTENSION); + logger.debug("Output folder for basic-form : " + outputForFOFile.getAbsolutePath()); + + String surveyName = survey; + String formName = getFormName(input); + InputStream FO_XSL = Constants.getInputStreamFromPath(Constants.TRANSFORMATIONS_EDIT_STRUCTURE_PAGES_FO_4PDF); + + InputStream inputStream = FileUtils.openInputStream(input); + OutputStream outputStream = FileUtils.openOutputStream(outputForFOFile); + + try { + saxonService.transformFOToStep4FO(inputStream, outputStream, FO_XSL, surveyName, formName, parameters); + }catch(Exception e) { + String errorMessage = "An error was occured during the " + toString() + " transformation. "+e.getMessage(); + logger.error(errorMessage); + throw new EnoGenerationException(errorMessage); + } + + inputStream.close(); + outputStream.close(); + FO_XSL.close(); + logger.info("End of EditStructurePages post-processing " + outputForFOFile.getAbsolutePath()); + + return outputForFOFile; + } + + private String getFormName(File input) { + return FilenameUtils.getBaseName(input.getParentFile().getParent()); + } + + public String toString() { + return PostProcessing.PDF_EDIT_STRUCTURE_PAGES.name(); + } + +} diff --git a/src/main/java/fr/insee/eno/postprocessing/pdf/PDFInsertAccompanyingMailsPostprocessor.java b/src/main/java/fr/insee/eno/postprocessing/pdf/PDFInsertAccompanyingMailsPostprocessor.java new file mode 100644 index 000000000..075c6761e --- /dev/null +++ b/src/main/java/fr/insee/eno/postprocessing/pdf/PDFInsertAccompanyingMailsPostprocessor.java @@ -0,0 +1,67 @@ +package fr.insee.eno.postprocessing.pdf; + +import java.io.File; +import java.io.InputStream; +import java.io.OutputStream; + +import org.apache.commons.io.FileUtils; +import org.apache.commons.io.FilenameUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import fr.insee.eno.Constants; +import fr.insee.eno.exception.EnoGenerationException; +import fr.insee.eno.parameters.PostProcessing; +import fr.insee.eno.postprocessing.Postprocessor; +import fr.insee.eno.transform.xsl.XslTransformation; + +/** + * A PDF post processing + */ +public class PDFInsertAccompanyingMailsPostprocessor implements Postprocessor { + + private static final Logger logger = LoggerFactory.getLogger(PDFInsertAccompanyingMailsPostprocessor.class); + + private XslTransformation saxonService = new XslTransformation(); + + @Override + public File process(File input, byte[] parameters, String survey) throws Exception { + + File outputForFOFile = new File(input.getParent(), + Constants.BASE_NAME_FORM_FILE + + Constants.FINAL_PDF_EXTENSION); + logger.debug("Output folder for basic-form : " + outputForFOFile.getAbsolutePath()); + + String surveyName = survey; + String formName = getFormName(input); + + InputStream FO_XSL = Constants.getInputStreamFromPath(Constants.TRANSFORMATIONS_ACCOMPANYING_MAILS_FO_4PDF); + + InputStream inputStream = FileUtils.openInputStream(input); + OutputStream outputStream = FileUtils.openOutputStream(outputForFOFile); + + try { + saxonService.transformFOToStep4FO(inputStream, outputStream, FO_XSL, surveyName, formName, parameters); + }catch(Exception e) { + String errorMessage = "An error was occured during the " + toString() + " transformation. "+e.getMessage(); + logger.error(errorMessage); + throw new EnoGenerationException(errorMessage); + } + + inputStream.close(); + outputStream.close(); + FO_XSL.close(); + logger.info("End of InsertAccompanyingMails post-processing " + outputForFOFile.getAbsolutePath()); + + return outputForFOFile; + } + + private String getFormName(File input) { + return FilenameUtils.getBaseName(input.getParentFile().getParent()); + } + + public String toString() { + return PostProcessing.PDF_INSERT_ACCOMPANYING_MAILS.name(); + } + +} diff --git a/src/main/java/fr/insee/eno/postprocessing/pdf/PDFInsertCoverPagePostprocessor.java b/src/main/java/fr/insee/eno/postprocessing/pdf/PDFInsertCoverPagePostprocessor.java new file mode 100644 index 000000000..bc459c59c --- /dev/null +++ b/src/main/java/fr/insee/eno/postprocessing/pdf/PDFInsertCoverPagePostprocessor.java @@ -0,0 +1,66 @@ +package fr.insee.eno.postprocessing.pdf; + +import java.io.File; +import java.io.InputStream; +import java.io.OutputStream; + +import org.apache.commons.io.FileUtils; +import org.apache.commons.io.FilenameUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import fr.insee.eno.Constants; +import fr.insee.eno.exception.EnoGenerationException; +import fr.insee.eno.parameters.PostProcessing; +import fr.insee.eno.postprocessing.Postprocessor; +import fr.insee.eno.transform.xsl.XslTransformation; + +/** + * A PDF post processing + */ +public class PDFInsertCoverPagePostprocessor implements Postprocessor { + + private static final Logger logger = LoggerFactory.getLogger(PDFInsertCoverPagePostprocessor.class); + + private XslTransformation saxonService = new XslTransformation(); + + @Override + public File process(File input, byte[] parameters, String survey) throws Exception { + + File outputForFOFile = new File(input.getParent(), + Constants.BASE_NAME_FORM_FILE + + Constants.COVER_PAGE_FO_EXTENSION); + logger.debug("Output folder for basic-form : " + outputForFOFile.getAbsolutePath()); + String surveyName = survey; + String formName = getFormName(input); + + InputStream FO_XSL = Constants.getInputStreamFromPath(Constants.TRANSFORMATIONS_COVER_PAGE_FO_4PDF); + + InputStream inputStream = FileUtils.openInputStream(input); + OutputStream outputStream = FileUtils.openOutputStream(outputForFOFile); + + try { + saxonService.transformFOToStep4FO(inputStream, outputStream, FO_XSL, surveyName, formName, parameters); + }catch(Exception e) { + String errorMessage = "An error was occured during the " + toString() + " transformation. "+e.getMessage(); + logger.error(errorMessage); + throw new EnoGenerationException(errorMessage); + } + + inputStream.close(); + outputStream.close(); + FO_XSL.close(); + logger.info("End of InsertCoverPage post-processing " + outputForFOFile.getAbsolutePath()); + + return outputForFOFile; + } + + private String getFormName(File input) { + return FilenameUtils.getBaseName(input.getParentFile().getParent()); + } + + public String toString() { + return PostProcessing.PDF_INSERT_COVER_PAGE.name(); + } + +} diff --git a/src/main/java/fr/insee/eno/postprocessing/pdf/PDFInsertEndQuestionPostprocessor.java b/src/main/java/fr/insee/eno/postprocessing/pdf/PDFInsertEndQuestionPostprocessor.java new file mode 100644 index 000000000..4e48d8bea --- /dev/null +++ b/src/main/java/fr/insee/eno/postprocessing/pdf/PDFInsertEndQuestionPostprocessor.java @@ -0,0 +1,67 @@ +package fr.insee.eno.postprocessing.pdf; + +import java.io.File; +import java.io.InputStream; +import java.io.OutputStream; + +import org.apache.commons.io.FileUtils; +import org.apache.commons.io.FilenameUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import fr.insee.eno.Constants; +import fr.insee.eno.exception.EnoGenerationException; +import fr.insee.eno.parameters.PostProcessing; +import fr.insee.eno.postprocessing.Postprocessor; +import fr.insee.eno.transform.xsl.XslTransformation; + +/** + * A PDF post processing + */ +public class PDFInsertEndQuestionPostprocessor implements Postprocessor { + + private static final Logger logger = LoggerFactory.getLogger(PDFInsertEndQuestionPostprocessor.class); + + private XslTransformation saxonService = new XslTransformation(); + + @Override + public File process(File input, byte[] parameters, String survey) throws Exception { + + File outputForFOFile = new File(input.getParent(), + Constants.BASE_NAME_FORM_FILE + + Constants.END_QUESTION_FO_EXTENSION); + logger.debug("Output folder for basic-form : " + outputForFOFile.getAbsolutePath()); + + String surveyName = survey; + String formName = getFormName(input); + + InputStream FO_XSL = Constants.getInputStreamFromPath(Constants.TRANSFORMATIONS_END_QUESTION_FO_4PDF); + + InputStream inputStream = FileUtils.openInputStream(input); + OutputStream outputStream = FileUtils.openOutputStream(outputForFOFile); + + try { + saxonService.transformFOToStep4FO(inputStream, outputStream, FO_XSL, surveyName, formName, parameters); + }catch(Exception e) { + String errorMessage = "An error was occured during the " + toString() + " transformation. "+e.getMessage(); + logger.error(errorMessage); + throw new EnoGenerationException(errorMessage); + } + + inputStream.close(); + outputStream.close(); + FO_XSL.close(); + logger.info("End of InsertEndQuestion post-processing " + outputForFOFile.getAbsolutePath()); + + return outputForFOFile; + } + + private String getFormName(File input) { + return FilenameUtils.getBaseName(input.getParentFile().getParent()); + } + + public String toString() { + return PostProcessing.PDF_INSERT_END_QUESTION.name(); + } + +} diff --git a/src/main/java/fr/insee/eno/postprocessing/pdf/PDFMailingPostprocessor.java b/src/main/java/fr/insee/eno/postprocessing/pdf/PDFMailingPostprocessor.java new file mode 100644 index 000000000..d2a732731 --- /dev/null +++ b/src/main/java/fr/insee/eno/postprocessing/pdf/PDFMailingPostprocessor.java @@ -0,0 +1,59 @@ +package fr.insee.eno.postprocessing.pdf; + +import java.io.File; +import java.io.InputStream; +import java.io.OutputStream; + +import org.apache.commons.io.FileUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import fr.insee.eno.Constants; +import fr.insee.eno.exception.EnoGenerationException; +import fr.insee.eno.parameters.PostProcessing; +import fr.insee.eno.postprocessing.Postprocessor; +import fr.insee.eno.transform.xsl.XslTransformation; + +/** + * Customization of FO postprocessor. + */ +public class PDFMailingPostprocessor implements Postprocessor { + + private static final Logger logger = LoggerFactory.getLogger(PDFMailingPostprocessor.class); + + private XslTransformation saxonService = new XslTransformation(); + + @Override + public File process(File input, byte[] parameters, String surveyName) throws Exception { + + File outputForFOFile = new File(input.getParent(), + Constants.BASE_NAME_FORM_FILE + + Constants.MAILING_FO_EXTENSION); + logger.debug("Output folder for basic-form : " + outputForFOFile.getAbsolutePath()); + + + InputStream FO_XSL = Constants.getInputStreamFromPath(Constants.TRANSFORMATIONS_CUSTOMIZATION_FO_4PDF_2); + + InputStream inputStream = FileUtils.openInputStream(input); + OutputStream outputStream = FileUtils.openOutputStream(outputForFOFile); + try { + saxonService.transformFOToStep1FO(inputStream, outputStream, FO_XSL); + }catch(Exception e) { + String errorMessage = "An error was occured during the " + toString() + " transformation. "+e.getMessage(); + logger.error(errorMessage); + throw new EnoGenerationException(errorMessage); + } + + inputStream.close(); + outputStream.close(); + FO_XSL.close(); + logger.info("End of Mailing post-processing : "); + + return outputForFOFile; + } + + public String toString() { + return PostProcessing.PDF_MAILING.name(); + } + +} diff --git a/src/main/java/fr/insee/eno/postprocessing/pdf/PDFSpecificTreatmentPostprocessor.java b/src/main/java/fr/insee/eno/postprocessing/pdf/PDFSpecificTreatmentPostprocessor.java new file mode 100644 index 000000000..50903ce09 --- /dev/null +++ b/src/main/java/fr/insee/eno/postprocessing/pdf/PDFSpecificTreatmentPostprocessor.java @@ -0,0 +1,77 @@ +package fr.insee.eno.postprocessing.pdf; + +import java.io.ByteArrayInputStream; +import java.io.File; +import java.io.InputStream; +import java.io.OutputStream; + +import org.apache.commons.io.FileUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import fr.insee.eno.Constants; +import fr.insee.eno.exception.EnoGenerationException; +import fr.insee.eno.parameters.PostProcessing; +import fr.insee.eno.postprocessing.Postprocessor; +import fr.insee.eno.transform.xsl.XslTransformation; + +/** + * A PDF post processing + */ +public class PDFSpecificTreatmentPostprocessor implements Postprocessor { + + private static final Logger logger = LoggerFactory.getLogger(PDFSpecificTreatmentPostprocessor.class); + + private XslTransformation saxonService = new XslTransformation(); + + @Override + public File process(File input, byte[] parameters, String survey) throws Exception { + return this.process(input, parameters, null, null, survey); + } + + @Override + public File process(File input, byte[] parametersFile, byte[] metadata, String survey) throws Exception { + return this.process(input, parametersFile, metadata, null, survey); + } + + @Override + public File process(File input, byte[] parametersFile, byte[] metadata, byte[] specificTreatmentXsl, String survey) throws Exception { + + File outputForFOFile = new File(input.getParent(), + Constants.BASE_NAME_FORM_FILE + + Constants.SPECIFIC_TREAT_PDF_EXTENSION); + logger.debug("Output folder for basic-form : " + outputForFOFile.getAbsolutePath()); + + InputStream specificTreatmentXslIS = null; + + if(specificTreatmentXsl!=null) { + specificTreatmentXslIS = new ByteArrayInputStream(specificTreatmentXsl); + InputStream inputStream = FileUtils.openInputStream(input); + OutputStream outputStream = FileUtils.openOutputStream(outputForFOFile); + + try { + saxonService.transformWithPDFSpecificTreatment(inputStream, outputStream, specificTreatmentXslIS, parametersFile); + }catch(Exception e) { + String errorMessage = "An error was occured during the " + toString() + " transformation. "+e.getMessage(); + logger.error(errorMessage); + throw new EnoGenerationException(errorMessage); + } + inputStream.close(); + outputStream.close(); + specificTreatmentXslIS.close(); + + } + else { + logger.info("Not specific treatment in params : simply copying this file" + input.getAbsolutePath()); + FileUtils.copyFile(input, outputForFOFile); + } + logger.info("End of specific treatment post-processing " + outputForFOFile.getAbsolutePath()); + + return outputForFOFile; + } + + public String toString() { + return PostProcessing.PDF_SPECIFIC_TREATMENT.name(); + } + +} diff --git a/src/main/java/fr/insee/eno/postprocessing/pdf/PDFTableColumnPostprocessorFake.java b/src/main/java/fr/insee/eno/postprocessing/pdf/PDFTableColumnPostprocessorFake.java new file mode 100644 index 000000000..4d0f25d49 --- /dev/null +++ b/src/main/java/fr/insee/eno/postprocessing/pdf/PDFTableColumnPostprocessorFake.java @@ -0,0 +1,38 @@ +package fr.insee.eno.postprocessing.pdf; + +import java.io.File; + +import org.apache.commons.io.FileUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import fr.insee.eno.Constants; +import fr.insee.eno.parameters.PostProcessing; +import fr.insee.eno.postprocessing.Postprocessor; + +/** + * PDF postprocessor. + */ +public class PDFTableColumnPostprocessorFake implements Postprocessor { + + private static final Logger logger = LoggerFactory.getLogger(PDFTableColumnPostprocessorFake.class); + + @Override + public File process(File input, byte[] parameters, String survey) throws Exception { + + File outputForFOFile = new File(input.getParent(), + Constants.BASE_NAME_FORM_FILE + + Constants.TABLE_COL_SIZE_PDF_EXTENSION); + logger.debug("Output folder for basic-form : " + outputForFOFile.getAbsolutePath()); + + FileUtils.copyFile(input, outputForFOFile); + + logger.debug("End of TableColumn post-processing (Fake)"); + return outputForFOFile; + + } + + public String toString() { + return PostProcessing.PDF_TABLE_COLUMN.name(); + } +} diff --git a/src/main/java/fr/insee/eno/preprocessing/DDI32ToDDI33Preprocessor.java b/src/main/java/fr/insee/eno/preprocessing/DDI32ToDDI33Preprocessor.java new file mode 100644 index 000000000..ab35ef067 --- /dev/null +++ b/src/main/java/fr/insee/eno/preprocessing/DDI32ToDDI33Preprocessor.java @@ -0,0 +1,61 @@ +package fr.insee.eno.preprocessing; + +import java.io.File; +import java.io.InputStream; +import java.io.OutputStream; + +import org.apache.commons.io.FileUtils; +import org.apache.commons.io.FilenameUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import fr.insee.eno.Constants; +import fr.insee.eno.exception.EnoGenerationException; +import fr.insee.eno.parameters.PreProcessing; +import fr.insee.eno.transform.xsl.XslTransformation; + +/** + * A DDI specific preprocessor. + */ +public class DDI32ToDDI33Preprocessor implements Preprocessor { + + private static final Logger logger = LoggerFactory.getLogger(DDI32ToDDI33Preprocessor.class); + + // FIXME Inject ! + private static XslTransformation saxonService = new XslTransformation(); + + @Override + public File process(File inputFile, byte[] parametersFile, String survey, String in2out) throws Exception { + logger.info("DDI32ToDDI33Preprocessing Target : START"); + + String sUB_TEMP_FOLDER = Constants.sUB_TEMP_FOLDER(survey); + String output = FilenameUtils.removeExtension(inputFile.getAbsolutePath()) + Constants.DDI32_DDI33_EXTENSION;; + + logger.debug("DDI32ToDDI33 : -Input : " + inputFile + " -Output : " +output + + " -Stylesheet : " + Constants.UTIL_DDI32_TO_DDI33_XSL + " -Parameters : " + sUB_TEMP_FOLDER); + + InputStream isDDI32_TO_DDI33_XSL = Constants.getInputStreamFromPath(Constants.UTIL_DDI32_TO_DDI33_XSL); + InputStream isInputFile = FileUtils.openInputStream(inputFile); + OutputStream osDDI32DDI33 = FileUtils.openOutputStream(new File(output)); + + try { + saxonService.transform(isInputFile, isDDI32_TO_DDI33_XSL, osDDI32DDI33); + }catch(Exception e) { + String errorMessage = "An error was occured during the " + toString() + " transformation. "+e.getMessage(); + logger.error(errorMessage); + throw new EnoGenerationException(errorMessage); + } + + isInputFile.close(); + isDDI32_TO_DDI33_XSL.close(); + osDDI32DDI33.close(); + + logger.debug("DDI32ToDDI33Preprocessing : END"); + return new File(output); + } + + public String toString() { + return PreProcessing.DDI_32_TO_DDI_33.name(); + } + +} diff --git a/src/main/java/fr/insee/eno/preprocessing/DDICleaningPreprocessor.java b/src/main/java/fr/insee/eno/preprocessing/DDICleaningPreprocessor.java new file mode 100644 index 000000000..dc10c10f6 --- /dev/null +++ b/src/main/java/fr/insee/eno/preprocessing/DDICleaningPreprocessor.java @@ -0,0 +1,63 @@ +package fr.insee.eno.preprocessing; + +import java.io.File; +import java.io.InputStream; +import java.io.OutputStream; + +import org.apache.commons.io.FileUtils; +import org.apache.commons.io.FilenameUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import fr.insee.eno.Constants; +import fr.insee.eno.exception.EnoGenerationException; +import fr.insee.eno.parameters.PreProcessing; +import fr.insee.eno.transform.xsl.XslTransformation; + +/** + * A DDI specific preprocessor. + */ +public class DDICleaningPreprocessor implements Preprocessor { + + private static final Logger logger = LoggerFactory.getLogger(DDICleaningPreprocessor.class); + + private XslTransformation saxonService = new XslTransformation(); + + @Override + public File process(File inputFile, byte[] parametersFile, String survey, String in2out) throws Exception { + logger.info("DDIPreprocessing Target : START"); + + String cleaningOutput=null; + String cleaningInput = inputFile.getAbsolutePath(); + cleaningOutput = FilenameUtils.removeExtension(cleaningInput) + Constants.CLEANED_EXTENSION; + + logger.debug("Cleaned output file to be created : " + cleaningOutput); + logger.debug("Cleaning : -Input : " + cleaningInput + " -Output : " + cleaningOutput + " -Stylesheet : " + + Constants.UTIL_DDI_CLEANING_XSL); + + InputStream isCleaningIn = FileUtils.openInputStream(new File(cleaningInput)); + OutputStream osCleaning = FileUtils.openOutputStream(new File(cleaningOutput)); + InputStream isUTIL_DDI_CLEANING_XSL = Constants.getInputStreamFromPath(Constants.UTIL_DDI_CLEANING_XSL); + + try { + saxonService.transformCleaning(isCleaningIn, isUTIL_DDI_CLEANING_XSL, osCleaning, in2out); + }catch(Exception e) { + String errorMessage = "An error was occured during the " + toString() + " transformation. "+e.getMessage(); + logger.error(errorMessage); + throw new EnoGenerationException(errorMessage); + } + + isCleaningIn.close(); + isUTIL_DDI_CLEANING_XSL.close(); + osCleaning.close(); + + logger.debug("DDIPreprocessing Cleaning: END"); + return new File(cleaningOutput); + } + + public String toString() { + return PreProcessing.DDI_CLEANING.name(); + } + + +} diff --git a/src/main/java/fr/insee/eno/preprocessing/DDIDereferencingPreprocessor.java b/src/main/java/fr/insee/eno/preprocessing/DDIDereferencingPreprocessor.java new file mode 100644 index 000000000..cd6ed0211 --- /dev/null +++ b/src/main/java/fr/insee/eno/preprocessing/DDIDereferencingPreprocessor.java @@ -0,0 +1,82 @@ +package fr.insee.eno.preprocessing; + +import java.io.File; +import java.io.FilenameFilter; +import java.io.InputStream; +import java.io.OutputStream; + +import org.apache.commons.io.FileUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import fr.insee.eno.Constants; +import fr.insee.eno.exception.EnoGenerationException; +import fr.insee.eno.parameters.PreProcessing; +import fr.insee.eno.transform.xsl.XslTransformation; + +/** + * A DDI specific preprocessor. + */ +public class DDIDereferencingPreprocessor implements Preprocessor { + + private static final Logger logger = LoggerFactory.getLogger(DDIDereferencingPreprocessor.class); + + private XslTransformation saxonService = new XslTransformation(); + + @Override + public File process(File inputFile, byte[] parametersFile, String survey, String in2out) throws Exception { + logger.info("DDIPreprocessing Target : START"); + + String sUB_TEMP_FOLDER = Constants.sUB_TEMP_FOLDER(survey); + // ----- Dereferencing + logger.debug("Dereferencing : -Input : " + inputFile + " -Output : " + Constants.tEMP_NULL_TMP(sUB_TEMP_FOLDER) + + " -Stylesheet : " + Constants.UTIL_DDI_DEREFERENCING_XSL + " -Parameters : " + sUB_TEMP_FOLDER); + + InputStream isDDI_DEREFERENCING_XSL = Constants.getInputStreamFromPath(Constants.DDI_DEREFERENCING_XSL); + InputStream isInputFile = FileUtils.openInputStream(inputFile); + OutputStream osTEMP_NULL_TMP = FileUtils.openOutputStream(Constants.tEMP_NULL_TMP(sUB_TEMP_FOLDER)); + + try { + saxonService.transformDereferencing(isInputFile, isDDI_DEREFERENCING_XSL, osTEMP_NULL_TMP, + Constants.sUB_TEMP_FOLDER_FILE(survey)); + }catch(Exception e) { + throw new EnoGenerationException("An error was occured during the " + toString() + " transformation. "+e.getMessage()); + } + + isInputFile.close(); + isDDI_DEREFERENCING_XSL.close(); + osTEMP_NULL_TMP.close(); + // ----- Cleaning + logger.debug("Cleaning target"); + File f = Constants.sUB_TEMP_FOLDER_FILE(survey); + File[] matchCleaningInput = f.listFiles(new FilenameFilter() { + + @Override + public boolean accept(File dir, String name) { + return !name.startsWith("null"); + } + }); + + String cleaningInput = null; + + logger.debug("Searching matching files in : " + sUB_TEMP_FOLDER); + for (File file : matchCleaningInput) { + if(!file.isDirectory()) { + cleaningInput = file.getAbsolutePath(); + logger.debug("Found : " + cleaningInput); + } + } + if(cleaningInput==null) { + throw new EnoGenerationException("DDIDereferencing produced no file."); + } + + logger.debug("DDIPreprocessing Dereferencing : END"); + return new File(cleaningInput); + } + + public String toString() { + return PreProcessing.DDI_DEREFERENCING.name(); + } + + +} diff --git a/src/main/java/fr/insee/eno/preprocessing/DDIMappingPreprocessor.java b/src/main/java/fr/insee/eno/preprocessing/DDIMappingPreprocessor.java new file mode 100644 index 000000000..1fd534059 --- /dev/null +++ b/src/main/java/fr/insee/eno/preprocessing/DDIMappingPreprocessor.java @@ -0,0 +1,62 @@ +package fr.insee.eno.preprocessing; + +import java.io.File; +import java.io.InputStream; +import java.io.OutputStream; + +import org.apache.commons.io.FileUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import fr.insee.eno.Constants; +import fr.insee.eno.exception.EnoGenerationException; +import fr.insee.eno.parameters.PreProcessing; +import fr.insee.eno.transform.xsl.XslTransformation; + +/** + * A DDI specific preprocessor. + */ +public class DDIMappingPreprocessor implements Preprocessor { + + private static final Logger logger = LoggerFactory.getLogger(DDIMappingPreprocessor.class); + + private XslTransformation saxonService = new XslTransformation(); + + @Override + public File process(File inputFile, byte[] parametersFile, String survey, String in2out) throws Exception { + logger.info("DDIPreprocessing Target : START"); + System.out.println(saxonService); + + String sUB_TEMP_FOLDER = Constants.tEMP_DDI_FOLDER(Constants.sUB_TEMP_FOLDER(survey)); + + File mappingFile =Constants.tEMP_MAPPING_TMP(sUB_TEMP_FOLDER); + // ----- Dereferencing + logger.debug("Mapping : -Input : " + inputFile + " -Output : " + mappingFile + + " -Stylesheet : " + Constants.UTIL_DDI_DEREFERENCING_XSL + " -Parameters : " + sUB_TEMP_FOLDER); + + InputStream isDDI_MAPPING_XSL = Constants.getInputStreamFromPath(Constants.UTIL_DDI_MAPPING_XSL); + InputStream isInputFile = FileUtils.openInputStream(inputFile); + OutputStream osTEMP_MAPPING_TMP = FileUtils.openOutputStream(mappingFile); + + try { + saxonService.transformMapping(isInputFile, isDDI_MAPPING_XSL, osTEMP_MAPPING_TMP,parametersFile); + }catch(Exception e) { + String errorMessage = "An error was occured during the " + toString() + " transformation. "+e.getMessage(); + logger.error(errorMessage); + throw new EnoGenerationException(errorMessage); + } + + isInputFile.close(); + isDDI_MAPPING_XSL.close(); + osTEMP_MAPPING_TMP.close(); + + return inputFile; + + } + + public String toString() { + return PreProcessing.DDI_MAPPING.name(); + } + + +} diff --git a/src/main/java/fr/insee/eno/preprocessing/DDIPreprocessor.java b/src/main/java/fr/insee/eno/preprocessing/DDIPreprocessor.java index 6abef196e..9f9549610 100644 --- a/src/main/java/fr/insee/eno/preprocessing/DDIPreprocessor.java +++ b/src/main/java/fr/insee/eno/preprocessing/DDIPreprocessor.java @@ -16,12 +16,12 @@ /** * A DDI specific preprocessor. */ +@Deprecated public class DDIPreprocessor implements Preprocessor { private static final Logger logger = LoggerFactory.getLogger(DDIPreprocessor.class); - // FIXME Inject ! - private static XslTransformation saxonService = new XslTransformation(); + private XslTransformation saxonService = new XslTransformation(); @Override public File process(File inputFile, byte[] parametersFile, String survey, String in2out) throws Exception { diff --git a/src/main/java/fr/insee/eno/preprocessing/DDITitlingPreprocessor.java b/src/main/java/fr/insee/eno/preprocessing/DDITitlingPreprocessor.java new file mode 100644 index 000000000..e2b84d29e --- /dev/null +++ b/src/main/java/fr/insee/eno/preprocessing/DDITitlingPreprocessor.java @@ -0,0 +1,61 @@ +package fr.insee.eno.preprocessing; + +import java.io.File; +import java.io.InputStream; +import java.io.OutputStream; + +import org.apache.commons.io.FileUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import fr.insee.eno.Constants; +import fr.insee.eno.exception.EnoGenerationException; +import fr.insee.eno.parameters.PreProcessing; +import fr.insee.eno.transform.xsl.XslTransformation; + +/** + * A DDI specific preprocessor. + */ +public class DDITitlingPreprocessor implements Preprocessor { + + private static final Logger logger = LoggerFactory.getLogger(DDITitlingPreprocessor.class); + + private XslTransformation saxonService = new XslTransformation(); + + @Override + public File process(File inputFile, byte[] parametersFile, String survey, String in2out) throws Exception { + logger.info("DDIPreprocessing Target : START"); + + String outputTitling = null; + String titlingInput = inputFile.getAbsolutePath(); + + outputTitling = titlingInput.replace(Constants.CLEANED_EXTENSION, Constants.FINAL_EXTENSION); + + logger.debug("Titling : -Input : " + titlingInput + " -Output : " + outputTitling + " -Stylesheet : " + + Constants.UTIL_DDI_TITLING_XSL + " -Parameters : " + + (parametersFile == null ? "Default parameters" : "Provided parameters")); + + InputStream isCleaningTitling = FileUtils.openInputStream(new File(titlingInput)); + InputStream isUTIL_DDI_TITLING_XSL = Constants.getInputStreamFromPath(Constants.UTIL_DDI_TITLING_XSL); + OutputStream osTitling = FileUtils.openOutputStream(new File(outputTitling)); + + try { + saxonService.transformTitling(isCleaningTitling, isUTIL_DDI_TITLING_XSL, osTitling, parametersFile); + }catch(Exception e) { + String errorMessage = "An error was occured during the " + toString() + " transformation. "+e.getMessage(); + logger.error(errorMessage); + throw new EnoGenerationException(errorMessage); + } + + isCleaningTitling.close(); + isUTIL_DDI_TITLING_XSL.close(); + osTitling.close(); + logger.debug("DDIPreprocessing titling: END"); + return new File(outputTitling); + } + + public String toString() { + return PreProcessing.DDI_TITLING.name(); + } + +} diff --git a/src/main/java/fr/insee/eno/preprocessing/PoguesXMLPreprocessor.java b/src/main/java/fr/insee/eno/preprocessing/PoguesXMLPreprocessor.java index 591261564..80bc7779b 100644 --- a/src/main/java/fr/insee/eno/preprocessing/PoguesXMLPreprocessor.java +++ b/src/main/java/fr/insee/eno/preprocessing/PoguesXMLPreprocessor.java @@ -22,8 +22,7 @@ public class PoguesXMLPreprocessor implements Preprocessor { private static final Logger logger = LoggerFactory.getLogger(PoguesXMLPreprocessor.class); - // FIXME Inject ! - private static XslTransformation saxonService = new XslTransformation(); + private XslTransformation saxonService = new XslTransformation(); @Override public File process(File inputFile, byte[] parametersFile, String surveyName, String in2out) throws Exception { @@ -68,5 +67,4 @@ public File process(File inputFile, byte[] parametersFile, String surveyName, St logger.debug("PoguesXMLPreprocessing : END"); return new File(outputPreprocessMergeITE); } - } diff --git a/src/main/java/fr/insee/eno/preprocessing/PoguesXMLPreprocessorGoToTreatment.java b/src/main/java/fr/insee/eno/preprocessing/PoguesXMLPreprocessorGoToTreatment.java index 369457f23..2b7a83fe1 100644 --- a/src/main/java/fr/insee/eno/preprocessing/PoguesXMLPreprocessorGoToTreatment.java +++ b/src/main/java/fr/insee/eno/preprocessing/PoguesXMLPreprocessorGoToTreatment.java @@ -10,6 +10,8 @@ import org.slf4j.LoggerFactory; import fr.insee.eno.Constants; +import fr.insee.eno.exception.EnoGenerationException; +import fr.insee.eno.parameters.PreProcessing; import fr.insee.eno.transform.xsl.XslTransformation; /** @@ -19,14 +21,13 @@ public class PoguesXMLPreprocessorGoToTreatment implements Preprocessor { private static final Logger logger = LoggerFactory.getLogger(PoguesXMLPreprocessorGoToTreatment.class); - // FIXME Inject ! - private static XslTransformation saxonService = new XslTransformation(); + private XslTransformation saxonService = new XslTransformation(); @Override public File process(File inputFile, byte[] parametersFile, String surveyName, String in2out) throws Exception { - + logger.info("PoguesXMLPreprocessing Target : START"); - + String outputPreprocessGOT2ITE = null; outputPreprocessGOT2ITE = FilenameUtils.removeExtension(inputFile.getAbsolutePath()) @@ -40,15 +41,28 @@ public File process(File inputFile, byte[] parametersFile, String surveyName, St InputStream isUTIL_POGUES_XML_GOTO_ITE_XSL = Constants .getInputStreamFromPath(Constants.UTIL_POGUES_XML_GOTO_ITE_XSL); OutputStream osGOTO2ITE = FileUtils.openOutputStream(new File(outputPreprocessGOT2ITE)); - saxonService.transform(isInputFile, isUTIL_POGUES_XML_GOTO_ITE_XSL, osGOTO2ITE); + + try { + saxonService.transform(isInputFile, isUTIL_POGUES_XML_GOTO_ITE_XSL, osGOTO2ITE); + }catch(Exception e) { + String errorMessage = "An error was occured during the " + toString() + " transformation. "+e.getMessage(); + logger.error(errorMessage); + throw new EnoGenerationException(errorMessage); + } + isInputFile.close(); isUTIL_POGUES_XML_GOTO_ITE_XSL.close(); osGOTO2ITE.close(); - + logger.debug("PoguesXMLPreprocessing : END"); return new File(outputPreprocessGOT2ITE); - + } + public String toString() { + return PreProcessing.POGUES_XML_GOTO_2_ITE.name(); + } + + } diff --git a/src/main/java/fr/insee/eno/preprocessing/Preprocessor.java b/src/main/java/fr/insee/eno/preprocessing/Preprocessor.java index ad56e4cd6..e9ff04c9a 100644 --- a/src/main/java/fr/insee/eno/preprocessing/Preprocessor.java +++ b/src/main/java/fr/insee/eno/preprocessing/Preprocessor.java @@ -23,4 +23,5 @@ public interface Preprocessor { */ public File process(File inputFile, byte[] parameters, String survey, String in2out) throws Exception; + public String toString(); } diff --git a/src/main/java/fr/insee/eno/transform/xsl/XslParameters.java b/src/main/java/fr/insee/eno/transform/xsl/XslParameters.java index 1ba1839ce..c69a50416 100644 --- a/src/main/java/fr/insee/eno/transform/xsl/XslParameters.java +++ b/src/main/java/fr/insee/eno/transform/xsl/XslParameters.java @@ -18,10 +18,17 @@ private XslParameters() { public static final String IN2OUT_PARAMETERS_NODE = "parameters-node"; public static final String IN2OUT_PROPERTIES_FILE = "properties-file"; public static final String IN2OUT_PROPERTIES_NODE = "properties-node"; + public static final String IN2OUT_METADATA_FILE = "metadata-file"; + public static final String IN2OUT_METADATA_NODE = "metadata-node"; public static final String CLEANED_EXTENSION = "-cleaned"; public static final String TITLED_EXTENSION = "-final"; public static final String DDI2PDF_STATIC_PAGES = "static-pages"; public static final String IN2OUT_LABELS_FOLDER = "labels-folder"; public static final String IN2OUT_SURVEY_NAME = "survey-name"; public static final String IN2OUT_FORM_NAME = "form-name"; + public static final String IN2OUT_MAPPING_FILE = "mapping-file"; + public static final String IN2OUT_MAPPING_FILE_NODE = "mapping-file-node"; + public static final String IN2OUT_CAMPAGNE = "campaign"; + public static final String IN2OUT_MODELE = "model"; + } diff --git a/src/main/java/fr/insee/eno/transform/xsl/XslTransformation.java b/src/main/java/fr/insee/eno/transform/xsl/XslTransformation.java index f9fcade90..013d6d5d2 100644 --- a/src/main/java/fr/insee/eno/transform/xsl/XslTransformation.java +++ b/src/main/java/fr/insee/eno/transform/xsl/XslTransformation.java @@ -2,7 +2,6 @@ import java.io.ByteArrayInputStream; import java.io.File; -import java.io.FileInputStream; import java.io.InputStream; import java.io.OutputStream; import java.net.URI; @@ -26,40 +25,33 @@ */ public class XslTransformation { - final static Logger logger = LoggerFactory.getLogger(XslTransformation.class); + final static Logger LOGGER = LoggerFactory.getLogger(XslTransformation.class); /** * Main Saxon transformation method * - * @param transformer - * : The defined transformer with his embedded parameters (defined in - * the other methods of this class) - * @param xmlInput - * : The input xml file where the XSLT will be applied - * @param xmlOutput - * : The output xml file after the transformation - * @throws Exception - * : Mainly if the input/output files path are incorrect + * @param transformer : The defined transformer with his embedded parameters + * (defined in the other methods of this class) + * @param xmlInput : The input xml file where the XSLT will be applied + * @param xmlOutput : The output xml file after the transformation + * @throws Exception : Mainly if the input/output files path are incorrect */ public void xslTransform(Transformer transformer, InputStream xmlInput, OutputStream xmlOutput) throws Exception { - logger.debug("Starting xsl transformation -Input : " + xmlInput + " -Output : " + xmlOutput); + LOGGER.debug("Starting xsl transformation -Input : " + xmlInput + " -Output : " + xmlOutput); transformer.transform(new StreamSource(xmlInput), new StreamResult(xmlOutput)); } /** * Basic Transformer initialization without parameters * - * @param input - * : the input xml file - * @param xslSheet - * : the xsl stylesheet that will be used - * @param output - * : the xml output that will be created - * @throws Exception - * : if the factory couldn't be found or if the paths are incorrect + * @param input : the input xml file + * @param xslSheet : the xsl stylesheet that will be used + * @param output : the xml output that will be created + * @throws Exception : if the factory couldn't be found or if the paths are + * incorrect */ public void transform(InputStream input, InputStream xslSheet, OutputStream output) throws Exception { - logger.debug("Using the basic transformer"); + LOGGER.debug("Using the basic transformer"); TransformerFactory tFactory = new net.sf.saxon.TransformerFactoryImpl(); tFactory.setURIResolver(new ClasspathURIResolver()); Transformer transformer = tFactory.newTransformer(new StreamSource(xslSheet)); @@ -71,16 +63,12 @@ public void transform(InputStream input, InputStream xslSheet, OutputStream outp /** * Basic Transformer initialization with config in2out properties file * - * @param input - * : the input xml file - * @param xslSheet - * : the xsl stylesheet that will be used - * @param output - * : the xml output that will be created - * @param in2out - * : the in2out information for config file - * @throws Exception - * : if the factory couldn't be found or if the paths are incorrect + * @param input : the input xml file + * @param xslSheet : the xsl stylesheet that will be used + * @param output : the xml output that will be created + * @param in2out : the in2out information for config file + * @throws Exception : if the factory couldn't be found or if the paths are + * incorrect */ public void transformCleaning(InputStream input, InputStream xslSheet, OutputStream output, String in2out) throws Exception { @@ -97,7 +85,7 @@ public void transformCleaning(InputStream input, InputStream xslSheet, OutputStr if (in2out == "ddi2js") { default_properties_file = Constants.CONFIG_DDI2JS; } - logger.debug("Using the basic transformer"); + LOGGER.debug("Using the basic transformer"); TransformerFactory tFactory = new net.sf.saxon.TransformerFactoryImpl(); tFactory.setURIResolver(new ClasspathURIResolver()); Transformer transformer = tFactory.newTransformer(new StreamSource(xslSheet)); @@ -110,20 +98,16 @@ public void transformCleaning(InputStream input, InputStream xslSheet, OutputStr /** * Incorporation Transformer initialization with its parameters * - * @param input - * : the input xml file - * @param xslSheet - * : the xsl stylesheet that will be used - * @param output - * : the xml output that will be created - * @param generatedFileParameter - * : Incorporation xsl parameter - * @throws Exception - * : if the factory couldn't be found or if the paths are incorrect + * @param input : the input xml file + * @param xslSheet : the xsl stylesheet that will be used + * @param output : the xml output that will be created + * @param generatedFileParameter : Incorporation xsl parameter + * @throws Exception : if the factory couldn't be found or if the paths are + * incorrect */ public void transformIncorporation(InputStream input, InputStream xslSheet, OutputStream output, File generatedFileParameter) throws Exception { - logger.debug("Using the incorporation transformer"); + LOGGER.debug("Using the incorporation transformer"); TransformerFactory tFactory = new net.sf.saxon.TransformerFactoryImpl(); Transformer transformer = tFactory.newTransformer(new StreamSource(xslSheet)); @@ -135,20 +119,16 @@ public void transformIncorporation(InputStream input, InputStream xslSheet, Outp /** * Markdown to XHTML with its parameters * - * @param input - * : the input xml file - * @param xslSheet - * : the xsl stylesheet that will be used - * @param output - * : the xml output that will be created - * @param outputFolderParameter - * : Markdown to XHTML xsl parameter - * @throws Exception - * : if the factory couldn't be found or if the paths are incorrect + * @param input : the input xml file + * @param xslSheet : the xsl stylesheet that will be used + * @param output : the xml output that will be created + * @param outputFolderParameter : Markdown to XHTML xsl parameter + * @throws Exception : if the factory couldn't be found or if the paths are + * incorrect */ public void transformMw2XHTML(InputStream input, InputStream xslSheet, OutputStream output, File outputFolderParameter) throws Exception { - logger.debug("Using the Markdown to XHTML transformer"); + LOGGER.debug("Using the Markdown to XHTML transformer"); TransformerFactory tFactory = new net.sf.saxon.TransformerFactoryImpl(); Transformer transformer = tFactory.newTransformer(new StreamSource(xslSheet)); @@ -160,20 +140,16 @@ public void transformMw2XHTML(InputStream input, InputStream xslSheet, OutputStr /** * TweakXhtmlForDdi with its parameters * - * @param input - * : the input xml file - * @param xslSheet - * : the xsl stylesheet that will be used - * @param output - * : the xml output that will be created - * @param outputFolderParameter - * : TweakXhtmlForDdi xsl parameter - * @throws Exception - * : if the factory couldn't be found or if the paths are incorrect + * @param input : the input xml file + * @param xslSheet : the xsl stylesheet that will be used + * @param output : the xml output that will be created + * @param outputFolderParameter : TweakXhtmlForDdi xsl parameter + * @throws Exception : if the factory couldn't be found or if the paths are + * incorrect */ public void transformTweakXhtmlForDdi(InputStream input, InputStream xslSheet, OutputStream output, File outputFolderParameter) throws Exception { - logger.debug("Using the TweakXhtmlForDdi transformer"); + LOGGER.debug("Using the TweakXhtmlForDdi transformer"); TransformerFactory tFactory = new net.sf.saxon.TransformerFactoryImpl(); Transformer transformer = tFactory.newTransformer(new StreamSource(xslSheet)); @@ -185,20 +161,16 @@ public void transformTweakXhtmlForDdi(InputStream input, InputStream xslSheet, O /** * Dereferencing Transformer initialization with its parameters * - * @param input - * : the input xml file - * @param xslSheet - * : the xsl stylesheet that will be used - * @param output - * : the xml output that will be created - * @param outputFolderParameter - * : Dereferencing xsl parameter - * @throws Exception - * : if the factory couldn't be found or if the paths are incorrect + * @param input : the input xml file + * @param xslSheet : the xsl stylesheet that will be used + * @param output : the xml output that will be created + * @param outputFolderParameter : Dereferencing xsl parameter + * @throws Exception : if the factory couldn't be found or if the paths are + * incorrect */ public void transformDereferencing(InputStream input, InputStream xslSheet, OutputStream output, File outputFolderParameter) throws Exception { - logger.debug("Using the dereferencing transformer"); + LOGGER.debug("Using the dereferencing transformer"); TransformerFactory tFactory = new net.sf.saxon.TransformerFactoryImpl(); Transformer transformer = tFactory.newTransformer(new StreamSource(xslSheet)); @@ -207,29 +179,45 @@ public void transformDereferencing(InputStream input, InputStream xslSheet, Outp xslTransform(transformer, input, output); } + public void transformMapping(InputStream input, InputStream xslSheet, OutputStream output, byte[] parameters) + throws Exception { + InputStream parametersIS = null; + LOGGER.debug("Using the Mapping transformer"); + TransformerFactory tFactory = new net.sf.saxon.TransformerFactoryImpl(); + + Transformer transformer = tFactory.newTransformer(new StreamSource(xslSheet)); + transformer.setErrorListener(new EnoErrorListener()); + transformer.setParameter(XslParameters.IN2OUT_PARAMETERS_FILE, Constants.PARAMETERS_DEFAULT); + if (parameters != null) { + parametersIS = new ByteArrayInputStream(parameters); + Source source = new StreamSource(parametersIS); + transformer.setParameter(XslParameters.IN2OUT_PARAMETERS_NODE, source); + } + xslTransform(transformer, input, output); + if (parameters != null) { + parametersIS.close(); + } + } + /** * Titling Transformer initialization with its parameters * - * @param input - * : the input xml file - * @param xslSheet - * : the xsl stylesheet that will be used - * @param output - * : the xml output that will be created - * @param parametersFile - * : Titling xsl parameter - * @throws Exception - * : if the factory couldn't be found or if the paths are incorrect + * @param input : the input xml file + * @param xslSheet : the xsl stylesheet that will be used + * @param output : the xml output that will be created + * @param parametersFile : Titling xsl parameter + * @throws Exception : if the factory couldn't be found or if the paths are + * incorrect */ public void transformTitling(InputStream input, InputStream xslSheet, OutputStream output, byte[] parameters) throws Exception { InputStream parametersIS = null; - logger.debug("Using the titling transformer"); + LOGGER.debug("Using the titling transformer"); TransformerFactory tFactory = new net.sf.saxon.TransformerFactoryImpl(); + tFactory.setURIResolver(new ClasspathURIResolver()); Transformer transformer = tFactory.newTransformer(new StreamSource(xslSheet)); transformer.setErrorListener(new EnoErrorListener()); - transformer.setParameter(XslParameters.TITLING_PARAMETERS_FILE, - new URI("classpath:" + Constants.PARAMETERS_XML)); + transformer.setParameter(XslParameters.IN2OUT_PARAMETERS_FILE, Constants.PARAMETERS_DEFAULT); if (parameters != null) { parametersIS = new ByteArrayInputStream(parameters); Source source = new StreamSource(parametersIS); @@ -249,15 +237,15 @@ private void transformIn2Out(InputStream inputFile, OutputStream outputFile, Inp Transformer transformer = tFactory.newTransformer(new StreamSource(xslSheet)); transformer.setErrorListener(new EnoErrorListener()); transformer.setParameter(XslParameters.IN2OUT_PROPERTIES_FILE, propertiesFile); - transformer.setParameter(XslParameters.IN2OUT_PARAMETERS_FILE, Constants.PARAMETERS); + transformer.setParameter(XslParameters.IN2OUT_PARAMETERS_FILE, Constants.PARAMETERS_DEFAULT); if (parameters != null) { - logger.info("Using specifics parameters"); + LOGGER.info("Using specifics parameters"); parametersIS = new ByteArrayInputStream(parameters); Source source = new StreamSource(parametersIS); transformer.setParameter(XslParameters.IN2OUT_PARAMETERS_NODE, source); } transformer.setParameter(XslParameters.IN2OUT_LABELS_FOLDER, Constants.LABELS_FOLDER); - logger.debug(String.format("Transformer parameters are: %s, %s", + LOGGER.debug(String.format("Transformer parameters are: %s, %s", transformer.getParameter(XslParameters.IN2OUT_PROPERTIES_FILE), transformer.getParameter(XslParameters.IN2OUT_PARAMETERS_FILE), transformer.getParameter(XslParameters.IN2OUT_LABELS_FOLDER))); @@ -269,37 +257,37 @@ private void transformIn2Out(InputStream inputFile, OutputStream outputFile, Inp public void transformDDI2FR(InputStream inputFile, OutputStream outputFile, InputStream xslSheet, byte[] parameters) throws Exception { - logger.info("Producing a basic XForms from the DDI spec"); + LOGGER.info("Producing a basic XForms from the DDI spec"); transformIn2Out(inputFile, outputFile, xslSheet, parameters, Constants.CONFIG_DDI2FR); } public void transformDDI2ODT(InputStream inputFile, OutputStream outputFile, InputStream xslSheet, byte[] parameters) throws Exception { - logger.info("Producing a basic ODT from the DDI spec"); + LOGGER.info("Producing a basic ODT from the DDI spec"); transformIn2Out(inputFile, outputFile, xslSheet, parameters, Constants.CONFIG_DDI2ODT); } public void transformDDI2PDF(InputStream inputFile, OutputStream outputFile, InputStream xslSheet, byte[] parameters) throws Exception { - logger.info("Producing a basic PDF (Fo) from the DDI spec"); + LOGGER.info("Producing a basic PDF (Fo) from the DDI spec"); transformIn2Out(inputFile, outputFile, xslSheet, parameters, Constants.CONFIG_DDI2PDF); } - public void transformDDI2JS(InputStream inputFile, OutputStream outputFile, InputStream xslSheet, - byte[] parameters) throws Exception { - logger.info("Producing a JS (xml file) from the DDI spec"); + public void transformDDI2JS(InputStream inputFile, OutputStream outputFile, InputStream xslSheet, byte[] parameters) + throws Exception { + LOGGER.info("Producing a JS (xml file) from the DDI spec"); transformIn2Out(inputFile, outputFile, xslSheet, parameters, Constants.CONFIG_DDI2JS); } - + public void transformPoguesXML2DDI(InputStream inputFile, OutputStream outputFile, InputStream xslSheet, byte[] parameters) throws Exception { - logger.info("Producing a basic DDI from the PoguesXML spec"); + LOGGER.info("Producing a basic DDI from the PoguesXML spec"); transformIn2Out(inputFile, outputFile, xslSheet, parameters, Constants.CONFIG_POGUES_XML2DDI); } @@ -311,45 +299,45 @@ private void transformBrowsingin2Out(InputStream inputFile, OutputStream outputF Transformer transformer = tFactory.newTransformer(new StreamSource(xslSheet)); transformer.setErrorListener(new EnoErrorListener()); transformer.setParameter(XslParameters.IN2OUT_LABELS_FOLDER, Constants.LABELS_FOLDER); - logger.debug(String.format("Transformer parameter is: %s", + LOGGER.debug(String.format("Transformer parameter is: %s", transformer.getParameter(XslParameters.IN2OUT_LABELS_FOLDER))); xslTransform(transformer, inputFile, outputFile); } public void transformBrowsingDDI2FR(InputStream inputFile, OutputStream outputFile, InputStream xslSheet, File labelFolder) throws Exception { - logger.info("Include the navigation elements into the XForms questionnaire"); + LOGGER.info("Include the navigation elements into the XForms questionnaire"); transformBrowsingin2Out(inputFile, outputFile, xslSheet, labelFolder); } public void transformBrowsingDDI2ODT(InputStream inputFile, OutputStream outputFile, InputStream xslSheet, File labelFolder) throws Exception { - logger.info("Include the navigation elements into the ODT questionnaire"); + LOGGER.info("Include the navigation elements into the ODT questionnaire"); transformBrowsingin2Out(inputFile, outputFile, xslSheet, labelFolder); } - + public void transformBrowsingDDI2JS(InputStream inputFile, OutputStream outputFile, InputStream xslSheet, File labelFolder) throws Exception { - logger.info("Include the navigation elements into the JS questionnaire"); + LOGGER.info("Include the navigation elements into the JS questionnaire"); transformBrowsingin2Out(inputFile, outputFile, xslSheet, labelFolder); } public void transformFOToStep1FO(InputStream inputFile, OutputStream outputFile, InputStream xslSheet) throws Exception { - logger.info("Producing a custom FO (PDF) from the FO with conditioning variables"); + LOGGER.info("Producing a custom FO (PDF) from the FO with conditioning variables"); TransformerFactory tFactory = new net.sf.saxon.TransformerFactoryImpl(); tFactory.setURIResolver(new ClasspathURIResolver()); Transformer transformer = tFactory.newTransformer(new StreamSource(xslSheet)); transformer.setErrorListener(new EnoErrorListener()); transformer.setParameter(XslParameters.IN2OUT_PROPERTIES_FILE, Constants.CONFIG_DDI2PDF); - logger.debug(String.format("FO Transformer parameters file is: %s", + LOGGER.debug(String.format("FO Transformer parameters file is: %s", transformer.getParameter(Constants.CONFIG_DDI2PDF))); xslTransform(transformer, inputFile, outputFile); } public void transformFOToStep2FO(InputStream inputFile, OutputStream outputFile, InputStream xslSheet) throws Exception { - logger.info("Producing a specific treatment FO from survey's parameters"); + LOGGER.info("Producing a specific treatment FO from survey's parameters"); TransformerFactory tFactory = new net.sf.saxon.TransformerFactoryImpl(); tFactory.setURIResolver(new ClasspathURIResolver()); Transformer transformer = tFactory.newTransformer(new StreamSource(xslSheet)); @@ -362,7 +350,7 @@ public void transformFOToStep4FO(InputStream inputFile, OutputStream outputFile, String surveyName, String formName, byte[] parameters) throws Exception { InputStream parametersIS = null; - logger.info("Inserting generic pages in the FO from survey's parameters"); + LOGGER.info("Inserting generic pages in the FO from survey's parameters"); TransformerFactory tFactory = new net.sf.saxon.TransformerFactoryImpl(); tFactory.setURIResolver(new ClasspathURIResolver()); Transformer transformer = tFactory.newTransformer(new StreamSource(xslSheet)); @@ -370,7 +358,7 @@ public void transformFOToStep4FO(InputStream inputFile, OutputStream outputFile, transformer.setParameter(XslParameters.IN2OUT_SURVEY_NAME, surveyName); transformer.setParameter(XslParameters.IN2OUT_FORM_NAME, formName); transformer.setParameter(XslParameters.IN2OUT_PROPERTIES_FILE, Constants.CONFIG_DDI2PDF); - transformer.setParameter(XslParameters.IN2OUT_PARAMETERS_FILE, Constants.PARAMETERS); + transformer.setParameter(XslParameters.IN2OUT_PARAMETERS_FILE, Constants.PARAMETERS_DEFAULT); if (parameters != null) { parametersIS = new ByteArrayInputStream(parameters); Source source = new StreamSource(parametersIS); @@ -381,15 +369,169 @@ public void transformFOToStep4FO(InputStream inputFile, OutputStream outputFile, parametersIS.close(); } } + + /* POST transformations */ + // FR + + public void transformBrowsingFr(InputStream inputFile, OutputStream outputFile, InputStream xslSheet) + throws Exception { + LOGGER.info("Post-processing browsing for FR transformation."); + TransformerFactory tFactory = new net.sf.saxon.TransformerFactoryImpl(); + tFactory.setURIResolver(new ClasspathURIResolver()); + Transformer transformer = tFactory.newTransformer(new StreamSource(xslSheet)); + transformer.setErrorListener(new EnoErrorListener()); + transformer.setParameter(XslParameters.IN2OUT_LABELS_FOLDER, Constants.LABELS_FOLDER); + LOGGER.debug(String.format("Transformer parameter is: %s", + transformer.getParameter(XslParameters.IN2OUT_LABELS_FOLDER))); + xslTransform(transformer, inputFile, outputFile); + } + + public void transformModelColtraneFr(InputStream inputFile, OutputStream outputFile, InputStream xslSheet, + InputStream mappingFile) throws Exception { + LOGGER.info("Post-processing for FR transformation with mapping.xml file."); + TransformerFactory tFactory = new net.sf.saxon.TransformerFactoryImpl(); + tFactory.setURIResolver(new ClasspathURIResolver()); + Transformer transformer = tFactory.newTransformer(new StreamSource(xslSheet)); + transformer.setErrorListener(new EnoErrorListener()); + transformer.setParameter(XslParameters.IN2OUT_MAPPING_FILE, Constants.MAPPING_DEFAULT); + if (mappingFile != null) { + Source source = new StreamSource(mappingFile); + transformer.setParameter(XslParameters.IN2OUT_MAPPING_FILE_NODE, source); + } + LOGGER.debug(String.format("Transformer parameter is: %s", + transformer.getParameter(XslParameters.IN2OUT_MAPPING_FILE_NODE))); + xslTransform(transformer, inputFile, outputFile); + + } + + public void transformWithMetadata(InputStream inputFile, OutputStream outputFile, InputStream xslSheet, + byte[] parameters, byte[] metadata) throws Exception { + InputStream parametersIS = null; + InputStream metadataIS = null; + LOGGER.info("Post-processing for FR transformation with parameter file and metadata file"); + TransformerFactory tFactory = new net.sf.saxon.TransformerFactoryImpl(); + tFactory.setURIResolver(new ClasspathURIResolver()); + Transformer transformer = tFactory.newTransformer(new StreamSource(xslSheet)); + transformer.setParameter(XslParameters.IN2OUT_PROPERTIES_FILE, Constants.CONFIG_DDI2FR); + transformer.setParameter(XslParameters.IN2OUT_PARAMETERS_FILE, Constants.PARAMETERS_DEFAULT); + transformer.setParameter(XslParameters.IN2OUT_METADATA_FILE, Constants.METADATA_DEFAULT); + if (metadata != null) { + metadataIS = new ByteArrayInputStream(metadata); + Source source = new StreamSource(metadataIS); + transformer.setParameter(XslParameters.IN2OUT_METADATA_NODE, source); + } + if (parameters != null) { + parametersIS = new ByteArrayInputStream(parameters); + Source source = new StreamSource(parametersIS); + transformer.setParameter(XslParameters.IN2OUT_PARAMETERS_NODE, source); + } + transformer.setErrorListener(new EnoErrorListener()); + xslTransform(transformer, inputFile, outputFile); + } + + public void transformWithFRSpecificTreatment(InputStream inputFile, OutputStream outputFile, + InputStream specificTreatmentXsl, byte[] parameters) throws Exception { + InputStream parametersIS = null; + LOGGER.info("Specific treatment as post-processing for FR transformation with parameter file"); + TransformerFactory tFactory = new net.sf.saxon.TransformerFactoryImpl(); + tFactory.setURIResolver(new ClasspathURIResolver()); + Transformer transformer = tFactory.newTransformer(new StreamSource(specificTreatmentXsl)); + transformer.setParameter(XslParameters.IN2OUT_PROPERTIES_FILE, Constants.CONFIG_DDI2FR); + transformer.setParameter(XslParameters.IN2OUT_PARAMETERS_FILE, Constants.PARAMETERS_DEFAULT); + + if (parameters != null) { + parametersIS = new ByteArrayInputStream(parameters); + Source source = new StreamSource(parametersIS); + transformer.setParameter(XslParameters.IN2OUT_PARAMETERS_NODE, source); + } + transformer.setErrorListener(new EnoErrorListener()); + xslTransform(transformer, inputFile, outputFile); + } + + public void transformWithPDFSpecificTreatment(InputStream inputFile, OutputStream outputFile, + InputStream specificTreatmentXsl, byte[] parameters) throws Exception { + InputStream parametersIS = null; + LOGGER.info("Specific treatment as post-processing for PDF transformation with parameter file"); + TransformerFactory tFactory = new net.sf.saxon.TransformerFactoryImpl(); + tFactory.setURIResolver(new ClasspathURIResolver()); + Transformer transformer = tFactory.newTransformer(new StreamSource(specificTreatmentXsl)); + transformer.setParameter(XslParameters.IN2OUT_PROPERTIES_FILE, Constants.CONFIG_DDI2PDF); + transformer.setParameter(XslParameters.IN2OUT_PARAMETERS_FILE, Constants.PARAMETERS_DEFAULT); + + if (parameters != null) { + parametersIS = new ByteArrayInputStream(parameters); + Source source = new StreamSource(parametersIS); + transformer.setParameter(XslParameters.IN2OUT_PARAMETERS_NODE, source); + } + transformer.setErrorListener(new EnoErrorListener()); + xslTransform(transformer, inputFile, outputFile); + } + + public void transformFRToFRSimplePost(InputStream inputFile, OutputStream outputFile, InputStream xslSheet, + byte[] parameters) throws Exception { + InputStream parametersIS = null; + LOGGER.info("Post-processing for FR transformation with parameter file"); + TransformerFactory tFactory = new net.sf.saxon.TransformerFactoryImpl(); + tFactory.setURIResolver(new ClasspathURIResolver()); + Transformer transformer = tFactory.newTransformer(new StreamSource(xslSheet)); + transformer.setParameter(XslParameters.IN2OUT_PROPERTIES_FILE, Constants.CONFIG_DDI2FR); + transformer.setParameter(XslParameters.IN2OUT_PARAMETERS_FILE, Constants.PARAMETERS_DEFAULT); + if (parameters != null) { + parametersIS = new ByteArrayInputStream(parameters); + Source source = new StreamSource(parametersIS); + transformer.setParameter(XslParameters.IN2OUT_PARAMETERS_NODE, source); + } + transformer.setErrorListener(new EnoErrorListener()); + xslTransform(transformer, inputFile, outputFile); + } + public void transformJSToJSSimplePost(InputStream inputFile, OutputStream outputFile, InputStream xslSheet, + byte[] parameters) throws Exception { + InputStream parametersIS = null; + LOGGER.info("Post-processing for JS transformation with parameter file"); + TransformerFactory tFactory = new net.sf.saxon.TransformerFactoryImpl(); + tFactory.setURIResolver(new ClasspathURIResolver()); + Transformer transformer = tFactory.newTransformer(new StreamSource(xslSheet)); + transformer.setParameter(XslParameters.IN2OUT_PROPERTIES_FILE, Constants.CONFIG_DDI2JS); + transformer.setParameter(XslParameters.IN2OUT_PARAMETERS_FILE, Constants.PARAMETERS_DEFAULT); + if (parameters != null) { + parametersIS = new ByteArrayInputStream(parameters); + Source source = new StreamSource(parametersIS); + transformer.setParameter(XslParameters.IN2OUT_PARAMETERS_NODE, source); + } + transformer.setErrorListener(new EnoErrorListener()); + xslTransform(transformer, inputFile, outputFile); + } + + public void transformSimple(InputStream inputFile, OutputStream outputFile, InputStream xslSheet) throws Exception { + LOGGER.info("Simple post-processing for FR transformation"); + TransformerFactory tFactory = new net.sf.saxon.TransformerFactoryImpl(); + tFactory.setURIResolver(new ClasspathURIResolver()); + Transformer transformer = tFactory.newTransformer(new StreamSource(xslSheet)); + transformer.setErrorListener(new EnoErrorListener()); + xslTransform(transformer, inputFile, outputFile); + } + + // JS + public void transformJSToJSPost(InputStream inputFile, OutputStream outputFile, InputStream xslSheet) throws Exception { - logger.info("Post-processing for JS transformation"); + LOGGER.info("Post-processing for JS transformation"); TransformerFactory tFactory = new net.sf.saxon.TransformerFactoryImpl(); tFactory.setURIResolver(new ClasspathURIResolver()); Transformer transformer = tFactory.newTransformer(new StreamSource(xslSheet)); transformer.setErrorListener(new EnoErrorListener()); xslTransform(transformer, inputFile, outputFile); } + + public void mergeEnoParameters(InputStream newParameters, OutputStream finalParameters, InputStream xslSheet) throws Exception { + LOGGER.info("Merging new eno paramters with default parameters."); + TransformerFactory tFactory = new net.sf.saxon.TransformerFactoryImpl(); + tFactory.setURIResolver(new ClasspathURIResolver()); + Transformer transformer = tFactory.newTransformer(new StreamSource(xslSheet)); + transformer.setErrorListener(new EnoErrorListener()); + xslTransform(transformer, newParameters, finalParameters); + + } } diff --git a/src/main/resources/config/ddi2fr.xml b/src/main/resources/config/ddi2fr.xml index 63157b3e7..f8a60a357 100644 --- a/src/main/resources/config/ddi2fr.xml +++ b/src/main/resources/config/ddi2fr.xml @@ -1,25 +1,38 @@ - + css common.css + commonEnglish.css img + + img + modifier.png + pdf.png + ¤ ¤ - - 7 - + 7 + , https://www.legifrance.gouv.fr/affichTexte.do?cidTexte=JORFTEXT000000886460 https://www.legifrance.gouv.fr/affichTexte.do?cidTexte=JORFTEXT000000888573 - https://eur-lex.europa.eu/legal-content/FR/TXT/HTML/?uri=OJ:L:2016:119:FULL&from=FR + https://eur-lex.europa.eu/legal-content/FR/TXT/?uri=CELEX%3A32016R0679 + https://www.sphinxonline.com/SurveyServer/s/ccpesatisf/EnqueteColtrane2019/questionnaire.htm + + false + false + + + false + \ No newline at end of file diff --git a/src/main/resources/config/ddi2js.xml b/src/main/resources/config/ddi2js.xml index b31193375..3ad0eeda8 100644 --- a/src/main/resources/config/ddi2js.xml +++ b/src/main/resources/config/ddi2js.xml @@ -10,4 +10,17 @@ ¤ + + sdmx + default + false + + xslt/post-processing/js/end-question + false + false + + + xslt/post-processing/js/begin-question + false + \ No newline at end of file diff --git a/src/main/resources/config/ddi2pdf.xml b/src/main/resources/config/ddi2pdf.xml index e72976006..537e73f22 100644 --- a/src/main/resources/config/ddi2pdf.xml +++ b/src/main/resources/config/ddi2pdf.xml @@ -17,18 +17,18 @@ default - xslt/util/pdf/page-first + xslt/post-processing/pdf/page-first - xslt/util/pdf/accompanying-mails + xslt/post-processing/pdf/accompanying-mails - xslt/util/pdf/end-question + xslt/post-processing/pdf/end-question true true - xslt/util/pdf/page-model + xslt/post-processing/pdf/page-model