ok
This commit is contained in:
@@ -0,0 +1,69 @@
|
||||
package fr.iutfbleau.projetIHM2022FI2.API;
|
||||
import java.util.*;
|
||||
/**
|
||||
* Usine abstraite gérant l'ensemble des changements.
|
||||
*
|
||||
*
|
||||
*/
|
||||
|
||||
public interface AbstractChangementFactory {
|
||||
|
||||
/**
|
||||
* permet de récupérer une usine abstraite pour les groupes qui fonctionne en tandem avec cette usine abstraite
|
||||
* @return cette usine abstraite pour les groupes
|
||||
*/
|
||||
public AbstractGroupeFactory getGroupeFactory();
|
||||
|
||||
/**
|
||||
* permet de récupérer les changements
|
||||
* @return l'ensemble de tous les changements en attente
|
||||
*
|
||||
* NB. Attention. C'était Iterator<Changement> dans la version beta.
|
||||
*/
|
||||
public Set<Changement> getAllChangements();
|
||||
|
||||
/**
|
||||
* permet de mettre en oeuvre un changement connu de l'usine abstraite.
|
||||
* En cas de succès, le changement est oublié (détruit).
|
||||
*
|
||||
* @throws java.lang.NullPointerException si un argument est null
|
||||
* @throws java.lang.IllegalArgumentException si inconnu de l'usine abstraite
|
||||
*/
|
||||
public void applyChangement(Changement c);
|
||||
|
||||
/**
|
||||
* permet de supprimer un changement connu de l'usine abstraite.
|
||||
*
|
||||
* @throws java.lang.NullPointerException si un argument est null
|
||||
* @throws java.lang.IllegalArgumentException si inconnu de l'usine abstraite
|
||||
*/
|
||||
public void deleteChangement(Changement c);
|
||||
|
||||
/**
|
||||
* permet d'ajouter un nouveau changement.
|
||||
*
|
||||
* @param A groupe actuel
|
||||
* @param B groupe demandé
|
||||
* @param e étudiant concerné par le changement
|
||||
*
|
||||
* @throws java.lang.NullPointerException si un argument est null
|
||||
* @throws java.lang.IllegalArgumentException si les groupes ou l'étudiant ne sont pas connus de la factory partenaire, ou e n'appartient pas à A ou A et B ne sont pas frères dans l'arbre des groupes.
|
||||
*
|
||||
*/
|
||||
public void createChangement(Groupe A, Etudiant e, Groupe B);
|
||||
|
||||
|
||||
/**
|
||||
* permet d'ajouter un nouveau changement de type 2
|
||||
*
|
||||
* @param A groupe actuel
|
||||
* @param B groupe demandé
|
||||
* @param e étudiant concerné par le changement
|
||||
*@param raison la raison du changement de type 2
|
||||
* @throws java.lang.NullPointerException si un argument est null
|
||||
* @throws java.lang.IllegalArgumentException si les groupes ou l'étudiant ne sont pas connus de la factory partenaire, ou e n'appartient pas à A ou A et B ne sont pas frères dans l'arbre des groupes.
|
||||
*
|
||||
*/
|
||||
public void createChangement(Groupe A, Etudiant e, Groupe B, String raison);
|
||||
|
||||
}
|
@@ -0,0 +1,93 @@
|
||||
package fr.iutfbleau.projetIHM2022FI2.API;
|
||||
import java.util.*;
|
||||
/**
|
||||
* Usine abstraite gérant l'ensemble des groupes.
|
||||
*
|
||||
*/
|
||||
|
||||
public interface AbstractGroupeFactory {
|
||||
|
||||
/**
|
||||
* permet de récupérer le Groupe qui contient les étudiants de toute la promotion
|
||||
* @return la promo.
|
||||
*/
|
||||
public Groupe getPromotion();
|
||||
|
||||
/**
|
||||
* permet de supprimer un groupe connu de l'usine abstraite qui ne contient pas de groupes.
|
||||
* Pour détruire un groupe connu qui en contient d'autres il faut le faire récursivement.
|
||||
*
|
||||
* @throws java.lang.NullPointerException si un argument est null
|
||||
* @throws java.lang.IllegalStateException si le groupe contient des groupes
|
||||
* @throws java.lang.IllegalArgumentException si le groupe n'est pas connu de l'usine abstraite ou bien si le groupe est celui de toute la promotion (renvoyé par getPromotion)
|
||||
*/
|
||||
public void deleteGroupe(Groupe g);
|
||||
|
||||
/**
|
||||
* permet d'ajouter un groupe vide de type FREE comme sous-groupe d'un groupe donné.
|
||||
* @param pere le groupe père du groupe à créer
|
||||
* @param name le nom du groupe à créer
|
||||
* @param min,max bornes indicatives sur la taille du groupe à créer
|
||||
*
|
||||
* @throws java.lang.NullPointerException si un argument est null
|
||||
* @throws java.lang.IllegalArgumentException si le groupe pere est de type PARTITION
|
||||
* ou si il n'y a pas 0 < min <= max
|
||||
*/
|
||||
public void createGroupe(Groupe pere, String name, int min, int max);
|
||||
|
||||
/**
|
||||
* permet de créer une partition automatiquement sous un groupe donné.
|
||||
*
|
||||
* @param pere le groupe père du groupe à partitionner
|
||||
* @param name le nom des groupe à créer (on ajoutera à la suite un numéro ou une lettre pour distinguer chaque groupe)
|
||||
* @param n le nombre de partitions
|
||||
* @throws java.lang.NullPointerException si un argument est null
|
||||
* @throws java.lang.IllegalArgumentException si le groupe pere est de type PARTITION
|
||||
* ou n négatif ou nul
|
||||
*
|
||||
* NB. doit créer une "copie" de pere
|
||||
* sous pere de type Partition et ajouter sous ce groupe, n groupes de type "FREE".
|
||||
* les valeurs min et max de ces n groupes sont
|
||||
* min = 0 et
|
||||
* max = partie entière de N/n plus 1, où N est le nombre max du groupe pere.
|
||||
*/
|
||||
public void createPartition(Groupe pere, String name, int n);
|
||||
|
||||
/**
|
||||
* permet d'ajouter un étudiant à un groupe.
|
||||
*
|
||||
* @param g le groupe dans lequel il faut ajouter l'étudiant
|
||||
* @param e l'étudiant à ajouter
|
||||
*
|
||||
* @throws java.lang.NullPointerException si un argument est null
|
||||
* @throws java.lang.IllegalArgumentException la factory ne connaît pas g
|
||||
* @throws java.lang.IllegalStateException le père de g ne contient pas e
|
||||
*/
|
||||
public void addToGroupe(Groupe g, Etudiant e);
|
||||
|
||||
/**
|
||||
* permet d'enlever un étudiant d'un groupe.
|
||||
*
|
||||
* @param g le groupe dans lequel il faut enlever l'étudiant
|
||||
* @param e l'étudiant à enlever
|
||||
*
|
||||
* @throws java.lang.NullPointerException si un argument est null
|
||||
* @throws java.lang.IllegalStateException g ne contient pas e
|
||||
* @throws java.lang.IllegalArgumentException la factory ne connaît pas g
|
||||
*/
|
||||
public void dropFromGroupe(Groupe g, Etudiant e);
|
||||
|
||||
/**
|
||||
* permet de retrouver un étudiant à partir de son identifiant
|
||||
*
|
||||
* @param id l'identifiant de l'étudiant
|
||||
* @return Etudiant l'étudiant connu de la factory ayant cet identifiant
|
||||
*
|
||||
* @throws java.lang.IllegalStateException la factory ne connaît pas l'étudiant.
|
||||
*/
|
||||
public Etudiant getEtudiantFromId(int idEtu);
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
129
src/fr/iutfbleau/projetIHM2022FI2/API/AbstractGroupeFactory.java
Normal file
129
src/fr/iutfbleau/projetIHM2022FI2/API/AbstractGroupeFactory.java
Normal file
@@ -0,0 +1,129 @@
|
||||
package fr.iutfbleau.projetIHM2022FI2.API;
|
||||
import java.util.*;
|
||||
/**
|
||||
* Usine abstraite gérant l'ensemble des groupes.
|
||||
*
|
||||
*/
|
||||
|
||||
public interface AbstractGroupeFactory {
|
||||
|
||||
/**
|
||||
* permet de récupérer le Groupe qui contient les étudiants de toute la promotion
|
||||
* @return la promo.
|
||||
*/
|
||||
public Groupe getPromotion();
|
||||
|
||||
|
||||
/**
|
||||
* Test si le groupe g est connu de l'usine (connu maintenant).
|
||||
* Si la réponse est true, les méthodes avec ce groupe en paramètre devraient bien fonctionner.
|
||||
* Si la réponse est false, le comportement n'est pas garanti.
|
||||
*/
|
||||
public Boolean knows(Groupe g);
|
||||
|
||||
|
||||
/**
|
||||
* permet de supprimer un groupe connu de l'usine abstraite qui ne contient pas de groupes.
|
||||
* Pour détruire un groupe connu qui en contient d'autres il faut le faire récursivement.
|
||||
*
|
||||
* @throws java.lang.NullPointerException si un argument est null
|
||||
* @throws java.lang.IllegalStateException si le groupe contient des groupes
|
||||
* @throws java.lang.IllegalArgumentException si le groupe n'est pas connu de l'usine abstraite ou bien si le groupe est celui de toute la promotion (renvoyé par getPromotion)
|
||||
*/
|
||||
public void deleteGroupe(Groupe g);
|
||||
|
||||
/**
|
||||
* permet d'ajouter un groupe vide de type FREE comme sous-groupe d'un groupe donné.
|
||||
* @param pere le groupe père du groupe à créer
|
||||
* @param name le nom du groupe à créer
|
||||
* @param min,max bornes indicatives sur la taille du groupe à créer
|
||||
*
|
||||
* @throws java.lang.NullPointerException si un argument est null
|
||||
* @throws java.lang.IllegalArgumentException si le groupe pere est de type PARTITION
|
||||
* ou si il n'y a pas 0 < min <= max
|
||||
*/
|
||||
public void createGroupe(Groupe pere, String name, int min, int max);
|
||||
|
||||
/**
|
||||
* permet de créer une partition automatiquement sous un groupe donné.
|
||||
*
|
||||
* @param pere le groupe père du groupe à partitionner
|
||||
* @param name le nom des groupe à créer (on ajoutera à la suite un numéro ou une lettre pour distinguer chaque groupe)
|
||||
* @param n le nombre de partitions
|
||||
* @throws java.lang.NullPointerException si un argument est null
|
||||
* @throws java.lang.IllegalArgumentException si le groupe pere est de type PARTITION
|
||||
* ou n négatif ou nul
|
||||
*
|
||||
* NB. doit créer une "copie" de pere
|
||||
* sous pere de type Partition et ajouter sous ce groupe, n groupes de type "FREE".
|
||||
* les valeurs min et max de ces n groupes sont
|
||||
* min = 0 et
|
||||
* max = partie entière de N/n plus 1, où N est le nombre max du groupe pere.
|
||||
*/
|
||||
public void createPartition(Groupe pere, String name, int n);
|
||||
|
||||
/**
|
||||
* permet d'ajouter un étudiant à un groupe.
|
||||
*
|
||||
* @param g le groupe dans lequel il faut ajouter l'étudiant
|
||||
* @param e l'étudiant à ajouter
|
||||
*
|
||||
* @throws java.lang.NullPointerException si un argument est null
|
||||
* @throws java.lang.IllegalArgumentException la factory ne connaît pas g
|
||||
* @throws java.lang.IllegalStateException le père de g ne contient pas e
|
||||
*/
|
||||
public void addToGroupe(Groupe g, Etudiant e);
|
||||
|
||||
/**
|
||||
* permet d'enlever un étudiant d'un groupe.
|
||||
*
|
||||
* @param g le groupe dans lequel il faut enlever l'étudiant
|
||||
* @param e l'étudiant à enlever
|
||||
*
|
||||
* @throws java.lang.NullPointerException si un argument est null
|
||||
* @throws java.lang.IllegalStateException g ne contient pas e
|
||||
* @throws java.lang.IllegalArgumentException la factory ne connaît pas g
|
||||
*/
|
||||
public void dropFromGroupe(Groupe g, Etudiant e);
|
||||
|
||||
/**
|
||||
* permet de retrouver un étudiant à partir d'un String.
|
||||
*
|
||||
* NB. dans une version simple il doit s'agir du nom exact.
|
||||
* dans une version un peu plus complexe, il s'agit des premières lettres du nom
|
||||
* dans une version avancée, on peut autoriser une expression régulière plus ou moins complexe qui est générée si la première recherche n'a pas renvoyé de candidat.
|
||||
*
|
||||
* @param String nomEtu le nom approximmatif de l'étudiant
|
||||
* @return Set<Etudiant> l'ensemble des étudiants connus de la factory ayant un nom "proche" de ce string au sens de la remarque ci-dessus.
|
||||
*
|
||||
* @throws java.lang.NullPointerException si le String est null.
|
||||
*/
|
||||
public Set<Etudiant> getEtudiants(String nomEtu);
|
||||
|
||||
/**
|
||||
* permet de retrouver les groupes d'un étudiant.
|
||||
*
|
||||
* @param Etu un étudiant
|
||||
* @return Etudiant l'étudiant connu de la factory ayant cet identifiant
|
||||
*
|
||||
* @throws java.lang.NullPointerException si le String est null.
|
||||
*/
|
||||
public Set<Groupe> getGroupesOfEtudiant(Etudiant etu);
|
||||
|
||||
|
||||
/**
|
||||
* Ajout a l'API pour changer facilement de nom de groupe
|
||||
*
|
||||
* @param g le groupe
|
||||
* @param name le nom
|
||||
* @return true si possible
|
||||
*/
|
||||
public boolean changeNameGroupe(Groupe g, String name);
|
||||
|
||||
/**
|
||||
* 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);
|
||||
}
|
@@ -0,0 +1,106 @@
|
||||
package fr.iutfbleau.projetIHM2022FI2.API;
|
||||
import java.util.*;
|
||||
/**
|
||||
* Usine abstraite gérant l'ensemble des groupes.
|
||||
*
|
||||
*/
|
||||
|
||||
public interface AbstractGroupeFactory {
|
||||
|
||||
/**
|
||||
* permet de récupérer le Groupe qui contient les étudiants de toute la promotion
|
||||
* @return la promo.
|
||||
*/
|
||||
public Groupe getPromotion();
|
||||
|
||||
/**
|
||||
* permet de supprimer un groupe connu de l'usine abstraite qui ne contient pas de groupes.
|
||||
* Pour détruire un groupe connu qui en contient d'autres il faut le faire récursivement.
|
||||
*
|
||||
* @throws java.lang.NullPointerException si un argument est null
|
||||
* @throws java.lang.IllegalStateException si le groupe contient des groupes
|
||||
* @throws java.lang.IllegalArgumentException si le groupe n'est pas connu de l'usine abstraite ou bien si le groupe est celui de toute la promotion (renvoyé par getPromotion)
|
||||
*/
|
||||
public void deleteGroupe(Groupe g);
|
||||
|
||||
/**
|
||||
* permet d'ajouter un groupe vide de type FREE comme sous-groupe d'un groupe donné.
|
||||
* @param pere le groupe père du groupe à créer
|
||||
* @param name le nom du groupe à créer
|
||||
* @param min,max bornes indicatives sur la taille du groupe à créer
|
||||
*
|
||||
* @throws java.lang.NullPointerException si un argument est null
|
||||
* @throws java.lang.IllegalArgumentException si le groupe pere est de type PARTITION
|
||||
* ou si il n'y a pas 0 < min <= max
|
||||
*/
|
||||
public void createGroupe(Groupe pere, String name, int min, int max);
|
||||
|
||||
/**
|
||||
* permet de créer une partition automatiquement sous un groupe donné.
|
||||
*
|
||||
* @param pere le groupe père du groupe à partitionner
|
||||
* @param name le nom des groupe à créer (on ajoutera à la suite un numéro ou une lettre pour distinguer chaque groupe)
|
||||
* @param n le nombre de partitions
|
||||
* @throws java.lang.NullPointerException si un argument est null
|
||||
* @throws java.lang.IllegalArgumentException si le groupe pere est de type PARTITION
|
||||
* ou n négatif ou nul
|
||||
*
|
||||
* NB. doit créer une "copie" de pere
|
||||
* sous pere de type Partition et ajouter sous ce groupe, n groupes de type "FREE".
|
||||
* les valeurs min et max de ces n groupes sont
|
||||
* min = 0 et
|
||||
* max = partie entière de N/n plus 1, où N est le nombre max du groupe pere.
|
||||
*/
|
||||
public void createPartition(Groupe pere, String name, int n);
|
||||
|
||||
/**
|
||||
* permet d'ajouter un étudiant à un groupe.
|
||||
*
|
||||
* @param g le groupe dans lequel il faut ajouter l'étudiant
|
||||
* @param e l'étudiant à ajouter
|
||||
*
|
||||
* @throws java.lang.NullPointerException si un argument est null
|
||||
* @throws java.lang.IllegalArgumentException la factory ne connaît pas g
|
||||
* @throws java.lang.IllegalStateException le père de g ne contient pas e
|
||||
*/
|
||||
public void addToGroupe(Groupe g, Etudiant e);
|
||||
|
||||
/**
|
||||
* permet d'enlever un étudiant d'un groupe.
|
||||
*
|
||||
* @param g le groupe dans lequel il faut enlever l'étudiant
|
||||
* @param e l'étudiant à enlever
|
||||
*
|
||||
* @throws java.lang.NullPointerException si un argument est null
|
||||
* @throws java.lang.IllegalStateException g ne contient pas e
|
||||
* @throws java.lang.IllegalArgumentException la factory ne connaît pas g
|
||||
*/
|
||||
public void dropFromGroupe(Groupe g, Etudiant e);
|
||||
|
||||
/**
|
||||
* permet de retrouver un étudiant à partir d'un String.
|
||||
*
|
||||
* NB. dans une version simple il doit s'agir du nom exact.
|
||||
* dans une version un peu plus complexe, il s'agit des premières lettres du nom
|
||||
* dans une version avancée, on peut autoriser une expression régulière plus ou moins complexe qui est générée si la première recherche n'a pas renvoyé de candidat.
|
||||
*
|
||||
* @param String nomEtu le nom approximmatif de l'étudiant
|
||||
* @return Set<Etudiant> l'ensemble des étudiants connus de la factory ayant un nom "proche" de ce string au sens de la remarque ci-dessus.
|
||||
*
|
||||
* @throws java.lang.NullPointerException si le String est null.
|
||||
*/
|
||||
public Set<Etudiant> getEtudiantFromId(String nomEtu);
|
||||
|
||||
/**
|
||||
* permet de retrouver les groupes d'un étudiant.
|
||||
*
|
||||
* @param Etu un étudiant
|
||||
* @return Etudiant l'étudiant connu de la factory ayant cet identifiant
|
||||
*
|
||||
* @throws java.lang.NullPointerException si le String est null.
|
||||
*/
|
||||
public Set<Groupe> getGroupesOfEtudiant(Etudiant etu);
|
||||
|
||||
|
||||
|
||||
}
|
53
src/fr/iutfbleau/projetIHM2022FI2/API/Changement.java
Normal file
53
src/fr/iutfbleau/projetIHM2022FI2/API/Changement.java
Normal file
@@ -0,0 +1,53 @@
|
||||
package fr.iutfbleau.projetIHM2022FI2.API;
|
||||
|
||||
/**
|
||||
* Une demande de changement de groupe
|
||||
* concerne un étudiant, qui est dans un groupe A et veut aller dans un groupe B.
|
||||
*
|
||||
*/
|
||||
|
||||
public interface Changement extends MonPrint {
|
||||
|
||||
/**
|
||||
* permet de récupérer l'identifiant du changement (référence interne sans intérêt irl).
|
||||
* @return l'identifiant.
|
||||
*/
|
||||
public int getId();
|
||||
|
||||
/**
|
||||
* permet de récupérer le groupe de depart
|
||||
* @return ce groupe.
|
||||
*/
|
||||
public Groupe getA();
|
||||
|
||||
/**
|
||||
* permet de récupérer le groupe d'arrivée
|
||||
* @return ce groupe.
|
||||
*/
|
||||
public Groupe getB();
|
||||
|
||||
/**
|
||||
* permet de récupérer l'étudiant demandant le changement
|
||||
* @return cet étudiant
|
||||
*/
|
||||
public Etudiant getEtu();
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
public String getRaison();
|
||||
/**
|
||||
* @see MonPrint
|
||||
* NB. On n'utilise le mécanisme des méthodes par défaut pour donner du code dans une interface. C'est un petit peu laid et à contre-emploi mais pratique ici.
|
||||
*
|
||||
* NB2. On ne peut pas utiliser le toString de Objects
|
||||
* https://stackoverflow.com/questions/24016962/java8-why-is-it-forbidden-to-define-a-default-method-for-a-method-from-java-lan
|
||||
*/
|
||||
public default String monPrint() {
|
||||
StringBuilder sb = new StringBuilder();
|
||||
sb.append("Changement de " + this.getEtu().monPrint() + " depuis le groupe " + this.getA().getName() + " vers le groupe " + this.getB().getName());
|
||||
return sb.toString();
|
||||
}
|
||||
|
||||
}
|
85
src/fr/iutfbleau/projetIHM2022FI2/API/Changement.java~
Normal file
85
src/fr/iutfbleau/projetIHM2022FI2/API/Changement.java~
Normal file
@@ -0,0 +1,85 @@
|
||||
package fr.iutfbleau.projetIHM2022FI2.API;
|
||||
import java.util.*;
|
||||
/**
|
||||
* Un groupe
|
||||
*/
|
||||
|
||||
public interface Groupe extends MonPrint {
|
||||
|
||||
/**
|
||||
* permet de récupérer l'identifiant d'un groupe (référence interne sans intérêt irl).
|
||||
* @return l'identifiant.
|
||||
*/
|
||||
public int getId();
|
||||
|
||||
/**
|
||||
* permet de récupérer le nom d'un groupe (utile irl).
|
||||
* @return le nom.
|
||||
*/
|
||||
public String getName();
|
||||
|
||||
/**
|
||||
* permet de récupérer le nombre minimum d'étudiants souhaités dans le groupe.
|
||||
* @return le minimum souhaité
|
||||
*/
|
||||
public int getMin();
|
||||
|
||||
/**
|
||||
* permet de récupérer le nombre maximum d'étudiants souhaités dans un groupe.
|
||||
* @return le maximum souhaité
|
||||
*/
|
||||
public int getMax();
|
||||
|
||||
/**
|
||||
* permet de récupérer le nombre d'étudiants dans ce groupe.
|
||||
* @return le nombre de places prises (pas forcément limité entre Min et Max, mais c'est le but)
|
||||
*/
|
||||
public int getSize();
|
||||
|
||||
/**
|
||||
* permet de récupérer la nature du groupe
|
||||
* @return le type du groupe
|
||||
*/
|
||||
public TypeGroupe getType();
|
||||
|
||||
/**
|
||||
* permet de récupérer le groupe père
|
||||
* un groupe racine devrait retourner lui-même
|
||||
*
|
||||
* @return le père
|
||||
*/
|
||||
public Groupe getPointPoint();
|
||||
|
||||
/**
|
||||
* Potentiellement "vide"
|
||||
* @return un itérateur sur sous-groupes.
|
||||
*/
|
||||
public Iterator<Groupe> getSousGroupes();
|
||||
|
||||
/**
|
||||
* Potentiellement "vide"
|
||||
* @return un itérateur sur les étudiants.
|
||||
*/
|
||||
public Iterator<Etudiant> getEtudiants();
|
||||
|
||||
/**
|
||||
* @see MonPrint
|
||||
* NB. On n'utilise le mécanisme des méthodes par défaut pour donner du code dans une interface. C'est un petit peu laid et à contre-emploi mais pratique ici.
|
||||
*
|
||||
* NB2. On ne peut pas utiliser le toString de Objects
|
||||
* https://stackoverflow.com/questions/24016962/java8-why-is-it-forbidden-to-define-a-default-method-for-a-method-from-java-lan
|
||||
*/
|
||||
public default String monPrint() {
|
||||
StringBuilder sb = new StringBuilder();
|
||||
sb.append("Groupe " + getName() + " (" getType() +", capacité " + getMin() + " à " + getMax() +", id " + getId()+")");
|
||||
Iterator<Etudiant> i = getEtudiants();
|
||||
sb.append("%n");
|
||||
while (i.hasNext()){
|
||||
Etudiant s = i.next();
|
||||
sb.append(s.toString());
|
||||
sb.append("%n");
|
||||
}
|
||||
return sb.toString();
|
||||
}
|
||||
|
||||
}
|
33
src/fr/iutfbleau/projetIHM2022FI2/API/Etudiant.java
Normal file
33
src/fr/iutfbleau/projetIHM2022FI2/API/Etudiant.java
Normal file
@@ -0,0 +1,33 @@
|
||||
package fr.iutfbleau.projetIHM2022FI2.API;
|
||||
/**
|
||||
* Un étudiant
|
||||
*/
|
||||
|
||||
public interface Etudiant extends MonPrint{
|
||||
|
||||
/**
|
||||
* permet de récupérer l'identifiant de l'étudiant.
|
||||
* @return l'identifiant.
|
||||
*/
|
||||
public int getId();
|
||||
|
||||
/**
|
||||
* permet de récupérer
|
||||
* @return le nom de l'étudiant.
|
||||
*/
|
||||
public String getNom();
|
||||
|
||||
/**
|
||||
* permet de récupérer
|
||||
* @return le prénom de l'étudiant
|
||||
*/
|
||||
public String getPrenom();
|
||||
|
||||
/**
|
||||
* @see MonPrint
|
||||
* NB. On n'utilise le mécanisme des méthodes par défaut pour donner du code dans une interface. C'est un petit peu laid et à contre-emploi mais pratique ici.
|
||||
*/
|
||||
public default String monPrint() {
|
||||
return String.format("Nom " + getNom() + " Prenom " + getPrenom() + " (id="+getId()+")");
|
||||
}
|
||||
}
|
33
src/fr/iutfbleau/projetIHM2022FI2/API/Etudiant.java~
Normal file
33
src/fr/iutfbleau/projetIHM2022FI2/API/Etudiant.java~
Normal file
@@ -0,0 +1,33 @@
|
||||
package fr.iutfbleau.projetIHM2022FI2.API;
|
||||
/**
|
||||
* Un étudiant
|
||||
*/
|
||||
|
||||
public interface Etudiant extends MonPrint{
|
||||
|
||||
/**
|
||||
* permet de récupérer l'identifiant de l'étudiant (qu'on suppose être le même pour les différents systèmes, internes et externes à l'hôtel).
|
||||
* @return l'identifiant.
|
||||
*/
|
||||
public int getId();
|
||||
|
||||
/**
|
||||
* permet de récupérer
|
||||
* @return le nom de l'étudiant.
|
||||
*/
|
||||
public String getNom();
|
||||
|
||||
/**
|
||||
* permet de récupérer
|
||||
* @return le prénom de l'étudiant
|
||||
*/
|
||||
public String getPrenom();
|
||||
|
||||
/**
|
||||
* @see MonPrint
|
||||
* NB. On n'utilise le mécanisme des méthodes par défaut pour donner du code dans une interface. C'est un petit peu laid et à contre-emploi mais pratique ici.
|
||||
*/
|
||||
public default String monPrint() {
|
||||
return String.format("Nom " + getNom() + " Prenom " + getPrenom() + " (id="+getId()+")");
|
||||
}
|
||||
}
|
129
src/fr/iutfbleau/projetIHM2022FI2/API/Groupe.java
Normal file
129
src/fr/iutfbleau/projetIHM2022FI2/API/Groupe.java
Normal file
@@ -0,0 +1,129 @@
|
||||
package fr.iutfbleau.projetIHM2022FI2.API;
|
||||
import java.util.*;
|
||||
/**
|
||||
* Un groupe
|
||||
*/
|
||||
|
||||
public interface Groupe extends MonPrint {
|
||||
/**
|
||||
* Ajoute un étudiant. Se comporte comme add de l'interface Set.
|
||||
*
|
||||
* @return true iff e est ajouté
|
||||
*/
|
||||
public boolean addEtudiant(Etudiant e);
|
||||
|
||||
/**
|
||||
* Enlève un étudiant. Se comporte comme remove de l'interface Set.
|
||||
*
|
||||
* @return true iff e est enlevé
|
||||
*/
|
||||
boolean removeEtudiant(Etudiant e);
|
||||
|
||||
/**
|
||||
* Ajoute un sous-groupe. Se comporte comme add de l'interface Set.
|
||||
* vérifie que le groupe passé en argument a bien renseigné this comme son père.
|
||||
*
|
||||
* @return true iff g est ajouté
|
||||
*/
|
||||
public boolean addSousGroupe(Groupe g);
|
||||
|
||||
/**
|
||||
* Enlève un groupe. Se comporte comme remove de l'interface Set.
|
||||
*
|
||||
* @return true iff e est enlevé
|
||||
*/
|
||||
public boolean removeSousGroupe(Groupe g);
|
||||
|
||||
/**
|
||||
* permet de récupérer l'identifiant d'un groupe (référence interne sans intérêt irl).
|
||||
* @return l'identifiant.
|
||||
*/
|
||||
public int getId();
|
||||
|
||||
/**
|
||||
* permet de récupérer le nom d'un groupe (utile irl).
|
||||
* @return le nom.
|
||||
*/
|
||||
public String getName();
|
||||
|
||||
/**
|
||||
* permet de récupérer le nombre minimum d'étudiants souhaités dans le groupe.
|
||||
* @return le minimum souhaité
|
||||
*/
|
||||
public int getMin();
|
||||
|
||||
/**
|
||||
* permet de récupérer le nombre maximum d'étudiants souhaités dans un groupe.
|
||||
* @return le maximum souhaité
|
||||
*/
|
||||
public int getMax();
|
||||
|
||||
/**
|
||||
* permet de récupérer le nombre d'étudiants dans ce groupe.
|
||||
* @return le nombre de places prises (pas forcément limité entre Min et Max, mais c'est le but)
|
||||
*/
|
||||
public int getSize();
|
||||
|
||||
/**
|
||||
* permet de récupérer la nature du groupe
|
||||
* @return le type du groupe
|
||||
*/
|
||||
public TypeGroupe getType();
|
||||
|
||||
/**
|
||||
* permet de récupérer le groupe père
|
||||
* un groupe racine devrait retourner lui-même
|
||||
*
|
||||
* @return le père
|
||||
*/
|
||||
public Groupe getPointPoint();
|
||||
|
||||
/**
|
||||
* Potentiellement "vide"
|
||||
* @return l'ensemble des sous-groupes.
|
||||
*/
|
||||
public Set<Groupe> getSousGroupes();
|
||||
|
||||
/**
|
||||
* Potentiellement "vide"
|
||||
* @return l'ensemble des étudiants.
|
||||
*/
|
||||
public Set<Etudiant> getEtudiants();
|
||||
|
||||
/**
|
||||
* Change le nom du groupe
|
||||
* @param s le nouveau nom
|
||||
*/
|
||||
public void setName(String s);
|
||||
|
||||
/**
|
||||
* @see MonPrint
|
||||
* NB. On n'utilise le mécanisme des méthodes par défaut pour donner du code dans une interface. C'est un petit peu laid et à contre-emploi mais pratique ici.
|
||||
*
|
||||
* NB2. On ne peut pas utiliser le toString de Objects
|
||||
* https://stackoverflow.com/questions/24016962/java8-why-is-it-forbidden-to-define-a-default-method-for-a-method-from-java-lan
|
||||
*/
|
||||
public default String monPrint() {
|
||||
StringBuilder sb = new StringBuilder();
|
||||
sb.append("Groupe " + getName() + " (" + getType() + ", capacité " + getMin() + " à " + getMax() +", id " + getId()+")");
|
||||
sb.append("\n");
|
||||
// NB. getEtudiants() retourne un Set qui étend Iterable
|
||||
// On peut utiliser les mécanismes de boucle "moderne" de puis la version 8
|
||||
// pour se faciliter la vie quand le traitement est assez simple
|
||||
// voir https://docs.oracle.com/javase/8/docs/technotes/guides/language/foreach.html
|
||||
sb.append(" ** Étudiants **\n");
|
||||
for (Etudiant s: getEtudiants()){
|
||||
sb.append("\t _ "+ s.monPrint());
|
||||
sb.append("\n");
|
||||
}
|
||||
sb.append(" ** Sous Groupes **\n");
|
||||
for (Groupe g: getSousGroupes()){
|
||||
sb.append("\t _ "+ g.getName() + " (" + g.getType() + ", capacité " + g.getMin() + " à " + g.getMax() +", id " + g.getId()+")");
|
||||
sb.append("\n");
|
||||
}
|
||||
sb.append(" ** Groupe Pere **\n");
|
||||
sb.append(getPointPoint().getName()+"\n");
|
||||
return sb.toString();
|
||||
}
|
||||
|
||||
}
|
115
src/fr/iutfbleau/projetIHM2022FI2/API/Groupe.java~
Normal file
115
src/fr/iutfbleau/projetIHM2022FI2/API/Groupe.java~
Normal file
@@ -0,0 +1,115 @@
|
||||
package fr.iutfbleau.projetIHM2022FI2.API;
|
||||
import java.util.*;
|
||||
/**
|
||||
* Un groupe
|
||||
*/
|
||||
|
||||
public interface Groupe extends MonPrint {
|
||||
/**
|
||||
* Ajoute un étudiant. Se comporte comme add de l'interface Set.
|
||||
*
|
||||
* @return true iff e est ajouté
|
||||
*/
|
||||
public boolean addEtudiant(Etudiant e);
|
||||
|
||||
/**
|
||||
* Enlève un étudiant. Se comporte comme remove de l'interface Set.
|
||||
*
|
||||
* @return true iff e est enlevé
|
||||
*/
|
||||
boolean removeEtudiant(Etudiant e);
|
||||
|
||||
/**
|
||||
* Ajoute un sous-groupe. Se comporte comme add de l'interface Set.
|
||||
* vérifie que le groupe passé en argument a bien renseigné this comme son père.
|
||||
*
|
||||
* @return true iff g est ajouté
|
||||
*/
|
||||
public boolean addSousGroupe(Groupe g);
|
||||
|
||||
/**
|
||||
* Enlève un groupe. Se comporte comme remove de l'interface Set.
|
||||
*
|
||||
* @return true iff e est enlevé
|
||||
*/
|
||||
public boolean removeSousGroupe(Groupe g);
|
||||
|
||||
/**
|
||||
* permet de récupérer l'identifiant d'un groupe (référence interne sans intérêt irl).
|
||||
* @return l'identifiant.
|
||||
*/
|
||||
public int getId();
|
||||
|
||||
/**
|
||||
* permet de récupérer le nom d'un groupe (utile irl).
|
||||
* @return le nom.
|
||||
*/
|
||||
public String getName();
|
||||
|
||||
/**
|
||||
* permet de récupérer le nombre minimum d'étudiants souhaités dans le groupe.
|
||||
* @return le minimum souhaité
|
||||
*/
|
||||
public int getMin();
|
||||
|
||||
/**
|
||||
* permet de récupérer le nombre maximum d'étudiants souhaités dans un groupe.
|
||||
* @return le maximum souhaité
|
||||
*/
|
||||
public int getMax();
|
||||
|
||||
/**
|
||||
* permet de récupérer le nombre d'étudiants dans ce groupe.
|
||||
* @return le nombre de places prises (pas forcément limité entre Min et Max, mais c'est le but)
|
||||
*/
|
||||
public int getSize();
|
||||
|
||||
/**
|
||||
* permet de récupérer la nature du groupe
|
||||
* @return le type du groupe
|
||||
*/
|
||||
public TypeGroupe getType();
|
||||
|
||||
/**
|
||||
* permet de récupérer le groupe père
|
||||
* un groupe racine devrait retourner lui-même
|
||||
*
|
||||
* @return le père
|
||||
*/
|
||||
public Groupe getPointPoint();
|
||||
|
||||
/**
|
||||
* Potentiellement "vide"
|
||||
* @return l'ensemble des sous-groupes.
|
||||
*/
|
||||
public Set<Groupe> getSousGroupes();
|
||||
|
||||
/**
|
||||
* Potentiellement "vide"
|
||||
* @return l'ensemble des étudiants.
|
||||
*/
|
||||
public Set<Etudiant> getEtudiants();
|
||||
|
||||
/**
|
||||
* @see MonPrint
|
||||
* NB. On n'utilise le mécanisme des méthodes par défaut pour donner du code dans une interface. C'est un petit peu laid et à contre-emploi mais pratique ici.
|
||||
*
|
||||
* NB2. On ne peut pas utiliser le toString de Objects
|
||||
* https://stackoverflow.com/questions/24016962/java8-why-is-it-forbidden-to-define-a-default-method-for-a-method-from-java-lan
|
||||
*/
|
||||
public default String monPrint() {
|
||||
StringBuilder sb = new StringBuilder();
|
||||
sb.append("Groupe " + getName() + " (" + getType() + ", capacité " + getMin() + " à " + getMax() +", id " + getId()+")");
|
||||
sb.append("\n");
|
||||
// NB. getEtudiants() retourne un Set qui étend Iterable
|
||||
// On peut utiliser les mécanismes de boucle "moderne" de puis la version 8
|
||||
// pour se faciliter la vie quand le traitement est assez simple
|
||||
// voir https://docs.oracle.com/javase/8/docs/technotes/guides/language/foreach.html
|
||||
for (Etudiant s: getEtudiants()){
|
||||
sb.append("\t"+ s.monPrint());
|
||||
sb.append("\n");
|
||||
}
|
||||
return sb.toString();
|
||||
}
|
||||
|
||||
}
|
168
src/fr/iutfbleau/projetIHM2022FI2/API/Model.java
Normal file
168
src/fr/iutfbleau/projetIHM2022FI2/API/Model.java
Normal file
@@ -0,0 +1,168 @@
|
||||
package fr.iutfbleau.projetIHM2022FI2.API;
|
||||
|
||||
import java.util.Set;
|
||||
import javax.swing.JFrame;
|
||||
/**
|
||||
* Le Model de L'IHM
|
||||
*/
|
||||
public interface Model {
|
||||
/**
|
||||
* Fonction pour refresh/changer de groupe d'affichage
|
||||
* @param g le groupe a afficher
|
||||
*/
|
||||
public void showGroupe(Groupe g);
|
||||
/**
|
||||
* getteur de la fenetre
|
||||
* @return JFrame la fenetre
|
||||
*/
|
||||
public JFrame getFenetre();
|
||||
/**
|
||||
* permet d'obtenir l'ensemble des etudiants
|
||||
* @return
|
||||
*/
|
||||
public Set<Etudiant> getEtudiant();
|
||||
|
||||
// ***********************
|
||||
// FONCTION POUR SUPRIMER UN ETUDIANT
|
||||
// ***********************
|
||||
/**
|
||||
* Fonction pour supprimer un etudiant.
|
||||
* @param e l'etudiant a supprimer
|
||||
* @return boolean true si l'etudiant a ete supprimer, false sinon
|
||||
*/
|
||||
public boolean deleteEtu(Etudiant e);
|
||||
|
||||
|
||||
// ***********************
|
||||
// FONCTION POUR Ajouter UN ETUDIANT
|
||||
// ***********************
|
||||
|
||||
/**
|
||||
* Fonction pour ajouter un étudiant au groupe
|
||||
* @param g
|
||||
* @param e
|
||||
* @return boolean pour savoir si il a pus être ajouter
|
||||
*/
|
||||
public boolean addEtudiant(Groupe g, Etudiant e);
|
||||
|
||||
|
||||
|
||||
// ***********************
|
||||
// FONCTION POUR SUPRIMER UN GROUPE
|
||||
// ***********************
|
||||
|
||||
/**
|
||||
* Fonction pour supprimer un groupe
|
||||
* @param g le groupe a supprimer
|
||||
*/
|
||||
public void delete(Groupe g);
|
||||
|
||||
// ***********************
|
||||
// FONCTION POUR RENOMER UN GROUPE
|
||||
// ***********************
|
||||
|
||||
/**
|
||||
* Fonction pour renomer un groupe
|
||||
* @param name
|
||||
* @param g
|
||||
*/
|
||||
public void rename(String name, Groupe g);
|
||||
|
||||
|
||||
// **********************
|
||||
// FONCTION POUR CREER UN GROUPE
|
||||
// **********************
|
||||
|
||||
|
||||
/**
|
||||
* Fonction permetant de créer une partition d'un groupe
|
||||
* @param g le groupe a partitionner
|
||||
* @param n le nombre de partition
|
||||
* @param name le nom des partition
|
||||
*/
|
||||
public void partition(Groupe g, int n, String name);
|
||||
|
||||
/**
|
||||
* Fonction permettant de créer un sous-groupe d'un groupe
|
||||
* @param g le groupe parent
|
||||
* @param name le nom du sous-groupe
|
||||
* @param min le nombre min d'etudiant
|
||||
* @param max le nombre max d'etudiant
|
||||
* @param ajout la liste des étudiants a ajouter au groupe
|
||||
*/
|
||||
public void free(Groupe g, String name, int min, int max, Set<Etudiant> ajout);
|
||||
|
||||
/**
|
||||
* ajoute une nouvelle promotion
|
||||
* @param min le nombre min
|
||||
* @param max le nombre max
|
||||
* @param name le nom
|
||||
* @param ajout les etudiant a ajouter a la promo
|
||||
*/
|
||||
public void addPromo(int min, int max, String name, Set<Etudiant> ajout);
|
||||
|
||||
// **************************
|
||||
// FONCTION POUR LES CHANGEMENTS
|
||||
// ******************************
|
||||
|
||||
/**
|
||||
* Créer un changement depuis le groupe courant
|
||||
* @param e l'etudiant
|
||||
* @param b le groupe a changer
|
||||
*/
|
||||
public void changeGroupe(Etudiant e, Groupe b);
|
||||
|
||||
/**
|
||||
* Retourn les groupe auquel on peut demander a changer depuis le groupe courant
|
||||
*
|
||||
* @return la liste des groupes
|
||||
*/
|
||||
public Set<Groupe> getGroupePartition();
|
||||
|
||||
/**
|
||||
* Fonction pour afficher une fenetre listnatn les changements
|
||||
*
|
||||
*/
|
||||
public void listChange();
|
||||
|
||||
|
||||
/**
|
||||
* Fonction pour effectuer un changement
|
||||
* @param Changement le changement a effecteur
|
||||
*/
|
||||
public void change(Changement change);
|
||||
|
||||
/**
|
||||
* Fonction supprimant un changement
|
||||
*
|
||||
* @param to_delete la changement a delete
|
||||
*/
|
||||
public void deleteChange(Changement to_delete);
|
||||
|
||||
|
||||
/**
|
||||
* Fonction affichant les raison d'un changement
|
||||
*
|
||||
* @param change le changement
|
||||
*/
|
||||
public void showRaisonChange(Changement change);
|
||||
|
||||
|
||||
/**
|
||||
* Fonction affichant une fentre pour trouver un etudiant et tous ses groupes asociée
|
||||
*/
|
||||
public void findEtu();
|
||||
|
||||
/**
|
||||
* Fonction pour recuperer les etudiant avec ce nom
|
||||
* @param name le nom de(s) etudiants
|
||||
* @return la liste
|
||||
*/
|
||||
public Set<Etudiant> getEtu(String name);
|
||||
|
||||
/**
|
||||
*affiche les groupe d'un etudiant
|
||||
* @param e l'etudiant
|
||||
*/
|
||||
public void showGroupOfEtudiant(Etudiant e);
|
||||
}
|
12
src/fr/iutfbleau/projetIHM2022FI2/API/MonPrint.java
Normal file
12
src/fr/iutfbleau/projetIHM2022FI2/API/MonPrint.java
Normal file
@@ -0,0 +1,12 @@
|
||||
package fr.iutfbleau.projetIHM2022FI2.API;
|
||||
/**
|
||||
* Toutes nos interfaces vont étendre cette interface.
|
||||
*/
|
||||
public interface MonPrint {
|
||||
|
||||
/**
|
||||
* Fonctionne comme ToPrint() sauf car une interface n'a pas le droit de faire un override sur ToPrint().
|
||||
* Toutes nos interfaces vont étendre cette interface.
|
||||
*/
|
||||
public String monPrint();
|
||||
}
|
7
src/fr/iutfbleau/projetIHM2022FI2/API/MonPrint.java~
Normal file
7
src/fr/iutfbleau/projetIHM2022FI2/API/MonPrint.java~
Normal file
@@ -0,0 +1,7 @@
|
||||
public interface MonPrint{
|
||||
|
||||
/**
|
||||
* Fonctionne comme ToPrint() sauf car une interface n'a pas le droit de faire un override sur ToPrint();
|
||||
*/
|
||||
public String monPrint();
|
||||
}
|
22
src/fr/iutfbleau/projetIHM2022FI2/API/TypeGroupe.java
Normal file
22
src/fr/iutfbleau/projetIHM2022FI2/API/TypeGroupe.java
Normal file
@@ -0,0 +1,22 @@
|
||||
package fr.iutfbleau.projetIHM2022FI2.API;
|
||||
public enum TypeGroupe {
|
||||
ROOT ("Tous les étudiants"), PARTITION ("partition"), FREE ("libre") ;
|
||||
|
||||
private final String name;
|
||||
|
||||
private TypeGroupe(String s) {
|
||||
name = s;
|
||||
}
|
||||
public static TypeGroupe getType(String s){
|
||||
switch(s){
|
||||
case("Tous les étudiants"):
|
||||
return TypeGroupe.ROOT;
|
||||
case("partition"):
|
||||
return TypeGroupe.PARTITION;
|
||||
case("libre"):
|
||||
return TypeGroupe.FREE;
|
||||
default: return null;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
10
src/fr/iutfbleau/projetIHM2022FI2/API/TypeGroupe.java~
Normal file
10
src/fr/iutfbleau/projetIHM2022FI2/API/TypeGroupe.java~
Normal file
@@ -0,0 +1,10 @@
|
||||
package fr.iutfbleau.projetIHM2022FI2.API;
|
||||
public enum TypeGroupe {
|
||||
ROOT ("Tous les étudiants"), PARTITION ("partitionable"), FREE ("libre") ;
|
||||
|
||||
private final String name;
|
||||
|
||||
private TypeGroupe(String s) {
|
||||
name = s;
|
||||
}
|
||||
}
|
@@ -0,0 +1,136 @@
|
||||
package fr.iutfbleau.projetIHM2022FI2.MNP;
|
||||
import fr.iutfbleau.projetIHM2022FI2.API.*;
|
||||
import java.util.*;
|
||||
import fr.iutfbleau.projetIHM2022FI2.MP.*;
|
||||
/**
|
||||
* Usine abstraite gérant l'ensemble des changements.
|
||||
*
|
||||
*/
|
||||
|
||||
public class AbstractChangementFactoryNP implements AbstractChangementFactory {
|
||||
|
||||
// l'usine à groupe travaillant en tandem avec cette usine.
|
||||
private AbstractGroupeFactory agf;
|
||||
|
||||
// On utilise une table de hachage pour retrouver facilement un changement (à partir de son id).
|
||||
// Si il y a beaucoup de changements c'est plus rapide que de parcourir toute une liste.
|
||||
private HashMap<Integer,Changement> brain;
|
||||
|
||||
/**
|
||||
* Constructeur de l'usine à changement.
|
||||
* @param agf l'usine à groupe travaillant en tandem avec cette usine.
|
||||
*/
|
||||
public AbstractChangementFactoryNP(AbstractGroupeFactory agf){
|
||||
Objects.requireNonNull(agf,"On ne peut pas créer une usine à changement dont l'usine à groupe parternaire est null");
|
||||
this.agf=agf;
|
||||
this.brain=new HashMap<Integer,Changement>();
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* permet de récupérer l'usine abstraite pour les groupes qui fonctionne en tandem avec cette usine abstraite
|
||||
* @return cette usine abstraite pour les groupes
|
||||
*/
|
||||
public AbstractGroupeFactory getGroupeFactory(){
|
||||
return this.agf;
|
||||
}
|
||||
|
||||
/**
|
||||
* permet de récupérer les changements
|
||||
* @return l'ensemble de tous les changements en attente
|
||||
*/
|
||||
public Set<Changement> getAllChangements(){
|
||||
// la méthode value() d'un hashmap retourne la collection des valeurs.
|
||||
// Il faut transformer la collection en Set.
|
||||
// Un constructeur de HashSet permet de faire cette opération.
|
||||
Set<Changement> out = new HashSet<Changement>(this.brain.values());
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* permet de mettre en oeuvre un changement connu de l'usine abstraite.
|
||||
*
|
||||
* @param c le changement à mettre en oeuvre.
|
||||
*
|
||||
* @throws java.lang.NullPointerException si un argument est null
|
||||
* @throws java.lang.IllegalStateException si le changement n'a pas de sens en l'état actuel (e.g. étudiant pas dans le groupe de départ a, groupe b inconnu, groupe a inconnu, etc).
|
||||
* @throws java.lang.IllegalArgumentException si inconnu de l'usine abstraite
|
||||
*/
|
||||
public void applyChangement(Changement c){
|
||||
Objects.requireNonNull(c,"On ne peut pas appliquer un changement qui est null");
|
||||
Etudiant e = c.getEtu();
|
||||
Groupe a = c.getA();
|
||||
Groupe b = c.getB();
|
||||
|
||||
if (!agf.knows(a)) throw new IllegalStateException("Le groupe de départ du changement est inconnu. Impossible à mettre en oeuvre.");
|
||||
|
||||
if (!agf.knows(b)) throw new IllegalStateException("Le groupe d'arrivée du changement est inconnu. Impossible à mettre en oeuvre.");
|
||||
// pas encore implanté.
|
||||
// if(!agf.getGroupesOfEtudiant(e).contains(a)) throw new IllegalStateException("Le groupe de départ ne contient pas l'étudiant. Impossible à mettre en oeuvre.");
|
||||
|
||||
agf.dropFromGroupe(a,e);
|
||||
agf.addToGroupe(b,e);
|
||||
// En cas de succès, on enlève le changement du cerveau
|
||||
this.brain.remove(Integer.valueOf(c.getId()));
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* permet de supprimer un changement connu de l'usine abstraite.
|
||||
*
|
||||
* @param c le changement à supprimer.
|
||||
*
|
||||
* @throws java.lang.NullPointerException si un argument est null
|
||||
* @throws java.lang.IllegalArgumentException si inconnu de l'usine abstraite
|
||||
*/
|
||||
public void deleteChangement(Changement c){
|
||||
Objects.requireNonNull(c,"On ne peut pas demander la suppression d'un changement qui est null");
|
||||
|
||||
this.brain.remove(Integer.valueOf(c.getId()));
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* permet d'ajouter un nouveau changement.
|
||||
*
|
||||
* @param A groupe actuel
|
||||
* @param B groupe demandé
|
||||
* @param e étudiant concerné par le changement
|
||||
*
|
||||
* @throws java.lang.NullPointerException si un argument est null
|
||||
* @throws java.lang.IllegalArgumentException si les groupes ou l'étudiant ne sont pas connus de la factory partenaire, ou e n'appartient pas à A ou A et B ne sont pas frères dans l'arbre des groupes.
|
||||
*
|
||||
*/
|
||||
public void createChangement(Groupe A, Etudiant e, Groupe B){
|
||||
Objects.requireNonNull(A,"Le groupe d'origine ne peut pas être null");
|
||||
Objects.requireNonNull(B,"Le groupe d'arrivée ne peut pas être null");
|
||||
Objects.requireNonNull(e,"L'étudiant ne peut pas être null");
|
||||
|
||||
Changement c = new ChangementNP(A,e,B);
|
||||
this.brain.put(Integer.valueOf(c.getId()),c);
|
||||
}
|
||||
|
||||
/**
|
||||
* permet d'ajouter un nouveau changement.
|
||||
*
|
||||
* @param A groupe actuel
|
||||
* @param B groupe demandé
|
||||
* @param e étudiant concerné par le changement
|
||||
* @param raison la raison du changement
|
||||
*
|
||||
* @throws java.lang.NullPointerException si un argument est null
|
||||
* @throws java.lang.IllegalArgumentException si les groupes ou l'étudiant ne sont pas connus de la factory partenaire, ou e n'appartient pas à A ou A et B ne sont pas frères dans l'arbre des groupes.
|
||||
*
|
||||
*/
|
||||
@Override
|
||||
public void createChangement(Groupe A, Etudiant e, Groupe B, String raison) {
|
||||
Objects.requireNonNull(A,"Le groupe d'origine ne peut pas être null");
|
||||
Objects.requireNonNull(B,"Le groupe d'arrivée ne peut pas être null");
|
||||
Objects.requireNonNull(e,"L'étudiant ne peut pas être null");
|
||||
Objects.requireNonNull(raison,"La raison ne peut pas être null");
|
||||
|
||||
Changement c = new ChangementNP(A,e,B, raison);
|
||||
this.brain.put(Integer.valueOf(c.getId()),c);
|
||||
}
|
||||
|
||||
}
|
@@ -0,0 +1,274 @@
|
||||
package fr.iutfbleau.projetIHM2022FI2.MNP;
|
||||
import fr.iutfbleau.projetIHM2022FI2.API.*;
|
||||
import fr.iutfbleau.projetIHM2022FI2.MP.*;
|
||||
import java.util.*;
|
||||
/**
|
||||
* Usine abstraite gérant l'ensemble des groupes.
|
||||
*
|
||||
*/
|
||||
|
||||
public class AbstractGroupeFactoryNP implements AbstractGroupeFactory {
|
||||
|
||||
// la racine (promotion)
|
||||
private Groupe promo;
|
||||
|
||||
// On utilise une table de hachage pour retrouver facilement un groupe (à partir de son id).
|
||||
// Si il y a beaucoup de groupes c'est plus rapide que de parcourir toute une liste.
|
||||
private HashMap<Integer,Groupe> brain;
|
||||
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Le constructeur fabrique le groupe promotion vide.
|
||||
* Il faut ensuite y ajouter les étudiants.
|
||||
*
|
||||
* @param name le nom de la promotion
|
||||
* @param min le nombre minimum d'étudiants dans la promotion
|
||||
* @param max le nombre maximum d'étudiants dans la promotion
|
||||
*
|
||||
*/
|
||||
public AbstractGroupeFactoryNP(String name, int min, int max){
|
||||
Objects.requireNonNull(name,"On ne peut pas créer une promotion dont le nom est null");
|
||||
this.promo=new GroupeNP(name,min,max);
|
||||
this.brain=new HashMap<Integer,Groupe>();
|
||||
this.brain.put(Integer.valueOf(this.promo.getId()),this.promo);
|
||||
}
|
||||
|
||||
/**
|
||||
* Test plutôt optimiste. Si la clé est identique alors on fait comme si c'était le bon groupe.
|
||||
* @param g le groupe à tester
|
||||
* @return true si le groupe est connu de l'usine abstraite
|
||||
*
|
||||
*/
|
||||
public Boolean knows(Groupe g){
|
||||
return this.brain.containsKey(Integer.valueOf(g.getId()));
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* permet de récupérer le Groupe qui contient les étudiants de toute la promotion
|
||||
* @return la promo.
|
||||
*/
|
||||
public Groupe getPromotion(){
|
||||
return this.promo;
|
||||
}
|
||||
|
||||
/**
|
||||
* permet de supprimer un groupe connu de l'usine abstraite qui ne contient pas de groupes.
|
||||
* Pour détruire un groupe connu qui en contient d'autres il faut le faire récursivement.
|
||||
*
|
||||
* @param g le groupe à supprimer
|
||||
*
|
||||
* @throws java.lang.NullPointerException si un argument est null
|
||||
* @throws java.lang.IllegalArgumentException si le groupe n'est pas connu de l'usine abstraite ou bien si le groupe est celui de toute la promotion (renvoyé par getPromotion)
|
||||
*/
|
||||
public void deleteGroupe(Groupe g){
|
||||
Objects.requireNonNull(g,"On ne peut pas enlever un groupe null car null n'est pas un groupe autorisé");
|
||||
if (!this.knows(g)){
|
||||
throw new IllegalArgumentException("Impossible d'enlever un groupe inconnu");
|
||||
}
|
||||
g.getPointPoint().removeSousGroupe(g);
|
||||
this.deleteRecursif(g);
|
||||
}
|
||||
|
||||
private void deleteRecursif(Groupe g){
|
||||
this.brain.remove(g.getId());
|
||||
for(Groupe sous: g.getSousGroupes()){
|
||||
this.deleteRecursif(sous);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* permet d'ajouter un groupe vide de type FREE comme sous-groupe d'un groupe donné.
|
||||
* @param pere le groupe père du groupe à créer
|
||||
* @param name le nom du groupe à créer
|
||||
* @param min,max bornes indicatives sur la taille du groupe à créer
|
||||
*
|
||||
* @throws java.lang.NullPointerException si un argument est null
|
||||
* @throws java.lang.IllegalArgumentException si le groupe pere est de type PARTITION
|
||||
* ou si il n'y a pas 0 < min <= max
|
||||
*/
|
||||
public void createGroupe(Groupe pere, String name, int min, int max){
|
||||
Objects.requireNonNull(pere,"Le groupe pere ne peut pas être null");
|
||||
Objects.requireNonNull(name,"Le nouveau groupe ne peut pas avoir null comme nom");
|
||||
if (!this.knows(pere)){
|
||||
throw new IllegalArgumentException("Interdit d'ajouter un fils à un groupe inconnu");
|
||||
}
|
||||
if (pere.getType().equals(TypeGroupe.PARTITION)){
|
||||
throw new IllegalArgumentException("Impossible d'ajouter un groupe à une parition. Il faut utiliser createPartition pour créer une partition");
|
||||
}
|
||||
if ( min <= 0 || max < min){
|
||||
throw new IllegalArgumentException("Il faut que 0 < min <= max");
|
||||
}
|
||||
Groupe g = new GroupeNP(pere,name,min,max);
|
||||
pere.addSousGroupe(g);
|
||||
this.brain.put(Integer.valueOf(g.getId()),g);
|
||||
}
|
||||
|
||||
/**
|
||||
* permet de créer une partition automatiquement sous un groupe donné.
|
||||
*
|
||||
* @param pere le groupe père du groupe à partitionner
|
||||
* @param name le nom des groupe à créer (on ajoute à la suite un numéro de 1 à n pour distinguer chaque groupe formant la partition)
|
||||
* @param n le nombre de partitions
|
||||
* @throws java.lang.NullPointerException si un argument est null
|
||||
* @throws java.lang.IllegalArgumentException si le groupe pere est de type PARTITION
|
||||
* ou n négatif ou nul
|
||||
*
|
||||
* NB. doit créer une "copie" de pere
|
||||
* sous pere de type Partition et ajouter sous ce groupe, n groupes de type "FREE".
|
||||
* les valeurs min et max de ces n groupes sont
|
||||
* min = 0 et
|
||||
* max = partie entière de N/n plus 1, où N est le nombre max du groupe pere.
|
||||
*/
|
||||
public void createPartition(Groupe pere, String name, int n){
|
||||
Objects.requireNonNull(pere,"Le groupe pere ne peut pas être null");
|
||||
Objects.requireNonNull(name,"Le nouveau groupe ne peut pas avoir null comme nom");
|
||||
if (!this.knows(pere)){
|
||||
throw new IllegalArgumentException("Impossible de partitionner ce groupe inconnu");
|
||||
}
|
||||
if (pere.getType().equals(TypeGroupe.PARTITION)){
|
||||
throw new IllegalArgumentException("Impossible de créer une partition à ce niveau. Il faut soit repartitionner le groupe au dessus, soit partitionner une partition en dessous.");
|
||||
}
|
||||
if ( n <= 0){
|
||||
throw new IllegalArgumentException("Le nombre de partitions doit être strictement positif");
|
||||
}
|
||||
//Création de la racine de la partition.
|
||||
Groupe copiePereRacinePartition = new GroupeNP(pere);
|
||||
pere.addSousGroupe(copiePereRacinePartition);
|
||||
this.brain.put(Integer.valueOf(copiePereRacinePartition.getId()),copiePereRacinePartition);
|
||||
// création des sous-groupes
|
||||
int min = 0;
|
||||
int max = ((int) Math.floor(pere.getSize()/n))+1;
|
||||
List<Groupe> groupes = new ArrayList<Groupe>(n);
|
||||
for(int i = 0; i<n; i++){
|
||||
Groupe g = new GroupeNP(copiePereRacinePartition,name+"_"+i,min,max);
|
||||
groupes.add(i,g);// ajout dans le tableau des groupes
|
||||
copiePereRacinePartition.addSousGroupe(g);
|
||||
this.brain.put(Integer.valueOf(g.getId()),g);
|
||||
}
|
||||
// Partage des étudiants (on ne prête pas attention aux min et max)
|
||||
int i=0;
|
||||
for (Etudiant s: pere.getEtudiants()){
|
||||
copiePereRacinePartition.addEtudiant(s);
|
||||
groupes.get(i).addEtudiant(s);
|
||||
i = (i+1) %n;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* permet d'ajouter un étudiant à un groupe.
|
||||
*
|
||||
* @param g le groupe dans lequel il faut ajouter l'étudiant
|
||||
* @param e l'étudiant à ajouter
|
||||
*
|
||||
* @throws java.lang.NullPointerException si un argument est null
|
||||
* @throws java.lang.IllegalArgumentException la factory ne connaît pas g
|
||||
* @throws java.lang.IllegalStateException le père de g ne contient pas e
|
||||
*/
|
||||
public void addToGroupe(Groupe g, Etudiant e){
|
||||
Objects.requireNonNull(g,"Le groupe ne peut pas être null");
|
||||
Objects.requireNonNull(e,"L'étudiant ne peut pas être null");
|
||||
if (!this.knows(g)){
|
||||
throw new IllegalArgumentException("Impossible d'ajouter l'étudiant car le est groupe inconnu");
|
||||
}
|
||||
g.addEtudiant(e);
|
||||
}
|
||||
|
||||
/**
|
||||
* permet d'enlever un étudiant d'un groupe.
|
||||
*
|
||||
* @param g le groupe dans lequel il faut enlever l'étudiant
|
||||
* @param e l'étudiant à enlever
|
||||
*
|
||||
* @throws java.lang.NullPointerException si un argument est null
|
||||
* @throws java.lang.IllegalStateException g ne contient pas e
|
||||
* @throws java.lang.IllegalArgumentException la factory ne connaît pas g
|
||||
*/
|
||||
public void dropFromGroupe(Groupe g, Etudiant e){
|
||||
Objects.requireNonNull(g,"Le groupe ne peut pas être null");
|
||||
Objects.requireNonNull(e,"L'étudiant ne peut pas être null");
|
||||
if (!this.knows(g)){
|
||||
throw new IllegalArgumentException("Impossible d'ajouter l'étudiant car le est groupe inconnu");
|
||||
}
|
||||
g.removeEtudiant(e);
|
||||
}
|
||||
|
||||
/**
|
||||
* permet de retrouver un étudiant à partir d'un String.
|
||||
*
|
||||
* NB. dans une version simple il doit s'agir du nom exact.
|
||||
* dans une version un peu plus complexe, il s'agit des premières lettres du nom
|
||||
* dans une version avancée, on peut autoriser une expression régulière plus ou moins complexe qui est générée si la première recherche n'a pas renvoyé de candidat.
|
||||
*
|
||||
* @param String nomEtu le nom approximmatif de l'étudiant
|
||||
* @return Set<Etudiant> l'ensemble des étudiants connus de la factory ayant un nom "proche" de ce string au sens de la remarque ci-dessus.
|
||||
*
|
||||
* @throws java.lang.NullPointerException si le String est null.
|
||||
*/
|
||||
public Set<Etudiant> getEtudiants(String nomEtu){
|
||||
if(nomEtu==null){
|
||||
return this.getPromotion().getEtudiants();
|
||||
}
|
||||
// on cherche bêtement dans la promo.
|
||||
Set<Etudiant> out = new LinkedHashSet<Etudiant>();
|
||||
for (Etudiant e : getPromotion().getEtudiants()){
|
||||
if (e.getNom().contains(nomEtu)){
|
||||
out.add(e);
|
||||
}
|
||||
}
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* permet de retrouver les groupes d'un étudiant.
|
||||
*
|
||||
* @param Etu un étudiant
|
||||
* @return Etudiant l'étudiant connu de la factory ayant cet identifiant
|
||||
*
|
||||
* @throws java.lang.NullPointerException si le String est null.
|
||||
*/
|
||||
public Set<Groupe> getGroupesOfEtudiant(Etudiant etu){
|
||||
Set<Groupe> liste=new HashSet<>();
|
||||
for(Groupe g:this.brain.values()){
|
||||
boolean condit=false;
|
||||
for(Etudiant e:g.getEtudiants()){
|
||||
if(e.getId()==etu.getId()){
|
||||
liste.add(g);
|
||||
condit=true;
|
||||
break;
|
||||
}
|
||||
if(condit==true)
|
||||
break;
|
||||
}
|
||||
}
|
||||
return liste;
|
||||
}
|
||||
|
||||
/**
|
||||
* Ajout a l'API pour changer facilement de nom de groupe
|
||||
*
|
||||
* @param g le groupe
|
||||
* @param name le nom
|
||||
* @return true si possible
|
||||
*/
|
||||
@Override
|
||||
public boolean changeNameGroupe(Groupe g, String name) {
|
||||
g.setName(name);
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* refresh le Groupe ainsi que ses etudiants
|
||||
* @param g le groupe
|
||||
* @return le groupe refresh/un parent si il a été refresh
|
||||
*/
|
||||
@Override
|
||||
public Groupe refreshALL(Groupe g) {
|
||||
return g;
|
||||
}
|
||||
|
||||
|
||||
}
|
360
src/fr/iutfbleau/projetIHM2022FI2/MNP/ETU/Model/ModelEtu.java
Normal file
360
src/fr/iutfbleau/projetIHM2022FI2/MNP/ETU/Model/ModelEtu.java
Normal file
@@ -0,0 +1,360 @@
|
||||
package fr.iutfbleau.projetIHM2022FI2.MNP.ETU.Model;
|
||||
import javax.swing.*;
|
||||
import java.awt.*;
|
||||
import java.util.Set;
|
||||
import java.util.HashSet;
|
||||
import fr.iutfbleau.projetIHM2022FI2.API.AbstractChangementFactory;
|
||||
import fr.iutfbleau.projetIHM2022FI2.API.AbstractGroupeFactory;
|
||||
import fr.iutfbleau.projetIHM2022FI2.API.Changement;
|
||||
import fr.iutfbleau.projetIHM2022FI2.API.Etudiant;
|
||||
import fr.iutfbleau.projetIHM2022FI2.API.Groupe;
|
||||
import fr.iutfbleau.projetIHM2022FI2.API.TypeGroupe;
|
||||
import fr.iutfbleau.projetIHM2022FI2.API.Model;
|
||||
import fr.iutfbleau.projetIHM2022FI2.Permanent.Controller.ObservateurFenetre;
|
||||
import fr.iutfbleau.projetIHM2022FI2.Permanent.View.Chargement;
|
||||
import fr.iutfbleau.projetIHM2022FI2.MP.ETU.View.FenetreEtudiant;
|
||||
import fr.iutfbleau.projetIHM2022FI2.MP.ETU.View.FenetreGroupe;
|
||||
|
||||
/**
|
||||
* Le Model de L'IHM
|
||||
*/
|
||||
public class ModelEtu implements Model{
|
||||
// le panel qui contient la fenetre de groupe
|
||||
private JPanel panGroupe;
|
||||
// la fenetre de groupe
|
||||
private FenetreGroupe fenGr;
|
||||
//la fenetre d'etudiant
|
||||
private FenetreEtudiant fenEtu;
|
||||
// le groupe courant
|
||||
private AbstractGroupeFactory promo;
|
||||
// le changement courant
|
||||
private AbstractChangementFactory changement;
|
||||
// la fenetre principale
|
||||
private JFrame fenetre;
|
||||
// l'etudiant courant
|
||||
private Etudiant Selected;
|
||||
|
||||
/**
|
||||
* Constructeur du Model
|
||||
* @param facto le groupe courant
|
||||
* @param change le changement courant
|
||||
*/
|
||||
public ModelEtu(AbstractGroupeFactory facto, AbstractChangementFactory change){
|
||||
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());
|
||||
Chargement ch=new Chargement(this.fenetre);
|
||||
this.promo=facto;
|
||||
this.changement=change;
|
||||
if(this.promo.getPromotion()==null){
|
||||
this.promo=null;
|
||||
}
|
||||
ch.dispose();
|
||||
this.fenetre.setVisible(true);
|
||||
this.initEtu(null);
|
||||
if(this.promo==null){
|
||||
this.fenGr=new FenetreGroupe(null, this, null);
|
||||
this.fenEtu=new FenetreEtudiant(null, this.Selected, this);
|
||||
}else{
|
||||
this.fenGr=new FenetreGroupe(this.promo.getPromotion(), this,this.promo.getGroupesOfEtudiant(this.Selected));
|
||||
this.fenEtu=new FenetreEtudiant(this.promo.getPromotion(), this.Selected, this);
|
||||
}
|
||||
this.panGroupe=new JPanel(new GridLayout(1,1));
|
||||
if(this.promo!=null){
|
||||
this.showGroupe(this.promo.getPromotion());
|
||||
}else{
|
||||
this.showGroupe(null);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
/**
|
||||
* Fonction pour refresh/changer de groupe d'affichage
|
||||
* @param g le groupe a afficher
|
||||
*/
|
||||
public void showGroupe(Groupe g){
|
||||
if(g!=null)
|
||||
g=this.promo .refreshALL(g);
|
||||
this.panGroupe.removeAll();
|
||||
this.fenGr=new FenetreGroupe(g, this, this.promo.getGroupesOfEtudiant(this.Selected));
|
||||
this.fenEtu=new FenetreEtudiant(g, this.Selected, this);
|
||||
this.fenetre.getContentPane().removeAll();
|
||||
this.panGroupe.add(this.fenGr.getPan());
|
||||
this.panGroupe.revalidate();
|
||||
this.fenetre.add(this.panGroupe);
|
||||
JScrollPane scroll=new JScrollPane(this.fenEtu.getPan());
|
||||
scroll.getVerticalScrollBar().setUnitIncrement(15);
|
||||
this.fenetre.add(scroll);
|
||||
this.fenetre.revalidate();
|
||||
}
|
||||
@Override
|
||||
/**
|
||||
* getteur de la fenetre
|
||||
* @return JFrame la fenetre
|
||||
*/
|
||||
public JFrame getFenetre() {
|
||||
return fenetre;
|
||||
}
|
||||
|
||||
/**
|
||||
* Permet d'obtenir les étudiants du groupe courant.
|
||||
* @return les étudiants du groupe courant
|
||||
*/
|
||||
|
||||
@Override
|
||||
public Set<Etudiant> getEtudiant(){
|
||||
return this.promo.getPromotion().getEtudiants();
|
||||
}
|
||||
|
||||
private void initEtu(String err){
|
||||
Set<Etudiant> liste=this.promo.getPromotion().getEtudiants();
|
||||
JPanel panel = new JPanel();
|
||||
JPanel myPanel = new JPanel();
|
||||
JTextField idd = new JTextField(15);
|
||||
myPanel.add(new JLabel("Id:"));
|
||||
myPanel.add(idd);
|
||||
if(err!=null){
|
||||
myPanel.add(new JLabel(err, SwingConstants.RIGHT));
|
||||
}
|
||||
panel.add(myPanel);
|
||||
|
||||
if(JOptionPane.showConfirmDialog(this.fenetre, panel, "login", JOptionPane.OK_CANCEL_OPTION) != JOptionPane.OK_OPTION){
|
||||
this.fenetre.dispose();
|
||||
System.exit(0);
|
||||
}else{
|
||||
try{
|
||||
int id=Integer.parseInt(idd.getText());
|
||||
for(Etudiant et:liste){
|
||||
if(et.getId()==id){
|
||||
this.Selected=et;
|
||||
return;
|
||||
}
|
||||
}
|
||||
}catch(NumberFormatException e){
|
||||
this.initEtu("Id incomprhéhensible");
|
||||
}
|
||||
}
|
||||
this.initEtu("Etudiant introuvable");
|
||||
}
|
||||
|
||||
// **************************
|
||||
// FONCTION POUR LES CHANGEMENTS
|
||||
// ******************************
|
||||
/**
|
||||
* Permet de changer de groupe.
|
||||
* @param e l'étudiant qui change de groupe
|
||||
* @param g le groupe dans lequel l'étudiant va
|
||||
*/
|
||||
@Override
|
||||
public void changeGroupe(Etudiant e, Groupe b){
|
||||
if(b==null)
|
||||
return;
|
||||
b=this.promo.refreshALL(b);
|
||||
if(b.getEtudiants()!=null && b.getMax()>b.getEtudiants().size()+1){
|
||||
if(b.getEtudiants().size()>this.fenGr.getG().getEtudiants().size()){
|
||||
JPanel myPanel= new JPanel(new GridLayout(2,1));
|
||||
JTextField xField = new JTextField(100);
|
||||
xField.setMinimumSize(new Dimension(100, 100));
|
||||
xField.setPreferredSize(new Dimension(100,100));
|
||||
myPanel.add(new JLabel("Ce Groupe est plus grand que le votre raison du changement:"));
|
||||
myPanel.add(xField);
|
||||
if(JOptionPane.showConfirmDialog(this.fenetre, myPanel, "Changer dans quel Groupe ?", JOptionPane.OK_CANCEL_OPTION)==JOptionPane.OK_OPTION){
|
||||
//IL faut que l'etudiant detaile un minimun la raison
|
||||
if(xField.getText().length()>5){
|
||||
this.changement.createChangement(this.fenGr.getG(), e, b, xField.getText());
|
||||
}else{
|
||||
JOptionPane.showMessageDialog(this.fenetre, "veuillez detailler votre raison", "erreur", JOptionPane.ERROR_MESSAGE);
|
||||
}
|
||||
}
|
||||
}else{
|
||||
this.changement.createChangement(this.fenGr.getG(), e, b);
|
||||
}
|
||||
}else{
|
||||
JOptionPane.showMessageDialog(this.fenetre, "impossible trop d'etudiant dans l'autre Groupe", "erreur", JOptionPane.ERROR_MESSAGE);
|
||||
}
|
||||
this.showGroupe(this.fenGr.getG());
|
||||
}
|
||||
/**
|
||||
* pemet d'obtenir les sous groupes du groupe courant.
|
||||
* @return les sous groupes du groupe courant
|
||||
*/
|
||||
@Override
|
||||
public Set<Groupe> getGroupePartition(){
|
||||
this.promo.refreshALL(this.fenGr.getG().getPointPoint());
|
||||
Set<Groupe> retour=new HashSet<>();
|
||||
if(this.fenGr.getG().getPointPoint().getType()!=TypeGroupe.PARTITION)
|
||||
throw new IllegalStateException("impossible de changer un étudiant d'un groupe ne provenant pas d'une partition");
|
||||
for(Groupe sous:this.fenGr.getG().getPointPoint().getSousGroupes()){
|
||||
if(sous.getId()!=this.fenGr.getG().getId()){
|
||||
retour.add(sous);
|
||||
}
|
||||
}
|
||||
return retour;
|
||||
}
|
||||
/**
|
||||
* ajoute un étudiant dans un groupe.
|
||||
* @param e l'étudiant à ajouter
|
||||
* @param g le groupe dans lequel l'étudiant va
|
||||
* @return true si l'ajout a réussi, false sinon
|
||||
*/
|
||||
@Override
|
||||
public boolean addEtudiant(Groupe g, Etudiant e) {
|
||||
// TODO Auto-generated method stub
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* supprime un groupe.
|
||||
* @param g le groupe à supprimer
|
||||
*/
|
||||
@Override
|
||||
public void delete(Groupe g) {
|
||||
// TODO Auto-generated method stub
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* rennome un groupe.
|
||||
* @param g le groupe à renommer
|
||||
* @param nom le nouveau nom du groupe
|
||||
*
|
||||
*/
|
||||
@Override
|
||||
public void rename(String name, Groupe g) {
|
||||
// TODO Auto-generated method stub
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 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
|
||||
*/
|
||||
@Override
|
||||
public void partition(Groupe g, int n, String name) {
|
||||
// TODO Auto-generated method stub
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 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
|
||||
*/
|
||||
@Override
|
||||
public void free(Groupe g, String name, int min, int max, Set<Etudiant> ajout) {
|
||||
// TODO Auto-generated method stub
|
||||
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* ajoute une nouvelle promotion
|
||||
* @param min le nombre min
|
||||
* @param max le nombre max
|
||||
* @param name le nom
|
||||
* @param ajout les etudiant a ajouter a la promo
|
||||
*/
|
||||
@Override
|
||||
public void addPromo(int min, int max, String name, Set<Etudiant> ajout) {
|
||||
// TODO Auto-generated method stub
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Fonction pour supprimer un etudiant.
|
||||
* @param e l'etudiant a supprimer
|
||||
* @return boolean true si l'etudiant a ete supprimer, false sinon
|
||||
|
||||
*/
|
||||
@Override
|
||||
public boolean deleteEtu(Etudiant e) {
|
||||
// TODO Auto-generated method stub
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Fonction pour afficher une fenetre listnatn les changements
|
||||
*
|
||||
*/
|
||||
@Override
|
||||
public void listChange() {
|
||||
// TODO Auto-generated method stub
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Fonction pour effectuer un changement
|
||||
* @param Changement le changement a effecteur
|
||||
*/
|
||||
@Override
|
||||
public void change(Changement change) {
|
||||
// TODO Auto-generated method stub
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Fonction supprimant un changement
|
||||
*
|
||||
* @param to_delete la changement a delete
|
||||
*/
|
||||
@Override
|
||||
public void deleteChange(Changement to_delete) {
|
||||
// TODO Auto-generated method stub
|
||||
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Fonction affichant les raison d'un changement
|
||||
*
|
||||
* @param change le changement
|
||||
*/
|
||||
@Override
|
||||
public void showRaisonChange(Changement change) {
|
||||
// TODO Auto-generated method stub
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Fonction affichant une fentre pour trouver un etudiant et tous ses groupes asociée
|
||||
*/
|
||||
@Override
|
||||
public void findEtu() {
|
||||
// TODO Auto-generated method stub
|
||||
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Fonction pour recuperer les etudiant avec ce nom
|
||||
* @param name le nom de(s) etudiants
|
||||
* @return la liste
|
||||
*/
|
||||
@Override
|
||||
public Set<Etudiant> getEtu(String name) {
|
||||
// TODO Auto-generated method stub
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
*affiche les groupe d'un etudiant
|
||||
* @param e l'etudiant
|
||||
*/
|
||||
@Override
|
||||
public void showGroupOfEtudiant(Etudiant e) {
|
||||
// TODO Auto-generated method stub
|
||||
|
||||
}
|
||||
|
||||
}
|
325
src/fr/iutfbleau/projetIHM2022FI2/MNP/PROF/Model/ModelProf.java
Normal file
325
src/fr/iutfbleau/projetIHM2022FI2/MNP/PROF/Model/ModelProf.java
Normal file
@@ -0,0 +1,325 @@
|
||||
package fr.iutfbleau.projetIHM2022FI2.MNP.PROF.Model;
|
||||
import javax.swing.*;
|
||||
import java.awt.*;
|
||||
import java.util.Set;
|
||||
import java.util.HashSet;
|
||||
import fr.iutfbleau.projetIHM2022FI2.API.AbstractChangementFactory;
|
||||
import fr.iutfbleau.projetIHM2022FI2.API.AbstractGroupeFactory;
|
||||
import fr.iutfbleau.projetIHM2022FI2.API.Changement;
|
||||
import fr.iutfbleau.projetIHM2022FI2.API.Etudiant;
|
||||
import fr.iutfbleau.projetIHM2022FI2.API.Groupe;
|
||||
import fr.iutfbleau.projetIHM2022FI2.API.TypeGroupe;
|
||||
import fr.iutfbleau.projetIHM2022FI2.MP.PROF.View.FenetreEtudiant;
|
||||
import fr.iutfbleau.projetIHM2022FI2.MP.PROF.View.FenetreGroupe;
|
||||
import fr.iutfbleau.projetIHM2022FI2.API.Model;
|
||||
import fr.iutfbleau.projetIHM2022FI2.Permanent.Controller.ObservateurFenetre;
|
||||
import fr.iutfbleau.projetIHM2022FI2.Permanent.View.Chargement;
|
||||
|
||||
/**
|
||||
* Le Model de L'IHM
|
||||
*/
|
||||
public class ModelProf implements Model{
|
||||
|
||||
// le panel qui contient la fenetre de groupe
|
||||
private JPanel panGroupe;
|
||||
// la fenetre de groupe
|
||||
private FenetreGroupe fenGr;
|
||||
//la fenetre d'etudiant
|
||||
private FenetreEtudiant fenEtu;
|
||||
// le groupe courant
|
||||
private AbstractGroupeFactory promo;
|
||||
// le changement courant
|
||||
private AbstractChangementFactory changement;
|
||||
// la fenetre principale
|
||||
private JFrame fenetre;
|
||||
|
||||
/**
|
||||
* Constructeur du Model.
|
||||
*
|
||||
* @param agf le groupe principal
|
||||
* @param chan le changement courant
|
||||
*/
|
||||
public ModelProf(AbstractGroupeFactory agf, AbstractChangementFactory chan){
|
||||
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());
|
||||
Chargement ch=new Chargement(this.fenetre);
|
||||
this.promo=agf;
|
||||
this.changement=chan;
|
||||
if(this.promo.getPromotion()==null){
|
||||
this.promo=null;
|
||||
}
|
||||
ch.dispose();
|
||||
this.fenetre.setVisible(true);
|
||||
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.panGroupe=new JPanel(new GridLayout(1,1));
|
||||
if(this.promo!=null){
|
||||
this.showGroupe(this.promo.getPromotion());
|
||||
}else{
|
||||
this.showGroupe(null);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
/**
|
||||
* Fonction pour refresh/changer de groupe d'affichage
|
||||
* @param g le groupe a afficher
|
||||
*/
|
||||
public void showGroupe(Groupe g){
|
||||
if(g!=null)
|
||||
g=this.promo .refreshALL(g);
|
||||
this.panGroupe.removeAll();
|
||||
this.fenGr=new FenetreGroupe(g, this);
|
||||
this.fenEtu=new FenetreEtudiant(g);
|
||||
this.fenetre.getContentPane().removeAll();
|
||||
this.panGroupe.add(this.fenGr.getPan());
|
||||
this.panGroupe.revalidate();
|
||||
this.fenetre.add(this.panGroupe);
|
||||
JScrollPane scroll=new JScrollPane(this.fenEtu.getPan());
|
||||
scroll.getVerticalScrollBar().setUnitIncrement(15);
|
||||
this.fenetre.add(scroll);
|
||||
this.fenetre.revalidate();
|
||||
}
|
||||
@Override
|
||||
/**
|
||||
* getteur de la fenetre
|
||||
* @return JFrame la fenetre
|
||||
*/
|
||||
public JFrame getFenetre() {
|
||||
return fenetre;
|
||||
}
|
||||
/**
|
||||
* permet d'obtenir l'ensemble des etudiants
|
||||
* @return
|
||||
*/
|
||||
@Override
|
||||
public Set<Etudiant> getEtudiant(){
|
||||
return this.promo.getPromotion().getEtudiants();
|
||||
}
|
||||
|
||||
// **************************
|
||||
// FONCTION POUR LES CHANGEMENTS
|
||||
// ******************************
|
||||
/**
|
||||
* Créer un changement depuis le groupe courant
|
||||
* @param e l'etudiant
|
||||
* @param b le groupe a changer
|
||||
*/
|
||||
@Override
|
||||
public void changeGroupe(Etudiant e, Groupe b){
|
||||
if(b==null)
|
||||
return;
|
||||
b=this.promo.refreshALL(b);
|
||||
if(b.getEtudiants()!=null && b.getMax()>b.getEtudiants().size()+1){
|
||||
if(b.getEtudiants().size()>this.fenGr.getG().getEtudiants().size()){
|
||||
JPanel myPanel= new JPanel(new GridLayout(2,1));
|
||||
JTextField xField = new JTextField(100);
|
||||
xField.setMinimumSize(new Dimension(100, 100));
|
||||
xField.setPreferredSize(new Dimension(100,100));
|
||||
myPanel.add(new JLabel("Ce Groupe est plus grand que le votre raison du changement:"));
|
||||
myPanel.add(xField);
|
||||
if(JOptionPane.showConfirmDialog(this.fenetre, myPanel, "Changer dans quel Groupe ?", JOptionPane.OK_CANCEL_OPTION)==JOptionPane.OK_OPTION){
|
||||
//IL faut que l'etudiant detaile un minimun la raison
|
||||
if(xField.getText().length()>5){
|
||||
this.changement.createChangement(this.fenGr.getG(), e, b, xField.getText());
|
||||
}else{
|
||||
JOptionPane.showMessageDialog(this.fenetre, "veuillez detailler votre raison", "erreur", JOptionPane.ERROR_MESSAGE);
|
||||
}
|
||||
}
|
||||
}else{
|
||||
this.changement.createChangement(this.fenGr.getG(), e, b);
|
||||
}
|
||||
}else{
|
||||
JOptionPane.showMessageDialog(this.fenetre, "impossible trop d'etudiant dans l'autre Groupe", "erreur", JOptionPane.ERROR_MESSAGE);
|
||||
}
|
||||
this.showGroupe(this.fenGr.getG());
|
||||
}
|
||||
/**
|
||||
* Retourn les groupe auquel on peut demander a changer depuis le groupe courant
|
||||
*
|
||||
* @return la liste des groupes
|
||||
*/
|
||||
@Override
|
||||
public Set<Groupe> getGroupePartition(){
|
||||
this.promo.refreshALL(this.fenGr.getG().getPointPoint());
|
||||
Set<Groupe> retour=new HashSet<>();
|
||||
if(this.fenGr.getG().getPointPoint().getType()!=TypeGroupe.PARTITION)
|
||||
throw new IllegalStateException("impossible de changer un étudiant d'un groupe ne provenant pas d'une partition");
|
||||
for(Groupe sous:this.fenGr.getG().getPointPoint().getSousGroupes()){
|
||||
if(sous.getId()!=this.fenGr.getG().getId()){
|
||||
retour.add(sous);
|
||||
}
|
||||
}
|
||||
return retour;
|
||||
}
|
||||
/**
|
||||
* Fonction pour ajouter un étudiant au groupe
|
||||
* @param g
|
||||
* @param e
|
||||
* @return boolean pour savoir si il a pus être ajouter
|
||||
*/
|
||||
@Override
|
||||
public boolean addEtudiant(Groupe g, Etudiant e) {
|
||||
// TODO Auto-generated method stub
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Fonction pour supprimer un groupe
|
||||
* @param g le groupe a supprimer
|
||||
*/
|
||||
@Override
|
||||
public void delete(Groupe g) {
|
||||
// TODO Auto-generated method stub
|
||||
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Fonction pour renomer un groupe
|
||||
* @param name
|
||||
* @param g
|
||||
*/
|
||||
@Override
|
||||
public void rename(String name, Groupe g) {
|
||||
// TODO Auto-generated method stub
|
||||
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 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
|
||||
*/
|
||||
@Override
|
||||
public void partition(Groupe g, int n, String name) {
|
||||
// TODO Auto-generated method stub
|
||||
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 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
|
||||
*/
|
||||
@Override
|
||||
public void free(Groupe g, String name, int min, int max, Set<Etudiant> ajout) {
|
||||
// TODO Auto-generated method stub
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* ajoute une nouvelle promotion
|
||||
* @param min le nombre min
|
||||
* @param max le nombre max
|
||||
* @param name le nom
|
||||
* @param ajout les etudiant a ajouter a la promo
|
||||
*/
|
||||
@Override
|
||||
public void addPromo(int min, int max, String name, Set<Etudiant> ajout) {
|
||||
// TODO Auto-generated method stub
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Fonction pour supprimer un etudiant.
|
||||
* @param e l'etudiant a supprimer
|
||||
* @return boolean true si l'etudiant a ete supprimer, false sinon
|
||||
*/
|
||||
@Override
|
||||
public boolean deleteEtu(Etudiant e) {
|
||||
// TODO Auto-generated method stub
|
||||
return false;
|
||||
}
|
||||
/**
|
||||
* Fonction pour afficher une fenetre listnatn les changements
|
||||
*
|
||||
*/
|
||||
@Override
|
||||
public void listChange() {
|
||||
// TODO Auto-generated method stub
|
||||
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Fonction pour effectuer un changement
|
||||
* @param Changement le changement a effecteur
|
||||
*/
|
||||
@Override
|
||||
public void change(Changement change) {
|
||||
// TODO Auto-generated method stub
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Fonction supprimant un changement
|
||||
*
|
||||
* @param to_delete la changement a delete
|
||||
*/
|
||||
@Override
|
||||
public void deleteChange(Changement to_delete) {
|
||||
// TODO Auto-generated method stub
|
||||
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Fonction affichant les raison d'un changement
|
||||
*
|
||||
* @param change le changement
|
||||
*/
|
||||
@Override
|
||||
public void showRaisonChange(Changement change) {
|
||||
// TODO Auto-generated method stub
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Fonction affichant une fentre pour trouver un etudiant et tous ses groupes asociée
|
||||
*/
|
||||
@Override
|
||||
public void findEtu() {
|
||||
// TODO Auto-generated method stub
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Fonction pour recuperer les etudiant avec ce nom
|
||||
* @param name le nom de(s) etudiants
|
||||
* @return la liste
|
||||
*/
|
||||
@Override
|
||||
public Set<Etudiant> getEtu(String name) {
|
||||
// TODO Auto-generated method stub
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
*affiche les groupe d'un etudiant
|
||||
* @param e l'etudiant
|
||||
*/
|
||||
@Override
|
||||
public void showGroupOfEtudiant(Etudiant e) {
|
||||
// TODO Auto-generated method stub
|
||||
|
||||
}
|
||||
|
||||
}
|
463
src/fr/iutfbleau/projetIHM2022FI2/MNP/ROOT/Model/ModelRoot.java
Normal file
463
src/fr/iutfbleau/projetIHM2022FI2/MNP/ROOT/Model/ModelRoot.java
Normal file
@@ -0,0 +1,463 @@
|
||||
package fr.iutfbleau.projetIHM2022FI2.MNP.ROOT.Model;
|
||||
import java.util.HashSet;
|
||||
import java.util.Set;
|
||||
import javax.swing.*;
|
||||
import java.awt.*;
|
||||
|
||||
import fr.iutfbleau.projetIHM2022FI2.API.AbstractChangementFactory;
|
||||
import fr.iutfbleau.projetIHM2022FI2.API.AbstractGroupeFactory;
|
||||
import fr.iutfbleau.projetIHM2022FI2.API.Changement;
|
||||
import fr.iutfbleau.projetIHM2022FI2.API.Etudiant;
|
||||
import fr.iutfbleau.projetIHM2022FI2.API.Groupe;
|
||||
import fr.iutfbleau.projetIHM2022FI2.API.Model;
|
||||
import fr.iutfbleau.projetIHM2022FI2.API.TypeGroupe;
|
||||
import fr.iutfbleau.projetIHM2022FI2.MNP.AbstractChangementFactoryNP;
|
||||
import fr.iutfbleau.projetIHM2022FI2.MNP.AbstractGroupeFactoryNP;
|
||||
import fr.iutfbleau.projetIHM2022FI2.MP.ROOT.View.FenetreChangement;
|
||||
import fr.iutfbleau.projetIHM2022FI2.MP.ROOT.View.FenetreEtudiant;
|
||||
import fr.iutfbleau.projetIHM2022FI2.MP.ROOT.View.FenetreGroupe;
|
||||
import fr.iutfbleau.projetIHM2022FI2.MP.ROOT.View.FindBarFenetre;
|
||||
import fr.iutfbleau.projetIHM2022FI2.Permanent.Controller.ObservateurChangeGroupe;
|
||||
import fr.iutfbleau.projetIHM2022FI2.Permanent.Controller.ObservateurFenetre;
|
||||
import fr.iutfbleau.projetIHM2022FI2.Permanent.View.Chargement;
|
||||
|
||||
/**
|
||||
* Le Model de L'IHM
|
||||
*/
|
||||
public class ModelRoot implements Model{
|
||||
|
||||
// le panel qui contient la fenetre de groupe
|
||||
private JPanel panGroupe;
|
||||
// la fenetre de groupe
|
||||
private FenetreGroupe fenGr;
|
||||
//la fenetre d'etudiant
|
||||
private FenetreEtudiant fenEtu;
|
||||
// le groupe courant
|
||||
private AbstractGroupeFactory promo;
|
||||
// le changement courant
|
||||
private AbstractChangementFactory changement;
|
||||
// la fenetre principale
|
||||
private JFrame fenetre;
|
||||
//fenetre du changement
|
||||
private FenetreChangement fenChange;
|
||||
|
||||
/**
|
||||
* Constructeur du model.
|
||||
* @param agf le groupe courant
|
||||
* @param change le changement courant
|
||||
*/
|
||||
public ModelRoot(AbstractGroupeFactory agf, AbstractChangementFactory change){
|
||||
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());
|
||||
Chargement ch=new Chargement(this.fenetre);
|
||||
this.promo=agf;
|
||||
this.changement=change;
|
||||
ch.dispose();
|
||||
this.fenetre.setVisible(true);
|
||||
if(this.promo.getPromotion()==null){
|
||||
this.fenGr=new FenetreGroupe(null, this);
|
||||
this.fenEtu=new FenetreEtudiant(null, this);
|
||||
}else{
|
||||
this.fenGr=new FenetreGroupe(this.promo.getPromotion(), this);
|
||||
this.fenEtu=new FenetreEtudiant(this.promo.getPromotion(), this);
|
||||
}
|
||||
this.panGroupe=new JPanel(new GridLayout(1,1));
|
||||
if(this.promo.getPromotion()!=null){
|
||||
this.showGroupe(this.promo.getPromotion());
|
||||
}else{
|
||||
this.showGroupe(null);
|
||||
}
|
||||
this.fenChange=null;
|
||||
}
|
||||
|
||||
@Override
|
||||
/**
|
||||
* Fonction pour refresh/changer de groupe d'affichage
|
||||
* @param g le groupe a afficher
|
||||
*/
|
||||
public void showGroupe(Groupe g){
|
||||
if(g!=null)
|
||||
g=this.promo.refreshALL(g);
|
||||
this.panGroupe.removeAll();
|
||||
this.fenGr=new FenetreGroupe(g, this);
|
||||
this.fenEtu=new FenetreEtudiant(g, this);
|
||||
this.fenetre.getContentPane().removeAll();
|
||||
this.panGroupe.add(this.fenGr.getPan());
|
||||
this.panGroupe.revalidate();
|
||||
this.fenetre.add(this.panGroupe);
|
||||
JScrollPane scroll=new JScrollPane(this.fenEtu.getPan());
|
||||
scroll.getVerticalScrollBar().setUnitIncrement(15);
|
||||
this.fenetre.add(scroll);
|
||||
this.fenetre.revalidate();
|
||||
}
|
||||
@Override
|
||||
/**
|
||||
* getteur de la fenetre
|
||||
* @return JFrame la fenetre
|
||||
*/
|
||||
public JFrame getFenetre() {
|
||||
return fenetre;
|
||||
}
|
||||
/**
|
||||
* permet d'obtenir l'ensemble des etudiants
|
||||
* @return
|
||||
*/
|
||||
@Override
|
||||
public Set<Etudiant> getEtudiant(){
|
||||
return this.promo.getEtudiants(null);
|
||||
}
|
||||
|
||||
// ***********************
|
||||
// FONCTION POUR SUPRIMER UN ETUDIANT
|
||||
// ***********************
|
||||
/**
|
||||
* Fonction pour supprimer un etudiant.
|
||||
* @param e l'etudiant a supprimer
|
||||
* @return boolean true si l'etudiant a ete supprimer, false sinon
|
||||
*/
|
||||
@Override
|
||||
public boolean deleteEtu(Etudiant e){
|
||||
if(this.deleteEtutoChildren(e, this.fenGr.getG())){
|
||||
this.promo.dropFromGroupe(this.fenGr.getG(), e);
|
||||
this.showGroupe(this.fenGr.getG());
|
||||
return true;
|
||||
}else{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
/**
|
||||
* Permet de savoir si un étudiant peut être supprimé
|
||||
* @param e l'étudiant à supprimer
|
||||
* @param g le groupe dans lequel on cherche
|
||||
* @return true si possible, false sinon
|
||||
*/
|
||||
private boolean deleteEtutoChildren(Etudiant e, Groupe g){
|
||||
if(g.getMax()<g.getEtudiants().size()-1)
|
||||
return false;
|
||||
for(Groupe sous: g.getSousGroupes()){
|
||||
if(this.deleteEtutoChildren(e, sous)==false){
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
// ***********************
|
||||
// FONCTION POUR Ajouter UN ETUDIANT
|
||||
// ***********************
|
||||
@Override
|
||||
/**
|
||||
* 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(g!=g.getPointPoint())
|
||||
if(this.addEtuToParent(g.getPointPoint(), e)==false)
|
||||
return false;
|
||||
//On induqe a la BD de sauvegarder cette modification
|
||||
this.promo.addToGroupe(g, e);
|
||||
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.getId()==e.getId()){
|
||||
return true;
|
||||
}
|
||||
}
|
||||
if(g.getPointPoint()!=g){
|
||||
if(this.addEtuToParent(g.getPointPoint(), e)==false){
|
||||
return false;
|
||||
}
|
||||
}
|
||||
this.promo.addToGroupe(g, e);
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
// ***********************
|
||||
// FONCTION POUR SUPRIMER UN GROUPE
|
||||
// ***********************
|
||||
@Override
|
||||
/**
|
||||
* Fonction pour supprimer un groupe
|
||||
* @param g le groupe a supprimer
|
||||
*/
|
||||
public void delete(Groupe g){
|
||||
//On ne peut pas supprimer la promo normallement
|
||||
if(g==this.promo.getPromotion()){
|
||||
if(JOptionPane.showConfirmDialog(this.fenetre, "Attention ête vous sûr de vouloir supprimer la promo", "Attention", JOptionPane.YES_NO_OPTION)==JOptionPane.YES_OPTION){
|
||||
this.promo.deleteGroupe(this.promo.getPromotion());
|
||||
this.showGroupe(null);
|
||||
}else{
|
||||
return;
|
||||
}
|
||||
//JOptionPane.showMessageDialog(this.fenetre, "impossible de supprimer la promotion", "alerte", JOptionPane.ERROR_MESSAGE);
|
||||
}else{
|
||||
//on suprime le groupe
|
||||
this.promo.deleteGroupe(g);
|
||||
this.showGroupe(g.getPointPoint());
|
||||
}
|
||||
}
|
||||
|
||||
// ***********************
|
||||
// FONCTION POUR RENOMER UN GROUPE
|
||||
// ***********************
|
||||
|
||||
@Override
|
||||
/**
|
||||
* Fonction pour renomer un groupe
|
||||
* @param name
|
||||
* @param g
|
||||
*/
|
||||
public void rename(String name, Groupe g){
|
||||
this.promo.changeNameGroupe(g, name);
|
||||
this.showGroupe(g);
|
||||
}
|
||||
|
||||
|
||||
// **********************
|
||||
// FONCTION POUR CREER UN GROUPE
|
||||
// **********************
|
||||
|
||||
@Override
|
||||
/**
|
||||
* 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){
|
||||
Chargement ch=new Chargement(this.fenetre);
|
||||
this.fenetre.setVisible(false);
|
||||
this.promo.createPartition(g, name, n);
|
||||
ch.dispose();
|
||||
this.fenetre.setVisible(true);
|
||||
this.showGroupe(g);
|
||||
}
|
||||
|
||||
@Override
|
||||
/**
|
||||
* 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){
|
||||
Chargement ch=new Chargement(this.fenetre);
|
||||
this.fenetre.setVisible(false);
|
||||
//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++;
|
||||
}
|
||||
creer=this.promo.refreshALL(creer);
|
||||
ch.dispose();
|
||||
this.fenetre.setVisible(true);
|
||||
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.getEtudiants().size()+1<=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);
|
||||
}
|
||||
/**
|
||||
* ajoute une nouvelle promotion
|
||||
* @param min le nombre min
|
||||
* @param max le nombre max
|
||||
* @param name le nom
|
||||
* @param ajout les etudiant a ajouter a la promo
|
||||
*/
|
||||
@Override
|
||||
public void addPromo(int min, int max, String name, Set<Etudiant> ajout){
|
||||
Chargement ch=new Chargement(this.fenetre);
|
||||
this.promo=new AbstractGroupeFactoryNP(name, min, max);
|
||||
this.changement=new AbstractChangementFactoryNP(this.promo);
|
||||
this.fenetre.setVisible(false);
|
||||
for(Etudiant e:ajout){
|
||||
this.addEtudiant(this.promo.getPromotion(), e);
|
||||
}
|
||||
ch.dispose();
|
||||
this.fenetre.setVisible(true);
|
||||
this.showGroupe(this.promo.getPromotion());
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Créer un changement depuis le groupe courant
|
||||
* @param e l'etudiant
|
||||
* @param b le groupe a changer
|
||||
*/
|
||||
@Override
|
||||
public void changeGroupe(Etudiant e, Groupe b){
|
||||
if(b==null)
|
||||
return;
|
||||
b=this.promo.refreshALL(b);
|
||||
if(b.getEtudiants()!=null && b.getMax()>b.getEtudiants().size()+1){
|
||||
if(b.getEtudiants().size()>this.fenGr.getG().getEtudiants().size()){
|
||||
JPanel myPanel= new JPanel(new GridLayout(2,1));
|
||||
JTextField xField = new JTextField(100);
|
||||
xField.setMinimumSize(new Dimension(100, 100));
|
||||
xField.setPreferredSize(new Dimension(100,100));
|
||||
myPanel.add(new JLabel("Ce Groupe est plus grand que le votre raison du changement:"));
|
||||
myPanel.add(xField);
|
||||
if(JOptionPane.showConfirmDialog(this.fenetre, myPanel, "Changer dans quel Groupe ?", JOptionPane.OK_CANCEL_OPTION)==JOptionPane.OK_OPTION){
|
||||
//IL faut que l'etudiant detaile un minimun la raison
|
||||
if(xField.getText().length()>5){
|
||||
this.changement.createChangement(this.fenGr.getG(), e, b, xField.getText());
|
||||
}else{
|
||||
JOptionPane.showMessageDialog(this.fenetre, "veuillez detailler votre raison", "erreur", JOptionPane.ERROR_MESSAGE);
|
||||
}
|
||||
}
|
||||
}else{
|
||||
this.changement.createChangement(this.fenGr.getG(), e, b);
|
||||
}
|
||||
}else{
|
||||
JOptionPane.showMessageDialog(this.fenetre, "impossible trop d'etudiant dans l'autre Groupe", "erreur", JOptionPane.ERROR_MESSAGE);
|
||||
}
|
||||
this.showGroupe(this.fenGr.getG());
|
||||
}
|
||||
/**
|
||||
* Retourn les groupe auquel on peut demander a changer depuis le groupe courant
|
||||
*
|
||||
* @return la liste des groupes
|
||||
*/
|
||||
@Override
|
||||
public Set<Groupe> getGroupePartition(){
|
||||
this.promo.refreshALL(this.fenGr.getG().getPointPoint());
|
||||
Set<Groupe> retour=new HashSet<Groupe>();
|
||||
if(this.fenGr.getG().getPointPoint().getType()!=TypeGroupe.PARTITION)
|
||||
throw new IllegalStateException("impossible de changer un étudiant d'un groupe ne provenant pas d'une partition");
|
||||
for(Groupe sous:this.fenGr.getG().getPointPoint().getSousGroupes()){
|
||||
if(sous.getId()!=this.fenGr.getG().getId()){
|
||||
retour.add(sous);
|
||||
}
|
||||
}
|
||||
return retour;
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see fr.iutfbleau.projetIHM2022FI2.API.Model#listChange()
|
||||
*/
|
||||
/**
|
||||
* Fonction pour afficher une fenetre listnatn les changements
|
||||
*
|
||||
*/
|
||||
@Override
|
||||
public void listChange() {
|
||||
this.fenChange=new FenetreChangement(changement, this);
|
||||
JOptionPane.showMessageDialog(this.fenetre, new JScrollPane(this.fenChange), "liste des changements", JOptionPane.OK_OPTION);
|
||||
}
|
||||
/**
|
||||
* Fonction pour effectuer un changement
|
||||
* @param Changement le changement a effecteur
|
||||
*/
|
||||
@Override
|
||||
public void change(Changement change) {
|
||||
this.changement.applyChangement(change);
|
||||
this.fenChange.refresh();
|
||||
if(change.getA()==this.fenGr.getG()){
|
||||
this.showGroupe(this.fenGr.getG());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Fonction supprimant un changement
|
||||
*
|
||||
* @param to_delete la changement a delete
|
||||
*/
|
||||
@Override
|
||||
public void deleteChange(Changement to_delete) {
|
||||
this.changement.deleteChangement(to_delete);
|
||||
this.fenChange.refresh();
|
||||
}
|
||||
|
||||
/**
|
||||
* Fonction affichant les raison d'un changement
|
||||
*
|
||||
* @param change le changement
|
||||
*/
|
||||
@Override
|
||||
public void showRaisonChange(Changement change) {
|
||||
JOptionPane.showMessageDialog(this.fenetre, new JLabel(change.getRaison()), "Raison de la demande", JOptionPane.OK_OPTION);
|
||||
}
|
||||
/**
|
||||
* Fonction affichant une fentre pour trouver un etudiant et tous ses groupes asociée
|
||||
*/
|
||||
@Override
|
||||
public void findEtu() {
|
||||
JScrollPane scroll=new JScrollPane(new FindBarFenetre(this).getPanel());
|
||||
scroll.getVerticalScrollBar().setUnitIncrement(5);
|
||||
JOptionPane.showMessageDialog(this.fenetre, scroll, "chercher un etudiant", JOptionPane.OK_OPTION);
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see fr.iutfbleau.projetIHM2022FI2.API.Model#getEtu(java.lang.String)
|
||||
*/
|
||||
|
||||
/**
|
||||
* Fonction pour recuperer les etudiant avec ce nom
|
||||
* @param name le nom de(s) etudiants
|
||||
* @return la liste
|
||||
*/
|
||||
@Override
|
||||
public Set<Etudiant> getEtu(String name) {
|
||||
return this.promo.getEtudiants(name);
|
||||
}
|
||||
/**
|
||||
*affiche les groupe d'un etudiant
|
||||
* @param e l'etudiant
|
||||
*/
|
||||
@Override
|
||||
public void showGroupOfEtudiant(Etudiant e){
|
||||
Set<Groupe> liste=this.promo.getGroupesOfEtudiant(e);
|
||||
JPanel myPanel;
|
||||
if(liste!=null && liste.size()>0){
|
||||
myPanel=new JPanel(new GridLayout(liste.size()/2+1, 2, 20, 20));
|
||||
for(Groupe g:liste){
|
||||
JButton bout=new JButton(g.getName());
|
||||
bout.addActionListener(new ObservateurChangeGroupe(this, g));
|
||||
myPanel.add(bout);
|
||||
}
|
||||
}else{
|
||||
myPanel=new JPanel(new GridLayout(2, 2, 20, 20));
|
||||
myPanel.add(new JLabel("Cet Etudiant n'appartient encore a aucun groupe"));
|
||||
}
|
||||
JOptionPane.showMessageDialog(this.fenChange, myPanel, "groupe de l'etudiant", JOptionPane.OK_OPTION);
|
||||
}
|
||||
|
||||
}
|
@@ -0,0 +1,358 @@
|
||||
package fr.iutfbleau.projetIHM2022FI2.MP;
|
||||
import fr.iutfbleau.projetIHM2022FI2.API.*;
|
||||
import java.sql.Connection;
|
||||
import org.mariadb.jdbc.*;
|
||||
import java.sql.DriverManager;
|
||||
import java.sql.ResultSet;
|
||||
import java.sql.PreparedStatement;
|
||||
import java.sql.SQLException;
|
||||
import javax.swing.JFrame;
|
||||
import javax.swing.JOptionPane;
|
||||
import java.util.*;
|
||||
/**
|
||||
* Usine abstraite gérant l'ensemble des changements.
|
||||
*
|
||||
*/
|
||||
|
||||
public class AbstractChangementFactoryNP implements AbstractChangementFactory {
|
||||
|
||||
// l'usine à groupe travaillant en tandem avec cette usine.
|
||||
private AbstractGroupeFactory agf;
|
||||
private JFrame fenetre;
|
||||
// On utilise une table de hachage pour retrouver facilement un changement (à partir de son id).
|
||||
// Si il y a beaucoup de changements c'est plus rapide que de parcourir toute une liste.
|
||||
private HashMap<Integer,Changement> brain;
|
||||
/**
|
||||
* Constructeur de l'usine à changement.
|
||||
* @param agf l'usine à groupe travaillant en tandem avec cette usine.
|
||||
* @param fenetre la fenetre principale
|
||||
*/
|
||||
public AbstractChangementFactoryNP(AbstractGroupeFactory agf, JFrame fenetre){
|
||||
Objects.requireNonNull(agf,"On ne peut pas créer une usine à changement dont l'usine à groupe parternaire est null");
|
||||
this.agf=agf;
|
||||
this.fenetre=fenetre;
|
||||
this.brain=new HashMap<Integer,Changement>();
|
||||
this.getChange();
|
||||
}
|
||||
/**
|
||||
* Constructeur de l'usine à changement.
|
||||
* @param agf l'usine à groupe travaillant en tandem avec cette usine.
|
||||
* @param fenetre la fenetre principale
|
||||
* @param liste la liste des changements
|
||||
*/
|
||||
public AbstractChangementFactoryNP(AbstractGroupeFactory agf, JFrame fenetre, Set<Changement> liste){
|
||||
Objects.requireNonNull(agf,"On ne peut pas créer une usine à changement dont l'usine à groupe parternaire est null");
|
||||
this.agf=agf;
|
||||
this.fenetre=fenetre;
|
||||
this.brain=new HashMap<Integer,Changement>();
|
||||
for(Changement ch:liste){
|
||||
this.brain.put(ch.getId(), ch);
|
||||
}
|
||||
this.getChange();
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* permet de récupérer l'usine abstraite pour les groupes qui fonctionne en tandem avec cette usine abstraite
|
||||
* @return cette usine abstraite pour les groupes
|
||||
*/
|
||||
public AbstractGroupeFactory getGroupeFactory(){
|
||||
return this.agf;
|
||||
}
|
||||
|
||||
/**
|
||||
* permet de récupérer les changements
|
||||
* @return l'ensemble de tous les changements en attente
|
||||
*/
|
||||
public Set<Changement> getAllChangements(){
|
||||
this.refresh();
|
||||
// la méthode value() d'un hashmap retourne la collection des valeurs.
|
||||
// Il faut transformer la collection en Set.
|
||||
// Un constructeur de HashSet permet de faire cette opération.
|
||||
Set<Changement> out = new HashSet<Changement>(this.brain.values());
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* permet de mettre en oeuvre un changement connu de l'usine abstraite.
|
||||
* @param c le changement à mettre en oeuvre.
|
||||
* @throws java.lang.NullPointerException si un argument est null
|
||||
* @throws java.lang.IllegalStateException si le changement n'a pas de sens en l'état actuel (e.g. étudiant pas dans le groupe de départ a, groupe b inconnu, groupe a inconnu, etc).
|
||||
* @throws java.lang.IllegalArgumentException si inconnu de l'usine abstraite
|
||||
*/
|
||||
public void applyChangement(Changement c){
|
||||
Objects.requireNonNull(c,"On ne peut pas appliquer un changement qui est null");
|
||||
Etudiant e = c.getEtu();
|
||||
Groupe a = c.getA();
|
||||
Groupe b = c.getB();
|
||||
|
||||
if (!agf.knows(a)) throw new IllegalStateException("Le groupe de départ du changement est inconnu. Impossible à mettre en oeuvre.");
|
||||
|
||||
if (!agf.knows(b)) throw new IllegalStateException("Le groupe d'arrivée du changement est inconnu. Impossible à mettre en oeuvre.");
|
||||
// pas encore implanté.
|
||||
// if(!agf.getGroupesOfEtudiant(e).contains(a)) throw new IllegalStateException("Le groupe de départ ne contient pas l'étudiant. Impossible à mettre en oeuvre.");
|
||||
|
||||
agf.dropFromGroupe(a,e);
|
||||
agf.addToGroupe(b,e);
|
||||
// En cas de succès, on enlève le changement du cerveau
|
||||
this.deleteChangement(c);
|
||||
for(Changement ch: this.getAllChangements()){
|
||||
if(ch.getB().getSize()+1==ch.getB().getMax()){
|
||||
this.deleteChangement(ch);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* permet de supprimer un changement connu de l'usine abstraite.
|
||||
* @param c le changement à supprimer.
|
||||
* @throws java.lang.NullPointerException si un argument est null
|
||||
* @throws java.lang.IllegalArgumentException si inconnu de l'usine abstraite
|
||||
*/
|
||||
public void deleteChangement(Changement c){
|
||||
Objects.requireNonNull(c,"On ne peut pas demander la suppression d'un changement qui est null");
|
||||
Connection cnx=this.cnx();
|
||||
try{
|
||||
PreparedStatement pst=cnx.prepareStatement("DELETE FROM `Changement` where `id`=?");
|
||||
pst.setInt(1, c.getId());
|
||||
pst.executeUpdate();
|
||||
pst.close();
|
||||
}catch(SQLException er){
|
||||
System.out.println(er.toString());
|
||||
if(this.erreurSQL()){
|
||||
this.deleteChangement(c);
|
||||
}else{
|
||||
return;
|
||||
}
|
||||
}
|
||||
this.close(cnx);
|
||||
this.brain.remove(c.getId());
|
||||
}
|
||||
|
||||
/**
|
||||
* permet d'ajouter un nouveau changement.
|
||||
*
|
||||
* @param A groupe actuel
|
||||
* @param B groupe demandé
|
||||
* @param e étudiant concerné par le changement
|
||||
*
|
||||
* @throws java.lang.NullPointerException si un argument est null
|
||||
* @throws java.lang.IllegalArgumentException si les groupes ou l'étudiant ne sont pas connus de la factory partenaire, ou e n'appartient pas à A ou A et B ne sont pas frères dans l'arbre des groupes.
|
||||
*
|
||||
*/
|
||||
public void createChangement(Groupe A, Etudiant e, Groupe B){
|
||||
Objects.requireNonNull(A,"Le groupe d'origine ne peut pas être null");
|
||||
Objects.requireNonNull(B,"Le groupe d'arrivée ne peut pas être null");
|
||||
Objects.requireNonNull(e,"L'étudiant ne peut pas être null");
|
||||
Changement c = new ChangementNP(A,e,B);
|
||||
this.brain.put(Integer.valueOf(c.getId()),c);
|
||||
Connection cnx=this.cnx();
|
||||
try{
|
||||
PreparedStatement pst=cnx.prepareStatement("SELECT * FROM `Changement` where `idGroupeA`=? AND `idGroupeB`=? AND `idEtudiant`=?; ");
|
||||
pst.setInt(1, A.getId());
|
||||
pst.setInt(2, B.getId());
|
||||
pst.setInt(3, e.getId());
|
||||
if(!pst.executeQuery().next()){
|
||||
pst.close();
|
||||
pst=cnx.prepareStatement("INSERT INTO `Changement` (`idGroupeA`, `idGroupeB`, `idEtudiant`, `id`) VALUES (?, ?, ?, ?);");
|
||||
pst.setInt(1, A.getId());
|
||||
pst.setInt(2, B.getId());
|
||||
pst.setInt(3, e.getId());
|
||||
pst.setInt(4, c.getId());
|
||||
pst.executeUpdate();
|
||||
pst.close();
|
||||
}else{
|
||||
pst.close();
|
||||
JOptionPane.showMessageDialog(this.fenetre, "Vous Avez deja demander a Chnager dans ce Groupe", "erreur", JOptionPane.ERROR_MESSAGE);
|
||||
}
|
||||
}catch(SQLException er){
|
||||
System.out.println(er.toString());
|
||||
if(this.erreurSQL()){
|
||||
this.createChangement(A, e, B);
|
||||
}else{
|
||||
return;
|
||||
}
|
||||
}
|
||||
this.close(cnx);
|
||||
}
|
||||
|
||||
@Override
|
||||
/**
|
||||
* permet d'ajouter un nouveau changement. de type 2
|
||||
*
|
||||
* @param A groupe actuel
|
||||
* @param B groupe demandé
|
||||
* @param e étudiant concerné par le changement
|
||||
* @param raison la raison du changement de type 2
|
||||
* @throws java.lang.NullPointerException si un argument est null
|
||||
* @throws java.lang.IllegalArgumentException si les groupes ou l'étudiant ne sont pas connus de la factory partenaire, ou e n'appartient pas à A ou A et B ne sont pas frères dans l'arbre des groupes.
|
||||
*
|
||||
*/
|
||||
public void createChangement(Groupe A, Etudiant e, Groupe B, String raison){
|
||||
Objects.requireNonNull(A,"Le groupe d'origine ne peut pas être null");
|
||||
Objects.requireNonNull(B,"Le groupe d'arrivée ne peut pas être null");
|
||||
Objects.requireNonNull(e,"L'étudiant ne peut pas être null");
|
||||
Changement c = new ChangementNP(A,e,B, raison);
|
||||
this.brain.put(Integer.valueOf(c.getId()),c);
|
||||
Connection cnx=this.cnx();
|
||||
try{
|
||||
PreparedStatement pst=cnx.prepareStatement("SELECT * FROM `Changement` where `idGroupeA`=? AND `idGroupeB`=? AND `idEtudiant`=?; ");
|
||||
pst.setInt(1, A.getId());
|
||||
pst.setInt(2, B.getId());
|
||||
pst.setInt(3, e.getId());
|
||||
if(!pst.executeQuery().next()){
|
||||
pst.close();
|
||||
pst=cnx.prepareStatement("INSERT INTO `Changement` (`id`, `idGroupeA`, `idGroupeB`, `idEtudiant`, `Raison`) VALUES (?, ?, ?, ?, ?);");
|
||||
pst.setInt(1, c.getId());
|
||||
pst.setInt(2, A.getId());
|
||||
pst.setInt(3, B.getId());
|
||||
pst.setInt(4, e.getId());
|
||||
pst.setString(5, raison);
|
||||
pst.executeUpdate();
|
||||
pst.close();
|
||||
}else{
|
||||
pst.close();
|
||||
JOptionPane.showMessageDialog(this.fenetre, "Vous Avez deja demander a Chnager dans ce Groupe", "erreur", JOptionPane.ERROR_MESSAGE);
|
||||
}
|
||||
}catch(SQLException er){
|
||||
System.out.println(er.toString());
|
||||
if(this.erreurSQL()){
|
||||
this.createChangement(A, e, B, raison);
|
||||
}else{
|
||||
return;
|
||||
}
|
||||
}
|
||||
this.close(cnx);
|
||||
}
|
||||
|
||||
|
||||
// **********************
|
||||
// FONCTION POUR SIMPLIFIER LES Modification BD
|
||||
// ***********************
|
||||
|
||||
/**
|
||||
* permet de se connecter à la base de donnée
|
||||
*
|
||||
* @return la connexion à la base de donnée
|
||||
*/
|
||||
private Connection cnx(){
|
||||
//On se Connecte a la BD
|
||||
try{
|
||||
Class.forName("org.mariadb.jdbc.Driver");
|
||||
Connection cnx = DriverManager.getConnection(
|
||||
"jdbc:mariadb://dwarves.iut-fbleau.fr/chaignea",
|
||||
"chaignea", "Chaigneauphpmyadmin");
|
||||
return cnx;
|
||||
}catch(Exception e){
|
||||
if(this.erreurCO()==true){
|
||||
return this.cnx();
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* permet de détécter une erreur de connexion à la base de donnée
|
||||
*
|
||||
* @return true si une erreur est détéctée, false sinon
|
||||
*
|
||||
*
|
||||
*/
|
||||
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;
|
||||
}
|
||||
}
|
||||
/**
|
||||
* permet de détécter une erreur SQL
|
||||
*
|
||||
* @return true si une erreur est détéctée, false sinon
|
||||
*
|
||||
*
|
||||
*/
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* permet de fermer la connexion à la base de donnée
|
||||
*
|
||||
* @param clos outil de fermture de la connexion
|
||||
*
|
||||
*/
|
||||
private void close(AutoCloseable clos){
|
||||
try{
|
||||
clos.close();
|
||||
}catch(Exception e){
|
||||
if(this.erreurCO()==true)
|
||||
this.close(clos);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* permet de remplir la liste des changements de l'usine
|
||||
*/
|
||||
private void getChange(){
|
||||
Connection cnx=this.cnx();
|
||||
try{
|
||||
PreparedStatement pst=cnx.prepareStatement("SELECT * FROM `Changement` NATURAL JOIN Etudiant; ");
|
||||
ResultSet rs=pst.executeQuery();
|
||||
while(rs.next()){
|
||||
Groupe[] ab=new Groupe[2];
|
||||
this.getGroupe(rs.getInt(2), rs.getInt(3), ab, this.agf.getPromotion());
|
||||
Etudiant e=new EtudiantNP(rs.getString(6), rs.getString(7), rs.getInt(4));
|
||||
if(rs.getString(5)!=null){
|
||||
this.brain.put(rs.getInt(1), new ChangementNP(ab[0], e, ab[1], rs.getInt(1), rs.getString(5)));
|
||||
}else{
|
||||
this.brain.put(rs.getInt(1), new ChangementNP(ab[0], e, ab[1], rs.getInt(1)));
|
||||
}
|
||||
}
|
||||
pst.close();
|
||||
}catch(SQLException e){
|
||||
if(this.erreurCO())
|
||||
this.getChange();
|
||||
return;
|
||||
}
|
||||
this.close(cnx);
|
||||
}
|
||||
/**
|
||||
* permet de chercher les sous-groupes d'un groupe
|
||||
*
|
||||
* @param idA id du groupe A
|
||||
* @param idB id du groupe B
|
||||
* @param retour tableau de groupe dans lequel on va stocker les groupes
|
||||
* @param toFind le groupe à comparer (ou groupe père pour la première itération)
|
||||
*/
|
||||
private void getGroupe(int idA, int idB, Groupe[] retour, Groupe tofind){
|
||||
if(retour[0]!=null && retour[1]!=null)
|
||||
return;
|
||||
if(tofind.getId()==idA){
|
||||
retour[0]=tofind;
|
||||
}
|
||||
if(tofind.getId()==idB){
|
||||
retour[1]=tofind;
|
||||
}
|
||||
for(Groupe sous:tofind.getSousGroupes()){
|
||||
this.getGroupe(idA, idB, retour, sous);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* pemet de arfricher la liste des changements
|
||||
*
|
||||
*/
|
||||
private void refresh(){
|
||||
this.brain=new HashMap<Integer,Changement>();
|
||||
this.getChange();
|
||||
}
|
||||
|
||||
|
||||
}
|
File diff suppressed because it is too large
Load Diff
141
src/fr/iutfbleau/projetIHM2022FI2/MP/ChangementNP.java
Normal file
141
src/fr/iutfbleau/projetIHM2022FI2/MP/ChangementNP.java
Normal file
@@ -0,0 +1,141 @@
|
||||
package fr.iutfbleau.projetIHM2022FI2.MP;
|
||||
import fr.iutfbleau.projetIHM2022FI2.API.*;
|
||||
import java.util.*;
|
||||
/**
|
||||
* Une demande de changement de groupe
|
||||
* concerne un étudiant, qui est dans un groupe A et veut aller dans un groupe B.
|
||||
*
|
||||
* Implémentation non persistante fournie avec l'API.
|
||||
*/
|
||||
|
||||
public class ChangementNP implements Changement {
|
||||
|
||||
//auto-incrément des changements
|
||||
private static int nextId=0;
|
||||
// id du changement
|
||||
private int id;
|
||||
// groupe d'origine et d'arrivée
|
||||
private Groupe a,b;
|
||||
// étudiant concerné
|
||||
private Etudiant e;
|
||||
// raison de la demande
|
||||
private String raison;
|
||||
/**
|
||||
* Constructeur d'un changement.
|
||||
* @param a le groupe de départ
|
||||
* @param b le groupe d'arrivée
|
||||
* @param e l'étudiant demandant le changement
|
||||
* @param raison la raison du changement
|
||||
*/
|
||||
public ChangementNP(Groupe a, Etudiant e, Groupe b){
|
||||
Objects.requireNonNull(a,"On ne peut pas créer un changement avec un groupe à quitter null");
|
||||
Objects.requireNonNull(b,"On ne peut pas créer un changement avec un groupe à rejoindre null");
|
||||
Objects.requireNonNull(e,"On ne peut pas créer un changement concernant un étudiant null");
|
||||
this.raison=null;
|
||||
this.id=++this.nextId;
|
||||
this.a=a;
|
||||
this.b=b;
|
||||
this.e=e;
|
||||
}
|
||||
/**
|
||||
* Constructeur d'un changement.
|
||||
* @param a le groupe de départ
|
||||
* @param b le groupe d'arrivée
|
||||
* @param e l'étudiant demandant le changement
|
||||
* @param raison la raison du changement
|
||||
*
|
||||
*/
|
||||
public ChangementNP(Groupe a, Etudiant e, Groupe b, String raison){
|
||||
Objects.requireNonNull(a,"On ne peut pas créer un changement avec un groupe à quitter null");
|
||||
Objects.requireNonNull(b,"On ne peut pas créer un changement avec un groupe à rejoindre null");
|
||||
Objects.requireNonNull(e,"On ne peut pas créer un changement concernant un étudiant null");
|
||||
this.raison=raison;
|
||||
this.id=++this.nextId;
|
||||
this.a=a;
|
||||
this.b=b;
|
||||
this.e=e;
|
||||
}
|
||||
/**
|
||||
* Constructeur d'un changement.
|
||||
* @param a le groupe de départ
|
||||
* @param b le groupe d'arrivée
|
||||
* @param e l'étudiant demandant le changement
|
||||
* @param id l'id du changement
|
||||
*
|
||||
*/
|
||||
public ChangementNP(Groupe a, Etudiant e, Groupe b, int id){
|
||||
Objects.requireNonNull(a,"On ne peut pas créer un changement avec un groupe à quitter null");
|
||||
Objects.requireNonNull(b,"On ne peut pas créer un changement avec un groupe à rejoindre null");
|
||||
Objects.requireNonNull(e,"On ne peut pas créer un changement concernant un étudiant null");
|
||||
|
||||
this.id=id;
|
||||
this.a=a;
|
||||
this.b=b;
|
||||
this.e=e;
|
||||
if(this.id>this.nextId){
|
||||
this.nextId=this.id;
|
||||
}
|
||||
}
|
||||
/**
|
||||
* Constructeur d'un changement.
|
||||
* @param a le groupe de départ
|
||||
* @param b le groupe d'arrivée
|
||||
* @param e l'étudiant demandant le changement
|
||||
* @param id l'id du changement
|
||||
* @param raison la raison du changement
|
||||
*
|
||||
*/
|
||||
public ChangementNP(Groupe a, Etudiant e, Groupe b, int id, String raison){
|
||||
Objects.requireNonNull(a,"On ne peut pas créer un changement avec un groupe à quitter null");
|
||||
Objects.requireNonNull(b,"On ne peut pas créer un changement avec un groupe à rejoindre null");
|
||||
Objects.requireNonNull(e,"On ne peut pas créer un changement concernant un étudiant null");
|
||||
this.raison=raison;
|
||||
this.id=id;
|
||||
this.a=a;
|
||||
this.b=b;
|
||||
this.e=e;
|
||||
if(this.id>this.nextId){
|
||||
this.nextId=this.id;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* permet de récupérer l'identifiant du changement (référence interne sans intérêt irl).
|
||||
* @return l'identifiant.
|
||||
*/
|
||||
public int getId(){
|
||||
return this.id;
|
||||
}
|
||||
|
||||
/**
|
||||
* permet de récupérer le groupe de depart
|
||||
* @return ce groupe.
|
||||
*/
|
||||
public Groupe getA(){
|
||||
return this.a;
|
||||
}
|
||||
|
||||
/** e
|
||||
* @return ce groupe.
|
||||
*/
|
||||
public Groupe getB(){
|
||||
return this.b;
|
||||
}
|
||||
|
||||
/**
|
||||
* permet de récupérer l'étudiant demandant le changement
|
||||
* @return cet étudiant
|
||||
*/
|
||||
public Etudiant getEtu(){
|
||||
return this.e;
|
||||
}
|
||||
/**
|
||||
* permet de récupérer la raison du changement
|
||||
* @return la raison du changement
|
||||
*/
|
||||
@Override
|
||||
public String getRaison() {
|
||||
return this.raison;
|
||||
}
|
||||
|
||||
}
|
358
src/fr/iutfbleau/projetIHM2022FI2/MP/ETU/Model/ModelEtu.java
Normal file
358
src/fr/iutfbleau/projetIHM2022FI2/MP/ETU/Model/ModelEtu.java
Normal file
@@ -0,0 +1,358 @@
|
||||
package fr.iutfbleau.projetIHM2022FI2.MP.ETU.Model;
|
||||
import javax.swing.*;
|
||||
import java.awt.*;
|
||||
import java.util.Set;
|
||||
import java.util.HashSet;
|
||||
import fr.iutfbleau.projetIHM2022FI2.API.AbstractChangementFactory;
|
||||
import fr.iutfbleau.projetIHM2022FI2.API.AbstractGroupeFactory;
|
||||
import fr.iutfbleau.projetIHM2022FI2.API.Changement;
|
||||
import fr.iutfbleau.projetIHM2022FI2.API.Etudiant;
|
||||
import fr.iutfbleau.projetIHM2022FI2.API.Groupe;
|
||||
import fr.iutfbleau.projetIHM2022FI2.API.TypeGroupe;
|
||||
import fr.iutfbleau.projetIHM2022FI2.API.Model;
|
||||
import fr.iutfbleau.projetIHM2022FI2.Permanent.Controller.ObservateurFenetre;
|
||||
import fr.iutfbleau.projetIHM2022FI2.Permanent.View.Chargement;
|
||||
import fr.iutfbleau.projetIHM2022FI2.MP.AbstractChangementFactoryNP;
|
||||
import fr.iutfbleau.projetIHM2022FI2.MP.AbstractGroupeFactoryNP;
|
||||
import fr.iutfbleau.projetIHM2022FI2.MP.ETU.View.FenetreEtudiant;
|
||||
import fr.iutfbleau.projetIHM2022FI2.MP.ETU.View.FenetreGroupe;
|
||||
|
||||
/**
|
||||
* Le Model de L'IHM
|
||||
*/
|
||||
public class ModelEtu implements Model{
|
||||
// le panel qui contient la fenetre de groupe
|
||||
private JPanel panGroupe;
|
||||
// la fenetre de groupe
|
||||
private FenetreGroupe fenGr;
|
||||
//la fenetre d'etudiant
|
||||
private FenetreEtudiant fenEtu;
|
||||
// le groupe courant
|
||||
private AbstractGroupeFactory promo;
|
||||
// le changement courant
|
||||
private AbstractChangementFactory changement;
|
||||
// la fenetre principale
|
||||
private JFrame fenetre;
|
||||
// l'etudiant courant
|
||||
private Etudiant Selected;
|
||||
/**
|
||||
* Constructeur du Model
|
||||
*/
|
||||
public ModelEtu(){
|
||||
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());
|
||||
Chargement ch=new Chargement(this.fenetre);
|
||||
this.promo=new AbstractGroupeFactoryNP(this.fenetre);
|
||||
if(this.promo.getPromotion()==null){
|
||||
this.promo=null;
|
||||
}
|
||||
ch.dispose();
|
||||
this.fenetre.setVisible(true);
|
||||
this.initEtu(null);
|
||||
if(this.promo==null){
|
||||
this.fenGr=new FenetreGroupe(null, this, null);
|
||||
this.fenEtu=new FenetreEtudiant(null, this.Selected, this);
|
||||
this.changement=null;
|
||||
}else{
|
||||
this.changement=new AbstractChangementFactoryNP(promo, this.fenetre);
|
||||
this.fenGr=new FenetreGroupe(this.promo.getPromotion(), this,this.promo.getGroupesOfEtudiant(this.Selected));
|
||||
this.fenEtu=new FenetreEtudiant(this.promo.getPromotion(), this.Selected, this);
|
||||
}
|
||||
this.panGroupe=new JPanel(new GridLayout(1,1));
|
||||
if(this.promo!=null){
|
||||
this.showGroupe(this.promo.getPromotion());
|
||||
}else{
|
||||
this.showGroupe(null);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
/**
|
||||
* Fonction pour refresh/changer de groupe d'affichage
|
||||
* @param g le groupe a afficher
|
||||
*/
|
||||
public void showGroupe(Groupe g){
|
||||
if(g!=null)
|
||||
g=this.promo .refreshALL(g);
|
||||
this.panGroupe.removeAll();
|
||||
this.fenGr=new FenetreGroupe(g, this, this.promo.getGroupesOfEtudiant(this.Selected));
|
||||
this.fenEtu=new FenetreEtudiant(g, this.Selected, this);
|
||||
this.fenetre.getContentPane().removeAll();
|
||||
this.panGroupe.add(this.fenGr.getPan());
|
||||
this.panGroupe.revalidate();
|
||||
this.fenetre.add(this.panGroupe);
|
||||
JScrollPane scroll=new JScrollPane(this.fenEtu.getPan());
|
||||
scroll.getVerticalScrollBar().setUnitIncrement(15);
|
||||
this.fenetre.add(scroll);
|
||||
this.fenetre.revalidate();
|
||||
}
|
||||
@Override
|
||||
/**
|
||||
* getteur de la fenetre
|
||||
* @return JFrame la fenetre
|
||||
*/
|
||||
public JFrame getFenetre() {
|
||||
return fenetre;
|
||||
}
|
||||
/**
|
||||
* Permet d'obtenir les étudiants du groupe courant.
|
||||
* @return les étudiants du groupe courant
|
||||
*/
|
||||
@Override
|
||||
public Set<Etudiant> getEtudiant(){
|
||||
return this.promo.getPromotion().getEtudiants();
|
||||
}
|
||||
|
||||
private void initEtu(String err){
|
||||
Set<Etudiant> liste=this.promo.getPromotion().getEtudiants();
|
||||
JPanel panel = new JPanel();
|
||||
JPanel myPanel = new JPanel();
|
||||
JTextField idd = new JTextField(15);
|
||||
myPanel.add(new JLabel("Id:"));
|
||||
myPanel.add(idd);
|
||||
if(err!=null){
|
||||
myPanel.add(new JLabel(err, SwingConstants.RIGHT));
|
||||
}
|
||||
panel.add(myPanel);
|
||||
|
||||
if(JOptionPane.showConfirmDialog(this.fenetre, panel, "login", JOptionPane.OK_CANCEL_OPTION) != JOptionPane.OK_OPTION){
|
||||
this.fenetre.dispose();
|
||||
System.exit(0);
|
||||
}else{
|
||||
try{
|
||||
int id=Integer.parseInt(idd.getText());
|
||||
for(Etudiant et:liste){
|
||||
if(et.getId()==id){
|
||||
this.Selected=et;
|
||||
return;
|
||||
}
|
||||
}
|
||||
}catch(NumberFormatException e){
|
||||
this.initEtu("Id incomprhéhensible");
|
||||
}
|
||||
}
|
||||
this.initEtu("Etudiant introuvable");
|
||||
}
|
||||
|
||||
// **************************
|
||||
// FONCTION POUR LES CHANGEMENTS
|
||||
// ******************************
|
||||
/**
|
||||
* Permet de changer de groupe.
|
||||
* @param e l'étudiant qui change de groupe
|
||||
* @param g le groupe dans lequel l'étudiant va
|
||||
*/
|
||||
@Override
|
||||
public void changeGroupe(Etudiant e, Groupe b){
|
||||
if(b==null)
|
||||
return;
|
||||
b=this.promo.refreshALL(b);
|
||||
if(b.getEtudiants()!=null && b.getMax()>b.getEtudiants().size()+1){
|
||||
if(b.getEtudiants().size()>this.fenGr.getG().getEtudiants().size()){
|
||||
JPanel myPanel= new JPanel(new GridLayout(2,1));
|
||||
JTextField xField = new JTextField(100);
|
||||
xField.setMinimumSize(new Dimension(100, 100));
|
||||
xField.setPreferredSize(new Dimension(100,100));
|
||||
myPanel.add(new JLabel("Ce Groupe est plus grand que le votre raison du changement:"));
|
||||
myPanel.add(xField);
|
||||
if(JOptionPane.showConfirmDialog(this.fenetre, myPanel, "Changer dans quel Groupe ?", JOptionPane.OK_CANCEL_OPTION)==JOptionPane.OK_OPTION){
|
||||
//IL faut que l'etudiant detaile un minimun la raison
|
||||
if(xField.getText().length()>5){
|
||||
this.changement.createChangement(this.fenGr.getG(), e, b, xField.getText());
|
||||
}else{
|
||||
JOptionPane.showMessageDialog(this.fenetre, "veuillez detailler votre raison", "erreur", JOptionPane.ERROR_MESSAGE);
|
||||
}
|
||||
}
|
||||
}else{
|
||||
this.changement.createChangement(this.fenGr.getG(), e, b);
|
||||
}
|
||||
}else{
|
||||
JOptionPane.showMessageDialog(this.fenetre, "impossible trop d'etudiant dans l'autre Groupe", "erreur", JOptionPane.ERROR_MESSAGE);
|
||||
}
|
||||
this.showGroupe(this.fenGr.getG());
|
||||
}
|
||||
/**
|
||||
* pemet d'obtenir les sous groupes du groupe courant.
|
||||
* @return les sous groupes du groupe courant
|
||||
*/
|
||||
@Override
|
||||
public Set<Groupe> getGroupePartition(){
|
||||
this.promo.refreshALL(this.fenGr.getG().getPointPoint());
|
||||
Set<Groupe> retour=new HashSet<>();
|
||||
if(this.fenGr.getG().getPointPoint().getType()!=TypeGroupe.PARTITION)
|
||||
throw new IllegalStateException("impossible de changer un étudiant d'un groupe ne provenant pas d'une partition");
|
||||
for(Groupe sous:this.fenGr.getG().getPointPoint().getSousGroupes()){
|
||||
if(sous.getId()!=this.fenGr.getG().getId()){
|
||||
retour.add(sous);
|
||||
}
|
||||
}
|
||||
return retour;
|
||||
}
|
||||
/**
|
||||
* ajoute un étudiant dans un groupe.
|
||||
* @param e l'étudiant à ajouter
|
||||
* @param g le groupe dans lequel l'étudiant va
|
||||
* @return true si l'ajout a réussi, false sinon
|
||||
*/
|
||||
@Override
|
||||
public boolean addEtudiant(Groupe g, Etudiant e) {
|
||||
// TODO Auto-generated method stub
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* supprime un groupe.
|
||||
* @param g le groupe à supprimer
|
||||
*/
|
||||
@Override
|
||||
public void delete(Groupe g) {
|
||||
// TODO Auto-generated method stub
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* rennome un groupe.
|
||||
* @param g le groupe à renommer
|
||||
* @param nom le nouveau nom du groupe
|
||||
*
|
||||
*/
|
||||
@Override
|
||||
public void rename(String name, Groupe g) {
|
||||
// TODO Auto-generated method stub
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 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
|
||||
*/
|
||||
@Override
|
||||
public void partition(Groupe g, int n, String name) {
|
||||
// TODO Auto-generated method stub
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 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
|
||||
*/
|
||||
@Override
|
||||
public void free(Groupe g, String name, int min, int max, Set<Etudiant> ajout) {
|
||||
// TODO Auto-generated method stub
|
||||
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* ajoute une nouvelle promotion
|
||||
* @param min le nombre min
|
||||
* @param max le nombre max
|
||||
* @param name le nom
|
||||
* @param ajout les etudiant a ajouter a la promo
|
||||
*/
|
||||
@Override
|
||||
public void addPromo(int min, int max, String name, Set<Etudiant> ajout) {
|
||||
// TODO Auto-generated method stub
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Fonction pour supprimer un etudiant.
|
||||
* @param e l'etudiant a supprimer
|
||||
* @return boolean true si l'etudiant a ete supprimer, false sinon
|
||||
|
||||
*/
|
||||
@Override
|
||||
public boolean deleteEtu(Etudiant e) {
|
||||
// TODO Auto-generated method stub
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Fonction pour afficher une fenetre listnatn les changements
|
||||
*
|
||||
*/
|
||||
@Override
|
||||
public void listChange() {
|
||||
// TODO Auto-generated method stub
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Fonction pour effectuer un changement
|
||||
* @param Changement le changement a effecteur
|
||||
*/
|
||||
@Override
|
||||
public void change(Changement change) {
|
||||
// TODO Auto-generated method stub
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Fonction supprimant un changement
|
||||
*
|
||||
* @param to_delete la changement a delete
|
||||
*/
|
||||
@Override
|
||||
public void deleteChange(Changement to_delete) {
|
||||
// TODO Auto-generated method stub
|
||||
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Fonction affichant les raison d'un changement
|
||||
*
|
||||
* @param change le changement
|
||||
*/
|
||||
@Override
|
||||
public void showRaisonChange(Changement change) {
|
||||
// TODO Auto-generated method stub
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Fonction affichant une fentre pour trouver un etudiant et tous ses groupes asociée
|
||||
*/
|
||||
@Override
|
||||
public void findEtu() {
|
||||
// TODO Auto-generated method stub
|
||||
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Fonction pour recuperer les etudiant avec ce nom
|
||||
* @param name le nom de(s) etudiants
|
||||
* @return la liste
|
||||
*/
|
||||
@Override
|
||||
public Set<Etudiant> getEtu(String name) {
|
||||
// TODO Auto-generated method stub
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
*affiche les groupe d'un etudiant
|
||||
* @param e l'etudiant
|
||||
*/
|
||||
@Override
|
||||
public void showGroupOfEtudiant(Etudiant e) {
|
||||
// TODO Auto-generated method stub
|
||||
|
||||
}
|
||||
|
||||
}
|
@@ -0,0 +1,91 @@
|
||||
package fr.iutfbleau.projetIHM2022FI2.MP.ETU.View;
|
||||
|
||||
|
||||
import javax.swing.JLabel;
|
||||
import javax.swing.JPanel;
|
||||
|
||||
import java.awt.*;
|
||||
import java.util.LinkedHashSet;
|
||||
import java.util.Set;
|
||||
|
||||
import fr.iutfbleau.projetIHM2022FI2.API.Etudiant;
|
||||
import fr.iutfbleau.projetIHM2022FI2.API.Groupe;
|
||||
import fr.iutfbleau.projetIHM2022FI2.API.TypeGroupe;
|
||||
import fr.iutfbleau.projetIHM2022FI2.Permanent.Controller.ActionListenerChangeEtu;
|
||||
import fr.iutfbleau.projetIHM2022FI2.API.Model;
|
||||
|
||||
/**
|
||||
* Affichage des édudiants d'un groupe
|
||||
*
|
||||
*/
|
||||
public class FenetreEtudiant{
|
||||
//liste des étudiants
|
||||
private Set<Etudiant> etu;
|
||||
// panel
|
||||
private JPanel pan;
|
||||
// l'étudiant sélectionné
|
||||
private Etudiant concerner;
|
||||
// model
|
||||
private Model model;
|
||||
// tru si le groupe est une partition
|
||||
private boolean partition;
|
||||
|
||||
/**
|
||||
* Constructeur de l'affichage des étudiants
|
||||
* @param g le groupe
|
||||
* @param m le model
|
||||
* @param e l'étudiant sélectionné
|
||||
*/
|
||||
public FenetreEtudiant(Groupe g, Etudiant e, Model m){
|
||||
this.pan=new JPanel();
|
||||
this.model=m;
|
||||
if(g!=null){
|
||||
this.etu=g.getEtudiants();
|
||||
}else{
|
||||
this.etu=new LinkedHashSet<>();
|
||||
}
|
||||
this.concerner=e;
|
||||
if(g.getPointPoint().getType()==TypeGroupe.PARTITION)
|
||||
this.partition=true;
|
||||
else{
|
||||
this.partition=false;
|
||||
}
|
||||
this.draw();
|
||||
}
|
||||
/**
|
||||
* Gère l'affichage des étudiants
|
||||
*/
|
||||
private void draw(){
|
||||
if(this.etu.size()!=0){
|
||||
this.pan.setLayout(new GridLayout(this.etu.size(), 1, 30, 0));
|
||||
PanelEtudiant p=new PanelEtudiant(this.concerner, this.partition);
|
||||
p.addActionChangeListener(new ActionListenerChangeEtu(this.model, this.concerner));
|
||||
this.pan.add(p);
|
||||
for(Etudiant e: this.etu){
|
||||
if(this.concerner.getId() != e.getId()){
|
||||
this.pan.add(p);
|
||||
p=new PanelEtudiant(e,false);
|
||||
}
|
||||
}
|
||||
}else{
|
||||
this.pan.setLayout(new FlowLayout());
|
||||
this.pan.add(new JLabel("Il n'y a pas d'étudiant"));
|
||||
}
|
||||
}
|
||||
/**
|
||||
* rafraichit l'affichage.
|
||||
*/
|
||||
public void refresh(){
|
||||
this.pan.removeAll();
|
||||
this.draw();
|
||||
this.pan.revalidate();
|
||||
}
|
||||
|
||||
/**
|
||||
* premet d'obtenir le panel de l'affichage
|
||||
* @return le panel de l'affichage
|
||||
*/
|
||||
public JPanel getPan() {
|
||||
return pan;
|
||||
}
|
||||
}
|
132
src/fr/iutfbleau/projetIHM2022FI2/MP/ETU/View/FenetreGroupe.java
Normal file
132
src/fr/iutfbleau/projetIHM2022FI2/MP/ETU/View/FenetreGroupe.java
Normal file
@@ -0,0 +1,132 @@
|
||||
package fr.iutfbleau.projetIHM2022FI2.MP.ETU.View;
|
||||
|
||||
import javax.swing.JButton;
|
||||
import javax.swing.JLabel;
|
||||
import javax.swing.JPanel;
|
||||
import javax.swing.JScrollPane;
|
||||
import java.awt.Font;
|
||||
import java.awt.GridLayout;
|
||||
import fr.iutfbleau.projetIHM2022FI2.API.Groupe;
|
||||
import fr.iutfbleau.projetIHM2022FI2.API.TypeGroupe;
|
||||
import fr.iutfbleau.projetIHM2022FI2.API.Model;
|
||||
import fr.iutfbleau.projetIHM2022FI2.Permanent.Controller.ObservateurChangeGroupe;
|
||||
|
||||
import java.util.Set;
|
||||
import java.awt.Color;
|
||||
|
||||
/**
|
||||
* Affichage d'un groupe
|
||||
*
|
||||
*/
|
||||
public class FenetreGroupe{
|
||||
// le groupe affiché
|
||||
private Groupe g;
|
||||
// le panel d'affichage
|
||||
private JPanel pan;
|
||||
// le modèle
|
||||
private Model m;
|
||||
// liste des sous groupes
|
||||
private Set<Groupe> appartient;
|
||||
|
||||
/**
|
||||
* Constructeur de l'affichage d'un groupe
|
||||
* @param g le groupe à afficher
|
||||
* @param m le model
|
||||
* @param appartient la liste des sous groupes
|
||||
*
|
||||
*/
|
||||
public FenetreGroupe(Groupe g, Model m, Set<Groupe> appartient){
|
||||
super();
|
||||
this.g=g;
|
||||
this.appartient=appartient;
|
||||
this.m=m;
|
||||
this.pan=new JPanel();
|
||||
this.draw();
|
||||
}
|
||||
/**
|
||||
* permet de récupérer le groupe affiché
|
||||
* @return le groupe affiché
|
||||
*/
|
||||
public Groupe getG() {
|
||||
return this.g;
|
||||
}
|
||||
/**
|
||||
* rafraichit l'affichage du groupe
|
||||
*/
|
||||
public void refresh(){
|
||||
this.pan.removeAll();
|
||||
this.draw();
|
||||
this.pan.revalidate();
|
||||
}
|
||||
/**
|
||||
* gère l'affichage du groupe
|
||||
*/
|
||||
private void draw(){
|
||||
if(g!=null){
|
||||
int taille=1;
|
||||
if(g.getType()==TypeGroupe.PARTITION || g.getType()==TypeGroupe.ROOT)
|
||||
taille--;
|
||||
if(g.getSousGroupes().size()>0)
|
||||
this.pan.setLayout(new GridLayout(7, 1));
|
||||
else{this.pan.setLayout(new GridLayout(6, 1));}
|
||||
JPanel tache=new JPanel(new GridLayout(1,taille));
|
||||
|
||||
if(g.getType()!=TypeGroupe.ROOT){
|
||||
JButton bout=new JButton(g.getPointPoint().getName());
|
||||
bout.addActionListener(new ObservateurChangeGroupe(m, g.getPointPoint()));
|
||||
tache.add(bout);
|
||||
}
|
||||
this.pan.add(tache);
|
||||
JLabel titre=new JLabel("Groupe : "+g.getName(), JLabel.CENTER);
|
||||
titre.setFont(new Font(Font.SERIF, Font.BOLD, titre.getFont().getSize()+10));
|
||||
this.pan.add(titre);
|
||||
this.pan.add(new JLabel("min= "+String.valueOf(g.getMin())+"\t || \t max= "+String.valueOf(g.getMax()),JLabel.CENTER));
|
||||
JButton refresh= new JButton("Resfresh");
|
||||
refresh.addActionListener(new ObservateurChangeGroupe(m, g));
|
||||
this.pan.add(refresh);
|
||||
this.pan.add(new JLabel("Type: "+g.getType().name()+"\t || \t id="+String.valueOf(g.getId()), JLabel.CENTER));
|
||||
this.pan.add(new JLabel("Sous groupe:",JLabel.CENTER));
|
||||
if(g.getSousGroupes().size()>0){
|
||||
JPanel sous=new JPanel(new GridLayout(g.getSousGroupes().size(), 1));
|
||||
for(Groupe gr: g.getSousGroupes()){
|
||||
JButton b=new JButton(gr.getName());
|
||||
boolean contenu=false;
|
||||
for(Groupe t: this.appartient){
|
||||
if(t.getId()==gr.getId()){
|
||||
contenu=true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if(contenu){
|
||||
b.addActionListener(new ObservateurChangeGroupe(m, gr));
|
||||
}else{
|
||||
b.setBackground(Color.RED);
|
||||
}
|
||||
sous.add(b);
|
||||
}
|
||||
this.pan.add(new JScrollPane(sous));
|
||||
}
|
||||
}
|
||||
}
|
||||
/**
|
||||
* permet de modifier le groupe affiché
|
||||
* @param g le nouveau groupe à afficher
|
||||
*/
|
||||
public void setG(Groupe g) {
|
||||
this.g = g;
|
||||
}
|
||||
/**
|
||||
* permet de modifier la liste des sous groupes
|
||||
* @param appartient la nouvelle liste des sous groupes
|
||||
*/
|
||||
public void setAppartient(Set<Groupe> appartient) {
|
||||
this.appartient = appartient;
|
||||
}
|
||||
/**
|
||||
* Permet de récupérer le panel d'affichage.
|
||||
* @return le panel d'affichage
|
||||
*/
|
||||
public JPanel getPan() {
|
||||
return pan;
|
||||
}
|
||||
}
|
@@ -0,0 +1,41 @@
|
||||
package fr.iutfbleau.projetIHM2022FI2.MP.ETU.View;
|
||||
|
||||
import javax.swing.JLabel;
|
||||
import javax.swing.JPanel;
|
||||
|
||||
import fr.iutfbleau.projetIHM2022FI2.API.Etudiant;
|
||||
|
||||
import javax.swing.JButton;
|
||||
import java.awt.*;
|
||||
import java.awt.event.ActionListener;
|
||||
|
||||
|
||||
public class PanelEtudiant extends JPanel{
|
||||
|
||||
// bouton déplacement
|
||||
private JButton deplacer;
|
||||
/**
|
||||
* Constructeur du panel d'affichage d'un étudiant
|
||||
* @param e l'étudiant à afficher
|
||||
* @param concerner si l'étudiant à afficher est l'étudiant logué
|
||||
*/
|
||||
public PanelEtudiant(Etudiant e, boolean concerner){
|
||||
super(new GridLayout(1,2,20,10));
|
||||
JLabel label=new JLabel(" "+e.getNom()+" "+e.getPrenom()+" "+e.getId(), JLabel.LEFT);
|
||||
label.setFont(new Font(Font.SANS_SERIF, Font.PLAIN, 20));
|
||||
|
||||
this.add(label);
|
||||
this.deplacer=new JButton("changer de groupe");
|
||||
if(concerner==true)
|
||||
this.add(this.deplacer);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Ajoute un listener au bouton de changement de groupe
|
||||
* @param a le listener
|
||||
*/
|
||||
public void addActionChangeListener(ActionListener a){
|
||||
this.deplacer.addActionListener(a);
|
||||
}
|
||||
}
|
74
src/fr/iutfbleau/projetIHM2022FI2/MP/EtudiantNP.java
Normal file
74
src/fr/iutfbleau/projetIHM2022FI2/MP/EtudiantNP.java
Normal file
@@ -0,0 +1,74 @@
|
||||
package fr.iutfbleau.projetIHM2022FI2.MP;
|
||||
import fr.iutfbleau.projetIHM2022FI2.API.*;
|
||||
import java.util.*;
|
||||
/**
|
||||
* Un étudiant
|
||||
*/
|
||||
|
||||
public class EtudiantNP implements Etudiant{
|
||||
|
||||
// auto-incrément des étudiants
|
||||
private static int nextId=0;
|
||||
// id de l'étudiant
|
||||
private int id;
|
||||
// nom et prénom de l'étudiant
|
||||
private String nom, prenom;
|
||||
|
||||
/**
|
||||
* Constructeur d'un étudiant.
|
||||
* @param nom le nom de l'étudiant
|
||||
* @param prenom le prénom de l'étudiant
|
||||
*
|
||||
*/
|
||||
public EtudiantNP(String nom, String prenom){
|
||||
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");
|
||||
// auto incrément de l'id
|
||||
this.id=++this.nextId;
|
||||
this.nom=nom;
|
||||
this.prenom=prenom;
|
||||
}
|
||||
|
||||
/**
|
||||
* Constructeur d'un étudiant.
|
||||
* @param nom le nom de l'étudiant
|
||||
* @param prenom le prénom de l'étudiant
|
||||
* @param id l'id de l'étudiant
|
||||
*/
|
||||
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(prenom,"On ne peut pas créer un étudiant avec un nom null");
|
||||
if(id>=this.nextId){
|
||||
this.nextId=id;
|
||||
}
|
||||
this.id=id;
|
||||
this.nom=nom;
|
||||
this.prenom=prenom;
|
||||
}
|
||||
|
||||
/**
|
||||
* permet de récupérer l'identifiant de l'étudiant.
|
||||
* @return l'identifiant.
|
||||
*/
|
||||
public int getId(){
|
||||
return this.id;
|
||||
}
|
||||
|
||||
/**
|
||||
* permet de récupérer
|
||||
* @return le nom de l'étudiant.
|
||||
*/
|
||||
public String getNom(){
|
||||
return this.nom;
|
||||
}
|
||||
|
||||
/**
|
||||
* permet de récupérer
|
||||
* @return le prénom de l'étudiant
|
||||
*/
|
||||
public String getPrenom(){
|
||||
return this.prenom;
|
||||
}
|
||||
|
||||
|
||||
}
|
254
src/fr/iutfbleau/projetIHM2022FI2/MP/GroupeNP.java
Normal file
254
src/fr/iutfbleau/projetIHM2022FI2/MP/GroupeNP.java
Normal file
@@ -0,0 +1,254 @@
|
||||
package fr.iutfbleau.projetIHM2022FI2.MP;
|
||||
import fr.iutfbleau.projetIHM2022FI2.API.*;
|
||||
import java.util.*;
|
||||
/**
|
||||
* Un groupe
|
||||
*/
|
||||
|
||||
public class GroupeNP implements Groupe {
|
||||
|
||||
//auto-incrément des groupes. (NB. inutile, mais ça fair un exemple d'attribut statique).
|
||||
private static int nextId=0;
|
||||
// attributs naturels induits par getter de l'interface Groupe
|
||||
private int id;
|
||||
// nom du groupe
|
||||
private String name;
|
||||
// bornes limitatives du groupe
|
||||
private int min,max;
|
||||
// type de groupe
|
||||
private TypeGroupe type;
|
||||
// groupe père
|
||||
private Groupe pointPoint;
|
||||
// On utilise une interface set pour les sous-groupes et pour les membres (ce sont bien des ensembles en pratique).
|
||||
private Set<Groupe> sousGroupes;
|
||||
// Liste des étudiants du groupe
|
||||
private Set<Etudiant> membresDuGroupe;
|
||||
|
||||
/**
|
||||
* Nouveau groupe vide de type ROOT sans étudiants, sans sous-Groupe
|
||||
*
|
||||
* @param name le nom du groupe
|
||||
* @param min le nombre minimum d'étudiants
|
||||
* @param max le nombre maximum d'étudiants
|
||||
*/
|
||||
public GroupeNP(String name, int min, int max){
|
||||
Objects.requireNonNull(name,"On ne peut pas créer un groupe dont le nom est null");
|
||||
this.id=++this.nextId;
|
||||
this.name=name;
|
||||
this.min=min;
|
||||
this.max=max;
|
||||
this.type=TypeGroupe.ROOT;
|
||||
this.pointPoint=this;
|
||||
this.sousGroupes=new LinkedHashSet<Groupe>();
|
||||
this.membresDuGroupe=new LinkedHashSet<Etudiant>();
|
||||
}
|
||||
/**
|
||||
* Nouveau groupe vide de type FREE sans étudiants, sans sous-Groupe
|
||||
*
|
||||
* @param name le nom du groupe
|
||||
* @param min le nombre minimum d'étudiants
|
||||
* @param max le nombre maximum d'étudiants
|
||||
* @param pere le groupe père
|
||||
* @param id l'id du groupe
|
||||
* @param type le type du groupe
|
||||
*
|
||||
*
|
||||
*/
|
||||
public GroupeNP(int id, String name, int min, int max, TypeGroupe type, Groupe pere){
|
||||
Objects.requireNonNull(name,"On ne peut pas créer un groupe dont le nom est null");
|
||||
this.id=id;
|
||||
if(id>this.nextId){
|
||||
this.nextId=id;
|
||||
}
|
||||
this.name=name;
|
||||
this.min=min;
|
||||
this.max=max;
|
||||
this.type=type;
|
||||
if(pere==null){
|
||||
this.pointPoint=this;
|
||||
}else{
|
||||
this.pointPoint=pere;
|
||||
}
|
||||
this.sousGroupes=new LinkedHashSet<Groupe>();
|
||||
this.membresDuGroupe=new LinkedHashSet<Etudiant>();
|
||||
}
|
||||
|
||||
/**
|
||||
* Nouveau groupe vide de type FREE sans étudiants, sans sous-Groupe
|
||||
*
|
||||
* @param name le nom du groupe
|
||||
* @param min le nombre minimum d'étudiants
|
||||
* @param max le nombre maximum d'étudiants
|
||||
* @param pere le groupe père
|
||||
*
|
||||
*/
|
||||
public GroupeNP(Groupe pere, String name, int min, int max){
|
||||
Objects.requireNonNull(pere,"On ne peut pas créer un groupe dont le père est null");
|
||||
Objects.requireNonNull(name,"On ne peut pas créer un groupe dont le nom est null");
|
||||
this.id=++this.nextId;
|
||||
this.name=name;
|
||||
this.min=min;
|
||||
this.max=max;
|
||||
this.type=TypeGroupe.FREE;
|
||||
this.pointPoint=pere;
|
||||
this.sousGroupes=new LinkedHashSet<Groupe>();
|
||||
this.membresDuGroupe=new LinkedHashSet<Etudiant>();
|
||||
}
|
||||
|
||||
/**
|
||||
* Nouveau groupe de type PARTITION dupliquant le groupe passé en paramètre (pour servir de racine à une partition de ce groupe de type FREE passé en paramètre).
|
||||
*
|
||||
* @param pere le groupe père
|
||||
*/
|
||||
public GroupeNP(Groupe pere){
|
||||
Objects.requireNonNull(pere,"On ne peut pas créer un groupe dont le père est null");
|
||||
this.id=++this.nextId;
|
||||
this.name=pere.getName()+"_PARTITION_"+ this.id;
|
||||
this.min=pere.getMin();
|
||||
this.max=pere.getMax();
|
||||
this.type=TypeGroupe.PARTITION;
|
||||
this.pointPoint=pere;
|
||||
this.sousGroupes= new LinkedHashSet<Groupe>();
|
||||
this.membresDuGroupe= pere.getEtudiants();
|
||||
}
|
||||
|
||||
/**
|
||||
* Ajoute un étudiant. Se comporte comme add de l'interface Set.
|
||||
*
|
||||
* @param e l'étudiant à ajouter
|
||||
*
|
||||
* @return true iff e est ajouté
|
||||
*/
|
||||
public boolean addEtudiant(Etudiant e){
|
||||
Objects.requireNonNull(e,"On ne peut pas ajouter un Étudiant qui est null");
|
||||
return this.membresDuGroupe.add(e);
|
||||
}
|
||||
|
||||
/**
|
||||
* Enlève un étudiant. Se comporte comme remove de l'interface Set.
|
||||
*
|
||||
* @param e l'étudiant à enlever
|
||||
*
|
||||
* @return true iff e est enlevé
|
||||
*/
|
||||
public boolean removeEtudiant(Etudiant e){
|
||||
Objects.requireNonNull(e,"On ne peut pas enlever un Étudiant qui est null");
|
||||
return this.membresDuGroupe.remove(e);
|
||||
}
|
||||
|
||||
/**
|
||||
* Ajoute un sous-groupe. Se comporte comme add de l'interface Set.
|
||||
* vérifie que le groupe passé en argument a bien renseigné this comme son père.
|
||||
*
|
||||
* @param g le groupe à ajouter
|
||||
*
|
||||
* @return true iff g est ajouté
|
||||
*/
|
||||
public boolean addSousGroupe(Groupe g){
|
||||
Objects.requireNonNull(g,"On ne peut pas ajouter un sous-groupe qui est null");
|
||||
if (this.equals(g.getPointPoint()))
|
||||
return this.sousGroupes.add(g);
|
||||
else throw new IllegalArgumentException("on ne peut pas ajouter un sous-groupe ont le père n'est pas this");
|
||||
}
|
||||
|
||||
/**
|
||||
* Enlève un groupe. Se comporte comme remove de l'interface Set.
|
||||
*
|
||||
* @param g le sous-groupe à enlever
|
||||
*
|
||||
* @return true iff e est enlevé
|
||||
*/
|
||||
public boolean removeSousGroupe(Groupe g){
|
||||
Objects.requireNonNull(g,"On ne peut pas enlever un Étudiant qui est null");
|
||||
return this.sousGroupes.remove(g);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* permet de récupérer l'identifiant d'un groupe (référence interne sans intérêt irl).
|
||||
* @return l'identifiant.
|
||||
*/
|
||||
public int getId(){
|
||||
return this.id;
|
||||
}
|
||||
|
||||
/**
|
||||
* permet de récupérer le nom d'un groupe (utile irl).
|
||||
* @return le nom.
|
||||
*/
|
||||
public String getName(){
|
||||
return this.name;
|
||||
}
|
||||
|
||||
/**
|
||||
* permet de récupérer le nombre minimum d'étudiants souhaités dans le groupe.
|
||||
* @return le minimum souhaité
|
||||
*/
|
||||
public int getMin(){
|
||||
return this.min;
|
||||
}
|
||||
|
||||
/**
|
||||
* permet de récupérer le nombre maximum d'étudiants souhaités dans un groupe.
|
||||
* @return le maximum souhaité
|
||||
*/
|
||||
public int getMax(){
|
||||
return this.max;
|
||||
}
|
||||
|
||||
/**
|
||||
* permet de récupérer le nombre d'étudiants dans ce groupe.
|
||||
* @return le nombre de places prises (pas forcément limité entre Min et Max, mais c'est le but)
|
||||
*/
|
||||
public int getSize(){
|
||||
return this.membresDuGroupe.size();
|
||||
}
|
||||
|
||||
/**
|
||||
* permet de récupérer la nature du groupe
|
||||
* @return le type du groupe
|
||||
*/
|
||||
public TypeGroupe getType(){
|
||||
return type;
|
||||
}
|
||||
|
||||
/**
|
||||
* permet de récupérer le groupe père
|
||||
* un groupe racine devrait retourner lui-même
|
||||
*
|
||||
* @return le père
|
||||
*/
|
||||
public Groupe getPointPoint(){
|
||||
return this.pointPoint;
|
||||
}
|
||||
|
||||
/**
|
||||
* Potentiellement "vide"
|
||||
* Attention nous renvoyons l'ensemble sans le copier
|
||||
*
|
||||
* @return l'ensemble des sous-groupes.
|
||||
*/
|
||||
public Set<Groupe> getSousGroupes(){
|
||||
return this.sousGroupes;
|
||||
}
|
||||
|
||||
/**
|
||||
* Potentiellement "vide"
|
||||
* Attention nous renvoyons l'ensemble sans le copier
|
||||
*
|
||||
* @return l'ensemble des étudiants.
|
||||
*/
|
||||
public Set<Etudiant> getEtudiants(){
|
||||
return this.membresDuGroupe;
|
||||
}
|
||||
|
||||
/**
|
||||
* Change le nom du groupe
|
||||
* @param s le nouveau nom
|
||||
*/
|
||||
@Override
|
||||
public void setName(String s){
|
||||
this.name=s;
|
||||
}
|
||||
|
||||
}
|
325
src/fr/iutfbleau/projetIHM2022FI2/MP/PROF/Model/ModelProf.java
Normal file
325
src/fr/iutfbleau/projetIHM2022FI2/MP/PROF/Model/ModelProf.java
Normal file
@@ -0,0 +1,325 @@
|
||||
package fr.iutfbleau.projetIHM2022FI2.MP.PROF.Model;
|
||||
import javax.swing.*;
|
||||
import java.awt.*;
|
||||
import java.util.Set;
|
||||
import java.util.HashSet;
|
||||
import fr.iutfbleau.projetIHM2022FI2.API.AbstractChangementFactory;
|
||||
import fr.iutfbleau.projetIHM2022FI2.API.AbstractGroupeFactory;
|
||||
import fr.iutfbleau.projetIHM2022FI2.API.Changement;
|
||||
import fr.iutfbleau.projetIHM2022FI2.API.Etudiant;
|
||||
import fr.iutfbleau.projetIHM2022FI2.API.Groupe;
|
||||
import fr.iutfbleau.projetIHM2022FI2.API.TypeGroupe;
|
||||
import fr.iutfbleau.projetIHM2022FI2.MP.AbstractChangementFactoryNP;
|
||||
import fr.iutfbleau.projetIHM2022FI2.MP.AbstractGroupeFactoryNP;
|
||||
import fr.iutfbleau.projetIHM2022FI2.MP.PROF.View.FenetreEtudiant;
|
||||
import fr.iutfbleau.projetIHM2022FI2.MP.PROF.View.FenetreGroupe;
|
||||
import fr.iutfbleau.projetIHM2022FI2.API.Model;
|
||||
import fr.iutfbleau.projetIHM2022FI2.Permanent.Controller.ObservateurFenetre;
|
||||
import fr.iutfbleau.projetIHM2022FI2.Permanent.View.Chargement;
|
||||
|
||||
/**
|
||||
* Le Model de L'IHM
|
||||
*/
|
||||
public class ModelProf implements Model{
|
||||
|
||||
// le panel qui contient la fenetre de groupe
|
||||
private JPanel panGroupe;
|
||||
// la fenetre de groupe
|
||||
private FenetreGroupe fenGr;
|
||||
//la fenetre d'etudiant
|
||||
private FenetreEtudiant fenEtu;
|
||||
// le groupe courant
|
||||
private AbstractGroupeFactory promo;
|
||||
// le changement courant
|
||||
private AbstractChangementFactory changement;
|
||||
// la fenetre principale
|
||||
private JFrame fenetre;
|
||||
|
||||
/**
|
||||
* Constructeur du Model.
|
||||
*/
|
||||
public ModelProf(){
|
||||
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());
|
||||
Chargement ch=new Chargement(this.fenetre);
|
||||
this.promo=new AbstractGroupeFactoryNP(this.fenetre);
|
||||
if(this.promo.getPromotion()==null){
|
||||
this.promo=null;
|
||||
}
|
||||
ch.dispose();
|
||||
this.fenetre.setVisible(true);
|
||||
if(this.promo==null){
|
||||
this.fenGr=new FenetreGroupe(null, this);
|
||||
this.fenEtu=new FenetreEtudiant(null);
|
||||
this.changement=null;
|
||||
}else{
|
||||
this.changement=new AbstractChangementFactoryNP(promo, this.fenetre);
|
||||
this.fenGr=new FenetreGroupe(this.promo.getPromotion(), this);
|
||||
this.fenEtu=new FenetreEtudiant(this.promo.getPromotion());
|
||||
}
|
||||
this.panGroupe=new JPanel(new GridLayout(1,1));
|
||||
if(this.promo!=null){
|
||||
this.showGroupe(this.promo.getPromotion());
|
||||
}else{
|
||||
this.showGroupe(null);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
/**
|
||||
* Fonction pour refresh/changer de groupe d'affichage
|
||||
* @param g le groupe a afficher
|
||||
*/
|
||||
public void showGroupe(Groupe g){
|
||||
if(g!=null)
|
||||
g=this.promo .refreshALL(g);
|
||||
this.panGroupe.removeAll();
|
||||
this.fenGr=new FenetreGroupe(g, this);
|
||||
this.fenEtu=new FenetreEtudiant(g);
|
||||
this.fenetre.getContentPane().removeAll();
|
||||
this.panGroupe.add(this.fenGr.getPan());
|
||||
this.panGroupe.revalidate();
|
||||
this.fenetre.add(this.panGroupe);
|
||||
JScrollPane scroll=new JScrollPane(this.fenEtu.getPan());
|
||||
scroll.getVerticalScrollBar().setUnitIncrement(15);
|
||||
this.fenetre.add(scroll);
|
||||
this.fenetre.revalidate();
|
||||
}
|
||||
@Override
|
||||
/**
|
||||
* getteur de la fenetre
|
||||
* @return JFrame la fenetre
|
||||
*/
|
||||
public JFrame getFenetre() {
|
||||
return fenetre;
|
||||
}
|
||||
/**
|
||||
* permet d'obtenir l'ensemble des etudiants
|
||||
* @return
|
||||
*/
|
||||
@Override
|
||||
public Set<Etudiant> getEtudiant(){
|
||||
return this.promo.getPromotion().getEtudiants();
|
||||
}
|
||||
|
||||
// **************************
|
||||
// FONCTION POUR LES CHANGEMENTS
|
||||
// ******************************
|
||||
/**
|
||||
* Créer un changement depuis le groupe courant
|
||||
* @param e l'etudiant
|
||||
* @param b le groupe a changer
|
||||
*/
|
||||
@Override
|
||||
public void changeGroupe(Etudiant e, Groupe b){
|
||||
if(b==null)
|
||||
return;
|
||||
b=this.promo.refreshALL(b);
|
||||
if(b.getEtudiants()!=null && b.getMax()>b.getEtudiants().size()+1){
|
||||
if(b.getEtudiants().size()>this.fenGr.getG().getEtudiants().size()){
|
||||
JPanel myPanel= new JPanel(new GridLayout(2,1));
|
||||
JTextField xField = new JTextField(100);
|
||||
xField.setMinimumSize(new Dimension(100, 100));
|
||||
xField.setPreferredSize(new Dimension(100,100));
|
||||
myPanel.add(new JLabel("Ce Groupe est plus grand que le votre raison du changement:"));
|
||||
myPanel.add(xField);
|
||||
if(JOptionPane.showConfirmDialog(this.fenetre, myPanel, "Changer dans quel Groupe ?", JOptionPane.OK_CANCEL_OPTION)==JOptionPane.OK_OPTION){
|
||||
//IL faut que l'etudiant detaile un minimun la raison
|
||||
if(xField.getText().length()>5){
|
||||
this.changement.createChangement(this.fenGr.getG(), e, b, xField.getText());
|
||||
}else{
|
||||
JOptionPane.showMessageDialog(this.fenetre, "veuillez detailler votre raison", "erreur", JOptionPane.ERROR_MESSAGE);
|
||||
}
|
||||
}
|
||||
}else{
|
||||
this.changement.createChangement(this.fenGr.getG(), e, b);
|
||||
}
|
||||
}else{
|
||||
JOptionPane.showMessageDialog(this.fenetre, "impossible trop d'etudiant dans l'autre Groupe", "erreur", JOptionPane.ERROR_MESSAGE);
|
||||
}
|
||||
this.showGroupe(this.fenGr.getG());
|
||||
}
|
||||
/**
|
||||
* Retourn les groupe auquel on peut demander a changer depuis le groupe courant
|
||||
*
|
||||
* @return la liste des groupes
|
||||
*/
|
||||
@Override
|
||||
public Set<Groupe> getGroupePartition(){
|
||||
this.promo.refreshALL(this.fenGr.getG().getPointPoint());
|
||||
Set<Groupe> retour=new HashSet<>();
|
||||
if(this.fenGr.getG().getPointPoint().getType()!=TypeGroupe.PARTITION)
|
||||
throw new IllegalStateException("impossible de changer un étudiant d'un groupe ne provenant pas d'une partition");
|
||||
for(Groupe sous:this.fenGr.getG().getPointPoint().getSousGroupes()){
|
||||
if(sous.getId()!=this.fenGr.getG().getId()){
|
||||
retour.add(sous);
|
||||
}
|
||||
}
|
||||
return retour;
|
||||
}
|
||||
/**
|
||||
* Fonction pour ajouter un étudiant au groupe
|
||||
* @param g
|
||||
* @param e
|
||||
* @return boolean pour savoir si il a pus être ajouter
|
||||
*/
|
||||
@Override
|
||||
public boolean addEtudiant(Groupe g, Etudiant e) {
|
||||
// TODO Auto-generated method stub
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Fonction pour supprimer un groupe
|
||||
* @param g le groupe a supprimer
|
||||
*/
|
||||
@Override
|
||||
public void delete(Groupe g) {
|
||||
// TODO Auto-generated method stub
|
||||
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Fonction pour renomer un groupe
|
||||
* @param name
|
||||
* @param g
|
||||
*/
|
||||
@Override
|
||||
public void rename(String name, Groupe g) {
|
||||
// TODO Auto-generated method stub
|
||||
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 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
|
||||
*/
|
||||
@Override
|
||||
public void partition(Groupe g, int n, String name) {
|
||||
// TODO Auto-generated method stub
|
||||
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 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
|
||||
*/
|
||||
@Override
|
||||
public void free(Groupe g, String name, int min, int max, Set<Etudiant> ajout) {
|
||||
// TODO Auto-generated method stub
|
||||
|
||||
}
|
||||
/**
|
||||
* ajoute une nouvelle promotion
|
||||
* @param min le nombre min
|
||||
* @param max le nombre max
|
||||
* @param name le nom
|
||||
* @param ajout les etudiant a ajouter a la promo
|
||||
*/
|
||||
|
||||
@Override
|
||||
public void addPromo(int min, int max, String name, Set<Etudiant> ajout) {
|
||||
// TODO Auto-generated method stub
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Fonction pour supprimer un etudiant.
|
||||
* @param e l'etudiant a supprimer
|
||||
* @return boolean true si l'etudiant a ete supprimer, false sinon
|
||||
*/
|
||||
@Override
|
||||
public boolean deleteEtu(Etudiant e) {
|
||||
// TODO Auto-generated method stub
|
||||
return false;
|
||||
}
|
||||
/**
|
||||
* Fonction pour afficher une fenetre listnatn les changements
|
||||
*
|
||||
*/
|
||||
@Override
|
||||
public void listChange() {
|
||||
// TODO Auto-generated method stub
|
||||
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Fonction pour effectuer un changement
|
||||
* @param Changement le changement a effecteur
|
||||
*/
|
||||
@Override
|
||||
public void change(Changement change) {
|
||||
// TODO Auto-generated method stub
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Fonction supprimant un changement
|
||||
*
|
||||
* @param to_delete la changement a delete
|
||||
*/
|
||||
@Override
|
||||
public void deleteChange(Changement to_delete) {
|
||||
// TODO Auto-generated method stub
|
||||
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Fonction affichant les raison d'un changement
|
||||
*
|
||||
* @param change le changement
|
||||
*/
|
||||
@Override
|
||||
public void showRaisonChange(Changement change) {
|
||||
// TODO Auto-generated method stub
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Fonction affichant une fentre pour trouver un etudiant et tous ses groupes asociée
|
||||
*/
|
||||
@Override
|
||||
public void findEtu() {
|
||||
// TODO Auto-generated method stub
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Fonction pour recuperer les etudiant avec ce nom
|
||||
* @param name le nom de(s) etudiants
|
||||
* @return la liste
|
||||
*/
|
||||
@Override
|
||||
public Set<Etudiant> getEtu(String name) {
|
||||
// TODO Auto-generated method stub
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
*affiche les groupe d'un etudiant
|
||||
* @param e l'etudiant
|
||||
*/
|
||||
@Override
|
||||
public void showGroupOfEtudiant(Etudiant e) {
|
||||
// TODO Auto-generated method stub
|
||||
|
||||
}
|
||||
|
||||
}
|
@@ -0,0 +1,67 @@
|
||||
package fr.iutfbleau.projetIHM2022FI2.MP.PROF.View;
|
||||
|
||||
|
||||
import javax.swing.JLabel;
|
||||
import javax.swing.JPanel;
|
||||
|
||||
import java.awt.*;
|
||||
import java.util.LinkedHashSet;
|
||||
import java.util.Set;
|
||||
|
||||
import fr.iutfbleau.projetIHM2022FI2.API.Etudiant;
|
||||
import fr.iutfbleau.projetIHM2022FI2.API.Groupe;
|
||||
|
||||
/**
|
||||
* Affichage des édudiants d'un groupe
|
||||
*
|
||||
*/
|
||||
public class FenetreEtudiant{
|
||||
// liste des étudiants
|
||||
private Set<Etudiant> etu;
|
||||
// panel
|
||||
private JPanel pan;
|
||||
|
||||
/**
|
||||
* Constructeur de l'affichage des étudiants
|
||||
* @param g le groupe
|
||||
*/
|
||||
public FenetreEtudiant(Groupe g){
|
||||
this.pan=new JPanel();
|
||||
if(g!=null){
|
||||
this.etu=g.getEtudiants();
|
||||
}else{
|
||||
this.etu=new LinkedHashSet<>();
|
||||
}
|
||||
this.draw();
|
||||
}
|
||||
/**
|
||||
* Gère l'affichage des étudiants
|
||||
*/
|
||||
private void draw(){
|
||||
if(this.etu.size()!=0){
|
||||
this.pan.setLayout(new GridLayout(this.etu.size(), 1, 30, 0));
|
||||
for(Etudiant e: this.etu){
|
||||
PanelEtudiant p=new PanelEtudiant(e);
|
||||
this.pan.add(p);
|
||||
}
|
||||
}else{
|
||||
this.pan.setLayout(new FlowLayout());
|
||||
this.pan.add(new JLabel("Il n'y a pas d'étudiant"));
|
||||
}
|
||||
}
|
||||
/**
|
||||
* rafraichit l'affichage.
|
||||
*/
|
||||
public void refresh(){
|
||||
this.pan.removeAll();
|
||||
this.draw();
|
||||
this.pan.revalidate();
|
||||
}
|
||||
/**
|
||||
* premet d'obtenir le panel de l'affichage
|
||||
* @return le panel de l'affichage
|
||||
*/
|
||||
public JPanel getPan() {
|
||||
return pan;
|
||||
}
|
||||
}
|
@@ -0,0 +1,106 @@
|
||||
package fr.iutfbleau.projetIHM2022FI2.MP.PROF.View;
|
||||
|
||||
import javax.swing.JButton;
|
||||
import javax.swing.JLabel;
|
||||
import javax.swing.JPanel;
|
||||
import javax.swing.JScrollPane;
|
||||
import java.awt.Font;
|
||||
import java.awt.GridLayout;
|
||||
import fr.iutfbleau.projetIHM2022FI2.API.Groupe;
|
||||
import fr.iutfbleau.projetIHM2022FI2.API.TypeGroupe;
|
||||
import fr.iutfbleau.projetIHM2022FI2.API.Model;
|
||||
import fr.iutfbleau.projetIHM2022FI2.Permanent.Controller.ObservateurChangeGroupe;
|
||||
|
||||
/**
|
||||
* Affichage d'un groupe
|
||||
*
|
||||
*/
|
||||
public class FenetreGroupe{
|
||||
// le groupe affiché
|
||||
private Groupe g;
|
||||
// le panel d'affichage
|
||||
private JPanel pan;
|
||||
// le modèle
|
||||
private Model m;
|
||||
|
||||
/**
|
||||
* Constructeur de l'affichage d'un groupe
|
||||
* @param g le groupe à afficher
|
||||
* @param m le model
|
||||
*/
|
||||
public FenetreGroupe(Groupe g, Model m){
|
||||
super();
|
||||
this.g=g;
|
||||
this.m=m;
|
||||
this.pan=new JPanel();
|
||||
this.draw();
|
||||
}
|
||||
/**
|
||||
* permet de récupérer le groupe affiché
|
||||
* @return le groupe affiché
|
||||
*/
|
||||
public Groupe getG() {
|
||||
return this.g;
|
||||
}
|
||||
/**
|
||||
* rafraichit l'affichage du groupe
|
||||
*/
|
||||
public void refresh(){
|
||||
this.pan.removeAll();
|
||||
this.draw();
|
||||
this.pan.revalidate();
|
||||
}
|
||||
/**
|
||||
* gère l'affichage du groupe
|
||||
*/
|
||||
private void draw(){
|
||||
if(g!=null){
|
||||
int taille=1;
|
||||
if(g.getType()==TypeGroupe.PARTITION || g.getType()==TypeGroupe.ROOT)
|
||||
taille--;
|
||||
if(g.getSousGroupes().size()>0)
|
||||
this.pan.setLayout(new GridLayout(7, 1));
|
||||
else{this.pan.setLayout(new GridLayout(6, 1));}
|
||||
JPanel tache=new JPanel(new GridLayout(1,taille));
|
||||
|
||||
if(g.getType()!=TypeGroupe.ROOT){
|
||||
JButton bout=new JButton(g.getPointPoint().getName());
|
||||
bout.addActionListener(new ObservateurChangeGroupe(m, g.getPointPoint()));
|
||||
tache.add(bout);
|
||||
}
|
||||
this.pan.add(tache);
|
||||
JLabel titre=new JLabel("Groupe : "+g.getName(), JLabel.CENTER);
|
||||
titre.setFont(new Font(Font.SERIF, Font.BOLD, titre.getFont().getSize()+10));
|
||||
this.pan.add(titre);
|
||||
this.pan.add(new JLabel("min= "+String.valueOf(g.getMin())+"\t || \t max= "+String.valueOf(g.getMax()),JLabel.CENTER));
|
||||
JButton refresh= new JButton("Resfresh");
|
||||
refresh.addActionListener(new ObservateurChangeGroupe(m, g));
|
||||
this.pan.add(refresh);
|
||||
this.pan.add(new JLabel("Type: "+g.getType().name()+"\t || \t id="+String.valueOf(g.getId()), JLabel.CENTER));
|
||||
this.pan.add(new JLabel("Sous groupe:",JLabel.CENTER));
|
||||
if(g.getSousGroupes().size()>0){
|
||||
JPanel sous=new JPanel(new GridLayout(g.getSousGroupes().size(), 1));
|
||||
for(Groupe gr: g.getSousGroupes()){
|
||||
JButton b=new JButton(gr.getName());
|
||||
b.addActionListener(new ObservateurChangeGroupe(m, gr));
|
||||
sous.add(b);
|
||||
}
|
||||
this.pan.add(new JScrollPane(sous));
|
||||
}
|
||||
}
|
||||
}
|
||||
/**
|
||||
* permet de modifier le groupe affiché
|
||||
* @param g le nouveau groupe à afficher
|
||||
*/
|
||||
public void setG(Groupe g) {
|
||||
this.g = g;
|
||||
}
|
||||
/**
|
||||
* Permet de récupérer le panel d'affichage.
|
||||
* @return le panel d'affichage
|
||||
*/
|
||||
public JPanel getPan() {
|
||||
return pan;
|
||||
}
|
||||
}
|
@@ -0,0 +1,21 @@
|
||||
package fr.iutfbleau.projetIHM2022FI2.MP.PROF.View;
|
||||
|
||||
import javax.swing.JLabel;
|
||||
import javax.swing.JPanel;
|
||||
|
||||
import fr.iutfbleau.projetIHM2022FI2.API.Etudiant;
|
||||
import java.awt.*;
|
||||
|
||||
public class PanelEtudiant extends JPanel{
|
||||
/**
|
||||
* Constructeur du panel d'affichage d'un étudiant
|
||||
* @param e l'étudiant à afficher
|
||||
* @param change si l'étudiant peut être déplacé
|
||||
*/
|
||||
public PanelEtudiant(Etudiant e){
|
||||
super(new GridLayout(1,1,20, 20));
|
||||
JLabel label=new JLabel(" "+e.getNom()+" "+e.getPrenom()+" "+e.getId(), JLabel.LEFT);
|
||||
label.setFont(new Font(Font.SANS_SERIF, Font.PLAIN, 20));
|
||||
this.add(label);
|
||||
}
|
||||
}
|
@@ -0,0 +1,47 @@
|
||||
package fr.iutfbleau.projetIHM2022FI2.MP.ROOT.Controller;
|
||||
import java.awt.event.ActionEvent;
|
||||
import java.awt.event.ActionListener;
|
||||
|
||||
import javax.swing.JButton;
|
||||
|
||||
import fr.iutfbleau.projetIHM2022FI2.API.Changement;
|
||||
import fr.iutfbleau.projetIHM2022FI2.API.Model;
|
||||
|
||||
/**
|
||||
* le controller pour les changements
|
||||
*/
|
||||
public class ActionChangement implements ActionListener{
|
||||
//le model
|
||||
private Model m;
|
||||
//le changement
|
||||
private Changement change;
|
||||
/**
|
||||
* le constructeur
|
||||
*
|
||||
* @param m le model
|
||||
* @param change le changement
|
||||
*
|
||||
*/
|
||||
public ActionChangement(Model m, Changement change){
|
||||
this.m=m;
|
||||
this.change=change;
|
||||
}
|
||||
/**
|
||||
* méthode invoquée lors d'un clic sur un bouton
|
||||
* @param e l'événement
|
||||
*/
|
||||
@Override
|
||||
public void actionPerformed(ActionEvent e) {
|
||||
String text=((JButton)e.getSource()).getText();
|
||||
if(text.equals("Supprimer")){
|
||||
this.m.deleteChange(change);
|
||||
}
|
||||
if(text.equals("Valider")){
|
||||
this.m.change(change);
|
||||
}
|
||||
if(text.equals("Raison")){
|
||||
this.m.showRaisonChange(change);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
@@ -0,0 +1,38 @@
|
||||
package fr.iutfbleau.projetIHM2022FI2.MP.ROOT.Controller;
|
||||
import java.awt.event.ActionEvent;
|
||||
import java.awt.event.ActionListener;
|
||||
|
||||
import javax.swing.JButton;
|
||||
|
||||
import fr.iutfbleau.projetIHM2022FI2.API.Model;
|
||||
/**
|
||||
* listener pour la liste des étudiants
|
||||
*/
|
||||
public class ActionListChange implements ActionListener{
|
||||
// le model
|
||||
private Model m;
|
||||
/**
|
||||
* le constructeur
|
||||
*
|
||||
* @param m le model
|
||||
*
|
||||
*/
|
||||
public ActionListChange(Model m){
|
||||
this.m=m;
|
||||
}
|
||||
/**
|
||||
* méthode invoquée lors d'un clic sur un bouton
|
||||
* @param e l'événement
|
||||
*/
|
||||
@Override
|
||||
public void actionPerformed(ActionEvent e) {
|
||||
String text=((JButton)e.getSource()).getText();
|
||||
if(text.equals("Changement")){
|
||||
this.m.listChange();
|
||||
}
|
||||
if(text.equals("Find Etu")){
|
||||
this.m.findEtu();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
@@ -0,0 +1,49 @@
|
||||
package fr.iutfbleau.projetIHM2022FI2.MP.ROOT.Controller;
|
||||
|
||||
import java.awt.event.ActionListener;
|
||||
|
||||
import javax.swing.*;
|
||||
|
||||
import fr.iutfbleau.projetIHM2022FI2.MP.ROOT.View.FenetreSelectionEtu;
|
||||
|
||||
import java.awt.event.ActionEvent;
|
||||
|
||||
/**
|
||||
* listener pour la création d'étudiants
|
||||
*/
|
||||
public class ActionListenerNouveauEtu implements ActionListener{
|
||||
// la fenetre de sélection
|
||||
private FenetreSelectionEtu pere;
|
||||
/**
|
||||
* le constructeur
|
||||
* @param pere la fenetre de sélection
|
||||
*/
|
||||
public ActionListenerNouveauEtu(FenetreSelectionEtu pere){
|
||||
this.pere=pere;
|
||||
}
|
||||
/**
|
||||
* méthode invoquée lors d'un clic sur un bouton
|
||||
* @param e l'événement
|
||||
*/
|
||||
@Override
|
||||
public void actionPerformed(ActionEvent e) {
|
||||
if(e.getActionCommand()=="tous"){
|
||||
this.pere.addAll();
|
||||
}else{
|
||||
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());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
@@ -0,0 +1,37 @@
|
||||
package fr.iutfbleau.projetIHM2022FI2.MP.ROOT.Controller;
|
||||
import java.awt.event.ActionEvent;
|
||||
import java.awt.event.ActionListener;
|
||||
|
||||
import javax.swing.JOptionPane;
|
||||
|
||||
import fr.iutfbleau.projetIHM2022FI2.API.Etudiant;
|
||||
import fr.iutfbleau.projetIHM2022FI2.API.Model;
|
||||
/**
|
||||
* le controller pour la suppression d'etudiants
|
||||
*/
|
||||
public class ActionListenerSuprEtu implements ActionListener {
|
||||
// l'etudiant a supprimer
|
||||
public Etudiant etudiant;
|
||||
// le model
|
||||
public Model model;
|
||||
/**
|
||||
* le constructeur
|
||||
* @param m le model
|
||||
* @param e l'etudiant a supprimer
|
||||
*/
|
||||
public ActionListenerSuprEtu(Model m, Etudiant e){
|
||||
this.model=m;
|
||||
this.etudiant=e;
|
||||
}
|
||||
/**
|
||||
* méthode invoquée lors d'un clic sur un bouton
|
||||
* @param e l'événement
|
||||
*/
|
||||
@Override
|
||||
public void actionPerformed(ActionEvent e) {
|
||||
if(this.model.deleteEtu(this.etudiant)==false){
|
||||
JOptionPane.showMessageDialog(this.model.getFenetre(), "erreur trop peu d'etudiant dans le groupe/ les groupes fils", "erreur", JOptionPane.ERROR_MESSAGE);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
@@ -0,0 +1,43 @@
|
||||
package fr.iutfbleau.projetIHM2022FI2.MP.ROOT.Controller;
|
||||
|
||||
import java.awt.event.ActionEvent;
|
||||
import java.awt.event.ActionListener;
|
||||
|
||||
import javax.swing.JButton;
|
||||
import javax.swing.JTextField;
|
||||
|
||||
import fr.iutfbleau.projetIHM2022FI2.API.Etudiant;
|
||||
import fr.iutfbleau.projetIHM2022FI2.MP.ROOT.View.FindBarFenetre;
|
||||
/**
|
||||
* le controller pour la recherche d'etudiants
|
||||
*/
|
||||
public class ListenerFindBar implements ActionListener{
|
||||
// la fenetre de recherche
|
||||
private FindBarFenetre fenetre;
|
||||
// l'etudiant a rechercher
|
||||
private Etudiant et;
|
||||
/**
|
||||
* le constructeur
|
||||
* @param fenetre la fenetre de recherche
|
||||
* @param e l'etudiant a rechercher
|
||||
*
|
||||
*/
|
||||
public ListenerFindBar(FindBarFenetre fenetre, Etudiant e){
|
||||
this.fenetre=fenetre;
|
||||
this.et=e;
|
||||
}
|
||||
/**
|
||||
* méthode invoquée lors d'un clic sur un bouton
|
||||
* @param e l'événement
|
||||
*/
|
||||
@Override
|
||||
public void actionPerformed(ActionEvent e) {
|
||||
String text=((JButton)e.getSource()).getText();
|
||||
if(text.equals("->"))
|
||||
this.fenetre.search(((JTextField)((JButton)e.getSource()).getParent()).getText());
|
||||
else{
|
||||
this.fenetre.showGroupe(et);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
@@ -0,0 +1,183 @@
|
||||
package fr.iutfbleau.projetIHM2022FI2.MP.ROOT.Controller;
|
||||
|
||||
import java.awt.event.*;
|
||||
import java.util.LinkedHashSet;
|
||||
import fr.iutfbleau.projetIHM2022FI2.API.*;
|
||||
import javax.swing.JOptionPane;
|
||||
import fr.iutfbleau.projetIHM2022FI2.API.Groupe;
|
||||
import fr.iutfbleau.projetIHM2022FI2.API.Model;
|
||||
import fr.iutfbleau.projetIHM2022FI2.MP.ROOT.View.FenetreSelectionEtu;
|
||||
|
||||
import javax.swing.*;
|
||||
import java.util.Set;
|
||||
/**
|
||||
* le controller pour les groupes
|
||||
*/
|
||||
public class ObservateurModifGroupe implements ActionListener{
|
||||
//le model
|
||||
private Model m;
|
||||
//le groupe courant
|
||||
private Groupe groupe;
|
||||
/**
|
||||
* le constructeur
|
||||
* @param m le model
|
||||
* @param g le groupe courant
|
||||
*/
|
||||
public ObservateurModifGroupe(Model m, Groupe g){
|
||||
this.m=m;
|
||||
this.groupe=g;
|
||||
}
|
||||
/**
|
||||
* méthode invoquée lors d'un clic sur un bouton
|
||||
* @param e l'événement
|
||||
*/
|
||||
@Override
|
||||
public void actionPerformed(ActionEvent e) {
|
||||
if(e.getActionCommand()=="supr"){
|
||||
this.m.delete(this.groupe);
|
||||
}
|
||||
if(e.getActionCommand()=="new Groupe"){
|
||||
String g[]=new String[2];
|
||||
g[0]="Partition";
|
||||
g[1]="Free";
|
||||
int rep=JOptionPane.showOptionDialog(m.getFenetre(), "Type du nouveau Groupe","Type", JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE, null, g, g[0]);
|
||||
if(rep==JOptionPane.YES_OPTION){
|
||||
try{
|
||||
|
||||
JPanel myPanel = new JPanel();
|
||||
JTextField xField = new JTextField(5);
|
||||
JTextField yField = new JTextField(20);
|
||||
myPanel.add(new JLabel("Nombre:"));
|
||||
myPanel.add(xField);
|
||||
myPanel.add(Box.createHorizontalStrut(15));
|
||||
myPanel.add(new JLabel("Nom:"));
|
||||
myPanel.add(yField);
|
||||
int result = JOptionPane.showConfirmDialog(m.getFenetre(), myPanel,
|
||||
"Entrer le nombre et le nom des Partitions", JOptionPane.OK_CANCEL_OPTION);
|
||||
if (result == JOptionPane.OK_OPTION) {
|
||||
int nb=Integer.parseInt(xField.getText());
|
||||
if(nb>this.groupe.getEtudiants().size()){
|
||||
JOptionPane.showMessageDialog(m.getFenetre(), "nombre de partition trop grand", "erreur", JOptionPane.ERROR_MESSAGE);
|
||||
return;
|
||||
}
|
||||
m.partition(this.groupe, nb, yField.getText());
|
||||
}
|
||||
}catch(NumberFormatException er){
|
||||
JOptionPane.showMessageDialog(m.getFenetre(), "erreur dans le nombre de partition", "erreur", JOptionPane.ERROR_MESSAGE);
|
||||
}
|
||||
}
|
||||
if(rep==JOptionPane.NO_OPTION){
|
||||
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 des Partitions", JOptionPane.OK_CANCEL_OPTION);
|
||||
if (result == JOptionPane.OK_OPTION) {
|
||||
int min=Integer.parseInt(xField.getText());
|
||||
int max=Integer.parseInt(zField.getText());
|
||||
if(max>this.groupe.getMax() || min<=0 || max<=0 || min>max){
|
||||
JOptionPane.showMessageDialog(m.getFenetre(), "nombre min/max inchoérent", "erreur", JOptionPane.ERROR_MESSAGE);
|
||||
return;
|
||||
}
|
||||
Set<Etudiant> ajout=new LinkedHashSet<>();
|
||||
myPanel=new FenetreSelectionEtu(this.groupe, ajout, false, m.getEtudiant());
|
||||
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){
|
||||
m.free(groupe, yField.getText(), min, max, ajout);
|
||||
}else{
|
||||
if(min>ajout.size())
|
||||
JOptionPane.showMessageDialog(m.getFenetre(), "nombre d'etudiant trop petit", "erreur", JOptionPane.ERROR_MESSAGE);
|
||||
else{
|
||||
JOptionPane.showMessageDialog(m.getFenetre(), "nombre d'etudiant trop grand", "erreur", JOptionPane.ERROR_MESSAGE);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}catch(NumberFormatException er){
|
||||
JOptionPane.showMessageDialog(m.getFenetre(), "erreur dans les nombres min et max", "erreur", JOptionPane.ERROR_MESSAGE);
|
||||
}
|
||||
}
|
||||
}
|
||||
if(e.getActionCommand()=="rename"){
|
||||
JPanel myPanel = new JPanel();
|
||||
JTextField xField = new JTextField(50);
|
||||
myPanel.add(new JLabel("Nom:"));
|
||||
myPanel.add(xField);
|
||||
if(JOptionPane.showConfirmDialog(m.getFenetre(), new JScrollPane(myPanel), "Nouveau Nom", JOptionPane.OK_CANCEL_OPTION) ==JOptionPane.OK_OPTION){
|
||||
if(xField.getText().length()==0){
|
||||
JOptionPane.showMessageDialog(m.getFenetre(), "erreur nom null", "erreur", JOptionPane.ERROR_MESSAGE);
|
||||
}else{
|
||||
m.rename(xField.getText(), this.groupe);
|
||||
}
|
||||
}
|
||||
}
|
||||
if(e.getActionCommand()=="add"){
|
||||
Set<Etudiant> ajout=new LinkedHashSet<>();
|
||||
JPanel myPanel=new FenetreSelectionEtu(this.groupe, ajout, true, this.m.getEtudiant());
|
||||
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()){
|
||||
JOptionPane.showMessageDialog(m.getFenetre(), "Il y a trop d'etudiant pour le groupe", "erreur", JOptionPane.ERROR_MESSAGE);
|
||||
return;
|
||||
}
|
||||
int i=0;
|
||||
for(Etudiant et:ajout){
|
||||
if(m.addEtudiant(this.groupe, et)==false){
|
||||
i++;
|
||||
}
|
||||
}
|
||||
m.showGroupe(this.groupe);
|
||||
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{
|
||||
if(min>max){
|
||||
JOptionPane.showMessageDialog(m.getFenetre(), "erreur min>max", "erreur", JOptionPane.ERROR_MESSAGE);
|
||||
}else{
|
||||
Set<Etudiant> ajout=new LinkedHashSet<>();
|
||||
JPanel pan=new FenetreSelectionEtu(null, ajout, false, this.m.getEtudiant());
|
||||
if(JOptionPane.showConfirmDialog(m.getFenetre(), new JScrollPane(pan), "Selectionner les étudiant a ajouter", JOptionPane.OK_CANCEL_OPTION) ==JOptionPane.YES_OPTION){
|
||||
if(min>ajout.size() || max<ajout.size()){
|
||||
JOptionPane.showMessageDialog(m.getFenetre(), "Il y a trop/pas assez d'etudiant pour le groupe", "erreur", JOptionPane.ERROR_MESSAGE);
|
||||
return;
|
||||
}
|
||||
m.addPromo(min, max, yField.getText(), ajout);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}catch(NumberFormatException er){
|
||||
JOptionPane.showMessageDialog(m.getFenetre(), "erreur dans les nombres min et max", "erreur", JOptionPane.ERROR_MESSAGE);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
@@ -0,0 +1,59 @@
|
||||
package fr.iutfbleau.projetIHM2022FI2.MP.ROOT.Controller;
|
||||
import java.awt.Color;
|
||||
import java.awt.event.MouseEvent;
|
||||
import java.awt.event.MouseListener;
|
||||
|
||||
import fr.iutfbleau.projetIHM2022FI2.MP.ROOT.View.FenetreSelectionEtu;
|
||||
/**
|
||||
* listener pour la selection des etudiants
|
||||
*/
|
||||
public class SelecteurEtudiant implements MouseListener{
|
||||
// la fenetre de selection
|
||||
private FenetreSelectionEtu pere;
|
||||
// l'index de l'etudiant
|
||||
private int index;
|
||||
/**
|
||||
* le constructeur
|
||||
* @param index l'index de l'etudiant
|
||||
* @param pere la fenetre de selection
|
||||
*/
|
||||
public SelecteurEtudiant(int index, FenetreSelectionEtu pere){
|
||||
this.pere=pere;
|
||||
this.index=index;
|
||||
}
|
||||
/**
|
||||
* méthode invoquée lors d'un clic
|
||||
* @param e l'événement
|
||||
*/
|
||||
@Override
|
||||
public void mouseClicked(MouseEvent e) {
|
||||
if(e.getComponent().getBackground()!=Color.GREEN){
|
||||
e.getComponent().setBackground(Color.GREEN);
|
||||
this.pere.addList(this.index);
|
||||
}else{
|
||||
this.pere.removeList(this.index);
|
||||
e.getComponent().setBackground(e.getComponent().getParent().getBackground());
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void mouseEntered(MouseEvent e) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void mouseExited(MouseEvent e) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void mousePressed(MouseEvent e) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void mouseReleased(MouseEvent e) {
|
||||
|
||||
}
|
||||
|
||||
}
|
462
src/fr/iutfbleau/projetIHM2022FI2/MP/ROOT/Model/ModelRoot.java
Normal file
462
src/fr/iutfbleau/projetIHM2022FI2/MP/ROOT/Model/ModelRoot.java
Normal file
@@ -0,0 +1,462 @@
|
||||
package fr.iutfbleau.projetIHM2022FI2.MP.ROOT.Model;
|
||||
import java.util.HashSet;
|
||||
import java.util.Set;
|
||||
import javax.swing.*;
|
||||
import java.awt.*;
|
||||
|
||||
import fr.iutfbleau.projetIHM2022FI2.API.AbstractChangementFactory;
|
||||
import fr.iutfbleau.projetIHM2022FI2.API.AbstractGroupeFactory;
|
||||
import fr.iutfbleau.projetIHM2022FI2.API.Changement;
|
||||
import fr.iutfbleau.projetIHM2022FI2.API.Etudiant;
|
||||
import fr.iutfbleau.projetIHM2022FI2.API.Groupe;
|
||||
import fr.iutfbleau.projetIHM2022FI2.API.Model;
|
||||
import fr.iutfbleau.projetIHM2022FI2.API.TypeGroupe;
|
||||
import fr.iutfbleau.projetIHM2022FI2.MP.AbstractChangementFactoryNP;
|
||||
import fr.iutfbleau.projetIHM2022FI2.MP.AbstractGroupeFactoryNP;
|
||||
import fr.iutfbleau.projetIHM2022FI2.MP.ROOT.View.FenetreChangement;
|
||||
import fr.iutfbleau.projetIHM2022FI2.MP.ROOT.View.FenetreEtudiant;
|
||||
import fr.iutfbleau.projetIHM2022FI2.MP.ROOT.View.FenetreGroupe;
|
||||
import fr.iutfbleau.projetIHM2022FI2.MP.ROOT.View.FindBarFenetre;
|
||||
import fr.iutfbleau.projetIHM2022FI2.Permanent.Controller.ObservateurChangeGroupe;
|
||||
import fr.iutfbleau.projetIHM2022FI2.Permanent.Controller.ObservateurFenetre;
|
||||
import fr.iutfbleau.projetIHM2022FI2.Permanent.View.Chargement;
|
||||
|
||||
/**
|
||||
* Le Model de L'IHM
|
||||
*/
|
||||
public class ModelRoot implements Model{
|
||||
|
||||
// le panel qui contient la fenetre de groupe
|
||||
private JPanel panGroupe;
|
||||
// la fenetre de groupe
|
||||
private FenetreGroupe fenGr;
|
||||
//la fenetre d'etudiant
|
||||
private FenetreEtudiant fenEtu;
|
||||
// le groupe courant
|
||||
private AbstractGroupeFactory promo;
|
||||
// le changement courant
|
||||
private AbstractChangementFactory changement;
|
||||
// la fenetre principale
|
||||
private JFrame fenetre;
|
||||
//fenetre du changement
|
||||
private FenetreChangement fenChange;
|
||||
|
||||
/**
|
||||
* Constructeur du model.
|
||||
*/
|
||||
public ModelRoot(){
|
||||
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());
|
||||
Chargement ch=new Chargement(this.fenetre);
|
||||
this.promo=new AbstractGroupeFactoryNP(this.fenetre);
|
||||
ch.dispose();
|
||||
this.fenetre.setVisible(true);
|
||||
if(this.promo.getPromotion()==null){
|
||||
this.changement=null;
|
||||
this.fenGr=new FenetreGroupe(null, this);
|
||||
this.fenEtu=new FenetreEtudiant(null, this);
|
||||
}else{
|
||||
this.fenGr=new FenetreGroupe(this.promo.getPromotion(), this);
|
||||
this.fenEtu=new FenetreEtudiant(this.promo.getPromotion(), this);
|
||||
this.changement=new AbstractChangementFactoryNP(this.promo, this.fenetre);
|
||||
}
|
||||
this.panGroupe=new JPanel(new GridLayout(1,1));
|
||||
if(this.promo.getPromotion()!=null){
|
||||
this.showGroupe(this.promo.getPromotion());
|
||||
}else{
|
||||
this.showGroupe(null);
|
||||
}
|
||||
this.fenChange=null;
|
||||
}
|
||||
|
||||
@Override
|
||||
/**
|
||||
* Fonction pour refresh/changer de groupe d'affichage
|
||||
* @param g le groupe a afficher
|
||||
*/
|
||||
public void showGroupe(Groupe g){
|
||||
if(g!=null)
|
||||
g=this.promo.refreshALL(g);
|
||||
this.panGroupe.removeAll();
|
||||
this.fenGr=new FenetreGroupe(g, this);
|
||||
this.fenEtu=new FenetreEtudiant(g, this);
|
||||
this.fenetre.getContentPane().removeAll();
|
||||
this.panGroupe.add(this.fenGr.getPan());
|
||||
this.panGroupe.revalidate();
|
||||
this.fenetre.add(this.panGroupe);
|
||||
JScrollPane scroll=new JScrollPane(this.fenEtu.getPan());
|
||||
scroll.getVerticalScrollBar().setUnitIncrement(15);
|
||||
this.fenetre.add(scroll);
|
||||
this.fenetre.revalidate();
|
||||
}
|
||||
@Override
|
||||
/**
|
||||
* getteur de la fenetre
|
||||
* @return JFrame la fenetre
|
||||
*/
|
||||
public JFrame getFenetre() {
|
||||
return fenetre;
|
||||
}
|
||||
/**
|
||||
* permet d'obtenir l'ensemble des etudiants
|
||||
* @return
|
||||
*/
|
||||
@Override
|
||||
public Set<Etudiant> getEtudiant(){
|
||||
return this.promo.getEtudiants(null);
|
||||
}
|
||||
|
||||
// ***********************
|
||||
// FONCTION POUR SUPRIMER UN ETUDIANT
|
||||
// ***********************
|
||||
/**
|
||||
* Fonction pour supprimer un etudiant.
|
||||
* @param e l'etudiant a supprimer
|
||||
* @return boolean true si l'etudiant a ete supprimer, false sinon
|
||||
*/
|
||||
@Override
|
||||
public boolean deleteEtu(Etudiant e){
|
||||
if(this.deleteEtutoChildren(e, this.fenGr.getG())){
|
||||
this.promo.dropFromGroupe(this.fenGr.getG(), e);
|
||||
this.showGroupe(this.fenGr.getG());
|
||||
return true;
|
||||
}else{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
/**
|
||||
* Permet de savoir si un étudiant peut être supprimé
|
||||
* @param e l'étudiant à supprimer
|
||||
* @param g le groupe dans lequel on cherche
|
||||
* @return true si possible, false sinon
|
||||
*/
|
||||
private boolean deleteEtutoChildren(Etudiant e, Groupe g){
|
||||
if(g.getMax()<g.getEtudiants().size()-1)
|
||||
return false;
|
||||
for(Groupe sous: g.getSousGroupes()){
|
||||
if(this.deleteEtutoChildren(e, sous)==false){
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
// ***********************
|
||||
// FONCTION POUR Ajouter UN ETUDIANT
|
||||
// ***********************
|
||||
@Override
|
||||
/**
|
||||
* 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(g!=g.getPointPoint())
|
||||
if(this.addEtuToParent(g.getPointPoint(), e)==false)
|
||||
return false;
|
||||
//On induqe a la BD de sauvegarder cette modification
|
||||
this.promo.addToGroupe(g, e);
|
||||
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.getId()==e.getId()){
|
||||
return true;
|
||||
}
|
||||
}
|
||||
if(g.getPointPoint()!=g){
|
||||
if(this.addEtuToParent(g.getPointPoint(), e)==false){
|
||||
return false;
|
||||
}
|
||||
}
|
||||
this.promo.addToGroupe(g, e);
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
// ***********************
|
||||
// FONCTION POUR SUPRIMER UN GROUPE
|
||||
// ***********************
|
||||
@Override
|
||||
/**
|
||||
* Fonction pour supprimer un groupe
|
||||
* @param g le groupe a supprimer
|
||||
*/
|
||||
public void delete(Groupe g){
|
||||
//On ne peut pas supprimer la promo normallement
|
||||
if(g==this.promo.getPromotion()){
|
||||
if(JOptionPane.showConfirmDialog(this.fenetre, "Attention ête vous sûr de vouloir supprimer la promo", "Attention", JOptionPane.YES_NO_OPTION)==JOptionPane.YES_OPTION){
|
||||
this.promo.deleteGroupe(this.promo.getPromotion());
|
||||
this.showGroupe(null);
|
||||
}else{
|
||||
return;
|
||||
}
|
||||
//JOptionPane.showMessageDialog(this.fenetre, "impossible de supprimer la promotion", "alerte", JOptionPane.ERROR_MESSAGE);
|
||||
}else{
|
||||
//on suprime le groupe
|
||||
this.promo.deleteGroupe(g);
|
||||
this.showGroupe(g.getPointPoint());
|
||||
}
|
||||
}
|
||||
|
||||
// ***********************
|
||||
// FONCTION POUR RENOMER UN GROUPE
|
||||
// ***********************
|
||||
|
||||
@Override
|
||||
/**
|
||||
* Fonction pour renomer un groupe
|
||||
* @param name
|
||||
* @param g
|
||||
*/
|
||||
public void rename(String name, Groupe g){
|
||||
this.promo.changeNameGroupe(g, name);
|
||||
this.showGroupe(g);
|
||||
}
|
||||
|
||||
|
||||
// **********************
|
||||
// FONCTION POUR CREER UN GROUPE
|
||||
// **********************
|
||||
|
||||
@Override
|
||||
/**
|
||||
* 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){
|
||||
Chargement ch=new Chargement(this.fenetre);
|
||||
this.fenetre.setVisible(false);
|
||||
this.promo.createPartition(g, name, n);
|
||||
ch.dispose();
|
||||
this.fenetre.setVisible(true);
|
||||
this.showGroupe(g);
|
||||
}
|
||||
|
||||
@Override
|
||||
/**
|
||||
* 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){
|
||||
Chargement ch=new Chargement(this.fenetre);
|
||||
this.fenetre.setVisible(false);
|
||||
//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++;
|
||||
}
|
||||
creer=this.promo.refreshALL(creer);
|
||||
ch.dispose();
|
||||
this.fenetre.setVisible(true);
|
||||
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.getEtudiants().size()+1<=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);
|
||||
}
|
||||
/**
|
||||
* ajoute une nouvelle promotion
|
||||
* @param min le nombre min
|
||||
* @param max le nombre max
|
||||
* @param name le nom
|
||||
* @param ajout les etudiant a ajouter a la promo
|
||||
*/
|
||||
@Override
|
||||
public void addPromo(int min, int max, String name, Set<Etudiant> ajout){
|
||||
Chargement ch=new Chargement(this.fenetre);
|
||||
this.promo=new AbstractGroupeFactoryNP(name, min, max, this.fenetre);
|
||||
this.changement=new AbstractChangementFactoryNP(this.promo, this.fenetre);
|
||||
this.fenetre.setVisible(false);
|
||||
for(Etudiant e:ajout){
|
||||
this.addEtudiant(this.promo.getPromotion(), e);
|
||||
}
|
||||
ch.dispose();
|
||||
this.fenetre.setVisible(true);
|
||||
this.showGroupe(this.promo.getPromotion());
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Créer un changement depuis le groupe courant
|
||||
* @param e l'etudiant
|
||||
* @param b le groupe a changer
|
||||
*/
|
||||
@Override
|
||||
public void changeGroupe(Etudiant e, Groupe b){
|
||||
if(b==null)
|
||||
return;
|
||||
b=this.promo.refreshALL(b);
|
||||
if(b.getEtudiants()!=null && b.getMax()>b.getEtudiants().size()+1){
|
||||
if(b.getEtudiants().size()>this.fenGr.getG().getEtudiants().size()){
|
||||
JPanel myPanel= new JPanel(new GridLayout(2,1));
|
||||
JTextField xField = new JTextField(100);
|
||||
xField.setMinimumSize(new Dimension(100, 100));
|
||||
xField.setPreferredSize(new Dimension(100,100));
|
||||
myPanel.add(new JLabel("Ce Groupe est plus grand que le votre raison du changement:"));
|
||||
myPanel.add(xField);
|
||||
if(JOptionPane.showConfirmDialog(this.fenetre, myPanel, "Changer dans quel Groupe ?", JOptionPane.OK_CANCEL_OPTION)==JOptionPane.OK_OPTION){
|
||||
//IL faut que l'etudiant detaile un minimun la raison
|
||||
if(xField.getText().length()>5){
|
||||
this.changement.createChangement(this.fenGr.getG(), e, b, xField.getText());
|
||||
}else{
|
||||
JOptionPane.showMessageDialog(this.fenetre, "veuillez detailler votre raison", "erreur", JOptionPane.ERROR_MESSAGE);
|
||||
}
|
||||
}
|
||||
}else{
|
||||
this.changement.createChangement(this.fenGr.getG(), e, b);
|
||||
}
|
||||
}else{
|
||||
JOptionPane.showMessageDialog(this.fenetre, "impossible trop d'etudiant dans l'autre Groupe", "erreur", JOptionPane.ERROR_MESSAGE);
|
||||
}
|
||||
this.showGroupe(this.fenGr.getG());
|
||||
}
|
||||
/**
|
||||
* Retourn les groupe auquel on peut demander a changer depuis le groupe courant
|
||||
*
|
||||
* @return la liste des groupes
|
||||
*/
|
||||
@Override
|
||||
public Set<Groupe> getGroupePartition(){
|
||||
this.promo.refreshALL(this.fenGr.getG().getPointPoint());
|
||||
Set<Groupe> retour=new HashSet<Groupe>();
|
||||
if(this.fenGr.getG().getPointPoint().getType()!=TypeGroupe.PARTITION)
|
||||
throw new IllegalStateException("impossible de changer un étudiant d'un groupe ne provenant pas d'une partition");
|
||||
for(Groupe sous:this.fenGr.getG().getPointPoint().getSousGroupes()){
|
||||
if(sous.getId()!=this.fenGr.getG().getId()){
|
||||
retour.add(sous);
|
||||
}
|
||||
}
|
||||
return retour;
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see fr.iutfbleau.projetIHM2022FI2.API.Model#listChange()
|
||||
*/
|
||||
/**
|
||||
* Fonction pour afficher une fenetre listnatn les changements
|
||||
*
|
||||
*/
|
||||
@Override
|
||||
public void listChange() {
|
||||
this.fenChange=new FenetreChangement(changement, this);
|
||||
JOptionPane.showMessageDialog(this.fenetre, new JScrollPane(this.fenChange), "liste des changements", JOptionPane.OK_OPTION);
|
||||
}
|
||||
/**
|
||||
* Fonction pour effectuer un changement
|
||||
* @param Changement le changement a effecteur
|
||||
*/
|
||||
@Override
|
||||
public void change(Changement change) {
|
||||
this.changement.applyChangement(change);
|
||||
this.fenChange.refresh();
|
||||
if(change.getA()==this.fenGr.getG()){
|
||||
this.showGroupe(this.fenGr.getG());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Fonction supprimant un changement
|
||||
*
|
||||
* @param to_delete la changement a delete
|
||||
*/
|
||||
@Override
|
||||
public void deleteChange(Changement to_delete) {
|
||||
this.changement.deleteChangement(to_delete);
|
||||
this.fenChange.refresh();
|
||||
}
|
||||
|
||||
/**
|
||||
* Fonction affichant les raison d'un changement
|
||||
*
|
||||
* @param change le changement
|
||||
*/
|
||||
@Override
|
||||
public void showRaisonChange(Changement change) {
|
||||
JOptionPane.showMessageDialog(this.fenetre, new JLabel(change.getRaison()), "Raison de la demande", JOptionPane.OK_OPTION);
|
||||
}
|
||||
/**
|
||||
* Fonction affichant une fentre pour trouver un etudiant et tous ses groupes asociée
|
||||
*/
|
||||
@Override
|
||||
public void findEtu() {
|
||||
JScrollPane scroll=new JScrollPane(new FindBarFenetre(this).getPanel());
|
||||
scroll.getVerticalScrollBar().setUnitIncrement(5);
|
||||
JOptionPane.showMessageDialog(this.fenetre, scroll, "chercher un etudiant", JOptionPane.OK_OPTION);
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see fr.iutfbleau.projetIHM2022FI2.API.Model#getEtu(java.lang.String)
|
||||
*/
|
||||
|
||||
/**
|
||||
* Fonction pour recuperer les etudiant avec ce nom
|
||||
* @param name le nom de(s) etudiants
|
||||
* @return la liste
|
||||
*/
|
||||
@Override
|
||||
public Set<Etudiant> getEtu(String name) {
|
||||
return this.promo.getEtudiants(name);
|
||||
}
|
||||
/**
|
||||
*affiche les groupe d'un etudiant
|
||||
* @param e l'etudiant
|
||||
*/
|
||||
@Override
|
||||
public void showGroupOfEtudiant(Etudiant e){
|
||||
Set<Groupe> liste=this.promo.getGroupesOfEtudiant(e);
|
||||
JPanel myPanel;
|
||||
if(liste!=null && liste.size()>0){
|
||||
myPanel=new JPanel(new GridLayout(liste.size()/2+1, 2, 20, 20));
|
||||
for(Groupe g:liste){
|
||||
JButton bout=new JButton(g.getName());
|
||||
bout.addActionListener(new ObservateurChangeGroupe(this, g));
|
||||
myPanel.add(bout);
|
||||
}
|
||||
}else{
|
||||
myPanel=new JPanel(new GridLayout(2, 2, 20, 20));
|
||||
myPanel.add(new JLabel("Cet Etudiant n'appartient encore a aucun groupe"));
|
||||
}
|
||||
JOptionPane.showMessageDialog(this.fenChange, myPanel, "groupe de l'etudiant", JOptionPane.OK_OPTION);
|
||||
}
|
||||
|
||||
}
|
@@ -0,0 +1,78 @@
|
||||
package fr.iutfbleau.projetIHM2022FI2.MP.ROOT.View;
|
||||
|
||||
import javax.swing.JButton;
|
||||
import javax.swing.JLabel;
|
||||
import javax.swing.JPanel;
|
||||
import java.awt.GridLayout;
|
||||
import java.awt.Color;
|
||||
import java.awt.FlowLayout;
|
||||
import fr.iutfbleau.projetIHM2022FI2.API.AbstractChangementFactory;
|
||||
import fr.iutfbleau.projetIHM2022FI2.API.Changement;
|
||||
import fr.iutfbleau.projetIHM2022FI2.API.Model;
|
||||
import fr.iutfbleau.projetIHM2022FI2.MP.ROOT.Controller.ActionChangement;
|
||||
/**
|
||||
* Affichage des changements
|
||||
*
|
||||
*/
|
||||
public class FenetreChangement extends JPanel{
|
||||
// les changements a afficher
|
||||
private AbstractChangementFactory change;
|
||||
// le modèle
|
||||
private Model m;
|
||||
|
||||
/**
|
||||
* Constructeur de l'affichage des changements
|
||||
* @param list la liste des changements
|
||||
* @param m le mlodèle
|
||||
*/
|
||||
public FenetreChangement(AbstractChangementFactory list, Model m){
|
||||
this.change=list;
|
||||
this.m=m;
|
||||
this.draw();
|
||||
}
|
||||
|
||||
/**
|
||||
* gère l'affichage des changements
|
||||
*/
|
||||
public void draw(){
|
||||
if(this.change==null || this.change.getAllChangements().size()==0){
|
||||
this.setBackground(Color.RED);
|
||||
this.setLayout(new FlowLayout());
|
||||
JLabel text=new JLabel("Aucune Demande de changement effectuer");
|
||||
text.setMinimumSize(this.getSize());
|
||||
this.add(text);
|
||||
}else{
|
||||
this.setLayout(new GridLayout(this.change.getAllChangements().size(), 6, 20, 0));
|
||||
for(Changement ch: this.change.getAllChangements()){
|
||||
this.add(new JLabel("L'etudiant "+ch.getEtu().getNom()+" "+ch.getEtu().getPrenom()));
|
||||
this.add(new JLabel("veut passer du groupe "+ch.getA().getName()));
|
||||
this.add(new JLabel(" au groupe "+ch.getB().getName()));
|
||||
JButton raison;
|
||||
if(ch.getRaison()==null){
|
||||
raison=new JButton("Type 1");
|
||||
}else{
|
||||
raison=new JButton("Raison");
|
||||
raison.addActionListener(new ActionChangement(this.m, ch));
|
||||
}
|
||||
this.add(raison);
|
||||
JButton supr=new JButton("Supprimer");
|
||||
supr.addActionListener(new ActionChangement(this.m, ch));
|
||||
JButton val=new JButton("Valider");
|
||||
val.addActionListener(new ActionChangement(this.m, ch));
|
||||
supr.setBackground(Color.RED);
|
||||
val.setBackground(Color.GREEN);
|
||||
this.add(val);
|
||||
this.add(supr);
|
||||
}
|
||||
}
|
||||
}
|
||||
/**
|
||||
* rafraichit l'affichage
|
||||
*/
|
||||
public void refresh(){
|
||||
this.removeAll();
|
||||
this.draw();
|
||||
this.revalidate();
|
||||
}
|
||||
|
||||
}
|
@@ -0,0 +1,103 @@
|
||||
package fr.iutfbleau.projetIHM2022FI2.MP.ROOT.View;
|
||||
|
||||
|
||||
import javax.swing.JButton;
|
||||
import javax.swing.JLabel;
|
||||
import javax.swing.JPanel;
|
||||
|
||||
import java.awt.*;
|
||||
import java.util.LinkedHashSet;
|
||||
import java.util.Set;
|
||||
|
||||
import fr.iutfbleau.projetIHM2022FI2.API.Etudiant;
|
||||
import fr.iutfbleau.projetIHM2022FI2.API.Groupe;
|
||||
import fr.iutfbleau.projetIHM2022FI2.API.TypeGroupe;
|
||||
import fr.iutfbleau.projetIHM2022FI2.MP.ROOT.Controller.ActionListChange;
|
||||
import fr.iutfbleau.projetIHM2022FI2.MP.ROOT.Controller.ActionListenerSuprEtu;
|
||||
import fr.iutfbleau.projetIHM2022FI2.Permanent.Controller.ActionListenerChangeEtu;
|
||||
import fr.iutfbleau.projetIHM2022FI2.API.Model;
|
||||
|
||||
/**
|
||||
* Affichage des édudiants d'un groupe
|
||||
*
|
||||
*/
|
||||
public class FenetreEtudiant{
|
||||
//liste des étudiants
|
||||
private Set<Etudiant> etu;
|
||||
// model
|
||||
private Model m;
|
||||
// panel
|
||||
private JPanel pan;
|
||||
// le type de groupe
|
||||
private TypeGroupe type;
|
||||
|
||||
/**
|
||||
* Constructeur de l'affichage des étudiants
|
||||
* @param g le groupe
|
||||
* @param m le model
|
||||
*/
|
||||
public FenetreEtudiant(Groupe g, Model m){
|
||||
this.pan=new JPanel();
|
||||
this.m=m;
|
||||
if(g!=null){
|
||||
this.type=g.getPointPoint().getType();
|
||||
this.etu=g.getEtudiants();
|
||||
}else{
|
||||
this.type=null;
|
||||
this.etu=new LinkedHashSet<>();
|
||||
}
|
||||
this.draw();
|
||||
}
|
||||
/**
|
||||
* Gère l'affichage des étudiants
|
||||
*/
|
||||
private void draw(){
|
||||
if(this.etu.size()!=0){
|
||||
this.pan.setLayout(new GridLayout(this.etu.size()+1, 1, 10, 0));
|
||||
JPanel bouton=new JPanel(new GridLayout(1, 2));
|
||||
JButton boutChange=new JButton("Changement");
|
||||
boutChange.addActionListener(new ActionListChange(this.m));
|
||||
JButton boutFind=new JButton("Find Etu");
|
||||
boutFind.addActionListener(new ActionListChange(this.m));
|
||||
bouton.add(boutChange);
|
||||
bouton.add(boutFind);
|
||||
this.pan.add(bouton);
|
||||
|
||||
for(Etudiant e: this.etu){
|
||||
PanelEtudiant p;
|
||||
if(type!=null && type==TypeGroupe.PARTITION){
|
||||
p=new PanelEtudiant(e, true);
|
||||
}else{
|
||||
p=new PanelEtudiant(e, false);
|
||||
}
|
||||
p.addActionDeleteListener(new ActionListenerSuprEtu(m, e));
|
||||
p.addActionChangeListener(new ActionListenerChangeEtu(m, e));
|
||||
this.pan.add(p);
|
||||
}
|
||||
}else{
|
||||
this.pan.setLayout(new FlowLayout());
|
||||
this.pan.add(new JLabel("Il n'y a pas d'étudiant"));
|
||||
}
|
||||
}
|
||||
/**
|
||||
* rafraichit l'affichage.
|
||||
*/
|
||||
public void refresh(){
|
||||
this.pan.removeAll();
|
||||
this.draw();
|
||||
this.pan.revalidate();
|
||||
}
|
||||
/**
|
||||
* premet d'obtenir le panel de l'affichage
|
||||
* @return le panel de l'affichage
|
||||
*/
|
||||
public JPanel getPan() {
|
||||
return pan;
|
||||
}
|
||||
/**
|
||||
* permet d'afficher la liste des demandes de changement
|
||||
*/
|
||||
public void listChange(){
|
||||
this.m.listChange();
|
||||
}
|
||||
}
|
@@ -0,0 +1,127 @@
|
||||
package fr.iutfbleau.projetIHM2022FI2.MP.ROOT.View;
|
||||
|
||||
import javax.swing.JButton;
|
||||
import javax.swing.JLabel;
|
||||
import javax.swing.JPanel;
|
||||
import javax.swing.JScrollPane;
|
||||
|
||||
import java.awt.Color;
|
||||
import java.awt.Font;
|
||||
import java.awt.GridLayout;
|
||||
import fr.iutfbleau.projetIHM2022FI2.API.Groupe;
|
||||
import fr.iutfbleau.projetIHM2022FI2.API.TypeGroupe;
|
||||
import fr.iutfbleau.projetIHM2022FI2.MP.ROOT.Controller.ObservateurModifGroupe;
|
||||
import fr.iutfbleau.projetIHM2022FI2.Permanent.Controller.ObservateurChangeGroupe;
|
||||
import fr.iutfbleau.projetIHM2022FI2.API.Model;
|
||||
|
||||
/**
|
||||
* Affichage d'un groupe
|
||||
*
|
||||
*/
|
||||
public class FenetreGroupe{
|
||||
// le groupe affiché
|
||||
private Groupe g;
|
||||
// le panel d'affichage
|
||||
private JPanel pan;
|
||||
// le modèle
|
||||
private Model m;
|
||||
|
||||
/**
|
||||
* Constructeur de l'affichage d'un groupe
|
||||
* @param g le groupe à afficher
|
||||
* @param m le model
|
||||
*/
|
||||
public FenetreGroupe(Groupe g, Model m){
|
||||
super();
|
||||
this.g=g;
|
||||
this.m=m;
|
||||
this.pan=new JPanel();
|
||||
this.draw();
|
||||
}
|
||||
/**
|
||||
* permet de récupérer le groupe affiché
|
||||
* @return le groupe affiché
|
||||
*/
|
||||
public Groupe getG() {
|
||||
return this.g;
|
||||
}
|
||||
/**
|
||||
* rafraichit l'affichage du groupe
|
||||
*/
|
||||
public void refresh(){
|
||||
this.pan.removeAll();
|
||||
this.draw();
|
||||
this.pan.revalidate();
|
||||
}
|
||||
/**
|
||||
* gère l'affichage du groupe
|
||||
*/
|
||||
private void draw(){
|
||||
if(g!=null){
|
||||
int taille=5;
|
||||
if(g.getType()==TypeGroupe.PARTITION || g.getType()==TypeGroupe.ROOT)
|
||||
taille--;
|
||||
if(g.getSousGroupes().size()>0)
|
||||
this.pan.setLayout(new GridLayout(7, 1));
|
||||
else{this.pan.setLayout(new GridLayout(6, 1));}
|
||||
JPanel tache=new JPanel(new GridLayout(1,taille));
|
||||
if(g.getType()!=TypeGroupe.ROOT){
|
||||
JButton bout=new JButton(g.getPointPoint().getName());
|
||||
bout.addActionListener(new ObservateurChangeGroupe(m, this.g.getPointPoint()));
|
||||
tache.add(bout);
|
||||
}
|
||||
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));
|
||||
supprimer.setForeground(Color.RED);
|
||||
tache.add(supprimer);
|
||||
if(g.getType()!=TypeGroupe.PARTITION){
|
||||
JButton creer=new JButton("new Groupe");
|
||||
creer.addActionListener(new ObservateurModifGroupe(m, g));
|
||||
tache.add(creer);
|
||||
}
|
||||
this.pan.add(tache);
|
||||
JLabel titre=new JLabel("Groupe : "+g.getName(), JLabel.CENTER);
|
||||
titre.setFont(new Font(Font.SERIF, Font.BOLD, titre.getFont().getSize()+10));
|
||||
this.pan.add(titre);
|
||||
this.pan.add(new JLabel("min= "+String.valueOf(g.getMin())+"\t || \t max= "+String.valueOf(g.getMax()),JLabel.CENTER));
|
||||
JButton refresh= new JButton("Resfresh");
|
||||
refresh.addActionListener(new ObservateurChangeGroupe(m, g));
|
||||
this.pan.add(refresh);
|
||||
this.pan.add(new JLabel("Type: "+g.getType().name()+"\t || \t id="+String.valueOf(g.getId()), JLabel.CENTER));
|
||||
this.pan.add(new JLabel("Sous groupe:",JLabel.CENTER));
|
||||
if(g.getSousGroupes().size()>0){
|
||||
JPanel sous=new JPanel(new GridLayout(g.getSousGroupes().size(), 1));
|
||||
for(Groupe gr: g.getSousGroupes()){
|
||||
JButton b=new JButton(gr.getName());
|
||||
b.addActionListener(new ObservateurChangeGroupe(m, gr));
|
||||
sous.add(b);
|
||||
}
|
||||
this.pan.add(new JScrollPane(sous));
|
||||
}
|
||||
}else{
|
||||
JButton creer=new JButton("créer une promo");
|
||||
creer.addActionListener(new ObservateurModifGroupe(m, g));
|
||||
this.pan.add(creer);
|
||||
}
|
||||
}
|
||||
/**
|
||||
* permet de modifier le groupe affiché
|
||||
* @param g le nouveau groupe à afficher
|
||||
*/
|
||||
public void setG(Groupe g) {
|
||||
this.g = g;
|
||||
}
|
||||
/**
|
||||
* Permet de récupérer le panel d'affichage.
|
||||
* @return le panel d'affichage
|
||||
*/
|
||||
public JPanel getPan() {
|
||||
return pan;
|
||||
}
|
||||
}
|
@@ -0,0 +1,134 @@
|
||||
package fr.iutfbleau.projetIHM2022FI2.MP.ROOT.View;
|
||||
|
||||
import fr.iutfbleau.projetIHM2022FI2.API.Etudiant;
|
||||
import fr.iutfbleau.projetIHM2022FI2.API.Groupe;
|
||||
import fr.iutfbleau.projetIHM2022FI2.MP.EtudiantNP;
|
||||
import fr.iutfbleau.projetIHM2022FI2.MP.ROOT.Controller.ActionListenerNouveauEtu;
|
||||
import fr.iutfbleau.projetIHM2022FI2.MP.ROOT.Controller.SelecteurEtudiant;
|
||||
|
||||
import java.util.Set;
|
||||
import java.awt.GridLayout;
|
||||
import java.awt.Color;
|
||||
import javax.swing.JButton;
|
||||
import javax.swing.JOptionPane;
|
||||
import javax.swing.JPanel;
|
||||
|
||||
|
||||
public class FenetreSelectionEtu extends JPanel{
|
||||
// liste des étudiants à ajouter
|
||||
private Set<Etudiant> liste;
|
||||
// liste de tous les étudiants
|
||||
private Set<Etudiant> etu;
|
||||
|
||||
|
||||
/**
|
||||
* Constructeur de l'affichage de la selection des étudiants
|
||||
* @param g le groupe
|
||||
* @param liste la liste des étudiants à ajouter
|
||||
* @param supression savoir si il faut supprimer les étudiants du groupe de la liste
|
||||
* @param etu0 la liste de tous les
|
||||
*/
|
||||
public FenetreSelectionEtu(Groupe g, Set<Etudiant> liste, boolean supression, Set<Etudiant> etu0){
|
||||
super();
|
||||
this.etu=etu0;
|
||||
if(supression==true){
|
||||
for(Etudiant e:g.getEtudiants()){
|
||||
for(Etudiant et:etu){
|
||||
if(e.getId()==et.getId()){
|
||||
etu.remove(et);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
this.liste=liste;
|
||||
this.draw();
|
||||
}
|
||||
/**
|
||||
* Ajoute un étudiant à la sélection
|
||||
* @param index l'index de l'étudiant
|
||||
*/
|
||||
public void addList(int index){
|
||||
int i=0;
|
||||
for(Etudiant e:this.etu){
|
||||
if(i==index){
|
||||
this.liste.add(e);
|
||||
return;
|
||||
}
|
||||
i++;
|
||||
}
|
||||
}
|
||||
/**
|
||||
* Retire un étudiant de la sélection
|
||||
* @param index l'index de l'étudiant
|
||||
*/
|
||||
public void removeList(int index){
|
||||
int i=0;
|
||||
for(Etudiant e:this.etu){
|
||||
if(i==index){
|
||||
this.liste.remove(e);
|
||||
return;
|
||||
}
|
||||
i++;
|
||||
}
|
||||
}
|
||||
/**
|
||||
* Ajoute un étudiant à la liste de tous les étudiants
|
||||
* @param nom le nom de l'étudiant
|
||||
* @param prenom le prénom de l'étudiant
|
||||
*/
|
||||
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.removeAll();
|
||||
this.draw();
|
||||
this.revalidate();
|
||||
}
|
||||
/**
|
||||
* gère l'affichage de la sélection
|
||||
*/
|
||||
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));
|
||||
JButton all=new JButton("tous");
|
||||
this.add(all);
|
||||
all.addActionListener(new ActionListenerNouveauEtu(this));
|
||||
this.add(nouveau);
|
||||
}
|
||||
/**
|
||||
* Ajoute tous les étudiants à la liste des étudiants sélectionnés
|
||||
*/
|
||||
public void addAll(){
|
||||
if(this.getComponent(this.etu.size()).getBackground()==Color.GREEN){
|
||||
int i=0;
|
||||
for(Etudiant e:this.etu){
|
||||
this.getComponent(i).setBackground(this.getBackground());
|
||||
if(this.liste.contains(e))
|
||||
this.liste.remove(e);
|
||||
i++;
|
||||
}
|
||||
this.getComponent(this.etu.size()).setBackground(this.getBackground());
|
||||
}else{
|
||||
int i=0;
|
||||
for(Etudiant e:this.etu){
|
||||
this.getComponent(i).setBackground(Color.GREEN);
|
||||
this.liste.add(e);
|
||||
i++;
|
||||
}
|
||||
this.getComponent(this.etu.size()).setBackground(Color.GREEN);
|
||||
}
|
||||
this.repaint();
|
||||
}
|
||||
}
|
@@ -0,0 +1,85 @@
|
||||
package fr.iutfbleau.projetIHM2022FI2.MP.ROOT.View;
|
||||
|
||||
|
||||
import javax.swing.JButton;
|
||||
import javax.swing.JLabel;
|
||||
import javax.swing.JPanel;
|
||||
import javax.swing.JTextField;
|
||||
import java.awt.GridLayout;
|
||||
import fr.iutfbleau.projetIHM2022FI2.API.Etudiant;
|
||||
import fr.iutfbleau.projetIHM2022FI2.API.Model;
|
||||
import fr.iutfbleau.projetIHM2022FI2.MP.ROOT.Controller.ListenerFindBar;
|
||||
|
||||
import java.awt.Dimension;
|
||||
import java.awt.BorderLayout;
|
||||
import java.util.Set;
|
||||
|
||||
/**
|
||||
* barre de recherche d'etudiant
|
||||
*
|
||||
*/
|
||||
public class FindBarFenetre {
|
||||
// panel de la barre de recherche
|
||||
private JPanel mypanel;
|
||||
// model
|
||||
private Model m;
|
||||
//liste des étudiants trouvés
|
||||
private Set<Etudiant> liste;
|
||||
|
||||
/**
|
||||
* constructeur de la barre de recherche
|
||||
* @param m le model
|
||||
*/
|
||||
public FindBarFenetre(Model m){
|
||||
this.liste=null;
|
||||
this.m=m;
|
||||
this.mypanel=new JPanel();
|
||||
this.draw();
|
||||
}
|
||||
/**
|
||||
* gère l'affichage de la barre de recherche
|
||||
*/
|
||||
private void draw(){
|
||||
JTextField searchField = new JTextField(30);
|
||||
searchField.setLayout(new BorderLayout());
|
||||
JButton label = new JButton("->");
|
||||
label.addActionListener(new ListenerFindBar(this, null));
|
||||
searchField.add(label, BorderLayout.LINE_END);
|
||||
if(this.liste!=null && this.liste.size()>0){
|
||||
this.mypanel.setLayout(new GridLayout(this.liste.size()+1, 1));
|
||||
this.mypanel.add(searchField);
|
||||
for(Etudiant e: this.liste){
|
||||
JButton etu=new JButton(e.getNom()+" "+e.getPrenom()+" "+e.getId());
|
||||
etu.addActionListener(new ListenerFindBar(this, e));
|
||||
this.mypanel.add(etu);
|
||||
}
|
||||
}else{
|
||||
this.mypanel.setLayout(new GridLayout(4, 1));
|
||||
this.mypanel.add(searchField);
|
||||
JLabel text=new JLabel("Aucun Etudiant Selectionné");
|
||||
this.mypanel.add(text);
|
||||
}
|
||||
mypanel.setSize(new Dimension(500, 500));
|
||||
}
|
||||
/**
|
||||
* retourne le panel de la barre de recherche
|
||||
* @return le panel de la barre de recherche
|
||||
*/
|
||||
public JPanel getPanel() {
|
||||
return mypanel;
|
||||
}
|
||||
/**
|
||||
* recherche un étudiant par son nom
|
||||
* @param name le nom de l'étudiant
|
||||
*/
|
||||
public void search(String name){
|
||||
this.liste=this.m.getEtu(name);
|
||||
this.mypanel.removeAll();
|
||||
this.draw();
|
||||
this.mypanel.revalidate();
|
||||
}
|
||||
|
||||
public void showGroupe(Etudiant toshow){
|
||||
this.m.showGroupOfEtudiant(toshow);
|
||||
}
|
||||
}
|
@@ -0,0 +1,54 @@
|
||||
package fr.iutfbleau.projetIHM2022FI2.MP.ROOT.View;
|
||||
|
||||
import javax.swing.JLabel;
|
||||
import javax.swing.JPanel;
|
||||
|
||||
import fr.iutfbleau.projetIHM2022FI2.API.Etudiant;
|
||||
|
||||
import javax.swing.JButton;
|
||||
import java.awt.*;
|
||||
import java.awt.event.ActionListener;
|
||||
|
||||
|
||||
public class PanelEtudiant extends JPanel{
|
||||
|
||||
// bouton suppression
|
||||
private JButton supprimer;
|
||||
// bouton déplacement
|
||||
private JButton deplacer;
|
||||
|
||||
/**
|
||||
* Constructeur du panel d'affichage d'un étudiant
|
||||
* @param e l'étudiant à afficher
|
||||
* @param change si l'étudiant peut être déplacé
|
||||
*/
|
||||
public PanelEtudiant(Etudiant e, boolean change){
|
||||
super(new GridLayout(1,2,20,10));
|
||||
JPanel bouton=new JPanel(new GridLayout(1,2));
|
||||
JLabel label=new JLabel(" "+e.getNom()+" "+e.getPrenom()+" "+e.getId(), JLabel.LEFT);
|
||||
this.supprimer=new JButton("supr");
|
||||
this.supprimer.setForeground(Color.RED);
|
||||
this.deplacer=new JButton("change");
|
||||
if(change==true){
|
||||
bouton.add(this.deplacer);
|
||||
}
|
||||
this.add(label);
|
||||
bouton.add(this.supprimer);
|
||||
this.add(bouton);
|
||||
}
|
||||
/**
|
||||
* Ajoute un listener au bouton de suppression
|
||||
* @param a le listener
|
||||
*/
|
||||
public void addActionDeleteListener(ActionListener a){
|
||||
this.supprimer.addActionListener(a);
|
||||
}
|
||||
|
||||
/**
|
||||
* Ajoute un listener au bouton de changement de groupe
|
||||
* @param a le listener
|
||||
*/
|
||||
public void addActionChangeListener(ActionListener a){
|
||||
this.deplacer.addActionListener(a);
|
||||
}
|
||||
}
|
@@ -0,0 +1,84 @@
|
||||
package fr.iutfbleau.projetIHM2022FI2.Permanent.Controller;
|
||||
import java.awt.event.ActionEvent;
|
||||
import java.awt.event.ActionListener;
|
||||
import java.util.HashSet;
|
||||
import java.util.Set;
|
||||
|
||||
import javax.swing.JButton;
|
||||
import javax.swing.JOptionPane;
|
||||
import javax.swing.JPanel;
|
||||
|
||||
import java.awt.Color;
|
||||
import java.awt.GridLayout;
|
||||
|
||||
import fr.iutfbleau.projetIHM2022FI2.API.Etudiant;
|
||||
import fr.iutfbleau.projetIHM2022FI2.API.Groupe;
|
||||
import fr.iutfbleau.projetIHM2022FI2.API.Model;
|
||||
/**
|
||||
* le controller pour le changement de groupe d'un etudiant
|
||||
*/
|
||||
public class ActionListenerChangeEtu implements ActionListener {
|
||||
// l'etudiant a changer
|
||||
private Etudiant etudiant;
|
||||
// le model
|
||||
private Model model;
|
||||
// le groupe d'arrivée
|
||||
private Groupe B;
|
||||
// les boutons
|
||||
private Set<JButton> bout;
|
||||
// le panel
|
||||
private JPanel myPanel;
|
||||
/**
|
||||
* le constructeur
|
||||
* @param m le model
|
||||
* @param e l'etudiant a changer
|
||||
*/
|
||||
public ActionListenerChangeEtu(Model m, Etudiant e){
|
||||
this.model=m;
|
||||
this.etudiant=e;
|
||||
this.B=null;
|
||||
this.bout=null;
|
||||
myPanel=null;
|
||||
}
|
||||
/**
|
||||
* methode invoquée lors d'un clic sur un bouton
|
||||
* @param e l'événement
|
||||
*/
|
||||
@Override
|
||||
public void actionPerformed(ActionEvent e) {
|
||||
if(this.bout==null){
|
||||
this.bout=new HashSet<>();
|
||||
for(Groupe sous:this.model.getGroupePartition()){
|
||||
JButton bouton=new JButton(sous.getName());
|
||||
bouton.addActionListener(new ControllerGroupeBChangement(sous, this));
|
||||
this.bout.add(bouton);
|
||||
}
|
||||
myPanel = new JPanel(new GridLayout(this.bout.size(), 1));
|
||||
}
|
||||
|
||||
|
||||
for(JButton b: this.bout){
|
||||
myPanel.add(b);
|
||||
}
|
||||
|
||||
if(JOptionPane.showConfirmDialog(this.model.getFenetre(), this.myPanel, "Changer dans quel Groupe ?", JOptionPane.OK_CANCEL_OPTION)==JOptionPane.OK_OPTION){
|
||||
if(this.B!=null)
|
||||
this.model.changeGroupe(this.etudiant, B);
|
||||
}
|
||||
}
|
||||
/**
|
||||
* methode pour changer le groupe d'arrivée
|
||||
* @param b le groupe d'arrivée
|
||||
*/
|
||||
public void setGroupeB(Groupe b){
|
||||
this.B=b;
|
||||
for(JButton bouton: this.bout){
|
||||
if(bouton.getText()==this.B.getName()){
|
||||
bouton.setBackground(Color.GREEN);
|
||||
}else{
|
||||
bouton.setBackground(bouton.getParent().getBackground());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
@@ -0,0 +1,32 @@
|
||||
package fr.iutfbleau.projetIHM2022FI2.Permanent.Controller;
|
||||
|
||||
import java.awt.event.ActionEvent;
|
||||
import java.awt.event.ActionListener;
|
||||
import fr.iutfbleau.projetIHM2022FI2.API.Groupe;
|
||||
/**
|
||||
* le controleur pour le changement de groupe d'arrivée lors d'un changement de groupe
|
||||
*/
|
||||
public class ControllerGroupeBChangement implements ActionListener{
|
||||
// le listener parent
|
||||
private ActionListenerChangeEtu parent;
|
||||
// le groupe d'arrivée
|
||||
private Groupe b;
|
||||
/**
|
||||
* le constructeur
|
||||
* @param b le groupe d'arrivée
|
||||
* @param observateur le listener parent
|
||||
*/
|
||||
public ControllerGroupeBChangement(Groupe b, ActionListenerChangeEtu observateur){
|
||||
this.parent=observateur;
|
||||
this.b=b;
|
||||
}
|
||||
/**
|
||||
* méthode invoquée lors d'un clic sur un bouton
|
||||
* @param e l'événement
|
||||
*/
|
||||
@Override
|
||||
public void actionPerformed(ActionEvent e) {
|
||||
this.parent.setGroupeB(this.b);
|
||||
}
|
||||
|
||||
}
|
@@ -0,0 +1,33 @@
|
||||
package fr.iutfbleau.projetIHM2022FI2.Permanent.Controller;
|
||||
|
||||
import java.awt.event.*;
|
||||
|
||||
import fr.iutfbleau.projetIHM2022FI2.API.Groupe;
|
||||
import fr.iutfbleau.projetIHM2022FI2.API.Model;
|
||||
/**
|
||||
* l'observateur pour le changement de groupe
|
||||
*/
|
||||
public class ObservateurChangeGroupe implements ActionListener{
|
||||
// le model
|
||||
private Model m;
|
||||
// le groupe
|
||||
private Groupe g;
|
||||
/**
|
||||
* le constructeur
|
||||
* @param m le model
|
||||
* @param g le groupe
|
||||
*/
|
||||
public ObservateurChangeGroupe(Model m, Groupe g){
|
||||
this.m=m;
|
||||
this.g=g;
|
||||
}
|
||||
/**
|
||||
* methode invoquée lors d'un clic sur un bouton
|
||||
* @param e l'événement
|
||||
*/
|
||||
@Override
|
||||
public void actionPerformed(ActionEvent e) {
|
||||
m.showGroupe(this.g);
|
||||
}
|
||||
|
||||
}
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user