From d12ba78f02747bf149deaa045515e9bcd584b65d Mon Sep 17 00:00:00 2001 From: nsenave Date: Thu, 15 Jan 2026 10:32:51 +0100 Subject: [PATCH 1/3] feat: pairwise source variables --- pom.xml | 2 +- .../lunatic/model/flat/PairwiseLinks.java | 19 ++++++-- .../PairwiseLinksSerializationTest.java | 43 +++++++++++++++++++ 3 files changed, 59 insertions(+), 5 deletions(-) create mode 100644 src/test/java/fr/insee/lunatic/conversion/PairwiseLinksSerializationTest.java diff --git a/pom.xml b/pom.xml index 5dd93af..3ee00ca 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ fr.insee.lunatic lunatic-model jar - 5.11.0 + 5.12.0 Lunatic Model Classes and converters for the Lunatic model https://inseefr.github.io/Lunatic-Model/ diff --git a/src/main/java/fr/insee/lunatic/model/flat/PairwiseLinks.java b/src/main/java/fr/insee/lunatic/model/flat/PairwiseLinks.java index c45ae83..72010ae 100644 --- a/src/main/java/fr/insee/lunatic/model/flat/PairwiseLinks.java +++ b/src/main/java/fr/insee/lunatic/model/flat/PairwiseLinks.java @@ -21,21 +21,32 @@ "bindingDependencies", "xAxisIterations", "yAxisIterations", + "sourceVariables", "components", "symLinks" }) @Getter @Setter -public class PairwiseLinks - extends ComponentType - implements ComponentNestingType -{ +public class PairwiseLinks extends ComponentType implements ComponentNestingType { + + /** + * Variables associated with the pairwise links component. + * @param name Name variable name. + * @param gender Gender variable name. + */ + public record SourceVariables( + String name, + String gender) {} @JsonProperty("xAxisIterations") protected LabelType xAxisIterations; @JsonProperty("yAxisIterations") protected LabelType yAxisIterations; + + /** {@link SourceVariables} */ + private SourceVariables sourceVariables; + protected List components; protected SymLinksType symLinks; diff --git a/src/test/java/fr/insee/lunatic/conversion/PairwiseLinksSerializationTest.java b/src/test/java/fr/insee/lunatic/conversion/PairwiseLinksSerializationTest.java new file mode 100644 index 0000000..ffae84b --- /dev/null +++ b/src/test/java/fr/insee/lunatic/conversion/PairwiseLinksSerializationTest.java @@ -0,0 +1,43 @@ +package fr.insee.lunatic.conversion; + +import fr.insee.lunatic.exception.SerializationException; +import fr.insee.lunatic.model.flat.PairwiseLinks; +import fr.insee.lunatic.model.flat.Questionnaire; +import org.json.JSONException; +import org.junit.jupiter.api.Test; +import org.skyscreamer.jsonassert.JSONAssert; +import org.skyscreamer.jsonassert.JSONCompareMode; + +class PairwiseLinksSerializationTest { + + @Test + void serializePairwiseLinks() throws SerializationException, JSONException { + // + Questionnaire questionnaire = new Questionnaire(); + PairwiseLinks pairwiseLinks = new PairwiseLinks(); + pairwiseLinks.setId("foo-id"); + pairwiseLinks.setSourceVariables(new PairwiseLinks.SourceVariables("FIRST_NAME_VAR", "GENDER_VAR")); + questionnaire.getComponents().add(pairwiseLinks); + // + String result = new JsonSerializer().serialize(questionnaire); + // + String expected = """ +{ + "componentType": "Questionnaire", + "components": [ + { + "id": "foo-id", + "componentType": "PairwiseLinks", + "sourceVariables": { + "name": "FIRST_NAME_VAR", + "gender": "GENDER_VAR" + }, + "components": [] + } + ] +} +"""; + JSONAssert.assertEquals(expected, result, JSONCompareMode.STRICT); + } + +} From e123b565e51ec737b498d770b4be9781389db753 Mon Sep 17 00:00:00 2001 From: nsenave Date: Thu, 15 Jan 2026 10:37:02 +0100 Subject: [PATCH 2/3] feat: add age And refactor to a class to make Eno's life easier --- .../insee/lunatic/model/flat/PairwiseLinks.java | 17 ++++++++++++----- .../PairwiseLinksSerializationTest.java | 2 +- 2 files changed, 13 insertions(+), 6 deletions(-) diff --git a/src/main/java/fr/insee/lunatic/model/flat/PairwiseLinks.java b/src/main/java/fr/insee/lunatic/model/flat/PairwiseLinks.java index 72010ae..f90f9b9 100644 --- a/src/main/java/fr/insee/lunatic/model/flat/PairwiseLinks.java +++ b/src/main/java/fr/insee/lunatic/model/flat/PairwiseLinks.java @@ -2,6 +2,7 @@ import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonPropertyOrder; +import lombok.AllArgsConstructor; import lombok.Getter; import lombok.Setter; @@ -31,12 +32,18 @@ public class PairwiseLinks extends ComponentType implements ComponentNestingType /** * Variables associated with the pairwise links component. - * @param name Name variable name. - * @param gender Gender variable name. */ - public record SourceVariables( - String name, - String gender) {} + @Getter + @Setter + @AllArgsConstructor + public static class SourceVariables { + /** Name variable name. */ + private String name; + /** Gender variable name. */ + private String gender; + /** Age variable name. */ + private String age; + } @JsonProperty("xAxisIterations") protected LabelType xAxisIterations; diff --git a/src/test/java/fr/insee/lunatic/conversion/PairwiseLinksSerializationTest.java b/src/test/java/fr/insee/lunatic/conversion/PairwiseLinksSerializationTest.java index ffae84b..d1a454b 100644 --- a/src/test/java/fr/insee/lunatic/conversion/PairwiseLinksSerializationTest.java +++ b/src/test/java/fr/insee/lunatic/conversion/PairwiseLinksSerializationTest.java @@ -16,7 +16,7 @@ void serializePairwiseLinks() throws SerializationException, JSONException { Questionnaire questionnaire = new Questionnaire(); PairwiseLinks pairwiseLinks = new PairwiseLinks(); pairwiseLinks.setId("foo-id"); - pairwiseLinks.setSourceVariables(new PairwiseLinks.SourceVariables("FIRST_NAME_VAR", "GENDER_VAR")); + pairwiseLinks.setSourceVariables(new PairwiseLinks.SourceVariables("FIRST_NAME_VAR", "GENDER_VAR", null)); questionnaire.getComponents().add(pairwiseLinks); // String result = new JsonSerializer().serialize(questionnaire); From ac76a82761a15892ecfb544c9c90bef6daafbce6 Mon Sep 17 00:00:00 2001 From: nsenave Date: Thu, 15 Jan 2026 11:34:06 +0100 Subject: [PATCH 3/3] refactor: default constructor --- pom.xml | 4 ++-- src/main/java/fr/insee/lunatic/model/flat/PairwiseLinks.java | 2 -- .../insee/lunatic/conversion/CleaningSerializationTest.java | 3 +-- .../lunatic/conversion/PairwiseLinksSerializationTest.java | 5 ++++- 4 files changed, 7 insertions(+), 7 deletions(-) diff --git a/pom.xml b/pom.xml index 3ee00ca..031e1d2 100644 --- a/pom.xml +++ b/pom.xml @@ -117,8 +117,8 @@ maven-compiler-plugin 3.14.0 - 17 - 17 + 21 + 21 diff --git a/src/main/java/fr/insee/lunatic/model/flat/PairwiseLinks.java b/src/main/java/fr/insee/lunatic/model/flat/PairwiseLinks.java index f90f9b9..7a47b11 100644 --- a/src/main/java/fr/insee/lunatic/model/flat/PairwiseLinks.java +++ b/src/main/java/fr/insee/lunatic/model/flat/PairwiseLinks.java @@ -2,7 +2,6 @@ import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonPropertyOrder; -import lombok.AllArgsConstructor; import lombok.Getter; import lombok.Setter; @@ -35,7 +34,6 @@ public class PairwiseLinks extends ComponentType implements ComponentNestingType */ @Getter @Setter - @AllArgsConstructor public static class SourceVariables { /** Name variable name. */ private String name; diff --git a/src/test/java/fr/insee/lunatic/conversion/CleaningSerializationTest.java b/src/test/java/fr/insee/lunatic/conversion/CleaningSerializationTest.java index e5111a7..85fe837 100644 --- a/src/test/java/fr/insee/lunatic/conversion/CleaningSerializationTest.java +++ b/src/test/java/fr/insee/lunatic/conversion/CleaningSerializationTest.java @@ -45,8 +45,7 @@ class CleaningSerializationTest { ] } } - } - """; + }"""; @Test void serializeCleaning() throws SerializationException, JSONException { diff --git a/src/test/java/fr/insee/lunatic/conversion/PairwiseLinksSerializationTest.java b/src/test/java/fr/insee/lunatic/conversion/PairwiseLinksSerializationTest.java index d1a454b..5666545 100644 --- a/src/test/java/fr/insee/lunatic/conversion/PairwiseLinksSerializationTest.java +++ b/src/test/java/fr/insee/lunatic/conversion/PairwiseLinksSerializationTest.java @@ -16,7 +16,10 @@ void serializePairwiseLinks() throws SerializationException, JSONException { Questionnaire questionnaire = new Questionnaire(); PairwiseLinks pairwiseLinks = new PairwiseLinks(); pairwiseLinks.setId("foo-id"); - pairwiseLinks.setSourceVariables(new PairwiseLinks.SourceVariables("FIRST_NAME_VAR", "GENDER_VAR", null)); + PairwiseLinks.SourceVariables sourceVariables = new PairwiseLinks.SourceVariables(); + sourceVariables.setName("FIRST_NAME_VAR"); + sourceVariables.setGender("GENDER_VAR"); + pairwiseLinks.setSourceVariables(sourceVariables); questionnaire.getComponents().add(pairwiseLinks); // String result = new JsonSerializer().serialize(questionnaire);