Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

develop #71

Merged
merged 8 commits into from
Oct 23, 2024
Original file line number Diff line number Diff line change
Expand Up @@ -158,8 +158,19 @@ private LigneFichierDtoSupp processDemandeSupp(LigneFichierDto ligneFichierDto)
if (ligneFichierDtoSupp.getEpn() != null) {
Optional<Exemplaire> exemplaireASupprimerOpt = exemplairesExistants.stream().filter(exemplaire -> exemplaire.findZone("A99", 0).getValeur().equals(ligneFichierDtoSupp.getEpn())).findFirst();
if (exemplaireASupprimerOpt.isPresent()) {
//Type de document non présent dans le fichier de sauvegarde txt, seulement dans le csv
this.fichierSauvegardeSuppTxt.writePpnInFile(ligneFichierDtoSupp.getPpn(), exemplaireASupprimerOpt.get());
this.fichierSauvegardeSuppcsv.writePpnInFile(ligneFichierDtoSupp.getPpn(), exemplaireASupprimerOpt.get());
try{
String typeDoc = ((DemandeSuppService) strategyFactory.getStrategy(IDemandeService.class, TYPE_DEMANDE.SUPP))
.getTypeDocumentFromPpn(ligneFichierDtoSupp.getPpn());
this.fichierSauvegardeSuppcsv.writePpnInFile(ligneFichierDtoSupp.getPpn(), exemplaireASupprimerOpt.get(), typeDoc);
} catch (CBSException | IOException | ZoneException | QueryToSudocException e) {
if(e.getClass().equals(QueryToSudocException.class)){
this.fichierSauvegardeSuppcsv.writePpnInFile(ligneFichierDtoSupp.getPpn(), exemplaireASupprimerOpt.get(), e.getMessage());
}else{
this.fichierSauvegardeSuppcsv.writePpnInFile(ligneFichierDtoSupp.getPpn(), exemplaireASupprimerOpt.get(), "");
}
}
}
//supprimer l'exemplaire
this.proxyRetry.deleteExemplaire(demandeSupp, ligneFichierDtoSupp);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -89,7 +89,7 @@ protected int getIndexZone(IndexRecherche indexCourant, String[] tabLigne, int i
*/
protected void checkRcr(String rcrFichier, String rcr, int ligneCourante) throws FileCheckingException {
if (!rcrFichier.equals(rcr)) {
throw new FileCheckingException(Constant.ERR_FILE_ERRLINE + ligneCourante + Constant.ERR_FILE_WRONGRCR);
throw new FileCheckingException(Constant.ERR_FILE_LINE + ligneCourante + " : " + Constant.ERR_FILE_WRONGRCR);
}
}

Expand All @@ -100,7 +100,7 @@ protected void checkRcr(String rcrFichier, String rcr, int ligneCourante) throws
*/
protected void checkPpn(String ppn, int ligneCourante) throws FileCheckingException {
if (!ppn.matches("^(\\d{8}[0-9X])?$")){
throw new FileCheckingException(Constant.ERR_FILE_ERRLINE + ligneCourante + Constant.ERR_FILE_WRONGPPN);
throw new FileCheckingException(Constant.ERR_FILE_LINE + ligneCourante + " : " + Constant.ERR_FILE_WRONGPPN);
}
}

Expand All @@ -111,7 +111,7 @@ protected void checkPpn(String ppn, int ligneCourante) throws FileCheckingExcept
*/
protected void checkEpn(String epn, int ligneCourante) throws FileCheckingException {
if (!epn.matches("^(\\d{8}[0-9X])?$")) {
throw new FileCheckingException(Constant.ERR_FILE_ERRLINE + ligneCourante + Constant.ERR_FILE_WRONGEPN);
throw new FileCheckingException(Constant.ERR_FILE_LINE + ligneCourante + " : " + Constant.ERR_FILE_WRONGEPN);
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -86,7 +86,7 @@ private void checkBodyLine(String ligne, DemandeSupp demandeSupp) throws FileChe
try {
// contrôle de la longueur de la ligne
if (ligne.split(";").length > 3) {
throw new FileCheckingException(Constant.ERR_FILE_ERRLINE + " \"" + ligne + "\" " + Constant.ERR_FILE_3COL_SUPP_ANY_LINE);
throw new FileCheckingException(Constant.ERR_FILE_LINE + ligne + " : " + Constant.ERR_FILE_3COL_SUPP_ANY_LINE);
}
String[] tabligne = ligne.split(";");
// contrôle du ppn
Expand All @@ -98,7 +98,7 @@ private void checkBodyLine(String ligne, DemandeSupp demandeSupp) throws FileChe
if (tabligne.length > 2)
checkEpn(tabligne[2], ligneCourante);
} catch (IndexOutOfBoundsException e) {
throw new FileCheckingException(Constant.ERR_FILE_ERRLINE + ligneCourante + Constant.ERR_FILE_LINELENGTH);
throw new FileCheckingException(Constant.ERR_FILE_LINE + ligneCourante + " : " + Constant.ERR_FILE_LINELENGTH);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -32,15 +32,15 @@ public FichierSauvegardeSuppCsv(ReferenceService referenceService) {
this.referenceService = referenceService;
}

public void writePpnInFile(String ppn, Exemplaire exemplaire) throws StorageException {
public void writePpnInFile(String ppn, Exemplaire exemplaire, String typeDoc) throws StorageException {
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));
out.println(typeDoc + ";" + ppn + ";" + gererZones(listDeReference, exemplaire));
} catch (IOException ex) {
throw new StorageException("Impossible d'écrire dans le fichier de sauvegarde csv");
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -111,6 +111,7 @@ public class Constant implements Serializable {
public static final String ERR_FILE_3COL_SUPP = "La première ligne du fichier doit contenir 3 colonnes (ppn;rcr;epn)";
public static final String ERR_FILE_3COL_SUPP_ANY_LINE = "La ligne doit contenir trois colones";
public static final String ERR_FILE_ERRLINE = "Erreur ligne ";
public static final String ERR_FILE_LINE = "Ligne ";
public static final String ERR_FILE_ONLYONEPPN = "la ligne ne doit contenir qu'un ppn (sur 9 caractères).";
public static final String ERR_FILE_HEAD4TH = "La valeur en-tête de la quatrieme colonne n'est pas valide.";
public static final String ERR_FILE_LINELENGTH = " : Il y a un problème lié à la longueur de la ligne.";
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,10 @@
package fr.abes.item.core.service;

import fr.abes.item.core.entities.item.*;
import fr.abes.item.core.repository.item.*;
import fr.abes.item.core.repository.item.IEtatDemandeDao;
import fr.abes.item.core.repository.item.ITraitementDao;
import fr.abes.item.core.repository.item.ITypeExempDao;
import fr.abes.item.core.repository.item.IZonesAutoriseesDao;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
Expand Down Expand Up @@ -67,6 +70,7 @@ public Integer findTraitementByDemandeId(Integer id) {
public List<String> constructHeaderCsv() {
List<ZonesAutorisees> listZonesAutorisees = this.iZonesAutoriseesDao.findAll();
List<String> headerCsv = new ArrayList<>();
headerCsv.add("TYPE (008)");
headerCsv.add("PPN");
for (ZonesAutorisees zonesAutorisees: listZonesAutorisees) {
if(!zonesAutorisees.getLabelZone().startsWith("L")){
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import fr.abes.cbs.exception.CBSException;
import fr.abes.cbs.exception.ZoneException;
import fr.abes.cbs.notices.Exemplaire;
import fr.abes.cbs.notices.NoticeConcrete;
import fr.abes.item.core.components.*;
import fr.abes.item.core.configuration.factory.FichierFactory;
import fr.abes.item.core.configuration.factory.Strategy;
Expand Down Expand Up @@ -390,6 +391,20 @@ public String[] getNoticeExemplaireAvantApres(Demande demande, LigneFichier lign
}
}

public String getTypeDocumentFromPpn(String ppn) throws CBSException, IOException, QueryToSudocException, ZoneException {
String query = "che ppn " + ppn;
traitementService.getCbs().search(query);
int nbReponses = traitementService.getCbs().getNbNotices();
return switch (nbReponses) {
case 0 -> throw new QueryToSudocException(Constant.ERR_FILE_NOTICE_NOT_FOUND);
case 1 -> {
NoticeConcrete notice = traitementService.getCbs().editerNoticeConcrete("1");
yield notice.getNoticeBiblio().findZone("008", 0).findSubLabel("$a").substring(0,2);
}
default -> throw new QueryToSudocException(Constant.ERR_FILE_MULTIPLES_NOTICES_FOUND + traitementService.getCbs().getListePpn());
};
}

public List<Exemplaire> getExemplairesExistants(LigneFichierSupp ligneFichierSupp) throws IOException, QueryToSudocException, CBSException, ZoneException {
return getExemplairesExistants(ligneFichierSupp.getPpn());
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,7 @@ void constructHeaderCsv() {
Mockito.when(iZonesAutoriseesDao.findAll()).thenReturn(zonesAutoriseesList);

List<String> test = referenceService.constructHeaderCsv();
List<String> reference = List.of("PPN;917$a;930$c;$d;".split(";"));
List<String> reference = List.of("TYPE (008);PPN;917$a;930$c;$d;".split(";"));

assertEquals(reference,test);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -107,13 +107,6 @@ void addZeros(){
assertThat(Utilitaires.addZeros(str, 9)).isEqualTo("000000012");
}

@Test
void stringToRemove(){
String string = "230727409;seau;bleu;;;";
String stringResult = Utilitaires.removeSemicolonFromEndOfLine(string);
System.out.println(stringResult);
}

/**
* Test de vérification de la méthode supprimant les données locales de la première ligne du fichier
*/
Expand Down
Loading