diff --git a/ana.xml b/ana.xml index 4d36758..19018aa 100644 --- a/ana.xml +++ b/ana.xml @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/base_evaluations_analyseCalc.xml b/base_evaluations_analyseCalc.xml index 174982f..0289804 100644 --- a/base_evaluations_analyseCalc.xml +++ b/base_evaluations_analyseCalc.xml @@ -1 +1 @@ - EJ - ???Page 1(???)???, 00/00/000000:00:00Page 1/ 99 EJ - ???Page 1(???)???, 00/00/000000:00:00Page 1/ 99 \ No newline at end of file + EJ - ???Page 1(???)???, 00/00/000000:00:00Page 1/ 99 \ No newline at end of file diff --git a/bin/AnalyseCalc/Classeur2$feuille$colonne.class b/bin/AnalyseCalc/Classeur2$feuille$colonne.class index 1eb2e1d..0ee0507 100644 Binary files a/bin/AnalyseCalc/Classeur2$feuille$colonne.class and b/bin/AnalyseCalc/Classeur2$feuille$colonne.class differ diff --git a/bin/AnalyseCalc/Classeur2$feuille$graphic.class b/bin/AnalyseCalc/Classeur2$feuille$graphic.class index b1b872b..1154791 100644 Binary files a/bin/AnalyseCalc/Classeur2$feuille$graphic.class and b/bin/AnalyseCalc/Classeur2$feuille$graphic.class differ diff --git a/bin/AnalyseCalc/Classeur2$feuille$ligne$cellule$validation.class b/bin/AnalyseCalc/Classeur2$feuille$ligne$cellule$validation.class index 40d10ae..5f23707 100644 Binary files a/bin/AnalyseCalc/Classeur2$feuille$ligne$cellule$validation.class and b/bin/AnalyseCalc/Classeur2$feuille$ligne$cellule$validation.class differ diff --git a/bin/AnalyseCalc/Classeur2$feuille$ligne$cellule.class b/bin/AnalyseCalc/Classeur2$feuille$ligne$cellule.class index d8a811c..b4098df 100644 Binary files a/bin/AnalyseCalc/Classeur2$feuille$ligne$cellule.class and b/bin/AnalyseCalc/Classeur2$feuille$ligne$cellule.class differ diff --git a/bin/AnalyseCalc/Classeur2$feuille$ligne.class b/bin/AnalyseCalc/Classeur2$feuille$ligne.class index ba1c870..2282483 100644 Binary files a/bin/AnalyseCalc/Classeur2$feuille$ligne.class and b/bin/AnalyseCalc/Classeur2$feuille$ligne.class differ diff --git a/bin/AnalyseCalc/Classeur2$feuille.class b/bin/AnalyseCalc/Classeur2$feuille.class index c39ef16..3c6be0d 100644 Binary files a/bin/AnalyseCalc/Classeur2$feuille.class and b/bin/AnalyseCalc/Classeur2$feuille.class differ diff --git a/bin/AnalyseCalc/Classeur2.class b/bin/AnalyseCalc/Classeur2.class index a1a0cc3..625ee79 100644 Binary files a/bin/AnalyseCalc/Classeur2.class and b/bin/AnalyseCalc/Classeur2.class differ diff --git a/bin/actions/actAttribut.class b/bin/actions/actAttribut.class index b391244..8b6fe2c 100644 Binary files a/bin/actions/actAttribut.class and b/bin/actions/actAttribut.class differ diff --git a/bin/calc/commandes.class b/bin/calc/commandes.class index 08f1ece..8da84df 100644 Binary files a/bin/calc/commandes.class and b/bin/calc/commandes.class differ diff --git a/bin/outils/outils.class b/bin/outils/outils.class index aaa34e3..3ccfba3 100644 Binary files a/bin/outils/outils.class and b/bin/outils/outils.class differ diff --git a/nodStudent.xml b/nodStudent.xml index 729a21a..7223baf 100644 --- a/nodStudent.xml +++ b/nodStudent.xml @@ -1 +1 @@ - EJ - - ???Page 1(???)???, 00/00/000000:00:00Page 1/ 99 \ No newline at end of file + EJ - EJ???Page 1(???)???, 00/00/000000:00:00Page 1/ 99 \ No newline at end of file diff --git a/src/AnalyseCalc/Classeur2.java b/src/AnalyseCalc/Classeur2.java index 146d697..7362579 100644 --- a/src/AnalyseCalc/Classeur2.java +++ b/src/AnalyseCalc/Classeur2.java @@ -701,6 +701,7 @@ public class Classeur2 { //lignes chargement sujet nods= fe.retourneAllEnfants("ligne"); for(int i=0 ; i < nods.size();i++) { + if(i>commandes.analysis_nbr_Ligne_maxi) break; lignes.put(i, new ligne(nods.get(i), nods.get(i).getAttributs().get("RefLigne"))); } @@ -1224,8 +1225,6 @@ public class Classeur2 { private TreeMap series = new TreeMap(); - - public graphic(node nodeGraphic ) { //chargement sujet if(nodeGraphic.getAttributs().get("nomObjet")!=null) nomObjet = nodeGraphic.getAttributs().get("nomObjet"); @@ -1427,9 +1426,7 @@ public class Classeur2 { } } - /******** - * - */ + //** Uniquement pour le chargement ** public void ajouteProperties(node nodeGraphic) { node b = nodeGraphic.retourneFirstEnfant("chart:chart"); diff --git a/src/actions/actAttribut.java b/src/actions/actAttribut.java index d09b445..28eed91 100644 --- a/src/actions/actAttribut.java +++ b/src/actions/actAttribut.java @@ -45,10 +45,10 @@ public class actAttribut extends AbstractAction{ if(nod.getLevel()>1 && !nod.getAllNameParents().contains("settings")) { new attributs(nod,fenetres.create.getTextNodeSelect()); }else { - JOptionPane.showMessageDialog(null, "Vous ne pouvez pas modifier directement les attributs de ce nodeAC." ); + JOptionPane.showMessageDialog(null, "Vous ne pouvez pas modifier directement les attributs de ce node." ); } }else { - JOptionPane.showMessageDialog(null, "Ce nodeAC ne contient pas d'attribut de Calc."); + JOptionPane.showMessageDialog(null, "Ce node ne contient pas d'attribut de Calc."); } } diff --git a/src/calc/commandes.java b/src/calc/commandes.java index f027c2f..15f0927 100644 --- a/src/calc/commandes.java +++ b/src/calc/commandes.java @@ -160,6 +160,7 @@ public class commandes { public static boolean analyse_controleDateModificationMini = false; public static double analyse_notefrom=20; public static Date analyse_modificationDateMini = null; + public static int analysis_nbr_Ligne_maxi = 100; @@ -210,10 +211,10 @@ public class commandes { analyse_controleDateCreation=false; analyse_controle_Initial_Creator=false; analyse_baremeABC=false; - analyse_progression=1; - analyse_bareme=20; + analyse_progression=1; + analyse_bareme=20; analyse_tolerance_characters = 5; - analyse_tolerance_text = 0.79; + analyse_tolerance_text = 0.79; analyse_number_match = 2; analyse_mini_number_modification = 0; analyse_nombres_modifications_simultané_maxi = 100; @@ -226,6 +227,7 @@ public class commandes { analysis_filename = ""; analysis_nbr_feuilles = 0; analysis_producteur = ""; + analysis_nbr_Ligne_maxi = 100; //** Variables pour l'interface du logiciel diff --git a/src/evaluer/crearNodeAna.java b/src/evaluer/crearNodeAna.java index bb927e2..9292cd7 100644 --- a/src/evaluer/crearNodeAna.java +++ b/src/evaluer/crearNodeAna.java @@ -12,6 +12,8 @@ import xml.node; public class crearNodeAna { node ana = new node("analyse"); + int nbrPointTotal = 0; + int pointGagner = 0; /** * Création du node analyse.
@@ -27,14 +29,27 @@ public class crearNodeAna { } } + /** + * Obtient le node analyse de la class cearNodeAna.
+ * @return + */ public node getAna() { return ana; } - public void setAna(node ana) { - this.ana = ana; + + /** + * Calcul le total des points de l'étudiants.
+ * Ajoute les attributs nbrPointTotal et pointGagner.
+ */ + public void getAllResultat() { + for (node enfant : ana.retourneAllEnfants("resultat")) { + nbrPointTotal = nbrPointTotal + Integer.valueOf(enfant.getAttributs().get("total")); + pointGagner = pointGagner + Integer.valueOf(enfant.getAttributs().get("point")); + } + ana.getAttributs().put("nbrPointTotal", String.valueOf(nbrPointTotal)); + ana.getAttributs().put("pointGagner", String.valueOf(pointGagner)); } - } diff --git a/src/evaluer/evaluerAttributs.java b/src/evaluer/evaluerAttributs.java index 949d70b..b26239d 100644 --- a/src/evaluer/evaluerAttributs.java +++ b/src/evaluer/evaluerAttributs.java @@ -12,7 +12,7 @@ public class evaluerAttributs { /** * Evaluer les attributs des nodes.
- * @param nodeSujet : le node du sujet (colonne, ligne) + * @param nodeSujet : le node du sujet (colonne, ligne, graphic) * @param nodeEtudiant : le node de l'étudiant. * @param analyse : le node analyse qui contiendra les résultats. */ @@ -23,7 +23,11 @@ public class evaluerAttributs { if(nodeSujet.getNameNode().equals("colonne")) evaluerAttributColonne(); if(nodeSujet.getNameNode().equals("ligne")) { evaluerAttributLigne(); - evaluerAttributCellule(nodeSujet); + evaluerAttributCellule(); + } + if(nodeSujet.getNameNode().equals("graphic")) { + evaluerAttributGraphic(); + evaluerLesNodesEnfantsGraphic(); } } @@ -31,7 +35,7 @@ public class evaluerAttributs { * Evaluer les attributs du node colonne.
*/ private void evaluerAttributColonne() { - nAnalyse.retourneLastEnfant("feuille").addEnfant(new node("colonne", nSujet, "RefColonne", nSujet.getAttributs().get("RefColonne"))); + nAnalyse.retourneLastEnfant("feuille").addEnfant(new node("colonne", null, "RefColonne", nSujet.getAttributs().get("RefColonne"))); for (Map.Entry entry : nSujet.getAttributs().entrySet()){ if(nSujet.isAttributEvaluer(entry.getKey())) { node colonneEtudiant = trouveColonneEtudiant(); @@ -44,7 +48,7 @@ public class evaluerAttributs { * Evaluer les attributs du node ligne.
*/ private void evaluerAttributLigne() { - nAnalyse.retourneLastEnfant("feuille").addEnfant(new node("ligne", nSujet, "RefLigne", nSujet.getAttributs().get("RefLigne"))); + nAnalyse.retourneLastEnfant("feuille").addEnfant(new node("ligne", null, "RefLigne", nSujet.getAttributs().get("RefLigne"))); for (Map.Entry entry : nSujet.getAttributs().entrySet()){ if(nSujet.isAttributEvaluer(entry.getKey())) { node ligneEtudiant = trouveLigneEtudiant(); @@ -56,11 +60,11 @@ public class evaluerAttributs { /** * Evaluer les attributs du node cellule.
*/ - private void evaluerAttributCellule(node ligneSujet) { - for (node cellule : ligneSujet.retourneAllEnfants("cellule")) { + private void evaluerAttributCellule() { + for (node cellule : nSujet.retourneAllEnfants("cellule")) { if(cellule.isEvaluer()) { node celluleEtudiant = trouveCelluleEtudiant(cellule); - nAnalyse.retourneLastEnfant("ligne").addEnfant(new node("cellule", cellule, "RefLigne", cellule.getAttributs().get("RefLigne"), "RefColonne", cellule.getAttributs().get("RefColonne"))); + nAnalyse.retourneLastEnfant("ligne").addEnfant(new node("cellule", null, "RefLigne", cellule.getAttributs().get("RefLigne"), "RefColonne", cellule.getAttributs().get("RefColonne"))); for (Map.Entry entry : cellule.getAttributs().entrySet()){ if(cellule.isAttributEvaluer(entry.getKey())) { nAnalyse.retourneLastEnfant("cellule").addEnfant(new outils().Compare("cellule",entry.getKey(), entry.getValue(), celluleEtudiant.getAttributs().get(entry.getKey()))); @@ -86,6 +90,37 @@ public class evaluerAttributs { } } + /** + * Evaluer les attributs du node graphic.
+ */ + private void evaluerAttributGraphic() { + for (Map.Entry entry : nSujet.getAttributs().entrySet()){ + if(nSujet.isAttributEvaluer(entry.getKey())) { + String valeurEtudiant = ""; + if(nEtudiant!=null) valeurEtudiant=nEtudiant.getAttributs().get(entry.getKey()); + nAnalyse.retourneLastEnfant("graphic").addEnfant(new outils().Compare("graphic",entry.getKey(), entry.getValue(), valeurEtudiant)); + } + } + } + + /** + * Evaluer tous les nodes enfants du node graphic.
+ */ + private void evaluerLesNodesEnfantsGraphic() { + for (node enfant : nSujet.getEnfants()) { + if(enfant.isEvaluer()) { + node enfantEtudiant = trouveEnfantGraphicEtudiant(enfant.getNameNode()); + for (Map.Entry entry : enfant.getAttributs().entrySet()){ + if(enfant.isAttributEvaluer(entry.getKey())) { + String valeurEtudiant = ""; + if(enfantEtudiant!=null) valeurEtudiant = enfantEtudiant.getAttributs().get(entry.getKey()); + nAnalyse.retourneLastEnfant("graphic").addEnfant(new outils().Compare("graphic",entry.getKey(), entry.getValue(), valeurEtudiant )); + } + } + } + } + } + /** * Trouve la colonne de l'étudiant.
* @return @@ -114,6 +149,15 @@ public class evaluerAttributs { return Tempo.retourneFirstEnfant("cellule", "RefLigne", cellule.getAttributs().get("RefLigne"), "RefColonne", cellule.getAttributs().get("RefColonne")); } + /** + * Trouve le node enfant du node graphique.
+ * @param nameNode + * @return + */ + private node trouveEnfantGraphicEtudiant(String nameNode) { + if(nEtudiant==null) return null; + return nEtudiant.retourneFirstEnfant(nameNode); + } diff --git a/src/evaluer/evaluerLesFichiersEtudiants.java b/src/evaluer/evaluerLesFichiersEtudiants.java index 3eb16a5..d2cdaf6 100644 --- a/src/evaluer/evaluerLesFichiersEtudiants.java +++ b/src/evaluer/evaluerLesFichiersEtudiants.java @@ -2,7 +2,6 @@ package evaluer; import java.io.IOException; import java.text.ParseException; -import java.util.zip.ZipException; import javax.swing.JEditorPane; import javax.xml.parsers.ParserConfigurationException; @@ -18,17 +17,15 @@ import calcul.enumerations.typeFichier; import fenetres.baliseStyle; import xml.EnsembleFichiers; import xml.LecturesDossiers; -import xml.ecritureFileXML; import xml.node; import xml.transformeXLMtoNode; public class evaluerLesFichiersEtudiants implements Runnable{ private final JEditorPane txt; - + public node tousLesResultats = new node("Tous"); public evaluerLesFichiersEtudiants(JEditorPane txt) { - commandes.analyse=true; this.txt=txt; this.txt.setContentType("text/plain"); @@ -37,8 +34,7 @@ public class evaluerLesFichiersEtudiants implements Runnable{ @Override public synchronized void run() { - - + commandes.message = new StringBuilder(); commandes.message.append(baliseStyle.balise()); commandes.message.append("

*** LES FICHIERS DES ETUDIANTS ANALYSÉS ET ÉVALUÉS ***


"); @@ -94,8 +90,7 @@ public class evaluerLesFichiersEtudiants implements Runnable{ } } - - + //***************************************** //** Nombre de fichier writer à analyser ** //***************************************** @@ -174,7 +169,8 @@ public class evaluerLesFichiersEtudiants implements Runnable{ //*********************************************************** new transformeXLMtoNode(EnsembleFichiers.getListeContentTableur().get(i),false,null); node nod = transformeXLMtoNode.getNodeRoot(); - + if(!nod.isHasEnfant()) continue; + Classeur2 ClasseurStudent; try { @@ -192,25 +188,29 @@ public class evaluerLesFichiersEtudiants implements Runnable{ nodStudent.saveNodeEnXMLinNewFile("nodStudent.xml", commandes.pathApp); if(commandes.analyse) { - node ana = new crearNodeAna(nomEtudiant, i).getAna(); + crearNodeAna evaluationEtudiant = new crearNodeAna(nomEtudiant, i); + node ana = evaluationEtudiant.getAna(); new evaluerNodesClasseurStudent(ana, nodStudent); - ana.saveNodeEnXMLinNewFile("ana.xml", commandes.pathApp); + evaluationEtudiant.getAllResultat(); + tousLesResultats.addEnfant(ana.clone()); } - - + tousLesResultats.saveNodeEnXMLinNewFile("ana.xml", commandes.pathApp); } catch (CloneNotSupportedException | IOException e) { e.printStackTrace(); } - + }// ** Parcours l'ensemble des fichiers des étudiants *** + }// Run + +} //********************************** //** Analyse des fichiers student ** //********************************** - if(commandes.analyse||commandes.ecritNodeAnalyse) { - - - - +// if(commandes.analyse||commandes.ecritNodeAnalyse) { +// +// +// +// // Run.ecritureNodeEnXML(nodStudent, "fichier student","",false,""); //écriture du node nodStudent de l'étudiant // node ana = analyseFichier.analyse(nodStudent, commandes.sujet, i, a, txt,texteAfficher); // try { @@ -219,26 +219,26 @@ public class evaluerLesFichiersEtudiants implements Runnable{ // // TODO Auto-generated catch block // e1.printStackTrace(); // } - //************************************************** - //** Ecriture des fichiers d'analyse des students ** - //************************************************** - if(commandes.ecritNodeAnalyse) { - - - +// //************************************************** +// //** Ecriture des fichiers d'analyse des students ** +// //************************************************** +// if(commandes.ecritNodeAnalyse) { +// +// +// // try { //// Run.ecritureNodeEnXML(ana, "nodana"+ana.retourneFirstEnfantsByName("ouverture").getAttributs().get("dossier"),commandes.path,Run.TypeFile.Analyse); // } catch (IOException e) { // e.printStackTrace(); // } - } - - //**************************** - //** Création des feedbacks ** - //**************************** - if(!commandes.sansFeeback&&!commandes.ecritNodeAnalyse) { - if(!commandes.zipfeedback) { - //feedback(ana, verif); //classique directement dans le répertoire +// } +// +// //**************************** +// //** Création des feedbacks ** +// //**************************** +// if(!commandes.sansFeeback&&!commandes.ecritNodeAnalyse) { +// if(!commandes.zipfeedback) { +// //feedback(ana, verif); //classique directement dans le répertoire // try { //// feedbacks.feedback(ana,verif, false,false); // } catch (IOException e) { @@ -246,8 +246,8 @@ public class evaluerLesFichiersEtudiants implements Runnable{ // } catch (ParseException e) { // e.printStackTrace(); // } - } - if(commandes.zipfeedback) { // Dans une archive pour Moodle +// } +// if(commandes.zipfeedback) { // Dans une archive pour Moodle // try { //// a.AddStreamToZip(feedbacks.feedback(ana, verif, true,false), meptl.retourneLeNomDuFeedback(a.getLectDossiers().getEC().getListeNomFichierFeedBack().get(i),ana, verif),commandes.analyse_size,commandes.analyse_nameZip); // // Modification imposé par Moodle 4 @@ -265,20 +265,20 @@ public class evaluerLesFichiersEtudiants implements Runnable{ // } catch (ParseException e) { // e.printStackTrace(); // } - } - } - - //******************************************************************************** - //** Ajoute au node ensembleanalyse lorsque -csv file.csv ou -verifcsv file.scv ** - //******************************************************************************** +// } +// } +// +// ******************************************************************************** +// ** Ajoute au node ensembleanalyse lorsque -csv file.csv ou -verifcsv file.scv ** +// ******************************************************************************** // if(commandes.ecritNoteCSV) ensembleanalyse.addNode(ana); - +// //********************************************************* //** Message dans la console sur l'analyse de l'étudiant ** //********************************************************* // commandes.message.append(meptl.messageSystem(ana).toString()); - } - } +// } +// } // // // @@ -324,11 +324,8 @@ public class evaluerLesFichiersEtudiants implements Runnable{ // verificationFichierAnalyse_node_commandesSujet.messagMiseAJourFichierAnalyseAprèsAnalyse(); // } // - txt.setContentType("text/html"); - txt.setText(commandes.message.toString()); - - } +// txt.setContentType("text/html"); +// txt.setText(commandes.message.toString()); +// +// } - - -} diff --git a/src/evaluer/evaluerNodesClasseurStudent.java b/src/evaluer/evaluerNodesClasseurStudent.java index cf46654..339a087 100644 --- a/src/evaluer/evaluerNodesClasseurStudent.java +++ b/src/evaluer/evaluerNodesClasseurStudent.java @@ -8,15 +8,22 @@ public class evaluerNodesClasseurStudent { private node nAna = new node(); private node nodeEtudiant = new node(); + /** + * Evaluer les fichiers des étudiants.
+ * Commence par évaluer les feuilles (nodes colonne, lignes puis cellules).
+ * Puis evalue le node graphic par le nomObjet="nameObject".
+ * @param ana + * @param nodStudent + */ public evaluerNodesClasseurStudent(node ana, node nodStudent) { nodeEtudiant = nodStudent; nAna = ana; evaluerLesFeuilles(); - nAna.getAttributs().put("test", "reussi"); + evaluerLesGraphics(); } /** - * Evaluer les feuilles les unes après les autres. + * Evaluer les feuilles les unes après les autres.
*/ private void evaluerLesFeuilles() { for (node feuilleSujet : commandes.sujet.retourneAllEnfants("feuille")) { @@ -30,6 +37,21 @@ public class evaluerNodesClasseurStudent { } } + /** + * Evaluer les graphics les uns après les autres.
+ */ + private void evaluerLesGraphics() { + for (node graphicSujet : commandes.sujet.retourneAllEnfants("graphic")) { + if(graphicSujet.isEvaluer()) { + node graphicEtudiant = trouveLeGraphicEtudiant(graphicSujet.getAttributs().get("nomObjet"),graphicSujet.getAttributs().get("TitreGraphique"), graphicSujet.getAttributs().get("type") ); + node anaGraphic = new node("graphic"); + anaGraphic.getAttributs().put("nomObjet", graphicSujet.getAttributs().get("nomObjet")); + nAna.addEnfant(anaGraphic); + new evaluerAttributs(graphicSujet, graphicEtudiant , nAna); + } + } + } + /** * Trouve la feuille de l'étudiant.
* @param nomFeuille @@ -39,6 +61,19 @@ public class evaluerNodesClasseurStudent { return nodeEtudiant.retourneFirstEnfant("feuille", "nomFeuille", nomFeuille); } + /** + * Trouve le graphic de l'étudiant.
+ * @param nomObjet + * @return + */ + private node trouveLeGraphicEtudiant(String nomObjet, String TitreGraphic, String type) { + node graph = nodeEtudiant.retourneFirstEnfant("graphic", "nomObjet", nomObjet); + if(graph==null) graph = nodeEtudiant.retourneFirstEnfant("graphic", "TitreGraphique", TitreGraphic); + if(graph==null) graph = nodeEtudiant.retourneFirstEnfant("graphic", "type", type); + if(graph==null) graph = nodeEtudiant.retourneFirstEnfant("graphic"); + return graph; + } + /** * Evaluer les colonnes les unes après les autres.
* @param feuilleSujet @@ -66,6 +101,8 @@ public class evaluerNodesClasseurStudent { } } + + public node getAnalyse() { return nAna; } diff --git a/src/outils/outils.java b/src/outils/outils.java index 6e55fc9..e018ec1 100644 --- a/src/outils/outils.java +++ b/src/outils/outils.java @@ -11,53 +11,109 @@ import xml.node; public class outils { -// private int pointsClass = 0; -// private int pointTotal=0; -// private int pointEnJeu = 0; - /** - * Compare les String A et B. - * La String B contient le poids de la note après le symbole ‽ - * Les String ne sont pas nettoyées avant comparaisons. + * Compare les String ValeurSujet et ValeurEtudiant.
+ * La String ValeurSujet contient la note après le symbole ‽.
* - * @param A : String du fichier remis - * @param B : string du fichier consigne (sujet) avec le symbole ‽ pour la notation - * @return une String contenant "Correct" , "Erreur" ou "Optionnel". - * @throws UnsupportedEncodingException + * @param nomNode : nom du node. + * @param key : nom de l'attribut. + * @param ValeurEtudiant : Valeur de l'attribut du fichier remis. + * @param ValeurSujet : Valeur de l'attribut du fichier consigne (sujet) avec le symbole ‽ pour la notation. + * @return le node resultat. */ public node Compare(String nomNode, String key , String ValeurSujet , String ValeurEtudiant){ if(ValeurEtudiant==null) ValeurEtudiant=""; resultatNotationParComparaison resultat = new resultatNotationParComparaison(false, false, nomNode, key, ValeurSujet, ValeurEtudiant, 0, 0); + // Recupération des points et suppression de texte ‽point. if (ValeurSujet != null && ValeurSujet.contains("‽")) { TraitePoint(ValeurSujet, resultat); ValeurSujet = ValeurSujet.substring(0, ValeurSujet.indexOf("‽")); } - + + // Retourne le resultat si optionnel (point = 0 par défaut). if(resultat.isOptionnel()) { return resultat.getResultat(); } + - //intervalles de valeurs avec le symbole → + // Nettoyer les textes des caractères spéciaux et chiffre. + // Puis égalité strict entre ValeurSujet et ValeurEtudiant. + if(ValeurSujet.contains("↑")) { + ValeurSujet = nettoyerTexte(ValeurSujet); + ValeurEtudiant = nettoyerTexte(ValeurEtudiant); + return egaliteStrict(ValeurSujet,ValeurEtudiant,resultat); + } + + // Intervalles de valeurs avec le symbole → if(ValeurSujet.contains("→")) { - return Intervalle(ValeurEtudiant,ValeurSujet, resultat).getResultat(); + return Intervalle(ValeurEtudiant,ValeurSujet, resultat); } - // Egalité entre les deux valeurs - if (ValeurEtudiant.equals(ValeurSujet)) { - resultat.setCorrect(true); - resultat.setPoint(resultat.getTotal()); - return resultat.getResultat(); - }else { - resultat.setCorrect(false); - resultat.setPoint(0); - return resultat.getResultat(); + // Contient exactement. + if(ValeurSujet.contains("¦")) { + return containsExact(ValeurSujet, ValeurEtudiant,resultat); } + // par défaut + return egaliteStrict( ValeurSujet, ValeurEtudiant, resultat); } + /** + * Compare les string `ValeurSujet` et `ValeurEtudiant`.
+ * @param ValeurSujet + * @param ValeurEtudiant + * @param resultat + */ + private node egaliteStrict(String ValeurSujet, String ValeurEtudiant, resultatNotationParComparaison resultat) { + if (ValeurEtudiant.equals(ValeurSujet)) { + resultat.setCorrect(true); + resultat.setPoint(resultat.getTotal()); + }else { + resultat.setCorrect(false); + resultat.setPoint(0); + } + return resultat.getResultat(); + } + + + /** + * Vérifie si la chaîne `ValeurSujet` est contenue de manière exacte dans `value2` entre des délimiteurs `|`.
+ * + * @param ValeurSujet La valeur à rechercher.ValeurEtudiant. + * @param ValeurEtudiant La chaîne de recherche au format. + * @return true si `ValeurSujet` est trouvé entre les `|`, false sinon. + */ + public node containsExact(String ValeurSujet, String ValeurEtudiant, resultatNotationParComparaison resultat) { + // Vérification si les deux valeurs ne sont pas nulles + if (ValeurSujet == null || ValeurEtudiant == null) { + resultat.setOptionnel(true); + resultat.setPoint(0); + resultat.setTotal(0); + throw new IllegalArgumentException("Les deux valeurs ne doivent pas être nulles."); + } + + // Utilisation de split() avec le caractère ¦ + String[] parties = ValeurSujet.split("¦"); + + for (int i = 0; i < parties.length; i++) { + System.out.println("Partie " + (i + 1) + ": " + parties[i]); + + // Formater la valeur recherchée avec les séparateurs |...| + String pattern = parties[i] ; + // Vérifie si le motif exact est dans la chaîne de recherche + if( ValeurEtudiant.contains(pattern)) { + resultat.setOptionnel(false); + resultat.setCorrect(true); + resultat.setPoint(resultat.getTotal()); + } + } + + return resultat.getResultat(); + } + /** * Compare les String A et B. @@ -91,16 +147,11 @@ public class outils { - - - - - - private resultatNotationParComparaison Intervalle(String A, String Sujet, resultatNotationParComparaison resultat) { + private node Intervalle(String A, String Sujet, resultatNotationParComparaison resultat) { if (A == null || A.isEmpty() || Sujet == null || Sujet.isEmpty()) { resultat.setCorrect(false); resultat.setPoint(0); - return resultat; + return resultat.getResultat(); } try { @@ -116,7 +167,7 @@ public class outils { resultat.setOptionnel(true); resultat.setPoint(0); resultat.setTotal(0); - return resultat; + return resultat.getResultat(); } // Nettoyer les bornes et la valeur A @@ -133,7 +184,7 @@ public class outils { if (valueA >= lowerBound && valueA <= upperBound) { resultat.setCorrect(true); resultat.setPoint(resultat.getTotal()); - return resultat; + return resultat.getResultat(); } } catch (NumberFormatException e) { String key = resultat.getDescription(); @@ -142,7 +193,7 @@ public class outils { resultat.setOptionnel(true); resultat.setPoint(0); resultat.setTotal(0); - return resultat; + return resultat.getResultat(); } catch (Exception e) { } @@ -153,7 +204,7 @@ public class outils { resultat.setOptionnel(true); resultat.setPoint(0); resultat.setTotal(0); - return resultat; + return resultat.getResultat(); } @@ -198,52 +249,23 @@ public class outils { } + + /** - * Tritaement des tollérance et des OU exact - * @param A - * @param Sujet - * @return - */ - private String TraitementIntervalleOUExact(String A, String Sujet) { - - if(A.length()==0) { - return "Erreur : "; - } + * Supprime tous les caractères spéciaux et les chiffres d'une chaîne de texte. + * @param texte Le texte d'entrée à nettoyer. + * @return Le texte nettoyé ne contenant que des lettres (A-Z, a-z). + */ + public String nettoyerTexte(String texte) { + if (texte == null) { + return ""; + } + // Remplace tous les caractères qui NE sont PAS des lettres (A-Z, a-z) par une chaîne vide + return texte.replaceAll("[^a-zA-Z]", ""); + } + + - String TextB[] = Sujet.split("¦"); - for(int i=0;i=b0 ) return "Correct : "; - - } - - - return "Erreur : "; - } @@ -316,18 +338,7 @@ public class outils { if(TraitementCouleur(couleurA, couleurB).equals("Correct : ")) { couleur =true; } -// int Ared = Integer.parseInt(couleurA.substring(0, 2),16); -// int Agreen = Integer.parseInt(couleurA.substring(2, 4),16); -// int Ablue = Integer.parseInt(couleurA.substring(4, 6),16); -// -// int Bred = Integer.parseInt(couleurB.substring(0, 2),16); -// int Bgreen = Integer.parseInt(couleurB.substring(2, 4),16); -// int Bblue = Integer.parseInt(couleurB.substring(4, 6),16); -// -// // couleur dominante -// if(Ared>Agreen+10 && Ared>Ablue+10 && Bred>Bgreen+10 && Bred>=Bblue+10) couleur=true; -// if(Agreen>Ared+10 && Agreen>Ablue+10 && Bgreen>Bred+10 && Bgreen>Bblue+10) couleur = true; -// if(Ablue>Ared+10 && Ablue>Agreen+10 & Bblue>Bred+10 && Bblue>Bgreen+10) couleur = true; + } if(taille && type && couleur) return "Correct : "; @@ -386,6 +397,11 @@ public class outils { return false; } + + + + + /** * Traitement des conditions OU * @param A diff --git a/src/outils/resultatNotationParComparaison.java b/src/outils/resultatNotationParComparaison.java index 759f6e5..a339f0a 100644 --- a/src/outils/resultatNotationParComparaison.java +++ b/src/outils/resultatNotationParComparaison.java @@ -14,7 +14,17 @@ public class resultatNotationParComparaison { private int total; // private node resultat = new node("resultat"); - // **Constructeur** + /** + * Resultat de l'évaluation. + * @param optionnel : par defaut la valeur est false. + * @param correct : par défaut la valeur est false. + * @param nomNode : le nom du node qui contient l'attribut. + * @param description : le nom de l'attribut. + * @param valeurSujet : la valeur de l'attribut dans le sujet. + * @param valeurEtudiant : la valeur de l'attribut dans le fihcier étudiant. + * @param point : les points gagngés par l'étudiant. + * @param total : le nombre de point si correct juste. + */ public resultatNotationParComparaison(boolean optionnel ,boolean correct, String nomNode, String description, String valeurSujet, String valeurEtudiant, int point, int total) { this.optionnel = optionnel; this.correct = correct; diff --git a/src/xml/ecritureFileXML.java b/src/xml/ecritureFileXML.java index 47ac3df..a90047b 100644 --- a/src/xml/ecritureFileXML.java +++ b/src/xml/ecritureFileXML.java @@ -13,7 +13,6 @@ import java.nio.file.Paths; public class ecritureFileXML { - public static boolean write(node nodeWrite, String nameFileWithExt) { String directoryName = Paths.get("").toAbsolutePath().toString(); File file = new File(directoryName + "\\" + nameFileWithExt) ;