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 des TUs pour la méthode FichierSauvegardeSuppCsv
     - ajout du début de l'algorithme d'alimentation du fichier csv
  • Loading branch information
EryneKL committed Oct 2, 2024
1 parent b669c1b commit d3671f1
Show file tree
Hide file tree
Showing 7 changed files with 126 additions and 65 deletions.
7 changes: 5 additions & 2 deletions batch/src/main/java/fr/abes/item/batch/JobConfiguration.java
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
import fr.abes.item.core.configuration.factory.StrategyFactory;
import fr.abes.item.core.constant.Constant;
import fr.abes.item.core.constant.TYPE_DEMANDE;
import fr.abes.item.core.service.ReferenceService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.batch.core.Job;
import org.springframework.batch.core.JobExecution;
Expand Down Expand Up @@ -54,6 +55,7 @@ public class JobConfiguration {
private final StrategyFactory strategyFactory;
private final ProxyRetry proxyRetry;

private final ReferenceService referenceService;
@Value("${batch.min.hour}")
int minHour;

Expand All @@ -69,9 +71,10 @@ public class JobConfiguration {
private Integer nbPpnInFileResult;


public JobConfiguration(StrategyFactory strategyFactory, ProxyRetry proxyRetry) {
public JobConfiguration(StrategyFactory strategyFactory, ProxyRetry proxyRetry, ReferenceService referenceService) {
this.strategyFactory = strategyFactory;
this.proxyRetry = proxyRetry;
this.referenceService = referenceService;
}

@Bean
Expand All @@ -88,7 +91,7 @@ public LignesFichierReader reader() {
@Bean
@StepScope
public LignesFichierProcessor processor() {
return new LignesFichierProcessor(strategyFactory, proxyRetry);
return new LignesFichierProcessor(strategyFactory, proxyRetry, this.referenceService);
}
@Bean
public LignesFichierWriter writer() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,6 @@ 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
Expand Up @@ -16,6 +16,7 @@
import fr.abes.item.core.exception.QueryToSudocException;
import fr.abes.item.core.exception.StorageException;
import fr.abes.item.core.service.IDemandeService;
import fr.abes.item.core.service.ReferenceService;
import fr.abes.item.core.service.impl.DemandeSuppService;
import lombok.NonNull;
import lombok.extern.slf4j.Slf4j;
Expand All @@ -38,14 +39,16 @@
public class LignesFichierProcessor implements ItemProcessor<LigneFichierDto, LigneFichierDto>, StepExecutionListener {
private final StrategyFactory strategyFactory;
private final ProxyRetry proxyRetry;
private FichierSauvegardeSuppTxt fichierSauvegardeSuppTxt;
private final ReferenceService referenceService;
private FichierSauvegardeSuppTxt fichierSauvegardeSuppTxt;
private FichierSauvegardeSuppCsv fichierSauvegardeSuppcsv;

private Demande demande;

public LignesFichierProcessor(StrategyFactory strategyFactory, ProxyRetry proxyRetry) {
public LignesFichierProcessor(StrategyFactory strategyFactory, ProxyRetry proxyRetry,ReferenceService referenceService) {
this.strategyFactory = strategyFactory;
this.proxyRetry = proxyRetry;
this.referenceService = referenceService;
}


Expand All @@ -62,7 +65,7 @@ public void beforeStep(StepExecution stepExecution) {
this.fichierSauvegardeSuppTxt.setPath(Path.of(String.valueOf(executionContext.get("fichierTxtPath"))));
this.fichierSauvegardeSuppTxt.setFilename(String.valueOf(executionContext.get("fichierTxtName")));

this.fichierSauvegardeSuppcsv = new FichierSauvegardeSuppCsv();
this.fichierSauvegardeSuppcsv = new FichierSauvegardeSuppCsv(this.referenceService);
this.fichierSauvegardeSuppcsv.setPath(Path.of(String.valueOf(executionContext.get("fichierCsvPath"))));
this.fichierSauvegardeSuppcsv.setFilename(String.valueOf(executionContext.get("fichierCsvName")));

Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
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 @@ -10,62 +9,72 @@
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.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.nio.file.Files;
import java.io.PrintWriter;
import java.nio.file.Path;
import java.util.List;

@Setter
@Getter
@Component
@NoArgsConstructor
public class FichierSauvegardeSuppCsv extends AbstractFichier implements Fichier {

private ReferenceService referenceService;
private final ReferenceService referenceService;

private CSVWriter csvWriter;
public FichierSauvegardeSuppCsv(ReferenceService referenceService) {
this.referenceService = referenceService;
}

public void writePpnInFile(String ppn, Exemplaire exemplaire) throws StorageException {
// 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 = "";
try (FileWriter fw = new FileWriter(this.getPath().resolve(this.getFilename()).toString(), true);
BufferedWriter bw = new BufferedWriter(fw);
PrintWriter out = new PrintWriter(bw)) {
// 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);
// 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");
}

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) {
return gererZonesRecursif(listeZonesEtSousZones, 0, exemplaire, "", null);
}

public String gererZones(List<String> listeZonesEtSousZones, Exemplaire exemplaire, String resultat, Zone zone) {
if (listeZonesEtSousZones.isEmpty()) {
return resultat;
private String gererZonesRecursif(List<String> listeZonesEtSousZones, int index, Exemplaire exemplaire, String resultat, Zone zone) {
if (index >= listeZonesEtSousZones.size()) {
if (resultat != null && !resultat.isEmpty()) {
return resultat.substring(0, resultat.length()-1);
}
return null;
}
String zoneSousZone = listeZonesEtSousZones.remove(0);
String zoneSousZone = listeZonesEtSousZones.get(index);

if (zoneSousZone.startsWith("$")) {
return gererSousZone(listeZonesEtSousZones, exemplaire, resultat, zone, zoneSousZone);
if (zone != null) {
String sousZone = zone.findSubLabel(zoneSousZone);
if (sousZone != null) {
resultat += sousZone;
}
}
} else {
zone = exemplaire.findZone(zoneSousZone.split("\\$")[0],0);
if (zone != null) {
String sousZone = zone.findSubLabel(zoneSousZone.split("\\$")[1]);
resultat += sousZone;
if (sousZone != null) {
resultat += sousZone;
}
}
resultat += ";";
}
return gererZones(listeZonesEtSousZones, exemplaire, resultat, zone);
}

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);
return gererZonesRecursif(listeZonesEtSousZones, index+1, exemplaire, resultat + ";", zone);
}

@Override
Expand Down Expand Up @@ -98,11 +107,14 @@ 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.csvWriter.writeNext((String[]) this.referenceService.constructHeaderCsv().toArray());
try (FileWriter fw = new FileWriter(this.getPath().resolve(this.getFilename()).toString(), true);
BufferedWriter bw = new BufferedWriter(fw);
PrintWriter out = new PrintWriter(bw)) {
// 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");
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -26,10 +26,9 @@ public void writePpnInFile(String ppn, Exemplaire exemplaire) throws StorageExce
BufferedWriter bw = new BufferedWriter(fw);
PrintWriter out = new PrintWriter(bw)) {
out.println(ppn);
out.println("\n");
out.print("\n");
out.println(exemplaire);
out.println("\n");
out.println("\n");
} catch (IOException ex) {
throw new StorageException("Impossible d'écrire dans le fichier de sauvegarde txt");
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -69,9 +69,11 @@ public List<String> constructHeaderCsv() {
List<String> headerCsv = new ArrayList<>();
headerCsv.add("PPN");
for (ZonesAutorisees zonesAutorisees: listZonesAutorisees) {
headerCsv.add(zonesAutorisees.getLabelZone()+zonesAutorisees.getSousZonesAutorisees().remove(0).getLibelle());
for (SousZonesAutorisees sousZonesAutorisees : zonesAutorisees.getSousZonesAutorisees()) {
headerCsv.add(sousZonesAutorisees.getLibelle());
if(!zonesAutorisees.getLabelZone().startsWith("L")){
headerCsv.add(zonesAutorisees.getLabelZone()+zonesAutorisees.getSousZonesAutorisees().remove(0).getLibelle());
for (SousZonesAutorisees sousZonesAutorisees : zonesAutorisees.getSousZonesAutorisees()) {
headerCsv.add(sousZonesAutorisees.getLibelle());
}
}
}
return headerCsv;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package fr.abes.item.core.components;

import com.opencsv.CSVWriter;
import com.google.common.collect.Lists;
import fr.abes.cbs.exception.ZoneException;
import fr.abes.cbs.notices.Exemplaire;
import fr.abes.cbs.notices.TYPE_NOTICE;
Expand All @@ -13,7 +13,8 @@

import java.util.List;

import static org.junit.jupiter.api.Assertions.*;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertNull;

@SpringBootTest(classes = {FichierSauvegardeSuppCsv.class})
class FichierSauvegardeSuppCsvTest {
Expand All @@ -24,29 +25,71 @@ class FichierSauvegardeSuppCsvTest {
@MockBean
private ReferenceService referenceService;

CSVWriter csvWriter;
@Test
void gererZonesAvec1Exemplaire() throws ZoneException {
List<String> listZoneSousZone = List.of("930$c;$d;991$a".split(";"));

Exemplaire exemplaire = new Exemplaire();
Zone zone930 = new Zone("930", TYPE_NOTICE.EXEMPLAIRE);
zone930.addSubLabel("$c", "test 930$c");
zone930.addSubLabel("$d", "test 930$d");

exemplaire.addZone(zone930);
exemplaire.addZone("991", "$a", "test 991$a");

String result = fichierSauvegardeSuppCsv.gererZones(listZoneSousZone, exemplaire);

assertEquals("test 930$c;test 930$d;test 991$a", result);
}

@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(";"));
void gererZonesAvec1ExemplaireEtListeLongue() throws ZoneException {
List<String> listZoneSousZone = List.of("915$a;917$a;930$a;$c;$d;$i;$j;991$a".split(";"));

Exemplaire exemplaire = new Exemplaire();
Zone zone930 = new Zone("930", TYPE_NOTICE.EXEMPLAIRE);
zone930.addSubLabel("$c", "test 930$c");
zone930.addSubLabel("$d", "test 930$d");

exemplaire.addZone(zone930);
exemplaire.addZone("991", "$a", "test 991$a");

String resultat = "";
String result = fichierSauvegardeSuppCsv.gererZones(listZoneSousZone, exemplaire);

assertEquals(";;;test 930$c;test 930$d;;;test 991$a", result);
}

@Test
void gererZonesAvec1ExemplaireLong() throws ZoneException {
List<String> listZoneSousZone = List.of("930$c;$i;$d".split(";"));

Exemplaire exemplaire = new Exemplaire();
Zone zone930 = new Zone("930", TYPE_NOTICE.EXEMPLAIRE);
zone930.addSubLabel("$c", "test 930$c");
zone930.addSubLabel("$d", "test 930$d");

exemplaire.addZone(zone930);
exemplaire.addZone("991", "$a", "test 991$a");

String result = fichierSauvegardeSuppCsv.gererZones(listZoneSousZone, exemplaire);

assertEquals("test 930$c;;test 930$d", result);
}

@Test
void gereZonesAvecListeVide() throws ZoneException {
List<String> listZoneSousZone = Lists.newArrayList();

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");
Exemplaire exemplaire = new Exemplaire();
Zone zone930 = new Zone("930", TYPE_NOTICE.EXEMPLAIRE);
zone930.addSubLabel("$c", "test 930$c");
zone930.addSubLabel("$d", "test 930$d");

Zone zone1 = new Zone("917", TYPE_NOTICE.EXEMPLAIRE);
exemplaire.addZone(zone930);
exemplaire.addZone("991", "$a", "test 991$a");

assertEquals(listZoneSousZone, fichierSauvegardeSuppCsv.gererZones(listZoneSousZone, exemplaire1, resultat, null));
String result = fichierSauvegardeSuppCsv.gererZones(listZoneSousZone, exemplaire);

// 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());
assertNull(result);
}
}

0 comments on commit d3671f1

Please sign in to comment.