diff --git a/java/APIGroupe/Makefile b/java/APIGroupe/Makefile index 1c37e62..c6e7f4c 100644 --- a/java/APIGroupe/Makefile +++ b/java/APIGroupe/Makefile @@ -150,7 +150,8 @@ ${BUILD}/ROOT/Controller/ObservateurFenetre.class : ${SRC}/ROOT/Controller/Obser ${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/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 @@ -212,10 +213,14 @@ ${BUILD}/ETU/View/Chargement.class : ${SRC}/ETU/View/Chargement.java ${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/ObservateurChangeGroupe.class : ${SRC}/ETU/Controller/ObservateurChangeGroupe.java \ + ${BUILD}/ETU/Controller/ControllerGroupeBChangement.class ${JAVAC} ${JAVAC_OPTIONS} ${SRC}/ETU/Controller/ObservateurChangeGroupe.java ##.... diff --git a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/ETU/Controller/ActionListenerChangeEtu.java b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/ETU/Controller/ActionListenerChangeEtu.java index d7e5525..346070c 100644 --- a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/ETU/Controller/ActionListenerChangeEtu.java +++ b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/ETU/Controller/ActionListenerChangeEtu.java @@ -1,20 +1,65 @@ package fr.iutfbleau.projetIHM2022FI2.ETU.Controller; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; +import java.util.HashSet; +import java.util.Set; + +import javax.swing.JButton; +import javax.swing.JOptionPane; +import javax.swing.JPanel; + +import java.awt.Color; +import java.awt.GridLayout; import fr.iutfbleau.projetIHM2022FI2.API.Etudiant; +import fr.iutfbleau.projetIHM2022FI2.API.Groupe; import fr.iutfbleau.projetIHM2022FI2.ETU.Model.Model; public class ActionListenerChangeEtu implements ActionListener { - public Etudiant etudiant; - public Model model; + private Etudiant etudiant; + private Model model; + private Groupe B; + private Set bout; + private JPanel myPanel; public ActionListenerChangeEtu(Model m, Etudiant e){ this.model=m; this.etudiant=e; + this.B=null; + this.bout=null; + myPanel=null; } @Override public void actionPerformed(ActionEvent e) { - System.out.println(this.etudiant.toString()); + if(this.bout==null){ + this.bout=new HashSet<>(); + for(Groupe sous:this.model.getGroupePartition()){ + JButton bouton=new JButton(sous.getName()); + bouton.addActionListener(new ControllerGroupeBChangement(sous, this)); + this.bout.add(bouton); + } + myPanel = new JPanel(new GridLayout(this.bout.size(), 1)); + } + + + for(JButton b: this.bout){ + myPanel.add(b); + } + + if(JOptionPane.showConfirmDialog(this.model.getFenetre(), this.myPanel, "Changer dans quel Groupe ?", JOptionPane.OK_CANCEL_OPTION)==JOptionPane.OK_OPTION){ + if(this.B!=null) + this.model.changeGroupe(this.etudiant, B); + } + } + + public void setGroupeB(Groupe b){ + this.B=b; + for(JButton bouton: this.bout){ + if(bouton.getText()==this.B.getName()){ + bouton.setBackground(Color.GREEN); + }else{ + bouton.setBackground(bouton.getParent().getBackground()); + } + } } } diff --git a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/ETU/Controller/ControllerGroupeBChangement.java b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/ETU/Controller/ControllerGroupeBChangement.java new file mode 100644 index 0000000..0908b90 --- /dev/null +++ b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/ETU/Controller/ControllerGroupeBChangement.java @@ -0,0 +1,19 @@ +package fr.iutfbleau.projetIHM2022FI2.ETU.Controller; + +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import fr.iutfbleau.projetIHM2022FI2.API.Groupe; + +public class ControllerGroupeBChangement implements ActionListener{ + private ActionListenerChangeEtu parent; + private Groupe b; + public ControllerGroupeBChangement(Groupe b, ActionListenerChangeEtu observateur){ + this.parent=observateur; + this.b=b; + } + @Override + public void actionPerformed(ActionEvent e) { + this.parent.setGroupeB(this.b); + } + +} diff --git a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/ETU/Model/Model.java b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/ETU/Model/Model.java index 92dc0da..01b9b88 100644 --- a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/ETU/Model/Model.java +++ b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/ETU/Model/Model.java @@ -1,16 +1,20 @@ package fr.iutfbleau.projetIHM2022FI2.ETU.Model; import java.sql.PreparedStatement; import java.sql.SQLException; +import java.util.HashSet; import java.util.Set; import java.sql.Connection; import java.sql.ResultSet; 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.TypeGroupe; +import fr.iutfbleau.projetIHM2022FI2.MNP.AbstractChangementFactoryNP; import fr.iutfbleau.projetIHM2022FI2.MNP.AbstractGroupeFactoryNP; import fr.iutfbleau.projetIHM2022FI2.MNP.GroupeNP; import fr.iutfbleau.projetIHM2022FI2.ETU.Controller.ObservateurFenetre; @@ -28,9 +32,10 @@ public class Model{ private FenetreGroupe fenGr; private FenetreEtudiant fenEtu; private AbstractGroupeFactory promo; + private AbstractChangementFactory changement; private JFrame fenetre; private Etudiant Selected; - //private JTree tree; + private BD bd; public Model(){ this.fenetre=new JFrame(); @@ -48,10 +53,12 @@ public class Model{ this.initEtu(null); if(this.promo==null){ this.fenGr=new FenetreGroupe(null, this, null); - this.fenEtu=new FenetreEtudiant(null, this.Selected); + this.fenEtu=new FenetreEtudiant(null, this.Selected, this); + this.changement=null; }else{ + this.changement=new AbstractChangementFactoryNP(promo, this.fenetre); this.fenGr=new FenetreGroupe(this.promo.getPromotion(), this,this.promo.getGroupesOfEtudiant(this.Selected)); - this.fenEtu=new FenetreEtudiant(this.promo.getPromotion(), this.Selected); + this.fenEtu=new FenetreEtudiant(this.promo.getPromotion(), this.Selected, this); } this.panGroupe=new JPanel(new GridLayout(1,1)); if(this.promo!=null){ @@ -70,7 +77,7 @@ public void showGroupe(Groupe g){ g=this.bd.refreshALL(g); this.panGroupe.removeAll(); this.fenGr=new FenetreGroupe(g, this, this.promo.getGroupesOfEtudiant(this.Selected)); - this.fenEtu=new FenetreEtudiant(g, this.Selected); + this.fenEtu=new FenetreEtudiant(g, this.Selected, this); this.fenetre.getContentPane().removeAll(); this.panGroupe.add(this.fenGr.getPan()); this.panGroupe.revalidate(); @@ -153,7 +160,7 @@ public void showGroupe(Groupe g){ } panel.add(myPanel); - if(JOptionPane.showConfirmDialog(null, panel, "login", JOptionPane.OK_CANCEL_OPTION) != JOptionPane.OK_OPTION){ + if(JOptionPane.showConfirmDialog(this.fenetre, panel, "login", JOptionPane.OK_CANCEL_OPTION) != JOptionPane.OK_OPTION){ this.fenetre.dispose(); System.exit(0); }else{ @@ -261,6 +268,7 @@ public void showGroupe(Groupe g){ if(JOptionPane.showConfirmDialog(this.fenetre, "Attention ête vous sûr de vouloir supprimer la promo", "Attention", JOptionPane.YES_NO_OPTION)==JOptionPane.YES_OPTION){ this.promo.deleteGroupe(g); this.promo=null; + this.changement=null; this.showGroupe(null); }else{ return; @@ -352,6 +360,7 @@ public void showGroupe(Groupe g){ public void addPromo(int min, int max, String name, Set ajout){ Chargement ch=new Chargement(this.fenetre); this.promo=new AbstractGroupeFactoryNP(name, min, max, this.fenetre); + this.changement=new AbstractChangementFactoryNP(promo, this.fenetre); this.fenetre.setVisible(false); ch.addPourcent(20); int pourcent=85/ajout.size(); @@ -364,4 +373,32 @@ public void showGroupe(Groupe g){ this.showGroupe(this.promo.getPromotion()); } + + // ************************** + // FONCTION POUR LES CHANGEMENTS + // ****************************** + public void changeGroupe(Etudiant e, Groupe b){ + if(b==null) + return; + b=this.bd.refreshGroupe(b); + if(b.getEtudiants()!=null && b.getMax()>b.getEtudiants().size()+1){ + 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()); + } + + public Set getGroupePartition(){ + Set retour=new HashSet<>(); + 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/ETU/View/FenetreEtudiant.java b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/ETU/View/FenetreEtudiant.java index 720e3ce..0ee1c26 100644 --- a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/ETU/View/FenetreEtudiant.java +++ b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/ETU/View/FenetreEtudiant.java @@ -11,15 +11,19 @@ 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; public class FenetreEtudiant{ private Set etu; private JPanel pan; private Etudiant concerner; + private Model model; private boolean partition; - public FenetreEtudiant(Groupe g, Etudiant e){ + public FenetreEtudiant(Groupe g, Etudiant e, Model m){ this.pan=new JPanel(); + this.model=m; if(g!=null){ this.etu=g.getEtudiants(); }else{ @@ -38,7 +42,7 @@ public class FenetreEtudiant{ if(this.etu.size()!=0){ this.pan.setLayout(new GridLayout(this.etu.size(), 1, 30, 0)); PanelEtudiant p=new PanelEtudiant(this.concerner, this.partition); - p.addActionChangeListener(null); + p.addActionChangeListener(new ActionListenerChangeEtu(this.model, this.concerner)); this.pan.add(p); for(Etudiant e: this.etu){ if(this.concerner.getId() != e.getId()){ diff --git a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MNP/AbstractChangementFactoryNP.java b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MNP/AbstractChangementFactoryNP.java index b185d66..1b3fec3 100644 --- a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MNP/AbstractChangementFactoryNP.java +++ b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MNP/AbstractChangementFactoryNP.java @@ -1,5 +1,13 @@ package fr.iutfbleau.projetIHM2022FI2.MNP; import fr.iutfbleau.projetIHM2022FI2.API.*; +import java.sql.Connection; +import org.mariadb.jdbc.*; +import java.sql.DriverManager; +import java.sql.ResultSet; +import java.sql.PreparedStatement; +import java.sql.SQLException; +import javax.swing.JFrame; +import javax.swing.JOptionPane; import java.util.*; /** * Usine abstraite gérant l'ensemble des changements. @@ -10,14 +18,15 @@ public class AbstractChangementFactoryNP implements AbstractChangementFactory { // l'usine à groupe travaillant en tandem avec cette usine. private AbstractGroupeFactory agf; - + private JFrame fenetre; // On utilise une table de hachage pour retrouver facilement un changement (à partir de son id). // Si il y a beaucoup de changements c'est plus rapide que de parcourir toute une liste. private HashMap brain; - public AbstractChangementFactoryNP(AbstractGroupeFactory agf){ + public AbstractChangementFactoryNP(AbstractGroupeFactory agf, JFrame fenetre){ Objects.requireNonNull(agf,"On ne peut pas créer une usine à changement dont l'usine à groupe parternaire est null"); this.agf=agf; + this.fenetre=fenetre; this.brain=new HashMap(); } @@ -96,9 +105,71 @@ public class AbstractChangementFactoryNP implements AbstractChangementFactory { 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); - this.brain.put(Integer.valueOf(c.getId()),c); + this.brain.put(Integer.valueOf(c.getId()),c); + Connection cnx=this.cnx(); + try{ + PreparedStatement pst=cnx.prepareStatement("INSERT INTO `Changement` (`idGroupeA`, `idGroupeB`, `idEtudiant`) VALUES (?, ?, ?);"); + pst.setInt(1, A.getId()); + pst.setInt(2, B.getId()); + pst.setInt(3, e.getId()); + pst.executeUpdate(); + pst.close(); + }catch(SQLException er){ + if(this.erreurSQL()){ + this.createChangement(A, e, B); + }else{ + return; + } + } + this.close(cnx); + } + + + // ********************** + // FONCTION POUR SIMPLIFIER LES Modification BD + // *********************** + + + private Connection cnx(){ + //On se Connecte a la BD + try{ + Class.forName("org.mariadb.jdbc.Driver"); + Connection cnx = DriverManager.getConnection( + "jdbc:mariadb://dwarves.iut-fbleau.fr/chaignea", + "chaignea", "Chaigneauphpmyadmin"); + return cnx; + }catch(Exception e){ + if(this.erreurCO()==true){ + return this.cnx(); + } + } + return null; } + private boolean erreurCO(){ + if(JOptionPane.showConfirmDialog(this.fenetre, "erreur connection a la BD reassayer?", "erreur connection", JOptionPane.YES_NO_OPTION)==JOptionPane.YES_OPTION){ + return true; + }else{ + this.fenetre.dispose(); + return false; + } + } + + private boolean erreurSQL(){ + if(JOptionPane.showConfirmDialog(this.fenetre, "erreur lors de la modification, reasssayer?", "erreur SQL", JOptionPane.YES_NO_OPTION)==JOptionPane.YES_OPTION){ + return true; + }else{ + return false; + } + } + + private void close(AutoCloseable clos){ + try{ + clos.close(); + }catch(Exception e){ + if(this.erreurCO()==true) + this.close(clos); + } + } } diff --git a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MNP/AbstractGroupeFactoryNP.java b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MNP/AbstractGroupeFactoryNP.java index f1f232d..c30b6d2 100644 --- a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MNP/AbstractGroupeFactoryNP.java +++ b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MNP/AbstractGroupeFactoryNP.java @@ -375,13 +375,13 @@ public class AbstractGroupeFactoryNP implements AbstractGroupeFactory { } private void close(AutoCloseable clos){ - try{ - clos.close(); - }catch(Exception e){ - if(this.erreurCO()==true) - this.close(clos); + try{ + clos.close(); + }catch(Exception e){ + if(this.erreurCO()==true) + this.close(clos); + } } -} private boolean saveEtu(Etudiant etudiant, Groupe g){ 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 005058a..982af5e 100644 --- a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/ROOT/View/FenetreEtudiant.java +++ b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/ROOT/View/FenetreEtudiant.java @@ -10,6 +10,7 @@ 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.ROOT.Controller.ActionListenerSuprEtu; import fr.iutfbleau.projetIHM2022FI2.ROOT.Model.Model; @@ -19,12 +20,15 @@ public class FenetreEtudiant{ private Set etu; private Model m; private JPanel pan; + private TypeGroupe type; public FenetreEtudiant(Groupe g, Model m){ this.pan=new JPanel(); this.m=m; if(g!=null){ + this.type=g.getPointPoint().getType(); this.etu=g.getEtudiants(); }else{ + this.type=null; this.etu=new LinkedHashSet<>(); } this.draw(); @@ -34,7 +38,12 @@ public class FenetreEtudiant{ if(this.etu.size()!=0){ this.pan.setLayout(new GridLayout(this.etu.size(), 1, 10, 0)); for(Etudiant e: this.etu){ - PanelEtudiant p=new PanelEtudiant(e); + PanelEtudiant p; + if(type!=null && type==TypeGroupe.PARTITION){ + p=new PanelEtudiant(e, true); + }else{ + p=new PanelEtudiant(e, false); + } p.addActionDeleteListener(new ActionListenerSuprEtu(m, e)); p.addActionChangeListener(new ActionListenerChangeEtu(m, e)); this.pan.add(p); diff --git a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/ROOT/View/PanelEtudiant.java b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/ROOT/View/PanelEtudiant.java index 1467083..531cd63 100644 --- a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/ROOT/View/PanelEtudiant.java +++ b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/ROOT/View/PanelEtudiant.java @@ -11,16 +11,17 @@ import java.awt.event.ActionListener; public class PanelEtudiant extends JPanel{ private JButton supprimer; private JButton deplacer; - public PanelEtudiant(Etudiant e){ + public PanelEtudiant(Etudiant e, boolean change){ super(new GridLayout(1,2,20,10)); + JPanel bouton=new JPanel(new GridLayout(1,2)); JLabel label=new JLabel(" "+e.getNom()+" "+e.getPrenom()+" "+e.getId(), JLabel.LEFT); this.supprimer=new JButton("supr"); this.deplacer=new JButton("change"); - + if(change==true){ + bouton.add(this.deplacer); + } this.add(label); - JPanel bouton=new JPanel(new GridLayout(1,2)); bouton.add(this.supprimer); - bouton.add(this.deplacer); this.add(bouton); }