analyseWriter/src/fenetres/evaluerLesFichiersEtudiants...

280 lines
11 KiB
Java

package fenetres;
import java.io.IOException;
import javax.swing.JEditorPane;
import javax.xml.parsers.ParserConfigurationException;
import org.xml.sax.SAXException;
import MEPTL.commandes;
import MEPTL.feedbacks;
import MEPTL.meptl;
import MEPTL.verificationFichierAnalyse;
import cXML.Run;
import cXML.node;
import calcul.calculIntervalleBaremeABCDE;
import evaluer.analyseFichier;
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();
}
//**********************************************
//** Chargement et verification du CVS fourni **
//**********************************************
if(commandes.fourniCSV) {
commandes.nodeCSV = meptl.chargementFichierCSV();
}
//*****************************************
//** Nombre de fichier writer à analyser **
//*****************************************
int nbFichierWriter = a.getLectDossiers().getEC().getListeContentWriter().size();
commandes.analyse_Nbre_Fichier_Student = nbFichierWriter;
commandes.message.append("<br>");
commandes.message.append("<p>Nombre de fichier à analyser et évaluer : " + Integer.valueOf(nbFichierWriter) + "</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.");
verif = meptl.verificationHistorique(verification, a); // vérification des correspondances entre les fichiers
//********************************
//** Ecriture du node verif.xml **
//********************************
try {
Run.ecritureNodeEnXML(verif, "Verif",commandes.path, "Verif");
} catch (IOException 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++) {
txt.setText("\nEvaluation du fichier n° " + String.valueOf(i+1) +"/"+ String.valueOf(nbFichierWriter) + " fichier(s)");
//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 {
//Supprime l'historique des modifications
nod.supprimeTousLesNodesEnfantWithThisName("text:tracked-changes");
//Création du node de l'étudiant
nodStudent = meptl.LectureFichierEtudiantSousFormeDeNode(nod,a,i);
} 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);
// try {
// Run.ecritureNodeEnXML(ana, "analyse", commandes.path, "");
// } 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,"");
} 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();
}
}
if(commandes.zipfeedback) { // Dans une archive pour Moodle
try {
System.out.println("feedback zippé.");
a.AddStreamToZip(feedbacks.feedback(ana, verif, true,false), meptl.retourneLeNomDuFeedback(a.getLectDossiers().getEC().getListeNomFichierFeedBack().get(i),ana, verif),commandes.analyse_size,commandes.analyse_nameZip);
} catch (ZipException e) {
e.printStackTrace();
} catch (IOException 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.MiseAJourFichierAnalyse();
} catch (CloneNotSupportedException | IOException e) {
e.printStackTrace();
}
verificationFichierAnalyse.messagMiseAJourFichierAnalyseAprèsAnalyse();
}
txt.setContentType("text/html");
txt.setText(commandes.message.toString());
}
}