From 124dfd8a71aa20237c56c560ef73adbb072852a4 Mon Sep 17 00:00:00 2001 From: martins Date: Tue, 15 Nov 2022 15:08:13 +0100 Subject: [PATCH] =?UTF-8?q?ajout=20en=20modification=20en=20temps=20r?= =?UTF-8?q?=C3=A9el?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- java/APIGroupe/Makefile | 25 +- .../Controller/ObservateurChangeGroupe.java | 2 +- .../Controller/ObservateurModifGroupe.java | 34 +- .../projetIHM2022FI2/Graphic/Model.java | 418 ------------------ .../projetIHM2022FI2/Graphic/Model/Model.java | 282 ++++++++++++ .../projetIHM2022FI2/Graphic/Util/BD.java | 377 ++++++++++++++++ .../Graphic/Util/Sauvegarde.java | 5 - .../Graphic/View/FenetreGroupe.java | 10 +- .../Graphic/View/FenetreSelectionEtu.java | 9 + .../projetIHM2022FI2/MNP/EtudiantNP.java | 4 +- .../projetIHM2022FI2/Test/TestTexteMNP.java | 2 +- 11 files changed, 729 insertions(+), 439 deletions(-) delete mode 100644 java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/Graphic/Model.java create mode 100644 java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/Graphic/Model/Model.java create mode 100644 java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/Graphic/Util/BD.java delete mode 100644 java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/Graphic/Util/Sauvegarde.java diff --git a/java/APIGroupe/Makefile b/java/APIGroupe/Makefile index 566075a..6668c42 100644 --- a/java/APIGroupe/Makefile +++ b/java/APIGroupe/Makefile @@ -97,6 +97,11 @@ ${BUILD}/MNP/AbstractChangementFactoryNP.class : ${SRC}/MNP/AbstractChangementFa ## Graphic ## +## Util ### + +${BUILD}/Graphic/Util/BD.class : ${SRC}/Graphic/Util/BD.java + ${JAVAC} ${JAVAC_OPTIONS} ${SRC}/Graphic/Util/BD.java + ## View ## ${BUILD}/Graphic/View/FenetreGroupe.class : ${SRC}/Graphic/View/FenetreGroupe.java \ ${BUILD}/Graphic/Controller/ObservateurFenetre.class \ @@ -116,13 +121,6 @@ ${BUILD}/Graphic/View/PanelEtudiant.class : ${SRC}/Graphic/View/PanelEtudiant.ja ${BUILD}/Graphic/View/Chargement.class : ${SRC}/Graphic/View/Chargement.java ${JAVAC} ${JAVAC_OPTIONS} ${SRC}/Graphic/View/Chargement.java - -${BUILD}/Graphic/Model.class : ${SRC}/Graphic/Model.java \ - ${BUILD}/Graphic/View/FenetreGroupe.class \ - ${BUILD}/Graphic/View/FenetreEtudiant.class \ - ${BUILD}/Graphic/View/Chargement.class - ${JAVAC} ${JAVAC_OPTIONS} ${SRC}/Graphic/Model.java - ${BUILD}/Graphic/View/FenetreSelectionEtu.class : ${SRC}/Graphic/View/FenetreSelectionEtu.java \ ${BUILD}/Graphic/Controller/SelecteurEtudiant.class \ ${BUILD}/Graphic/Controller/ActionListenerNouveauEtu.class @@ -148,6 +146,17 @@ ${BUILD}/Graphic/Controller/ActionListenerNouveauEtu.class : ${SRC}/Graphic/Cont ${JAVAC} ${JAVAC_OPTIONS} ${SRC}/Graphic/Controller/ActionListenerNouveauEtu.java ##.... + +##  Model ### + +${BUILD}/Graphic/Model/Model.class : ${SRC}/Graphic/Model/Model.java \ + ${BUILD}/Graphic/View/FenetreGroupe.class \ + ${BUILD}/Graphic/View/FenetreEtudiant.class \ + ${BUILD}/Graphic/View/Chargement.class \ + ${BUILD}/Graphic/Util/BD.class + ${JAVAC} ${JAVAC_OPTIONS} ${SRC}/Graphic/Model/Model.java + + ## TEST ## ${BUILD}/Test/TestTexteMNP.class : ${SRC}/Test/TestTexteMNP.java \ @@ -156,7 +165,7 @@ ${BUILD}/Graphic/Controller/ActionListenerNouveauEtu.class : ${SRC}/Graphic/Cont ${BUILD}/MNP/ChangementNP.class \ ${BUILD}/MNP/AbstractGroupeFactoryNP.class \ ${BUILD}/MNP/AbstractChangementFactoryNP.class \ - ${BUILD}/Graphic/Model.class + ${BUILD}/Graphic/Model/Model.class ${JAVAC} -Xlint:deprecation ${JAVAC_OPTIONS} ${SRC}/Test/TestTexteMNP.java # ## JARS ## diff --git a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/Graphic/Controller/ObservateurChangeGroupe.java b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/Graphic/Controller/ObservateurChangeGroupe.java index aa4bab8..52f7770 100644 --- a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/Graphic/Controller/ObservateurChangeGroupe.java +++ b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/Graphic/Controller/ObservateurChangeGroupe.java @@ -3,7 +3,7 @@ package fr.iutfbleau.projetIHM2022FI2.Graphic.Controller; import java.awt.event.*; import fr.iutfbleau.projetIHM2022FI2.API.Groupe; -import fr.iutfbleau.projetIHM2022FI2.Graphic.Model; +import fr.iutfbleau.projetIHM2022FI2.Graphic.Model.Model; public class ObservateurChangeGroupe implements ActionListener{ private Model m; diff --git a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/Graphic/Controller/ObservateurModifGroupe.java b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/Graphic/Controller/ObservateurModifGroupe.java index 2b8a3ab..6868968 100644 --- a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/Graphic/Controller/ObservateurModifGroupe.java +++ b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/Graphic/Controller/ObservateurModifGroupe.java @@ -5,7 +5,7 @@ import java.util.LinkedHashSet; import fr.iutfbleau.projetIHM2022FI2.API.*; import javax.swing.JOptionPane; import fr.iutfbleau.projetIHM2022FI2.API.Groupe; -import fr.iutfbleau.projetIHM2022FI2.Graphic.Model; +import fr.iutfbleau.projetIHM2022FI2.Graphic.Model.Model; import fr.iutfbleau.projetIHM2022FI2.Graphic.View.FenetreSelectionEtu; import javax.swing.*; import java.util.Set; @@ -51,7 +51,8 @@ public class ObservateurModifGroupe implements ActionListener{ }catch(NumberFormatException er){ JOptionPane.showMessageDialog(m.getFenetre(), "erreur dans le nombre de partition", "erreur", JOptionPane.ERROR_MESSAGE); } - }else{ + } + if(rep==JOptionPane.NO_OPTION){ try{ JPanel myPanel = new JPanel(); JTextField xField = new JTextField(5); @@ -99,7 +100,6 @@ public class ObservateurModifGroupe implements ActionListener{ if(e.getActionCommand()=="add"){ Set ajout=new LinkedHashSet<>(); JPanel myPanel=new FenetreSelectionEtu(this.groupe, ajout); - myPanel.setMaximumSize(this.m.getFenetre().getSize()); if(JOptionPane.showConfirmDialog(m.getFenetre(), new JScrollPane(myPanel), "Selectionner les étudiant a ajouter", JOptionPane.OK_CANCEL_OPTION) ==JOptionPane.YES_OPTION){ if(this.groupe.getMax()0){JOptionPane.showMessageDialog(m.getFenetre(), "erreur impossible d'ajouter "+i+" etudiants par manque de place dans le groupe de ses parents", "errer", JOptionPane.ERROR_MESSAGE);} } } + if(e.getActionCommand()=="créer une promo"){ + try{ + JPanel myPanel = new JPanel(); + JTextField xField = new JTextField(5); + JTextField zField = new JTextField(5); + JTextField yField = new JTextField(20); + myPanel.add(new JLabel("Nom:")); + myPanel.add(yField); + myPanel.add(Box.createHorizontalStrut(15)); + myPanel.add(new JLabel("Min:")); + myPanel.add(xField); + myPanel.add(new JLabel("Max:")); + myPanel.add(zField); + int result = JOptionPane.showConfirmDialog(m.getFenetre(), myPanel, + "Entrer le nombre et le nom de la promo", JOptionPane.OK_CANCEL_OPTION); + if (result == JOptionPane.OK_OPTION) { + int min=Integer.parseInt(xField.getText()); + int max=Integer.parseInt(zField.getText()); + if(zField.getText().length()==0){ + JOptionPane.showMessageDialog(m.getFenetre(), "erreur entre un nom", "erreur", JOptionPane.ERROR_MESSAGE); + }else{ + m.addPromo(min, max, zField.getText()); + } + } + }catch(NumberFormatException er){ + JOptionPane.showMessageDialog(m.getFenetre(), "erreur dans les nombres min et max", "erreur", JOptionPane.ERROR_MESSAGE); + } + } } } diff --git a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/Graphic/Model.java b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/Graphic/Model.java deleted file mode 100644 index 1fedfec..0000000 --- a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/Graphic/Model.java +++ /dev/null @@ -1,418 +0,0 @@ -package fr.iutfbleau.projetIHM2022FI2.Graphic; -import java.sql.PreparedStatement; -import java.sql.SQLException; -import java.util.Iterator; -import java.util.LinkedHashSet; -import java.util.LinkedList; -import java.util.Objects; -import java.util.Set; -import java.sql.Connection; -import org.mariadb.jdbc.*; -import java.sql.DriverManager; -import java.sql.ResultSet; -import javax.swing.JFrame; -import javax.swing.*; -import java.awt.*; - -import fr.iutfbleau.projetIHM2022FI2.API.AbstractGroupeFactory; -import fr.iutfbleau.projetIHM2022FI2.API.Etudiant; -import fr.iutfbleau.projetIHM2022FI2.API.Groupe; -import fr.iutfbleau.projetIHM2022FI2.API.TypeGroupe; -import fr.iutfbleau.projetIHM2022FI2.Graphic.Controller.ObservateurChangeGroupe; -import fr.iutfbleau.projetIHM2022FI2.Graphic.Controller.ObservateurFenetre; -import fr.iutfbleau.projetIHM2022FI2.Graphic.View.Chargement; -import fr.iutfbleau.projetIHM2022FI2.Graphic.View.FenetreEtudiant; -import fr.iutfbleau.projetIHM2022FI2.Graphic.View.FenetreGroupe; -import fr.iutfbleau.projetIHM2022FI2.MNP.AbstractGroupeFactoryNP; -import fr.iutfbleau.projetIHM2022FI2.MNP.EtudiantNP; -import fr.iutfbleau.projetIHM2022FI2.MNP.GroupeNP; - -/** - * Le Model de L'IHM - */ -public class Model{ - private FenetreGroupe fenGr; - private FenetreEtudiant fenEtu; - private AbstractGroupeFactory promo; - private JFrame fenetre; - public Model(){ - this.fenetre=new JFrame(); - this.fenetre.setSize(1200, 720); - this.fenetre.setLocation(100,100); - Chargement ch=new Chargement(); - this.fenetre.add(ch, BorderLayout.CENTER); - this.fenetre.setVisible(true); - this.promo=this.getPromo(ch); - if(this.promo==null){ - this.fenGr=new FenetreGroupe(null, this); - this.fenEtu=new FenetreEtudiant(null); - }else{ - this.fenGr=new FenetreGroupe(this.promo.getPromotion(), this); - this.fenEtu=new FenetreEtudiant(this.promo.getPromotion()); - } - this.fenetre.dispose(); - this.fenetre=new JFrame(); - this.fenetre.setSize(1200, 720); - this.fenetre.setLocation(100,100); - this.fenetre.addWindowListener(new ObservateurFenetre()); - this.fenetre.setLayout(new GridLayout(1,2)); - this.fenetre.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE); - this.fenetre.setMinimumSize(this.fenetre.getSize()); - this.fenetre.add(this.fenGr); - JScrollPane scroll=new JScrollPane(this.fenEtu); - scroll.getVerticalScrollBar().setUnitIncrement(15); - this.fenetre.add(scroll); - this.fenetre.setVisible(true); - } - - /** - * Fonction permettant d'initialiser l'AbstractFactory de la promo - * avec la Base de donné - * @param Chargement: pour indiquer la progression du chargement - */ - private AbstractGroupeFactory getPromo(Chargement chargement){ - AbstractGroupeFactory agf=null; - //On se Connecte a la BD - try{ - Class.forName("org.mariadb.jdbc.Driver"); - try{ - Connection cnx = DriverManager.getConnection( - "jdbc:mariadb://dwarves.iut-fbleau.fr/chaignea", - "chaignea", "Chaigneauphpmyadmin"); - try{ - //on récupère le Groupe de la BD n'ayant pas de Parent (La promo donc) - PreparedStatement pst = cnx.prepareStatement( - "SELECT `id`, `nom`, `min`, `max`, `value`, `id-parent` FROM `Groupe` join `TYPE` on Groupe.Type=TYPE.name where Groupe.id=`Groupe`.`id-parent` ORDER BY Groupe.id ASC;"); - try{ - ResultSet rs = pst.executeQuery(); - rs=pst.executeQuery(); - try{ - //Si il existe bien une promotion - if(rs.first()){ - //On créer le groupe de promo - Groupe groupe=new GroupeNP(rs.getInt(1), rs.getString(2), rs.getInt(3), rs.getInt(4), TypeGroupe.getType(rs.getString(5)), null); - //On lui ajoute tout ses sous-groupe - this.addSousGroupe(groupe, cnx, chargement, 100); - //On créer la Factory - agf=new AbstractGroupeFactoryNP(groupe); - //On y ajoute les étudiants - this.addBDEtudiant(groupe, cnx, true); - }else{ - //Si aucune ligne et donc pas de promo: - this.promo=null; - } - }catch(SQLException e){ - System.out.println("erreur dans la prise de resultat"); - } - rs.close(); - }catch(SQLException e){ - System.out.println("erreur dans le resultat"); - } - pst.close(); - }catch(SQLException e){ - System.out.println("erreur dans la preparation"); - } - cnx.close(); - }catch(SQLException e){ - chargement.erreur(); - JOptionPane.showMessageDialog(this.fenetre, "erreur connection a la BD", "erreur connection", JOptionPane.YES_NO_OPTION); - } - }catch(ClassNotFoundException e){ - System.out.println("pilote non disponible"); - } - return agf; - } - /** - * Fonction recursive permettant de récuperrer les sous groupe a partir de la BD - * @param g le groupe - * @param cnx la connection a la BD (evite de la surcharger) - * @param Chargement pour indiquer la progression du chargement - * @param pourcent le pourcentage de ce groupe dans le chargement - */ - private void addSousGroupe(Groupe g, Connection cnx, Chargement ch, int pourcent){ - try{ - //On récupere les Groupe qui ont le parent :g - PreparedStatement pst= cnx.prepareStatement( - "SELECT `id`, `nom`, `min`, `max`, `value`, `id-parent` FROM `Groupe` join `TYPE` on Groupe.Type=TYPE.name where Groupe.`id-parent`=? and Groupe.id!=Groupe.`id-parent`;"); - try{ - pst.setString(1, String.valueOf(g.getId())); - ResultSet rs=pst.executeQuery(); - //on récupère le nombre de ligne - rs.last(); - int nbsous=rs.getRow(); - //si il n'y pas de sous-groupe - if(nbsous==0){ - //on ajoute le pourcentage de chargement de ce groupe - if(ch!=null) - ch.addPourcent(pourcent); - //La fonction est fini - rs.close(); - pst.close(); - return; - } - rs=pst.executeQuery(); - //autrement si le groupe as des sous groupe - try{ - while(rs.next()){ - //on les ajoute - Groupe nouveau=new GroupeNP(rs.getInt(1), rs.getString(2), rs.getInt(3), rs.getInt(4), TypeGroupe.getType(rs.getString(5)), g); - g.addSousGroupe(nouveau); - //on ajoute les sous groupe des sous-groupe - //le pourcentage diminue en fonction du nombre de sous-groupe - this.addSousGroupe(nouveau, cnx, ch, pourcent/nbsous); - } - }catch(SQLException e){ - System.out.println("erreur dans la prise de resultat"); - } - rs.close(); - }catch(SQLException e){ - System.out.println("erreur dans la préparation"); - } - pst.close(); - }catch(SQLException e){ - System.out.println("erreur debut requete"); - } - } - - /** - * Fonction recursive ajoutant les étudiant aux groupe de la promo - * @param g le groupe pour qui ajouter les Etudiant - * @param cnx la connection (evite de surcharger la BD) - */ - private void addBDEtudiant(Groupe g, Connection cnx, boolean recursif){ - try{ - //On récupère les etudiants contenue du groupe - PreparedStatement pst; - //Si c'est la promo - pst= cnx.prepareStatement("SELECT Etudiant.nom, Etudiant.prenom, Etudiant.id FROM `CONTIENT` JOIN Etudiant on CONTIENT.idEt=Etudiant.id WHERE CONTIENT.idGroupe=? ORDER BY Etudiant.id ASC"); - try{ - pst.setInt(1, g.getId()); - ResultSet rs=pst.executeQuery(); - try{ - //Pour tous les étudiants - while(rs.next()){ - boolean exist=false; - //autrement on recupere l'etudiant - for(Etudiant e: g.getPointPoint().getEtudiants()){ - if(e.getId()==rs.getInt(3)){ - exist=true; - g.addEtudiant(e); - break; - } - } - if(exist==false){ - g.addEtudiant(new EtudiantNP(rs.getString(1), rs.getString(2), rs.getInt(3))); - } - } - //on ajout les étudiants a tous les sous groupe - for(Groupe sous:g.getSousGroupes()){ - if(recursif==true) - this.addBDEtudiant(sous, cnx, true); - } - }catch(SQLException e){ - System.out.println("erreur dans la prise de resultat"); - } - rs.close(); - }catch(SQLException e){ - System.out.println("erreur dans la préparation"); - } - pst.close(); - }catch(SQLException e){ - System.out.println("erreur debut requete"); - } - } - - /** - * Fonction pour refresh/changer de groupe d'affichage - * @param g le groupe a afficher - */ - public void showGroupe(Groupe g){ - this.fenGr=new FenetreGroupe(g, this); - this.fenEtu=new FenetreEtudiant(g); - this.fenetre.getContentPane().removeAll(); - this.fenetre.add(this.fenGr); - JScrollPane scroll=new JScrollPane(this.fenEtu); - scroll.getVerticalScrollBar().setUnitIncrement(15); - this.fenetre.add(scroll); - this.fenetre.revalidate(); - } - /** - * getteur de la fenetre - * @return JFrame la fenetre - */ - public JFrame getFenetre() { - return fenetre; - } - /** - * Fonction pour supprimer un groupe - * @param g le groupe a supprimer - */ - public void delete(Groupe g){ - //On ne peut pas supprimer la promo - if(g==this.promo.getPromotion()){ - JOptionPane.showMessageDialog(this.fenetre, "impossible de supprimer la promotion", "alerte", JOptionPane.ERROR_MESSAGE); - return; - } - //autrement on récupere les groupe a supprimer par ordre avec une fonction recursive - //elle contiendra les sous-groupe remontant j'usqau groupe a supprimer - LinkedList file=new LinkedList<>(); - //On initialise la liste - this.deleteRecursif(file, g); - for(Groupe sup:file){ - //on supprime les groupe - this.promo.deleteGroupe(sup); - } - this.showGroupe(g.getPointPoint()); - } - - /** - * fonction recursive initialisant la liste ordonnée de tous les groupe a supprimer avant de supprimer ce groupe - * @param file la liste - * @param bedelete le groupe a supprimer - */ - private void deleteRecursif(LinkedList file, Groupe bedelete){ - //on parcour tous ses sous groupe - for(Groupe g: bedelete.getSousGroupes()){ - //qui eux aussi ajouterons leurs sous-groupe a la file - this.deleteRecursif(file, g); - } - // on ajoute le groupe (les sous-groupe ayant déja ajouter leur groupe) - file.add(bedelete); - } - - /** - * Fonction permetant de créer une partition d'un groupe - * @param g le groupe a partitionner - * @param n le nombre de partition - * @param name le nom des partition - */ - public void partition(Groupe g, int n, String name){ - this.promo.createPartition(g, name, n); - this.refresh(g); - this.fenGr.refresh(); - } - - /** - * Fonction permettant de créer un sous-groupe d'un groupe - * @param g le groupe parent - * @param name le nom du sous-groupe - * @param min le nombre min d'etudiant - * @param max le nombre max d'etudiant - * @param ajout la liste des étudiants a ajouter au groupe - */ - public void free(Groupe g, String name, int min, int max, Set ajout){ - //on creer le groupe - this.promo.createGroupe(g, name, min, max); - Groupe creer=null; - //on le recupere - for(Groupe gr:g.getSousGroupes()){ - if(gr.getName()==name){ - creer=gr; - break; - } - } - //on y ajoute les étudiant - int n=0; - for(Etudiant e:ajout){ - if(this.addEtudiant(creer, e)==false) - n++; - } - if(n>0) - JOptionPane.showMessageDialog(this.fenetre, "erreur impossible d'ajouter "+n+" etudiants par manque de place dans le groupe de ses parents", "erreur", JOptionPane.ERROR_MESSAGE); - //Si finalement avec les etudiants qui n'ont pas pus être ajouter le min n'est pas atteint - if(creer.getSize() file=new LinkedList<>(); + //On initialise la liste + this.deleteRecursif(file, g); + for(Groupe sup:file){ + //on supprime les groupe + this.promo.deleteGroupe(sup); + } + this.showGroupe(g.getPointPoint()); + } + + /** + * fonction recursive initialisant la liste ordonnée de tous les groupe a supprimer avant de supprimer ce groupe + * @param file la liste + * @param bedelete le groupe a supprimer + */ + private void deleteRecursif(LinkedList file, Groupe bedelete){ + //on parcour tous ses sous groupe + for(Groupe g: bedelete.getSousGroupes()){ + //qui eux aussi ajouterons leurs sous-groupe a la file + this.deleteRecursif(file, g); + } + // on ajoute le groupe (les sous-groupe ayant déja ajouter leur groupe) + file.add(bedelete); + } + + /** + * Fonction permetant de créer une partition d'un groupe + * @param g le groupe a partitionner + * @param n le nombre de partition + * @param name le nom des partition + */ + public void partition(Groupe g, int n, String name){ + this.promo.createPartition(g, name, n); + //On recherche le groupe Partitionner pour le sauvegarder dans la BD + Groupe creer; + for(Groupe gr: g.getSousGroupes()){ + if(gr.getName()==name){ + creer=gr; + break; + } + } + //On dis a la BD de sauvegarder ce groupe et tous ces sous Groupe + this.fenGr.setG(this.bd.refreshGroupe(g)); + this.fenGr.refresh(); + } + + /** + * Fonction permettant de créer un sous-groupe d'un groupe + * @param g le groupe parent + * @param name le nom du sous-groupe + * @param min le nombre min d'etudiant + * @param max le nombre max d'etudiant + * @param ajout la liste des étudiants a ajouter au groupe + */ + public void free(Groupe g, String name, int min, int max, Set ajout){ + //on creer le groupe + this.promo.createGroupe(g, name, min, max); + Groupe creer=null; + //on le recupere + for(Groupe gr:g.getSousGroupes()){ + if(gr.getName()==name){ + creer=gr; + break; + } + } + //on y ajoute les étudiant + int n=0; + for(Etudiant e:ajout){ + if(this.addEtudiant(creer, e)==false) + n++; + } + if(n>0) + JOptionPane.showMessageDialog(this.fenetre, "erreur impossible d'ajouter "+n+" etudiants par manque de place dans le groupe de ses parents", "erreur", JOptionPane.ERROR_MESSAGE); + //Si finalement avec les etudiants qui n'ont pas pus être ajouter le min n'est pas atteint + if(creer.getSize() it=new LinkedHashSet<>(); + for(Groupe gr:g.getSousGroupes()){ + it.add(gr); + } + for(Groupe gr:it){ + g.removeSousGroupe(gr); + } + Set et=new LinkedHashSet<>(); + for(Etudiant gr:g.getEtudiants()){ + et.add(gr); + } + for(Etudiant gr:et){ + g.removeEtudiant(gr); + } + this.addSousGroupe(g, cnx, null); + }else{ + if(g==g.getPointPoint()){ + g=null; + }else{ + g=this.refreshGroupe(g.getPointPoint(), cnx); + } + } + rs.close(); + pst.close(); + }catch(SQLException e){ + if(this.erreurCO()) + this.refreshGroupe(g, cnx); + } + return g; + } + + /** + * Refresh le groupe donnée pour le mettre a jour avec la Base de donnée + * Si le groupe n'existe plus on retourne le groupe parent le plus proche existant encore + * @param g le groupe a refresh + * @return le groupe refresh + */ + private Groupe refreshGroupe(Groupe g, Connection cnx, Chargement ch){ + try{ + PreparedStatement pst = cnx.prepareStatement( + "SELECT `id`, `nom`, `min`, `max`, `value`, `id-parent` FROM `Groupe` join `TYPE` on Groupe.Type=TYPE.name where Groupe.`id`=? OR Groupe.`id-parent`=? ORDER BY Groupe.id ASC;"); + pst.setString(1, String.valueOf(g.getId())); + pst.setString(2, String.valueOf(g.getId())); + ResultSet rs=pst.executeQuery(); + if(rs.first()){ + if(rs.getString(2)!=g.getName()){ + g.setName(rs.getString(2)); + } + Set it=new LinkedHashSet<>(); + for(Groupe gr:g.getSousGroupes()){ + it.add(gr); + } + for(Groupe gr:it){ + g.removeSousGroupe(gr); + } + Set et=new LinkedHashSet<>(); + for(Etudiant gr:g.getEtudiants()){ + et.add(gr); + } + for(Etudiant gr:et){ + g.removeEtudiant(gr); + } + this.addSousGroupe(g, cnx, ch); + }else{ + if(g==g.getPointPoint()){ + g=null; + }else{ + g=this.refreshGroupe(g.getPointPoint(), cnx); + } + } + rs.close(); + pst.close(); + }catch(SQLException e){ + if(this.erreurCO()) + this.refreshGroupe(g, cnx, ch); + } + return g; + } + + /** + * refresh le Groupe ainsi que ses etudiants + * @param g le groupe + * @return le groupe refresh/un parent si il a été refresh + */ + public Groupe refreshALL(Groupe g){ + Connection cnx = this.cnx(); + g=this.refreshGroupe(g, cnx); + Set et=new LinkedHashSet<>(); + for(Etudiant gr:g.getEtudiants()){ + et.add(gr); + } + for(Etudiant gr:et){ + g.removeEtudiant(gr); + } + this.addBDEtudiant(g, cnx); + this.close(cnx); + return g; + } + + /** + * refresh le Groupe ainsi que ses etudiants + * @param g le groupe + * @return le groupe refresh/un parent si il a été refresh + */ + public Groupe refreshALL(Groupe g, Chargement ch){ + Connection cnx = this.cnx(); + g=this.refreshGroupe(g, cnx, ch); + Set et=new LinkedHashSet<>(); + for(Etudiant gr:g.getEtudiants()){ + et.add(gr); + } + for(Etudiant gr:et){ + g.removeEtudiant(gr); + } + this.addBDEtudiant(g, cnx); + this.close(cnx); + return g; + } + + public boolean saveEtu(Etudiant etudiant, Groupe g){ + Connection cnx = this.cnx(); + try{ + PreparedStatement pst=cnx.prepareStatement( + "Select id from Etudiant where id=?; "); + pst.setString(1, String.valueOf(etudiant.getId())); + ResultSet rs=pst.executeQuery(); + if(rs.first()){ + //L'etudiant est déja connu de la BD + pst.close(); + pst=cnx.prepareStatement( + "INSERT INTO `CONTIENT` (`idGroupe`, `idEt`) VALUES (?, ?);"); + pst.setInt(2, etudiant.getId()); + pst.setInt(1, g.getId()); + pst.executeQuery(); + boolean la=false; + while(g!=g.getPointPoint() || la==false){ + g=g.getPointPoint(); + for(Etudiant e:g.getEtudiants()){ + if(e==etudiant){ + la=true; + break; + } + } + if(la==false){ + pst.setInt(2, etudiant.getId()); + pst.setInt(1, g.getId()); + pst.executeQuery(); + } + } + }else{ + pst.close(); + pst=cnx.prepareStatement( + "INSERT INTO `Etudiant` (`id`, `nom`, `prenom`) VALUES (?, ?, ?) ;"); + pst.setInt(1, etudiant.getId()); + pst.setString(2, etudiant.getNom()); + pst.setString(3, etudiant.getPrenom()); + pst.executeQuery(); + pst.close(); + pst=cnx.prepareStatement( + "INSERT INTO `CONTIENT` (`idGroupe`, `idEt`) VALUES (?, ?);"); + pst.setInt(2, etudiant.getId()); + pst.setInt(1, g.getId()); + pst.executeQuery(); + while(g.getPointPoint()!=g){ + g=g.getPointPoint(); + pst.setInt(2, etudiant.getId()); + pst.setInt(1, g.getId()); + pst.executeQuery(); + } + } + rs.close(); + pst.close(); + }catch(SQLException e){ + if(this.erreurSQL()){ + this.saveEtu(etudiant, g); + }else{ + this.refreshALL(g); + return false; + } + } + this.close(cnx); + return true; + } + + public boolean changeNameGroupe(Groupe g, String name){ + Connection cnx=this.cnx(); + try{ + PreparedStatement pst=cnx.prepareStatement( + "UPDATE `Groupe` SET `nom` = ? WHERE `Groupe`.`id` = ? " + ); + pst.setString(1, name); + pst.setInt(2, g.getId()); + pst.executeQuery(); + pst.close(); + }catch(SQLException e){ + if(this.erreurSQL()){ + this.changeNameGroupe(g, name); + }else{ + this.refreshALL(g); + return false; + } + } + this.close(cnx); + return true; + } + + public void setFenetre(JFrame fenetre) { + this.fenetre = fenetre; + } +} diff --git a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/Graphic/Util/Sauvegarde.java b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/Graphic/Util/Sauvegarde.java deleted file mode 100644 index 969763a..0000000 --- a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/Graphic/Util/Sauvegarde.java +++ /dev/null @@ -1,5 +0,0 @@ -package fr.iutfbleau.projetIHM2022FI2.Graphic.Util; - -public class Sauvegarde { - public Sauvegarde(){} -} diff --git a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/Graphic/View/FenetreGroupe.java b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/Graphic/View/FenetreGroupe.java index 6859c37..1336bcd 100644 --- a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/Graphic/View/FenetreGroupe.java +++ b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/Graphic/View/FenetreGroupe.java @@ -8,9 +8,9 @@ import java.awt.Font; import java.awt.GridLayout; import fr.iutfbleau.projetIHM2022FI2.API.Groupe; import fr.iutfbleau.projetIHM2022FI2.API.TypeGroupe; -import fr.iutfbleau.projetIHM2022FI2.Graphic.Model; import fr.iutfbleau.projetIHM2022FI2.Graphic.Controller.ObservateurChangeGroupe; import fr.iutfbleau.projetIHM2022FI2.Graphic.Controller.ObservateurModifGroupe; +import fr.iutfbleau.projetIHM2022FI2.Graphic.Model.Model; public class FenetreGroupe extends JPanel{ @@ -77,7 +77,13 @@ public class FenetreGroupe extends JPanel{ this.add(new JScrollPane(sous)); } }else{ - this.add(new JLabel("Il n'y a pas encore de Groupe")); + JButton creer=new JButton("créer une promo"); + creer.addActionListener(new ObservateurModifGroupe(m, g)); + this.add(creer); } } + + public void setG(Groupe g) { + this.g = g; + } } diff --git a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/Graphic/View/FenetreSelectionEtu.java b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/Graphic/View/FenetreSelectionEtu.java index 049fce6..f95afb3 100644 --- a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/Graphic/View/FenetreSelectionEtu.java +++ b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/Graphic/View/FenetreSelectionEtu.java @@ -11,6 +11,8 @@ import java.util.Set; import java.awt.GridLayout; import java.awt.Color; import javax.swing.JButton; +import javax.swing.JLabel; +import javax.swing.JOptionPane; import javax.swing.JPanel; public class FenetreSelectionEtu extends JPanel{ @@ -54,6 +56,10 @@ public class FenetreSelectionEtu extends JPanel{ } public void addEtudiant(String nom, String prenom){ + if(nom.length()==0 || prenom.length()==0){ + JOptionPane.showMessageDialog(this, "le nom/prenom ne peut pas être null"); + return; + } this.etu.add(new EtudiantNP(nom, prenom)); this.removeAll(); this.draw(); @@ -69,6 +75,9 @@ public class FenetreSelectionEtu extends JPanel{ this.add(lab); index++; } + if(etu.size()==0){ + this.add(new JLabel("Ce groupe possède tous les étudiants déja présent")); + } JButton nouveau=new JButton("Nouveau +"); nouveau.setBackground(Color.RED); nouveau.addActionListener(new ActionListenerNouveauEtu(this)); diff --git a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MNP/EtudiantNP.java b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MNP/EtudiantNP.java index 74a2647..f59093b 100644 --- a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MNP/EtudiantNP.java +++ b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MNP/EtudiantNP.java @@ -29,7 +29,9 @@ public class EtudiantNP implements Etudiant{ public EtudiantNP(String nom, String prenom, int id){ Objects.requireNonNull(nom,"On ne peut pas créer un étudiant avec un nom null"); Objects.requireNonNull(prenom,"On ne peut pas créer un étudiant avec un nom null"); - this.nextId++; + if(id>=this.nextId){ + this.nextId=id; + } this.id=id; this.nom=nom; this.prenom=prenom; diff --git a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/Test/TestTexteMNP.java b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/Test/TestTexteMNP.java index a86f94b..10631af 100644 --- a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/Test/TestTexteMNP.java +++ b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/Test/TestTexteMNP.java @@ -1,5 +1,5 @@ package fr.iutfbleau.projetIHM2022FI2.Test; -import fr.iutfbleau.projetIHM2022FI2.Graphic.Model; +import fr.iutfbleau.projetIHM2022FI2.Graphic.Model.Model; public class TestTexteMNP{