Skip to content

Commit

Permalink
FEAT ITEM-269-back-modifier-lordre-de-tri-du-fichier
Browse files Browse the repository at this point in the history
     - ajout d'une méthode de tri des correspondances dans Utilitaires.java
     - ajout d'une méthode d'inscription sur le fichier des correspondances triées dans FichierPrepare.java
     - ajout d'un appel aux méthodes de tri des correspondances et d'écriture sur le fichier dans DemandeSuppService.java
     - ajout d'une constante en cas d'erreur d'inscription sur le fichier des correspondances triées
  • Loading branch information
EryneKL committed Oct 16, 2024
1 parent bb576ff commit 3cf9452
Show file tree
Hide file tree
Showing 5 changed files with 35 additions and 25 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -34,7 +34,7 @@ public String getFilename() {
public void setFilename(String filename) {
this.filename = filename;
}

@Override
public int getType() {
return Constant.ETATDEM_PREPAREE;
Expand All @@ -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
*/
Expand All @@ -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
Expand All @@ -88,8 +88,8 @@ public void alimenterEpn(String input, String listeppn, String rcr) {
}
} catch (IOException ex) {
log.error(Constant.ERROR_UNABLE_TO_CREATE_FILE);
}
}

}

/**
Expand All @@ -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);
}
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -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";
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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);
}
Expand Down
20 changes: 9 additions & 11 deletions core/src/main/java/fr/abes/item/core/utilitaire/Utilitaires.java
Original file line number Diff line number Diff line change
Expand Up @@ -372,34 +372,32 @@ 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<String> correspondenceUnsortList = new ArrayList<>();
List<String> correspondanceUnsortList = new ArrayList<>();
String result = null;
int i = 0;
for (String line = reader.readLine(); line != null; line = reader.readLine()) {
if (i == 0) { // stockage de la ligne d'en-tête
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<String> correspondenceSortList = new ArrayList<>(correspondenceUnsortList);
result = result + correspondenceSortList.toString().replaceAll(", ","").replaceAll("\\[", "").replaceAll("\\[", "").replaceAll("\\]", "").replaceAll("\\]", "");

return new ByteArrayResource(result.getBytes());
List<String> correspondanceSortList = new ArrayList<>(correspondanceUnsortList);
return result + correspondanceSortList.toString().replaceAll(", ","").replaceAll("\\[", "").replaceAll("\\[", "").replaceAll("\\]", "").replaceAll("\\]", "");
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -45,7 +44,7 @@ public DownloadFichierRestService(FileSystemStorageService storageService, Check
@Operation(summary = "permet de récupérer les fichiers relatifs à une demande")
public ResponseEntity<Resource> 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) {
Expand All @@ -54,10 +53,8 @@ public ResponseEntity<Resource> 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);
}
}

0 comments on commit 3cf9452

Please sign in to comment.