Skip to content

Commit

Permalink
Merge pull request #60 from abes-esr/ITEM-282-back-completer-la-metho…
Browse files Browse the repository at this point in the history
…de-check-content

Item 282 back completer la methode check content
  • Loading branch information
SamuelQuetin authored Oct 17, 2024
2 parents fafa29c + c3eabe5 commit 7827987
Show file tree
Hide file tree
Showing 20 changed files with 263 additions and 100 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -155,14 +155,19 @@ private LigneFichierDtoSupp processDemandeSupp(LigneFichierDto ligneFichierDto)
//récupération des exemplaires existants pour cette ligne
List<Exemplaire> exemplairesExistants = ((DemandeSuppService) strategyFactory.getStrategy(IDemandeService.class, TYPE_DEMANDE.SUPP))
.getExemplairesExistants(ligneFichierDtoSupp.getPpn());
Optional<Exemplaire> exemplaireASupprimerOpt = exemplairesExistants.stream().filter(exemplaire -> exemplaire.findZone("A99", 0).getValeur().equals(ligneFichierDtoSupp.getEpn())).findFirst();
if (exemplaireASupprimerOpt.isPresent()){
this.fichierSauvegardeSuppTxt.writePpnInFile(ligneFichierDtoSupp.getPpn(), exemplaireASupprimerOpt.get());
this.fichierSauvegardeSuppcsv.writePpnInFile(ligneFichierDtoSupp.getPpn(), exemplaireASupprimerOpt.get());
if (ligneFichierDtoSupp.getEpn() != null) {
Optional<Exemplaire> exemplaireASupprimerOpt = exemplairesExistants.stream().filter(exemplaire -> exemplaire.findZone("A99", 0).getValeur().equals(ligneFichierDtoSupp.getEpn())).findFirst();
if (exemplaireASupprimerOpt.isPresent()) {
this.fichierSauvegardeSuppTxt.writePpnInFile(ligneFichierDtoSupp.getPpn(), exemplaireASupprimerOpt.get());
this.fichierSauvegardeSuppcsv.writePpnInFile(ligneFichierDtoSupp.getPpn(), exemplaireASupprimerOpt.get());
}
//supprimer l'exemplaire
this.proxyRetry.deleteExemplaire(demandeSupp, ligneFichierDtoSupp);
ligneFichierDtoSupp.setRetourSudoc(Constant.EXEMPLAIRE_SUPPRIME);
} else {
//si pas d'epn dans la ligne du fichier, on ne fait pas le traitement et on écrit directement le message dans le retour sudoc pour le fichier résultat
ligneFichierDtoSupp.setRetourSudoc("Exemplaire inexistant");
}
//supprimer l'exemplaire
this.proxyRetry.deleteExemplaire(demandeSupp, ligneFichierDtoSupp);
ligneFichierDtoSupp.setRetourSudoc(Constant.EXEMPLAIRE_SUPPRIME);
return ligneFichierDtoSupp;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

import fr.abes.item.core.constant.Constant;
import fr.abes.item.core.entities.item.IndexRecherche;
import fr.abes.item.core.exception.FileCheckingException;
import fr.abes.item.core.utilitaire.Utilitaires;
import lombok.Getter;
import lombok.Setter;
Expand Down Expand Up @@ -79,4 +80,39 @@ protected int getIndexZone(IndexRecherche indexCourant, String[] tabLigne, int i
return indexZone;
}


/**
* Méthode permettant de vérifier que la valeur de la seconde colonne correspond au RCR de la demande
* @param rcrFichier : ligne du fichier
* @param rcr : rcr de la demande
* @throws FileCheckingException : erreur de format de fichier
*/
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);
}
}

/**
* Méthode de vérification de la forme d'un ppn
* @param ppn ppn à vérifier
* @throws FileCheckingException : erreur de format de fichier
*/
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);
}
}

/**
* Méthode de vérification de la forme d'un epn
* @param epn epn à vérifier
* @throws FileCheckingException: erreur de format de l'epn
*/
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);
}
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -92,13 +92,13 @@ public void checkFileContent(Demande demande) throws FileCheckingException, IOEx
*/
private void check3Cols(String ligne) throws FileCheckingException {
if (ligne.split(";").length < 4) {
throw new FileCheckingException(Constant.ERR_FILE_3COL);
throw new FileCheckingException(Constant.ERR_FILE_3COL_MODIF);
}
if (ligne.length() < 12) {
throw new FileCheckingException(Constant.ERR_FILE_3COL);
throw new FileCheckingException(Constant.ERR_FILE_3COL_MODIF);
}
if (!("ppn;rcr;epn").equalsIgnoreCase(ligne.substring(0, 11))) {
throw new FileCheckingException(Constant.ERR_FILE_3COL);
throw new FileCheckingException(Constant.ERR_FILE_3COL_MODIF);
}
}

Expand Down Expand Up @@ -149,49 +149,15 @@ private void checkBodyLine(String ligne, DemandeModif demandeModif) throws FileC
}
try {
String[] tabligne = ligne.split(";");
checkRcr(tabligne[1], demandeModif.getRcr());
checkPpn(tabligne[0]);
checkEpn(tabligne[2]);
checkRcr(tabligne[1], demandeModif.getRcr(), ligneCourante);
checkPpn(tabligne[0], ligneCourante);
checkEpn(tabligne[2], ligneCourante);
check4cols(tabligne, demandeModif.getTraitement().getNomMethode());
}catch (IndexOutOfBoundsException e) {
throw new FileCheckingException(Constant.ERR_FILE_ERRLINE + ligneCourante + Constant.ERR_FILE_LINELENGTH);
}
}

/**
* Méthode permettant de vérifier que la valeur de la seconde colonne correspond au RCR de la demande
* @param rcrFichier : ligne du fichier
* @param rcr : rcr de la demande
* @throws FileCheckingException : erreur de format de fichier
*/
private void checkRcr(String rcrFichier, String rcr) throws FileCheckingException {
if (!rcrFichier.equals(rcr)) {
throw new FileCheckingException(Constant.ERR_FILE_ERRLINE + ligneCourante + Constant.ERR_FILE_WRONGRCR);
}
}

/**
* Méthode de vérification de la forme d'un ppn
* @param ppn ppn à vérifier
* @throws FileCheckingException : erreur de format de fichier
*/
private void checkPpn(String ppn) throws FileCheckingException {
if (!ppn.matches("\\d{1,9}X?$")){
throw new FileCheckingException(Constant.ERR_FILE_ERRLINE + ligneCourante + Constant.ERR_FILE_WRONGPPN);
}
}

/**
* Méthode de vérification de la forme d'un epn
* @param epn epn à vérifier
* @throws FileCheckingException: erreur de format de l'epn
*/
private void checkEpn(String epn) throws FileCheckingException {
if (!epn.matches("\\d{1,9}X?$")) {
throw new FileCheckingException(Constant.ERR_FILE_ERRLINE + ligneCourante + Constant.ERR_FILE_WRONGEPN);
}
}


/**
* Méthode permettant de vérifier la valeur de la 4è colonne en fonction du traitement
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,14 +2,31 @@

import fr.abes.item.core.constant.Constant;
import fr.abes.item.core.constant.TYPE_DEMANDE;
import fr.abes.item.core.constant.TYPE_SUPPRESSION;
import fr.abes.item.core.entities.item.Demande;
import fr.abes.item.core.entities.item.DemandeSupp;
import fr.abes.item.core.exception.FileCheckingException;
import fr.abes.item.core.utilitaire.Utilitaires;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.nio.charset.StandardCharsets;

@Component
public class FichierEnrichiSupp extends AbstractFichier implements Fichier {
private int ligneCourante;

@Autowired
public FichierEnrichiSupp(@Value("") final String filename) {
this.filename = filename;
this.ligneCourante = 2;
}

@Override
public int getType() {
return Constant.ETATDEM_ACOMPLETER;
Expand All @@ -27,6 +44,56 @@ public void generateFileName(Demande demande) {

@Override
public void checkFileContent(Demande d) throws FileCheckingException, IOException {
DemandeSupp demandeSupp = (DemandeSupp) d;
ligneCourante = 2;
try (FileInputStream fis = new FileInputStream(path.resolve(filename).toString());
BufferedReader bufLecteur = new BufferedReader(new InputStreamReader(fis, StandardCharsets.UTF_8))) {
String ligne = Utilitaires.checkBom(bufLecteur.readLine());
check3Cols(ligne);
while ((ligne = bufLecteur.readLine()) != null) {
checkBodyLine(ligne, demandeSupp);
ligneCourante++;
}
}
}

/**
* Méthode de vérification de la première partie de la ligne du fichier enrichi.
* Les trois premières colonnes doivent être : ppn;rcr;epn;
*
* @param ligne : ligne à traiter
* @throws FileCheckingException : erreur dans le format de la ligne
*/
private void check3Cols(String ligne) throws FileCheckingException {
if (ligne.split(";").length < 3) {
throw new FileCheckingException(Constant.ERR_FILE_3COL_SUPP);
}
if (ligne.length() < 11) {
throw new FileCheckingException(Constant.ERR_FILE_3COL_SUPP);
}
if (!("ppn;rcr;epn").equalsIgnoreCase(ligne.substring(0, 11))) {
throw new FileCheckingException(Constant.ERR_FILE_3COL_SUPP);
}
}

/**
* Méthode de vérification d'une ligne du corps du fichier enrichi
*
* @param ligne ligne du fichier à analyser
* @throws FileCheckingException : erreur de format de la ligne
*/
private void checkBodyLine(String ligne, DemandeSupp demandeSupp) throws FileCheckingException {
try {
String[] tabligne = ligne.split(";");
if (demandeSupp.getTypeSuppression().equals(TYPE_SUPPRESSION.EPN) && tabligne[0] != null) {
checkPpn(tabligne[0], ligneCourante);
}
checkRcr(tabligne[1], demandeSupp.getRcr(), ligneCourante);
//cas ou l'epn est renseigné
if (tabligne.length > 2)
checkEpn(tabligne[2], ligneCourante);
} catch (IndexOutOfBoundsException e) {
throw new FileCheckingException(Constant.ERR_FILE_ERRLINE + ligneCourante + Constant.ERR_FILE_LINELENGTH);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@

@Component
public class FichierInitial extends AbstractFichier implements Fichier {
private int ligneCourante;
protected int ligneCourante;

@Autowired
public FichierInitial(@Value("") final String filename) {
Expand Down Expand Up @@ -59,7 +59,7 @@ public void checkFileContent(Demande demande) throws FileCheckingException, IOEx
* @param ligne : ligne à vérifier
* @throws FileCheckingException : erreur dans la format de la ligne
*/
private void checkBodyLine(String ligne) throws FileCheckingException {
protected void checkBodyLine(String ligne) throws FileCheckingException {
if (ligne.length() != 9) {
throw new FileCheckingException(Constant.ERR_FILE_ERRLINE + ligneCourante + Constant.ERR_FILE_ONLYONEPPN);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
import fr.abes.item.core.entities.item.Demande;
import fr.abes.item.core.entities.item.DemandeSupp;
import fr.abes.item.core.exception.FileCheckingException;
import fr.abes.item.core.utilitaire.Utilitaires;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

Expand All @@ -17,7 +18,6 @@

@Component
public class FichierInitialSupp extends FichierInitial implements Fichier {
private int ligneCourante;
public FichierInitialSupp(@Value("") final String filename) {
super(filename);
}
Expand All @@ -37,14 +37,14 @@ public void generateFileName(Demande demande) {
public void checkFileContent(Demande demande) throws FileCheckingException, IOException {
try (FileInputStream fis = new FileInputStream(path.resolve(filename).toString());
BufferedReader bufLecteur = new BufferedReader(new InputStreamReader(fis, StandardCharsets.UTF_8))) {
this.ligneCourante = 0;

while ((bufLecteur.readLine()) != null) {
ligneCourante++;
this.ligneCourante = 1;
String ligne;
while ((ligne = Utilitaires.checkBom(bufLecteur.readLine())) != null) {
checkBodyLine(ligne);
}

//cas ou il y a trop de lignes dans le fichier
if (ligneCourante > Constant.MAX_LIGNE_FICHIER_INIT_SUPP) {
if ((ligneCourante - 1) > Constant.MAX_LIGNE_FICHIER_INIT_SUPP) {
throw new FileCheckingException(ligneCourante, Constant.ERR_FILE_TOOMUCH_SUPP);
}
}
Expand Down
9 changes: 5 additions & 4 deletions core/src/main/java/fr/abes/item/core/constant/Constant.java
Original file line number Diff line number Diff line change
Expand Up @@ -95,7 +95,7 @@ public class Constant implements Serializable {

public static final String LIGNE_FICHIER_SERVICE_PATTERN = "^(?<ppn>\\d{1,9}X?);(?<rcr>\\d{8,9});(?<epn>\\d{1,9}X?);(?<valeur>.+)?";

public static final String LIGNE_FICHIER_SERVICE_PATTERN_SANS_VALEUR = "^(?<ppn>\\d{1,9}X?);(?<rcr>\\d{8,9});(?<epn>\\d{1,9}X?)?";
public static final String LIGNE_FICHIER_SERVICE_PATTERN_SANS_VALEUR = "(?<ppn>\\d{1,9}X?)?;(?<rcr>\\d{8,9});(?<epn>\\d{1,9}X?)?";

/**Specific errors on file format*/
public static final String ERR_FILE_NOT_FOUND = "Fichier introuvable.";
Expand All @@ -107,17 +107,18 @@ public class Constant implements Serializable {
public static final String ERR_FILE_TOOMUCH_MODIF = Constant.ERR_FILE_TOOMUCH_START + Constant.MAX_LIGNE_FICHIER_INIT_MODIF + Constant.ERR_FILE_TOOMUCH_END;
public static final String ERR_FILE_TOOMUCH_EXEMP = Constant.ERR_FILE_TOOMUCH_START + Constant.MAX_LIGNE_FICHIER_INIT_EXEMP + Constant.ERR_FILE_TOOMUCH_END;
public static final String ERR_FILE_TOOMUCH_SUPP = Constant.ERR_FILE_TOOMUCH_START + Constant.MAX_LIGNE_FICHIER_INIT_SUPP + Constant.ERR_FILE_TOOMUCH_END;
public static final String ERR_FILE_3COL = "La première ligne du fichier doit contenir 4 colonnes (ppn;rcr;epn;zone).";
public static final String ERR_FILE_3COL_MODIF = "La première ligne du fichier doit contenir 4 colonnes (ppn;rcr;epn;zone).";
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_ERRLINE = "Erreur 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.";
public static final String ERR_FILE_LINELENGTH = " : Il y a un problème lié à la longueur de la ligne.";
public static final String ERR_FILE_TYPEFILE = "Type de fichier inconnu: ";
public static final String ERR_FILE_TYPEDEMANDE = " pour le type de demande ";
public static final String ERR_FILE_4COLNONVIDE = "La valeur de la 4è colonne ne doit pas être vide.";
public static final String ERR_FILE_4COLZONE = "impossible de lancer un traitement sur la zone ";
public static final String ERR_FILE_4COLVIDE = "La valeur de la 4è colonne doit être vide.";
public static final String ERR_FILE_WRONGRCR = "La valeur du rcr ne correspond pas au rcr de la demandeModif.";
public static final String ERR_FILE_WRONGRCR = "La valeur du rcr ne correspond pas au rcr de la demande.";
public static final String ERR_FILE_WRONGPPN = "Le PPN n'est pas conforme.";
public static final String ERR_FILE_WRONGEPN = "La valeur de l'epn n'est pas conforme.";

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -72,8 +72,7 @@ public void saveFile(File file, Demande demande) {
LigneFichierExemp ligneFichierExemp = new LigneFichierExemp(indexRecherche.toString(), valeur.toString(), 0, position++, "", null, demandeExemp, null);
dao.save(ligneFichierExemp);
}
} catch (
IOException e) {
} catch (IOException e) {
log.error(e.getMessage());
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,11 +38,7 @@ public LigneFichierModifService(ILigneFichierModifDao dao) {
@SuppressWarnings("squid:S3776")
public void saveFile(File file, Demande demande){
DemandeModif demandeModif = (DemandeModif) demande;
BufferedReader reader = null;

try {
reader = ReaderFactory.createBufferedReader(file);

try (BufferedReader reader = ReaderFactory.createBufferedReader(file)){
String line;
String firstLine = reader.readLine(); //ne pas prendre en compte la première ligne avec les en-tête

Expand Down Expand Up @@ -75,14 +71,6 @@ public void saveFile(File file, Demande demande){
}
} catch (IOException e){
log.error(e.getMessage());
} finally {
if (reader != null){
try {
reader.close();
} catch (IOException e) {
log.error(e.getMessage());
}
}
}
}

Expand Down
Loading

0 comments on commit 7827987

Please sign in to comment.