diff --git a/batch/src/main/java/fr/abes/item/batch/traitement/CreerFichierSauvegardeTasklet.java b/batch/src/main/java/fr/abes/item/batch/traitement/CreerFichierSauvegardeTasklet.java index e6bbdd02..b91f961f 100644 --- a/batch/src/main/java/fr/abes/item/batch/traitement/CreerFichierSauvegardeTasklet.java +++ b/batch/src/main/java/fr/abes/item/batch/traitement/CreerFichierSauvegardeTasklet.java @@ -53,6 +53,7 @@ public RepeatStatus execute(StepContribution contribution, ChunkContext chunkCon this.fichierCsv = (FichierSauvegardeSuppCsv) FichierFactory.getFichier(Constant.ETATDEM_ATTENTE_2, TYPE_DEMANDE.SUPP); fichierCsv.generateFileName(this.demande); fichierCsv.setPath(Paths.get(uploadPath + demande.getTypeDemande().toString().toLowerCase() + "/" + demande.getId())); + fichierCsv.initWriter(); fichierCsv.writeHeader(); return RepeatStatus.FINISHED; } 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 f876a1b5..58ace389 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 @@ -1,5 +1,6 @@ package fr.abes.item.core.components; +import com.opencsv.CSVWriter; import fr.abes.cbs.notices.Exemplaire; import fr.abes.cbs.notices.Zone; import fr.abes.item.core.constant.Constant; @@ -9,39 +10,62 @@ import fr.abes.item.core.exception.StorageException; import fr.abes.item.core.service.ReferenceService; import lombok.Getter; +import lombok.NoArgsConstructor; import lombok.Setter; import org.springframework.stereotype.Component; import java.io.IOException; +import java.nio.file.Files; import java.nio.file.Path; import java.util.List; @Setter @Getter @Component +@NoArgsConstructor public class FichierSauvegardeSuppCsv extends AbstractFichier implements Fichier { private ReferenceService referenceService; - private StringBuilder csvContent; - - public FichierSauvegardeSuppCsv() { - this.csvContent = new StringBuilder(); - } + private CSVWriter csvWriter; public void writePpnInFile(String ppn, Exemplaire exemplaire) throws StorageException { - // TODO boucler sur chaque exemplaire et rechercher une correspondance entre une zone de l'exemplaire et la première zone du header, si correspondance alors mettre la zone exemplaire au bon index dans le csvContent - this.csvContent.append(ppn).append(";"); // ajout du ppn - for (String zoneAChercher : this.csvContent.toString().split(";")) { - List listZones = exemplaire.getListeZones().values().stream().filter(exemp -> exemp.getLabel().equals(zoneAChercher)).toList(); // getLabel renvoi le numéro d'exemplaire (exemple e01) - for (Zone zone : listZones) { - // TODO la zone et l'inclure dans le csvContent à la bonne place + // création de la liste de référence pour trouver l'emplacement de chaque zone et sous-zone + List listDeReference = referenceService.constructHeaderCsv(); + listDeReference.remove(0); - } + String resultat = ""; + + gererZones(listDeReference, exemplaire, resultat, null); // TODO passer une vrai Zone ou retirer le paramètre Zone dans l'appel de la méthode + + // ajout de la ligne + this.csvWriter.writeNext(resultat.split(";")); + } + public String gererZones(List listeZonesEtSousZones, Exemplaire exemplaire, String resultat, Zone zone) { + if (listeZonesEtSousZones.isEmpty()) { + return resultat; + } + String zoneSousZone = listeZonesEtSousZones.remove(0); + if (zoneSousZone.startsWith("$")) { + return gererSousZone(listeZonesEtSousZones, exemplaire, resultat, zone, zoneSousZone); + } else { + zone = exemplaire.findZone(zoneSousZone.split("\\$")[0],0); + if (zone != null) { + String sousZone = zone.findSubLabel(zoneSousZone.split("\\$")[1]); + resultat += sousZone; + } + resultat += ";"; + } + return gererZones(listeZonesEtSousZones, exemplaire, resultat, zone); + } - this.csvContent.append("\n"); // retour à la ligne + private String gererSousZone(List listeZonesEtSousZones, Exemplaire exemplaire, String resultat, Zone zone, String sousZoneAChercher) { + if (zone != null) { + String sousZone = zone.findSubLabel(sousZoneAChercher); + resultat += sousZone + ";"; } + return gererZones(listeZonesEtSousZones, exemplaire, resultat, zone); } @Override @@ -74,7 +98,11 @@ public void checkFileContent(Demande d) throws FileCheckingException, IOExceptio //non implémentée } + public void initWriter() throws IOException { + this.csvWriter = new CSVWriter(Files.newBufferedWriter(this.path), ';', CSVWriter.NO_QUOTE_CHARACTER, CSVWriter.DEFAULT_ESCAPE_CHARACTER, CSVWriter.DEFAULT_LINE_END); + } + public void writeHeader() { - this.csvContent.append(this.referenceService.constructHeaderCsv()); + this.csvWriter.writeNext((String[]) this.referenceService.constructHeaderCsv().toArray()); } } diff --git a/core/src/main/java/fr/abes/item/core/service/ReferenceService.java b/core/src/main/java/fr/abes/item/core/service/ReferenceService.java index c1db2d2c..ac4f2e70 100644 --- a/core/src/main/java/fr/abes/item/core/service/ReferenceService.java +++ b/core/src/main/java/fr/abes/item/core/service/ReferenceService.java @@ -4,6 +4,7 @@ import fr.abes.item.core.repository.item.*; import org.springframework.stereotype.Service; +import java.util.ArrayList; import java.util.List; import java.util.Optional; import java.util.Set; @@ -63,17 +64,16 @@ public Integer findTraitementByDemandeId(Integer id) { return traitementDao.findTraitementByDemandeModifId(id); } - public String constructHeaderCsv() { + public List constructHeaderCsv() { List listZonesAutorisees = this.iZonesAutoriseesDao.findAll(); - StringBuilder headerCsv = new StringBuilder(); - headerCsv.append("PPN").append(";"); + List headerCsv = new ArrayList<>(); + headerCsv.add("PPN"); for (ZonesAutorisees zonesAutorisees: listZonesAutorisees) { - headerCsv.append(zonesAutorisees.getLabelZone()); + headerCsv.add(zonesAutorisees.getLabelZone()+zonesAutorisees.getSousZonesAutorisees().remove(0).getLibelle()); for (SousZonesAutorisees sousZonesAutorisees : zonesAutorisees.getSousZonesAutorisees()) { - headerCsv.append(sousZonesAutorisees.getLibelle()).append(";"); + headerCsv.add(sousZonesAutorisees.getLibelle()); } } - headerCsv.append("\n"); - return headerCsv.toString(); + return headerCsv; } } diff --git a/core/src/test/java/fr/abes/item/core/components/FichierSauvegardeSuppCsvTest.java b/core/src/test/java/fr/abes/item/core/components/FichierSauvegardeSuppCsvTest.java new file mode 100644 index 00000000..dcd2351e --- /dev/null +++ b/core/src/test/java/fr/abes/item/core/components/FichierSauvegardeSuppCsvTest.java @@ -0,0 +1,52 @@ +package fr.abes.item.core.components; + +import com.opencsv.CSVWriter; +import fr.abes.cbs.exception.ZoneException; +import fr.abes.cbs.notices.Exemplaire; +import fr.abes.cbs.notices.TYPE_NOTICE; +import fr.abes.cbs.notices.Zone; +import fr.abes.item.core.service.ReferenceService; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.boot.test.mock.mockito.MockBean; + +import java.util.List; + +import static org.junit.jupiter.api.Assertions.*; + +@SpringBootTest(classes = {FichierSauvegardeSuppCsv.class}) +class FichierSauvegardeSuppCsvTest { + + @Autowired + private FichierSauvegardeSuppCsv fichierSauvegardeSuppCsv; + + @MockBean + private ReferenceService referenceService; + + CSVWriter csvWriter; + + @Test + void gererZones() throws ZoneException { + List listZoneSousZone = List.of("917$a;930$a;$c;$d;$e;$i;$j;$v;$2;$l;$k;991$a;915$a;$b;$f;955$a;$k;$4;920$a;$b;$c".split(";")); + + String resultat = ""; + + Exemplaire exemplaire1 = new Exemplaire(); + exemplaire1.addZone("930", "$c", "test 930$c"); + exemplaire1.addZone("930", "$d", "test 930$d"); + exemplaire1.addZone("991", "$a", "test 930$a"); + + Zone zone1 = new Zone("917", TYPE_NOTICE.EXEMPLAIRE); + + assertEquals(listZoneSousZone, fichierSauvegardeSuppCsv.gererZones(listZoneSousZone, exemplaire1, resultat, null)); + +// Exemplaire exemplaire2 = new Exemplaire(); +// exemplaire2.addZone("917", "$a", "test 917$a"); +// exemplaire2.addZone("991", "$a", "test 930$a"); +// exemplaire2.addZone("915", "$a", "test 915$a"); +// exemplaire2.addZone("915", "$c", "test 915$c"); +// +// assertEquals(, exemplaire2.getListeZones()); + } +} diff --git a/core/src/test/java/fr/abes/item/core/service/ReferenceServiceTest.java b/core/src/test/java/fr/abes/item/core/service/ReferenceServiceTest.java index 5656f756..585c6277 100644 --- a/core/src/test/java/fr/abes/item/core/service/ReferenceServiceTest.java +++ b/core/src/test/java/fr/abes/item/core/service/ReferenceServiceTest.java @@ -64,8 +64,10 @@ void constructHeaderCsv() { Mockito.when(iZonesAutoriseesDao.findAll()).thenReturn(zonesAutoriseesList); - String test = referenceService.constructHeaderCsv(); - assertEquals("PPN;917$a;930$c;$d;\n",test); + List test = referenceService.constructHeaderCsv(); + List reference = List.of("PPN;917$a;930$c;$d;".split(";")); + + assertEquals(reference,test); } } diff --git a/pom.xml b/pom.xml index f200ed7d..73adca4d 100644 --- a/pom.xml +++ b/pom.xml @@ -147,6 +147,12 @@ maven-model 3.6.3 + + + com.opencsv + opencsv + 5.9 +