analyseWriter/src/evaluer/evaluerLesFichiersEtudiants...

305 lines
12 KiB
Java

package evaluer;
import java.io.IOException;
import java.text.ParseException;
import javax.swing.JEditorPane;
import javax.xml.parsers.ParserConfigurationException;
import org.xml.sax.SAXException;
import MEPTL.VerificationHistorique;
import MEPTL.commandes;
import MEPTL.feedbacks;
import MEPTL.meptl;
import MEPTL.verificationFichierAnalyse_node_commandesSujet;
import cXML.Run;
import cXML.node;
import calcul.calculIntervalleBaremeABCDE;
import fenetres.baliseStyle;
import net.lingala.zip4j.exception.ZipException;
public class evaluerLesFichiersEtudiants implements Runnable{
private final JEditorPane txt;
public evaluerLesFichiersEtudiants(JEditorPane txt) {
commandes.analyse=true;
this.txt=txt;
this.txt.setContentType("text/plain");
}
@Override
public synchronized void run() {
commandes.message = new StringBuilder();
commandes.message.append(baliseStyle.balise());
commandes.message.append("<hr><h1>*** LES FICHIERS DES ETUDIANTS ANALYSÉS ET ÉVALUÉS ***</h1><hr>");
commandes.message.append("<p>Dossier contenant les fichiers des étudiants.</p>");
commandes.message.append("<p><b>" + commandes.path + "</b></p>");
commandes.message.append("<br>");
if(commandes.analyse_baremeABC) {
commandes.message.append("<p>Barème alphabétique ABCDE.<p>");
commandes.message.append("<p>progression=" + String.valueOf(commandes.analyse_progression) + "<p>");
calculIntervalleBaremeABCDE C = new calculIntervalleBaremeABCDE(commandes.analyse_progression);
commandes.message.append("<p>" + C.getMessageLigne() +"</p>");
commandes.message.append("<br>");
}
if(commandes.zipfeedback) {
commandes.message.append("<p>Les feedbacks sont dans une archive ou des archives ZIP dans le dossier contenant les fichiers des étudiants.</p>");
commandes.message.append("<br>");
}
if(commandes.ecritNoteCSV) {
commandes.message.append("<p>Un fichiers CSV contenant les notes a été créé dans le dossier contenant les fichiers des étudiants.</p>");
commandes.message.append("<br>");
}
commandes.message.append("<hr>");
Run a = null;
try {
a = new Run(commandes.path,commandes.Profil, commandes.fichierStudentMoodle);
} catch (ParserConfigurationException e2) {
e2.printStackTrace();
} catch (SAXException e2) {
e2.printStackTrace();
} catch (IOException e2) {
e2.printStackTrace();
}
//*****************************************
//** Nombre de fichier writer à analyser **
//*****************************************
int nbFichierWriter = a.getLectDossiers().getEC().getListeContentWriter().size();
String NbFichiers = String.valueOf(nbFichierWriter);
commandes.analyse_Nbre_Fichier_Student = nbFichierWriter;
commandes.message.append("<br>");
commandes.message.append("<p>Nombre de fichier à analyser et évaluer : " + NbFichiers + "</p>");
commandes.message.append("<br>");
commandes.message.append("<hr>");
//***************************************
//** -verif ou -use file.xml -verifcsv **
//***************************************
node verif = new node();
if(commandes.verifHisto || commandes.verifHisto2) {
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++) {
txt.setText("\nChargement de l'historique du fichier n° " + String.valueOf(i) +" par comparaison avec les "+ String.valueOf(nbFichierWriter-1) + " autres fichiers");
node nod = Run.XMLContent(a.getLectDossiers().getEC().getListeContentWriter().get(i));
node nodStudent = meptl.LectureFichierEtudiantPourVerification(nod,a,i);
verification.getNodes().add(nodStudent);
}
//a.ecritureNodeEnXML(verification, "VerificationHistorique","",false); //écriture du node de l'étudiant
txt.setText("\nRecherche des concordances temporelles et d'auteur dans l'historique des modifications des " + nbFichierWriter + " fichiers."
+ "\nPatientez, cela peut prendre quelques secondes ou minutes.");
//********************************
//** Ecriture du node verif.xml **
//********************************
try {
verif = VerificationHistorique.verificationHistorique(verification, a,txt);
Run.ecritureNodeEnXML(verif, "Verif",commandes.path, Run.TypeFile.Verif );
} catch (IOException | ParseException | CloneNotSupportedException e) {
e.printStackTrace();
} //écriture du node de vérification
commandes.message.append("<br>");
commandes.message.append("<hr><h1> *** Ecriture du fichier Verif.xml dans le dossier d'analyse *** </h1><hr>");
commandes.message.append("<br>");
if(!commandes.analyse) {
//** bye bye analyseWriter
commandes.clotureApplication();
}
}
//*********************************************************
//** Node contenant l'ensemble des analyses des étudiants **
//*********************************************************
node ensembleanalyse = new node();
ensembleanalyse.setNomElt("analyses");
//*****************************************************
//** Parcours l'ensemble des fichiers des étudiants ***
//*****************************************************
for(int i = 0 ; i < nbFichierWriter ; i++) {
String texteAfficher = "\nEvaluation du fichier n° " + String.valueOf(i+1) + "/" + String.valueOf(nbFichierWriter) + " fichier(s)";
txt.setText(texteAfficher);
//index de l'étudiant
commandes.analyse_index_Fichier_Student = 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;
//***********************************************************
//** Lecture et transformation en node du fichier étudiant **
//***********************************************************
node nod = Run.XMLContent(a.getLectDossiers().getEC().getListeContentWriter().get(i));
node nodStudent=null;
try {
//Création du node de l'étudiant.
//Permet aussi d'avoir l'historique des modifications du fichier de l'étudiant.
nodStudent = meptl.LectureFichierEtudiantSousFormeDeNode(nod,a,i);
//Supprime l'historique des modifications
nodStudent.supprimeTousLesNodesEnfantWithThisName("text:tracked-changes");
nodStudent.supprimeTousLesNodesEnfantWithThisName("text:change");
nodStudent.supprimeTousLesNodesEnfantWithThisName("text:change-start");
nodStudent.supprimeTousLesNodesEnfantWithThisName("text:change-end");
nodStudent.supprimeTousLesNodesEnfantWithThisName("text:deletion");
nodStudent.supprimeTousLesNodesEnfantWithThisName("text:bookmark-start");
nodStudent.supprimeTousLesNodesEnfantWithThisName("text:bookmark-end");
} catch (IOException e1) {
e1.printStackTrace();
}
//Ecriture du node fichier de l'étudiant
// try {
// Run.ecritureNodeEnXML(nodStudent, a.getLectDossiers().getEC().getListeNomDossier().get(i),commandes.path,"Sujet");
// } catch (IOException e1) {
// // TODO Auto-generated catch block
// e1.printStackTrace();
// }
//**********************************
//** Analyse des fichiers student **
//**********************************
if(commandes.analyse||commandes.ecritNodeAnalyse) {
// Run.ecritureNodeEnXML(nodStudent, "fichier student","",false,""); //écriture du node nodStudent de l'étudiant
node ana = analyseFichier.analyse(nodStudent, commandes.sujet, i, a, txt,texteAfficher);
// try {
// Run.ecritureNodeEnXML(ana, "analyse", commandes.path, Run.TypeFile.Verif);
// } catch (IOException e1) {
// // TODO Auto-generated catch block
// e1.printStackTrace();
// }
//**************************************************
//** Ecriture des fichiers d'analyse des students **
//**************************************************
if(commandes.ecritNodeAnalyse) {
try {
Run.ecritureNodeEnXML(ana, "nodana"+ana.retourneFirstEnfantsByName("ouverture").getAttributs().get("dossier"),commandes.path,Run.TypeFile.Analyse);
} catch (IOException e) {
e.printStackTrace();
}
}
//****************************
//** Création des feedbacks **
//****************************
if(!commandes.sansFeeback&&!commandes.ecritNodeAnalyse) {
if(!commandes.zipfeedback) {
//feedback(ana, verif); //classique directement dans le répertoire
try {
feedbacks.feedback(ana,verif, false,false);
} catch (IOException e) {
e.printStackTrace();
} catch (ParseException e) {
e.printStackTrace();
}
}
if(commandes.zipfeedback) { // Dans une archive pour Moodle
try {
// a.AddStreamToZip(feedbacks.feedback(ana, verif, true,false), meptl.retourneLeNomDuFeedback(a.getLectDossiers().getEC().getListeNomFichierFeedBack().get(i),ana, verif),commandes.analyse_size,commandes.analyse_nameZip);
// Modification imposé par Moodle 4
if(commandes.fichierStudentMoodle) {
a.AddStreamToZip(feedbacks.feedback(ana, verif, true,false), meptl.retourneLeNomDuFeedbackMoodle4(a.getLectDossiers().getEC().getListeFichierodt().get(i),ana, verif),commandes.analyse_size,commandes.analyse_nameZip);
}else {
String nomFichiermoodle4 = a.getLectDossiers().getEC().getListeNomFichierFeedBack().get(i)+"_"+a.getLectDossiers().getEC().getListeFichierodt().get(i);
a.AddStreamToZip(feedbacks.feedback(ana, verif, true,false), meptl.retourneLeNomDuFeedbackMoodle4(nomFichiermoodle4,ana, verif),commandes.analyse_size,commandes.analyse_nameZip);
}
} catch (ZipException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (ParseException e) {
e.printStackTrace();
}
}
}
//********************************************************************************
//** Ajoute au node ensembleanalyse lorsque -csv file.csv ou -verifcsv file.scv **
//********************************************************************************
if(commandes.ecritNoteCSV) ensembleanalyse.addNode(ana);
//*********************************************************
//** Message dans la console sur l'analyse de l'étudiant **
//*********************************************************
commandes.message.append(meptl.messageSystem(ana).toString());
}
}
//*****************************************************
//** Exportation au format CSV si -csv ou -verifcsv **
//*****************************************************
if(commandes.ecritNoteCSV && !commandes.fourniCSV) {
if(!commandes.verifHisto2)
try {
meptl.ecritureCSV(ensembleanalyse);
} catch (IOException e) {
e.printStackTrace();
}
if(commandes.verifHisto2)
try {
meptl.ecritureCSV(ensembleanalyse,verif,a,commandes.sujet.retourneFirstEnfantsByName("setting"));
} catch (IOException e) {
e.printStackTrace();
}
}
//***********************************************************************
//** Exportation au format CSV si -csv file.csv ou -verifcsv file.csv **
//***********************************************************************
if(commandes.ecritNoteCSV && commandes.fourniCSV) {
try {
meptl.ecritureCSV(ensembleanalyse,verif,a,commandes.nodeCSV, commandes.sujet.retourneFirstEnfantsByName("setting"));
} catch (IOException e) {
e.printStackTrace();
}
//a.ecritureNodeEnXML(ensembleanalyse, "ensembleAnalyse"); //écriture du node de l'étudiant
}
//**************************************
//** Mise à jour du fichier d'analyse **
//**************************************
if(commandes.MAJFichierAnalyse||commandes.MAJnameAnalysisFile) {
try {
verificationFichierAnalyse_node_commandesSujet.MiseAJourFichierAnalyse();
} catch (CloneNotSupportedException | IOException e) {
e.printStackTrace();
}
verificationFichierAnalyse_node_commandesSujet.messagMiseAJourFichierAnalyseAprèsAnalyse();
}
txt.setContentType("text/html");
txt.setText(commandes.message.toString());
}
}