2022-04-25 13:25:20 +02:00
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 ;
2022-05-04 09:16:50 +02:00
//import java.text.DateFormat;
2022-04-25 13:25:20 +02:00
import java.text.DecimalFormat ;
import java.text.ParseException ;
import java.text.SimpleDateFormat ;
2022-05-04 09:16:50 +02:00
//import java.time.LocalDateTime;
//import java.time.format.DateTimeFormatter;
//import java.time.format.FormatStyle;
2022-04-25 13:25:20 +02:00
import java.util.ArrayList ;
import java.util.Date ;
import java.util.Dictionary ;
import java.util.Enumeration ;
import java.util.Hashtable ;
2022-05-04 09:16:50 +02:00
//import java.util.regex.Matcher;
2022-04-25 13:25:20 +02:00
import java.util.regex.Pattern ;
import javax.xml.parsers.ParserConfigurationException ;
import org.xml.sax.SAXException ;
2022-05-03 16:02:02 +02:00
import cXML.node ;
2022-04-25 13:25:20 +02:00
import cXML.Run ;
import cXML.Run.UserStatus ;
import net.lingala.zip4j.exception.ZipException ;
/ * *
*
2022-04-25 13:44:14 +02:00
* @author pablo rodriguez
2022-04-25 13:25:20 +02:00
*
*
* /
public class meptl {
static DecimalFormat df = new DecimalFormat ( " ###.## " ) ;
2022-05-04 09:16:50 +02:00
//static String patch ="";
2022-04-25 13:25:20 +02:00
static double progression = 1 . 0 ;
/ * *
* Démarrage de l ' application . < br >
* < br >
2022-04-25 13:44:14 +02:00
* @param args : les commandes de l ' application .
2022-04-25 13:25:20 +02:00
* @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 " ) ;
2022-05-04 09:16:50 +02:00
commandes . path = System . getProperty ( " user.dir " ) ;
2022-04-25 13:25:20 +02:00
// patch = "C:/Users/pabr6/OneDrive/Desktop/Nouveau dossier";
2022-05-08 21:10:27 +02:00
//*******************
//** les commandes **
//*******************
2022-05-04 09:16:50 +02:00
new commandes ( args , commandes . path ) ;
2022-04-25 13:25:20 +02:00
2022-04-25 14:54:45 +02:00
//** Nouveau node qui permet de convertir le fichier contenant la liste des étudiants en node.
node nodeCSV = null ;
2022-05-08 21:10:27 +02:00
//**********************************
//** Initialisation des variables **
//**********************************
2022-05-03 16:02:02 +02:00
Run a = null ;
Run . path = commandes . path ;
int nbFichierWriter = 0 ;
if ( ! commandes . calculLeHashDuFichier & & ! commandes . ecritSujet ) {
//*****************************************************
//** Lancement des lectures des dossiers ou fichiers **
//*****************************************************
2022-05-04 09:16:50 +02:00
a = new Run ( commandes . path , commandes . Profil , commandes . fichierStudentMoodle ) ;
2022-05-03 16:02:02 +02:00
//*****************************************
//** Nombre de fichier writer à analyser **
//*****************************************
nbFichierWriter = a . getLectDossiers ( ) . getEC ( ) . getListeContentWriter ( ) . size ( ) ;
}
//************
//** -sujet **
//************
if ( commandes . ecritSujet ) {
verificationFichierAnalyse . ecrisLeFichierSujetXML ( ) ;
}
//****************************************************************************
//** Calcul le hash du fichier d'analyse et met à jour le fichier d'analyse **
//****************************************************************************
if ( commandes . calculLeHashDuFichier ) {
2022-05-04 09:16:50 +02:00
verificationFichierAnalyse . MiseAJourFichierAnalyse ( ) ;
2022-05-03 16:02:02 +02:00
}
2022-04-25 13:25:20 +02:00
2022-05-03 16:02:02 +02:00
//*****************
//** -writefiles **
//*****************
if ( commandes . writefiles ) {
for ( int i = 0 ; i < nbFichierWriter ; i + + ) {
//** Chargement du format (content) et transformation en node pour l'application
node nod = Run . XMLContent ( a . getLectDossiers ( ) . getEC ( ) . getListeContentWriter ( ) . get ( i ) ) ;
node nodStudent = LectureFichierEtudiantSousFormeDeNode ( nod , a , i ) ;
Run . ecritureNodeEnXML ( nodStudent , a . getLectDossiers ( ) . getEC ( ) . getListeNomDossier ( ) . get ( i ) , " " , false , " " ) ; //écriture du node de l'étudiant
}
//** bye bye analyseWriter
commandes . clotureApplication ( ) ;
}
//********************************************************
//** Ecriture d'une fichier d'analyse : commande -write **
//********************************************************
if ( commandes . ecritCode ) {
for ( int index = 0 ; index < nbFichierWriter ; index + + ) {
node nodSujet = Run . XMLContent ( a . getLectDossiers ( ) . getEC ( ) . getListeContentWriter ( ) . get ( index ) ) ;
nodSujet = LectureFichierEtudiantSousFormeDeNode ( nodSujet , a , index ) ;
nodSujet . getAttributs ( ) . put ( " analysis_filename " , a . getLectDossiers ( ) . getEC ( ) . getListeNomDossier ( ) . get ( index ) + " .xml " ) ;
nodSujet = ecritureSujet . nodePourEcritureSujet ( nodSujet , a , index ) ;
Run . ecritureNodeEnXML ( nodSujet , a . getLectDossiers ( ) . getEC ( ) . getListeNomDossier ( ) . get ( index ) , " " , false , " Sujet " ) ;
}
//** bye bye analyseWriter
commandes . clotureApplication ( ) ;
}
2022-05-25 10:43:11 +02:00
//*********************************************************************************************
//** PREPARATION du node Sujet pour les commandes (-use file.xml) ou (-use file.xml -sujet) **
//*********************************************************************************************
2022-05-09 21:22:50 +02:00
if ( commandes . analyse | | commandes . ecritNodeAnalyse ) {
2022-05-24 18:25:41 +02:00
commandes . sujet = chargementFichierAnalyse ( commandes . nameSujet , true ) ;
2022-05-03 16:02:02 +02:00
2022-05-24 18:25:41 +02:00
if ( commandes . sujet = = null ) {
2022-05-07 20:43:07 +02:00
//***************************
//** bye bye analyseWriter **
//***************************
commandes . clotureApplicationAvecErreur ( ) ;
}
2022-04-25 14:54:45 +02:00
2022-05-24 18:25:41 +02:00
//******************************************************************************************************
//** La méthode verification Fichier Analyse permet de détecter des erreurs dans le fichier d'analyse **
//** Permet aussi de verifier la mise à jour du hash ou du nom du fichier d'analyse **
//******************************************************************************************************
new verificationFichierAnalyse ( ) ;
2022-04-25 14:54:45 +02:00
2022-04-25 13:25:20 +02:00
if ( verificationFichierAnalyse . erreur = = true ) verificationFichierAnalyse . clotureWithErrorInanalyzeFile ( ) ;
//a.ecritureNodeEnXML(nodeSujet, "sujet","",false); // ecriture du node sujet
2022-04-25 14:54:45 +02:00
2022-05-24 18:25:41 +02:00
//****************************************************
//** Chargement des paramètres du fichier d'analyse **
//****************************************************
chargementParametresFichierAnalyse ( ) ;
//************************************************
2022-05-03 16:02:02 +02:00
//** Nouvelle ecriture du fichier si MAJ fichier**
2022-05-24 18:25:41 +02:00
//************************************************
2022-05-03 16:02:02 +02:00
if ( commandes . MAJFichierAnalyse | | commandes . MAJnameAnalysisFile ) {
2022-05-24 18:25:41 +02:00
commandes . sujet . getAttributs ( ) . put ( " hash " , commandes . hash ) ;
commandes . sujet . getAttributs ( ) . put ( " analysis_filename " , commandes . nameSujet ) ;
2022-04-25 13:25:20 +02:00
}
try {
2022-04-25 14:54:45 +02:00
2022-05-03 16:02:02 +02:00
//***********************
//** -newlogo file.svg **
//***********************
2022-04-25 14:54:45 +02:00
if ( commandes . newLogo & & ! commandes . nameSVG . isEmpty ( ) ) {
commandes . contenuFichierSVG = chargementFichierSVG ( a , commandes . nameSVG ) ;
}
2022-05-03 16:02:02 +02:00
//**********************************************
//** Chargement et verification du CVS fourni **
//**********************************************
2022-04-25 14:54:45 +02:00
if ( commandes . fourniCSV ) {
2022-05-25 21:22:38 +02:00
nodeCSV = chargementFichierCSV ( ) ;
2022-04-25 14:54:45 +02:00
}
2022-04-25 13:25:20 +02:00
} catch ( Exception e ) {
System . out . println ( e ) ;
}
}
2022-05-03 16:02:02 +02:00
//***************************************
//** -verif ou -use file.xml -verifcsv **
//***************************************
2022-04-25 13:25:20 +02:00
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-05-03 16:02:02 +02:00
node nod = Run . XMLContent ( a . getLectDossiers ( ) . getEC ( ) . getListeContentWriter ( ) . get ( i ) ) ;
2022-04-25 13:25:20 +02:00
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
2022-05-03 16:02:02 +02:00
//********************************
//** Ecriture du node verif.xml **
//********************************
Run . ecritureNodeEnXML ( verif , " Verif " , commandes . pathDestination , commandes . fourniDossierDestination , " Verif " ) ; //écriture du node de vérification
if ( ! commandes . analyse ) {
//** bye bye analyseWriter
commandes . clotureApplication ( ) ;
}
2022-04-25 13:25:20 +02:00
}
System . getProperty ( " file.encoding " , " UTF-8 " ) ;
2022-05-03 16:02:02 +02:00
//*********************************************************
//** Node contenant l'ensemble des analyses des étudiants **
//*********************************************************
2022-04-25 13:25:20 +02:00
node ensembleanalyse = new node ( ) ;
ensembleanalyse . setNomElt ( " analyses " ) ;
2022-05-03 16:02:02 +02:00
2022-04-25 13:25:20 +02:00
2022-05-03 16:02:02 +02:00
//*****************************************************
//** Parcours l'ensemble des fichiers des étudiants ***
//*****************************************************
2022-04-25 13:25:20 +02:00
for ( int i = 0 ; i < nbFichierWriter ; i + + ) {
2022-04-25 13:44:14 +02:00
//** 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.
2022-04-25 13:25:20 +02:00
if ( commandes . fourniDossierDestination ) if ( a . getLectDossiers ( ) . getEC ( ) . getListeNomDossier ( ) . get ( i ) . equals ( commandes . pathDestination ) ) continue ;
2022-05-03 16:02:02 +02:00
//***********************************************************
//** Lecture et transformation en node du fichier étudiant **
//***********************************************************
node nod = Run . XMLContent ( a . getLectDossiers ( ) . getEC ( ) . getListeContentWriter ( ) . get ( i ) ) ;
2022-04-25 13:25:20 +02:00
node nodStudent = LectureFichierEtudiantSousFormeDeNode ( nod , a , i ) ;
2022-05-03 16:02:02 +02:00
//a.ecritureNodeEnXML(nodStudent, a.getLectDossiers().getEC().getListeNomDossier().get(i),"",false,""); //écriture du node de l'étudiant
2022-04-25 13:25:20 +02:00
2022-05-03 16:02:02 +02:00
//**********************************
//** Analyse des fichiers student **
//**********************************
2022-05-09 21:22:50 +02:00
if ( commandes . analyse | | commandes . ecritNodeAnalyse ) {
2022-05-24 18:25:41 +02:00
2022-05-25 10:43:11 +02:00
if ( ! verificationFichierAnalyse . erreur ) {
2022-05-10 21:02:22 +02:00
// Run.ecritureNodeEnXML(nodStudent, "fichier student","",false,""); //écriture du node nodStudent de l'étudiant
2022-05-24 18:25:41 +02:00
node ana = analyse ( nodStudent , commandes . sujet , i , a ) ;
2022-05-09 21:22:50 +02:00
//**************************************************
//** Ecriture des fichiers d'analyse des students **
//**************************************************
if ( commandes . ecritNodeAnalyse ) {
Run . ecritureNodeEnXML ( ana , " nodana " + ana . retourneFirstEnfantsByName ( " ouverture " ) . getAttributs ( ) . get ( " dossier " ) , " " , false , " " ) ; //écriture du node analyse de l'étudiant
}
2022-04-25 13:25:20 +02:00
2022-05-03 16:02:02 +02:00
//****************************
//** Création des feedbacks **
//****************************
2022-05-09 21:22:50 +02:00
if ( ! commandes . sansFeeback & & ! commandes . ecritNodeAnalyse ) {
2022-05-03 16:02:02 +02:00
if ( ! commandes . zipfeedback ) {
2022-05-04 09:16:50 +02:00
//feedback(ana, verif); //classique directement dans le répertoire
feedbacks . feedback ( ana , verif , false ) ;
2022-05-03 16:02:02 +02:00
}
if ( commandes . zipfeedback ) { // Dans une archive pour Moodle
try {
2022-05-25 10:43:11 +02:00
// long size = 48000000; //valeur par défaut
// String nameZip = "feedbackMoodle"; //nom zip par défaut
// node zip = commandes.sujet.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");
// }
2022-05-04 09:16:50 +02:00
//a.AddStreamToZip(feedbackForZip(ana, verif), retourneLeNomDuFeedback(a.getLectDossiers().getEC().getListeNomFichierFeedBack().get(i),ana, verif),size,nameZip);
2022-05-25 10:43:11 +02:00
a . AddStreamToZip ( feedbacks . feedback ( ana , verif , true ) , retourneLeNomDuFeedback ( a . getLectDossiers ( ) . getEC ( ) . getListeNomFichierFeedBack ( ) . get ( i ) , ana , verif ) , commandes . analyse_size , commandes . analyse_nameZip ) ;
2022-05-03 16:02:02 +02:00
} catch ( ZipException e ) {
e . printStackTrace ( ) ;
} catch ( IOException e ) {
e . printStackTrace ( ) ;
2022-04-25 13:25:20 +02:00
}
}
}
2022-05-03 16:02:02 +02:00
//********************************************************************************
//** Ajoute au node ensembleanalyse lorsque -csv file.csv ou -verifcsv file.scv **
//********************************************************************************
2022-04-25 13:25:20 +02:00
if ( commandes . ecritNoteCSV ) ensembleanalyse . addNode ( ana ) ;
2022-05-03 16:02:02 +02:00
//*********************************************************
//** Message dans la console sur l'analyse de l'étudiant **
//*********************************************************
2022-04-25 13:25:20 +02:00
messageSystem ( ana ) ;
} else {
}
}
}
2022-05-03 16:02:02 +02:00
2022-05-24 18:25:41 +02:00
if ( commandes . sujet ! = null ) {
2022-05-07 20:43:07 +02:00
//*****************************************************
//** Exportation au format CSV si -csv ou -verifcsv **
//*****************************************************
if ( commandes . ecritNoteCSV & & ! commandes . fourniCSV ) {
if ( ! commandes . verifHisto2 ) ecritureCSV ( ensembleanalyse ) ;
2022-05-24 18:25:41 +02:00
if ( commandes . verifHisto2 ) ecritureCSV ( ensembleanalyse , verif , a , commandes . sujet . retourneFirstEnfantsByName ( " setting " ) ) ;
2022-05-07 20:43:07 +02:00
//a.ecritureNodeEnXML(ensembleanalyse, "ensembleAnalyse"); //écriture du node de l'étudiant
}
//***********************************************************************
//** Exportation au format CSV si -csv file.csv ou -verifcsv file.csv **
//***********************************************************************
if ( commandes . ecritNoteCSV & & commandes . fourniCSV ) {
2022-05-24 18:25:41 +02:00
ecritureCSV ( ensembleanalyse , verif , a , nodeCSV , commandes . sujet . retourneFirstEnfantsByName ( " setting " ) ) ;
2022-05-07 20:43:07 +02:00
//a.ecritureNodeEnXML(ensembleanalyse, "ensembleAnalyse"); //écriture du node de l'étudiant
}
//**************************************
//** Mise à jour du fichier d'analyse **
//**************************************
if ( commandes . MAJFichierAnalyse | | commandes . MAJnameAnalysisFile ) {
verificationFichierAnalyse . MiseAJourFichierAnalyse ( ) ;
verificationFichierAnalyse . messagMiseAJourFichierAnalyseAprèsAnalyse ( ) ;
}
2022-05-03 16:02:02 +02:00
}
2022-04-25 14:54:45 +02:00
2022-05-03 16:02:02 +02:00
//***************************
//** bye bye analyseWriter **
//***************************
2022-04-25 13:25:20 +02:00
commandes . clotureApplication ( ) ;
}
/ * *
2022-05-24 18:25:41 +02:00
* Lecture du fichier Student pour vérification des historiques . < br >
2022-04-25 13:25:20 +02:00
* < br >
* @param nod node
* @param a
* @param i
* @return
* /
2022-05-24 18:25:41 +02:00
public static node LectureFichierEtudiantPourVerification ( node nod , Run a , Integer i ) {
2022-04-25 13:25:20 +02:00
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 " ) ;
2022-05-03 16:02:02 +02:00
fichier . getAttributs ( ) . put ( " producteur " , nodmeta . retourneFirstEnfantsByName ( " meta:generator " ) . getContenu ( ) . get ( 0 ) ) ;
fichier . getAttributs ( ) . put ( " dateModification " , nodmeta . retourneFirstEnfantsByName ( " dc:date " ) . getContenu ( ) . get ( 0 ) ) ;
fichier . getAttributs ( ) . put ( " dureeEdition " , nodmeta . retourneFirstEnfantsByName ( " meta:editing-duration " ) . getContenu ( ) . get ( 0 ) ) ;
2022-04-25 13:25:20 +02:00
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 ;
}
2022-05-10 21:02:22 +02:00
/ * *
* Retourne le node menu qui est réalisé à partir de l ' attibut " <b>addmenu=true</b> " . < br >
* L ' attribut " <b>addmenu=true</b> " se trouve uniquement dans les node de niveu 1 ( les nodes principaux ) . < br >
*
* @param nod Le node dans lequel on recherche les node
* @param menu Le node menu .
* @param niv Le niveau du node .
* @param Compteur Le compteur permet d ' incrémenter les niveaux des nodes .
* @return Le node menu est retourner avec des nodes " <b>item</b> " ajoutés .
* /
private static node retourneNodeMenu ( node nod , node menu , Integer niv , Integer Compteur ) {
if ( nod = = null ) return null ;
if ( nod . getAttributs ( ) . get ( " addmenu " ) ! = null ) {
boolean erreur = false ;
if ( nod . getAttributs ( ) . get ( " addmenu " ) . equals ( " true " ) ) {
node newnode = new node ( ) ;
newnode . setNomElt ( " item " ) ;
String titre = " " ;
if ( nod . getAttributs ( ) . get ( " titre " ) ! = null ) {
titre = nod . getAttributs ( ) . get ( " titre " ) ;
newnode . getAttributs ( ) . put ( " titre " , titre ) ;
}
if ( nod . getAttributs ( ) . get ( " titre1 " ) ! = null ) {
titre = nod . getAttributs ( ) . get ( " titre1 " ) ;
newnode . getAttributs ( ) . put ( " titre " , titre ) ;
}
if ( nod . getAttributs ( ) . get ( " titre2 " ) ! = null ) {
titre = nod . getAttributs ( ) . get ( " titre2 " ) ;
newnode . getAttributs ( ) . put ( " titre " , titre ) ;
}
if ( nod . getAttributs ( ) . get ( " titre3 " ) ! = null ) {
titre = nod . getAttributs ( ) . get ( " titre3 " ) ;
newnode . getAttributs ( ) . put ( " titre " , titre ) ;
}
newnode . getAttributs ( ) . put ( " niveau " , String . valueOf ( niv ) ) ;
newnode . getAttributs ( ) . put ( " name " , nod . getNomElt ( ) ) ;
newnode . getAttributs ( ) . put ( " id " , " #M " + titre . replace ( " " , " " ) ) ;
menu . getNodes ( ) . add ( newnode ) ;
}
if ( nod . getAttributs ( ) . get ( " addmenu " ) . equals ( " false " ) & & niv = = 1 ) {
System . out . println ( ) ;
System . out . println ( " ** WARNING -- L'attribut \" addmenu \" n'est pas associé au node principal \" " + nod . getNomElt ( ) + " \" dans le fichier d'analyse. " ) ;
System . out . println ( " ** -- Changer la valeur de l'attribut \" addmenu \" à TRUE. " ) ;
System . out . println ( ) ;
erreur = true ;
}
if ( nod . getAttributs ( ) . get ( " addmenu " ) . equals ( " true " ) & & nod . getAttributs ( ) . get ( " titre " ) = = null & & nod . getAttributs ( ) . get ( " titre1 " ) = = null & & nod . getAttributs ( ) . get ( " titre2 " ) = = null & & nod . getAttributs ( ) . get ( " titre3 " ) = = null ) {
System . out . println ( ) ;
System . out . println ( " ** WARNING -- L'attribut \" addmenu \" n'est pas associé à un titre dans le node \" " + nod . getNomElt ( ) + " \" , dans le fichier d'analyse. " ) ;
if ( nod . getAttributs ( ) . get ( " titre " ) = = null & & nod . getAttributs ( ) . get ( " titre1 " ) = = null & & nod . getAttributs ( ) . get ( " titre2 " ) = = null & & nod . getAttributs ( ) . get ( " titre3 " ) = = null ) {
System . out . println ( " ** -- Ajouter l'attribut \" titre \" à ce node. " ) ;
}
if ( nod . getAttributs ( ) . get ( " titre " ) . isEmpty ( ) ) {
System . out . println ( " ** -- Ajouter l'attribut \" titre \" une valeur. " ) ;
}
if ( nod . getAttributs ( ) . get ( " titre1 " ) . isEmpty ( ) ) {
System . out . println ( " ** -- Ajouter l'attribut \" titre1 \" une valeur. " ) ;
}
if ( nod . getAttributs ( ) . get ( " titre2 " ) . isEmpty ( ) ) {
System . out . println ( " ** -- Ajouter l'attribut \" titre2 \" une valeur. " ) ;
}
if ( nod . getAttributs ( ) . get ( " titre3 " ) . isEmpty ( ) ) {
System . out . println ( " ** -- Ajouter l'attribut \" titre2 \" une valeur. " ) ;
}
System . out . println ( ) ;
erreur = true ;
}
//***************************
//** bye bye analyseWriter **
//***************************
if ( erreur ) commandes . clotureApplicationAvecErreur ( ) ;
}
for ( int i = 0 ; i < nod . getNodes ( ) . size ( ) ; i + + ) {
menu = retourneNodeMenu ( nod . getNodes ( ) . get ( i ) , menu , niv + 1 , Compteur + + ) ;
}
return menu ;
}
2022-04-25 13:25:20 +02:00
/ * *
* 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 .
* /
2022-05-24 18:25:41 +02:00
public static node LectureFichierEtudiantSousFormeDeNode ( node nod , Run a , Integer i ) throws IOException {
2022-04-25 13:25:20 +02:00
node nodecontent = nod . retourneFirstEnfantsByName ( " office:document-content " ) ;
node nodestyle = nod . retourneFirstEnfantsByName ( " office:document-styles " ) ;
2022-05-03 16:02:02 +02:00
node nodbody = nod . retourneFirstEnfantsByName ( " office:text " ) ; //a.NodeFirstName(nodecontent, "office:text");
//
2022-04-25 13:25:20 +02:00
node nodmeta = nod . retourneFirstEnfantsByName ( " office:meta " ) ;
2022-04-26 10:30:22 +02:00
// ajoute les créateurs ou éditeur dans les nodes dc:creator ou meta:initial-creator
// Pour permettre l'analyse avec les attributs evalNameCreator ou evalNameInitialCreator
if ( ! commandes . ecritCode ) {
if ( nodmeta . retourneEnfantsByNameExist ( " dc:creator " ) ) {
if ( a . getLectDossiers ( ) . getEC ( ) . getListeNomDossier ( ) . get ( i ) ! = null ) {
nodmeta . retourneFirstEnfantsByName ( " dc:creator " ) . getAttributs ( ) . put ( " creator " , a . getLectDossiers ( ) . getEC ( ) . getListeNomDossier ( ) . get ( i ) ) ;
} else {
nodmeta . retourneFirstEnfantsByName ( " dc:creator " ) . getAttributs ( ) . put ( " creator " , " null " ) ;
}
}
if ( nodmeta . retourneEnfantsByNameExist ( " meta:initial-creator " ) ) {
if ( a . getLectDossiers ( ) . getEC ( ) . getListeNomDossier ( ) . get ( i ) ! = null ) {
nodmeta . retourneFirstEnfantsByName ( " meta:initial-creator " ) . getAttributs ( ) . put ( " initial-creator " , a . getLectDossiers ( ) . getEC ( ) . getListeNomDossier ( ) . get ( i ) ) ;
} else {
nodmeta . retourneFirstEnfantsByName ( " meta:initial-creator " ) . getAttributs ( ) . put ( " initial-creator " , " null " ) ;
}
}
}
2022-04-25 13:25:20 +02:00
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 " ) ) ;
2022-05-10 21:02:22 +02:00
nodstyleparagraphe = ajouteValeurLesValeursDuStyleParagraphParent ( nodstyleparagraphe ) ;
nodstyleparagraphe = ajouteValeurParDefautAuStyleParagraph ( nodstyleparagraphe ) ;
2022-04-25 13:25:20 +02:00
2022-05-03 16:02:02 +02:00
// // 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
2022-04-25 13:25:20 +02:00
//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 " ) ;
2022-04-29 19:17:58 +02:00
nodsection . addNode ( a . retourneNames ( nodbody , " text:section " ) ) ;
// le node table:table
node nodtableaux = new node ( ) ;
nodtableaux . setNomElt ( " tableaux " ) ;
nodtableaux . addNode ( a . retourneNames ( nodbody , " table:table " ) ) ;
2022-04-25 13:25:20 +02:00
// 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 + + ) {
2022-05-03 16:02:02 +02:00
String titreIndex = A . get ( j ) . retourneFirstEnfantsByName ( " text:index-title-template " ) . getContenu ( ) . get ( 0 ) . toLowerCase ( ) ;
2022-04-25 13:25:20 +02:00
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 + + ) {
2022-05-03 16:02:02 +02:00
String titreIndex = A . get ( j ) . retourneFirstEnfantsByName ( " text:index-title-template " ) . getContenu ( ) . get ( 0 ) ;
2022-04-25 13:25:20 +02:00
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 " ) ) ;
2022-05-03 16:02:02 +02:00
// Création du node structure à partir du node nodbody
2022-04-25 13:25:20 +02:00
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
2022-05-03 16:02:02 +02:00
page . getNodes ( ) . add ( nodstructure . getNodes ( ) . get ( j ) ) ;
2022-04-25 13:25:20 +02:00
}
// 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 ) ) ;
}
2022-05-04 21:12:45 +02:00
if ( ! nodmeta . retourneFirstEnfantsByName ( " meta:generator " ) . getContenu ( ) . isEmpty ( ) ) {
fichier . getAttributs ( ) . put ( " producteur " , nodmeta . retourneFirstEnfantsByName ( " meta:generator " ) . getContenu ( ) . get ( 0 ) ) ;
}
if ( ! nodmeta . retourneFirstEnfantsByName ( " meta:editing-duration " ) . getContenu ( ) . isEmpty ( ) ) {
fichier . getAttributs ( ) . put ( " dureeEdition " , nodmeta . retourneFirstEnfantsByName ( " meta:editing-duration " ) . getContenu ( ) . get ( 0 ) ) ;
}
if ( ! nodmeta . retourneFirstEnfantsByName ( " dc:date " ) . getContenu ( ) . isEmpty ( ) ) {
fichier . getAttributs ( ) . put ( " dateModification " , nodmeta . retourneFirstEnfantsByName ( " dc:date " ) . getContenu ( ) . get ( 0 ) ) ;
}
2022-04-25 13:25:20 +02:00
fichier . getNodes ( ) . add ( nodmeta ) ;
2022-05-04 21:12:45 +02:00
nodstylepage = a . numeroteNameNode ( nodstylepage , " 0 " ) ; //ajoute les numéros d'index et des attributs
2022-04-25 13:25:20 +02:00
fichier . getNodes ( ) . add ( nodstylepage ) ;
fichier . getNodes ( ) . add ( nodstyleparagraphe ) ;
2022-05-03 16:02:02 +02:00
// fichier.getNodes().add(nodstyleformatage);
2022-04-25 13:25:20 +02:00
fichier . getNodes ( ) . add ( nodsequence ) ;
fichier . getNodes ( ) . add ( nodnumerochapitre ) ;
fichier . getNodes ( ) . add ( nodframe ) ;
fichier . getNodes ( ) . add ( nodsection ) ;
2022-04-29 19:17:58 +02:00
fichier . getNodes ( ) . add ( nodtableaux ) ;
2022-05-04 21:12:45 +02:00
//nodbiblio = a.numeroteNameNode(nodbiblio, "0"); //ajoute les numéros d'index et des attributs
2022-04-25 13:25:20 +02:00
fichier . getNodes ( ) . add ( nodbiblio ) ;
2022-05-04 21:12:45 +02:00
//nodtable = a.numeroteNameNode(nodtable, "0"); //ajoute les numéros d'index et des attributs
2022-04-25 13:25:20 +02:00
fichier . getNodes ( ) . add ( nodtable ) ;
2022-05-04 21:12:45 +02:00
//nodillustrations = a.numeroteNameNode(nodillustrations, "0"); //ajoute les numéros d'index et des attributs
2022-04-25 13:25:20 +02:00
fichier . getNodes ( ) . add ( nodillustrations ) ;
2022-05-04 21:12:45 +02:00
structurePage = a . numeroteNameNode ( structurePage , " " ) ; //ajoute les numéros d'index et des attributs
2022-04-25 13:25:20 +02:00
fichier . getNodes ( ) . add ( structurePage ) ;
fichier . getNodes ( ) . add ( nodhistorique ) ;
2022-05-03 16:02:02 +02:00
2022-04-25 13:25:20 +02:00
return fichier ;
}
/ * *
* 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
* /
2022-05-24 18:25:41 +02:00
public static node chargementFichierAnalyse ( String nameSujet , Boolean sansNodeEvaluer ) throws CloneNotSupportedException , IOException {
2022-04-25 13:25:20 +02:00
String targetString = " " ;
//read file into stream, try-with-resources
try {
BufferedReader br = new BufferedReader (
new InputStreamReader (
2022-05-03 16:02:02 +02:00
new FileInputStream ( Run . path + " / " + nameSujet ) , " UTF-8 " ) ) ;
2022-04-25 13:25:20 +02:00
String line ;
while ( ( line = br . readLine ( ) ) ! = null ) {
targetString = targetString + line ;
}
br . close ( ) ;
} catch ( Exception e ) {
System . out . println ( ) ;
2022-05-03 16:02:02 +02:00
System . out . println ( " ** Le fichier \" " + nameSujet + " \" n'est pas dans le dossier courant. " ) ;
2022-05-04 09:16:50 +02:00
System . out . println ( " ** Le dossier courant de l'application est : " + commandes . path ) ;
2022-04-25 13:25:20 +02:00
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 ( " \" > " ) ;
2022-05-03 16:02:02 +02:00
LeNodeSujet = Run . XMLContent ( targetString ) ;
}
if ( sansNodeEvaluer ) {
LeNodeSujet = Run . NodesAyantAttributEvaluerTRUEavecComplement ( LeNodeSujet ) ;
2022-04-25 13:25:20 +02:00
}
return LeNodeSujet ;
}
2022-05-24 18:25:41 +02:00
/ * *
* Chargement des paramètres du fichier d ' analyse
* /
public static void chargementParametresFichierAnalyse ( ) {
try {
//** Chargement du titre de l'exercice
if ( commandes . sujet . getAttributs ( ) . get ( " titre " ) ! = null ) {
commandes . analyse_titre = commandes . sujet . getAttributs ( ) . get ( " titre " ) ;
}
// Chargement de la progression
if ( commandes . sujet . getAttributs ( ) . get ( " progression " ) ! = null ) {
commandes . analyse_progression = Double . valueOf ( commandes . sujet . getAttributs ( ) . get ( " progression " ) ) ;
}
// Chargement de la notefrom
if ( commandes . sujet . getAttributs ( ) . get ( " notefrom " ) ! = null ) {
commandes . analyse_notefrom = Double . valueOf ( commandes . sujet . getAttributs ( ) . get ( " notefrom " ) ) ;
}
// Chargement de la date de creation
if ( commandes . sujet . getAttributs ( ) . get ( " creationDate " ) ! = null ) {
commandes . analyse_creationDate = commandes . sujet . getAttributs ( ) . get ( " creationDate " ) ;
}
// Chargement de la version
if ( commandes . sujet . getAttributs ( ) . get ( " version " ) ! = null ) {
commandes . analyse_version = commandes . sujet . getAttributs ( ) . get ( " version " ) ;
}
// Chargement du link_sujet
if ( commandes . sujet . getAttributs ( ) . get ( " link_sujet " ) ! = null ) {
commandes . analyse_link_sujet = commandes . sujet . getAttributs ( ) . get ( " link_sujet " ) ;
}
// Chargement du link_help
if ( commandes . sujet . getAttributs ( ) . get ( " link_help " ) ! = null ) {
commandes . analyse_link_help = commandes . sujet . getAttributs ( ) . get ( " link_help " ) ;
}
// Chargement du controleDateCreation
if ( commandes . sujet . getAttributs ( ) . get ( " controleDateCreation " ) ! = null ) {
commandes . analyse_controleDateCreation = Boolean . valueOf ( commandes . sujet . getAttributs ( ) . get ( " controleDateCreation " ) ) ;
}
// Chargement du presenceMetaSujet
if ( commandes . sujet . getAttributs ( ) . get ( " presenceMetaSujet " ) ! = null ) {
commandes . analyse_presenceMetaSujet = Boolean . valueOf ( commandes . sujet . getAttributs ( ) . get ( " presenceMetaSujet " ) ) ;
}
// Chargement du historiquePresent
if ( commandes . sujet . getAttributs ( ) . get ( " historiquePresent " ) ! = null ) {
commandes . analyse_historiquePresent = Boolean . valueOf ( commandes . sujet . getAttributs ( ) . get ( " historiquePresent " ) ) ;
}
// Chargement du baremeABC
if ( commandes . sujet . getAttributs ( ) . get ( " baremeABC " ) ! = null ) {
commandes . analyse_baremeABC = Boolean . valueOf ( commandes . sujet . getAttributs ( ) . get ( " baremeABC " ) ) ;
}
// Chargement du controle_Initial_Creator
if ( commandes . sujet . getAttributs ( ) . get ( " controle_Initial_Creator " ) ! = null ) {
commandes . analyse_controle_Initial_Creator = Boolean . valueOf ( commandes . sujet . getAttributs ( ) . get ( " controle_Initial_Creator " ) ) ;
}
// Chargement du metaSujet
if ( commandes . sujet . getAttributs ( ) . get ( " metaSujet " ) ! = null ) {
commandes . analyse_metaSujet = commandes . sujet . getAttributs ( ) . get ( " metaSujet " ) ;
}
// Chargement du auteur
if ( commandes . sujet . getAttributs ( ) . get ( " auteur " ) ! = null ) {
commandes . analyse_auteur = commandes . sujet . getAttributs ( ) . get ( " auteur " ) ;
}
// Chargement du Initial_Creator
if ( commandes . sujet . getAttributs ( ) . get ( " Initial_Creator " ) ! = null ) {
commandes . analyse_auteur = commandes . sujet . getAttributs ( ) . get ( " Initial_Creator " ) ;
}
// Chargement du filename
if ( commandes . sujet . getAttributs ( ) . get ( " filename " ) ! = null ) {
commandes . analyse_auteur = commandes . sujet . getAttributs ( ) . get ( " filename " ) ;
}
// Chargement du date
if ( commandes . sujet . getAttributs ( ) . get ( " date " ) ! = null ) {
commandes . analyse_date = commandes . sujet . getAttributs ( ) . get ( " date " ) ;
}
2022-05-25 18:21:23 +02:00
//Charge le hash
if ( commandes . sujet . getAttributs ( ) . get ( " hash " ) ! = null ) {
commandes . analyse_hash = commandes . sujet . getAttributs ( ) . get ( " hash " ) ;
}
2022-05-24 18:25:41 +02:00
//*****************************************************************
//** chargement de la culture qui se trouve dans le node setting **
//*****************************************************************
if ( commandes . sujet . retourneFirstEnfantsByName ( " setting " ) . isHasAttributs ( ) ) {
if ( commandes . sujet . retourneFirstEnfantsByName ( " setting " ) . getAttributs ( ) . get ( " culture " ) ! = null ) {
commandes . culture = commandes . sujet . retourneFirstEnfantsByName ( " setting " ) . getAttributs ( ) . get ( " culture " ) ; //récupère la culture de l'utilisateur
}
}
2022-05-25 10:43:11 +02:00
//********************************************
//** Charge pour la taille de l'archive ZIP **
//********************************************
if ( commandes . sujet . containElementByName ( " zip " ) ) {
node zip = commandes . sujet . retourneFirstEnfantsByName ( " zip " ) ;
if ( zip . getAttributs ( ) . get ( " size " ) ! = null ) commandes . analyse_size = Long . valueOf ( zip . getAttributs ( ) . get ( " size " ) ) ;
if ( zip . getAttributs ( ) . get ( " size " ) ! = null ) commandes . analyse_size = Long . valueOf ( zip . getAttributs ( ) . get ( " size " ) ) ;
}
//************************************
//** Charge du nom de l'archive ZIP **
//************************************
if ( commandes . sujet . containElementByName ( " zip " ) ) {
node zip = commandes . sujet . retourneFirstEnfantsByName ( " zip " ) ;
if ( zip . getAttributs ( ) . get ( " nameZip " ) ! = null ) commandes . analyse_nameZip = zip . getAttributs ( ) . get ( " nameZip " ) ;
if ( zip . getAttributs ( ) . get ( " nameZip " ) ! = null ) commandes . analyse_nameZip = zip . getAttributs ( ) . get ( " nameZip " ) ;
}
2022-05-24 18:25:41 +02:00
//***********************************************************************
//** chargement du node translation qui se trouve dans le node setting **
//***********************************************************************
outils . chargeTraduction ( commandes . sujet . retourneFirstEnfantsByName ( " translation " ) ) ;
//************************************************
//** Charge les nouvelles tolérances pour texte **
//************************************************
if ( commandes . sujet . containElementByName ( " text:similarity " ) ) {
node similarity = commandes . sujet . 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 " ) ) ;
}
//***********************************************************
//** Charge le nombre de match limite et le nombre minimal **
//***********************************************************
if ( commandes . sujet . containElementByName ( " plagiarism " ) ) {
node plagiarism = commandes . sujet . 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 " ) ) ;
}
//**************************************
//** Charge tolerance pour la couleur **
//**************************************
if ( commandes . sujet . containElementByName ( " color " ) ) {
node color = commandes . sujet . retourneFirstEnfantsByName ( " color " ) ;
if ( color . getAttributs ( ) . get ( " tolerance_rouge " ) ! = null ) commandes . tolerance_rouge = Integer . valueOf ( color . getAttributs ( ) . get ( " tolerance_rouge " ) ) ;
if ( color . getAttributs ( ) . get ( " tolerance_vert " ) ! = null ) commandes . tolerance_vert = Integer . valueOf ( color . getAttributs ( ) . get ( " tolerance_vert " ) ) ;
if ( color . getAttributs ( ) . get ( " tolerance_bleu " ) ! = null ) commandes . tolerance_bleu = Integer . valueOf ( color . getAttributs ( ) . get ( " tolerance_bleu " ) ) ;
}
} catch ( Exception e ) {
System . out . println ( e ) ;
}
//** Adéquation par les valeurs par défaut si pas dans le fichier d'analyse
commandes . analyse_culture = commandes . culture ;
commandes . analyse_tolerance_characters = commandes . tolerance_characters ;
commandes . analyse_tolerance_text = commandes . tolerance_text ;
}
2022-04-25 13:25:20 +02:00
2022-05-25 18:21:23 +02:00
/ * *
* Parcour l ' ensemble des fichiers des étudiants , verification , analyse , création des feedbacks et CSV .
* @throws IOException
* @throws ParserConfigurationException
* @throws SAXException
* @throws CloneNotSupportedException
* /
public static void analyseVerifieHistoriqueLesFichiersEtudiantsEtExportNoteCSV ( ) throws IOException , ParserConfigurationException , SAXException , CloneNotSupportedException {
commandes . message = new StringBuilder ( ) ;
commandes . message . append ( " LES FICHIERS EVALUES " ) ;
commandes . message . append ( " \ n " ) ;
Run a = new Run ( commandes . path , commandes . Profil , commandes . fichierStudentMoodle ) ;
//**********************************************
//** Chargement et verification du CVS fourni **
//**********************************************
node nodeCSV = null ;
if ( commandes . fourniCSV ) {
2022-05-25 21:22:38 +02:00
nodeCSV = chargementFichierCSV ( ) ;
2022-05-25 18:21:23 +02:00
}
//*****************************************
//** Nombre de fichier writer à analyser **
//*****************************************
int nbFichierWriter = a . getLectDossiers ( ) . getEC ( ) . getListeContentWriter ( ) . size ( ) ;
commandes . analyse_Nbre_Fichier_Student = nbFichierWriter ;
//***************************************
//** -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 + + ) {
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
verif = meptl . verificationHistorique ( verification , a ) ; // vérification des correspondances entre les fichiers
//********************************
//** Ecriture du node verif.xml **
//********************************
Run . ecritureNodeEnXML ( verif , " Verif " , commandes . pathDestination , commandes . fourniDossierDestination , " Verif " ) ; //écriture du node de vérification
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 + + ) {
//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 = meptl . LectureFichierEtudiantSousFormeDeNode ( nod , a , i ) ;
//a.ecritureNodeEnXML(nodStudent, a.getLectDossiers().getEC().getListeNomDossier().get(i),"",false,""); //écriture du node de l'étudiant
//**********************************
//** Analyse des fichiers student **
//**********************************
if ( commandes . analyse | | commandes . ecritNodeAnalyse ) {
// Run.ecritureNodeEnXML(nodStudent, "fichier student","",false,""); //écriture du node nodStudent de l'étudiant
node ana = meptl . analyse ( nodStudent , commandes . sujet , i , a ) ;
//**************************************************
//** Ecriture des fichiers d'analyse des students **
//**************************************************
if ( commandes . ecritNodeAnalyse ) {
Run . ecritureNodeEnXML ( ana , " nodana " + ana . retourneFirstEnfantsByName ( " ouverture " ) . getAttributs ( ) . get ( " dossier " ) , " " , false , " " ) ; //écriture du node analyse de l'étudiant
}
//****************************
//** Création des feedbacks **
//****************************
if ( ! commandes . sansFeeback & & ! commandes . ecritNodeAnalyse ) {
if ( ! commandes . zipfeedback ) {
//feedback(ana, verif); //classique directement dans le répertoire
feedbacks . feedback ( ana , verif , false ) ;
}
if ( commandes . zipfeedback ) { // Dans une archive pour Moodle
try {
a . AddStreamToZip ( feedbacks . feedback ( ana , verif , true ) , 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 ) ecritureCSV ( ensembleanalyse ) ;
if ( commandes . verifHisto2 ) ecritureCSV ( ensembleanalyse , verif , a , commandes . sujet . retourneFirstEnfantsByName ( " setting " ) ) ;
//a.ecritureNodeEnXML(ensembleanalyse, "ensembleAnalyse"); //écriture du node de l'étudiant
}
//***********************************************************************
//** Exportation au format CSV si -csv file.csv ou -verifcsv file.csv **
//***********************************************************************
if ( commandes . ecritNoteCSV & & commandes . fourniCSV ) {
ecritureCSV ( ensembleanalyse , verif , a , nodeCSV , commandes . sujet . retourneFirstEnfantsByName ( " setting " ) ) ;
//a.ecritureNodeEnXML(ensembleanalyse, "ensembleAnalyse"); //écriture du node de l'étudiant
}
//**************************************
//** Mise à jour du fichier d'analyse **
//**************************************
if ( commandes . MAJFichierAnalyse | | commandes . MAJnameAnalysisFile ) {
verificationFichierAnalyse . MiseAJourFichierAnalyse ( ) ;
verificationFichierAnalyse . messagMiseAJourFichierAnalyseAprèsAnalyse ( ) ;
}
}
2022-04-25 13:25:20 +02:00
/ * *
* 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 .
* /
2022-05-24 18:25:41 +02:00
public static node analyse ( node nodStudent , node nodSujet , Integer indexStudent , Run a ) {
2022-04-25 13:25:20 +02:00
// 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 ( ) ;
2022-04-29 19:17:58 +02:00
node nodtableaux = new node ( ) ;
2022-04-25 13:25:20 +02:00
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 ) ) ;
2022-05-07 20:43:07 +02:00
if ( nodSujet . getAttributs ( ) . get ( " analysis_filename " ) ! = null ) nodouverture . getAttributs ( ) . put ( " filenameAnalyse " , nodSujet . getAttributs ( ) . get ( " analysis_filename " ) ) ;
if ( nodStudent . getAttributs ( ) . get ( " producteur " ) ! = null ) nodouverture . getAttributs ( ) . put ( " producteur " , nodStudent . getAttributs ( ) . get ( " producteur " ) ) ;
if ( nodStudent . getAttributs ( ) . get ( " dureeEdition " ) ! = null ) nodouverture . getAttributs ( ) . put ( " dureeEdition " , nodStudent . getAttributs ( ) . get ( " dureeEdition " ) ) ;
if ( nodStudent . getAttributs ( ) . get ( " dateModification " ) ! = null ) nodouverture . getAttributs ( ) . put ( " dateModification " , nodStudent . getAttributs ( ) . get ( " dateModification " ) ) ;
2022-04-25 13:25:20 +02:00
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 " ) ;
2022-05-10 21:02:22 +02:00
nodmenu = retourneNodeMenu ( nodSujet , nodmenu , 0 , 0 ) ;
2022-04-25 13:25:20 +02:00
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 " ) ) ) {
2022-05-03 16:02:02 +02:00
return clotureNodeAnalyse ( nodouverture , nodbodyetnotation , nodmenu , erreurs , nodmeta , nodpage , nodparagraph , nodsequence , nodnumerochapitre , nodframes , nodsections , nodtableaux , nodbiblio , nodtablematieres , nodtableillustrations , nodstructurepage , nodSujet . getContenu ( ) . get ( 0 ) ) ;
2022-04-25 13:25:20 +02:00
}
// analyse Meta
if ( nodSujet . retourneFirstEnfantsByName ( " office:meta " ) . getNomElt ( ) . equals ( " office:meta " ) ) {
2022-05-08 21:10:27 +02:00
nodmeta = analyseLesNodesPrincipaux . analyseLesMeta ( nodStudent . retourneFirstEnfantsByName ( " office:meta " ) , nodSujet . retourneFirstEnfantsByName ( " office:meta " ) , a , nodmenu ) ;
2022-04-25 13:25:20 +02:00
}
2022-04-29 19:17:58 +02:00
// analyse les pages (nécessaire d'avoir aussi les styles de paragraphes)
2022-04-25 13:25:20 +02:00
if ( nodSujet . retourneFirstEnfantsByName ( " style:page " ) . getNomElt ( ) . equals ( " style:page " ) ) {
if ( nodSujet . containElementByName ( " style:paragraph " ) ) {
2022-05-08 21:10:27 +02:00
nodpage = analyseLesNodesPrincipaux . analysePage ( nodStudent . retourneFirstEnfantsByName ( " style:page " ) , nodSujet . retourneFirstEnfantsByName ( " style:page " ) , a , nodmenu , nodSujet . retourneFirstEnfantsByName ( " style:paragraph " ) , nodStudent . retourneFirstEnfantsByName ( " style:paragraph " ) ) ;
2022-04-25 13:25:20 +02:00
} else {
2022-05-08 21:10:27 +02:00
nodpage = analyseLesNodesPrincipaux . analysePage ( nodStudent . retourneFirstEnfantsByName ( " style:page " ) , nodSujet . retourneFirstEnfantsByName ( " style:page " ) , a , nodmenu , null , null ) ;
2022-04-25 13:25:20 +02:00
}
}
// analyse les paragraphes
if ( nodSujet . retourneFirstEnfantsByName ( " style:paragraph " ) . getNomElt ( ) . equals ( " style:paragraph " ) ) {
2022-05-08 21:10:27 +02:00
nodparagraph = analyseLesNodesPrincipaux . analyseParagraph ( nodStudent . retourneFirstEnfantsByName ( " style:paragraph " ) , nodSujet . retourneFirstEnfantsByName ( " style:paragraph " ) , a , nodmenu ) ;
2022-04-25 13:25:20 +02:00
}
// analyse les variables de séquence
if ( nodSujet . retourneFirstEnfantsByName ( " sequences " ) . getNomElt ( ) . equals ( " sequences " ) ) {
2022-05-08 21:10:27 +02:00
nodsequence = analyseLesNodesPrincipaux . analyseLesSequences ( nodStudent . retourneFirstEnfantsByName ( " sequences " ) , nodSujet . retourneFirstEnfantsByName ( " sequences " ) , a , nodmenu ) ;
2022-04-25 13:25:20 +02:00
}
// analyse de la numérotation des chapitres
if ( nodSujet . retourneFirstEnfantsByName ( " numerotationchapitre " ) . getNomElt ( ) . equals ( " numerotationchapitre " ) ) {
2022-05-08 21:10:27 +02:00
nodnumerochapitre = analyseLesNodesPrincipaux . analyseLaNumerotationChapitre ( nodStudent . retourneFirstEnfantsByName ( " numerotationchapitre " ) , nodSujet . retourneFirstEnfantsByName ( " numerotationchapitre " ) , a , nodmenu ) ;
2022-04-25 13:25:20 +02:00
}
// analyse les frames
if ( nodSujet . retourneFirstEnfantsByName ( " frames " ) . getNomElt ( ) . equals ( " frames " ) ) {
2022-05-08 21:10:27 +02:00
nodframes = analyseLesNodesPrincipaux . analyseLesFrames ( nodStudent . retourneFirstEnfantsByName ( " frames " ) , nodSujet . retourneFirstEnfantsByName ( " frames " ) , a , nodmenu ) ;
2022-04-25 13:25:20 +02:00
}
// analyse des sections
2022-04-29 19:17:58 +02:00
if ( nodSujet . retourneFirstEnfantsByName ( " sections " ) . getNomElt ( ) . equals ( " sections " ) ) {
2022-05-08 21:10:27 +02:00
nodsections = analyseLesNodesPrincipaux . analyseLesSections ( nodStudent . retourneFirstEnfantsByName ( " sections " ) , nodSujet . retourneFirstEnfantsByName ( " sections " ) , a , nodmenu ) ;
2022-04-29 19:17:58 +02:00
}
// analyse les tableaux
if ( nodSujet . retourneFirstEnfantsByName ( " tableaux " ) . getNomElt ( ) . equals ( " tableaux " ) ) {
2022-05-08 21:10:27 +02:00
nodtableaux = analyseLesNodesPrincipaux . analyseLesTableaux ( nodStudent . retourneFirstEnfantsByName ( " tableaux " ) , nodSujet . retourneFirstEnfantsByName ( " tableaux " ) , a , nodmenu ) ;
2022-04-29 19:17:58 +02:00
}
2022-04-25 13:25:20 +02:00
// analyse la bibliographie de LibreOffice
if ( nodSujet . retourneFirstEnfantsByName ( " biblio " ) . getNomElt ( ) . equals ( " biblio " ) ) {
2022-05-08 21:10:27 +02:00
nodbiblio = analyseLesNodesPrincipaux . analyseLaBiblio ( nodStudent . retourneFirstEnfantsByName ( " biblio " ) , nodSujet . retourneFirstEnfantsByName ( " biblio " ) , a , nodmenu ) ;
2022-04-25 13:25:20 +02:00
}
// analyse des tables des matières
if ( nodSujet . retourneFirstEnfantsByName ( " tablematieres " ) . getNomElt ( ) . equals ( " tablematieres " ) ) {
2022-05-08 21:10:27 +02:00
nodtablematieres = analyseLesNodesPrincipaux . analyseLesTablesMatieres ( nodStudent . retourneFirstEnfantsByName ( " tablematieres " ) , nodSujet . retourneFirstEnfantsByName ( " tablematieres " ) , a , nodmenu ) ;
2022-04-25 13:25:20 +02:00
}
// analyse des tables illustrations
if ( nodSujet . retourneFirstEnfantsByName ( " tableillustrations " ) . getNomElt ( ) . equals ( " tableillustrations " ) ) {
2022-05-08 21:10:27 +02:00
nodtableillustrations = analyseLesNodesPrincipaux . analyseLesTablesIllustrations ( nodStudent . retourneFirstEnfantsByName ( " tableillustrations " ) , nodSujet . retourneFirstEnfantsByName ( " tableillustrations " ) , a , nodmenu ) ;
2022-04-25 13:25:20 +02:00
}
// 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 " ) ;
2022-05-08 21:10:27 +02:00
nodstructurepage = analyseLesNodesPrincipaux . analyseStructurePage ( nodStudent . retourneFirstEnfantsByName ( " structurepage " ) , nodSujet . retourneFirstEnfantsByName ( " structurepage " ) , a , nodmenu , nodSujetParagraphs , nodStudentParagraphs ) ;
2022-04-25 13:25:20 +02:00
}
// retourne le node analyse assemblé et calcul de la note avec le barème
2022-05-10 21:02:22 +02:00
if ( nodSujet . getContenu ( ) . size ( ) > 0 ) {
return clotureNodeAnalyse ( nodouverture , nodbodyetnotation , nodmenu , erreurs , nodmeta , nodpage , nodparagraph , nodsequence , nodnumerochapitre , nodframes , nodsections , nodtableaux , nodbiblio , nodtablematieres , nodtableillustrations , nodstructurepage , nodSujet . getContenu ( ) . get ( 0 ) ) ;
} else {
return clotureNodeAnalyse ( nodouverture , nodbodyetnotation , nodmenu , erreurs , nodmeta , nodpage , nodparagraph , nodsequence , nodnumerochapitre , nodframes , nodsections , nodtableaux , nodbiblio , nodtablematieres , nodtableillustrations , nodstructurepage , " " ) ;
}
2022-04-25 13:25:20 +02:00
}
/ * *
2022-05-08 21:10:27 +02:00
* Les erreurs dans le fichier étudiant : erreur de métadonnées Sujet , date de création pour identifier le fichier à analyser .
2022-04-25 13:25:20 +02:00
* < 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 .
* /
2022-05-03 16:02:02 +02:00
@SuppressWarnings ( " unlikely-arg-type " )
2022-04-25 13:25:20 +02:00
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 {
2022-05-03 16:02:02 +02:00
if ( ! nodSujet . getAttributs ( ) . get ( " metaSujet " ) . equals ( b . getContenu ( ) . get ( 0 ) ) ) {
2022-04-25 13:25:20 +02:00
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 " ) ) {
if ( manqueHistorique ) {
erreurs . getAttributs ( ) . put ( " manqueHistorique " , " true " ) ;
} else {
erreurs . getAttributs ( ) . put ( " manqueHistorique " , " false " ) ;
}
} else {
erreurs . getAttributs ( ) . put ( " manqueHistorique " , " false " ) ;
manqueHistorique = false ;
}
} 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
2022-04-29 19:17:58 +02:00
* @param nodtableaux
2022-04-25 13:25:20 +02:00
* @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 ,
2022-04-29 19:17:58 +02:00
node nodparagraph , node nodsequence , node nodnumerochapitre , node nodframes , node nodsections , node nodtableaux , node nodbiblio , node nodtablematieres ,
2022-04-25 13:25:20 +02:00
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 ) { } ;
}
2022-04-29 19:17:58 +02:00
double pointsection = 0 ; double pointsectiontotal = 0 ; double poidssection = 0 ;
if ( nodsections ! = null ) if ( nodsections . isClose ( ) ) {
if ( nodsections . getAttributs ( ) . get ( " pointgagner " ) ! = null ) pointsection = Double . valueOf ( nodsections . getAttributs ( ) . get ( " pointgagner " ) ) ;
if ( nodsections . getAttributs ( ) . get ( " pointtotal " ) ! = null ) pointsectiontotal = Double . valueOf ( nodsections . getAttributs ( ) . get ( " pointtotal " ) ) ;
if ( nodsections . getAttributs ( ) . get ( " poids " ) ! = null ) try { poidssection = Math . abs ( Double . valueOf ( nodsections . getAttributs ( ) . get ( " poids " ) ) ) ; } catch ( Exception e ) { } ;
}
double pointtableau = 0 ; double pointtableautotal = 0 ; double poidstableau = 0 ;
if ( nodtableaux ! = null ) if ( nodtableaux . isClose ( ) ) {
if ( nodtableaux . getAttributs ( ) . get ( " pointgagner " ) ! = null ) pointsection = Double . valueOf ( nodtableaux . getAttributs ( ) . get ( " pointgagner " ) ) ;
if ( nodtableaux . getAttributs ( ) . get ( " pointtotal " ) ! = null ) pointsectiontotal = Double . valueOf ( nodtableaux . getAttributs ( ) . get ( " pointtotal " ) ) ;
if ( nodtableaux . getAttributs ( ) . get ( " poids " ) ! = null ) try { poidssection = Math . abs ( Double . valueOf ( nodtableaux . getAttributs ( ) . get ( " poids " ) ) ) ; } catch ( Exception e ) { } ;
}
2022-04-25 13:25:20 +02:00
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 ) { } ;
}
2022-04-29 19:17:58 +02:00
2022-04-25 13:25:20 +02:00
double proportionCorrect = 0 ;
double poidsTotal = 0 ;
double pointsTotal = 0 ;
double pointgagner = 0 ;
double note = 0 ;
2022-04-29 19:17:58 +02:00
proportionCorrect = ( poidsmeta * pointmeta + poidspage * pointpage + poidsparagraph * pointparagraph + poidssequence * pointsequence + poidsnumerotation * pointnumerotation + poidsframe * pointframe + poidsbiblio * pointbiblio + poidstablematieres * pointtablematieres + poidstableillustration * pointtableillustration + poidsstructure * pointstructure + poidssection * pointsection + poidstableau * pointtableau )
/ ( poidsmeta * pointmetatotal + poidspage * pointpagetotal + poidsparagraph * pointparagraphtotal + poidssequence * pointsequencetotal + poidsnumerotation * pointnumerotationtotal + poidsframe * pointframetotal + poidsbiblio * pointbibliototal + poidstablematieres * pointtablematierestotal + poidstableillustration * pointtableillustrationtotal + poidsstructure * pointstructuretotal + poidssection * pointsectiontotal + poidstableau * pointtableautotal ) ;
2022-04-25 13:25:20 +02:00
2022-04-29 19:17:58 +02:00
poidsTotal = poidsmeta + poidspage + poidsparagraph + poidssequence + poidsnumerotation + poidsframe + poidsbiblio + poidstablematieres + poidstableillustration + poidsstructure + poidssection + poidstableau ;
pointsTotal = pointmetatotal + pointpagetotal + pointparagraphtotal + pointsequencetotal + pointnumerotationtotal + pointframetotal + pointbibliototal + pointtablematierestotal + pointtableillustrationtotal + pointstructuretotal + pointsectiontotal ;
pointgagner = pointmeta + pointpage + pointparagraph + pointsequence + pointnumerotation + pointframe + pointsection + pointtableau + pointbiblio + pointtablematieres + pointtableillustration + pointstructure ;
2022-04-25 13:25:20 +02:00
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 ) ;
2022-04-29 19:17:58 +02:00
nodanalyse . ajouteEnfant ( nodtableaux ) ;
2022-04-25 13:25:20 +02:00
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 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 .
* /
2022-05-09 21:22:50 +02:00
public static node evalLesAttributEtContenuDuNode ( node nodeStudent , node sujet , node retour , String nameItem , String nameElt ) {
2022-04-25 13:25:20 +02:00
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 ) ;
}
}
2022-04-26 10:30:22 +02:00
if ( ! sujet . getAttributs ( ) . get ( k ) . equals ( " 0 " ) ) {
if ( k . equals ( " evalNameNode " ) & & ! sujet . getAttributs ( ) . get ( k ) . equals ( " 0 " ) ) {
if ( nodeStudent ! = null ) {
2022-04-29 19:17:58 +02:00
retour = evaluNameNode ( retour , nodeStudent , sujet . getNomElt ( ) , sujet . getAttributs ( ) . get ( " evalNameNode " ) , sujet . getNomElt ( ) ) ;
2022-04-26 10:30:22 +02:00
} else {
2022-04-29 19:17:58 +02:00
retour = evaluNameNode ( retour , null , sujet . getNomElt ( ) , sujet . getAttributs ( ) . get ( " evalNameNode " ) , sujet . getNomElt ( ) ) ;
2022-04-26 10:30:22 +02:00
}
2022-04-25 13:25:20 +02:00
}
2022-04-26 10:30:22 +02:00
if ( k . equals ( " evalNameCreator " ) & & sujet . getNomElt ( ) . equals ( " dc:creator " ) ) {
if ( nodeStudent ! = null ) {
2022-05-03 16:02:02 +02:00
retour = evaluNameCreator ( retour , nodeStudent , nodeStudent . getContenu ( ) . get ( 0 ) , sujet . getAttributs ( ) . get ( " evalNameCreator " ) , " Editeur " ) ;
2022-04-26 10:30:22 +02:00
} else {
2022-04-29 19:17:58 +02:00
retour = evaluNameCreator ( retour , null , " Editeur inconnu " , sujet . getAttributs ( ) . get ( " evalNameCreator " ) , " Editeur " ) ;
2022-04-26 10:30:22 +02:00
}
}
if ( k . equals ( " evalNameInitialCreator " ) & & sujet . getNomElt ( ) . equals ( " meta:initial-creator " ) ) {
if ( nodeStudent ! = null ) {
2022-05-09 21:22:50 +02:00
retour = evalNameInitialCreator ( retour , nodeStudent , nodeStudent . getContenu ( ) . get ( 0 ) , sujet . getAttributs ( ) . get ( " evalNameInitialCreator " ) , " Créateur " ) ;
2022-04-26 10:30:22 +02:00
} else {
2022-05-09 21:22:50 +02:00
retour = evalNameInitialCreator ( retour , null , " Créateur inconnu " , sujet . getAttributs ( ) . get ( " evalNameInitialCreator " ) , " Créateur " ) ;
2022-04-26 10:30:22 +02:00
}
}
2022-04-25 13:25:20 +02:00
}
2022-04-26 10:30:22 +02:00
2022-04-25 13:25:20 +02:00
}
2022-04-29 19:17:58 +02:00
//avec l'attribut allContent="strict1", allContent="strictSansEspace1" et allContent="environ1" alors analyse tout le contenu du node
2022-04-25 13:25:20 +02:00
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 " , " ¢‽ " ) ;
2022-04-29 19:17:58 +02:00
String testPoint = points . substring ( points . indexOf ( " ‽ " ) + 1 , points . length ( ) ) ;
boolean pasDeProblem = true ;
boolean pointSupAUn = false ;
try {
if ( Integer . valueOf ( testPoint ) > = 1 ) pointSupAUn = true ;
} catch ( Exception e ) {
System . out . println ( " Dans le node " + sujet . getNomElt ( ) + " . \ nIl y a un problème avec la valeur de l'attribut allContent= \" " + sujet . getAttributs ( ) . get ( " allContent " ) + " \" " ) ;
System . out . println ( e . toString ( ) ) ;
pasDeProblem = false ;
}
if ( pasDeProblem & & pointSupAUn ) {
String allContentSujet = outils . withoutCodeAndPointPourRechercheContenuExact ( 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 ) ;
}
2022-04-25 13:25:20 +02:00
}
// analyse le contenu du node avec tous les nodes sauf "text:sequence"
2022-05-03 16:02:02 +02:00
if ( sujet . contenuEvaluer ( ) & & ! sujet . getNomElt ( ) . equals ( " text:sequence " ) ) {
2022-04-25 13:25:20 +02:00
String contenuStudent = " " ;
2022-05-03 16:02:02 +02:00
if ( nodeStudent ! = null ) if ( nodeStudent . getContenu ( ) . size ( ) > 0 ) contenuStudent = nodeStudent . getContenu ( ) . get ( 0 ) ;
String contenuSujet = sujet . getContenu ( ) . get ( 0 ) ;
2022-04-25 13:25:20 +02:00
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)
2022-05-03 16:02:02 +02:00
if ( sujet . contenuEvaluer ( ) & & sujet . getNomElt ( ) . equals ( " text:sequence " ) ) {
2022-04-25 13:25:20 +02:00
String contenuStudent = " " ;
2022-05-03 16:02:02 +02:00
if ( nodeStudent ! = null ) if ( nodeStudent . getContenu ( ) . size ( ) > 0 ) contenuStudent = nodeStudent . getContenu ( ) . get ( 0 ) ; //contenuStudent = nodeStudent.retourneLesContenusEnfants("text:change");
String contenuSujet = sujet . getContenu ( ) . get ( 0 ) ;
2022-04-25 13:25:20 +02:00
node item = retourneNoteAvecResultatsAnalyse ( nameItem , " Contenu textuel " , contenuStudent , contenuSujet , nameElt ) ;
retour . getNodes ( ) . add ( item ) ;
}
return retour ;
}
2022-05-03 16:02:02 +02:00
/ * *
* 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 ;
}
/ * *
* Analyse tous les attributs des nodes < style : style > . < br >
2022-05-04 09:16:50 +02:00
* Formatage direct des styles de paragraphe . < / br >
* Les attributs doivent contenir le code ‼ . < br >
2022-04-25 13:25:20 +02:00
* < 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 .
* /
2022-05-09 21:22:50 +02:00
public static node evalLesAttributAnalyseStyle ( node nodeStyleParagraphStudent , node nodeStyleParagraphSujet , node retour , String nameItem , String nameElt ) {
2022-04-25 13:25:20 +02:00
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 ;
}
/ * *
* Retourne le nom du fichier de l ' étudiant pour le Zip de Moodle . < br >
* < / br >
* @param filename
* @param nodana
* @return
* /
2022-05-24 18:25:41 +02:00
public static String retourneLeNomDuFeedback ( String filename , node nodana , node verif ) {
2022-04-25 13:25:20 +02:00
System . getProperty ( " file.encoding " , " UTF-8 " ) ;
int number_match = 2 ;
int mini_modification = 0 ;
boolean plagiat = false ;
boolean copiercoller = false ;
boolean pasAssezDeModification = 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 " ) ) ;
if ( verif . getAttributs ( ) . get ( " mini_number_modification " ) ! = null ) mini_modification = Integer . valueOf ( verif . getAttributs ( ) . get ( " mini_number_modification " ) ) ;
//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_correspondances_consecutives " ) ) > number_match ) plagiat = true ;
if ( ! verifStudent . getAttributs ( ) . get ( " first_modification_identique " ) . equals ( " null " ) & & Integer . valueOf ( verifStudent . getAttributs ( ) . get ( " nombre_correspondances_consecutives " ) ) > = number_match ) plagiat = true ;
if ( verifStudent . getAttributs ( ) . get ( " copier_coller " ) ! = null ) copiercoller = true ;
if ( Integer . valueOf ( verifStudent . getAttributs ( ) . get ( " nombre_modification " ) ) < = mini_modification ) pasAssezDeModification = 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 " ;
if ( copiercoller ) cheminFeedBack = cheminFeedBack + " -Copier-Coller.html " ;
if ( pasAssezDeModification ) cheminFeedBack = cheminFeedBack + " -Pas assez de modification.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 " ;
if ( copiercoller ) cheminFeedBack = cheminFeedBack + " -Copier-Coller.html " ;
if ( pasAssezDeModification ) cheminFeedBack = cheminFeedBack + " -Pas assez de modification.html " ;
} else {
cheminFeedBack = cheminFeedBack + " .html " ;
}
}
return filename + cheminFeedBack ;
}
/ * *
2022-05-04 09:16:50 +02:00
* Affichage uniquement dans la console Les erreurs .
2022-04-25 13:25:20 +02:00
* @param nod
* /
2022-05-24 18:25:41 +02:00
public static StringBuilder messageSystem ( node nod ) {
StringBuilder Text = new StringBuilder ( ) ;
2022-04-25 13:25:20 +02:00
node ouverture = nod . retourneFirstEnfantsByName ( " ouverture " ) ;
node notation = nod . retourneFirstEnfantsByName ( " bodyetnotation " ) ;
node erreurs = nod . retourneFirstEnfantsByName ( " erreurs " ) ;
2022-05-24 18:25:41 +02:00
2022-04-25 13:25:20 +02:00
boolean flagError = Boolean . valueOf ( erreurs . getAttributs ( ) . get ( " oneError " ) ) ;
2022-05-24 18:25:41 +02:00
if ( ! commandes . fichierStudentMoodle ) {
2022-05-25 15:28:58 +02:00
Text . append ( " \ n Dossier analysé : " + ouverture . getAttributs ( ) . get ( " dossier " ) ) ;
2022-05-24 18:25:41 +02:00
System . out . println ( " \ t Dossier analysé : " + ouverture . getAttributs ( ) . get ( " dossier " ) ) ; }
else {
2022-05-25 15:28:58 +02:00
Text . append ( " \ n Fichier analysé : " + ouverture . getAttributs ( ) . get ( " dossier " ) ) ;
2022-05-24 18:25:41 +02:00
System . out . println ( " \ t Fichier analysé : " + ouverture . getAttributs ( ) . get ( " dossier " ) ) ; }
2022-04-25 13:25:20 +02:00
if ( notation . getAttributs ( ) . get ( " baremeABC " ) . equals ( " true " ) ) {
2022-05-25 15:28:58 +02:00
Text . append ( " \ n Note : " + notation . getAttributs ( ) . get ( " noteABC " ) ) ;
2022-05-04 09:16:50 +02:00
System . out . println ( " \ t Note : " + notation . getAttributs ( ) . get ( " noteABC " ) ) ;
2022-04-25 13:25:20 +02:00
} else {
2022-05-25 15:28:58 +02:00
Text . append ( " \ n Note : " + notation . getAttributs ( ) . get ( " note " ) + " / " + ouverture . getAttributs ( ) . get ( " notefrom " ) ) ;
2022-05-04 09:16:50 +02:00
System . out . println ( " \ t Note : " + notation . getAttributs ( ) . get ( " note " ) + " / " + ouverture . getAttributs ( ) . get ( " notefrom " ) ) ;
2022-04-25 13:25:20 +02:00
}
if ( flagError ) {
2022-05-25 15:28:58 +02:00
Text . append ( " \ n ERREUR dans le fichier de l'étudiant. " ) ;
2022-05-04 09:16:50 +02:00
System . out . println ( " \ t ERREUR dans le fichier de l'étudiant. " ) ;
2022-04-25 13:25:20 +02:00
2022-05-24 18:25:41 +02:00
if ( Boolean . valueOf ( erreurs . getAttributs ( ) . get ( " manqueHistorique " ) ) ) {
2022-05-25 15:28:58 +02:00
Text . append ( " \ n Erreur : Il n'y a pas d'historique dans le fichier.Peut être que le fichier n'a pas été modifié ou il a été réïnitialisé par l'étudiant. " ) ;
2022-05-24 18:25:41 +02:00
System . out . println ( " \ t Erreur : Il n'y a pas d'historique dans le fichier.Peut être que le fichier n'a pas été modifié ou il a été réïnitialisé par l'étudiant. " ) ;
}
if ( Boolean . valueOf ( erreurs . getAttributs ( ) . get ( " manqueCreationDate " ) ) ) {
2022-05-25 15:28:58 +02:00
Text . append ( " \ n Erreur : Ce n'est pas la bonne date de création du fichier. Le fichier a été réïnitialisé ou ce n'est pas le fichier de l'évaluation. " ) ;
2022-05-24 18:25:41 +02:00
System . out . println ( " \ t Erreur : Ce n'est pas la bonne date de création du fichier. Le fichier a été réïnitialisé ou ce n'est pas le fichier de l'évaluation. " ) ;
}
if ( Boolean . valueOf ( erreurs . getAttributs ( ) . get ( " manqueValeurCreationDate " ) ) ) {
2022-05-25 15:28:58 +02:00
Text . append ( " \ n Erreur : Ce n'est pas la bonne date de création du fichier. " ) ;
2022-05-24 18:25:41 +02:00
System . out . println ( " \ t Erreur : Ce n'est pas la bonne date de création du fichier. " ) ;
}
if ( Boolean . valueOf ( erreurs . getAttributs ( ) . get ( " manqueMetaSujet " ) ) ) {
2022-05-25 15:28:58 +02:00
Text . append ( " \ n Erreur : La propriété personnalisé \" Sujet \" a été supprimé dans le fichier de l'étudiant. " ) ;
2022-05-24 18:25:41 +02:00
System . out . println ( " \ t Erreur : La propriété personnalisé \" Sujet \" a été supprimé dans le fichier de l'étudiant. " ) ;
}
if ( Boolean . valueOf ( erreurs . getAttributs ( ) . get ( " manqueValeurMetaSujet " ) ) ) {
2022-05-25 15:28:58 +02:00
Text . append ( " \ n Erreur : La propriété personnalisé \" Sujet \" a été modifié par l'étudiant. \ nLa valeur de cette propriété personnalisé dans le fichier de l'étudiant est \" " + ouverture . getAttributs ( ) . get ( " metaSujet " ) + " \" . \ nCe n'est pas la valeur correct. " ) ;
2022-05-24 18:25:41 +02:00
System . out . println ( " \ t Erreur : La propriété personnalisé \" Sujet \" a été modifié par l'étudiant. \ nLa valeur de cette propriété personnalisé dans le fichier de l'étudiant est \" " + ouverture . getAttributs ( ) . get ( " metaSujet " ) + " \" . \ nCe n'est pas la valeur correct. " ) ;
}
if ( Boolean . valueOf ( erreurs . getAttributs ( ) . get ( " manqueInitialCreator " ) ) ) {
2022-05-25 15:28:58 +02:00
Text . append ( " \ n Erreur : La propriété personnalisé \" Sujet \" n'est pas correct. " ) ;
2022-05-24 18:25:41 +02:00
System . out . println ( " \ t Erreur : La propriété personnalisé \" Sujet \" n'est pas correct. " ) ;
}
2022-04-25 13:25:20 +02:00
}
2022-05-25 15:28:58 +02:00
Text . append ( " \ n " ) ;
2022-04-25 13:25:20 +02:00
System . out . println ( ) ;
2022-05-24 18:25:41 +02:00
return Text ;
2022-04-25 13:25:20 +02:00
}
/ * *
2022-05-04 09:16:50 +02:00
* Ajoute dans le node nodanalyse . < / br >
* Le node saut et son attribut titre < / br >
2022-05-09 21:22:50 +02:00
* Et place un titre , ou titre1 , ou titre2 , ou titre3 < / br >
2022-04-25 13:25:20 +02:00
* < br >
* @param nod
* @return
* /
2022-05-10 21:02:22 +02:00
public static node addNodeSautTitre ( node nodSujet , node nodanalyse , node nodmenu , Run a ) {
2022-05-08 21:10:27 +02:00
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 ) ;
2022-05-10 21:02:22 +02:00
if ( nodSujet . getAttributs ( ) . get ( " addmenu " ) ! = null ) if ( nodSujet . getAttributs ( ) . get ( " addmenu " ) . equalsIgnoreCase ( " true " ) ) {
if ( a . retourneFirstNodeByNameAttributValue ( nodmenu , " item " , " titre " , nodSujet . getAttributs ( ) . get ( " titre " ) ) ! = null ) {
N . getAttributs ( ) . put ( " id " , a . retourneFirstNodeByNameAttributValue ( nodmenu , " item " , " titre " , nodSujet . getAttributs ( ) . get ( " titre " ) ) . getAttributs ( ) . get ( " id " ) ) ;
N . getAttributs ( ) . put ( " addmenu " , " true " ) ;
}
}
2022-05-08 21:10:27 +02:00
}
2022-05-09 21:22:50 +02:00
if ( nodSujet . getAttributs ( ) . get ( " titre1 " ) ! = null ) {
node N = new node ( ) ;
N . setNomElt ( " saut " ) ;
N . getAttributs ( ) . put ( " titre1 " , nodSujet . getAttributs ( ) . get ( " titre1 " ) ) ;
N . setClose ( true ) ;
nodanalyse . getNodes ( ) . add ( N ) ;
2022-05-10 21:02:22 +02:00
if ( nodSujet . getAttributs ( ) . get ( " addmenu " ) ! = null ) if ( nodSujet . getAttributs ( ) . get ( " addmenu " ) . equalsIgnoreCase ( " true " ) ) {
if ( a . retourneFirstNodeByNameAttributValue ( nodmenu , " item " , " titre " , nodSujet . getAttributs ( ) . get ( " titre1 " ) ) ! = null ) {
N . getAttributs ( ) . put ( " id " , a . retourneFirstNodeByNameAttributValue ( nodmenu , " item " , " titre " , nodSujet . getAttributs ( ) . get ( " titre1 " ) ) . getAttributs ( ) . get ( " id " ) ) ;
N . getAttributs ( ) . put ( " addmenu " , " true " ) ;
}
}
2022-05-09 21:22:50 +02:00
}
2022-05-08 21:10:27 +02:00
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 ) ;
2022-05-10 21:02:22 +02:00
if ( nodSujet . getAttributs ( ) . get ( " addmenu " ) ! = null ) if ( nodSujet . getAttributs ( ) . get ( " addmenu " ) . equalsIgnoreCase ( " true " ) ) {
if ( a . retourneFirstNodeByNameAttributValue ( nodmenu , " item " , " titre " , nodSujet . getAttributs ( ) . get ( " titre2 " ) ) ! = null ) {
N . getAttributs ( ) . put ( " id " , a . retourneFirstNodeByNameAttributValue ( nodmenu , " item " , " titre " , nodSujet . getAttributs ( ) . get ( " titre2 " ) ) . getAttributs ( ) . get ( " id " ) ) ;
N . getAttributs ( ) . put ( " addmenu " , " true " ) ;
}
}
2022-05-08 21:10:27 +02:00
}
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 ) ;
2022-05-10 21:02:22 +02:00
if ( nodSujet . getAttributs ( ) . get ( " addmenu " ) ! = null ) if ( nodSujet . getAttributs ( ) . get ( " addmenu " ) . equalsIgnoreCase ( " true " ) ) {
if ( a . retourneFirstNodeByNameAttributValue ( nodmenu , " item " , " titre " , nodSujet . getAttributs ( ) . get ( " titre3 " ) ) ! = null ) {
N . getAttributs ( ) . put ( " id " , a . retourneFirstNodeByNameAttributValue ( nodmenu , " item " , " titre " , nodSujet . getAttributs ( ) . get ( " titre3 " ) ) . getAttributs ( ) . get ( " id " ) ) ;
N . getAttributs ( ) . put ( " addmenu " , " true " ) ;
}
}
2022-04-25 13:25:20 +02:00
}
2022-05-07 20:43:07 +02:00
2022-04-25 13:25:20 +02:00
return nodanalyse ;
}
2022-05-09 21:22:50 +02:00
/ * *
* Ajoute un saut de ligne . < / br >
* @param nodSujet
* @param nodanalyse
* @return
* /
public static node addSaut ( node nodSujet , node nodanalyse ) {
if ( nodSujet . getAttributs ( ) . get ( " saut " ) ! = null ) {
if ( nodSujet . getAttributs ( ) . get ( " saut " ) . equalsIgnoreCase ( " true " ) ) {
node N = new node ( ) ;
N . setNomElt ( " saut " ) ;
//N.getAttributs().put("titre", "");
N . setClose ( true ) ;
nodanalyse . getNodes ( ) . add ( N ) ;
}
}
return nodanalyse ;
}
2022-04-25 13:25:20 +02:00
/ * *
* Vérirication des historiques
* @param verification
* @param a
* @return le node verif
* /
2022-05-24 18:25:41 +02:00
public static node verificationHistorique ( node verification , Run a ) {
2022-04-25 13:25:20 +02:00
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 + + ) {
2022-05-03 16:02:02 +02:00
node nodDate = null ;
node nodDateCreator = null ;
String dcdate1 = " " ;
String dccreator = " " ;
nodDate = HitoriqueDuFichier . get ( j ) . retourneFirstEnfantsByName ( " dc:date " ) ;
nodDateCreator = HitoriqueDuFichier . get ( j ) . retourneFirstEnfantsByName ( " dc:creator " ) ;
if ( nodDate ! = null ) {
dcdate1 = nodDate . getContenu ( ) . get ( 0 ) ;
}
if ( nodDate ! = null ) {
dccreator = nodDateCreator . getContenu ( ) . get ( 0 ) ;
}
2022-04-25 13:25:20 +02:00
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 + + ) {
2022-05-03 16:02:02 +02:00
String dcdate2 = HitoriqueDuFichier2 . get ( j2 ) . retourneFirstEnfantsByName ( " dc:date " ) . getContenu ( ) . get ( 0 ) ;
String dccreator2 = HitoriqueDuFichier2 . get ( j2 ) . retourneFirstEnfantsByName ( " dc:creator " ) . getContenu ( ) . get ( 0 ) ;
2022-04-25 13:25:20 +02:00
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 ( " null " ) & & 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
* /
2022-05-24 18:25:41 +02:00
public static void ecritureCSV ( node ana ) throws IOException {
2022-04-25 13:25:20 +02:00
Date aujourdhui = new Date ( ) ;
2022-05-04 09:16:50 +02:00
Path outputFilePath = Paths . get ( commandes . path + " /DateLong " + aujourdhui . getTime ( ) + " -Notes.csv " ) ;
if ( commandes . fourniDossierDestination ) outputFilePath = Paths . get ( commandes . path + " / " + commandes . pathDestination + " /DateLong " + aujourdhui . getTime ( ) + " -Notes.csv " ) ;
2022-04-25 13:25:20 +02:00
2022-05-04 09:16:50 +02:00
if ( ! commandes . fourniDossierDestination ) System . out . println ( commandes . path + " \\ DateLong " + aujourdhui . getTime ( ) + " -Notes.csv " ) ;
if ( commandes . fourniDossierDestination ) System . out . println ( commandes . path + " \\ " + commandes . pathDestination + " \\ DateLong " + aujourdhui . getTime ( ) + " -Notes.csv " ) ;
2022-04-25 13:25:20 +02:00
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 ( ) ;
2022-05-25 18:21:23 +02:00
commandes . message . append ( " \ n " ) ;
commandes . message . append ( " ************************* " ) ;
commandes . message . append ( " \ n " ) ;
commandes . message . append ( " \ nLe fichier au format CSV a été généré. " ) ;
commandes . message . append ( " \ n " + outputFilePath . toString ( ) ) ;
commandes . message . append ( " \ n " ) ;
commandes . message . append ( " ************************* " ) ;
2022-04-25 13:25:20 +02:00
}
/ * *
2022-04-25 18:46:58 +02:00
* Ecriture du fichier CSV avec vérification . < br >
* Mais sans rechercher les identifiants des étudiants .
2022-04-25 13:25:20 +02:00
* @param ana
* @param verif
* @param a
* @throws IOException
* /
2022-05-24 18:25:41 +02:00
public static void ecritureCSV ( node ana , node verif , Run a , node setting ) throws IOException {
2022-04-25 13:25:20 +02:00
String separator = " ; " ; //valeur par défaut du séparteur
Date aujourdhui = new Date ( ) ;
2022-05-04 09:16:50 +02:00
Path outputFilePath = Paths . get ( commandes . path + " /DateLong " + aujourdhui . getTime ( ) + " -Notes.csv " ) ;
if ( commandes . fourniDossierDestination ) outputFilePath = Paths . get ( commandes . path + " / " + commandes . pathDestination + " /DateLong " + aujourdhui . getTime ( ) + " -Notes.csv " ) ;
2022-04-25 13:25:20 +02:00
2022-05-04 09:16:50 +02:00
if ( ! commandes . fourniDossierDestination ) System . out . println ( commandes . path + " \\ DateLong " + aujourdhui . getTime ( ) + " -Notes.csv " ) ;
if ( commandes . fourniDossierDestination ) System . out . println ( commandes . path + " \\ " + commandes . pathDestination + " \\ DateLong " + aujourdhui . getTime ( ) + " -Notes.csv " ) ;
2022-04-25 13:25:20 +02:00
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 ( ) ;
2022-05-25 18:21:23 +02:00
commandes . message . append ( " \ n " ) ;
commandes . message . append ( " ************************* " ) ;
commandes . message . append ( " \ n " ) ;
commandes . message . append ( " \ nLe fichier au format CSV a été généré. " ) ;
commandes . message . append ( " \ n " + outputFilePath . toString ( ) ) ;
commandes . message . append ( " \ n " ) ;
commandes . message . append ( " ************************* " ) ;
2022-04-25 13:25:20 +02:00
}
/ * *
2022-04-25 18:46:58 +02:00
* Ecriture du fichier CSV avec ou sans vérification . < br >
* Mais avec rechercher des identifiants des étudiants . < br >
2022-04-25 13:25:20 +02:00
* @param ana
* @param verif
* @param a
* @param nodeCVS
* @param verification
* @throws IOException
* /
2022-05-24 18:25:41 +02:00
public static void ecritureCSV ( node ana , node verif , Run a , node nodeCVS , node setting ) throws IOException {
2022-04-25 13:25:20 +02:00
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 ( ) ;
2022-05-04 09:16:50 +02:00
Path outputFilePath = Paths . get ( commandes . path + " /DateLong " + aujourdhui . getTime ( ) + " -Notes.csv " ) ;
if ( commandes . fourniDossierDestination ) outputFilePath = Paths . get ( commandes . path + " / " + commandes . pathDestination + " /DateLong " + aujourdhui . getTime ( ) + " -Notes.csv " ) ;
2022-04-25 13:25:20 +02:00
2022-05-04 09:16:50 +02:00
if ( ! commandes . fourniDossierDestination ) System . out . println ( commandes . path + " \\ DateLong " + aujourdhui . getTime ( ) + " -Notes.csv " ) ;
if ( commandes . fourniDossierDestination ) System . out . println ( commandes . path + " \\ " + commandes . pathDestination + " \\ DateLong " + aujourdhui . getTime ( ) + " -Notes.csv " ) ;
2022-04-25 13:25:20 +02:00
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 consecutif " + 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 = " " ;
2022-04-25 18:46:58 +02:00
//** rechercher les correspondances avec le prénom et le nom de l'étudiant
2022-04-25 13:25:20 +02:00
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 nbreCorrespondanceConsecutive = Integer . valueOf ( verifStudent . getAttributs ( ) . get ( " nombre_correspondances_consecutives " ) ) ;
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 ( nbreCorrespondanceConsecutive > commandes . number_match ) {
bodyetnotation . getAttributs ( ) . put ( " commentaire " , " Echange de fichier - plagiat " ) ;
note = " 0 " ;
}
if ( nbrDateModificationUnique < = commandes . mini_number_modification ) {
bodyetnotation . getAttributs ( ) . put ( " commentaire " , " pas assez de modification. " ) ;
note = " 0 " ;
}
if ( ! verifStudent . getAttributs ( ) . get ( " first_modification_identique " ) . equals ( " null " ) & & nbreCorrespondanceConsecutive > = commandes . number_match ) {
note = " 0 " ;
bodyetnotation . getAttributs ( ) . put ( " commentaire " , " Echange de fichier - plagiat " ) ;
}
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 + nbreCorrespondanceConsecutive + 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 ( ) ;
2022-05-25 18:21:23 +02:00
commandes . message . append ( " \ n " ) ;
commandes . message . append ( " ************************* " ) ;
commandes . message . append ( " \ n " ) ;
commandes . message . append ( " \ nLe fichier au format CSV a été généré. " ) ;
commandes . message . append ( " \ n " + outputFilePath . toString ( ) ) ;
commandes . message . append ( " \ n " ) ;
commandes . message . append ( " ************************* " ) ;
2022-04-25 13:25:20 +02:00
}
/ * *
* Traitement de la durée d ' édition . < br >
* < br >
* @param dureeEdition
* @return
* /
2022-05-04 09:16:50 +02:00
public static String traitementDureeEdition ( String dureeEdition ) {
2022-04-25 13:25:20 +02:00
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 ;
}
/ * *
2022-05-25 21:22:38 +02:00
* Chargement dans un node du fichier CSV de la liste des étudiants . < br >
2022-04-25 13:25:20 +02:00
* La liste des étudiants doit contenir les champs Prénom , Nom , Numéro d ' identification , Adresse de courriel
2022-05-25 21:22:38 +02:00
* Le séparateur doit être le point - virgule et l ' encodage UTF - 8 .
2022-04-25 13:25:20 +02:00
* @param a
* @param nameCSV
* @return
* @throws IOException
* /
2022-05-25 21:22:38 +02:00
private static node chargementFichierCSV ( ) {
2022-04-25 13:25:20 +02:00
String targetString = " " ;
2022-05-25 21:22:38 +02:00
String cheminVersLeFichierCSV = " " ;
if ( commandes . console ) cheminVersLeFichierCSV = commandes . path + " / " + commandes . nameCSV ;
2022-04-25 13:25:20 +02:00
try {
2022-05-25 21:22:38 +02:00
BufferedReader br = new BufferedReader (
2022-04-25 13:25:20 +02:00
new InputStreamReader (
2022-05-25 21:22:38 +02:00
new FileInputStream ( cheminVersLeFichierCSV ) , " UTF-8 " ) ) ;
2022-04-25 13:25:20 +02:00
String line ;
while ( ( line = br . readLine ( ) ) ! = null ) {
targetString = targetString + line + " \ n " ;
}
br . close ( ) ;
} catch ( IOException e ) {
2022-05-25 21:22:38 +02:00
commandes . clotureWithErrorFile ( commandes . nameCSV ) ;
2022-04-25 13:25:20 +02:00
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 ;
}
2022-05-10 21:02:22 +02:00
public static node ajouteValeurParDefautAuStyleParagraph ( node ensembleDesParagraphes ) {
2022-04-25 13:25:20 +02:00
node LesStyleDefaut = null ;
if ( ensembleDesParagraphes . retourneEnfantsByNameExist ( " style:default-style " ) ) {
LesStyleDefaut = ensembleDesParagraphes . retourneFirstEnfantsByName ( " style:default-style " ) ;
}
2022-05-10 21:02:22 +02:00
for ( int i = 0 ; i < ensembleDesParagraphes . getNodes ( ) . size ( ) ; i + + ) {
2022-04-25 13:25:20 +02:00
2022-05-10 21:02:22 +02:00
node nodStyle = ensembleDesParagraphes . getNodes ( ) . get ( i ) ;
2022-04-25 13:25:20 +02:00
//le paragarph properties
node nodeStyleParDefautParagraphProperties = LesStyleDefaut . retourneFirstEnfantsByName ( " style:paragraph-properties " ) ;
2022-05-10 21:02:22 +02:00
node LesNodesStyleParagraph = nodStyle . retourneFirstEnfantsByName ( " style:paragraph-properties " ) ;
2022-04-25 13:25:20 +02:00
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 ( ) ) ;
2022-05-10 21:02:22 +02:00
nodStyle . getNodes ( ) . add ( n ) ;
2022-04-25 13:25:20 +02:00
break ;
}
}
//le text properties
node nodeStyleParDefautTextProperties = LesStyleDefaut . retourneFirstEnfantsByName ( " style:text-properties " ) ;
2022-05-10 21:02:22 +02:00
node LesNodesStyleText = nodStyle . retourneFirstEnfantsByName ( " style:text-properties " ) ;
2022-04-25 13:25:20 +02:00
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 ( ) ) ;
2022-05-10 21:02:22 +02:00
nodStyle . getNodes ( ) . add ( n ) ;
2022-04-25 13:25:20 +02:00
break ;
}
}
}
2022-05-10 21:02:22 +02:00
return ensembleDesParagraphes ;
}
// /**
// * 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.
// */
// public 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;
// }
//
public static node ajouteValeurLesValeursDuStyleParagraphParent ( node ensembleDesParagraphes ) {
2022-04-25 13:25:20 +02:00
2022-05-10 21:02:22 +02:00
for ( int i = 0 ; i < ensembleDesParagraphes . getNodes ( ) . size ( ) ; i + + ) {
2022-04-25 13:25:20 +02:00
2022-05-10 21:02:22 +02:00
node nodStyle = ensembleDesParagraphes . getNodes ( ) . get ( i ) ;
node parent = null ;
if ( nodStyle . getAttributs ( ) . get ( " style:parent-style-name " ) ! = null ) {
String nameStyleParent = nodStyle . getAttributs ( ) . get ( " style:parent-style-name " ) ;
if ( ensembleDesParagraphes . retourneFirstNodeByNameAndAttributValueExactStrict ( " style:style " , " style:name " , nameStyleParent ) ! = null ) {
parent = ensembleDesParagraphes . retourneFirstNodeByNameAndAttributValueExactStrict ( " style:style " , " style:name " , nameStyleParent ) ;
2022-04-25 13:25:20 +02:00
}
}
2022-05-10 21:02:22 +02:00
if ( parent ! = null ) {
//le paragraph properties
node nodeStyleParentParagraphProperties = parent . retourneFirstEnfantsByName ( " style:paragraph-properties " ) ;
node LesNodesStyleParagraph = nodStyle . retourneFirstEnfantsByName ( " style:paragraph-properties " ) ;
Enumeration < String > K = nodeStyleParentParagraphProperties . 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 , nodeStyleParentParagraphProperties . getAttributs ( ) . get ( Key ) ) ;
}
} else {
node n = new node ( ) ;
n . setNomElt ( " style:paragraph-properties " ) ;
n . setAttributs ( nodeStyleParentParagraphProperties . getAttributs ( ) ) ;
nodStyle . getNodes ( ) . add ( n ) ;
break ;
2022-04-25 13:25:20 +02:00
}
}
2022-05-10 21:02:22 +02:00
//le text properties
node nodeStyleParDefautTextProperties = parent . retourneFirstEnfantsByName ( " style:text-properties " ) ;
node LesNodesStyleText = nodStyle . 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 ( ) ) ;
nodStyle . getNodes ( ) . add ( n ) ;
break ;
}
}
2022-04-25 13:25:20 +02:00
}
2022-05-10 21:02:22 +02:00
2022-04-25 13:25:20 +02:00
}
2022-05-10 21:02:22 +02:00
return ensembleDesParagraphes ;
2022-04-25 13:25:20 +02:00
}
2022-05-10 21:02:22 +02:00
// /**
// * Même méthode que "ajouteValeurParDefautAuStyleParagraph".<br>
// * <br>
// * @param ensembleDesParagraphes
// * @param styleParagraph
// * @return
// */
// public 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 paragraph 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;
// }
//
2022-04-26 10:30:22 +02:00
2022-04-25 13:25:20 +02:00
2022-05-03 16:02:02 +02:00
2022-04-25 13:25:20 +02:00
/ * *
2022-04-26 10:30:22 +02:00
* Analyse le nom du node
2022-04-25 13:25:20 +02:00
*
* @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
* /
2022-04-29 19:17:58 +02:00
private static node evaluNameNode ( node retour , node nodStudent , String nameNode , String point , String nameElt ) {
2022-04-25 13:25:20 +02:00
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 ;
}
2022-05-08 21:10:27 +02:00
/ * *
*
* @param retour
* @param nodStudent
* @param nameCreator
* @param point
* @param nameElt
* @return
* /
2022-04-29 19:17:58 +02:00
private static node evaluNameCreator ( node retour , node nodStudent , String nameCreator , String point , String nameElt ) {
2022-04-26 10:30:22 +02:00
node item = null ;
if ( nodStudent ! = null ) {
item = retourneNoteAvecResultatsAnalyse ( nameCreator , " name " , nodStudent . getAttributs ( ) . get ( " creator " ) , nameCreator + " ↑‽ " + point , nameElt ) ;
} else {
outils . IncrementPointTotal ( Integer . valueOf ( point ) ) ;
item = new node ( nameCreator , " Erreur " , " Nom du l'éditeur " , " null " , nameCreator , 2 , outils . getPointEnJeu ( ) , nameElt ) ;
}
retour . getNodes ( ) . add ( item ) ;
return retour ;
}
2022-05-08 21:10:27 +02:00
/ * *
*
* @param retour
* @param nodStudent
* @param nameCreator
* @param point
* @param nameElt
* @return
* /
2022-05-09 21:22:50 +02:00
private static node evalNameInitialCreator ( node retour , node nodStudent , String nameCreator , String point , String nameElt ) {
2022-04-26 10:30:22 +02:00
node item = null ;
if ( nodStudent ! = null ) {
item = retourneNoteAvecResultatsAnalyse ( nameCreator , " name " , nodStudent . getAttributs ( ) . get ( " initial-creator " ) , nameCreator + " ↑‽ " + point , nameElt ) ;
} else {
outils . IncrementPointTotal ( Integer . valueOf ( point ) ) ;
item = new node ( nameCreator , " Erreur " , " Nom du créateur " , " null " , nameCreator , 2 , outils . getPointEnJeu ( ) , nameElt ) ;
}
retour . getNodes ( ) . add ( item ) ;
return retour ;
}
2022-04-25 13:25:20 +02:00
}