diff --git a/batch/src/main/java/fr/abes/item/batch/traitement/LireLigneFichierTasklet.java b/batch/src/main/java/fr/abes/item/batch/traitement/LireLigneFichierTasklet.java index 04076f2e..05fb91ba 100644 --- a/batch/src/main/java/fr/abes/item/batch/traitement/LireLigneFichierTasklet.java +++ b/batch/src/main/java/fr/abes/item/batch/traitement/LireLigneFichierTasklet.java @@ -11,6 +11,7 @@ import fr.abes.item.core.service.ILigneFichierService; import lombok.NonNull; import lombok.extern.slf4j.Slf4j; +import org.apache.logging.log4j.ThreadContext; import org.hibernate.exception.ConstraintViolationException; import org.hibernate.exception.JDBCConnectionException; import org.springframework.batch.core.ExitStatus; @@ -110,6 +111,8 @@ public ExitStatus afterStep(StepExecution stepExecution) { stepExecution.getJobExecution().getExecutionContext().put("lignes", this.lignesFichier); stepExecution.getJobExecution().getExecutionContext().put("demandeId", this.demandeId); stepExecution.getJobExecution().getExecutionContext().put("typeDemande", this.typeDemande.toString()); + ThreadContext.put("demandeId", String.valueOf(this.demandeId)); + ThreadContext.put("typeDemande", this.typeDemande.toString()); } return stepExecution.getExitStatus(); } diff --git a/batch/src/main/java/fr/abes/item/batch/traitement/traiterlignesfichierchunk/LignesFichierProcessor.java b/batch/src/main/java/fr/abes/item/batch/traitement/traiterlignesfichierchunk/LignesFichierProcessor.java index 72e2e756..1b456829 100644 --- a/batch/src/main/java/fr/abes/item/batch/traitement/traiterlignesfichierchunk/LignesFichierProcessor.java +++ b/batch/src/main/java/fr/abes/item/batch/traitement/traiterlignesfichierchunk/LignesFichierProcessor.java @@ -155,14 +155,19 @@ private LigneFichierDtoSupp processDemandeSupp(LigneFichierDto ligneFichierDto) //récupération des exemplaires existants pour cette ligne List exemplairesExistants = ((DemandeSuppService) strategyFactory.getStrategy(IDemandeService.class, TYPE_DEMANDE.SUPP)) .getExemplairesExistants(ligneFichierDtoSupp.getPpn()); - Optional exemplaireASupprimerOpt = exemplairesExistants.stream().filter(exemplaire -> exemplaire.findZone("A99", 0).getValeur().equals(ligneFichierDtoSupp.getEpn())).findFirst(); - if (exemplaireASupprimerOpt.isPresent()){ - this.fichierSauvegardeSuppTxt.writePpnInFile(ligneFichierDtoSupp.getPpn(), exemplaireASupprimerOpt.get()); - this.fichierSauvegardeSuppcsv.writePpnInFile(ligneFichierDtoSupp.getPpn(), exemplaireASupprimerOpt.get()); + if (ligneFichierDtoSupp.getEpn() != null) { + Optional exemplaireASupprimerOpt = exemplairesExistants.stream().filter(exemplaire -> exemplaire.findZone("A99", 0).getValeur().equals(ligneFichierDtoSupp.getEpn())).findFirst(); + if (exemplaireASupprimerOpt.isPresent()) { + this.fichierSauvegardeSuppTxt.writePpnInFile(ligneFichierDtoSupp.getPpn(), exemplaireASupprimerOpt.get()); + this.fichierSauvegardeSuppcsv.writePpnInFile(ligneFichierDtoSupp.getPpn(), exemplaireASupprimerOpt.get()); + } + //supprimer l'exemplaire + this.proxyRetry.deleteExemplaire(demandeSupp, ligneFichierDtoSupp); + ligneFichierDtoSupp.setRetourSudoc(Constant.EXEMPLAIRE_SUPPRIME); + } else { + //si pas d'epn dans la ligne du fichier, on ne fait pas le traitement et on écrit directement le message dans le retour sudoc pour le fichier résultat + ligneFichierDtoSupp.setRetourSudoc("Exemplaire inexistant"); } - //supprimer l'exemplaire - this.proxyRetry.deleteExemplaire(demandeSupp, ligneFichierDtoSupp); - ligneFichierDtoSupp.setRetourSudoc(Constant.EXEMPLAIRE_SUPPRIME); return ligneFichierDtoSupp; } diff --git a/batch/src/main/resources/log4j2.xml b/batch/src/main/resources/log4j2.xml index b7907254..d6c18ce6 100644 --- a/batch/src/main/resources/log4j2.xml +++ b/batch/src/main/resources/log4j2.xml @@ -7,13 +7,14 @@ + - + 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 df6dedea..4fa2ff0e 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 @@ -2,6 +2,7 @@ import fr.abes.item.core.constant.Constant; import fr.abes.item.core.entities.item.IndexRecherche; +import fr.abes.item.core.exception.FileCheckingException; import fr.abes.item.core.utilitaire.Utilitaires; import lombok.Getter; import lombok.Setter; @@ -79,4 +80,39 @@ protected int getIndexZone(IndexRecherche indexCourant, String[] tabLigne, int i return indexZone; } + + /** + * Méthode permettant de vérifier que la valeur de la seconde colonne correspond au RCR de la demande + * @param rcrFichier : ligne du fichier + * @param rcr : rcr de la demande + * @throws FileCheckingException : erreur de format de fichier + */ + protected void checkRcr(String rcrFichier, String rcr, int ligneCourante) throws FileCheckingException { + if (!rcrFichier.equals(rcr)) { + throw new FileCheckingException(Constant.ERR_FILE_ERRLINE + ligneCourante + Constant.ERR_FILE_WRONGRCR); + } + } + + /** + * Méthode de vérification de la forme d'un ppn + * @param ppn ppn à vérifier + * @throws FileCheckingException : erreur de format de fichier + */ + protected void checkPpn(String ppn, int ligneCourante) throws FileCheckingException { + if (!ppn.matches("^\\d{8}[0-9X]$")){ + throw new FileCheckingException(Constant.ERR_FILE_ERRLINE + ligneCourante + Constant.ERR_FILE_WRONGPPN); + } + } + + /** + * Méthode de vérification de la forme d'un epn + * @param epn epn à vérifier + * @throws FileCheckingException: erreur de format de l'epn + */ + protected void checkEpn(String epn, int ligneCourante) throws FileCheckingException { + 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/FichierEnrichiModif.java b/core/src/main/java/fr/abes/item/core/components/FichierEnrichiModif.java index 901738bf..de7ba550 100644 --- a/core/src/main/java/fr/abes/item/core/components/FichierEnrichiModif.java +++ b/core/src/main/java/fr/abes/item/core/components/FichierEnrichiModif.java @@ -92,13 +92,13 @@ public void checkFileContent(Demande demande) throws FileCheckingException, IOEx */ private void check3Cols(String ligne) throws FileCheckingException { if (ligne.split(";").length < 4) { - throw new FileCheckingException(Constant.ERR_FILE_3COL); + throw new FileCheckingException(Constant.ERR_FILE_3COL_MODIF); } if (ligne.length() < 12) { - throw new FileCheckingException(Constant.ERR_FILE_3COL); + throw new FileCheckingException(Constant.ERR_FILE_3COL_MODIF); } if (!("ppn;rcr;epn").equalsIgnoreCase(ligne.substring(0, 11))) { - throw new FileCheckingException(Constant.ERR_FILE_3COL); + throw new FileCheckingException(Constant.ERR_FILE_3COL_MODIF); } } @@ -149,49 +149,15 @@ private void checkBodyLine(String ligne, DemandeModif demandeModif) throws FileC } try { String[] tabligne = ligne.split(";"); - checkRcr(tabligne[1], demandeModif.getRcr()); - checkPpn(tabligne[0]); - checkEpn(tabligne[2]); + checkRcr(tabligne[1], demandeModif.getRcr(), ligneCourante); + checkPpn(tabligne[0], ligneCourante); + checkEpn(tabligne[2], ligneCourante); check4cols(tabligne, demandeModif.getTraitement().getNomMethode()); }catch (IndexOutOfBoundsException e) { throw new FileCheckingException(Constant.ERR_FILE_ERRLINE + ligneCourante + Constant.ERR_FILE_LINELENGTH); } } - /** - * Méthode permettant de vérifier que la valeur de la seconde colonne correspond au RCR de la demande - * @param rcrFichier : ligne du fichier - * @param rcr : rcr de la demande - * @throws FileCheckingException : erreur de format de fichier - */ - private void checkRcr(String rcrFichier, String rcr) throws FileCheckingException { - if (!rcrFichier.equals(rcr)) { - throw new FileCheckingException(Constant.ERR_FILE_ERRLINE + ligneCourante + Constant.ERR_FILE_WRONGRCR); - } - } - - /** - * Méthode de vérification de la forme d'un ppn - * @param ppn ppn à vérifier - * @throws FileCheckingException : erreur de format de fichier - */ - private void checkPpn(String ppn) throws FileCheckingException { - if (!ppn.matches("\\d{1,9}X?$")){ - throw new FileCheckingException(Constant.ERR_FILE_ERRLINE + ligneCourante + Constant.ERR_FILE_WRONGPPN); - } - } - - /** - * Méthode de vérification de la forme d'un epn - * @param epn epn à vérifier - * @throws FileCheckingException: erreur de format de l'epn - */ - private void checkEpn(String epn) throws FileCheckingException { - if (!epn.matches("\\d{1,9}X?$")) { - throw new FileCheckingException(Constant.ERR_FILE_ERRLINE + ligneCourante + Constant.ERR_FILE_WRONGEPN); - } - } - /** * Méthode permettant de vérifier la valeur de la 4è colonne en fonction du traitement 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 df3c5bc0..e6a4bed8 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 @@ -2,14 +2,31 @@ import fr.abes.item.core.constant.Constant; import fr.abes.item.core.constant.TYPE_DEMANDE; +import fr.abes.item.core.constant.TYPE_SUPPRESSION; import fr.abes.item.core.entities.item.Demande; +import fr.abes.item.core.entities.item.DemandeSupp; import fr.abes.item.core.exception.FileCheckingException; +import fr.abes.item.core.utilitaire.Utilitaires; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; +import java.io.BufferedReader; +import java.io.FileInputStream; import java.io.IOException; +import java.io.InputStreamReader; +import java.nio.charset.StandardCharsets; @Component public class FichierEnrichiSupp extends AbstractFichier implements Fichier { + private int ligneCourante; + + @Autowired + public FichierEnrichiSupp(@Value("") final String filename) { + this.filename = filename; + this.ligneCourante = 2; + } + @Override public int getType() { return Constant.ETATDEM_ACOMPLETER; @@ -27,6 +44,56 @@ public void generateFileName(Demande demande) { @Override public void checkFileContent(Demande d) throws FileCheckingException, IOException { + DemandeSupp demandeSupp = (DemandeSupp) d; + ligneCourante = 2; + try (FileInputStream fis = new FileInputStream(path.resolve(filename).toString()); + BufferedReader bufLecteur = new BufferedReader(new InputStreamReader(fis, StandardCharsets.UTF_8))) { + String ligne = Utilitaires.checkBom(bufLecteur.readLine()); + check3Cols(ligne); + while ((ligne = bufLecteur.readLine()) != null) { + checkBodyLine(ligne, demandeSupp); + ligneCourante++; + } + } + } + + /** + * Méthode de vérification de la première partie de la ligne du fichier enrichi. + * Les trois premières colonnes doivent être : ppn;rcr;epn; + * + * @param ligne : ligne à traiter + * @throws FileCheckingException : erreur dans le format de la ligne + */ + private void check3Cols(String ligne) throws FileCheckingException { + if (ligne.split(";").length < 3) { + throw new FileCheckingException(Constant.ERR_FILE_3COL_SUPP); + } + if (ligne.length() < 11) { + throw new FileCheckingException(Constant.ERR_FILE_3COL_SUPP); + } + if (!("ppn;rcr;epn").equalsIgnoreCase(ligne.substring(0, 11))) { + throw new FileCheckingException(Constant.ERR_FILE_3COL_SUPP); + } + } + /** + * Méthode de vérification d'une ligne du corps du fichier enrichi + * + * @param ligne ligne du fichier à analyser + * @throws FileCheckingException : erreur de format de la ligne + */ + private void checkBodyLine(String ligne, DemandeSupp demandeSupp) throws FileCheckingException { + try { + String[] tabligne = ligne.split(";"); + 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é + if (tabligne.length > 2) + checkEpn(tabligne[2], ligneCourante); + } catch (IndexOutOfBoundsException e) { + throw new FileCheckingException(Constant.ERR_FILE_ERRLINE + ligneCourante + Constant.ERR_FILE_LINELENGTH); + } } } diff --git a/core/src/main/java/fr/abes/item/core/components/FichierInitial.java b/core/src/main/java/fr/abes/item/core/components/FichierInitial.java index b9bf9161..b51989cb 100644 --- a/core/src/main/java/fr/abes/item/core/components/FichierInitial.java +++ b/core/src/main/java/fr/abes/item/core/components/FichierInitial.java @@ -14,7 +14,7 @@ @Component public class FichierInitial extends AbstractFichier implements Fichier { - private int ligneCourante; + protected int ligneCourante; @Autowired public FichierInitial(@Value("") final String filename) { @@ -59,7 +59,7 @@ public void checkFileContent(Demande demande) throws FileCheckingException, IOEx * @param ligne : ligne à vérifier * @throws FileCheckingException : erreur dans la format de la ligne */ - private void checkBodyLine(String ligne) throws FileCheckingException { + protected void checkBodyLine(String ligne) throws FileCheckingException { if (ligne.length() != 9) { throw new FileCheckingException(Constant.ERR_FILE_ERRLINE + ligneCourante + Constant.ERR_FILE_ONLYONEPPN); } diff --git a/core/src/main/java/fr/abes/item/core/components/FichierInitialSupp.java b/core/src/main/java/fr/abes/item/core/components/FichierInitialSupp.java index a824a5f2..c12e3590 100644 --- a/core/src/main/java/fr/abes/item/core/components/FichierInitialSupp.java +++ b/core/src/main/java/fr/abes/item/core/components/FichierInitialSupp.java @@ -6,6 +6,7 @@ import fr.abes.item.core.entities.item.Demande; import fr.abes.item.core.entities.item.DemandeSupp; import fr.abes.item.core.exception.FileCheckingException; +import fr.abes.item.core.utilitaire.Utilitaires; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; @@ -17,7 +18,6 @@ @Component public class FichierInitialSupp extends FichierInitial implements Fichier { - private int ligneCourante; public FichierInitialSupp(@Value("") final String filename) { super(filename); } @@ -37,14 +37,14 @@ public void generateFileName(Demande demande) { public void checkFileContent(Demande demande) throws FileCheckingException, IOException { try (FileInputStream fis = new FileInputStream(path.resolve(filename).toString()); BufferedReader bufLecteur = new BufferedReader(new InputStreamReader(fis, StandardCharsets.UTF_8))) { - this.ligneCourante = 0; - - while ((bufLecteur.readLine()) != null) { - ligneCourante++; + this.ligneCourante = 1; + String ligne; + while ((ligne = Utilitaires.checkBom(bufLecteur.readLine())) != null) { + checkBodyLine(ligne); } //cas ou il y a trop de lignes dans le fichier - if (ligneCourante > Constant.MAX_LIGNE_FICHIER_INIT_SUPP) { + if ((ligneCourante - 1) > Constant.MAX_LIGNE_FICHIER_INIT_SUPP) { throw new FileCheckingException(ligneCourante, Constant.ERR_FILE_TOOMUCH_SUPP); } } 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 4c767206..d152a7d2 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 @@ -11,20 +11,20 @@ import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; -import java.io.BufferedWriter; -import java.io.FileWriter; -import java.io.IOException; -import java.io.PrintWriter; +import java.io.*; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; @Slf4j @Component public class FichierPrepare extends AbstractFichier implements Fichier { - + @Autowired public FichierPrepare(@Value("") final String filename) { this.filename = filename; } - + @Override public String getFilename() { return this.filename; @@ -34,7 +34,7 @@ public String getFilename() { public void setFilename(String filename) { this.filename = filename; } - + @Override public int getType() { return Constant.ETATDEM_PREPAREE; @@ -53,7 +53,7 @@ public void checkFileContent(Demande demandeModif) { public void generateFileName(Demande demande) { this.filename = Constant.FIC_PREPARE_NAME + demande.getId() + Constant.EXTENSIONCSV; } - + /** * Méthode d'écriture de la première ligne dans le fichier */ @@ -64,9 +64,9 @@ public void ecrireEnTete() { out.println("PPN;RCR;EPN;"); } catch (IOException ex) { log.error(Constant.ERROR_UNABLE_TO_CREATE_FILE); - } + } } - + /** * Méthode permetant d'alimenter le fichier à partir d'une chaine correspondant à une liste d'epn * @param input résultat de l'appel à la fonction Oracle @@ -88,8 +88,7 @@ public void alimenterEpn(String input, String listeppn, String rcr) { } } catch (IOException ex) { log.error(Constant.ERROR_UNABLE_TO_CREATE_FILE); - } - + } } /** @@ -114,8 +113,40 @@ public void alimenterPpn(String input, String listeEpn, String rcr) { } catch (IOException ex) { log.error(Constant.ERROR_UNABLE_TO_CREATE_FILE); } + } + /** + * Méthode qui permet de trier le contenu du fichier de correspondance + * @throws IOException renvoi une exception si le fichier ne peut être lu + */ + public void trierLignesDeCorrespondances() throws IOException { + FileReader fileReader = new FileReader(path.resolve(filename).toString()); + BufferedReader reader = new BufferedReader(fileReader); + + List correspondanceSortList = new ArrayList<>(); + String header = reader.readLine();//cette ligne enleve le header et le stock + correspondanceSortList.add(header + "\n"); + reader.lines().sorted().forEach(line -> { + correspondanceSortList.add(line+"\n"); + }); + reader.close(); + fileReader.close(); + String result = String.join("", correspondanceSortList); + ecrireFichierTrie(result); + } + + /** + * Méthode permettant d'écrire sur le fichier la liste des correspondances triées + * @param sortedLines String contenant la liste des correspondances triées + */ + private void ecrireFichierTrie(String sortedLines) { + try (FileWriter fw = new FileWriter(path.resolve(filename).toString()); + BufferedWriter bw = new BufferedWriter(fw); + PrintWriter out = new PrintWriter(bw)) { + out.println(sortedLines); + } catch (IOException ex) { + log.error(Constant.ERROR_UNABLE_TO_CREATE_SORTED_FILE); + } } - } diff --git a/core/src/main/java/fr/abes/item/core/components/FichierSauvegardeSuppCsv.java b/core/src/main/java/fr/abes/item/core/components/FichierSauvegardeSuppCsv.java index 7aa7a714..7210468e 100644 --- a/core/src/main/java/fr/abes/item/core/components/FichierSauvegardeSuppCsv.java +++ b/core/src/main/java/fr/abes/item/core/components/FichierSauvegardeSuppCsv.java @@ -42,7 +42,7 @@ public void writePpnInFile(String ppn, Exemplaire exemplaire) throws StorageExce // ajout de la ligne out.println(ppn + ";" + gererZones(listDeReference, exemplaire)); } catch (IOException ex) { - throw new StorageException("Impossible d'écrire dans le fichier de sauvegarde txt"); + throw new StorageException("Impossible d'écrire dans le fichier de sauvegarde csv"); } } @@ -115,7 +115,7 @@ public void writeHeader() { // ajout de la ligne out.println(String.join(";", this.referenceService.constructHeaderCsv())); } catch (IOException ex) { - throw new StorageException("Impossible d'écrire dans le fichier de sauvegarde txt"); + throw new StorageException("Impossible d'écrire dans le fichier de sauvegarde csv"); } } } diff --git a/core/src/main/java/fr/abes/item/core/configuration/ItemLogAppender.java b/core/src/main/java/fr/abes/item/core/configuration/ItemLogAppender.java new file mode 100644 index 00000000..d0c68d30 --- /dev/null +++ b/core/src/main/java/fr/abes/item/core/configuration/ItemLogAppender.java @@ -0,0 +1,75 @@ +package fr.abes.item.core.configuration; + +import org.apache.logging.log4j.Level; +import org.apache.logging.log4j.ThreadContext; +import org.apache.logging.log4j.core.Appender; +import org.apache.logging.log4j.core.Filter; +import org.apache.logging.log4j.core.LogEvent; +import org.apache.logging.log4j.core.appender.AbstractAppender; +import org.apache.logging.log4j.core.config.plugins.Plugin; +import org.apache.logging.log4j.core.config.plugins.PluginAttribute; +import org.apache.logging.log4j.core.config.plugins.PluginElement; +import org.apache.logging.log4j.core.config.plugins.PluginFactory; + +@Plugin(name = "ItemLogAppender", category = "core", elementType = Appender.ELEMENT_TYPE) +public class ItemLogAppender extends AbstractAppender { + + // Utilisation d'un ThreadLocal pour stocker l'heure de début de chaque méthode + private static final ThreadLocal startTime = new ThreadLocal<>(); + + // Seuil en ms au dessus duquel on veut afficher un message + private final int msSeuilDetection = 0; + + protected ItemLogAppender(String name, Filter filter) { + super(name, filter, null); + } + + // Méthode à appeler pour démarrer le chronométrage + public static void startMethodExecution() { + startTime.set(System.currentTimeMillis()); + } + + /** + * Appender permettant une normalisation des logs + * Pour obtenir le temps d'execution d'une méthode, ajoutez + * ItemLogAppender.startMethodExecution(); + * au début d'une méthode. L'appender calcule par méthode sans + * besoin d'une borne d'arrêt ou de fin + * @param event + */ + @Override + public void append(LogEvent event) { + if (event.getLevel().isMoreSpecificThan(Level.INFO)) { + String originalMessage = event.getMessage().getFormattedMessage(); + String demandeId = ThreadContext.get("demandeId"); + String typeDemande = ThreadContext.get("typeDemande"); + if (demandeId != null && typeDemande != null) { + // Calcul du temps d'exécution + Long startTimeValue = startTime.get(); + long executionTime = startTimeValue != null ? System.currentTimeMillis() - startTimeValue : -1; + + if (executionTime < msSeuilDetection) { + System.out.println("DEM_" + typeDemande + "_" + demandeId + " / " + + event.getSource().getClassName() + " / " + + event.getSource().getMethodName() + " : " + + originalMessage); + } + //Uniquement si un ItemLogAppender.startMethodExecution(); à été placé au début d'une méthode + else{ + System.out.println("DEM_" + typeDemande + "_" + demandeId + " / " + + event.getSource().getClassName() + " / " + + event.getSource().getMethodName() + " : " + + originalMessage + " / Execution time: " + executionTime + " ms"); + } + } + } + } + + // Méthode statique pour créer l'instance de l'appender via le fichier de configuration + @PluginFactory + public static ItemLogAppender createAppender( + @PluginAttribute("name") String name, + @PluginElement("Filter") Filter filter) { + return new ItemLogAppender(name, filter); + } +} 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 bf8ce134..625e15dc 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 @@ -95,7 +95,7 @@ public class Constant implements Serializable { public static final String LIGNE_FICHIER_SERVICE_PATTERN = "^(?\\d{1,9}X?);(?\\d{8,9});(?\\d{1,9}X?);(?.+)?"; - public static final String LIGNE_FICHIER_SERVICE_PATTERN_SANS_VALEUR = "^(?\\d{1,9}X?);(?\\d{8,9});(?\\d{1,9}X?)?"; + public static final String LIGNE_FICHIER_SERVICE_PATTERN_SANS_VALEUR = "(?\\d{1,9}X?)?;(?\\d{8,9});(?\\d{1,9}X?)?"; /**Specific errors on file format*/ public static final String ERR_FILE_NOT_FOUND = "Fichier introuvable."; @@ -107,17 +107,18 @@ public class Constant implements Serializable { public static final String ERR_FILE_TOOMUCH_MODIF = Constant.ERR_FILE_TOOMUCH_START + Constant.MAX_LIGNE_FICHIER_INIT_MODIF + Constant.ERR_FILE_TOOMUCH_END; public static final String ERR_FILE_TOOMUCH_EXEMP = Constant.ERR_FILE_TOOMUCH_START + Constant.MAX_LIGNE_FICHIER_INIT_EXEMP + Constant.ERR_FILE_TOOMUCH_END; 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 = "La première ligne du fichier doit contenir 4 colonnes (ppn;rcr;epn;zone)."; + 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_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."; - public static final String ERR_FILE_LINELENGTH = "Il y a un problème lié à la longueur de la ligne."; + public static final String ERR_FILE_LINELENGTH = " : Il y a un problème lié à la longueur de la ligne."; public static final String ERR_FILE_TYPEFILE = "Type de fichier inconnu: "; public static final String ERR_FILE_TYPEDEMANDE = " pour le type de demande "; public static final String ERR_FILE_4COLNONVIDE = "La valeur de la 4è colonne ne doit pas être vide."; public static final String ERR_FILE_4COLZONE = "impossible de lancer un traitement sur la zone "; public static final String ERR_FILE_4COLVIDE = "La valeur de la 4è colonne doit être vide."; - public static final String ERR_FILE_WRONGRCR = "La valeur du rcr ne correspond pas au rcr de la demandeModif."; + public static final String ERR_FILE_WRONGRCR = "La valeur du rcr ne correspond pas au rcr de la demande."; public static final String ERR_FILE_WRONGPPN = "Le PPN n'est pas conforme."; public static final String ERR_FILE_WRONGEPN = "La valeur de l'epn n'est pas conforme."; @@ -231,6 +232,7 @@ public class Constant implements Serializable { public static final String ERROR_MONTH_RANGE = "Le mois doit être compris entre 1 et 12"; public static final String ERROR_YEAR_RANGE = "L'année ne peut pas être inférieure à l'année courante"; public static final String ERROR_UNABLE_TO_CREATE_FILE = "impossible de créer le fichier ppn;rcr;epn"; + public static final String ERROR_UNABLE_TO_CREATE_SORTED_FILE = "impossible de créer le fichier de correspondance trié"; public static final String ERROR_UNKNOWN_REST_CONTROLLER = "unknown error caught in RESTController, {}"; public static final String REST_RESPONDING_WITH_STATUS = "Response REST avec statut {}"; public static final String ERROR_FIRST_LINE_OF_FILE_NULL = "la première ligne du fichier est nulle"; diff --git a/core/src/main/java/fr/abes/item/core/service/IDemandeService.java b/core/src/main/java/fr/abes/item/core/service/IDemandeService.java index ba11c28a..d3a9c175 100644 --- a/core/src/main/java/fr/abes/item/core/service/IDemandeService.java +++ b/core/src/main/java/fr/abes/item/core/service/IDemandeService.java @@ -21,6 +21,8 @@ public interface IDemandeService { Demande creerDemande(String rcr, Integer userNum); + void modifierShortNameDemande(Demande demande); + Demande archiverDemande(Demande demande) throws DemandeCheckingException; void deleteById(Integer id); diff --git a/core/src/main/java/fr/abes/item/core/service/impl/DemandeExempService.java b/core/src/main/java/fr/abes/item/core/service/impl/DemandeExempService.java index f23a4463..fbefdb8d 100644 --- a/core/src/main/java/fr/abes/item/core/service/impl/DemandeExempService.java +++ b/core/src/main/java/fr/abes/item/core/service/impl/DemandeExempService.java @@ -751,4 +751,9 @@ public Demande archiverDemande(Demande demande) throws DemandeCheckingException ligneFichierService.deleteByDemande(demandeExemp); return changeState(demandeExemp, Constant.ETATDEM_ARCHIVEE); } + + @Override + public void modifierShortNameDemande(Demande demande) { + setIlnShortNameOnDemande(demande); + } } diff --git a/core/src/main/java/fr/abes/item/core/service/impl/DemandeModifService.java b/core/src/main/java/fr/abes/item/core/service/impl/DemandeModifService.java index 75d0b02e..9e93d717 100644 --- a/core/src/main/java/fr/abes/item/core/service/impl/DemandeModifService.java +++ b/core/src/main/java/fr/abes/item/core/service/impl/DemandeModifService.java @@ -586,4 +586,9 @@ public Demande majTraitement(Integer demandeId, Integer traitementId) { } return null; } + + @Override + public void modifierShortNameDemande(Demande demande) { + setIlnShortNameOnDemande(demande); + } } diff --git a/core/src/main/java/fr/abes/item/core/service/impl/DemandeRecouvService.java b/core/src/main/java/fr/abes/item/core/service/impl/DemandeRecouvService.java index 97f6e192..6214a375 100644 --- a/core/src/main/java/fr/abes/item/core/service/impl/DemandeRecouvService.java +++ b/core/src/main/java/fr/abes/item/core/service/impl/DemandeRecouvService.java @@ -356,4 +356,9 @@ public List getDemandesToDelete() { return listeDemandes; return null; } + + @Override + public void modifierShortNameDemande(Demande demande) { + setIlnShortNameOnDemande(demande); + } } 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 c23101d9..a3a6746f 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 @@ -86,6 +86,11 @@ public Demande creerDemande(String rcr, Integer userNum) { return save(demandeSupp); } + @Override + public void modifierShortNameDemande(Demande demande) { + setIlnShortNameOnDemande(demande); + } + @Override public Demande archiverDemande(Demande demande) throws DemandeCheckingException { DemandeSupp demandeSupp = (DemandeSupp) demande; @@ -181,6 +186,7 @@ private void preparerFichierEnPrep(DemandeSupp demande) throws IOException, Dema //Alimentation du fichier par appel à la procédure Oracle ppntoepn appelProcStockee(demande.getRcr(), demande.getTypeSuppression()); demande.setEtatDemande(new EtatDemande(Constant.ETATDEM_PREPAREE)); + fichierPrepare.trierLignesDeCorrespondances(); save(demande); checkEtatDemande(demande); } diff --git a/core/src/main/java/fr/abes/item/core/service/impl/LigneFichierExempService.java b/core/src/main/java/fr/abes/item/core/service/impl/LigneFichierExempService.java index c84aa52f..2de9bd99 100644 --- a/core/src/main/java/fr/abes/item/core/service/impl/LigneFichierExempService.java +++ b/core/src/main/java/fr/abes/item/core/service/impl/LigneFichierExempService.java @@ -72,8 +72,7 @@ public void saveFile(File file, Demande demande) { LigneFichierExemp ligneFichierExemp = new LigneFichierExemp(indexRecherche.toString(), valeur.toString(), 0, position++, "", null, demandeExemp, null); dao.save(ligneFichierExemp); } - } catch ( - IOException e) { + } catch (IOException e) { log.error(e.getMessage()); } } diff --git a/core/src/main/java/fr/abes/item/core/service/impl/LigneFichierModifService.java b/core/src/main/java/fr/abes/item/core/service/impl/LigneFichierModifService.java index fb8bb607..bb41df7a 100644 --- a/core/src/main/java/fr/abes/item/core/service/impl/LigneFichierModifService.java +++ b/core/src/main/java/fr/abes/item/core/service/impl/LigneFichierModifService.java @@ -38,11 +38,7 @@ public LigneFichierModifService(ILigneFichierModifDao dao) { @SuppressWarnings("squid:S3776") public void saveFile(File file, Demande demande){ DemandeModif demandeModif = (DemandeModif) demande; - BufferedReader reader = null; - - try { - reader = ReaderFactory.createBufferedReader(file); - + try (BufferedReader reader = ReaderFactory.createBufferedReader(file)){ String line; String firstLine = reader.readLine(); //ne pas prendre en compte la première ligne avec les en-tête @@ -75,14 +71,6 @@ public void saveFile(File file, Demande demande){ } } catch (IOException e){ log.error(e.getMessage()); - } finally { - if (reader != null){ - try { - reader.close(); - } catch (IOException e) { - log.error(e.getMessage()); - } - } } } diff --git a/core/src/main/java/fr/abes/item/core/service/impl/LigneFichierSuppService.java b/core/src/main/java/fr/abes/item/core/service/impl/LigneFichierSuppService.java index 4628c41c..0221e57b 100644 --- a/core/src/main/java/fr/abes/item/core/service/impl/LigneFichierSuppService.java +++ b/core/src/main/java/fr/abes/item/core/service/impl/LigneFichierSuppService.java @@ -3,7 +3,10 @@ import fr.abes.item.core.configuration.factory.Strategy; import fr.abes.item.core.constant.Constant; import fr.abes.item.core.constant.TYPE_DEMANDE; -import fr.abes.item.core.entities.item.*; +import fr.abes.item.core.entities.item.Demande; +import fr.abes.item.core.entities.item.DemandeSupp; +import fr.abes.item.core.entities.item.LigneFichier; +import fr.abes.item.core.entities.item.LigneFichierSupp; import fr.abes.item.core.repository.item.ILigneFichierSuppDao; import fr.abes.item.core.service.ILigneFichierService; import fr.abes.item.core.utilitaire.Utilitaires; @@ -21,7 +24,7 @@ import java.util.regex.Pattern; @Slf4j -@Strategy(type= ILigneFichierService.class, typeDemande = {TYPE_DEMANDE.SUPP}) +@Strategy(type = ILigneFichierService.class, typeDemande = {TYPE_DEMANDE.SUPP}) @Service public class LigneFichierSuppService implements ILigneFichierService { private final ILigneFichierSuppDao dao; @@ -32,23 +35,19 @@ public LigneFichierSuppService(ILigneFichierSuppDao dao) { @Override @Transactional - public void saveFile(File file, Demande demande){ + public void saveFile(File file, Demande demande) { DemandeSupp demandeSupp = (DemandeSupp) demande; - BufferedReader reader = null; - - try { - reader = ReaderFactory.createBufferedReader(file); - + try (BufferedReader reader = ReaderFactory.createBufferedReader(file)) { String line; String firstLine = reader.readLine(); //ne pas prendre en compte la première ligne avec les en-tête - if(firstLine == null){ + if (firstLine == null) { log.error(Constant.ERROR_FIRST_LINE_OF_FILE_NULL); } int position = 0; - - while ((line = reader.readLine()) != null){ + List listToSave = new ArrayList<>(); + while ((line = reader.readLine()) != null) { Pattern regexp = Pattern.compile(Constant.LIGNE_FICHIER_SERVICE_PATTERN_SANS_VALEUR); Matcher colsFinded = regexp.matcher(line); String ppn = ""; @@ -62,21 +61,12 @@ public void saveFile(File file, Demande demande){ if (colsFinded.group("epn") != null) epn = Utilitaires.addZeros(colsFinded.group("epn"), Constant.TAILLEMAX); } - if (!epn.isEmpty()) { - LigneFichierSupp lf = new LigneFichierSupp(ppn, rcr, epn, position++, 0, "", demandeSupp); - dao.save(lf); - } + LigneFichierSupp lf = new LigneFichierSupp(ppn, rcr, epn, position++, 0, "", demandeSupp); + listToSave.add(lf); } - } catch (IOException e){ + dao.saveAll(listToSave); + } catch (IOException e) { log.error(e.getMessage()); - } finally { - if (reader != null){ - try { - reader.close(); - } catch (IOException e) { - log.error(e.getMessage()); - } - } } } diff --git a/core/src/main/java/fr/abes/item/core/utilitaire/Utilitaires.java b/core/src/main/java/fr/abes/item/core/utilitaire/Utilitaires.java index 42ac78a8..8d7c66a9 100644 --- a/core/src/main/java/fr/abes/item/core/utilitaire/Utilitaires.java +++ b/core/src/main/java/fr/abes/item/core/utilitaire/Utilitaires.java @@ -14,10 +14,7 @@ import org.apache.commons.lang3.StringUtils; import java.io.IOException; -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; -import java.util.PrimitiveIterator; +import java.util.*; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -369,4 +366,5 @@ public static String getLabelTypeDemande(TYPE_DEMANDE typeDemande) { case SUPP -> "suppression"; }; } + } diff --git a/core/src/test/java/fr/abes/item/core/components/TestFichierEnrichiModif.java b/core/src/test/java/fr/abes/item/core/components/TestFichierEnrichiModif.java index 1909e721..e2d3b1f1 100644 --- a/core/src/test/java/fr/abes/item/core/components/TestFichierEnrichiModif.java +++ b/core/src/test/java/fr/abes/item/core/components/TestFichierEnrichiModif.java @@ -17,7 +17,7 @@ import static org.assertj.core.api.Assertions.assertThat; import static org.junit.jupiter.api.Assertions.assertThrows; -@DisplayName("Test pour FichierEnrichi") +@DisplayName("Test pour FichierEnrichi modification") class TestFichierEnrichiModif { @DisplayName("checkNok3Cols") @@ -94,7 +94,7 @@ void checkColMissing() { DemandeModif demandeModif = new DemandeModif("341720001", new Date(), new Date(), "", "", "", new EtatDemande(1), new Utilisateur(1), new Traitement(1, "Ajout une sous-zone", "ajoutSousZone")); FichierEnrichiModif fic = new FichierEnrichiModif("colMissing.csv"); fic.setPath(Paths.get("src/test/resources/fichierEnrichiModif")); - assertThat(assertThrows(FileCheckingException.class, () -> fic.checkFileContent(demandeModif)).getMessage().contains(Constant.ERR_FILE_3COL)) + assertThat(assertThrows(FileCheckingException.class, () -> fic.checkFileContent(demandeModif)).getMessage().contains(Constant.ERR_FILE_3COL_MODIF)) .isTrue(); } diff --git a/core/src/test/java/fr/abes/item/core/components/TestFichierEnrichiSupp.java b/core/src/test/java/fr/abes/item/core/components/TestFichierEnrichiSupp.java new file mode 100644 index 00000000..3ee32424 --- /dev/null +++ b/core/src/test/java/fr/abes/item/core/components/TestFichierEnrichiSupp.java @@ -0,0 +1,95 @@ +package fr.abes.item.core.components; + +import fr.abes.item.core.constant.Constant; +import fr.abes.item.core.constant.TYPE_SUPPRESSION; +import fr.abes.item.core.entities.item.DemandeSupp; +import fr.abes.item.core.entities.item.EtatDemande; +import fr.abes.item.core.entities.item.Utilisateur; +import fr.abes.item.core.exception.FileCheckingException; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + +import java.io.IOException; +import java.nio.file.Paths; +import java.util.Date; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.junit.jupiter.api.Assertions.assertThrows; +import static org.junit.jupiter.api.Assertions.assertTrue; + +@DisplayName("Test pour FichierEnrichi Suppression") +public class TestFichierEnrichiSupp { + @DisplayName("checkNok3Cols") + @Test + void checkNok3Cols() { + DemandeSupp demandeSupp = new DemandeSupp("341725201", new Date(), new Date(), TYPE_SUPPRESSION.EPN, "", new EtatDemande(1), new Utilisateur(1)); + FichierEnrichiSupp fic = new FichierEnrichiSupp("checkNok3Cols.csv"); + fic.setPath(Paths.get("src/test/resources/fichierEnrichiSupp")); + + assertThat(assertThrows(FileCheckingException.class, () -> fic.checkFileContent(demandeSupp)).getMessage().contains("La première ligne du fichier doit contenir 3 colonnes (ppn;rcr;epn)")) + .isTrue(); + } + + @DisplayName("checkOk3Cols") + @Test + void checkOk3Cols() throws IOException, FileCheckingException { + DemandeSupp demandeSupp = new DemandeSupp("341725201", new Date(), new Date(), TYPE_SUPPRESSION.EPN, "", new EtatDemande(1), new Utilisateur(1)); + FichierEnrichiSupp fic = new FichierEnrichiSupp("checkOk3Cols.csv"); + fic.setPath(Paths.get("src/test/resources/fichierEnrichiSupp")); + fic.checkFileContent(demandeSupp); + } + + @DisplayName("checkPpnNonOk") + @Test + void checkPpnNonOk() { + DemandeSupp demandeSupp = new DemandeSupp("341725201", new Date(), new Date(), TYPE_SUPPRESSION.EPN, "", new EtatDemande(1), new Utilisateur(1)); + FichierEnrichiSupp fic = new FichierEnrichiSupp("checkPpnNonOk.csv"); + fic.setPath(Paths.get("src/test/resources/fichierEnrichiSupp")); + assertTrue(assertThrows(FileCheckingException.class, () -> fic.checkFileContent(demandeSupp)).getMessage().contains(Constant.ERR_FILE_WRONGPPN)); + } + + @DisplayName("checkRcrNonOk") + @Test + void checkRcrNonOk() { + DemandeSupp demandeSupp = new DemandeSupp("341725201", new Date(), new Date(), TYPE_SUPPRESSION.EPN, "", new EtatDemande(1), new Utilisateur(1)); + FichierEnrichiSupp fic = new FichierEnrichiSupp("checkRcrNonOk.csv"); + fic.setPath(Paths.get("src/test/resources/fichierEnrichiSupp")); + assertTrue(assertThrows(FileCheckingException.class, () -> fic.checkFileContent(demandeSupp)).getMessage().contains(Constant.ERR_FILE_WRONGRCR)); + } + + @DisplayName("checkEpnVide") + @Test + void checkEpnVide() throws IOException, FileCheckingException { + DemandeSupp demandeSupp = new DemandeSupp("341725201", new Date(), new Date(), TYPE_SUPPRESSION.EPN, "", new EtatDemande(1), new Utilisateur(1)); + FichierEnrichiSupp fic = new FichierEnrichiSupp("checkEpnVide.csv"); + fic.setPath(Paths.get("src/test/resources/fichierEnrichiSupp")); + fic.checkFileContent(demandeSupp); + } + + @DisplayName("checkEpnNonVideOk") + @Test + void checkEpnNonVideOk() throws IOException, FileCheckingException { + DemandeSupp demandeSupp = new DemandeSupp("341725201", new Date(), new Date(), TYPE_SUPPRESSION.EPN, "", new EtatDemande(1), new Utilisateur(1)); + FichierEnrichiSupp fic = new FichierEnrichiSupp("checkEpnNonVideOk.csv"); + fic.setPath(Paths.get("src/test/resources/fichierEnrichiSupp")); + fic.checkFileContent(demandeSupp); + } + + @DisplayName("checkEpnNonVideNonOk") + @Test + void checkEpnNonVideNonOk() { + DemandeSupp demandeSupp = new DemandeSupp("341725201", new Date(), new Date(), TYPE_SUPPRESSION.EPN, "", new EtatDemande(1), new Utilisateur(1)); + FichierEnrichiSupp fic = new FichierEnrichiSupp("checkEpnNonVideNonOk.csv"); + fic.setPath(Paths.get("src/test/resources/fichierEnrichiSupp")); + assertTrue(assertThrows(FileCheckingException.class, () -> fic.checkFileContent(demandeSupp)).getMessage().contains(Constant.ERR_FILE_WRONGEPN)); + } + + @DisplayName("checkRcrDiffDemande") + @Test + void checkRcrDiffDemande() { + DemandeSupp demandeSupp = new DemandeSupp("341725201", new Date(), new Date(), TYPE_SUPPRESSION.EPN, "", new EtatDemande(1), new Utilisateur(1)); + FichierEnrichiSupp fic = new FichierEnrichiSupp("checkRcrDiffDemande.csv"); + fic.setPath(Paths.get("src/test/resources/fichierEnrichiSupp")); + assertTrue(assertThrows(FileCheckingException.class, () -> fic.checkFileContent(demandeSupp)).getMessage().contains(Constant.ERR_FILE_WRONGRCR)); + } +} diff --git a/core/src/test/resources/fichierEnrichiSupp/checkEpnNonVideNonOk.csv b/core/src/test/resources/fichierEnrichiSupp/checkEpnNonVideNonOk.csv new file mode 100644 index 00000000..81301c9a --- /dev/null +++ b/core/src/test/resources/fichierEnrichiSupp/checkEpnNonVideNonOk.csv @@ -0,0 +1,2 @@ +ppn;rcr;epn +321654987;341725201;123 \ No newline at end of file diff --git a/core/src/test/resources/fichierEnrichiSupp/checkEpnNonVideOk.csv b/core/src/test/resources/fichierEnrichiSupp/checkEpnNonVideOk.csv new file mode 100644 index 00000000..562fb034 --- /dev/null +++ b/core/src/test/resources/fichierEnrichiSupp/checkEpnNonVideOk.csv @@ -0,0 +1,2 @@ +ppn;rcr;epn +321654987;341725201;123456789 \ No newline at end of file diff --git a/core/src/test/resources/fichierEnrichiSupp/checkEpnVide.csv b/core/src/test/resources/fichierEnrichiSupp/checkEpnVide.csv new file mode 100644 index 00000000..baafbbee --- /dev/null +++ b/core/src/test/resources/fichierEnrichiSupp/checkEpnVide.csv @@ -0,0 +1,2 @@ +ppn;rcr;epn +123456789;341725201; \ No newline at end of file diff --git a/core/src/test/resources/fichierEnrichiSupp/checkNok3Cols.csv b/core/src/test/resources/fichierEnrichiSupp/checkNok3Cols.csv new file mode 100644 index 00000000..20a3a777 --- /dev/null +++ b/core/src/test/resources/fichierEnrichiSupp/checkNok3Cols.csv @@ -0,0 +1,2 @@ +ppn;rcr; +test;test;test \ No newline at end of file diff --git a/core/src/test/resources/fichierEnrichiSupp/checkOk3Cols.csv b/core/src/test/resources/fichierEnrichiSupp/checkOk3Cols.csv new file mode 100644 index 00000000..2110b66c --- /dev/null +++ b/core/src/test/resources/fichierEnrichiSupp/checkOk3Cols.csv @@ -0,0 +1,2 @@ +ppn;rcr;epn +123456789;341725201;321654987 \ No newline at end of file diff --git a/core/src/test/resources/fichierEnrichiSupp/checkPpnNonOk.csv b/core/src/test/resources/fichierEnrichiSupp/checkPpnNonOk.csv new file mode 100644 index 00000000..6d32498a --- /dev/null +++ b/core/src/test/resources/fichierEnrichiSupp/checkPpnNonOk.csv @@ -0,0 +1,2 @@ +ppn;rcr;epn +123;341725201;123456789 \ No newline at end of file diff --git a/core/src/test/resources/fichierEnrichiSupp/checkRcrDiffDemande.csv b/core/src/test/resources/fichierEnrichiSupp/checkRcrDiffDemande.csv new file mode 100644 index 00000000..fd950380 --- /dev/null +++ b/core/src/test/resources/fichierEnrichiSupp/checkRcrDiffDemande.csv @@ -0,0 +1,2 @@ +ppn;rcr;epn +123456789;341720001;456789321 \ No newline at end of file diff --git a/core/src/test/resources/fichierEnrichiSupp/checkRcrNonOk.csv b/core/src/test/resources/fichierEnrichiSupp/checkRcrNonOk.csv new file mode 100644 index 00000000..ad8a312b --- /dev/null +++ b/core/src/test/resources/fichierEnrichiSupp/checkRcrNonOk.csv @@ -0,0 +1,2 @@ +ppn;rcr;epn +123456789;12;123456789 \ No newline at end of file diff --git a/web/src/main/java/fr/abes/item/web/DemandeRestService.java b/web/src/main/java/fr/abes/item/web/DemandeRestService.java index c31a262c..f91215ee 100644 --- a/web/src/main/java/fr/abes/item/web/DemandeRestService.java +++ b/web/src/main/java/fr/abes/item/web/DemandeRestService.java @@ -125,6 +125,7 @@ public DemandeWebDto modifDemande(@PathVariable("type") TYPE_DEMANDE type, @Path if (demande != null) { if (rcr.isPresent()) { demande.setRcr(rcr.get()); + service.modifierShortNameDemande(demande); return builder.buildDemandeDto(service.save(demande), type); } if (type.equals(TYPE_DEMANDE.EXEMP) && typeExemp.isPresent()) { diff --git a/web/src/main/java/fr/abes/item/web/DownloadFichierRestService.java b/web/src/main/java/fr/abes/item/web/DownloadFichierRestService.java index 22ad943c..44c05d3c 100644 --- a/web/src/main/java/fr/abes/item/web/DownloadFichierRestService.java +++ b/web/src/main/java/fr/abes/item/web/DownloadFichierRestService.java @@ -16,6 +16,7 @@ import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; +import java.io.IOException; import java.nio.file.Paths; @RestController @@ -55,6 +56,5 @@ public ResponseEntity downloadFile( return ResponseEntity.ok() .header(HttpHeaders.CONTENT_DISPOSITION, "attachment;filename=\"" + file.getFilename() + "\"") .body(file); - } }