package app; import java.awt.BorderLayout; import javax.swing.ImageIcon; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.border.EmptyBorder; import javax.swing.filechooser.FileNameExtensionFilter; import MEPTL.commandes; import MEPTL.verificationFichierAnalyse; import cXML.Run; 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; import javax.swing.JFileChooser; import javax.swing.DefaultComboBoxModel; import javax.swing.JTextField; import javax.swing.JButton; import java.awt.event.ActionListener; 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; import java.awt.event.ActionEvent; import java.awt.GridLayout; import java.awt.Color; import javax.swing.UIManager; public class setting extends JFrame { /** * */ private static final long serialVersionUID = 1L; private JPanel contentPane; private JTextField textFieldNomEtudiant; private JTextField textFieldPrenomEtudiant; private JTextField textFieldEmail; private JTextField textFieldIDEtudiant; private JComboBox comboBoxSeparateur; private JComboBox comboBoxEncodage; 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; // Bouton couleur de test JButton btnCouleurInitTest; JButton btnRougeMax; JButton btnRougeMini; JButton btnVertMax; JButton btnVertMini; JButton btnBleuMini; JButton btnBleuMax; JButton btnCouleurMiniTotal; JButton btnCouleurMaxiTotal; JButton btnAjouterVosTraductions; /** * 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); 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") ); //********************************************************* //** CSV ** //********************************************************* JPanel panelCSV = new JPanel(); tabbedPane.addTab("CSV", img1, panelCSV, null); panelCSV.setLayout(null); node nodCSV = commandes.sujet.retourneFirstEnfantsByName("csv"); if(nodCSV==null) { JOptionPane.showMessageDialog(null, "Problème avec le fichier d'analyse.
Le node csv n'est pas dans le fichier."); dispose(); return; } JLabel lblNewLabel = new JLabel("Les paramètres du fichier CSV permettent, d'écrire et d'importer les notes des étudiants dans le CMS moodle.
\r\nCes paramètres seront enregistrés dans le fichier d'analyse."); lblNewLabel.setVerticalAlignment(SwingConstants.TOP); lblNewLabel.setFont(new Font("Tahoma", Font.PLAIN, 14)); lblNewLabel.setHorizontalAlignment(SwingConstants.LEFT); lblNewLabel.setBounds(10, 10, 691, 46); 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(); comboBoxEncodage.setModel(new DefaultComboBoxModel(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(); comboBoxSeparateur.setModel(new DefaultComboBoxModel(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("Veuillez saisir des quatre noms des champs.
\r\nSi vous exportez le fichier depuis moodle, faite correspondre les noms des 4 champs ci-dessous avec celui de votre fichier."); 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.
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); //********************************************************* //** ZIP ** //********************************************************* JPanel panelZip = new JPanel(); panelZip.setLayout(null); 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.
Le node zip n'est pas dans le fichier."); dispose(); return; } JLabel lblZIP = new JLabel("Ces paramètres permettent de réaliser les archives au format ZIP contenant les feedbacks des étudiants.
\r\nCes paramètres sont enregistrés dans le fichier d'analyse."); 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); //********************************************************* //** TRICHE ** //********************************************************* JPanel panelPlagiarism = new JPanel(); panelPlagiarism.setLayout(null); 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.
Le node plagiarism n'est pas dans le fichier."); dispose(); return; } JLabel lbldurantVosContrles = new JLabel("Pour vérifier d'éventuelles triches, les fichiers des étudiants doivent enregistrer les modifications.

" + "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.

" + "Pour limiter les risques, remettez à vos étudiants un fichier avec le mode suivi des modifications activé et protégé par un mot de passe.

" + "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 identique se produise dans deux fichiers.

" + "Les paramètres ci-dessous permettent d'avoir une tolérances sur le signalement d'une éventuelle triche."); 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("L'étudiants n'a pas réaliser assez de travaux.
" + "si valuer = -1 alors n'est pas pris en compte."); 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("Evite le copié collé de tout l'exercice,
ou d'une partie de l'exercice.
" + "Cette valeur dépend de votre exercice."); 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 ** //********************************************************* JPanel panelTextSimilarity = new JPanel(); panelTextSimilarity.setLayout(null); tabbedPane.addTab("Textes", img4, panelTextSimilarity, null); node nodSimilitude = commandes.sujet.retourneFirstEnfantsByName("text:similarity"); if(nodSimilitude==null) { JOptionPane.showMessageDialog(null, "Problème avec le fichier d'analyse.
Le node text:similarity n'est pas dans le fichier."); dispose(); return; } JLabel lbllesSimilitude = new JLabel("Les méthodes par comparaison des chaînes de caractères utilisent la distance de Levenshtein d=[0;1].
" + "Exemple : allContent=\"environ1\", ou \"value\".

" + "La valeur du paramètre \"texte similitude\" par défaut est de 0.79 pour la méthode envirion, les fonctions dans les attributs de Writer.
" + ""); 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("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.

" + "La distance est une valeur comprise entre 0 et 1.

" + "Si d=0 alors n'importe quel texte est accepté.
" + "Si d=1 alors aucune différence entre les textes."); 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 ** //********************************************************* JPanel panelColor = new JPanel(); panelColor.setLayout(null); 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.
Le node color n'est pas dans le fichier."); dispose(); return; } JLabel lblCouleur = new JLabel("Dans les attributs de Writer contenant un code couleur, vous pouvez régler la tolérance de la couleur sur les trois canaux RVB.
" + "Il y a 255 nuances sur chaque canal.
" + "Par défaut les valeurs des tolérances sont réglées à 30 nuances."); 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); 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 ** //********************************************************* JPanel panelTraduction = new JPanel(); panelTraduction.setLayout(null); tabbedPane.addTab("Traduction", img6, panelTraduction, null); JLabel lblCouleur_1 = new JLabel("Dans le fichier d'analyse se trouve le node translation.
" + "Cliquez sur le bouton extraire le node.
" + "Vous pouvez manuellement ajouter des nodes enfants permettant la traduction des attributs d'analyseWriter.
" + "Cliquez sur le bouton ajouter vos traductions pour insérer vos modifications." + ""); 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); ListenerAction(); if(!erreurFormatHexCouleur()&&!erreurFormatHexCouleur()) miseAJourCouleurTest(); this.setVisible(true); } private void ListenerAction() { /** * 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, "Les informations ont bien été renseignées.
" + "N'oubliez pas d'enregistrer votre fichier d'analyse."); } } }); /** * 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(); } } } }); /** * 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")); } } }); } /** * 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)); } } }