From b36433ce05e009fc5acf35ec3c23bc35d0bdb8b0 Mon Sep 17 00:00:00 2001 From: pablo rodriguez <58742538+1-pablo-rodriguez@users.noreply.github.com> Date: Sun, 8 May 2022 21:10:27 +0200 Subject: [PATCH] Maj v3.6.0 --- analyseWriter.jar | Bin 1104575 -> 1105841 bytes bin/MEPTL/meptl.class | Bin 79381 -> 62889 bytes src/MEPTL/analyseLesNodesPrincipaux.java | 1161 ++++++++++++++++++++++ src/MEPTL/meptl.java | 1113 ++------------------- 4 files changed, 1220 insertions(+), 1054 deletions(-) create mode 100644 src/MEPTL/analyseLesNodesPrincipaux.java diff --git a/analyseWriter.jar b/analyseWriter.jar index 1e1793bb3204e53d009a645b02e0d2fe4ede60d4..83fd4e021c4f87a0f66a27a784ebb1aea81b92ef 100644 GIT binary patch delta 45224 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

{fAW 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 YKTjJ=2GNC4uEReP1{BKvETSR%AE@VsHvj+t delta 43737 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 M(+tC&K{AH@AE{0E#Q*>R diff --git a/bin/MEPTL/meptl.class b/bin/MEPTL/meptl.class index be610d52fc74973ca34819cc96a9361d81d2613f..c7b5cc61b15026fca226d04284e64544a98ff9e7 100644 GIT binary patch delta 21336 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 D*2J`i delta 37533 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 diff --git a/src/MEPTL/analyseLesNodesPrincipaux.java b/src/MEPTL/analyseLesNodesPrincipaux.java new file mode 100644 index 0000000..36ea618 --- /dev/null +++ b/src/MEPTL/analyseLesNodesPrincipaux.java @@ -0,0 +1,1161 @@ +package MEPTL; + +import java.util.ArrayList; +import java.util.Enumeration; + +import cXML.Run; +import cXML.node; + +public class analyseLesNodesPrincipaux { + + /** + * Analyse du node bibliographies. + * @param nodStudentBiblio + * @param nodSujetBiblio + * @param a + * @param nodmenu + * @return + */ + public static node analyseLaBiblio(node nodStudentBiblio, node nodSujetBiblio, Run a, node nodmenu) { + node nodbiblio = new node(); + nodbiblio.setNomElt("bibliographies"); + nodbiblio.setAttributs(nodSujetBiblio.getAttributs());//ajoute tous les attributs du sujet + nodbiblio.setContenu(nodSujetBiblio.getContenu());//ajoute le commentaire du sujet + + //*************************************** + //** Ajoute l'identifiant pour le menu ** + //*************************************** + if(a.retourneFirstNodeByNameAttributValue(nodmenu, "item", "name", "biblio")!=null) { + nodbiblio.getAttributs().put("id", a.retourneFirstNodeByNameAttributValue(nodmenu, "item", "name", "biblio").getAttributs().get("id")); + } + + //*************************** + //** initialise les points ** + //*************************** + outils.initiliseLesPoints(); + + //******************************************************** + //** Parcours les nodes enfants du node ** + //******************************************************** + for(int i = 0 ; i < nodSujetBiblio.getNodes().size(); i++) { + if(nodSujetBiblio.getNodes().get(i).getNomElt().equals("text:bibliography")) { + node nodSujetBibio = nodSujetBiblio.getNodes().get(i); + int pointDebut = outils.getPointsClass(); + int pointTotalDebut = outils.getPointTotal(); + String nomDeLaBiblio = outils.withoutCodeAndPoint(nodSujetBibio.getAttributs().get("text:name")); + node biblio = new node(); + biblio.setNomElt("biblio"); + biblio.getAttributs().put("namebiblio", nomDeLaBiblio); + + if(nodSujetBibio.getAttributs().get("titre")!=null) { + biblio.getAttributs().put("titre", nodSujetBibio.getAttributs().get("titre")); + } + + String TitreTable = outils.withoutCodeAndPoint(nodSujetBibio.retourneFirstEnfantsByName("text:index-title").retourneLesContenusEnfants("")); + + node nodSujet = a.retourneFirstNodeParagrapheContain(a.retourneNames(nodSujetBiblio, "text:index-body"), TitreTable); + node nodStudent = a.retourneFirstNodeParagrapheContain(a.retourneNames(nodStudentBiblio, "text:index-body"), TitreTable); + + biblio = meptl.analyseLesAttributEtContenuDuNode(nodStudent, nodSujet, biblio, "ana:biblio", nodSujet.getNomElt()); + + for(int j =0 ; j < nodSujet.getNodes().size();j++) { + if(nodStudent!=null) { + if(jnumerotationchapitre.
+ * @param nodStudentNumerotation + * @param nodSujetNumerotation + * @param a + * @param nodmenu + * @return + */ + public static node analyseLaNumerotationChapitre(node nodStudentNumerotation, node nodSujetNumerotation, Run a, node nodmenu) { + node nodnumerotations = new node(); + nodnumerotations.setNomElt("numerotationchapitre"); + nodnumerotations.setAttributs(nodSujetNumerotation.getAttributs());//ajoute tous les attributs du sujet + nodnumerotations.setContenu(nodSujetNumerotation.getContenu()); //ajoute le commantaire du sujet + + //*************************************** + //** Ajoute l'identifiant pour le menu ** + //*************************************** + if(a.retourneFirstNodeByNameAttributValue(nodmenu, "item", "name", "numerotationchapitre")!=null) { + nodnumerotations.getAttributs().put("id", a.retourneFirstNodeByNameAttributValue(nodmenu, "item", "name", "numerotationchapitre").getAttributs().get("id")); + } + + //*************************** + //** initialise les points ** + //*************************** + outils.initiliseLesPoints(); + + //******************************************************************* + //** Parcours les nodes enfants du node ** + //******************************************************************* + for(int i = 0 ; i < nodSujetNumerotation.getNodes().size(); i++) { + if(nodSujetNumerotation.getNodes().get(i).getNomElt().equals("text:outline-level-style")) { + int pointDebut = outils.getPointsClass(); + int pointTotalDebut = outils.getPointTotal(); + String levelnumrotation = outils.withoutCodeAndPoint(nodSujetNumerotation.getNodes().get(i).getAttributs().get("text:level")); + node numerotation = new node(); + numerotation.setNomElt("numerotation"); + numerotation.getAttributs().put("level", levelnumrotation); + if(nodSujetNumerotation.getNodes().get(i).getAttributs().get("titre")!=null) numerotation.getAttributs().put("titre", nodSujetNumerotation.getNodes().get(i).getAttributs().get("titre")); + + node numerotationStudent = a.retourneFirstNodeByNameAttributValue(nodStudentNumerotation, "text:outline-level-style", "text:level", levelnumrotation); + node numerotationSujet = nodSujetNumerotation.getNodes().get(i); + + //******************************************** + //** analyse les attributs des nodes ** + //******************************************** + numerotation = meptl.analyseLesAttributEtContenuDuNode(numerotationStudent, numerotationSujet, numerotation, "ana:numerotation",numerotationSujet.getNomElt()); + + //************************************ + //** analyse tous les nodes enfants ** + //************************************ + numerotation = analyseLesNodesEnfants.nodeNext(numerotation, "ana:numerotation", numerotationStudent, null, null, numerotationSujet, null, null, a); + + //**************************************************************** + //** Insère les attributs des points dans les node de l'analyse ** + //**************************************************************** + numerotation.getAttributs().put("point", String.valueOf(outils.getPointsClass()-pointDebut)); + numerotation.getAttributs().put("pointTotal", String.valueOf(outils.getPointTotal()-pointTotalDebut)); + nodnumerotations.getNodes().add(numerotation); + + } + } + + //**************************************************************** + //** Insère les attributs des points dans les node de l'analyse ** + //**************************************************************** + nodnumerotations.getAttributs().put("pointgagner",String.valueOf(outils.getPointsClass())); + nodnumerotations.getAttributs().put("pointtotal",String.valueOf(outils.getPointTotal())); + nodnumerotations.getAttributs().put("proportioncorrect",String.valueOf(outils.getProportionCorrect())); + nodnumerotations.setClose(true); + return nodnumerotations; + + } + + /** + * Analyse du node frames. + * @param nodStudentFrames + * @param nodSujetframes + * @param a + * @param nodmenu + * @return + */ + public static node analyseLesFrames(node nodStudentFrames, node nodSujetFrames, Run a, node nodmenu) { + node nodframes = new node(); + nodframes.setNomElt("frames"); + nodframes.setAttributs(nodSujetFrames.getAttributs()); //ajoute tous les attributs du sujet + nodframes.setContenu(nodSujetFrames.getContenu()); //ajoute le commentaire du sujet + + //*************************************** + //** Ajoute l'identifiant pour le menu ** + //*************************************** + if(a.retourneFirstNodeByNameAttributValue(nodmenu, "item", "name", "frames")!=null) { + nodframes.getAttributs().put("id", a.retourneFirstNodeByNameAttributValue(nodmenu, "item", "name", "frames").getAttributs().get("id")); + } + + //*************************** + //** initialise les points ** + //*************************** + outils.initiliseLesPoints(); + + //***************************************************** + //** Parcours les nodes enfants du node ** + //***************************************************** + for(int i = 0 ; i < nodSujetFrames.getNodes().size(); i++) { + if(nodSujetFrames.getNodes().get(i).getNomElt().equals("draw:frame")) { + node frameSujet = nodSujetFrames.getNodes().get(i); + int pointDebut = outils.getPointsClass(); + int pointTotalDebut = outils.getPointTotal(); + String nomDuFrame = outils.withoutCodeAndPoint(frameSujet.getAttributs().get("draw:name")); + node frame = new node(); + frame.setNomElt("frame"); + frame.getAttributs().put("nameframe", nomDuFrame); + + //********************* + //** Ajoute un titre ** + //********************* + frame = meptl.addNodeSautTitre(frameSujet,frame); + + //******************************* + //** Recherche le node Student ** + //******************************* + node frameStudent = a.retourneFirstNodeByNameAttributValue(nodStudentFrames, "draw:frame", "draw:name", nomDuFrame); + + //******************************************** + //** analyse les attributs des nodes ** + //******************************************** + frame = meptl.analyseLesAttributEtContenuDuNode(frameStudent, frameSujet, frame, "ana:frame",frameSujet.getNomElt()); + + //************************************ + //** analyse tous les nodes enfants ** + //************************************ + frame = analyseLesNodesEnfants.nodeNext(frame, "ana:frame", frameStudent, null, null, frameSujet, null, null, a); + + //**************************************************************** + //** Insère les attributs des points dans les node de l'analyse ** + //**************************************************************** + frame.getAttributs().put("point", String.valueOf(outils.getPointsClass()-pointDebut)); + frame.getAttributs().put("pointTotal", String.valueOf(outils.getPointTotal()-pointTotalDebut)); + nodframes.getNodes().add(frame); + } + } + //**************************************************************** + //** Insère les attributs des points dans les node de l'analyse ** + //**************************************************************** + nodframes.getAttributs().put("pointgagner",String.valueOf(outils.getPointsClass())); + nodframes.getAttributs().put("pointtotal",String.valueOf(outils.getPointTotal())); + nodframes.getAttributs().put("proportioncorrect",String.valueOf(outils.getProportionCorrect())); + nodframes.setClose(true); + return nodframes; + } + + /** + * Analyse du node office:meta. + * @param nodStudentMeta + * @param nodSujetMeta + * @param a + * @param nodmenu + * @return + */ + public static node analyseLesMeta(node nodStudentMeta, node nodSujetMeta, Run a, node nodmenu) { + node nodmeta = new node(); + nodmeta.setNomElt("meta"); + nodmeta.setAttributs(nodSujetMeta.getAttributs()); + + //*************************************** + //** Ajoute l'identifiant pour le menu ** + //*************************************** + if(a.retourneFirstNodeByNameAttributValue(nodmenu, "item", "name", "office:meta")!=null) { + nodmeta.getAttributs().put("id", a.retourneFirstNodeByNameAttributValue(nodmenu, "item", "name", "office:meta").getAttributs().get("id")); + } + + //Applatir le node sujetMeta + ArrayList sujet = a.Applatir(nodSujetMeta.getNodes(), new ArrayList()); + + //*************************** + //** initialise les points ** + //*************************** + outils.initiliseLesPoints(); + + //*********************************************************************** + //** Parcours les nodes enfants du node ou autres ** + //*********************************************************************** + for(int i = 0 ; i < sujet.size(); i++) { + node nodSujet = sujet.get(i); + String namenode = nodSujet.getNomElt(); + + //********************* + //** Ajoute un titre ** + //********************* + nodmeta = meptl.addNodeSautTitre(nodSujet,nodmeta); + + + // parcours les attributs du node "meta:user-defined" + if(namenode.equals("meta:user-defined")) { + Enumeration key = nodSujet.getAttributs().keys(); + while(key.hasMoreElements()) { + String k = key.nextElement(); + if(nodSujet.getAttributs().get(k).contains("‽")){ + String valueOfAttribut = nodSujet.getAttributs().get(k); + //******************************* + //** Recherche le node Student ** + //******************************* + node nodStudent = a.retourneFirstNodeByNameAttributContainsValueNetTexte(nodStudentMeta, namenode,k,outils.withoutCodeAndPointPourRechercheContenuExact(valueOfAttribut)); + nodmeta = meptl.analyseLesAttributEtContenuDuNode(nodStudent, nodSujet, nodmeta, "ana:meta", namenode); + } + } + }else { + //******************************* + //** Recherche le node Student ** + //******************************* + ArrayList NStudent = a.retourneNames(nodStudentMeta, namenode); + + if(NStudent!=null) { + if(!NStudent.isEmpty()) { + nodmeta = meptl.analyseLesAttributEtContenuDuNode(NStudent.get(0), sujet.get(i), nodmeta, "ana:meta", namenode); + }else { + nodmeta = meptl.analyseLesAttributEtContenuDuNode(null, sujet.get(i), nodmeta, "ana:meta", namenode); + } + }else { + nodmeta = meptl.analyseLesAttributEtContenuDuNode(null, sujet.get(i), nodmeta, "ana:meta", namenode); + } + + } + + + } + //**************************************************************** + //** Insère les attributs des points dans les node de l'analyse ** + //**************************************************************** + nodmeta.getAttributs().put("pointgagner",String.valueOf(outils.getPointsClass())); + nodmeta.getAttributs().put("pointtotal",String.valueOf(outils.getPointTotal())); + nodmeta.getAttributs().put("proportioncorrect",String.valueOf(outils.getProportionCorrect())); + nodmeta.setClose(true); + return nodmeta; + } + + /** + * Analyse du node sections + * @param nodStudentSections + * @param nodSujetSections + * @param a + * @param nodmenu + * @return + */ + public static node analyseLesSections(node nodStudentSections, node nodSujetSections, Run a, node nodmenu) { + node nodsections = new node(); + nodsections.setNomElt("sections"); + nodsections.setAttributs(nodSujetSections.getAttributs()); //ajoute tous les attributs du sujet + nodsections.setContenu(nodSujetSections.getContenu()); //ajoute le commentaire du sujet + + //*************************************** + //** Ajoute l'identifiant pour le menu ** + //*************************************** + if(a.retourneFirstNodeByNameAttributValue(nodmenu, "item", "name", "sections")!=null) { + nodsections.getAttributs().put("id", a.retourneFirstNodeByNameAttributValue(nodmenu, "item", "name", "sections").getAttributs().get("id")); + } + + //*************************** + //** initialise les points ** + //*************************** + outils.initiliseLesPoints(); + + //******************************************************* + //** Parcours les nodes enfants du node ** + //******************************************************* + for(int i = 0 ; i < nodSujetSections.getNodes().size(); i++) { //niveau 1 + if(nodSujetSections.getNodes().get(i).getNomElt().equals("text:section")) { + node sectionSujet = nodSujetSections.getNodes().get(i); + int pointDebut = outils.getPointsClass(); + int pointTotalDebut = outils.getPointTotal(); + String nomDeLaSection = outils.withoutCodeAndPoint(sectionSujet.getAttributs().get("text:name")); + + node section = new node(); + section.setNomElt("section"); + section.getAttributs().put("namesection", nomDeLaSection); + + //********************* + //** Ajoute un titre ** + //********************* + section = meptl.addNodeSautTitre(sectionSujet,section); + + //******************************* + //** Recherche le node Student ** + //******************************* + node sectionStudent = a.retourneFirstNodeByNameAttributValue(nodStudentSections, "text:section", "text:name", nomDeLaSection); + + //*********************************************** + //** analyse les attributs des nodes

** + //*********************************************** + section = meptl.analyseLesAttributEtContenuDuNode(sectionStudent, sectionSujet, section, "ana:section",sectionSujet.getNomElt()); + + //************************************ + //** analyse tous les nodes enfants ** + //************************************ + section = analyseLesNodesEnfants.nodeNext(section, "ana:section", sectionStudent, null, null, sectionSujet, null, null, a); + + +// // les enfants du premier niveau du node +// for(int j = 0 ; j < sectionSujet.getNodes().size();j++ ) { //niveau 2 +// +// node nodSujet = sectionSujet.getNodes().get(j); +// String nameNode = nodSujet.getNomElt(); +// node nodStudent = null; +// +// if(sectionStudent!=null) nodStudent = rechercherUnNodeStudent.rechercheLeNodeEnCascade(nameNode,nodSujet,null,null,sectionStudent,a); +// +// //insère un saut si titre pas vide et saut=true +// section=addNodeSautTitre(nodSujet, section); +// +// +// // analyse attribut et contenu des enfants du premier niveau +// section = analyseLesAttributEtContenuDuNode(nodStudent, nodSujet, section, "ana:section",nameNode); +// +// +// for(int k = 0 ; k < nodSujet.getNodes().size();k++) { //niveau 3 +// node nod2Sujet = nodSujet.getNodes().get(k); +// String nameNode2 = nod2Sujet.getNomElt(); +// node nod2Student = null; +// +// if(sectionStudent!=null) nod2Student = rechercherUnNodeStudent.rechercheLeNodeEnCascade(nameNode2,nod2Sujet,null,sectionStudent,nodStudent,a); +// +// //insère un saut si titre pas vide et saut=true +// section=addNodeSautTitre(nod2Sujet, section); +// +// // analyse attribut et contenu des enfants du second niveau +// section = analyseLesAttributEtContenuDuNode(nod2Student, nod2Sujet, section, "ana:section",nameNode2 ); +// +// +// for(int l = 0 ; l < nod2Sujet.getNodes().size();l++) { //niveau 4 +// node nod3Sujet = nod2Sujet.getNodes().get(l); +// String nameNode3 = nod3Sujet.getNomElt(); +// node nod3Student = null; +// +// if(sectionStudent!=null) nod3Student = rechercherUnNodeStudent.rechercheLeNodeEnCascade(nameNode3,nod3Sujet,sectionStudent,nodStudent,nod2Student,a); +// +// //insère un saut si titre pas vide et saut=true +// section=addNodeSautTitre(nod3Sujet, section); +// +// // analyse attribut et contenu des enfants du second niveau +// section = analyseLesAttributEtContenuDuNode(nod3Student, nod3Sujet, section, "ana:section", nameNode3); +// +// +// for(int m = 0 ; m < nod3Sujet.getNodes().size();m++) { //niveau 5 +// node nod4Sujet = nod3Sujet.getNodes().get(m); +// String nameNode4 = nod4Sujet.getNomElt(); +// node nod4Student = null; +// +// if(sectionStudent!=null) nod4Student = rechercherUnNodeStudent.rechercheLeNodeEnCascade(nameNode4,nod4Sujet,nodStudent,nod2Student,nod3Student,a); +// +// //insère un saut si titre pas vide et saut=true +// section=addNodeSautTitre(nod4Sujet, section); +// +// // analyse attribut et contenu des enfants du second niveau +// section = analyseLesAttributEtContenuDuNode(nod4Student, nod4Sujet, section, "ana:section", nameNode4); +// +// } +// +// +// } +// +// } +// +// } + + //**************************************************************** + //** Insère les attributs des points dans les node de l'analyse ** + //**************************************************************** + section.getAttributs().put("point", String.valueOf(outils.getPointsClass()-pointDebut)); + section.getAttributs().put("pointTotal", String.valueOf(outils.getPointTotal()-pointTotalDebut)); + nodsections.getNodes().add(section); + + } + } + + //**************************************************************** + //** Insère les attributs des points dans les node de l'analyse ** + //**************************************************************** + nodsections.getAttributs().put("pointgagner",String.valueOf(outils.getPointsClass())); + nodsections.getAttributs().put("pointtotal",String.valueOf(outils.getPointTotal())); + nodsections.getAttributs().put("proportioncorrect",String.valueOf(outils.getProportionCorrect())); + nodsections.setClose(true); + return nodsections; + + } + + /** + * Analyse du node sequences. + * @param nodStudentSequence + * @param nodSujetSequence + * @param a + * @param nodmenu + * @return + */ + public static node analyseLesSequences(node nodStudentSequence, node nodSujetSequence, Run a, node nodmenu) { + node nodseq = new node(); + nodseq.setNomElt("sequences"); + nodseq.setAttributs(nodSujetSequence.getAttributs()); + nodseq.setContenu(nodSujetSequence.getContenu()); //ajoute le commantire + + //*************************************** + //** Ajoute l'identifiant pour le menu ** + //*************************************** + if(a.retourneFirstNodeByNameAttributValue(nodmenu, "item", "name", "sequences")!=null) { + nodseq.getAttributs().put("id", a.retourneFirstNodeByNameAttributValue(nodmenu, "item", "name", "sequences").getAttributs().get("id")); + } + + //*************************** + //** initialise les points ** + //*************************** + outils.initiliseLesPoints(); + + //************************************************************* + //** Parcours les nodes enfants du node ** + //************************************************************* + for(int i = 0 ; i < nodSujetSequence.getNodes().size(); i++) { + if(nodSujetSequence.getNodes().get(i).getNomElt().equals("text:sequence-decl")) { + node seqSujet = nodSujetSequence.getNodes().get(i); + int pointDebut = outils.getPointsClass(); + int pointTotalDebut = outils.getPointTotal(); + String nomSequence = outils.withoutCodeAndPoint(seqSujet.getAttributs().get("text:name")); + node seq = new node(); + seq.setNomElt("sequence"); + seq.getAttributs().put("name", nomSequence); + + //********************* + //** Ajoute un titre ** + //********************* + seq = meptl.addNodeSautTitre(seqSujet,seq); + + //******************************* + //** Recherche le node Student ** + //******************************* + node seqStudent = a.retourneFirstNodeByNameAttributValue(nodStudentSequence, "text:sequence-decl", "text:name", nomSequence); + + //********************* + //** Ajoute un titre ** + //********************* + seq = meptl.addNodeSautTitre(seqSujet, seq); + + //*********************************************** + //** analyse les attributs des nodes
** + //*********************************************** + seq = meptl.analyseLesAttributEtContenuDuNode(seqStudent, seqSujet, seq, "ana:seq",seqSujet.getNomElt()); + + //**************************************************************** + //** Insère les attributs des points dans les node de l'analyse ** + //**************************************************************** + seq.getAttributs().put("point", String.valueOf(outils.getPointsClass()-pointDebut)); + seq.getAttributs().put("pointTotal", String.valueOf(outils.getPointTotal()-pointTotalDebut)); + nodseq.getNodes().add(seq); + } + } + //**************************************************************** + //** Insère les attributs des points dans les node de l'analyse ** + //**************************************************************** + nodseq.getAttributs().put("pointgagner",String.valueOf(outils.getPointsClass())); + nodseq.getAttributs().put("pointtotal",String.valueOf(outils.getPointTotal())); + nodseq.getAttributs().put("proportioncorrect",String.valueOf(outils.getProportionCorrect())); + nodseq.setClose(true); + return nodseq; + } + + + /** + * Analyse du node tableaux + * @param nodStudentSections + * @param nodSujetSections + * @param a + * @param nodmenu + * @return + */ + public static node analyseLesTableaux(node nodStudentTableaux, node nodSujetTableaux, Run a, node nodmenu) { + node nodtableaux = new node(); + nodtableaux.setNomElt("tableaux"); + nodtableaux.setAttributs(nodSujetTableaux.getAttributs()); //ajoute tous les attributs du sujet + nodtableaux.setContenu(nodSujetTableaux.getContenu()); //ajoute le commentaire du sujet + + //*************************************** + //** Ajoute l'identifiant pour le menu ** + //*************************************** + if(a.retourneFirstNodeByNameAttributValue(nodmenu, "item", "name", "tableau")!=null) { + nodtableaux.getAttributs().put("id", a.retourneFirstNodeByNameAttributValue(nodmenu, "item", "name", "tableau").getAttributs().get("id")); + } + + //*************************** + //** initialise les points ** + //*************************** + outils.initiliseLesPoints(); + + //****************************************************** + //** Parcours les nodes enfants du node ** + //****************************************************** + for(int i = 0 ; i < nodSujetTableaux.getNodes().size(); i++) { //niveau 1 + if(nodSujetTableaux.getNodes().get(i).getNomElt().equals("table:table")) { + int pointDebut = outils.getPointsClass(); + int pointTotalDebut = outils.getPointTotal(); + node tableSujet = nodSujetTableaux.getNodes().get(i); + String nomDeLaTable = outils.withoutCodeAndPoint(tableSujet.getAttributs().get("table:name")); + + node tableau = new node(); + tableau.setNomElt("tableau"); + tableau.getAttributs().put("nametableau", nomDeLaTable); + + //********************* + //** Ajoute un titre ** + //********************* + tableau = meptl.addNodeSautTitre(tableSujet,tableau); + + //******************************* + //** Recherche le node Student ** + //******************************* + node tableauStudent = a.retourneFirstNodeByNameAttributValue(nodStudentTableaux, "table:table", "table:name", nomDeLaTable); + + //*************************************************** + //** analyse les attributs des nodes ** + //*************************************************** + tableau = meptl.analyseLesAttributEtContenuDuNode(tableauStudent, tableSujet, tableau, "ana:tableau",tableSujet.getNomElt()); + + //************************************ + //** analyse tous les nodes enfants ** + //************************************ + tableau = analyseLesNodesEnfants.nodeNext(tableau, "ana:tableau", tableauStudent, null, null, tableSujet, null, null, a); + +// // les enfants du premier niveau du node +// for(int j = 0 ; j < tableSujet.getNodes().size();j++ ) { //niveau 2 +// +// node nodSujet = tableSujet.getNodes().get(j); +// String nameNode = nodSujet.getNomElt(); +// node nodStudent = null; +// +// if(tableauStudent!=null) nodStudent = rechercherUnNodeStudent.rechercheLeNodeEnCascade(nameNode,nodSujet,null,null,tableauStudent,a); +// +// //insère un saut si titre pas vide et saut=true +// tableau=addNodeSautTitre(nodSujet, tableau); +// +// +// // analyse attribut et contenu des enfants du premier niveau +// tableau = analyseLesAttributEtContenuDuNode(nodStudent, nodSujet, tableau, "ana:tableau",nameNode); +// +// +// for(int k = 0 ; k < nodSujet.getNodes().size();k++) { //niveau 3 +// node nod2Sujet = nodSujet.getNodes().get(k); +// String nameNode2 = nod2Sujet.getNomElt(); +// node nod2Student = null; +// +// if(tableauStudent!=null) nod2Student = rechercherUnNodeStudent.rechercheLeNodeEnCascade(nameNode2,nod2Sujet,null,tableauStudent,nodStudent,a); +// +// //insère un saut si titre pas vide et saut=true +// tableau=addNodeSautTitre(nod2Sujet, tableau); +// +// // analyse attribut et contenu des enfants du second niveau +// tableau = analyseLesAttributEtContenuDuNode(nod2Student, nod2Sujet, tableau, "ana:tableau",nameNode2 ); +// +// +// for(int l = 0 ; l < nod2Sujet.getNodes().size();l++) { //niveau 4 +// node nod3Sujet = nod2Sujet.getNodes().get(l); +// String nameNode3 = nod3Sujet.getNomElt(); +// node nod3Student = null; +// +// if(tableauStudent!=null) nod3Student = rechercherUnNodeStudent.rechercheLeNodeEnCascade(nameNode3,nod3Sujet,tableauStudent,nodStudent,nod2Student,a); +// +// //insère un saut si titre pas vide et saut=true +// tableau=addNodeSautTitre(nod3Sujet, tableau); +// +// // analyse attribut et contenu des enfants du second niveau +// tableau = analyseLesAttributEtContenuDuNode(nod3Student, nod3Sujet, tableau, "ana:tableau", nameNode3); +// +// +// for(int m = 0 ; m < nod3Sujet.getNodes().size();m++) { //niveau 5 +// node nod4Sujet = nod3Sujet.getNodes().get(m); +// String nameNode4 = nod4Sujet.getNomElt(); +// node nod4Student = null; +// +// if(tableauStudent!=null) nod4Student = rechercherUnNodeStudent.rechercheLeNodeEnCascade(nameNode4,nod4Sujet,nodStudent,nod2Student,nod3Student,a); +// +// //insère un saut si titre pas vide et saut=true +// tableau=addNodeSautTitre(nod4Sujet, tableau); +// +// // analyse attribut et contenu des enfants du second niveau +// tableau = analyseLesAttributEtContenuDuNode(nod4Student, nod4Sujet, tableau, "ana:tableau", nameNode4); +// } +// } +// } +// } + //**************************************************************** + //** Insère les attributs des points dans les node de l'analyse ** + //**************************************************************** + tableau.getAttributs().put("point", String.valueOf(outils.getPointsClass()-pointDebut)); + tableau.getAttributs().put("pointTotal", String.valueOf(outils.getPointTotal()-pointTotalDebut)); + nodtableaux.getNodes().add(tableau); + } + } + //**************************************************************** + //** Insère les attributs des points dans les node de l'analyse ** + //**************************************************************** + nodtableaux.getAttributs().put("pointgagner",String.valueOf(outils.getPointsClass())); + nodtableaux.getAttributs().put("pointtotal",String.valueOf(outils.getPointTotal())); + nodtableaux.getAttributs().put("proportioncorrect",String.valueOf(outils.getProportionCorrect())); + nodtableaux.setClose(true); + return nodtableaux; + + } + + /** + * Analyse du node tableillustrations. + * @param nodStudentTableI + * @param nodSujetTableI + * @param a + * @param nodmenu + * @return + */ + public static node analyseLesTablesIllustrations(node nodStudentTableI, node nodSujetTableI, Run a, node nodmenu) { + node nodTablesMs = new node(); + nodTablesMs.setNomElt("tableillustrations"); + nodTablesMs.setAttributs(nodSujetTableI.getAttributs());//ajoute tous les attributs du sujet + nodTablesMs.setContenu(nodSujetTableI.getContenu());//ajoute le commentaire du sujet + + //ajoute l'identifiant pour le menu + if(a.retourneFirstNodeByNameAttributValue(nodmenu, "item", "name", "tableillustrations")!=null) { + nodTablesMs.getAttributs().put("id", a.retourneFirstNodeByNameAttributValue(nodmenu, "item", "name", "tableillustrations").getAttributs().get("id")); + } + + //initialise les points + outils.initiliseLesPoints(); + + + for(int i = 0 ; i < nodSujetTableI.getNodes().size(); i++) { + if(nodSujetTableI.getNodes().get(i).getNomElt().equals("text:illustration-index")) { + node table = new node(); + table.setNomElt("tableillustrations"); + + //********************* + //** Ajoute un titre ** + //********************* + if(nodSujetTableI.getNodes().get(i).getAttributs().get("titre")!=null) { + String titre = nodSujetTableI.getNodes().get(i).getAttributs().get("titre"); + if(!titre.isEmpty()) table.getAttributs().put("titre", titre); + } + + + int pointDebut = outils.getPointsClass(); + int pointTotalDebut = outils.getPointTotal(); + String TitreTable = outils.withoutCodeAndPoint(nodSujetTableI.getNodes().get(i).retourneFirstEnfantsByName("text:index-title").retourneLesContenusEnfants("")); + + node nodSujet = a.retourneFirstNodeParagrapheContain(a.retourneNames(nodSujetTableI, "text:index-body"), TitreTable); + node nodStudent = a.retourneFirstNodeParagrapheContain(a.retourneNames(nodStudentTableI, "text:index-body"), TitreTable); + + table = meptl.analyseLesAttributEtContenuDuNode(nodStudent, nodSujet, table, "ana:tableillustration", nodSujet.getNomElt()); + + for(int j =0 ; j < nodSujet.getNodes().size();j++) { + if(nodStudent!=null) { + if(jtablematieres. + * @param nodStudentTableM + * @param nodSujetTableM + * @param a + * @param nodmenu + * @return + */ + public static node analyseLesTablesMatieres(node nodStudentTableM, node nodSujetTableM, Run a, node nodmenu) { + node nodTablesMs = new node(); + nodTablesMs.setNomElt("tablematieres"); + nodTablesMs.setAttributs(nodSujetTableM.getAttributs());//ajoute tous les attributs du sujet + nodTablesMs.setContenu(nodSujetTableM.getContenu());//ajoute le commentaire du sujet + + //ajoute l'identifiant pour le menu + if(a.retourneFirstNodeByNameAttributValue(nodmenu, "item", "name", "tablematieres")!=null) { + nodTablesMs.getAttributs().put("id", a.retourneFirstNodeByNameAttributValue(nodmenu, "item", "name", "tablematieres").getAttributs().get("id")); + } + + //initialise les points + outils.initiliseLesPoints(); + + + for(int i = 0 ; i < nodSujetTableM.getNodes().size(); i++) { + if(nodSujetTableM.getNodes().get(i).getNomElt().equals("text:table-of-content")) { + node table = new node(); + table.setNomElt("tablematiere"); + + //********************* + //** Ajoute un titre ** + //********************* + if(nodSujetTableM.getNodes().get(i).getAttributs().get("titre")!=null) { + String titre = nodSujetTableM.getNodes().get(i).getAttributs().get("titre"); + if(!titre.isEmpty()) table.getAttributs().put("titre", titre); + } + + + int pointDebut = outils.getPointsClass(); + int pointTotalDebut = outils.getPointTotal(); + String TitreTable = outils.withoutCodeAndPoint(nodSujetTableM.getNodes().get(i).retourneFirstEnfantsByName("text:index-title").retourneLesContenusEnfants("")); + + node nodSujet = a.retourneFirstNodeParagrapheContain(a.retourneNames(nodSujetTableM, "text:index-body"), TitreTable); + node nodStudent = a.retourneFirstNodeParagrapheContain(a.retourneNames(nodStudentTableM, "text:index-body"), TitreTable); + + table = meptl.analyseLesAttributEtContenuDuNode(nodStudent, nodSujet, table, "ana:tablematiere", nodSujet.getNomElt()); + + for(int j =0 ; j < nodSujet.getNodes().size();j++) { + if(nodStudent!=null) { + if(jstyle:page. + * @param nodStudentPage + * @param nodSujetPage + * @param a + * @param nodmenu + * @return + */ + public static node analysePage(node nodStudentPage, node nodSujetPage, Run a, node nodmenu, node nodSujetParagraphes, node nodStudentParagraphes) { + node nodpages = new node(); + nodpages.setNomElt("pages"); + nodpages.setAttributs(nodSujetPage.getAttributs()); + + //*************************************** + //** Ajoute l'identifiant pour le menu ** + //*************************************** + if(a.retourneFirstNodeByNameAttributValue(nodmenu, "item", "name", "style:page")!=null) { + nodpages.getAttributs().put("id", a.retourneFirstNodeByNameAttributValue(nodmenu, "item", "name", "style:page").getAttributs().get("id")); + } + + //*************************** + //** initialise les points ** + //*************************** + outils.initiliseLesPoints(); + + //**************************************** + //** Analyse tous les style:master-page ** + //**************************************** + for(int i = 0 ; i < nodSujetPage.getNodes().size(); i++) { + + if(nodSujetPage.getNodes().get(i).getNomElt().equals("style:master-page")) { + node pageSujet = nodSujetPage.getNodes().get(i); + int pointDebut = outils.getPointsClass(); + int pointTotalDebut = outils.getPointTotal(); + String nomDeLaPage = outils.withoutCodeAndPoint(pageSujet.getAttributs().get("style:name")); + node page = new node(); + page.setNomElt("page"); + page.getAttributs().put("name", nomDeLaPage); + + //********************* + //** Ajoute un titre ** + //********************* + page = meptl.addNodeSautTitre(pageSujet,page); + + //******************************* + //** Recherche le node Student ** + //******************************* + node pageStudent = a.retourneFirstNodeByNameAttributValue(nodStudentPage, "style:master-page", "style:name", nomDeLaPage); + + //******************************************** + //** analyse les attributs des nodes ** + //******************************************** + page = meptl.analyseLesAttributEtContenuDuNode(pageStudent, pageSujet, page, "ana:page",pageSujet.getNomElt()); + + //********************************************** + //** Analyse de tous les autres nodes enfants ** + //********************************************** + page=analyseLesNodesEnfants.nodeNext(page, "ana:page", pageStudent, null, null, pageSujet, nodSujetParagraphes, nodStudentParagraphes, a); + + //***************************************************************** + //** Insère les attributs des points dans les nodes de l'analyse ** + //***************************************************************** + page.getAttributs().put("point", String.valueOf(outils.getPointsClass()-pointDebut)); + page.getAttributs().put("pointTotal", String.valueOf(outils.getPointTotal()-pointTotalDebut)); + nodpages.getNodes().add(page); + } + } + //***************************************************************** + //** Insère les attributs des points dans les nodes de l'analyse ** + //***************************************************************** + nodpages.getAttributs().put("pointgagner",String.valueOf(outils.getPointsClass())); + nodpages.getAttributs().put("pointtotal",String.valueOf(outils.getPointTotal())); + nodpages.getAttributs().put("proportioncorrect",String.valueOf(outils.getProportionCorrect())); + nodpages.setClose(true); + return nodpages; + } + + /** + * Analyse du node style:paragraph. + * @param nodStudentParagraph + * @param nodSujetParagraph + * @param a + * @param nodmenu + * @return + */ + public static node analyseParagraph(node nodStudentParagraph, node nodSujetParagraph, Run a, node nodmenu) { + node nodparagraphs = new node(); + nodparagraphs.setNomElt("paragraphs"); + nodparagraphs.setAttributs(nodSujetParagraph.getAttributs()); + + //*************************************** + //** Ajoute l'identifiant pour le menu ** + //*************************************** + if(a.retourneFirstNodeByNameAttributValue(nodmenu, "item", "name", "style:paragraph")!=null) { + nodparagraphs.getAttributs().put("id", a.retourneFirstNodeByNameAttributValue(nodmenu, "item", "name", "style:paragraph").getAttributs().get("id")); + } + + //*************************** + //** initialise les points ** + //*************************** + outils.initiliseLesPoints(); + + //****************************************************** + //** Parcours les nodes enfants du node ** + //****************************************************** + for(int i = 0 ; i < nodSujetParagraph.getNodes().size(); i++) { + if(nodSujetParagraph.getNodes().get(i).getNomElt().equals("style:style")) { + int pointDebut = outils.getPointsClass(); + int pointTotalDebut = outils.getPointTotal(); + node paragraphSujet = nodSujetParagraph.getNodes().get(i); + String nomDuParagraph = outils.withoutCodeAndPoint(paragraphSujet.getAttributs().get("style:name")); + node paragraph = new node(); + paragraph.setNomElt("paragraph"); + paragraph.getAttributs().put("name", nomDuParagraph); + + //********************* + //** Ajoute un titre ** + //********************* + if(paragraphSujet.getAttributs().get("titre")!=null) { + paragraph.getAttributs().put("titre", nodSujetParagraph.getNodes().get(i).getAttributs().get("titre")); + } + + //******************************* + //** Recherche le node Student ** + //******************************* + node paragraphStudent = a.retourneFirstNodeByNameAttributValue(nodStudentParagraph, "style:style", "style:name", nomDuParagraph); + + // ajoute les valeurs par héritage + if(paragraphStudent!=null) paragraphStudent = meptl.ajouteValeurLesValeursDuStyleParagraphParent(nodStudentParagraph, paragraphStudent); + + // ajoute les valeurs par défauts + if(paragraphStudent!=null) paragraphStudent = meptl.ajouteValeurParDefautAuStyleParagraph(nodStudentParagraph, paragraphStudent); + + // analyse les attributs du node + paragraph = meptl.analyseLesAttributEtContenuDuNode(paragraphStudent, paragraphSujet, paragraph, "ana:paragraph",paragraphSujet.getNomElt()); + + // les enfants du premier niveau du node + for(int j = 0 ; j < paragraphSujet.getNodes().size();j++ ) { + + node nodSujet = paragraphSujet.getNodes().get(j); + String nameNode = nodSujet.getNomElt(); + node nodStudent = null; + if(paragraphStudent!=null) { + if(paragraphStudent.retourneFirstEnfantsByName(nameNode).getNomElt().equals(nameNode)) { + nodStudent = paragraphStudent.retourneFirstEnfantsByName(nameNode); + } + } + + //insère un saut si titre pas vide et saut=true + paragraph = meptl.addNodeSautTitre(nodSujet, paragraph); + + // analyse attribut et contenu des enfants du premier niveau + paragraph = meptl.analyseLesAttributEtContenuDuNode(nodStudent, nodSujet, paragraph, "ana:paragraph",nodSujet.getNomElt()); + + + for(int k = 0 ; k < nodSujet.getNodes().size();k++) { + node nod2Sujet = nodSujet.getNodes().get(k); + String nameNode2 = nod2Sujet.getNomElt(); + node nod2Student = null; + if(nodStudent!=null) if(nodStudent.retourneFirstEnfantsByName(nameNode2).getNomElt().equals(nameNode2)) { + nod2Student = paragraphStudent.retourneFirstEnfantsByName(nameNode2); + } + + //insère un saut si titre pas vide et saut=true + paragraph = meptl.addNodeSautTitre(nod2Sujet, paragraph); + + // analyse attribut et contenu des enfants du second niveau + paragraph = meptl.analyseLesAttributEtContenuDuNode(nod2Student, nod2Sujet, paragraph, "ana:paragraph",nod2Sujet.getNomElt() ); + + for(int l = 0 ; l < nod2Sujet.getNodes().size();l++) { + node nod3Sujet = nod2Sujet.getNodes().get(l); + String nameNode3 = nod3Sujet.getNomElt(); + node nod3Student = null; + if(nod2Student!=null) if(nod2Student.retourneFirstEnfantsByName(nameNode3).getNomElt().equals(nameNode3)) { + nod3Student = paragraphStudent.retourneFirstEnfantsByName(nameNode3); + } + + //insère un saut si titre pas vide et saut=true + paragraph = meptl.addNodeSautTitre(nod3Sujet, paragraph); + + // analyse attribut et contenu des enfants du troisième niveau + paragraph = meptl.analyseLesAttributEtContenuDuNode(nod3Student, nod3Sujet, paragraph, "ana:paragraph", nod3Sujet.getNomElt()); + } + + } + + } + + paragraph.getAttributs().put("point", String.valueOf(outils.getPointsClass()-pointDebut)); + paragraph.getAttributs().put("pointTotal", String.valueOf(outils.getPointTotal()-pointTotalDebut)); + nodparagraphs.getNodes().add(paragraph); + + + } + } + + nodparagraphs.getAttributs().put("pointgagner",String.valueOf(outils.getPointsClass())); + nodparagraphs.getAttributs().put("pointtotal",String.valueOf(outils.getPointTotal())); + nodparagraphs.getAttributs().put("proportioncorrect",String.valueOf(outils.getProportionCorrect())); + nodparagraphs.setClose(true); + return nodparagraphs; + } + + /** + * Cette méthode permet d'analyse la structure du document.
+ * La structure de l'étudiant est comparé avec la structure du sujet.
+ * Le node d'analyse est retourné.
+ * Le nom du node analysé pour cette partie est puis .
+ *
+ * @param nodStudentS : node de la structure de l'étudiant. + * @param nodSujetS : node de la structure du sujet. + * @param a : Objet de la class cXML + * @param nodmenu : node menu. + * @param nodSujetParagraphs : node contenant l'ensemble des styles de paragraphe du sujet. + * @param nodStudentParagraphs : node contenant l'ensemble des styles de paragraphe de l'étudiant. + * @return : le node d'analyse de la structure. + */ + public static node analyseStructurePage(node nodStudentS, node nodSujetS, Run a, node nodmenu, node nodSujetParagraphs, node nodStudentParagraphs) { + node nodSpages = new node(); + nodSpages.setNomElt("structurepage"); + nodSpages.setAttributs(nodSujetS.getAttributs()); + nodSpages.setContenu(nodSujetS.getContenu()); //ajoute le commentaire du sujet + + //*************************************** + //** Ajoute l'identifiant pour le menu ** + //*************************************** + if(a.retourneFirstNodeByNameAttributValue(nodmenu, "item", "name", "structurepage")!=null) { + nodSpages.getAttributs().put("id", a.retourneFirstNodeByNameAttributValue(nodmenu, "item", "name", "structurepage").getAttributs().get("id")); + } + + //*************************** + //** initialise les points ** + //*************************** + outils.initiliseLesPoints(); + + //******************************************************** + //** Parcours les nodes enfants du node ** + //******************************************************** + for(int i = 0 ; i < nodSujetS.getNodes().size(); i++) { + if(nodSujetS.getNodes().get(i).getNomElt().equals("page")) { + node pageSujet = nodSujetS.getNodes().get(i); + int pointDebut = outils.getPointsClass(); + int pointTotalDebut = outils.getPointTotal(); + + String nomDeLaPage = outils.withoutCodeAndPoint(pageSujet.getAttributs().get("style:master-page-name")); + if(nomDeLaPage==null) nomDeLaPage="Défaut"; + String numeroabsolue = outils.withoutCodeAndPoint(pageSujet.getAttributs().get("numeroabsolue")); + node page = new node(); + page.setNomElt("page"); + page.getAttributs().put("namepage", nomDeLaPage); + page.getAttributs().put("numeroabsolue", numeroabsolue); + + //********************* + //** Ajoute un titre ** + //********************* + page = meptl.addNodeSautTitre(pageSujet,page); + + //******************************* + //** Recherche le node Student ** + //******************************* + node pageStudent = a.retourneFirstNodeByNameAttributValue(nodStudentS, "page", "numeroabsolue", numeroabsolue); + + //******************************************** + //** analyse les attributs des nodes ** + //******************************************** + page = meptl.analyseLesAttributEtContenuDuNode(pageStudent, pageSujet, page, "ana:page",pageSujet.getNomElt()); + + //************************************ + //** analyse tous les nodes enfants ** + //************************************ + page = analyseLesNodesEnfants.nodeNext(page, "ana:page", pageStudent, null, null, pageSujet, nodSujetParagraphs, nodStudentParagraphs, a); + + //**************************************************************** + //** Insère les attributs des points dans les node de l'analyse ** + //**************************************************************** + page.getAttributs().put("point", String.valueOf(outils.getPointsClass()-pointDebut)); + page.getAttributs().put("pointTotal", String.valueOf(outils.getPointTotal()-pointTotalDebut)); + nodSpages.getNodes().add(page); + } + } + //**************************************************************** + //** Insère les attributs des points dans les node de l'analyse ** + //**************************************************************** + nodSpages.getAttributs().put("pointgagner",String.valueOf(outils.getPointsClass())); + nodSpages.getAttributs().put("pointtotal",String.valueOf(outils.getPointTotal())); + nodSpages.getAttributs().put("proportioncorrect",String.valueOf(outils.getProportionCorrect())); + nodSpages.setClose(true); + return nodSpages; + + } + + + +} diff --git a/src/MEPTL/meptl.java b/src/MEPTL/meptl.java index 774539f..f21fe40 100644 --- a/src/MEPTL/meptl.java +++ b/src/MEPTL/meptl.java @@ -63,7 +63,9 @@ public class meptl { commandes.path = System.getProperty("user.dir"); // patch = "C:/Users/pabr6/OneDrive/Desktop/Nouveau dossier"; - //** les commandes + //******************* + //** les commandes ** + //******************* new commandes(args,commandes.path); //** Node pour le chargement du node sujet (fichier d'analyse) @@ -72,7 +74,9 @@ public class meptl { //** Nouveau node qui permet de convertir le fichier contenant la liste des étudiants en node. node nodeCSV = null; - //** Initialisation des varaibles + //********************************** + //** Initialisation des variables ** + //********************************** Run a = null; Run.path = commandes.path; int nbFichierWriter=0; @@ -686,9 +690,6 @@ public class meptl { // ajoute au node de la page les éléments sauf les paragraphes de texte page.getNodes().add(nodstructure.getNodes().get(j)); - - - } @@ -1096,62 +1097,61 @@ public class meptl { // analyse Meta if(nodSujet.retourneFirstEnfantsByName("office:meta").getNomElt().equals("office:meta")) { - nodmeta = analyseLesMeta(nodStudent.retourneFirstEnfantsByName("office:meta"), nodSujet.retourneFirstEnfantsByName("office:meta"), a, nodmenu); + nodmeta = analyseLesNodesPrincipaux.analyseLesMeta(nodStudent.retourneFirstEnfantsByName("office:meta"), nodSujet.retourneFirstEnfantsByName("office:meta"), a, nodmenu); } // analyse les pages (nécessaire d'avoir aussi les styles de paragraphes) if(nodSujet.retourneFirstEnfantsByName("style:page").getNomElt().equals("style:page")) { if(nodSujet.containElementByName("style:paragraph")) { - nodpage = analysePage(nodStudent.retourneFirstEnfantsByName("style:page"), nodSujet.retourneFirstEnfantsByName("style:page"), a, nodmenu,nodSujet.retourneFirstEnfantsByName("style:paragraph"),nodStudent.retourneFirstEnfantsByName("style:paragraph")); + nodpage = analyseLesNodesPrincipaux.analysePage(nodStudent.retourneFirstEnfantsByName("style:page"), nodSujet.retourneFirstEnfantsByName("style:page"), a, nodmenu,nodSujet.retourneFirstEnfantsByName("style:paragraph"),nodStudent.retourneFirstEnfantsByName("style:paragraph")); }else { - nodpage = analysePage(nodStudent.retourneFirstEnfantsByName("style:page"), nodSujet.retourneFirstEnfantsByName("style:page"), a, nodmenu,null,null); + nodpage = analyseLesNodesPrincipaux.analysePage(nodStudent.retourneFirstEnfantsByName("style:page"), nodSujet.retourneFirstEnfantsByName("style:page"), a, nodmenu,null,null); } } - // analyse les paragraphes if(nodSujet.retourneFirstEnfantsByName("style:paragraph").getNomElt().equals("style:paragraph")) { - nodparagraph = analyseParagraph(nodStudent.retourneFirstEnfantsByName("style:paragraph"), nodSujet.retourneFirstEnfantsByName("style:paragraph"), a, nodmenu); + nodparagraph = analyseLesNodesPrincipaux.analyseParagraph(nodStudent.retourneFirstEnfantsByName("style:paragraph"), nodSujet.retourneFirstEnfantsByName("style:paragraph"), a, nodmenu); } // analyse les variables de séquence if(nodSujet.retourneFirstEnfantsByName("sequences").getNomElt().equals("sequences")) { - nodsequence = analyseLesSequences(nodStudent.retourneFirstEnfantsByName("sequences"), nodSujet.retourneFirstEnfantsByName("sequences"), a, nodmenu); + nodsequence = analyseLesNodesPrincipaux.analyseLesSequences(nodStudent.retourneFirstEnfantsByName("sequences"), nodSujet.retourneFirstEnfantsByName("sequences"), a, nodmenu); } // analyse de la numérotation des chapitres if(nodSujet.retourneFirstEnfantsByName("numerotationchapitre").getNomElt().equals("numerotationchapitre")) { - nodnumerochapitre = analyseLaNumerotationChapitre(nodStudent.retourneFirstEnfantsByName("numerotationchapitre"), nodSujet.retourneFirstEnfantsByName("numerotationchapitre"), a, nodmenu); + nodnumerochapitre = analyseLesNodesPrincipaux.analyseLaNumerotationChapitre(nodStudent.retourneFirstEnfantsByName("numerotationchapitre"), nodSujet.retourneFirstEnfantsByName("numerotationchapitre"), a, nodmenu); } // analyse les frames if(nodSujet.retourneFirstEnfantsByName("frames").getNomElt().equals("frames")) { - nodframes = analyseLesFrames(nodStudent.retourneFirstEnfantsByName("frames"), nodSujet.retourneFirstEnfantsByName("frames"), a, nodmenu); + nodframes = analyseLesNodesPrincipaux.analyseLesFrames(nodStudent.retourneFirstEnfantsByName("frames"), nodSujet.retourneFirstEnfantsByName("frames"), a, nodmenu); } // analyse des sections if(nodSujet.retourneFirstEnfantsByName("sections").getNomElt().equals("sections")) { - nodsections = analyseLesSections(nodStudent.retourneFirstEnfantsByName("sections"), nodSujet.retourneFirstEnfantsByName("sections"), a, nodmenu); + nodsections = analyseLesNodesPrincipaux.analyseLesSections(nodStudent.retourneFirstEnfantsByName("sections"), nodSujet.retourneFirstEnfantsByName("sections"), a, nodmenu); } // analyse les tableaux if(nodSujet.retourneFirstEnfantsByName("tableaux").getNomElt().equals("tableaux")) { - nodtableaux = analyseLesTableaux(nodStudent.retourneFirstEnfantsByName("tableaux"), nodSujet.retourneFirstEnfantsByName("tableaux"), a, nodmenu); + nodtableaux = analyseLesNodesPrincipaux.analyseLesTableaux(nodStudent.retourneFirstEnfantsByName("tableaux"), nodSujet.retourneFirstEnfantsByName("tableaux"), a, nodmenu); } // analyse la bibliographie de LibreOffice if(nodSujet.retourneFirstEnfantsByName("biblio").getNomElt().equals("biblio")) { - nodbiblio = analyseLaBiblio(nodStudent.retourneFirstEnfantsByName("biblio"), nodSujet.retourneFirstEnfantsByName("biblio"), a, nodmenu); + nodbiblio = analyseLesNodesPrincipaux.analyseLaBiblio(nodStudent.retourneFirstEnfantsByName("biblio"), nodSujet.retourneFirstEnfantsByName("biblio"), a, nodmenu); } // analyse des tables des matières if(nodSujet.retourneFirstEnfantsByName("tablematieres").getNomElt().equals("tablematieres")) { - nodtablematieres = analyseLesTablesMatieres(nodStudent.retourneFirstEnfantsByName("tablematieres"), nodSujet.retourneFirstEnfantsByName("tablematieres"), a, nodmenu); + nodtablematieres = analyseLesNodesPrincipaux.analyseLesTablesMatieres(nodStudent.retourneFirstEnfantsByName("tablematieres"), nodSujet.retourneFirstEnfantsByName("tablematieres"), a, nodmenu); } // analyse des tables illustrations if(nodSujet.retourneFirstEnfantsByName("tableillustrations").getNomElt().equals("tableillustrations")) { - nodtableillustrations = analyseLesTablesIllustrations(nodStudent.retourneFirstEnfantsByName("tableillustrations"), nodSujet.retourneFirstEnfantsByName("tableillustrations"), a, nodmenu); + nodtableillustrations = analyseLesNodesPrincipaux.analyseLesTablesIllustrations(nodStudent.retourneFirstEnfantsByName("tableillustrations"), nodSujet.retourneFirstEnfantsByName("tableillustrations"), a, nodmenu); } // analyse la structure du document @@ -1159,7 +1159,7 @@ public class meptl { node nodSujetParagraphs = null; if(nodSujet.retourneFirstEnfantsByName("style:paragraph").getNomElt().equals("style:paragraph")) nodSujetParagraphs = nodSujet.retourneFirstEnfantsByName("style:paragraph"); node nodStudentParagraphs = nodStudent.retourneFirstEnfantsByName("style:paragraph"); - nodstructurepage = analyseStructurePage(nodStudent.retourneFirstEnfantsByName("structurepage"), nodSujet.retourneFirstEnfantsByName("structurepage"), a, nodmenu,nodSujetParagraphs, nodStudentParagraphs ); + nodstructurepage = analyseLesNodesPrincipaux.analyseStructurePage(nodStudent.retourneFirstEnfantsByName("structurepage"), nodSujet.retourneFirstEnfantsByName("structurepage"), a, nodmenu,nodSujetParagraphs, nodStudentParagraphs ); } @@ -1171,7 +1171,7 @@ public class meptl { /** - *
Les erreurs dans le fichier étudiant : erreur de métadonnées Sujet, date de création pour identifier le fichier à analyser. + * Les erreurs dans le fichier étudiant : erreur de métadonnées Sujet, date de création pour identifier le fichier à analyser. *
Il y a une erreur si pas d'historique de modification dans le fichier de l'étudiant. *
Il y a une erreur si le premier auteur ne correspond pas. *
Les erreurs sont dans les attributs du node Erreurs. @@ -1513,1016 +1513,6 @@ public class meptl { } - /** - * Analyse du node office:meta. - * @param nodStudentMeta - * @param nodSujetMeta - * @param a - * @param nodmenu - * @return - */ - private static node analyseLesMeta(node nodStudentMeta, node nodSujetMeta, Run a, node nodmenu) { - node nodmeta = new node(); - nodmeta.setNomElt("meta"); - nodmeta.setAttributs(nodSujetMeta.getAttributs()); - - //ajoute l'identifiant pour le menu - if(a.retourneFirstNodeByNameAttributValue(nodmenu, "item", "name", "office:meta")!=null) { - nodmeta.getAttributs().put("id", a.retourneFirstNodeByNameAttributValue(nodmenu, "item", "name", "office:meta").getAttributs().get("id")); - } - - //Applatir le node sujetMeta - ArrayList sujet = a.Applatir(nodSujetMeta.getNodes(), new ArrayList()); - - //initialise les points - outils.initiliseLesPoints(); - - - for(int i = 0 ; i < sujet.size(); i++) { - - String namenode = sujet.get(i).getNomElt(); - - // parcours les attributs du node "meta:user-defined" - if(namenode.equals("meta:user-defined")) { - Enumeration key = sujet.get(i).getAttributs().keys(); - while(key.hasMoreElements()) { - String k = key.nextElement(); - - if(sujet.get(i).getAttributs().get(k).contains("‽")){ - - String valueOfAttribut = sujet.get(i).getAttributs().get(k); - - node nod2 = a.retourneFirstNodeByNameAttributContainsValueNetTexte(nodStudentMeta, namenode,k,outils.withoutCodeAndPointPourRechercheContenuExact(valueOfAttribut)); - nodmeta = analyseLesAttributEtContenuDuNode(nod2, sujet.get(i), nodmeta, "ana:meta", namenode); - } - } - - }else { - - ArrayList NStudent = a.retourneNames(nodStudentMeta, namenode); - - if(NStudent!=null) { - if(!NStudent.isEmpty()) { - nodmeta = analyseLesAttributEtContenuDuNode(NStudent.get(0), sujet.get(i), nodmeta, "ana:meta", namenode); - }else { - nodmeta = analyseLesAttributEtContenuDuNode(null, sujet.get(i), nodmeta, "ana:meta", namenode); - } - }else { - nodmeta = analyseLesAttributEtContenuDuNode(null, sujet.get(i), nodmeta, "ana:meta", namenode); - } - - } - - - } - nodmeta.getAttributs().put("pointgagner",String.valueOf(outils.getPointsClass())); - nodmeta.getAttributs().put("pointtotal",String.valueOf(outils.getPointTotal())); - nodmeta.getAttributs().put("proportioncorrect",String.valueOf(outils.getProportionCorrect())); - nodmeta.setClose(true); - return nodmeta; - } - - /** - * Analyse du node style:page. - * @param nodStudentPage - * @param nodSujetPage - * @param a - * @param nodmenu - * @return - */ - private static node analysePage(node nodStudentPage, node nodSujetPage, Run a, node nodmenu, node nodSujetParagraphes, node nodStudentParagraphes) { - node nodpages = new node(); - nodpages.setNomElt("pages"); - nodpages.setAttributs(nodSujetPage.getAttributs()); - - //*************************************** - //** Ajoute l'identifiant pour le menu ** - //*************************************** - if(a.retourneFirstNodeByNameAttributValue(nodmenu, "item", "name", "style:page")!=null) { - nodpages.getAttributs().put("id", a.retourneFirstNodeByNameAttributValue(nodmenu, "item", "name", "style:page").getAttributs().get("id")); - } - - //*************************** - //** initialise les points ** - //*************************** - outils.initiliseLesPoints(); - - //**************************************** - //** Analyse tous les style:master-page ** - //**************************************** - for(int i = 0 ; i < nodSujetPage.getNodes().size(); i++) { - - if(nodSujetPage.getNodes().get(i).getNomElt().equals("style:master-page")) { - int pointDebut = outils.getPointsClass(); - int pointTotalDebut = outils.getPointTotal(); - String nomDeLaPage = outils.withoutCodeAndPoint(nodSujetPage.getNodes().get(i).getAttributs().get("style:name")); - node page = new node(); - page.setNomElt("page"); - page.getAttributs().put("name", nomDeLaPage); - if(nodSujetPage.getNodes().get(i).getAttributs().get("titre")!=null) page.getAttributs().put("titre", nodSujetPage.getNodes().get(i).getAttributs().get("titre")); - - node pageStudent = a.retourneFirstNodeByNameAttributValue(nodStudentPage, "style:master-page", "style:name", nomDeLaPage); - node pageSujet = nodSujetPage.getNodes().get(i); - - // analyse les attributs du node style:master-page - page = analyseLesAttributEtContenuDuNode(pageStudent, pageSujet, page, "ana:page",pageSujet.getNomElt()); - - //********************************************** - //** Analyse de tous les autres nodes enfants ** - //********************************************** - page=analyseLesNodesEnfants.nodeNext(page, "ana:page", pageStudent, null, null, pageSujet, nodSujetParagraphes, nodStudentParagraphes, a); - - page.getAttributs().put("point", String.valueOf(outils.getPointsClass()-pointDebut)); - page.getAttributs().put("pointTotal", String.valueOf(outils.getPointTotal()-pointTotalDebut)); - nodpages.getNodes().add(page); - - } - - - } - - nodpages.getAttributs().put("pointgagner",String.valueOf(outils.getPointsClass())); - nodpages.getAttributs().put("pointtotal",String.valueOf(outils.getPointTotal())); - nodpages.getAttributs().put("proportioncorrect",String.valueOf(outils.getProportionCorrect())); - nodpages.setClose(true); - return nodpages; - } - - /** - * Analyse du node style:paragraph. - * @param nodStudentParagraph - * @param nodSujetParagraph - * @param a - * @param nodmenu - * @return - */ - private static node analyseParagraph(node nodStudentParagraph, node nodSujetParagraph, Run a, node nodmenu) { - node nodparagraphs = new node(); - nodparagraphs.setNomElt("paragraphs"); - nodparagraphs.setAttributs(nodSujetParagraph.getAttributs()); - - //ajoute l'identifiant pour le menu - if(a.retourneFirstNodeByNameAttributValue(nodmenu, "item", "name", "style:paragraph")!=null) { - nodparagraphs.getAttributs().put("id", a.retourneFirstNodeByNameAttributValue(nodmenu, "item", "name", "style:paragraph").getAttributs().get("id")); - } - - //initialise les points - outils.initiliseLesPoints(); - - for(int i = 0 ; i < nodSujetParagraph.getNodes().size(); i++) { - if(nodSujetParagraph.getNodes().get(i).getNomElt().equals("style:style")) { - int pointDebut = outils.getPointsClass(); - int pointTotalDebut = outils.getPointTotal(); - node paragraphSujet = nodSujetParagraph.getNodes().get(i); - String nomDuParagraph = outils.withoutCodeAndPoint(paragraphSujet.getAttributs().get("style:name")); - node paragraph = new node(); - paragraph.setNomElt("paragraph"); - paragraph.getAttributs().put("name", nomDuParagraph); - if(paragraphSujet.getAttributs().get("titre")!=null) paragraph.getAttributs().put("titre", nodSujetParagraph.getNodes().get(i).getAttributs().get("titre")); - - // trouve le node de l'étudiant - node paragraphStudent = a.retourneFirstNodeByNameAttributValue(nodStudentParagraph, "style:style", "style:name", nomDuParagraph); - - // ajoute les valeurs par héritage - if(paragraphStudent!=null) paragraphStudent = ajouteValeurLesValeursDuStyleParagraphParent(nodStudentParagraph, paragraphStudent); - - // ajoute les valeurs par défauts - if(paragraphStudent!=null) paragraphStudent = ajouteValeurParDefautAuStyleParagraph(nodStudentParagraph, paragraphStudent); - - // analyse les attributs du node - paragraph = analyseLesAttributEtContenuDuNode(paragraphStudent, paragraphSujet, paragraph, "ana:paragraph",paragraphSujet.getNomElt()); - - // les enfants du premier niveau du node - for(int j = 0 ; j < paragraphSujet.getNodes().size();j++ ) { - - node nodSujet = paragraphSujet.getNodes().get(j); - String nameNode = nodSujet.getNomElt(); - node nodStudent = null; - if(paragraphStudent!=null) { - if(paragraphStudent.retourneFirstEnfantsByName(nameNode).getNomElt().equals(nameNode)) { - nodStudent = paragraphStudent.retourneFirstEnfantsByName(nameNode); - } - } - - //insère un saut si titre pas vide et saut=true - paragraph = addNodeSautTitre(nodSujet, paragraph); - - // analyse attribut et contenu des enfants du premier niveau - paragraph = analyseLesAttributEtContenuDuNode(nodStudent, nodSujet, paragraph, "ana:paragraph",nodSujet.getNomElt()); - - - for(int k = 0 ; k < nodSujet.getNodes().size();k++) { - node nod2Sujet = nodSujet.getNodes().get(k); - String nameNode2 = nod2Sujet.getNomElt(); - node nod2Student = null; - if(nodStudent!=null) if(nodStudent.retourneFirstEnfantsByName(nameNode2).getNomElt().equals(nameNode2)) { - nod2Student = paragraphStudent.retourneFirstEnfantsByName(nameNode2); - } - - //insère un saut si titre pas vide et saut=true - paragraph = addNodeSautTitre(nod2Sujet, paragraph); - - // analyse attribut et contenu des enfants du second niveau - paragraph = analyseLesAttributEtContenuDuNode(nod2Student, nod2Sujet, paragraph, "ana:paragraph",nod2Sujet.getNomElt() ); - - for(int l = 0 ; l < nod2Sujet.getNodes().size();l++) { - node nod3Sujet = nod2Sujet.getNodes().get(l); - String nameNode3 = nod3Sujet.getNomElt(); - node nod3Student = null; - if(nod2Student!=null) if(nod2Student.retourneFirstEnfantsByName(nameNode3).getNomElt().equals(nameNode3)) { - nod3Student = paragraphStudent.retourneFirstEnfantsByName(nameNode3); - } - - //insère un saut si titre pas vide et saut=true - paragraph = addNodeSautTitre(nod3Sujet, paragraph); - - // analyse attribut et contenu des enfants du troisième niveau - paragraph = analyseLesAttributEtContenuDuNode(nod3Student, nod3Sujet, paragraph, "ana:paragraph", nod3Sujet.getNomElt()); - } - - } - - } - - paragraph.getAttributs().put("point", String.valueOf(outils.getPointsClass()-pointDebut)); - paragraph.getAttributs().put("pointTotal", String.valueOf(outils.getPointTotal()-pointTotalDebut)); - nodparagraphs.getNodes().add(paragraph); - - - } - } - - nodparagraphs.getAttributs().put("pointgagner",String.valueOf(outils.getPointsClass())); - nodparagraphs.getAttributs().put("pointtotal",String.valueOf(outils.getPointTotal())); - nodparagraphs.getAttributs().put("proportioncorrect",String.valueOf(outils.getProportionCorrect())); - nodparagraphs.setClose(true); - return nodparagraphs; - } - - /** - * Analyse du node sequences. - * @param nodStudentSequence - * @param nodSujetSequence - * @param a - * @param nodmenu - * @return - */ - private static node analyseLesSequences(node nodStudentSequence, node nodSujetSequence, Run a, node nodmenu) { - node nodseq = new node(); - nodseq.setNomElt("sequences"); - nodseq.setAttributs(nodSujetSequence.getAttributs()); - nodseq.setContenu(nodSujetSequence.getContenu()); //ajoute le commantire - - //ajoute l'identifiant pour le menu - if(a.retourneFirstNodeByNameAttributValue(nodmenu, "item", "name", "sequences")!=null) { - nodseq.getAttributs().put("id", a.retourneFirstNodeByNameAttributValue(nodmenu, "item", "name", "sequences").getAttributs().get("id")); - } - - //initialise les points - outils.initiliseLesPoints(); - - for(int i = 0 ; i < nodSujetSequence.getNodes().size(); i++) { - if(nodSujetSequence.getNodes().get(i).getNomElt().equals("text:sequence-decl")) { - int pointDebut = outils.getPointsClass(); - int pointTotalDebut = outils.getPointTotal(); - String nomSequence = outils.withoutCodeAndPoint(nodSujetSequence.getNodes().get(i).getAttributs().get("text:name")); - node seq = new node(); - seq.setNomElt("sequence"); - seq.getAttributs().put("name", nomSequence); - if(nodSujetSequence.getNodes().get(i).getAttributs().get("titre")!=null) seq.getAttributs().put("titre", nodSujetSequence.getNodes().get(i).getAttributs().get("titre")); - - node seqStudent = a.retourneFirstNodeByNameAttributValue(nodStudentSequence, "text:sequence-decl", "text:name", nomSequence); - node seqSujet = nodSujetSequence.getNodes().get(i); - - //insère un saut si titre pas vide et saut=true - seq = addNodeSautTitre(seqSujet, seq); - - // analyse les attributs du node - seq = analyseLesAttributEtContenuDuNode(seqStudent, seqSujet, seq, "ana:seq",seqSujet.getNomElt()); - - seq.getAttributs().put("point", String.valueOf(outils.getPointsClass()-pointDebut)); - seq.getAttributs().put("pointTotal", String.valueOf(outils.getPointTotal()-pointTotalDebut)); - nodseq.getNodes().add(seq); - } - - - - } - nodseq.getAttributs().put("pointgagner",String.valueOf(outils.getPointsClass())); - nodseq.getAttributs().put("pointtotal",String.valueOf(outils.getPointTotal())); - nodseq.getAttributs().put("proportioncorrect",String.valueOf(outils.getProportionCorrect())); - nodseq.setClose(true); - return nodseq; - } - - /** - * Analyse du node numerotationchapitre.
- * @param nodStudentNumerotation - * @param nodSujetNumerotation - * @param a - * @param nodmenu - * @return - */ - private static node analyseLaNumerotationChapitre(node nodStudentNumerotation, node nodSujetNumerotation, Run a, node nodmenu) { - node nodnumerotations = new node(); - nodnumerotations.setNomElt("numerotationchapitre"); - nodnumerotations.setAttributs(nodSujetNumerotation.getAttributs());//ajoute tous les attributs du sujet - nodnumerotations.setContenu(nodSujetNumerotation.getContenu()); //ajoute le commantaire du sujet - - //*************************************** - //** Ajoute l'identifiant pour le menu ** - //*************************************** - if(a.retourneFirstNodeByNameAttributValue(nodmenu, "item", "name", "numerotationchapitre")!=null) { - nodnumerotations.getAttributs().put("id", a.retourneFirstNodeByNameAttributValue(nodmenu, "item", "name", "numerotationchapitre").getAttributs().get("id")); - } - - //*************************** - //** initialise les points ** - //*************************** - outils.initiliseLesPoints(); - - //******************************************************************* - //** Parcours les nodes enfants du node ** - //******************************************************************* - for(int i = 0 ; i < nodSujetNumerotation.getNodes().size(); i++) { - if(nodSujetNumerotation.getNodes().get(i).getNomElt().equals("text:outline-level-style")) { - int pointDebut = outils.getPointsClass(); - int pointTotalDebut = outils.getPointTotal(); - String levelnumrotation = outils.withoutCodeAndPoint(nodSujetNumerotation.getNodes().get(i).getAttributs().get("text:level")); - node numerotation = new node(); - numerotation.setNomElt("numerotation"); - numerotation.getAttributs().put("level", levelnumrotation); - if(nodSujetNumerotation.getNodes().get(i).getAttributs().get("titre")!=null) numerotation.getAttributs().put("titre", nodSujetNumerotation.getNodes().get(i).getAttributs().get("titre")); - - node numerotationStudent = a.retourneFirstNodeByNameAttributValue(nodStudentNumerotation, "text:outline-level-style", "text:level", levelnumrotation); - node numerotationSujet = nodSujetNumerotation.getNodes().get(i); - - //******************************************** - //** analyse les attributs des nodes ** - //******************************************** - numerotation = analyseLesAttributEtContenuDuNode(numerotationStudent, numerotationSujet, numerotation, "ana:numerotation",numerotationSujet.getNomElt()); - - //************************************ - //** analyse tous les nodes enfants ** - //************************************ - numerotation = analyseLesNodesEnfants.nodeNext(numerotation, "ana:numerotation", numerotationStudent, null, null, numerotationSujet, null, null, a); - - //**************************************************************** - //** Insère les attributs des points dans les node de l'analyse ** - //**************************************************************** - numerotation.getAttributs().put("point", String.valueOf(outils.getPointsClass()-pointDebut)); - numerotation.getAttributs().put("pointTotal", String.valueOf(outils.getPointTotal()-pointTotalDebut)); - nodnumerotations.getNodes().add(numerotation); - - } - } - - //**************************************************************** - //** Insère les attributs des points dans les node de l'analyse ** - //**************************************************************** - nodnumerotations.getAttributs().put("pointgagner",String.valueOf(outils.getPointsClass())); - nodnumerotations.getAttributs().put("pointtotal",String.valueOf(outils.getPointTotal())); - nodnumerotations.getAttributs().put("proportioncorrect",String.valueOf(outils.getProportionCorrect())); - nodnumerotations.setClose(true); - return nodnumerotations; - - } - - /** - * Analyse du node frames. - * @param nodStudentFrames - * @param nodSujetframes - * @param a - * @param nodmenu - * @return - */ - private static node analyseLesFrames(node nodStudentFrames, node nodSujetFrames, Run a, node nodmenu) { - node nodframes = new node(); - nodframes.setNomElt("frames"); - nodframes.setAttributs(nodSujetFrames.getAttributs()); //ajoute tous les attributs du sujet - nodframes.setContenu(nodSujetFrames.getContenu()); //ajoute le commentaire du sujet - - //*************************************** - //** Ajoute l'identifiant pour le menu ** - //*************************************** - if(a.retourneFirstNodeByNameAttributValue(nodmenu, "item", "name", "frames")!=null) { - nodframes.getAttributs().put("id", a.retourneFirstNodeByNameAttributValue(nodmenu, "item", "name", "frames").getAttributs().get("id")); - } - - //*************************** - //** initialise les points ** - //*************************** - outils.initiliseLesPoints(); - - //***************************************************** - //** Parcours les nodes enfants du node ** - //***************************************************** - for(int i = 0 ; i < nodSujetFrames.getNodes().size(); i++) { - if(nodSujetFrames.getNodes().get(i).getNomElt().equals("draw:frame")) { - int pointDebut = outils.getPointsClass(); - int pointTotalDebut = outils.getPointTotal(); - String nomDuFrame = outils.withoutCodeAndPoint(nodSujetFrames.getNodes().get(i).getAttributs().get("draw:name")); - node frame = new node(); - frame.setNomElt("frame"); - frame.getAttributs().put("nameframe", nomDuFrame); - if(nodSujetFrames.getNodes().get(i).getAttributs().get("titre")!=null) frame.getAttributs().put("titre", nodSujetFrames.getNodes().get(i).getAttributs().get("titre")); - - node frameStudent = a.retourneFirstNodeByNameAttributValue(nodStudentFrames, "draw:frame", "draw:name", nomDuFrame); - node frameSujet = nodSujetFrames.getNodes().get(i); - - //******************************************** - //** analyse les attributs des nodes ** - //******************************************** - frame = analyseLesAttributEtContenuDuNode(frameStudent, frameSujet, frame, "ana:frame",frameSujet.getNomElt()); - - //************************************ - //** analyse tous les nodes enfants ** - //************************************ - frame = analyseLesNodesEnfants.nodeNext(frame, "ana:frame", frameStudent, null, null, frameSujet, null, null, a); - - - //**************************************************************** - //** Insère les attributs des points dans les node de l'analyse ** - //**************************************************************** - frame.getAttributs().put("point", String.valueOf(outils.getPointsClass()-pointDebut)); - frame.getAttributs().put("pointTotal", String.valueOf(outils.getPointTotal()-pointTotalDebut)); - nodframes.getNodes().add(frame); - } - } - //**************************************************************** - //** Insère les attributs des points dans les node de l'analyse ** - //**************************************************************** - nodframes.getAttributs().put("pointgagner",String.valueOf(outils.getPointsClass())); - nodframes.getAttributs().put("pointtotal",String.valueOf(outils.getPointTotal())); - nodframes.getAttributs().put("proportioncorrect",String.valueOf(outils.getProportionCorrect())); - nodframes.setClose(true); - return nodframes; - - } - - /** - * Analyse du node sections - * @param nodStudentSections - * @param nodSujetSections - * @param a - * @param nodmenu - * @return - */ - private static node analyseLesSections(node nodStudentSections, node nodSujetSections, Run a, node nodmenu) { - node nodsections = new node(); - nodsections.setNomElt("sections"); - nodsections.setAttributs(nodSujetSections.getAttributs()); //ajoute tous les attributs du sujet - nodsections.setContenu(nodSujetSections.getContenu()); //ajoute le commentaire du sujet - - //ajoute l'identifiant pour le menu - if(a.retourneFirstNodeByNameAttributValue(nodmenu, "item", "name", "sections")!=null) { - nodsections.getAttributs().put("id", a.retourneFirstNodeByNameAttributValue(nodmenu, "item", "name", "sections").getAttributs().get("id")); - } - - //initialise les points - outils.initiliseLesPoints(); - for(int i = 0 ; i < nodSujetSections.getNodes().size(); i++) { //niveau 1 - if(nodSujetSections.getNodes().get(i).getNomElt().equals("text:section")) { - int pointDebut = outils.getPointsClass(); - int pointTotalDebut = outils.getPointTotal(); - node sectionSujet = nodSujetSections.getNodes().get(i); - String nomDeLaSection = outils.withoutCodeAndPoint(sectionSujet.getAttributs().get("text:name")); - - node section = new node(); - section.setNomElt("section"); - section.getAttributs().put("namesection", nomDeLaSection); - - if(nodSujetSections.getNodes().get(i).getAttributs().get("titre")!=null) section.getAttributs().put("titre", nodSujetSections.getNodes().get(i).getAttributs().get("titre")); - - node sectionStudent = a.retourneFirstNodeByNameAttributValue(nodStudentSections, "text:section", "text:name", nomDeLaSection); - - // analyse les attributs du node - section = analyseLesAttributEtContenuDuNode(sectionStudent, sectionSujet, section, "ana:section",sectionSujet.getNomElt()); - - // les enfants du premier niveau du node - for(int j = 0 ; j < sectionSujet.getNodes().size();j++ ) { //niveau 2 - - node nodSujet = sectionSujet.getNodes().get(j); - String nameNode = nodSujet.getNomElt(); - node nodStudent = null; - - if(sectionStudent!=null) nodStudent = rechercherUnNodeStudent.rechercheLeNodeEnCascade(nameNode,nodSujet,null,null,sectionStudent,a); - - //insère un saut si titre pas vide et saut=true - section=addNodeSautTitre(nodSujet, section); - - - // analyse attribut et contenu des enfants du premier niveau - section = analyseLesAttributEtContenuDuNode(nodStudent, nodSujet, section, "ana:section",nameNode); - - - for(int k = 0 ; k < nodSujet.getNodes().size();k++) { //niveau 3 - node nod2Sujet = nodSujet.getNodes().get(k); - String nameNode2 = nod2Sujet.getNomElt(); - node nod2Student = null; - - if(sectionStudent!=null) nod2Student = rechercherUnNodeStudent.rechercheLeNodeEnCascade(nameNode2,nod2Sujet,null,sectionStudent,nodStudent,a); - - //insère un saut si titre pas vide et saut=true - section=addNodeSautTitre(nod2Sujet, section); - - // analyse attribut et contenu des enfants du second niveau - section = analyseLesAttributEtContenuDuNode(nod2Student, nod2Sujet, section, "ana:section",nameNode2 ); - - - for(int l = 0 ; l < nod2Sujet.getNodes().size();l++) { //niveau 4 - node nod3Sujet = nod2Sujet.getNodes().get(l); - String nameNode3 = nod3Sujet.getNomElt(); - node nod3Student = null; - - if(sectionStudent!=null) nod3Student = rechercherUnNodeStudent.rechercheLeNodeEnCascade(nameNode3,nod3Sujet,sectionStudent,nodStudent,nod2Student,a); - - //insère un saut si titre pas vide et saut=true - section=addNodeSautTitre(nod3Sujet, section); - - // analyse attribut et contenu des enfants du second niveau - section = analyseLesAttributEtContenuDuNode(nod3Student, nod3Sujet, section, "ana:section", nameNode3); - - - for(int m = 0 ; m < nod3Sujet.getNodes().size();m++) { //niveau 5 - node nod4Sujet = nod3Sujet.getNodes().get(m); - String nameNode4 = nod4Sujet.getNomElt(); - node nod4Student = null; - - if(sectionStudent!=null) nod4Student = rechercherUnNodeStudent.rechercheLeNodeEnCascade(nameNode4,nod4Sujet,nodStudent,nod2Student,nod3Student,a); - - //insère un saut si titre pas vide et saut=true - section=addNodeSautTitre(nod4Sujet, section); - - // analyse attribut et contenu des enfants du second niveau - section = analyseLesAttributEtContenuDuNode(nod4Student, nod4Sujet, section, "ana:section", nameNode4); - - } - - - } - - } - - } - - section.getAttributs().put("point", String.valueOf(outils.getPointsClass()-pointDebut)); - section.getAttributs().put("pointTotal", String.valueOf(outils.getPointTotal()-pointTotalDebut)); - nodsections.getNodes().add(section); - - - } - } - - nodsections.getAttributs().put("pointgagner",String.valueOf(outils.getPointsClass())); - nodsections.getAttributs().put("pointtotal",String.valueOf(outils.getPointTotal())); - nodsections.getAttributs().put("proportioncorrect",String.valueOf(outils.getProportionCorrect())); - nodsections.setClose(true); - return nodsections; - - } - - - /** - * Analyse du node sections - * @param nodStudentSections - * @param nodSujetSections - * @param a - * @param nodmenu - * @return - */ - private static node analyseLesTableaux(node nodStudentTableaux, node nodSujetTableaux, Run a, node nodmenu) { - node nodtableaux = new node(); - nodtableaux.setNomElt("tableaux"); - nodtableaux.setAttributs(nodSujetTableaux.getAttributs()); //ajoute tous les attributs du sujet - nodtableaux.setContenu(nodSujetTableaux.getContenu()); //ajoute le commentaire du sujet - - //ajoute l'identifiant pour le menu - if(a.retourneFirstNodeByNameAttributValue(nodmenu, "item", "name", "tableau")!=null) { - nodtableaux.getAttributs().put("id", a.retourneFirstNodeByNameAttributValue(nodmenu, "item", "name", "tableau").getAttributs().get("id")); - } - - //initialise les points - outils.initiliseLesPoints(); - for(int i = 0 ; i < nodSujetTableaux.getNodes().size(); i++) { //niveau 1 - if(nodSujetTableaux.getNodes().get(i).getNomElt().equals("table:table")) { - int pointDebut = outils.getPointsClass(); - int pointTotalDebut = outils.getPointTotal(); - node tableSujet = nodSujetTableaux.getNodes().get(i); - String nomDeLaTable = outils.withoutCodeAndPoint(tableSujet.getAttributs().get("table:name")); - - node tableau = new node(); - tableau.setNomElt("tableau"); - tableau.getAttributs().put("nametableau", nomDeLaTable); - - if(nodSujetTableaux.getNodes().get(i).getAttributs().get("titre")!=null) tableau.getAttributs().put("titre", nodSujetTableaux.getNodes().get(i).getAttributs().get("titre")); - - node tableauStudent = a.retourneFirstNodeByNameAttributValue(nodStudentTableaux, "table:table", "table:name", nomDeLaTable); - - // analyse les attributs du node - tableau = analyseLesAttributEtContenuDuNode(tableauStudent, tableSujet, tableau, "ana:tableau",tableSujet.getNomElt()); - - // les enfants du premier niveau du node - for(int j = 0 ; j < tableSujet.getNodes().size();j++ ) { //niveau 2 - - node nodSujet = tableSujet.getNodes().get(j); - String nameNode = nodSujet.getNomElt(); - node nodStudent = null; - - if(tableauStudent!=null) nodStudent = rechercherUnNodeStudent.rechercheLeNodeEnCascade(nameNode,nodSujet,null,null,tableauStudent,a); - - //insère un saut si titre pas vide et saut=true - tableau=addNodeSautTitre(nodSujet, tableau); - - - // analyse attribut et contenu des enfants du premier niveau - tableau = analyseLesAttributEtContenuDuNode(nodStudent, nodSujet, tableau, "ana:tableau",nameNode); - - - for(int k = 0 ; k < nodSujet.getNodes().size();k++) { //niveau 3 - node nod2Sujet = nodSujet.getNodes().get(k); - String nameNode2 = nod2Sujet.getNomElt(); - node nod2Student = null; - - if(tableauStudent!=null) nod2Student = rechercherUnNodeStudent.rechercheLeNodeEnCascade(nameNode2,nod2Sujet,null,tableauStudent,nodStudent,a); - - //insère un saut si titre pas vide et saut=true - tableau=addNodeSautTitre(nod2Sujet, tableau); - - // analyse attribut et contenu des enfants du second niveau - tableau = analyseLesAttributEtContenuDuNode(nod2Student, nod2Sujet, tableau, "ana:tableau",nameNode2 ); - - - for(int l = 0 ; l < nod2Sujet.getNodes().size();l++) { //niveau 4 - node nod3Sujet = nod2Sujet.getNodes().get(l); - String nameNode3 = nod3Sujet.getNomElt(); - node nod3Student = null; - - if(tableauStudent!=null) nod3Student = rechercherUnNodeStudent.rechercheLeNodeEnCascade(nameNode3,nod3Sujet,tableauStudent,nodStudent,nod2Student,a); - - //insère un saut si titre pas vide et saut=true - tableau=addNodeSautTitre(nod3Sujet, tableau); - - // analyse attribut et contenu des enfants du second niveau - tableau = analyseLesAttributEtContenuDuNode(nod3Student, nod3Sujet, tableau, "ana:tableau", nameNode3); - - - for(int m = 0 ; m < nod3Sujet.getNodes().size();m++) { //niveau 5 - node nod4Sujet = nod3Sujet.getNodes().get(m); - String nameNode4 = nod4Sujet.getNomElt(); - node nod4Student = null; - - if(tableauStudent!=null) nod4Student = rechercherUnNodeStudent.rechercheLeNodeEnCascade(nameNode4,nod4Sujet,nodStudent,nod2Student,nod3Student,a); - - //insère un saut si titre pas vide et saut=true - tableau=addNodeSautTitre(nod4Sujet, tableau); - - // analyse attribut et contenu des enfants du second niveau - tableau = analyseLesAttributEtContenuDuNode(nod4Student, nod4Sujet, tableau, "ana:tableau", nameNode4); - } - } - } - } - - tableau.getAttributs().put("point", String.valueOf(outils.getPointsClass()-pointDebut)); - tableau.getAttributs().put("pointTotal", String.valueOf(outils.getPointTotal()-pointTotalDebut)); - nodtableaux.getNodes().add(tableau); - } - } - - nodtableaux.getAttributs().put("pointgagner",String.valueOf(outils.getPointsClass())); - nodtableaux.getAttributs().put("pointtotal",String.valueOf(outils.getPointTotal())); - nodtableaux.getAttributs().put("proportioncorrect",String.valueOf(outils.getProportionCorrect())); - nodtableaux.setClose(true); - return nodtableaux; - - } - - - - - /** - * Analyse du node bibliographies. - * @param nodStudentBiblio - * @param nodSujetBiblio - * @param a - * @param nodmenu - * @return - */ - private static node analyseLaBiblio(node nodStudentBiblio, node nodSujetBiblio, Run a, node nodmenu) { - node nodbiblio = new node(); - nodbiblio.setNomElt("bibliographies"); - nodbiblio.setAttributs(nodSujetBiblio.getAttributs());//ajoute tous les attributs du sujet - nodbiblio.setContenu(nodSujetBiblio.getContenu());//ajoute le commentaire du sujet - - //ajoute l'identifiant pour le menu - if(a.retourneFirstNodeByNameAttributValue(nodmenu, "item", "name", "biblio")!=null) { - nodbiblio.getAttributs().put("id", a.retourneFirstNodeByNameAttributValue(nodmenu, "item", "name", "biblio").getAttributs().get("id")); - } - - //initialise les points - outils.initiliseLesPoints(); - - // node biblio - node biblio = new node(); - - for(int i = 0 ; i < nodSujetBiblio.getNodes().size(); i++) { - if(nodSujetBiblio.getNodes().get(i).getNomElt().equals("text:bibliography")) { - int pointDebut = outils.getPointsClass(); - int pointTotalDebut = outils.getPointTotal(); - String nomDeLaBiblio = outils.withoutCodeAndPoint(nodSujetBiblio.getNodes().get(i).getAttributs().get("text:name")); - - biblio.setNomElt("biblio"); - biblio.getAttributs().put("namebiblio", nomDeLaBiblio); - if(nodSujetBiblio.getNodes().get(i).getAttributs().get("titre")!=null) biblio.getAttributs().put("titre", nodSujetBiblio.getNodes().get(i).getAttributs().get("titre")); - - String TitreTable = outils.withoutCodeAndPoint(nodSujetBiblio.getNodes().get(i).retourneFirstEnfantsByName("text:index-title").retourneLesContenusEnfants("")); - - node nodSujet = a.retourneFirstNodeParagrapheContain(a.retourneNames(nodSujetBiblio, "text:index-body"), TitreTable); - node nodStudent = a.retourneFirstNodeParagrapheContain(a.retourneNames(nodStudentBiblio, "text:index-body"), TitreTable); - - biblio = analyseLesAttributEtContenuDuNode(nodStudent, nodSujet, biblio, "ana:biblio", nodSujet.getNomElt()); - - for(int j =0 ; j < nodSujet.getNodes().size();j++) { - if(nodStudent!=null) { - if(jtablematieres. - * @param nodStudentTableM - * @param nodSujetTableM - * @param a - * @param nodmenu - * @return - */ - private static node analyseLesTablesMatieres(node nodStudentTableM, node nodSujetTableM, Run a, node nodmenu) { - node nodTablesMs = new node(); - nodTablesMs.setNomElt("tablematieres"); - nodTablesMs.setAttributs(nodSujetTableM.getAttributs());//ajoute tous les attributs du sujet - nodTablesMs.setContenu(nodSujetTableM.getContenu());//ajoute le commentaire du sujet - - //ajoute l'identifiant pour le menu - if(a.retourneFirstNodeByNameAttributValue(nodmenu, "item", "name", "tablematieres")!=null) { - nodTablesMs.getAttributs().put("id", a.retourneFirstNodeByNameAttributValue(nodmenu, "item", "name", "tablematieres").getAttributs().get("id")); - } - - //initialise les points - outils.initiliseLesPoints(); - - - for(int i = 0 ; i < nodSujetTableM.getNodes().size(); i++) { - if(nodSujetTableM.getNodes().get(i).getNomElt().equals("text:table-of-content")) { - node table = new node(); - table.setNomElt("tablematiere"); - if(nodSujetTableM.getNodes().get(i).getAttributs().get("titre")!=null) { - String titre = nodSujetTableM.getNodes().get(i).getAttributs().get("titre"); - if(!titre.isEmpty()) table.getAttributs().put("titre", titre); - } - - - int pointDebut = outils.getPointsClass(); - int pointTotalDebut = outils.getPointTotal(); - String TitreTable = outils.withoutCodeAndPoint(nodSujetTableM.getNodes().get(i).retourneFirstEnfantsByName("text:index-title").retourneLesContenusEnfants("")); - - node nodSujet = a.retourneFirstNodeParagrapheContain(a.retourneNames(nodSujetTableM, "text:index-body"), TitreTable); - node nodStudent = a.retourneFirstNodeParagrapheContain(a.retourneNames(nodStudentTableM, "text:index-body"), TitreTable); - - table = analyseLesAttributEtContenuDuNode(nodStudent, nodSujet, table, "ana:tablematiere", nodSujet.getNomElt()); - - for(int j =0 ; j < nodSujet.getNodes().size();j++) { - if(nodStudent!=null) { - if(jtableillustrations. - * @param nodStudentTableI - * @param nodSujetTableI - * @param a - * @param nodmenu - * @return - */ - private static node analyseLesTablesIllustrations(node nodStudentTableI, node nodSujetTableI, Run a, node nodmenu) { - node nodTablesMs = new node(); - nodTablesMs.setNomElt("tableillustrations"); - nodTablesMs.setAttributs(nodSujetTableI.getAttributs());//ajoute tous les attributs du sujet - nodTablesMs.setContenu(nodSujetTableI.getContenu());//ajoute le commentaire du sujet - - //ajoute l'identifiant pour le menu - if(a.retourneFirstNodeByNameAttributValue(nodmenu, "item", "name", "tableillustrations")!=null) { - nodTablesMs.getAttributs().put("id", a.retourneFirstNodeByNameAttributValue(nodmenu, "item", "name", "tableillustrations").getAttributs().get("id")); - } - - //initialise les points - outils.initiliseLesPoints(); - - - for(int i = 0 ; i < nodSujetTableI.getNodes().size(); i++) { - if(nodSujetTableI.getNodes().get(i).getNomElt().equals("text:illustration-index")) { - node table = new node(); - table.setNomElt("tableillustrations"); - if(nodSujetTableI.getNodes().get(i).getAttributs().get("titre")!=null) { - String titre = nodSujetTableI.getNodes().get(i).getAttributs().get("titre"); - if(!titre.isEmpty()) table.getAttributs().put("titre", titre); - } - - - int pointDebut = outils.getPointsClass(); - int pointTotalDebut = outils.getPointTotal(); - String TitreTable = outils.withoutCodeAndPoint(nodSujetTableI.getNodes().get(i).retourneFirstEnfantsByName("text:index-title").retourneLesContenusEnfants("")); - - node nodSujet = a.retourneFirstNodeParagrapheContain(a.retourneNames(nodSujetTableI, "text:index-body"), TitreTable); - node nodStudent = a.retourneFirstNodeParagrapheContain(a.retourneNames(nodStudentTableI, "text:index-body"), TitreTable); - - table = analyseLesAttributEtContenuDuNode(nodStudent, nodSujet, table, "ana:tableillustration", nodSujet.getNomElt()); - - for(int j =0 ; j < nodSujet.getNodes().size();j++) { - if(nodStudent!=null) { - if(j - * La structure de l'étudiant est comparé avec la structure du sujet.
- * Le node d'analyse est retourné.
- * Le nom du node analysé pour cette partie est puis .
- *
- * @param nodStudentS : node de la structure de l'étudiant. - * @param nodSujetS : node de la structure du sujet. - * @param a : Objet de la class cXML - * @param nodmenu : node menu. - * @param nodSujetParagraphs : node contenant l'ensemble des styles de paragraphe du sujet. - * @param nodStudentParagraphs : node contenant l'ensemble des styles de paragraphe de l'étudiant. - * @return : le node d'analyse de la structure. - */ - private static node analyseStructurePage(node nodStudentS, node nodSujetS, Run a, node nodmenu, node nodSujetParagraphs, node nodStudentParagraphs) { - node nodSpages = new node(); - nodSpages.setNomElt("structurepage"); - nodSpages.setAttributs(nodSujetS.getAttributs()); - nodSpages.setContenu(nodSujetS.getContenu()); //ajoute le commentaire du sujet - - //*************************************** - //** Ajoute l'identifiant pour le menu ** - //*************************************** - if(a.retourneFirstNodeByNameAttributValue(nodmenu, "item", "name", "structurepage")!=null) { - nodSpages.getAttributs().put("id", a.retourneFirstNodeByNameAttributValue(nodmenu, "item", "name", "structurepage").getAttributs().get("id")); - } - - //*************************** - //** initialise les points ** - //*************************** - outils.initiliseLesPoints(); - - //******************************************************** - //** Parcours les nodes enfants du node ** - //******************************************************** - for(int i = 0 ; i < nodSujetS.getNodes().size(); i++) { - if(nodSujetS.getNodes().get(i).getNomElt().equals("page")) { - int pointDebut = outils.getPointsClass(); - int pointTotalDebut = outils.getPointTotal(); - String nomDeLaPage = outils.withoutCodeAndPoint(nodSujetS.getNodes().get(i).getAttributs().get("style:master-page-name")); - if(nomDeLaPage==null) nomDeLaPage="Défaut"; - String numeroabsolue = outils.withoutCodeAndPoint(nodSujetS.getNodes().get(i).getAttributs().get("numeroabsolue")); - node page = new node(); - page.setNomElt("page"); - page.getAttributs().put("namepage", nomDeLaPage); - page.getAttributs().put("numeroabsolue", numeroabsolue); - - if(nodSujetS.getNodes().size()>0) if(nodSujetS.getNodes().get(i).getAttributs().get("titre")!=null) page.getAttributs().put("titre", nodSujetS.getNodes().get(i).getAttributs().get("titre")); - - node pageStudent = a.retourneFirstNodeByNameAttributValue(nodStudentS, "page", "numeroabsolue", numeroabsolue); - node pageSujet = nodSujetS.getNodes().get(i); - - //******************************************** - //** analyse les attributs des nodes ** - //******************************************** - page = analyseLesAttributEtContenuDuNode(pageStudent, pageSujet, page, "ana:page",pageSujet.getNomElt()); - - //************************************ - //** analyse tous les nodes enfants ** - //************************************ - page = analyseLesNodesEnfants.nodeNext(page, "ana:page", pageStudent, null, null, pageSujet, nodSujetParagraphs, nodStudentParagraphs, a); - - //**************************************************************** - //** Insère les attributs des points dans les node de l'analyse ** - //**************************************************************** - page.getAttributs().put("point", String.valueOf(outils.getPointsClass()-pointDebut)); - page.getAttributs().put("pointTotal", String.valueOf(outils.getPointTotal()-pointTotalDebut)); - nodSpages.getNodes().add(page); - - - } - } - - //**************************************************************** - //** Insère les attributs des points dans les node de l'analyse ** - //**************************************************************** - nodSpages.getAttributs().put("pointgagner",String.valueOf(outils.getPointsClass())); - nodSpages.getAttributs().put("pointtotal",String.valueOf(outils.getPointTotal())); - nodSpages.getAttributs().put("proportioncorrect",String.valueOf(outils.getProportionCorrect())); - nodSpages.setClose(true); - return nodSpages; - - } - /** * Analyse tous les attributs et les contenus d'un node.
* Les attributs et les contenus doivent posséder la carcatère ‽ ou ‼.
@@ -2884,30 +1874,26 @@ public class meptl { * @return */ public static node addNodeSautTitre(node nodSujet, node nodanalyse) { - if(nodSujet.getAttributs().get("saut")!=null) { - if(Boolean.valueOf(nodSujet.getAttributs().get("saut"))) { - if(nodSujet.getAttributs().get("titre")!=null) { - node N = new node(); - N.setNomElt("saut"); - N.getAttributs().put("titre", nodSujet.getAttributs().get("titre")); - N.setClose(true); - nodanalyse.getNodes().add(N); - } - if(nodSujet.getAttributs().get("titre2")!=null) { - node N = new node(); - N.setNomElt("saut"); - N.getAttributs().put("titre2", nodSujet.getAttributs().get("titre2")); - N.setClose(true); - nodanalyse.getNodes().add(N); - } - if(nodSujet.getAttributs().get("titre3")!=null) { - node N = new node(); - N.setNomElt("saut"); - N.getAttributs().put("titre3", nodSujet.getAttributs().get("titre3")); - N.setClose(true); - nodanalyse.getNodes().add(N); - } - } + if(nodSujet.getAttributs().get("titre")!=null) { + node N = new node(); + N.setNomElt("saut"); + N.getAttributs().put("titre", nodSujet.getAttributs().get("titre")); + N.setClose(true); + nodanalyse.getNodes().add(N); + } + if(nodSujet.getAttributs().get("titre2")!=null) { + node N = new node(); + N.setNomElt("saut"); + N.getAttributs().put("titre2", nodSujet.getAttributs().get("titre2")); + N.setClose(true); + nodanalyse.getNodes().add(N); + } + if(nodSujet.getAttributs().get("titre3")!=null) { + node N = new node(); + N.setNomElt("saut"); + N.getAttributs().put("titre3", nodSujet.getAttributs().get("titre3")); + N.setClose(true); + nodanalyse.getNodes().add(N); } return nodanalyse; @@ -3679,6 +2665,15 @@ public class meptl { return retour; } + /** + * + * @param retour + * @param nodStudent + * @param nameCreator + * @param point + * @param nameElt + * @return + */ private static node evaluNameCreator(node retour, node nodStudent, String nameCreator, String point, String nameElt) { node item = null; if(nodStudent!=null) { @@ -3691,6 +2686,16 @@ public class meptl { return retour; } + + /** + * + * @param retour + * @param nodStudent + * @param nameCreator + * @param point + * @param nameElt + * @return + */ private static node analyseNameInitialCreator(node retour, node nodStudent, String nameCreator, String point, String nameElt) { node item = null; if(nodStudent!=null) {