Skip to content

Commit

Permalink
FEAT ITEM-235-batch-alimenter-le-fichier-de-sauvegarde-csv
Browse files Browse the repository at this point in the history
     - ajout d'un TU pour la méthode ConstructHeaderCsv
     - ajout du début de l'algorithme d'alimentation du fichier csv
  • Loading branch information
EryneKL committed Oct 2, 2024
1 parent ac656a9 commit b669c1b
Show file tree
Hide file tree
Showing 6 changed files with 112 additions and 23 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -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;
}
Expand Down
Original file line number Diff line number Diff line change
@@ -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;
Expand All @@ -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<Zone> 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<String> 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<String> 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<String> 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
Expand Down Expand Up @@ -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());
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -63,17 +64,16 @@ public Integer findTraitementByDemandeId(Integer id) {
return traitementDao.findTraitementByDemandeModifId(id);
}

public String constructHeaderCsv() {
public List<String> constructHeaderCsv() {
List<ZonesAutorisees> listZonesAutorisees = this.iZonesAutoriseesDao.findAll();
StringBuilder headerCsv = new StringBuilder();
headerCsv.append("PPN").append(";");
List<String> 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;
}
}
Original file line number Diff line number Diff line change
@@ -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<String> 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());
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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<String> test = referenceService.constructHeaderCsv();
List<String> reference = List.of("PPN;917$a;930$c;$d;".split(";"));

assertEquals(reference,test);

}
}
6 changes: 6 additions & 0 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -147,6 +147,12 @@
<artifactId>maven-model</artifactId>
<version>3.6.3</version>
</dependency>
<!-- Création CSV -->
<dependency>
<groupId>com.opencsv</groupId>
<artifactId>opencsv</artifactId>
<version>5.9</version>
</dependency>

</dependencies>

Expand Down

0 comments on commit b669c1b

Please sign in to comment.