Amélioration de la vérification node fichier et zip

This commit is contained in:
pablo rodriguez 2022-05-25 10:43:11 +02:00
parent 4009b01d22
commit 0328912712
9 changed files with 194 additions and 114 deletions

1
bin/.gitignore vendored
View File

@ -1 +1,2 @@
/app/
/MEPTL/

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -101,7 +101,8 @@ public class commandes {
public static int analyse_tolerance_rouge = 30;
public static int analyse_tolerance_vert = 30;
public static int analyse_tolerance_bleu = 30;
public static long analyse_size = 48000000;
public static String analyse_nameZip = "feedbackMoodle";
//** Variables pour l'interface du logiciel
public static String Titre = "analyseWriter";

View File

@ -138,9 +138,9 @@ public class meptl {
}
//***********************************************************************************
//** PREPARATION du node Sujet pour analyse -use file.xml ou -use file.xml -sujet **
//***********************************************************************************
//*********************************************************************************************
//** PREPARATION du node Sujet pour les commandes (-use file.xml) ou (-use file.xml -sujet) **
//*********************************************************************************************
if(commandes.analyse||commandes.ecritNodeAnalyse) {
commandes.sujet = chargementFichierAnalyse(commandes.nameSujet, true);
@ -251,9 +251,8 @@ public class meptl {
//** Analyse des fichiers student **
//**********************************
if(commandes.analyse||commandes.ecritNodeAnalyse) {
node init =verificationFichierAnalyse.InitialisationAvantAnalyse(commandes.sujet);
if(!Boolean.valueOf(init.getAttributs().get("erreur"))) {
if(!verificationFichierAnalyse.erreur) {
// Run.ecritureNodeEnXML(nodStudent, "fichier student","",false,""); //écriture du node nodStudent de l'étudiant
node ana = analyse(nodStudent, commandes.sujet, i, a);
@ -274,15 +273,15 @@ public class meptl {
}
if(commandes.zipfeedback) { // Dans une archive pour Moodle
try {
long size = 48000000; //valeur par défaut
String nameZip = "feedbackMoodle"; //nom zip par défaut
node zip = commandes.sujet.retourneFirstEnfantsByName("zip");
if(zip!=null) {
if(zip.getAttributs().get("size")!=null)size = Long.valueOf(zip.getAttributs().get("size"));
if(zip.getAttributs().get("name")!=null)nameZip = zip.getAttributs().get("name");
}
// long size = 48000000; //valeur par défaut
// String nameZip = "feedbackMoodle"; //nom zip par défaut
// node zip = commandes.sujet.retourneFirstEnfantsByName("zip");
// if(zip!=null) {
// if(zip.getAttributs().get("size")!=null)size = Long.valueOf(zip.getAttributs().get("size"));
// if(zip.getAttributs().get("name")!=null)nameZip = zip.getAttributs().get("name");
// }
//a.AddStreamToZip(feedbackForZip(ana, verif), retourneLeNomDuFeedback(a.getLectDossiers().getEC().getListeNomFichierFeedBack().get(i),ana, verif),size,nameZip);
a.AddStreamToZip(feedbacks.feedback(ana, verif, true), retourneLeNomDuFeedback(a.getLectDossiers().getEC().getListeNomFichierFeedBack().get(i),ana, verif),size,nameZip);
a.AddStreamToZip(feedbacks.feedback(ana, verif, true), retourneLeNomDuFeedback(a.getLectDossiers().getEC().getListeNomFichierFeedBack().get(i),ana, verif),commandes.analyse_size,commandes.analyse_nameZip);
} catch (ZipException e) {
e.printStackTrace();
} catch (IOException e) {
@ -1124,6 +1123,25 @@ public class meptl {
}
}
//********************************************
//** Charge pour la taille de l'archive ZIP **
//********************************************
if(commandes.sujet.containElementByName("zip")) {
node zip = commandes.sujet.retourneFirstEnfantsByName("zip");
if(zip.getAttributs().get("size")!=null) commandes.analyse_size = Long.valueOf(zip.getAttributs().get("size"));
if(zip.getAttributs().get("size")!=null) commandes.analyse_size = Long.valueOf(zip.getAttributs().get("size"));
}
//************************************
//** Charge du nom de l'archive ZIP **
//************************************
if(commandes.sujet.containElementByName("zip")) {
node zip = commandes.sujet.retourneFirstEnfantsByName("zip");
if(zip.getAttributs().get("nameZip")!=null) commandes.analyse_nameZip = zip.getAttributs().get("nameZip");
if(zip.getAttributs().get("nameZip")!=null) commandes.analyse_nameZip = zip.getAttributs().get("nameZip");
}
//***********************************************************************
//** chargement du node translation qui se trouve dans le node setting **
//***********************************************************************

View File

@ -17,8 +17,10 @@ import cXML.node;
*
*/
public class verificationFichierAnalyse {
public static boolean erreur = false;
public static StringBuilder messageErreur = new StringBuilder();
static node verifSujet = new node();
public verificationFichierAnalyse() throws CloneNotSupportedException{
@ -147,7 +149,7 @@ public class verificationFichierAnalyse {
if(!erreur) commandes.fichierAnalyseValide = true;
}
@ -157,19 +159,38 @@ public class verificationFichierAnalyse {
*/
private static void verificationNodeFichier(Dictionary<String, String> attribut) {
if(!commandes.console) System.out.println("Début de la vérification du node fichier.");
boolean erreurNomPremierNodeFichier=false;
boolean erreurManqueAttributEvaluerPremierNodeFichier=false;
boolean erreurValeurAttributEvaluerPremierNodeFichier=false;
boolean erreurPasNodesEnfantsAuPremierNodeFichier=false;
boolean erreurPasAttributMetaSujetAuPremierNodeFichier=false;
boolean erreurValeurVideAttributMetaSujetAuPremierNodeFichier=false;
boolean erreurValeurAttributProgressionNonConvertibleEnDouble=false;
boolean erreurValeurAttributNoteFromNonConvertibleEnDouble=false;
boolean erreurValeurAttributBaremeABCNonConvertibleEnLogique=false;
boolean erreurValeurAttributcontroleDateCreationNonConvertibleEnLogique=false;
boolean erreurValeurAttributpresenceMetaSujetConvertibleEnLogique=false;
boolean erreurValeurAttributcontrole_Initial_CreatorConvertibleEnLogique=false;
boolean erreurValeurAttributhistoriquePresentConvertibleEnLogique=false;
if(!commandes.console) System.out.println("Début de la vérification du node <fichier>.");
// le node fichier doit avoir l'attribut evaluer=true
if(attribut.get("evaluer")==null) {
messageErreur.append("\n**-** Erreur dans le fichier d'analyse le node \"fichier\".");
messageErreur.append("\n**-** Erreur dans le fichier d'analyse, dans le node <fichier>.");
messageErreur.append("\nLe node \"fichier\" doit contenir evaluer=\"true\".");
messageErreur.append("\nL'attribut \"evaluer\" a été supprimé.");
messageErreur.append("\n");
System.out.println(messageErreur.toString());
erreurManqueAttributEvaluerPremierNodeFichier = true;
erreur=true;
}else {
if(!attribut.get("evaluer").equalsIgnoreCase("true")) {
messageErreur.append("\n**-** Erreur dans le fichier d'analyse le node \"fichier\".");
messageErreur.append("\n**-** Erreur dans le fichier d'analyse, dans le node <fichier>.");
messageErreur.append("\nLe node \"fichier\" doit contenir evaluer=\"true\".");
messageErreur.append("\nLa valeur doit être true.");
messageErreur.append("\n");
@ -179,111 +200,148 @@ public class verificationFichierAnalyse {
}
// le node fichier doit contenir l'attribut metaSujet et une valeur autre que le point d'interrogation ou vide
// le node fichier doit contenir l'attribut metaSujet et une valeur non vide
if(attribut.get("metaSujet")==null) {
messageErreur.append("\n**-** Erreur dans le fichier d'analyse le node \"fichier\".");
messageErreur.append("\n**-** Erreur dans le fichier d'analyse, dans le node <fichier>.");
messageErreur.append("\nLe node \"fichier\" doit contenir l'attribut \"sujetMeta\".");
messageErreur.append("\nL'attribut \"sujetMeta\" a été supprimé.");
messageErreur.append("\nCet attribut doit contenir une valeur.");
messageErreur.append("\n");
System.out.println(messageErreur);
erreurPasAttributMetaSujetAuPremierNodeFichier=true;
erreur=true;
}
if(attribut.get("metaSujet")!=null)if(attribut.get("metaSujet").isEmpty() ) {
messageErreur.append("\n**-** Erreur dans le fichier d'analyse le node \"fichier\".");
messageErreur.append("\n**-** Erreur dans le fichier d'analyse, dans le node <fichier>.");
messageErreur.append("\nL'attribut \"sujetMeta\" doit contenir une valeur autre que vide.");
messageErreur.append("\nDans les propriétés personnalisées des fichiers ODF, vous pouvez ajouter la propriété \"Sujet\" et faire correspondre avec cette valeur.");
messageErreur.append("\nVoir la documentation d'analyseWriter.");
messageErreur.append("\n");
System.out.println(messageErreur.toString());
erreurValeurVideAttributMetaSujetAuPremierNodeFichier=true;
erreur=true;
}
}
/**
* Vérification du node sujet (premier node <b>fichier</b> et des paramètres.<br>
* <br>
* @param nodSujet
* @return
*/
public static node InitialisationAvantAnalyse(node nodSujet) {
node initSujet = new node();
initSujet.setNomElt("init");
boolean erreur=false;
boolean erreurNomPremierNodeFichier=false;
boolean erreurManqueAttributEvaluerPremierNodeFichier=false;
boolean erreurValeurAttributEvaluerPremierNodeFichier=false;
boolean erreurPasNodesEnfantsAuPremierNodeFichier=false;
boolean erreurPasAttributMetaSujetAuPremierNodeFichier=false;
boolean erreurValeurVideAttributMetaSujetAuPremierNodeFichier=false;
boolean erreurValeurAttributProgressionNonConvertibleEnDouble=false;
boolean erreurValeurAttributNoteFromNonConvertibleEnDouble=false;
if(!nodSujet.getNomElt().equals("fichier")) {
erreur=true;
erreurNomPremierNodeFichier = true;
}
if(nodSujet.getAttributs().get("evaluer")==null) {
erreur=true;
erreurManqueAttributEvaluerPremierNodeFichier = true;
}
if(nodSujet.getAttributs().get("evaluer")!=null) {
if(!nodSujet.getAttributs().get("evaluer").equals("true")) {
erreur=true;
erreurValeurAttributEvaluerPremierNodeFichier=true;
}
}
if(nodSujet.getNodes().isEmpty()) {
erreur=true;
erreurPasNodesEnfantsAuPremierNodeFichier=true;
}
if(nodSujet.getAttributs().get("metaSujet")==null) {
erreur=true;
erreurPasAttributMetaSujetAuPremierNodeFichier=true;
}
if(nodSujet.getAttributs().get("metaSujet")!=null) {
if(nodSujet.getAttributs().get("metaSujet").isEmpty()) {
erreur=true;
erreurValeurVideAttributMetaSujetAuPremierNodeFichier=true;
}
}
if(nodSujet.getAttributs().get("progression")!=null) {
String p = nodSujet.getAttributs().get("progression");
if(attribut.get("progression")!=null) {
String p = attribut.get("progression");
try {
Double.valueOf(p);
} catch (Exception e) {
messageErreur.append("\n**-** Erreur dans le fichier d'analyse, dans le node <fichier>.");
messageErreur.append("\nL'attribut \"progression\" n'a pas une valeur numérique.");
messageErreur.append("\nVoir la documentation d'analyseWriter.");
messageErreur.append("\n");
System.out.println(messageErreur.toString());
erreur=true;
erreurValeurAttributProgressionNonConvertibleEnDouble=true;
}
}
if(nodSujet.getAttributs().get("notefrom")!=null) {
String p = nodSujet.getAttributs().get("notefrom");
if(attribut.get("notefrom")!=null) {
String p = attribut.get("notefrom");
try {
Double.valueOf(p);
} catch (Exception e) {
messageErreur.append("\n**-** Erreur dans le fichier d'analyse, dans le node <fichier>.");
messageErreur.append("\nL'attribut \"noteFrom\" n'a pas une valeur numérique.");
messageErreur.append("\nVoir la documentation d'analyseWriter.");
messageErreur.append("\n");
System.out.println(messageErreur.toString());
erreur=true;
erreurValeurAttributNoteFromNonConvertibleEnDouble=true;
}
}
}
initSujet.getAttributs().put("erreur",String.valueOf(erreur));
initSujet.getAttributs().put("erreurNomPremierNodeFichier",String.valueOf(erreurNomPremierNodeFichier));
initSujet.getAttributs().put("erreurManqueAttributEvaluerPremierNodeFichier",String.valueOf(erreurManqueAttributEvaluerPremierNodeFichier));
initSujet.getAttributs().put("erreurValeurAttributEvaluerPremierNodeFichier",String.valueOf(erreurValeurAttributEvaluerPremierNodeFichier));
initSujet.getAttributs().put("erreurPasNodesEnfantsAuPremierNodeFichier",String.valueOf(erreurPasNodesEnfantsAuPremierNodeFichier));
initSujet.getAttributs().put("erreurPasAttributMetaSujetAuPremierNodeFichier",String.valueOf(erreurPasAttributMetaSujetAuPremierNodeFichier));
initSujet.getAttributs().put("erreurValeurVideAttributMetaSujetAuPremierNodeFichier",String.valueOf(erreurValeurVideAttributMetaSujetAuPremierNodeFichier));
initSujet.getAttributs().put("erreurValeurAttributProgressionNonConvertibleEnDouble",String.valueOf(erreurValeurAttributProgressionNonConvertibleEnDouble));
initSujet.getAttributs().put("erreurValeurAttributNoteFromNonConvertibleEnDouble",String.valueOf(erreurValeurAttributNoteFromNonConvertibleEnDouble));
if(attribut.get("baremeABC")!=null) {
String p = attribut.get("baremeABC");
if(!p.equalsIgnoreCase("true")||!p.equalsIgnoreCase("false")) {
messageErreur.append("\n**-** Erreur dans le fichier d'analyse, dans le node <fichier>.");
messageErreur.append("\nL'attribut \"baremeABC\" n'a pas une valeur logique.");
messageErreur.append("\nVoir la documentation d'analyseWriter.");
messageErreur.append("\n");
System.out.println(messageErreur.toString());
erreur=true;
erreurValeurAttributBaremeABCNonConvertibleEnLogique=true;
}
}
return initSujet;
}
if(attribut.get("controleDateCreation")!=null) {
String p = attribut.get("controleDateCreation");
if(!p.equalsIgnoreCase("true")||!p.equalsIgnoreCase("false")) {
messageErreur.append("\n**-** Erreur dans le fichier d'analyse, dans le node <fichier>.");
messageErreur.append("\nL'attribut \"controleDateCreation\" n'a pas une valeur logique.");
messageErreur.append("\nVoir la documentation d'analyseWriter.");
messageErreur.append("\n");
System.out.println(messageErreur.toString());
erreur=true;
erreurValeurAttributcontroleDateCreationNonConvertibleEnLogique=true;
}
}
if(attribut.get("presenceMetaSujet")!=null) {
String p = attribut.get("presenceMetaSujet");
if(!p.equalsIgnoreCase("true")||!p.equalsIgnoreCase("false")) {
messageErreur.append("\n**-** Erreur dans le fichier d'analyse, dans le node <fichier>.");
messageErreur.append("\nL'attribut \"presenceMetaSujet\" n'a pas une valeur logique.");
messageErreur.append("\nVoir la documentation d'analyseWriter.");
messageErreur.append("\n");
System.out.println(messageErreur.toString());
erreur=true;
erreurValeurAttributpresenceMetaSujetConvertibleEnLogique=true;
}
}
if(attribut.get("controle_Initial_Creator")!=null) {
String p = attribut.get("controle_Initial_Creator");
if(!p.equalsIgnoreCase("true")||!p.equalsIgnoreCase("false")) {
messageErreur.append("\n**-** Erreur dans le fichier d'analyse, dans le node <fichier>.");
messageErreur.append("\nL'attribut \"controle_Initial_Creator\" n'a pas une valeur logique.");
messageErreur.append("\nVoir la documentation d'analyseWriter.");
messageErreur.append("\n");
System.out.println(messageErreur.toString());
erreur=true;
erreurValeurAttributcontrole_Initial_CreatorConvertibleEnLogique=true;
}
}
if(attribut.get("historiquePresent")!=null) {
String p = attribut.get("historiquePresent");
if(!p.equalsIgnoreCase("true")||!p.equalsIgnoreCase("false")) {
messageErreur.append("\n**-** Erreur dans le fichier d'analyse, dans le node <fichier>.");
messageErreur.append("\nL'attribut \"historiquePresent\" n'a pas une valeur logique.");
messageErreur.append("\nVoir la documentation d'analyseWriter.");
messageErreur.append("\n");
System.out.println(messageErreur.toString());
erreur=true;
erreurValeurAttributhistoriquePresentConvertibleEnLogique=true;
}
}
verifSujet.getAttributs().put("erreur",String.valueOf(erreur));
verifSujet.getAttributs().put("erreurNomPremierNodeFichier",String.valueOf(erreurNomPremierNodeFichier));
verifSujet.getAttributs().put("erreurManqueAttributEvaluerPremierNodeFichier",String.valueOf(erreurManqueAttributEvaluerPremierNodeFichier));
verifSujet.getAttributs().put("erreurValeurAttributEvaluerPremierNodeFichier",String.valueOf(erreurValeurAttributEvaluerPremierNodeFichier));
verifSujet.getAttributs().put("erreurPasNodesEnfantsAuPremierNodeFichier",String.valueOf(erreurPasNodesEnfantsAuPremierNodeFichier));
verifSujet.getAttributs().put("erreurPasAttributMetaSujetAuPremierNodeFichier",String.valueOf(erreurPasAttributMetaSujetAuPremierNodeFichier));
verifSujet.getAttributs().put("erreurValeurVideAttributMetaSujetAuPremierNodeFichier",String.valueOf(erreurValeurVideAttributMetaSujetAuPremierNodeFichier));
verifSujet.getAttributs().put("erreurValeurAttributProgressionNonConvertibleEnDouble",String.valueOf(erreurValeurAttributProgressionNonConvertibleEnDouble));
verifSujet.getAttributs().put("erreurValeurAttributNoteFromNonConvertibleEnDouble",String.valueOf(erreurValeurAttributNoteFromNonConvertibleEnDouble));
verifSujet.getAttributs().put("erreurValeurAttributNoteFromNonConvertibleEnDouble",String.valueOf(erreurValeurAttributNoteFromNonConvertibleEnDouble));
verifSujet.getAttributs().put("erreurValeurAttributBaremeABCNonConvertibleEnLogique",String.valueOf(erreurValeurAttributBaremeABCNonConvertibleEnLogique));
verifSujet.getAttributs().put("erreurValeurAttributcontroleDateCreationNonConvertibleEnLogique",String.valueOf(erreurValeurAttributcontroleDateCreationNonConvertibleEnLogique));
verifSujet.getAttributs().put("erreurValeurAttributpresenceMetaSujetConvertibleEnLogique",String.valueOf(erreurValeurAttributpresenceMetaSujetConvertibleEnLogique));
verifSujet.getAttributs().put("erreurValeurAttributcontrole_Initial_CreatorConvertibleEnLogique",String.valueOf(erreurValeurAttributcontrole_Initial_CreatorConvertibleEnLogique));
verifSujet.getAttributs().put("erreurValeurAttributhistoriquePresentConvertibleEnLogique",String.valueOf(erreurValeurAttributhistoriquePresentConvertibleEnLogique));
}
/**
@ -411,43 +469,43 @@ public class verificationFichierAnalyse {
try {
size = Long.valueOf(zip.getAttributs().get("size"));
}catch (Exception e) {
System.out.println();
System.out.println("**-** Erreur dans le fichier d'analyse le node \"setting\".");
System.out.println("La taille du fichier doit être une valeur numérique.");
System.out.println();
messageErreur.append("\n**-** Erreur dans le fichier d'analyse, dans le node <setting>.");
messageErreur.append("\nLa taille du fichier doit être une valeur numérique.");
System.out.println(messageErreur.toString());
verifSujet.getAttributs().put("erreurTailleSize","true");
erreur=true;
}
if(size<1000000) {
System.out.println();
System.out.println("**-** Erreur dans le fichier d'analyse \"setting\".");
System.out.println("La taille de l'archive ZIP est trop faible (supérieure à 1 000 000).");
System.out.println("La taille doit être supérieure à 1Mo.");
System.out.println();
messageErreur.append("\n**-** Erreur dans le fichier d'analyse, dans le node <setting>.");
messageErreur.append("\nLa taille de l'archive ZIP est trop faible (supérieure à 1 000 000).");
System.out.println(messageErreur.toString());
verifSujet.getAttributs().put("erreurTailleSize","true");
erreur=true;
}
if(size>100000000) {
System.out.println();
System.out.println("**-** Erreur dans le fichier d'analyse \"setting\".");
System.out.println("La taille de l'archive ZIP est trop grande (inférieur à 100 000 000).");
System.out.println("La taille doit être inférieure à 100Mo.");
System.out.println();
messageErreur.append("\n**-** Erreur dans le fichier d'analyse, dans le node <setting>.");
messageErreur.append("\nLa taille de l'archive ZIP est trop grande (inférieur à 100 000 000).");
System.out.println(messageErreur.toString());
verifSujet.getAttributs().put("erreurTailleSize","true");
erreur=true;
}
}
if(zip.getAttributs().get("name") != null) {
String name = zip.getAttributs().get("name");
Pattern pt = Pattern.compile("[^a-zA-Z0-9]"); // avec les chiffres "[^a-zA-Z0-9]"
Matcher match= pt.matcher(name);
if(match.find()) {
System.out.println();
System.out.println("**-** Erreur dans le fichier d'analyse le node \"setting\".");
System.out.println("Le nom de l'archive ne doit pas contenir de carcatères spéciaux.");
System.out.println();
messageErreur.append("\n**-** Erreur dans le fichier d'analyse, dans le node <setting>.");
messageErreur.append("\nLe nom de l'archive ne doit pas contenir de caractères spéciaux.");
System.out.println(messageErreur.toString());
verifSujet.getAttributs().put("erreurNameArchive","true");
erreur=true;
}
}
}
if(setting.containElementByName("plagiarism")) {
node plagiarism = setting.retourneFirstEnfantsByName("plagiarism");
if(plagiarism.getAttributs().get("number_match") != null) {
@ -625,6 +683,8 @@ public class verificationFichierAnalyse {
}
/**
* Mise à jour du hash et du nom du fichier d'analyse.</br>
* @throws CloneNotSupportedException

View File

@ -294,15 +294,15 @@ public class evaluate extends JFrame {
}
if(commandes.zipfeedback) { // Dans une archive pour Moodle
try {
long size = 48000000; //valeur par défaut
String nameZip = "feedbackMoodle"; //nom zip par défaut
node zip = commandes.sujet.retourneFirstEnfantsByName("zip");
if(zip!=null) {
if(zip.getAttributs().get("size")!=null)size = Long.valueOf(zip.getAttributs().get("size"));
if(zip.getAttributs().get("name")!=null)nameZip = zip.getAttributs().get("name");
}
// long size = 48000000; //valeur par défaut
// String nameZip = "feedbackMoodle"; //nom zip par défaut
// node zip = commandes.sujet.retourneFirstEnfantsByName("zip");
// if(zip!=null) {
// if(zip.getAttributs().get("size")!=null)size = Long.valueOf(zip.getAttributs().get("size"));
// if(zip.getAttributs().get("name")!=null)nameZip = zip.getAttributs().get("name");
// }
//a.AddStreamToZip(feedbackForZip(ana, verif), retourneLeNomDuFeedback(a.getLectDossiers().getEC().getListeNomFichierFeedBack().get(i),ana, verif),size,nameZip);
a.AddStreamToZip(feedbacks.feedback(ana, verif, true), meptl.retourneLeNomDuFeedback(a.getLectDossiers().getEC().getListeNomFichierFeedBack().get(i),ana, verif),size,nameZip);
a.AddStreamToZip(feedbacks.feedback(ana, verif, true), meptl.retourneLeNomDuFeedback(a.getLectDossiers().getEC().getListeNomFichierFeedBack().get(i),ana, verif),commandes.analyse_size,commandes.analyse_nameZip);
} catch (ZipException e) {
e.printStackTrace();
} catch (IOException e) {