debut changement

This commit is contained in:
martins 2022-11-29 15:09:41 +01:00
parent c215672e38
commit 1351345df5
9 changed files with 218 additions and 27 deletions

View File

@ -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
##....

View File

@ -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<JButton> 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());
}
}
}
}

View File

@ -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);
}
}

View File

@ -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<Etudiant> 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<Groupe> getGroupePartition(){
Set<Groupe> 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;
}
}

View File

@ -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<Etudiant> 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()){

View File

@ -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<Integer,Changement> 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<Integer,Changement>();
}
@ -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);
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);
}
}
}

View File

@ -381,7 +381,7 @@ public class AbstractGroupeFactoryNP implements AbstractGroupeFactory {
if(this.erreurCO()==true)
this.close(clos);
}
}
}
private boolean saveEtu(Etudiant etudiant, Groupe g){

View File

@ -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<Etudiant> 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);

View File

@ -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");
this.add(label);
JPanel bouton=new JPanel(new GridLayout(1,2));
bouton.add(this.supprimer);
if(change==true){
bouton.add(this.deplacer);
}
this.add(label);
bouton.add(this.supprimer);
this.add(bouton);
}