Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 14 additions & 8 deletions validator-core/src/main/resources/error-code.json
Original file line number Diff line number Diff line change
Expand Up @@ -196,13 +196,13 @@
"documentation": "Voir la documentation de PostGIS : http://www.postgis.fr/chrome/site/docs/workshop-foss4g/doc/validity.html"
},
{
"name":"ATTRIBUTE_GEOMETRY_INVALID_DATA_EXTENT",
"name": "ATTRIBUTE_GEOMETRY_INVALID_DATA_EXTENT",
"level": "ERROR",
"message": "Les coordonnées de la géométrie de l'objet ne correspondent pas à la zone attendue.",
"documentation": ""
},
{
"name":"ATTRIBUTE_GEOMETRY_INVALID_INTERNAL",
"name": "ATTRIBUTE_GEOMETRY_INVALID_INTERNAL",
"level": "ERROR",
"message": "Le processus de validation des géométries ne peut pas se résoudre. Essayez de simplifier vos géométries : https://postgis.net/docs/ST_Simplify.html",
"documentation": ""
Expand Down Expand Up @@ -735,6 +735,12 @@
"message": "Aucune assiette trouvée.",
"documentation": "Selon la catégorie de SUP des géométries sont autorisées, au moins une doit être présente."
},
{
"name": "CNIG_PRESCRIPTION_NOT_FOUND",
"level": "WARNING",
"message": "Aucune prescription trouvée.",
"documentation": "Selon la catégorie de document, au moins une doit être présente."
},
{
"name": "CNIG_TXT_REGEXP_INVALID",
"level": "ERROR",
Expand Down Expand Up @@ -819,12 +825,12 @@
"message": "Les {TABLE_NAME} {LIST_ID_ISO_HT} ne constituent pas une partition de {ID_S_INOND}. Leurs périmètres s'intersectent.",
"documentation": "Cf. standard DI 2.0. Contrainte B.1.3 Topologie de graphe."
},
{
"name": "DGPR_ISO_HT_GEOM_ERROR",
"level": "ERROR",
"message": "Une ou plusieurs géométries sont invalides. Il n'est pas possible de tester le partitionnement des surfaces inondables par les iso_ht / iso_db. Erreur complète : {POSTGIS_ERROR}",
"documentation": "Cf. standard DI 2.0. Contrainte B.1.3 Topologie de graphe."
},
{
"name": "DGPR_ISO_HT_GEOM_ERROR",
"level": "ERROR",
"message": "Une ou plusieurs géométries sont invalides. Il n'est pas possible de tester le partitionnement des surfaces inondables par les iso_ht / iso_db. Erreur complète : {POSTGIS_ERROR}",
"documentation": "Cf. standard DI 2.0. Contrainte B.1.3 Topologie de graphe."
},
{
"name": "DGPR_UNMATCHED_SCENARIO",
"level": "ERROR",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
import fr.ign.validator.cnig.validation.attribute.RegexpTxtValidator;
import fr.ign.validator.cnig.validation.document.AtLeastOneAssietteValidator;
import fr.ign.validator.cnig.validation.document.AtLeastOneGenerateurValidator;
import fr.ign.validator.cnig.validation.document.AtLeastOnePrescriptionValidator;
import fr.ign.validator.cnig.validation.document.AtLeastOneWritingMaterialValidator;
import fr.ign.validator.cnig.validation.document.DocumentNameValidator;
import fr.ign.validator.cnig.validation.document.FileExtensionValidator;
Expand Down Expand Up @@ -73,10 +74,7 @@ public void setup(Context context) {
* PostProcess - Compute document.tag.typeref (must run before
* document-info.json generation)
*/
context.addListenerBefore(
new DocUrbaPostProcess(),
DocumentInfoExtractorPostProcess.class
);
context.addListenerBefore(new DocUrbaPostProcess(), DocumentInfoExtractorPostProcess.class);

/*
* PostProcess - DOC_URBA_COM validation for PLUi
Expand All @@ -95,6 +93,7 @@ public void setup(Context context) {
context.addListener(new AtLeastOneWritingMaterialValidator());
context.addListener(new AtLeastOneGenerateurValidator());
context.addListener(new AtLeastOneAssietteValidator());
context.addListener(new AtLeastOnePrescriptionValidator());
if (context.isFlatValidation()) {
context.addListener(new FileExtensionValidator());
} else {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,9 +20,8 @@ public class CnigErrorCodes {
/**
* Overrides CORE_TABLE_MISSING_NULLABLE_ATTRIBUTE
*/
public static final ErrorCode CNIG_TABLE_MISSING_PRESENCE_OPTIONAL_ATTRIBUTE = ErrorCode.valueOf(
"CNIG_TABLE_MISSING_PRESENCE_OPTIONAL_ATTRIBUTE"
);
public static final ErrorCode CNIG_TABLE_MISSING_PRESENCE_OPTIONAL_ATTRIBUTE = ErrorCode
.valueOf("CNIG_TABLE_MISSING_PRESENCE_OPTIONAL_ATTRIBUTE");

/**
* DU - Reported when ZONE_URBA.IDURBA doesn't match any format
Expand All @@ -44,96 +43,74 @@ public class CnigErrorCodes {
/**
* DU/PLUi- Reported when less than one row are found in DOC_URBA_COM
*/
public static final ErrorCode CNIG_DOC_URBA_COM_UNEXPECTED_SIZE = ErrorCode.valueOf(
"CNIG_DOC_URBA_COM_UNEXPECTED_SIZE"
);
public static final ErrorCode CNIG_DOC_URBA_COM_UNEXPECTED_SIZE = ErrorCode
.valueOf("CNIG_DOC_URBA_COM_UNEXPECTED_SIZE");

/**
* SCOT - Reported when number of rows in PERIMETRE_SCOT is not 1
*/
public static final ErrorCode CNIG_PERIMETRE_SCOT_UNEXPECTED_SIZE = ErrorCode.valueOf(
"CNIG_PERIMETRE_SCOT_UNEXPECTED_SIZE"
);
public static final ErrorCode CNIG_PERIMETRE_SCOT_UNEXPECTED_SIZE = ErrorCode
.valueOf("CNIG_PERIMETRE_SCOT_UNEXPECTED_SIZE");

/**
* SUP - Reported when IDGEN is not unique in GENERATEUR_SUP_P/L/S tables
*/
public static final ErrorCode CNIG_SUP_IDGEN_NOT_UNIQUE = ErrorCode.valueOf(
"CNIG_SUP_IDGEN_NOT_UNIQUE"
);
public static final ErrorCode CNIG_SUP_IDGEN_NOT_UNIQUE = ErrorCode.valueOf("CNIG_SUP_IDGEN_NOT_UNIQUE");
/**
* SUP - Reported when IDASS is not unique in ASSIETTE_SUP_P/L/S tables
*/
public static final ErrorCode CNIG_SUP_IDASS_NOT_UNIQUE = ErrorCode.valueOf(
"CNIG_SUP_IDASS_NOT_UNIQUE"
);
public static final ErrorCode CNIG_SUP_IDASS_NOT_UNIQUE = ErrorCode.valueOf("CNIG_SUP_IDASS_NOT_UNIQUE");
/**
* SUP - Reported when IDGEN referenced by an ASSIETTE_SUP_P/L/S table is not
* found in GENERATEUR_SUP_P/L/S table.
*/
public static final ErrorCode CNIG_SUP_IDGEN_NOT_FOUND = ErrorCode.valueOf(
"CNIG_SUP_IDGEN_NOT_FOUND"
);
public static final ErrorCode CNIG_SUP_IDGEN_NOT_FOUND = ErrorCode.valueOf("CNIG_SUP_IDGEN_NOT_FOUND");
/**
* SUP - reported when no generateur / assiette file found
*/
public static final ErrorCode CNIG_GENERATEUR_SUP_NOT_FOUND = ErrorCode.valueOf("CNIG_GENERATEUR_SUP_NOT_FOUND");
public static final ErrorCode CNIG_ASSIETTE_SUP_NOT_FOUND = ErrorCode.valueOf("CNIG_ASSIETTE_SUP_NOT_FOUND");

public static final ErrorCode CNIG_METADATA_SPECIFICATION_NOT_FOUND = ErrorCode.valueOf(
"CNIG_METADATA_SPECIFICATION_NOT_FOUND"
);
public static final ErrorCode CNIG_PRESCRIPTION_NOT_FOUND = ErrorCode.valueOf("CNIG_PRESCRIPTION_NOT_FOUND");

public static final ErrorCode CNIG_METADATA_SPECIFICATION_NOT_FOUND = ErrorCode
.valueOf("CNIG_METADATA_SPECIFICATION_NOT_FOUND");

public static final ErrorCode CNIG_METADATA_TYPE_INVALID = ErrorCode.valueOf("CNIG_METADATA_TYPE_INVALID");
public static final ErrorCode CNIG_METADATA_DATEOFLASTREVISION_NOT_FOUND = ErrorCode.valueOf(
"CNIG_METADATA_DATEOFLASTREVISION_NOT_FOUND"
);

public static final ErrorCode CNIG_METADATA_REFERENCESYSTEMIDENTIFIER_NOT_FOUND = ErrorCode.valueOf(
"CNIG_METADATA_REFERENCESYSTEMIDENTIFIER_NOT_FOUND"
);
public static final ErrorCode CNIG_METADATA_REFERENCESYSTEMIDENTIFIER_CODE_NOT_FOUND = ErrorCode.valueOf(
"CNIG_METADATA_REFERENCESYSTEMIDENTIFIER_CODE_NOT_FOUND"
);
public static final ErrorCode CNIG_METADATA_REFERENCESYSTEMIDENTIFIER_CODE_INVALID = ErrorCode.valueOf(
"CNIG_METADATA_REFERENCESYSTEMIDENTIFIER_CODE_INVALID"
);
public static final ErrorCode CNIG_METADATA_REFERENCESYSTEMIDENTIFIER_URI_NOT_FOUND = ErrorCode.valueOf(
"CNIG_METADATA_REFERENCESYSTEMIDENTIFIER_URI_NOT_FOUND"
);
public static final ErrorCode CNIG_METADATA_REFERENCESYSTEMIDENTIFIER_URI_UNEXPECTED = ErrorCode.valueOf(
"CNIG_METADATA_REFERENCESYSTEMIDENTIFIER_URI_UNEXPECTED"
);

public static final ErrorCode CNIG_METADATA_KEYWORD_NOT_FOUND = ErrorCode.valueOf(
"CNIG_METADATA_KEYWORD_NOT_FOUND"
);
public static final ErrorCode CNIG_METADATA_KEYWORD_INVALID = ErrorCode.valueOf(
"CNIG_METADATA_KEYWORD_INVALID"
);
public static final ErrorCode CNIG_METADATA_DATEOFLASTREVISION_NOT_FOUND = ErrorCode
.valueOf("CNIG_METADATA_DATEOFLASTREVISION_NOT_FOUND");

public static final ErrorCode CNIG_METADATA_REFERENCESYSTEMIDENTIFIER_NOT_FOUND = ErrorCode
.valueOf("CNIG_METADATA_REFERENCESYSTEMIDENTIFIER_NOT_FOUND");
public static final ErrorCode CNIG_METADATA_REFERENCESYSTEMIDENTIFIER_CODE_NOT_FOUND = ErrorCode
.valueOf("CNIG_METADATA_REFERENCESYSTEMIDENTIFIER_CODE_NOT_FOUND");
public static final ErrorCode CNIG_METADATA_REFERENCESYSTEMIDENTIFIER_CODE_INVALID = ErrorCode
.valueOf("CNIG_METADATA_REFERENCESYSTEMIDENTIFIER_CODE_INVALID");
public static final ErrorCode CNIG_METADATA_REFERENCESYSTEMIDENTIFIER_URI_NOT_FOUND = ErrorCode
.valueOf("CNIG_METADATA_REFERENCESYSTEMIDENTIFIER_URI_NOT_FOUND");
public static final ErrorCode CNIG_METADATA_REFERENCESYSTEMIDENTIFIER_URI_UNEXPECTED = ErrorCode
.valueOf("CNIG_METADATA_REFERENCESYSTEMIDENTIFIER_URI_UNEXPECTED");

public static final ErrorCode CNIG_METADATA_KEYWORD_NOT_FOUND = ErrorCode
.valueOf("CNIG_METADATA_KEYWORD_NOT_FOUND");
public static final ErrorCode CNIG_METADATA_KEYWORD_INVALID = ErrorCode.valueOf("CNIG_METADATA_KEYWORD_INVALID");

/**
* Report geometry not suitable for web broadcasting
*/
public static final ErrorCode CNIG_GEOMETRY_COMPLEXITY_WARNING = ErrorCode.valueOf(
"CNIG_GEOMETRY_COMPLEXITY_WARNING"
);
public static final ErrorCode CNIG_GEOMETRY_COMPLEXITY_ERROR = ErrorCode.valueOf(
"CNIG_GEOMETRY_COMPLEXITY_ERROR"
);
public static final ErrorCode CNIG_GEOMETRY_COMPLEXITY_WARNING = ErrorCode
.valueOf("CNIG_GEOMETRY_COMPLEXITY_WARNING");
public static final ErrorCode CNIG_GEOMETRY_COMPLEXITY_ERROR = ErrorCode.valueOf("CNIG_GEOMETRY_COMPLEXITY_ERROR");

/**
* Report geometry outsite the declared document emprise
*/
public static final ErrorCode CNIG_GEOMETRY_OUTSIDE_DOCUMENT_EMPRISE_ERROR = ErrorCode.valueOf(
"CNIG_GEOMETRY_OUTSIDE_DOCUMENT_EMPRISE_ERROR"
);
public static final ErrorCode CNIG_GEOMETRY_OUTSIDE_DOCUMENT_EMPRISE_ERROR = ErrorCode
.valueOf("CNIG_GEOMETRY_OUTSIDE_DOCUMENT_EMPRISE_ERROR");

/**
* To report "88" instead of "088"
*/
public static final ErrorCode CNIG_SUP_BAD_TERRITORY_CODE = ErrorCode.valueOf(
"CNIG_SUP_BAD_TERRITORY_CODE"
);
public static final ErrorCode CNIG_SUP_BAD_TERRITORY_CODE = ErrorCode.valueOf("CNIG_SUP_BAD_TERRITORY_CODE");

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
package fr.ign.validator.cnig.validation.document;

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.apache.logging.log4j.Marker;
import org.apache.logging.log4j.MarkerManager;

import fr.ign.validator.Context;
import fr.ign.validator.ValidatorListener;
import fr.ign.validator.cnig.error.CnigErrorCodes;
import fr.ign.validator.cnig.model.DocumentModelName;
import fr.ign.validator.data.Document;
import fr.ign.validator.data.DocumentFile;
import fr.ign.validator.model.FileModel;
import fr.ign.validator.model.TableModel;
import fr.ign.validator.validation.Validator;

public class AtLeastOnePrescriptionValidator implements Validator<Document>, ValidatorListener {

public static final Logger log = LogManager.getRootLogger();
public static final Marker MARKER = MarkerManager.getMarker("AtLeastOnePrescriptionValidator");

@Override
public void validate(Context context, Document document) {
boolean hasPrescription = false;
for (FileModel fileModel : document.getDocumentModel().getFileModels()) {
if (fileModel.getName().contains("PRESCRIPTION")) {
hasPrescription = true;
}
}
if (!hasPrescription) {
log.info(MARKER, "Skip control if document model has no PRESCRIPTION table.");
return;
}
log.info(MARKER, "Ensure that document contains at least one PRESCRIPTION file...");
int count = 0;
for (DocumentFile documentFile : document.getDocumentFiles()) {
if (!(documentFile.getFileModel() instanceof TableModel)) {
continue;
}
if (documentFile.getFileModel().getName().contains("PRESCRIPTION")) {
count++;
}
}
log.info(MARKER, "Found {} PRESCRIPTION file(s).", count);
if (count == 0) {
context.report(CnigErrorCodes.CNIG_PRESCRIPTION_NOT_FOUND);
}
}

@Override
public void beforeMatching(Context context, Document document) throws Exception {

}

@Override
public void beforeValidate(Context context, Document document) throws Exception {
document.getDocumentModel().addValidator(this);
}

@Override
public void afterValidate(Context context, Document document) throws Exception {

}

}
Loading
Loading