2022-06-19 21:01:30 +02:00
package fenetres ;
2022-06-13 21:56:16 +02:00
import java.awt.BorderLayout ;
import javax.swing.ImageIcon ;
import javax.swing.JFrame ;
import javax.swing.JPanel ;
import javax.swing.border.EmptyBorder ;
2022-06-14 16:39:05 +02:00
import javax.swing.filechooser.FileNameExtensionFilter ;
2022-06-13 21:56:16 +02:00
import MEPTL.commandes ;
2022-06-14 16:39:05 +02:00
import cXML.Run ;
2022-06-13 21:56:16 +02:00
import cXML.node ;
import javax.swing.JTabbedPane ;
import javax.swing.JLabel ;
import javax.swing.JOptionPane ;
import javax.swing.SwingConstants ;
import java.awt.Font ;
import javax.swing.JComboBox ;
2022-06-14 16:39:05 +02:00
import javax.swing.JFileChooser ;
2022-06-13 21:56:16 +02:00
import javax.swing.DefaultComboBoxModel ;
import javax.swing.JTextField ;
import javax.swing.JButton ;
import java.awt.event.ActionListener ;
2022-06-14 16:39:05 +02:00
import java.io.BufferedReader ;
import java.io.File ;
import java.io.FileInputStream ;
import java.io.IOException ;
import java.io.InputStreamReader ;
import java.util.regex.Matcher ;
import java.util.regex.Pattern ;
2022-06-13 21:56:16 +02:00
import java.awt.event.ActionEvent ;
2022-06-14 16:39:05 +02:00
import java.awt.GridLayout ;
import java.awt.Color ;
2022-06-13 21:56:16 +02:00
2022-06-15 08:23:18 +02:00
public final class setting extends JFrame {
2022-06-13 21:56:16 +02:00
/ * *
*
* /
private static final long serialVersionUID = 1L ;
private JPanel contentPane ;
private JTextField textFieldNomEtudiant ;
private JTextField textFieldPrenomEtudiant ;
private JTextField textFieldEmail ;
private JTextField textFieldIDEtudiant ;
private JComboBox < String > comboBoxSeparateur ;
private JComboBox < String > comboBoxEncodage ;
2022-06-14 16:39:05 +02:00
private JButton btnValiderModifications ;
private JButton btnReinit ;
private JButton btnTestCouleur ;
private JTextField textFieldSize ;
private JTextField textFieldNameZIP ;
private JTextField textFieldMiniCorrespondance ;
private JTextField textFieldNbrMiniModification ;
private JTextField textFieldMaxiModificationSimul ;
private JTextField textFieldTextSimilitude ;
private JTextField textFieldRouge ;
private JTextField textFieldVert ;
private JTextField textFieldBleu ;
private JTextField textFieldTestCouleur ;
private JButton btnExtraire ;
2022-06-15 08:23:18 +02:00
private static setting instance ;
2022-06-14 16:39:05 +02:00
// Bouton couleur de test
JButton btnCouleurInitTest ;
JButton btnRougeMax ;
JButton btnRougeMini ;
JButton btnVertMax ;
JButton btnVertMini ;
JButton btnBleuMini ;
JButton btnBleuMax ;
JButton btnCouleurMiniTotal ;
JButton btnCouleurMaxiTotal ;
JButton btnAjouterVosTraductions ;
2022-06-13 21:56:16 +02:00
/ * *
* Create the frame .
* /
public setting ( ) {
setResizable ( false ) ;
setDefaultCloseOperation ( JFrame . EXIT_ON_CLOSE ) ;
setBounds ( 100 , 100 , 742 , 642 ) ;
contentPane = new JPanel ( ) ;
contentPane . setBorder ( new EmptyBorder ( 5 , 5 , 5 , 5 ) ) ;
contentPane . setLayout ( new BorderLayout ( 0 , 0 ) ) ;
setContentPane ( contentPane ) ;
JTabbedPane tabbedPane = new JTabbedPane ( JTabbedPane . TOP ) ;
contentPane . add ( tabbedPane , BorderLayout . CENTER ) ;
ImageIcon img = new ImageIcon ( getClass ( ) . getResource ( " /evalwriter.png " ) ) ;
setIconImage ( img . getImage ( ) ) ;
setTitle ( commandes . Titre + commandes . version + " - Les paramètres pour l'évaluation " ) ;
setDefaultCloseOperation ( JFrame . DISPOSE_ON_CLOSE ) ;
int screenWidth = ( int ) java . awt . GraphicsEnvironment . getLocalGraphicsEnvironment ( ) . getMaximumWindowBounds ( ) . getWidth ( ) ;
int screenHeight = ( int ) java . awt . GraphicsEnvironment . getLocalGraphicsEnvironment ( ) . getMaximumWindowBounds ( ) . getHeight ( ) ;
setLocation ( ( ( screenWidth ) - getWidth ( ) ) / 2 , ( screenHeight - getHeight ( ) ) / 2 ) ;
2022-06-14 16:39:05 +02:00
ImageIcon img1 = new ImageIcon ( getClass ( ) . getResource ( " /resources/fichierCSV.png " ) ) ;
ImageIcon img2 = new ImageIcon ( getClass ( ) . getResource ( " /resources/zip.png " ) ) ;
ImageIcon img3 = new ImageIcon ( getClass ( ) . getResource ( " /resources/triche.png " ) ) ;
ImageIcon img4 = new ImageIcon ( getClass ( ) . getResource ( " /resources/similitude.png " ) ) ;
ImageIcon img5 = new ImageIcon ( getClass ( ) . getResource ( " /resources/couleur.png " ) ) ;
ImageIcon img6 = new ImageIcon ( getClass ( ) . getResource ( " /resources/traduction.png " ) ) ;
2022-06-13 21:56:16 +02:00
2022-06-14 16:39:05 +02:00
//*********************************************************
//** CSV **
//*********************************************************
2022-06-13 21:56:16 +02:00
JPanel panelCSV = new JPanel ( ) ;
2022-06-14 16:39:05 +02:00
tabbedPane . addTab ( " CSV " , img1 , panelCSV , null ) ;
2022-06-13 21:56:16 +02:00
panelCSV . setLayout ( null ) ;
node nodCSV = commandes . sujet . retourneFirstEnfantsByName ( " csv " ) ;
if ( nodCSV = = null ) {
2022-06-14 16:39:05 +02:00
JOptionPane . showMessageDialog ( null , " Problème avec le fichier d'analyse.<br>Le node csv n'est pas dans le fichier. " ) ;
dispose ( ) ;
2022-06-13 21:56:16 +02:00
return ;
}
JLabel lblNewLabel = new JLabel ( " <html>Les paramètres du fichier CSV permettent, d'écrire et d'importer les notes des étudiants dans le CMS moodle.<br> \ r \ nCes paramètres seront enregistrés dans le fichier d'analyse.</html> " ) ;
lblNewLabel . setVerticalAlignment ( SwingConstants . TOP ) ;
lblNewLabel . setFont ( new Font ( " Tahoma " , Font . PLAIN , 14 ) ) ;
lblNewLabel . setHorizontalAlignment ( SwingConstants . LEFT ) ;
2022-06-14 16:39:05 +02:00
lblNewLabel . setBounds ( 10 , 10 , 691 , 46 ) ;
2022-06-13 21:56:16 +02:00
panelCSV . add ( lblNewLabel ) ;
JLabel lblEncodage = new JLabel ( " Encodage " ) ;
lblEncodage . setFont ( new Font ( " Tahoma " , Font . BOLD , 12 ) ) ;
lblEncodage . setBounds ( 42 , 74 , 86 , 20 ) ;
panelCSV . add ( lblEncodage ) ;
comboBoxEncodage = new JComboBox < String > ( ) ;
comboBoxEncodage . setModel ( new DefaultComboBoxModel < String > ( new String [ ] { " UTF-8 " , " US-ASCII " , " ISO-8859-1 " , " UTF-16BE " , " UTF-16LE " , " UTF-16 " } ) ) ;
comboBoxEncodage . setSelectedItem ( nodCSV . getAttributs ( ) . get ( " encoding " ) ) ;
comboBoxEncodage . setBounds ( 138 , 74 , 159 , 22 ) ;
panelCSV . add ( comboBoxEncodage ) ;
JLabel lblSeparateur = new JLabel ( " Séparateur " ) ;
lblSeparateur . setFont ( new Font ( " Tahoma " , Font . BOLD , 12 ) ) ;
lblSeparateur . setBounds ( 370 , 74 , 86 , 20 ) ;
panelCSV . add ( lblSeparateur ) ;
comboBoxSeparateur = new JComboBox < String > ( ) ;
comboBoxSeparateur . setModel ( new DefaultComboBoxModel < String > ( new String [ ] { " point virgule " , " virgule " , " espace " , " tabulation " , " " } ) ) ;
if ( nodCSV . getAttributs ( ) . get ( " separator " ) . equals ( " ; " ) ) comboBoxSeparateur . setSelectedItem ( " point virgule " ) ;
if ( nodCSV . getAttributs ( ) . get ( " separator " ) . equals ( " , " ) ) comboBoxSeparateur . setSelectedItem ( " virgule " ) ;
if ( nodCSV . getAttributs ( ) . get ( " separator " ) . equals ( " " ) ) comboBoxSeparateur . setSelectedItem ( " espace " ) ;
if ( nodCSV . getAttributs ( ) . get ( " separator " ) . equals ( " \ t " ) ) comboBoxSeparateur . setSelectedItem ( " tabulation " ) ;
comboBoxSeparateur . setBounds ( 457 , 74 , 159 , 22 ) ;
panelCSV . add ( comboBoxSeparateur ) ;
JLabel lblveuillezSaisirLes = new JLabel ( " <html><b>Veuillez saisir des quatre noms des champs.</b><br> \ r \ nSi vous exportez le fichier depuis moodle, faite correspondre les noms des 4 champs ci-dessous avec celui de votre fichier.</html> " ) ;
lblveuillezSaisirLes . setVerticalAlignment ( SwingConstants . TOP ) ;
lblveuillezSaisirLes . setHorizontalAlignment ( SwingConstants . LEFT ) ;
lblveuillezSaisirLes . setFont ( new Font ( " Tahoma " , Font . PLAIN , 14 ) ) ;
lblveuillezSaisirLes . setBounds ( 10 , 120 , 691 , 60 ) ;
panelCSV . add ( lblveuillezSaisirLes ) ;
JLabel lblNewLabel_3 = new JLabel ( " Champ, nom de l'étudiant " ) ;
lblNewLabel_3 . setFont ( new Font ( " Tahoma " , Font . BOLD , 12 ) ) ;
lblNewLabel_3 . setBounds ( 42 , 210 , 186 , 20 ) ;
panelCSV . add ( lblNewLabel_3 ) ;
node nodImportMoodle = nodCSV . retourneFirstEnfantsByName ( " import_moodle " ) ;
if ( nodImportMoodle = = null ) {
JOptionPane . showMessageDialog ( null , " Problème avec le fichier d'analyse.<br>le node import_moodle n'est pas dans le fichier d'analyse. " ) ;
}
textFieldNomEtudiant = new JTextField ( ) ;
textFieldNomEtudiant . setFont ( new Font ( " Tahoma " , Font . BOLD , 12 ) ) ;
textFieldNomEtudiant . setColumns ( 10 ) ;
textFieldNomEtudiant . setBounds ( 233 , 210 , 200 , 22 ) ;
textFieldNomEtudiant . setText ( nodImportMoodle . getAttributs ( ) . get ( " name " ) ) ;
panelCSV . add ( textFieldNomEtudiant ) ;
JLabel lblNewLabel_3_1 = new JLabel ( " Champ, prénom de l'étudiant " ) ;
lblNewLabel_3_1 . setFont ( new Font ( " Tahoma " , Font . BOLD , 12 ) ) ;
lblNewLabel_3_1 . setBounds ( 42 , 260 , 186 , 20 ) ;
panelCSV . add ( lblNewLabel_3_1 ) ;
textFieldPrenomEtudiant = new JTextField ( ) ;
textFieldPrenomEtudiant . setFont ( new Font ( " Tahoma " , Font . BOLD , 12 ) ) ;
textFieldPrenomEtudiant . setColumns ( 10 ) ;
textFieldPrenomEtudiant . setBounds ( 233 , 260 , 200 , 22 ) ;
textFieldPrenomEtudiant . setText ( nodImportMoodle . getAttributs ( ) . get ( " firstname " ) ) ;
panelCSV . add ( textFieldPrenomEtudiant ) ;
JLabel lblNewLabel_3_1_1 = new JLabel ( " Champ, email de l'étudiant " ) ;
lblNewLabel_3_1_1 . setFont ( new Font ( " Tahoma " , Font . BOLD , 12 ) ) ;
lblNewLabel_3_1_1 . setBounds ( 42 , 310 , 186 , 20 ) ;
panelCSV . add ( lblNewLabel_3_1_1 ) ;
textFieldEmail = new JTextField ( ) ;
textFieldEmail . setFont ( new Font ( " Tahoma " , Font . BOLD , 12 ) ) ;
textFieldEmail . setColumns ( 10 ) ;
textFieldEmail . setBounds ( 233 , 310 , 200 , 22 ) ;
textFieldEmail . setText ( nodImportMoodle . getAttributs ( ) . get ( " email " ) ) ;
panelCSV . add ( textFieldEmail ) ;
JLabel lblNewLabel_3_1_1_1 = new JLabel ( " Champ,numéro de l'étudiant " ) ;
lblNewLabel_3_1_1_1 . setFont ( new Font ( " Tahoma " , Font . BOLD , 12 ) ) ;
lblNewLabel_3_1_1_1 . setBounds ( 42 , 360 , 186 , 20 ) ;
panelCSV . add ( lblNewLabel_3_1_1_1 ) ;
textFieldIDEtudiant = new JTextField ( ) ;
textFieldIDEtudiant . setFont ( new Font ( " Tahoma " , Font . BOLD , 12 ) ) ;
textFieldIDEtudiant . setColumns ( 10 ) ;
textFieldIDEtudiant . setBounds ( 233 , 360 , 200 , 22 ) ;
textFieldIDEtudiant . setText ( nodImportMoodle . getAttributs ( ) . get ( " id " ) ) ;
panelCSV . add ( textFieldIDEtudiant ) ;
2022-06-14 16:39:05 +02:00
2022-06-13 21:56:16 +02:00
2022-06-14 16:39:05 +02:00
//*********************************************************
//** ZIP **
//*********************************************************
2022-06-13 21:56:16 +02:00
JPanel panelZip = new JPanel ( ) ;
panelZip . setLayout ( null ) ;
2022-06-14 16:39:05 +02:00
tabbedPane . addTab ( " ZIP " , img2 , panelZip , null ) ;
node nodZIP = commandes . sujet . retourneFirstEnfantsByName ( " zip " ) ;
if ( nodZIP = = null ) {
JOptionPane . showMessageDialog ( null , " Problème avec le fichier d'analyse.<br>Le node zip n'est pas dans le fichier. " ) ;
dispose ( ) ;
return ;
}
JLabel lblZIP = new JLabel ( " <html>Ces paramètres permettent de réaliser les archives au format ZIP contenant les feedbacks des étudiants.<br> \ r \ nCes paramètres sont enregistrés dans le fichier d'analyse.</html> " ) ;
lblZIP . setHorizontalAlignment ( SwingConstants . LEFT ) ;
lblZIP . setVerticalAlignment ( SwingConstants . TOP ) ;
lblZIP . setFont ( new Font ( " Tahoma " , Font . PLAIN , 14 ) ) ;
lblZIP . setBounds ( 10 , 10 , 691 , 46 ) ;
panelZip . add ( lblZIP ) ;
JLabel lblSize = new JLabel ( " Taille maximale (Mo) " ) ;
lblSize . setFont ( new Font ( " Tahoma " , Font . BOLD , 12 ) ) ;
lblSize . setBounds ( 60 , 96 , 134 , 20 ) ;
panelZip . add ( lblSize ) ;
textFieldSize = new JTextField ( ) ;
textFieldSize . setFont ( new Font ( " Tahoma " , Font . BOLD , 12 ) ) ;
textFieldSize . setBounds ( 198 , 94 , 86 , 22 ) ;
Integer size = 0 ;
try {
size = Integer . valueOf ( nodZIP . getAttributs ( ) . get ( " size " ) ) ;
size = size / 1000000 ;
size = size + 2 ;
} catch ( Exception e ) {
JOptionPane . showInternalMessageDialog ( null , " Il y a un problème avec la taille de l'archive dans le fichier d'analyse. " ) ;
dispose ( ) ;
return ;
}
textFieldSize . setText ( String . valueOf ( size ) ) ;
textFieldSize . setColumns ( 10 ) ;
panelZip . add ( textFieldSize ) ;
JLabel lblNewLabel_1_1 = new JLabel ( " Nom de l'archive " ) ;
lblNewLabel_1_1 . setFont ( new Font ( " Tahoma " , Font . BOLD , 12 ) ) ;
lblNewLabel_1_1 . setBounds ( 60 , 164 , 134 , 20 ) ;
panelZip . add ( lblNewLabel_1_1 ) ;
textFieldNameZIP = new JTextField ( ) ;
textFieldNameZIP . setFont ( new Font ( " Tahoma " , Font . BOLD , 12 ) ) ;
textFieldNameZIP . setColumns ( 10 ) ;
textFieldNameZIP . setBounds ( 198 , 164 , 187 , 22 ) ;
textFieldNameZIP . setText ( nodZIP . getAttributs ( ) . get ( " nameZip " ) ) ;
panelZip . add ( textFieldNameZIP ) ;
JLabel lblNewLabel_1 = new JLabel ( " La taille maximale sur moodle est limitée à 50Mo. " ) ;
lblNewLabel_1 . setBounds ( 311 , 97 , 349 , 20 ) ;
panelZip . add ( lblNewLabel_1 ) ;
JLabel lblNewLabel_1_2 = new JLabel ( " Ne saisissez pas de caractère spéciaux. " ) ;
lblNewLabel_1_2 . setBounds ( 406 , 165 , 254 , 20 ) ;
panelZip . add ( lblNewLabel_1_2 ) ;
2022-06-13 21:56:16 +02:00
2022-06-14 16:39:05 +02:00
//*********************************************************
//** TRICHE **
//*********************************************************
2022-06-13 21:56:16 +02:00
JPanel panelPlagiarism = new JPanel ( ) ;
panelPlagiarism . setLayout ( null ) ;
2022-06-14 16:39:05 +02:00
tabbedPane . addTab ( " Triche " , img3 , panelPlagiarism , null ) ;
node nodTriche = commandes . sujet . retourneFirstEnfantsByName ( " plagiarism " ) ;
if ( nodTriche = = null ) {
JOptionPane . showMessageDialog ( null , " Problème avec le fichier d'analyse.<br>Le node plagiarism n'est pas dans le fichier. " ) ;
dispose ( ) ;
return ;
}
JLabel lbldurantVosContrles = new JLabel ( " <html><b><u>Pour vérifier d'éventuelles triches, les fichiers des étudiants doivent enregistrer les modifications</u>.</b><br><br> "
+ " Durant vos contrôles, des étudiants peuvent transmettre leurs fichiers à d'autres étudiants. Ils peuvent aussi réaliser des copiés et collés entre les fichiers.<br><br> "
+ " Pour limiter les risques, remettez à vos étudiants un fichier avec <b><u>le mode suivi des modifications activé et protégé</u></b> par un mot de passe.<br><br> "
+ " Si vous avez oublié de demander, dans vos consignes, de changer dans les options le nom et le prénom de l'auteur. "
+ " Alors, il est possible (mais très peu probable) qu'une modification <u>identique</u> se produise dans deux fichiers.<br><br> "
+ " Les paramètres ci-dessous permettent d'avoir une tolérances sur le signalement d'une éventuelle triche.</html> " ) ;
lbldurantVosContrles . setVerticalAlignment ( SwingConstants . TOP ) ;
lbldurantVosContrles . setHorizontalAlignment ( SwingConstants . LEFT ) ;
lbldurantVosContrles . setFont ( new Font ( " Tahoma " , Font . PLAIN , 14 ) ) ;
lbldurantVosContrles . setBounds ( 10 , 10 , 691 , 226 ) ;
panelPlagiarism . add ( lbldurantVosContrles ) ;
JLabel lblNbrCorrespondanceMinimale = new JLabel ( " Nombre minimale de correspondance entre fichier " ) ;
lblNbrCorrespondanceMinimale . setFont ( new Font ( " Tahoma " , Font . BOLD , 12 ) ) ;
lblNbrCorrespondanceMinimale . setBounds ( 40 , 247 , 313 , 20 ) ;
panelPlagiarism . add ( lblNbrCorrespondanceMinimale ) ;
textFieldMiniCorrespondance = new JTextField ( ) ;
textFieldMiniCorrespondance . setFont ( new Font ( " Tahoma " , Font . BOLD , 12 ) ) ;
textFieldMiniCorrespondance . setColumns ( 10 ) ;
textFieldMiniCorrespondance . setBounds ( 364 , 247 , 56 , 22 ) ;
textFieldMiniCorrespondance . setText ( nodTriche . getAttributs ( ) . get ( " number_match " ) ) ;
panelPlagiarism . add ( textFieldMiniCorrespondance ) ;
JLabel lblNbrMiniModification = new JLabel ( " Nombre minimale de modification " ) ;
lblNbrMiniModification . setFont ( new Font ( " Tahoma " , Font . BOLD , 12 ) ) ;
lblNbrMiniModification . setBounds ( 43 , 293 , 239 , 20 ) ;
panelPlagiarism . add ( lblNbrMiniModification ) ;
textFieldNbrMiniModification = new JTextField ( ) ;
textFieldNbrMiniModification . setFont ( new Font ( " Tahoma " , Font . BOLD , 12 ) ) ;
textFieldNbrMiniModification . setColumns ( 10 ) ;
textFieldNbrMiniModification . setBounds ( 364 , 293 , 56 , 22 ) ;
textFieldNbrMiniModification . setText ( nodTriche . getAttributs ( ) . get ( " mini_number_modification " ) ) ;
panelPlagiarism . add ( textFieldNbrMiniModification ) ;
JLabel lblNewLabel_2 = new JLabel ( " <html>L'étudiants n'a pas réaliser assez de travaux.<br> "
+ " si valuer = -1 alors n'est pas pris en compte.</html> " ) ;
lblNewLabel_2 . setFont ( new Font ( " Tahoma " , Font . PLAIN , 11 ) ) ;
lblNewLabel_2 . setVerticalAlignment ( SwingConstants . TOP ) ;
lblNewLabel_2 . setBounds ( 430 , 297 , 239 , 41 ) ;
panelPlagiarism . add ( lblNewLabel_2 ) ;
JLabel lblNewLabel_2_1 = new JLabel ( " Zéro = aucune tolérance " ) ;
lblNewLabel_2_1 . setFont ( new Font ( " Tahoma " , Font . PLAIN , 11 ) ) ;
lblNewLabel_2_1 . setBounds ( 430 , 247 , 239 , 20 ) ;
panelPlagiarism . add ( lblNewLabel_2_1 ) ;
JLabel lblNbrMaxiModificationSimul = new JLabel ( " Nombre maximale de modification simultanée " ) ;
lblNbrMaxiModificationSimul . setFont ( new Font ( " Tahoma " , Font . BOLD , 12 ) ) ;
lblNbrMaxiModificationSimul . setBounds ( 40 , 373 , 313 , 20 ) ;
panelPlagiarism . add ( lblNbrMaxiModificationSimul ) ;
textFieldMaxiModificationSimul = new JTextField ( ) ;
textFieldMaxiModificationSimul . setFont ( new Font ( " Tahoma " , Font . BOLD , 12 ) ) ;
textFieldMaxiModificationSimul . setColumns ( 10 ) ;
textFieldMaxiModificationSimul . setBounds ( 364 , 373 , 56 , 22 ) ;
textFieldMaxiModificationSimul . setText ( nodTriche . getAttributs ( ) . get ( " nombres_modifications_simultané_maxi " ) ) ;
panelPlagiarism . add ( textFieldMaxiModificationSimul ) ;
JLabel lblNewLabel_2_2 = new JLabel ( " <html>Evite le copié collé de tout l'exercice,<br>ou d'une partie de l'exercice.<br> "
+ " Cette valeur dépend de votre exercice.</html> " ) ;
lblNewLabel_2_2 . setFont ( new Font ( " Tahoma " , Font . PLAIN , 11 ) ) ;
lblNewLabel_2_2 . setVerticalAlignment ( SwingConstants . TOP ) ;
lblNewLabel_2_2 . setBounds ( 430 , 377 , 239 , 83 ) ;
panelPlagiarism . add ( lblNewLabel_2_2 ) ;
//*********************************************************
//** SIMILITUDE **
//*********************************************************
2022-06-13 21:56:16 +02:00
JPanel panelTextSimilarity = new JPanel ( ) ;
panelTextSimilarity . setLayout ( null ) ;
2022-06-14 16:39:05 +02:00
tabbedPane . addTab ( " Textes " , img4 , panelTextSimilarity , null ) ;
2022-06-13 21:56:16 +02:00
2022-06-14 16:39:05 +02:00
node nodSimilitude = commandes . sujet . retourneFirstEnfantsByName ( " text:similarity " ) ;
if ( nodSimilitude = = null ) {
JOptionPane . showMessageDialog ( null , " Problème avec le fichier d'analyse.<br>Le node text:similarity n'est pas dans le fichier. " ) ;
dispose ( ) ;
return ;
}
JLabel lbllesSimilitude = new JLabel ( " <html>Les méthodes par comparaison des chaînes de caractères utilisent <b><u>la distance de Levenshtein d=[0;1]</u></b>.<br> "
+ " Exemple : allContent= \" environ1 \" , ou \" value \" .<br><br> "
+ " La valeur du paramètre \" texte similitude \" par défaut est de <b>0.79</b> pour la méthode envirion, les fonctions dans les attributs de Writer.<br> "
+ " </html> " ) ;
lbllesSimilitude . setVerticalAlignment ( SwingConstants . TOP ) ;
lbllesSimilitude . setHorizontalAlignment ( SwingConstants . LEFT ) ;
lbllesSimilitude . setFont ( new Font ( " Tahoma " , Font . PLAIN , 14 ) ) ;
lbllesSimilitude . setBounds ( 10 , 10 , 691 , 96 ) ;
panelTextSimilarity . add ( lbllesSimilitude ) ;
JLabel lblNewLabel_4 = new JLabel ( " Texte similitude " ) ;
lblNewLabel_4 . setFont ( new Font ( " Tahoma " , Font . BOLD , 12 ) ) ;
lblNewLabel_4 . setBounds ( 57 , 159 , 160 , 20 ) ;
panelTextSimilarity . add ( lblNewLabel_4 ) ;
textFieldTextSimilitude = new JTextField ( ) ;
textFieldTextSimilitude . setFont ( new Font ( " Tahoma " , Font . BOLD , 12 ) ) ;
textFieldTextSimilitude . setBounds ( 199 , 159 , 86 , 22 ) ;
textFieldTextSimilitude . setText ( nodSimilitude . getAttributs ( ) . get ( " tolerance_text " ) ) ;
panelTextSimilarity . add ( textFieldTextSimilitude ) ;
textFieldTextSimilitude . setColumns ( 10 ) ;
JLabel lblNewLabel_5 = new JLabel ( " <html>C'est la distance minimale qu'il doit y avoir entre le texte (paragraphe, ensemble de paragraphe, valeur d'un attribut Writer) et le texte présent dans le fichier d'analyse.<br><br> "
+ " La distance est une valeur comprise entre 0 et 1.<br><br> "
+ " Si d=0 alors n'importe quel texte est accepté.<br> "
+ " Si d=1 alors aucune différence entre les textes.</html> " ) ;
lblNewLabel_5 . setFont ( new Font ( " Tahoma " , Font . PLAIN , 11 ) ) ;
lblNewLabel_5 . setVerticalAlignment ( SwingConstants . TOP ) ;
lblNewLabel_5 . setBounds ( 325 , 163 , 376 , 145 ) ;
panelTextSimilarity . add ( lblNewLabel_5 ) ;
//*********************************************************
//** COULEUR **
//*********************************************************
2022-06-13 21:56:16 +02:00
JPanel panelColor = new JPanel ( ) ;
panelColor . setLayout ( null ) ;
2022-06-14 16:39:05 +02:00
tabbedPane . addTab ( " Couleur " , img5 , panelColor , null ) ;
node nodColor = commandes . sujet . retourneFirstEnfantsByName ( " color " ) ;
if ( nodColor = = null ) {
JOptionPane . showMessageDialog ( null , " Problème avec le fichier d'analyse.<br>Le node color n'est pas dans le fichier. " ) ;
dispose ( ) ;
return ;
}
JLabel lblCouleur = new JLabel ( " <html>Dans les attributs de Writer contenant un code couleur, vous pouvez régler la tolérance de la couleur sur les trois canaux RVB.<br> "
+ " Il y a 255 nuances sur chaque canal.<br> "
+ " Par défaut les valeurs des tolérances sont réglées à 30 nuances.</html> " ) ;
lblCouleur . setVerticalAlignment ( SwingConstants . TOP ) ;
lblCouleur . setHorizontalAlignment ( SwingConstants . LEFT ) ;
lblCouleur . setFont ( new Font ( " Tahoma " , Font . PLAIN , 14 ) ) ;
lblCouleur . setBounds ( 10 , 10 , 691 , 97 ) ;
panelColor . add ( lblCouleur ) ;
JLabel lblRouge = new JLabel ( " Valeur de la tolérance sur les rouges " ) ;
lblRouge . setToolTipText ( " " ) ;
lblRouge . setFont ( new Font ( " Tahoma " , Font . BOLD , 12 ) ) ;
lblRouge . setBounds ( 30 , 165 , 250 , 20 ) ;
panelColor . add ( lblRouge ) ;
JLabel lblValeurDeLa = new JLabel ( " Valeur de la tolérance sur les verts " ) ;
lblValeurDeLa . setToolTipText ( " " ) ;
lblValeurDeLa . setFont ( new Font ( " Tahoma " , Font . BOLD , 12 ) ) ;
lblValeurDeLa . setBounds ( 30 , 218 , 250 , 20 ) ;
panelColor . add ( lblValeurDeLa ) ;
JLabel lblValeurDeLa_2 = new JLabel ( " Valeur de la tolérance sur les bleus " ) ;
lblValeurDeLa_2 . setToolTipText ( " " ) ;
lblValeurDeLa_2 . setFont ( new Font ( " Tahoma " , Font . BOLD , 12 ) ) ;
lblValeurDeLa_2 . setBounds ( 30 , 275 , 244 , 20 ) ;
panelColor . add ( lblValeurDeLa_2 ) ;
textFieldRouge = new JTextField ( ) ;
textFieldRouge . setFont ( new Font ( " Tahoma " , Font . BOLD , 12 ) ) ;
textFieldRouge . setBounds ( 292 , 165 , 86 , 22 ) ;
panelColor . add ( textFieldRouge ) ;
textFieldRouge . setText ( nodColor . getAttributs ( ) . get ( " tolerance_rouge " ) ) ;
textFieldRouge . setColumns ( 10 ) ;
textFieldVert = new JTextField ( ) ;
textFieldVert . setFont ( new Font ( " Tahoma " , Font . BOLD , 12 ) ) ;
textFieldVert . setColumns ( 10 ) ;
textFieldVert . setText ( nodColor . getAttributs ( ) . get ( " tolerance_vert " ) ) ;
textFieldVert . setBounds ( 292 , 219 , 86 , 22 ) ;
panelColor . add ( textFieldVert ) ;
textFieldBleu = new JTextField ( ) ;
textFieldBleu . setFont ( new Font ( " Tahoma " , Font . BOLD , 12 ) ) ;
textFieldBleu . setColumns ( 10 ) ;
textFieldBleu . setText ( nodColor . getAttributs ( ) . get ( " tolerance_bleu " ) ) ;
textFieldBleu . setBounds ( 292 , 276 , 86 , 22 ) ;
panelColor . add ( textFieldBleu ) ;
btnTestCouleur = new JButton ( " Test de tolérance " ) ;
btnTestCouleur . setBounds ( 396 , 353 , 173 , 23 ) ;
panelColor . add ( btnTestCouleur ) ;
2022-06-13 21:56:16 +02:00
2022-06-14 16:39:05 +02:00
textFieldTestCouleur = new JTextField ( ) ;
textFieldTestCouleur . setHorizontalAlignment ( SwingConstants . CENTER ) ;
textFieldTestCouleur . setText ( " #ff0000 " ) ;
textFieldTestCouleur . setFont ( new Font ( " Tahoma " , Font . BOLD , 12 ) ) ;
textFieldTestCouleur . setColumns ( 10 ) ;
textFieldTestCouleur . setBounds ( 292 , 354 , 86 , 22 ) ;
panelColor . add ( textFieldTestCouleur ) ;
JLabel lblValeurDeLa_2_1 = new JLabel ( " Tapez un code couleur hexadécimal " ) ;
lblValeurDeLa_2_1 . setToolTipText ( " " ) ;
lblValeurDeLa_2_1 . setFont ( new Font ( " Tahoma " , Font . BOLD , 12 ) ) ;
lblValeurDeLa_2_1 . setBounds ( 30 , 357 , 244 , 20 ) ;
panelColor . add ( lblValeurDeLa_2_1 ) ;
btnCouleurInitTest = new JButton ( " Couleur " ) ;
Color couleurInit = hex2Rgb ( textFieldTestCouleur . getText ( ) ) ;
btnCouleurInitTest . setBackground ( couleurInit ) ;
btnCouleurInitTest . setBounds ( 119 , 430 , 89 , 23 ) ;
panelColor . add ( btnCouleurInitTest ) ;
btnRougeMax = new JButton ( " Rouge max " ) ;
btnRougeMax . setBackground ( new Color ( 153 , 0 , 16 ) ) ;
btnRougeMax . setBounds ( 209 , 405 , 89 , 23 ) ;
panelColor . add ( btnRougeMax ) ;
btnRougeMini = new JButton ( " Rouge mini " ) ;
btnRougeMini . setBackground ( new Color ( 153 , 0 , 16 ) ) ;
btnRougeMini . setBounds ( 30 , 405 , 89 , 23 ) ;
panelColor . add ( btnRougeMini ) ;
btnVertMini = new JButton ( " Vert mini " ) ;
btnVertMini . setBackground ( new Color ( 153 , 0 , 16 ) ) ;
btnVertMini . setBounds ( 30 , 430 , 89 , 23 ) ;
panelColor . add ( btnVertMini ) ;
btnVertMax = new JButton ( " Vert max " ) ;
btnVertMax . setBackground ( new Color ( 153 , 0 , 16 ) ) ;
btnVertMax . setBounds ( 209 , 430 , 89 , 23 ) ;
panelColor . add ( btnVertMax ) ;
btnBleuMini = new JButton ( " Bleu mini " ) ;
btnBleuMini . setBackground ( new Color ( 153 , 0 , 16 ) ) ;
btnBleuMini . setBounds ( 30 , 454 , 89 , 23 ) ;
panelColor . add ( btnBleuMini ) ;
btnBleuMax = new JButton ( " Bleu max " ) ;
btnBleuMax . setBackground ( new Color ( 153 , 0 , 16 ) ) ;
btnBleuMax . setBounds ( 209 , 454 , 89 , 23 ) ;
panelColor . add ( btnBleuMax ) ;
btnCouleurMiniTotal = new JButton ( " Couleur " ) ;
btnCouleurMiniTotal . setBackground ( Color . RED ) ;
btnCouleurMiniTotal . setBounds ( 373 , 430 , 89 , 23 ) ;
panelColor . add ( btnCouleurMiniTotal ) ;
btnCouleurMaxiTotal = new JButton ( " Couleur " ) ;
btnCouleurMaxiTotal . setBackground ( Color . RED ) ;
btnCouleurMaxiTotal . setBounds ( 519 , 430 , 89 , 23 ) ;
panelColor . add ( btnCouleurMaxiTotal ) ;
JLabel lblNewLabel_6 = new JLabel ( " Couleur la plus claire " ) ;
lblNewLabel_6 . setFont ( new Font ( " Tahoma " , Font . PLAIN , 11 ) ) ;
lblNewLabel_6 . setBounds ( 512 , 409 , 102 , 14 ) ;
panelColor . add ( lblNewLabel_6 ) ;
JLabel lblNewLabel_6_1 = new JLabel ( " Couleur la plus sombre " ) ;
lblNewLabel_6_1 . setFont ( new Font ( " Tahoma " , Font . PLAIN , 11 ) ) ;
lblNewLabel_6_1 . setBounds ( 363 , 409 , 139 , 14 ) ;
panelColor . add ( lblNewLabel_6_1 ) ;
//*********************************************************
//** TRADUCTION **
//*********************************************************
2022-06-13 21:56:16 +02:00
JPanel panelTraduction = new JPanel ( ) ;
panelTraduction . setLayout ( null ) ;
2022-06-14 16:39:05 +02:00
tabbedPane . addTab ( " Traduction " , img6 , panelTraduction , null ) ;
JLabel lblCouleur_1 = new JLabel ( " <html>Dans le fichier d'analyse se trouve le node translation.<br> "
+ " Cliquez sur le bouton extraire le node.<br> "
+ " Vous pouvez manuellement ajouter des nodes enfants permettant la traduction des attributs d'analyseWriter.<br> "
+ " Cliquez sur le bouton ajouter vos traductions pour insérer vos modifications. "
+ " </html> " ) ;
lblCouleur_1 . setVerticalAlignment ( SwingConstants . TOP ) ;
lblCouleur_1 . setHorizontalAlignment ( SwingConstants . LEFT ) ;
lblCouleur_1 . setFont ( new Font ( " Tahoma " , Font . PLAIN , 14 ) ) ;
lblCouleur_1 . setBounds ( 10 , 10 , 691 , 104 ) ;
panelTraduction . add ( lblCouleur_1 ) ;
btnExtraire = new JButton ( " Extraire le node " ) ;
btnExtraire . setFont ( new Font ( " Tahoma " , Font . BOLD , 12 ) ) ;
btnExtraire . setBounds ( 99 , 201 , 194 , 48 ) ;
panelTraduction . add ( btnExtraire ) ;
btnAjouterVosTraductions = new JButton ( " Ajouter vos traductions " ) ;
btnAjouterVosTraductions . setFont ( new Font ( " Tahoma " , Font . BOLD , 12 ) ) ;
btnAjouterVosTraductions . setBounds ( 388 , 201 , 205 , 48 ) ;
panelTraduction . add ( btnAjouterVosTraductions ) ;
//*********************************************************
//** BOUTON VALIDATION MODIFICATION **
//*********************************************************
btnValiderModifications = new JButton ( " Valider les modifications " ) ;
btnValiderModifications . setFont ( new Font ( " Tahoma " , Font . BOLD , 14 ) ) ;
JPanel Pane = new JPanel ( ) ;
Pane . setLayout ( new GridLayout ( 1 , 2 , 0 , 0 ) ) ;
contentPane . add ( Pane , BorderLayout . SOUTH ) ;
btnReinit = new JButton ( " Réïnitialiser les valeurs " ) ;
btnReinit . setFont ( new Font ( " Tahoma " , Font . BOLD , 14 ) ) ;
Pane . add ( btnReinit ) ;
Pane . add ( btnValiderModifications ) ;
2022-06-13 21:56:16 +02:00
ListenerAction ( ) ;
2022-06-14 16:39:05 +02:00
if ( ! erreurFormatHexCouleur ( ) & & ! erreurFormatHexCouleur ( ) ) miseAJourCouleurTest ( ) ;
2022-06-13 21:56:16 +02:00
this . setVisible ( true ) ;
}
private void ListenerAction ( ) {
2022-06-14 16:39:05 +02:00
/ * *
* Bouton de validation des modification
* /
btnValiderModifications . addActionListener ( new ActionListener ( ) {
public void actionPerformed ( ActionEvent e ) {
if ( ! erreurValeursSaisies ( ) & & ! erreurToleranceCouleur ( ) ) {
//*** Validation du fichier CSV
node nodCSV = commandes . sujet . retourneFirstEnfantsByName ( " csv " ) ;
nodCSV . getAttributs ( ) . put ( " encoding " , comboBoxEncodage . getSelectedItem ( ) . toString ( ) ) ;
if ( comboBoxSeparateur . getSelectedItem ( ) . equals ( " point virgule " ) ) nodCSV . getAttributs ( ) . put ( " separator " , " ; " ) ;
if ( comboBoxSeparateur . getSelectedItem ( ) . equals ( " virgule " ) ) nodCSV . getAttributs ( ) . put ( " separator " , " , " ) ;
if ( comboBoxSeparateur . getSelectedItem ( ) . equals ( " espace " ) ) nodCSV . getAttributs ( ) . put ( " separator " , " " ) ;
if ( comboBoxSeparateur . getSelectedItem ( ) . equals ( " tabulation " ) ) nodCSV . getAttributs ( ) . put ( " separator " , " \ t " ) ;
node nodImport = commandes . sujet . retourneFirstEnfantsByName ( " import_moodle " ) ;
nodImport . getAttributs ( ) . put ( " name " , textFieldNomEtudiant . getText ( ) ) ;
nodImport . getAttributs ( ) . put ( " firstname " , textFieldPrenomEtudiant . getText ( ) ) ;
nodImport . getAttributs ( ) . put ( " email " , textFieldEmail . getText ( ) ) ;
nodImport . getAttributs ( ) . put ( " id " , textFieldIDEtudiant . getText ( ) ) ;
//*** Validation du ZIP
node nodZIP = commandes . sujet . retourneFirstEnfantsByName ( " zip " ) ;
int valueNumeric = Integer . valueOf ( textFieldSize . getText ( ) ) ;
valueNumeric = valueNumeric * 1000000 ;
valueNumeric = valueNumeric - 2000000 ;
nodZIP . getAttributs ( ) . put ( " size " , String . valueOf ( valueNumeric ) ) ;
nodZIP . getAttributs ( ) . put ( " nameZip " , textFieldNameZIP . getText ( ) ) ;
//** Validation triche
node nodTriche = commandes . sujet . retourneFirstEnfantsByName ( " plagiarism " ) ;
nodTriche . getAttributs ( ) . put ( " number_match " , textFieldMiniCorrespondance . getText ( ) ) ;
nodTriche . getAttributs ( ) . put ( " mini_number_modification " , textFieldNbrMiniModification . getText ( ) ) ;
nodTriche . getAttributs ( ) . put ( " nombres_modifications_simultané_maxi " , textFieldMaxiModificationSimul . getText ( ) ) ;
//** Validation similitude
node nodSimilitude = commandes . sujet . retourneFirstEnfantsByName ( " text:similarity " ) ;
nodSimilitude . getAttributs ( ) . put ( " tolerance_text " , textFieldTextSimilitude . getText ( ) ) ;
//** Validation des tolérance couleur
node nodColor = commandes . sujet . retourneFirstEnfantsByName ( " color " ) ;
nodColor . getAttributs ( ) . put ( " tolerance_rouge " , textFieldRouge . getText ( ) ) ;
nodColor . getAttributs ( ) . put ( " tolerance_vert " , textFieldVert . getText ( ) ) ;
nodColor . getAttributs ( ) . put ( " tolerance_bleu " , textFieldBleu . getText ( ) ) ;
JOptionPane . showMessageDialog ( null , " <html>Les informations ont bien été renseignées.<br> "
+ " N'oubliez pas d'enregistrer votre fichier d'analyse.</html> " ) ;
}
}
} ) ;
/ * *
* Bouton du test de couleur
* /
btnTestCouleur . addActionListener ( new ActionListener ( ) {
public void actionPerformed ( ActionEvent e ) {
if ( ! erreurFormatHexCouleur ( ) & & ! erreurFormatHexCouleur ( ) ) miseAJourCouleurTest ( ) ;
}
} ) ;
/ * *
* Bouton extraire le node translate
* /
btnExtraire . addActionListener ( new ActionListener ( ) {
public void actionPerformed ( ActionEvent e ) {
node nodeTransalte = commandes . sujet . retourneFirstEnfantsByName ( " translation " ) ;
JFileChooser fileChooser = new JFileChooser ( ) ;
fileChooser . setDialogTitle ( " Enregistrer sous... " ) ;
File file = null ;
fileChooser . setCurrentDirectory ( file ) ;
int userSelection = fileChooser . showSaveDialog ( null ) ;
if ( userSelection = = JFileChooser . APPROVE_OPTION ) {
File fileToSave = fileChooser . getSelectedFile ( ) ;
try {
Run . ecritureNodeEnXML ( nodeTransalte , fileToSave . getName ( ) , fileToSave . getPath ( ) . substring ( 0 , fileToSave . getPath ( ) . lastIndexOf ( " \\ " ) ) , " " ) ;
JOptionPane . showMessageDialog ( null , " Le fichier \" " + fileToSave . getName ( ) + " .xml \" a été renregistré. \ n \ nIl se trouve dans le dossier " + fileToSave . getPath ( ) ) ;
} catch ( IOException e1 ) {
e1 . printStackTrace ( ) ;
}
}
}
} ) ;
2022-06-13 21:56:16 +02:00
2022-06-14 16:39:05 +02:00
/ * *
* Ajoute les traductions personnalisées
* /
btnAjouterVosTraductions . addActionListener ( new ActionListener ( ) {
public void actionPerformed ( ActionEvent e ) {
JFileChooser fileChooser = new JFileChooser ( ) ;
fileChooser . setDialogTitle ( " Charger le node translate en mémoire " ) ;
FileNameExtensionFilter filter = new FileNameExtensionFilter ( " Fichier d'analyse .XML " , " xml " ) ;
fileChooser . setFileFilter ( filter ) ;
File file = null ;
fileChooser . setCurrentDirectory ( file ) ;
int userSelection = fileChooser . showSaveDialog ( null ) ;
if ( userSelection = = JFileChooser . APPROVE_OPTION ) {
File fileToSave = fileChooser . getSelectedFile ( ) ;
try {
file = new File ( fileToSave . getAbsolutePath ( ) ) ;
BufferedReader br = new BufferedReader (
new InputStreamReader (
new FileInputStream ( file . getAbsoluteFile ( ) ) , " UTF-8 " ) ) ;
String line ;
StringBuilder targetString = new StringBuilder ( ) ;
while ( ( line = br . readLine ( ) ) ! = null ) {
targetString . append ( line ) ;
}
node nodeSetting = commandes . sujet . retourneFirstEnfantsByName ( " setting " ) ;
node nodeTranslate2 = Run . XMLContent ( targetString . toString ( ) ) ;
if ( nodeTranslate2 . getNomElt ( ) . equals ( " translation " ) ) {
nodeSetting . getNodes ( ) . remove ( commandes . sujet . retourneFirstEnfantsByName ( " translation " ) ) ;
nodeSetting . getNodes ( ) . add ( nodeTranslate2 ) ;
JOptionPane . showMessageDialog ( null , " Chargement du nouveau node de traduction. " ) ;
}
} catch ( Exception e1 ) {
}
}
}
} ) ;
/ * *
* Réînitialiser les valeurs par défaut
* /
btnReinit . addActionListener ( new ActionListener ( ) {
public void actionPerformed ( ActionEvent e ) {
int a = JOptionPane . showConfirmDialog ( null , " Voulez-vous remettre toutes les valeurs par défauts? " , " Sélectionner un choix " , JOptionPane . YES_NO_OPTION ) ;
if ( a = = JOptionPane . YES_NO_OPTION ) {
node nodCSV = commandes . sujet . retourneFirstEnfantsByName ( " csv " ) ;
nodCSV . getAttributs ( ) . put ( " encoding " , " UTF-8 " ) ;
nodCSV . getAttributs ( ) . put ( " separator " , " ; " ) ;
node nodImportMoodle = nodCSV . retourneFirstEnfantsByName ( " import_moodle " ) ;
nodImportMoodle . getAttributs ( ) . put ( " name " , " nom " ) ;
nodImportMoodle . getAttributs ( ) . put ( " email " , " adresse " ) ;
nodImportMoodle . getAttributs ( ) . put ( " firstname " , " prenom " ) ;
nodImportMoodle . getAttributs ( ) . put ( " id " , " identification " ) ;
node nodZIP = commandes . sujet . retourneFirstEnfantsByName ( " zip " ) ;
nodZIP . getAttributs ( ) . put ( " size " , " 48000000 " ) ;
nodZIP . getAttributs ( ) . put ( " nameZip " , " feedbackMoodle " ) ;
node nodplagiarism = commandes . sujet . retourneFirstEnfantsByName ( " plagiarism " ) ;
nodplagiarism . getAttributs ( ) . put ( " number_match " , " 2 " ) ;
nodplagiarism . getAttributs ( ) . put ( " mini_number_modification " , " -1 " ) ;
nodplagiarism . getAttributs ( ) . put ( " nombres_modifications_simultané_maxi " , " 100 " ) ;
node nodSimilitude = commandes . sujet . retourneFirstEnfantsByName ( " text:similarity " ) ;
nodSimilitude . getAttributs ( ) . put ( " tolerance_text " , " 0.79 " ) ;
node nodColor = commandes . sujet . retourneFirstEnfantsByName ( " color " ) ;
nodColor . getAttributs ( ) . put ( " tolerance_rouge " , " 30 " ) ;
nodColor . getAttributs ( ) . put ( " tolerance_vert " , " 30 " ) ;
nodColor . getAttributs ( ) . put ( " tolerance_bleu " , " 30 " ) ;
// Relecture des nouvelles valeurs
comboBoxEncodage . setSelectedItem ( nodCSV . getAttributs ( ) . get ( " encoding " ) ) ;
if ( nodCSV . getAttributs ( ) . get ( " separator " ) . equals ( " ; " ) ) comboBoxSeparateur . setSelectedItem ( " point virgule " ) ;
if ( nodCSV . getAttributs ( ) . get ( " separator " ) . equals ( " , " ) ) comboBoxSeparateur . setSelectedItem ( " virgule " ) ;
if ( nodCSV . getAttributs ( ) . get ( " separator " ) . equals ( " " ) ) comboBoxSeparateur . setSelectedItem ( " espace " ) ;
if ( nodCSV . getAttributs ( ) . get ( " separator " ) . equals ( " \ t " ) ) comboBoxSeparateur . setSelectedItem ( " tabulation " ) ;
textFieldNomEtudiant . setText ( nodImportMoodle . getAttributs ( ) . get ( " name " ) ) ;
textFieldPrenomEtudiant . setText ( nodImportMoodle . getAttributs ( ) . get ( " firstname " ) ) ;
textFieldEmail . setText ( nodImportMoodle . getAttributs ( ) . get ( " email " ) ) ;
textFieldIDEtudiant . setText ( nodImportMoodle . getAttributs ( ) . get ( " id " ) ) ;
textFieldSize . setText ( nodZIP . getAttributs ( ) . get ( " size " ) ) ;
textFieldNameZIP . setText ( nodZIP . getAttributs ( ) . get ( " nameZip " ) ) ;
textFieldMiniCorrespondance . setText ( nodplagiarism . getAttributs ( ) . get ( " number_match " ) ) ;
textFieldNbrMiniModification . setText ( nodplagiarism . getAttributs ( ) . get ( " mini_number_modification " ) ) ;
textFieldMaxiModificationSimul . setText ( nodplagiarism . getAttributs ( ) . get ( " nombres_modifications_simultané_maxi " ) ) ;
textFieldTextSimilitude . setText ( nodSimilitude . getAttributs ( ) . get ( " tolerance_text " ) ) ;
textFieldRouge . setText ( nodColor . getAttributs ( ) . get ( " tolerance_rouge " ) ) ;
textFieldVert . setText ( nodColor . getAttributs ( ) . get ( " tolerance_vert " ) ) ;
textFieldBleu . setText ( nodColor . getAttributs ( ) . get ( " tolerance_bleu " ) ) ;
}
}
} ) ;
2022-06-13 21:56:16 +02:00
}
2022-06-15 08:23:18 +02:00
public static setting getInstance ( ) {
if ( instance = = null ) {
instance = new setting ( ) ;
}
2022-06-19 21:01:30 +02:00
instance . setVisible ( true ) ;
2022-06-15 08:23:18 +02:00
return instance ;
}
2022-06-14 16:39:05 +02:00
/ * *
* vérification des valeurs saisies dans la fenêtre setting .
* @return
* /
private boolean erreurValeursSaisies ( ) {
boolean erreur = false ;
//*******************
//** taille du zip **
//*******************
Integer valueNumeric = 0 ;
try {
valueNumeric = Integer . valueOf ( textFieldSize . getText ( ) ) ;
if ( valueNumeric < 2 ) {
JOptionPane . showInternalMessageDialog ( null , " La taille de l'archive doit être supérieure à 2 Mo. " ) ;
erreur = true ;
}
if ( valueNumeric > 200 ) {
JOptionPane . showInternalMessageDialog ( null , " La taille de l'archive doit être inférieure à 200 Mo. " ) ;
erreur = true ;
}
} catch ( Exception e1 ) {
JOptionPane . showInternalMessageDialog ( null , " Il y a un problème avec le format de la taille de l'archive. " ) ;
erreur = true ;
}
//******************************
//** Les valeurs de la triche **
//******************************
try {
valueNumeric = Integer . valueOf ( textFieldMiniCorrespondance . getText ( ) ) ;
if ( valueNumeric < 1 ) {
JOptionPane . showInternalMessageDialog ( null , " Le nombre de correspondance doit être supérieure à 1. " ) ;
erreur = true ;
}
if ( valueNumeric > 5 ) {
JOptionPane . showInternalMessageDialog ( null , " Le nombre de correspondance doit être inférieure à 5. " ) ;
erreur = true ;
}
} catch ( Exception e1 ) {
JOptionPane . showInternalMessageDialog ( null , " Il y a un problème avec le format du nombre de correspondance (triche). " ) ;
erreur = true ;
}
try {
valueNumeric = Integer . valueOf ( textFieldNbrMiniModification . getText ( ) ) ;
if ( valueNumeric < - 2 ) {
JOptionPane . showInternalMessageDialog ( null , " Le nombre minimal de modification dans le fichier doit être supérieure à -1. " ) ;
erreur = true ;
}
} catch ( Exception e1 ) {
JOptionPane . showInternalMessageDialog ( null , " Il y a un problème avec le format du nombre de modification minimale (triche). " ) ;
erreur = true ;
}
try {
valueNumeric = Integer . valueOf ( textFieldMaxiModificationSimul . getText ( ) ) ;
if ( valueNumeric < 0 ) {
JOptionPane . showInternalMessageDialog ( null , " Le nombre maximal de modification dans le fichier doit être une valeur positive non nulle. " ) ;
erreur = true ;
}
} catch ( Exception e1 ) {
JOptionPane . showInternalMessageDialog ( null , " Il y a un problème avec le format du nombre de modification maximale (triche). " ) ;
erreur = true ;
}
//**********************************
//** Les valeurs de la similitude **
//**********************************
try {
double valueNumericDouble = Double . valueOf ( textFieldTextSimilitude . getText ( ) ) ;
if ( valueNumericDouble < 0 ) {
JOptionPane . showInternalMessageDialog ( null , " La distance de Levenshtein doit être supérieure à 0. " ) ;
erreur = true ;
}
if ( valueNumericDouble > 1 ) {
JOptionPane . showInternalMessageDialog ( null , " La distance de Levenshtein doit être inférieure à 1. " ) ;
erreur = true ;
}
} catch ( Exception e1 ) {
JOptionPane . showInternalMessageDialog ( null , " Il y a un problème avec le format de la distance de Levenshtein. " ) ;
erreur = true ;
}
//***************************************************
//** caractères spéciaux dans les noms des valeurs **
//***************************************************
Pattern p = Pattern . compile ( " [^ \\ w] " ) ;
Matcher m = p . matcher ( textFieldNomEtudiant . getText ( ) ) ;
if ( m . find ( ) ) {
JOptionPane . showInternalMessageDialog ( null , " Il y a un caractère spécial dans le nom du champ, nom de l'étudiant (fichier CSV). " ) ;
erreur = true ;
}
m = p . matcher ( textFieldPrenomEtudiant . getText ( ) ) ;
if ( m . find ( ) ) {
JOptionPane . showInternalMessageDialog ( null , " Il y a un caractère spécial dans le nom du champ, prénom de l'étudiant (fichier CSV). " ) ;
erreur = true ;
}
m = p . matcher ( textFieldPrenomEtudiant . getText ( ) ) ;
if ( m . find ( ) ) {
JOptionPane . showInternalMessageDialog ( null , " Il y a un caractère spécial dans le nom du champ, prénom de l'étudiant (fichier CSV). " ) ;
erreur = true ;
}
m = p . matcher ( textFieldEmail . getText ( ) ) ;
if ( m . find ( ) ) {
JOptionPane . showInternalMessageDialog ( null , " Il y a un caractère spécial dans le nom du champ, email de l'étudiant (fichier CSV). " ) ;
erreur = true ;
}
m = p . matcher ( textFieldIDEtudiant . getText ( ) ) ;
if ( m . find ( ) ) {
JOptionPane . showInternalMessageDialog ( null , " Il y a un caractère spécial dans le nom du champ, numéro de l'étudiant (fichier CSV). " ) ;
erreur = true ;
}
m = p . matcher ( textFieldNameZIP . getText ( ) ) ;
if ( m . find ( ) ) {
JOptionPane . showInternalMessageDialog ( null , " Il y a un caractère spécial dans le nom de l'archive. " ) ;
erreur = true ;
}
return erreur ;
}
/ * *
* Vérification du format du code couleur pour le test de couleur .
* @return
* /
private boolean erreurFormatHexCouleur ( ) {
boolean erreur = false ;
Pattern p = Pattern . compile ( " ^#[a-fA-F0-9].{6}$ " ) ;
Matcher m = p . matcher ( textFieldTestCouleur . getText ( ) . toUpperCase ( ) ) ;
if ( m . find ( ) ) {
JOptionPane . showInternalMessageDialog ( null , " Ce n'est pas le format correct d'un code couleur hexdécimal. " ) ;
erreur = true ;
}
return erreur ;
}
/ * *
* Vérification tolérance de couleur .
* @return
* /
private boolean erreurToleranceCouleur ( ) {
boolean erreur = false ;
Integer valueNumeric = 0 ;
try {
valueNumeric = Integer . valueOf ( textFieldRouge . getText ( ) ) ;
if ( valueNumeric < 0 ) {
JOptionPane . showInternalMessageDialog ( null , " La tolérance sur le rouge doit être une valeur positive. " ) ;
erreur = true ;
}
if ( valueNumeric > 255 ) {
JOptionPane . showInternalMessageDialog ( null , " La tolérance sur le rouge doit être inférieur à 255. " ) ;
erreur = true ;
}
} catch ( Exception e1 ) {
JOptionPane . showInternalMessageDialog ( null , " Il y a un problème avec le format de la tolérance sur le rouge. " ) ;
erreur = true ;
}
try {
valueNumeric = Integer . valueOf ( textFieldVert . getText ( ) ) ;
if ( valueNumeric < 0 ) {
JOptionPane . showInternalMessageDialog ( null , " La tolérance sur le vert doit être une valeur positive. " ) ;
erreur = true ;
}
if ( valueNumeric > 255 ) {
JOptionPane . showInternalMessageDialog ( null , " La tolérance sur le vert doit être inférieur à 255. " ) ;
erreur = true ;
}
} catch ( Exception e1 ) {
JOptionPane . showInternalMessageDialog ( null , " Il y a un problème avec le format de la tolérance sur le vert. " ) ;
erreur = true ;
}
try {
valueNumeric = Integer . valueOf ( textFieldBleu . getText ( ) ) ;
if ( valueNumeric < 0 ) {
JOptionPane . showInternalMessageDialog ( null , " La tolérance sur le bleu doit être une valeur positive. " ) ;
erreur = true ;
}
if ( valueNumeric > 255 ) {
JOptionPane . showInternalMessageDialog ( null , " La tolérance sur le bleu doit être inférieur à 255. " ) ;
erreur = true ;
}
} catch ( Exception e1 ) {
JOptionPane . showInternalMessageDialog ( null , " Il y a un problème avec le format de la tolérance sur le bleu. " ) ;
erreur = true ;
}
return erreur ;
}
/ * *
*
* @param colorStr
* @return
* /
public static Color hex2Rgb ( String colorStr ) {
return new Color (
Integer . valueOf ( colorStr . substring ( 1 , 3 ) , 16 ) ,
Integer . valueOf ( colorStr . substring ( 3 , 5 ) , 16 ) ,
Integer . valueOf ( colorStr . substring ( 5 , 7 ) , 16 ) ) ;
}
/ * *
*
* @param couleur
* @return
* /
public static String Rgb2hex ( Color couleur ) {
return String . format ( " #%02x%02x%02x " , couleur . getRed ( ) , couleur . getGreen ( ) , couleur . getBlue ( ) ) ;
}
/ * *
* Mise à jour du test de couleur
* /
private void miseAJourCouleurTest ( ) {
if ( ! erreurFormatHexCouleur ( ) & & ! erreurToleranceCouleur ( ) ) {
Color couleurInit = hex2Rgb ( textFieldTestCouleur . getText ( ) ) ;
btnCouleurInitTest . setBackground ( couleurInit ) ;
btnCouleurInitTest . setText ( textFieldTestCouleur . getText ( ) ) ;
int couleurMaxRouge = couleurInit . getRed ( ) + Integer . valueOf ( textFieldRouge . getText ( ) ) ;
if ( couleurMaxRouge > 255 ) couleurMaxRouge = 255 ;
Color couleurRougeMaxi = new Color ( couleurMaxRouge , couleurInit . getGreen ( ) , couleurInit . getBlue ( ) ) ;
btnRougeMax . setBackground ( couleurRougeMaxi ) ;
btnRougeMax . setText ( Rgb2hex ( couleurRougeMaxi ) ) ;
int couleurMiniRouge = couleurInit . getRed ( ) - Integer . valueOf ( textFieldRouge . getText ( ) ) ;
if ( couleurMiniRouge < 0 ) couleurMiniRouge = 0 ;
Color couleurRougeMini = new Color ( couleurMiniRouge , couleurInit . getGreen ( ) , couleurInit . getBlue ( ) ) ;
btnRougeMini . setBackground ( couleurRougeMini ) ;
btnRougeMini . setText ( Rgb2hex ( couleurRougeMini ) ) ;
int couleurMaxVert = couleurInit . getGreen ( ) + Integer . valueOf ( textFieldVert . getText ( ) ) ;
if ( couleurMaxVert > 255 ) couleurMaxVert = 255 ;
Color couleurVertMaxi = new Color ( couleurInit . getRed ( ) , couleurMaxVert , couleurInit . getBlue ( ) ) ;
btnVertMax . setBackground ( couleurVertMaxi ) ;
btnVertMax . setText ( Rgb2hex ( couleurVertMaxi ) ) ;
int couleurMiniVert = couleurInit . getGreen ( ) - Integer . valueOf ( textFieldVert . getText ( ) ) ;
if ( couleurMiniVert < 0 ) couleurMiniVert = 0 ;
Color couleurVertMini = new Color ( couleurInit . getRed ( ) , couleurMiniVert , couleurInit . getBlue ( ) ) ;
btnVertMini . setBackground ( couleurVertMini ) ;
btnVertMini . setText ( Rgb2hex ( couleurVertMini ) ) ;
int couleurMaxBleu = couleurInit . getBlue ( ) + Integer . valueOf ( textFieldBleu . getText ( ) ) ;
if ( couleurMaxBleu > 255 ) couleurMaxBleu = 255 ;
Color couleurBleuMaxi = new Color ( couleurInit . getRed ( ) , couleurInit . getGreen ( ) , couleurMaxBleu ) ;
btnBleuMax . setBackground ( couleurBleuMaxi ) ;
btnBleuMax . setText ( Rgb2hex ( couleurBleuMaxi ) ) ;
int couleurMiniBleu = couleurInit . getBlue ( ) - Integer . valueOf ( textFieldBleu . getText ( ) ) ;
if ( couleurMiniBleu < 0 ) couleurMiniBleu = 0 ;
Color couleurBleuMini = new Color ( couleurInit . getRed ( ) , couleurInit . getGreen ( ) , couleurMiniBleu ) ;
btnBleuMini . setBackground ( couleurBleuMini ) ;
btnBleuMini . setText ( Rgb2hex ( couleurBleuMini ) ) ;
Color couleurMaxi = new Color ( couleurMaxRouge , couleurMaxVert , couleurMaxBleu ) ;
btnCouleurMaxiTotal . setBackground ( couleurMaxi ) ;
btnCouleurMaxiTotal . setText ( Rgb2hex ( couleurMaxi ) ) ;
Color couleurMini = new Color ( couleurMiniRouge , couleurMiniVert , couleurMiniBleu ) ;
btnCouleurMiniTotal . setBackground ( couleurMini ) ;
btnCouleurMiniTotal . setText ( Rgb2hex ( couleurMini ) ) ;
}
}
2022-06-13 21:56:16 +02:00
}
2022-06-14 16:39:05 +02:00