diff --git a/CHANGELOG.md b/CHANGELOG.md index 73013d1..f126370 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,9 @@ # Changelog +## 1.2.1 [TODO] +### Fixed +- Empty sasFormat exception +- XSLT : put modality in content and code as attribute + ## 1.2.0 [2026-06-18] ### Changed - spring-boot 3.5.14 -> 4.0.6 diff --git a/src/main/java/fr/insee/bpm/metadata/model/Variable.java b/src/main/java/fr/insee/bpm/metadata/model/Variable.java index 3edda2b..1e27737 100644 --- a/src/main/java/fr/insee/bpm/metadata/model/Variable.java +++ b/src/main/java/fr/insee/bpm/metadata/model/Variable.java @@ -3,6 +3,7 @@ import lombok.Getter; import lombok.NoArgsConstructor; import lombok.Setter; +import lombok.extern.slf4j.Slf4j; /** * Object class to represent a variable. @@ -10,6 +11,7 @@ */ @Getter @NoArgsConstructor +@Slf4j public class Variable { /** Variable name. */ @@ -54,15 +56,25 @@ public String getGroupName() { } public int getExpectedLength(){ - if (this.sasFormat != null && this.sasFormat.contains(".")){ - String[] sasFormatPart = this.sasFormat.split("\\."); - return Integer.parseInt(sasFormatPart[0]); + if(this.sasFormat == null){ + return 1; } - if (this.sasFormat != null){ - return Integer.parseInt(this.sasFormat); + if(this.sasFormat.isEmpty()){ + log.warn("Empty SAS format for variable {}", this.name); + return 1; + } + + String sasFormatToReturn = this.sasFormat; + if (this.sasFormat.contains(".")){ + sasFormatToReturn = this.sasFormat.split("\\.")[0]; + } + try{ + return Integer.parseInt(sasFormatToReturn); + }catch (NumberFormatException _){ + log.warn("Invalid sas format \"{}\" for variable {}", sasFormatToReturn, this.name); + // Not sure about that return + return 1; } - // Not sure about that return - return 1; } } diff --git a/src/main/java/fr/insee/bpm/metadata/reader/ddi/DDIReader.java b/src/main/java/fr/insee/bpm/metadata/reader/ddi/DDIReader.java index ed36997..b05f583 100644 --- a/src/main/java/fr/insee/bpm/metadata/reader/ddi/DDIReader.java +++ b/src/main/java/fr/insee/bpm/metadata/reader/ddi/DDIReader.java @@ -228,8 +228,8 @@ private static void addValues(UcqVariable variable, NodeList valueElements) { for (int k = 0; k < valueElements.getLength(); k++) { Node valueElement = valueElements.item(k); if (nodeIsElementWithName(valueElement, "Value")) { - variable.addModality(valueElement.getTextContent(), - ((Element) valueElement).getAttribute("label")); + variable.addModality(((Element) valueElement).getAttribute("code"), + valueElement.getTextContent()); } } diff --git a/src/main/resources/xslt/structured-variables.xsl b/src/main/resources/xslt/structured-variables.xsl index 59f266b..14f7446 100644 --- a/src/main/resources/xslt/structured-variables.xsl +++ b/src/main/resources/xslt/structured-variables.xsl @@ -270,8 +270,8 @@ - - + + diff --git a/src/test/java/fr/insee/bpm/metadata/model/VariableTest.java b/src/test/java/fr/insee/bpm/metadata/model/VariableTest.java index cb98539..d14cb61 100644 --- a/src/test/java/fr/insee/bpm/metadata/model/VariableTest.java +++ b/src/test/java/fr/insee/bpm/metadata/model/VariableTest.java @@ -40,8 +40,22 @@ void getExpectedLengthTest_noDot(){ //WHEN + THEN Assertions.assertThat(variable.getExpectedLength()).isEqualTo(2); } + @Test - void getExpectedLengthTest_empty(){ + void getExpectedLengthTest_empty_or_invalid(){ + //GIVEN + variable.sasFormat = ""; + + //WHEN + THEN + Assertions.assertThat(variable.getExpectedLength()).isEqualTo(1); + } + + @Test + void getExpectedLengthTest_null(){ + //GIVEN + variable.sasFormat = null; + + //WHEN + THEN Assertions.assertThat(variable.getExpectedLength()).isEqualTo(1); } } \ No newline at end of file