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/constant/Constant.java b/core/src/main/java/fr/abes/item/core/constant/Constant.java index bf8ce134..7d27722c 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 @@ -231,6 +231,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/impl/DemandeSuppService.java b/core/src/main/java/fr/abes/item/core/service/impl/DemandeSuppService.java index c23101d9..6b0f8cf2 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 @@ -181,6 +181,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/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/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); - } }