diff --git a/core/src/main/java/fr/abes/item/core/components/AbstractFichier.java b/core/src/main/java/fr/abes/item/core/components/AbstractFichier.java index 4fa2ff0e..a9fe14bd 100644 --- a/core/src/main/java/fr/abes/item/core/components/AbstractFichier.java +++ b/core/src/main/java/fr/abes/item/core/components/AbstractFichier.java @@ -99,7 +99,7 @@ protected void checkRcr(String rcrFichier, String rcr, int ligneCourante) throws * @throws FileCheckingException : erreur de format de fichier */ protected void checkPpn(String ppn, int ligneCourante) throws FileCheckingException { - if (!ppn.matches("^\\d{8}[0-9X]$")){ + if (!ppn.matches("^(\\d{8}[0-9X])?$")){ throw new FileCheckingException(Constant.ERR_FILE_ERRLINE + ligneCourante + Constant.ERR_FILE_WRONGPPN); } } @@ -110,7 +110,7 @@ protected void checkPpn(String ppn, int ligneCourante) throws FileCheckingExcept * @throws FileCheckingException: erreur de format de l'epn */ protected void checkEpn(String epn, int ligneCourante) throws FileCheckingException { - if (!epn.matches("^\\d{8}[0-9X]$")) { + if (!epn.matches("^(\\d{8}[0-9X])?$")) { throw new FileCheckingException(Constant.ERR_FILE_ERRLINE + ligneCourante + Constant.ERR_FILE_WRONGEPN); } } diff --git a/core/src/main/java/fr/abes/item/core/components/FichierEnrichiSupp.java b/core/src/main/java/fr/abes/item/core/components/FichierEnrichiSupp.java index e6a4bed8..6de2ecfa 100644 --- a/core/src/main/java/fr/abes/item/core/components/FichierEnrichiSupp.java +++ b/core/src/main/java/fr/abes/item/core/components/FichierEnrichiSupp.java @@ -65,7 +65,7 @@ public void checkFileContent(Demande d) throws FileCheckingException, IOExceptio * @throws FileCheckingException : erreur dans le format de la ligne */ private void check3Cols(String ligne) throws FileCheckingException { - if (ligne.split(";").length < 3) { + if (ligne.split(";").length != 3) { throw new FileCheckingException(Constant.ERR_FILE_3COL_SUPP); } if (ligne.length() < 11) { @@ -84,12 +84,17 @@ private void check3Cols(String ligne) throws FileCheckingException { */ private void checkBodyLine(String ligne, DemandeSupp demandeSupp) throws FileCheckingException { try { + // contrôle de la longueur de la ligne + if (ligne.split(";").length > 3) { + throw new FileCheckingException(Constant.ERR_FILE_ERRLINE + " \"" + ligne + "\" " + Constant.ERR_FILE_3COL_SUPP_ANY_LINE); + } String[] tabligne = ligne.split(";"); + // contrôle du ppn if (demandeSupp.getTypeSuppression().equals(TYPE_SUPPRESSION.EPN) && tabligne[0] != null) { checkPpn(tabligne[0], ligneCourante); } checkRcr(tabligne[1], demandeSupp.getRcr(), ligneCourante); - //cas ou l'epn est renseigné + // contrôle de l'epn s'il est renseigné if (tabligne.length > 2) checkEpn(tabligne[2], ligneCourante); } catch (IndexOutOfBoundsException e) { diff --git a/core/src/main/java/fr/abes/item/core/components/FichierPrepare.java b/core/src/main/java/fr/abes/item/core/components/FichierPrepare.java index d152a7d2..7d21f498 100644 --- a/core/src/main/java/fr/abes/item/core/components/FichierPrepare.java +++ b/core/src/main/java/fr/abes/item/core/components/FichierPrepare.java @@ -13,7 +13,6 @@ import java.io.*; import java.util.ArrayList; -import java.util.Collections; import java.util.List; @Slf4j @@ -40,13 +39,14 @@ public int getType() { return Constant.ETATDEM_PREPAREE; } - @Override - public TYPE_DEMANDE getDemandeType() {return TYPE_DEMANDE.MODIF; } + public TYPE_DEMANDE getDemandeType() { + return TYPE_DEMANDE.MODIF; + } @Override public void checkFileContent(Demande demandeModif) { - //nothing to do + //nothing to do } @Override @@ -98,8 +98,8 @@ public void alimenterEpn(String input, String listeppn, String rcr) { */ public void alimenterPpn(String input, String listeEpn, String rcr) { try (FileWriter fw = new FileWriter(path.resolve(filename).toString(), true); - BufferedWriter bw = new BufferedWriter(fw); - PrintWriter out = new PrintWriter(bw)) { + BufferedWriter bw = new BufferedWriter(fw); + PrintWriter out = new PrintWriter(bw)) { String[] tabEpn = listeEpn.split(","); Multimap resJson = Utilitaires.parseJson(input, true); for (String epn : tabEpn) { @@ -125,9 +125,10 @@ public void trierLignesDeCorrespondances() throws IOException { List correspondanceSortList = new ArrayList<>(); String header = reader.readLine();//cette ligne enleve le header et le stock - correspondanceSortList.add(header + "\n"); + correspondanceSortList.add(header); reader.lines().sorted().forEach(line -> { - correspondanceSortList.add(line+"\n"); + correspondanceSortList.add("\n"); + correspondanceSortList.add(line); }); reader.close(); fileReader.close(); diff --git a/core/src/main/java/fr/abes/item/core/constant/Constant.java b/core/src/main/java/fr/abes/item/core/constant/Constant.java index 625e15dc..8e380b8a 100644 --- a/core/src/main/java/fr/abes/item/core/constant/Constant.java +++ b/core/src/main/java/fr/abes/item/core/constant/Constant.java @@ -109,6 +109,7 @@ public class Constant implements Serializable { public static final String ERR_FILE_TOOMUCH_SUPP = Constant.ERR_FILE_TOOMUCH_START + Constant.MAX_LIGNE_FICHIER_INIT_SUPP + Constant.ERR_FILE_TOOMUCH_END; public static final String ERR_FILE_3COL_MODIF = "La première ligne du fichier doit contenir 4 colonnes (ppn;rcr;epn;zone)."; public static final String ERR_FILE_3COL_SUPP = "La première ligne du fichier doit contenir 3 colonnes (ppn;rcr;epn)"; + public static final String ERR_FILE_3COL_SUPP_ANY_LINE = "La ligne doit contenir trois colones"; public static final String ERR_FILE_ERRLINE = "Erreur ligne "; public static final String ERR_FILE_ONLYONEPPN = "la ligne ne doit contenir qu'un ppn (sur 9 caractères)."; public static final String ERR_FILE_HEAD4TH = "La valeur en-tête de la quatrieme colonne n'est pas valide."; diff --git a/core/src/main/java/fr/abes/item/core/service/impl/DemandeSuppService.java b/core/src/main/java/fr/abes/item/core/service/impl/DemandeSuppService.java index a3a6746f..81321ba1 100644 --- a/core/src/main/java/fr/abes/item/core/service/impl/DemandeSuppService.java +++ b/core/src/main/java/fr/abes/item/core/service/impl/DemandeSuppService.java @@ -160,7 +160,7 @@ private void stockerFichierOnDisk(MultipartFile file, Fichier fichier, DemandeSu } } - private void checkEtatDemande(DemandeSupp demande) throws DemandeCheckingException, IOException, FileTypeException { + private void checkEtatDemande(DemandeSupp demande) throws DemandeCheckingException, IOException, FileTypeException, FileCheckingException { int etat = demande.getEtatDemande().getNumEtat(); switch (etat) { case Constant.ETATDEM_PREPARATION -> preparerFichierEnPrep(demande); @@ -177,7 +177,7 @@ private void checkEtatDemande(DemandeSupp demande) throws DemandeCheckingExcepti } } - private void preparerFichierEnPrep(DemandeSupp demande) throws IOException, DemandeCheckingException, FileTypeException { + private void preparerFichierEnPrep(DemandeSupp demande) throws IOException, DemandeCheckingException, FileTypeException, FileCheckingException { if (demande.getTypeSuppression() != null) { //Suppression d'un éventuel fichier existant sur le disque storageService.delete(fichierPrepare.getFilename()); @@ -185,8 +185,8 @@ private void preparerFichierEnPrep(DemandeSupp demande) throws IOException, Dema fichierPrepare.ecrireEnTete(); //Alimentation du fichier par appel à la procédure Oracle ppntoepn appelProcStockee(demande.getRcr(), demande.getTypeSuppression()); - demande.setEtatDemande(new EtatDemande(Constant.ETATDEM_PREPAREE)); fichierPrepare.trierLignesDeCorrespondances(); + demande.setEtatDemande(new EtatDemande(Constant.ETATDEM_PREPAREE)); save(demande); checkEtatDemande(demande); }