diff --git a/analyseWriter.exe b/analyseWriter.exe index a5071b3..7ff05c7 100644 Binary files a/analyseWriter.exe and b/analyseWriter.exe differ diff --git a/analyseWriter.jar b/analyseWriter.jar index 9055418..121c8a6 100644 Binary files a/analyseWriter.jar and b/analyseWriter.jar differ diff --git a/src/action/actOpenHistoriqueEvaluation.java b/src/action/actOpenHistoriqueEvaluation.java index 62ccf25..cf42d44 100644 --- a/src/action/actOpenHistoriqueEvaluation.java +++ b/src/action/actOpenHistoriqueEvaluation.java @@ -16,6 +16,7 @@ import javax.swing.filechooser.FileSystemView; import MEPTL.commandes; import cXML.node; +import fenetres.SimpleTableDemo; import fenetres.chargeEvaluations; import fenetres.create; @@ -31,7 +32,8 @@ public class actOpenHistoriqueEvaluation extends AbstractAction{ public void actionPerformed(ActionEvent e) { nodeEvaluations(); if(commandes.evaluationsBase!=null) { - chargeEvaluations.getInstance(); +// chargeEvaluations.getInstance(); + new SimpleTableDemo(); }else { commandes.evaluationsBase = new node(); commandes.evaluationsBase.setNomElt("evaluations"); diff --git a/src/fenetres/SimpleTableDemo.java b/src/fenetres/SimpleTableDemo.java new file mode 100644 index 0000000..f990a86 --- /dev/null +++ b/src/fenetres/SimpleTableDemo.java @@ -0,0 +1,477 @@ +package fenetres; + +import java.awt.BorderLayout; +import java.awt.Color; +import java.awt.Component; +import java.awt.Dimension; +import java.awt.FlowLayout; +import java.awt.Font; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.io.BufferedReader; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.IOException; +import java.io.InputStreamReader; +import java.io.UnsupportedEncodingException; +import java.text.ParseException; +import java.util.Date; + +import javax.swing.Box; +import javax.swing.ImageIcon; +import javax.swing.JButton; +import javax.swing.JFrame; +import javax.swing.JLabel; +import javax.swing.JOptionPane; +import javax.swing.JPanel; +import javax.swing.JScrollPane; +import javax.swing.JTable; +import javax.swing.ListSelectionModel; +import javax.swing.event.ListSelectionEvent; +import javax.swing.event.ListSelectionListener; +import javax.swing.filechooser.FileSystemView; + +import MEPTL.commandes; +import MEPTL.meptl; +import MEPTL.verificationFichierAnalyse; +import cXML.Run; +import cXML.node; + +public class SimpleTableDemo extends JFrame { /** + * + */ + private static final long serialVersionUID = 1L; + private static SimpleTableDemo instance; + JTable table = new JTable(); + private JPanel panelHaut = new JPanel(); + private JPanel panelBas = new JPanel(); + JLabel lblInformationBaseEvluation = new JLabel(""); + private JButton btnSupprimeEvaluation = new JButton("Supprimer une évaluation"); + private JButton btnSaveEvaluation = new JButton("Enregistre l'évaluation actuelle"); + private JButton btnValide = new JButton("Charger l'évaluation"); + public static boolean isDispose = true; + int indexSelect=0; + ListSelectionModel lsm = null; + String[][] data = new String[0][5]; + String[] columnNames = {"Nom de l'évaluation","Date d'enregistrement","Titre de l'exercice","Propriété personnalisé Sujet","Nom du fichier d'analyse"}; + JScrollPane scrollPane = new JScrollPane(); + +public SimpleTableDemo() { + + + super(); + setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); + + setBounds(100, 100, 1200, 400); + 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 img = new ImageIcon(getClass().getResource("/evalwriter.png") ); + setIconImage(img.getImage()); + setTitle(commandes.Titre + " - La base de données des évaluations"); + + setLayout(new BorderLayout(2, 2)); + + + int NombreDeLigne = commandes.evaluationsBase.getNodes().size(); + data = new String[NombreDeLigne][5]; + + for(int i = 0 ; iDate dernière modification : " +calcul.formatDateWriter.DateEnClairFR( calcul.formatDateWriter.DateLibreOffice(commandes.evaluationsBase.getAttributs().get("date"))) + " -- Nombre d'évaluation : " + nombreEvluation); + add(panelHaut, BorderLayout.NORTH); + lblInformationBaseEvluation.setFont(new Font("Tahoma", Font.BOLD, 14)); + panelHaut.add(lblInformationBaseEvluation); + + + //*Détection de la ligne sélectionnée + table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); + ListSelectionModel rowSM = table.getSelectionModel(); + rowSM.addListSelectionListener(new ListSelectionListener() { + @Override + public void valueChanged(ListSelectionEvent e) { + //Ignore extra messages. + if (e.getValueIsAdjusting()) return; + + lsm = (ListSelectionModel)e.getSource(); + if (lsm.isSelectionEmpty()) { + System.out.println("No rows are selected."); + } else { + indexSelect = lsm.getMinSelectionIndex(); + System.out.println("Row " + indexSelect + + " is now selected."); + } + + } + }); + + ListenerAction(); + + setVisible(true); +} + + +public static SimpleTableDemo getInstance() { + if(chargeEvaluations.isDispose) instance = null; + if (instance == null) { + instance = new SimpleTableDemo(); + } + instance.setVisible(true); + isDispose=false; + return instance; +} + +private void ListenerAction() { + + /** + * Quitter le fenêtre.
+ */ + addWindowListener(new java.awt.event.WindowAdapter() { + @Override + public void windowClosing(java.awt.event.WindowEvent windowEvent) { + isDispose=true; + dispose(); + } + }); + + /** + * Bouton chargement de l'évaluation.
+ */ + btnValide.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + if(lsm!=null) { + if (!lsm.isSelectionEmpty()) { + indexSelect = lsm.getMinSelectionIndex(); + chargeEvaluationSelected(commandes.evaluationsBase.getNodes().get(indexSelect)); + isDispose=true; + dispose(); + } + } + } + }); + + + /** + * Bouton Sauvegarde de l'évaluation.
+ */ + btnSaveEvaluation.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + if(commandes.fichierAnalyseValide) { + + String name ="Nom de l'évaluation"; + + if(lsm!=null) { + if (!lsm.isSelectionEmpty()) { + indexSelect = lsm.getMinSelectionIndex(); + name = data[indexSelect][0]; + } + } + + + name = JOptionPane.showInputDialog(null,"Donner un nom à cette évaluation ?",name); + + if(!name.isBlank()) { + if(!isEvaluationExist(name)) { + commandes.evaluationsBase.getNodes().add(0, creationNodeEvaluation(new node(), name));; + }else { + creationNodeEvaluation(commandes.evaluationsBase.retourneFirstNodeByNameAndAttributValueExactStrict("evaluation", "name", name), name); + } + + //Mise à jour de la base de données + Date aujourdhui = new Date(); + commandes.evaluationsBase.getAttributs().put("version", commandes.version); + try { + commandes.evaluationsBase.getAttributs().put("date", calcul.formatDateWriter.DateLibreOffice(aujourdhui)); + ecritureBaseEvaluation(commandes.evaluationsBase); + isDispose=true; + dispose(); + getInstance(); + + } catch (ParseException | IOException e1) { + e1.printStackTrace(); + } + } + } + } + }); + + /** + * Bouton supprimer une évaluation.
+ */ + btnSupprimeEvaluation.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + if(lsm!=null) { + if (!lsm.isSelectionEmpty()) { + indexSelect = lsm.getMinSelectionIndex(); + commandes.evaluationsBase.getNodes().remove(indexSelect); + try { + ecritureBaseEvaluation(commandes.evaluationsBase); + isDispose=true; + dispose(); + getInstance(); + } catch (IOException e1) { + e1.printStackTrace(); + } + } + } + + } + }); + +} + + +/** + * charge en mémoire l'évaluation sélectionnée.
+ * @param evaluation + */ +private void chargeEvaluationSelected(node evaluation) { + + //* Charge le node sujet provisoirement + commandes.path = evaluation.getAttributs().get("path"); //Dossier des fichiers des étudiants + commandes.sujet = evaluation.retourneFirstEnfantsByName("fichier"); // Chargement provisoire du node sujet depuis la base + commandes.nameSujet = evaluation.getAttributs().get("analysis_filename"); + commandes.PathFilenameAnalysis = evaluation.getAttributs().get("PathFilenameAnalysis"); + + //** Les paramètres + commandes.version = evaluation.getAttributs().get("version"); + commandes.fichierStudentMoodle = Boolean.valueOf(evaluation.getAttributs().get("fichierStudentMoodle")); + commandes.sansFeeback = Boolean.valueOf(evaluation.getAttributs().get("sansFeeback")); + commandes.noDetail = Boolean.valueOf(evaluation.getAttributs().get("noDetail")); + commandes.noNote = Boolean.valueOf(evaluation.getAttributs().get("noNote")); + commandes.zipfeedback = Boolean.valueOf(evaluation.getAttributs().get("zipfeedback")); + commandes.verifHisto2 = Boolean.valueOf(evaluation.getAttributs().get("verifHisto2")); + commandes.ecritNoteCSV = Boolean.valueOf(evaluation.getAttributs().get("ecritNoteCSV")); + commandes.newLogo = Boolean.valueOf(evaluation.getAttributs().get("newLogo")); + commandes.noLogo = Boolean.valueOf(evaluation.getAttributs().get("noLogo")); + + commandes.fourniCSV = Boolean.valueOf(evaluation.getAttributs().get("fourniCSV")); + commandes.nameCSV = evaluation.getAttributs().get("nameCSV"); + + commandes.fourniCSV = Boolean.valueOf(evaluation.getAttributs().get("fourniCSV")); + commandes.nameSVG = evaluation.getAttributs().get("nameSVG"); + + + commandes.nodeCSV = evaluation.retourneFirstEnfantsByName("fileCSV"); + + commandes.contenuFichierSVG = evaluation.retourneFirstEnfantsByName("nodSVG").retourneLesContenusEnfants(""); + + commandes.fichierAnalyseValide = true; + + + + //* Rechercher la source + String CheminVersFileXML = ""; + if(commandes.os.contains("Win")) { + commandes.PathFilenameAnalysis.replaceAll("/", "\\"); // Sur Windows + CheminVersFileXML = commandes.PathFilenameAnalysis + "\\" + commandes.nameSujet; + + }else { + commandes.PathFilenameAnalysis.replaceAll("\\", "/"); // Sur Windows // Sur mac & Linux + CheminVersFileXML = commandes.PathFilenameAnalysis + "/" + commandes.nameSujet; + } + + File file = new File(CheminVersFileXML); + if(file.exists()) { + chargeLeNodeSujet(file); + commandes.path = evaluation.getAttributs().get("path"); //Recharge le chemin vers le dossier contenant les fichiers des étudiants + }else { + JFrame frame = new JFrame(); + JLabel texte = new JLabel("

Le fichier d'analyse de l'évaluation, " + commandes.nameSujet + ", a été renommé ou supprimé.


" + + "

Le fichier d'analyse de l'évaluation est récupéré depuis la base de données des évaluations.

"); + JOptionPane.showMessageDialog(frame, texte); + } + + + //** Remise à zéro de la base dans la mémoire de l'application + commandes.evaluationsBase = null; + + //** Affichage de la fenêtre + if(!evaluate.isDispose) { + evaluate.getInstance(); + }; + if(!create.isDispose) { + create.getInstance(); + }; + + isDispose=true; + +} + +/** + * Charge le fichier d'analyse de l'évaluation.
+ * @param file + */ +private void chargeLeNodeSujet(File file) { + + BufferedReader br; + try { + 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.node2(targetString); + node sujetLoad = new node(targetString.toString().replace("\t","").replace("\r", "").replace("\n", "")); + + // Vérification de la conformité du fichier d'analyse + if(!ChargeFichierXML.fichierSujetValide(sujetLoad)) { + JOptionPane.showMessageDialog(null, "Le fichier d'analyse n'est pas valide."); + }else { + commandes.initialiseParametresSettingProprietes(); + commandes.sujet = sujetLoad; + commandes.sujetSauvegarde = commandes.sujet.clone(); + //Chargement des paramètres du fichier d'analyse + System.out.println( "Chargement des paramètres du fichier d'analyse"); + meptl.chargementParametresFichierAnalyse(); + + // Rechercher des erreurs dans le fichier d'analyse + System.out.println( "Vérification du fichier d'analyse" ); + new verificationFichierAnalyse(); + } + + } catch (UnsupportedEncodingException e1) { + e1.printStackTrace(); + } catch (FileNotFoundException e1) { + e1.printStackTrace(); + } catch (Exception e) { + } + + } + + +private void ecritureBaseEvaluation(node evaluations) throws IOException { + File directory = new File(FileSystemView.getFileSystemView().getDefaultDirectory().getPath()); + Run.ecritureNodeEnXML(evaluations, "base_evaluations_analyseWriter.xml", directory.getAbsolutePath(), Run.TypeFile.Evaluation); +} + + +private boolean isEvaluationExist(String nameEvaluation) { + if(commandes.evaluationsBase.retourneFirstNodeByNameAndAttributValueExactStrict("evaluation", "name", nameEvaluation)!=null) return true; + return false; +} + + +private node creationNodeEvaluation(node evaluation, String name) { + evaluation.setNomElt("evaluation"); + Date aujourdhui = new Date(); + evaluation.getAttributs().put("version", commandes.version); + evaluation.getAttributs().put("name", name); + evaluation.getAttributs().put("PathFilenameAnalysis", commandes.PathFilenameAnalysis); + evaluation.getAttributs().put("path", commandes.path); + evaluation.getAttributs().put("fichierStudentMoodle", String.valueOf(commandes.fichierStudentMoodle)); + evaluation.getAttributs().put("sansFeeback", String.valueOf(commandes.sansFeeback) ); + evaluation.getAttributs().put("noDetail", String.valueOf(commandes.noDetail) ); + evaluation.getAttributs().put("noNote", String.valueOf(commandes.noNote) ); + evaluation.getAttributs().put("zipfeedback", String.valueOf(commandes.zipfeedback) ); + evaluation.getAttributs().put("verifHisto2", String.valueOf(commandes.verifHisto2) ); + evaluation.getAttributs().put("ecritNoteCSV", String.valueOf(commandes.ecritNoteCSV) ); + evaluation.getAttributs().put("newLogo", String.valueOf(commandes.newLogo) ); + evaluation.getAttributs().put("noLogo", String.valueOf(commandes.noLogo) ); + + //Supprime le node fichier s'il existe. + node nodremove = evaluation.retourneFirstEnfantsByName("fichier"); + if(!nodremove.isVide()) evaluation.getNodes().remove(nodremove); + + evaluation.getNodes().add(commandes.sujet); + + if(commandes.sujet.getAttributs().get("analysis_filename").contains(".xml")) { + evaluation.getAttributs().put("analysis_filename",commandes.sujet.getAttributs().get("analysis_filename")); + }else { + evaluation.getAttributs().put("analysis_filename",commandes.nameSujet); + } + + + evaluation.getAttributs().put("fourniCSV", String.valueOf(commandes.fourniCSV) ); + if(commandes.nameCSV!=null) { + evaluation.getAttributs().put("nameCSV", commandes.nameCSV ); + }else { + evaluation.getAttributs().put("nameCSV", ""); + } + + evaluation.getAttributs().put("fourniCSV", String.valueOf(commandes.fourniCSV) ); + if(commandes.nameSVG!=null) { + evaluation.getAttributs().put("nameSVG", commandes.nameSVG ); + }else { + evaluation.getAttributs().put("nameSVG", "" ); + } + + + //Supprime le node fichier s'il existe. + nodremove = evaluation.retourneFirstEnfantsByName("fileCSV"); + if(!nodremove.isVide()) evaluation.getNodes().remove(nodremove); + + evaluation.getNodes().add(commandes.nodeCSV); + + try { + evaluation.getAttributs().put("date", calcul.formatDateWriter.DateLibreOffice(aujourdhui)); + } catch (ParseException e) { + e.printStackTrace(); + } + + if(commandes.nameSVG!=null) { + if(!commandes.nameSVG.isBlank() && !commandes.contenuFichierSVG.isBlank()) { + node SVG = new node(); + SVG.setNomElt("nodSVG"); + SVG.setContenu(commandes.contenuFichierSVG); + evaluation.getNodes().add(SVG); + } + } + + return evaluation; + +} + +} diff --git a/src/fenetres/chargeEvaluations.java b/src/fenetres/chargeEvaluations.java index e8a457b..970a5a9 100644 --- a/src/fenetres/chargeEvaluations.java +++ b/src/fenetres/chargeEvaluations.java @@ -175,7 +175,7 @@ public class chargeEvaluations extends JFrame { String nombreEvluation = String.valueOf(commandes.evaluationsBase.getNodes().size()); - lblInformationBaseEvluation.setText("Date dernier enregistrement : " +calcul.formatDateWriter.DateEnClairFR( calcul.formatDateWriter.DateLibreOffice(commandes.evaluationsBase.getAttributs().get("date"))) + " -- Nombre d'évaluation : " + nombreEvluation); + lblInformationBaseEvluation.setText("Date dernière modification : " +calcul.formatDateWriter.DateEnClairFR( calcul.formatDateWriter.DateLibreOffice(commandes.evaluationsBase.getAttributs().get("date"))) + " -- Nombre d'évaluation : " + nombreEvluation); for(int i = 0 ; iDate dernier enregistrement : " + dateDernierEnregistrement + " -- Nombre d'évaluation : " + nombreEvluation); + lblInformationBaseEvluation.setText("Date dernière modification : " + dateDernierEnregistrement + " -- Nombre d'évaluation : " + nombreEvluation); for(int i = 0 ; i