Skip to content

Commit 505f5e8

Browse files
authored
fix(core): misplaced files (#417)
* fix(core): misplaced files * fix(core): formatter misplaced
1 parent 6a421cd commit 505f5e8

5 files changed

Lines changed: 139 additions & 26 deletions

File tree

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

Lines changed: 15 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@
1717
import fr.ign.validator.database.Database;
1818
import fr.ign.validator.error.CoreErrorCodes;
1919
import fr.ign.validator.error.ErrorCode;
20+
import fr.ign.validator.mapping.MisplacedFile;
21+
import fr.ign.validator.mapping.MisplacedFileManager;
2022
import fr.ign.validator.model.DocumentModel;
2123
import fr.ign.validator.model.FileModel;
2224
import fr.ign.validator.tools.FileUtils;
@@ -59,7 +61,7 @@ public class Document implements Validatable {
5961
/**
6062
* Files misplaced from model expactations
6163
*/
62-
private Map<FileModel, File> misplacedFiles = new HashMap<>();
64+
private MisplacedFileManager misplacedFileManager = new MisplacedFileManager();
6365

6466
/**
6567
* Additional informations
@@ -303,7 +305,7 @@ public void findDocumentFiles(Context context) {
303305

304306
log.info(MARKER, "Found {} by name for '{}' (FILE_MISPLACED)", fileModel, file);
305307
if (context.isFlatValidation()) {
306-
addMisplacedFile(fileModel, file);
308+
this.misplacedFileManager.addMisplacedFile(fileModel, file);
307309
} else {
308310
context.beginModel(fileModel);
309311
context.report(
@@ -330,7 +332,7 @@ public void findDocumentFiles(Context context) {
330332
/*
331333
* Adds the best remaining candidates.
332334
*/
333-
addMisplacedDocumentFiles();
335+
addMisplacedDocumentFiles(context);
334336

335337
log.info(
336338
MARKER, "List files and directories : completed, {} document file(s) found.",
@@ -345,32 +347,19 @@ private void addDocumentFile(FileModel fileModel, File path) {
345347
this.documentFiles.add(fileModel.createDocumentFile(path));
346348
}
347349

348-
/*
349-
* Adds a misplaced file only if a better candidate doesn't already exists.
350-
*/
351-
private void addMisplacedFile(FileModel fileModel, File path) {
352-
boolean fileModelExists = false;
353-
for (DocumentFile documentFile : this.documentFiles) {
354-
if (documentFile.getFileModel().equals(fileModel)) {
355-
fileModelExists = true;
356-
}
357-
}
358-
for (Map.Entry<FileModel, File> misplacedFile : this.misplacedFiles.entrySet()) {
359-
if (misplacedFile.getKey().equals(fileModel)) {
360-
fileModelExists = true;
361-
}
362-
}
363-
if (!fileModelExists) {
364-
this.misplacedFiles.put(fileModel, path);
365-
}
366-
}
367-
368350
/*
369351
* Transfers misplaced files to DocumentFiles
370352
*/
371-
private void addMisplacedDocumentFiles() {
372-
for (Map.Entry<FileModel, File> misplacedFile : this.misplacedFiles.entrySet()) {
373-
addDocumentFile(misplacedFile.getKey(), misplacedFile.getValue());
353+
private void addMisplacedDocumentFiles(Context context) {
354+
355+
for (MisplacedFile misplacedFile : this.misplacedFileManager.getMisplacedFiles()) {
356+
if (misplacedFile.getStatus() == MisplacedFile.Status.FILE_MODEL_OVERLOAD) {
357+
context.report(
358+
context.createError(CoreErrorCodes.FILE_MODEL_OVERLOAD)
359+
.setMessageParam("FILEMODEL", misplacedFile.getFileModel().getName())
360+
);
361+
}
362+
addDocumentFile(misplacedFile.getFileModel(), misplacedFile.getFile());
374363
}
375364
}
376365

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ public class CoreErrorCodes {
4141
public static final ErrorCode DIRECTORY_UNEXPECTED = ErrorCode.valueOf("DIRECTORY_UNEXPECTED");
4242

4343
public static final ErrorCode FILE_MISPLACED = ErrorCode.valueOf("FILE_MISPLACED");
44+
public static final ErrorCode FILE_MODEL_OVERLOAD = ErrorCode.valueOf("FILE_MODEL_OVERLOAD");
4445
public static final ErrorCode FILE_EMPTY = ErrorCode.valueOf("FILE_EMPTY");
4546

4647
public static final ErrorCode XSD_SCHEMA_ERROR = ErrorCode.valueOf("XSD_SCHEMA_ERROR");
Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
package fr.ign.validator.mapping;
2+
3+
import java.io.File;
4+
5+
import fr.ign.validator.model.FileModel;
6+
7+
/**
8+
* Maps header with attributes of a FeatureType
9+
*
10+
* @author DDarras
11+
*/
12+
public class MisplacedFile {
13+
14+
public enum Status {
15+
/**
16+
* Standard status
17+
*/
18+
FILE_MISPLACED,
19+
/**
20+
* Multiple files for same FileModel
21+
*/
22+
FILE_MODEL_OVERLOAD
23+
}
24+
25+
/**
26+
* Input FileModel
27+
*/
28+
private FileModel fileModel;
29+
30+
/**
31+
* Input path
32+
*/
33+
private File file;
34+
35+
private MisplacedFile.Status status;
36+
37+
/**
38+
* @param FileModel fileModel
39+
* @param File path
40+
*/
41+
public MisplacedFile(FileModel fileModel, File file) {
42+
this.fileModel = fileModel;
43+
this.file = file;
44+
this.status = MisplacedFile.Status.FILE_MISPLACED;
45+
}
46+
47+
public FileModel getFileModel() {
48+
return fileModel;
49+
}
50+
51+
public File getFile() {
52+
return file;
53+
}
54+
55+
public MisplacedFile.Status getStatus() {
56+
return status;
57+
}
58+
59+
public void setStatus(MisplacedFile.Status status) {
60+
this.status = status;
61+
}
62+
}
Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
package fr.ign.validator.mapping;
2+
3+
import java.io.File;
4+
import java.util.ArrayList;
5+
import java.util.List;
6+
7+
import org.apache.logging.log4j.LogManager;
8+
import org.apache.logging.log4j.Logger;
9+
import org.apache.logging.log4j.Marker;
10+
import org.apache.logging.log4j.MarkerManager;
11+
12+
import fr.ign.validator.model.FileModel;
13+
14+
/**
15+
* Maps header with attributes of a FeatureType
16+
*
17+
* @author DDarras
18+
*/
19+
public class MisplacedFileManager {
20+
21+
public static final Logger log = LogManager.getRootLogger();
22+
public static final Marker MARKER = MarkerManager.getMarker("MisplacedFileManager");
23+
24+
/**
25+
* FileModels / File associations
26+
*/
27+
private List<MisplacedFile> misplacedFiles = new ArrayList<>();
28+
29+
public MisplacedFileManager() {
30+
}
31+
32+
/**
33+
* Adds a misplacedFile, checking if corresponding FileModel is overloaded
34+
*
35+
* @param fileModel
36+
* @param File
37+
*/
38+
public void addMisplacedFile(FileModel fileModel, File File) {
39+
MisplacedFile misplacedFile = new MisplacedFile(fileModel, File);
40+
41+
for (MisplacedFile otherFile : this.misplacedFiles) {
42+
if (otherFile.getFileModel().equals(fileModel)) {
43+
log.info(MARKER, "Found multiple files for model {} (FILE_MODEL_OVERLOAD)", fileModel);
44+
otherFile.setStatus(MisplacedFile.Status.FILE_MODEL_OVERLOAD);
45+
misplacedFile.setStatus(MisplacedFile.Status.FILE_MODEL_OVERLOAD);
46+
continue;
47+
}
48+
}
49+
this.misplacedFiles.add(misplacedFile);
50+
}
51+
52+
public List<MisplacedFile> getMisplacedFiles() {
53+
return misplacedFiles;
54+
}
55+
}

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

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,12 @@
3333
"message": "Le fichier '{FILEPATH}' est mal nommé ou mal placé dans l'arborescence du dossier.",
3434
"documentation": "Cette erreur se produit lorsque le nom d'un fichier respecte partiellement le modèle. Le nom du fichier est correct, mais pas son chemin complet"
3535
},
36+
{
37+
"name": "FILE_MODEL_OVERLOAD",
38+
"level": "INFO",
39+
"message": "Le modèle '{FILEMODEL}' est consommé par plusieurs fichiers.",
40+
"documentation": "Cette erreur se produit lorsque un modèle est consommé par plusieurs fichiers mal nommés ou avec un chemin incomplet."
41+
},
3642
{
3743
"name": "FILE_UNEXPECTED",
3844
"level": "WARNING",

0 commit comments

Comments
 (0)