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