Ajout Modele Non persisitant

This commit is contained in:
martins 2022-12-03 19:38:26 +01:00
parent 8dd7db7396
commit e628cdfa6f
63 changed files with 5214 additions and 906 deletions

View File

@ -24,7 +24,7 @@ run : build\
# AUTRE BUTS
doc :
javadoc -d doc src/fr/iutfbleau/projetIHM2022FI2/API/*.java src/fr/iutfbleau/projetIHM2022FI2/MNP/*.java src/fr/iutfbleau/projetIHM2022FI2/ROOT/Controller/*.java src/fr/iutfbleau/projetIHM2022FI2/ROOT/View/*.java src/fr/iutfbleau/projetIHM2022FI2/ETU/Controller/*.java src/fr/iutfbleau/projetIHM2022FI2/ETU/View/*.java src/fr/iutfbleau/projetIHM2022FI2/ETU/Model/*.java src/fr/iutfbleau/projetIHM2022FI2/ROOTw/Model/*.java
javadoc -d doc src/fr/iutfbleau/projetIHM2022FI2/API/*.java src/fr/iutfbleau/projetIHM2022FI2/MP/*.java src/fr/iutfbleau/projetIHM2022FI2/MP/ROOT/Controller/*.java src/fr/iutfbleau/projetIHM2022FI2/MP/ROOT/View/*.java src/fr/iutfbleau/projetIHM2022FI2/MP/ETU/Controller/*.java src/fr/iutfbleau/projetIHM2022FI2/MP/ETU/View/*.java src/fr/iutfbleau/projetIHM2022FI2/MP/ETU/Model/*.java src/fr/iutfbleau/projetIHM2022FI2/ROOTw/Model/*.java
clean :
rm -rf ${BUILD}/* *.jar
@ -68,6 +68,198 @@ ${BUILD}/API/AbstractChangementFactory.class : ${SRC}/API/AbstractChangementFact
${BUILD}/API/Changement.class
${JAVAC} ${JAVAC_OPTIONS} ${SRC}/API/AbstractChangementFactory.java
## MP ##
${BUILD}/MP/EtudiantNP.class : ${SRC}/MP/EtudiantNP.java \
${BUILD}/API/Etudiant.class
${JAVAC} ${JAVAC_OPTIONS} ${SRC}/MP/EtudiantNP.java
${BUILD}/MP/GroupeNP.class : ${SRC}/MP/GroupeNP.java \
${BUILD}/API/Groupe.class \
${BUILD}/API/TypeGroupe.class \
${BUILD}/API/Etudiant.class
${JAVAC} ${JAVAC_OPTIONS} ${SRC}/MP/GroupeNP.java
${BUILD}/MP/ChangementNP.class : ${BUILD}/API/Changement.class \
${SRC}/MP/ChangementNP.java \
${BUILD}/API/Groupe.class \
${BUILD}/API/Etudiant.class
${JAVAC} ${JAVAC_OPTIONS} ${SRC}/MP/ChangementNP.java
${BUILD}/MP/AbstractGroupeFactoryNP.class : ${SRC}/MP/AbstractGroupeFactoryNP.java \
${BUILD}/API/AbstractGroupeFactory.class
${JAVAC} ${JAVAC_OPTIONS} ${SRC}/MP/AbstractGroupeFactoryNP.java
${BUILD}/MP/AbstractChangementFactoryNP.class : ${SRC}/MP/AbstractChangementFactoryNP.java \
${BUILD}/API/AbstractChangementFactory.class \
${BUILD}/API/Changement.class
${JAVAC} ${JAVAC_OPTIONS} ${SRC}/MP/AbstractChangementFactoryNP.java
## ROOT ##
## View ##
${BUILD}/MP/ROOT/View/FindBarFenetre.class : ${SRC}/MP/ROOT/View/FindBarFenetre.java\
${BUILD}/MP/ROOT/Controller/ListenerFindBar.class
${JAVAC} ${JAVAC_OPTIONS} ${SRC}/MP/ROOT/View/FindBarFenetre.java
${BUILD}/MP/ROOT/View/FenetreChangement.class : ${SRC}/MP/ROOT/View/FenetreChangement.java \
${BUILD}/MP/ROOT/Controller/ActionChangement.class
${JAVAC} ${JAVAC_OPTIONS} ${SRC}/MP/ROOT/View/FenetreChangement.java
${BUILD}/MP/ROOT/View/FenetreGroupe.class : ${SRC}/MP/ROOT/View/FenetreGroupe.java \
${BUILD}/Permanent/Controller/ObservateurFenetre.class \
${BUILD}/Permanent/Controller/ObservateurChangeGroupe.class \
${BUILD}/MP/ROOT/Controller/ObservateurModifGroupe.class
${JAVAC} ${JAVAC_OPTIONS} ${SRC}/MP/ROOT/View/FenetreGroupe.java
${BUILD}/MP/ROOT/View/FenetreEtudiant.class :${SRC}/MP/ROOT/View/FenetreEtudiant.java \
${BUILD}/Permanent/Controller/ObservateurFenetre.class \
${BUILD}/Permanent/Controller/ObservateurChangeGroupe.class \
${BUILD}/MP/ROOT/View/PanelEtudiant.class \
${BUILD}/Permanent/Controller/ActionListenerChangeEtu.class \
${BUILD}/MP/ROOT/Controller/ActionListChange.class
${JAVAC} ${JAVAC_OPTIONS} ${SRC}/MP/ROOT/View/FenetreEtudiant.java
${BUILD}/MP/ROOT/View/PanelEtudiant.class : ${SRC}/MP/ROOT/View/PanelEtudiant.java \
${BUILD}/MP/ROOT/Controller/ActionListenerSuprEtu.class
${JAVAC} ${JAVAC_OPTIONS} ${SRC}/MP/ROOT/View/PanelEtudiant.java
${BUILD}/MP/ROOT/View/FenetreSelectionEtu.class : ${SRC}/MP/ROOT/View/FenetreSelectionEtu.java \
${BUILD}/MP/ROOT/Controller/SelecteurEtudiant.class \
${BUILD}/MP/ROOT/Controller/ActionListenerNouveauEtu.class
${JAVAC} ${JAVAC_OPTIONS} ${SRC}/MP/ROOT/View/FenetreSelectionEtu.java
## Controller ##
${BUILD}/MP/ROOT/Controller/ListenerFindBar.class : ${SRC}/MP/ROOT/Controller/ListenerFindBar.java
${JAVAC} ${JAVAC_OPTIONS} ${SRC}/MP/ROOT/Controller/ListenerFindBar.java
${BUILD}/MP/ROOT/Controller/ActionListenerSuprEtu.class : ${SRC}/MP/ROOT/Controller/ActionListenerSuprEtu.java \
${BUILD}/API/Etudiant.class
${JAVAC} ${JAVAC_OPTIONS} ${SRC}/MP/ROOT/Controller/ActionListenerSuprEtu.java
${BUILD}/MP/ROOT/Controller/ActionChangement.class : ${SRC}/MP/ROOT/Controller/ActionChangement.java
${JAVAC} ${JAVAC_OPTIONS} ${SRC}/MP/ROOT/Controller/ActionChangement.java
${BUILD}/MP/ROOT/Controller/ObservateurModifGroupe.class : ${SRC}/MP/ROOT/Controller/ObservateurModifGroupe.java \
${BUILD}/MP/ROOT/View/FenetreSelectionEtu.class \
${BUILD}/MP/ROOT/Controller/SelecteurEtudiant.class
${JAVAC} ${JAVAC_OPTIONS} ${SRC}/MP/ROOT/Controller/ObservateurModifGroupe.java
${BUILD}/MP/ROOT/Controller/SelecteurEtudiant.class : ${SRC}/MP/ROOT/Controller/SelecteurEtudiant.java
${JAVAC} ${JAVAC_OPTIONS} ${SRC}/MP/ROOT/Controller/SelecteurEtudiant.java
${BUILD}/MP/ROOT/Controller/ActionListenerNouveauEtu.class : ${SRC}/MP/ROOT/Controller/ActionListenerNouveauEtu.java
${JAVAC} ${JAVAC_OPTIONS} ${SRC}/MP/ROOT/Controller/ActionListenerNouveauEtu.java
${BUILD}/MP/ROOT/Controller/ActionListChange.class : ${SRC}/MP/ROOT/Controller/ActionListChange.java
${JAVAC} ${JAVAC_OPTIONS} ${SRC}/MP/ROOT/Controller/ActionListChange.java
##....
##  Model ###
${BUILD}/MP/ROOT/Model/ModelRoot.class : ${SRC}/MP/ROOT/Model/ModelRoot.java \
${BUILD}/API/Model.class \
${BUILD}/MP/ROOT/View/FenetreGroupe.class \
${BUILD}/MP/ROOT/View/FenetreEtudiant.class \
${BUILD}/Permanent/View/Chargement.class \
${BUILD}/MP/ROOT/View/FenetreChangement.class \
${BUILD}/MP/ROOT/View/FindBarFenetre.class
${JAVAC} ${JAVAC_OPTIONS} ${SRC}/MP/ROOT/Model/ModelRoot.java
## ETU ##
## View ##
${BUILD}/MP/ETU/View/FenetreGroupe.class : ${SRC}/MP/ETU/View/FenetreGroupe.java \
${BUILD}/Permanent/Controller/ObservateurFenetre.class \
${BUILD}/Permanent/Controller/ObservateurChangeGroupe.class
${JAVAC} ${JAVAC_OPTIONS} ${SRC}/MP/ETU/View/FenetreGroupe.java
${BUILD}/MP/ETU/View/FenetreEtudiant.class :${SRC}/MP/ETU/View/FenetreEtudiant.java \
${BUILD}/Permanent/Controller/ObservateurFenetre.class \
${BUILD}/Permanent/Controller/ObservateurChangeGroupe.class \
${BUILD}/MP/ETU/View/PanelEtudiant.class \
${BUILD}/Permanent/Controller/ActionListenerChangeEtu.class
${JAVAC} ${JAVAC_OPTIONS} ${SRC}/MP/ETU/View/FenetreEtudiant.java
${BUILD}/MP/ETU/View/PanelEtudiant.class : ${SRC}/MP/ETU/View/PanelEtudiant.java
${JAVAC} ${JAVAC_OPTIONS} ${SRC}/MP/ETU/View/PanelEtudiant.java
## Controller ##
##....
##  Model ###
${BUILD}/MP/ETU/Model/ModelEtu.class : ${SRC}/MP/ETU/Model/ModelEtu.java \
${BUILD}/API/Model.class \
${BUILD}/MP/ETU/View/FenetreGroupe.class \
${BUILD}/MP/ETU/View/FenetreEtudiant.class \
${BUILD}/Permanent/View/Chargement.class
${JAVAC} ${JAVAC_OPTIONS} ${SRC}/MP/ETU/Model/ModelEtu.java
## PROF ##
## View ##
${BUILD}/MP/PROF/View/FenetreGroupe.class : ${SRC}/MP/PROF/View/FenetreGroupe.java \
${BUILD}/Permanent/Controller/ObservateurFenetre.class \
${BUILD}/Permanent/Controller/ObservateurChangeGroupe.class
${JAVAC} ${JAVAC_OPTIONS} ${SRC}/MP/PROF/View/FenetreGroupe.java
${BUILD}/MP/PROF/View/FenetreEtudiant.class :${SRC}/MP/PROF/View/FenetreEtudiant.java \
${BUILD}/Permanent/Controller/ObservateurChangeGroupe.class \
${BUILD}/MP/PROF/View/PanelEtudiant.class
${JAVAC} ${JAVAC_OPTIONS} ${SRC}/MP/PROF/View/FenetreEtudiant.java
${BUILD}/MP/PROF/View/PanelEtudiant.class : ${SRC}/MP/PROF/View/PanelEtudiant.java
${JAVAC} ${JAVAC_OPTIONS} ${SRC}/MP/PROF/View/PanelEtudiant.java
## Controller ##
##....
##  Model ###
${BUILD}/MP/PROF/Model/ModelProf.class : ${SRC}/MP/PROF/Model/ModelProf.java \
${BUILD}/API/Model.class \
${BUILD}/MP/PROF/View/FenetreGroupe.class \
${BUILD}/MP/PROF/View/FenetreEtudiant.class \
${BUILD}/Permanent/View/Chargement.class
${JAVAC} ${JAVAC_OPTIONS} ${SRC}/MP/PROF/Model/ModelProf.java
## MNP ##
${BUILD}/MNP/EtudiantNP.class : ${SRC}/MNP/EtudiantNP.java \
@ -97,84 +289,85 @@ ${BUILD}/MNP/AbstractChangementFactoryNP.class : ${SRC}/MNP/AbstractChangementFa
${BUILD}/API/Changement.class
${JAVAC} ${JAVAC_OPTIONS} ${SRC}/MNP/AbstractChangementFactoryNP.java
## ROOT ##
## View ##
${BUILD}/ROOT/View/FindBarFenetre.class : ${SRC}/ROOT/View/FindBarFenetre.java\
${BUILD}/ROOT/Controller/ListenerFindBar.class
${JAVAC} ${JAVAC_OPTIONS} ${SRC}/ROOT/View/FindBarFenetre.java
${BUILD}/MNP/ROOT/View/FindBarFenetre.class : ${SRC}/MNP/ROOT/View/FindBarFenetre.java\
${BUILD}/MNP/ROOT/Controller/ListenerFindBar.class
${JAVAC} ${JAVAC_OPTIONS} ${SRC}/MNP/ROOT/View/FindBarFenetre.java
${BUILD}/ROOT/View/FenetreChangement.class : ${SRC}/ROOT/View/FenetreChangement.java \
${BUILD}/ROOT/Controller/ActionChangement.class
${JAVAC} ${JAVAC_OPTIONS} ${SRC}/ROOT/View/FenetreChangement.java
${BUILD}/MNP/ROOT/View/FenetreChangement.class : ${SRC}/MNP/ROOT/View/FenetreChangement.java \
${BUILD}/MNP/ROOT/Controller/ActionChangement.class
${JAVAC} ${JAVAC_OPTIONS} ${SRC}/MNP/ROOT/View/FenetreChangement.java
${BUILD}/ROOT/View/FenetreGroupe.class : ${SRC}/ROOT/View/FenetreGroupe.java \
${BUILD}/MNP/ROOT/View/FenetreGroupe.class : ${SRC}/MNP/ROOT/View/FenetreGroupe.java \
${BUILD}/Permanent/Controller/ObservateurFenetre.class \
${BUILD}/Permanent/Controller/ObservateurChangeGroupe.class \
${BUILD}/ROOT/Controller/ObservateurModifGroupe.class
${JAVAC} ${JAVAC_OPTIONS} ${SRC}/ROOT/View/FenetreGroupe.java
${BUILD}/MNP/ROOT/Controller/ObservateurModifGroupe.class
${JAVAC} ${JAVAC_OPTIONS} ${SRC}/MNP/ROOT/View/FenetreGroupe.java
${BUILD}/ROOT/View/FenetreEtudiant.class :${SRC}/ROOT/View/FenetreEtudiant.java \
${BUILD}/MNP/ROOT/View/FenetreEtudiant.class :${SRC}/MNP/ROOT/View/FenetreEtudiant.java \
${BUILD}/Permanent/Controller/ObservateurFenetre.class \
${BUILD}/Permanent/Controller/ObservateurChangeGroupe.class \
${BUILD}/ROOT/View/PanelEtudiant.class \
${BUILD}/MNP/ROOT/View/PanelEtudiant.class \
${BUILD}/Permanent/Controller/ActionListenerChangeEtu.class \
${BUILD}/ROOT/Controller/ActionListChange.class
${JAVAC} ${JAVAC_OPTIONS} ${SRC}/ROOT/View/FenetreEtudiant.java
${BUILD}/MNP/ROOT/Controller/ActionListChange.class
${JAVAC} ${JAVAC_OPTIONS} ${SRC}/MNP/ROOT/View/FenetreEtudiant.java
${BUILD}/ROOT/View/PanelEtudiant.class : ${SRC}/ROOT/View/PanelEtudiant.java \
${BUILD}/ROOT/Controller/ActionListenerSuprEtu.class
${JAVAC} ${JAVAC_OPTIONS} ${SRC}/ROOT/View/PanelEtudiant.java
${BUILD}/MNP/ROOT/View/PanelEtudiant.class : ${SRC}/MNP/ROOT/View/PanelEtudiant.java \
${BUILD}/MNP/ROOT/Controller/ActionListenerSuprEtu.class
${JAVAC} ${JAVAC_OPTIONS} ${SRC}/MNP/ROOT/View/PanelEtudiant.java
${BUILD}/ROOT/View/FenetreSelectionEtu.class : ${SRC}/ROOT/View/FenetreSelectionEtu.java \
${BUILD}/ROOT/Controller/SelecteurEtudiant.class \
${BUILD}/ROOT/Controller/ActionListenerNouveauEtu.class
${JAVAC} ${JAVAC_OPTIONS} ${SRC}/ROOT/View/FenetreSelectionEtu.java
${BUILD}/MNP/ROOT/View/FenetreSelectionEtu.class : ${SRC}/MNP/ROOT/View/FenetreSelectionEtu.java \
${BUILD}/MNP/ROOT/Controller/SelecteurEtudiant.class \
${BUILD}/MNP/ROOT/Controller/ActionListenerNouveauEtu.class
${JAVAC} ${JAVAC_OPTIONS} ${SRC}/MNP/ROOT/View/FenetreSelectionEtu.java
## Controller ##
${BUILD}/ROOT/Controller/ListenerFindBar.class : ${SRC}/ROOT/Controller/ListenerFindBar.java
${JAVAC} ${JAVAC_OPTIONS} ${SRC}/ROOT/Controller/ListenerFindBar.java
${BUILD}/MNP/ROOT/Controller/ListenerFindBar.class : ${SRC}/MNP/ROOT/Controller/ListenerFindBar.java
${JAVAC} ${JAVAC_OPTIONS} ${SRC}/MNP/ROOT/Controller/ListenerFindBar.java
${BUILD}/ROOT/Controller/ActionListenerSuprEtu.class : ${SRC}/ROOT/Controller/ActionListenerSuprEtu.java \
${BUILD}/MNP/ROOT/Controller/ActionListenerSuprEtu.class : ${SRC}/MNP/ROOT/Controller/ActionListenerSuprEtu.java \
${BUILD}/API/Etudiant.class
${JAVAC} ${JAVAC_OPTIONS} ${SRC}/ROOT/Controller/ActionListenerSuprEtu.java
${JAVAC} ${JAVAC_OPTIONS} ${SRC}/MNP/ROOT/Controller/ActionListenerSuprEtu.java
${BUILD}/ROOT/Controller/ActionChangement.class : ${SRC}/ROOT/Controller/ActionChangement.java
${JAVAC} ${JAVAC_OPTIONS} ${SRC}/ROOT/Controller/ActionChangement.java
${BUILD}/MNP/ROOT/Controller/ActionChangement.class : ${SRC}/MNP/ROOT/Controller/ActionChangement.java
${JAVAC} ${JAVAC_OPTIONS} ${SRC}/MNP/ROOT/Controller/ActionChangement.java
${BUILD}/ROOT/Controller/ObservateurModifGroupe.class : ${SRC}/ROOT/Controller/ObservateurModifGroupe.java \
${BUILD}/ROOT/View/FenetreSelectionEtu.class \
${BUILD}/ROOT/Controller/SelecteurEtudiant.class
${JAVAC} ${JAVAC_OPTIONS} ${SRC}/ROOT/Controller/ObservateurModifGroupe.java
${BUILD}/MNP/ROOT/Controller/ObservateurModifGroupe.class : ${SRC}/MNP/ROOT/Controller/ObservateurModifGroupe.java \
${BUILD}/MNP/ROOT/View/FenetreSelectionEtu.class \
${BUILD}/MNP/ROOT/Controller/SelecteurEtudiant.class
${JAVAC} ${JAVAC_OPTIONS} ${SRC}/MNP/ROOT/Controller/ObservateurModifGroupe.java
${BUILD}/ROOT/Controller/SelecteurEtudiant.class : ${SRC}/ROOT/Controller/SelecteurEtudiant.java
${JAVAC} ${JAVAC_OPTIONS} ${SRC}/ROOT/Controller/SelecteurEtudiant.java
${BUILD}/MNP/ROOT/Controller/SelecteurEtudiant.class : ${SRC}/MNP/ROOT/Controller/SelecteurEtudiant.java
${JAVAC} ${JAVAC_OPTIONS} ${SRC}/MNP/ROOT/Controller/SelecteurEtudiant.java
${BUILD}/ROOT/Controller/ActionListenerNouveauEtu.class : ${SRC}/ROOT/Controller/ActionListenerNouveauEtu.java
${JAVAC} ${JAVAC_OPTIONS} ${SRC}/ROOT/Controller/ActionListenerNouveauEtu.java
${BUILD}/MNP/ROOT/Controller/ActionListenerNouveauEtu.class : ${SRC}/MNP/ROOT/Controller/ActionListenerNouveauEtu.java
${JAVAC} ${JAVAC_OPTIONS} ${SRC}/MNP/ROOT/Controller/ActionListenerNouveauEtu.java
${BUILD}/ROOT/Controller/ActionListChange.class : ${SRC}/ROOT/Controller/ActionListChange.java
${JAVAC} ${JAVAC_OPTIONS} ${SRC}/ROOT/Controller/ActionListChange.java
${BUILD}/MNP/ROOT/Controller/ActionListChange.class : ${SRC}/MNP/ROOT/Controller/ActionListChange.java
${JAVAC} ${JAVAC_OPTIONS} ${SRC}/MNP/ROOT/Controller/ActionListChange.java
##....
##  Model ###
${BUILD}/ROOT/Model/ModelRoot.class : ${SRC}/ROOT/Model/ModelRoot.java \
${BUILD}/MNP/ROOT/Model/ModelRoot.class : ${SRC}/MNP/ROOT/Model/ModelRoot.java \
${BUILD}/API/Model.class \
${BUILD}/ROOT/View/FenetreGroupe.class \
${BUILD}/ROOT/View/FenetreEtudiant.class \
${BUILD}/MNP/ROOT/View/FenetreGroupe.class \
${BUILD}/MNP/ROOT/View/FenetreEtudiant.class \
${BUILD}/Permanent/View/Chargement.class \
${BUILD}/ROOT/View/FenetreChangement.class \
${BUILD}/ROOT/View/FindBarFenetre.class
${JAVAC} ${JAVAC_OPTIONS} ${SRC}/ROOT/Model/ModelRoot.java
${BUILD}/MNP/ROOT/View/FenetreChangement.class \
${BUILD}/MNP/ROOT/View/FindBarFenetre.class
${JAVAC} ${JAVAC_OPTIONS} ${SRC}/MNP/ROOT/Model/ModelRoot.java
@ -186,20 +379,20 @@ ${BUILD}/ROOT/Model/ModelRoot.class : ${SRC}/ROOT/Model/ModelRoot.java \
## View ##
${BUILD}/ETU/View/FenetreGroupe.class : ${SRC}/ETU/View/FenetreGroupe.java \
${BUILD}/MNP/ETU/View/FenetreGroupe.class : ${SRC}/MNP/ETU/View/FenetreGroupe.java \
${BUILD}/Permanent/Controller/ObservateurFenetre.class \
${BUILD}/Permanent/Controller/ObservateurChangeGroupe.class
${JAVAC} ${JAVAC_OPTIONS} ${SRC}/ETU/View/FenetreGroupe.java
${JAVAC} ${JAVAC_OPTIONS} ${SRC}/MNP/ETU/View/FenetreGroupe.java
${BUILD}/ETU/View/FenetreEtudiant.class :${SRC}/ETU/View/FenetreEtudiant.java \
${BUILD}/MNP/ETU/View/FenetreEtudiant.class :${SRC}/MNP/ETU/View/FenetreEtudiant.java \
${BUILD}/Permanent/Controller/ObservateurFenetre.class \
${BUILD}/Permanent/Controller/ObservateurChangeGroupe.class \
${BUILD}/ETU/View/PanelEtudiant.class \
${BUILD}/MNP/ETU/View/PanelEtudiant.class \
${BUILD}/Permanent/Controller/ActionListenerChangeEtu.class
${JAVAC} ${JAVAC_OPTIONS} ${SRC}/ETU/View/FenetreEtudiant.java
${JAVAC} ${JAVAC_OPTIONS} ${SRC}/MNP/ETU/View/FenetreEtudiant.java
${BUILD}/ETU/View/PanelEtudiant.class : ${SRC}/ETU/View/PanelEtudiant.java
${JAVAC} ${JAVAC_OPTIONS} ${SRC}/ETU/View/PanelEtudiant.java
${BUILD}/MNP/ETU/View/PanelEtudiant.class : ${SRC}/MNP/ETU/View/PanelEtudiant.java
${JAVAC} ${JAVAC_OPTIONS} ${SRC}/MNP/ETU/View/PanelEtudiant.java
@ -212,27 +405,75 @@ ${BUILD}/ETU/View/PanelEtudiant.class : ${SRC}/ETU/View/PanelEtudiant.java
##  Model ###
${BUILD}/ETU/Model/ModelEtu.class : ${SRC}/ETU/Model/ModelEtu.java \
${BUILD}/MNP/ETU/Model/ModelEtu.class : ${SRC}/MNP/ETU/Model/ModelEtu.java \
${BUILD}/API/Model.class \
${BUILD}/ETU/View/FenetreGroupe.class \
${BUILD}/ETU/View/FenetreEtudiant.class \
${BUILD}/MNP/ETU/View/FenetreGroupe.class \
${BUILD}/MNP/ETU/View/FenetreEtudiant.class \
${BUILD}/Permanent/View/Chargement.class
${JAVAC} ${JAVAC_OPTIONS} ${SRC}/ETU/Model/ModelEtu.java
${JAVAC} ${JAVAC_OPTIONS} ${SRC}/MNP/ETU/Model/ModelEtu.java
## PROF ##
## View ##
${BUILD}/MNP/PROF/View/FenetreGroupe.class : ${SRC}/MNP/PROF/View/FenetreGroupe.java \
${BUILD}/Permanent/Controller/ObservateurFenetre.class \
${BUILD}/Permanent/Controller/ObservateurChangeGroupe.class
${JAVAC} ${JAVAC_OPTIONS} ${SRC}/MNP/PROF/View/FenetreGroupe.java
${BUILD}/MNP/PROF/View/FenetreEtudiant.class :${SRC}/MNP/PROF/View/FenetreEtudiant.java \
${BUILD}/Permanent/Controller/ObservateurChangeGroupe.class \
${BUILD}/MNP/PROF/View/PanelEtudiant.class
${JAVAC} ${JAVAC_OPTIONS} ${SRC}/MNP/PROF/View/FenetreEtudiant.java
${BUILD}/MNP/PROF/View/PanelEtudiant.class : ${SRC}/MNP/PROF/View/PanelEtudiant.java
${JAVAC} ${JAVAC_OPTIONS} ${SRC}/MNP/PROF/View/PanelEtudiant.java
## Controller ##
##....
##  Model ###
${BUILD}/MNP/PROF/Model/ModelProf.class : ${SRC}/MNP/PROF/Model/ModelProf.java \
${BUILD}/API/Model.class \
${BUILD}/MNP/PROF/View/FenetreGroupe.class \
${BUILD}/MNP/PROF/View/FenetreEtudiant.class \
${BUILD}/Permanent/View/Chargement.class
${JAVAC} ${JAVAC_OPTIONS} ${SRC}/MNP/PROF/Model/ModelProf.java
##... FIN MNP ##
## Permanent ##
${BUILD}/Permanent/Connexion.class : ${SRC}/Permanent/Connexion.java
${JAVAC} ${JAVAC_OPTIONS} ${SRC}/Permanent/View/Connexion.java
${BUILD}/Permanent/TestTexteMNP.class : ${SRC}/Permanent/TestTexteMNP.java \
${BUILD}/MP/EtudiantNP.class \
${BUILD}/MP/GroupeNP.class \
${BUILD}/MP/ChangementNP.class \
${BUILD}/MP/AbstractGroupeFactoryNP.class \
${BUILD}/MP/AbstractChangementFactoryNP.class \
${BUILD}/MP/ROOT/Model/ModelRoot.class \
${BUILD}/MP/ETU/Model/ModelEtu.class \
${BUILD}/MP/PROF/Model/ModelProf.class \
${BUILD}/MNP/EtudiantNP.class \
${BUILD}/MNP/GroupeNP.class \
${BUILD}/MNP/ChangementNP.class \
${BUILD}/MNP/AbstractGroupeFactoryNP.class \
${BUILD}/MNP/AbstractChangementFactoryNP.class \
${BUILD}/ROOT/Model/ModelRoot.class \
${BUILD}/ETU/Model/ModelEtu.class \
${BUILD}/MNP/ROOT/Model/ModelRoot.class \
${BUILD}/MNP/ETU/Model/ModelEtu.class \
${BUILD}/MNP/PROF/Model/ModelProf.class \
${BUILD}/Permanent/View/Connexion.class \
${BUILD}/Permanent/Util/User.class
${JAVAC} ${JAVAC_OPTIONS} ${SRC}/Permanent/TestTexteMNP.java

View File

@ -1,13 +1,5 @@
package fr.iutfbleau.projetIHM2022FI2.MNP;
import fr.iutfbleau.projetIHM2022FI2.API.*;
import java.sql.Connection;
import org.mariadb.jdbc.*;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import java.util.*;
/**
* Usine abstraite gérant l'ensemble des changements.
@ -18,28 +10,15 @@ public class AbstractChangementFactoryNP implements AbstractChangementFactory {
// l'usine à groupe travaillant en tandem avec cette usine.
private AbstractGroupeFactory agf;
private JFrame fenetre;
// On utilise une table de hachage pour retrouver facilement un changement (à partir de son id).
// Si il y a beaucoup de changements c'est plus rapide que de parcourir toute une liste.
private HashMap<Integer,Changement> brain;
public AbstractChangementFactoryNP(AbstractGroupeFactory agf, JFrame fenetre){
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.fenetre=fenetre;
this.brain=new HashMap<Integer,Changement>();
this.getChange();
}
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();
}
@ -56,11 +35,10 @@ public class AbstractChangementFactoryNP implements AbstractChangementFactory {
* @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());
Set<Changement> out = new HashSet(this.brain.values());
return out;
}
@ -86,12 +64,7 @@ public class AbstractChangementFactoryNP implements AbstractChangementFactory {
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);
}
}
this.brain.remove(Integer.valueOf(c.getId()));
}
@ -103,22 +76,9 @@ public class AbstractChangementFactoryNP implements AbstractChangementFactory {
*/
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());
this.brain.remove(Integer.valueOf(c.getId()));
}
/**
@ -136,177 +96,21 @@ public class AbstractChangementFactoryNP implements AbstractChangementFactory {
Objects.requireNonNull(A,"Le groupe d'origine ne peut pas être null");
Objects.requireNonNull(B,"Le groupe d'arrivée ne peut pas être null");
Objects.requireNonNull(e,"L'étudiant ne peut pas être null");
Changement c = new ChangementNP(A,e,B);
this.brain.put(Integer.valueOf(c.getId()),c);
Connection cnx=this.cnx();
try{
PreparedStatement pst=cnx.prepareStatement("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){
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);
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
// ***********************
private Connection cnx(){
//On se Connecte a la BD
try{
Class.forName("org.mariadb.jdbc.Driver");
Connection cnx = DriverManager.getConnection(
"jdbc:mariadb://dwarves.iut-fbleau.fr/chaignea",
"chaignea", "Chaigneauphpmyadmin");
return cnx;
}catch(Exception e){
if(this.erreurCO()==true){
return this.cnx();
}
}
return null;
}
private boolean erreurCO(){
if(JOptionPane.showConfirmDialog(this.fenetre, "erreur connection a la BD reassayer?", "erreur connection", JOptionPane.YES_NO_OPTION)==JOptionPane.YES_OPTION){
return true;
}else{
this.fenetre.dispose();
return false;
}
}
private boolean erreurSQL(){
if(JOptionPane.showConfirmDialog(this.fenetre, "erreur lors de la modification, reasssayer?", "erreur SQL", JOptionPane.YES_NO_OPTION)==JOptionPane.YES_OPTION){
return true;
}else{
return false;
}
}
private void close(AutoCloseable clos){
try{
clos.close();
}catch(Exception e){
if(this.erreurCO()==true)
this.close(clos);
}
}
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);
}
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);
}
}
private void refresh(){
this.brain=new HashMap<Integer,Changement>();
this.getChange();
}
}

View File

@ -12,11 +12,11 @@ public class ChangementNP implements Changement {
//auto-incrément des changements
private static int nextId=0;
private String raison;
private int id;
private Groupe a,b;
private Etudiant e;
private String raison;
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");
@ -39,34 +39,6 @@ public class ChangementNP implements Changement {
this.e=e;
}
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;
}
}
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.
@ -83,7 +55,8 @@ public class ChangementNP implements Changement {
return this.a;
}
/** e
/**
* permet de récupérer le groupe d'arrivée
* @return ce groupe.
*/
public Groupe getB(){

View File

@ -0,0 +1,275 @@
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.MNP.AbstractChangementFactoryNP;
import fr.iutfbleau.projetIHM2022FI2.MNP.AbstractGroupeFactoryNP;
import fr.iutfbleau.projetIHM2022FI2.MNP.ETU.View.FenetreEtudiant;
import fr.iutfbleau.projetIHM2022FI2.MNP.ETU.View.FenetreGroupe;
/**
* Le Model de L'IHM
*/
public class ModelEtu implements Model{
private JPanel panGroupe;
private FenetreGroupe fenGr;
private FenetreEtudiant fenEtu;
private AbstractGroupeFactory promo;
private AbstractChangementFactory changement;
private JFrame fenetre;
private Etudiant Selected;
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;
}
@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
// ******************************
@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());
}
@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;
}
@Override
public boolean addEtudiant(Groupe g, Etudiant e) {
// TODO Auto-generated method stub
return false;
}
@Override
public void delete(Groupe g) {
// TODO Auto-generated method stub
}
@Override
public void rename(String name, Groupe g) {
// TODO Auto-generated method stub
}
@Override
public void partition(Groupe g, int n, String name) {
// TODO Auto-generated method stub
}
@Override
public void free(Groupe g, String name, int min, int max, Set<Etudiant> ajout) {
// TODO Auto-generated method stub
}
@Override
public void addPromo(int min, int max, String name, Set<Etudiant> ajout) {
// TODO Auto-generated method stub
}
@Override
public boolean deleteEtu(Etudiant e) {
// TODO Auto-generated method stub
return false;
}
@Override
public void listChange() {
// TODO Auto-generated method stub
}
@Override
public void change(Changement change) {
// TODO Auto-generated method stub
}
@Override
public void deleteChange(Changement to_delete) {
// TODO Auto-generated method stub
}
@Override
public void showRaisonChange(Changement change) {
// TODO Auto-generated method stub
}
@Override
public void findEtu() {
// TODO Auto-generated method stub
}
@Override
public Set<Etudiant> getEtu(String name) {
// TODO Auto-generated method stub
return null;
}
@Override
public void showGroupOfEtudiant(Etudiant e) {
// TODO Auto-generated method stub
}
}

View File

@ -0,0 +1,66 @@
package fr.iutfbleau.projetIHM2022FI2.MNP.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;
public class FenetreEtudiant{
private Set<Etudiant> etu;
private JPanel pan;
private Etudiant concerner;
private Model model;
private boolean partition;
public FenetreEtudiant(Groupe g, Etudiant e, 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();
}
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"));
}
}
public void refresh(){
this.pan.removeAll();
this.draw();
this.pan.revalidate();
}
public JPanel getPan() {
return pan;
}
}

View File

@ -1,4 +1,4 @@
package fr.iutfbleau.projetIHM2022FI2.ETU.View;
package fr.iutfbleau.projetIHM2022FI2.MNP.ETU.View;
import javax.swing.JButton;
import javax.swing.JLabel;
@ -80,10 +80,6 @@ public class FenetreGroupe{
}
this.pan.add(new JScrollPane(sous));
}
}else{
JButton creer=new JButton("créer une promo");
creer.addActionListener(new ObservateurChangeGroupe(m, g));
this.pan.add(creer);
}
}

View File

@ -0,0 +1,28 @@
package fr.iutfbleau.projetIHM2022FI2.MNP.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{
private JButton deplacer;
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);
}
public void addActionChangeListener(ActionListener a){
this.deplacer.addActionListener(a);
}
}

View File

@ -23,20 +23,6 @@ public class EtudiantNP implements Etudiant{
this.prenom=prenom;
}
/**
* Constructeur pour MPN
*/
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.

View File

@ -34,28 +34,6 @@ public class GroupeNP implements Groupe {
this.membresDuGroupe=new LinkedHashSet<Etudiant>();
}
/**
* Nouveau groupe complet (pour le modèle persisant de donnée)
*/
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
*/
@ -210,13 +188,10 @@ public class GroupeNP implements Groupe {
return this.membresDuGroupe;
}
/**
* Change le nom du groupe
* @param s le nouveau nom
*/
@Override
public void setName(String s){
public void setName(String s) {
this.name=s;
}
}

View File

@ -0,0 +1,240 @@
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.MNP.PROF.View.FenetreEtudiant;
import fr.iutfbleau.projetIHM2022FI2.MNP.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{
private JPanel panGroupe;
private FenetreGroupe fenGr;
private FenetreEtudiant fenEtu;
private AbstractGroupeFactory promo;
private AbstractChangementFactory changement;
private JFrame fenetre;
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;
}
@Override
public Set<Etudiant> getEtudiant(){
return this.promo.getPromotion().getEtudiants();
}
// **************************
// FONCTION POUR LES CHANGEMENTS
// ******************************
@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());
}
@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;
}
@Override
public boolean addEtudiant(Groupe g, Etudiant e) {
// TODO Auto-generated method stub
return false;
}
@Override
public void delete(Groupe g) {
// TODO Auto-generated method stub
}
@Override
public void rename(String name, Groupe g) {
// TODO Auto-generated method stub
}
@Override
public void partition(Groupe g, int n, String name) {
// TODO Auto-generated method stub
}
@Override
public void free(Groupe g, String name, int min, int max, Set<Etudiant> ajout) {
// TODO Auto-generated method stub
}
@Override
public void addPromo(int min, int max, String name, Set<Etudiant> ajout) {
// TODO Auto-generated method stub
}
@Override
public boolean deleteEtu(Etudiant e) {
// TODO Auto-generated method stub
return false;
}
@Override
public void listChange() {
// TODO Auto-generated method stub
}
@Override
public void change(Changement change) {
// TODO Auto-generated method stub
}
@Override
public void deleteChange(Changement to_delete) {
// TODO Auto-generated method stub
}
@Override
public void showRaisonChange(Changement change) {
// TODO Auto-generated method stub
}
@Override
public void findEtu() {
// TODO Auto-generated method stub
}
@Override
public Set<Etudiant> getEtu(String name) {
// TODO Auto-generated method stub
return null;
}
@Override
public void showGroupOfEtudiant(Etudiant e) {
// TODO Auto-generated method stub
}
}

View File

@ -0,0 +1,51 @@
package fr.iutfbleau.projetIHM2022FI2.MNP.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;
public class FenetreEtudiant{
private Set<Etudiant> etu;
private JPanel pan;
public FenetreEtudiant(Groupe g){
this.pan=new JPanel();
if(g!=null){
this.etu=g.getEtudiants();
}else{
this.etu=new LinkedHashSet<>();
}
this.draw();
}
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"));
}
}
public void refresh(){
this.pan.removeAll();
this.draw();
this.pan.revalidate();
}
public JPanel getPan() {
return pan;
}
}

View File

@ -0,0 +1,78 @@
package fr.iutfbleau.projetIHM2022FI2.MNP.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;
public class FenetreGroupe{
private Groupe g;
private JPanel pan;
private Model m;
public FenetreGroupe(Groupe g, Model m){
super();
this.g=g;
this.m=m;
this.pan=new JPanel();
this.draw();
}
public Groupe getG() {
return this.g;
}
public void refresh(){
this.pan.removeAll();
this.draw();
this.pan.revalidate();
}
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));
}
}
}
public void setG(Groupe g) {
this.g = g;
}
public JPanel getPan() {
return pan;
}
}

View File

@ -0,0 +1,16 @@
package fr.iutfbleau.projetIHM2022FI2.MNP.PROF.View;
import javax.swing.JLabel;
import javax.swing.JPanel;
import fr.iutfbleau.projetIHM2022FI2.API.Etudiant;
import java.awt.*;
public class PanelEtudiant extends JPanel{
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);
}
}

View File

@ -0,0 +1,30 @@
package fr.iutfbleau.projetIHM2022FI2.MNP.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;
public class ActionChangement implements ActionListener{
private Model m;
private Changement change;
public ActionChangement(Model m, Changement change){
this.m=m;
this.change=change;
}
@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);
}
}
}

View File

@ -0,0 +1,25 @@
package fr.iutfbleau.projetIHM2022FI2.MNP.ROOT.Controller;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import fr.iutfbleau.projetIHM2022FI2.API.Model;
public class ActionListChange implements ActionListener{
private Model m;
public ActionListChange(Model m){
this.m=m;
}
@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();
}
}
}

View File

@ -0,0 +1,38 @@
package fr.iutfbleau.projetIHM2022FI2.MNP.ROOT.Controller;
import java.awt.event.ActionListener;
import javax.swing.*;
import fr.iutfbleau.projetIHM2022FI2.MNP.ROOT.View.FenetreSelectionEtu;
import java.awt.event.ActionEvent;
public class ActionListenerNouveauEtu implements ActionListener{
private FenetreSelectionEtu pere;
public ActionListenerNouveauEtu(FenetreSelectionEtu pere){
this.pere=pere;
}
@Override
public void actionPerformed(ActionEvent e) {
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());
}
}
}
}

View File

@ -0,0 +1,23 @@
package fr.iutfbleau.projetIHM2022FI2.MNP.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;
public class ActionListenerSuprEtu implements ActionListener {
public Etudiant etudiant;
public Model model;
public ActionListenerSuprEtu(Model m, Etudiant e){
this.model=m;
this.etudiant=e;
}
@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);
}
}
}

View File

@ -0,0 +1,29 @@
package fr.iutfbleau.projetIHM2022FI2.MNP.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.MNP.ROOT.View.FindBarFenetre;
public class ListenerFindBar implements ActionListener{
private FindBarFenetre fenetre;
private Etudiant et;
public ListenerFindBar(FindBarFenetre fenetre, Etudiant e){
this.fenetre=fenetre;
this.et=e;
}
@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);
}
}
}

View File

@ -0,0 +1,170 @@
package fr.iutfbleau.projetIHM2022FI2.MNP.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.MNP.ROOT.View.FenetreSelectionEtu;
import javax.swing.*;
import java.util.Set;
public class ObservateurModifGroupe implements ActionListener{
private Model m;
private Groupe groupe;
public ObservateurModifGroupe(Model m, Groupe g){
this.m=m;
this.groupe=g;
}
@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);
}
}
}
}

View File

@ -0,0 +1,46 @@
package fr.iutfbleau.projetIHM2022FI2.MNP.ROOT.Controller;
import java.awt.Color;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import fr.iutfbleau.projetIHM2022FI2.MNP.ROOT.View.FenetreSelectionEtu;
public class SelecteurEtudiant implements MouseListener{
private FenetreSelectionEtu pere;
private int index;
public SelecteurEtudiant(int index, FenetreSelectionEtu pere){
this.pere=pere;
this.index=index;
}
@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) {
}
}

View File

@ -0,0 +1,396 @@
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.MNP.ROOT.View.FenetreChangement;
import fr.iutfbleau.projetIHM2022FI2.MNP.ROOT.View.FenetreEtudiant;
import fr.iutfbleau.projetIHM2022FI2.MNP.ROOT.View.FenetreGroupe;
import fr.iutfbleau.projetIHM2022FI2.MNP.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{
private JPanel panGroupe;
private FenetreGroupe fenGr;
private FenetreEtudiant fenEtu;
private AbstractGroupeFactory promo;
private AbstractChangementFactory changement;
private FenetreChangement fenChange;
private JFrame fenetre;
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;
}
@Override
public Set<Etudiant> getEtudiant(){
return this.promo.getEtudiants(null);
}
// ***********************
// FONCTION POUR SUPRIMER UN ETUDIANT
// ***********************
@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;
}
}
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);
}
@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());
}
@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());
}
@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()
*/
@Override
public void listChange() {
this.fenChange=new FenetreChangement(changement, this);
JOptionPane.showMessageDialog(this.fenetre, new JScrollPane(this.fenChange), "liste des changements", JOptionPane.OK_OPTION);
}
@Override
public void change(Changement change) {
this.changement.applyChangement(change);
this.fenChange.refresh();
if(change.getA()==this.fenGr.getG()){
this.showGroupe(this.fenGr.getG());
}
}
@Override
public void deleteChange(Changement to_delete) {
this.changement.deleteChangement(to_delete);
this.fenChange.refresh();
}
@Override
public void showRaisonChange(Changement change) {
JOptionPane.showMessageDialog(this.fenetre, new JLabel(change.getRaison()), "Raison de la demande", JOptionPane.OK_OPTION);
}
@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)
*/
@Override
public Set<Etudiant> getEtu(String name) {
return this.promo.getEtudiants(name);
}
@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);
}
}

View File

@ -0,0 +1,62 @@
package fr.iutfbleau.projetIHM2022FI2.MNP.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.MNP.ROOT.Controller.ActionChangement;
public class FenetreChangement extends JPanel{
private AbstractChangementFactory change;
private Model m;
public FenetreChangement(AbstractChangementFactory list, Model m){
this.change=list;
this.m=m;
this.draw();
}
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);
}
}
}
public void refresh(){
this.removeAll();
this.draw();
this.revalidate();
}
}

View File

@ -0,0 +1,80 @@
package fr.iutfbleau.projetIHM2022FI2.MNP.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;
public class FenetreEtudiant{
private Set<Etudiant> etu;
private Model m;
private JPanel pan;
private TypeGroupe type;
public FenetreEtudiant(Groupe g, Model m){
this.pan=new JPanel();
this.m=m;
if(g!=null){
this.type=g.getPointPoint().getType();
this.etu=g.getEtudiants();
}else{
this.type=null;
this.etu=new LinkedHashSet<>();
}
this.draw();
}
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"));
}
}
public void refresh(){
this.pan.removeAll();
this.draw();
this.pan.revalidate();
}
public JPanel getPan() {
return pan;
}
public void listChange(){
this.m.listChange();
}
}

View File

@ -0,0 +1,99 @@
package fr.iutfbleau.projetIHM2022FI2.MNP.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;
public class FenetreGroupe{
private Groupe g;
private JPanel pan;
private Model m;
public FenetreGroupe(Groupe g, Model m){
super();
this.g=g;
this.m=m;
this.pan=new JPanel();
this.draw();
}
public Groupe getG() {
return this.g;
}
public void refresh(){
this.pan.removeAll();
this.draw();
this.pan.revalidate();
}
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);
}
}
public void setG(Groupe g) {
this.g = g;
}
public JPanel getPan() {
return pan;
}
}

View File

@ -1,10 +1,10 @@
package fr.iutfbleau.projetIHM2022FI2.ROOT.View;
package fr.iutfbleau.projetIHM2022FI2.MNP.ROOT.View;
import fr.iutfbleau.projetIHM2022FI2.API.Etudiant;
import fr.iutfbleau.projetIHM2022FI2.API.Groupe;
import fr.iutfbleau.projetIHM2022FI2.MNP.EtudiantNP;
import fr.iutfbleau.projetIHM2022FI2.ROOT.Controller.ActionListenerNouveauEtu;
import fr.iutfbleau.projetIHM2022FI2.ROOT.Controller.SelecteurEtudiant;
import fr.iutfbleau.projetIHM2022FI2.MNP.ROOT.Controller.ActionListenerNouveauEtu;
import fr.iutfbleau.projetIHM2022FI2.MNP.ROOT.Controller.SelecteurEtudiant;
import java.util.Set;
import java.awt.GridLayout;

View File

@ -0,0 +1,66 @@
package fr.iutfbleau.projetIHM2022FI2.MNP.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.MNP.ROOT.Controller.ListenerFindBar;
import java.awt.Dimension;
import java.awt.BorderLayout;
import java.util.Set;
public class FindBarFenetre {
private JPanel mypanel;
private Model m;
private Set<Etudiant> liste;
public FindBarFenetre(Model m){
this.liste=null;
this.m=m;
this.mypanel=new JPanel();
this.draw();
}
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));
}
public JPanel getPanel() {
return mypanel;
}
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);
}
}

View File

@ -0,0 +1,36 @@
package fr.iutfbleau.projetIHM2022FI2.MNP.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{
private JButton supprimer;
private JButton deplacer;
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);
}
public void addActionDeleteListener(ActionListener a){
this.supprimer.addActionListener(a);
}
public void addActionChangeListener(ActionListener a){
this.deplacer.addActionListener(a);
}
}

View File

@ -0,0 +1,312 @@
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;
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();
}
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.
*
* @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.
*
* @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
// ***********************
private Connection cnx(){
//On se Connecte a la BD
try{
Class.forName("org.mariadb.jdbc.Driver");
Connection cnx = DriverManager.getConnection(
"jdbc:mariadb://dwarves.iut-fbleau.fr/chaignea",
"chaignea", "Chaigneauphpmyadmin");
return cnx;
}catch(Exception e){
if(this.erreurCO()==true){
return this.cnx();
}
}
return null;
}
private boolean erreurCO(){
if(JOptionPane.showConfirmDialog(this.fenetre, "erreur connection a la BD reassayer?", "erreur connection", JOptionPane.YES_NO_OPTION)==JOptionPane.YES_OPTION){
return true;
}else{
this.fenetre.dispose();
return false;
}
}
private boolean erreurSQL(){
if(JOptionPane.showConfirmDialog(this.fenetre, "erreur lors de la modification, reasssayer?", "erreur SQL", JOptionPane.YES_NO_OPTION)==JOptionPane.YES_OPTION){
return true;
}else{
return false;
}
}
private void close(AutoCloseable clos){
try{
clos.close();
}catch(Exception e){
if(this.erreurCO()==true)
this.close(clos);
}
}
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);
}
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);
}
}
private void refresh(){
this.brain=new HashMap<Integer,Changement>();
this.getChange();
}
}

View File

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

View File

@ -0,0 +1,143 @@
package fr.iutfbleau.projetIHM2022FI2.API;
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).
private HashMap<Int,Groupe> brain;
/**
*
*/
private Boolean known(Groupe g){
return this.brain.containsKey(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.
*
* @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){
throw new UnsupportedOperationException("pas encore implanté");
}
/**
* 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){
throw new UnsupportedOperationException("pas encore implanté");
}
/**
* 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, N est le nombre max du groupe pere.
*/
public void createPartition(Groupe pere, String name, int n){
throw new UnsupportedOperationException("pas encore implanté");
}
/**
* 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){
throw new UnsupportedOperationException("pas encore implanté");
}
/**
* 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){
// on cherche bêtement dans la promo.
Set<Etudiant> out = new LinkedHashSet<Etudiant>();
for (Etudiant e : getPromotion().getEtudiants()){
if e.getNom().equals(nomEtu){
out.add(e);
break;
}
}
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){
throw new UnsupportedOperationException("pas encore implanté");
}
}

View File

@ -0,0 +1,106 @@
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;
private String raison;
private int id;
private Groupe a,b;
private Etudiant e;
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;
}
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;
}
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;
}
}
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;
}
@Override
public String getRaison() {
return this.raison;
}
}

View File

@ -0,0 +1,60 @@
package fr.iutfbleau.projetIHM2022FI2.MNP;
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 {
private int id;
private Groupe a,b;
private Etudiant e;
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(r,"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");
// Nous n'utilisons dans l'immédiat pas le champs id qui vaut 0 pour tous les changements.
this.id=0;
this.a=a;
this.b=b;
this.e=e;
}
/**
* 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;
}
/**
* permet de récupérer le groupe d'arrivée
* @return ce groupe.
*/
public Groupe getB(){
return this.a;
}
/**
* permet de récupérer l'étudiant demandant le changement
* @return cet étudiant
*/
public Etudiant getEtu(){
return this.e;
}
}

View File

@ -1,4 +1,4 @@
package fr.iutfbleau.projetIHM2022FI2.ETU.Model;
package fr.iutfbleau.projetIHM2022FI2.MP.ETU.Model;
import javax.swing.*;
import java.awt.*;
import java.util.Set;
@ -10,12 +10,12 @@ 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.MNP.AbstractChangementFactoryNP;
import fr.iutfbleau.projetIHM2022FI2.MNP.AbstractGroupeFactoryNP;
import fr.iutfbleau.projetIHM2022FI2.Permanent.Controller.ObservateurFenetre;
import fr.iutfbleau.projetIHM2022FI2.Permanent.View.Chargement;
import fr.iutfbleau.projetIHM2022FI2.ETU.View.FenetreEtudiant;
import fr.iutfbleau.projetIHM2022FI2.ETU.View.FenetreGroupe;
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

View File

@ -1,4 +1,4 @@
package fr.iutfbleau.projetIHM2022FI2.ETU.View;
package fr.iutfbleau.projetIHM2022FI2.MP.ETU.View;
import javax.swing.JLabel;

View File

@ -0,0 +1,96 @@
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;
public class FenetreGroupe{
private Groupe g;
private JPanel pan;
private Model m;
private Set<Groupe> appartient;
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();
}
public Groupe getG() {
return this.g;
}
public void refresh(){
this.pan.removeAll();
this.draw();
this.pan.revalidate();
}
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));
}
}
}
public void setG(Groupe g) {
this.g = g;
}
public void setAppartient(Set<Groupe> appartient) {
this.appartient = appartient;
}
public JPanel getPan() {
return pan;
}
}

View File

@ -1,4 +1,4 @@
package fr.iutfbleau.projetIHM2022FI2.ETU.View;
package fr.iutfbleau.projetIHM2022FI2.MP.ETU.View;
import javax.swing.JLabel;
import javax.swing.JPanel;

View File

@ -0,0 +1,65 @@
package fr.iutfbleau.projetIHM2022FI2.MP;
import fr.iutfbleau.projetIHM2022FI2.API.*;
import java.util.*;
/**
* Un étudiant
*/
public class EtudiantNP implements Etudiant{
private static int nextId=0;
private int id;
private String nom, prenom;
/**
* Constructeur.
*/
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 pour MPN
*/
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;
}
}

View File

@ -0,0 +1,51 @@
package fr.iutfbleau.projetIHM2022FI2.MNP;
import fr.iutfbleau.projetIHM2022FI2.API.*;
import java.util.*;
/**
* Un étudiant
*/
public class EtudiantNP implements Etudiant{
private static nextId=0;
private int id;
private String nom, prenom;
/**
* Constructeur.
*/
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;
}
/**
* 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;
}
}

View File

@ -0,0 +1,222 @@
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;
private String name;
private int min,max;
private TypeGroupe type;
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;
private Set<Etudiant> membresDuGroupe;
/**
* Nouveau groupe vide de type ROOT sans étudiants, sans sous-Groupe
*/
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 complet (pour le modèle persisant de donnée)
*/
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
*/
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).
*
*/
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.
*
* @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.
*
* @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.
*
* @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.
*
* @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;
}
}

View File

@ -0,0 +1,199 @@
package fr.iutfbleau.projetIHM2022FI2.MNP;
import fr.iutfbleau.projetIHM2022FI2.API.*;
import java.util.*;
/**
* Un groupe
*/
public class GroupeNP extends Groupe {
//auto-incrément des groupes. (NB. inutile, mais ça fair un exemple d'attribut statique).
private static nextId=0;
// attributs naturels induits par getter de l'interface Groupe
private int id;
private String name;
private int min,max;
private TypeGroupe type;
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;
private Set<Etudiant> membresDuGroupe;
// les méthodes de l'interface groupe sont en fin de fichier.
// On commence par les get/set additionnels, puis les constructeurs.
/**
* Réfléchir à donner droit dans paquet.
* @return le set des étudiants (attention ce n'est pas une copie, tout changement impacte le groupe).
*/
public Set<Etudiant> getSetEtudiants(){
return this.membresDuGroupe;
}
/**
* Ajoute un étudiant. Se comporte comme add de l'interface Set.
*
* @return true iff e est ajouté
*/
package 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.
*
* @return true iff e est enlevé
*/
package 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.
*
* @return true iff g est ajouté
*/
package 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.
*
* @return true iff e est enlevé
*/
package boolean removeSousGroupe(Groupe g){
Objects.requireNonNull(e,"On ne peut pas enlever un Étudiant qui est null");
return this.souGroupes.remove(g);
}
/**
* Nouveau groupe vide de type PROMOTION sans étudiants, sans sous-Groupe
*/
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.FREE;
this.pointPoint=this;
this.sousGroupes=new LinkedHashSet<Groupe>();
this.membresDugroupe=new LinkedHashSet<Etudiant>();
}
/**
* Nouveau groupe vide de type FREE sans étudiants, sans sous-Groupe
*/
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).
*
*/
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= this.pere.getSetEtudiants();
}
/**
* 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"
* @return un itérateur sur sous-groupes.
*/
public Iterator<Groupe> getSousGroupes(){
return this.sousGroupes.iterator();
}
/**
* Potentiellement "vide"
* @return un itérateur sur les étudiants.
*/
public Iterator<Etudiant> getEtudiants(){
return this.membresDuGroupe.iterator();
}
}

View File

@ -0,0 +1,243 @@
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{
private JPanel panGroupe;
private FenetreGroupe fenGr;
private FenetreEtudiant fenEtu;
private AbstractGroupeFactory promo;
private AbstractChangementFactory changement;
private JFrame fenetre;
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;
}
@Override
public Set<Etudiant> getEtudiant(){
return this.promo.getPromotion().getEtudiants();
}
// **************************
// FONCTION POUR LES CHANGEMENTS
// ******************************
@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());
}
@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;
}
@Override
public boolean addEtudiant(Groupe g, Etudiant e) {
// TODO Auto-generated method stub
return false;
}
@Override
public void delete(Groupe g) {
// TODO Auto-generated method stub
}
@Override
public void rename(String name, Groupe g) {
// TODO Auto-generated method stub
}
@Override
public void partition(Groupe g, int n, String name) {
// TODO Auto-generated method stub
}
@Override
public void free(Groupe g, String name, int min, int max, Set<Etudiant> ajout) {
// TODO Auto-generated method stub
}
@Override
public void addPromo(int min, int max, String name, Set<Etudiant> ajout) {
// TODO Auto-generated method stub
}
@Override
public boolean deleteEtu(Etudiant e) {
// TODO Auto-generated method stub
return false;
}
@Override
public void listChange() {
// TODO Auto-generated method stub
}
@Override
public void change(Changement change) {
// TODO Auto-generated method stub
}
@Override
public void deleteChange(Changement to_delete) {
// TODO Auto-generated method stub
}
@Override
public void showRaisonChange(Changement change) {
// TODO Auto-generated method stub
}
@Override
public void findEtu() {
// TODO Auto-generated method stub
}
@Override
public Set<Etudiant> getEtu(String name) {
// TODO Auto-generated method stub
return null;
}
@Override
public void showGroupOfEtudiant(Etudiant e) {
// TODO Auto-generated method stub
}
}

View File

@ -0,0 +1,51 @@
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;
public class FenetreEtudiant{
private Set<Etudiant> etu;
private JPanel pan;
public FenetreEtudiant(Groupe g){
this.pan=new JPanel();
if(g!=null){
this.etu=g.getEtudiants();
}else{
this.etu=new LinkedHashSet<>();
}
this.draw();
}
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"));
}
}
public void refresh(){
this.pan.removeAll();
this.draw();
this.pan.revalidate();
}
public JPanel getPan() {
return pan;
}
}

View File

@ -0,0 +1,78 @@
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;
public class FenetreGroupe{
private Groupe g;
private JPanel pan;
private Model m;
public FenetreGroupe(Groupe g, Model m){
super();
this.g=g;
this.m=m;
this.pan=new JPanel();
this.draw();
}
public Groupe getG() {
return this.g;
}
public void refresh(){
this.pan.removeAll();
this.draw();
this.pan.revalidate();
}
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));
}
}
}
public void setG(Groupe g) {
this.g = g;
}
public JPanel getPan() {
return pan;
}
}

View File

@ -0,0 +1,16 @@
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{
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);
}
}

View File

@ -1,4 +1,4 @@
package fr.iutfbleau.projetIHM2022FI2.ROOT.Controller;
package fr.iutfbleau.projetIHM2022FI2.MP.ROOT.Controller;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

View File

@ -1,4 +1,4 @@
package fr.iutfbleau.projetIHM2022FI2.ROOT.Controller;
package fr.iutfbleau.projetIHM2022FI2.MP.ROOT.Controller;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

View File

@ -1,10 +1,10 @@
package fr.iutfbleau.projetIHM2022FI2.ROOT.Controller;
package fr.iutfbleau.projetIHM2022FI2.MP.ROOT.Controller;
import java.awt.event.ActionListener;
import javax.swing.*;
import fr.iutfbleau.projetIHM2022FI2.ROOT.View.FenetreSelectionEtu;
import fr.iutfbleau.projetIHM2022FI2.MP.ROOT.View.FenetreSelectionEtu;
import java.awt.event.ActionEvent;

View File

@ -1,4 +1,4 @@
package fr.iutfbleau.projetIHM2022FI2.ROOT.Controller;
package fr.iutfbleau.projetIHM2022FI2.MP.ROOT.Controller;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

Some files were not shown because too many files have changed in this diff Show More