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("

*** LES FICHIERS DES ETUDIANTS ANALYSÉS ET ÉVALUÉS ***


"); commandes.message.append("

Dossier contenant les fichiers des étudiants.

"); commandes.message.append("

" + commandes.path + "

"); commandes.message.append("
"); if(commandes.analyse_baremeABC) { commandes.message.append("

Barème alphabétique ABCDE.

"); commandes.message.append("

progression=" + String.valueOf(commandes.analyse_progression) + "

"); calculIntervalleBaremeABCDE C = new calculIntervalleBaremeABCDE(commandes.analyse_progression); commandes.message.append("

" + C.getMessageLigne() +"

"); commandes.message.append("
"); } if(commandes.zipfeedback) { commandes.message.append("

Les feedbacks sont dans une archive ou des archives ZIP dans le dossier contenant les fichiers des étudiants.

"); commandes.message.append("
"); } if(commandes.ecritNoteCSV) { commandes.message.append("

Un fichiers CSV contenant les notes a été créé dans le dossier contenant les fichiers des étudiants.

"); commandes.message.append("
"); } commandes.message.append("
"); 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("
"); commandes.message.append("

Nombre de fichier à analyser et évaluer : " + Integer.valueOf(nbFichierWriter) + "

"); commandes.message.append("
"); commandes.message.append("
"); //*************************************** //** -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("
"); commandes.message.append("

*** Ecriture du fichier Verif.xml dans le dossier d'analyse ***


"); commandes.message.append("
"); 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()); } }