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..c40d94f5 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 @@ -19,12 +19,12 @@ @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,8 @@ public void alimenterEpn(String input, String listeppn, String rcr) { } } catch (IOException ex) { log.error(Constant.ERROR_UNABLE_TO_CREATE_FILE); - } - + } + } /** @@ -116,6 +116,19 @@ public void alimenterPpn(String input, String listeEpn, String rcr) { } } - + + /** + * Méthode permettant d'écrire sur le fichier la liste des correspondances triées + * @param sortedResult String contenant la liste des correspondances triées + */ + public void writeSortedFileToDisk(String sortedResult) { + try (FileWriter fw = new FileWriter(path.resolve(filename).toString()); + BufferedWriter bw = new BufferedWriter(fw); + PrintWriter out = new PrintWriter(bw)) { + out.println(sortedResult); + } catch (IOException ex) { + log.error(Constant.ERROR_UNABLE_TO_CREATE_SORTED_FILE); + } + } } 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..693ab52d 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.writeSortedFileToDisk(Utilitaires.sortFichierCorrespondance(storageService.loadAsResource(fichierPrepare.getFilename()))); 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 26d334d5..83f73707 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 @@ -372,15 +372,15 @@ public static String getLabelTypeDemande(TYPE_DEMANDE typeDemande) { } /** - * Méthode qui permet de trier le contenu du fichier de correspondence + * Méthode qui permet de trier le contenu du fichier de correspondance * @param file un fichier de type Resource - * @return un fichier de type Resource + * @return une String contenant les correspondances triées * @throws IOException renvoi une exception si le fichier ne peut être lu */ - public static Resource sortFichierCorrespondance(Resource file) throws IOException { + public static String sortFichierCorrespondance(Resource file) throws IOException { FileReader fileReader = new FileReader(String.valueOf(file.getURI()).substring(6)); BufferedReader reader = new BufferedReader(fileReader); - List correspondenceUnsortList = new ArrayList<>(); + List correspondanceUnsortList = new ArrayList<>(); String result = null; int i = 0; for (String line = reader.readLine(); line != null; line = reader.readLine()) { @@ -388,18 +388,16 @@ public static Resource sortFichierCorrespondance(Resource file) throws IOExcepti result = line + "\n"; i++; } else { - // stockage des lignes de correspondence - correspondenceUnsortList.add(line+"\n"); + // stockage des lignes de correspondance + correspondanceUnsortList.add(line+"\n"); } } reader.close(); fileReader.close(); // tri des lignes - Collections.sort(correspondenceUnsortList); + Collections.sort(correspondanceUnsortList); // assemblage de l'en-tête avec les lignes pour constituer le résultat final - List correspondenceSortList = new ArrayList<>(correspondenceUnsortList); - result = result + correspondenceSortList.toString().replaceAll(", ","").replaceAll("\\[", "").replaceAll("\\[", "").replaceAll("\\]", "").replaceAll("\\]", ""); - - return new ByteArrayResource(result.getBytes()); + List correspondanceSortList = new ArrayList<>(correspondanceUnsortList); + return result + correspondanceSortList.toString().replaceAll(", ","").replaceAll("\\[", "").replaceAll("\\[", "").replaceAll("\\]", "").replaceAll("\\]", ""); } } 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 73de34ad..44c05d3c 100644 --- a/web/src/main/java/fr/abes/item/web/DownloadFichierRestService.java +++ b/web/src/main/java/fr/abes/item/web/DownloadFichierRestService.java @@ -4,7 +4,6 @@ import fr.abes.item.core.exception.ForbiddenException; import fr.abes.item.core.exception.UserExistException; import fr.abes.item.core.service.FileSystemStorageService; -import fr.abes.item.core.utilitaire.Utilitaires; import fr.abes.item.security.CheckAccessToServices; import io.swagger.v3.oas.annotations.Operation; import jakarta.servlet.http.HttpServletRequest; @@ -45,7 +44,7 @@ public DownloadFichierRestService(FileSystemStorageService storageService, Check @Operation(summary = "permet de récupérer les fichiers relatifs à une demande") public ResponseEntity downloadFile( @PathVariable("filename") String filename, @PathVariable("id") Integer numDemande, @PathVariable("type") TYPE_DEMANDE type, HttpServletRequest request - ) throws UserExistException, ForbiddenException, IOException { + ) throws UserExistException, ForbiddenException { checkAccessToServices.autoriserAccesDemandeParIln(numDemande, request.getAttribute("userNum").toString(), type); if (numDemande != null && numDemande != 0) { @@ -54,10 +53,8 @@ public ResponseEntity downloadFile( } Resource file = storageService.loadAsResource(filename); - Resource bodyFile = Utilitaires.sortFichierCorrespondance(file); - return ResponseEntity.ok() .header(HttpHeaders.CONTENT_DISPOSITION, "attachment;filename=\"" + file.getFilename() + "\"") - .body(bodyFile); + .body(file); } }