analyseWriter/src/MEPTL/meptl.java

5516 lines
280 KiB
Java

package MEPTL;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.text.DateFormat;
import java.text.DecimalFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.time.format.FormatStyle;
import java.util.ArrayList;
import java.util.Date;
import java.util.Dictionary;
import java.util.Enumeration;
import java.util.Hashtable;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import javax.xml.parsers.ParserConfigurationException;
import org.xml.sax.SAXException;
import cXML.Run;
import cXML.Run.UserStatus;
import cXML.node;
import net.lingala.zip4j.exception.ZipException;
/**
*
* @author pablo rodriguez
*
*
*/
public class meptl {
static DecimalFormat df = new DecimalFormat("###.##");
static String patch ="";
static double progression = 1.0;
/**
* Démarrage de l'application.<br>
* <br>
* @param args
* @throws ParserConfigurationException
* @throws SAXException
* @throws IOException
* @throws CloneNotSupportedException
* @throws InterruptedException
*/
public static void main(String[] args) throws ParserConfigurationException, SAXException, IOException, CloneNotSupportedException, InterruptedException {
System.getProperty("file.encoding","UTF-8");
node nodeCSV = null; //Permet de convertir le fichier contenant la liste des étudiants en node
patch = System.getProperty("user.dir");
// patch = "C:/Users/pabr6/OneDrive/Desktop/Nouveau dossier";
// test
//les commandes
new commandes(args,patch);
//Lancement des lectures des dossiers
Run a = new Run(patch,commandes.Profil);
//Chargement du contenu du nouveau logo
if(commandes.newLogo && !commandes.nameSVG.isEmpty()) {
commandes.contenuFichierSVG= chargementFichierSVG(a,commandes.nameSVG);
}
//chargement du node sujet (fichier d'analyse)
//La méthode verificationFichier Analyse permet de détecter des erreurs dans le fichier d'analyse
node nodeSujet = new node();
if(!commandes.ecritCode && commandes.analyse) {
nodeSujet = chargementsujet(a, commandes.nameSujet);
commandes.culture = nodeSujet.retourneFirstEnfantsByName("setting").getAttributs().get("culture"); //récupère la culture de l'utilisateur
new verificationFichierAnalyse(nodeSujet);
if(verificationFichierAnalyse.erreur==true) verificationFichierAnalyse.clotureWithErrorInanalyzeFile();
//a.ecritureNodeEnXML(nodeSujet, "sujet","",false); // ecriture du node sujet
if(commandes.ecritSujet) {
a.ecritureNodeEnXML(nodeSujet, "sujet","",false); // ecriture du node sujet
System.out.println();
System.out.println("\tWriting of the \"sujet.xml\" file completed.");
commandes.clotureApplication();
System.exit(0);
}
//chargement du node translation qui se trouve dans le node setting
outils.chargeTraduction(nodeSujet.retourneFirstEnfantsByName("translation"));
// Ajoute les nouvelles tolérances du nombre de caractère et du texte pour la recherche et la comparaison des textes.
if(nodeSujet.containElementByName("text:similarity")) {
node similarity = nodeSujet.retourneFirstEnfantsByName("text:similarity");
if(similarity.getAttributs().get("tolerance_characters")!=null) commandes.tolerance_characters = Integer.valueOf(similarity.getAttributs().get("tolerance_characters"));
if(similarity.getAttributs().get("tolerance_text")!=null) commandes.tolerance_text = Double.valueOf(similarity.getAttributs().get("tolerance_text"));
}
// place le nombre de match limite et le nombre minimal de modification dans le node verification
if(nodeSujet.containElementByName("plagiarism")) {
node plagiarism = nodeSujet.retourneFirstEnfantsByName("plagiarism");
if(plagiarism.getAttributs().get("number_match") != null) commandes.number_match = Integer.valueOf(plagiarism.getAttributs().get("number_match"));
if(plagiarism.getAttributs().get("mini_number_modification") != null) commandes.mini_number_modification = Integer.valueOf(plagiarism.getAttributs().get("mini_number_modification"));
if(plagiarism.getAttributs().get("nombres_modifications_simultané_maxi") != null) commandes.nombres_modifications_simultané_maxi = Integer.valueOf(plagiarism.getAttributs().get("nombres_modifications_simultané_maxi"));
}
}
//chargement et verification du CVS fourni
if(commandes.fourniCSV) nodeCSV = chargementFichierCSV(a, commandes.nameCSV);
// vérification des historiques
node verif = new node();
if(commandes.verifHisto || commandes.verifHisto2) {
int nbFichierWriter = a.getLectDossiers().getEC().getListeContentWriter().size();
node verification = new node();
verification.setNomElt("verification");
verification.getAttributs().put("nombre_fichier", String.valueOf(a.getLectDossiers().getEC().getListeFichierodt().size()));
for(int i = 0 ; i < nbFichierWriter ; i++) {
node nod = a.XMLContent(a.getLectDossiers().getEC().getListeContentWriter().get(i));
node nodStudent = LectureFichierEtudiantPourVerification(nod,a,i);
verification.getNodes().add(nodStudent);
}
//a.ecritureNodeEnXML(verification, "VerificationHistorique","",false); //écriture du node de l'étudiant
verif = verificationHistorique(verification, a); // vérification des correspondances entre les fichiers
a.ecritureNodeEnXML(verif, "Verif",commandes.pathDestination,commandes.fourniDossierDestination); //écriture du node de vérification
if(!commandes.analyse) {commandes.clotureApplication();System.exit(0);}
}
//nombre de fichier writer à analyser
int nbFichierWriter = a.getLectDossiers().getEC().getListeContentWriter().size();
System.getProperty("file.encoding","UTF-8");
//ensemble des analyses
node ensembleanalyse = new node();
ensembleanalyse.setNomElt("analyses");
//Initialisation du dictionnaire de traduction
outils.initaliseTraduction();
for(int i = 0 ; i < nbFichierWriter ; i++) {
// Ne prends pas en compte le dossier destination créé par la commande -dest
// Si pas d'analyse alors le nom doit contenir le caractère $ dans le nom du dossier.
if(commandes.fourniDossierDestination)if(a.getLectDossiers().getEC().getListeNomDossier().get(i).equals(commandes.pathDestination)) continue;
//Chargement du format (content) et transformation en node pour l'application
node nod = a.XMLContent(a.getLectDossiers().getEC().getListeContentWriter().get(i));
node nodStudent = LectureFichierEtudiantSousFormeDeNode(nod,a,i);
//a.ecritureNodeEnXML(nodStudent, a.getLectDossiers().getEC().getListeNomDossier().get(i),"",false); //écriture du node de l'étudiant
// ecriture d'une fichier d'analyse.
// commande -write
if(commandes.ecritCode && ! commandes.verifHisto && !commandes.analyse) {
node nodSujet = nodePourEcritureSujet(nodStudent,a,i);
nodSujet = addSetting(nodSujet); // ajoute le node setting et translation
a.ecritureNodeEnXML(nodSujet, a.getLectDossiers().getEC().getListeNomDossier().get(i),"",false);
}
// analyse des fichiers student
if(commandes.analyse) {
node init = InitialisationAvantAnalyse(nodeSujet);
if(!Boolean.valueOf(init.getAttributs().get("erreur"))) {
node ana = analyse(nodStudent, nodeSujet, i, a);
// a.ecritureNodeEnXML(ana, "nodana"+ana.retourneFirstEnfantsByName("ouverture").getAttributs().get("dossier"),"",false); //écriture du node analyse de l'étudiant
// création des feedbacks avec des tailles définies
if(!commandes.sansFeeback) if(!commandes.zipfeedback) feedback(ana, verif); //classique directement dans le répertoire
if(!commandes.sansFeeback) if(commandes.zipfeedback) { // Dans une archive pour Moodle
try {
long size = 48000000; //valeur par défaut
String nameZip = "feedbackMoodle"; //nom zip par défaut
node zip = nodeSujet.retourneFirstEnfantsByName("zip");
if(zip!=null) {
if(zip.getAttributs().get("size")!=null)size = Long.valueOf(zip.getAttributs().get("size"));
if(zip.getAttributs().get("name")!=null)nameZip = zip.getAttributs().get("name");
}
a.AddStreamToZip(feedbackForZip(ana, verif), retourneLeNomDuFeedback(a.getLectDossiers().getEC().getListeNomFichierFeedBack().get(i),ana, verif),size,nameZip);
} catch (ZipException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
if(commandes.ecritNoteCSV) ensembleanalyse.addNode(ana);
messageSystem(ana);
}else {
}
}
}
//exportation au format CSV
if(commandes.ecritNoteCSV && !commandes.fourniCSV) {
if(!commandes.verifHisto2) ecritureCSV(ensembleanalyse);
if(commandes.verifHisto2) ecritureCSV(ensembleanalyse,verif,a,nodeSujet.retourneFirstEnfantsByName("setting"));
//a.ecritureNodeEnXML(ensembleanalyse, "ensembleAnalyse"); //écriture du node de l'étudiant
}
if(commandes.ecritNoteCSV && commandes.fourniCSV) {
ecritureCSV(ensembleanalyse,verif,a,nodeCSV, nodeSujet.retourneFirstEnfantsByName("setting"));
//a.ecritureNodeEnXML(ensembleanalyse, "ensembleAnalyse"); //écriture du node de l'étudiant
}
//bye bye
commandes.clotureApplication();
}
/**
* Lecture du fichier Student pour vérification.<br>
* <br>
* @param nod node
* @param a
* @param i
* @return
*/
private static node LectureFichierEtudiantPourVerification(node nod, Run a, Integer i) {
node fichier = new node();
fichier.setNomElt("fichier");
fichier.getAttributs().put("filename", a.getLectDossiers().getEC().getListeFichierodt().get(i));
fichier.getAttributs().put("dossier", a.getLectDossiers().getEC().getListeNomDossier().get(i));
node nodmeta = nod.retourneFirstEnfantsByName("office:meta");
fichier.getAttributs().put("producteur", nodmeta.retourneFirstEnfantsByName("meta:generator").getContenu());
fichier.getAttributs().put("dateModification", nodmeta.retourneFirstEnfantsByName("dc:date").getContenu());
fichier.getAttributs().put("dureeEdition", nodmeta.retourneFirstEnfantsByName("meta:editing-duration").getContenu());
fichier.getNodes().add(nodmeta);
node nodhistorique = new node();
int nbrModif = nod.retourneFirstEnfantsByName("text:tracked-changes").getNodes().size();
nodhistorique.setNomElt("historique");
nodhistorique.getAttributs().put("nbrModif", String.valueOf(nbrModif));
nodhistorique.getNodes().addAll(a.retourneNames(a.NodeFirstName(nod, "office:text"), "text:tracked-changes"));
fichier.getNodes().add(nodhistorique);
return fichier;
}
/**
* Lecture du fichier Writer des étudiants et fournir tous les nodes de la lecture dans un node nommé "fichier".
* @param nod Le node Writer de l'étudiant.
* @param a Objet de la class Run package cXML
* @param i Index de l'étudiant dans la liste EC de l'objet a.
* @return le node contenant tous les nodes de la lectures.
* @throws IOException Input Output exception file.
*/
@SuppressWarnings("unchecked")
private static node LectureFichierEtudiantSousFormeDeNode(node nod, Run a, Integer i) throws IOException {
node nodecontent = nod.retourneFirstEnfantsByName("office:document-content");
node nodestyle = nod.retourneFirstEnfantsByName("office:document-styles");
node nodbody = a.NodeFirstName(nodecontent, "office:text");
node nodmeta = nod.retourneFirstEnfantsByName("office:meta");
node nodstyle = new node();
nodstyle.setNomElt("styles");
nodstyle.addNode(a.NodeFirstName(nodecontent,"office:automatic-styles"));
nodstyle.addNode(a.NodeFirstName(nodestyle, "office:automatic-styles"));
nodstyle.addNode(a.NodeFirstName(nodestyle, "office:styles"));
nodstyle.addNode(a.NodeFirstName(nodestyle, "office:master-styles"));
// Le node des styles de page
node nodstylepage = new node();
nodstylepage.setNomElt("style:page");
nodstylepage.addNode(a.retourneNames(nodstyle, "style:master-page"));
for(int j = 0 ; j < nodstylepage.getNodes().size();j++) {
if(nodstylepage.getNodes().get(j).getAttributs().get("style:page-layout-name")!=null) {
node nod1 = a.retourneFirstNodeByNameAttributValue(nodstyle, "style:page-layout", "style:name", nodstylepage.getNodes().get(j).getAttributs().get("style:page-layout-name"));
if(nod1!=null) nodstylepage.getNodes().get(j).addNode(nod1);
}
}
// le node des styles de paragraphe
node nodstyleparagraphe = new node();
nodstyleparagraphe.setNomElt("style:paragraph");
nodstyleparagraphe.addNode(a.NodesAyantAttribut(nodstyle, "style:family","paragraph"));
nodstyleparagraphe.addNode(a.NodesAyantAttribut(nodstyle, "style:family","text"));
// le node des styles de formatage direct
node nodstyleformatage = new node();
nodstyleformatage.setNomElt("style:formatagedirect");
nodstyleformatage.addNode(a.NodesAyantAttribut(nodstyle, "style:family","text")); //c'est redondant puisque déjà présent dans style:paragraph
//Le node numérotation des chapitres
node nodnumerochapitre = new node();
nodnumerochapitre.setNomElt("numerotationchapitre");
nodnumerochapitre.addNode(a.retourneNames(nodstyle, "text:outline-level-style"));
// le node variable de sequence
node nodsequence = new node();
nodsequence.setNomElt("sequences");
nodsequence.addNode(a.retourneNames(nodbody, "text:sequence-decl"));
// le node des frames : renomme les nodes style:style avec le nom de draw:name exemple style:styledraw:name
// si une draw:text-box contenant un attribut fo:min-height alors ajoute dans darw:farme l'attribut svg:height
node nodframe = new node();
nodframe.setNomElt("frames");
nodframe.addNode(a.retourneNames(nodbody, "draw:frame"));
for(int j = 0 ; j < nodframe.getNodes().size(); j++) {
node nodframestyle = a.retourneFirstNodeByNameAttributValue(nodstyle, "style:style", "style:name", nodframe.getNodes().get(j).getAttributs().get("draw:style-name"));
String nomObjet = nodframe.getNodes().get(j).getAttributs().get("draw:name");
if(nomObjet!=null) {
nomObjet= nomObjet.replace(" ", "_");
if(nodframestyle!=null) nodframestyle.setNomElt("style:style"+nomObjet);
}
nodframe.getNodes().get(j).getNodes().add(nodframestyle);
if(a.retourneName(nodframe.getNodes().get(j), "draw:text-box", "fo:min-height")!=null) {
nodframe.getNodes().get(j).getAttributs().put("svg:height", a.retourneName(nodframe.getNodes().get(j), "draw:text-box", "fo:min-height").getAttributs().get("fo:min-height"));
}
}
// le node section
node nodsection = new node();
nodsection.setNomElt("sections");
//nodsection.addNode(a.retourneNames(nodbody, "text:section"));
// la bibliographie
node nodbiblio = new node();
nodbiblio.setNomElt("biblio");
nodbiblio.addNode(a.retourneNames(nodbody, "text:bibliography"));
//table des matieres
node nodtable = new node();
nodtable.setNomElt("tablematieres");
// nodtable.addNode(a.retourneNames(nodbody, "text:table-of-content"));
// renomme le node text:table-of-content-source en text:table-of-content-sourceTitreIndex
ArrayList<node> A = a.retourneNames(nodbody, "text:table-of-content");
for(int j = 0 ; j<A.size(); j++) {
String titreIndex=A.get(j).retourneFirstEnfantsByName("text:index-title-template").getContenu().toLowerCase();
titreIndex = titreIndex.replace(" ", "_");
A.get(j).retourneFirstEnfantsByName("text:table-of-content-source").setNomElt("text:table-of-content-source"+titreIndex);
nodtable.getNodes().add(A.get(j));
}
//index illustration
node nodillustrations = new node();
nodillustrations.setNomElt("tableillustrations");
//nodillustrations.addNode(a.retourneNames(nodbody, "text:illustration-index")); //avant
// renomme le node text:illustration-index-source en text:illustration-index-sourceTitreIndex
A = a.retourneNames(nodbody, "text:illustration-index");
for(int j = 0 ; j<A.size(); j++) {
String titreIndex=A.get(j).retourneFirstEnfantsByName("text:index-title-template").getContenu();
titreIndex = titreIndex.replace(" ", "_");
A.get(j).retourneFirstEnfantsByName("text:illustration-index-source").setNomElt("text:illustration-index-source"+titreIndex);
nodillustrations.getNodes().add(A.get(j));
}
//historique des modifications
node nodhistorique = new node();
int nbrModif = nodbody.retourneFirstEnfantsByName("text:tracked-changes").getNodes().size();
nodhistorique.setNomElt("historique");
nodhistorique.getAttributs().put("nbrModif", String.valueOf(nbrModif));
nodhistorique.getNodes().addAll(a.retourneNames(nodbody, "text:tracked-changes"));
node nodstructure = new node();
nodstructure.setNomElt("structure");
for(int j = 0 ; j < nodbody.getNodes().size();j++) {
String nomNode = nodbody.getNodes().get(j).getNomElt();
if(nomNode.equals("draw:frame")) nodstructure.addNode(nodbody.getNodes().get(j));
if(nomNode.equals("text:p")) nodstructure.addNode(nodbody.getNodes().get(j));
if(nomNode.equals("text:h")) nodstructure.addNode(nodbody.getNodes().get(j));
if(nomNode.equals("text:table-of-content")) nodstructure.addNode(nodbody.getNodes().get(j));
if(nomNode.equals("text:list")) nodstructure.addNode(nodbody.getNodes().get(j));
if(nomNode.equals("text:illustration-index")) nodstructure.addNode(nodbody.getNodes().get(j));
if(nomNode.equals("text:bibliography")) nodstructure.addNode(nodbody.getNodes().get(j));
if(nomNode.equals("table:table")) nodstructure.addNode(nodbody.getNodes().get(j));
if(nomNode.equals("text:section")) nodstructure.addNode(nodbody.getNodes().get(j));
}
// Struture et composition du document avec les pages
// cette boucle utilise le node nodstructure
ArrayList<node> nodpage = new ArrayList<node>();
node page = new node();
page.setNomElt("page");
page.getAttributs().put("numero", "0");
page.getAttributs().put("style:master-page-name", "Standard"); // style par défaut des pages
nodpage.add(page);
int compteurpage = 1;
for(int j = 0 ; j< nodstructure.getNodes().size();j++) {
page = nodpage.get(nodpage.size()-1); // dernière page enregistrer pour insérer des enfants en bas de la boucle
// les sauts automatiques de page dans les paragraphe
if(nodstructure.getNodes().get(j).retourneEnfantsByNameExist("text:soft-page-break")) {
ArrayList<node> nods1 = a.retourneNames(nodstructure.getNodes().get(j), "text:soft-page-break");
if(nods1.size()>1) {
for(int k = 0 ; k < nods1.size();k++) {
node p = new node();
p.setNomElt("page");
p.getAttributs().put("numero", String.valueOf(compteurpage));
p.getAttributs().put("type","automatique");
p.getAttributs().put("index",String.valueOf(j));
p.getNodes().add(nods1.get(k));
nodpage.add(p);
compteurpage++;
}
page = nodpage.get(nodpage.size()-1);
continue;
}else {
node p = new node();
p.setNomElt("page");
p.getAttributs().put("numero", String.valueOf(compteurpage));
p.getAttributs().put("type","automatique");
p.getAttributs().put("index",String.valueOf(j));
p.getNodes().add(nodstructure.getNodes().get(j));
nodpage.add(p);
compteurpage++;
page = nodpage.get(nodpage.size()-1);
continue;
}
}
// les sauts manuels de page dans les paragraphes <text:p> et <text:list>
if(nodstructure.getNodes().get(j).getAttributs().get("text:style-name")!=null) {
node nod2 = a.retourneFirstNodeByNameAttributValue(nodstyle.getNodes(), "style:style", "style:name", nodstructure.getNodes().get(j).getAttributs().get("text:style-name"));
if(nod2!=null) {
if(nod2.getAttributs().get("style:master-page-name")!=null) {
node p = new node();
p.setNomElt("page");
p.getAttributs().put("numero", String.valueOf(compteurpage));
p.getAttributs().put("type","manuel");
p.getAttributs().put("index",String.valueOf(j));
p.getAttributs().put("style:master-page-name",nod2.getAttributs().get("style:master-page-name"));
p.getAttributs().put("style:name",nod2.getAttributs().get("style:name"));
node nod3 = a.retourneName(nod2.getNodes(), "style:paragraph-properties","fo:break-before");
if(nod3!=null) {
if(nod3.getAttributs().get("style:page-number")!=null) p.getAttributs().put("style:page_number", nod3.getAttributs().get("style:page-number"));
}else {
nod3 = nod2.retourneFirstEnfantsByName("style:paragraph-properties");
if(nod3!=null) if(nod3.getAttributs().get("style:page-number")!=null) {
p.getAttributs().put("style:page_number", nod3.getAttributs().get("style:page-number"));
}
}
p.getNodes().add(nodstructure.getNodes().get(j));
nodpage.add(p);
compteurpage++;
page = nodpage.get(nodpage.size()-1);
continue;
}
if(a.retourneFirstNodeByNameAttributValue(nod2.getNodes(), "style:paragraph-properties","fo:break-before","page")!=null) {
node p = new node();
p.setNomElt("page");
p.getAttributs().put("numero", String.valueOf(compteurpage));
p.getAttributs().put("type","automatique");
p.getAttributs().put("index",String.valueOf(j));
p.getNodes().add(nodstructure.getNodes().get(j));
nodpage.add(p);
compteurpage++;
page = nodpage.get(nodpage.size()-1);
continue;
}
}
}
// les sauts manuels hors paragraphe et titre
if(!nodstructure.getNodes().get(j).getNomElt().equals("text:p") && !nodstructure.getNodes().get(j).getNomElt().equals("text:h") ) {
ArrayList<node> lesparagraphes = a.retourneNames(nodstructure.getNodes().get(j).getNodes(), "text:p");
node nod2 = a.retourneName(lesparagraphes, "text:p", "text:style-name");
if(nod2!=null) {
node nod3 = a.retourneFirstNodeByNameAttributValue(nodstyle.getNodes(), "style:style", "style:name", nod2.getAttributs().get("text:style-name"));
if(nod3!=null) {
if(nod3.getAttributs().get("style:master-page-name")!=null) {
node p = new node();
p.setNomElt("page");
p.getAttributs().put("numero", String.valueOf(compteurpage));
p.getAttributs().put("type","manuel");
p.getAttributs().put("index",String.valueOf(j));
p.getAttributs().put("style:master-page-name",nod3.getAttributs().get("style:master-page-name"));
p.getAttributs().put("style:name",nod3.getAttributs().get("style:name"));
p.getNodes().add(nodstructure.getNodes().get(j));
node nod4 = a.retourneName(nod3.getNodes(), "style:paragraph-properties","fo:break-before");
if(nod4!=null) {
if(nod4.getAttributs().get("style:page-number")!=null) p.getAttributs().put("style:page_number", nod4.getAttributs().get("style:page-number"));
}
nodpage.add(p);
compteurpage++;
page = nodpage.get(nodpage.size()-1);
continue;
}
if(a.retourneFirstNodeByNameAttributValue(nod3.getNodes(), "style:paragraph-properties","fo:break-before","page")!=null) {
node p = new node();
p.setNomElt("page");
p.getAttributs().put("numero", String.valueOf(compteurpage));
p.getAttributs().put("type","automatique");
p.getAttributs().put("index",String.valueOf(j));
p.getNodes().add(nodstructure.getNodes().get(j));
nodpage.add(p);
compteurpage++;
page = nodpage.get(nodpage.size()-1);
continue;
}
}
}
}
// ajoute au node de la page les éléments sauf les paragraphes de texte
page.getNodes().add(nodstructure.getNodes().get(j));
}
// verification que dans la page numero 0 il y a un paragraphe.
// s'il n'y a pas de paragraphe alors ce n'est pas une page et elle est supprimée
// indique le style de la page
// insère les pages vides
// déplace les graphique dans les bonnes pages.
if(nodpage.get(0)!=null) {
boolean pagezerosupprimer = false;
ArrayList<node> noddraw = a.retourneNames(nodpage.get(0), "draw:frame"); //il faut replacer peut être les cadre et image ancrer à la page après numérotation absolue
//suppresion de la page zéro si inutile
if(!nodpage.get(0).retourneEnfantsByNameExist("text:p") && !nodpage.get(0).retourneEnfantsByNameExist("text:h")) {
nodpage.remove(0);
pagezerosupprimer=true;
}
//indiquer le style de chaque page
for(int j = 0 ; j < nodpage.size();j++) {
if(j!=0) {
if(nodpage.get(j).getAttributs().get("type").equals("automatique")) {
if(nodpage.get(j-1).getAttributs().get("style:master-page-name")!=null) {
node nod5 = a.retourneFirstNodeByNameAttributValue(nodstylepage, "style:master-page", "style:name", nodpage.get(j-1).getAttributs().get("style:master-page-name"));
if(nod5.getAttributs().get("style:next-style-name")!=null) {
nodpage.get(j).getAttributs().put("style:master-page-name", nod5.getAttributs().get("style:next-style-name"));
}else {
nodpage.get(j).getAttributs().put("style:master-page-name", nodpage.get(j-1).getAttributs().get("style:master-page-name"));
}
}else {
nodpage.get(j).getAttributs().put("style:master-page-name", "Standard"); //défini une page en style page par défaut
}
}
}
}
//insère les pages vides
ArrayList<node> newnodpage = (ArrayList<node>) nodpage.clone();
int compteurinsertion = 0 ;
for(int j = 0 ; j < nodpage.size();j++) {
if(j!=0) {
String usage1 ="1";
String usage2 ="2";
if(nodpage.get(j).getAttributs().get("style:master-page-name")!=null) {
node nod5 = a.retourneFirstNodeByNameAttributValue(nodstylepage, "style:master-page", "style:name", nodpage.get(j).getAttributs().get("style:master-page-name"));
if(nod5.getAttributs().get("style:page-layout-name")!=null) {
node nod6 = a.retourneFirstNodeByNameAttributValue(nodstylepage, "style:page-layout", "style:name", nod5.getAttributs().get("style:page-layout-name"));
if(nod6.getAttributs().get("style:page-usage")!=null) {
usage1 = nod6.getAttributs().get("style:page-usage");
nodpage.get(j).getAttributs().put("style:page-usage", usage1);
}
}
}
if(nodpage.get(j-1).getAttributs().get("style:master-page-name")!=null) {
node nod5 = a.retourneFirstNodeByNameAttributValue(nodstylepage, "style:master-page", "style:name", nodpage.get(j-1).getAttributs().get("style:master-page-name"));
if(nod5.getAttributs().get("style:page-layout-name")!=null) {
node nod6 = a.retourneFirstNodeByNameAttributValue(nodstylepage, "style:page-layout", "style:name", nod5.getAttributs().get("style:page-layout-name"));
if(nod6.getAttributs().get("style:page-usage")!=null) {
usage2 = nod6.getAttributs().get("style:page-usage");
}
}
}
if(j-1==0) usage2="right"; //la première page est toujours à droite.
//insertion d'un page vide
if(usage1.equals(usage2)) {
node p = new node();
p.setNomElt("page");
p.getAttributs().put("vide", "true");
p.getAttributs().put("style:master-page-name", "page_vide");
newnodpage.add(j+compteurinsertion,p);
compteurinsertion++;
}
}else {
if(nodpage.get(j).getAttributs().get("style:master-page-name")!=null) {
node nod5 = a.retourneFirstNodeByNameAttributValue(nodstylepage, "style:master-page", "style:name", nodpage.get(j).getAttributs().get("style:master-page-name"));
if(nod5.getAttributs().get("style:page-layout-name")!=null) {
node nod6 = a.retourneFirstNodeByNameAttributValue(nodstylepage, "style:page-layout", "style:name", nod5.getAttributs().get("style:page-layout-name"));
if(nod6.getAttributs().get("style:page-usage")!=null) {
nodpage.get(j).getAttributs().put("style:page-usage", nod6.getAttributs().get("style:page-usage"));
}
if(j==0) nodpage.get(j).getAttributs().put("style:page-usage", "right"); //la première page est toujours à droite.
}
}
}
}
nodpage = (ArrayList<node>) newnodpage.clone();
// numerotation des pages
int compteurnumeropage = 1 ;
int compteurabsoluepage = 1 ;
for(int j = 0 ; j < nodpage.size();j++) {
if(nodpage.get(j).getAttributs().get("style:page_number")!=null){
if(!nodpage.get(j).getAttributs().get("style:page_number").equals("auto")) {
compteurnumeropage= Integer.valueOf(nodpage.get(j).getAttributs().get("style:page_number"));
nodpage.get(j).getAttributs().put("numero", String.valueOf(compteurnumeropage));
nodpage.get(j).getAttributs().put("numeroabsolue", String.valueOf(compteurabsoluepage));
compteurnumeropage++;
compteurabsoluepage++;
continue;
}
}
nodpage.get(j).getAttributs().put("numero", String.valueOf(compteurnumeropage));
nodpage.get(j).getAttributs().put("numeroabsolue", String.valueOf(compteurabsoluepage));
compteurnumeropage++;
compteurabsoluepage++;
}
// replacer les cadres et images ancrés dans les bonnes pages de la structure
for(int j = 0 ; j <noddraw.size();j++) {
if(noddraw.get(j).getAttributs().get("text:anchor-type")!=null) {
if(noddraw.get(j).getAttributs().get("text:anchor-type").equals("page")) {
if(noddraw.get(j).getAttributs().get("text:anchor-page-number")!=null) {
node page1 = a.retourneFirstNodeByNameAttributValue(nodpage, "page", "numeroabsolue", noddraw.get(j).getAttributs().get("text:anchor-page-number"));
if(page1!=null) {
if(pagezerosupprimer) {
page1.getNodes().add(noddraw.get(j));
}else {
if(!noddraw.get(j).getAttributs().get("text:anchor-page-number").equals("1")){
page1.getNodes().add(noddraw.get(j));
node page2 = a.retourneFirstNodeByNameAttributValue(nodpage, "page", "numeroabsolue", "1");
page2.getNodes().remove(noddraw.get(j));
}
}
}
}
}
}
}
}
// construction du node de l'étudiant
node structurePage = new node();
structurePage.setNomElt("structurepage");
structurePage.setNodes(nodpage);
node fichier = new node();
fichier.setNomElt("fichier");
if(a.getLectDossiers().getEC().getListeFichierodt().get(i)!=null) {
fichier.getAttributs().put("filename", a.getLectDossiers().getEC().getListeFichierodt().get(i));
if(commandes.Profil.equals(UserStatus.STUDENT)) {
a.getLectDossiers().getEC().getListeNomDossier().add(i, a.getLectDossiers().getEC().getListeFichierodt().get(i).substring(0, a.getLectDossiers().getEC().getListeFichierodt().get(i).lastIndexOf(".")));
}
fichier.getAttributs().put("dossier", a.getLectDossiers().getEC().getListeNomDossier().get(i));
}
fichier.getAttributs().put("producteur", nodmeta.retourneFirstEnfantsByName("meta:generator").getContenu());
fichier.getAttributs().put("dureeEdition", nodmeta.retourneFirstEnfantsByName("meta:editing-duration").getContenu());
fichier.getAttributs().put("dateModification", nodmeta.retourneFirstEnfantsByName("dc:date").getContenu());
fichier.getNodes().add(nodmeta);
nodstylepage = a.numeroteNameNode(nodstylepage, "0"); //ajoute les numéros d'index et des attrinuts
fichier.getNodes().add(nodstylepage);
fichier.getNodes().add(nodstyleparagraphe);
fichier.getNodes().add(nodstyleformatage);
fichier.getNodes().add(nodsequence);
fichier.getNodes().add(nodnumerochapitre);
fichier.getNodes().add(nodframe);
fichier.getNodes().add(nodsection);
nodbiblio = a.numeroteNameNode(nodbiblio, "0"); //ajoute les numéros d'index et des attrinuts
fichier.getNodes().add(nodbiblio);
nodtable = a.numeroteNameNode(nodtable, "0"); //ajoute les numéros d'index et des attrinuts
fichier.getNodes().add(nodtable);
nodillustrations = a.numeroteNameNode(nodillustrations, "0"); //ajoute les numéros d'index et des attrinuts
fichier.getNodes().add(nodillustrations);
structurePage = a.numeroteNameNode(structurePage,"0"); //ajoute les numéros d'index et des attributs
fichier.getNodes().add(structurePage);
fichier.getNodes().add(nodhistorique);
return fichier;
}
/**
* Fourni le node du sujet avec les attributs d'evaluation et de mise en page pour le feedback.
* @param nod
* @param a
* @param i
* @return
*/
private static node nodePourEcritureSujet(node nod, Run a, Integer i) {
LocalDateTime aujourdhui = LocalDateTime.now();
// fichier
nod.getAttributs().put("evaluer", "true");
nod.getAttributs().put("progression", "1");
nod.getAttributs().put("notefrom", "20");
nod.getAttributs().put("baremeABC", "false");
nod.getAttributs().put("date", String.valueOf(aujourdhui));
nod.getAttributs().put("version", commandes.version);
nod.getAttributs().put("titre", "Le titre de l'exercice");
nod.getAttributs().put("link_sujet", "https://moodle.univ-artois.fr/cours/");
nod.getAttributs().put("link_help", "https://moodle.univ-artois.fr/cours/");
nod.getAttributs().put("historiquePresent", "false");
nod.getAttributs().put("controleDateCreation", "false");
nod.getAttributs().put("controle_Initial_Creator", "false");
nod.getAttributs().put("presenceMetaSujet", "false");
node b = a.retourneName(nod.retourneFirstEnfantsByName("office:meta"),"meta:user-defined","meta:name","Sujet");
if(b!=null) { nod.getAttributs().put("metaSujet", b.getContenu());}else {nod.getAttributs().put("metaSujet", "?");}
b = nod.retourneFirstEnfantsByName("office:meta").retourneFirstEnfantsByName("meta:creation-date");
if(b!=null) {
if(b.getContenu().contains(".")) {
nod.getAttributs().put("creationDate", b.getContenu().substring(0, b.getContenu().lastIndexOf(".")));
}else {
nod.getAttributs().put("creationDate", b.getContenu());
}
}
b = nod.retourneFirstEnfantsByName("office:meta").retourneFirstEnfantsByName("meta:initial-creator");
if(b!=null) nod.getAttributs().put("Initial_Creator", b.getContenu());
nod.getAttributs().put("auteur", "votre nom et prénom");
nod.setContenu("Commentaire sur cet exercice.-NewLine-Seconde ligne de commentaire.");
nod.getAttributs().remove("dossier");
//
//metadonnées
node nodmeta = nod.retourneFirstEnfantsByName("office:meta");
if(nodmeta.getNomElt().equals("office:meta")) {
nod.getNodes().remove(nodmeta);
nodmeta.getAttributs().put("evaluer", "false");
nodmeta.getAttributs().put("addmenu", "false");
nodmeta.getAttributs().put("poids", "1");
nodmeta.getAttributs().put("titre", "Les metadonnées");
ArrayList<node> no = nodmeta.retourneEnfantsByName("meta:user-defined", new ArrayList<node>());
for(int j = 0 ; j < no.size(); j++) {
nodmeta.getNodes().remove(no.get(j));
no.get(j).getAttributs().put("saut", "false");
no.get(j).getAttributs().put("evaluer", "false");
no.get(j).getAttributs().put("titre", "");
no.get(j).getAttributs().put("styletitre", "nostyle");
}
if(nodmeta.retourneEnfantsByNameExist("meta:initial-creator")) {
node n = nodmeta.retourneFirstEnfantsByName("meta:initial-creator");
n.getAttributs().put("evaluer", "false");
n.getAttributs().put("saut", "false");
n.getAttributs().put("titre", "");
n.getAttributs().put("styletitre", "nostyle");
}
if(nodmeta.retourneEnfantsByNameExist("meta:creation-date")) {
node n = nodmeta.retourneFirstEnfantsByName("meta:creation-date");
n.getAttributs().put("evaluer", "false");
n.getAttributs().put("saut", "false");
n.getAttributs().put("titre", "");
n.getAttributs().put("styletitre", "nostyle");
}
if(nodmeta.retourneEnfantsByNameExist("dc:date")) {
node n = nodmeta.retourneFirstEnfantsByName("dc:date");
n.getAttributs().put("evaluer", "false");
n.getAttributs().put("saut", "false");
n.getAttributs().put("titre", "");
n.getAttributs().put("styletitre", "nostyle");
}
if(nodmeta.retourneEnfantsByNameExist("meta:editing-duration")) {
node n = nodmeta.retourneFirstEnfantsByName("meta:editing-duration");
n.getAttributs().put("evaluer", "false");
n.getAttributs().put("saut", "false");
n.getAttributs().put("titre", "");
n.getAttributs().put("styletitre", "nostyle");
}
if(nodmeta.retourneEnfantsByNameExist("meta:editing-cycles")) {
node n = nodmeta.retourneFirstEnfantsByName("meta:editing-cycles");
n.getAttributs().put("evaluer", "false");
n.getAttributs().put("saut", "false");
n.getAttributs().put("titre", "");
n.getAttributs().put("styletitre", "nostyle");
}
if(nodmeta.retourneEnfantsByNameExist("meta:generator")) {
node n = nodmeta.retourneFirstEnfantsByName("meta:generator");
n.getAttributs().put("evaluer", "false");
n.getAttributs().put("saut", "false");
n.getAttributs().put("titre", "");
n.getAttributs().put("styletitre", "nostyle");
}
if(nodmeta.retourneEnfantsByNameExist("dc:creator")) {
node n = nodmeta.retourneFirstEnfantsByName("dc:creator");
n.getAttributs().put("evaluer", "false");
n.getAttributs().put("saut", "false");
n.getAttributs().put("titre", "");
n.getAttributs().put("styletitre", "nostyle");
}
if(nodmeta.retourneEnfantsByNameExist("dc:title")) {
node n = nodmeta.retourneFirstEnfantsByName("dc:title");
n.getAttributs().put("evaluer", "false");
n.getAttributs().put("saut", "false");
n.getAttributs().put("titre", "");
n.getAttributs().put("styletitre", "nostyle");
}
if(nodmeta.retourneEnfantsByNameExist("dc:description")) {
node n = nodmeta.retourneFirstEnfantsByName("dc:description");
n.getAttributs().put("evaluer", "false");
n.getAttributs().put("saut", "false");
n.getAttributs().put("titre", "");
n.getAttributs().put("styletitre", "nostyle");
}
if(nodmeta.retourneEnfantsByNameExist("meta:keyword")) {
node n = nodmeta.retourneFirstEnfantsByName("meta:keyword");
n.getAttributs().put("evaluer", "false");
n.getAttributs().put("saut", "false");
n.getAttributs().put("titre", "");
n.getAttributs().put("styletitre", "nostyle");
}
if(nodmeta.retourneEnfantsByNameExist("dc:subject")) {
node n = nodmeta.retourneFirstEnfantsByName("dc:subject");
n.getAttributs().put("evaluer", "false");
n.getAttributs().put("saut", "false");
n.getAttributs().put("titre", "");
n.getAttributs().put("styletitre", "nostyle");
}
if(nodmeta.retourneEnfantsByNameExist("meta:document-statistic")) {
node n = nodmeta.retourneFirstEnfantsByName("meta:document-statistic");
n.getAttributs().put("evaluer", "false");
n.getAttributs().put("saut", "false");
n.getAttributs().put("titre", "");
n.getAttributs().put("styletitre", "nostyle");
}
nodmeta.getNodes().addAll(no);
nod.getNodes().add(nodmeta);
}
//
//style de page
node nodpage = nod.retourneFirstEnfantsByName("style:page");
if(nodpage.getNomElt().equals("style:page")) {
nod.getNodes().remove(nodpage);
nodpage.getAttributs().put("evaluer", "false");
nodpage.getAttributs().put("addmenu", "false");
nodpage.getAttributs().put("poids", "1");
nodpage.getAttributs().put("titre", "Les styles de page");
ArrayList<node> no = nodpage.retourneEnfantsByName("style:master-page", new ArrayList<node>());
for(int j = 0 ; j < no.size(); j++) {
nodpage.getNodes().remove(no.get(j));
no.get(j).getAttributs().put("saut", "false");
no.get(j).getAttributs().put("evaluer", "false");
no.get(j).getAttributs().put("titre", "");
no.get(j).getAttributs().put("styletitre", "nostyle");
if(no.get(j).retourneEnfantsByNameExist("style:header")) {
node n = no.get(j).retourneFirstEnfantsByName("style:header");
n.getAttributs().put("evaluer", "false");
n.getAttributs().put("saut", "false");
n.getAttributs().put("titre", "");
n.getAttributs().put("styletitre", "nostyle");
ArrayList<node> no1 = n.getNodes();
for(int k=0 ; k < no1.size(); k++) {
no1.get(k).getAttributs().put("evaluer", "false");
if(no1.get(k).getNomElt().equals("text:p")) {
no1.get(k).getAttributs().put("analyseStyle", "false");
ArrayList<node> no2 = no1.get(k).getNodes();
for(int l=0 ; l<no2.size(); l++) {
no2.get(l).getAttributs().put("evaluer", "false");
no2.get(l).getAttributs().put("evalNameNode", "0");
}
}
}
}
if(no.get(j).retourneEnfantsByNameExist("style:footer")) {
node n = no.get(j).retourneFirstEnfantsByName("style:footer");
n.getAttributs().put("evaluer", "false");
n.getAttributs().put("saut", "false");
n.getAttributs().put("titre", "");
n.getAttributs().put("styletitre", "nostyle");
ArrayList<node> no1 = n.getNodes();
for(int k=0 ; k < no1.size(); k++) {
no1.get(k).getAttributs().put("evaluer", "false");
if(no1.get(k).getNomElt().equals("text:p")) {
no1.get(k).getAttributs().put("analyseStyle", "false");
ArrayList<node> no2 = no1.get(k).getNodes();
for(int l=0 ; l<no2.size(); l++) {
no2.get(l).getAttributs().put("evaluer", "false");
no2.get(l).getAttributs().put("evalNameNode", "0");
}
}
}
}
if(no.get(j).retourneEnfantsByNameExist("style:page-layout")) {
node n = no.get(j).retourneFirstEnfantsByName("style:page-layout");
n.getAttributs().put("evaluer", "false");
n.getAttributs().put("saut", "false");
n.getAttributs().put("titre", "");
n.getAttributs().put("styletitre", "nostyle");
if(n.retourneEnfantsByNameExist("style:page-layout-properties")) {
node n1 = n.retourneFirstEnfantsByName("style:page-layout-properties");
n1.getAttributs().put("evaluer", "false");
n1.getAttributs().put("saut", "false");
n1.getAttributs().put("titre", "");
n1.getAttributs().put("styletitre", "nostyle");
ArrayList<node> no1 = n1.getNodes();
for(int k=0 ; k < no1.size(); k++) {
no1.get(k).getAttributs().put("evaluer", "false");
}
}
if(n.retourneEnfantsByNameExist("style:header-style")) {
node n1 = n.retourneFirstEnfantsByName("style:header-style");
n1.getAttributs().put("evaluer", "false");
n1.getAttributs().put("saut", "false");
n1.getAttributs().put("titre", "");
n1.getAttributs().put("styletitre", "nostyle");
ArrayList<node> no1 = n1.getNodes();
for(int k=0 ; k < no1.size(); k++) {
no1.get(k).getAttributs().put("evaluer", "false");
}
}
if(n.retourneEnfantsByNameExist("style:footer-style")) {
node n1 = n.retourneFirstEnfantsByName("style:footer-style");
n1.getAttributs().put("evaluer", "false");
n1.getAttributs().put("saut", "false");
n1.getAttributs().put("titre", "");
n1.getAttributs().put("styletitre", "nostyle");
ArrayList<node> no1 = n1.getNodes();
for(int k=0 ; k < no1.size(); k++) {
no1.get(k).getAttributs().put("evaluer", "false");
}
}
}
}
nodpage.getNodes().addAll(no);
nod.getNodes().add(nodpage);
}
//
//style de paragraphe
node nodparagraph = nod.retourneFirstEnfantsByName("style:paragraph");
if(nodparagraph.getNomElt().equals("style:paragraph")) {
nod.getNodes().remove(nodparagraph);
nodparagraph.getAttributs().put("evaluer", "false");
nodparagraph.getAttributs().put("addmenu", "false");
nodparagraph.getAttributs().put("poids", "1");
nodparagraph.getAttributs().put("titre", "Les styles de paragraphe");
ArrayList<node> no = nodparagraph.retourneEnfantsByName("style:style", new ArrayList<node>());
for(int j = 0 ; j < no.size(); j++) {
nodparagraph.getNodes().remove(no.get(j));
no.get(j).getAttributs().put("saut", "false");
no.get(j).getAttributs().put("evaluer", "false");
no.get(j).getAttributs().put("titre", "");
no.get(j).getAttributs().put("styletitre", "nostyle");
ArrayList<node> no1 = no.get(j).getNodes();
for(int k=0 ; k < no1.size(); k++) {
no1.get(k).getAttributs().put("evaluer", "false");
ArrayList<node> no2 = no1.get(k).getNodes();
for(int l=0 ; l < no2.size(); l++) {
no2.get(l).getAttributs().put("evaluer", "false");
ArrayList<node> no3 = no2.get(l).getNodes();
for(int m=0 ; m < no3.size(); m++) {
no3.get(m).getAttributs().put("evaluer", "false");
}
}
}
}
nodparagraph.getNodes().addAll(no);
nod.getNodes().add(nodparagraph);
}
//
//style de texte
node nodformatage = nod.retourneFirstEnfantsByName("style:formatagedirect");
if(nodformatage.getNomElt().equals("style:formatagedirect")) {
nod.getNodes().remove(nodformatage);
nodformatage.getAttributs().put("evaluer", "false");
nodformatage.getAttributs().put("addmenu", "false");
nodformatage.getAttributs().put("poids", "1");
nodformatage.getAttributs().put("titre", "Les styles de formatage direct");
ArrayList<node> no = nodformatage.retourneEnfantsByName("style:style", new ArrayList<node>());
for(int j = 0 ; j < no.size(); j++) {
nodformatage.getNodes().remove(no.get(j));
no.get(j).getAttributs().put("saut", "false");
no.get(j).getAttributs().put("evaluer", "false");
no.get(j).getAttributs().put("titre", "");
no.get(j).getAttributs().put("styletitre", "nostyle");
}
nodformatage.getNodes().addAll(no);
nod.getNodes().add(nodformatage);
}
//
//séquence
node nodsequence = nod.retourneFirstEnfantsByName("sequences");
if(nodsequence.getNomElt().equals("sequences")) {
nod.getNodes().remove(nodsequence);
nodsequence.getAttributs().put("evaluer", "false");
nodsequence.getAttributs().put("addmenu", "false");
nodsequence.getAttributs().put("poids", "1");
nodsequence.getAttributs().put("titre", "Les variables de séquence");
ArrayList<node> no = nodsequence.retourneEnfantsByName("text:sequence-decl", new ArrayList<node>());
for(int j = 0 ; j < no.size(); j++) {
nodsequence.getNodes().remove(no.get(j));
no.get(j).getAttributs().put("saut", "false");
no.get(j).getAttributs().put("evaluer", "false");
no.get(j).getAttributs().put("titre", "");
no.get(j).getAttributs().put("styletitre", "nostyle");
}
nodsequence.getNodes().addAll(no);
nod.getNodes().add(nodsequence);
}
//
//numérotation des chapitres
node nodnumerotationchapitre = nod.retourneFirstEnfantsByName("numerotationchapitre");
if(nodnumerotationchapitre.getNomElt().equals("numerotationchapitre")) {
nod.getNodes().remove(nodnumerotationchapitre);
nodnumerotationchapitre.getAttributs().put("evaluer", "false");
nodnumerotationchapitre.getAttributs().put("addmenu", "false");
nodnumerotationchapitre.getAttributs().put("poids", "1");
nodnumerotationchapitre.getAttributs().put("titre", "Numérotation des chapitres");
ArrayList<node> no = nodnumerotationchapitre.retourneEnfantsByName("text:outline-level-style", new ArrayList<node>());
for(int j = 0 ; j < no.size(); j++) {
nodnumerotationchapitre.getNodes().remove(no.get(j));
no.get(j).getAttributs().put("saut", "false");
no.get(j).getAttributs().put("evaluer", "false");
no.get(j).getAttributs().put("titre", "");
no.get(j).getAttributs().put("styletitre", "nostyle");
ArrayList<node> no1 = no.get(j).getNodes();
for(int k=0 ; k < no1.size(); k++) {
no1.get(k).getAttributs().put("evaluer", "false");
ArrayList<node> no2 = no1.get(k).getNodes();
for(int l=0 ; l < no2.size(); l++) {
no2.get(l).getAttributs().put("evaluer", "false");
}
}
}
nodnumerotationchapitre.getNodes().addAll(no);
nod.getNodes().add(nodnumerotationchapitre);
}
//
//frame
node nodframe = nod.retourneFirstEnfantsByName("frames");
if(nodframe.getNomElt().equals("frames")) {
nod.getNodes().remove(nodframe);
nodframe.getAttributs().put("evaluer", "false");
nodframe.getAttributs().put("addmenu", "false");
nodframe.getAttributs().put("poids", "1");
nodframe.getAttributs().put("titre", "Les frames (cadres et images)");
ArrayList<node> no = nodframe.retourneEnfantsByName("draw:frame", new ArrayList<node>());
for(int j = 0 ; j < no.size(); j++) {
nodframe.getNodes().remove(no.get(j));
no.get(j).getAttributs().put("saut", "false");
no.get(j).getAttributs().put("evaluer", "false");
no.get(j).getAttributs().put("titre", "");
no.get(j).getAttributs().put("styletitre", "nostyle");
if(no.get(j).getAttributs().get("text:anchor-page-number")!=null ) no.get(j).getAttributs().put("recherche_anchor-page-number", "false");
ArrayList<node> no1 = no.get(j).getNodes();
for(int k=0 ; k < no1.size(); k++) {
no1.get(k).getAttributs().put("evaluer", "false");
ArrayList<node> no2 = no1.get(k).getNodes();
for(int l=0 ; l < no2.size(); l++) {
no2.get(l).getAttributs().put("evaluer", "false");
ArrayList<node> no3 = no2.get(l).getNodes();
for(int m=0 ; m < no3.size(); m++) {
no3.get(m).getAttributs().put("evaluer", "false");
}
}
}
}
nodframe.getNodes().addAll(no);
nod.getNodes().add(nodframe);
}
//
//sections
node nodsection = nod.retourneFirstEnfantsByName("sections");
if(nodsection.getNomElt().equals("sections")) {
nod.getNodes().remove(nodsection);
nodsection.getAttributs().put("evaluer", "false");
nodsection.getAttributs().put("addmenu", "false");
nodsection.getAttributs().put("poids", "1");
nodsection.getAttributs().put("titre", "Les sections");
ArrayList<node> no = nodsection.retourneEnfantsByName("text:section", new ArrayList<node>());
for(int j = 0 ; j < no.size(); j++) {
nodsection.getNodes().remove(no.get(j));
no.get(j).getAttributs().put("saut", "false");
no.get(j).getAttributs().put("evaluer", "false");
no.get(j).getAttributs().put("titre", "");
no.get(j).getAttributs().put("styletitre", "nostyle");
ArrayList<node> no1 = no.get(j).getNodes();
for(int k=0 ; k < no1.size(); k++) {
no1.get(k).getAttributs().put("evaluer", "false");
ArrayList<node> no2 = no1.get(k).getNodes();
for(int l=0 ; l < no2.size(); l++) {
no2.get(l).getAttributs().put("evaluer", "false");
ArrayList<node> no3 = no2.get(l).getNodes();
for(int m=0 ; m < no3.size(); m++) {
no3.get(m).getAttributs().put("evaluer", "false");
}
}
}
}
nodsection.getNodes().addAll(no);
nod.getNodes().add(nodsection);
}
//
//biblio
node nodbiblio = nod.retourneFirstEnfantsByName("biblio");
if(nodbiblio.getNomElt().equals("biblio")) {
nod.getNodes().remove(nodbiblio);
nodbiblio.getAttributs().put("evaluer", "false");
nodbiblio.getAttributs().put("addmenu", "false");
nodbiblio.getAttributs().put("poids", "1");
nodbiblio.getAttributs().put("titre", "La bibliographie");
//nodbiblio.getAttributs().put("styletitre", "H1");
ArrayList<node> no = nodbiblio.retourneEnfantsByName("text:bibliography", new ArrayList<node>());
for(int j = 0 ; j < no.size(); j++) {
nodbiblio.getNodes().remove(no.get(j));
no.get(j).getAttributs().put("saut", "false");
no.get(j).getAttributs().put("evaluer", "false");
no.get(j).getAttributs().put("titre", "");
no.get(j).getAttributs().put("styletitre", "nostyle");
ArrayList<node> no1 = no.get(j).getNodes();
for(int k=0 ; k < no1.size(); k++) {
no1.get(k).getAttributs().put("evaluer", "false");
ArrayList<node> no2 = no1.get(k).getNodes();
for(int l=0 ; l < no2.size(); l++) {
no2.get(l).getAttributs().put("evaluer", "false");
ArrayList<node> no3 = no2.get(l).getNodes();
for(int m=0 ; m < no3.size(); m++) {
no3.get(m).getAttributs().put("evaluer", "false");
}
}
}
}
nodbiblio.getNodes().addAll(no);
nod.getNodes().add(nodbiblio);
}
//
//table des matières
node nodtable = nod.retourneFirstEnfantsByName("tablematieres");
if(nodtable.getNomElt().equals("tablematieres")) {
nod.getNodes().remove(nodtable);
nodtable.getAttributs().put("evaluer", "false");
nodtable.getAttributs().put("addmenu", "false");
nodtable.getAttributs().put("poids", "1");
nodtable.getAttributs().put("titre", "Les index tables des matières");
ArrayList<node> no = nodtable.retourneEnfantsByName("text:table-of-content", new ArrayList<node>());
for(int j = 0 ; j < no.size(); j++) {
nodtable.getNodes().remove(no.get(j));
no.get(j).getAttributs().put("saut", "false");
no.get(j).getAttributs().put("evaluer", "false");
no.get(j).getAttributs().put("titre", "");
no.get(j).getAttributs().put("styletitre", "nostyle");
ArrayList<node> no1 = no.get(j).getNodes();
for(int k=0 ; k < no1.size(); k++) {
no1.get(k).getAttributs().put("evaluer", "false");
ArrayList<node> no2 = no1.get(k).getNodes();
for(int l=0 ; l < no2.size(); l++) {
no2.get(l).getAttributs().put("evaluer", "false");
ArrayList<node> no3 = no2.get(l).getNodes();
for(int m=0 ; m < no3.size(); m++) {
no3.get(m).getAttributs().put("evaluer", "false");
}
}
}
}
nodtable.getNodes().addAll(no);
nod.getNodes().add(nodtable);
}
//
//table des illustrations
node nodillustrations = nod.retourneFirstEnfantsByName("tableillustrations");
if(nodillustrations.getNomElt().equals("tableillustrations")) {
nod.getNodes().remove(nodillustrations);
nodillustrations.getAttributs().put("evaluer", "false");
nodillustrations.getAttributs().put("addmenu", "false");
nodillustrations.getAttributs().put("poids", "1");
nodillustrations.getAttributs().put("titre", "Les index illustrations");
ArrayList<node> no = nodillustrations.retourneEnfantsByName("text:illustration-index", new ArrayList<node>());
for(int j = 0 ; j < no.size(); j++) {
nodillustrations.getNodes().remove(no.get(j));
no.get(j).getAttributs().put("saut", "false");
no.get(j).getAttributs().put("evaluer", "false");
no.get(j).getAttributs().put("titre", "");
no.get(j).getAttributs().put("styletitre", "nostyle");
ArrayList<node> no1 = no.get(j).getNodes();
for(int k=0 ; k < no1.size(); k++) {
no1.get(k).getAttributs().put("evaluer", "false");
ArrayList<node> no2 = no1.get(k).getNodes();
for(int l=0 ; l < no2.size(); l++) {
no2.get(l).getAttributs().put("evaluer", "false");
ArrayList<node> no3 = no2.get(l).getNodes();
for(int m=0 ; m < no3.size(); m++) {
no3.get(m).getAttributs().put("evaluer", "false");
}
}
}
}
nodillustrations.getNodes().addAll(no);
nod.getNodes().add(nodillustrations);
}
//
//structure document
node nodstructurepage = nod.retourneFirstEnfantsByName("structurepage");
if(nodstructurepage.getNomElt().equals("structurepage")) {
nod.getNodes().remove(nodstructurepage);
nodstructurepage.getAttributs().put("evaluer", "false");
nodstructurepage.getAttributs().put("addmenu", "false");
nodstructurepage.getAttributs().put("poids", "1");
nodstructurepage.getAttributs().put("titre", "La structure du document");
ArrayList<node> no = nodstructurepage.retourneEnfantsByName("page", new ArrayList<node>());
for(int j = 0 ; j < no.size(); j++) {
nodstructurepage.getNodes().remove(no.get(j));
no.get(j).getAttributs().put("saut", "false");
no.get(j).getAttributs().put("evaluer", "false");
no.get(j).getAttributs().put("titre", "");
no.get(j).getAttributs().put("styletitre", "nostyle");
}
nodstructurepage.getNodes().addAll(no);
nod.getNodes().add(nodstructurepage);
no = nodstructurepage.retourneLesEnfantsByName("text:p", new ArrayList<node>());
for(int j = 0 ; j < no.size(); j++) {
if(no.get(j).getAttributs().get("recherche_index")==null) no.get(j).getAttributs().put("recherche_index", "false");
if(no.get(j).getAttributs().get("recherche_contenu_exact")==null) no.get(j).getAttributs().put("recherche_contenu_exact", "false");
if(no.get(j).getAttributs().get("analyseStyle")==null) no.get(j).getAttributs().put("analyseStyle", "false");
if(no.get(j).getAttributs().get("evaluer")==null) no.get(j).getAttributs().put("evaluer", "false");
if(no.get(j).getAttributs().get("saut")==null) no.get(j).getAttributs().put("saut", "false");
if(no.get(j).getAttributs().get("titre")==null) no.get(j).getAttributs().put("titre", "");
ArrayList<node> no1 = no.get(j).getNodes();
for(int k=0 ; k < no1.size(); k++) {
no1.get(k).getAttributs().put("evaluer", "false");
ArrayList<node> no2 = no1.get(k).getNodes();
for(int l=0 ; l < no2.size(); l++) {
no2.get(l).getAttributs().put("evaluer", "false");
ArrayList<node> no3 = no2.get(l).getNodes();
for(int m=0 ; m < no3.size(); m++) {
no3.get(m).getAttributs().put("evaluer", "false");
}
}
}
}
no = nodstructurepage.retourneLesEnfantsByName("text:h", new ArrayList<node>());
for(int j = 0 ; j < no.size(); j++) {
if(no.get(j).getAttributs().get("recherche_index")==null) no.get(j).getAttributs().put("recherche_index", "false");
if(no.get(j).getAttributs().get("recherche_contenu_exact")==null) no.get(j).getAttributs().put("recherche_contenu_exact", "false");
if(no.get(j).getAttributs().get("analyseStyle")==null) no.get(j).getAttributs().put("analyseStyle", "false");
if(no.get(j).getAttributs().get("evaluer")==null) no.get(j).getAttributs().put("evaluer", "false");
if(no.get(j).getAttributs().get("saut")==null) no.get(j).getAttributs().put("saut", "false");
if(no.get(j).getAttributs().get("titre")==null) no.get(j).getAttributs().put("titre", "");
ArrayList<node> no1 = no.get(j).getNodes();
for(int k=0 ; k < no1.size(); k++) {
no1.get(k).getAttributs().put("evaluer", "false");
ArrayList<node> no2 = no1.get(k).getNodes();
for(int l=0 ; l < no2.size(); l++) {
no2.get(l).getAttributs().put("evaluer", "false");
ArrayList<node> no3 = no2.get(l).getNodes();
for(int m=0 ; m < no3.size(); m++) {
no3.get(m).getAttributs().put("evaluer", "false");
}
}
}
}
no = nodstructurepage.retourneLesEnfantsByName("text:span", new ArrayList<node>());
for(int j = 0 ; j < no.size(); j++) {
if(no.get(j).getAttributs().get("recherche_index")==null) no.get(j).getAttributs().put("recherche_index", "false");
if(no.get(j).getAttributs().get("recherche_contenu_exact")==null) no.get(j).getAttributs().put("recherche_contenu_exact", "false");
if(no.get(j).getAttributs().get("analyseStyle")==null) no.get(j).getAttributs().put("analyseStyle", "false");
if(no.get(j).getAttributs().get("evaluer")==null) no.get(j).getAttributs().put("evaluer", "false");
ArrayList<node> no1 = no.get(j).getNodes();
for(int k=0 ; k < no1.size(); k++) {
no1.get(k).getAttributs().put("evaluer", "false");
ArrayList<node> no2 = no1.get(k).getNodes();
for(int l=0 ; l < no2.size(); l++) {
no2.get(l).getAttributs().put("evaluer", "false");
ArrayList<node> no3 = no2.get(l).getNodes();
for(int m=0 ; m < no3.size(); m++) {
no3.get(m).getAttributs().put("evaluer", "false");
}
}
}
}
no = nodstructurepage.retourneLesEnfantsByName("text:line-break", new ArrayList<node>());
for(int j = 0 ; j < no.size(); j++) {
if(no.get(j).getAttributs().get("recherche_index")==null) no.get(j).getAttributs().put("recherche_index", "false");
if(no.get(j).getAttributs().get("recherche_contenu_exact")==null) no.get(j).getAttributs().put("recherche_contenu_exact", "false");
if(no.get(j).getAttributs().get("analyseStyle")==null) no.get(j).getAttributs().put("analyseStyle", "false");
if(no.get(j).getAttributs().get("evalNameNode")==null) no.get(j).getAttributs().put("evalNameNode", "0");
if(no.get(j).getAttributs().get("evaluer")==null) no.get(j).getAttributs().put("evaluer", "false");
ArrayList<node> no1 = no.get(j).getNodes();
for(int k=0 ; k < no1.size(); k++) {
no1.get(k).getAttributs().put("evaluer", "false");
ArrayList<node> no2 = no1.get(k).getNodes();
for(int l=0 ; l < no2.size(); l++) {
no2.get(l).getAttributs().put("evaluer", "false");
ArrayList<node> no3 = no2.get(l).getNodes();
for(int m=0 ; m < no3.size(); m++) {
no3.get(m).getAttributs().put("evaluer", "false");
}
}
}
}
no = nodstructurepage.retourneLesEnfantsByName("draw:frame", new ArrayList<node>());
for(int j = 0 ; j < no.size(); j++) {
if(no.get(j).getAttributs().get("recherche_anchor-page-number")==null) no.get(j).getAttributs().put("recherche_anchor-page-number", "false");
if(no.get(j).getAttributs().get("recherche_index")==null) no.get(j).getAttributs().put("recherche_index", "false");
ArrayList<node> no1 = no.get(j).getNodes();
for(int k=0 ; k < no1.size(); k++) {
no1.get(k).getAttributs().put("evaluer", "false");
ArrayList<node> no2 = no1.get(k).getNodes();
for(int l=0 ; l < no2.size(); l++) {
no2.get(l).getAttributs().put("evaluer", "false");
ArrayList<node> no3 = no2.get(l).getNodes();
for(int m=0 ; m < no3.size(); m++) {
no3.get(m).getAttributs().put("evaluer", "false");
}
}
}
}
}
return nod;
}
/**
* Chargement du sujet.<br>
* Retourne l'ensemble des nodes qui possédent l'attribut evaluer="true".
* <br>
* @param a
* @return le node du sujet qui contient les partie à analyser
* @throws IOException
* @throws CloneNotSupportedException
*/
private static node chargementsujet(Run a, String nameSujet) throws CloneNotSupportedException, IOException {
String targetString = "";
//read file into stream, try-with-resources
try {
BufferedReader br = new BufferedReader(
new InputStreamReader(
new FileInputStream(a.getPatch() + "/" + nameSujet), "UTF-8"));
String line;
while ((line = br.readLine()) != null) {
targetString = targetString + line;
}
br.close();
}catch (Exception e) {
System.out.println();
System.out.println("** The file \"" + nameSujet + "\" is not in the current directory.");
System.out.println("** The current directory of the application is " + patch);
System.out.println();
}
node LeNodeSujet = new node();
if(!targetString.isEmpty()) {
// ! Important nettoyage du fichier avant lecture avec cXML
targetString = targetString.replace("\r", "");
targetString = targetString.replace("\n", "");
targetString = targetString.replace("\t", "");
// supprime les espaces multiples au-delà de deux espaces après un guillemets
Pattern p = Pattern.compile(" {2,}");
targetString = p.matcher(targetString).replaceAll(" ");
// supprime les espaces entre " et >
p = Pattern.compile("\" {1,}>");
targetString = p.matcher(targetString).replaceAll("\">");
LeNodeSujet = a.XMLContent(targetString);
}
LeNodeSujet = a.NodesAyantAttributEvaluerTRUEavecComplement(LeNodeSujet);
return LeNodeSujet;
}
/**
* Vérification du node sujet (premier node <b>fichier</b> et des paramètres.<br>
* <br>
* @param nodSujet
* @return
*/
private static node InitialisationAvantAnalyse(node nodSujet) {
node initSujet = new node();
initSujet.setNomElt("init");
boolean erreur=false;
boolean erreurNomPremierNodeFichier=false;
boolean erreurManqueAttributEvaluerPremierNodeFichier=false;
boolean erreurValeurAttributEvaluerPremierNodeFichier=false;
boolean erreurPasNodesEnfantsAuPremierNodeFichier=false;
boolean erreurPasAttributMetaSujetAuPremierNodeFichier=false;
boolean erreurValeurVideAttributMetaSujetAuPremierNodeFichier=false;
boolean erreurValeurAttributProgressionNonConvertibleEnDouble=false;
boolean erreurValeurAttributNoteFromNonConvertibleEnDouble=false;
if(!nodSujet.getNomElt().equals("fichier")) {
erreur=true;
erreurNomPremierNodeFichier = true;
}
if(nodSujet.getAttributs().get("evaluer")==null) {
erreur=true;
erreurManqueAttributEvaluerPremierNodeFichier = true;
}
if(!nodSujet.getAttributs().get("evaluer").equals("true")) {
erreur=true;
erreurValeurAttributEvaluerPremierNodeFichier=true;
}
if(nodSujet.getNodes().size()==0) {
erreur=true;
erreurPasNodesEnfantsAuPremierNodeFichier=true;
}
if(nodSujet.getAttributs().get("metaSujet")==null) {
erreur=true;
erreurPasAttributMetaSujetAuPremierNodeFichier=true;
}
if(nodSujet.getAttributs().get("metaSujet")!=null) {
if(nodSujet.getAttributs().get("metaSujet").isEmpty()) {
erreur=true;
erreurValeurVideAttributMetaSujetAuPremierNodeFichier=true;
}
}
if(nodSujet.getAttributs().get("progression")!=null) {
String p = nodSujet.getAttributs().get("progression");
try {
Double.valueOf(p);
} catch (Exception e) {
erreur=true;
erreurValeurAttributProgressionNonConvertibleEnDouble=true;
}
}
if(nodSujet.getAttributs().get("notefrom")!=null) {
String p = nodSujet.getAttributs().get("notefrom");
try {
Double.valueOf(p);
} catch (Exception e) {
erreur=true;
erreurValeurAttributNoteFromNonConvertibleEnDouble=true;
}
}
initSujet.getAttributs().put("erreur",String.valueOf(erreur));
initSujet.getAttributs().put("erreurNomPremierNodeFichier",String.valueOf(erreurNomPremierNodeFichier));
initSujet.getAttributs().put("erreurManqueAttributEvaluerPremierNodeFichier",String.valueOf(erreurManqueAttributEvaluerPremierNodeFichier));
initSujet.getAttributs().put("erreurValeurAttributEvaluerPremierNodeFichier",String.valueOf(erreurValeurAttributEvaluerPremierNodeFichier));
initSujet.getAttributs().put("erreurPasNodesEnfantsAuPremierNodeFichier",String.valueOf(erreurPasNodesEnfantsAuPremierNodeFichier));
initSujet.getAttributs().put("erreurPasAttributMetaSujetAuPremierNodeFichier",String.valueOf(erreurPasAttributMetaSujetAuPremierNodeFichier));
initSujet.getAttributs().put("erreurValeurVideAttributMetaSujetAuPremierNodeFichier",String.valueOf(erreurValeurVideAttributMetaSujetAuPremierNodeFichier));
initSujet.getAttributs().put("erreurValeurAttributProgressionNonConvertibleEnDouble",String.valueOf(erreurValeurAttributProgressionNonConvertibleEnDouble));
initSujet.getAttributs().put("erreurValeurAttributNoteFromNonConvertibleEnDouble",String.valueOf(erreurValeurAttributNoteFromNonConvertibleEnDouble));
return initSujet;
}
/**
* Début de l'analyse par comparaison du node étudiant avec le node sujet.
* @param nodStudent, le node étudiant.
* @param nodSujet, le node sujet.
* @param indexStudent, index de l'étudiant
* @param a, objet Run de la class cXML
* @return le node analyse contenant toute l'analyse.
*/
private static node analyse(node nodStudent, node nodSujet, Integer indexStudent, Run a) {
// initialisation des nodes d'analyse
node erreurs = new node();
node nodmeta = new node();
node nodpage = new node();
node nodparagraph = new node();
node nodsequence = new node();
node nodnumerochapitre = new node();
node nodframes = new node();
node nodsections = new node();
node nodbiblio = new node();
node nodtablematieres = new node();
node nodtableillustrations = new node();
node nodstructurepage = new node();
// ouverture
node nodouverture = new node();
nodouverture.setNomElt("ouverture");
nodouverture.setAttributs(nodSujet.getAttributs());
nodouverture.getAttributs().put("dossier",a.getLectDossiers().getEC().getListeNomDossier().get(indexStudent));
nodouverture.getAttributs().put("filename", a.getLectDossiers().getEC().getListeFichierodt().get(indexStudent));
nodouverture.getAttributs().put("producteur", nodStudent.getAttributs().get("producteur"));
nodouverture.getAttributs().put("dureeEdition", nodStudent.getAttributs().get("dureeEdition"));
nodouverture.getAttributs().put("dateModification", nodStudent.getAttributs().get("dateModification"));
nodouverture.getAttributs().put("patch", a.getPatch());
if(nodSujet.getAttributs().get("historiquePresent")!=null) nodouverture.getAttributs().put("historiquePresent", nodSujet.getAttributs().get("historiquePresent"));
if(nodSujet.getAttributs().get("controleDateCreation")!=null) nodouverture.getAttributs().put("controleDateCreation", nodSujet.getAttributs().get("controleDateCreation"));
if(nodSujet.getAttributs().get("presenceMetaSujet")!=null) nodouverture.getAttributs().put("presenceMetaSujet", nodSujet.getAttributs().get("presenceMetaSujet"));
if(nodSujet.getAttributs().get("baremeABC")!=null) nodouverture.getAttributs().put("baremeABC", nodSujet.getAttributs().get("baremeABC"));
nodouverture.setClose(true);
//Body et note (par défaut valeur nulle)
node nodbodyetnotation = new node();
nodbodyetnotation.setNomElt("bodyetnotation");
nodbodyetnotation.getAttributs().put("note", "0");
nodbodyetnotation.getAttributs().put("commentaire", "");
nodbodyetnotation.getAttributs().put("proportioncorrect", "0");
nodbodyetnotation.getAttributs().put("baremeABC", "false");
if(nodSujet.getAttributs().get("baremeABC")!=null) nodbodyetnotation.getAttributs().put("baremeABC", nodSujet.getAttributs().get("baremeABC"));
nodbodyetnotation.setClose(true);
//Le menu
node nodmenu = new node();
nodmenu.setNomElt("menu");
nodmenu = a.retourneNodeMenu(nodSujet, nodmenu, 0, 0);
nodmenu.setClose(true);
// verification de la métadonnées Sujet
erreurs = retourneNodeErreur(nodStudent, nodSujet, a);
// verification si au moins une erreur alors l'analyse est terminée
if(Boolean.valueOf(erreurs.getAttributs().get("oneError"))){
return clotureNodeAnalyse(nodouverture, nodbodyetnotation, nodmenu, erreurs, nodmeta, nodpage, nodparagraph, nodsequence, nodnumerochapitre, nodframes, nodsections, nodbiblio, nodtablematieres, nodtableillustrations, nodstructurepage, nodSujet.getContenu());
}
// analyse Meta
if(nodSujet.retourneFirstEnfantsByName("office:meta").getNomElt().equals("office:meta")) {
nodmeta = analyseMeta(nodStudent.retourneFirstEnfantsByName("office:meta"), nodSujet.retourneFirstEnfantsByName("office:meta"), a, nodmenu);
}
// analyse les pages (nécessaire d'avoir aussi les styles de paragarphes)
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"));
}else {
nodpage = 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);
}
// analyse les variables de séquence
if(nodSujet.retourneFirstEnfantsByName("sequences").getNomElt().equals("sequences")) {
nodsequence = 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);
}
// analyse les frames
if(nodSujet.retourneFirstEnfantsByName("frames").getNomElt().equals("frames")) {
nodframes = analyseLesFrames(nodStudent.retourneFirstEnfantsByName("frames"), nodSujet.retourneFirstEnfantsByName("frames"), a, nodmenu);
}
// analyse des sections
// if(nodSujet.retourneFirstEnfantsByName("sections").getNomElt().equals("sections")) {
// nodframes = analyseLesFrames(nodStudent.retourneFirstEnfantsByName("sections"), nodSujet.retourneFirstEnfantsByName("sections"), a, nodmenu);
// }
// analyse la bibliographie de LibreOffice
if(nodSujet.retourneFirstEnfantsByName("biblio").getNomElt().equals("biblio")) {
nodbiblio = 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);
}
// analyse des tables illustrations
if(nodSujet.retourneFirstEnfantsByName("tableillustrations").getNomElt().equals("tableillustrations")) {
nodtableillustrations = analyseLesTablesIllustrations(nodStudent.retourneFirstEnfantsByName("tableillustrations"), nodSujet.retourneFirstEnfantsByName("tableillustrations"), a, nodmenu);
}
// analyse la structure du document
if(nodSujet.retourneFirstEnfantsByName("structurepage").getNomElt().equals("structurepage")) {
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 );
}
// retourne le node analyse assemblé et calcul de la note avec le barème
return clotureNodeAnalyse(nodouverture, nodbodyetnotation, nodmenu, erreurs, nodmeta, nodpage, nodparagraph, nodsequence, nodnumerochapitre, nodframes, nodsections, nodbiblio, nodtablematieres, nodtableillustrations, nodstructurepage,nodSujet.getContenu());
}
/**
* <br>Les erreurs dans le fichier étudiant : erreur de métadonnées Sujet, date de création pour identifier le fichier à analyser.
* <br>Il y a une erreur si pas d'historique de modification dans le fichier de l'étudiant.
* <br>Il y a une erreur si le premier auteur ne correspond pas.
* <br>Les erreurs sont dans les attributs du node <b>Erreurs</b>.
* <br><b> oneError</b> si VRAI, il y a au moins une erreur.
* <br><b> manqueMetaSujet</b> si VRAI, il n'y a pas de méta données <b>Sujet</b>.
* <br><b> manqueValeurMetaSujet</b> si VRAI, la valeur de la méta données <b>Sujet</b> n'est pas la bonne.
* <br><b> manqueCreationDate</b> si VRAI, il n'y a pas de méta données <b>creationDate</b>.
* <br><b> manqueValeurCreationDate</b> si VRAI, la date de la méta données <b>creationDate</b> n'est pas la bonne.
* <br><b> manqueHistorique</b> si VRAI, il n'y a pas d'historique des modifications.<br>
* <br><b> manqueInitialCreator</b> si VRAI, il n'y a pas de premier auteur ou qu'il ne correspond pas.<br>
* @param nodStudent : node de l'étudiants.
* @param nodSujet : node du sujet.
* @param a : objet Run de cXML.
* @return retourn le node erreurs.
*/
private static node retourneNodeErreur(node nodStudent, node nodSujet, Run a) {
node erreurs = new node();
erreurs.setNomElt("erreurs");
boolean manqueMetaSujet = false;
boolean manqueValeurMetaSujet = false;
boolean manqueCreationDate = false;
boolean manqueValeurCreationDate = false;
boolean manqueHistorique = false;
boolean manqueInitialCreator = false;
node b = null;
if(nodSujet.getAttributs().get("presenceMetaSujet")!=null) {
if(nodSujet.getAttributs().get("presenceMetaSujet").equals("true")) {
b = a.retourneFirstNodeByNameAttributValue(nodStudent, "meta:user-defined", "meta:name", "Sujet");
if(b==null) {
manqueMetaSujet=true;
}else {
if(!nodSujet.getAttributs().get("metaSujet").equals(b.getContenu())) {
manqueValeurMetaSujet=true;
}
}
}else {
}
}else {
b = a.retourneFirstNodeByNameAttributValue(nodStudent, "meta:user-defined", "meta:name", "Sujet");
if(b==null) {
manqueMetaSujet=true;
}else {
if(!nodSujet.getAttributs().get("metaSujet").equals(b.getContenu())) {
manqueValeurMetaSujet=true;
}
}
}
b = nodStudent.retourneFirstEnfantsByName("meta:creation-date");
if(!b.getNomElt().equals("meta:creation-date")) {
manqueValeurCreationDate=true;
}
if(nodSujet.getAttributs().get("creationDate")!=null) {
if(!(b.getContenu().contains(nodSujet.getAttributs().get("creationDate")))) { //nodSujet.getAttributs().get("creationDate").contains(b.getContenu())
manqueValeurCreationDate = true;
}
}
if(nodSujet.getAttributs().get("controleDateCreation")!=null) if(nodSujet.getAttributs().get("controleDateCreation").equals("false")) {
manqueValeurCreationDate = false;
}
if(nodSujet.getAttributs().get("controle_Initial_Creator")!=null) {
if(nodSujet.getAttributs().get("controle_Initial_Creator").equalsIgnoreCase("true")) {
b = nodStudent.retourneFirstEnfantsByName("meta:initial-creator");
if(b.getNomElt().equals("meta:initial-creator")) {
if(nodSujet.getAttributs().get("Initial_Creator")!=null) {
if( !b.getContenu().equals(nodSujet.getAttributs().get("Initial_Creator"))) {
manqueInitialCreator = true;
}
}else {
System.out.println("ERROR. There is no Initial_Creator.");
}
}else {
manqueInitialCreator = true;
}
}
}
b = nodStudent.retourneFirstEnfantsByName("historique");
if(b.getNomElt().equals("historique")) {
if(Integer.valueOf(b.getAttributs().get("nbrModif"))<1) {
manqueHistorique =true;
}
}
erreurs.getAttributs().put("manqueMetaSujet", String.valueOf(manqueMetaSujet));
erreurs.getAttributs().put("manqueValeurMetaSujet", String.valueOf(manqueValeurMetaSujet));
erreurs.getAttributs().put("manqueCreationDate", String.valueOf(manqueCreationDate));
erreurs.getAttributs().put("manqueValeurCreationDate", String.valueOf(manqueValeurCreationDate));
erreurs.getAttributs().put("manqueInitialCreator", String.valueOf(manqueInitialCreator));
if(nodSujet.getAttributs().get("historiquePresent")!=null) if(nodSujet.getAttributs().get("historiquePresent").equalsIgnoreCase("true")) {
erreurs.getAttributs().put("manqueHistorique", "true");
}else {
erreurs.getAttributs().put("manqueHistorique", "false");
manqueHistorique = false;
}
if( manqueMetaSujet == false && manqueValeurMetaSujet == false && manqueCreationDate == false && manqueValeurCreationDate == false
&& manqueHistorique == false && manqueInitialCreator == false) {
erreurs.getAttributs().put("oneError", "false");
}else {
erreurs.getAttributs().put("oneError", "true");
}
erreurs.setClose(true);
return erreurs;
}
/**
* Assemblage du node annalyse à partir des différents nodes de l'analyse.<br>
* <br>
* @param nodouverture
* @param nodbodyetnotation
* @param nodmenu
* @param erreurs
* @param nodmeta
* @param nodpage
* @param nodparagraph
* @param nodsequence
* @param nodnumerochapitre
* @param nodframes
* @param nodsections
* @param nodbiblio
* @param nodtablematieres
* @param nodtableillustrations
* @param nodstructurepage
* @return
*/
private static node clotureNodeAnalyse(node nodouverture, node nodbodyetnotation, node nodmenu, node erreurs, node nodmeta, node nodpage,
node nodparagraph, node nodsequence, node nodnumerochapitre, node nodframes, node nodsections, node nodbiblio, node nodtablematieres,
node nodtableillustrations, node nodstructurepage, String texteCommentaire) {
node nodanalyse = new node();
//recalcul les points pour les placer dans le node nodbodyetnotation
double notefrom = 20; // valeur par défaut
double progression = 1; // valeur par défaut
boolean baremeABC = false;
if(nodouverture!=null) if(nodouverture.isClose()) {
if(nodouverture.getAttributs().get("notefrom")!=null) {
try {
notefrom = Math.abs(Double.valueOf(nodouverture.getAttributs().get("notefrom")));
}catch (Exception e) {
System.out.println("The \"noteFrom\" attribute of the analyze file cannot be converted to a \"double\".");
System.out.println("Value of notefrom = 20.");
}
}
if(nodouverture.getAttributs().get("progression")!=null) {
try {
progression = Math.abs(Double.valueOf(nodouverture.getAttributs().get("progression")));
}catch (Exception e) {
System.out.println("The \"progression\" attribute of the analyze file cannot be converted to \"double\".");
System.out.println("Value of progression = 1.");
}
}
if(nodouverture.getAttributs().get("baremeABC")!=null) {
try {
baremeABC = Boolean.valueOf(nodouverture.getAttributs().get("baremeABC"));
}catch (Exception e) {
System.out.println("The \"baremeABC\" attribute of the analyze file cannot be converted to \"boolean\".");
System.out.println("Value of baremeABC = false.");
}
}
}
double pointmeta = 0; double pointmetatotal = 0 ; double poidsmeta = 0;
if(nodmeta!=null) if(nodmeta.isClose()) {
if(nodmeta.getAttributs().get("pointgagner")!=null) pointmeta = Double.valueOf(nodmeta.getAttributs().get("pointgagner"));
if(nodmeta.getAttributs().get("pointtotal")!=null) pointmetatotal = Double.valueOf(nodmeta.getAttributs().get("pointtotal"));
if(nodmeta.getAttributs().get("poids")!=null) try{poidsmeta = Math.abs(Double.valueOf(nodmeta.getAttributs().get("poids")));}catch (Exception e) { };
}
double pointpage = 0; double pointpagetotal = 0 ; double poidspage = 0;
if(nodpage!=null) if(nodpage.isClose()) {
if(nodpage.getAttributs().get("pointgagner")!=null) pointpage = Double.valueOf(nodpage.getAttributs().get("pointgagner"));
if(nodpage.getAttributs().get("pointtotal")!=null) pointpagetotal = Double.valueOf(nodpage.getAttributs().get("pointtotal"));
if(nodpage.getAttributs().get("poids")!=null) try{poidspage = Math.abs(Double.valueOf(nodpage.getAttributs().get("poids")));}catch (Exception e) { };
}
double pointparagraph = 0; double pointparagraphtotal = 0 ; double poidsparagraph = 0;
if(nodparagraph!=null) if(nodparagraph.isClose()) {
if(nodparagraph.getAttributs().get("pointgagner")!=null) pointparagraph = Double.valueOf(nodparagraph.getAttributs().get("pointgagner"));
if(nodparagraph.getAttributs().get("pointtotal")!=null) pointparagraphtotal = Double.valueOf(nodparagraph.getAttributs().get("pointtotal"));
if(nodparagraph.getAttributs().get("poids")!=null) try{Math.abs(poidsparagraph = Double.valueOf(nodparagraph.getAttributs().get("poids")));}catch (Exception e) { };
}
double pointsequence = 0; double pointsequencetotal = 0 ; double poidssequence = 0;
if(nodsequence!=null) if(nodsequence.isClose()) {
if(nodsequence.getAttributs().get("pointgagner")!=null) pointsequence = Double.valueOf(nodsequence.getAttributs().get("pointgagner"));
if(nodsequence.getAttributs().get("pointtotal")!=null) pointsequencetotal = Double.valueOf(nodsequence.getAttributs().get("pointtotal"));
if(nodsequence.getAttributs().get("poids")!=null) try{poidssequence = Math.abs(Double.valueOf(nodsequence.getAttributs().get("poids")));}catch (Exception e) { };
}
double pointnumerotation = 0; double pointnumerotationtotal = 0 ; double poidsnumerotation = 0;
if(nodnumerochapitre!=null) if(nodnumerochapitre.isClose()) {
if(nodnumerochapitre.getAttributs().get("pointgagner")!=null) pointnumerotation = Double.valueOf(nodnumerochapitre.getAttributs().get("pointgagner"));
if(nodnumerochapitre.getAttributs().get("pointtotal")!=null) pointnumerotationtotal = Double.valueOf(nodnumerochapitre.getAttributs().get("pointtotal"));
if(nodnumerochapitre.getAttributs().get("poids")!=null) try{poidsnumerotation = Math.abs(Double.valueOf(nodnumerochapitre.getAttributs().get("poids")));}catch (Exception e) { };
}
double pointframe = 0; double pointframetotal = 0 ; double poidsframe = 0;
if(nodframes!=null) if(nodframes.isClose()) {
if(nodframes.getAttributs().get("pointgagner")!=null) pointframe = Double.valueOf(nodframes.getAttributs().get("pointgagner"));
if(nodframes.getAttributs().get("pointtotal")!=null) pointframetotal = Double.valueOf(nodframes.getAttributs().get("pointtotal"));
if(nodframes.getAttributs().get("poids")!=null) try{poidsframe = Math.abs(Double.valueOf(nodframes.getAttributs().get("poids")));}catch (Exception e) { };
}
double pointbiblio = 0; double pointbibliototal = 0 ; double poidsbiblio = 0;
if(nodbiblio!=null) if(nodbiblio.isClose()) {
if(nodbiblio.getAttributs().get("pointgagner")!=null) pointbiblio = Double.valueOf(nodbiblio.getAttributs().get("pointgagner"));
if(nodbiblio.getAttributs().get("pointtotal")!=null) pointbibliototal = Double.valueOf(nodbiblio.getAttributs().get("pointtotal"));
if(nodbiblio.getAttributs().get("poids")!=null) try{poidsbiblio = Math.abs(Double.valueOf(nodbiblio.getAttributs().get("poids")));}catch (Exception e) { };
}
double pointtablematieres = 0; double pointtablematierestotal = 0 ; double poidstablematieres = 0;
if(nodtablematieres!=null) if(nodtablematieres.isClose()) {
if(nodtablematieres.getAttributs().get("pointgagner")!=null) pointtablematieres = Double.valueOf(nodtablematieres.getAttributs().get("pointgagner"));
if(nodtablematieres.getAttributs().get("pointtotal")!=null) pointtablematierestotal = Double.valueOf(nodtablematieres.getAttributs().get("pointtotal"));
if(nodtablematieres.getAttributs().get("poids")!=null) try{poidstablematieres = Math.abs(Double.valueOf(nodtablematieres.getAttributs().get("poids")));}catch (Exception e) { };
}
double pointtableillustration = 0; double pointtableillustrationtotal = 0 ; double poidstableillustration = 0;
if(nodtableillustrations!=null) if(nodtableillustrations.isClose()) {
if(nodtableillustrations.getAttributs().get("pointgagner")!=null) pointtableillustration = Double.valueOf(nodtableillustrations.getAttributs().get("pointgagner"));
if(nodtableillustrations.getAttributs().get("pointtotal")!=null) pointtableillustrationtotal = Double.valueOf(nodtableillustrations.getAttributs().get("pointtotal"));
if(nodtableillustrations.getAttributs().get("poids")!=null) try{poidstableillustration = Math.abs(Double.valueOf(nodtableillustrations.getAttributs().get("poids")));}catch (Exception e) { };
}
double pointstructure = 0; double pointstructuretotal = 0 ; double poidsstructure = 0;
if(nodstructurepage!=null) if(nodstructurepage.isClose()) {
if(nodstructurepage.getAttributs().get("pointgagner")!=null) pointstructure = Double.valueOf(nodstructurepage.getAttributs().get("pointgagner"));
if(nodstructurepage.getAttributs().get("pointtotal")!=null) pointstructuretotal = Double.valueOf(nodstructurepage.getAttributs().get("pointtotal"));
if(nodstructurepage.getAttributs().get("poids")!=null) try{poidsstructure = Math.abs(Double.valueOf(nodstructurepage.getAttributs().get("poids")));}catch (Exception e) { };
}
double pointsections = 0; double pointsectionstotal = 0 ; double poidssections = 0;
if(nodsections!=null) if(nodsections.isClose()) {
if(nodsections.getAttributs().get("pointgagner")!=null) pointsections = Double.valueOf(nodsections.getAttributs().get("pointgagner"));
if(nodsections.getAttributs().get("pointtotal")!=null) pointsectionstotal = Double.valueOf(nodsections.getAttributs().get("pointtotal"));
if(nodsections.getAttributs().get("poids")!=null) try{poidssections = Math.abs(Double.valueOf(nodsections.getAttributs().get("poids")));}catch (Exception e) { };
}
double proportionCorrect = 0 ;
double poidsTotal = 0;
double pointsTotal = 0;
double pointgagner = 0;
double note = 0 ;
proportionCorrect = (poidsmeta*pointmeta + poidspage*pointpage + poidsparagraph*pointparagraph + poidssequence*pointsequence + poidsnumerotation*pointnumerotation + poidsframe*pointframe + poidsbiblio*pointbiblio + poidstablematieres*pointtablematieres + poidstableillustration*pointtableillustration + poidsstructure*pointstructure + poidssections*pointsections)
/ (poidsmeta*pointmetatotal + poidspage*pointpagetotal + poidsparagraph*pointparagraphtotal + poidssequence*pointsequencetotal + poidsnumerotation*pointnumerotationtotal + poidsframe*pointframetotal + poidsbiblio*pointbibliototal + poidstablematieres*pointtablematierestotal + poidstableillustration*pointtableillustrationtotal + poidsstructure*pointstructuretotal + poidssections*pointsectionstotal);
poidsTotal = poidsmeta + poidspage + poidsparagraph + poidssequence + poidsnumerotation + poidsframe + poidsbiblio + poidstablematieres + poidstableillustration + poidsstructure + poidssections;
pointsTotal = pointmetatotal + pointpagetotal + pointparagraphtotal + pointsequencetotal + pointnumerotationtotal + pointframetotal + pointbibliototal + pointtablematierestotal + pointtableillustrationtotal + pointstructuretotal + pointsectionstotal;
pointgagner = pointmeta + pointpage + pointparagraph + pointsequence + pointnumerotation + pointframe + pointbiblio + pointtablematieres + pointtableillustration + pointstructure + pointsections;
note = Math.pow(proportionCorrect, progression)*notefrom;
DecimalFormat df = new DecimalFormat("###.##");
nodbodyetnotation.getAttributs().put("proportioncorrect", df.format(proportionCorrect*100) + "%");
nodbodyetnotation.getAttributs().put("note", df.format(note));
nodbodyetnotation.getAttributs().put("pointstotal", String.valueOf(pointsTotal));
nodbodyetnotation.getAttributs().put("poidstotal", String.valueOf(poidsTotal));
nodbodyetnotation.getAttributs().put("pointgagner", String.valueOf(pointgagner));
if(Boolean.valueOf(erreurs.getAttributs().get("oneError"))) {
nodbodyetnotation.getAttributs().put("proportioncorrect", "0%");
nodbodyetnotation.getAttributs().put("note", "0.00");
proportionCorrect = 0.00;
}
// si bareme ABC (5 intervalles A, B, C, D, E de 20%)
if(baremeABC) {
double intervalle1 = Math.pow(0.2, 1/progression) ;
double intervalle2 = Math.pow(0.4, 1/progression) ;
double intervalle3 = Math.pow(0.6, 1/progression) ;
double intervalle4 = Math.pow(0.8, 1/progression) ;
nodbodyetnotation.getAttributs().put("BorneE", String.valueOf(intervalle1));
nodbodyetnotation.getAttributs().put("BorneD", String.valueOf(intervalle2));
nodbodyetnotation.getAttributs().put("BorneC", String.valueOf(intervalle3));
nodbodyetnotation.getAttributs().put("BorneB", String.valueOf(intervalle4));
nodbodyetnotation.getAttributs().put("BorneA", "1.00");
if(proportionCorrect<intervalle1) nodbodyetnotation.getAttributs().put("noteABC", "E");
if(proportionCorrect>=intervalle1 && proportionCorrect<intervalle2) nodbodyetnotation.getAttributs().put("noteABC", "D");
if(proportionCorrect>=intervalle2 && proportionCorrect<intervalle3) nodbodyetnotation.getAttributs().put("noteABC", "C");
if(proportionCorrect>=intervalle3 && proportionCorrect<intervalle4) nodbodyetnotation.getAttributs().put("noteABC", "B");
if(proportionCorrect>=intervalle4) nodbodyetnotation.getAttributs().put("noteABC", "A");
}
nodanalyse.ajouteEnfant(nodouverture);
nodanalyse.ajouteEnfant(nodbodyetnotation);
nodanalyse.ajouteEnfant(nodmenu);
nodanalyse.ajouteEnfant(erreurs);
nodanalyse.ajouteEnfant(nodmeta);
nodanalyse.ajouteEnfant(nodpage);
nodanalyse.ajouteEnfant(nodparagraph);
nodanalyse.ajouteEnfant(nodsequence);
nodanalyse.ajouteEnfant(nodnumerochapitre);
nodanalyse.ajouteEnfant(nodframes);
nodanalyse.ajouteEnfant(nodsections);
nodanalyse.ajouteEnfant(nodbiblio);
nodanalyse.ajouteEnfant(nodtablematieres);
nodanalyse.ajouteEnfant(nodtableillustrations);
nodanalyse.ajouteEnfant(nodstructurepage);
node nodfermeturebodyHTML = new node();
nodfermeturebodyHTML.setNomElt("fermeture");
nodfermeturebodyHTML.setClose(true);
nodanalyse.getNodes().add(nodfermeturebodyHTML);
nodanalyse.setNomElt("analyse");
nodanalyse.setContenu(texteCommentaire);
nodanalyse.setClose(true);
return nodanalyse;
}
/**
* Analyse du node <b>office:meta</b>.
* @param nodStudentMeta
* @param nodSujetMeta
* @param a
* @param nodmenu
* @return
*/
private static node analyseMeta(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<node> sujet = a.Applatir(nodSujetMeta.getNodes(), new ArrayList<node>());
//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<String> key = sujet.get(i).getAttributs().keys();
while(key.hasMoreElements()) {
String k = key.nextElement();
if(sujet.get(i).getAttributs().get(k).contains("")){
// PARTIE AVANT - CETTE PARTIE DONNER SATISFACTION
// boolean trouvelebonnode =false;
//
// ArrayList<node> nod = a.retourneNames(nodStudentMeta, namenode);
// for(int j = 0 ; j < nod.size(); j ++) {
// String Tst = outils.Compare(nod.get(j).getAttributs().get(k), sujet.get(i).getAttributs().get(k));
// if(Tst.contains("Correct")) {
// trouvelebonnode=true;
// node item = new node("ana:meta", Tst, outils.withoutPoint(sujet.get(i).getAttributs().get(k)), nod.get(j).getAttributs().get(k), sujet.get(i).getAttributs().get(k), 1, outils.getPointEnJeu(),namenode);
// nodmeta.getNodes().add(item);
// break;
// }else {
// outils.decrementPointEnJeuDuTotal();
// }
// }
//
// if(!trouvelebonnode) {
// String Tst = outils.Compare("null", sujet.get(i).getAttributs().get(k));
// node item = new node("ana:meta", Tst, outils.withoutPoint(sujet.get(i).getAttributs().get(k)), "null", sujet.get(i).getAttributs().get(k), 2, outils.getPointEnJeu(), namenode);
// nodmeta.getNodes().add(item);
// }
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 {
// PARTIE AVANT - CETTE PARTIE DONNER SATISFACTION
// Enumeration<String> key = sujet.get(i).getAttributs().keys();
// while(key.hasMoreElements()) {
// String k = key.nextElement();
// if( sujet.get(i).getAttributs().get(k).contains("‽")){
// String valueAttributStudent = nodStudentMeta.retourneFirstEnfantsByName(namenode).getAttributs().get(k);
// String valueAttributSujet = sujet.get(i).getAttributs().get(k);
// node item =retourneNoteAvecResultatsAnalyse("ana:meta", k, valueAttributStudent, valueAttributSujet,namenode);
// nodmeta.getNodes().add(item);
// }
// }
ArrayList<node> 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);
}
}
// PARTIE AVANT - CETTE PARTIE DONNER SATISFACTION
// parcours le contenu autre que "meta:user-defined"
// if(sujet.get(i).getContenu().contains("‽") && sujet.get(i).getAttributs().get("meta:user-defined")==null) {
// String contentStudent = nodStudentMeta.retourneFirstEnfantsByName(namenode).getContenu();
// String contentSujet = sujet.get(i).getContenu();
//
// node item =retourneNoteAvecResultatsAnalyse("ana:meta", "texte", contentStudent, contentSujet,namenode);
//
// nodmeta.getNodes().add(item);
//
// }
}
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 <b>style:page</b>.
* @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();
for(int i = 0 ; i < nodSujetPage.getNodes().size(); i++) { //niveau 1
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());
// les enfants du premier niveau du node
for(int j = 0 ; j < pageSujet.getNodes().size();j++ ) { //niveau 2
node nodSujet = pageSujet.getNodes().get(j);
String nameNode = nodSujet.getNomElt();
page = addNodeSautTitre(nodSujet, page); // ajoute des saut de page s'il y a des sauts avec des titres
//recherche le node correspondant de l'étudiant
node nodStudent = null;
if(pageStudent!=null) if(pageStudent.retourneFirstEnfantsByName(nameNode).getNomElt().equals(nameNode)) {
nodStudent = pageStudent.retourneFirstEnfantsByName(nameNode);
}
//analyse le nom du node
// if(nodSujet.getAttributs().get("evalNameNode")!=null) {
// String point = nodSujet.getAttributs().get("evalNameNode");
// page =analyseNameNode(page,nodStudent,nodSujet.getNomElt(),point, nodSujet.getNomElt());
// }
// analyse attribut et contenu des enfants du premier niveau
page = analyseLesAttributEtContenuDuNode(nodStudent, nodSujet, page, "ana:page",pageSujet.getNodes().get(j).getNomElt());
for(int k = 0 ; k < nodSujet.getNodes().size();k++) { //niveau 3
// C'est à ce niveau que se trouve les nodes text:p dans les entêtes et les pieds de page
node nod2Sujet = nodSujet.getNodes().get(k);
String nameNode2 = nod2Sujet.getNomElt();
page = addNodeSautTitre(nod2Sujet, page); // ajoute des sauts s'il y a des sauts avec des titres
//recherche le node correspondant de l'étudiant
node nod2Student = null;
if(nodStudent!=null) if(nodStudent.retourneFirstEnfantsByName(nameNode2).getNomElt().equals(nameNode2)) {
//nod2Student = nodStudent.retourneFirstEnfantsByName(nameNode2);
nod2Student = rechercheLeNodeEnCascade(nameNode2,nod2Sujet,null,null,nodStudent,a);
}
//analyse style du paragraphe
if(nod2Sujet.getAttributs().get("analyseStyle")!=null) {
if(nod2Sujet.getAttributs().get("analyseStyle").equals("true") && nod2Sujet.getNomElt().equals("text:p")) {
page = analyseStyle(page, nod2Sujet, nod2Student, nodSujetParagraphes, nodStudentParagraphes);
}
}
// analyse attribut et contenu des enfants du second niveau
page = analyseLesAttributEtContenuDuNode(nod2Student, nod2Sujet, page, "ana:page",nodSujet.getNodes().get(k).getNomElt() );
for(int l = 0 ; l < nod2Sujet.getNodes().size();l++) { //niveau 4
//C'est à ce niveau qi'il peut y avoir des nodes text:tab ou text:span
node nod3Sujet = nod2Sujet.getNodes().get(l);
String nameNode3 = nod3Sujet.getNomElt();
//page = addNodeSautTitre(nod3Sujet, page);
//recherche du node correspondant de l'étudiant
node nod3Student = null;
if(nod2Student!=null) if(nod2Student.retourneFirstEnfantsByName(nameNode3).getNomElt().equals(nameNode3)) {
nod3Student = rechercheLeNodeEnCascade(nameNode3,nod3Sujet,null,nodStudent,nod2Student,a);
}
// analyse attribut et contenu des enfants du troisième niveau
page = analyseLesAttributEtContenuDuNode(nod3Student, nod3Sujet, page, "ana:page", nod2Sujet.getNodes().get(l).getNomElt());
for(int m = 0 ; m < nod3Sujet.getNodes().size();m++) { //niveau 5
node nod4Sujet = nod3Sujet.getNodes().get(m);
String nameNode4 = nod4Sujet.getNomElt();
//recherche du node correspondant de l'étudiant
node nod4Student = null;
if(nod3Student!=null) if(nod3Student.retourneFirstEnfantsByName(nameNode4).getNomElt().equals(nameNode4)) {
nod4Student = rechercheLeNodeEnCascade(nameNode4,nod4Sujet,nodStudent,nod2Student,nod3Student,a);
}
// analyse attribut et contenu des enfants du troisième niveau
page = analyseLesAttributEtContenuDuNode(nod4Student, nod4Sujet, page, "ana:page", nod3Sujet.getNodes().get(m).getNomElt());
}
}
}
}
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 <b>style:paragraph</b>.
* @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 <b>sequences</b>.
* @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 <b>numerotationchapitre</b>.
* @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();
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 du node
numerotation = analyseLesAttributEtContenuDuNode(numerotationStudent, numerotationSujet, numerotation, "ana:numerotation",numerotationSujet.getNomElt());
// les enfants du premier niveau du node
for(int j = 0 ; j < numerotationSujet.getNodes().size();j++ ) {
node nodSujet = numerotationSujet.getNodes().get(j);
String nameNode = nodSujet.getNomElt();
node nodStudent = null;
if(numerotationStudent!=null) if(numerotationStudent.retourneFirstEnfantsByName(nameNode).getNomElt().equals(nameNode)) {
nodStudent = numerotationStudent.retourneFirstEnfantsByName(nameNode);
}
//insère un saut si titre pas vide et saut=true
numerotation=addNodeSautTitre(nodSujet, numerotation);
// analyse attribut et contenu des enfants du premier niveau
numerotation = analyseLesAttributEtContenuDuNode(nodStudent, nodSujet, numerotation, "ana:numerotation",numerotationSujet.getNodes().get(j).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 = numerotationStudent.retourneFirstEnfantsByName(nameNode2);
}
//insère un saut si titre pas vide et saut=true
numerotation=addNodeSautTitre(nod2Sujet, numerotation);
// analyse attribut et contenu des enfants du second niveau
numerotation = analyseLesAttributEtContenuDuNode(nod2Student, nod2Sujet, numerotation, "ana:numerotation",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 = numerotationStudent.retourneFirstEnfantsByName(nameNode3);
}
//insère un saut si titre pas vide et saut=true
numerotation=addNodeSautTitre(nod3Sujet, numerotation);
// analyse attribut et contenu des enfants du troisième niveau
numerotation = analyseLesAttributEtContenuDuNode(nod3Student, nod3Sujet, numerotation, "ana:paragraph", nod3Sujet.getNomElt());
}
}
}
numerotation.getAttributs().put("point", String.valueOf(outils.getPointsClass()-pointDebut));
numerotation.getAttributs().put("pointTotal", String.valueOf(outils.getPointTotal()-pointTotalDebut));
nodnumerotations.getNodes().add(numerotation);
}
}
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 <b>frames</b>.
* @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();
for(int i = 0 ; i < nodSujetFrames.getNodes().size(); i++) { //niveau 1
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 du node
frame = analyseLesAttributEtContenuDuNode(frameStudent, frameSujet, frame, "ana:frame",frameSujet.getNomElt());
// les enfants du premier niveau du node
for(int j = 0 ; j < frameSujet.getNodes().size();j++ ) { //niveau 2
node nodSujet = frameSujet.getNodes().get(j);
String nameNode = nodSujet.getNomElt();
node nodStudent = null;
if(frameStudent!=null) if(frameStudent.retourneFirstEnfantsByName(nameNode).getNomElt().equals(nameNode)) {
nodStudent = frameStudent.retourneFirstEnfantsByName(nameNode);
}
if(frameStudent!=null) if(nameNode.equals("text:p")) {
if(nodSujet.getAttributs().get("index")!=null) {
nodStudent = a.retourneFirstNodeByNameAttributValue(frameStudent, nameNode, "text:p", frameSujet.getNodes().get(j).getAttributs().get("index"));
}
if(nodStudent==null)if(nodSujet.retourneLesContenusEnfants("").isEmpty()) { //si il n'y a pas de contenu, passe par l'index
nodStudent = a.retourneFirstNodeByNameAttributValue(frameStudent, nameNode, "index", outils.withoutCodeAndPoint(nodSujet.getAttributs().get("index")));
}else {
nodStudent = a.retourneFirstNodeByFindContent2(frameStudent.getNodes(), nodSujet.retourneLesContenusEnfants(""), commandes.tolerance_characters,commandes.tolerance_text);
}
}
//insère un saut si titre pas vide et saut=true
frame=addNodeSautTitre(nodSujet, frame);
// analyse attribut et contenu des enfants du premier niveau
frame = analyseLesAttributEtContenuDuNode(nodStudent, nodSujet, frame, "ana:frame",nodSujet.getNomElt());
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(nodStudent!=null) if(nodStudent.retourneFirstEnfantsByName(nameNode2).getNomElt().equals(nameNode2)) {
nod2Student = nodStudent.retourneFirstEnfantsByName(nameNode2);
}
if(nodStudent!=null) if(nameNode2.equals("text:p")) {
if(nod2Sujet.getAttributs().get("index")!=null) {
nod2Student = a.retourneFirstNodeByNameAttributValue(nodStudent, nameNode2, "index", nod2Sujet.getAttributs().get("index"));
}
}
if(nodStudent!=null) if(nameNode2.equals("text:database-display")) {
if(nod2Sujet.getAttributs().get("text:column-name")!=null) {
nod2Student = a.retourneFirstNodeByNameAttributValue(nodStudent, nameNode2, "text:column-name", outils.withoutCodeAndPoint(nod2Sujet.getAttributs().get("text:column-name")));
}
}
//insère un saut si titre pas vide et saut=true
frame=addNodeSautTitre(nod2Sujet, frame);
// analyse attribut et contenu des enfants du second niveau
frame = analyseLesAttributEtContenuDuNode(nod2Student, nod2Sujet, frame, "ana:frame",nod2Sujet.getNomElt() );
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(nod2Student!=null) if(nod2Student.retourneFirstEnfantsByName(nameNode3).getNomElt().equals(nameNode3)) {
nod3Student = nod2Student.retourneFirstEnfantsByName(nameNode3);
}
if(nod2Student!=null) if(nameNode3.equals("text:database-display")) {
if(nod3Sujet.getAttributs().get("text:column-name")!=null) {
nod3Student = a.retourneFirstNodeByNameAttributValue(nod2Student, nameNode3, "text:column-name", outils.withoutCodeAndPoint(nod3Sujet.getAttributs().get("text:column-name")));
}
}
// analyse attribut et contenu des enfants du troisième niveau
if(nod3Student!=null) if(nod3Sujet.getNomElt().equals("text:sequence") && nod3Student.getNomElt().equals("text:sequence")) {
ArrayList<node> changements = nod2Student.retourneEnfantsByName("text:change", new ArrayList<node>());
nod3Student.setNodes(changements);
}
//insère un saut si titre pas vide et saut=true
frame=addNodeSautTitre(nod3Sujet, frame);
// analyse attribut et contenu des enfants du second niveau
frame = analyseLesAttributEtContenuDuNode(nod3Student, nod3Sujet, frame, "ana:frame", nod3Sujet.getNomElt());
}
}
}
frame.getAttributs().put("point", String.valueOf(outils.getPointsClass()-pointDebut));
frame.getAttributs().put("pointTotal", String.valueOf(outils.getPointTotal()-pointTotalDebut));
nodframes.getNodes().add(frame);
}
}
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 <b>bibliographies</b>.
* @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(j<nodStudent.getNodes().size()) {
biblio = analyseLesAttributEtContenuDuNode(nodStudent.getNodes().get(j), nodSujet.getNodes().get(j), biblio, "ana:biblio", nodSujet.getNodes().get(j).getNomElt());
for(int k=0; k<nodSujet.getNodes().get(j).getNodes().size();k++) {
if(k<nodStudent.getNodes().get(j).getNodes().size()) {
biblio = analyseLesAttributEtContenuDuNode(nodStudent.getNodes().get(j).getNodes().get(k), nodSujet.getNodes().get(j).getNodes().get(k), biblio, "ana:biblio", nodSujet.getNodes().get(j).getNodes().get(k).getNomElt());
}else {
biblio = analyseLesAttributEtContenuDuNode(null, nodSujet.getNodes().get(j).getNodes().get(k), biblio, "ana:biblio", nodSujet.getNodes().get(j).getNodes().get(k).getNomElt());
}
}
}else {
biblio = analyseLesAttributEtContenuDuNode(null, nodSujet.getNodes().get(j), biblio, "ana:biblio", nodSujet.getNodes().get(j).getNomElt());
}
}else {
biblio = analyseLesAttributEtContenuDuNode(null, nodSujet.getNodes().get(j), biblio, "ana:biblio", nodSujet.getNodes().get(j).getNomElt());
for(int k=0; k<nodSujet.getNodes().get(j).getNodes().size();k++) {
biblio = analyseLesAttributEtContenuDuNode(null, nodSujet.getNodes().get(j).getNodes().get(k), biblio, "ana:biblio", nodSujet.getNodes().get(j).getNodes().get(k).getNomElt());
}
}
}
// ArrayList<node> LestextpSujet = a.retourneNames(nodSujet, "text:p");
// ArrayList<node> LestextpStudent = null;
// if(nodStudent!=null) LestextpStudent = a.retourneNames(nodStudent, "text:p");
// biblio = analyseLesContenusDesArrayList(LestextpStudent,LestextpSujet,biblio,"ana:biblio","txt:p",a);
biblio.getAttributs().put("point", String.valueOf(outils.getPointsClass()-pointDebut));
biblio.getAttributs().put("pointTotal", String.valueOf(outils.getPointTotal()-pointTotalDebut));
nodbiblio.getNodes().add(biblio);
}
}
nodbiblio.getAttributs().put("pointgagner",String.valueOf(outils.getPointsClass()));
nodbiblio.getAttributs().put("pointtotal",String.valueOf(outils.getPointTotal()));
nodbiblio.getAttributs().put("proportioncorrect",String.valueOf(outils.getProportionCorrect()));
nodbiblio.setClose(true);
return nodbiblio;
}
/**
* Analyse du node <b>tablematieres</b>.
* @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(j<nodStudent.getNodes().size()) {
table = analyseLesAttributEtContenuDuNode(nodStudent.getNodes().get(j), nodSujet.getNodes().get(j), table, "ana:tablematiere", nodSujet.getNodes().get(j).getNomElt());
for(int k=0; k<nodSujet.getNodes().get(j).getNodes().size();k++) {
if(k<nodStudent.getNodes().get(j).getNodes().size()) {
table = analyseLesAttributEtContenuDuNode(nodStudent.getNodes().get(j).getNodes().get(k), nodSujet.getNodes().get(j).getNodes().get(k), table, "ana:tablematiere", nodSujet.getNodes().get(j).getNodes().get(k).getNomElt());
}else {
table = analyseLesAttributEtContenuDuNode(null, nodSujet.getNodes().get(j).getNodes().get(k), table, "ana:tablematiere", nodSujet.getNodes().get(j).getNodes().get(k).getNomElt());
}
}
}else {
table = analyseLesAttributEtContenuDuNode(null, nodSujet.getNodes().get(j), table, "ana:tablematiere", nodSujet.getNodes().get(j).getNomElt());
}
}else {
table = analyseLesAttributEtContenuDuNode(null, nodSujet.getNodes().get(j), table, "ana:tablematiere", nodSujet.getNodes().get(j).getNomElt());
for(int k=0; k<nodSujet.getNodes().get(j).getNodes().size();k++) {
table = analyseLesAttributEtContenuDuNode(null, nodSujet.getNodes().get(j).getNodes().get(k), table, "ana:tablematiere", nodSujet.getNodes().get(j).getNodes().get(k).getNomElt());
}
}
}
// ArrayList<node> LestextpSujet = a.retourneNames(nodSujet, "text:p");
// ArrayList<node> LestextpStudent = null;
// if(nodStudent!=null) LestextpStudent = a.retourneNames(nodStudent, "text:p");
//
// table = analyseLesContenusDesArrayList(LestextpStudent,LestextpSujet,table,"ana:tablematiere","txt:p",a);
table.getAttributs().put("point", String.valueOf(outils.getPointsClass()-pointDebut));
table.getAttributs().put("pointTotal", String.valueOf(outils.getPointTotal()-pointTotalDebut));
nodTablesMs.getNodes().add(table);
}
}
nodTablesMs.getAttributs().put("pointgagner",String.valueOf(outils.getPointsClass()));
nodTablesMs.getAttributs().put("pointtotal",String.valueOf(outils.getPointTotal()));
nodTablesMs.getAttributs().put("proportioncorrect",String.valueOf(outils.getProportionCorrect()));
nodTablesMs.setClose(true);
return nodTablesMs;
}
/**
* Analyse du node <b>tableillustrations</b>.
* @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<nodStudent.getNodes().size()) {
table = analyseLesAttributEtContenuDuNode(nodStudent.getNodes().get(j), nodSujet.getNodes().get(j), table, "ana:tableillustration", nodSujet.getNodes().get(j).getNomElt());
for(int k=0; k<nodSujet.getNodes().get(j).getNodes().size();k++) {
if(k<nodStudent.getNodes().get(j).getNodes().size()) {
table = analyseLesAttributEtContenuDuNode(nodStudent.getNodes().get(j).getNodes().get(k), nodSujet.getNodes().get(j).getNodes().get(k), table, "ana:tableillustration", nodSujet.getNodes().get(j).getNodes().get(k).getNomElt());
}else {
table = analyseLesAttributEtContenuDuNode(null, nodSujet.getNodes().get(j).getNodes().get(k), table, "ana:tableillustration", nodSujet.getNodes().get(j).getNodes().get(k).getNomElt());
}
}
}else {
table = analyseLesAttributEtContenuDuNode(null, nodSujet.getNodes().get(j), table, "ana:tableillustration", nodSujet.getNodes().get(j).getNomElt());
}
}else {
table = analyseLesAttributEtContenuDuNode(null, nodSujet.getNodes().get(j), table, "ana:tableillustration", nodSujet.getNodes().get(j).getNomElt());
for(int k=0; k<nodSujet.getNodes().get(j).getNodes().size();k++) {
table = analyseLesAttributEtContenuDuNode(null, nodSujet.getNodes().get(j).getNodes().get(k), table, "ana:tableillustration", nodSujet.getNodes().get(j).getNodes().get(k).getNomElt());
}
}
}
// ArrayList<node> LestextpSujet = a.retourneNames(nodSujet, "text:p");
// ArrayList<node> LestextpStudent = a.retourneNames(nodStudent, "text:p");
// table = analyseLesContenusDesArrayList(LestextpStudent,LestextpSujet,table,"ana:tableillustration","txt:p",a);
table.getAttributs().put("point", String.valueOf(outils.getPointsClass()-pointDebut));
table.getAttributs().put("pointTotal", String.valueOf(outils.getPointTotal()-pointTotalDebut));
nodTablesMs.getNodes().add(table);
}
}
nodTablesMs.getAttributs().put("pointgagner",String.valueOf(outils.getPointsClass()));
nodTablesMs.getAttributs().put("pointtotal",String.valueOf(outils.getPointTotal()));
nodTablesMs.getAttributs().put("proportioncorrect",String.valueOf(outils.getProportionCorrect()));
nodTablesMs.setClose(true);
return nodTablesMs;
}
/**
* Cette méthode permet d'analyse la structure du document.<br>
* La structure de l'étudiant est comparé avec la structure du sujet.<br>
* <br>
* @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();
//********************************
// Premier niveau que les pages
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 du node
page = analyseLesAttributEtContenuDuNode(pageStudent, pageSujet, page, "ana:page",pageSujet.getNomElt());
//**************************************
// second niveau
for(int j = 0 ; j < pageSujet.getNodes().size();j++ ) {
//boolean paragrapheTexte = false;
node nodSujet = pageSujet.getNodes().get(j);
String nameNode = nodSujet.getNomElt();
node nodStudent = null;
nodStudent = rechercheLeNodeEnCascade(nameNode,nodSujet,null,null,pageStudent,a);
//insère un saut s'il y a un titre avec un saut=true
page = addNodeSautTitre(nodSujet, page);
// analyse attribut et contenu des enfants du premier niveau
page = analyseLesAttributEtContenuDuNode(nodStudent, nodSujet, page, "ana:page",nodSujet.getNomElt());
//analyse le nom du node
if(nodSujet.getAttributs().get("evalNameNode")!=null) {
String point = nodSujet.getAttributs().get("evalNameNode");
page =analyseNameNode(page,nodStudent,nodSujet.getNomElt(),point, nodSujet.getNomElt());
}
// méthode analyseStyle
if(nameNode.equals("text:p") && nodSujetParagraphs!=null) {
page = analyseStyle(page, nodSujet,nodStudent, nodSujetParagraphs,nodStudentParagraphs);
}
//***************************
//troisieme niveau
for(int k = 0 ; k < nodSujet.getNodes().size();k++) {
node nod2Sujet = nodSujet.getNodes().get(k);
String nameNode2 = nod2Sujet.getNomElt();
node nod2Student = null;
nod2Student = rechercheLeNodeEnCascade(nameNode2,nod2Sujet,null,pageStudent,nodStudent,a);
//insère un saut s'il y a un titre avec un saut=true
page = addNodeSautTitre(nod2Sujet, page);
//analyse le nom du node
if(nod2Sujet.getAttributs().get("evalNameNode")!=null) {
String point = nod2Sujet.getAttributs().get("evalNameNode");
page =analyseNameNode(page,nod2Student,nod2Sujet.getNomElt(),point, nod2Sujet.getNomElt());
}
// méthode analyseStyle
if(nameNode.equals("text:p") && nodSujetParagraphs!=null) {
page = analyseStyle(page, nod2Sujet,nod2Student, nodSujetParagraphs,nodStudentParagraphs);
}
// analyse attribut et contenu des enfants du second niveau
page = analyseLesAttributEtContenuDuNode(nod2Student, nod2Sujet, page, "ana:page",nod2Sujet.getNomElt() );
//************************
//quatrieme niveau
for(int l = 0 ; l < nod2Sujet.getNodes().size();l++) {
node nod3Sujet = nod2Sujet.getNodes().get(l);
String nameNode3 = nod3Sujet.getNomElt();
node nod3Student = null;
nod3Student = rechercheLeNodeEnCascade(nameNode3,nod3Sujet,pageStudent,nodStudent,nod2Student,a);
//insère un saut s'il y a un titre avec un saut=true
page = addNodeSautTitre(nod3Sujet, page);
//analyse le nom du node
if(nod3Sujet.getAttributs().get("evalNameNode")!=null) {
String point = nod3Sujet.getAttributs().get("evalNameNode");
page =analyseNameNode(page,nod3Student,nod3Sujet.getNomElt(),point, nod3Sujet.getNomElt());
}
// méthode analyseStyle
if(nameNode.equals("text:p") && nodSujetParagraphs!=null) {
page = analyseStyle(page, nod3Sujet,nod3Student, nodSujetParagraphs,nodStudentParagraphs);
}
// analyse attribut et contenu des enfants du troisième niveau
page = analyseLesAttributEtContenuDuNode(nod3Student, nod3Sujet, page, "ana:page", nod3Sujet.getNomElt());
//****************
//cinquième niveau
for(int m = 0 ; m < nod3Sujet.getNodes().size();m++) {
node nod4Sujet = nod3Sujet.getNodes().get(m);
String nameNode4 = nod4Sujet.getNomElt();
node nod4Student = null;
nod4Student = rechercheLeNodeEnCascade(nameNode4,nod4Sujet,nodStudent,nod2Student,nod3Student,a);
//insère un saut s'il y a un titre avec un saut=true
page = addNodeSautTitre(nod4Sujet, page);
//analyse le nom du node
if(nod3Sujet.getAttributs().get("evalNameNode")!=null) {
String point = nod4Sujet.getAttributs().get("evalNameNode");
page =analyseNameNode(page,nod4Student,nod4Sujet.getNomElt(),point, nod4Sujet.getNomElt());
}
// méthode analyseStyle
if(nameNode.equals("text:p") && nodSujetParagraphs!=null) {
page = analyseStyle(page, nod4Sujet,nod4Student, nodSujetParagraphs,nodStudentParagraphs);
}
// analyse attribut et contenu des enfants du troisième niveau
page = analyseLesAttributEtContenuDuNode(nod4Student, nod4Sujet, page, "ana:page", nod4Sujet.getNomElt());
//************
// Sixieme niveau
for(int p = 0 ; p < nod4Sujet.getNodes().size();p++) {
node nod5Sujet = nod4Sujet.getNodes().get(p);
String nameNode5 = nod5Sujet.getNomElt();
node nod5Student = null;
nod5Student = rechercheLeNodeEnCascade(nameNode5,nod5Sujet,nod2Student,nod3Student,nod4Student,a);
//insère un saut s'il y a un titre avec un saut=true
page = addNodeSautTitre(nod5Sujet, page);
//analyse le nom du node
if(nod5Sujet.getAttributs().get("evalNameNode")!=null) {
String point = nod5Sujet.getAttributs().get("evalNameNode");
page =analyseNameNode(page,nod5Student,nod5Sujet.getNomElt(),point, nod5Sujet.getNomElt());
}
// méthode analyseStyle
if(nameNode.equals("text:p") && nodSujetParagraphs!=null) {
page = analyseStyle(page, nod5Sujet,nod5Student, nodSujetParagraphs,nodStudentParagraphs);
}
// analyse attribut et contenu des enfants du troisième niveau
page = analyseLesAttributEtContenuDuNode(nod5Student, nod5Sujet, page, "ana:page", nod5Sujet.getNomElt());
}
}
}
}
}
page.getAttributs().put("point", String.valueOf(outils.getPointsClass()-pointDebut));
page.getAttributs().put("pointTotal", String.valueOf(outils.getPointTotal()-pointTotalDebut));
nodSpages.getNodes().add(page);
}
}
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.<br>
* Les attributs et les contenus doivent posséder la carcatère ‽ ou ‼.<br>
* <br>
* @param nodeStudent : le node de l'étudiant.
* @param sujet : le node du sujet
* @param retour : le node à retourner avec les enfants nommés nameItem.
* @param nameItem : le nom des nodes enfants.
* @param nameElt : le nom de l'élément (node) analysé.
* @return le node <b>retour</b> avec tous les nodes enfants <b>nameItem</b> contenant les différentes analyse.
*/
private static node analyseLesAttributEtContenuDuNode(node nodeStudent, node sujet, node retour, String nameItem, String nameElt) {
Enumeration<String> key = sujet.getAttributs().keys();
while(key.hasMoreElements()) {
String k = key.nextElement();
if( sujet.getAttributs().get(k).contains("")){
if(nodeStudent!=null) {
String valueAttributStudent = nodeStudent.getAttributs().get(k);
String valueAttributSujet = sujet.getAttributs().get(k);
node item = retourneNoteAvecResultatsAnalyse(nameItem,k, valueAttributStudent, valueAttributSujet,nameElt);
retour.getNodes().add(item);
}else {
String valueAttributStudent = "null";
String valueAttributSujet = sujet.getAttributs().get(k);
node item = retourneNoteAvecResultatsAnalyse(nameItem, k, valueAttributStudent, valueAttributSujet,nameElt);
retour.getNodes().add(item);
}
}
if(k.equals("evalNameNode")) {
if(nodeStudent!=null) {
retour = analyseNameNode(retour,nodeStudent, sujet.getNomElt(), sujet.getAttributs().get("evalNameNode"),sujet.getNomElt());
}else {
retour = analyseNameNode(retour,null, sujet.getNomElt(), sujet.getAttributs().get("evalNameNode"),sujet.getNomElt());
}
}
}
//avec l'attribut allContent="strict1" ou allContent="environ1" alors analyse tout le contenu du node
if(sujet.getAttributs().get("allContent")!=null) if(!sujet.getAttributs().get("allContent").isEmpty()){
String points ="‽0";
if(sujet.getAttributs().get("allContent").contains("strict")) points = sujet.getAttributs().get("allContent").replace("strict", "");
if(sujet.getAttributs().get("allContent").contains("strictSansEspace")) points = sujet.getAttributs().get("allContent").replace("strictSansEspace", "≡‽");
if(sujet.getAttributs().get("allContent").contains("environ")) points = sujet.getAttributs().get("allContent").replace("environ", "¢‽");
String allContentSujet = sujet.retourneLesContenusEnfants("") + points;
String allContentStudent = "null";
if( nodeStudent!=null) allContentStudent = nodeStudent.retourneLesContenusEnfants("");
node item = retourneNoteAvecResultatsAnalyse(nameItem,"Contenu textuel", allContentStudent, allContentSujet, nameElt);
retour.getNodes().add(item);
}
// analyse le contenu du node avec tous les nodes sauf "text:sequence"
if(sujet.getContenu().contains("") && !sujet.getNomElt().equals("text:sequence")) {
String contenuStudent ="";
if(nodeStudent!=null) contenuStudent = nodeStudent.getContenu();
String contenuSujet = sujet.getContenu();
node item = retourneNoteAvecResultatsAnalyse(nameItem,"Contenu textuel", contenuStudent, contenuSujet, nameElt);
retour.getNodes().add(item);
}
// analyse le contenu du node text:sequence et tous les enfants text:change (lorsque les légendes sont modifiées)
if(sujet.getContenu().contains("") && sujet.getNomElt().equals("text:sequence")) {
String contenuStudent ="";
if(nodeStudent!=null) contenuStudent = nodeStudent.retourneLesContenusEnfants("text:change");
String contenuSujet = sujet.getContenu();
node item = retourneNoteAvecResultatsAnalyse(nameItem,"Contenu textuel", contenuStudent, contenuSujet, nameElt);
retour.getNodes().add(item);
}
return retour;
}
/**
* Analyse tous les attributs des styles de paragraphes.<br>
* Formatage direct des styles de paragraphe. Les attributs doivent contenir le code ‼.<br>
* <br>
* @param nodeStudent : le node de l'étudiant.
* @param sujet : le node du sujet
* @param retour : le node à retourner avec les enfants nommés nameItem.
* @param nameItem : le nom des nodes enfants.
* @param nameElt : le nom de l'élément (node) analysé.
* @return le node <b>retour</b> avec tous les nodes enfants <b>nameItem</b> contenant les différentes analyse.
*/
private static node analyseLesAttributAnalyseStyle(node nodeStyleParagraphStudent, node nodeStyleParagraphSujet, node retour, String nameItem, String nameElt) {
Enumeration<String> key = nodeStyleParagraphSujet.getAttributs().keys();
while(key.hasMoreElements()) {
String k = key.nextElement();
if(nodeStyleParagraphSujet.getAttributs().get(k).contains("") || nodeStyleParagraphSujet.getAttributs().get(k).contains("")){
if(nodeStyleParagraphStudent!=null) {
String valueAttributStudent = nodeStyleParagraphStudent.getAttributs().get(k);
String valueAttributSujet = nodeStyleParagraphSujet.getAttributs().get(k).replace("", "");
node item = retourneNoteAvecResultatsAnalyse(nameItem,k, valueAttributStudent, valueAttributSujet,nameElt);
retour.getNodes().add(item);
}else {
String valueAttributStudent = "null";
String valueAttributSujet = nodeStyleParagraphSujet.getAttributs().get(k).replace("", "");
node item = retourneNoteAvecResultatsAnalyse(nameItem, k, valueAttributStudent, valueAttributSujet,nameElt);
retour.getNodes().add(item);
}
}
}
if(nodeStyleParagraphStudent!=null) {
if(nodeStyleParagraphSujet.retourneEnfantsByNameExist("style:paragraph-properties") && nodeStyleParagraphStudent.retourneEnfantsByNameExist("style:paragraph-properties") ) {
node propertiesSujet = nodeStyleParagraphSujet.retourneFirstEnfantsByName("style:paragraph-properties");
node propertiesStudent = nodeStyleParagraphStudent.retourneFirstEnfantsByName("style:paragraph-properties");
key = propertiesSujet.getAttributs().keys();
while(key.hasMoreElements()) {
String k = key.nextElement();
if(propertiesSujet.getAttributs().get(k).contains("") || propertiesSujet.getAttributs().get(k).contains("")){
if(propertiesStudent!=null) {
String valueAttributStudent = propertiesStudent.getAttributs().get(k);
String valueAttributSujet = propertiesSujet.getAttributs().get(k).replace("", "");
node item = retourneNoteAvecResultatsAnalyse(nameItem,k, valueAttributStudent, valueAttributSujet,"style:paragraph-properties");
retour.getNodes().add(item);
}else {
String valueAttributStudent = "null";
String valueAttributSujet = propertiesSujet.getAttributs().get(k).replace("", "");
node item = retourneNoteAvecResultatsAnalyse(nameItem, k, valueAttributStudent, valueAttributSujet,"style:paragraph-properties");
retour.getNodes().add(item);
}
}
}
}
}else {
node propertiesSujet = nodeStyleParagraphSujet.retourneFirstEnfantsByName("style:paragraph-properties");
key = propertiesSujet.getAttributs().keys();
while(key.hasMoreElements()) {
String k = key.nextElement();
if(propertiesSujet.getAttributs().get(k).contains("") || propertiesSujet.getAttributs().get(k).contains("")){
String valueAttributStudent = "null";
String valueAttributSujet = propertiesSujet.getAttributs().get(k).replace("", "");
node item = retourneNoteAvecResultatsAnalyse(nameItem, k, valueAttributStudent, valueAttributSujet,"style:paragraph-properties");
retour.getNodes().add(item);
}
}
}
if(nodeStyleParagraphStudent!=null) {
if(nodeStyleParagraphSujet.retourneEnfantsByNameExist("style:text-properties") && nodeStyleParagraphStudent.retourneEnfantsByNameExist("style:text-properties") ) {
node propertiesSujet = nodeStyleParagraphSujet.retourneFirstEnfantsByName("style:text-properties");
node propertiesStudent = nodeStyleParagraphStudent.retourneFirstEnfantsByName("style:text-properties");
key = propertiesSujet.getAttributs().keys();
while(key.hasMoreElements()) {
String k = key.nextElement();
if(propertiesSujet.getAttributs().get(k).contains("") || propertiesSujet.getAttributs().get(k).contains("")){
if(propertiesStudent!=null) {
String valueAttributStudent = propertiesStudent.getAttributs().get(k);
String valueAttributSujet = propertiesSujet.getAttributs().get(k).replace("", "");
node item = retourneNoteAvecResultatsAnalyse(nameItem,k, valueAttributStudent, valueAttributSujet,"style:text-properties");
retour.getNodes().add(item);
}else {
String valueAttributStudent = "null";
String valueAttributSujet = propertiesSujet.getAttributs().get(k).replace("", "");
node item = retourneNoteAvecResultatsAnalyse(nameItem, k, valueAttributStudent, valueAttributSujet,"style:text-properties");
retour.getNodes().add(item);
}
}
}
}
}else {
node propertiesSujet = nodeStyleParagraphSujet.retourneFirstEnfantsByName("style:text-properties");
key = propertiesSujet.getAttributs().keys();
while(key.hasMoreElements()) {
String k = key.nextElement();
if(propertiesSujet.getAttributs().get(k).contains("") || propertiesSujet.getAttributs().get(k).contains("")){
String valueAttributStudent = "null";
String valueAttributSujet = propertiesSujet.getAttributs().get(k).replace("", "");
node item = retourneNoteAvecResultatsAnalyse(nameItem, k, valueAttributStudent, valueAttributSujet,"style:text-properties");
retour.getNodes().add(item);
}
}
}
return retour;
}
/**
* Analyse toutes les contenus des enfants et les compares.<br>
* Utiliser pour les nodes <text:p><br>
* <br>
* @param Student
* @param Sujet
* @param retour
* @param nameItem
* @param nameElt
* @param a
* @return
*/
private static node analyseLesContenusDesArrayList(ArrayList<node> Student, ArrayList<node> Sujet, node retour, String nameItem, String nameElt, Run a) {
for(int i = 0 ; i < Sujet.size();i++) {
String sujetContent = Sujet.get(i).retourneLesContenusEnfants("");
node StudentNode = a.retourneFirstNodeByFindContent2(Student, outils.withoutCodeAndPoint(sujetContent),commandes.tolerance_characters,commandes.tolerance_text);
String studentContent = "null";
if(StudentNode!=null) studentContent = outils.NetChiffreALaFin(StudentNode.retourneLesContenusEnfants(""));
node item = retourneNoteAvecResultatsAnalyse(nameItem, "Contenu textuel", studentContent, sujetContent,nameElt);
retour.getNodes().add(item);
}
return retour;
}
/**
* Retourne le node avec les résultats de la comparaison entre les deux valeurs (étudiant et sujet).<br>
* <br>
* @param nameNode
* @param Tst (résultat de la comparaison)
* @param property
* @param valueAttributStudent
* @param valueAttributSujet
* @return
*/
private static node retourneNoteAvecResultatsAnalyse(String nameNode, String property, String valueStudent, String valueSujet, String nameElt) {
String Tst = outils.Compare(valueStudent, valueSujet);
int niveau = 3;
if(Tst.contains("Correct")) niveau = 1;
if(Tst.contains("Erreur")) niveau = 2;
valueStudent = outils.remplaceCaracteresCodageAttribut(valueStudent);
valueSujet = outils.remplaceCaracteresCodageAttribut(valueSujet);
node item = new node(nameNode, Tst, property , valueStudent, valueSujet, niveau, outils.getPointEnJeu(),nameElt);
return item;
}
/**
* Création du feedback (compte-rendu) au format HTML.<br>
* <br>
* @param nodana
* @throws IOException
*/
private static void feedback(node nodana, node verif) throws IOException {
System.getProperty("file.encoding","UTF-8");
Date aujourdhui = new Date();
int number_match = 2;
boolean plagiat = false;
boolean copiercoller = false;
boolean baremeABC = false;
boolean producteur = false;
String SuiteBureautique = "";
String VersionLibreOffice = "";
String SystemeStudent = "";
node verifStudent = null;
if((commandes.verifHisto||commandes.verifHisto2)&&commandes.ecritNoteCSV&&commandes.fourniCSV) {
if(verif.getAttributs().get("number_match") != null) number_match = Integer.valueOf(verif.getAttributs().get("number_match"));
//verification du plagiat
verifStudent = verif.retourneFirstNodeByNameAndAttributValue("fichier", "dossier", nodana.retourneFirstEnfantsByName("ouverture").getAttributs().get("dossier"));
if(verifStudent != null) {
if(verifStudent.getAttributs().get("filename").equals(nodana.retourneFirstEnfantsByName("ouverture").getAttributs().get("filename"))) {
if(Integer.valueOf(verifStudent.getAttributs().get("nombre_correspondance"))>number_match) plagiat=true;
if(!verifStudent.getAttributs().get("first_modification_identique").equals("null")) plagiat=true;
if(verifStudent.getAttributs().get("copier_coller")!=null) copiercoller=true;
}
}
}
//BaremeABC
if(nodana.retourneFirstEnfantsByName("bodyetnotation").getAttributs().get("baremeABC")!=null) {
try {
baremeABC= Boolean.valueOf(nodana.retourneFirstEnfantsByName("bodyetnotation").getAttributs().get("baremeABC"));
}catch (Exception e) {
System.out.println("Problème avec la valeur binaire de l'attribut baremeABC.");
}
}
//nom du fichier feedback
String metaS = nodana.retourneFirstEnfantsByName("ouverture").getAttributs().get("metaSujet");
if(metaS.equals("?")) metaS = "metaSujet-inconnu";
if(metaS.isEmpty()) metaS = "metaSujet-inconnu";
String cheminFeedBack = nodana.retourneFirstEnfantsByName("ouverture").getAttributs().get("dossier") + "-DateLong" + aujourdhui.getTime()+"-"+metaS;
if(!commandes.noNote&&!baremeABC) {
if(!plagiat&&!copiercoller)cheminFeedBack = cheminFeedBack + "-" + nodana.retourneFirstEnfantsByName("bodyetnotation").getAttributs().get("note") + ".html";
if(plagiat) cheminFeedBack = cheminFeedBack + "- plagiat.html";
if(copiercoller) cheminFeedBack = cheminFeedBack + "- copier-coller.html";
}
if(!commandes.noNote&&baremeABC) {
if(!plagiat)cheminFeedBack = cheminFeedBack + "-" + nodana.retourneFirstEnfantsByName("bodyetnotation").getAttributs().get("noteABC") + ".html";
if(copiercoller) cheminFeedBack = cheminFeedBack + "- copier-coller.html";
if(plagiat) cheminFeedBack = cheminFeedBack + "- plagiat.html";
}
if(commandes.noNote) {
cheminFeedBack = cheminFeedBack + ".html";
}
// Chemin vers le dossier de destination
Path outputFilePath = Paths.get(patch + "/" + cheminFeedBack);
if(commandes.fourniDossierDestination) outputFilePath = Paths.get(patch + "/" + commandes.pathDestination+ "/" + cheminFeedBack);
BufferedWriter fichier = Files.newBufferedWriter(outputFilePath, StandardCharsets.UTF_8);
//ajoute le chemin vers le feedback dans le node d'analyse
nodana.retourneFirstEnfantsByName("ouverture").getAttributs().put("feedback", patch + "/" + cheminFeedBack);
// auteur du sujet
String auteurSujet = nodana.retourneFirstEnfantsByName("ouverture").getAttributs().get("auteur");
if(auteurSujet==null) auteurSujet="";
//création du feedback
fichier.write("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\">\r"
+ "<html>\r"
+ "<head>\r"
+ "<meta http-equiv=\"content-type\" content=\"text/html; charset=UTF-8\"/>\r"
+ "<title>Analyse LibreOffice Calc</title>\r");
fichier.write("<meta name=\"generator\" content=\"analyseWriter V3.5.0\"/>"
+ "<meta name=\"author\" content=\"Pablo Rodriguez\"/>"
+ "<meta name=\"created\" content=\""+ nodana.retourneFirstEnfantsByName("ouverture").getAttributs().get("date") +"\"/>");
fichier.write("<style type=\"text/css\">"
+ "p.pablo { margin-bottom: 0.25cm; line-height: 100%; background: transparent; margin-left: 1cm; }"
+ ".header {background-color: #f1f1f1;padding: 30px;text-align:center;}"
+ "h1 { margin-bottom: 0.25cm; background: transparent;}"
+ "h2 {color: blue;font-size:22pt;margin-bottom: 0cm; margin-top: 0cm; line-height: 110%; background: transparent; margin-left: 20pt; margin-right: 10px; text-decoration: underline overline;}"
+ "h3 {font-size:18pt;margin-bottom: 0cm; margin-top: 0cm; line-height: 110%; background: transparent; margin-left: 20pt;}"
+ "header.h1.western { font-family: \"Arial\"; font-size: 18pt; font-weight: bold; backgroung: #adff2f;}"
+ ".header p {color:blue; font-size:30px;}"
+ ".triche {background: #AA0000;padding-top: 5px;padding-right: 5px;padding-bottom: 5px;padding-left: 5px;width=80%;margin-top:18px; box-shadow: 5px 10px 18px #800000;}"
+ ".triche p {color:white; font-size:16px;margin-left:10px;margin-bottom:6px;margin-top:6px}"
+ ".header h4 {text-align:left;font-family: \"Arial\"; font-size: 12pt; font-weight: bold; line-height: 110%;}"
+ "h4.western { font-family: \"Arial\"; font-size: 14pt; font-style: italic; font-weight: bold; line-height: 40%}"
+ "a:link { color: #000099; so-language: zxx; text-decoration: underline; margin-left: 10px; }"
+ "a:visited { color: #990000; so-language: zxx; text-decoration: underline; margin-left: 10px; }"
+ "hr { display: block; margin-top: 0.5em; margin-bottom: 8em; margin-left: 2em; margin-right: 2em; border-style: inset; border-width: 4px;}"
+ "spanpablo { float: right; width: 8em; font-size: 250%; font-family: algerian, courier; line-height: 80%; margin-right: 1%; color: red; text-align: center}"
+ "p.p1{margin-bottom: 0cm; margin-top: 0cm; line-height: 100%; background: transparent; margin-left: 0cm; white-space: pre;}"
+ "p.p8{font-size:14pt;margin-bottom: 0cm; margin-top: 0cm; line-height: 110%; background: transparent; margin-left: 8pt; margin-right: 10px;}"
+ "p.p9{font-size:16pt;margin-bottom: 12px;text-align: left; margin-top: 0cm; line-height: 110%; background: transparent; margin-left: 40pt; margin-right: 0cm;text-decoration: underline overline wavy blue;text-shadow: 0px 1px #101010;}"
+ "p.p10{font-size:12pt;margin-bottom: 12px;text-align: left; margin-top: 0cm; line-height: 110%; background: transparent; margin-left: 30pt; margin-right: 0cm;text-decoration: underline overline wavy red;}"
+ ".commentaire{margin-left: 0px; margin-bottom: 24px; margin-top: 24px;font-size:1.4rem}"
+ "p.p2{margin-left: 0px; margin-bottom: 0cm; margin-top: 4px; line-height: 115%}"
+ "p.p3{margin-left: 20px; line-height: 100%; border: 1px solid black; background-color: lightcyan; margin-right: 10px; }"
+ "p.p4{margin-left: 0px; margin-bottom: 0cm; margin-top: 4px; margin-right: 4px; line-height: 115%; background: darkblue; color:white; font-size: 20px; white-space: pre;}"
+ "p.p5{margin-left: 80px; margin-bottom: 0cm; margin-top: 4px; margin-right: 80px; line-height: 115%; background: red; color:white; font-size: 20px;}"
+ "p.p6{margin-left: 80px; margin-bottom: 0cm; margin-top: 4px; margin-right: 80px; line-height: 115%; background: beige; color:darkcyan; font-size: 20px;}"
+ "p.p7{margin-left: 80px; margin-bottom: 0cm; margin-top: 4px; margin-right: 80px; line-height: 115%; background: #7FFF00; font-size: 20px;}"
+ "#navbar {overflow: hidden;background-color: #333;width:100%;box-shadow: 5px 10px 8px #888888;}"
+ "#navbar a {float: left;display: block;color: #f2f2f2;text-align: center;padding: 14px 16px;text-decoration: none;font-size: 17px;}"
+ "#navbar a:hover {background-color: #ddd;color: black;}"
+ "#navbar a.active {background-color: #4CAF50;color: white;margin-left:0px;}"
+ "#navbar a.active2 {background-color: #FF8050;color: white;margin-left:0px;}"
+ "#navbar a.active3 {background-color: #5080FF;color: white;margin-left:0px;}"
+ "div.sticky {position: fixed;top: 0;width: 100%;}"
+ ".sticky + .content {padding-top: 60px;}"
+ "#navbar2 {overflow: hidden; background-color: #333;}"
+ "#navbar2 a {float: left; font-size: 18px; color: white; text-align: center; padding: 16px 18px; text-decoration: none;}"
+ ".dropdown {position: relative; display: inline-block;}"
+ ".dropbtn:hover, .dropbtn:focus { background-color: #3e8e41;}"
+ ".dropdown-content {display: none; position: absolute; background-color: #f9f9f9; min-width: 160px; box-shadow: 0px 8px 16px 0px rgba(0,0,0,0.2);}"
+ ".dropdown-content a {color: black; padding: 12px 16px; text-decoration: none; display: block;}"
+ ".dropdown-content a:hover {background-color: #f1f1f1}"
+".show {display:block;}"
+ "#myDropdown {background-color: #508050;color: black;}"
+ ".menu-box{display: none;}"
+ ".menuopen{display: block;}"
+ ".tooltip {position: relative;display: inline-block;border-bottom: 1px dotted black;}"
+ ".tooltip .tooltiptext {visibility: hidden;background-color: black;color: #fff;text-align: center;border-radius: 6px;padding: 5px 0;position: absolute;z-index: 1;margin-left: -30px; width: 260px;top: 100%;left: 10%;}"
+ ".tooltip .tooltiptext::after {content: \" \";position: absolute;bottom: 100%;left: 50%;margin-left: -5px;border-width: 5px;border-style: solid;border-color: transparent transparent black transparent;}"
+ ".tooltip:hover .tooltiptext {visibility: visible;}"
+ ".tooltip1 {position: relative;display: inline-block;border-bottom: 1px dotted black;}"
+ ".tooltip1 .tooltiptext1 {visibility: hidden;background-color: #0000CC;color: #fff;text-align: left;border-radius: 4px;padding: 10px;position: absolute;z-index: 1;margin-left: -40px; width: 280px;top: 100%;left: 10%;}"
+ ".tooltip1 .tooltiptext1::after {content: \" \";position: absolute;bottom: 100%;left: 50%;margin-left: -5px;border-width: 5px;border-style: solid;border-color: transparent transparent #0000CC transparent;}"
+ ".tooltip1:hover .tooltiptext1 {visibility: visible;}"
+ ".tooltip2 {position: relative;display: inline-block;border-bottom: 1px dotted black;}"
+ ".tooltip2 .tooltiptext2 {visibility: hidden;background-color: black;color: #fff;text-align: left;border-radius: 8px;padding: 8px;position: absolute;z-index: 1;margin-left: -40px; width: 340px;top: 100%;left: 10%;}"
+ ".tooltip2 .tooltiptext2::after {content: \" \";position: absolute;bottom: 100%;left: 50%;margin-left: -5px;border-width: 5px;border-style: solid;border-color: transparent transparent black transparent;}"
+ ".tooltip2:hover .tooltiptext2 {visibility: visible;}"
+ ".footer {position: fixed;left: 0;bottom: 0;width: 100%;background-color: white;color: black;text-align: center;}"
+"</style>");
fichier.write("</head>\r");
fichier.write("<body lang=\"fr-FR\" link=\"#000080\" vlink=\"#800000\" dir=\"ltr\">\r");
fichier.write("<div class=\"header\">");
if(!commandes.noLogo) {
if(!commandes.newLogo) {
fichier.write("<h1 id=\"#top\" class=\"western\" align=\"center\" style=\"margin-left: 1cm; margin-right: 1cm; border: 2.00pt solid #ffffff; padding: 0.4cm 0.1cm; background: #505050\">\r\n" +
"<font color=\"#ffffff\" size=\"6\" style=\"font-size: 26pt\">Feedback - AnalyseWriter - format ODF 1.2<br>"+HTML.imgLogos()+"</font></h1>\r");
}else {
fichier.write("<h1 id=\"#top\" class=\"western\" align=\"center\" style=\"margin-left: 1cm; margin-right: 1cm; border: 2.00pt solid #ffffff; padding: 0.4cm 0.1cm; background: #505050\">\r\n" +
"<font color=\"#ffffff\" size=\"6\" style=\"font-size: 26pt\">Feedback - AnalyseWriter - format ODF 1.2<br>"+commandes.contenuFichierSVG+"</font></h1>\r");
}
}else {
fichier.write("<h1 id=\"#top\" class=\"western\" align=\"center\" style=\"margin-left: 1cm; margin-right: 1cm; border: 2.00pt solid #ffffff; padding: 0.4cm 0.1cm; background: #505050\">\r\n" +
"<font color=\"#ffffff\" size=\"6\" style=\"font-size: 26pt\">Feedback - AnalyseWriter - format ODF 1.2<br></font></h1>\r");
}
//Note
node ouvre = nodana.retourneFirstEnfantsByName("ouverture");
String noteFrom = ouvre.getAttributs().get("notefrom");
node notation = nodana.retourneFirstEnfantsByName("bodyetnotation");
if(!baremeABC) {
if(noteFrom ==null) noteFrom="20";
if(!commandes.noNote) if(!plagiat) fichier.write("<p><spanpablo>" + notation.getAttributs().get("note") + " / " + noteFrom +"<br><span style=\"color:blue; font-size:30px\">"+ ouvre.getAttributs().get("metaSujet") +"</span></spanpablo></p>\r");
if(!commandes.noNote) if(plagiat) fichier.write("<p><spanpablo> Plagiat / " + noteFrom +"<br><span style=\"color:blue; font-size:30px\">"+ ouvre.getAttributs().get("metaSujet") +"</span></spanpablo></p>\r");
if(!commandes.noNote) if(!plagiat&&copiercoller) fichier.append("<p><spanpablo> Copiés Collés / " + noteFrom +"<br><span style=\"color:blue; font-size:30px\">"+ ouvre.getAttributs().get("metaSujet") +"</span></spanpablo></p>\r");
}else {
String imageNote = "";
switch (notation.getAttributs().get("noteABC")) {
case "A":
imageNote = HTML.NoteA();
break;
case "B":
imageNote = HTML.NoteB();
break;
case "C":
imageNote = HTML.NoteC();
break;
case "D":
imageNote = HTML.NoteD();
break;
case "E":
imageNote = HTML.NoteE();
break;
default:
imageNote = "";
break;
}
if(!commandes.noNote) if(!plagiat) fichier.append("<p><spanpablo>" + imageNote +"<br><span style=\"color:blue; font-size:30px\">"+ ouvre.getAttributs().get("metaSujet") +"</span></spanpablo></p>\r");
if(!commandes.noNote) if(plagiat) fichier.append("<p><spanpablo> Plagiat / " + "<br><span style=\"color:blue; font-size:30px\">"+ ouvre.getAttributs().get("metaSujet") +"</span></spanpablo></p>\r");
if(!commandes.noNote) if(!plagiat&&copiercoller) fichier.append("<p><spanpablo> Copiés Collés / " +"<br><span style=\"color:blue; font-size:30px\">"+ ouvre.getAttributs().get("metaSujet") +"</span></spanpablo></p>\r");
}
//producteur
if(ouvre.getAttributs().get("producteur")!=null) {
try {
producteur= true;
String[] decompose = ouvre.getAttributs().get("producteur").split("/");
SuiteBureautique=decompose[0];
VersionLibreOffice=decompose[1].substring(0, decompose[1].lastIndexOf("$"));
SystemeStudent=decompose[1].substring(decompose[1].lastIndexOf("$")+1, decompose[1].lastIndexOf(" "));
}catch (Exception e) {
System.out.println("Problème avec l'attribut producteur.");
}finally {
}
}
//informations
// date d'analyse, dossier étudiant, auteur sujet, date de la dernière modificatio, lien, algorithme
DateFormat mediumDateFormat = DateFormat.getDateTimeInstance(DateFormat.MEDIUM,DateFormat.MEDIUM);
LocalDateTime dateTimeModif = null;
String dateModif="";
if(ouvre.getAttributs().get("dateModification")!=null) if(!ouvre.getAttributs().get("dateModification").isEmpty()) {
try {
dateTimeModif = LocalDateTime.parse(ouvre.getAttributs().get("dateModification"));
dateModif = dateTimeModif.format(DateTimeFormatter.ofLocalizedDateTime(FormatStyle.MEDIUM));
}catch (Exception e) {
System.out.println(e.toString());
}
}
fichier.write("<h4>Date d'analyse : "+ mediumDateFormat.format(aujourdhui) + "<br>");
fichier.write("Dossier étudiant : <span style=\"color:blue\">"+ ouvre.getAttributs().get("dossier") + "</span><br>");
fichier.write("Nom du fichier analysé et évalué : <span style=\"color:blue\">"+ ouvre.getAttributs().get("filename") + "</span><br>");
fichier.write("Date de la dernière modification du fichier analysé : <span style=\"color:purple\">"+ dateModif + "</span><br>");
fichier.write("Durée d'édition du fichier analysé : <span style=\"color:purple\">"+ traitementDureeEdition(ouvre.getAttributs().get("dureeEdition") + "</span><br>"));
if(producteur) {
fichier.write("Suite de bureautique : <span style=\"color:coral;\">"+ SuiteBureautique + "</span>");
fichier.write(" - Version : <span style=\"color:coral;\">"+ VersionLibreOffice + "</span>");
fichier.write(" - Système : <span style=\"color:coral;\">"+ SystemeStudent + "</span><br>");
}
if(!auteurSujet.isEmpty()) {fichier.write("Sujet créé par : <span style=\"color:indigo\">"+ auteurSujet + "</span><br>");}else {fichier.write("<br>");}
if(!commandes.noNote) if(!plagiat&&!copiercoller) fichier.write("Méthode : <div class=\"tooltip\"><font color=\"#0000ff\">Progression " + ouvre.getAttributs().get("progression") + "</font><span class=\"tooltiptext\">Explication<br>"+ HTML.imgProgression() +"</span></div> - Pourcentage correcte : " + nodana.retourneFirstEnfantsByName("bodyetnotation").getAttributs().get("proportioncorrect") +"<br>");
if(!commandes.noNote) if(plagiat || copiercoller) fichier.append("Méthode : <div class=\"tooltip\"><font color=\"#0000ff\">Progression " + ouvre.getAttributs().get("progression") + "</font><span class=\"tooltiptext\">Explication<br>"+ HTML.imgProgression() +"</span></div> - Pourcentage correcte : Plagiat <br>");
if(baremeABC) {
fichier.append("Barème : <div class=\"tooltip\"><font color=\"#0000ff\">0% → E → " + Math.round(Double.valueOf(notation.getAttributs().get("BorneE"))*100) + "% → D → " + Math.round(Double.valueOf(notation.getAttributs().get("BorneD"))*100) + "% → C → " + Math.round(Double.valueOf(notation.getAttributs().get("BorneC"))*100) + "% → B → " + Math.round(Double.valueOf(notation.getAttributs().get("BorneB"))*100) + "% → A → 100%</font><span class=\"tooltiptext\">Prendre en compte le coefficient de progression.</span></div>");
}
if(ouvre.getAttributs().get("link_sujet")!=null) {
String linkSujet= ouvre.getAttributs().get("link_sujet");
Matcher m = Pattern.compile("^https://.{1,}|^http://.{1,}").matcher(linkSujet);
if(m.find()) {fichier.write("<br><a href=\"" + linkSujet + "\" target=\"_blank\">Lien vers le sujet</a><br>");}
}
if(ouvre.getAttributs().get("link_help")!=null) {
String linkSujet= ouvre.getAttributs().get("link_help");
Matcher m = Pattern.compile("^https://.{1,}|^http://.{1,}").matcher(linkSujet);
if(m.find()) {fichier.write("<br><a href=\"" + linkSujet + "\" target=\"_blank\">Lien vers le support</a><br>");}
}
fichier.write("<br><font color=\"#808080\" style=\"font-size: 9pt\"><i>Analysé avec la version : " + commandes.version + "<br></h4>");
fichier.write(HTML.SautLigne());
fichier.write("</div>");
//ajoute le menu
fichier.write(HTML.getHTMLmenu(nodana.retourneFirstEnfantsByName("menu").getNodes()));
//Les erreurs
node errors = nodana.retourneFirstEnfantsByName("erreurs");
if(Boolean.valueOf(errors.getAttributs().get("oneError"))) {
fichier.write(HTML.SautLigne());
if(Boolean.valueOf(errors.getAttributs().get("manqueHistorique"))) fichier.write(HTML.Paragraph_classp5("ERREUR : Il n'y a pas d'historique des modifications dans ce fichier. Le fichier n'a pas été modifié ou il a été réinitialisé."));
if(Boolean.valueOf(errors.getAttributs().get("manqueCreationDate"))) fichier.write(HTML.Paragraph_classp5("ERREUR : La date de création du fichier a été supprimée."));
if(Boolean.valueOf(errors.getAttributs().get("manqueValeurCreationDate"))) fichier.write(HTML.Paragraph_classp5("ERREUR : Ce n'est pas la bonne date de création du fichier. Le fichier a été réinitialisé ou ce n'est pas le bon fichier."));
if(Boolean.valueOf(errors.getAttributs().get("manqueMetaSujet"))) fichier.write(HTML.Paragraph_classp5("ERREUR : La méta donnée \"Sujet\" dans les propriétés du fichier a été supprimée ou renommée."));
if(Boolean.valueOf(errors.getAttributs().get("manqueValeurMetaSujet"))) fichier.write(HTML.Paragraph_classp5("ERREUR : La valeur de la méta donnée \"Sujet\" dans les propriétés du fichier n'est pas \"" + nodana.retourneFirstEnfantsByName("ouverture").getAttributs().get("metaSujet"))+".\"");
if(Boolean.valueOf(errors.getAttributs().get("manqueInitialCreator"))) fichier.write(HTML.Paragraph_classp5("ERREUR : La valeur de la méta donnée \"initial-creator\" dans les propriétés du fichier n'est pas \"" + nodana.retourneFirstEnfantsByName("ouverture").getAttributs().get("Initial_Creator"))+".\"");
}
//plagiat
if(plagiat) if(verifStudent!=null){
fichier.append(HTML.SautLigne());
ArrayList<node> correspondance = verifStudent.retourneEnfantsByName("correspondance", new ArrayList<node>());
for(int j = 0 ; j < correspondance.size();j++) {
fichier.write(HTML.Paragraph_classp5("Correspondance à la date=" + correspondance.get(j).getAttributs().get("date") + " avec l'étudiant " + correspondance.get(j).getAttributs().get("Avec_etudiant")));
}
}
fichier.write(HTML.SautLigne());
//Ajoute de commentaire de l'exercice
fichier.write(HTML.H3(nodana.getContenu()).replace("-NewLine-", "<br>"));
fichier.write(HTML.SautLigne());
fichier.write(HTML.H2("Synthèse"));
fichier.write(HTML.TableEnteteTableurSynthese());
String IdError = ""; // permet de récupérer les id des menu ou la proportioncorrect est NaN. (à cause de l'attribut analyseStyle=true)
for(int k = 0 ; k < nodana.getNodes().size();k++) {
if(nodana.getNodes().get(k).getAttributs().get("addmenu")!=null) if(nodana.getNodes().get(k).getAttributs().get("addmenu").equals("true")) {
if(!nodana.getNodes().get(k).getAttributs().get("proportioncorrect").equals("NaN")) {
fichier.write(HTML.TablePointsSyntheseStyle(nodana.getNodes().get(k).getAttributs().get("titre"),Double.valueOf(nodana.getNodes().get(k).getAttributs().get("proportioncorrect")),nodana.getNodes().get(k).getAttributs().get("pointtotal") + " pt",nodana.getNodes().get(k).getAttributs().get("pointgagner") + " pt", nodana.getNodes().get(k).getAttributs().get("poids"),nodana.getNodes().get(k).getAttributs().get("id")));
}else {
IdError = IdError + nodana.getNodes().get(k).getAttributs().get("id");
}
}
}
//Metadonnées
if(nodana.retourneFirstEnfantsByName("meta")!=null) if(nodana.retourneFirstEnfantsByName("meta").isClose()) {
fichier.write(HTML.Table(nodana.retourneFirstEnfantsByName("meta")));
}
//style de paragraphe
if(nodana.retourneFirstEnfantsByName("paragraphs")!=null) if(nodana.retourneFirstEnfantsByName("paragraphs").isClose()) {
//il est possible qu'il n'y ai aucun point car passé par analyseStyle dans le node structurepage
if(!IdError.contains(nodana.retourneFirstEnfantsByName("paragraphs").getAttributs().get("id"))){
fichier.write(HTML.Table(nodana.retourneFirstEnfantsByName("paragraphs")));
}
}
//pages
if(nodana.retourneFirstEnfantsByName("pages")!=null) if(nodana.retourneFirstEnfantsByName("pages").isClose()) {
fichier.write(HTML.Table(nodana.retourneFirstEnfantsByName("pages")));
}
//sequences
if(nodana.retourneFirstEnfantsByName("sequences")!=null) if(nodana.retourneFirstEnfantsByName("sequences").isClose()) {
fichier.write(HTML.Table(nodana.retourneFirstEnfantsByName("sequences")));
}
//numerotationchapitre
if(nodana.retourneFirstEnfantsByName("numerotationchapitre")!=null) if(nodana.retourneFirstEnfantsByName("numerotationchapitre").isClose()) {
fichier.write(HTML.Table(nodana.retourneFirstEnfantsByName("numerotationchapitre")));
}
//frames
if(nodana.retourneFirstEnfantsByName("frames")!=null) if(nodana.retourneFirstEnfantsByName("frames").isClose()) {
fichier.write(HTML.Table(nodana.retourneFirstEnfantsByName("frames")));
}
//section
if(nodana.retourneFirstEnfantsByName("sections")!=null) if(nodana.retourneFirstEnfantsByName("sections").isClose()) {
fichier.write(HTML.Table(nodana.retourneFirstEnfantsByName("sections")));
}
//bibliographies
if(nodana.retourneFirstEnfantsByName("bibliographies")!=null) if(nodana.retourneFirstEnfantsByName("bibliographies").isClose()) {
fichier.write(HTML.Table(nodana.retourneFirstEnfantsByName("bibliographies")));
}
//tablematieres
if(nodana.retourneFirstEnfantsByName("tablematieres")!=null) if(nodana.retourneFirstEnfantsByName("tablematieres").isClose()) {
fichier.write(HTML.Table(nodana.retourneFirstEnfantsByName("tablematieres")));
}
//tableillustrations
if(nodana.retourneFirstEnfantsByName("tableillustrations")!=null) if(nodana.retourneFirstEnfantsByName("tableillustrations").isClose()) {
fichier.write(HTML.Table(nodana.retourneFirstEnfantsByName("tableillustrations")));
}
//structurepage
if(nodana.retourneFirstEnfantsByName("structurepage")!=null) if(nodana.retourneFirstEnfantsByName("structurepage").isClose()) {
fichier.write(HTML.Table(nodana.retourneFirstEnfantsByName("structurepage")));
}
fichier.write("<p><br><br></p>");
//footer
fichier.write("<div class=\"footer\">");
fichier.write("<font color=\"#808080\" style=\"font-size: 10pt\"><i>analyseWriter - P. Rodriguez (université d'Artois) - Licence GPL v3.0 - analysé avec la version : " + commandes.version + " - ");
fichier.write("Fichier d'analyse créé avec la version : " + ouvre.getAttributs().get("version") + "</i></font>");
fichier.write("</div>");
fichier.write("<script>");
fichier.write("window.onscroll = function() {myFunction()};");
fichier.write("var navbar = document.getElementById(\"navbar\");");
fichier.write("var sticky = navbar.offsetTop;");
fichier.write("function myFunction() {");
fichier.write("if (window.pageYOffset >= sticky) {");
fichier.write("navbar.classList.add(\"sticky\")");
fichier.write("} else {");
fichier.write("navbar.classList.remove(\"sticky\");");
fichier.write("}");
fichier.write("}\r\n");
fichier.write("function toggleMenu() {\r\n" +
" var menuBox0 = document.getElementById('menu-box0'); \r\n" +
" var menuBox1 = document.getElementById('menu-box1'); \r\n" +
" var menuBox2 = document.getElementById('menu-box2'); \r\n" +
" var menuBox3 = document.getElementById('menu-box3'); \r\n" +
" var menuBox4 = document.getElementById('menu-box4'); \r\n" +
" var menuBox5 = document.getElementById('menu-box5'); \r\n" +
"\r\n"+
" if(menuBox0.style.display == \"block\") { " +
" menuBox0.style.display = \"none\";\r\n" +
" }\r\n" +
" else {" +
" menuBox0.style.display = \"block\";\r\n" +
" }\r\n" +
"\r\n"+
" if(menuBox1.style.display == \"block\") { " +
" menuBox1.style.display = \"none\";\r\n" +
" }\r\n" +
" else {" +
" menuBox1.style.display = \"block\";\r\n" +
" }\r\n" +
"\r\n"+
" if(menuBox2.style.display == \"block\") { " +
" menuBox2.style.display = \"none\";\r\n" +
" }\r\n" +
" else {" +
" menuBox2.style.display = \"block\";\r\n" +
" }\r\n" +
"\r\n"+
" if(menuBox3.style.display == \"block\") { " +
" menuBox3.style.display = \"none\";\r\n" +
" }\r\n" +
" else {" +
" menuBox3.style.display = \"block\";\r\n" +
" }\r\n" +
" if(menuBox4.style.display == \"block\") { " +
" menuBox4.style.display = \"none\";\r\n" +
" }\r\n" +
" else {" +
" menuBox4.style.display = \"block\";\r\n" +
" }\r\n" +
" if(menuBox5.style.display == \"block\") { " +
" menuBox5.style.display = \"none\";\r\n" +
" }\r\n" +
" else {" +
" menuBox5.style.display = \"block\";\r\n" +
" }\r\n" +
"}");
fichier.write("</script>");
fichier.write("</body>\r");
fichier.write("</html>");
fichier.close();
//affichage dans la console
if(!commandes.fourniDossierDestination) System.out.println("\n\t The feedback file has been written.\n\t " + patch + "\\" + cheminFeedBack);
if(commandes.fourniDossierDestination) System.out.println("\n\t The feedback file has been written.\n\t " + patch + "\\" + commandes.pathDestination + "\\" + cheminFeedBack);
}
/**
* Retourne le nom du fichier de l'étudiant pour le Zip de Moodle.<br>
* </br>
* @param filename
* @param nodana
* @return
*/
private static String retourneLeNomDuFeedback( String filename,node nodana, node verif) {
System.getProperty("file.encoding","UTF-8");
int number_match = 2;
boolean plagiat = false;
node verifStudent = null;
if((commandes.verifHisto||commandes.verifHisto2)&&commandes.ecritNoteCSV&&commandes.fourniCSV) {
if(verif.getAttributs().get("number_match") != null) number_match = Integer.valueOf(verif.getAttributs().get("number_match"));
//verification du plagiat
verifStudent = verif.retourneFirstNodeByNameAndAttributValue("fichier", "dossier", nodana.retourneFirstEnfantsByName("ouverture").getAttributs().get("dossier"));
if(verifStudent != null) {
if(verifStudent.getAttributs().get("filename").equals(nodana.retourneFirstEnfantsByName("ouverture").getAttributs().get("filename"))) {
if(Integer.valueOf(verifStudent.getAttributs().get("nombre_correspondance"))>number_match) plagiat=true;
}
}
}
//nom du fichier feedback
String metaS = nodana.retourneFirstEnfantsByName("ouverture").getAttributs().get("metaSujet");
if(metaS.equals("?")) metaS = "metaSujet-inconnu";
if(metaS.isEmpty()) metaS = "metaSujet-inconnu";
String cheminFeedBack = nodana.retourneFirstEnfantsByName("ouverture").getAttributs().get("dossier") +"-"+metaS; //+ "-DateLong" + aujourdhui.getTime()
boolean baremeABC = false;
if(nodana.retourneFirstEnfantsByName("ouverture").getAttributs().get("baremeABC")!=null) {
try {
baremeABC = Boolean.valueOf(nodana.retourneFirstEnfantsByName("ouverture").getAttributs().get("baremeABC"));
}catch (Exception e) {
}
}
if(!baremeABC) {
if(!commandes.noNote) {
if(!plagiat) cheminFeedBack = cheminFeedBack + "-" + nodana.retourneFirstEnfantsByName("bodyetnotation").getAttributs().get("note") + ".html";
if(plagiat) cheminFeedBack = cheminFeedBack + "-Plagiat.html";
}else {
cheminFeedBack = cheminFeedBack + ".html";
}
}else {
if(!commandes.noNote) {
if(!plagiat) cheminFeedBack = cheminFeedBack + "-" + nodana.retourneFirstEnfantsByName("bodyetnotation").getAttributs().get("noteABC") + ".html";
if(plagiat) cheminFeedBack = cheminFeedBack + "-Plagiat.html";
}else {
cheminFeedBack = cheminFeedBack + ".html";
}
}
return filename + cheminFeedBack;
}
/**
* Ecriture du fichier pour l'archive ZIP de moodle.<br>
* <br>
* @param nodana
* @return
* @throws IOException
*/
private static StringBuilder feedbackForZip(node nodana, node verif) throws IOException {
System.getProperty("file.encoding","UTF-8");
Date aujourdhui = new Date();
int number_match = 2;
boolean plagiat = false;
boolean copiercoller = false;
boolean baremeABC = false;
boolean producteur =false;
String SuiteBureautique="";
String VersionLibreOffice="";
String SystemeStudent="";
node verifStudent = null;
if((commandes.verifHisto||commandes.verifHisto2)&&commandes.ecritNoteCSV&&commandes.fourniCSV) {
if(verif.getAttributs().get("number_match") != null) number_match = Integer.valueOf(verif.getAttributs().get("number_match"));
//verification du plagiat
verifStudent = verif.retourneFirstNodeByNameAndAttributValue("fichier", "dossier", nodana.retourneFirstEnfantsByName("ouverture").getAttributs().get("dossier"));
if(verifStudent != null) {
if(verifStudent.getAttributs().get("filename").equals(nodana.retourneFirstEnfantsByName("ouverture").getAttributs().get("filename"))) {
if(Integer.valueOf(verifStudent.getAttributs().get("nombre_correspondance"))>number_match) plagiat=true;
if(!verifStudent.getAttributs().get("first_modification_identique").equals("null")) plagiat=true;
if(verifStudent.getAttributs().get("copier_coller")!=null) copiercoller=true;
}
}
}
if(nodana.retourneFirstEnfantsByName("bodyetnotation").getAttributs().get("baremeABC")!=null) {
try {
baremeABC= Boolean.valueOf(nodana.retourneFirstEnfantsByName("bodyetnotation").getAttributs().get("baremeABC"));
}catch (Exception e) {
System.out.println("Problème avec la valeur binaire de l'attribut baremeABC.");
}
}
StringBuilder fichier = new StringBuilder();
//ajoute le chemin vers le feedback dans le node d'analyse
//nodana.retourneFirstEnfantsByName("ouverture").getAttributs().put("feedback", patch + "/" + cheminFeedBack);
// auteur du sujet
String auteurSujet = nodana.retourneFirstEnfantsByName("ouverture").getAttributs().get("auteur");
if(auteurSujet==null) auteurSujet="";
//création du feedback
fichier.append("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\">\r"
+ "<html>\r"
+ "<head>\r"
+ "<meta http-equiv=\"content-type\" content=\"text/html; charset=UTF-8\"/>\r"
+ "<title>Analyse LibreOffice Calc</title>\r");
fichier.append("<meta name=\"generator\" content=\"AnalyseMEPTL V1.0\"/>"
+ "<meta name=\"author\" content=\"Pablo Rodriguez\"/>"
+ "<meta name=\"created\" content=\""+ nodana.retourneFirstEnfantsByName("ouverture").getAttributs().get("date") +"\"/>");
fichier.append("<style type=\"text/css\">"
+ "p.pablo { margin-bottom: 0.25cm; line-height: 100%; background: transparent; margin-left: 1cm; }"
+ ".header {background-color: #f1f1f1;padding: 30px;text-align:center;}"
+ "h1 { margin-bottom: 0.25cm; background: transparent;}"
+ "h2 {color: blue;font-size:22pt;margin-bottom: 0cm; margin-top: 0cm; line-height: 110%; background: transparent; margin-left: 20pt; margin-right: 10px; text-decoration: underline overline;}"
+ "h3 {font-size:18pt;margin-bottom: 0cm; margin-top: 0cm; line-height: 110%; background: transparent; margin-left: 20pt;}"
+ "header.h1.western { font-family: \"Arial\"; font-size: 18pt; font-weight: bold; backgroung: #adff2f;}"
+ ".header p {color:blue; font-size:30px;}"
+ ".triche {background: #AA0000;padding-top: 5px;padding-right: 5px;padding-bottom: 5px;padding-left: 5px;width=80%;margin-top:18px; box-shadow: 5px 10px 18px #800000;}"
+ ".triche p {color:white; font-size:16px;margin-left:10px;margin-bottom:6px;margin-top:6px}"
+ ".header h4 {text-align:left;font-family: \"Arial\"; font-size: 12pt; font-weight: bold; line-height: 110%;}"
+ "h4.western { font-family: \"Arial\"; font-size: 14pt; font-style: italic; font-weight: bold; line-height: 40%}"
+ "a:link { color: #000099; so-language: zxx; text-decoration: underline; margin-left: 10px; }"
+ "a:visited { color: #99000; so-language: zxx; text-decoration: underline; margin-left: 10px; }"
+ "hr { display: block; margin-top: 0.5em; margin-bottom: 8em; margin-left: 2em; margin-right: 2em; border-style: inset; border-width: 4px;}"
+ "spanpablo { float: right; width: 8em; font-size: 250%; font-family: algerian, courier; line-height: 80%; margin-right: 1%; color: red; text-align: center}"
+ "p.p1{margin-bottom: 0cm; margin-top: 0cm; line-height: 100%; background: transparent; margin-left: 0cm; white-space: pre;}"
+ "p.p8{font-size:14pt;margin-bottom: 0cm; margin-top: 0cm; line-height: 110%; background: transparent; margin-left: 8pt; margin-right: 10px;}"
+ "p.p9{font-size:16pt;margin-bottom: 12px;text-align: left; margin-top: 0cm; line-height: 110%; background: transparent; margin-left: 40pt; margin-right: 0cm;text-decoration: underline overline wavy blue;text-shadow: 0px 1px #101010;}"
+ "p.p10{font-size:12pt;margin-bottom: 12px;text-align: left; margin-top: 0cm; line-height: 110%; background: transparent; margin-left: 30pt; margin-right: 0cm;text-decoration: underline overline wavy red;}"
+ ".commentaire{margin-left: 0px; margin-bottom: 24px; margin-top: 24px;font-size:1.4rem}"
+ "p.p2{margin-left: 0px; margin-bottom: 0cm; margin-top: 4px; line-height: 115%}"
+ "p.p3{margin-left: 20px; line-height: 100%; border: 1px solid black; background-color: lightcyan; margin-right: 10px; }"
+ "p.p4{margin-left: 0px; margin-bottom: 0cm; margin-top: 4px; margin-right: 4px; line-height: 115%; background: darkblue; color:white; font-size: 20px; white-space: pre;}"
+ "p.p5{margin-left: 80px; margin-bottom: 0cm; margin-top: 4px; margin-right: 80px; line-height: 115%; background: red; color:white; font-size: 20px;}"
+ "p.p6{margin-left: 80px; margin-bottom: 0cm; margin-top: 4px; margin-right: 80px; line-height: 115%; background: beige; color:darkcyan; font-size: 20px;}"
+ "p.p7{margin-left: 80px; margin-bottom: 0cm; margin-top: 4px; margin-right: 80px; line-height: 115%; background: #7FFF00; font-size: 20px;}"
+ "#navbar {overflow: hidden;background-color: #333;width:100%;box-shadow: 5px 10px 8px #888888;}"
+ "#navbar a {float: left;display: block;color: #f2f2f2;text-align: center;padding: 14px 16px;text-decoration: none;font-size: 17px;}"
+ "#navbar a:hover {background-color: #ddd;color: black;}"
+ "#navbar a.active {background-color: #4CAF50;color: white;margin-left:0px;}"
+ "#navbar a.active2 {background-color: #FF8050;color: white;margin-left:0px;}"
+ "#navbar a.active3 {background-color: #5080FF;color: white;margin-left:0px;}"
+ "div.sticky {position: fixed;top: 0;width: 100%;}"
+ ".sticky + .content {padding-top: 60px;}"
+ "#navbar2 {overflow: hidden; background-color: #333;}"
+ "#navbar2 a {float: left; font-size: 18px; color: white; text-align: center; padding: 16px 18px; text-decoration: none;}"
+ ".dropdown {position: relative; display: inline-block;}"
+ ".dropbtn:hover, .dropbtn:focus { background-color: #3e8e41;}"
+ ".dropdown-content {display: none; position: absolute; background-color: #f9f9f9; min-width: 160px; box-shadow: 0px 8px 16px 0px rgba(0,0,0,0.2);}"
+ ".dropdown-content a {color: black; padding: 12px 16px; text-decoration: none; display: block;}"
+ ".dropdown-content a:hover {background-color: #f1f1f1}"
+".show {display:block;}"
+ "#myDropdown {background-color: #508050;color: black;}"
+ ".menu-box{display: none;}"
+ ".menuopen{display: block;}"
+ ".tooltip {position: relative;display: inline-block;border-bottom: 1px dotted black;}"
+ ".tooltip .tooltiptext {visibility: hidden;background-color: black;color: #fff;text-align: center;border-radius: 6px;padding: 5px 0;position: absolute;z-index: 1;margin-left: -30px; width: 260px;top: 100%;left: 10%;}"
+ ".tooltip .tooltiptext::after {content: \" \";position: absolute;bottom: 100%;left: 50%;margin-left: -5px;border-width: 5px;border-style: solid;border-color: transparent transparent black transparent;}"
+ ".tooltip:hover .tooltiptext {visibility: visible;}"
+ ".tooltip1 {position: relative;display: inline-block;border-bottom: 1px dotted black;}"
+ ".tooltip1 .tooltiptext1 {visibility: hidden;background-color: #0000CC;color: #fff;text-align: left;border-radius: 4px;padding: 10px;position: absolute;z-index: 1;margin-left: -40px; width: 280px;top: 100%;left: 10%;}"
+ ".tooltip1 .tooltiptext1::after {content: \" \";position: absolute;bottom: 100%;left: 50%;margin-left: -5px;border-width: 5px;border-style: solid;border-color: transparent transparent #0000CC transparent;}"
+ ".tooltip1:hover .tooltiptext1 {visibility: visible;}"
+ ".tooltip2 {position: relative;display: inline-block;border-bottom: 1px dotted black;}"
+ ".tooltip2 .tooltiptext2 {visibility: hidden;background-color: black;color: #fff;text-align: left;border-radius: 8px;padding: 8px;position: absolute;z-index: 1;margin-left: -40px; width: 340px;top: 100%;left: 10%;}"
+ ".tooltip2 .tooltiptext2::after {content: \" \";position: absolute;bottom: 100%;left: 50%;margin-left: -5px;border-width: 5px;border-style: solid;border-color: transparent transparent black transparent;}"
+ ".tooltip2:hover .tooltiptext2 {visibility: visible;}"
+ ".footer {position: fixed;left: 0;bottom: 0;width: 100%;background-color: white;color: black;text-align: center;}"
+"</style>");
fichier.append("</head>\r");
fichier.append("<body lang=\"fr-FR\" link=\"#000080\" vlink=\"#800000\" dir=\"ltr\">\r");
fichier.append("<div class=\"header\">");
if(!commandes.noLogo) {
if(!commandes.newLogo) {
fichier.append("<h1 id=\"#top\" class=\"western\" align=\"center\" style=\"margin-left: 1cm; margin-right: 1cm; border: 2.00pt solid #ffffff; padding: 0.4cm 0.1cm; background: #505050\">\r\n" +
"<font color=\"#ffffff\" size=\"6\" style=\"font-size: 26pt\">Feedback - AnalyseWriter - format ODF 1.2<br>"+HTML.imgLogos()+"</font></h1>\r");
}else {
fichier.append("<h1 id=\"#top\" class=\"western\" align=\"center\" style=\"margin-left: 1cm; margin-right: 1cm; border: 2.00pt solid #ffffff; padding: 0.4cm 0.1cm; background: #505050\">\r\n" +
"<font color=\"#ffffff\" size=\"6\" style=\"font-size: 26pt\">Feedback - AnalyseWriter - format ODF 1.2<br>"+commandes.contenuFichierSVG+"</font></h1>\r");
}
}else {
fichier.append("<h1 id=\"#top\" class=\"western\" align=\"center\" style=\"margin-left: 1cm; margin-right: 1cm; border: 2.00pt solid #ffffff; padding: 0.4cm 0.1cm; background: #505050\">\r\n" +
"<font color=\"#ffffff\" size=\"6\" style=\"font-size: 26pt\">Feedback - AnalyseWriter - format ODF 1.2<br></font></h1>\r");
}
//Note
node ouvre = nodana.retourneFirstEnfantsByName("ouverture");
String noteFrom = ouvre.getAttributs().get("notefrom");
node notation = nodana.retourneFirstEnfantsByName("bodyetnotation");
if(!baremeABC) {
if(noteFrom ==null) noteFrom="20";
if(!commandes.noNote) if(!plagiat&&!copiercoller) fichier.append("<p><spanpablo>" + notation.getAttributs().get("note") + " / " + noteFrom +"<br><span style=\"color:blue; font-size:30px\">"+ ouvre.getAttributs().get("metaSujet") +"</span></spanpablo></p>\r");
if(!commandes.noNote) if(plagiat&&!copiercoller) fichier.append("<p><spanpablo> Plagiat / " + noteFrom +"<br><span style=\"color:blue; font-size:30px\">"+ ouvre.getAttributs().get("metaSujet") +"</span></spanpablo></p>\r");
if(!commandes.noNote) if(!plagiat&&copiercoller) fichier.append("<p><spanpablo> Copiés Collés / " + noteFrom +"<br><span style=\"color:blue; font-size:30px\">"+ ouvre.getAttributs().get("metaSujet") +"</span></spanpablo></p>\r");
}else {
String imageNote = "";
switch (notation.getAttributs().get("noteABC")) {
case "A":
imageNote = HTML.NoteA();
break;
case "B":
imageNote = HTML.NoteB();
break;
case "C":
imageNote = HTML.NoteC();
break;
case "D":
imageNote = HTML.NoteD();
break;
case "E":
imageNote = HTML.NoteE();
break;
default:
imageNote = "";
break;
}
if(!commandes.noNote) if(!plagiat) fichier.append("<p><spanpablo>" + imageNote +"<br><span style=\"color:blue; font-size:30px\">"+ ouvre.getAttributs().get("metaSujet") +"</span></spanpablo></p>\r");
if(!commandes.noNote) if(plagiat) fichier.append("<p><spanpablo> Plagiat / " + "<br><span style=\"color:blue; font-size:30px\">"+ ouvre.getAttributs().get("metaSujet") +"</span></spanpablo></p>\r");
if(!commandes.noNote) if(!plagiat&&copiercoller) fichier.append("<p><spanpablo> Copiés Collés / " +"<br><span style=\"color:blue; font-size:30px\">"+ ouvre.getAttributs().get("metaSujet") +"</span></spanpablo></p>\r");
}
//producteur
if(ouvre.getAttributs().get("producteur")!=null) {
try {
producteur= true;
String[] decompose = ouvre.getAttributs().get("producteur").split("/");
SuiteBureautique=decompose[0];
VersionLibreOffice=decompose[1].substring(0, decompose[1].lastIndexOf("$"));
SystemeStudent=decompose[1].substring(decompose[1].lastIndexOf("$")+1, decompose[1].lastIndexOf(" "));
}catch (Exception e) {
System.out.println("Problème avec l'attribut producteur.");
}finally {
}
}
//informations
// date d'analyse, dossier étudiant, auteur sujet, date de la dernière modificatio, lien, algorithme
DateFormat mediumDateFormat = DateFormat.getDateTimeInstance(DateFormat.MEDIUM,DateFormat.MEDIUM);
LocalDateTime dateTimeModif = null;
String dateModif="";
if(!ouvre.getAttributs().get("dateModification").isEmpty()) {
try {
dateTimeModif = LocalDateTime.parse(ouvre.getAttributs().get("dateModification"));
dateModif = dateTimeModif.format(DateTimeFormatter.ofLocalizedDateTime(FormatStyle.MEDIUM));
}catch (Exception e) {
System.out.println(e.toString());
}
}
fichier.append("<h4>Date d'analyse : "+ mediumDateFormat.format(aujourdhui) + "<br>");
fichier.append("Dossier étudiant : <span style=\"color:blue\">"+ ouvre.getAttributs().get("dossier") + "</span><br>");
fichier.append("Nom du fichier analysé et évalué : <span style=\"color:blue\">"+ ouvre.getAttributs().get("filename") + "</span><br>");
fichier.append("Date de la dernière modification du fichier analysé : <span style=\"color:purple\">"+ dateModif + "</span><br>");
fichier.append("Durée d'édition du fichier analysé : <span style=\"color:purple\">"+ traitementDureeEdition(ouvre.getAttributs().get("dureeEdition") + "</span><br>"));
if(producteur) {
fichier.append("Suite de bureautique : <span style=\"color:coral;\">"+ SuiteBureautique + "</span>");
fichier.append(" - Version : <span style=\"color:coral;\">"+ VersionLibreOffice + "</span>");
fichier.append(" - Système : <span style=\"color:coral;\">"+ SystemeStudent + "</span><br>");
}
if(!auteurSujet.isEmpty()) {fichier.append("Sujet créé par : <span style=\"color:indigo\">"+ auteurSujet + "</span><br>");}else {fichier.append("<br>");}
if(!commandes.noNote) if(!plagiat&&!copiercoller) fichier.append("Méthode : <div class=\"tooltip\"><font color=\"#0000ff\">Progression " + ouvre.getAttributs().get("progression") + "</font><span class=\"tooltiptext\">Explication<br>"+ HTML.imgProgression() +"</span></div> - Pourcentage correcte : " + nodana.retourneFirstEnfantsByName("bodyetnotation").getAttributs().get("proportioncorrect") +"<br>");
if(!commandes.noNote) if(plagiat || copiercoller) fichier.append("Méthode : <div class=\"tooltip\"><font color=\"#0000ff\">Progression " + ouvre.getAttributs().get("progression") + "</font><span class=\"tooltiptext\">Explication<br>"+ HTML.imgProgression() +"</span></div> - Pourcentage correcte : Plagiat <br>");
if(baremeABC) {
fichier.append("Barème : <div class=\"tooltip\"><font color=\"#0000ff\">0% → E → " + Math.round(Double.valueOf(notation.getAttributs().get("BorneE"))*100) + "% → D → " + Math.round(Double.valueOf(notation.getAttributs().get("BorneD"))*100) + "% → C → " + Math.round(Double.valueOf(notation.getAttributs().get("BorneC"))*100) + "% → B → " + Math.round(Double.valueOf(notation.getAttributs().get("BorneB"))*100) + "% → A → 100%</font><span class=\"tooltiptext\">Prendre en compte le coefficient de progression.</span></div>");
}
if(ouvre.getAttributs().get("link_sujet")!=null) {
String linkSujet= ouvre.getAttributs().get("link_sujet");
Matcher m = Pattern.compile("^https://.{1,}|^http://.{1,}").matcher(linkSujet);
if(m.find()) {fichier.append("<br><a href=\"" + linkSujet + "\" target=\"_blank\">Lien vers le sujet</a><br>");}
}
if(ouvre.getAttributs().get("link_help")!=null) {
String linkSujet= ouvre.getAttributs().get("link_help");
Matcher m = Pattern.compile("^https://.{1,}|^http://.{1,}").matcher(linkSujet);
if(m.find()) {fichier.append("<br><a href=\"" + linkSujet + "\" target=\"_blank\">Lien vers le support</a><br>");}
}
fichier.append("<br><font color=\"#808080\" style=\"font-size: 9pt\"><i>Analysé avec la version : " + commandes.version + "<br></h4>");
fichier.append(HTML.SautLigne());
fichier.append("</div>");
//ajoute le menu
fichier.append(HTML.getHTMLmenu(nodana.retourneFirstEnfantsByName("menu").getNodes()));
//Les erreurs
node errors = nodana.retourneFirstEnfantsByName("erreurs");
if(Boolean.valueOf(errors.getAttributs().get("oneError"))) {
fichier.append(HTML.SautLigne());
if(Boolean.valueOf(errors.getAttributs().get("manqueHistorique"))) fichier.append(HTML.Paragraph_classp5("ERREUR : Il n'y a pas d'historique des modifications dans ce fichier. Le fichier n'a pas été modifié ou il a été réinitialisé."));
if(Boolean.valueOf(errors.getAttributs().get("manqueCreationDate"))) fichier.append(HTML.Paragraph_classp5("ERREUR : La date de création du fichier a été supprimée."));
if(Boolean.valueOf(errors.getAttributs().get("manqueValeurCreationDate"))) fichier.append(HTML.Paragraph_classp5("ERREUR : Ce n'est pas la bonne date de création du fichier. Le fichier a été réinitialisé ou ce n'est pas le bon fichier."));
if(Boolean.valueOf(errors.getAttributs().get("manqueMetaSujet"))) fichier.append(HTML.Paragraph_classp5("ERREUR : La méta donnée \"Sujet\" dans les propriétés du fichier a été supprimée ou renommée."));
if(Boolean.valueOf(errors.getAttributs().get("manqueValeurMetaSujet"))) fichier.append(HTML.Paragraph_classp5("ERREUR : La valeur de la méta donnée \"Sujet\" dans les propriétés du fichier n'est pas \"" + nodana.retourneFirstEnfantsByName("ouverture").getAttributs().get("metaSujet"))+".\"");
if(Boolean.valueOf(errors.getAttributs().get("manqueInitialCreator"))) fichier.append(HTML.Paragraph_classp5("ERREUR : La valeur de la méta donnée \"initial-creator\" dans les propriétés du fichier n'est pas \"" + nodana.retourneFirstEnfantsByName("ouverture").getAttributs().get("Initial_Creator"))+".\"");
}
//plagiat
if(plagiat) if(verifStudent!=null){
fichier.append(HTML.SautLigne());
ArrayList<node> correspondance = verifStudent.retourneEnfantsByName("correspondance", new ArrayList<node>());
for(int j = 0 ; j < correspondance.size();j++) {
fichier.append(HTML.Paragraph_classp5("Correspondance à la date=" + correspondance.get(j).getAttributs().get("date") + " avec l'étudiant " + correspondance.get(j).getAttributs().get("Avec_etudiant")));
}
}
fichier.append(HTML.SautLigne());
//Ajoute de commentaire de l'exercice
fichier.append(HTML.H3(nodana.getContenu()).replace("-NewLine-", "<br>"));
fichier.append(HTML.SautLigne());
fichier.append(HTML.H2("Synthèse"));
fichier.append(HTML.TableEnteteTableurSynthese());
String IdError = ""; // permet de récupérer les id des menu ou la proportioncorrect est NaN. (à cause de l'attribut analyseStyle=true)
for(int k = 0 ; k < nodana.getNodes().size();k++) {
if(nodana.getNodes().get(k).getAttributs().get("addmenu")!=null) if(nodana.getNodes().get(k).getAttributs().get("addmenu").equals("true")) {
if(!nodana.getNodes().get(k).getAttributs().get("proportioncorrect").equals("NaN")) {
fichier.append(HTML.TablePointsSyntheseStyle(nodana.getNodes().get(k).getAttributs().get("titre"),Double.valueOf(nodana.getNodes().get(k).getAttributs().get("proportioncorrect")),nodana.getNodes().get(k).getAttributs().get("pointtotal") + " pt",nodana.getNodes().get(k).getAttributs().get("pointgagner") + " pt", nodana.getNodes().get(k).getAttributs().get("poids"),nodana.getNodes().get(k).getAttributs().get("id")));
}else {
IdError = IdError + nodana.getNodes().get(k).getAttributs().get("id");
}
}
}
//Metadonnées
if(nodana.retourneFirstEnfantsByName("meta")!=null) if(nodana.retourneFirstEnfantsByName("meta").isClose()) {
fichier.append(HTML.Table(nodana.retourneFirstEnfantsByName("meta")));
}
//style de paragraphe
if(nodana.retourneFirstEnfantsByName("paragraphs")!=null) if(nodana.retourneFirstEnfantsByName("paragraphs").isClose()) {
//il est possible qu'il n'y ai aucun point car passé par analyseStyle dans le node structurepage
if(!IdError.contains(nodana.retourneFirstEnfantsByName("paragraphs").getAttributs().get("id"))){
fichier.append(HTML.Table(nodana.retourneFirstEnfantsByName("paragraphs")));
}
}
//pages
if(nodana.retourneFirstEnfantsByName("pages")!=null) if(nodana.retourneFirstEnfantsByName("pages").isClose()) {
fichier.append(HTML.Table(nodana.retourneFirstEnfantsByName("pages")));
}
//sequences
if(nodana.retourneFirstEnfantsByName("sequences")!=null) if(nodana.retourneFirstEnfantsByName("sequences").isClose()) {
fichier.append(HTML.Table(nodana.retourneFirstEnfantsByName("sequences")));
}
//numerotationchapitre
if(nodana.retourneFirstEnfantsByName("numerotationchapitre")!=null) if(nodana.retourneFirstEnfantsByName("numerotationchapitre").isClose()) {
fichier.append(HTML.Table(nodana.retourneFirstEnfantsByName("numerotationchapitre")));
}
//frames
if(nodana.retourneFirstEnfantsByName("frames")!=null) if(nodana.retourneFirstEnfantsByName("frames").isClose()) {
fichier.append(HTML.Table(nodana.retourneFirstEnfantsByName("frames")));
}
//bibliographies
if(nodana.retourneFirstEnfantsByName("bibliographies")!=null) if(nodana.retourneFirstEnfantsByName("bibliographies").isClose()) {
fichier.append(HTML.Table(nodana.retourneFirstEnfantsByName("bibliographies")));
}
//tablematieres
if(nodana.retourneFirstEnfantsByName("tablematieres")!=null) if(nodana.retourneFirstEnfantsByName("tablematieres").isClose()) {
fichier.append(HTML.Table(nodana.retourneFirstEnfantsByName("tablematieres")));
}
//tableillustrations
if(nodana.retourneFirstEnfantsByName("tableillustrations")!=null) if(nodana.retourneFirstEnfantsByName("tableillustrations").isClose()) {
fichier.append(HTML.Table(nodana.retourneFirstEnfantsByName("tableillustrations")));
}
//structurepage
if(nodana.retourneFirstEnfantsByName("structurepage")!=null) if(nodana.retourneFirstEnfantsByName("structurepage").isClose()) {
fichier.append(HTML.Table(nodana.retourneFirstEnfantsByName("structurepage")));
}
fichier.append("<p><br><br></p>");
//footer
fichier.append("<div class=\"footer\">");
fichier.append("<font color=\"#808080\" style=\"font-size: 10pt\"><i>analyseWriter - P. Rodriguez (université d'Artois) - Licence GPL v3.0 - analysé avec la version : " + commandes.version + " - ");
fichier.append("Fichier d'analyse créé avec la version : " + ouvre.getAttributs().get("version") + "</i></font>");
fichier.append("</div>");
fichier.append("<script>");
fichier.append("window.onscroll = function() {myFunction()};");
fichier.append("var navbar = document.getElementById(\"navbar\");");
fichier.append("var sticky = navbar.offsetTop;");
fichier.append("function myFunction() {");
fichier.append("if (window.pageYOffset >= sticky) {");
fichier.append("navbar.classList.add(\"sticky\")");
fichier.append("} else {");
fichier.append("navbar.classList.remove(\"sticky\");");
fichier.append("}");
fichier.append("}\r\n");
fichier.append("function toggleMenu() {\r\n" +
" var menuBox0 = document.getElementById('menu-box0'); \r\n" +
" var menuBox1 = document.getElementById('menu-box1'); \r\n" +
" var menuBox2 = document.getElementById('menu-box2'); \r\n" +
" var menuBox3 = document.getElementById('menu-box3'); \r\n" +
" var menuBox4 = document.getElementById('menu-box4'); \r\n" +
" var menuBox5 = document.getElementById('menu-box5'); \r\n" +
"\r\n"+
" if(menuBox0.style.display == \"block\") { " +
" menuBox0.style.display = \"none\";\r\n" +
" }\r\n" +
" else {" +
" menuBox0.style.display = \"block\";\r\n" +
" }\r\n" +
"\r\n"+
" if(menuBox1.style.display == \"block\") { " +
" menuBox1.style.display = \"none\";\r\n" +
" }\r\n" +
" else {" +
" menuBox1.style.display = \"block\";\r\n" +
" }\r\n" +
"\r\n"+
" if(menuBox2.style.display == \"block\") { " +
" menuBox2.style.display = \"none\";\r\n" +
" }\r\n" +
" else {" +
" menuBox2.style.display = \"block\";\r\n" +
" }\r\n" +
"\r\n"+
" if(menuBox3.style.display == \"block\") { " +
" menuBox3.style.display = \"none\";\r\n" +
" }\r\n" +
" else {" +
" menuBox3.style.display = \"block\";\r\n" +
" }\r\n" +
" if(menuBox4.style.display == \"block\") { " +
" menuBox4.style.display = \"none\";\r\n" +
" }\r\n" +
" else {" +
" menuBox4.style.display = \"block\";\r\n" +
" }\r\n" +
" if(menuBox5.style.display == \"block\") { " +
" menuBox5.style.display = \"none\";\r\n" +
" }\r\n" +
" else {" +
" menuBox5.style.display = \"block\";\r\n" +
" }\r\n" +
"}");
fichier.append("</script>");
fichier.append("</body>\r");
fichier.append("</html>");
//affichage dans la console
// if(!commandes.fourniDossierDestination) System.out.println("\n\t The feedback file has been written.\n\t " + patch + "\\" + cheminFeedBack);
// if(commandes.fourniDossierDestination) System.out.println("\n\t The feedback file has been written.\n\t " + patch + "\\" + commandes.pathDestination + "\\" + cheminFeedBack);
return fichier;
}
/**
* Affichage uniquement dans la console des erreurs
* @param nod
*/
private static void messageSystem(node nod) {
node ouverture = nod.retourneFirstEnfantsByName("ouverture");
node notation = nod.retourneFirstEnfantsByName("bodyetnotation");
node erreurs = nod.retourneFirstEnfantsByName("erreurs");
boolean flagError = Boolean.valueOf(erreurs.getAttributs().get("oneError"));
System.out.println("\t Folder analyzed : " + ouverture.getAttributs().get("dossier"));
if(notation.getAttributs().get("baremeABC").equals("true")) {
System.out.println("\t Grade : " + notation.getAttributs().get("noteABC"));
}else {
System.out.println("\t Grade : " + notation.getAttributs().get("note") + "/" + ouverture.getAttributs().get("notefrom"));
}
if(flagError) {
System.out.println("\t ERROR in student's file.");
if(Boolean.valueOf(erreurs.getAttributs().get("manqueHistorique"))) System.out.println("\t ERROR : There is no historic in the file. Perhaps, the file has not been modified or it has been reset by the student.");
if(Boolean.valueOf(erreurs.getAttributs().get("manqueCreationDate"))) System.out.println("\t ERROR : This is the wrong file creation date. The file has been reset or it is not the correct file.");
if(Boolean.valueOf(erreurs.getAttributs().get("manqueValeurCreationDate"))) System.out.println("\t ERROR : This is the wrong file creation date.");
if(Boolean.valueOf(erreurs.getAttributs().get("manqueMetaSujet"))) System.out.println("\t ERROR : The metadata \"Sujet\" has been deleted in the student's file. It is impossible to identify the exercise.");
if(Boolean.valueOf(erreurs.getAttributs().get("manqueValeurMetaSujet"))) System.out.println("\t ERROR : The metadata value of \"Sujet \" in the student's file is not. \"" + ouverture.getAttributs().get("metaSujet")+"\"");
if(Boolean.valueOf(erreurs.getAttributs().get("manqueInitialCreator"))) System.out.println("\t ERROR : The initial creator value in the student's file is wrong. \"" + ouverture.getAttributs().get("metaSujet")+"\"");
}
System.out.println();
}
/**
* Place au node le contenu saut de ligne<br>
* Et place un titre1, ou titre2, ou titre3
* <br>
* @param nod
* @return
*/
private 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);
}
}
return nodanalyse;
}
/**
* Vérirication des historiques
* @param verification
* @param a
* @return le node verif
*/
private static node verificationHistorique(node verification, Run a) {
node verif = new node();
verif.setNomElt("verification");
verif.setAttributs(verification.getAttributs());
verif.getAttributs().put("number_match", String.valueOf(commandes.number_match));
verif.getAttributs().put("mini_number_modification", String.valueOf(commandes.mini_number_modification));
verif.getAttributs().put("nombres_modifications_simultané_maxi", String.valueOf(commandes.nombres_modifications_simultané_maxi));
ArrayList<node> LesFichiers = verification.retourneLesEnfantsByName("fichier", new ArrayList<node>());
for(int i = 0 ; i < LesFichiers.size() ; i++) {
node nodStudent = new node();
nodStudent.setNomElt("fichier");
nodStudent.setAttributs(LesFichiers.get(i).getAttributs());
//String nameStudent1 = LesFichiers.get(i).getAttributs().get("dossier");
ArrayList<node> HitoriqueDuFichier = LesFichiers.get(i).retourneEnfantsByName("text:changed-region", new ArrayList<node>());
int nombreModifications = HitoriqueDuFichier.size();
nodStudent.getAttributs().put("nombre_modification", String.valueOf(nombreModifications));
int compteurnombreCorrespondance = 0 ;
int compteurnombreCorrespondancesSuivi = 0;
int compteurnombreCorrespondancesconsecutive = 0;
System.out.println(LesFichiers.get(i).getAttributs().get("dossier") + " - number of modifications : " + nombreModifications);
@SuppressWarnings("unchecked")
ArrayList<node> LesFichiers2 = (ArrayList<node>) LesFichiers.clone();
LesFichiers2.remove(i);
Dictionary<String, Integer> lesdates = new Hashtable<String, Integer>();
Date DateMini = null; //Première date de modification
// Parcours toutes les modifications dans l'historique
for(int j = 0 ; j < HitoriqueDuFichier.size(); j++) {
String dcdate1 = HitoriqueDuFichier.get(j).retourneFirstEnfantsByName("dc:date").getContenu();
String dccreator = HitoriqueDuFichier.get(j).retourneFirstEnfantsByName("dc:creator").getContenu();
Date DcDate1 = DateLibreOffice(dcdate1);
if(DateMini==null) DateMini = DcDate1; // Amorçage de la date premère date de modification
if(DateMini!=null && DateMini.after(DcDate1)) DateMini = DcDate1; //recherche la première date de modification
if(lesdates.get(dcdate1)==null) {
lesdates.put(dcdate1, 1);
}else {
int compteur = lesdates.get(dcdate1) + 1;
lesdates.put(dcdate1, compteur);
}
node N1 = HitoriqueDuFichier.get(j).getNodes().get(0);
for(int i2 = 0 ; i2 < LesFichiers2.size(); i2++) {
String nameStudent2 = LesFichiers2.get(i2).getAttributs().get("dossier");
ArrayList<node> HitoriqueDuFichier2 = LesFichiers2.get(i2).retourneEnfantsByName("text:changed-region", new ArrayList<node>());
for(int j2 = 0 ; j2 <HitoriqueDuFichier2.size(); j2++ ) {
String dcdate2 = HitoriqueDuFichier2.get(j2).retourneFirstEnfantsByName("dc:date").getContenu();
String dccreator2 = HitoriqueDuFichier2.get(j2).retourneFirstEnfantsByName("dc:creator").getContenu();
node N2 = HitoriqueDuFichier2.get(j2).retourneFirstEnfantsByName(N1.getNomElt());
if(a.equalNode(N1, N2)) { //Verification des deux nodes de l'historique identiques
if(dcdate1.equals(dcdate2) && N1.getNomElt().equals(N2.getNomElt()) && dccreator.equals(dccreator2)) { //cette ligne est redondante
if(nodStudent.retourneFirstNodeByNameAndAttributValueExactStrict("correspondance", "date", dcdate2)==null) {
//affinage du match
compteurnombreCorrespondance++;
if(compteurnombreCorrespondancesSuivi==0) {
compteurnombreCorrespondancesSuivi++;
}else {
ArrayList<node> correspondances = nodStudent.retourneEnfantsByName("correspondance", new ArrayList<node>());
node c = correspondances.get(correspondances.size()-1);
if(c.getAttributs().get("Avec_etudiant").equals(nameStudent2)&&c.getAttributs().get("dc:creator").equals(dccreator2)) {
compteurnombreCorrespondancesSuivi++;
if(compteurnombreCorrespondancesconsecutive+1>compteurnombreCorrespondancesconsecutive) compteurnombreCorrespondancesconsecutive++;
}else {
compteurnombreCorrespondancesSuivi=0;
}
}
node correspondance = new node();
correspondance.getNodes().add(N2);
correspondance.setNomElt("correspondance");
correspondance.getAttributs().put("date", dcdate1);
correspondance.getAttributs().put("type",N1.getNomElt());
correspondance.getAttributs().put("Avec_etudiant", nameStudent2);
correspondance.getAttributs().put("dc:creator", dccreator2);
nodStudent.getNodes().add(correspondance);
System.out.println("\t** Find a match ** " + dcdate1);
break;
}
}
}
}
}
}
Enumeration<String> key = lesdates.keys();
while(key.hasMoreElements()) {
String k = key.nextElement();
if(lesdates.get(k)>1) {
node modificationsMemeDate = new node();
modificationsMemeDate.setNomElt("memeinstant");
modificationsMemeDate.getAttributs().put("date", k);
modificationsMemeDate.getAttributs().put("nombres_modifications_simultané", String.valueOf(lesdates.get(k)));
if(commandes.nombres_modifications_simultané_maxi<lesdates.get(k)) {
modificationsMemeDate.getAttributs().put("copier_coller", "true");
nodStudent.getAttributs().put("copier_coller", "true");
}else {
modificationsMemeDate.getAttributs().put("copier_coller", "false");
}
nodStudent.getNodes().add(modificationsMemeDate);
}
}
node modificationsMemeDate = new node();
modificationsMemeDate.setNomElt("memeinstant");
if(compteurnombreCorrespondancesconsecutive>0)compteurnombreCorrespondancesconsecutive++; //C'est histoire des arbres et des intervalles entre les arbres. Il faut ajouter plus 1 au nombre de correspondances consecutives.
nodStudent.getAttributs().put("nombre_correspondance", String.valueOf(compteurnombreCorrespondance));
nodStudent.getAttributs().put("nombre_modifications_date_unique", String.valueOf(lesdates.size()));
nodStudent.getAttributs().put("nombre_correspondances_consecutives", String.valueOf(compteurnombreCorrespondancesconsecutive));
nodStudent.getAttributs().put("first_modification_date", String.valueOf(DateMini));
verif.getNodes().add(nodStudent);
System.out.println("\tDate de modification date unique " + String.valueOf(lesdates.size()));
}
// Ci-dessous le code pour vérifier la première date de modification dans le fichier.
// Recherche dans le node verif
int lastIndex = verif.getNodes().size();
for(int i = 0 ; i < lastIndex;i++) {
String D1 = verif.getNodes().get(i).getAttributs().get("first_modification_date");
boolean trouve =false;
for(int j = 0; j < lastIndex; j++) {
if(i!=j) {
String D2 = verif.getNodes().get(j).getAttributs().get("first_modification_date");
if(D1.equals(D2)) {
if(verif.getNodes().get(i).getAttributs().get("")==null) {
verif.getNodes().get(i).getAttributs().put("first_modification_identique", verif.getNodes().get(j).getAttributs().get("dossier"));
}else {
verif.getNodes().get(i).getAttributs().put("first_modification_identique_2", verif.getNodes().get(j).getAttributs().get("dossier"));
}
if(verif.getNodes().get(j).getAttributs().get("")==null) {
verif.getNodes().get(j).getAttributs().put("first_modification_identique", verif.getNodes().get(i).getAttributs().get("dossier"));
}else {
verif.getNodes().get(j).getAttributs().put("first_modification_identique_2", verif.getNodes().get(i).getAttributs().get("dossier"));
}
trouve=true;
}
}
}
if(!trouve) {
verif.getNodes().get(i).getAttributs().put("first_modification_identique","null");
}else {
verif.getNodes().get(i).getAttributs().put("plagiat", "probable");
System.out.println("\t\t ************************");
System.out.println("\t\t ** Plagiat PROBABLE **");
System.out.println("\t\t ************************");
}
}
return verif;
}
/**
* Ecriture de l'ensemble des notes brutes sans vérification et sans rechercher les identifiants des étudiants
* @param nodesana
* @throws IOException
*/
private static void ecritureCSV(node ana) throws IOException{
Date aujourdhui = new Date();
Path outputFilePath = Paths.get(patch + "/DateLong" + aujourdhui.getTime()+ "-Notes.csv");
if(commandes.fourniDossierDestination) outputFilePath = Paths.get(patch +"/"+ commandes.pathDestination + "/DateLong" + aujourdhui.getTime()+ "-Notes.csv");
if(!commandes.fourniDossierDestination) System.out.println(patch +"\\DateLong" + aujourdhui.getTime()+ "-Notes.csv");
if(commandes.fourniDossierDestination) System.out.println(patch +"\\"+ commandes.pathDestination + "\\DateLong" + aujourdhui.getTime()+ "-Notes.csv");
BufferedWriter fichier = Files.newBufferedWriter(outputFilePath, StandardCharsets.UTF_8);
fichier.write("prénom nom;date modification;producteur;durée edition;sujet;note\n");
for (int i = 0 ; i < ana.getNodes().size() ; i++) {
node nodouverture = ana.getNodes().get(i).retourneFirstEnfantsByName("ouverture");
String identification = nodouverture.getAttributs().get("dossier");
String sujet = nodouverture.getAttributs().get("metaSujet");
String dateModif = nodouverture.getAttributs().get("dateModification");
String producteur = nodouverture.getAttributs().get("producteur");
String dureeEdition = nodouverture.getAttributs().get("dureeEdition");
String note = ana.getNodes().get(i).retourneFirstEnfantsByName("bodyetnotation").getAttributs().get("note");
if(nodouverture.getAttributs().get("baremeABC")!=null) {
try {
if(Boolean.valueOf(nodouverture.getAttributs().get("baremeABC"))) {
note = ana.getNodes().get(i).retourneFirstEnfantsByName("bodyetnotation").getAttributs().get("noteABC");
}
}catch (Exception e) {
}
}
fichier.write(identification + ";" + dateModif + ";" + producteur + ";" + traitementDureeEdition(dureeEdition) + ";"+ sujet + ";" + traitementNote(note) + "\n");
}
fichier.close();
}
/**
* Ecriture du fichier CSV avec vérification mais sans rechercher les identifiants des étudiants
* @param ana
* @param verif
* @param a
* @throws IOException
*/
private static void ecritureCSV(node ana, node verif, Run a, node setting) throws IOException{
String separator =";"; //valeur par défaut du séparteur
Date aujourdhui = new Date();
Path outputFilePath = Paths.get(patch + "/DateLong" + aujourdhui.getTime()+ "-Notes.csv");
if(commandes.fourniDossierDestination) outputFilePath = Paths.get(patch +"/"+ commandes.pathDestination + "/DateLong" + aujourdhui.getTime()+ "-Notes.csv");
if(!commandes.fourniDossierDestination) System.out.println(patch +"\\DateLong" + aujourdhui.getTime()+ "-Notes.csv");
if(commandes.fourniDossierDestination) System.out.println(patch +"\\"+ commandes.pathDestination + "\\DateLong" + aujourdhui.getTime()+ "-Notes.csv");
BufferedWriter fichier = Files.newBufferedWriter(outputFilePath, StandardCharsets.UTF_8);
fichier.write("prénom nom;date modification;producteur;durée edition;sujet;nbr modification;nbr modification date unique;nbr match;note\n");
for (int i = 0 ; i < ana.getNodes().size() ; i++) {
node nodouverture = ana.getNodes().get(i).retourneFirstEnfantsByName("ouverture");
String identification = nodouverture.getAttributs().get("dossier");
String sujet = nodouverture.getAttributs().get("metaSujet");
String dateModif = nodouverture.getAttributs().get("dateModification");
String producteur = nodouverture.getAttributs().get("producteur");
String dureeEdition = nodouverture.getAttributs().get("dureeEdition");
node verifStudent = a.retourneNodeByNameAttributValueAttributValueExact(verif, "fichier", "dossier", identification, "dateModification", dateModif);
String note = "plagiat";
if(verifStudent!=null) {
int nbreCorrespondance = Integer.valueOf(verifStudent.getAttributs().get("nombre_correspondance"));
int nbrDateModificationUnique = Integer.valueOf(verifStudent.getAttributs().get("nombre_modifications_date_unique"));
if(nbreCorrespondance<=commandes.number_match) {
note = ana.getNodes().get(i).retourneFirstEnfantsByName("bodyetnotation").getAttributs().get("note");
if(nodouverture.getAttributs().get("baremeABC")!=null) {
try {
if(Boolean.valueOf(nodouverture.getAttributs().get("baremeABC"))) {
note = ana.getNodes().get(i).retourneFirstEnfantsByName("bodyetnotation").getAttributs().get("noteABC");
}
}catch (Exception e) {
}
}
}
if(nbrDateModificationUnique<commandes.mini_number_modification) {
note = note + separator + "copy";
}
String nbrModification = verifStudent.getAttributs().get("nombre_modification");
String nombre_modifications_date_unique = verifStudent.getAttributs().get("nombre_modifications_date_unique");
fichier.write(identification + separator + dateModif + separator + producteur + separator + traitementDureeEdition(dureeEdition) + separator + sujet + separator + nbrModification + separator + nombre_modifications_date_unique + separator + nbreCorrespondance + separator + traitementNote(note) + "\n");
}
}
fichier.close();
}
/**
* Ecriture du fichier CSV avec ou sans vérification mais avec rechercher des identifiants des étudiants.<br>
* @param ana
* @param verif
* @param a
* @param nodeCVS
* @param verification
* @throws IOException
*/
private static void ecritureCSV(node ana, node verif, Run a, node nodeCVS, node setting) throws IOException {
String separator =";"; //valeur par défaut du séparteur
Charset encoding = StandardCharsets.UTF_8; //valeur par défaut
String champMoodleEmail = "adresse";
String champMoodleNumeroEtudiant = "identification";
String champPrenom = "prenom";
String champNom= "nom";
if(setting.getNomElt().equals("setting")) {
if(setting.containElementByName("csv")){
node csv = setting.retourneFirstEnfantsByName("csv");
if(csv.getAttributs().get("separator")!=null)separator = csv.getAttributs().get("separator");
if(csv.getAttributs().get("encoding")!=null) {
if(csv.getAttributs().get("encoding").equals("UFT-8")) encoding = StandardCharsets.UTF_8;
if(csv.getAttributs().get("encoding").equals("ISO-8859-1")) encoding = StandardCharsets.ISO_8859_1;
if(csv.getAttributs().get("encoding").equals("US-ASCII")) encoding = StandardCharsets.US_ASCII;
if(csv.getAttributs().get("encoding").equals("UTF-16")) encoding = StandardCharsets.UTF_16;
if(csv.getAttributs().get("encoding").equals("UTF-16BE")) encoding = StandardCharsets.UTF_16BE;
if(csv.getAttributs().get("encoding").equals("UTF-16LE")) encoding = StandardCharsets.UTF_16LE;
if(csv.containElementByName("import_moodle")) {
node import_moodle = csv.retourneFirstEnfantsByName("import_moodle");
if(import_moodle.getAttributs().get("email")!=null) champMoodleEmail=import_moodle.getAttributs().get("email");
if(import_moodle.getAttributs().get("id")!=null) champMoodleNumeroEtudiant=import_moodle.getAttributs().get("id");
if(import_moodle.getAttributs().get("firstname")!=null) champPrenom=import_moodle.getAttributs().get("firstname");
if(import_moodle.getAttributs().get("name")!=null) champNom=import_moodle.getAttributs().get("name");
}
}
}
}
Date aujourdhui = new Date();
Path outputFilePath = Paths.get(patch + "/DateLong" + aujourdhui.getTime()+ "-Notes.csv");
if(commandes.fourniDossierDestination) outputFilePath = Paths.get(patch +"/"+ commandes.pathDestination + "/DateLong" + aujourdhui.getTime()+ "-Notes.csv");
if(!commandes.fourniDossierDestination) System.out.println(patch +"\\DateLong" + aujourdhui.getTime()+ "-Notes.csv");
if(commandes.fourniDossierDestination) System.out.println(patch +"\\"+ commandes.pathDestination + "\\DateLong" + aujourdhui.getTime()+ "-Notes.csv");
BufferedWriter fichier = Files.newBufferedWriter(outputFilePath, encoding);
fichier.write("prénom nom"+separator+"email"+separator+"identifiant"+separator+"date modification"+separator+"producteur"+separator+"durée edition"+separator+"sujet"+separator+"nbr modification" + separator + "nbr modifications date unique" + separator+ "nbr match" + separator +"note" + separator +"commentaire\n");
for (int i = 0 ; i < ana.getNodes().size() ; i++) {
node nodouverture = ana.getNodes().get(i).retourneFirstEnfantsByName("ouverture");
node bodyetnotation = ana.getNodes().get(i).retourneFirstEnfantsByName("bodyetnotation");
String identification = nodouverture.getAttributs().get("dossier");
String sujet = nodouverture.getAttributs().get("metaSujet");
String dateModif = nodouverture.getAttributs().get("dateModification");
String producteur = nodouverture.getAttributs().get("producteur");
String dureeEdition = nodouverture.getAttributs().get("dureeEdition");
String mail = "-";
String numeroEtudiant = "-";
node verifStudent = null;
if(commandes.verifHisto2) verifStudent = a.retourneNodeByNameAttributValueAttributValueExact(verif, "fichier", "dossier", identification, "dateModification", dateModif);
String note = "";
// rechercher les correspondances avec le prénom et le nom de l'étudiant
String[] ident = identification.split(" "); //séparateur entre le prénom et le nom par un espace
node A=null;
if(ident.length==2) {
A = a.retourneNodeByNameAttributValueAttributValueExact(nodeCVS, "student", champPrenom, ident[0], champNom, ident[1]);
if(A!=null) {
mail = A.getAttributs().get("\"" + champMoodleEmail + "\"");
if(mail==null) mail = A.getAttributs().get("'"+ champMoodleEmail +"'");
if(mail==null) mail = A.getAttributs().get(champMoodleEmail);
numeroEtudiant = A.getAttributs().get("\"" + champMoodleNumeroEtudiant + "\"");
if(numeroEtudiant==null) numeroEtudiant = A.getAttributs().get("'" + champMoodleNumeroEtudiant + "'");
if(numeroEtudiant==null) numeroEtudiant = A.getAttributs().get(champMoodleNumeroEtudiant);
}
}
if(ident.length==3) {
A = a.retourneNodeByNameAttributValueAttributValueExact(nodeCVS, "student", champPrenom, "\"" + ident[0] + " " + ident[1] +"\"", champNom, ident[2]);
if(A!=null) {
mail = A.getAttributs().get("\"" + champMoodleEmail + "\"");
if(mail==null) mail = A.getAttributs().get("'"+ champMoodleEmail +"'");
if(mail==null) mail = A.getAttributs().get(champMoodleEmail);
numeroEtudiant = A.getAttributs().get("\"" + champMoodleNumeroEtudiant + "\"");
if(numeroEtudiant==null) numeroEtudiant = A.getAttributs().get("'" + champMoodleNumeroEtudiant + "'");
if(numeroEtudiant==null) numeroEtudiant = A.getAttributs().get(champMoodleNumeroEtudiant);
}
if(A==null) {
A = a.retourneNodeByNameAttributValueAttributValueExact(nodeCVS, "student", champPrenom, ident[0], champNom, "\"" +ident[1] + " " + ident[2] + "\"");
if(A!=null) {
mail = A.getAttributs().get("\"" + champMoodleEmail + "\"");
if(mail==null) mail = A.getAttributs().get("'"+ champMoodleEmail +"'");
if(mail==null) mail = A.getAttributs().get(champMoodleEmail);
numeroEtudiant = A.getAttributs().get("\"" + champMoodleNumeroEtudiant + "\"");
if(numeroEtudiant==null) numeroEtudiant = A.getAttributs().get("'" + champMoodleNumeroEtudiant + "'");
if(numeroEtudiant==null) numeroEtudiant = A.getAttributs().get(champMoodleNumeroEtudiant);
}
}
}
if(ident.length==4) {
A = a.retourneNodeByNameAttributValueAttributValueExact(nodeCVS, "student", champPrenom, ident[0], champNom, "\"" + ident[1] + " " + ident[2] + " " + ident[3] + "\"");
if(A!=null) {
mail = A.getAttributs().get("\"" + champMoodleEmail + "\"");
if(mail==null) mail = A.getAttributs().get("'"+ champMoodleEmail +"'");
if(mail==null) mail = A.getAttributs().get(champMoodleEmail);
numeroEtudiant = A.getAttributs().get("\"" + champMoodleNumeroEtudiant + "\"");
if(numeroEtudiant==null) numeroEtudiant = A.getAttributs().get("'" + champMoodleNumeroEtudiant + "'");
if(numeroEtudiant==null) numeroEtudiant = A.getAttributs().get(champMoodleNumeroEtudiant);
}
if(A==null) {
A = a.retourneNodeByNameAttributValueAttributValueExact(nodeCVS, "student", champPrenom, "\"" + ident[0] + " " + ident[1] +"\"", champNom, "\"" + ident[2] + " " + ident[3] + "\"");
if(A!=null) {
mail = A.getAttributs().get("\"" + champMoodleEmail + "\"");
if(mail==null) mail = A.getAttributs().get("'"+ champMoodleEmail +"'");
if(mail==null) mail = A.getAttributs().get(champMoodleEmail);
numeroEtudiant = A.getAttributs().get("\"" + champMoodleNumeroEtudiant + "\"");
if(numeroEtudiant==null) numeroEtudiant = A.getAttributs().get("'" + champMoodleNumeroEtudiant + "'");
if(numeroEtudiant==null) numeroEtudiant = A.getAttributs().get(champMoodleNumeroEtudiant);
}
}
if(A==null) {
A = a.retourneNodeByNameAttributValueAttributValueExact(nodeCVS, "student", champPrenom, "\"" + ident[0] + " " + ident[1] + ident[2] + "\"", champNom, ident[3]);
if(A!=null) {
mail = A.getAttributs().get("\"" + champMoodleEmail + "\"");
if(mail==null) mail = A.getAttributs().get("'"+ champMoodleEmail +"'");
if(mail==null) mail = A.getAttributs().get(champMoodleEmail);
numeroEtudiant = A.getAttributs().get("\"" + champMoodleNumeroEtudiant + "\"");
if(numeroEtudiant==null) numeroEtudiant = A.getAttributs().get("'" + champMoodleNumeroEtudiant + "'");
if(numeroEtudiant==null) numeroEtudiant = A.getAttributs().get(champMoodleNumeroEtudiant);
}
}
}
if(commandes.verifHisto2) if(verifStudent!=null) {
int nbreCorrespondance = Integer.valueOf(verifStudent.getAttributs().get("nombre_correspondance"));
int nbrDateModificationUnique = Integer.valueOf(verifStudent.getAttributs().get("nombre_modifications_date_unique"));
note = bodyetnotation.getAttributs().get("note");
if(bodyetnotation.getAttributs().get("baremeABC")!=null) {
try {
if(Boolean.valueOf(bodyetnotation.getAttributs().get("baremeABC"))) {
note = bodyetnotation.getAttributs().get("noteABC");
}
}catch (Exception e) {
}
}
if(nbreCorrespondance>=commandes.number_match) {
bodyetnotation.getAttributs().put("commentaire","pas assez de modification");
// if(bodyetnotation.getAttributs().get("baremeABC")!=null) {
// try {
// if(Boolean.valueOf(bodyetnotation.getAttributs().get("baremeABC"))) {
// note = bodyetnotation.getAttributs().get("noteABC") + separator + "pas assez de modification";
// }
// }catch (Exception e) {
//
// }
// }
}
if(nbrDateModificationUnique<=commandes.mini_number_modification) {
bodyetnotation.getAttributs().put("commentaire","probable copy");
// if(bodyetnotation.getAttributs().get("baremeABC")!=null) {
// try {
// if(Boolean.valueOf(bodyetnotation.getAttributs().get("baremeABC"))) {
// note = bodyetnotation.getAttributs().get("noteABC") + separator + "probable copy";
// }
// }catch (Exception e) {
//
// }
// }
}
if(!verifStudent.getAttributs().get("first_modification_identique").equals("null")) {
note = "0" ;
bodyetnotation.getAttributs().put("commentaire","échange de fichier");
}
if(verifStudent.getAttributs().get("copier_coller")!=null){
bodyetnotation.getAttributs().put("commentaire","des copiés et des collés");
}
String nbrModification = verifStudent.getAttributs().get("nombre_modification");
String nombre_modifications_date_unique = verifStudent.getAttributs().get("nombre_modifications_date_unique");
fichier.write(identification + separator + mail + separator + numeroEtudiant + separator + dateModif + separator + producteur + separator + traitementDureeEdition(dureeEdition) + separator + sujet + separator + nbrModification +separator + nombre_modifications_date_unique + separator + nbreCorrespondance + separator + traitementNote(note) + separator + bodyetnotation.getAttributs().get("commentaire")+"\n");
}
if(!commandes.verifHisto2) {
note = bodyetnotation.getAttributs().get("note");
if(bodyetnotation.getAttributs().get("baremeABC")!=null) {
try {
if(Boolean.valueOf(bodyetnotation.getAttributs().get("baremeABC"))) {
note = bodyetnotation.getAttributs().get("noteABC");
}
}catch (Exception e) {
}
}
fichier.write(identification + separator + mail + separator + numeroEtudiant + separator + dateModif + separator + producteur + separator + traitementDureeEdition(dureeEdition) + separator + sujet + separator + "" + separator + "" + "" + separator + "" + separator + traitementNote(note) + separator + bodyetnotation.getAttributs().get("commentaire")+"\n");
}
}
fichier.close();
}
/**
* Traitement de la durée d'édition.<br>
* <br>
* @param dureeEdition
* @return
*/
private static String traitementDureeEdition(String dureeEdition) {
dureeEdition = dureeEdition.replace("P", "");
dureeEdition = dureeEdition.replace("D", " j ");
dureeEdition = dureeEdition.replace("T", " ");
dureeEdition = dureeEdition.replace("H", " h ");
dureeEdition = dureeEdition.replace("M", " min ");
dureeEdition = dureeEdition.replace("S", " s");
return dureeEdition;
}
/**
* Remplace la virgule par un point.<br>
* <br>
* @param note
* @return
*/
private static String traitementNote(String note) {
if(note==null) return note;
note = note.replace(",", ".");
return note;
}
/**
*
* @param libreoffice_date
* @return
*/
private static Date DateLibreOffice(String libreoffice_date){
boolean contientHeure = false;
if(libreoffice_date.contains("T")) {
libreoffice_date=libreoffice_date.replace("T", " ");
contientHeure=true;
}
SimpleDateFormat simpledateformat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
Date d = null;
if(!contientHeure) simpledateformat = new SimpleDateFormat("yyyy-MM-dd");
try {
d = simpledateformat.parse(libreoffice_date);
}catch(ParseException e) {
e.printStackTrace();
}
return d;
}
/**
* Chargement dans un node du fichier CSV de la liset des étudiants.<br>
* La liste des étudiants doit contenir les champs Prénom, Nom, Numéro d'identification, Adresse de courriel
* Le séparateur doit être le point-virgule et l'encodage UTF-8
* @param a
* @param nameCSV
* @return
* @throws IOException
*/
private static node chargementFichierCSV(Run a, String nameCSV) {
String targetString = "";
try {
BufferedReader br = new BufferedReader(
new InputStreamReader(
new FileInputStream(a.getPatch() + "/" + nameCSV), "UTF-8"));
String line;
while ((line = br.readLine()) != null) {
targetString = targetString + line + "\n";
}
br.close();
} catch (IOException e) {
commandes.clotureWithErrorFile(nameCSV);
e.printStackTrace();
}
String[] target = targetString.split("\\n");
node nodeCVS = new node();
nodeCVS.setNomElt("fileCSV");
String[] line1 = target[0].split(";");
for(int i = 1 ; i < target.length ; i++) {
node nodeEtudiant = new node();
nodeEtudiant.setNomElt("student");
for(int j = 0 ; j < line1.length; j++) {
nodeEtudiant.getAttributs().put(line1[j], target[i].split(";")[j]);
}
nodeCVS.getNodes().add(nodeEtudiant);
}
//a.ecritureNodeEnXML(nodeCVS, "nodeCVS"); //écriture du node du node CSV
return nodeCVS;
}
/**
* Charge le fichier SVG pour le nouveau Logo dans les feedbacks
* @param a
* @param nameSVG
* @return
*/
private static String chargementFichierSVG(Run a, String nameSVG) {
String targetString = "";
try {
BufferedReader br = new BufferedReader(
new InputStreamReader(
new FileInputStream(a.getPatch() + "/" + nameSVG), "UTF-8"));
String line;
while ((line = br.readLine()) != null) {
targetString = targetString + line + "\n";
}
br.close();
} catch (IOException e) {
commandes.clotureWithErrorFile(nameSVG);
e.printStackTrace();
}
return targetString;
}
/**
* Ajoute les valeurs par défauts pour les styles de paragraphes.<br>
* <br>
* @param LesStyleStudents : Tous les styles de paragraphes du fichiers de l'étudiants.
* @param styleParagraph : le node dont il faut ajouter les valerus par défauts.
* @return le node styleParagraph.
*/
private static node ajouteValeurParDefautAuStyleParagraph(node ensembleDesParagraphes , node styleParagraph) {
node LesStyleDefaut = null;
if(ensembleDesParagraphes.retourneEnfantsByNameExist("style:default-style")) {
LesStyleDefaut = ensembleDesParagraphes.retourneFirstEnfantsByName("style:default-style");
}
if(LesStyleDefaut!=null && styleParagraph!=null) {
//le paragarph properties
node nodeStyleParDefautParagraphProperties = LesStyleDefaut.retourneFirstEnfantsByName("style:paragraph-properties");
node LesNodesStyleParagraph = styleParagraph.retourneFirstEnfantsByName("style:paragraph-properties");
Enumeration<String > K = nodeStyleParDefautParagraphProperties.getAttributs().keys();
while(K.hasMoreElements()){
String Key = K.nextElement();
if(LesNodesStyleParagraph.getNomElt().equals("style:paragraph-properties")) {
if(LesNodesStyleParagraph.getAttributs().get(Key)==null) {
LesNodesStyleParagraph.getAttributs().put(Key, nodeStyleParDefautParagraphProperties.getAttributs().get(Key));
}
}else {
node n = new node();
n.setNomElt("style:paragraph-properties");
n.setAttributs(nodeStyleParDefautParagraphProperties.getAttributs());
styleParagraph.getNodes().add(n);
break;
}
}
//le text properties
node nodeStyleParDefautTextProperties = LesStyleDefaut.retourneFirstEnfantsByName("style:text-properties");
node LesNodesStyleText = styleParagraph.retourneFirstEnfantsByName("style:text-properties");
K = nodeStyleParDefautTextProperties.getAttributs().keys();
while(K.hasMoreElements()){
String Key = K.nextElement();
if(LesNodesStyleText.getNomElt().equals("style:text-properties")) {
if(LesNodesStyleText.getAttributs().get(Key)==null) {
LesNodesStyleText.getAttributs().put(Key, nodeStyleParDefautTextProperties.getAttributs().get(Key));
}
}else {
node n = new node();
n.setNomElt("style:text-properties");
n.setAttributs(nodeStyleParDefautTextProperties.getAttributs());
styleParagraph.getNodes().add(n);
break;
}
}
}
return styleParagraph;
}
/**
* Même méthode que "ajouteValeurParDefautAuStyleParagraph".<br>
* <br>
* @param ensembleDesParagraphes
* @param styleParagraph
* @return
*/
private static node ajouteValeurLesValeursDuStyleParagraphParent(node ensembleDesParagraphes , node styleParagraph) {
node parent = null;
if(styleParagraph.getAttributs().get("style:parent-style-name")!=null) {
String nameStyleParent = styleParagraph.getAttributs().get("style:parent-style-name");
if(ensembleDesParagraphes.retourneFirstNodeByNameAndAttributValue("style:style", "style:name", nameStyleParent)!=null) {
parent = ensembleDesParagraphes.retourneFirstNodeByNameAndAttributValue("style:style", "style:name", nameStyleParent);
}
}
if(parent!=null) {
//le paragarph properties
node nodeStyleParDefautParagraphProperties = parent.retourneFirstEnfantsByName("style:paragraph-properties");
node LesNodesStyleParagraph = styleParagraph.retourneFirstEnfantsByName("style:paragraph-properties");
Enumeration<String > K = nodeStyleParDefautParagraphProperties.getAttributs().keys();
while(K.hasMoreElements()){
String Key = K.nextElement();
if(LesNodesStyleParagraph.getNomElt().equals("style:paragraph-properties")) {
if(LesNodesStyleParagraph.getAttributs().get(Key)==null) {
LesNodesStyleParagraph.getAttributs().put(Key, nodeStyleParDefautParagraphProperties.getAttributs().get(Key));
}
}else {
node n = new node();
n.setNomElt("style:paragraph-properties");
n.setAttributs(nodeStyleParDefautParagraphProperties.getAttributs());
styleParagraph.getNodes().add(n);
break;
}
}
//le text properties
node nodeStyleParDefautTextProperties = parent.retourneFirstEnfantsByName("style:text-properties");
node LesNodesStyleText = styleParagraph.retourneFirstEnfantsByName("style:text-properties");
K = nodeStyleParDefautTextProperties.getAttributs().keys();
while(K.hasMoreElements()){
String Key = K.nextElement();
if(LesNodesStyleText.getNomElt().equals("style:text-properties")) {
if(LesNodesStyleText.getAttributs().get(Key)==null) {
LesNodesStyleText.getAttributs().put(Key, nodeStyleParDefautTextProperties.getAttributs().get(Key));
}
}else {
node n = new node();
n.setNomElt("style:text-properties");
n.setAttributs(nodeStyleParDefautTextProperties.getAttributs());
styleParagraph.getNodes().add(n);
break;
}
}
}
return styleParagraph;
}
/**
* Ce node permet la configuration personnalisé de l'application.<br>
* Ajoute le node setting avec les différentes valeurs.<br>
*
* @param sujet Le node du sujet.
* @return Le node du sujet avec le node setting ajouté.
*/
private static node addSetting(node sujet) {
//node setting
node setting = new node();
setting.setNomElt("setting");
setting.getAttributs().put("culture","FR");
//node csv
node csv = new node();
csv.setNomElt("csv");
csv.getAttributs().put("encoding", "UTF-8");
csv.getAttributs().put("separator", ";");
csv.setContenu("choose the encoding from this list : UTF-8 US-ASCII ISO-8859-1 UTF-16BE UTF-16LE UTF-16");
csv.setClose(true);
//node export du csv
node export = new node();
export.setNomElt("import_moodle");
export.getAttributs().put("email", "adresse");
export.getAttributs().put("id", "identification");
export.getAttributs().put("firstname", "prenom");
export.getAttributs().put("name", "nom");
export.setClose(true);
//node taille zip
node zip = new node();
zip.setNomElt("zip");
zip.getAttributs().put("size", "48000000");
zip.getAttributs().put("nameZip", "feedbackMoodle");
zip.isClose();
//node verif
node plagiarism = new node();
plagiarism.setNomElt("plagiarism");
plagiarism.getAttributs().put("number_match", "2");
plagiarism.getAttributs().put("mini_number_modification", "0");
plagiarism.getAttributs().put("nombres_modifications_simultané_maxi", "100");
plagiarism.setClose(true);
//construction node similitude
node similarity = new node();
similarity.setNomElt("text:similarity");
similarity.getAttributs().put("tolerance_characters", "5");
similarity.getAttributs().put("tolerance_text", "0.79");
similarity.setClose(true);
//construction du node setting
csv.getNodes().add(export);
setting.getNodes().add(csv);
setting.getNodes().add(zip);
setting.getNodes().add(plagiarism);
setting.getNodes().add(similarity);
//ajoute la node translation
setting.getNodes().add(Run.translation());
// ajoute le node setting au node sujet
sujet.getNodes().add(setting);
//fermeture du node
setting.setClose(true);
return sujet;
}
/**
* recherche en cascade des nodes en fonction de leur contenu.
* @param nameNode : nom du node
* @param nodSujet : nod sujet
* @param nod0Student : node contenant le node nod1Student
* @param nod1Student : node contenant le node nod2Student.
* @param nod2Student : node de niveau le plus haut.
* @param a : Run cXML
* @return : le node recherché
*/
private static node rechercheLeNodeEnCascade(String nameNode, node nodSujet,node nod0Student, node nod1Student, node nod2Student, Run a ) {
node nodStudent =null;
// recherche le node uniquement par son contenu et pas celui de ses enfants
if(nodSujet.getAttributs().get("recherche_contenu_exact")!=null){
if(nodSujet.getAttributs().get("recherche_index")!=null) {
if(nodSujet.getAttributs().get("recherche_contenu_exact").equals("true") && nodSujet.getAttributs().get("recherche_index").equals("false") ) {
String valueAttribut = outils.withoutCodeAndPointPourRechercheContenuExact(nodSujet.getContenu());
if(nod2Student!=null) if(nodStudent==null) nodStudent = a.retourneFirstNodeByFindContentExact(nod2Student.getNodes(), valueAttribut);
if(nod1Student!=null) if(nodStudent==null) nodStudent = a.retourneFirstNodeByFindContentExact(nod1Student.getNodes(), valueAttribut);
if(nod0Student!=null) if(nodStudent==null) nodStudent = a.retourneFirstNodeByFindContentExact(nod0Student.getNodes(), valueAttribut);
if(nodStudent!=null) {return nodStudent;}else {return null;}
}
if(nodSujet.getAttributs().get("recherche_contenu_exact").equals("true") && nodSujet.getAttributs().get("recherche_index").equals("true") && nodSujet.getAttributs().get("index")!=null ) {
String valueAttribut = outils.withoutCodeAndPointPourRechercheContenuExact(nodSujet.getContenu());
String indexSujet = nodSujet.getAttributs().get("index");
if(!valueAttribut.isEmpty()&&!indexSujet.isEmpty()) {
if(nod2Student!=null) if(nodStudent==null) nodStudent = a.retourneFirstNodeByFindContentExact(nod2Student.getNodes(), valueAttribut);
if(nodStudent!=null) if(nodStudent.getAttributs().get("index").equals(indexSujet)) {return nodStudent;}else {nodStudent=null;}
if(nod1Student!=null) if(nodStudent==null) if(nodStudent==null) nodStudent = a.retourneFirstNodeByFindContentExact(nod1Student.getNodes(), valueAttribut);
if(nodStudent!=null) if(nodStudent.getAttributs().get("index").equals(indexSujet)) {return nodStudent;}else {nodStudent=null;}
if(nod0Student!=null) if(nodStudent==null) if(nodStudent==null) nodStudent = a.retourneFirstNodeByFindContentExact(nod0Student.getNodes(), valueAttribut);
if(nodStudent!=null) if(nodStudent.getAttributs().get("index").equals(indexSujet)) {return nodStudent;}else {nodStudent=null;}
}
}
}else {
if(nodSujet.getAttributs().get("recherche_contenu_exact").equals("true")) {
String valueAttribut = outils.withoutCodeAndPointPourRechercheContenuExact(nodSujet.getContenu());
if(nod2Student!=null) if(nodStudent==null) nodStudent = a.retourneFirstNodeByFindContentExact(nod2Student.getNodes(), valueAttribut);
if(nod1Student!=null) if(nodStudent==null) nodStudent = a.retourneFirstNodeByFindContentExact(nod1Student.getNodes(), valueAttribut);
if(nod0Student!=null) if(nodStudent==null) nodStudent = a.retourneFirstNodeByFindContentExact(nod0Student.getNodes(), valueAttribut);
if(nodStudent!=null) {return nodStudent;}else {return null;}
}
}
}
// recherche le node par index uniquement
if(nodSujet.getAttributs().get("recherche_index")!=null){
if(nodSujet.getAttributs().get("recherche_index").equals("true")) {
String valueAttribut = nodSujet.getAttributs().get("index");
if(nod2Student!=null) if(nodStudent==null) nodStudent = a.retourneFirstNodeByNameAttributValue(nod2Student.getNodes(), nodSujet.getNomElt(),"index",valueAttribut);
if(nod1Student!=null) if(nodStudent==null) nodStudent = a.retourneFirstNodeByNameAttributValue(nod1Student.getNodes(), nodSujet.getNomElt(),"index",valueAttribut);
if(nod0Student!=null) if(nodStudent==null) nodStudent = a.retourneFirstNodeByNameAttributValue(nod0Student.getNodes(), nodSujet.getNomElt(),"index",valueAttribut);
if(nodStudent!=null) {return nodStudent;}else {return null;}
}
}
// recherche par différent contenu du node
if(nameNode.equals("text:p")) {
//si le node "text:p" contient un "text:user-defined" alors le recherche par le "text:name" de ce node "text:user-defined"
if(nodSujet.containElementByName("text:user-defined")) {
String valueAttribut = outils.withoutCodeAndPoint(nodSujet.retourneFirstEnfantsByName("text:user-defined").getAttributs().get("text:name"));
if(nod2Student!=null) if(nodStudent==null) nodStudent = nod2Student.retourneFirstNodeByNameContainsNodeByNameAndAttributValue("text:p","text:user-defined", "text:name", valueAttribut);
if(nod1Student!=null) if(nodStudent==null) nodStudent = nod1Student.retourneFirstNodeByNameContainsNodeByNameAndAttributValue("text:p","text:user-defined", "text:name", valueAttribut);
if(nod0Student!=null) if(nodStudent==null) nodStudent = nod0Student.retourneFirstNodeByNameContainsNodeByNameAndAttributValue("text:p","text:user-defined", "text:name", valueAttribut);
}
//si le node "text:p" contient un "text:conditional-text" alors le recherche par le "text:condition" de ce node "text:conditional-text"
if(nodSujet.containElementByName("text:conditional-text")) {
String valueAttribut = outils.withoutCodeAndPoint(nodSujet.retourneFirstEnfantsByName("text:conditional-text").getAttributs().get("text:condition"));
if(nod2Student!=null) if(nodStudent==null) nodStudent = nod2Student.retourneFirstNodeByNameContainsNodeByNameAndAttributValue("text:p","text:conditional-text", "text:condition", valueAttribut);
if(nod1Student!=null) if(nodStudent==null) nodStudent = nod1Student.retourneFirstNodeByNameContainsNodeByNameAndAttributValue("text:p","text:conditional-text", "text:condition", valueAttribut);
if(nod0Student!=null) if(nodStudent==null) nodStudent = nod0Student.retourneFirstNodeByNameContainsNodeByNameAndAttributValue("text:p","text:conditional-text", "text:condition", valueAttribut);
}
//si le node "text:p" contient un "text:database-display" alors le recherche par le "text:column-name" de ce node "text:database-display"
if(nodSujet.containElementByName("text:database-display")) {
String valueAttribut = outils.withoutCodeAndPoint(nodSujet.retourneFirstEnfantsByName("text:database-display").getAttributs().get("text:column-name"));
if(nod2Student!=null) if(nodStudent==null) nodStudent = nod2Student.retourneFirstNodeByNameContainsNodeByNameAndAttributValue("text:p","text:database-display", "text:column-name", valueAttribut);
if(nod1Student!=null) if(nodStudent==null) nodStudent = nod1Student.retourneFirstNodeByNameContainsNodeByNameAndAttributValue("text:p","text:database-display", "text:column-name", valueAttribut);
if(nod0Student!=null) if(nodStudent==null) nodStudent = nod0Student.retourneFirstNodeByNameContainsNodeByNameAndAttributValue("text:p","text:database-display", "text:column-name", valueAttribut);
}
//si le node "text:p" contient un "text:date" alors le recherche par le "text:fixed" de ce node "text:date"
if(nodSujet.containElementByName("text:date")) {
String valueAttribut = outils.withoutCodeAndPoint(nodSujet.retourneFirstEnfantsByName("text:date").getAttributs().get("text:fixed"));
if(nod2Student!=null) if(nodStudent==null) nodStudent = nod2Student.retourneFirstNodeByNameContainsNodeByNameAndAttributValue("text:p","text:date", "text:fixed", valueAttribut);
if(nod1Student!=null) if(nodStudent==null) nodStudent = nod1Student.retourneFirstNodeByNameContainsNodeByNameAndAttributValue("text:p","text:date", "text:fixed", valueAttribut);
if(nod0Student!=null) if(nodStudent==null) nodStudent = nod0Student.retourneFirstNodeByNameContainsNodeByNameAndAttributValue("text:p","text:date", "text:fixed", valueAttribut);
}
if(nodSujet.containElementByName("text:subject")) {
if(nod2Student!=null) if(nodStudent==null) nodStudent = nod2Student.retourneFirstEnfantsByNameNode1ContainNameNode2("text:p","text:subject");
if(nod1Student!=null) if(nodStudent==null) nodStudent = nod1Student.retourneFirstEnfantsByNameNode1ContainNameNode2("text:p","text:subject");
if(nod0Student!=null) if(nodStudent==null) nodStudent = nod0Student.retourneFirstEnfantsByNameNode1ContainNameNode2("text:p","text:subject");
}
if(nodSujet.containElementByName("text:title")) {
if(nod2Student!=null) if(nodStudent==null) nodStudent = nod2Student.retourneFirstEnfantsByNameNode1ContainNameNode2("text:p","text:title");
if(nod1Student!=null) if(nodStudent==null) nodStudent = nod1Student.retourneFirstEnfantsByNameNode1ContainNameNode2("text:p","text:title");
if(nod0Student!=null) if(nodStudent==null) nodStudent = nod0Student.retourneFirstEnfantsByNameNode1ContainNameNode2("text:p","text:title");
}
if(nodSujet.containElementByName("text:initial-creator")) {
if(nod2Student!=null) if(nodStudent==null) nodStudent = nod2Student.retourneFirstEnfantsByNameNode1ContainNameNode2("text:p","text:initial-creator");
if(nod1Student!=null) if(nodStudent==null) nodStudent = nod1Student.retourneFirstEnfantsByNameNode1ContainNameNode2("text:p","text:initial-creator");
if(nod0Student!=null) if(nodStudent==null) nodStudent = nod0Student.retourneFirstEnfantsByNameNode1ContainNameNode2("text:p","text:initial-creator");
}
if(nodStudent==null) {
if(nodSujet.retourneLesContenusEnfants("").isEmpty()) { //s'il n'y a pas de contenu, passe par l'index
if(nodSujet.getAttributs().get("index")!=null) {
if(nod2Student!=null) if(nodStudent==null) nodStudent = a.retourneFirstNodeByNameAttributValue(nod2Student, nameNode, "index", outils.withoutCodeAndPoint(nodSujet.getAttributs().get("index")));
if(nod1Student!=null) if(nodStudent==null) nodStudent = a.retourneFirstNodeByNameAttributValue(nod1Student, nameNode, "index", outils.withoutCodeAndPoint(nodSujet.getAttributs().get("index")));
if(nod0Student!=null) if(nodStudent==null) nodStudent = a.retourneFirstNodeByNameAttributValue(nod0Student, nameNode, "index", outils.withoutCodeAndPoint(nodSujet.getAttributs().get("index")));
}
}else {
if(nod2Student!=null) if(nodStudent==null) nodStudent = a.retourneFirstNodeByFindContent2(nod2Student.getNodes(), nodSujet.retourneLesContenusEnfants(""),commandes.tolerance_characters,commandes.tolerance_text);
if(nod1Student!=null) if(nodStudent==null) nodStudent = a.retourneFirstNodeByFindContent2(nod1Student.getNodes(), nodSujet.retourneLesContenusEnfants(""),commandes.tolerance_characters,commandes.tolerance_text);
if(nod0Student!=null) if(nodStudent==null) nodStudent = a.retourneFirstNodeByFindContent2(nod0Student.getNodes(), nodSujet.retourneLesContenusEnfants(""),commandes.tolerance_characters,commandes.tolerance_text);
}
}
}
if(nameNode.equals("text:title")) {
if(nod2Student!=null) nodStudent = nod2Student.retourneFirstEnfantsByName("text:title");
if(nod1Student!=null) if(nodStudent==null) nodStudent = nod1Student.retourneFirstEnfantsByName("text:title");
if(nod0Student!=null) if(nodStudent==null) nodStudent = nod0Student.retourneFirstEnfantsByName("text:title");
return nodStudent;
}
if(nameNode.equals("text:subject")) {
if(nod2Student!=null) nodStudent = nod2Student.retourneFirstEnfantsByName("text:subject");
if(nod1Student!=null) if(nodStudent==null) nodStudent = nod1Student.retourneFirstEnfantsByName("text:subject");
if(nod0Student!=null) if(nodStudent==null) nodStudent = nod0Student.retourneFirstEnfantsByName("text:subject");
}
if(nameNode.equals("text:initial-creator")) {
if(nod2Student!=null) nodStudent = nod2Student.retourneFirstEnfantsByName("text:initial-creator");
if(nod1Student!=null) if(nodStudent==null) nodStudent = nod1Student.retourneFirstEnfantsByName("text:initial-creator");
if(nod0Student!=null) if(nodStudent==null) nodStudent = nod0Student.retourneFirstEnfantsByName("text:initial-creator");
}
if(nameNode.equals("text:user-defined")) {
if(nod2Student!=null) nodStudent = a.retourneFirstNodeByNameAttributValue(nod2Student, nameNode, "text:name", outils.withoutCodeAndPoint(nodSujet.getAttributs().get("text:name")));
if(nod1Student!=null) if(nodStudent==null) nodStudent = a.retourneFirstNodeByNameAttributValue(nod1Student, nameNode, "text:name", outils.withoutCodeAndPoint(nodSujet.getAttributs().get("text:name")));
if(nod0Student!=null) if(nodStudent==null) nodStudent = a.retourneFirstNodeByNameAttributValue(nod0Student, nameNode, "text:name", outils.withoutCodeAndPoint(nodSujet.getAttributs().get("text:name")));
}
//recherche par le contenu enfant du node
if(nameNode.equals("text:h")) {
if(nod2Student!=null) nodStudent = a.retourneFirstNodeByFindContent2(nod2Student.getNodes(), nodSujet.retourneLesContenusEnfants(""),commandes.tolerance_characters,commandes.tolerance_text);
if(nod1Student!=null) if(nodStudent==null) nodStudent = a.retourneFirstNodeByFindContent2(nod1Student.getNodes(), nodSujet.retourneLesContenusEnfants(""),commandes.tolerance_characters,commandes.tolerance_text);
if(nod0Student!=null) if(nodStudent==null) nodStudent = a.retourneFirstNodeByFindContent2(nod0Student.getNodes(), nodSujet.retourneLesContenusEnfants(""),commandes.tolerance_characters,commandes.tolerance_text);
}
//recherche par text:name
if(nameNode.equals("text:section")) {
if(nodSujet.getAttributs().get("recherche_index")==null) {
if(nod2Student!=null) nodStudent = a.retourneFirstNodeByNameAttributValueNetTexte(nod2Student, nameNode, "text:name", outils.withoutCodeAndPoint(nodSujet.getAttributs().get("text:name")));
if(nod1Student!=null) if(nodStudent==null) nodStudent = a.retourneFirstNodeByNameAttributValueNetTexte(nod1Student, nameNode, "text:name", outils.withoutCodeAndPoint(nodSujet.getAttributs().get("text:name")));
if(nod0Student!=null) if(nodStudent==null) nodStudent = a.retourneFirstNodeByNameAttributValueNetTexte(nod0Student, nameNode, "text:name", outils.withoutCodeAndPoint(nodSujet.getAttributs().get("text:name")));
}else {
if(nodSujet.getAttributs().get("recherche_index").equals("false")) {
if(nod2Student!=null) nodStudent = a.retourneFirstNodeByNameAttributValueNetTexte(nod2Student, nameNode, "text:name", outils.withoutCodeAndPoint(nodSujet.getAttributs().get("text:name")));
if(nod1Student!=null) if(nodStudent==null) nodStudent = a.retourneFirstNodeByNameAttributValueNetTexte(nod1Student, nameNode, "text:name", outils.withoutCodeAndPoint(nodSujet.getAttributs().get("text:name")));
if(nod0Student!=null) if(nodStudent==null) nodStudent = a.retourneFirstNodeByNameAttributValueNetTexte(nod0Student, nameNode, "text:name", outils.withoutCodeAndPoint(nodSujet.getAttributs().get("text:name")));
}
if(nodSujet.getAttributs().get("recherche_index").equals("true")) {
if(nod2Student!=null) nodStudent = a.retourneFirstNodeByNameAttributValueNetTexte(nod2Student, nameNode, "index", nodSujet.getAttributs().get("index"));
if(nod1Student!=null) if(nodStudent==null) nodStudent = a.retourneFirstNodeByNameAttributValueNetTexte(nod1Student, nameNode, "index", nodSujet.getAttributs().get("index"));
if(nod0Student!=null) if(nodStudent==null) nodStudent = a.retourneFirstNodeByNameAttributValueNetTexte(nod0Student, nameNode, "index", nodSujet.getAttributs().get("index"));
}
}
}
//recherche par le nom de la colonne
if(nameNode.equals("text:database-display")) {
if(nod2Student!=null) nodStudent = a.retourneFirstNodeByNameAttributValue(nod2Student, nameNode, "text:column-name", outils.withoutCodeAndPoint(nodSujet.getAttributs().get("text:column-name")));
if(nod1Student!=null) if(nodStudent==null) nodStudent = a.retourneFirstNodeByNameAttributValue(nod1Student, nameNode, "text:column-name", outils.withoutCodeAndPoint(nodSujet.getAttributs().get("text:column-name")));
if(nod0Student!=null) if(nodStudent==null) nodStudent = a.retourneFirstNodeByNameAttributValue(nod0Student, nameNode, "text:column-name", outils.withoutCodeAndPoint(nodSujet.getAttributs().get("text:column-name")));
}
//recherche par le nom de l'objet draw:name ou par text:anchor-page-number si ancrer à la page
if(nameNode.equals("draw:frame")) {
if(nodSujet.getAttributs().get("recherche_anchor-page-number")==null) {
if(nod2Student!=null) nodStudent = a.retourneFirstNodeByNameAttributValue(nod2Student, nameNode, "draw:name", outils.withoutCodeAndPointPourRechercheContenuExact(nodSujet.getAttributs().get("draw:name")));
if(nod1Student!=null) if(nodStudent==null) nodStudent = a.retourneFirstNodeByNameAttributValue(nod1Student, nameNode, "draw:name", outils.withoutCodeAndPointPourRechercheContenuExact(nodSujet.getAttributs().get("draw:name")));
if(nod0Student!=null) if(nodStudent==null) nodStudent = a.retourneFirstNodeByNameAttributValue(nod0Student, nameNode, "draw:name", outils.withoutCodeAndPointPourRechercheContenuExact(nodSujet.getAttributs().get("draw:name")));
}else {
if(nodSujet.getAttributs().get("recherche_anchor-page-number").equals("false")) {
if(nod2Student!=null) nodStudent = a.retourneFirstNodeByNameAttributValue(nod2Student, nameNode, "draw:name", outils.withoutCodeAndPointPourRechercheContenuExact(nodSujet.getAttributs().get("draw:name")));
if(nod1Student!=null) if(nodStudent==null) nodStudent = a.retourneFirstNodeByNameAttributValue(nod1Student, nameNode, "draw:name", outils.withoutCodeAndPointPourRechercheContenuExact(nodSujet.getAttributs().get("draw:name")));
if(nod0Student!=null) if(nodStudent==null) nodStudent = a.retourneFirstNodeByNameAttributValue(nod0Student, nameNode, "draw:name", outils.withoutCodeAndPointPourRechercheContenuExact(nodSujet.getAttributs().get("draw:name")));
}
if(nodSujet.getAttributs().get("recherche_anchor-page-number").equals("true")) {
if(nod2Student!=null) nodStudent = a.retourneFirstNodeByNameAttributValue(nod2Student, nameNode, "text:anchor-page-number", outils.withoutCodeAndPointPourRechercheContenuExact(nodSujet.getAttributs().get("text:anchor-page-number")));
if(nod1Student!=null) if(nodStudent==null) nodStudent = a.retourneFirstNodeByNameAttributValue(nod1Student, nameNode, "text:anchor-page-number", outils.withoutCodeAndPointPourRechercheContenuExact(nodSujet.getAttributs().get("text:anchor-page-number")));
if(nod0Student!=null) if(nodStudent==null) nodStudent = a.retourneFirstNodeByNameAttributValue(nod0Student, nameNode, "text:anchor-page-number", outils.withoutCodeAndPointPourRechercheContenuExact(nodSujet.getAttributs().get("text:anchor-page-number")));
//si recherche l'ancrage de la page pas trouvé alors recherche par draw:name
if(nodStudent==null) {
if(nod2Student!=null) nodStudent = a.retourneFirstNodeByNameAttributValue(nod2Student, nameNode, "draw:name", outils.withoutCodeAndPointPourRechercheContenuExact(nodSujet.getAttributs().get("draw:name")));
if(nod1Student!=null) if(nodStudent==null) nodStudent = a.retourneFirstNodeByNameAttributValue(nod1Student, nameNode, "draw:name", outils.withoutCodeAndPointPourRechercheContenuExact(nodSujet.getAttributs().get("draw:name")));
if(nod0Student!=null) if(nodStudent==null) nodStudent = a.retourneFirstNodeByNameAttributValue(nod0Student, nameNode, "draw:name", outils.withoutCodeAndPointPourRechercheContenuExact(nodSujet.getAttributs().get("draw:name")));
}
}
}
}
//recherche par le nom de l'objet
if(nameNode.equals("style:graphic-properties")) {
if(nod2Student!=null) nodStudent = a.retourneFirstNodeByNameContent(nod2Student, nameNode, nodSujet.getContenu());
if(nod1Student!=null) if(nodStudent==null) nodStudent = a.retourneFirstNodeByNameContent(nod1Student, nameNode, nodSujet.getContenu());
if(nod0Student!=null) if(nodStudent==null) nodStudent = a.retourneFirstNodeByNameContent(nod0Student, nameNode, nodSujet.getContenu());
}
//recherche par l'index
if(nameNode.equals("table:table-row")) {
if(nod2Student!=null) nodStudent = a.retourneFirstNodeByNameAttributValue(nod2Student, nameNode, "index", nodSujet.getAttributs().get("index"));
if(nod1Student!=null) if(nodStudent==null) nodStudent = a.retourneFirstNodeByNameAttributValue(nod1Student, nameNode, "index", nodSujet.getAttributs().get("index"));
if(nod0Student!=null) if(nodStudent==null) nodStudent = a.retourneFirstNodeByNameAttributValue(nod0Student, nameNode, "index", nodSujet.getAttributs().get("index"));
}
//recherche par texte:name
if(nameNode.equals("text:table-of-content")) {
if(nod2Student!=null) nodStudent = a.retourneFirstNodeByNameAttributValue(nod2Student, nameNode, "text:name", outils.withoutCodeAndPoint(nodSujet.getAttributs().get("text:name")));
if(nod1Student!=null) if(nodStudent==null) nodStudent = a.retourneFirstNodeByNameAttributValue(nod1Student, nameNode, "text:name", outils.withoutCodeAndPoint(nodSujet.getAttributs().get("text:name")));
if(nod0Student!=null) if(nodStudent==null) nodStudent = a.retourneFirstNodeByNameAttributValue(nod0Student, nameNode, "text:name", outils.withoutCodeAndPoint(nodSujet.getAttributs().get("text:name")));
}
//recherche par contenu
if(nameNode.equals("text:span")) {
if(nod2Student!=null) if(nodStudent==null) nodStudent = a.retourneFirstNodeByFindContent2(nod2Student.getNodes(), nodSujet.retourneLesContenusEnfants(""),commandes.tolerance_characters,commandes.tolerance_text);
if(nod1Student!=null) if(nodStudent==null) nodStudent = a.retourneFirstNodeByFindContent2(nod1Student.getNodes(), nodSujet.retourneLesContenusEnfants(""),commandes.tolerance_characters,commandes.tolerance_text);
if(nod0Student!=null) if(nodStudent==null) nodStudent = a.retourneFirstNodeByFindContent2(nod0Student.getNodes(), nodSujet.retourneLesContenusEnfants(""),commandes.tolerance_characters,commandes.tolerance_text);
}
//recherche par contenu
if(nameNode.equals("text:tab")) {
if(!nodSujet.retourneLesContenusEnfants("").isEmpty()) {
if(nod2Student!=null) if(nodStudent==null) nodStudent = a.retourneFirstNodeByFindContent2(nod2Student.getNodes(), nodSujet.retourneLesContenusEnfants(""),commandes.tolerance_characters,commandes.tolerance_text);
if(nod1Student!=null) if(nodStudent==null) nodStudent = a.retourneFirstNodeByFindContent2(nod1Student.getNodes(), nodSujet.retourneLesContenusEnfants(""),commandes.tolerance_characters,commandes.tolerance_text);
if(nod0Student!=null) if(nodStudent==null) nodStudent = a.retourneFirstNodeByFindContent2(nod0Student.getNodes(), nodSujet.retourneLesContenusEnfants(""),commandes.tolerance_characters,commandes.tolerance_text);
}
}
// dernière tentative si le node est vide, recherche par le nom du node
if(nodStudent==null && !nameNode.equals("text:p")) {
if(nod2Student!=null) if(nod2Student.retourneEnfantsByNameExist(nameNode)) nodStudent = nod2Student.retourneFirstEnfantsByName(nameNode);
if(nod1Student!=null) if(nodStudent==null) if(nod1Student.retourneEnfantsByNameExist(nameNode)) nodStudent = nod1Student.retourneFirstEnfantsByName(nameNode);
if(nod0Student!=null) if(nodStudent==null) if(nod0Student.retourneEnfantsByNameExist(nameNode)) nodStudent = nod0Student.retourneFirstEnfantsByName(nameNode);
}
return nodStudent;
}
private static node analyseStyle(node page, node nodSujet, node nodStudent, node nodSujetParagraphs, node nodStudentParagraphs ) {
node StyleParagraphSujet = null;
node StyleParagraphStudent = null;
if(nodSujet.getAttributs().get("analyseStyle")!=null) {
if(nodSujet.getAttributs().get("analyseStyle").equals("true") && nodSujet.getAttributs().get("text:style-name")!=null) {
//paragrapheTexte=true;
String NameStyleParagrapheSujet = nodSujet.getAttributs().get("text:style-name");
StyleParagraphSujet = nodSujetParagraphs.retourneFirstNodeStyleByValueAttribut("style:style", "style:name", NameStyleParagrapheSujet);
}
if(nodStudent!=null && StyleParagraphSujet!=null) {
if(nodStudent.getAttributs().get("text:style-name")!=null && StyleParagraphSujet!=null) {
String NameStyleParagrapheStudent = nodStudent.getAttributs().get("text:style-name");
StyleParagraphStudent = nodStudentParagraphs.retourneFirstNodeStyleByValueAttribut("style:style", "style:name",NameStyleParagrapheStudent);
}
}
// ajoute les valeurs par héritage.
if(StyleParagraphSujet!=null) {
if(StyleParagraphStudent!=null) StyleParagraphStudent = ajouteValeurLesValeursDuStyleParagraphParent(nodStudentParagraphs , StyleParagraphStudent);
//ajoute les valeurs par défaut.
if(StyleParagraphStudent!=null) StyleParagraphStudent = ajouteValeurParDefautAuStyleParagraph(nodStudentParagraphs , StyleParagraphStudent);
// analyse attribut et contenu des enfants du premier niveau
page = analyseLesAttributAnalyseStyle(StyleParagraphStudent, StyleParagraphSujet, page, "ana:page","style:style");
}
}
return page;
}
/**
*
* @param retour : le node retour qui contient l'item ajouté
* @param nodStudent : le node Student qui peut être null
* @param nameNode : le nom du node
* @param point : les points
* @param nameElt : le nom de l'élément
* @return
*/
private static node analyseNameNode(node retour, node nodStudent, String nameNode, String point, String nameElt) {
node item = null;
if(nodStudent!=null) {
item = retourneNoteAvecResultatsAnalyse(nameNode,"name", nodStudent.getNomElt(),nameNode + "" +point, nameElt );
}else {
outils.IncrementPointTotal(Integer.valueOf(point));
item = new node(nameNode, "Erreur", "Nom du node" , "null", nameNode, 2, outils.getPointEnJeu(),nameElt);
}
retour.getNodes().add(item);
return retour;
}
}