Skip to content

Commit 2e53816

Browse files
authored
feat(core): crude implementation of presentrequired attribute constraint (#427)
1 parent f3e4687 commit 2e53816

11 files changed

Lines changed: 63 additions & 28 deletions

File tree

validator-core/src/main/java/fr/ign/validator/data/Header.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -73,8 +73,8 @@ public void validate(Context context) {
7373
context.createError(CoreErrorCodes.TABLE_MISSING_GEOMETRY)
7474
.setMessageParam("FILEPATH", relativePath)
7575
);
76-
} else if (!missingAttribute.getConstraints().isRequired()) {
77-
this.reportTableMissingNullableAttribute(missingAttribute, context);
76+
} else if (!missingAttribute.getConstraints().isPresenceRequired()) {
77+
this.reportTableMissingPresenceOptionalAttribute(missingAttribute, context);
7878
} else {
7979
context.report(
8080
context.createError(CoreErrorCodes.TABLE_MISSING_ATTRIBUTE)
@@ -94,9 +94,9 @@ public void validate(Context context) {
9494
* @param missingAttribute
9595
* @param context
9696
*/
97-
public void reportTableMissingNullableAttribute(AttributeType<?> missingAttribute, Context context) {
97+
public void reportTableMissingPresenceOptionalAttribute(AttributeType<?> missingAttribute, Context context) {
9898
context.report(
99-
context.createError(CoreErrorCodes.TABLE_MISSING_NULLABLE_ATTRIBUTE)
99+
context.createError(CoreErrorCodes.TABLE_MISSING_PRESENCE_OPTIONAL_ATTRIBUTE)
100100
.setMessageParam("ATTRIBUTE_NAME", missingAttribute.getName())
101101
.setMessageParam("FILEPATH", relativePath)
102102
);

validator-core/src/main/java/fr/ign/validator/error/CoreErrorCodes.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -179,8 +179,8 @@ public class CoreErrorCodes {
179179
* ErrorCode for error in Table (FileModel)
180180
*/
181181
public static final ErrorCode TABLE_MISSING_ATTRIBUTE = ErrorCode.valueOf("TABLE_MISSING_ATTRIBUTE");
182-
public static final ErrorCode TABLE_MISSING_NULLABLE_ATTRIBUTE = ErrorCode.valueOf(
183-
"TABLE_MISSING_NULLABLE_ATTRIBUTE"
182+
public static final ErrorCode TABLE_MISSING_PRESENCE_OPTIONAL_ATTRIBUTE = ErrorCode.valueOf(
183+
"TABLE_MISSING_PRESENCE_OPTIONAL_ATTRIBUTE"
184184
);
185185
public static final ErrorCode TABLE_UNEXPECTED_ATTRIBUTE = ErrorCode.valueOf("TABLE_UNEXPECTED_ATTRIBUTE");
186186
public static final ErrorCode TABLE_UNEXPECTED_ENCODING = ErrorCode.valueOf("TABLE_UNEXPECTED_ENCODING");

validator-core/src/main/java/fr/ign/validator/model/AttributeConstraints.java

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,15 @@ public class AttributeConstraints {
2424
*/
2525
private boolean required;
2626

27+
/**
28+
* Indicates if attribute has to be present
29+
*
30+
*
31+
* @see fr.ign.validator.validation.data.Header
32+
* @see fr.ign.validator.error.CoreErrorCodes#TABLE_MISSING_ATTRIBUTE
33+
*/
34+
private boolean presenceRequired;
35+
2736
/**
2837
* Indicates if the value is unique in the table
2938
*
@@ -79,17 +88,35 @@ public class AttributeConstraints {
7988
*/
8089
private String reference;
8190

91+
// checks wheter presenceRequired has been modified
92+
private boolean presenceRequiredModified;
93+
8294
public AttributeConstraints() {
8395
this.required = true;
96+
this.presenceRequired = true;
97+
this.presenceRequiredModified = false;
8498
this.unique = false;
8599
}
86100

101+
public boolean isPresenceRequired() {
102+
return presenceRequired;
103+
}
104+
105+
// Must be called after setRequired
106+
public void setPresenceRequired(boolean presenceRequired) {
107+
this.presenceRequired = presenceRequired;
108+
this.presenceRequiredModified = true;
109+
}
110+
87111
public boolean isRequired() {
88112
return required;
89113
}
90114

91115
public void setRequired(boolean required) {
92116
this.required = required;
117+
if (!this.presenceRequiredModified) {
118+
this.presenceRequired = required;
119+
}
93120
}
94121

95122
public boolean isUnique() {
@@ -150,4 +177,8 @@ public void setReference(String reference) {
150177
this.reference = reference;
151178
}
152179

180+
public boolean isPresenceRequiredModified() {
181+
return this.presenceRequiredModified;
182+
}
183+
153184
}

validator-core/src/main/java/fr/ign/validator/model/DocumentModel.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
import fr.ign.validator.data.Document;
1616
import fr.ign.validator.database.Database;
1717
import fr.ign.validator.validation.Validator;
18-
import fr.ign.validator.validation.database.AttributeReferenceValidator;
18+
import fr.ign.validator.validation.attribute.AttributeReferenceValidator;
1919
import fr.ign.validator.validation.database.AttributeUniqueValidator;
2020
import fr.ign.validator.validation.database.FeatureTypeConditionsValidator;
2121
import fr.ign.validator.validation.database.ForeignKeyValidator;

validator-core/src/main/java/fr/ign/validator/validation/database/AttributeReferenceValidator.java renamed to validator-core/src/main/java/fr/ign/validator/validation/attribute/AttributeReferenceValidator.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package fr.ign.validator.validation.database;
1+
package fr.ign.validator.validation.attribute;
22

33
import java.io.IOException;
44
import java.sql.SQLException;

validator-core/src/main/resources/error-code.json

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -90,13 +90,13 @@
9090
{
9191
"name": "TABLE_MISSING_ATTRIBUTE",
9292
"level": "ERROR",
93-
"message": "L'attribut obligatoire '{ATTRIBUTE_NAME}' n'est pas présent ou toujours vide dans le fichier '{FILEPATH}'.",
93+
"message": "L'attribut obligatoire '{ATTRIBUTE_NAME}' n'est pas présent dans le fichier '{FILEPATH}'.",
9494
"documentation": "Cette erreur se produit lorsqu'un champ spécifié dans le modèle n'est pas présent dans la table"
9595
},
9696
{
97-
"name": "TABLE_MISSING_NULLABLE_ATTRIBUTE",
97+
"name": "TABLE_MISSING_PRESENCE_OPTIONAL_ATTRIBUTE",
9898
"level": "INFO",
99-
"message": "L'attribut optionnel '{ATTRIBUTE_NAME}' n'est pas présent ou toujours vide dans le fichier '{FILEPATH}'.",
99+
"message": "L'attribut optionnel '{ATTRIBUTE_NAME}' n'est pas présent dans le fichier '{FILEPATH}'.",
100100
"documentation": "Cette erreur se produit lorsqu'un champ spécifié comme nullable dans le modèle n'est pas présent dans la table"
101101
},
102102
{
@@ -568,7 +568,7 @@
568568
"documentation": ""
569569
},
570570
{
571-
"name": "CNIG_TABLE_MISSING_NULLABLE_ATTRIBUTE",
571+
"name": "CNIG_TABLE_MISSING_PRESENCE_OPTIONAL_ATTRIBUTE",
572572
"level": "ERROR",
573573
"message": "L'attribut optionnel '{ATTRIBUTE_NAME}' est absent du fichier {FILEPATH}. L'ajouter, même si il est toujours vide.",
574574
"documentation": "Cette erreur se produit lorsqu'un attribut marqué comme mandatory=WARNING est absent dans le cadre d'une validation CNIG."

validator-core/src/test/java/fr/ign/validator/model/AttributeTypeTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ public void testJsonIO() throws IOException {
4949
ObjectMapper mapper = ObjectMapperFactory.createObjectMapper();
5050
String result = mapper.writeValueAsString(attribute);
5151
assertEquals(
52-
"{\"type\":\"String\",\"name\":\"TEST\",\"description\":\"Test description\",\"constraints\":{\"required\":true,\"unique\":false}}",
52+
"{\"type\":\"String\",\"name\":\"TEST\",\"description\":\"Test description\",\"constraints\":{\"required\":true,\"presenceRequired\":true,\"unique\":false,\"presenceRequiredModified\":false}}",
5353
result
5454
);
5555

validator-core/src/test/java/fr/ign/validator/validation/database/AttributeReferenceValidatorTest.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
import fr.ign.validator.model.file.SingleTableModel;
2424
import fr.ign.validator.model.type.StringType;
2525
import fr.ign.validator.report.InMemoryReportBuilder;
26+
import fr.ign.validator.validation.attribute.AttributeReferenceValidator;
2627

2728
public class AttributeReferenceValidatorTest {
2829

validator-plugin-cnig/src/main/java/fr/ign/validator/cnig/data/CnigHeader.java

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -17,11 +17,13 @@ public CnigHeader(String relativePath, FeatureTypeMapper mapping) {
1717
}
1818

1919
@Override
20-
public void reportTableMissingNullableAttribute(AttributeType<?> missingAttribute, Context context) {
21-
context.report(
22-
context.createError(CnigErrorCodes.CNIG_TABLE_MISSING_NULLABLE_ATTRIBUTE)
23-
.setMessageParam("ATTRIBUTE_NAME", missingAttribute.getName())
24-
.setMessageParam("FILEPATH", this.getRelativePath())
25-
);
20+
public void reportTableMissingPresenceOptionalAttribute(AttributeType<?> missingAttribute, Context context) {
21+
if (!missingAttribute.getConstraints().isPresenceRequiredModified()) {
22+
context.report(
23+
context.createError(CnigErrorCodes.CNIG_TABLE_MISSING_PRESENCE_OPTIONAL_ATTRIBUTE)
24+
.setMessageParam("ATTRIBUTE_NAME", missingAttribute.getName())
25+
.setMessageParam("FILEPATH", this.getRelativePath())
26+
);
27+
}
2628
}
2729
}

validator-plugin-cnig/src/main/java/fr/ign/validator/cnig/error/CnigErrorCodes.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,8 @@ public class CnigErrorCodes {
2020
/**
2121
* Overrides CORE_TABLE_MISSING_NULLABLE_ATTRIBUTE
2222
*/
23-
public static final ErrorCode CNIG_TABLE_MISSING_NULLABLE_ATTRIBUTE = ErrorCode.valueOf(
24-
"CNIG_TABLE_MISSING_NULLABLE_ATTRIBUTE"
23+
public static final ErrorCode CNIG_TABLE_MISSING_PRESENCE_OPTIONAL_ATTRIBUTE = ErrorCode.valueOf(
24+
"CNIG_TABLE_MISSING_PRESENCE_OPTIONAL_ATTRIBUTE"
2525
);
2626

2727
/**

0 commit comments

Comments
 (0)