2023-02-14 21:32:36 +01:00
package evaluer ;
2022-06-03 21:30:14 +02:00
import java.io.IOException ;
2023-02-11 09:43:12 +01:00
import java.text.ParseException ;
2022-06-03 21:30:14 +02:00
import javax.swing.JEditorPane ;
import javax.xml.parsers.ParserConfigurationException ;
import org.xml.sax.SAXException ;
2023-02-11 09:43:12 +01:00
import MEPTL.VerificationHistorique ;
2022-06-03 21:30:14 +02:00
import MEPTL.commandes ;
import MEPTL.feedbacks ;
import MEPTL.meptl ;
import MEPTL.verificationFichierAnalyse ;
import cXML.Run ;
import cXML.node ;
2022-06-11 12:10:28 +02:00
import calcul.calculIntervalleBaremeABCDE ;
2023-02-14 21:32:36 +01:00
import fenetres.baliseStyle ;
2022-06-03 21:30:14 +02:00
import net.lingala.zip4j.exception.ZipException ;
public class evaluerLesFichiersEtudiants implements Runnable {
private final JEditorPane txt ;
2022-06-09 17:49:22 +02:00
public evaluerLesFichiersEtudiants ( JEditorPane txt ) {
2022-06-03 21:30:14 +02:00
commandes . analyse = true ;
this . txt = txt ;
2022-06-09 09:13:46 +02:00
this . txt . setContentType ( " text/plain " ) ;
2022-06-03 21:30:14 +02:00
}
@Override
public synchronized void run ( ) {
commandes . message = new StringBuilder ( ) ;
2022-06-11 12:10:28 +02:00
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> " ) ;
2022-06-03 21:30:14 +02:00
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 ) {
2023-03-03 18:54:53 +01:00
node A = meptl . chargementFichierCSV ( ) ;
if ( A ! = null ) commandes . nodeCSV = A ;
2022-06-03 21:30:14 +02:00
}
//*****************************************
//** Nombre de fichier writer à analyser **
//*****************************************
int nbFichierWriter = a . getLectDossiers ( ) . getEC ( ) . getListeContentWriter ( ) . size ( ) ;
2022-12-14 17:24:36 +01:00
String NbFichiers = String . valueOf ( nbFichierWriter ) ;
2022-06-03 21:30:14 +02:00
commandes . analyse_Nbre_Fichier_Student = nbFichierWriter ;
2022-06-11 12:10:28 +02:00
commandes . message . append ( " <br> " ) ;
2022-12-14 17:24:36 +01:00
commandes . message . append ( " <p>Nombre de fichier à analyser et évaluer : " + NbFichiers + " </p> " ) ;
2022-06-11 16:53:59 +02:00
commandes . message . append ( " <br> " ) ;
commandes . message . append ( " <hr> " ) ;
2022-06-03 21:30:14 +02:00
//***************************************
//** -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 + + ) {
2022-06-04 15:43:08 +02:00
txt . setText ( " \ nChargement de l'historique du fichier n° " + String . valueOf ( i ) + " par comparaison avec les " + String . valueOf ( nbFichierWriter - 1 ) + " autres fichiers " ) ;
2022-06-03 21:30:14 +02:00
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
2022-06-04 15:43:08 +02:00
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. " ) ;
2023-02-11 09:43:12 +01:00
2022-06-03 21:30:14 +02:00
//********************************
//** Ecriture du node verif.xml **
//********************************
try {
2023-02-11 09:43:12 +01:00
verif = VerificationHistorique . verificationHistorique ( verification , a ) ;
2022-12-23 19:24:59 +01:00
Run . ecritureNodeEnXML ( verif , " Verif " , commandes . path , Run . TypeFile . Verif ) ;
2023-02-12 17:12:11 +01:00
} catch ( IOException | ParseException | CloneNotSupportedException e ) {
2022-06-03 21:30:14 +02:00
e . printStackTrace ( ) ;
} //écriture du node de vérification
2022-06-11 12:10:28 +02:00
commandes . message . append ( " <br> " ) ;
2022-06-11 16:53:59 +02:00
commandes . message . append ( " <hr><h1> *** Ecriture du fichier Verif.xml dans le dossier d'analyse *** </h1><hr> " ) ;
2022-06-11 12:10:28 +02:00
commandes . message . append ( " <br> " ) ;
2022-06-03 21:30:14 +02:00
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 + + ) {
2022-12-14 17:24:36 +01:00
String texteAfficher = " \ nEvaluation du fichier n° " + String . valueOf ( i + 1 ) + " / " + String . valueOf ( nbFichierWriter ) + " fichier(s) " ;
txt . setText ( texteAfficher ) ;
2022-06-03 21:30:14 +02:00
//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 {
2023-02-03 14:26:11 +01:00
2022-12-16 17:50:51 +01:00
2023-02-05 16:09:48 +01:00
//Création du node de l'étudiant.
//Permet aussi d'avoir l'historique des modifications du fichier de l'étudiant.
2022-06-03 21:30:14 +02:00
nodStudent = meptl . LectureFichierEtudiantSousFormeDeNode ( nod , a , i ) ;
2023-02-03 14:26:11 +01:00
//Supprime l'historique des modifications
nodStudent . supprimeTousLesNodesEnfantWithThisName ( " text:tracked-changes " ) ;
2023-02-22 19:55:37 +01:00
nodStudent . supprimeTousLesNodesEnfantWithThisName ( " text:change " ) ;
2023-02-03 14:26:11 +01:00
nodStudent . supprimeTousLesNodesEnfantWithThisName ( " text:change-start " ) ;
nodStudent . supprimeTousLesNodesEnfantWithThisName ( " text:change-end " ) ;
nodStudent . supprimeTousLesNodesEnfantWithThisName ( " text:deletion " ) ;
2023-02-22 19:55:37 +01:00
nodStudent . supprimeTousLesNodesEnfantWithThisName ( " text:bookmark-start " ) ;
nodStudent . supprimeTousLesNodesEnfantWithThisName ( " text:bookmark-end " ) ;
2023-02-03 14:26:11 +01:00
2022-06-03 21:30:14 +02:00
} catch ( IOException e1 ) {
e1 . printStackTrace ( ) ;
}
2022-11-15 09:00:37 +01:00
//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();
// }
2022-06-03 21:30:14 +02:00
//**********************************
//** Analyse des fichiers student **
//**********************************
if ( commandes . analyse | | commandes . ecritNodeAnalyse ) {
// Run.ecritureNodeEnXML(nodStudent, "fichier student","",false,""); //écriture du node nodStudent de l'étudiant
2022-12-14 17:24:36 +01:00
node ana = analyseFichier . analyse ( nodStudent , commandes . sujet , i , a , txt , texteAfficher ) ;
2022-12-10 20:40:00 +01:00
// try {
2023-04-01 09:54:28 +02:00
// Run.ecritureNodeEnXML(ana, "analyse", commandes.path, Run.TypeFile.Verif);
2022-12-10 20:40:00 +01:00
// } catch (IOException e1) {
// // TODO Auto-generated catch block
// e1.printStackTrace();
// }
2022-06-03 21:30:14 +02:00
//**************************************************
//** Ecriture des fichiers d'analyse des students **
//**************************************************
if ( commandes . ecritNodeAnalyse ) {
try {
2022-12-23 19:24:59 +01:00
Run . ecritureNodeEnXML ( ana , " nodana " + ana . retourneFirstEnfantsByName ( " ouverture " ) . getAttributs ( ) . get ( " dossier " ) , commandes . path , Run . TypeFile . Analyse ) ;
2022-06-03 21:30:14 +02:00
} 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 {
2022-06-09 17:49:22 +02:00
feedbacks . feedback ( ana , verif , false , false ) ;
2022-06-03 21:30:14 +02:00
} catch ( IOException e ) {
e . printStackTrace ( ) ;
2023-02-11 09:43:12 +01:00
} catch ( ParseException e ) {
e . printStackTrace ( ) ;
2022-06-03 21:30:14 +02:00
}
}
if ( commandes . zipfeedback ) { // Dans une archive pour Moodle
try {
2022-06-09 17:49:22 +02:00
a . AddStreamToZip ( feedbacks . feedback ( ana , verif , true , false ) , meptl . retourneLeNomDuFeedback ( a . getLectDossiers ( ) . getEC ( ) . getListeNomFichierFeedBack ( ) . get ( i ) , ana , verif ) , commandes . analyse_size , commandes . analyse_nameZip ) ;
2022-06-03 21:30:14 +02:00
} catch ( ZipException e ) {
e . printStackTrace ( ) ;
} catch ( IOException e ) {
e . printStackTrace ( ) ;
2023-02-11 09:43:12 +01:00
} catch ( ParseException e ) {
e . printStackTrace ( ) ;
2022-06-03 21:30:14 +02:00
}
}
}
//********************************************************************************
//** 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 ( ) ;
}
2022-06-11 12:10:28 +02:00
txt . setContentType ( " text/html " ) ;
txt . setText ( commandes . message . toString ( ) ) ;
2022-06-03 21:30:14 +02:00
}
2022-06-09 17:49:22 +02:00
2022-06-03 21:30:14 +02:00
}