ajout en modification en temps réel
This commit is contained in:
parent
df58be5b3e
commit
124dfd8a71
@ -97,6 +97,11 @@ ${BUILD}/MNP/AbstractChangementFactoryNP.class : ${SRC}/MNP/AbstractChangementFa
|
|||||||
|
|
||||||
## Graphic ##
|
## Graphic ##
|
||||||
|
|
||||||
|
## Util ###
|
||||||
|
|
||||||
|
${BUILD}/Graphic/Util/BD.class : ${SRC}/Graphic/Util/BD.java
|
||||||
|
${JAVAC} ${JAVAC_OPTIONS} ${SRC}/Graphic/Util/BD.java
|
||||||
|
|
||||||
## View ##
|
## View ##
|
||||||
${BUILD}/Graphic/View/FenetreGroupe.class : ${SRC}/Graphic/View/FenetreGroupe.java \
|
${BUILD}/Graphic/View/FenetreGroupe.class : ${SRC}/Graphic/View/FenetreGroupe.java \
|
||||||
${BUILD}/Graphic/Controller/ObservateurFenetre.class \
|
${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
|
${BUILD}/Graphic/View/Chargement.class : ${SRC}/Graphic/View/Chargement.java
|
||||||
${JAVAC} ${JAVAC_OPTIONS} ${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/View/FenetreSelectionEtu.class : ${SRC}/Graphic/View/FenetreSelectionEtu.java \
|
||||||
${BUILD}/Graphic/Controller/SelecteurEtudiant.class \
|
${BUILD}/Graphic/Controller/SelecteurEtudiant.class \
|
||||||
${BUILD}/Graphic/Controller/ActionListenerNouveauEtu.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
|
${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 ##
|
## TEST ##
|
||||||
|
|
||||||
${BUILD}/Test/TestTexteMNP.class : ${SRC}/Test/TestTexteMNP.java \
|
${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/ChangementNP.class \
|
||||||
${BUILD}/MNP/AbstractGroupeFactoryNP.class \
|
${BUILD}/MNP/AbstractGroupeFactoryNP.class \
|
||||||
${BUILD}/MNP/AbstractChangementFactoryNP.class \
|
${BUILD}/MNP/AbstractChangementFactoryNP.class \
|
||||||
${BUILD}/Graphic/Model.class
|
${BUILD}/Graphic/Model/Model.class
|
||||||
${JAVAC} -Xlint:deprecation ${JAVAC_OPTIONS} ${SRC}/Test/TestTexteMNP.java
|
${JAVAC} -Xlint:deprecation ${JAVAC_OPTIONS} ${SRC}/Test/TestTexteMNP.java
|
||||||
|
|
||||||
# ## JARS ##
|
# ## JARS ##
|
||||||
|
@ -3,7 +3,7 @@ package fr.iutfbleau.projetIHM2022FI2.Graphic.Controller;
|
|||||||
import java.awt.event.*;
|
import java.awt.event.*;
|
||||||
|
|
||||||
import fr.iutfbleau.projetIHM2022FI2.API.Groupe;
|
import fr.iutfbleau.projetIHM2022FI2.API.Groupe;
|
||||||
import fr.iutfbleau.projetIHM2022FI2.Graphic.Model;
|
import fr.iutfbleau.projetIHM2022FI2.Graphic.Model.Model;
|
||||||
|
|
||||||
public class ObservateurChangeGroupe implements ActionListener{
|
public class ObservateurChangeGroupe implements ActionListener{
|
||||||
private Model m;
|
private Model m;
|
||||||
|
@ -5,7 +5,7 @@ import java.util.LinkedHashSet;
|
|||||||
import fr.iutfbleau.projetIHM2022FI2.API.*;
|
import fr.iutfbleau.projetIHM2022FI2.API.*;
|
||||||
import javax.swing.JOptionPane;
|
import javax.swing.JOptionPane;
|
||||||
import fr.iutfbleau.projetIHM2022FI2.API.Groupe;
|
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 fr.iutfbleau.projetIHM2022FI2.Graphic.View.FenetreSelectionEtu;
|
||||||
import javax.swing.*;
|
import javax.swing.*;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
@ -51,7 +51,8 @@ public class ObservateurModifGroupe implements ActionListener{
|
|||||||
}catch(NumberFormatException er){
|
}catch(NumberFormatException er){
|
||||||
JOptionPane.showMessageDialog(m.getFenetre(), "erreur dans le nombre de partition", "erreur", JOptionPane.ERROR_MESSAGE);
|
JOptionPane.showMessageDialog(m.getFenetre(), "erreur dans le nombre de partition", "erreur", JOptionPane.ERROR_MESSAGE);
|
||||||
}
|
}
|
||||||
}else{
|
}
|
||||||
|
if(rep==JOptionPane.NO_OPTION){
|
||||||
try{
|
try{
|
||||||
JPanel myPanel = new JPanel();
|
JPanel myPanel = new JPanel();
|
||||||
JTextField xField = new JTextField(5);
|
JTextField xField = new JTextField(5);
|
||||||
@ -99,7 +100,6 @@ public class ObservateurModifGroupe implements ActionListener{
|
|||||||
if(e.getActionCommand()=="add"){
|
if(e.getActionCommand()=="add"){
|
||||||
Set<Etudiant> ajout=new LinkedHashSet<>();
|
Set<Etudiant> ajout=new LinkedHashSet<>();
|
||||||
JPanel myPanel=new FenetreSelectionEtu(this.groupe, ajout);
|
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(JOptionPane.showConfirmDialog(m.getFenetre(), new JScrollPane(myPanel), "Selectionner les étudiant a ajouter", JOptionPane.OK_CANCEL_OPTION) ==JOptionPane.YES_OPTION){
|
||||||
if(this.groupe.getMax()<this.groupe.getEtudiants().size()+ajout.size()){
|
if(this.groupe.getMax()<this.groupe.getEtudiants().size()+ajout.size()){
|
||||||
JOptionPane.showMessageDialog(m.getFenetre(), "Il y a trop d'etudiant pour le groupe", "erreur", JOptionPane.ERROR_MESSAGE);
|
JOptionPane.showMessageDialog(m.getFenetre(), "Il y a trop d'etudiant pour le groupe", "erreur", JOptionPane.ERROR_MESSAGE);
|
||||||
@ -114,6 +114,34 @@ public class ObservateurModifGroupe implements ActionListener{
|
|||||||
if(i>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(i>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);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -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<Groupe> 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<Groupe> 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<Etudiant> 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()<creer.getMin()){
|
|
||||||
//On le supprime
|
|
||||||
this.promo.deleteGroupe(creer);
|
|
||||||
JOptionPane.showMessageDialog(this.fenetre, "en raison du manque d'etudiant pour le nombre min le groupe n'a pas pus être créer", "errer", JOptionPane.ERROR_MESSAGE);
|
|
||||||
}
|
|
||||||
this.fenGr.refresh();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Fonction pour renomer un groupe
|
|
||||||
* @param name
|
|
||||||
* @param g
|
|
||||||
*/
|
|
||||||
public void rename(String name, Groupe g){
|
|
||||||
g.setName(name);
|
|
||||||
this.fenGr.refresh();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 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){
|
|
||||||
if(g.getPointPoint()!=g)
|
|
||||||
if(this.addEtuToParent(g.getPointPoint(), e)==false){return false;}
|
|
||||||
g.addEtudiant(e);
|
|
||||||
this.fenEtu.refresh();
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Fonction recursive pour ajouter l'etudiant a ses parents si il ne l'ont pas
|
|
||||||
* @param g groupe
|
|
||||||
* @param e etudiant
|
|
||||||
* @return true si possible
|
|
||||||
*/
|
|
||||||
private boolean addEtuToParent(Groupe g, Etudiant e){
|
|
||||||
if(g.getMax()==g.getSize())
|
|
||||||
return false;
|
|
||||||
for(Etudiant et:g.getEtudiants()){
|
|
||||||
if(et==e){
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if(g.getPointPoint()!=g)
|
|
||||||
if(this.addEtuToParent(g.getPointPoint(), e)==false){return false;}
|
|
||||||
this.promo.addToGroupe(g, e);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
private void refresh(Groupe g){
|
|
||||||
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=? ORDER BY Groupe.id ASC;");
|
|
||||||
try{
|
|
||||||
pst.setString(1, String.valueOf(g.getId()));
|
|
||||||
ResultSet rs = pst.executeQuery();
|
|
||||||
try{
|
|
||||||
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, null, 100);
|
|
||||||
//On y ajoute les étudiants
|
|
||||||
this.addBDEtudiant(groupe, cnx, false);
|
|
||||||
|
|
||||||
}
|
|
||||||
}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){
|
|
||||||
JOptionPane.showMessageDialog(this.fenetre, "erreur connection a la BD", "erreur connection", JOptionPane.YES_NO_OPTION);
|
|
||||||
}
|
|
||||||
}catch(ClassNotFoundException e){
|
|
||||||
System.out.println("pilote non disponible");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -0,0 +1,282 @@
|
|||||||
|
package fr.iutfbleau.projetIHM2022FI2.Graphic.Model;
|
||||||
|
import java.sql.PreparedStatement;
|
||||||
|
import java.sql.SQLException;
|
||||||
|
import java.util.LinkedList;
|
||||||
|
import java.util.Set;
|
||||||
|
import java.sql.Connection;
|
||||||
|
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.ObservateurFenetre;
|
||||||
|
import fr.iutfbleau.projetIHM2022FI2.Graphic.Util.BD;
|
||||||
|
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.GroupeNP;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Le Model de L'IHM
|
||||||
|
*/
|
||||||
|
public class Model{
|
||||||
|
private FenetreGroupe fenGr;
|
||||||
|
private FenetreEtudiant fenEtu;
|
||||||
|
private AbstractGroupeFactory promo;
|
||||||
|
private JFrame fenetre;
|
||||||
|
private BD bd;
|
||||||
|
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.bd=new BD(this.fenetre);
|
||||||
|
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.bd.setFenetre(this.fenetre);
|
||||||
|
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 pour refresh/changer de groupe d'affichage
|
||||||
|
* @param g le groupe a afficher
|
||||||
|
*/
|
||||||
|
public void showGroupe(Groupe g){
|
||||||
|
g=this.bd.refreshALL(g);
|
||||||
|
this.promo=this.getPromo(null);
|
||||||
|
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<Groupe> 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<Groupe> 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<Etudiant> 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()<creer.getMin()){
|
||||||
|
//On le supprime
|
||||||
|
this.promo.deleteGroupe(creer);
|
||||||
|
JOptionPane.showMessageDialog(this.fenetre, "en raison du manque d'etudiant pour le nombre min le groupe n'a pas pus être créer", "errer", JOptionPane.ERROR_MESSAGE);
|
||||||
|
}
|
||||||
|
this.showGroupe(g);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Fonction pour renomer un groupe
|
||||||
|
* @param name
|
||||||
|
* @param g
|
||||||
|
*/
|
||||||
|
public void rename(String name, Groupe g){
|
||||||
|
this.bd.changeNameGroupe(g, name);
|
||||||
|
g.setName(name);
|
||||||
|
this.showGroupe(g);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
public void addPromo(int min, int max, String name){
|
||||||
|
this.promo=new AbstractGroupeFactoryNP(name, min, max);
|
||||||
|
//this.bd.saveGroupe(this.promo.getPromotion());
|
||||||
|
this.showGroupe(this.bd.refreshALL(this.promo.getPromotion()));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 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){
|
||||||
|
//Si on a la place
|
||||||
|
if(this.addEtuToParent(g.getPointPoint(), e)==false)
|
||||||
|
return false;
|
||||||
|
//On induqe a la BD de sauvegarder cette modification
|
||||||
|
this.bd.saveEtu(e, g);
|
||||||
|
//pour un modele NP on l'ajout en local
|
||||||
|
this.promo.addToGroupe(g, e);
|
||||||
|
//on refresh avec la bd
|
||||||
|
this.showGroupe(this.bd.refreshALL(g));
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Fonction recursive pour ajouter l'etudiant a ses parents si il ne l'ont pas
|
||||||
|
* @param g groupe
|
||||||
|
* @param e etudiant
|
||||||
|
* @return true si possible
|
||||||
|
*/
|
||||||
|
private boolean addEtuToParent(Groupe g, Etudiant e){
|
||||||
|
if(g.getMax()==g.getSize())
|
||||||
|
return false;
|
||||||
|
for(Etudiant et:g.getEtudiants()){
|
||||||
|
if(et==e){
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(g.getPointPoint()!=g)
|
||||||
|
if(this.addEtuToParent(g.getPointPoint(), e)==false){return false;}
|
||||||
|
this.promo.addToGroupe(g, e);
|
||||||
|
return 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;
|
||||||
|
Connection cnx=this.bd.cnx();
|
||||||
|
//on récupère le Groupe de la BD n'ayant pas de Parent (La promo donc)
|
||||||
|
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=`Groupe`.`id-parent` ORDER BY Groupe.id ASC;");
|
||||||
|
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
|
||||||
|
//et ses etudiants
|
||||||
|
this.bd.refreshALL(groupe, chargement);
|
||||||
|
//On créer la Factory
|
||||||
|
agf=new AbstractGroupeFactoryNP(groupe);
|
||||||
|
}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();
|
||||||
|
pst.close();
|
||||||
|
}catch(SQLException e){
|
||||||
|
System.out.println("erreur dans le resultat");
|
||||||
|
}
|
||||||
|
this.bd.close(cnx);
|
||||||
|
return agf;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,377 @@
|
|||||||
|
package fr.iutfbleau.projetIHM2022FI2.Graphic.Util;
|
||||||
|
|
||||||
|
import java.sql.Connection;
|
||||||
|
import javax.swing.JFrame;
|
||||||
|
import javax.swing.JOptionPane;
|
||||||
|
import org.mariadb.jdbc.*;
|
||||||
|
import java.sql.DriverManager;
|
||||||
|
import java.sql.ResultSet;
|
||||||
|
import java.sql.PreparedStatement;
|
||||||
|
import java.sql.SQLException;
|
||||||
|
import java.util.Set;
|
||||||
|
import java.util.LinkedHashSet;
|
||||||
|
import fr.iutfbleau.projetIHM2022FI2.API.*;
|
||||||
|
import fr.iutfbleau.projetIHM2022FI2.MNP.*;
|
||||||
|
import fr.iutfbleau.projetIHM2022FI2.Graphic.View.Chargement;
|
||||||
|
|
||||||
|
public class BD {
|
||||||
|
private JFrame fenetre;
|
||||||
|
public BD(JFrame fenetre){
|
||||||
|
this.fenetre=fenetre;
|
||||||
|
}
|
||||||
|
|
||||||
|
public 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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void close(AutoCloseable clos){
|
||||||
|
try{
|
||||||
|
clos.close();
|
||||||
|
}catch(Exception e){
|
||||||
|
if(this.erreurCO()==true)
|
||||||
|
this.close(clos);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 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){
|
||||||
|
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`;");
|
||||||
|
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();
|
||||||
|
rs=pst.executeQuery();
|
||||||
|
//autrement si le groupe as des sous groupe
|
||||||
|
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
|
||||||
|
if(ch!=null)
|
||||||
|
ch.addPourcent(100/nbsous);
|
||||||
|
}
|
||||||
|
rs.close();
|
||||||
|
pst.close();
|
||||||
|
}catch(SQLException e){
|
||||||
|
if(this.erreurCO())
|
||||||
|
this.addSousGroupe(g, cnx, ch);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 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){
|
||||||
|
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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(exist==false){
|
||||||
|
g.addEtudiant(new EtudiantNP(rs.getString(1), rs.getString(2), rs.getInt(3)));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
rs.close();
|
||||||
|
pst.close();
|
||||||
|
}catch(SQLException e){
|
||||||
|
if(this.erreurCO())
|
||||||
|
this.addBDEtudiant(g, cnx);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 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
|
||||||
|
*/
|
||||||
|
public Groupe refreshGroupe(Groupe g){
|
||||||
|
Connection cnx=this.cnx();
|
||||||
|
g=this.refreshGroupe(g, cnx);
|
||||||
|
this.close(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){
|
||||||
|
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<Groupe> it=new LinkedHashSet<>();
|
||||||
|
for(Groupe gr:g.getSousGroupes()){
|
||||||
|
it.add(gr);
|
||||||
|
}
|
||||||
|
for(Groupe gr:it){
|
||||||
|
g.removeSousGroupe(gr);
|
||||||
|
}
|
||||||
|
Set<Etudiant> 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<Groupe> it=new LinkedHashSet<>();
|
||||||
|
for(Groupe gr:g.getSousGroupes()){
|
||||||
|
it.add(gr);
|
||||||
|
}
|
||||||
|
for(Groupe gr:it){
|
||||||
|
g.removeSousGroupe(gr);
|
||||||
|
}
|
||||||
|
Set<Etudiant> 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<Etudiant> 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<Etudiant> 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;
|
||||||
|
}
|
||||||
|
}
|
@ -1,5 +0,0 @@
|
|||||||
package fr.iutfbleau.projetIHM2022FI2.Graphic.Util;
|
|
||||||
|
|
||||||
public class Sauvegarde {
|
|
||||||
public Sauvegarde(){}
|
|
||||||
}
|
|
@ -8,9 +8,9 @@ import java.awt.Font;
|
|||||||
import java.awt.GridLayout;
|
import java.awt.GridLayout;
|
||||||
import fr.iutfbleau.projetIHM2022FI2.API.Groupe;
|
import fr.iutfbleau.projetIHM2022FI2.API.Groupe;
|
||||||
import fr.iutfbleau.projetIHM2022FI2.API.TypeGroupe;
|
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.ObservateurChangeGroupe;
|
||||||
import fr.iutfbleau.projetIHM2022FI2.Graphic.Controller.ObservateurModifGroupe;
|
import fr.iutfbleau.projetIHM2022FI2.Graphic.Controller.ObservateurModifGroupe;
|
||||||
|
import fr.iutfbleau.projetIHM2022FI2.Graphic.Model.Model;
|
||||||
|
|
||||||
|
|
||||||
public class FenetreGroupe extends JPanel{
|
public class FenetreGroupe extends JPanel{
|
||||||
@ -77,7 +77,13 @@ public class FenetreGroupe extends JPanel{
|
|||||||
this.add(new JScrollPane(sous));
|
this.add(new JScrollPane(sous));
|
||||||
}
|
}
|
||||||
}else{
|
}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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -11,6 +11,8 @@ import java.util.Set;
|
|||||||
import java.awt.GridLayout;
|
import java.awt.GridLayout;
|
||||||
import java.awt.Color;
|
import java.awt.Color;
|
||||||
import javax.swing.JButton;
|
import javax.swing.JButton;
|
||||||
|
import javax.swing.JLabel;
|
||||||
|
import javax.swing.JOptionPane;
|
||||||
import javax.swing.JPanel;
|
import javax.swing.JPanel;
|
||||||
|
|
||||||
public class FenetreSelectionEtu extends JPanel{
|
public class FenetreSelectionEtu extends JPanel{
|
||||||
@ -54,6 +56,10 @@ public class FenetreSelectionEtu extends JPanel{
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void addEtudiant(String nom, String prenom){
|
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.etu.add(new EtudiantNP(nom, prenom));
|
||||||
this.removeAll();
|
this.removeAll();
|
||||||
this.draw();
|
this.draw();
|
||||||
@ -69,6 +75,9 @@ public class FenetreSelectionEtu extends JPanel{
|
|||||||
this.add(lab);
|
this.add(lab);
|
||||||
index++;
|
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 +");
|
JButton nouveau=new JButton("Nouveau +");
|
||||||
nouveau.setBackground(Color.RED);
|
nouveau.setBackground(Color.RED);
|
||||||
nouveau.addActionListener(new ActionListenerNouveauEtu(this));
|
nouveau.addActionListener(new ActionListenerNouveauEtu(this));
|
||||||
|
@ -29,7 +29,9 @@ public class EtudiantNP implements Etudiant{
|
|||||||
public EtudiantNP(String nom, String prenom, int id){
|
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(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");
|
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.id=id;
|
||||||
this.nom=nom;
|
this.nom=nom;
|
||||||
this.prenom=prenom;
|
this.prenom=prenom;
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
package fr.iutfbleau.projetIHM2022FI2.Test;
|
package fr.iutfbleau.projetIHM2022FI2.Test;
|
||||||
import fr.iutfbleau.projetIHM2022FI2.Graphic.Model;
|
import fr.iutfbleau.projetIHM2022FI2.Graphic.Model.Model;
|
||||||
|
|
||||||
public class TestTexteMNP{
|
public class TestTexteMNP{
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user