Skip to content

Commit

Permalink
FIX : revert sur messages spécifiques analyse fichiers
Browse files Browse the repository at this point in the history
Mise en place ApiReturnError et application cas pour analyse fichier
  • Loading branch information
pierre-maraval committed Nov 4, 2024
1 parent 6c7ede3 commit 6634cfc
Show file tree
Hide file tree
Showing 18 changed files with 248 additions and 250 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -87,9 +87,9 @@ protected int getIndexZone(IndexRecherche indexCourant, String[] tabLigne, int i
* @param rcr : rcr de la demande
* @throws FileCheckingException : erreur de format de fichier
*/
protected void checkRcr(String rcrFichier, String rcr) throws FileCheckingException {
protected void checkRcr(String rcrFichier, String rcr, int ligneCourante) throws FileCheckingException {
if (!rcrFichier.equals(rcr)) {
throw new FileCheckingException(Constant.ERR_FILE_WRONGCONTENT);
throw new FileCheckingException(Constant.ERR_FILE_LINE + ligneCourante + " : " + Constant.ERR_FILE_WRONGRCR);
}
}

Expand All @@ -98,9 +98,9 @@ protected void checkRcr(String rcrFichier, String rcr) throws FileCheckingExcept
* @param ppn ppn à vérifier
* @throws FileCheckingException : erreur de format de fichier
*/
protected void checkPpn(String ppn) throws FileCheckingException {
protected void checkPpn(String ppn, int ligneCourante) throws FileCheckingException {
if (!ppn.matches("^(\\d{8}[0-9X])?$")){
throw new FileCheckingException(Constant.ERR_FILE_WRONGCONTENT);
throw new FileCheckingException(Constant.ERR_FILE_LINE + ligneCourante + " : " + Constant.ERR_FILE_WRONGPPN);
}
}

Expand All @@ -109,9 +109,9 @@ protected void checkPpn(String ppn) throws FileCheckingException {
* @param epn epn à vérifier
* @throws FileCheckingException: erreur de format de l'epn
*/
protected void checkEpn(String epn) throws FileCheckingException {
protected void checkEpn(String epn, int ligneCourante) throws FileCheckingException {
if (!epn.matches("^(\\d{8}[0-9X])?$")) {
throw new FileCheckingException(Constant.ERR_FILE_WRONGCONTENT);
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 @@ -111,19 +111,19 @@ public void checkFileContent(Demande demandeExemp) throws FileCheckingException,
this.checkZones(newLine.toString());//ENTETE vérification des zones saisies par l'utilisateur
this.checkMandatoryZones(newLine.toString(), demande.getTypeExemp());
while ((ligne = bufLecteur.readLine()) != null) { //LIGNES EXEMPLAIRES Tant qu'il y a des lignes à lire dans le fichier
this.checkAnormalLineOfExemplary(ligne); //Détecte une ligne de données vide
this.checkAnormalLineOfExemplary(ligneCourantePositionNumber, ligne); //Détecte une ligne de données vide
checkBodyLine(ligne); //controle adequation taille entete taille ligne exemplaire, controle champ vide, controle format de la date pour un index en Date | Auteur | Titre
ligneCourantePositionNumber++; //pointeur sur ligne en cours d'analyse dans fichier
}

//cas où il n'y a que la ligne d'en-tête, lance une erreur (absence des données liées au zones et sous zones)
if (ligneCourantePositionNumber == 2) {
throw new FileCheckingException(Constant.ERR_FILE_WRONGCONTENT);
throw new FileCheckingException(ligneCourantePositionNumber, Constant.ERR_FILE_NOREQUESTS);
}

//cas ou le nombre de lignes du fichier dépassent la limite autorisée
if ((ligneCourantePositionNumber - 1) > Constant.MAX_LIGNE_FICHIER_INIT_EXEMP) {
throw new FileCheckingException(Constant.ERR_FILE_WRONGCONTENT);
throw new FileCheckingException(ligneCourantePositionNumber, Constant.ERR_FILE_TOOMUCH_EXEMP);
}
}
}
Expand All @@ -134,7 +134,7 @@ private void checkMandatoryZones(String entete, TypeExemp typeExemp) throws File
Pattern patternZoneSousZones = Pattern.compile(Constant.REG_EXP_ZONES_SOUS_ZONES);
boolean trouve = isTrouve(entete, ssZone, patternZoneSousZones);
if (!trouve) {
throw new FileCheckingException(Constant.ERR_FILE_WRONGCONTENT);
throw new FileCheckingException(Constant.ERR_FILE_MANDATORY_ZONE_MISSING + ssZone.getZone().getLabelZone() + ssZone.getLibelle());
}
}
}
Expand Down Expand Up @@ -163,9 +163,9 @@ private static boolean isTrouve(String entete, SousZonesAutorisees ssZone, Patte
* @param lignedExemplaire la ligne d'exemplaire à analyser
* @throws FileCheckingException une ligne anormale à été détectée, l'utilisateur doit revoir son fichier
*/
private void checkAnormalLineOfExemplary(String lignedExemplaire) throws FileCheckingException {
private void checkAnormalLineOfExemplary(Integer ligneCourante, String lignedExemplaire) throws FileCheckingException {
if (Utilitaires.detectAnormalLine(lignedExemplaire)){
throw new FileCheckingException(Constant.ERR_FILE_WRONGCONTENT);
throw new FileCheckingException(ligneCourante, Constant.ERR_FILE_LIGNE_ANORNALE);
}
}

Expand All @@ -182,7 +182,7 @@ private void checkAnormalLineOfExemplary(String lignedExemplaire) throws FileChe
private void checkFirstColumn(String ligne, TypeExemp type) throws FileCheckingException {
this.indiceZone = checkIndexRecherche(ligne, type);
if (this.indiceZone == 0) {
throw new FileCheckingException(Constant.ERR_FILE_WRONGCONTENT);
throw new FileCheckingException(1, Constant.ERR_FILE_INDEXINCONNU);
}
}

Expand All @@ -203,7 +203,7 @@ public Integer checkIndexRecherche(String indexLigne, TypeExemp type) throws Fil
//en fonction de l'index, le nombre de zone à examiner change
indexZone = getIndexZone(indexCourant, tabLigne, indexZone);
if (tabLigne[0].isEmpty() || tabLigne[0].equalsIgnoreCase(" ")) {
throw new FileCheckingException(Constant.ERR_FILE_WRONGCONTENT);
throw new FileCheckingException(1, Constant.ERR_FILE_NOINDEX);
}
}
/*A la fin on a un indexZone de :
Expand Down Expand Up @@ -241,14 +241,14 @@ public void checkZones(String listeZones) throws FileCheckingException {
//vérification des sous zones de la zone
nbSousZones = checkSousZones(nbSousZones, matcher);
if (nbSousZones == 0) {
throw new FileCheckingException(Constant.ERR_FILE_WRONGCONTENT);
throw new FileCheckingException(1, Constant.ERR_FILE_ZONEINCOMPLETE);
}
}
if (nbColonnes == 0) {
throw new FileCheckingException(Constant.ERR_FILE_WRONGCONTENT);
throw new FileCheckingException(1, Constant.ERR_FILE_NOZONE);
}
if (!matcher.lookingAt()) {
throw new FileCheckingException(Constant.ERR_FILE_WRONGCONTENT);
throw new FileCheckingException(1, Constant.ERR_FILE_CARACTERES);
}
}

Expand All @@ -260,7 +260,7 @@ private int checkSousZones(int nbSousZones, Matcher matcher) throws FileChecking
nbSousZones++;
sousZoneCourante = matcher.group("sousZone" + i);
if (!allowedSousZone.contains(sousZoneCourante)) {
throw new FileCheckingException(Constant.ERR_FILE_WRONGCONTENT);
throw new FileCheckingException(1, Constant.ERR_FILE_SOUSZONENONAUTORISEE + sousZoneCourante + " pour la zone " + zoneCourante);
}
}
}
Expand All @@ -269,7 +269,7 @@ private int checkSousZones(int nbSousZones, Matcher matcher) throws FileChecking

private void checkZone(List<String> allowedZones, String zone) throws FileCheckingException {
if (!allowedZones.contains(zone))
throw new FileCheckingException(Constant.ERR_FILE_WRONGCONTENT);
throw new FileCheckingException(1, Constant.ERR_FILE_ZONENONAUTORISEE + zone);
}

/**
Expand All @@ -281,18 +281,18 @@ public void checkBodyLine(String ligne) throws FileCheckingException {
String[] tabLigne = ligne.split(";");

if (Utilitaires.detectsANumberOfDataDifferentFromTheNumberOfHeaderDataOnALine(ligne, nbColonnes)) {
throw new FileCheckingException(Constant.ERR_FILE_WRONGCONTENT);
throw new FileCheckingException(ligneCourantePositionNumber, Constant.ERR_FILE_WRONGNBCOLUMNS);
}

List<String> listeChamps = new ArrayList<>(Arrays.asList(tabLigne));

//analyse de la valeur de la date dans le cas d'une recherche date;auteur;titre
if ((("DAT").equals(this.indexRecherche.getCode())) && (!listeChamps.get(0).matches("\\d{4}"))) {
throw new FileCheckingException(Constant.ERR_FILE_WRONGCONTENT);
throw new FileCheckingException(ligneCourantePositionNumber, Constant.ERR_FILE_DATENOK);
}

if ((("PPN").equals(this.indexRecherche.getCode())) && (!listeChamps.get(0).matches(Constant.PATTERN_INDEX_PPN))) {
throw new FileCheckingException(Constant.ERR_FILE_WRONGCONTENT);
throw new FileCheckingException(ligneCourantePositionNumber, Constant.ERR_FILE_WRONGPPN);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -53,13 +53,13 @@ public void checkFileContent(Demande demande) throws FileCheckingException, IOEx
try (FileInputStream fis = new FileInputStream(path.resolve(filename).toString());
BufferedReader bufLecteur = new BufferedReader(new InputStreamReader(fis, StandardCharsets.UTF_8))) {
if (demandeModif.getTraitement() == null) {
throw new FileCheckingException(Constant.ERR_FILE_WRONGCONTENT);
throw new FileCheckingException(Constant.ERR_FILE_NOTRAIT);
}
String ligne = Utilitaires.checkBom(bufLecteur.readLine());
check3Cols(ligne);
String tagSubTag = ligne.split(";")[3];
if (tagSubTag.matches("e\\d{2}\\$a")) {
throw new FileCheckingException(Constant.ERR_FILE_WRONGCONTENT + tagSubTag);
throw new FileCheckingException(Constant.ERR_FILE_4COLZONE + tagSubTag);
}
if (tagSubTag.startsWith("E")) {
checkSubfieldCol4ZoneE(tagSubTag, demandeModif.getTraitement().getNomMethode());
Expand All @@ -76,7 +76,7 @@ public void checkFileContent(Demande demande) throws FileCheckingException, IOEx
}
// cas ou il n'y a que la ligne d'en-tête
if (ligneCourante == 1) {
throw new FileCheckingException(Constant.ERR_FILE_WRONGCONTENT);
throw new FileCheckingException(ligneCourante, Constant.ERR_FILE_NOREQUESTS);
}

}
Expand All @@ -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_WRONGCONTENT);
throw new FileCheckingException(Constant.ERR_FILE_3COL_MODIF);
}
if (ligne.length() < 12) {
throw new FileCheckingException(Constant.ERR_FILE_WRONGCONTENT);
throw new FileCheckingException(Constant.ERR_FILE_3COL_MODIF);
}
if (!("ppn;rcr;epn").equalsIgnoreCase(ligne.substring(0, 11))) {
throw new FileCheckingException(Constant.ERR_FILE_WRONGCONTENT);
throw new FileCheckingException(Constant.ERR_FILE_3COL_MODIF);
}
}

Expand All @@ -112,27 +112,27 @@ private void check3Cols(String ligne) throws FileCheckingException {
private void checkSubfieldCol4(String subfield, String traitement) throws FileCheckingException {
String regexSupp = "[9LE]\\d\\d";
if (traitement.equals("supprimerZone") && (!subfield.matches(regexSupp))){
throw new FileCheckingException(Constant.ERR_FILE_WRONGCONTENT);
throw new FileCheckingException(Constant.ERR_FILE_HEAD4TH);
}
if (!traitement.equals("supprimerZone") && (!subfield.matches(regex))){
throw new FileCheckingException(Constant.ERR_FILE_WRONGCONTENT);
throw new FileCheckingException(Constant.ERR_FILE_HEAD4TH);
}

if (("930$b").equals(subfield)) {
throw new FileCheckingException(Constant.ERR_FILE_WRONGCONTENT);
throw new FileCheckingException(Constant.ERR_FILE_4COLZONE + "930$b");
}
if (subfield.startsWith("955") || subfield.startsWith("956") || subfield.startsWith("957") || subfield.startsWith("959")) {
throw new FileCheckingException(Constant.ERR_FILE_WRONGCONTENT);
throw new FileCheckingException(Constant.ERR_FILE_4COLZONE + subfield.substring(0,3));
}
}

private void checkSubfieldCol4ZoneE(String subfield, String traitement) throws FileCheckingException {
if (subfield.substring(1).matches(regex)) {
throw new FileCheckingException(Constant.ERR_FILE_WRONGCONTENT);
throw new FileCheckingException(Constant.ERR_FILE_HEAD4TH);
}
//TODO : Revoir condition et ajouter TU parce que ça marche pas
if (traitement.equals("creerNouvelleZone") && ("E856").contains(subfield) || ("E702").contains(subfield) || ("E712").contains(subfield)){
throw new FileCheckingException(Constant.ERR_FILE_WRONGCONTENT);
throw new FileCheckingException(Constant.ERR_FILE_4COLZONE + subfield.substring(0, 4));
}
}

Expand All @@ -144,16 +144,17 @@ private void checkSubfieldCol4ZoneE(String subfield, String traitement) throws F
*/
private void checkBodyLine(String ligne, DemandeModif demandeModif) throws FileCheckingException {
if (ligne.length() < 13) {
throw new FileCheckingException(Constant.ERR_FILE_WRONGCONTENT);
throw new FileCheckingException(Constant.ERR_FILE_ERRLINE + ligneCourante
+ Constant.ERR_FILE_LINELENGTH);
}
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_WRONGCONTENT);
throw new FileCheckingException(Constant.ERR_FILE_ERRLINE + ligneCourante + Constant.ERR_FILE_LINELENGTH);
}
}

Expand All @@ -170,23 +171,23 @@ private void check4cols(String[] ligne, String traitement) throws FileCheckingEx
case "creerNouvelleZone":
case "ajoutSousZone":
if (ligne.length != 4) {
throw new FileCheckingException(Constant.ERR_FILE_WRONGCONTENT);
throw new FileCheckingException(Constant.ERR_FILE_ERRLINE + ligneCourante + Constant.ERR_FILE_4COLNONVIDE);
}
else {
if (ligne[3].contains("$")) {
throw new FileCheckingException(Constant.ERR_FILE_WRONGCONTENT);
throw new FileCheckingException(Constant.ERR_FILE_ERRLINE + ligneCourante + Constant.ERR_FILE_DOLLARFORBID);
}
}
break;
case "remplacerSousZone":
if (ligne.length != 4) {
throw new FileCheckingException(Constant.ERR_FILE_WRONGCONTENT);
throw new FileCheckingException(Constant.ERR_FILE_ERRLINE + ligneCourante + Constant.ERR_FILE_4COLNONVIDE);
}
break;
case "supprimerSousZone":
case "supprimerZone":
if (ligne.length != 3) {
throw new FileCheckingException(Constant.ERR_FILE_WRONGCONTENT);
throw new FileCheckingException(Constant.ERR_FILE_ERRLINE + ligneCourante + Constant.ERR_FILE_4COLVIDE);
}
break;
default:
Expand Down
Loading

0 comments on commit 6634cfc

Please sign in to comment.