modif estetique et correction de bug

This commit is contained in:
martins 2022-11-14 22:57:17 +01:00
parent 2618f46017
commit df58be5b3e
11 changed files with 265 additions and 296 deletions

View File

@ -124,8 +124,12 @@ ${BUILD}/Graphic/Model.class : ${SRC}/Graphic/Model.java \
${JAVAC} ${JAVAC_OPTIONS} ${SRC}/Graphic/Model.java ${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
${JAVAC} ${JAVAC_OPTIONS} ${SRC}/Graphic/View/FenetreSelectionEtu.java ${JAVAC} ${JAVAC_OPTIONS} ${SRC}/Graphic/View/FenetreSelectionEtu.java
## Controller ## ## Controller ##
${BUILD}/Graphic/Controller/ObservateurFenetre.class : ${SRC}/Graphic/Controller/ObservateurFenetre.java ${BUILD}/Graphic/Controller/ObservateurFenetre.class : ${SRC}/Graphic/Controller/ObservateurFenetre.java
${JAVAC} ${JAVAC_OPTIONS} ${SRC}/Graphic/Controller/ObservateurFenetre.java ${JAVAC} ${JAVAC_OPTIONS} ${SRC}/Graphic/Controller/ObservateurFenetre.java
@ -139,6 +143,9 @@ ${BUILD}/Graphic/Controller/ObservateurChangeGroupe.class : ${SRC}/Graphic/Contr
${BUILD}/Graphic/Controller/SelecteurEtudiant.class : ${SRC}/Graphic/Controller/SelecteurEtudiant.java ${BUILD}/Graphic/Controller/SelecteurEtudiant.class : ${SRC}/Graphic/Controller/SelecteurEtudiant.java
${JAVAC} ${JAVAC_OPTIONS} ${SRC}/Graphic/Controller/SelecteurEtudiant.java ${JAVAC} ${JAVAC_OPTIONS} ${SRC}/Graphic/Controller/SelecteurEtudiant.java
${BUILD}/Graphic/Controller/ActionListenerNouveauEtu.class : ${SRC}/Graphic/Controller/ActionListenerNouveauEtu.java
${JAVAC} ${JAVAC_OPTIONS} ${SRC}/Graphic/Controller/ActionListenerNouveauEtu.java
##.... ##....
## TEST ## ## TEST ##

View File

@ -0,0 +1,32 @@
package fr.iutfbleau.projetIHM2022FI2.Graphic.Controller;
import java.awt.event.ActionListener;
import fr.iutfbleau.projetIHM2022FI2.Graphic.View.FenetreSelectionEtu;
import javax.swing.*;
import java.awt.event.ActionEvent;
public class ActionListenerNouveauEtu implements ActionListener{
private FenetreSelectionEtu pere;
public ActionListenerNouveauEtu(FenetreSelectionEtu pere){
this.pere=pere;
}
@Override
public void actionPerformed(ActionEvent e) {
JPanel myPanel = new JPanel();
JTextField xField = new JTextField(20);
JTextField yField = new JTextField(20);
myPanel.add(new JLabel("Nom:"));
myPanel.add(xField);
myPanel.add(Box.createHorizontalStrut(15));
myPanel.add(new JLabel("Prenom:"));
myPanel.add(yField);
int result = JOptionPane.showConfirmDialog(this.pere, myPanel,
"Entrer le nombre et le nom des Partitions", JOptionPane.OK_CANCEL_OPTION);
if(result==JOptionPane.YES_OPTION){
this.pere.addEtudiant(xField.getText(), yField.getText());
}
}
}

View File

@ -26,9 +26,10 @@ public class ObservateurFenetre implements WindowListener{
public void windowClosing(WindowEvent e) { public void windowClosing(WindowEvent e) {
JFrame fenetre= (JFrame) e.getSource(); JFrame fenetre= (JFrame) e.getSource();
int confirmation = JOptionPane.showConfirmDialog(fenetre.getContentPane(), "Voulez vous quitter?", "Quitter", JOptionPane.YES_NO_OPTION); int confirmation = JOptionPane.showConfirmDialog(fenetre.getContentPane(), "Voulez vous quitter?", "Quitter", JOptionPane.YES_NO_OPTION);
if(confirmation == JOptionPane.YES_OPTION); if(confirmation == JOptionPane.YES_OPTION){
fenetre.dispose(); fenetre.dispose();
} }
}
@Override @Override
public void windowDeactivated(WindowEvent e) { public void windowDeactivated(WindowEvent e) {

View File

@ -4,7 +4,6 @@ import java.awt.event.*;
import java.util.LinkedHashSet; 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;
import fr.iutfbleau.projetIHM2022FI2.Graphic.View.FenetreSelectionEtu; import fr.iutfbleau.projetIHM2022FI2.Graphic.View.FenetreSelectionEtu;
@ -20,10 +19,10 @@ public class ObservateurModifGroupe implements ActionListener{
@Override @Override
public void actionPerformed(ActionEvent e) { public void actionPerformed(ActionEvent e) {
if(e.getActionCommand()=="suprimer ce groupe"){ if(e.getActionCommand()=="supr"){
this.m.delete(this.groupe); this.m.delete(this.groupe);
} }
if(e.getActionCommand()=="créer un sous groupe"){ if(e.getActionCommand()=="new Groupe"){
String g[]=new String[2]; String g[]=new String[2];
g[0]="Partition"; g[0]="Partition";
g[1]="Free"; g[1]="Free";
@ -36,7 +35,7 @@ public class ObservateurModifGroupe implements ActionListener{
JTextField yField = new JTextField(20); JTextField yField = new JTextField(20);
myPanel.add(new JLabel("Nombre:")); myPanel.add(new JLabel("Nombre:"));
myPanel.add(xField); myPanel.add(xField);
myPanel.add(Box.createHorizontalStrut(15)); // a spacer myPanel.add(Box.createHorizontalStrut(15));
myPanel.add(new JLabel("Nom:")); myPanel.add(new JLabel("Nom:"));
myPanel.add(yField); myPanel.add(yField);
int result = JOptionPane.showConfirmDialog(m.getFenetre(), myPanel, int result = JOptionPane.showConfirmDialog(m.getFenetre(), myPanel,
@ -60,7 +59,7 @@ public class ObservateurModifGroupe implements ActionListener{
JTextField yField = new JTextField(20); JTextField yField = new JTextField(20);
myPanel.add(new JLabel("Nom:")); myPanel.add(new JLabel("Nom:"));
myPanel.add(yField); myPanel.add(yField);
myPanel.add(Box.createHorizontalStrut(15)); // a spacer myPanel.add(Box.createHorizontalStrut(15));
myPanel.add(new JLabel("Min:")); myPanel.add(new JLabel("Min:"));
myPanel.add(xField); myPanel.add(xField);
myPanel.add(new JLabel("Max:")); myPanel.add(new JLabel("Max:"));
@ -75,7 +74,7 @@ public class ObservateurModifGroupe implements ActionListener{
return; return;
} }
Set<Etudiant> ajout=new LinkedHashSet<>(); Set<Etudiant> ajout=new LinkedHashSet<>();
myPanel=new FenetreSelectionEtu(this.groupe.getPointPoint(), ajout); myPanel=new FenetreSelectionEtu(this.groupe, ajout);
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(ajout.size()>=min && ajout.size()<=max){ if(ajout.size()>=min && ajout.size()<=max){
m.free(groupe, yField.getText(), min, max, ajout); m.free(groupe, yField.getText(), min, max, ajout);
@ -93,22 +92,27 @@ public class ObservateurModifGroupe implements ActionListener{
} }
} }
} }
if(e.getActionCommand()=="renomer"){ if(e.getActionCommand()=="rename"){
String nouveau=JOptionPane.showInputDialog(m.getFenetre(), "Rentrer le nouveau Nom"); String nouveau=JOptionPane.showInputDialog(m.getFenetre(), "Rentrer le nouveau Nom");
m.rename(nouveau, this.groupe); m.rename(nouveau, this.groupe);
} }
if(e.getActionCommand()=="ajouter"){ if(e.getActionCommand()=="add"){
Set<Etudiant> ajout=new LinkedHashSet<>(); Set<Etudiant> ajout=new LinkedHashSet<>();
JPanel myPanel=new FenetreSelectionEtu(this.groupe.getPointPoint(), 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);
return; return;
} }
int i=0;
for(Etudiant et:ajout){ for(Etudiant et:ajout){
m.addEtudiant(this.groupe, et); if(m.addEtudiant(this.groupe, et)==false){
i++;
} }
} }
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);}
}
} }
} }

View File

@ -43,7 +43,6 @@ public class Model{
this.fenetre.add(ch, BorderLayout.CENTER); this.fenetre.add(ch, BorderLayout.CENTER);
this.fenetre.setVisible(true); this.fenetre.setVisible(true);
this.promo=this.getPromo(ch); this.promo=this.getPromo(ch);
//A Modif
if(this.promo==null){ if(this.promo==null){
this.fenGr=new FenetreGroupe(null, this); this.fenGr=new FenetreGroupe(null, this);
this.fenEtu=new FenetreEtudiant(null); this.fenEtu=new FenetreEtudiant(null);
@ -56,12 +55,14 @@ public class Model{
this.fenetre.setSize(1200, 720); this.fenetre.setSize(1200, 720);
this.fenetre.setLocation(100,100); this.fenetre.setLocation(100,100);
this.fenetre.addWindowListener(new ObservateurFenetre()); this.fenetre.addWindowListener(new ObservateurFenetre());
this.fenetre.setLayout(new GridLayout(2,1)); this.fenetre.setLayout(new GridLayout(1,2));
this.fenetre.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); this.fenetre.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
this.fenetre.add(new JScrollPane(this.fenGr)); this.fenetre.setMinimumSize(this.fenetre.getSize());
this.fenetre.add(new JScrollPane(this.fenEtu)); this.fenetre.add(this.fenGr);
JScrollPane scroll=new JScrollPane(this.fenEtu);
scroll.getVerticalScrollBar().setUnitIncrement(15);
this.fenetre.add(scroll);
this.fenetre.setVisible(true); this.fenetre.setVisible(true);
this.addEtudiant(this.promo.getPromotion().getSousGroupes().iterator().next(), new EtudiantNP("test", "test"));
} }
/** /**
@ -95,7 +96,7 @@ public class Model{
//On créer la Factory //On créer la Factory
agf=new AbstractGroupeFactoryNP(groupe); agf=new AbstractGroupeFactoryNP(groupe);
//On y ajoute les étudiants //On y ajoute les étudiants
this.addBDEtudiant(groupe, cnx, agf); this.addBDEtudiant(groupe, cnx, true);
}else{ }else{
//Si aucune ligne et donc pas de promo: //Si aucune ligne et donc pas de promo:
this.promo=null; this.promo=null;
@ -113,7 +114,8 @@ public class Model{
} }
cnx.close(); cnx.close();
}catch(SQLException e){ }catch(SQLException e){
System.out.println("Erreur dans la connexion!"); chargement.erreur();
JOptionPane.showMessageDialog(this.fenetre, "erreur connection a la BD", "erreur connection", JOptionPane.YES_NO_OPTION);
} }
}catch(ClassNotFoundException e){ }catch(ClassNotFoundException e){
System.out.println("pilote non disponible"); System.out.println("pilote non disponible");
@ -177,7 +179,7 @@ public class Model{
* @param g le groupe pour qui ajouter les Etudiant * @param g le groupe pour qui ajouter les Etudiant
* @param cnx la connection (evite de surcharger la BD) * @param cnx la connection (evite de surcharger la BD)
*/ */
private void addBDEtudiant(Groupe g, Connection cnx, AbstractGroupeFactory agf){ private void addBDEtudiant(Groupe g, Connection cnx, boolean recursif){
try{ try{
//On récupère les etudiants contenue du groupe //On récupère les etudiants contenue du groupe
PreparedStatement pst; PreparedStatement pst;
@ -189,23 +191,23 @@ public class Model{
try{ try{
//Pour tous les étudiants //Pour tous les étudiants
while(rs.next()){ while(rs.next()){
//si c'est la groupe de promo boolean exist=false;
//On ne peut pas récuperer l'etudiant il est donc créer
if(g==agf.getPromotion()){
agf.addToGroupe(g, new EtudiantNP(rs.getString(1), rs.getString(2), rs.getInt(3)));
}else{
//autrement on recupere l'etudiant //autrement on recupere l'etudiant
for(Etudiant e: g.getPointPoint().getEtudiants()){ for(Etudiant e: g.getPointPoint().getEtudiants()){
if(e.getId()==rs.getInt(3)){ if(e.getId()==rs.getInt(3)){
agf.addToGroupe(g, e); exist=true;
g.addEtudiant(e);
break; 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 //on ajout les étudiants a tous les sous groupe
for(Groupe sous:g.getSousGroupes()){ for(Groupe sous:g.getSousGroupes()){
this.addBDEtudiant(sous, cnx, agf); if(recursif==true)
this.addBDEtudiant(sous, cnx, true);
} }
}catch(SQLException e){ }catch(SQLException e){
System.out.println("erreur dans la prise de resultat"); System.out.println("erreur dans la prise de resultat");
@ -228,8 +230,10 @@ public class Model{
this.fenGr=new FenetreGroupe(g, this); this.fenGr=new FenetreGroupe(g, this);
this.fenEtu=new FenetreEtudiant(g); this.fenEtu=new FenetreEtudiant(g);
this.fenetre.getContentPane().removeAll(); this.fenetre.getContentPane().removeAll();
this.fenetre.add(new JScrollPane(this.fenGr)); this.fenetre.add(this.fenGr);
this.fenetre.add(new JScrollPane(this.fenEtu)); JScrollPane scroll=new JScrollPane(this.fenEtu);
scroll.getVerticalScrollBar().setUnitIncrement(15);
this.fenetre.add(scroll);
this.fenetre.revalidate(); this.fenetre.revalidate();
} }
/** /**
@ -284,6 +288,7 @@ public class Model{
*/ */
public void partition(Groupe g, int n, String name){ public void partition(Groupe g, int n, String name){
this.promo.createPartition(g, name, n); this.promo.createPartition(g, name, n);
this.refresh(g);
this.fenGr.refresh(); this.fenGr.refresh();
} }
@ -307,8 +312,18 @@ public class Model{
} }
} }
//on y ajoute les étudiant //on y ajoute les étudiant
int n=0;
for(Etudiant e:ajout){ for(Etudiant e:ajout){
this.addEtudiant(creer, e); 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(); this.fenGr.refresh();
} }
@ -327,26 +342,77 @@ public class Model{
* Fonction pour ajouter un étudiant au groupe * Fonction pour ajouter un étudiant au groupe
* @param g * @param g
* @param e * @param e
* @return boolean pour savoir si il a pus être ajouter
*/ */
public void addEtudiant(Groupe g, Etudiant e){ public boolean addEtudiant(Groupe g, Etudiant e){
g.addEtudiant(e);
if(g.getPointPoint()!=g) if(g.getPointPoint()!=g)
this.addEtuToParent(g.getPointPoint(), e); if(this.addEtuToParent(g.getPointPoint(), e)==false){return false;}
g.addEtudiant(e);
this.fenEtu.refresh(); this.fenEtu.refresh();
return true;
} }
private void addEtuToParent(Groupe g, Etudiant e){ /**
* 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()){ for(Etudiant et:g.getEtudiants()){
if(et==e){ if(et==e){
return; return true;
} }
} }
if(g.getPointPoint()!=g) if(g.getPointPoint()!=g)
this.addEtuToParent(g.getPointPoint(), e); if(this.addEtuToParent(g.getPointPoint(), e)==false){return false;}
this.promo.addToGroupe(g, e); this.promo.addToGroupe(g, e);
return true;
} }
private void refresh(Groupe g){ 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");
}
}
} }

View File

@ -11,8 +11,10 @@ import java.awt.*;
*/ */
public class Chargement extends JComponent{ public class Chargement extends JComponent{
private int pourcentage; private int pourcentage;
private boolean erreur;
public Chargement(){ public Chargement(){
this.erreur=false;
this.pourcentage=0; this.pourcentage=0;
} }
public void addPourcent(int n){ public void addPourcent(int n){
@ -39,5 +41,15 @@ public class Chargement extends JComponent{
secondPinceau.drawRect(this.getWidth()/10, this.getHeight()/2, this.getWidth()/10*8, this.getHeight()/10); secondPinceau.drawRect(this.getWidth()/10, this.getHeight()/2, this.getWidth()/10*8, this.getHeight()/10);
float stat=(int) 8.F/100.F*(pourcentage); float stat=(int) 8.F/100.F*(pourcentage);
secondPinceau.fillRect(this.getWidth()/10, this.getHeight()/2, this.getWidth()/10*((int) stat), this.getHeight()/10); secondPinceau.fillRect(this.getWidth()/10, this.getHeight()/2, this.getWidth()/10*((int) stat), this.getHeight()/10);
if(this.erreur==true){
secondPinceau.setColor(Color.RED);
secondPinceau.setFont(new Font(Font.SANS_SERIF, Font.BOLD, (this.getWidth()/20)));
metrics = secondPinceau.getFontMetrics(secondPinceau.getFont());
secondPinceau.drawString("erreur connection BD", (this.getWidth()/2-metrics.stringWidth("erreur connection BD")/2), (this.getHeight()-metrics.getHeight())/4*3+metrics.getAscent());
}
}
public void erreur(){
this.erreur=true;
} }
} }

View File

@ -26,7 +26,7 @@ public class FenetreEtudiant extends JPanel{
private void draw(){ private void draw(){
if(this.etu.size()!=0){ if(this.etu.size()!=0){
this.setLayout(new GridLayout(this.etu.size()/2+1, 2, 10, 0)); this.setLayout(new GridLayout(this.etu.size(), 1, 10, 0));
for(Etudiant e: this.etu){ for(Etudiant e: this.etu){
PanelEtudiant p=new PanelEtudiant(e); PanelEtudiant p=new PanelEtudiant(e);
this.add(p); this.add(p);

View File

@ -3,7 +3,8 @@ package fr.iutfbleau.projetIHM2022FI2.Graphic.View;
import javax.swing.JButton; import javax.swing.JButton;
import javax.swing.JLabel; import javax.swing.JLabel;
import javax.swing.JPanel; import javax.swing.JPanel;
import javax.swing.JScrollPane;
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;
@ -31,36 +32,49 @@ public class FenetreGroupe extends JPanel{
} }
private void draw(){ private void draw(){
if(g!=null){ if(g!=null){
this.setLayout(new GridLayout(11+g.getSousGroupes().size(), 1)); int taille=5;
JButton bout=new JButton("point point"); if(g.getType()==TypeGroupe.PARTITION || g.getType()==TypeGroupe.ROOT)
taille--;
if(g.getSousGroupes().size()>0)
this.setLayout(new GridLayout(8, 1));
else{this.setLayout(new GridLayout(7, 1));}
JPanel tache=new JPanel(new GridLayout(1,taille));
if(g.getType()!=TypeGroupe.ROOT){
JButton bout=new JButton("<-");
bout.addActionListener(new ObservateurChangeGroupe(m, this.g.getPointPoint())); bout.addActionListener(new ObservateurChangeGroupe(m, this.g.getPointPoint()));
this.add(bout); tache.add(bout);
this.add(new JLabel(g.getName(), JLabel.CENTER)); }
JButton renomer=new JButton("rename");
renomer.addActionListener(new ObservateurModifGroupe(m, g));
tache.add(renomer);
JButton ajouter=new JButton("add");
ajouter.addActionListener(new ObservateurModifGroupe(m, g));
tache.add(ajouter);
JButton supprimer=new JButton("supr");
supprimer.addActionListener(new ObservateurModifGroupe(m, g));
tache.add(supprimer);
if(g.getType()!=TypeGroupe.PARTITION){
JButton creer=new JButton("new Groupe");
creer.addActionListener(new ObservateurModifGroupe(m, g));
tache.add(creer);
}
this.add(tache);
JLabel titre=new JLabel("Group : "+g.getName(), JLabel.CENTER);
titre.setFont(new Font(Font.SERIF, Font.BOLD, titre.getFont().getSize()+10));
this.add(titre);
this.add(new JLabel("id= "+String.valueOf(g.getId()),JLabel.CENTER)); this.add(new JLabel("id= "+String.valueOf(g.getId()),JLabel.CENTER));
this.add(new JLabel("min= "+String.valueOf(g.getMin()),JLabel.CENTER)); this.add(new JLabel("min= "+String.valueOf(g.getMin()),JLabel.CENTER));
this.add(new JLabel("max= "+String.valueOf(g.getMax()),JLabel.CENTER)); this.add(new JLabel("max= "+String.valueOf(g.getMax()),JLabel.CENTER));
this.add(new JLabel(g.getType().name(), JLabel.CENTER)); this.add(new JLabel(g.getType().name(), JLabel.CENTER));
this.add(new JLabel("Sous groupe",JLabel.CENTER)); this.add(new JLabel("Sous groupe:",JLabel.CENTER));
if(g.getSousGroupes().size()>0){
JPanel sous=new JPanel(new GridLayout(g.getSousGroupes().size(), 1));
for(Groupe gr: g.getSousGroupes()){ for(Groupe gr: g.getSousGroupes()){
JButton b=new JButton(gr.getName()); JButton b=new JButton(gr.getName());
b.addActionListener(new ObservateurChangeGroupe(m, gr)); b.addActionListener(new ObservateurChangeGroupe(m, gr));
this.add(b); sous.add(b);
} }
JButton supprimer=new JButton("suprimer ce groupe"); this.add(new JScrollPane(sous));
supprimer.addActionListener(new ObservateurModifGroupe(m, g));
this.add(supprimer);
if(g.getType()!=TypeGroupe.PARTITION){
JButton creer=new JButton("créer un sous groupe");
creer.addActionListener(new ObservateurModifGroupe(m, g));
this.add(creer);
}
JButton renomer=new JButton("renomer");
renomer.addActionListener(new ObservateurModifGroupe(m, g));
this.add(renomer);
if(g!=g.getPointPoint()){
JButton ajouter=new JButton("ajouter");
ajouter.addActionListener(new ObservateurModifGroupe(m, g));
this.add(ajouter);
} }
}else{ }else{
this.add(new JLabel("Il n'y a pas encore de Groupe")); this.add(new JLabel("Il n'y a pas encore de Groupe"));

View File

@ -2,32 +2,39 @@ package fr.iutfbleau.projetIHM2022FI2.Graphic.View;
import fr.iutfbleau.projetIHM2022FI2.API.Etudiant; import fr.iutfbleau.projetIHM2022FI2.API.Etudiant;
import fr.iutfbleau.projetIHM2022FI2.API.Groupe; import fr.iutfbleau.projetIHM2022FI2.API.Groupe;
import fr.iutfbleau.projetIHM2022FI2.Graphic.Controller.ActionListenerNouveauEtu;
import fr.iutfbleau.projetIHM2022FI2.Graphic.Controller.SelecteurEtudiant; import fr.iutfbleau.projetIHM2022FI2.Graphic.Controller.SelecteurEtudiant;
import fr.iutfbleau.projetIHM2022FI2.MNP.EtudiantNP;
import java.util.LinkedHashSet;
import java.util.Set; import java.util.Set;
import java.awt.GridLayout; import java.awt.GridLayout;
import java.awt.Color;
import javax.swing.JButton; import javax.swing.JButton;
import javax.swing.JPanel; import javax.swing.JPanel;
public class FenetreSelectionEtu extends JPanel{ public class FenetreSelectionEtu extends JPanel{
private Set<Etudiant> liste; private Set<Etudiant> liste;
private Groupe racine; private Set<Etudiant> etu;
public FenetreSelectionEtu(Groupe g, Set<Etudiant> liste){ public FenetreSelectionEtu(Groupe g, Set<Etudiant> liste){
super(new GridLayout(g.getEtudiants().size()/3, 3)); super();
this.racine=g; this.etu=new LinkedHashSet<>();
this.liste=liste; Groupe promo=g.getPointPoint();
int index=0; while(promo.getPointPoint()!=promo){
for(Etudiant e:g.getEtudiants()){ promo=promo.getPointPoint();
JButton lab=new JButton(e.getNom()+" "+e.getPrenom()+" "+e.getId());
lab.addMouseListener(new SelecteurEtudiant(index, this));
this.add(lab);
index++;
} }
for(Etudiant e:promo.getEtudiants()){
this.etu.add(e);
}
for(Etudiant e:g.getEtudiants()){
this.etu.remove(e);
}
this.liste=liste;
this.draw();
} }
public void addList(int index){ public void addList(int index){
int i=0; int i=0;
for(Etudiant e:racine.getEtudiants()){ for(Etudiant e:this.etu){
if(i==index){ if(i==index){
this.liste.add(e); this.liste.add(e);
return; return;
@ -37,7 +44,7 @@ public class FenetreSelectionEtu extends JPanel{
} }
public void removeList(int index){ public void removeList(int index){
int i=0; int i=0;
for(Etudiant e:racine.getEtudiants()){ for(Etudiant e:this.etu){
if(i==index){ if(i==index){
this.liste.remove(e); this.liste.remove(e);
return; return;
@ -45,4 +52,26 @@ public class FenetreSelectionEtu extends JPanel{
i++; i++;
} }
} }
public void addEtudiant(String nom, String prenom){
this.etu.add(new EtudiantNP(nom, prenom));
this.removeAll();
this.draw();
this.revalidate();
}
private void draw(){
this.setLayout(new GridLayout(this.etu.size()/5+1, 4));
int index=0;
for(Etudiant e:etu){
JButton lab=new JButton(e.getNom()+" "+e.getPrenom()+" "+e.getId());
lab.addMouseListener(new SelecteurEtudiant(index, this));
this.add(lab);
index++;
}
JButton nouveau=new JButton("Nouveau +");
nouveau.setBackground(Color.RED);
nouveau.addActionListener(new ActionListenerNouveauEtu(this));
this.add(nouveau);
}
} }

View File

@ -18,21 +18,19 @@ public class EtudiantNP implements Etudiant{
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");
// auto incrément de l'id // auto incrément de l'id
this.id=this.nextId+1; this.id=++this.nextId;
this.nextId++;
this.nom=nom; this.nom=nom;
this.prenom=prenom; this.prenom=prenom;
} }
/** /**
* Constructeur. * Constructeur pour MPN
*/ */
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");
// auto incrément de l'id
this.id=id;
this.nextId++; this.nextId++;
this.id=id;
this.nom=nom; this.nom=nom;
this.prenom=prenom; this.prenom=prenom;
} }

View File

@ -1,226 +1,32 @@
package fr.iutfbleau.projetIHM2022FI2.Test; package fr.iutfbleau.projetIHM2022FI2.Test;
import fr.iutfbleau.projetIHM2022FI2.API.*;
import fr.iutfbleau.projetIHM2022FI2.Graphic.Model; import fr.iutfbleau.projetIHM2022FI2.Graphic.Model;
import fr.iutfbleau.projetIHM2022FI2.MNP.*;
import java.util.*;
import org.mariadb.jdbc.*;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.LinkedList;
import java.util.Objects;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
public class TestTexteMNP{ public class TestTexteMNP{
public static void main(String[] args) { public static void main(String[] args) {
new Model();
// morceaux de modèle /*
// Notez que à gauche d'une déclaration on utilise une interface et à droite une version concrète.
// Il faut que votre vue se calque sur le fonctionnemment de ce main et ne fasse pas d'hypothèse sur l'implémentation concrète de l'interface.
// i.e. entre les versions non persistantes (qui terminent par NP) et votre implémentation éventuelle persistante, le seul changement de comportement devrait être la persistance.
//
////System.out.println("Test de l\'API");
//System.out.print("Création des étudiants");
Model ga=new Model();
Etudiant e1=new EtudiantNP("césar","lycurgus");
Etudiant e2=new EtudiantNP("denis","uranus");
Etudiant e3=new EtudiantNP("marcel","castor");
Etudiant e4=new EtudiantNP("marin","eurydice");
Etudiant e5=new EtudiantNP("constantin","akoni");
Etudiant e6=new EtudiantNP("donat","anakoni");
Etudiant e7=new EtudiantNP("alexandre","apikalia");
Etudiant e8=new EtudiantNP("andré","ekewaka");
Etudiant e9=new EtudiantNP("renard","elikapeka");
Etudiant e10=new EtudiantNP("achille","haukea");
//System.out.print(".");
Etudiant e11=new EtudiantNP("agathe","iakopa");
Etudiant e12=new EtudiantNP("sabine","spartacus");
Etudiant e13=new EtudiantNP("michel","caligula");
Etudiant e14=new EtudiantNP("marthe","alaric");
Etudiant e15=new EtudiantNP("juliane","hannibal");
Etudiant e16=new EtudiantNP("anne","juvenal");
Etudiant e17=new EtudiantNP("sophie","bede");
Etudiant e18=new EtudiantNP("louis","hamilcar");
Etudiant e19=new EtudiantNP("diane","ladislas");
Etudiant e20=new EtudiantNP("christine","mahatma");
//System.out.print(".");
Etudiant e21=new EtudiantNP("francine","napoleon");
Etudiant e22=new EtudiantNP("louise","lalita");
Etudiant e23=new EtudiantNP("chantal","laxman");
Etudiant e24=new EtudiantNP("giselle","laxmi");
Etudiant e25=new EtudiantNP("caroline","leela");
Etudiant e26=new EtudiantNP("claude","lila");
Etudiant e27=new EtudiantNP("pauline","lilavati");
Etudiant e28=new EtudiantNP("avril","lochan");
Etudiant e29=new EtudiantNP("jacqueline","madhav");
Etudiant e30=new EtudiantNP("denise","turlough");
//System.out.print(".");
Etudiant e31=new EtudiantNP("gabrielle","uaithne");
Etudiant e32=new EtudiantNP("julie","uilleag");
Etudiant e33=new EtudiantNP("madeleine","uilliam");
Etudiant e34=new EtudiantNP("charlotte","uinseann");
Etudiant e35=new EtudiantNP("bertrand","ulick");
Etudiant e36=new EtudiantNP("lucile","ultan");
Etudiant e37=new EtudiantNP("nicole","firdaus");
Etudiant e38=new EtudiantNP("blanche","yasmin");
Etudiant e39=new EtudiantNP("jeanine","javed");
Etudiant e40=new EtudiantNP("roxane","naveed");
//System.out.print(".");
Etudiant e41=new EtudiantNP("adeline","shahnaz");
Etudiant e42=new EtudiantNP("dion","ardashir");
Etudiant e43=new EtudiantNP("liane","atefeh");
Etudiant e44=new EtudiantNP("myriam","luigina");
Etudiant e45=new EtudiantNP("danielle","luigino");
Etudiant e46=new EtudiantNP("arlette","maddalena");
Etudiant e47=new EtudiantNP("michelle","manfredo");
Etudiant e48=new EtudiantNP("justine","manlio");
Etudiant e49=new EtudiantNP("natalie","marcellino");
Etudiant e50=new EtudiantNP("aline","mariangela");
//System.out.print(".");
Etudiant e51=new EtudiantNP("prosper","marzio");
Etudiant e52=new EtudiantNP("mirabelle","massimiliano");
Etudiant e53=new EtudiantNP("carine","matteo");
Etudiant e54=new EtudiantNP("jeannine","melchiorre");
Etudiant e55=new EtudiantNP("dianne","micaela");
Etudiant e56=new EtudiantNP("evette","michela");
Etudiant e57=new EtudiantNP("gisselle","michelangela");
////System.out.println("terminé.");
//System.out.print("Création de l\'usine à groupe");
AbstractGroupeFactory agf = new AbstractGroupeFactoryNP("BUT2 FI", 15, 92);
////System.out.println("terminé.");
//System.out.print("Création de l\'usine à changement");
AbstractChangementFactory acf = new AbstractChangementFactoryNP(agf);
////System.out.println("terminé.");
//System.out.print("Ajout des étudiants dans le groupe de la promotion racine");
agf.addToGroupe(agf.getPromotion(),e1);
agf.addToGroupe(agf.getPromotion(),e2);
agf.addToGroupe(agf.getPromotion(),e3);
agf.addToGroupe(agf.getPromotion(),e4);
agf.addToGroupe(agf.getPromotion(),e5);
agf.addToGroupe(agf.getPromotion(),e6);
agf.addToGroupe(agf.getPromotion(),e7);
agf.addToGroupe(agf.getPromotion(),e8);
agf.addToGroupe(agf.getPromotion(),e9);
agf.addToGroupe(agf.getPromotion(),e10);
////System.out.print(".");
agf.addToGroupe(agf.getPromotion(),e11);
agf.addToGroupe(agf.getPromotion(),e12);
agf.addToGroupe(agf.getPromotion(),e13);
agf.addToGroupe(agf.getPromotion(),e14);
agf.addToGroupe(agf.getPromotion(),e15);
agf.addToGroupe(agf.getPromotion(),e16);
agf.addToGroupe(agf.getPromotion(),e17);
agf.addToGroupe(agf.getPromotion(),e18);
agf.addToGroupe(agf.getPromotion(),e19);
agf.addToGroupe(agf.getPromotion(),e20);
//System.out.print(".");
agf.addToGroupe(agf.getPromotion(),e21);
agf.addToGroupe(agf.getPromotion(),e22);
agf.addToGroupe(agf.getPromotion(),e23);
agf.addToGroupe(agf.getPromotion(),e24);
agf.addToGroupe(agf.getPromotion(),e25);
agf.addToGroupe(agf.getPromotion(),e26);
agf.addToGroupe(agf.getPromotion(),e27);
agf.addToGroupe(agf.getPromotion(),e28);
agf.addToGroupe(agf.getPromotion(),e29);
agf.addToGroupe(agf.getPromotion(),e30);
agf.addToGroupe(agf.getPromotion(),e31);
agf.addToGroupe(agf.getPromotion(),e32);
agf.addToGroupe(agf.getPromotion(),e33);
agf.addToGroupe(agf.getPromotion(),e34);
agf.addToGroupe(agf.getPromotion(),e35);
agf.addToGroupe(agf.getPromotion(),e36);
agf.addToGroupe(agf.getPromotion(),e37);
agf.addToGroupe(agf.getPromotion(),e38);
agf.addToGroupe(agf.getPromotion(),e39);
//System.out.print(".");
agf.addToGroupe(agf.getPromotion(),e40);
agf.addToGroupe(agf.getPromotion(),e41);
agf.addToGroupe(agf.getPromotion(),e42);
agf.addToGroupe(agf.getPromotion(),e43);
agf.addToGroupe(agf.getPromotion(),e44);
agf.addToGroupe(agf.getPromotion(),e45);
agf.addToGroupe(agf.getPromotion(),e46);
agf.addToGroupe(agf.getPromotion(),e47);
agf.addToGroupe(agf.getPromotion(),e48);
agf.addToGroupe(agf.getPromotion(),e49);
agf.addToGroupe(agf.getPromotion(),e50);
agf.addToGroupe(agf.getPromotion(),e51);
agf.addToGroupe(agf.getPromotion(),e52);
agf.addToGroupe(agf.getPromotion(),e53);
agf.addToGroupe(agf.getPromotion(),e54);
agf.addToGroupe(agf.getPromotion(),e55);
agf.addToGroupe(agf.getPromotion(),e56);
agf.addToGroupe(agf.getPromotion(),e57);/*
////System.out.println("terminé.");
////System.out.println("Initialisation complète.");
////System.out.println("==========================");
////System.out.println("Le groupe promotion");
////System.out.println(agf.getPromotion().monPrint());
////System.out.println("==========================");
////System.out.println("Partition du groupe racine en 3 groupes TD.");*/
agf.createPartition(agf.getPromotion(), "TD",4);
//////System.out.println(agf.getPromotion().monPrint());
Groupe racineDeLaPartition = agf.getPromotion().getSousGroupes().iterator().next();
////System.out.println(racineDeLaPartition.monPrint());
////System.out.println("== Cette version ajoute les étudiants automatiquement pour une partition ");
for(Groupe g : racineDeLaPartition.getSousGroupes()){
////System.out.println(g.monPrint());
}/*
////System.out.println("==========================");
////System.out.println("Création d'un changement");
Iterator<Groupe> itgr = racineDeLaPartition.getSousGroupes().iterator(); Iterator<Groupe> itgr = racineDeLaPartition.getSousGroupes().iterator();
Groupe A = itgr.next(); // premier sous-groupe Groupe A = itgr.next(); // premier sous-groupe
Groupe B = itgr.next(); // second sous-groupe Groupe B = itgr.next(); // second sous-groupe
B = itgr.next(); // troisième sous-groupe B = itgr.next(); // troisième sous-groupe
Etudiant e = A.getEtudiants().iterator().next();// premier étudiant du premier sous-groupe. Etudiant e = A.getEtudiants().iterator().next();// premier étudiant du premier sous-groupe.
acf.createChangement(A,e,B); acf.createChangement(A,e,B);
////System.out.println("Récupération des changements (en fait un seul pour l'instant)"); System.out.println("Récupération des changements (en fait un seul pour l'instant)");
Iterator<Changement> itch = acf.getAllChangements().iterator(); Iterator<Changement> itch = acf.getAllChangements().iterator();
Changement c = itch.next(); Changement c = itch.next();
////System.out.println(c.monPrint()); System.out.println(c.monPrint());
////System.out.println("Application du changement"); System.out.println("Application du changement");
acf.applyChangement(c); acf.applyChangement(c);
////System.out.println("=========================="); System.out.println("==========================");
////System.out.println("== nouveau contenu des groupes de la partition "); System.out.println("== nouveau contenu des groupes de la partition ");
for(Groupe g : racineDeLaPartition.getSousGroupes()){ for(Groupe g : racineDeLaPartition.getSousGroupes()){
System.out.println(g.monPrint()); System.out.println(g.monPrint());
} }
////System.out.println("=========================="); System.out.println("==========================");
////System.out.println("Création de 2 changements"); System.out.println("Création de 2 changements");
itgr = racineDeLaPartition.getSousGroupes().iterator(); itgr = racineDeLaPartition.getSousGroupes().iterator();
A = itgr.next(); // premier sous-groupe A = itgr.next(); // premier sous-groupe
B = itgr.next(); // second sous-groupe B = itgr.next(); // second sous-groupe
@ -230,14 +36,14 @@ public class TestTexteMNP{
acf.createChangement(B,etu2,A); acf.createChangement(B,etu2,A);
// Impression des changements. // Impression des changements.
for (Changement cgt : acf.getAllChangements()){ for (Changement cgt : acf.getAllChangements()){
////System.out.println(cgt.monPrint()); System.out.println(cgt.monPrint());
} }
itch = acf.getAllChangements().iterator(); itch = acf.getAllChangements().iterator();
c = itch.next(); c = itch.next();
////System.out.println("Suppression d'un changement. Il reste :"); System.out.println("Suppression d'un changement. Il reste :");
acf.deleteChangement(itch.next()); acf.deleteChangement(itch.next());
for (Changement cgt : acf.getAllChangements()){ for (Changement cgt : acf.getAllChangements()){
////System.out.println(cgt.monPrint()); System.out.println(cgt.monPrint());
} }