package MEPTL; import java.io.IOException; import java.util.Dictionary; import java.util.Enumeration; import java.util.regex.Matcher; import java.util.regex.Pattern; import cXML.Run; import cXML.node; /** * * @author pablo rodriguez * * Vérification du fichier d'analyse. * */ public class verificationFichierAnalyse { public static boolean erreur = false; public static StringBuilder messageErreur = new StringBuilder(); static node verifSujet = new node(); public verificationFichierAnalyse() throws CloneNotSupportedException{ if(!commandes.console) System.out.println("Début de la vérification."); if(commandes.sujet==null) { messageErreur.append("\n**-** Erreur, le fichier d'analyse est null.\n"); System.out.println(messageErreur.toString()); erreur=true; clotureWithErrorInanalyzeFile(); } //** Vérification des attributs du node fichier if(commandes.sujet.getAttributs().size()>0) { verificationNodeFichier(commandes.sujet.getAttributs()); }else { messageErreur.append("\n**-** Erreur, le node fichier n'a pas d'attribut.\n"); System.out.println(messageErreur.toString()); erreur=true; } //** Verification du hash et du nom du fichier d'analyse commandes.hash = String.valueOf(Run.HashNode(commandes.sujet,0)); if(commandes.sujet.getAttributs().get("analysis_filename")!=null) { if(!commandes.sujet.getAttributs().get("analysis_filename").equals(commandes.nameSujet)) { commandes.MAJnameAnalysisFile=true; } } if(commandes.sujet.getAttributs().get("hash")==null) { commandes.MAJFichierAnalyse =true; }else { if(!commandes.sujet.getAttributs().get("hash").equals(commandes.hash)) { commandes.MAJFichierAnalyse=true; } } if(commandes.MAJFichierAnalyse||commandes.MAJnameAnalysisFile) { messagMiseAJourFichierAnalyse(commandes.hash); } //** Vérification des attributs du node style:paragraph et vérification style de paragraphe par défaut if(commandes.sujet.retourneEnfantsByNameExist("style:paragraph")) { verificationNodeEvaluate(commandes.sujet.retourneFirstEnfantsByName("style:paragraph").getAttributs(),"style:paragraph"); if(commandes.sujet.retourneFirstEnfantsByName("style:paragraph").retourneEnfantsByNameExist("style:default-style")) { verifcationStyleParagraphDefaut(commandes.sujet.retourneFirstEnfantsByName("style:paragraph").retourneFirstEnfantsByName("style:default-style")); } } //Vérification des attributs du node office:meta if(commandes.sujet.retourneEnfantsByNameExist("office:meta")) { verificationNodeEvaluate(commandes.sujet.retourneFirstEnfantsByName("office:meta").getAttributs(),"office:meta"); verifLongContenuNode(commandes.sujet.retourneFirstEnfantsByName("office:meta")); } //Vérification des attributs du node style:page if(commandes.sujet.retourneEnfantsByNameExist("style:page")) { verificationNodeEvaluate(commandes.sujet.retourneFirstEnfantsByName("style:page").getAttributs(),"style:page"); verifLongContenuNode(commandes.sujet.retourneFirstEnfantsByName("style:page")); } //Vérification des attributs du node sequences if(commandes.sujet.retourneEnfantsByNameExist("sequences")) { verificationNodeEvaluate(commandes.sujet.retourneFirstEnfantsByName("sequences").getAttributs(),"sequences"); verifLongContenuNode(commandes.sujet.retourneFirstEnfantsByName("sequences")); } //Vérification des attributs du node numerotationchapitre if(commandes.sujet.retourneEnfantsByNameExist("numerotationchapitre")) { verificationNodeEvaluate(commandes.sujet.retourneFirstEnfantsByName("numerotationchapitre").getAttributs(),"numerotationchapitre"); verifLongContenuNode(commandes.sujet.retourneFirstEnfantsByName("numerotationchapitre")); } //Vérification des attributs du node frames if(commandes.sujet.retourneEnfantsByNameExist("frames")) { verificationNodeEvaluate(commandes.sujet.retourneFirstEnfantsByName("frames").getAttributs(),"frames"); verifLongContenuNode(commandes.sujet.retourneFirstEnfantsByName("frames")); } //Vérification des attributs du node sections if(commandes.sujet.retourneEnfantsByNameExist("sections")) { verificationNodeEvaluate(commandes.sujet.retourneFirstEnfantsByName("sections").getAttributs(),"sections"); verifLongContenuNode(commandes.sujet.retourneFirstEnfantsByName("sections")); } //Vérification des attributs du node sections if(commandes.sujet.retourneEnfantsByNameExist("tableaux")) { verificationNodeEvaluate(commandes.sujet.retourneFirstEnfantsByName("tableaux").getAttributs(),"tableaux"); verifLongContenuNode(commandes.sujet.retourneFirstEnfantsByName("tableaux")); } //Vérification des attributs du node biblio if(commandes.sujet.retourneEnfantsByNameExist("biblio")) { verificationNodeEvaluate(commandes.sujet.retourneFirstEnfantsByName("biblio").getAttributs(),"biblio"); verifLongContenuNode(commandes.sujet.retourneFirstEnfantsByName("biblio")); } //Vérification des attributs du node tablematieres if(commandes.sujet.retourneEnfantsByNameExist("tablematieres")) { verificationNodeEvaluate(commandes.sujet.retourneFirstEnfantsByName("tablematieres").getAttributs(),"tablematieres"); verifLongContenuNode(commandes.sujet.retourneFirstEnfantsByName("tablematieres")); } //Vérification des attributs du node tableillustrations if(commandes.sujet.retourneEnfantsByNameExist("tableillustrations")) { verificationNodeEvaluate(commandes.sujet.retourneFirstEnfantsByName("tableillustrations").getAttributs(),"tableillustrations"); verifLongContenuNode(commandes.sujet.retourneFirstEnfantsByName("tableillustrations")); } //Vérification des attributs du node structurepage if(commandes.sujet.retourneEnfantsByNameExist("structurepage")) { verificationNodeEvaluate(commandes.sujet.retourneFirstEnfantsByName("structurepage").getAttributs(),"structurepage"); verifLongContenuNode(commandes.sujet.retourneFirstEnfantsByName("structurepage")); } //vérification du node structure if(commandes.sujet.retourneEnfantsByNameExist("structurepage")) { verifNodeAutoriserDansStructure(commandes.sujet.retourneFirstEnfantsByName("structurepage")); } //vérification du node setting if(commandes.sujet.retourneEnfantsByNameExist("setting")) { verificationNodeSetting(commandes.sujet.retourneFirstEnfantsByName("setting")); } // Mise à jour de la variable fichierAnalyseValide if(!erreur) { commandes.fichierAnalyseValide = true; }else { commandes.fichierAnalyseValide = false; } } /** * Vérification des attribut du node fichier. * @param attribut */ private static void verificationNodeFichier(Dictionary attribut) { 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 ."); // le node fichier doit avoir l'attribut evaluer=true if(attribut.get("evaluer")==null) { messageErreur.append("\n**-** Erreur dans le fichier d'analyse, dans le node ."); 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, dans le node ."); messageErreur.append("\nLe node \"fichier\" doit contenir evaluer=\"true\"."); messageErreur.append("\nLa valeur doit être true."); messageErreur.append("\n"); System.out.println(messageErreur.toString()); erreur=true; } } // 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, dans le node ."); 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, dans le node ."); 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; } 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 ."); 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(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 ."); 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; } } 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 ."); 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; } } 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 ."); 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 ."); 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 ."); 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 ."); 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)); } /** * Vérification de la présence de l'attribut addmenu=true lorsque l'attribut evaluer=true.
* Uniquement pour les nodes principaux.
*
* @param attribut * @param nameNode */ private static void verificationNodeEvaluate(Dictionary attribut, String nameNode) { if(attribut.get("evaluer")!=null) { if(attribut.get("evaluer").equals("true")) { if(attribut.get("addmenu")!=null) { if(!attribut.get("addmenu").equals("true")) { System.out.println(); System.out.println("**-** Erreur dans le fichier d'analyse. Dans le node \""+ nameNode +"\"."); System.out.println("Le node principal \"" + nameNode +"\" doit contenir l'attribut \"addmenu=true\"."); System.out.println("Pour cette version, Il est necessaire de créer un lien de menu du node principal,(tableau de syntèse des feedback)."); System.out.println(); erreur=true; } }else { System.out.println(); System.out.println("**-** Erreur dans le fichier d'analyse. Dans le node \""+ nameNode +"\"."); System.out.println("Le node principal \"" + nameNode +"\" doit contenir l'attribut \"addmenu=true\". Cet attribut a été supprimé."); System.out.println("Pour cette version, Il est necessaire de créer un lien de menu du node principal,(tableau de syntèse des feedback)."); System.out.println(); erreur=true; } } } } /** * Vérification des nodes autorisé dans la structure. * @param structure * @throws CloneNotSupportedException */ private static void verifNodeAutoriserDansStructure(node structure) throws CloneNotSupportedException { String nom = structure.getNomElt(); if(nom.equals("text:p") || nom.equals("text:h")||nom.equals("text:database-display")||nom.equals("table:table-cell") ||nom.equals("text:section")||nom.equals("draw:frame")||nom.equals("text:user-defined")||nom.equals("table:table-row") ||nom.equals("table:table-row")||nom.equals("structurepage")||nom.equals("page")||nom.contains("text:table-of-content") ||nom.contains("text:illustration")||nom.equals("text:note")||nom.equals("text:conditional-text")||nom.equals("text:date") ||nom.contains("style:graphic-properties")||nom.isEmpty()) { }else { Enumeration key = structure.getAttributs().keys(); while(key.hasMoreElements()) { String k = key.nextElement(); if(structure.getAttributs().get(k).contains("‽")) { System.out.println(); System.out.println("**-** Erreur dans le fichier d'analyse le node \"structurepage\"."); System.out.println("Le node " + nom + " ne peut pas contenir des attributs évalués."); System.out.println("Le node " + nom + " peut contenir l'attribut \"evaluer=true\" ce qui permettra l'évaluation des nodes enfants mais aucun attribut de ce node sera évalué."); System.out.println(); erreur= true; } } } //verification des nodes autorisés dans la structure for(int i = 0 ; i < structure.getNodes().size(); i++) { nom = structure.getNodes().get(i).getNomElt(); if(nom.equals("text:p") || nom.equals("text:h")||nom.equals("text:database-display")||nom.equals("table:table-cell") ||nom.equals("text:section")||nom.equals("draw:frame")||nom.equals("text:user-defined")||nom.equals("table:table-row") ||nom.equals("table:table-row")||nom.equals("structurepage")||nom.equals("page")||nom.contains("text:table-of-content") ||nom.contains("text:illustration")||nom.equals("text:note")||nom.equals("text:conditional-text") ||nom.contains("style:graphic-properties")||nom.equals("text:date")||nom.isEmpty()) { }else { Enumeration key = structure.getNodes().get(i).getAttributs().keys(); while(key.hasMoreElements()) { String k = key.nextElement(); if(structure.getNodes().get(i).getAttributs().get(k).contains("‽")) { System.out.println(); System.out.println("**-** Erreur dans le fichier d'analyse le node \"structurepage\"."); System.out.println("Le node " + nom + " ne peut pas contenir des attributs évalués."); System.out.println("Le node " + nom + " peut contenir l'attribut \"evaluer=true\" ce qui permettra l'évaluation des nodes enfants mais aucun attribut de ce node sera évalué."); System.out.println(); erreur= true; } } } verifNodeAutoriserDansStructure(structure.getNodes().get(i)); } } /** * Evaluation du node setting * @param attribut * @param nameNode */ private static void verificationNodeSetting(node setting) { if(setting.getAttributs().get("culture") != null) { if(!setting.getAttributs().get("culture").equals("FR")) { System.out.println(); System.out.println("**-** Avertissement dans le fichier d'analyse le node \"setting\"."); System.out.println("La culture ne peutr pas être différent de \"FR\"."); System.out.println(); } } if(setting.containElementByName("csv")) { node csv = setting.retourneFirstEnfantsByName("csv"); if(csv.getAttributs().get("encoding") != null) { if(!csv.getAttributs().get("encoding").equals("UTF-8") && !csv.getAttributs().get("encoding").equals("US-ASCII") && !csv.getAttributs().get("encoding").equals("ISO-8859-1") && !csv.getAttributs().get("encoding").equals("UTF-16BE") && !csv.getAttributs().get("encoding").equals("UTF-16LE") && !csv.getAttributs().get("encoding").equals("UTF-16")) { System.out.println(); System.out.println("**-** WARNING in analysis file at node \"setting\"."); System.out.println("The encoding cannot be "+ csv.getAttributs().get("encoding") +"in csv node."); System.out.println(); } } } if(setting.containElementByName("zip")) { node zip = setting.retourneFirstEnfantsByName("zip"); if(zip.getAttributs().get("size") != null) { Long size = (long) 0; try { size = Long.valueOf(zip.getAttributs().get("size")); }catch (Exception e) { messageErreur.append("\n**-** Erreur dans le fichier d'analyse, dans le node ."); 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) { messageErreur.append("\n**-** Erreur dans le fichier d'analyse, dans le node ."); 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) { messageErreur.append("\n**-** Erreur dans le fichier d'analyse, dans le node ."); 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()) { messageErreur.append("\n**-** Erreur dans le fichier d'analyse, dans le node ."); 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) { int number_match = -1; try { number_match = Integer.valueOf(plagiarism.getAttributs().get("number_match")); }catch (Exception e) { System.out.println(); System.out.println("**-** Erreur dans le fichier d'analyse le node \"setting\"."); System.out.println("Le nombre de correspondance \"number_match\" doit être une valeur numérique."); System.out.println(); erreur=true; } if(number_match<0) { System.out.println(); System.out.println("**-** Erreur dans le fichier d'analyse le node \"setting\"."); System.out.println("Le nombre de correspondance \"number_match\" doit être unevaleur positive."); System.out.println(); erreur=true; } } if(plagiarism.getAttributs().get("mini_number_modification") != null) { int mini_number_modification = -1; try { mini_number_modification = Integer.valueOf(plagiarism.getAttributs().get("mini_number_modification")); }catch (Exception e) { System.out.println(); System.out.println("**-** Erreur dans le fichier d'analyse le node \"setting\"."); System.out.println("Le nombre minimum de modification \"mini_number_modification\" doit être une valeur numérique."); System.out.println(); erreur=true; } if(mini_number_modification<-1) { System.out.println(); System.out.println("**-** Erreur dans le fichier d'analyse le node \"setting\"."); System.out.println("Le nombre minimum de modification \"mini_number_modification\" doit être une valeur positive."); System.out.println(); erreur=true; } } if(plagiarism.getAttributs().get("nombres_modifications_simultané_maxi") != null) { int nombres_modifications_simultané_maxi = -1; try { nombres_modifications_simultané_maxi = Integer.valueOf(plagiarism.getAttributs().get("nombres_modifications_simultané_maxi")); }catch (Exception e) { System.out.println(); System.out.println("**-** Erreur dans le fichier d'analyse le node \"setting\"."); System.out.println("Le nombre de modifications simultanées \"nombres_modifications_simultané_maxi\" doit être une valeur numérique."); System.out.println(); erreur=true; } if(nombres_modifications_simultané_maxi<0) { System.out.println(); System.out.println("**-** Erreur dans le fichier d'analyse le node \"setting\"."); System.out.println("Le nombre de modifications simultanées \"nombres_modifications_simultané_maxi\" doit être une valeur positive."); System.out.println(); erreur=true; } } } if(setting.containElementByName("text:similarity")) { node similarity = setting.retourneFirstEnfantsByName("text:similarity"); if(similarity.getAttributs().get("tolerance_characters")!=null) { int tolerance_characters = -1; try { tolerance_characters = Integer.valueOf(similarity.getAttributs().get("tolerance_characters")); }catch (Exception e) { System.out.println(); System.out.println("**-** Erreur dans le fichier d'analyse le node \"setting\"."); System.out.println("La tolérance de catactère \"tolerance_characters\" n'est pas un entier."); System.out.println(); erreur=true; } if(tolerance_characters<0) { System.out.println(); System.out.println("**-** Erreur dans le fichier d'analyse le node \"setting\"."); System.out.println("La tolérance de catactère \"tolerance_characters\" doit être une valeur positive."); System.out.println(); erreur=true; } } if(similarity.getAttributs().get("tolerance_text")!=null) { double tolerance_text = 0.0; try { tolerance_text = Double.valueOf(similarity.getAttributs().get("tolerance_text")); }catch (Exception e) { System.out.println(); System.out.println("**-** Erreur dans le fichier d'analyse le node \"setting\"."); System.out.println("La tolérance sur le texte (similitude) \"tolerance_text\" doit être un numérique compris entre 0.01 et 0.99."); System.out.println(); erreur=true; } if(tolerance_text<0 || tolerance_text>1) { System.out.println(); System.out.println("**-** Erreur dans le fichier d'analyse le node \"setting\"."); System.out.println("La tolérance sur le texte (similitude) \"tolerance_text\" doit être un numérique compris entre 0.01 et 0.99."); System.out.println(); erreur=true; } } } } /** * Avertissement sur le style de paragraphe par défaut.
* Ne doit pas contenir l'attribut evaleur=true. * @param styleParagraphDefault */ private static void verifcationStyleParagraphDefaut(node styleParagraphDefault) { if(styleParagraphDefault.getAttributs().get("evaluer")!=null) { if(styleParagraphDefault.getAttributs().get("evaluer").equals("true")) { System.out.println(); System.out.println("**-** AVERTISSEMENT dans le fichier d'analyse, le node \"style:default-style\"."); System.out.println("Le node \"style:default-style\" ne doit pas contenir l'attribut \"evaluer=true\"."); System.out.println("Les valeurs par défaut dans les styles de paragraphe (les nodes \"style:style\") ont été ajouté."); System.out.println("Lisez dans la documentation, les caractéristique du node principal \"style:paragraph\"."); System.out.println(); } } } /** * Le contenu d'un node doit être supérieur à 3 caractères pour qu'il puisse être évalué. * @param nod */ private static void verifLongContenuNode(node nod) { if( nod.getContenu().contains("‽") ) { if(nod.getAttributs().get("evaluer")!=null) { if(nod.getAttributs().get("evaluer").equalsIgnoreCase("true")) { if( outils.NetTexte(nod.getContenu().get(0)).length() <=3 ) { System.out.println(); System.out.println("**-** ERREUR dans le fichier d'analyse, le node \"" + nod.getNomElt() + "\"."); System.out.println("Le contenu du node est : " + nod.getContenu()); System.out.println("Le contenu du node doit avoir plus de 3 caractères pour qu'il puisse être évalué."); System.out.println(); erreur=true; } } } } if( nod.getAttributs().get("allContent")!=null && nod.getAttributs().get("evaluer")!=null ) { if(nod.getAttributs().get("evaluer").equalsIgnoreCase("true")) { String A = nod.getAttributs().get("allContent"); Pattern pt = Pattern.compile("[1-9]$|[1-9][0-9]$"); Matcher match= pt.matcher(A); if(match.find()) { if(nod.retourneLesContenusEnfants("").contains("‽")){ System.out.println(); System.out.println("**-** ERREUR dans le fichier d'analyse, le node \"" + nod.getNomElt() + "\"."); System.out.println("Le node possède l'attribut allContent=\"" + nod.getAttributs().get("allContent")+"\""); System.out.println("Et un des nodes enfants possède un contenu évalué directement par l'évaluateur ‽"); System.out.println(); erreur=true; } } } } for(int i = 0 ; i < nod.getNodes().size();i++) { verifLongContenuNode(nod.getNodes().get(i)); } } /** * Mise à jour du hash et du nom du fichier d'analyse.
* @throws CloneNotSupportedException * @throws IOException */ public static void MiseAJourFichierAnalyse() throws CloneNotSupportedException, IOException { node nodeCalculHash = meptl.chargementFichierAnalyse(commandes.nameSujet, false); commandes.hash = String.valueOf(Run.HashNode(nodeCalculHash,0)); boolean maj =false; if(nodeCalculHash.getAttributs().get("hash")==null) { maj=true; }else { if(!nodeCalculHash.getAttributs().get("hash").equals(commandes.hash)) { maj=true; } } if(nodeCalculHash.getAttributs().get("analysis_filename")==null) { maj=true; }else { if(!nodeCalculHash.getAttributs().get("analysis_filename").equals(commandes.nameSujet)) { maj=true; } } if(maj) { int nbespace = "───────────────────────────┐".length()-commandes.hash.length(); if (nbespace<0) nbespace=1; int nbespace2 = "───────────────────────────────┐".length()-commandes.nameSujet.length(); if (nbespace2<0) nbespace2=1; System.out.println("\t\t┌────────────────────────────────────────────────────────────────────┐"); System.out.println("\t\t│ Le hash du code de l'évaluation ou le nom du fichier d'analyse │"); System.out.println("\t\t│ a été mise à jour dans le fichier d'analyse. │"); System.out.println("\t\t│ │"); System.out.println("\t\t│ Le hash du code de l'évaluation est : " + commandes.hash + new String(new char[nbespace]).replace("\0", " ") +"│" ); System.out.println("\t\t│ Le nom du fichier d'analyse est : " + commandes.nameSujet + new String(new char[nbespace2]).replace("\0", " ") +"│" ); System.out.println("\t\t│ │"); System.out.println("\t\t└────────────────────────────────────────────────────────────────────┘"); System.out.println(); nodeCalculHash.getAttributs().put("hash", commandes.hash); nodeCalculHash.getAttributs().put("analysis_filename", commandes.nameSujet); Run.ecritureNodeEnXML(nodeCalculHash,commandes.nameSujet.substring(0, commandes.nameSujet.lastIndexOf(".")),commandes.pathDestination,false,"Sujet"); }else { System.out.println("\t\t┌─────────────────────────────────────────────────────┐"); System.out.println("\t\t│ Vérification du hash et du nom du fichier correct. │"); System.out.println("\t\t└─────────────────────────────────────────────────────┘"); System.out.println(); } //** bye bye analyseWriter commandes.clotureApplication(); } /** * Permet l'écriture du fichier sujet.xml sans les nodes non évaluer. * @throws CloneNotSupportedException * @throws IOException */ static public void ecrisLeFichierSujetXML() throws CloneNotSupportedException, IOException { node nodeSujet = meptl.chargementFichierAnalyse(commandes.nameSujet, true); nodeSujet.getAttributs().put("hash", String.valueOf(Run.HashNode(nodeSujet, 0))); nodeSujet.getAttributs().put("analysis_filename", "sujet.xml"); Run.ecritureNodeEnXML(nodeSujet, "sujet","",false, "Sujet"); // ecriture du node sujet. Uniquement les nodes évalués. System.out.println("\t\t┌─────────────────────────────────────────────────────────────────────┐"); System.out.println("\t\t│ Un nouveau fichier \"sujet.xml\" a été créé dans le dossier courant. │"); System.out.println("\t\t└─────────────────────────────────────────────────────────────────────┘"); System.out.println(); //** bye bye analyseWriter commandes.clotureApplication(); } static private void messagMiseAJourFichierAnalyse(String hash) { int nbespace = "───────────────────────────┐".length()-hash.length(); if (nbespace<0) nbespace=1; int nbespace2 = "───────────────────────────────┐".length()-commandes.nameSujet.length(); if (nbespace2<0) nbespace2=1; System.out.println("\t\t┌────────────────────────────────────────────────────────────────────┐"); System.out.println("\t\t│ A la fin de l'évaluation. │"); System.out.println("\t\t│ Il y aura une mise à jour du fichier d'analyse. │"); System.out.println("\t\t│ │"); System.out.println("\t\t│ Le hash du code de l'évaluation est : " + hash + new String(new char[nbespace]).replace("\0", " ") +"│" ); System.out.println("\t\t│ Le nom du fichier d'analyse est : " + commandes.nameSujet + new String(new char[nbespace2]).replace("\0", " ") +"│" ); System.out.println("\t\t│ │"); System.out.println("\t\t└────────────────────────────────────────────────────────────────────┘"); System.out.println(); } static public void messagMiseAJourFichierAnalyseAprèsAnalyse() { int nbespace = "───────────────────────────┐".length()-commandes.hash.length(); if (nbespace<0) nbespace=1; int nbespace2 = "───────────────────────────────┐".length()-commandes.hash.length(); if (nbespace2<0) nbespace2=1; System.out.println("\t\t┌────────────────────────────────────────────────────────────────────┐"); System.out.println("\t\t│ Mise à jour du fichier d'analyse │"); System.out.println("\t\t│ │"); System.out.println("\t\t│ Le hash du code de l'évaluation est : " + commandes.hash + new String(new char[nbespace]).replace("\0", " ") +"│" ); System.out.println("\t\t│ Le nom du fichier d'analyse est : " + commandes.nameSujet + new String(new char[nbespace2]).replace("\0", " ") +"│" ); System.out.println("\t\t│ │"); System.out.println("\t\t└────────────────────────────────────────────────────────────────────┘"); System.out.println(); } /** * Clôture lorsqu'il y a une erreur dans le fichier d'analyse */ public static void clotureWithErrorInanalyzeFile() { System.out.println(); System.out.println("\t\t┌───────────────────────────────────────────────────────────┐"); System.out.println("\t\t│ Vous avez commis une erreur dans le fichier d'analyse. │"); System.out.println("\t\t│ │"); System.out.println("\t\t│ Vous devez rechercher l'erreur dans le fichier │"); System.out.println("\t\t│ d'analyse. Lisez les informations au-dessus. │"); System.out.println("\t\t│ │"); System.out.println("\t\t│ (')_(') │"); System.out.println("\t\t│ ( `.° ) │"); System.out.println("\t\t│ (\")__(\") .. à bientôt, analyseWriter. │"); System.out.println("\t\t└───────────────────────────────────────────────────────────┘"); System.out.println(); if(commandes.console) System.exit(0); } }