From 1fb3e881dca98f6e9399b36283fd3a37d226f319 Mon Sep 17 00:00:00 2001 From: martins <clement.martins@etu.u-pec.fr> Date: Fri, 2 Dec 2022 11:20:58 +0100 Subject: [PATCH] debut de la fin des changements, modif api et correction de bug --- java/APIGroupe/Makefile | 78 ++++++----- .../API/AbstractChangementFactory.java | 14 ++ .../projetIHM2022FI2/API/Changement.java | 6 +- .../iutfbleau/projetIHM2022FI2/API/Model.java | 111 ++++++++++++++++ .../ETU/Controller/ObservateurFenetre.java | 58 -------- .../ETU/Model/{Model.java => ModelEtu.java} | 124 ++++++++++++++---- .../ETU/View/FenetreEtudiant.java | 4 +- .../ETU/View/FenetreGroupe.java | 13 +- .../ETU/View/PanelEtudiant.java | 1 - .../MNP/AbstractChangementFactoryNP.java | 57 +++++++- .../MNP/AbstractGroupeFactoryNP.java | 88 ++++++++----- .../projetIHM2022FI2/MNP/ChangementNP.java | 32 ++++- .../Controller/ActionListenerChangeEtu.java | 4 +- .../ControllerGroupeBChangement.java | 2 +- .../Controller/ObservateurChangeGroupe.java | 4 +- .../Controller/ObservateurFenetre.java | 2 +- .../Permanent/TestTexteMNP.java | 4 +- .../Controller/ActionListenerChangeEtu.java | 20 --- .../Controller/ActionListenerSuprEtu.java | 2 +- .../Controller/ObservateurChangeGroupe.java | 21 --- .../Controller/ObservateurModifGroupe.java | 2 +- .../ROOT/Model/{Model.java => ModelRoot.java} | 122 ++++++++++++----- .../ROOT/View/FenetreEtudiant.java | 4 +- .../ROOT/View/FenetreGroupe.java | 12 +- 24 files changed, 529 insertions(+), 256 deletions(-) create mode 100644 java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/API/Model.java delete mode 100644 java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/ETU/Controller/ObservateurFenetre.java rename java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/ETU/Model/{Model.java => ModelEtu.java} (59%) rename java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/{ETU => Permanent}/Controller/ActionListenerChangeEtu.java (94%) rename java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/{ETU => Permanent}/Controller/ControllerGroupeBChangement.java (89%) rename java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/{ETU => Permanent}/Controller/ObservateurChangeGroupe.java (78%) rename java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/{ROOT => Permanent}/Controller/ObservateurFenetre.java (95%) delete mode 100644 java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/ROOT/Controller/ActionListenerChangeEtu.java delete mode 100644 java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/ROOT/Controller/ObservateurChangeGroupe.java rename java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/ROOT/Model/{Model.java => ModelRoot.java} (68%) diff --git a/java/APIGroupe/Makefile b/java/APIGroupe/Makefile index 8005841..d559cfe 100644 --- a/java/APIGroupe/Makefile +++ b/java/APIGroupe/Makefile @@ -24,7 +24,7 @@ run : build\ # AUTRE BUTS doc : - javadoc -d doc src/fr/iutfbleau/projetIHM2022FI2/API/*.java src/fr/iutfbleau/projetIHM2022FI2/MNP/*.java src/fr/iutfbleau/projetIHM2022FI2/ROOT/Controller/*.java src/fr/iutfbleau/projetIHM2022FI2/ROOT/View/*.java + javadoc -d doc src/fr/iutfbleau/projetIHM2022FI2/API/*.java src/fr/iutfbleau/projetIHM2022FI2/MNP/*.java src/fr/iutfbleau/projetIHM2022FI2/ROOT/Controller/*.java src/fr/iutfbleau/projetIHM2022FI2/ROOT/View/*.java src/fr/iutfbleau/projetIHM2022FI2/ETU/Controller/*.java src/fr/iutfbleau/projetIHM2022FI2/ETU/View/*.java src/fr/iutfbleau/projetIHM2022FI2/ETU/Model/*.java src/fr/iutfbleau/projetIHM2022FI2/ROOTw/Model/*.java clean : rm -rf ${BUILD}/* *.jar @@ -35,6 +35,9 @@ clean : build : mkdir build ## API ## +${BUILD}/API/Model.class : ${SRC}/API/Model.java + ${JAVAC} ${JAVAC_OPTIONS} ${SRC}/API/Model.java + ${BUILD}/API/MonPrint.class : ${SRC}/API/MonPrint.java ${JAVAC} ${JAVAC_OPTIONS} ${SRC}/API/MonPrint.java @@ -94,28 +97,22 @@ ${BUILD}/MNP/AbstractChangementFactoryNP.class : ${SRC}/MNP/AbstractChangementFa ${BUILD}/API/Changement.class ${JAVAC} ${JAVAC_OPTIONS} ${SRC}/MNP/AbstractChangementFactoryNP.java - - - - - - ## ROOT ## ## View ## ${BUILD}/ROOT/View/FenetreGroupe.class : ${SRC}/ROOT/View/FenetreGroupe.java \ - ${BUILD}/ROOT/Controller/ObservateurFenetre.class \ - ${BUILD}/ROOT/Controller/ObservateurChangeGroupe.class \ + ${BUILD}/Permanent/Controller/ObservateurFenetre.class \ + ${BUILD}/Permanent/Controller/ObservateurChangeGroupe.class \ ${BUILD}/ROOT/Controller/ObservateurModifGroupe.class ${JAVAC} ${JAVAC_OPTIONS} ${SRC}/ROOT/View/FenetreGroupe.java ${BUILD}/ROOT/View/FenetreEtudiant.class :${SRC}/ROOT/View/FenetreEtudiant.java \ - ${BUILD}/ROOT/Controller/ObservateurFenetre.class \ - ${BUILD}/ROOT/Controller/ObservateurChangeGroupe.class \ + ${BUILD}/Permanent/Controller/ObservateurFenetre.class \ + ${BUILD}/Permanent/Controller/ObservateurChangeGroupe.class \ ${BUILD}/ROOT/View/PanelEtudiant.class \ - ${BUILD}/ROOT/Controller/ActionListenerChangeEtu.class + ${BUILD}/Permanent/Controller/ActionListenerChangeEtu.class ${JAVAC} ${JAVAC_OPTIONS} ${SRC}/ROOT/View/FenetreEtudiant.java ${BUILD}/ROOT/View/PanelEtudiant.class : ${SRC}/ROOT/View/PanelEtudiant.java \ @@ -130,24 +127,16 @@ ${BUILD}/ROOT/View/FenetreSelectionEtu.class : ${SRC}/ROOT/View/FenetreSelection ## Controller ## -${BUILD}/ROOT/Controller/ActionListenerChangeEtu.class : ${SRC}/ROOT/Controller/ActionListenerChangeEtu.java - ${JAVAC} ${JAVAC_OPTIONS} ${SRC}/ROOT/Controller/ActionListenerChangeEtu.java ${BUILD}/ROOT/Controller/ActionListenerSuprEtu.class : ${SRC}/ROOT/Controller/ActionListenerSuprEtu.java \ ${BUILD}/API/Etudiant.class ${JAVAC} ${JAVAC_OPTIONS} ${SRC}/ROOT/Controller/ActionListenerSuprEtu.java -${BUILD}/ROOT/Controller/ObservateurFenetre.class : ${SRC}/ROOT/Controller/ObservateurFenetre.java - ${JAVAC} ${JAVAC_OPTIONS} ${SRC}/ROOT/Controller/ObservateurFenetre.java - ${BUILD}/ROOT/Controller/ObservateurModifGroupe.class : ${SRC}/ROOT/Controller/ObservateurModifGroupe.java \ ${BUILD}/ROOT/View/FenetreSelectionEtu.class \ ${BUILD}/ROOT/Controller/SelecteurEtudiant.class ${JAVAC} ${JAVAC_OPTIONS} ${SRC}/ROOT/Controller/ObservateurModifGroupe.java - -${BUILD}/ROOT/Controller/ObservateurChangeGroupe.class : ${SRC}/ROOT/Controller/ObservateurChangeGroupe.java - ${JAVAC} ${JAVAC_OPTIONS} ${SRC}/ROOT/Controller/ObservateurChangeGroupe.java ${BUILD}/ROOT/Controller/SelecteurEtudiant.class : ${SRC}/ROOT/Controller/SelecteurEtudiant.java ${JAVAC} ${JAVAC_OPTIONS} ${SRC}/ROOT/Controller/SelecteurEtudiant.java @@ -160,11 +149,12 @@ ${BUILD}/ROOT/Controller/ActionListenerNouveauEtu.class : ${SRC}/ROOT/Controller ## Model ### -${BUILD}/ROOT/Model/Model.class : ${SRC}/ROOT/Model/Model.java \ +${BUILD}/ROOT/Model/ModelRoot.class : ${SRC}/ROOT/Model/ModelRoot.java \ + ${BUILD}/API/Model.class \ ${BUILD}/ROOT/View/FenetreGroupe.class \ ${BUILD}/ROOT/View/FenetreEtudiant.class \ ${BUILD}/Permanent/View/Chargement.class - ${JAVAC} ${JAVAC_OPTIONS} ${SRC}/ROOT/Model/Model.java + ${JAVAC} ${JAVAC_OPTIONS} ${SRC}/ROOT/Model/ModelRoot.java @@ -177,15 +167,15 @@ ${BUILD}/ROOT/Model/Model.class : ${SRC}/ROOT/Model/Model.java \ ## View ## ${BUILD}/ETU/View/FenetreGroupe.class : ${SRC}/ETU/View/FenetreGroupe.java \ - ${BUILD}/ETU/Controller/ObservateurFenetre.class \ - ${BUILD}/ETU/Controller/ObservateurChangeGroupe.class + ${BUILD}/Permanent/Controller/ObservateurFenetre.class \ + ${BUILD}/Permanent/Controller/ObservateurChangeGroupe.class ${JAVAC} ${JAVAC_OPTIONS} ${SRC}/ETU/View/FenetreGroupe.java ${BUILD}/ETU/View/FenetreEtudiant.class :${SRC}/ETU/View/FenetreEtudiant.java \ - ${BUILD}/ETU/Controller/ObservateurFenetre.class \ - ${BUILD}/ETU/Controller/ObservateurChangeGroupe.class \ + ${BUILD}/Permanent/Controller/ObservateurFenetre.class \ + ${BUILD}/Permanent/Controller/ObservateurChangeGroupe.class \ ${BUILD}/ETU/View/PanelEtudiant.class \ - ${BUILD}/ETU/Controller/ActionListenerChangeEtu.class + ${BUILD}/Permanent/Controller/ActionListenerChangeEtu.class ${JAVAC} ${JAVAC_OPTIONS} ${SRC}/ETU/View/FenetreEtudiant.java ${BUILD}/ETU/View/PanelEtudiant.class : ${SRC}/ETU/View/PanelEtudiant.java @@ -194,29 +184,20 @@ ${BUILD}/ETU/View/PanelEtudiant.class : ${SRC}/ETU/View/PanelEtudiant.java ## Controller ## -${BUILD}/ETU/Controller/ActionListenerChangeEtu.class : ${SRC}/ETU/Controller/ActionListenerChangeEtu.java - ${JAVAC} ${JAVAC_OPTIONS} ${SRC}/ETU/Controller/ActionListenerChangeEtu.java -${BUILD}/ETU/Controller/ControllerGroupeBChangement.class : ${SRC}/ETU/Controller/ControllerGroupeBChangement.java - ${JAVAC} ${JAVAC_OPTIONS} ${SRC}/ETU/Controller/ControllerGroupeBChangement.java -${BUILD}/ETU/Controller/ObservateurFenetre.class : ${SRC}/ETU/Controller/ObservateurFenetre.java - ${JAVAC} ${JAVAC_OPTIONS} ${SRC}/ETU/Controller/ObservateurFenetre.java - -${BUILD}/ETU/Controller/ObservateurChangeGroupe.class : ${SRC}/ETU/Controller/ObservateurChangeGroupe.java \ - ${BUILD}/ETU/Controller/ControllerGroupeBChangement.class - ${JAVAC} ${JAVAC_OPTIONS} ${SRC}/ETU/Controller/ObservateurChangeGroupe.java ##.... ## Model ### -${BUILD}/ETU/Model/Model.class : ${SRC}/ETU/Model/Model.java \ +${BUILD}/ETU/Model/ModelEtu.class : ${SRC}/ETU/Model/ModelEtu.java \ + ${BUILD}/API/Model.class \ ${BUILD}/ETU/View/FenetreGroupe.class \ ${BUILD}/ETU/View/FenetreEtudiant.class \ ${BUILD}/Permanent/View/Chargement.class - ${JAVAC} ${JAVAC_OPTIONS} ${SRC}/ETU/Model/Model.java + ${JAVAC} ${JAVAC_OPTIONS} ${SRC}/ETU/Model/ModelEtu.java ## Permanent ## @@ -230,8 +211,8 @@ ${BUILD}/ETU/Model/Model.class : ${SRC}/ETU/Model/Model.java \ ${BUILD}/MNP/ChangementNP.class \ ${BUILD}/MNP/AbstractGroupeFactoryNP.class \ ${BUILD}/MNP/AbstractChangementFactoryNP.class \ - ${BUILD}/ROOT/Model/Model.class \ - ${BUILD}/ETU/Model/Model.class \ + ${BUILD}/ROOT/Model/ModelRoot.class \ + ${BUILD}/ETU/Model/ModelEtu.class \ ${BUILD}/Permanent/View/Connexion.class \ ${BUILD}/Permanent/Util/User.class ${JAVAC} ${JAVAC_OPTIONS} ${SRC}/Permanent/TestTexteMNP.java @@ -248,6 +229,21 @@ ${BUILD}/Permanent/View/Connexion.class : ${SRC}/Permanent/View/Connexion.java ${BUILD}/Permanent/Util/User.class : ${SRC}/Permanent/Util/User.java ${JAVAC} ${JAVAC_OPTIONS} ${SRC}/Permanent/Util/User.java +## Controller ## + +${BUILD}/Permanent/Controller/ObservateurFenetre.class : ${SRC}/Permanent/Controller/ObservateurFenetre.java + ${JAVAC} ${JAVAC_OPTIONS} ${SRC}/Permanent/Controller/ObservateurFenetre.java + +${BUILD}/Permanent/Controller/ObservateurChangeGroupe.class : ${SRC}/Permanent/Controller/ObservateurChangeGroupe.java + ${JAVAC} ${JAVAC_OPTIONS} ${SRC}/Permanent/Controller/ObservateurChangeGroupe.java + +${BUILD}/Permanent/Controller/ActionListenerChangeEtu.class : ${SRC}/Permanent/Controller/ActionListenerChangeEtu.java \ + ${BUILD}/Permanent/Controller/ControllerGroupeBChangement.class + ${JAVAC} ${JAVAC_OPTIONS} ${SRC}/Permanent/Controller/ActionListenerChangeEtu.java + +${BUILD}/Permanent/Controller/ControllerGroupeBChangement.class : ${SRC}/Permanent/Controller/ControllerGroupeBChangement.java + ${JAVAC} ${JAVAC_OPTIONS} ${SRC}/Permanent/Controller/ControllerGroupeBChangement.java + # ## JARS ## ${JAR_MNP} : ${BUILD}/Permanent/TestTexteMNP.class diff --git a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/API/AbstractChangementFactory.java b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/API/AbstractChangementFactory.java index 4acea36..134c43e 100644 --- a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/API/AbstractChangementFactory.java +++ b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/API/AbstractChangementFactory.java @@ -51,5 +51,19 @@ public interface AbstractChangementFactory { * */ public void createChangement(Groupe A, Etudiant e, Groupe B); + + + /** + * permet d'ajouter un nouveau changement de type 2 + * + * @param A groupe actuel + * @param B groupe demandé + * @param e étudiant concerné par le changement + *@param raison la raison du changement de type 2 + * @throws java.lang.NullPointerException si un argument est null + * @throws java.lang.IllegalArgumentException si les groupes ou l'étudiant ne sont pas connus de la factory partenaire, ou e n'appartient pas à A ou A et B ne sont pas frères dans l'arbre des groupes. + * + */ + public void createChangement(Groupe A, Etudiant e, Groupe B, String raison); } diff --git a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/API/Changement.java b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/API/Changement.java index 9b8bab4..f8a1997 100644 --- a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/API/Changement.java +++ b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/API/Changement.java @@ -1,5 +1,5 @@ package fr.iutfbleau.projetIHM2022FI2.API; -import java.util.*; + /** * Une demande de changement de groupe * concerne un étudiant, qui est dans un groupe A et veut aller dans un groupe B. @@ -33,6 +33,10 @@ public interface Changement extends MonPrint { public Etudiant getEtu(); + /** + * + */ + public String getRaison(); /** * @see MonPrint * NB. On n'utilise le mécanisme des méthodes par défaut pour donner du code dans une interface. C'est un petit peu laid et à contre-emploi mais pratique ici. diff --git a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/API/Model.java b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/API/Model.java new file mode 100644 index 0000000..c117835 --- /dev/null +++ b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/API/Model.java @@ -0,0 +1,111 @@ +package fr.iutfbleau.projetIHM2022FI2.API; + +import java.util.Set; +import javax.swing.JFrame; +public interface Model { +/** + * Fonction pour refresh/changer de groupe d'affichage + * @param g le groupe a afficher + */ +public void showGroupe(Groupe g); + /** + * getteur de la fenetre + * @return JFrame la fenetre + */ + public JFrame getFenetre(); + + public Set<Etudiant> getEtudiant(); + + // *********************** + // FONCTION POUR SUPRIMER UN ETUDIANT + // *********************** + + public boolean deleteEtu(Etudiant e); + + + // *********************** + // FONCTION POUR Ajouter UN ETUDIANT + // *********************** + + /** + * Fonction pour ajouter un étudiant au groupe + * @param g + * @param e + * @return boolean pour savoir si il a pus être ajouter + */ + public boolean addEtudiant(Groupe g, Etudiant e); + + + + // *********************** + // FONCTION POUR SUPRIMER UN GROUPE + // *********************** + + /** + * Fonction pour supprimer un groupe + * @param g le groupe a supprimer + */ + public void delete(Groupe g); + + // *********************** + // FONCTION POUR RENOMER UN GROUPE + // *********************** + + /** + * Fonction pour renomer un groupe + * @param name + * @param g + */ + public void rename(String name, Groupe g); + + + // ********************** + // FONCTION POUR CREER UN GROUPE + // ********************** + + + /** + * 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); + + /** + * 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<Etudiant> ajout); + + /** + * ajoute une nouvelle promotion + * @param min le nombre min + * @param max le nombre max + * @param name le nom + * @param ajout les etudiant a ajouter a la promo + */ + public void addPromo(int min, int max, String name, Set<Etudiant> ajout); + + // ************************** + // FONCTION POUR LES CHANGEMENTS + // ****************************** + + /** + * Créer un changement depuis le groupe courant + * @param e l'etudiant + * @param b le groupe a changer + */ + public void changeGroupe(Etudiant e, Groupe b); + + /** + * Retourn les groupe auquel on peut demander a changer depuis le groupe courant + * + * @return la liste des groupes + */ + public Set<Groupe> getGroupePartition(); +} diff --git a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/ETU/Controller/ObservateurFenetre.java b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/ETU/Controller/ObservateurFenetre.java deleted file mode 100644 index bf43f57..0000000 --- a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/ETU/Controller/ObservateurFenetre.java +++ /dev/null @@ -1,58 +0,0 @@ -package fr.iutfbleau.projetIHM2022FI2.ETU.Controller; -import java.awt.event.WindowEvent; -import java.awt.event.WindowListener; -import javax.swing.JOptionPane; -import javax.swing.JFrame; - -public class ObservateurFenetre implements WindowListener{ - - public ObservateurFenetre(){ - - } - - @Override - public void windowActivated(WindowEvent e) { - // TODO Auto-generated method stub - - } - - @Override - public void windowClosed(WindowEvent e) { - // TODO Auto-generated method stub - - } - - @Override - public void windowClosing(WindowEvent e) { - JFrame fenetre= (JFrame) e.getSource(); - int confirmation = JOptionPane.showConfirmDialog(fenetre.getContentPane(), "Voulez vous quitter?", "Quitter", JOptionPane.YES_NO_OPTION); - if(confirmation == JOptionPane.YES_OPTION){ - fenetre.dispose(); - } - } - - @Override - public void windowDeactivated(WindowEvent e) { - // TODO Auto-generated method stub - - } - - @Override - public void windowDeiconified(WindowEvent e) { - // TODO Auto-generated method stub - - } - - @Override - public void windowIconified(WindowEvent e) { - // TODO Auto-generated method stub - - } - - @Override - public void windowOpened(WindowEvent e) { - // TODO Auto-generated method stub - - } - -} diff --git a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/ETU/Model/Model.java b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/ETU/Model/ModelEtu.java similarity index 59% rename from java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/ETU/Model/Model.java rename to java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/ETU/Model/ModelEtu.java index 32ffaad..d3488a9 100644 --- a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/ETU/Model/Model.java +++ b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/ETU/Model/ModelEtu.java @@ -8,17 +8,18 @@ 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.API.Model; import fr.iutfbleau.projetIHM2022FI2.MNP.AbstractChangementFactoryNP; import fr.iutfbleau.projetIHM2022FI2.MNP.AbstractGroupeFactoryNP; +import fr.iutfbleau.projetIHM2022FI2.Permanent.Controller.ObservateurFenetre; import fr.iutfbleau.projetIHM2022FI2.Permanent.View.Chargement; -import fr.iutfbleau.projetIHM2022FI2.ETU.Controller.ObservateurFenetre; import fr.iutfbleau.projetIHM2022FI2.ETU.View.FenetreEtudiant; import fr.iutfbleau.projetIHM2022FI2.ETU.View.FenetreGroupe; /** * Le Model de L'IHM */ -public class Model{ +public class ModelEtu implements Model{ private JPanel panGroupe; private FenetreGroupe fenGr; @@ -28,7 +29,7 @@ public class Model{ private JFrame fenetre; private Etudiant Selected; - public Model(){ + public ModelEtu(){ this.fenetre=new JFrame(); this.fenetre.setSize(1200, 720); this.fenetre.setLocation(100,100); @@ -62,25 +63,27 @@ public class Model{ } -/** - * Fonction pour refresh/changer de groupe d'affichage - * @param g le groupe a afficher - */ -public void showGroupe(Groupe g){ - if(g!=null) - g=this.promo .refreshALL(g); - this.panGroupe.removeAll(); - this.fenGr=new FenetreGroupe(g, this, this.promo.getGroupesOfEtudiant(this.Selected)); - this.fenEtu=new FenetreEtudiant(g, this.Selected, this); - this.fenetre.getContentPane().removeAll(); - this.panGroupe.add(this.fenGr.getPan()); - this.panGroupe.revalidate(); - this.fenetre.add(this.panGroupe); - JScrollPane scroll=new JScrollPane(this.fenEtu.getPan()); - scroll.getVerticalScrollBar().setUnitIncrement(15); - this.fenetre.add(scroll); - this.fenetre.revalidate(); -} + @Override + /** + * Fonction pour refresh/changer de groupe d'affichage + * @param g le groupe a afficher + */ + public void showGroupe(Groupe g){ + if(g!=null) + g=this.promo .refreshALL(g); + this.panGroupe.removeAll(); + this.fenGr=new FenetreGroupe(g, this, this.promo.getGroupesOfEtudiant(this.Selected)); + this.fenEtu=new FenetreEtudiant(g, this.Selected, this); + this.fenetre.getContentPane().removeAll(); + this.panGroupe.add(this.fenGr.getPan()); + this.panGroupe.revalidate(); + this.fenetre.add(this.panGroupe); + JScrollPane scroll=new JScrollPane(this.fenEtu.getPan()); + scroll.getVerticalScrollBar().setUnitIncrement(15); + this.fenetre.add(scroll); + this.fenetre.revalidate(); + } + @Override /** * getteur de la fenetre * @return JFrame la fenetre @@ -89,9 +92,10 @@ public void showGroupe(Groupe g){ return fenetre; } - public Set<Etudiant> getEtudiant(){ - return this.promo.getPromotion().getEtudiants(); - } + @Override + public Set<Etudiant> getEtudiant(){ + return this.promo.getPromotion().getEtudiants(); + } private void initEtu(String err){ Set<Etudiant> liste=this.promo.getPromotion().getEtudiants(); @@ -127,18 +131,38 @@ public void showGroupe(Groupe g){ // ************************** // FONCTION POUR LES CHANGEMENTS // ****************************** + + @Override public void changeGroupe(Etudiant e, Groupe b){ if(b==null) return; b=this.promo.refreshALL(b); if(b.getEtudiants()!=null && b.getMax()>b.getEtudiants().size()+1){ - this.changement.createChangement(this.fenGr.getG(), e, b); + if(b.getEtudiants().size()>this.fenGr.getG().getEtudiants().size()){ + JPanel myPanel= new JPanel(new GridLayout(2,1)); + JTextField xField = new JTextField(100); + xField.setMinimumSize(new Dimension(100, 100)); + xField.setPreferredSize(new Dimension(100,100)); + myPanel.add(new JLabel("Ce Groupe est plus grand que le votre raison du changement:")); + myPanel.add(xField); + if(JOptionPane.showConfirmDialog(this.fenetre, myPanel, "Changer dans quel Groupe ?", JOptionPane.OK_CANCEL_OPTION)==JOptionPane.OK_OPTION){ + //IL faut que l'etudiant detaile un minimun la raison + if(xField.getText().length()>5){ + this.changement.createChangement(this.fenGr.getG(), e, b, xField.getText()); + }else{ + JOptionPane.showMessageDialog(this.fenetre, "veuillez detailler votre raison", "erreur", JOptionPane.ERROR_MESSAGE); + } + } + }else{ + this.changement.createChangement(this.fenGr.getG(), e, b); + } }else{ JOptionPane.showMessageDialog(this.fenetre, "impossible trop d'etudiant dans l'autre Groupe", "erreur", JOptionPane.ERROR_MESSAGE); } this.showGroupe(this.fenGr.getG()); } + @Override public Set<Groupe> getGroupePartition(){ this.promo.refreshALL(this.fenGr.getG().getPointPoint()); Set<Groupe> retour=new HashSet<>(); @@ -152,4 +176,52 @@ public void showGroupe(Groupe g){ return retour; } + @Override + public boolean addEtudiant(Groupe g, Etudiant e) { + // TODO Auto-generated method stub + return false; + } + + + @Override + public void delete(Groupe g) { + // TODO Auto-generated method stub + + } + + + @Override + public void rename(String name, Groupe g) { + // TODO Auto-generated method stub + + } + + + @Override + public void partition(Groupe g, int n, String name) { + // TODO Auto-generated method stub + + } + + + @Override + public void free(Groupe g, String name, int min, int max, Set<Etudiant> ajout) { + // TODO Auto-generated method stub + + } + + + @Override + public void addPromo(int min, int max, String name, Set<Etudiant> ajout) { + // TODO Auto-generated method stub + + } + + + @Override + public boolean deleteEtu(Etudiant e) { + // TODO Auto-generated method stub + return false; + } + } diff --git a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/ETU/View/FenetreEtudiant.java b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/ETU/View/FenetreEtudiant.java index 0ee1c26..c0dbb2e 100644 --- a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/ETU/View/FenetreEtudiant.java +++ b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/ETU/View/FenetreEtudiant.java @@ -11,8 +11,8 @@ import java.util.Set; import fr.iutfbleau.projetIHM2022FI2.API.Etudiant; import fr.iutfbleau.projetIHM2022FI2.API.Groupe; import fr.iutfbleau.projetIHM2022FI2.API.TypeGroupe; -import fr.iutfbleau.projetIHM2022FI2.ETU.Model.Model; -import fr.iutfbleau.projetIHM2022FI2.ETU.Controller.ActionListenerChangeEtu; +import fr.iutfbleau.projetIHM2022FI2.Permanent.Controller.ActionListenerChangeEtu; +import fr.iutfbleau.projetIHM2022FI2.API.Model; public class FenetreEtudiant{ diff --git a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/ETU/View/FenetreGroupe.java b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/ETU/View/FenetreGroupe.java index 2f92fda..3a73540 100644 --- a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/ETU/View/FenetreGroupe.java +++ b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/ETU/View/FenetreGroupe.java @@ -8,8 +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.ETU.Model.Model; -import fr.iutfbleau.projetIHM2022FI2.ETU.Controller.ObservateurChangeGroupe; +import fr.iutfbleau.projetIHM2022FI2.API.Model; +import fr.iutfbleau.projetIHM2022FI2.Permanent.Controller.ObservateurChangeGroupe; + import java.util.Set; import java.awt.Color; @@ -54,9 +55,11 @@ public class FenetreGroupe{ titre.setFont(new Font(Font.SERIF, Font.BOLD, titre.getFont().getSize()+10)); this.pan.add(titre); this.pan.add(new JLabel("id= "+String.valueOf(g.getId()),JLabel.CENTER)); - this.pan.add(new JLabel("min= "+String.valueOf(g.getMin()),JLabel.CENTER)); - this.pan.add(new JLabel("max= "+String.valueOf(g.getMax()),JLabel.CENTER)); - this.pan.add(new JLabel(g.getType().name(), JLabel.CENTER)); + this.pan.add(new JLabel("min= "+String.valueOf(g.getMin())+"\t || \t max= "+String.valueOf(g.getMax()),JLabel.CENTER)); + JButton refresh= new JButton("Resfresh"); + refresh.addActionListener(new ObservateurChangeGroupe(m, g)); + this.pan.add(refresh); + this.pan.add(new JLabel("Type: "+g.getType().name(), JLabel.CENTER)); this.pan.add(new JLabel("Sous groupe:",JLabel.CENTER)); if(g.getSousGroupes().size()>0){ JPanel sous=new JPanel(new GridLayout(g.getSousGroupes().size(), 1)); diff --git a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/ETU/View/PanelEtudiant.java b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/ETU/View/PanelEtudiant.java index efff903..8679b67 100644 --- a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/ETU/View/PanelEtudiant.java +++ b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/ETU/View/PanelEtudiant.java @@ -24,6 +24,5 @@ public class PanelEtudiant extends JPanel{ public void addActionChangeListener(ActionListener a){ this.deplacer.addActionListener(a); - } } diff --git a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MNP/AbstractChangementFactoryNP.java b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MNP/AbstractChangementFactoryNP.java index fe9a735..6e4cf62 100644 --- a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MNP/AbstractChangementFactoryNP.java +++ b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MNP/AbstractChangementFactoryNP.java @@ -162,6 +162,55 @@ public class AbstractChangementFactoryNP implements AbstractChangementFactory { this.close(cnx); } + @Override + /** + * permet d'ajouter un nouveau changement. de type 2 + * + * @param A groupe actuel + * @param B groupe demandé + * @param e étudiant concerné par le changement + * @param raison la raison du changement de type 2 + * @throws java.lang.NullPointerException si un argument est null + * @throws java.lang.IllegalArgumentException si les groupes ou l'étudiant ne sont pas connus de la factory partenaire, ou e n'appartient pas à A ou A et B ne sont pas frères dans l'arbre des groupes. + * + */ + public void createChangement(Groupe A, Etudiant e, Groupe B, String raison){ + Objects.requireNonNull(A,"Le groupe d'origine ne peut pas être null"); + Objects.requireNonNull(B,"Le groupe d'arrivée ne peut pas être null"); + Objects.requireNonNull(e,"L'étudiant ne peut pas être null"); + Changement c = new ChangementNP(A,e,B, raison); + this.brain.put(Integer.valueOf(c.getId()),c); + Connection cnx=this.cnx(); + try{ + PreparedStatement pst=cnx.prepareStatement("SELECT * FROM `Changement` where `idGroupeA`=? AND `idGroupeB`=? AND `idEtudiant`=?; "); + pst.setInt(1, A.getId()); + pst.setInt(2, B.getId()); + pst.setInt(3, e.getId()); + if(!pst.executeQuery().next()){ + pst.close(); + pst=cnx.prepareStatement("INSERT INTO `Changement` (`id`, `idGroupeA`, `idGroupeB`, `idEtudiant`, `Raison`) VALUES (?, ?, ?, ?, ?);"); + pst.setInt(1, c.getId()); + pst.setInt(2, A.getId()); + pst.setInt(3, B.getId()); + pst.setInt(4, e.getId()); + pst.setString(5, raison); + pst.executeUpdate(); + pst.close(); + }else{ + pst.close(); + JOptionPane.showMessageDialog(this.fenetre, "Vous Avez deja demander a Chnager dans ce Groupe", "erreur", JOptionPane.ERROR_MESSAGE); + } + }catch(SQLException er){ + System.out.println(er.toString()); + if(this.erreurSQL()){ + this.createChangement(A, e, B, raison); + }else{ + return; + } + } + this.close(cnx); + } + // ********************** // FONCTION POUR SIMPLIFIER LES Modification BD @@ -218,8 +267,12 @@ public class AbstractChangementFactoryNP implements AbstractChangementFactory { while(rs.next()){ Groupe[] ab=new Groupe[2]; this.getGroupe(rs.getInt(2), rs.getInt(3), ab, this.agf.getPromotion()); - Etudiant e=new EtudiantNP(rs.getString(5), rs.getString(6), rs.getInt(4)); - this.brain.put(rs.getInt(1), new ChangementNP(ab[0], e, ab[1], rs.getInt(1))); + Etudiant e=new EtudiantNP(rs.getString(6), rs.getString(7), rs.getInt(4)); + if(rs.getString(5)!=null){ + this.brain.put(rs.getInt(1), new ChangementNP(ab[0], e, ab[1], rs.getInt(1), rs.getString(5))); + }else{ + this.brain.put(rs.getInt(1), new ChangementNP(ab[0], e, ab[1], rs.getInt(1))); + } } pst.close(); }catch(SQLException e){ diff --git a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MNP/AbstractGroupeFactoryNP.java b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MNP/AbstractGroupeFactoryNP.java index 9e3d4d8..21db690 100644 --- a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MNP/AbstractGroupeFactoryNP.java +++ b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MNP/AbstractGroupeFactoryNP.java @@ -249,9 +249,30 @@ public class AbstractGroupeFactoryNP implements AbstractGroupeFactory { */ public Set<Etudiant> getEtudiants(String nomEtu){ Set<Etudiant> s=new LinkedHashSet<>(); - for(Etudiant e:this.getPromotion().getEtudiants()){ - if((e.getNom()).contains(nomEtu)){ - s.add(e); + //on retourne tous les etudiants + if(nomEtu==null){ + for(Etudiant et:this.getPromotion().getEtudiants()){ + s.add(et); + } + //ceux qui sont connu mais pas dans la promo + Connection cnx=this.cnx(); + try{ + PreparedStatement pst=cnx.prepareStatement("SELECT * FROM Etudiant natural join CONTIENT where Etudiant.id NOT IN (SELECT CONTIENT.idEt FROM CONTIENT) Group by Etudiant.id;"); + ResultSet rs=pst.executeQuery(); + while(rs.next()){ + s.add(new EtudiantNP(rs.getString(2), rs.getString(3), rs.getInt(1))); + } + }catch(SQLException e){ + if(this.erreurCO()) + return this.getEtudiants(nomEtu); + return null; + } + this.close(cnx); + }else{ + for(Etudiant e:this.getPromotion().getEtudiants()){ + if((e.getNom()).contains(nomEtu)){ + s.add(e); + } } } return s; @@ -268,16 +289,21 @@ public class AbstractGroupeFactoryNP implements AbstractGroupeFactory { public Set<Groupe> getGroupesOfEtudiant(Etudiant etu){ if(etu==null) throw new NullPointerException(); - Collection<Groupe> s= this.brain.values(); Set<Groupe> ret=new LinkedHashSet<Groupe>(); - for(Groupe g: s){ - for(Etudiant e: g.getEtudiants()){ - if(etu==e){ - ret.add(g); - break; - } + Connection cnx=this.cnx(); + try{ + PreparedStatement pst=cnx.prepareStatement("SELECT `idGroupe` FROM CONTIENT where idEt=? Group by `idGroupe`;"); + pst.setInt(1, etu.getId()); + ResultSet rs=pst.executeQuery(); + while(rs.next()){ + ret.add(this.brain.get(rs.getInt(1))); } + rs.close(); + pst.close(); + }catch(SQLException e){ + } + this.close(cnx); return ret; } @@ -541,29 +567,29 @@ private boolean saveEtu(Etudiant etudiant, Groupe g){ */ private void addBDEtudiant(Groupe g, Connection cnx){ 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"); - pst.setInt(1, g.getId()); - ResultSet rs=pst.executeQuery(); - //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; + //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"); + pst.setInt(1, g.getId()); + ResultSet rs=pst.executeQuery(); + //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))); } } - if(exist==false){ - g.addEtudiant(new EtudiantNP(rs.getString(1), rs.getString(2), rs.getInt(3))); - } - } - rs.close(); - pst.close(); + rs.close(); + pst.close(); }catch(SQLException e){ if(this.erreurCO()) this.addBDEtudiant(g, cnx); diff --git a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MNP/ChangementNP.java b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MNP/ChangementNP.java index 114fddf..8079a1c 100644 --- a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MNP/ChangementNP.java +++ b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MNP/ChangementNP.java @@ -12,7 +12,7 @@ public class ChangementNP implements Changement { //auto-incrément des changements private static int nextId=0; - + private String raison; private int id; private Groupe a,b; private Etudiant e; @@ -21,7 +21,18 @@ public class ChangementNP implements Changement { Objects.requireNonNull(a,"On ne peut pas créer un changement avec un groupe à quitter null"); Objects.requireNonNull(b,"On ne peut pas créer un changement avec un groupe à rejoindre null"); Objects.requireNonNull(e,"On ne peut pas créer un changement concernant un étudiant null"); + this.raison=null; + this.id=++this.nextId; + this.a=a; + this.b=b; + this.e=e; + } + public ChangementNP(Groupe a, Etudiant e, Groupe b, String raison){ + Objects.requireNonNull(a,"On ne peut pas créer un changement avec un groupe à quitter null"); + Objects.requireNonNull(b,"On ne peut pas créer un changement avec un groupe à rejoindre null"); + Objects.requireNonNull(e,"On ne peut pas créer un changement concernant un étudiant null"); + this.raison=raison; this.id=++this.nextId; this.a=a; this.b=b; @@ -41,6 +52,20 @@ public class ChangementNP implements Changement { this.nextId=this.id; } } + + public ChangementNP(Groupe a, Etudiant e, Groupe b, int id, String raison){ + Objects.requireNonNull(a,"On ne peut pas créer un changement avec un groupe à quitter null"); + Objects.requireNonNull(b,"On ne peut pas créer un changement avec un groupe à rejoindre null"); + Objects.requireNonNull(e,"On ne peut pas créer un changement concernant un étudiant null"); + this.raison=raison; + this.id=id; + this.a=a; + this.b=b; + this.e=e; + if(this.id>this.nextId){ + this.nextId=this.id; + } + } /** * permet de récupérer l'identifiant du changement (référence interne sans intérêt irl). @@ -73,4 +98,9 @@ public class ChangementNP implements Changement { return this.e; } + @Override + public String getRaison() { + return this.raison; + } + } diff --git a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/ETU/Controller/ActionListenerChangeEtu.java b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/Permanent/Controller/ActionListenerChangeEtu.java similarity index 94% rename from java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/ETU/Controller/ActionListenerChangeEtu.java rename to java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/Permanent/Controller/ActionListenerChangeEtu.java index 346070c..a304e06 100644 --- a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/ETU/Controller/ActionListenerChangeEtu.java +++ b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/Permanent/Controller/ActionListenerChangeEtu.java @@ -1,4 +1,4 @@ -package fr.iutfbleau.projetIHM2022FI2.ETU.Controller; +package fr.iutfbleau.projetIHM2022FI2.Permanent.Controller; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.HashSet; @@ -13,7 +13,7 @@ import java.awt.GridLayout; import fr.iutfbleau.projetIHM2022FI2.API.Etudiant; import fr.iutfbleau.projetIHM2022FI2.API.Groupe; -import fr.iutfbleau.projetIHM2022FI2.ETU.Model.Model; +import fr.iutfbleau.projetIHM2022FI2.API.Model; public class ActionListenerChangeEtu implements ActionListener { private Etudiant etudiant; diff --git a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/ETU/Controller/ControllerGroupeBChangement.java b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/Permanent/Controller/ControllerGroupeBChangement.java similarity index 89% rename from java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/ETU/Controller/ControllerGroupeBChangement.java rename to java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/Permanent/Controller/ControllerGroupeBChangement.java index 0908b90..5ad07cf 100644 --- a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/ETU/Controller/ControllerGroupeBChangement.java +++ b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/Permanent/Controller/ControllerGroupeBChangement.java @@ -1,4 +1,4 @@ -package fr.iutfbleau.projetIHM2022FI2.ETU.Controller; +package fr.iutfbleau.projetIHM2022FI2.Permanent.Controller; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; diff --git a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/ETU/Controller/ObservateurChangeGroupe.java b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/Permanent/Controller/ObservateurChangeGroupe.java similarity index 78% rename from java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/ETU/Controller/ObservateurChangeGroupe.java rename to java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/Permanent/Controller/ObservateurChangeGroupe.java index f74c5fa..c2b0de7 100644 --- a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/ETU/Controller/ObservateurChangeGroupe.java +++ b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/Permanent/Controller/ObservateurChangeGroupe.java @@ -1,9 +1,9 @@ -package fr.iutfbleau.projetIHM2022FI2.ETU.Controller; +package fr.iutfbleau.projetIHM2022FI2.Permanent.Controller; import java.awt.event.*; import fr.iutfbleau.projetIHM2022FI2.API.Groupe; -import fr.iutfbleau.projetIHM2022FI2.ETU.Model.Model; +import fr.iutfbleau.projetIHM2022FI2.API.Model; public class ObservateurChangeGroupe implements ActionListener{ private Model m; diff --git a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/ROOT/Controller/ObservateurFenetre.java b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/Permanent/Controller/ObservateurFenetre.java similarity index 95% rename from java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/ROOT/Controller/ObservateurFenetre.java rename to java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/Permanent/Controller/ObservateurFenetre.java index 2a5150d..f3769fe 100644 --- a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/ROOT/Controller/ObservateurFenetre.java +++ b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/Permanent/Controller/ObservateurFenetre.java @@ -1,4 +1,4 @@ -package fr.iutfbleau.projetIHM2022FI2.ROOT.Controller; +package fr.iutfbleau.projetIHM2022FI2.Permanent.Controller; import java.awt.event.WindowEvent; import java.awt.event.WindowListener; import javax.swing.JOptionPane; diff --git a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/Permanent/TestTexteMNP.java b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/Permanent/TestTexteMNP.java index c52e3be..081c4e7 100644 --- a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/Permanent/TestTexteMNP.java +++ b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/Permanent/TestTexteMNP.java @@ -10,10 +10,10 @@ public class TestTexteMNP{ User chois=Connexion.seConnecter(); if(chois!=null){ if(chois==User.ROOT){ - new fr.iutfbleau.projetIHM2022FI2.ROOT.Model.Model(); + new fr.iutfbleau.projetIHM2022FI2.ROOT.Model.ModelRoot(); } if(chois==User.ETUDIANT){ - new fr.iutfbleau.projetIHM2022FI2.ETU.Model.Model(); + new fr.iutfbleau.projetIHM2022FI2.ETU.Model.ModelEtu(); } if(chois==User.PROF){ diff --git a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/ROOT/Controller/ActionListenerChangeEtu.java b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/ROOT/Controller/ActionListenerChangeEtu.java deleted file mode 100644 index 6c294ca..0000000 --- a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/ROOT/Controller/ActionListenerChangeEtu.java +++ /dev/null @@ -1,20 +0,0 @@ -package fr.iutfbleau.projetIHM2022FI2.ROOT.Controller; -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; - -import fr.iutfbleau.projetIHM2022FI2.API.Etudiant; -import fr.iutfbleau.projetIHM2022FI2.ROOT.Model.Model; - -public class ActionListenerChangeEtu implements ActionListener { - public Etudiant etudiant; - public Model model; - public ActionListenerChangeEtu(Model m, Etudiant e){ - this.model=m; - this.etudiant=e; - } - @Override - public void actionPerformed(ActionEvent e) { - System.out.println(this.etudiant.toString()); - } - -} diff --git a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/ROOT/Controller/ActionListenerSuprEtu.java b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/ROOT/Controller/ActionListenerSuprEtu.java index ac92de1..804584b 100644 --- a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/ROOT/Controller/ActionListenerSuprEtu.java +++ b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/ROOT/Controller/ActionListenerSuprEtu.java @@ -5,7 +5,7 @@ import java.awt.event.ActionListener; import javax.swing.JOptionPane; import fr.iutfbleau.projetIHM2022FI2.API.Etudiant; -import fr.iutfbleau.projetIHM2022FI2.ROOT.Model.Model; +import fr.iutfbleau.projetIHM2022FI2.API.Model; public class ActionListenerSuprEtu implements ActionListener { public Etudiant etudiant; public Model model; diff --git a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/ROOT/Controller/ObservateurChangeGroupe.java b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/ROOT/Controller/ObservateurChangeGroupe.java deleted file mode 100644 index 75788dd..0000000 --- a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/ROOT/Controller/ObservateurChangeGroupe.java +++ /dev/null @@ -1,21 +0,0 @@ -package fr.iutfbleau.projetIHM2022FI2.ROOT.Controller; - -import java.awt.event.*; - -import fr.iutfbleau.projetIHM2022FI2.API.Groupe; -import fr.iutfbleau.projetIHM2022FI2.ROOT.Model.Model; - -public class ObservateurChangeGroupe implements ActionListener{ - private Model m; - private Groupe g; - public ObservateurChangeGroupe(Model m, Groupe g){ - this.m=m; - this.g=g; - } - - @Override - public void actionPerformed(ActionEvent e) { - m.showGroupe(this.g); - } - -} diff --git a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/ROOT/Controller/ObservateurModifGroupe.java b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/ROOT/Controller/ObservateurModifGroupe.java index 315bd9d..2a2bc83 100644 --- a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/ROOT/Controller/ObservateurModifGroupe.java +++ b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/ROOT/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.ROOT.Model.Model; +import fr.iutfbleau.projetIHM2022FI2.API.Model; import fr.iutfbleau.projetIHM2022FI2.ROOT.View.FenetreSelectionEtu; import javax.swing.*; diff --git a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/ROOT/Model/Model.java b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/ROOT/Model/ModelRoot.java similarity index 68% rename from java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/ROOT/Model/Model.java rename to java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/ROOT/Model/ModelRoot.java index 572e3ca..099c752 100644 --- a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/ROOT/Model/Model.java +++ b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/ROOT/Model/ModelRoot.java @@ -1,27 +1,34 @@ package fr.iutfbleau.projetIHM2022FI2.ROOT.Model; +import java.util.HashSet; import java.util.Set; import javax.swing.*; import java.awt.*; + +import fr.iutfbleau.projetIHM2022FI2.API.AbstractChangementFactory; import fr.iutfbleau.projetIHM2022FI2.API.AbstractGroupeFactory; import fr.iutfbleau.projetIHM2022FI2.API.Etudiant; import fr.iutfbleau.projetIHM2022FI2.API.Groupe; +import fr.iutfbleau.projetIHM2022FI2.API.Model; +import fr.iutfbleau.projetIHM2022FI2.API.TypeGroupe; +import fr.iutfbleau.projetIHM2022FI2.MNP.AbstractChangementFactoryNP; import fr.iutfbleau.projetIHM2022FI2.MNP.AbstractGroupeFactoryNP; +import fr.iutfbleau.projetIHM2022FI2.Permanent.Controller.ObservateurFenetre; import fr.iutfbleau.projetIHM2022FI2.Permanent.View.Chargement; -import fr.iutfbleau.projetIHM2022FI2.ROOT.Controller.ObservateurFenetre; import fr.iutfbleau.projetIHM2022FI2.ROOT.View.FenetreEtudiant; import fr.iutfbleau.projetIHM2022FI2.ROOT.View.FenetreGroupe; /** * Le Model de L'IHM */ -public class Model{ +public class ModelRoot implements Model{ private JPanel panGroupe; private FenetreGroupe fenGr; private FenetreEtudiant fenEtu; private AbstractGroupeFactory promo; + private AbstractChangementFactory changement; private JFrame fenetre; - public Model(){ + public ModelRoot(){ this.fenetre=new JFrame(); this.fenetre.setSize(1200, 720); this.fenetre.setLocation(100,100); @@ -42,6 +49,7 @@ public class Model{ }else{ this.fenGr=new FenetreGroupe(this.promo.getPromotion(), this); this.fenEtu=new FenetreEtudiant(this.promo.getPromotion(), this); + this.changement=new AbstractChangementFactoryNP(this.promo, this.fenetre); } this.panGroupe=new JPanel(new GridLayout(1,1)); if(this.promo!=null){ @@ -51,25 +59,27 @@ public class Model{ } } -/** - * Fonction pour refresh/changer de groupe d'affichage - * @param g le groupe a afficher - */ -public void showGroupe(Groupe g){ - if(g!=null) - g=this.promo.refreshALL(g); - this.panGroupe.removeAll(); - this.fenGr=new FenetreGroupe(g, this); - this.fenEtu=new FenetreEtudiant(g, this); - this.fenetre.getContentPane().removeAll(); - this.panGroupe.add(this.fenGr.getPan()); - this.panGroupe.revalidate(); - this.fenetre.add(this.panGroupe); - JScrollPane scroll=new JScrollPane(this.fenEtu.getPan()); - scroll.getVerticalScrollBar().setUnitIncrement(15); - this.fenetre.add(scroll); - this.fenetre.revalidate(); -} + @Override + /** + * Fonction pour refresh/changer de groupe d'affichage + * @param g le groupe a afficher + */ + public void showGroupe(Groupe g){ + if(g!=null) + g=this.promo.refreshALL(g); + this.panGroupe.removeAll(); + this.fenGr=new FenetreGroupe(g, this); + this.fenEtu=new FenetreEtudiant(g, this); + this.fenetre.getContentPane().removeAll(); + this.panGroupe.add(this.fenGr.getPan()); + this.panGroupe.revalidate(); + this.fenetre.add(this.panGroupe); + JScrollPane scroll=new JScrollPane(this.fenEtu.getPan()); + scroll.getVerticalScrollBar().setUnitIncrement(15); + this.fenetre.add(scroll); + this.fenetre.revalidate(); + } + @Override /** * getteur de la fenetre * @return JFrame la fenetre @@ -77,16 +87,17 @@ public void showGroupe(Groupe g){ public JFrame getFenetre() { return fenetre; } - - public Set<Etudiant> getEtudiant(){ - return this.promo.getPromotion().getEtudiants(); - } + + @Override + public Set<Etudiant> getEtudiant(){ + return this.promo.getEtudiants(null); + } // *********************** // FONCTION POUR SUPRIMER UN ETUDIANT // *********************** - + @Override public boolean deleteEtu(Etudiant e){ if(this.deleteEtutoChildren(e, this.fenGr.getG())){ this.promo.dropFromGroupe(this.fenGr.getG(), e); @@ -112,7 +123,7 @@ public void showGroupe(Groupe g){ // *********************** // FONCTION POUR Ajouter UN ETUDIANT // *********************** - + @Override /** * Fonction pour ajouter un étudiant au groupe * @param g @@ -129,6 +140,7 @@ public void showGroupe(Groupe g){ return true; } + /** * Fonction recursive pour ajouter l'etudiant a ses parents si il ne l'ont pas * @param g groupe @@ -156,7 +168,7 @@ public void showGroupe(Groupe g){ // *********************** // FONCTION POUR SUPRIMER UN GROUPE // *********************** - + @Override /** * Fonction pour supprimer un groupe * @param g le groupe a supprimer @@ -183,6 +195,7 @@ public void showGroupe(Groupe g){ // FONCTION POUR RENOMER UN GROUPE // *********************** + @Override /** * Fonction pour renomer un groupe * @param name @@ -198,7 +211,7 @@ public void showGroupe(Groupe g){ // FONCTION POUR CREER UN GROUPE // ********************** - + @Override /** * Fonction permetant de créer une partition d'un groupe * @param g le groupe a partitionner @@ -214,6 +227,7 @@ public void showGroupe(Groupe g){ this.showGroupe(g); } + @Override /** * Fonction permettant de créer un sous-groupe d'un groupe * @param g le groupe parent @@ -255,9 +269,11 @@ public void showGroupe(Groupe g){ this.showGroupe(g); } + @Override public void addPromo(int min, int max, String name, Set<Etudiant> ajout){ Chargement ch=new Chargement(this.fenetre); this.promo=new AbstractGroupeFactoryNP(name, min, max, this.fenetre); + this.changement=new AbstractChangementFactoryNP(this.promo, this.fenetre); this.fenetre.setVisible(false); ch.addPourcent(20); int pourcent=85/ajout.size(); @@ -270,4 +286,50 @@ public void showGroupe(Groupe g){ this.showGroupe(this.promo.getPromotion()); } + + + @Override + public void changeGroupe(Etudiant e, Groupe b){ + if(b==null) + return; + b=this.promo.refreshALL(b); + if(b.getEtudiants()!=null && b.getMax()>b.getEtudiants().size()+1){ + if(b.getEtudiants().size()>this.fenGr.getG().getEtudiants().size()){ + JPanel myPanel= new JPanel(new GridLayout(2,1)); + JTextField xField = new JTextField(100); + xField.setMinimumSize(new Dimension(100, 100)); + xField.setPreferredSize(new Dimension(100,100)); + myPanel.add(new JLabel("Ce Groupe est plus grand que le votre raison du changement:")); + myPanel.add(xField); + if(JOptionPane.showConfirmDialog(this.fenetre, myPanel, "Changer dans quel Groupe ?", JOptionPane.OK_CANCEL_OPTION)==JOptionPane.OK_OPTION){ + //IL faut que l'etudiant detaile un minimun la raison + if(xField.getText().length()>5){ + this.changement.createChangement(this.fenGr.getG(), e, b, xField.getText()); + }else{ + JOptionPane.showMessageDialog(this.fenetre, "veuillez detailler votre raison", "erreur", JOptionPane.ERROR_MESSAGE); + } + } + }else{ + this.changement.createChangement(this.fenGr.getG(), e, b); + } + }else{ + JOptionPane.showMessageDialog(this.fenetre, "impossible trop d'etudiant dans l'autre Groupe", "erreur", JOptionPane.ERROR_MESSAGE); + } + this.showGroupe(this.fenGr.getG()); + } + + @Override + public Set<Groupe> getGroupePartition(){ + this.promo.refreshALL(this.fenGr.getG().getPointPoint()); + Set<Groupe> retour=new HashSet<Groupe>(); + if(this.fenGr.getG().getPointPoint().getType()!=TypeGroupe.PARTITION) + throw new IllegalStateException("impossible de changer un étudiant d'un groupe ne provenant pas d'une partition"); + for(Groupe sous:this.fenGr.getG().getPointPoint().getSousGroupes()){ + if(sous.getId()!=this.fenGr.getG().getId()){ + retour.add(sous); + } + } + return retour; + } + } diff --git a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/ROOT/View/FenetreEtudiant.java b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/ROOT/View/FenetreEtudiant.java index 982af5e..351e301 100644 --- a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/ROOT/View/FenetreEtudiant.java +++ b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/ROOT/View/FenetreEtudiant.java @@ -11,9 +11,9 @@ import java.util.Set; import fr.iutfbleau.projetIHM2022FI2.API.Etudiant; import fr.iutfbleau.projetIHM2022FI2.API.Groupe; import fr.iutfbleau.projetIHM2022FI2.API.TypeGroupe; -import fr.iutfbleau.projetIHM2022FI2.ROOT.Controller.ActionListenerChangeEtu; +import fr.iutfbleau.projetIHM2022FI2.Permanent.Controller.ActionListenerChangeEtu; import fr.iutfbleau.projetIHM2022FI2.ROOT.Controller.ActionListenerSuprEtu; -import fr.iutfbleau.projetIHM2022FI2.ROOT.Model.Model; +import fr.iutfbleau.projetIHM2022FI2.API.Model; public class FenetreEtudiant{ diff --git a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/ROOT/View/FenetreGroupe.java b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/ROOT/View/FenetreGroupe.java index da5db7c..b2e6ba1 100644 --- a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/ROOT/View/FenetreGroupe.java +++ b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/ROOT/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.ROOT.Controller.ObservateurChangeGroupe; +import fr.iutfbleau.projetIHM2022FI2.Permanent.Controller.ObservateurChangeGroupe; import fr.iutfbleau.projetIHM2022FI2.ROOT.Controller.ObservateurModifGroupe; -import fr.iutfbleau.projetIHM2022FI2.ROOT.Model.Model; +import fr.iutfbleau.projetIHM2022FI2.API.Model; public class FenetreGroupe{ @@ -65,9 +65,11 @@ public class FenetreGroupe{ titre.setFont(new Font(Font.SERIF, Font.BOLD, titre.getFont().getSize()+10)); this.pan.add(titre); this.pan.add(new JLabel("id= "+String.valueOf(g.getId()),JLabel.CENTER)); - this.pan.add(new JLabel("min= "+String.valueOf(g.getMin()),JLabel.CENTER)); - this.pan.add(new JLabel("max= "+String.valueOf(g.getMax()),JLabel.CENTER)); - this.pan.add(new JLabel(g.getType().name(), JLabel.CENTER)); + this.pan.add(new JLabel("min= "+String.valueOf(g.getMin())+"\t || \t max= "+String.valueOf(g.getMax()),JLabel.CENTER)); + JButton refresh= new JButton("Resfresh"); + refresh.addActionListener(new ObservateurChangeGroupe(m, g)); + this.pan.add(refresh); + this.pan.add(new JLabel("Type: "+g.getType().name(), JLabel.CENTER)); this.pan.add(new JLabel("Sous groupe:",JLabel.CENTER)); if(g.getSousGroupes().size()>0){ JPanel sous=new JPanel(new GridLayout(g.getSousGroupes().size(), 1));