From e628cdfa6f9c9b671a8c8bdcd2c8ef69f31a3ba2 Mon Sep 17 00:00:00 2001 From: martins Date: Sat, 3 Dec 2022 19:38:26 +0100 Subject: [PATCH] Ajout Modele Non persisitant --- java/APIGroupe/Makefile | 357 +++++++-- .../MNP/AbstractChangementFactoryNP.java | 224 +----- .../MNP/AbstractGroupeFactoryNP.java | 540 +------------ .../projetIHM2022FI2/MNP/ChangementNP.java | 37 +- .../MNP/ETU/Model/ModelEtu.java | 275 +++++++ .../MNP/ETU/View/FenetreEtudiant.java | 66 ++ .../{ => MNP}/ETU/View/FenetreGroupe.java | 6 +- .../MNP/ETU/View/PanelEtudiant.java | 28 + .../projetIHM2022FI2/MNP/EtudiantNP.java | 14 - .../projetIHM2022FI2/MNP/GroupeNP.java | 31 +- .../MNP/PROF/Model/ModelProf.java | 240 ++++++ .../MNP/PROF/View/FenetreEtudiant.java | 51 ++ .../MNP/PROF/View/FenetreGroupe.java | 78 ++ .../MNP/PROF/View/PanelEtudiant.java | 16 + .../MNP/ROOT/Controller/ActionChangement.java | 30 + .../MNP/ROOT/Controller/ActionListChange.java | 25 + .../Controller/ActionListenerNouveauEtu.java | 38 + .../Controller/ActionListenerSuprEtu.java | 23 + .../MNP/ROOT/Controller/ListenerFindBar.java | 29 + .../Controller/ObservateurModifGroupe.java | 170 +++++ .../ROOT/Controller/SelecteurEtudiant.java | 46 ++ .../MNP/ROOT/Model/ModelRoot.java | 396 ++++++++++ .../MNP/ROOT/View/FenetreChangement.java | 62 ++ .../MNP/ROOT/View/FenetreEtudiant.java | 80 ++ .../MNP/ROOT/View/FenetreGroupe.java | 99 +++ .../ROOT/View/FenetreSelectionEtu.java | 6 +- .../MNP/ROOT/View/FindBarFenetre.java | 66 ++ .../MNP/ROOT/View/PanelEtudiant.java | 36 + .../MP/AbstractChangementFactoryNP.java | 312 ++++++++ .../MP/AbstractGroupFactoryNP.java~ | 106 +++ .../MP/AbstractGroupeFactoryNP.java | 718 ++++++++++++++++++ .../MP/AbstractGroupeFactoryNP.java~ | 143 ++++ .../projetIHM2022FI2/MP/ChangementNP.java | 106 +++ .../projetIHM2022FI2/MP/ChangementNP.java~ | 60 ++ .../{ => MP}/ETU/Model/ModelEtu.java | 10 +- .../{ => MP}/ETU/View/FenetreEtudiant.java | 2 +- .../MP/ETU/View/FenetreGroupe.java | 96 +++ .../{ => MP}/ETU/View/PanelEtudiant.java | 2 +- .../projetIHM2022FI2/MP/EtudiantNP.java | 65 ++ .../projetIHM2022FI2/MP/EtudiantNP.java~ | 51 ++ .../projetIHM2022FI2/MP/GroupeNP.java | 222 ++++++ .../projetIHM2022FI2/MP/GroupeNP.java~ | 199 +++++ .../MP/PROF/Model/ModelProf.java | 243 ++++++ .../MP/PROF/View/FenetreEtudiant.java | 51 ++ .../MP/PROF/View/FenetreGroupe.java | 78 ++ .../MP/PROF/View/PanelEtudiant.java | 16 + .../ROOT/Controller/ActionChangement.java | 2 +- .../ROOT/Controller/ActionListChange.java | 2 +- .../Controller/ActionListenerNouveauEtu.java | 4 +- .../Controller/ActionListenerSuprEtu.java | 2 +- .../ROOT/Controller/ListenerFindBar.java | 4 +- .../Controller/ObservateurModifGroupe.java | 4 +- .../ROOT/Controller/SelecteurEtudiant.java | 4 +- .../{ => MP}/ROOT/Model/ModelRoot.java | 15 +- .../{ => MP}/ROOT/View/FenetreChangement.java | 4 +- .../{ => MP}/ROOT/View/FenetreEtudiant.java | 6 +- .../{ => MP}/ROOT/View/FenetreGroupe.java | 4 +- .../MP/ROOT/View/FenetreSelectionEtu.java | 108 +++ .../{ => MP}/ROOT/View/FindBarFenetre.java | 5 +- .../{ => MP}/ROOT/View/PanelEtudiant.java | 2 +- .../MP/ReservationFactoryNP.java~ | 164 ++++ .../Permanent/TestTexteMNP.java | 199 ++++- .../Permanent/View/Connexion.java | 42 +- 63 files changed, 5214 insertions(+), 906 deletions(-) create mode 100644 java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MNP/ETU/Model/ModelEtu.java create mode 100644 java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MNP/ETU/View/FenetreEtudiant.java rename java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/{ => MNP}/ETU/View/FenetreGroupe.java (93%) create mode 100644 java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MNP/ETU/View/PanelEtudiant.java create mode 100644 java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MNP/PROF/Model/ModelProf.java create mode 100644 java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MNP/PROF/View/FenetreEtudiant.java create mode 100644 java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MNP/PROF/View/FenetreGroupe.java create mode 100644 java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MNP/PROF/View/PanelEtudiant.java create mode 100644 java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MNP/ROOT/Controller/ActionChangement.java create mode 100644 java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MNP/ROOT/Controller/ActionListChange.java create mode 100644 java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MNP/ROOT/Controller/ActionListenerNouveauEtu.java create mode 100644 java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MNP/ROOT/Controller/ActionListenerSuprEtu.java create mode 100644 java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MNP/ROOT/Controller/ListenerFindBar.java create mode 100644 java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MNP/ROOT/Controller/ObservateurModifGroupe.java create mode 100644 java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MNP/ROOT/Controller/SelecteurEtudiant.java create mode 100644 java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MNP/ROOT/Model/ModelRoot.java create mode 100644 java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MNP/ROOT/View/FenetreChangement.java create mode 100644 java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MNP/ROOT/View/FenetreEtudiant.java create mode 100644 java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MNP/ROOT/View/FenetreGroupe.java rename java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/{ => MNP}/ROOT/View/FenetreSelectionEtu.java (93%) create mode 100644 java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MNP/ROOT/View/FindBarFenetre.java create mode 100644 java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MNP/ROOT/View/PanelEtudiant.java create mode 100644 java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MP/AbstractChangementFactoryNP.java create mode 100644 java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MP/AbstractGroupFactoryNP.java~ create mode 100644 java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MP/AbstractGroupeFactoryNP.java create mode 100644 java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MP/AbstractGroupeFactoryNP.java~ create mode 100644 java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MP/ChangementNP.java create mode 100644 java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MP/ChangementNP.java~ rename java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/{ => MP}/ETU/Model/ModelEtu.java (96%) rename java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/{ => MP}/ETU/View/FenetreEtudiant.java (97%) create mode 100644 java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MP/ETU/View/FenetreGroupe.java rename java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/{ => MP}/ETU/View/PanelEtudiant.java (94%) create mode 100644 java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MP/EtudiantNP.java create mode 100644 java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MP/EtudiantNP.java~ create mode 100644 java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MP/GroupeNP.java create mode 100644 java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MP/GroupeNP.java~ create mode 100644 java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MP/PROF/Model/ModelProf.java create mode 100644 java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MP/PROF/View/FenetreEtudiant.java create mode 100644 java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MP/PROF/View/FenetreGroupe.java create mode 100644 java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MP/PROF/View/PanelEtudiant.java rename java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/{ => MP}/ROOT/Controller/ActionChangement.java (93%) rename java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/{ => MP}/ROOT/Controller/ActionListChange.java (90%) rename java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/{ => MP}/ROOT/Controller/ActionListenerNouveauEtu.java (89%) rename java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/{ => MP}/ROOT/Controller/ActionListenerSuprEtu.java (92%) rename java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/{ => MP}/ROOT/Controller/ListenerFindBar.java (85%) rename java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/{ => MP}/ROOT/Controller/ObservateurModifGroupe.java (98%) rename java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/{ => MP}/ROOT/Controller/SelecteurEtudiant.java (88%) rename java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/{ => MP}/ROOT/Model/ModelRoot.java (96%) rename java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/{ => MP}/ROOT/View/FenetreChangement.java (94%) rename java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/{ => MP}/ROOT/View/FenetreEtudiant.java (91%) rename java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/{ => MP}/ROOT/View/FenetreGroupe.java (96%) create mode 100644 java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MP/ROOT/View/FenetreSelectionEtu.java rename java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/{ => MP}/ROOT/View/FindBarFenetre.java (93%) rename java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/{ => MP}/ROOT/View/PanelEtudiant.java (95%) create mode 100644 java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MP/ReservationFactoryNP.java~ diff --git a/java/APIGroupe/Makefile b/java/APIGroupe/Makefile index edf050f..9b7b305 100644 --- a/java/APIGroupe/Makefile +++ b/java/APIGroupe/Makefile @@ -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/AbstractGroupeFactoryNP.class \ + ${BUILD}/MNP/AbstractChangementFactoryNP.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 diff --git a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MNP/AbstractChangementFactoryNP.java b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MNP/AbstractChangementFactoryNP.java index c7e92ab..6957459 100644 --- a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MNP/AbstractChangementFactoryNP.java +++ b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MNP/AbstractChangementFactoryNP.java @@ -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 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(); - this.getChange(); - } - - public AbstractChangementFactoryNP(AbstractGroupeFactory agf, JFrame fenetre, Set 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(); - for(Changement ch:liste){ - this.brain.put(ch.getId(), ch); - } - this.getChange(); + this.brain=new HashMap(); } @@ -56,11 +35,10 @@ public class AbstractChangementFactoryNP implements AbstractChangementFactory { * @return l'ensemble de tous les changements en attente */ public Set 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 out = new HashSet(this.brain.values()); + Set 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); + this.brain.put(Integer.valueOf(c.getId()),c); } + @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(); - this.getChange(); - } - - } diff --git a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MNP/AbstractGroupeFactoryNP.java b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MNP/AbstractGroupeFactoryNP.java index da03bfb..8bab6b7 100644 --- a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MNP/AbstractGroupeFactoryNP.java +++ b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MNP/AbstractGroupeFactoryNP.java @@ -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 groupes. @@ -18,75 +10,34 @@ public class AbstractGroupeFactoryNP implements AbstractGroupeFactory { // la racine (promotion) private Groupe promo; - - //la fentre pour les fenetre modale - private JFrame fenetre; // On utilise une table de hachage pour retrouver facilement un groupe (à partir de son id). // Si il y a beaucoup de groupes c'est plus rapide que de parcourir toute une liste. private HashMap brain; - /** - * Le constructeur fabrique le groupe promotion déja plein (utilisé en Modèle persistant de donné). - */ - public AbstractGroupeFactoryNP(JFrame fenetre){ - this.fenetre=fenetre; - this.brain=new HashMap(); - this.init(); - } + + /** * Le constructeur fabrique le groupe promotion vide. * Il faut ensuite y ajouter les étudiants. */ - public AbstractGroupeFactoryNP(String name, int min, int max, JFrame fenetre){ + public AbstractGroupeFactoryNP(String name, int min, int max){ Objects.requireNonNull(name,"On ne peut pas créer une promotion dont le nom est null"); this.promo=new GroupeNP(name,min,max); - this.fenetre=fenetre; this.brain=new HashMap(); this.brain.put(Integer.valueOf(this.promo.getId()),this.promo); - this.saveGroupe(promo); } - /** * Test plutôt optimiste. Si la clé est identique alors on fait comme si c'était le bon groupe. - * - * @return true si le groupe est connu */ public Boolean knows(Groupe g){ return this.brain.containsKey(Integer.valueOf(g.getId())); } - - public boolean changeNameGroupe(Groupe g, String name){ - if(!this.knows(g)){ - throw new IllegalArgumentException("Groupe inconu "); - } - Connection cnx=this.cnx(); - try{ - PreparedStatement pst=cnx.prepareStatement( - "UPDATE `Groupe` SET `nom` = ? WHERE `Groupe`.`id` = ? " - ); - pst.setString(1, name); - pst.setInt(2, g.getId()); - pst.executeUpdate(); - pst.close(); - }catch(SQLException e){ - System.out.println(e.toString()); - if(this.erreurSQL()){ - this.changeNameGroupe(g, name); - }else{ - return false; - } - } - this.close(cnx); - g.setName(name); - return true; - } - - - + + /** * permet de récupérer le Groupe qui contient les étudiants de toute la promotion * @return la promo. @@ -108,9 +59,14 @@ public class AbstractGroupeFactoryNP implements AbstractGroupeFactory { if (!this.knows(g)){ throw new IllegalArgumentException("Impossible d'enlever un groupe inconnu"); } + if (this.getPromotion().equals(g)){ + throw new IllegalArgumentException("Impossible de détruire le groupe de toute la promotion"); + } + if (g.getSize()>0){ + throw new IllegalStateException("Impossible de détruire un groupe contenant un groupe"); + } g.getPointPoint().removeSousGroupe(g); this.brain.remove(Integer.valueOf(g.getId())); - this.suprGroupe(g); } /** @@ -126,9 +82,8 @@ public class AbstractGroupeFactoryNP implements AbstractGroupeFactory { public void createGroupe(Groupe pere, String name, int min, int max){ Objects.requireNonNull(pere,"Le groupe pere ne peut pas être null"); Objects.requireNonNull(name,"Le nouveau groupe ne peut pas avoir null comme nom"); - if (!this.knows(pere)){ - throw new IllegalArgumentException("Interdit d'ajouter un fils à un groupe inconnu"); + throw new IllegalArgumentException("Interdit d'ajouter un fils à un groupe inconnu"); } if (pere.getType().equals(TypeGroupe.PARTITION)){ throw new IllegalArgumentException("Impossible d'ajouter un groupe à une parition. Il faut utiliser createPartition pour créer une partition"); @@ -136,11 +91,9 @@ public class AbstractGroupeFactoryNP implements AbstractGroupeFactory { if ( min <= 0 || max < min){ throw new IllegalArgumentException("Il faut que 0 < min <= max"); } - Groupe g = new GroupeNP(pere,name,min,max); pere.addSousGroupe(g); this.brain.put(Integer.valueOf(g.getId()),g); - this.saveGroupe(g); } /** @@ -192,7 +145,6 @@ public class AbstractGroupeFactoryNP implements AbstractGroupeFactory { groupes.get(i).addEtudiant(s); i = (i+1) %n; } - this.saveGroupe(copiePereRacinePartition); } /** @@ -212,7 +164,6 @@ public class AbstractGroupeFactoryNP implements AbstractGroupeFactory { throw new IllegalArgumentException("Impossible d'ajouter l'étudiant car le est groupe inconnu"); } g.addEtudiant(e); - this.saveEtu(e, g); } /** @@ -229,10 +180,9 @@ public class AbstractGroupeFactoryNP implements AbstractGroupeFactory { Objects.requireNonNull(g,"Le groupe ne peut pas être null"); Objects.requireNonNull(e,"L'étudiant ne peut pas être null"); if (!this.knows(g)){ - throw new IllegalArgumentException("Impossible de suprimer l'étudiant car le est groupe inconnu"); + throw new IllegalArgumentException("Impossible d'ajouter l'étudiant car le est groupe inconnu"); } g.removeEtudiant(e); - this.deleteEtu(e, g); } /** @@ -248,37 +198,15 @@ public class AbstractGroupeFactoryNP implements AbstractGroupeFactory { * @throws java.lang.NullPointerException si le String est null. */ public Set getEtudiants(String nomEtu){ - Set s=new LinkedHashSet<>(); - //on retourne tous les etudiants - if(nomEtu==null){ - if(this.getPromotion()!=null){ - for(Etudiant et:this.getPromotion().getEtudiants()){ - s.add(et); + // on cherche bêtement dans la promo. + Set out = new LinkedHashSet(); + for (Etudiant e : getPromotion().getEtudiants()){ + if (e.getNom().equals(nomEtu)){ + out.add(e); + break; } - } - //ceux qui sont connu mais pas dans la promo - Connection cnx=this.cnx(); - try{ - PreparedStatement pst=cnx.prepareStatement("SELECT * FROM Etudiant where Etudiant.id NOT IN (SELECT CONTIENT.idEt FROM CONTIENT) Group by Etudiant.id;"); - ResultSet rs=pst.executeQuery(); - while(rs.next()){ - s.add(new EtudiantNP(rs.getString(2), rs.getString(3), rs.getInt(1))); - } - }catch(SQLException e){ - System.out.println(e.toString()); - if(this.erreurCO()) - return this.getEtudiants(nomEtu); - return null; - } - this.close(cnx); - }else{ - for(Etudiant e:this.getPromotion().getEtudiants()){ - if((e.getNom()).contains(nomEtu)){ - s.add(e); - } - } } - return s; + return out; } /** @@ -290,429 +218,19 @@ public class AbstractGroupeFactoryNP implements AbstractGroupeFactory { * @throws java.lang.NullPointerException si le String est null. */ public Set getGroupesOfEtudiant(Etudiant etu){ - if(etu==null) - throw new NullPointerException(); - Set ret=new LinkedHashSet(); - Connection cnx=this.cnx(); - try{ - PreparedStatement pst=cnx.prepareStatement("SELECT `idGroupe` FROM CONTIENT where idEt=? Group by `idGroupe`;"); - pst.setInt(1, etu.getId()); - ResultSet rs=pst.executeQuery(); - while(rs.next()){ - ret.add(this.brain.get(rs.getInt(1))); - } - rs.close(); - pst.close(); - }catch(SQLException e){ - - } - this.close(cnx); - return ret; + throw new UnsupportedOperationException("pas encore implanté"); } - // ********************** - // 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){ - System.out.println(e.toString()); - 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 deleteEtu(Etudiant et, Groupe g){ - Connection cnx=this.cnx(); - try{ - PreparedStatement pst=cnx.prepareStatement( - "DELETE FROM CONTIENT WHERE idGroupe=? AND idEt=?; " - ); - pst.setInt(2, et.getId()); - this.deleteEtu(pst, cnx, g.getId()); - pst.close(); - }catch(SQLException e){ - System.out.println(e.toString()); - if(this.erreurSQL()){ - this.deleteEtu(et, brain.get(g.getId())); - } - } - this.close(cnx); - } - - private void deleteEtu(PreparedStatement pst, Connection cnx, int id){ - try{ - pst.setInt(1, id); - pst.executeUpdate(); - - PreparedStatement sous=cnx.prepareStatement( - "SELECT * FROM Groupe WHERE `id-parent`=? AND `id-parent`!=id; " - ); - sous.setInt(1, id); - ResultSet rs=sous.executeQuery(); - while(rs.next()){ - this.deleteEtu(pst, cnx, rs.getInt(1)); - } - }catch(SQLException e){ - System.out.println(e.toString()); - if(this.erreurSQL()){ - this.deleteEtu(pst, cnx, id); - } - } - } - - private void close(AutoCloseable clos){ - try{ - clos.close(); - }catch(Exception e){ - System.out.println(e.toString()); - if(this.erreurCO()==true) - this.close(clos); - } - } - - -private boolean saveEtu(Etudiant etudiant, Groupe g){ - Connection cnx = this.cnx(); - try{ - PreparedStatement pst=cnx.prepareStatement( - "Select id from Etudiant where id=?; "); - pst.setString(1, String.valueOf(etudiant.getId())); - ResultSet rs=pst.executeQuery(); - if(rs.next()){ - //L'etudiant est déja connu de la BD - pst.close(); - pst=cnx.prepareStatement( - "INSERT INTO `CONTIENT` (`idGroupe`, `idEt`) VALUES (?, ?);"); - pst.setInt(2, etudiant.getId()); - pst.setInt(1, g.getId()); - pst.executeUpdate(); - }else{ - pst.close(); - pst=cnx.prepareStatement( - "INSERT INTO `Etudiant` (`id`, `nom`, `prenom`) VALUES (?, ?, ?) ;"); - pst.setInt(1, etudiant.getId()); - pst.setString(2, etudiant.getNom()); - pst.setString(3, etudiant.getPrenom()); - pst.executeUpdate(); - } - rs.close(); - pst.close(); - }catch(SQLException e){ - System.out.println(e.toString()); - if(this.erreurSQL()){ - this.saveEtu(etudiant, g); - }else{ - return false; - } - } - this.close(cnx); - return true; - } - - private boolean saveGroupe(Groupe g){ - Connection cnx=this.cnx(); - try{ - PreparedStatement pst=cnx.prepareStatement( - "INSERT INTO `Groupe` (`id`, `nom`, `min`, `max`, `Type`, `id-parent`) VALUES (?, ?, ?, ?, ?, ?);" - ); - pst.setInt(1, g.getId()); - pst.setString(2, g.getName()); - pst.setInt(3, g.getMin()); - pst.setInt(4, g.getMax()); - pst.setString(5, g.getType().name()); - pst.setInt(6, g.getPointPoint().getId()); - pst.executeUpdate(); - pst.close(); - for(Etudiant e: g.getEtudiants()){ - this.saveEtu(e, g); - } - for(Groupe sous:g.getSousGroupes()){ - this.saveGroupe(sous); - } - }catch(SQLException e){ - System.out.println(e.toString()); - if(this.erreurSQL()){ - this.saveGroupe(g); - }else{ - return false; - } - } - this.close(cnx); - return true; - } - - private boolean suprGroupe(Groupe g){ - Connection cnx=this.cnx(); - try{ - PreparedStatement pst=cnx.prepareStatement("Delete FROM Groupe where id=?;"); - pst.setInt(1, g.getId()); - pst.executeUpdate(); - pst.close(); - pst=cnx.prepareStatement("Delete FROM CONTIENT where idGroupe=?;"); - pst.setInt(1, g.getId()); - pst.executeUpdate(); - pst.close(); - }catch(SQLException e){ - System.out.println(e.toString()); - if(this.erreurSQL()){ - this.suprGroupe(g); - }else{ - return false; - } - } - this.close(cnx); + @Override + public boolean changeNameGroupe(Groupe g, String name) { + g.setName(name); return true; } - - - /***************************** - * FONCTION POUR INITIALISER LA FACTORY AVEC LA BD - * ******************************** - */ - private void init(){ - Connection cnx=this.cnx(); - //on récupère le Groupe de la BD n'ayant pas de Parent (La promo donc) - try{ - PreparedStatement pst = cnx.prepareStatement( - "SELECT `id`, `nom`, `min`, `max`, `value`, `id-parent` FROM `Groupe` join `TYPE` on Groupe.Type=TYPE.name ORDER BY Groupe.id ASC;"); - ResultSet rs = pst.executeQuery(); - rs=pst.executeQuery(); - //Si il existe bien une promotion - if(rs.next()){ - //On créer le groupe de promo - this.promo=new GroupeNP(rs.getInt(1), rs.getString(2), rs.getInt(3), rs.getInt(4), TypeGroupe.getType(rs.getString(5)), null); - //on ajoute au cerveau - this.brain.put(this.promo.getId(), this.promo); - //On lui ajoute tout ses sous-groupe - this.addSousGroupe(this.promo, cnx); - //On ajoute les étudiants: - for(Groupe sous: this.brain.values()){ - this.addBDEtudiant(sous, cnx); - } - }else{ - //Si aucune ligne et donc pas de promo: - this.promo=null; - } - rs.close(); - pst.close(); - }catch(SQLException e){ - System.out.println(e.toString()); - if(this.erreurCO()) - this.init(); - } - this.close(cnx); - } - - /** - * Fonction recursive permettant de récuperrer les sous groupe a partir de la BD - * @param g le groupe - * @param cnx la connection a la BD (evite de la surcharger) - * @param pourcent le pourcentage de ce groupe dans le chargement - */ - private void addSousGroupe(Groupe g, Connection cnx){ - try{ - //On récupere les Groupe qui ont le parent :g - PreparedStatement pst= cnx.prepareStatement( - "SELECT `id`, `nom`, `min`, `max`, `value`, `id-parent` FROM `Groupe` join `TYPE` on Groupe.Type=TYPE.name where Groupe.`id-parent`=? and Groupe.id!=Groupe.`id-parent`;"); - pst.setString(1, String.valueOf(g.getId())); - ResultSet rs=pst.executeQuery(); - rs=pst.executeQuery(); - //autrement si le groupe as des sous groupe - while(rs.next()){ - //on les ajoute - Groupe nouveau=new GroupeNP(rs.getInt(1), rs.getString(2), rs.getInt(3), rs.getInt(4), TypeGroupe.getType(rs.getString(5)), g); - //Si one le connait pas - if(this.brain.get(nouveau.getId())==null){ - this.brain.put(nouveau.getId(), nouveau); - } - g.addSousGroupe(nouveau); - this.addSousGroupe(nouveau, cnx); - //on ajoute les sous groupe des sous-groupe - } - rs.close(); - }catch(SQLException e){ - System.out.println(e); - if(this.erreurCO()) - this.addSousGroupe(g, cnx); - } - } - - /** - * Fonction recursive ajoutant les étudiant aux groupe de la promo - * @param g le groupe pour qui ajouter les Etudiant - * @param cnx la connection (evite de surcharger la BD) - */ - private void addBDEtudiant(Groupe g, Connection cnx){ - try{ - //On récupère les etudiants contenue du groupe - PreparedStatement pst; - //Si c'est la promo - pst= cnx.prepareStatement("SELECT Etudiant.nom, Etudiant.prenom, Etudiant.id FROM `CONTIENT` JOIN Etudiant on CONTIENT.idEt=Etudiant.id WHERE CONTIENT.idGroupe=? ORDER BY Etudiant.id ASC"); - pst.setInt(1, g.getId()); - ResultSet rs=pst.executeQuery(); - //Pour tous les étudiants - while(rs.next()){ - boolean exist=false; - //autrement on recupere l'etudiant - for(Etudiant e: g.getPointPoint().getEtudiants()){ - if(e.getId()==rs.getInt(3)){ - exist=true; - g.addEtudiant(e); - break; - } - } - if(exist==false){ - g.addEtudiant(new EtudiantNP(rs.getString(1), rs.getString(2), rs.getInt(3))); - } - } - rs.close(); - pst.close(); - }catch(SQLException e){ - System.out.println(e.toString()); - if(this.erreurCO()) - this.addBDEtudiant(g, cnx); - } - } - - - - - /******************* - * FONCTION POUR REFRESH - * ******************* - */ - - - - - /** - * Refresh le groupe donnée pour le mettre a jour avec la Base de donnée - * Si le groupe n'existe plus on retourne le groupe parent le plus proche existant encore - * @param g le groupe a refresh - * @return le groupe refresh - */ - private Groupe refreshGroupe(Groupe g, Connection cnx){ - try{ - PreparedStatement pst = cnx.prepareStatement( - "SELECT `id`, `nom`, `min`, `max`, `value`, `id-parent` FROM `Groupe` join `TYPE` on Groupe.Type=TYPE.name where Groupe.`id`=? OR Groupe.`id-parent`=? ORDER BY Groupe.id ASC;"); - pst.setString(1, String.valueOf(g.getId())); - pst.setString(2, String.valueOf(g.getId())); - ResultSet rs=pst.executeQuery(); - if(rs.next()){ - if(rs.getString(2)!=g.getName()){ - g.setName(rs.getString(2)); - } - Set it=new LinkedHashSet<>(); - for(Groupe gr:g.getSousGroupes()){ - it.add(gr); - } - for(Groupe gr:it){ - g.removeSousGroupe(gr); - } - Set et=new LinkedHashSet<>(); - for(Etudiant gr:g.getEtudiants()){ - et.add(gr); - } - for(Etudiant gr:et){ - g.removeEtudiant(gr); - } - this.addSousGroupePasRecursif(g, cnx); - }else{ - if(g==g.getPointPoint()){ - g=null; - }else{ - g=this.refreshGroupe(g.getPointPoint(), cnx); - } - } - rs.close(); - }catch(SQLException e){ - System.out.println(e.toString()); - if(this.erreurCO()) - this.refreshGroupe(g, cnx); - } - return g; - } - - /** - * refresh le Groupe ainsi que ses etudiants - * @param g le groupe - * @return le groupe refresh/un parent si il a été refresh - */ - public Groupe refreshALL(Groupe g){ - Connection cnx = this.cnx(); - g=this.refreshGroupe(g, cnx); - Set et=new LinkedHashSet<>(); - for(Etudiant gr:g.getEtudiants()){ - et.add(gr); - } - for(Etudiant gr:et){ - g.removeEtudiant(gr); - } - this.addBDEtudiant(g, cnx); - this.close(cnx); - return g; - } - - - /** - * Fonction recursive permettant de récuperrer les sous groupe a partir de la BD - * @param g le groupe - * @param cnx la connection a la BD (evite de la surcharger) - * @param pourcent le pourcentage de ce groupe dans le chargement - */ - private void addSousGroupePasRecursif(Groupe g, Connection cnx){ - try{ - //On récupere les Groupe qui ont le parent :g - PreparedStatement pst= cnx.prepareStatement( - "SELECT `id`, `nom`, `min`, `max`, `value`, `id-parent` FROM `Groupe` join `TYPE` on Groupe.Type=TYPE.name where Groupe.`id-parent`=? and Groupe.id!=Groupe.`id-parent`;"); - pst.setString(1, String.valueOf(g.getId())); - ResultSet rs=pst.executeQuery(); - rs=pst.executeQuery(); - //autrement si le groupe as des sous groupe - while(rs.next()){ - //on les ajoute - Groupe nouveau=new GroupeNP(rs.getInt(1), rs.getString(2), rs.getInt(3), rs.getInt(4), TypeGroupe.getType(rs.getString(5)), g); - //Si one le connait pas - if(this.brain.get(nouveau.getId())==null){ - this.brain.put(nouveau.getId(), nouveau); - } - g.addSousGroupe(nouveau); - //on ajoute les sous groupe des sous-groupe - } - rs.close(); - }catch(SQLException e){ - System.out.println(e.toString()); - if(this.erreurCO()) - this.addSousGroupe(g, cnx); - } + @Override + public Groupe refreshALL(Groupe g) { + return g; } + + } diff --git a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MNP/ChangementNP.java b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MNP/ChangementNP.java index 8079a1c..bdd659a 100644 --- a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MNP/ChangementNP.java +++ b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MNP/ChangementNP.java @@ -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"); @@ -38,34 +38,6 @@ public class ChangementNP implements Changement { 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). @@ -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(){ @@ -100,7 +73,7 @@ public class ChangementNP implements Changement { @Override public String getRaison() { - return this.raison; + return this.raison; } } diff --git a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MNP/ETU/Model/ModelEtu.java b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MNP/ETU/Model/ModelEtu.java new file mode 100644 index 0000000..58dbc02 --- /dev/null +++ b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MNP/ETU/Model/ModelEtu.java @@ -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 getEtudiant(){ + return this.promo.getPromotion().getEtudiants(); + } + + private void initEtu(String err){ + Set 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 getGroupePartition(){ + this.promo.refreshALL(this.fenGr.getG().getPointPoint()); + Set 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 ajout) { + // TODO Auto-generated method stub + + } + + + @Override + public void addPromo(int min, int max, String name, Set 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 getEtu(String name) { + // TODO Auto-generated method stub + return null; + } + + + @Override + public void showGroupOfEtudiant(Etudiant e) { + // TODO Auto-generated method stub + + } + +} diff --git a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MNP/ETU/View/FenetreEtudiant.java b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MNP/ETU/View/FenetreEtudiant.java new file mode 100644 index 0000000..ffabadd --- /dev/null +++ b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MNP/ETU/View/FenetreEtudiant.java @@ -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 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; + } +} diff --git a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/ETU/View/FenetreGroupe.java b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MNP/ETU/View/FenetreGroupe.java similarity index 93% rename from java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/ETU/View/FenetreGroupe.java rename to java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MNP/ETU/View/FenetreGroupe.java index 9eb87e9..02bcd34 100644 --- a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/ETU/View/FenetreGroupe.java +++ b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MNP/ETU/View/FenetreGroupe.java @@ -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); } } diff --git a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MNP/ETU/View/PanelEtudiant.java b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MNP/ETU/View/PanelEtudiant.java new file mode 100644 index 0000000..27fee5e --- /dev/null +++ b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MNP/ETU/View/PanelEtudiant.java @@ -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); + } +} diff --git a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MNP/EtudiantNP.java b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MNP/EtudiantNP.java index f59093b..4d9df60 100644 --- a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MNP/EtudiantNP.java +++ b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MNP/EtudiantNP.java @@ -22,20 +22,6 @@ public class EtudiantNP implements Etudiant{ 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. diff --git a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MNP/GroupeNP.java b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MNP/GroupeNP.java index bcb4a02..c88542e 100644 --- a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MNP/GroupeNP.java +++ b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MNP/GroupeNP.java @@ -33,28 +33,6 @@ public class GroupeNP implements Groupe { this.sousGroupes=new LinkedHashSet(); this.membresDuGroupe=new LinkedHashSet(); } - - /** - * 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(); - this.membresDuGroupe=new LinkedHashSet(); - } /** * Nouveau groupe vide de type FREE sans étudiants, sans sous-Groupe @@ -209,14 +187,11 @@ public class GroupeNP implements Groupe { public Set getEtudiants(){ 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; } + } diff --git a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MNP/PROF/Model/ModelProf.java b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MNP/PROF/Model/ModelProf.java new file mode 100644 index 0000000..6cf15ba --- /dev/null +++ b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MNP/PROF/Model/ModelProf.java @@ -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 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 getGroupePartition(){ + this.promo.refreshALL(this.fenGr.getG().getPointPoint()); + Set 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 ajout) { + // TODO Auto-generated method stub + + } + + + @Override + public void addPromo(int min, int max, String name, Set 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 getEtu(String name) { + // TODO Auto-generated method stub + return null; + } + + + @Override + public void showGroupOfEtudiant(Etudiant e) { + // TODO Auto-generated method stub + + } + +} diff --git a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MNP/PROF/View/FenetreEtudiant.java b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MNP/PROF/View/FenetreEtudiant.java new file mode 100644 index 0000000..aa0470e --- /dev/null +++ b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MNP/PROF/View/FenetreEtudiant.java @@ -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 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; + } +} diff --git a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MNP/PROF/View/FenetreGroupe.java b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MNP/PROF/View/FenetreGroupe.java new file mode 100644 index 0000000..79c704d --- /dev/null +++ b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MNP/PROF/View/FenetreGroupe.java @@ -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; + } +} diff --git a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MNP/PROF/View/PanelEtudiant.java b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MNP/PROF/View/PanelEtudiant.java new file mode 100644 index 0000000..12a5173 --- /dev/null +++ b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MNP/PROF/View/PanelEtudiant.java @@ -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); + } +} diff --git a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MNP/ROOT/Controller/ActionChangement.java b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MNP/ROOT/Controller/ActionChangement.java new file mode 100644 index 0000000..ff37d2e --- /dev/null +++ b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MNP/ROOT/Controller/ActionChangement.java @@ -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); + } + } + +} diff --git a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MNP/ROOT/Controller/ActionListChange.java b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MNP/ROOT/Controller/ActionListChange.java new file mode 100644 index 0000000..62d2cdb --- /dev/null +++ b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MNP/ROOT/Controller/ActionListChange.java @@ -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(); + } + } + +} diff --git a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MNP/ROOT/Controller/ActionListenerNouveauEtu.java b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MNP/ROOT/Controller/ActionListenerNouveauEtu.java new file mode 100644 index 0000000..9e82070 --- /dev/null +++ b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MNP/ROOT/Controller/ActionListenerNouveauEtu.java @@ -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()); + } + } + } + +} diff --git a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MNP/ROOT/Controller/ActionListenerSuprEtu.java b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MNP/ROOT/Controller/ActionListenerSuprEtu.java new file mode 100644 index 0000000..c7ceb7d --- /dev/null +++ b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MNP/ROOT/Controller/ActionListenerSuprEtu.java @@ -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); + } + } + +} diff --git a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MNP/ROOT/Controller/ListenerFindBar.java b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MNP/ROOT/Controller/ListenerFindBar.java new file mode 100644 index 0000000..779d897 --- /dev/null +++ b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MNP/ROOT/Controller/ListenerFindBar.java @@ -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); + } + } + +} diff --git a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MNP/ROOT/Controller/ObservateurModifGroupe.java b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MNP/ROOT/Controller/ObservateurModifGroupe.java new file mode 100644 index 0000000..1ea5517 --- /dev/null +++ b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MNP/ROOT/Controller/ObservateurModifGroupe.java @@ -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 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 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()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 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 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() 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 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 getGroupePartition(){ + this.promo.refreshALL(this.fenGr.getG().getPointPoint()); + Set 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; + } + + /* (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 getEtu(String name) { + return this.promo.getEtudiants(name); + } + + @Override + public void showGroupOfEtudiant(Etudiant e){ + Set 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); + } + +} diff --git a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MNP/ROOT/View/FenetreChangement.java b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MNP/ROOT/View/FenetreChangement.java new file mode 100644 index 0000000..3c49cc2 --- /dev/null +++ b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MNP/ROOT/View/FenetreChangement.java @@ -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(); + } + +} diff --git a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MNP/ROOT/View/FenetreEtudiant.java b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MNP/ROOT/View/FenetreEtudiant.java new file mode 100644 index 0000000..4943366 --- /dev/null +++ b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MNP/ROOT/View/FenetreEtudiant.java @@ -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 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(); + } +} diff --git a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MNP/ROOT/View/FenetreGroupe.java b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MNP/ROOT/View/FenetreGroupe.java new file mode 100644 index 0000000..831f77a --- /dev/null +++ b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MNP/ROOT/View/FenetreGroupe.java @@ -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; + } +} diff --git a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/ROOT/View/FenetreSelectionEtu.java b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MNP/ROOT/View/FenetreSelectionEtu.java similarity index 93% rename from java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/ROOT/View/FenetreSelectionEtu.java rename to java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MNP/ROOT/View/FenetreSelectionEtu.java index 0b0b707..cb9ad14 100644 --- a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/ROOT/View/FenetreSelectionEtu.java +++ b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MNP/ROOT/View/FenetreSelectionEtu.java @@ -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; diff --git a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MNP/ROOT/View/FindBarFenetre.java b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MNP/ROOT/View/FindBarFenetre.java new file mode 100644 index 0000000..5c5525c --- /dev/null +++ b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MNP/ROOT/View/FindBarFenetre.java @@ -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 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); + } +} diff --git a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MNP/ROOT/View/PanelEtudiant.java b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MNP/ROOT/View/PanelEtudiant.java new file mode 100644 index 0000000..043fe5a --- /dev/null +++ b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MNP/ROOT/View/PanelEtudiant.java @@ -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); + } +} diff --git a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MP/AbstractChangementFactoryNP.java b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MP/AbstractChangementFactoryNP.java new file mode 100644 index 0000000..3f7d35b --- /dev/null +++ b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MP/AbstractChangementFactoryNP.java @@ -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 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(); + this.getChange(); + } + + public AbstractChangementFactoryNP(AbstractGroupeFactory agf, JFrame fenetre, Set 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(); + 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 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 out = new HashSet(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(); + this.getChange(); + } + + +} diff --git a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MP/AbstractGroupFactoryNP.java~ b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MP/AbstractGroupFactoryNP.java~ new file mode 100644 index 0000000..f1dbec9 --- /dev/null +++ b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MP/AbstractGroupFactoryNP.java~ @@ -0,0 +1,106 @@ +package fr.iutfbleau.projetIHM2022FI2.API; +import java.util.*; +/** + * Usine abstraite gérant l'ensemble des groupes. + * + */ + +public interface AbstractGroupeFactory { + + /** + * permet de récupérer le Groupe qui contient les étudiants de toute la promotion + * @return la promo. + */ + public Groupe getPromotion(); + + /** + * permet de supprimer un groupe connu de l'usine abstraite qui ne contient pas de groupes. + * Pour détruire un groupe connu qui en contient d'autres il faut le faire récursivement. + * + * @throws java.lang.NullPointerException si un argument est null + * @throws java.lang.IllegalStateException si le groupe contient des groupes + * @throws java.lang.IllegalArgumentException si le groupe n'est pas connu de l'usine abstraite ou bien si le groupe est celui de toute la promotion (renvoyé par getPromotion) + */ + public void deleteGroupe(Groupe g); + + /** + * permet d'ajouter un groupe vide de type FREE comme sous-groupe d'un groupe donné. + * @param pere le groupe père du groupe à créer + * @param name le nom du groupe à créer + * @param min,max bornes indicatives sur la taille du groupe à créer + * + * @throws java.lang.NullPointerException si un argument est null + * @throws java.lang.IllegalArgumentException si le groupe pere est de type PARTITION + * ou si il n'y a pas 0 < min <= max + */ + public void createGroupe(Groupe pere, String name, int min, int max); + + /** + * permet de créer une partition automatiquement sous un groupe donné. + * + * @param pere le groupe père du groupe à partitionner + * @param name le nom des groupe à créer (on ajoutera à la suite un numéro ou une lettre pour distinguer chaque groupe) + * @param n le nombre de partitions + * @throws java.lang.NullPointerException si un argument est null + * @throws java.lang.IllegalArgumentException si le groupe pere est de type PARTITION + * ou n négatif ou nul + * + * NB. doit créer une "copie" de pere + * sous pere de type Partition et ajouter sous ce groupe, n groupes de type "FREE". + * les valeurs min et max de ces n groupes sont + * min = 0 et + * max = partie entière de N/n plus 1, où N est le nombre max du groupe pere. + */ + public void createPartition(Groupe pere, String name, int n); + + /** + * permet d'ajouter un étudiant à un groupe. + * + * @param g le groupe dans lequel il faut ajouter l'étudiant + * @param e l'étudiant à ajouter + * + * @throws java.lang.NullPointerException si un argument est null + * @throws java.lang.IllegalArgumentException la factory ne connaît pas g + * @throws java.lang.IllegalStateException le père de g ne contient pas e + */ + public void addToGroupe(Groupe g, Etudiant e); + + /** + * permet d'enlever un étudiant d'un groupe. + * + * @param g le groupe dans lequel il faut enlever l'étudiant + * @param e l'étudiant à enlever + * + * @throws java.lang.NullPointerException si un argument est null + * @throws java.lang.IllegalStateException g ne contient pas e + * @throws java.lang.IllegalArgumentException la factory ne connaît pas g + */ + public void dropFromGroupe(Groupe g, Etudiant e); + + /** + * permet de retrouver un étudiant à partir d'un String. + * + * NB. dans une version simple il doit s'agir du nom exact. + * dans une version un peu plus complexe, il s'agit des premières lettres du nom + * dans une version avancée, on peut autoriser une expression régulière plus ou moins complexe qui est générée si la première recherche n'a pas renvoyé de candidat. + * + * @param String nomEtu le nom approximmatif de l'étudiant + * @return Set 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 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 getGroupesOfEtudiant(Etudiant etu); + + + +} diff --git a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MP/AbstractGroupeFactoryNP.java b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MP/AbstractGroupeFactoryNP.java new file mode 100644 index 0000000..6c17518 --- /dev/null +++ b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MP/AbstractGroupeFactoryNP.java @@ -0,0 +1,718 @@ +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 groupes. + * + */ + +public class AbstractGroupeFactoryNP implements AbstractGroupeFactory { + + // la racine (promotion) + private Groupe promo; + + //la fentre pour les fenetre modale + private JFrame fenetre; + + // On utilise une table de hachage pour retrouver facilement un groupe (à partir de son id). + // Si il y a beaucoup de groupes c'est plus rapide que de parcourir toute une liste. + private HashMap brain; + + /** + * Le constructeur fabrique le groupe promotion déja plein (utilisé en Modèle persistant de donné). + */ + public AbstractGroupeFactoryNP(JFrame fenetre){ + this.fenetre=fenetre; + this.brain=new HashMap(); + this.init(); + } + + /** + * Le constructeur fabrique le groupe promotion vide. + * Il faut ensuite y ajouter les étudiants. + */ + public AbstractGroupeFactoryNP(String name, int min, int max, JFrame fenetre){ + Objects.requireNonNull(name,"On ne peut pas créer une promotion dont le nom est null"); + this.promo=new GroupeNP(name,min,max); + this.fenetre=fenetre; + this.brain=new HashMap(); + this.brain.put(Integer.valueOf(this.promo.getId()),this.promo); + this.saveGroupe(promo); + } + + + /** + * Test plutôt optimiste. Si la clé est identique alors on fait comme si c'était le bon groupe. + * + * @return true si le groupe est connu + */ + public Boolean knows(Groupe g){ + return this.brain.containsKey(Integer.valueOf(g.getId())); + } + + + public boolean changeNameGroupe(Groupe g, String name){ + if(!this.knows(g)){ + throw new IllegalArgumentException("Groupe inconu "); + } + Connection cnx=this.cnx(); + try{ + PreparedStatement pst=cnx.prepareStatement( + "UPDATE `Groupe` SET `nom` = ? WHERE `Groupe`.`id` = ? " + ); + pst.setString(1, name); + pst.setInt(2, g.getId()); + pst.executeUpdate(); + pst.close(); + }catch(SQLException e){ + System.out.println(e.toString()); + if(this.erreurSQL()){ + this.changeNameGroupe(g, name); + }else{ + return false; + } + } + this.close(cnx); + g.setName(name); + return true; + } + + + + /** + * 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){ + Objects.requireNonNull(g,"On ne peut pas enlever un groupe null car null n'est pas un groupe autorisé"); + if (!this.knows(g)){ + throw new IllegalArgumentException("Impossible d'enlever un groupe inconnu"); + } + g.getPointPoint().removeSousGroupe(g); + this.brain.remove(Integer.valueOf(g.getId())); + this.suprGroupe(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){ + Objects.requireNonNull(pere,"Le groupe pere ne peut pas être null"); + Objects.requireNonNull(name,"Le nouveau groupe ne peut pas avoir null comme nom"); + + if (!this.knows(pere)){ + throw new IllegalArgumentException("Interdit d'ajouter un fils à un groupe inconnu"); + } + if (pere.getType().equals(TypeGroupe.PARTITION)){ + throw new IllegalArgumentException("Impossible d'ajouter un groupe à une parition. Il faut utiliser createPartition pour créer une partition"); + } + if ( min <= 0 || max < min){ + throw new IllegalArgumentException("Il faut que 0 < min <= max"); + } + + Groupe g = new GroupeNP(pere,name,min,max); + pere.addSousGroupe(g); + this.brain.put(Integer.valueOf(g.getId()),g); + this.saveGroupe(g); + } + + /** + * permet de créer une partition automatiquement sous un groupe donné. + * + * @param pere le groupe père du groupe à partitionner + * @param name le nom des groupe à créer (on ajoute à la suite un numéro de 1 à n pour distinguer chaque groupe formant la partition) + * @param n le nombre de partitions + * @throws java.lang.NullPointerException si un argument est null + * @throws java.lang.IllegalArgumentException si le groupe pere est de type PARTITION + * ou n négatif ou nul + * + * NB. doit créer une "copie" de pere + * sous pere de type Partition et ajouter sous ce groupe, n groupes de type "FREE". + * les valeurs min et max de ces n groupes sont + * min = 0 et + * max = partie entière de N/n plus 1, où N est le nombre max du groupe pere. + */ + public void createPartition(Groupe pere, String name, int n){ + Objects.requireNonNull(pere,"Le groupe pere ne peut pas être null"); + Objects.requireNonNull(name,"Le nouveau groupe ne peut pas avoir null comme nom"); + if (!this.knows(pere)){ + throw new IllegalArgumentException("Impossible de partitionner ce groupe inconnu"); + } + if (pere.getType().equals(TypeGroupe.PARTITION)){ + throw new IllegalArgumentException("Impossible de créer une partition à ce niveau. Il faut soit repartitionner le groupe au dessus, soit partitionner une partition en dessous."); + } + if ( n <= 0){ + throw new IllegalArgumentException("Le nombre de partitions doit être strictement positif"); + } + //Création de la racine de la partition. + Groupe copiePereRacinePartition = new GroupeNP(pere); + pere.addSousGroupe(copiePereRacinePartition); + this.brain.put(Integer.valueOf(copiePereRacinePartition.getId()),copiePereRacinePartition); + // création des sous-groupes + int min = 0; + int max = ((int) Math.floor(pere.getSize()/n))+1; + List groupes = new ArrayList(n); + for(int i = 0; i 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 getEtudiants(String nomEtu){ + Set s=new LinkedHashSet<>(); + //on retourne tous les etudiants + if(nomEtu==null){ + if(this.getPromotion()!=null){ + for(Etudiant et:this.getPromotion().getEtudiants()){ + s.add(et); + } + } + //ceux qui sont connu mais pas dans la promo + Connection cnx=this.cnx(); + try{ + PreparedStatement pst=cnx.prepareStatement("SELECT * FROM Etudiant where Etudiant.id NOT IN (SELECT CONTIENT.idEt FROM CONTIENT) Group by Etudiant.id;"); + ResultSet rs=pst.executeQuery(); + while(rs.next()){ + s.add(new EtudiantNP(rs.getString(2), rs.getString(3), rs.getInt(1))); + } + }catch(SQLException e){ + System.out.println(e.toString()); + if(this.erreurCO()) + return this.getEtudiants(nomEtu); + return null; + } + this.close(cnx); + }else{ + for(Etudiant e:this.getPromotion().getEtudiants()){ + if((e.getNom()).contains(nomEtu)){ + s.add(e); + } + } + } + return s; + } + + /** + * 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 getGroupesOfEtudiant(Etudiant etu){ + if(etu==null) + throw new NullPointerException(); + Set ret=new LinkedHashSet(); + Connection cnx=this.cnx(); + try{ + PreparedStatement pst=cnx.prepareStatement("SELECT `idGroupe` FROM CONTIENT where idEt=? Group by `idGroupe`;"); + pst.setInt(1, etu.getId()); + ResultSet rs=pst.executeQuery(); + while(rs.next()){ + ret.add(this.brain.get(rs.getInt(1))); + } + rs.close(); + pst.close(); + }catch(SQLException e){ + + } + this.close(cnx); + return ret; + } + + // ********************** + // 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){ + System.out.println(e.toString()); + 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 deleteEtu(Etudiant et, Groupe g){ + Connection cnx=this.cnx(); + try{ + PreparedStatement pst=cnx.prepareStatement( + "DELETE FROM CONTIENT WHERE idGroupe=? AND idEt=?; " + ); + pst.setInt(2, et.getId()); + this.deleteEtu(pst, cnx, g.getId()); + pst.close(); + }catch(SQLException e){ + System.out.println(e.toString()); + if(this.erreurSQL()){ + this.deleteEtu(et, brain.get(g.getId())); + } + } + this.close(cnx); + } + + private void deleteEtu(PreparedStatement pst, Connection cnx, int id){ + try{ + pst.setInt(1, id); + pst.executeUpdate(); + + PreparedStatement sous=cnx.prepareStatement( + "SELECT * FROM Groupe WHERE `id-parent`=? AND `id-parent`!=id; " + ); + sous.setInt(1, id); + ResultSet rs=sous.executeQuery(); + while(rs.next()){ + this.deleteEtu(pst, cnx, rs.getInt(1)); + } + }catch(SQLException e){ + System.out.println(e.toString()); + if(this.erreurSQL()){ + this.deleteEtu(pst, cnx, id); + } + } + } + + private void close(AutoCloseable clos){ + try{ + clos.close(); + }catch(Exception e){ + System.out.println(e.toString()); + if(this.erreurCO()==true) + this.close(clos); + } + } + + +private boolean saveEtu(Etudiant etudiant, Groupe g){ + Connection cnx = this.cnx(); + try{ + PreparedStatement pst=cnx.prepareStatement( + "Select id from Etudiant where id=?; "); + pst.setString(1, String.valueOf(etudiant.getId())); + ResultSet rs=pst.executeQuery(); + if(rs.next()){ + //L'etudiant est déja connu de la BD + pst.close(); + pst=cnx.prepareStatement( + "INSERT INTO `CONTIENT` (`idGroupe`, `idEt`) VALUES (?, ?);"); + pst.setInt(2, etudiant.getId()); + pst.setInt(1, g.getId()); + pst.executeUpdate(); + }else{ + pst.close(); + pst=cnx.prepareStatement( + "INSERT INTO `Etudiant` (`id`, `nom`, `prenom`) VALUES (?, ?, ?) ;"); + pst.setInt(1, etudiant.getId()); + pst.setString(2, etudiant.getNom()); + pst.setString(3, etudiant.getPrenom()); + pst.executeUpdate(); + } + rs.close(); + pst.close(); + }catch(SQLException e){ + System.out.println(e.toString()); + if(this.erreurSQL()){ + this.saveEtu(etudiant, g); + }else{ + return false; + } + } + this.close(cnx); + return true; + } + + private boolean saveGroupe(Groupe g){ + Connection cnx=this.cnx(); + try{ + PreparedStatement pst=cnx.prepareStatement( + "INSERT INTO `Groupe` (`id`, `nom`, `min`, `max`, `Type`, `id-parent`) VALUES (?, ?, ?, ?, ?, ?);" + ); + pst.setInt(1, g.getId()); + pst.setString(2, g.getName()); + pst.setInt(3, g.getMin()); + pst.setInt(4, g.getMax()); + pst.setString(5, g.getType().name()); + pst.setInt(6, g.getPointPoint().getId()); + pst.executeUpdate(); + pst.close(); + for(Etudiant e: g.getEtudiants()){ + this.saveEtu(e, g); + } + for(Groupe sous:g.getSousGroupes()){ + this.saveGroupe(sous); + } + }catch(SQLException e){ + System.out.println(e.toString()); + if(this.erreurSQL()){ + this.saveGroupe(g); + }else{ + return false; + } + } + this.close(cnx); + return true; + } + + private boolean suprGroupe(Groupe g){ + Connection cnx=this.cnx(); + try{ + PreparedStatement pst=cnx.prepareStatement("Delete FROM Groupe where id=?;"); + pst.setInt(1, g.getId()); + pst.executeUpdate(); + pst.close(); + pst=cnx.prepareStatement("Delete FROM CONTIENT where idGroupe=?;"); + pst.setInt(1, g.getId()); + pst.executeUpdate(); + pst.close(); + }catch(SQLException e){ + System.out.println(e.toString()); + if(this.erreurSQL()){ + this.suprGroupe(g); + }else{ + return false; + } + } + this.close(cnx); + return true; + } + + + + /***************************** + * FONCTION POUR INITIALISER LA FACTORY AVEC LA BD + * ******************************** + */ + private void init(){ + Connection cnx=this.cnx(); + //on récupère le Groupe de la BD n'ayant pas de Parent (La promo donc) + try{ + PreparedStatement pst = cnx.prepareStatement( + "SELECT `id`, `nom`, `min`, `max`, `value`, `id-parent` FROM `Groupe` join `TYPE` on Groupe.Type=TYPE.name ORDER BY Groupe.id ASC;"); + ResultSet rs = pst.executeQuery(); + rs=pst.executeQuery(); + //Si il existe bien une promotion + if(rs.next()){ + //On créer le groupe de promo + this.promo=new GroupeNP(rs.getInt(1), rs.getString(2), rs.getInt(3), rs.getInt(4), TypeGroupe.getType(rs.getString(5)), null); + //on ajoute au cerveau + this.brain.put(this.promo.getId(), this.promo); + //On lui ajoute tout ses sous-groupe + this.addSousGroupe(this.promo, cnx); + //On ajoute les étudiants: + for(Groupe sous: this.brain.values()){ + this.addBDEtudiant(sous, cnx); + } + }else{ + //Si aucune ligne et donc pas de promo: + this.promo=null; + } + rs.close(); + pst.close(); + }catch(SQLException e){ + System.out.println(e.toString()); + if(this.erreurCO()) + this.init(); + } + this.close(cnx); + } + + /** + * Fonction recursive permettant de récuperrer les sous groupe a partir de la BD + * @param g le groupe + * @param cnx la connection a la BD (evite de la surcharger) + * @param pourcent le pourcentage de ce groupe dans le chargement + */ + private void addSousGroupe(Groupe g, Connection cnx){ + try{ + //On récupere les Groupe qui ont le parent :g + PreparedStatement pst= cnx.prepareStatement( + "SELECT `id`, `nom`, `min`, `max`, `value`, `id-parent` FROM `Groupe` join `TYPE` on Groupe.Type=TYPE.name where Groupe.`id-parent`=? and Groupe.id!=Groupe.`id-parent`;"); + pst.setString(1, String.valueOf(g.getId())); + ResultSet rs=pst.executeQuery(); + rs=pst.executeQuery(); + //autrement si le groupe as des sous groupe + while(rs.next()){ + //on les ajoute + Groupe nouveau=new GroupeNP(rs.getInt(1), rs.getString(2), rs.getInt(3), rs.getInt(4), TypeGroupe.getType(rs.getString(5)), g); + //Si one le connait pas + if(this.brain.get(nouveau.getId())==null){ + this.brain.put(nouveau.getId(), nouveau); + } + g.addSousGroupe(nouveau); + this.addSousGroupe(nouveau, cnx); + //on ajoute les sous groupe des sous-groupe + } + rs.close(); + }catch(SQLException e){ + System.out.println(e); + if(this.erreurCO()) + this.addSousGroupe(g, cnx); + } + } + + /** + * Fonction recursive ajoutant les étudiant aux groupe de la promo + * @param g le groupe pour qui ajouter les Etudiant + * @param cnx la connection (evite de surcharger la BD) + */ + private void addBDEtudiant(Groupe g, Connection cnx){ + try{ + //On récupère les etudiants contenue du groupe + PreparedStatement pst; + //Si c'est la promo + pst= cnx.prepareStatement("SELECT Etudiant.nom, Etudiant.prenom, Etudiant.id FROM `CONTIENT` JOIN Etudiant on CONTIENT.idEt=Etudiant.id WHERE CONTIENT.idGroupe=? ORDER BY Etudiant.id ASC"); + pst.setInt(1, g.getId()); + ResultSet rs=pst.executeQuery(); + //Pour tous les étudiants + while(rs.next()){ + boolean exist=false; + //autrement on recupere l'etudiant + for(Etudiant e: g.getPointPoint().getEtudiants()){ + if(e.getId()==rs.getInt(3)){ + exist=true; + g.addEtudiant(e); + break; + } + } + if(exist==false){ + g.addEtudiant(new EtudiantNP(rs.getString(1), rs.getString(2), rs.getInt(3))); + } + } + rs.close(); + pst.close(); + }catch(SQLException e){ + System.out.println(e.toString()); + if(this.erreurCO()) + this.addBDEtudiant(g, cnx); + } + } + + + + + /******************* + * FONCTION POUR REFRESH + * ******************* + */ + + + + + /** + * Refresh le groupe donnée pour le mettre a jour avec la Base de donnée + * Si le groupe n'existe plus on retourne le groupe parent le plus proche existant encore + * @param g le groupe a refresh + * @return le groupe refresh + */ + private Groupe refreshGroupe(Groupe g, Connection cnx){ + try{ + PreparedStatement pst = cnx.prepareStatement( + "SELECT `id`, `nom`, `min`, `max`, `value`, `id-parent` FROM `Groupe` join `TYPE` on Groupe.Type=TYPE.name where Groupe.`id`=? OR Groupe.`id-parent`=? ORDER BY Groupe.id ASC;"); + pst.setString(1, String.valueOf(g.getId())); + pst.setString(2, String.valueOf(g.getId())); + ResultSet rs=pst.executeQuery(); + if(rs.next()){ + if(rs.getString(2)!=g.getName()){ + g.setName(rs.getString(2)); + } + Set it=new LinkedHashSet<>(); + for(Groupe gr:g.getSousGroupes()){ + it.add(gr); + } + for(Groupe gr:it){ + g.removeSousGroupe(gr); + } + Set et=new LinkedHashSet<>(); + for(Etudiant gr:g.getEtudiants()){ + et.add(gr); + } + for(Etudiant gr:et){ + g.removeEtudiant(gr); + } + this.addSousGroupePasRecursif(g, cnx); + }else{ + if(g==g.getPointPoint()){ + g=null; + }else{ + g=this.refreshGroupe(g.getPointPoint(), cnx); + } + } + rs.close(); + }catch(SQLException e){ + System.out.println(e.toString()); + if(this.erreurCO()) + this.refreshGroupe(g, cnx); + } + return g; + } + + /** + * refresh le Groupe ainsi que ses etudiants + * @param g le groupe + * @return le groupe refresh/un parent si il a été refresh + */ + public Groupe refreshALL(Groupe g){ + Connection cnx = this.cnx(); + g=this.refreshGroupe(g, cnx); + Set et=new LinkedHashSet<>(); + for(Etudiant gr:g.getEtudiants()){ + et.add(gr); + } + for(Etudiant gr:et){ + g.removeEtudiant(gr); + } + this.addBDEtudiant(g, cnx); + this.close(cnx); + return g; + } + + + /** + * Fonction recursive permettant de récuperrer les sous groupe a partir de la BD + * @param g le groupe + * @param cnx la connection a la BD (evite de la surcharger) + * @param pourcent le pourcentage de ce groupe dans le chargement + */ + private void addSousGroupePasRecursif(Groupe g, Connection cnx){ + try{ + //On récupere les Groupe qui ont le parent :g + PreparedStatement pst= cnx.prepareStatement( + "SELECT `id`, `nom`, `min`, `max`, `value`, `id-parent` FROM `Groupe` join `TYPE` on Groupe.Type=TYPE.name where Groupe.`id-parent`=? and Groupe.id!=Groupe.`id-parent`;"); + pst.setString(1, String.valueOf(g.getId())); + ResultSet rs=pst.executeQuery(); + rs=pst.executeQuery(); + //autrement si le groupe as des sous groupe + while(rs.next()){ + //on les ajoute + Groupe nouveau=new GroupeNP(rs.getInt(1), rs.getString(2), rs.getInt(3), rs.getInt(4), TypeGroupe.getType(rs.getString(5)), g); + //Si one le connait pas + if(this.brain.get(nouveau.getId())==null){ + this.brain.put(nouveau.getId(), nouveau); + } + g.addSousGroupe(nouveau); + //on ajoute les sous groupe des sous-groupe + } + rs.close(); + }catch(SQLException e){ + System.out.println(e.toString()); + if(this.erreurCO()) + this.addSousGroupe(g, cnx); + } + } +} diff --git a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MP/AbstractGroupeFactoryNP.java~ b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MP/AbstractGroupeFactoryNP.java~ new file mode 100644 index 0000000..7ab138a --- /dev/null +++ b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MP/AbstractGroupeFactoryNP.java~ @@ -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 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, où 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 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 getEtudiants(String nomEtu){ + // on cherche bêtement dans la promo. + Set out = new LinkedHashSet(); + 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 getGroupesOfEtudiant(Etudiant etu){ + throw new UnsupportedOperationException("pas encore implanté"); + } + + +} diff --git a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MP/ChangementNP.java b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MP/ChangementNP.java new file mode 100644 index 0000000..6f01afe --- /dev/null +++ b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MP/ChangementNP.java @@ -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; + } + +} diff --git a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MP/ChangementNP.java~ b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MP/ChangementNP.java~ new file mode 100644 index 0000000..49e2bd9 --- /dev/null +++ b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MP/ChangementNP.java~ @@ -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; + } + +} diff --git a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/ETU/Model/ModelEtu.java b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MP/ETU/Model/ModelEtu.java similarity index 96% rename from java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/ETU/Model/ModelEtu.java rename to java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MP/ETU/Model/ModelEtu.java index 3108253..18ca7de 100644 --- a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/ETU/Model/ModelEtu.java +++ b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MP/ETU/Model/ModelEtu.java @@ -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 diff --git a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/ETU/View/FenetreEtudiant.java b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MP/ETU/View/FenetreEtudiant.java similarity index 97% rename from java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/ETU/View/FenetreEtudiant.java rename to java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MP/ETU/View/FenetreEtudiant.java index c0dbb2e..57c4be7 100644 --- a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/ETU/View/FenetreEtudiant.java +++ b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MP/ETU/View/FenetreEtudiant.java @@ -1,4 +1,4 @@ -package fr.iutfbleau.projetIHM2022FI2.ETU.View; +package fr.iutfbleau.projetIHM2022FI2.MP.ETU.View; import javax.swing.JLabel; diff --git a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MP/ETU/View/FenetreGroupe.java b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MP/ETU/View/FenetreGroupe.java new file mode 100644 index 0000000..eed7c99 --- /dev/null +++ b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MP/ETU/View/FenetreGroupe.java @@ -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 appartient; + public FenetreGroupe(Groupe g, Model m, Set 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 appartient) { + this.appartient = appartient; + } + public JPanel getPan() { + return pan; + } +} diff --git a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/ETU/View/PanelEtudiant.java b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MP/ETU/View/PanelEtudiant.java similarity index 94% rename from java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/ETU/View/PanelEtudiant.java rename to java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MP/ETU/View/PanelEtudiant.java index 8679b67..6c65bc7 100644 --- a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/ETU/View/PanelEtudiant.java +++ b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MP/ETU/View/PanelEtudiant.java @@ -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; diff --git a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MP/EtudiantNP.java b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MP/EtudiantNP.java new file mode 100644 index 0000000..eb64684 --- /dev/null +++ b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MP/EtudiantNP.java @@ -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; + } + + +} diff --git a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MP/EtudiantNP.java~ b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MP/EtudiantNP.java~ new file mode 100644 index 0000000..2b6d0b9 --- /dev/null +++ b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MP/EtudiantNP.java~ @@ -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; + } + + +} diff --git a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MP/GroupeNP.java b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MP/GroupeNP.java new file mode 100644 index 0000000..b457f0f --- /dev/null +++ b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MP/GroupeNP.java @@ -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 sousGroupes; + private Set 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(); + this.membresDuGroupe=new LinkedHashSet(); + } + + /** + * 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(); + this.membresDuGroupe=new LinkedHashSet(); + } + + /** + * 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(); + this.membresDuGroupe=new LinkedHashSet(); + } + + /** + * 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(); + 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 getSousGroupes(){ + return this.sousGroupes; + } + + /** + * Potentiellement "vide" + * Attention nous renvoyons l'ensemble sans le copier + * + * @return l'ensemble des étudiants. + */ + public Set getEtudiants(){ + return this.membresDuGroupe; + } + + /** + * Change le nom du groupe + * @param s le nouveau nom + */ + @Override + public void setName(String s){ + this.name=s; + } + +} diff --git a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MP/GroupeNP.java~ b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MP/GroupeNP.java~ new file mode 100644 index 0000000..e34daba --- /dev/null +++ b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MP/GroupeNP.java~ @@ -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 sousGroupes; + private Set 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 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(); + this.membresDugroupe=new LinkedHashSet(); + } + + /** + * 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(); + this.membresDugroupe=new LinkedHashSet(); + } + + /** + * 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(); + 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 getSousGroupes(){ + return this.sousGroupes.iterator(); + } + + /** + * Potentiellement "vide" + * @return un itérateur sur les étudiants. + */ + public Iterator getEtudiants(){ + return this.membresDuGroupe.iterator(); + } + + +} diff --git a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MP/PROF/Model/ModelProf.java b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MP/PROF/Model/ModelProf.java new file mode 100644 index 0000000..1f9d9f7 --- /dev/null +++ b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MP/PROF/Model/ModelProf.java @@ -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 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 getGroupePartition(){ + this.promo.refreshALL(this.fenGr.getG().getPointPoint()); + Set 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 ajout) { + // TODO Auto-generated method stub + + } + + + @Override + public void addPromo(int min, int max, String name, Set 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 getEtu(String name) { + // TODO Auto-generated method stub + return null; + } + + + @Override + public void showGroupOfEtudiant(Etudiant e) { + // TODO Auto-generated method stub + + } + +} diff --git a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MP/PROF/View/FenetreEtudiant.java b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MP/PROF/View/FenetreEtudiant.java new file mode 100644 index 0000000..5572cbe --- /dev/null +++ b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MP/PROF/View/FenetreEtudiant.java @@ -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 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; + } +} diff --git a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MP/PROF/View/FenetreGroupe.java b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MP/PROF/View/FenetreGroupe.java new file mode 100644 index 0000000..2f1825e --- /dev/null +++ b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MP/PROF/View/FenetreGroupe.java @@ -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; + } +} diff --git a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MP/PROF/View/PanelEtudiant.java b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MP/PROF/View/PanelEtudiant.java new file mode 100644 index 0000000..3efaf6b --- /dev/null +++ b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MP/PROF/View/PanelEtudiant.java @@ -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); + } +} diff --git a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/ROOT/Controller/ActionChangement.java b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MP/ROOT/Controller/ActionChangement.java similarity index 93% rename from java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/ROOT/Controller/ActionChangement.java rename to java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MP/ROOT/Controller/ActionChangement.java index 234a383..08536cd 100644 --- a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/ROOT/Controller/ActionChangement.java +++ b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MP/ROOT/Controller/ActionChangement.java @@ -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; diff --git a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/ROOT/Controller/ActionListChange.java b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MP/ROOT/Controller/ActionListChange.java similarity index 90% rename from java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/ROOT/Controller/ActionListChange.java rename to java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MP/ROOT/Controller/ActionListChange.java index e2a1e96..18c1203 100644 --- a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/ROOT/Controller/ActionListChange.java +++ b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MP/ROOT/Controller/ActionListChange.java @@ -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; diff --git a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/ROOT/Controller/ActionListenerNouveauEtu.java b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MP/ROOT/Controller/ActionListenerNouveauEtu.java similarity index 89% rename from java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/ROOT/Controller/ActionListenerNouveauEtu.java rename to java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MP/ROOT/Controller/ActionListenerNouveauEtu.java index c02ba60..54bde44 100644 --- a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/ROOT/Controller/ActionListenerNouveauEtu.java +++ b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MP/ROOT/Controller/ActionListenerNouveauEtu.java @@ -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; diff --git a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/ROOT/Controller/ActionListenerSuprEtu.java b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MP/ROOT/Controller/ActionListenerSuprEtu.java similarity index 92% rename from java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/ROOT/Controller/ActionListenerSuprEtu.java rename to java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MP/ROOT/Controller/ActionListenerSuprEtu.java index 804584b..dc3cb47 100644 --- a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/ROOT/Controller/ActionListenerSuprEtu.java +++ b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MP/ROOT/Controller/ActionListenerSuprEtu.java @@ -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; diff --git a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/ROOT/Controller/ListenerFindBar.java b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MP/ROOT/Controller/ListenerFindBar.java similarity index 85% rename from java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/ROOT/Controller/ListenerFindBar.java rename to java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MP/ROOT/Controller/ListenerFindBar.java index 0c3e0ac..01b7b88 100644 --- a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/ROOT/Controller/ListenerFindBar.java +++ b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MP/ROOT/Controller/ListenerFindBar.java @@ -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; @@ -7,7 +7,7 @@ import javax.swing.JButton; import javax.swing.JTextField; import fr.iutfbleau.projetIHM2022FI2.API.Etudiant; -import fr.iutfbleau.projetIHM2022FI2.ROOT.View.FindBarFenetre; +import fr.iutfbleau.projetIHM2022FI2.MP.ROOT.View.FindBarFenetre; public class ListenerFindBar implements ActionListener{ private FindBarFenetre fenetre; diff --git a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/ROOT/Controller/ObservateurModifGroupe.java b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MP/ROOT/Controller/ObservateurModifGroupe.java similarity index 98% rename from java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/ROOT/Controller/ObservateurModifGroupe.java rename to java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MP/ROOT/Controller/ObservateurModifGroupe.java index 2a2bc83..f9ad1d3 100644 --- a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/ROOT/Controller/ObservateurModifGroupe.java +++ b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MP/ROOT/Controller/ObservateurModifGroupe.java @@ -1,4 +1,4 @@ -package fr.iutfbleau.projetIHM2022FI2.ROOT.Controller; +package fr.iutfbleau.projetIHM2022FI2.MP.ROOT.Controller; import java.awt.event.*; import java.util.LinkedHashSet; @@ -6,7 +6,7 @@ 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.ROOT.View.FenetreSelectionEtu; +import fr.iutfbleau.projetIHM2022FI2.MP.ROOT.View.FenetreSelectionEtu; import javax.swing.*; import java.util.Set; diff --git a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/ROOT/Controller/SelecteurEtudiant.java b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MP/ROOT/Controller/SelecteurEtudiant.java similarity index 88% rename from java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/ROOT/Controller/SelecteurEtudiant.java rename to java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MP/ROOT/Controller/SelecteurEtudiant.java index 4a4c0ab..b7f6d2b 100644 --- a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/ROOT/Controller/SelecteurEtudiant.java +++ b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MP/ROOT/Controller/SelecteurEtudiant.java @@ -1,9 +1,9 @@ -package fr.iutfbleau.projetIHM2022FI2.ROOT.Controller; +package fr.iutfbleau.projetIHM2022FI2.MP.ROOT.Controller; import java.awt.Color; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; -import fr.iutfbleau.projetIHM2022FI2.ROOT.View.FenetreSelectionEtu; +import fr.iutfbleau.projetIHM2022FI2.MP.ROOT.View.FenetreSelectionEtu; public class SelecteurEtudiant implements MouseListener{ private FenetreSelectionEtu pere; diff --git a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/ROOT/Model/ModelRoot.java b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MP/ROOT/Model/ModelRoot.java similarity index 96% rename from java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/ROOT/Model/ModelRoot.java rename to java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MP/ROOT/Model/ModelRoot.java index f1789fd..4437b47 100644 --- a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/ROOT/Model/ModelRoot.java +++ b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MP/ROOT/Model/ModelRoot.java @@ -1,4 +1,4 @@ -package fr.iutfbleau.projetIHM2022FI2.ROOT.Model; +package fr.iutfbleau.projetIHM2022FI2.MP.ROOT.Model; import java.util.HashSet; import java.util.Set; import javax.swing.*; @@ -11,15 +11,15 @@ import fr.iutfbleau.projetIHM2022FI2.API.Etudiant; import fr.iutfbleau.projetIHM2022FI2.API.Groupe; import fr.iutfbleau.projetIHM2022FI2.API.Model; import fr.iutfbleau.projetIHM2022FI2.API.TypeGroupe; -import fr.iutfbleau.projetIHM2022FI2.MNP.AbstractChangementFactoryNP; -import fr.iutfbleau.projetIHM2022FI2.MNP.AbstractGroupeFactoryNP; +import fr.iutfbleau.projetIHM2022FI2.MP.AbstractChangementFactoryNP; +import fr.iutfbleau.projetIHM2022FI2.MP.AbstractGroupeFactoryNP; +import fr.iutfbleau.projetIHM2022FI2.MP.ROOT.View.FenetreChangement; +import fr.iutfbleau.projetIHM2022FI2.MP.ROOT.View.FenetreEtudiant; +import fr.iutfbleau.projetIHM2022FI2.MP.ROOT.View.FenetreGroupe; +import fr.iutfbleau.projetIHM2022FI2.MP.ROOT.View.FindBarFenetre; import fr.iutfbleau.projetIHM2022FI2.Permanent.Controller.ObservateurChangeGroupe; import fr.iutfbleau.projetIHM2022FI2.Permanent.Controller.ObservateurFenetre; import fr.iutfbleau.projetIHM2022FI2.Permanent.View.Chargement; -import fr.iutfbleau.projetIHM2022FI2.ROOT.View.FenetreChangement; -import fr.iutfbleau.projetIHM2022FI2.ROOT.View.FenetreEtudiant; -import fr.iutfbleau.projetIHM2022FI2.ROOT.View.FenetreGroupe; -import fr.iutfbleau.projetIHM2022FI2.ROOT.View.FindBarFenetre; /** * Le Model de L'IHM @@ -46,6 +46,7 @@ public class ModelRoot implements Model{ ch.dispose(); this.fenetre.setVisible(true); if(this.promo.getPromotion()==null){ + this.changement=null; this.fenGr=new FenetreGroupe(null, this); this.fenEtu=new FenetreEtudiant(null, this); }else{ diff --git a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/ROOT/View/FenetreChangement.java b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MP/ROOT/View/FenetreChangement.java similarity index 94% rename from java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/ROOT/View/FenetreChangement.java rename to java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MP/ROOT/View/FenetreChangement.java index a8af691..e722c6c 100644 --- a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/ROOT/View/FenetreChangement.java +++ b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MP/ROOT/View/FenetreChangement.java @@ -1,4 +1,4 @@ -package fr.iutfbleau.projetIHM2022FI2.ROOT.View; +package fr.iutfbleau.projetIHM2022FI2.MP.ROOT.View; import javax.swing.JButton; import javax.swing.JLabel; @@ -9,7 +9,7 @@ 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.ROOT.Controller.ActionChangement; +import fr.iutfbleau.projetIHM2022FI2.MP.ROOT.Controller.ActionChangement; public class FenetreChangement extends JPanel{ private AbstractChangementFactory change; diff --git a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/ROOT/View/FenetreEtudiant.java b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MP/ROOT/View/FenetreEtudiant.java similarity index 91% rename from java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/ROOT/View/FenetreEtudiant.java rename to java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MP/ROOT/View/FenetreEtudiant.java index db93a59..e4c173a 100644 --- a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/ROOT/View/FenetreEtudiant.java +++ b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MP/ROOT/View/FenetreEtudiant.java @@ -1,4 +1,4 @@ -package fr.iutfbleau.projetIHM2022FI2.ROOT.View; +package fr.iutfbleau.projetIHM2022FI2.MP.ROOT.View; import javax.swing.JButton; @@ -12,9 +12,9 @@ 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.ROOT.Controller.ActionListChange; -import fr.iutfbleau.projetIHM2022FI2.ROOT.Controller.ActionListenerSuprEtu; import fr.iutfbleau.projetIHM2022FI2.API.Model; diff --git a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/ROOT/View/FenetreGroupe.java b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MP/ROOT/View/FenetreGroupe.java similarity index 96% rename from java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/ROOT/View/FenetreGroupe.java rename to java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MP/ROOT/View/FenetreGroupe.java index 80fef12..21ce176 100644 --- a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/ROOT/View/FenetreGroupe.java +++ b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MP/ROOT/View/FenetreGroupe.java @@ -1,4 +1,4 @@ -package fr.iutfbleau.projetIHM2022FI2.ROOT.View; +package fr.iutfbleau.projetIHM2022FI2.MP.ROOT.View; import javax.swing.JButton; import javax.swing.JLabel; @@ -10,8 +10,8 @@ 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.ROOT.Controller.ObservateurModifGroupe; import fr.iutfbleau.projetIHM2022FI2.API.Model; diff --git a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MP/ROOT/View/FenetreSelectionEtu.java b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MP/ROOT/View/FenetreSelectionEtu.java new file mode 100644 index 0000000..36dd31c --- /dev/null +++ b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MP/ROOT/View/FenetreSelectionEtu.java @@ -0,0 +1,108 @@ +package fr.iutfbleau.projetIHM2022FI2.MP.ROOT.View; + +import fr.iutfbleau.projetIHM2022FI2.API.Etudiant; +import fr.iutfbleau.projetIHM2022FI2.API.Groupe; +import fr.iutfbleau.projetIHM2022FI2.MP.EtudiantNP; +import fr.iutfbleau.projetIHM2022FI2.MP.ROOT.Controller.ActionListenerNouveauEtu; +import fr.iutfbleau.projetIHM2022FI2.MP.ROOT.Controller.SelecteurEtudiant; + +import java.util.Set; +import java.awt.GridLayout; +import java.awt.Color; +import javax.swing.JButton; +import javax.swing.JOptionPane; +import javax.swing.JPanel; + +public class FenetreSelectionEtu extends JPanel{ + private Set liste; + private Set etu; + public FenetreSelectionEtu(Groupe g, Set liste, boolean supression, Set etu0){ + super(); + this.etu=etu0; + if(supression==true){ + for(Etudiant e:g.getEtudiants()){ + for(Etudiant et:etu){ + if(e.getId()==et.getId()){ + etu.remove(et); + break; + } + } + } + } + this.liste=liste; + this.draw(); + } + + public void addList(int index){ + int i=0; + for(Etudiant e:this.etu){ + if(i==index){ + this.liste.add(e); + return; + } + i++; + } + } + + public void removeList(int index){ + int i=0; + for(Etudiant e:this.etu){ + if(i==index){ + this.liste.remove(e); + return; + } + i++; + } + } + + public void addEtudiant(String nom, String prenom){ + if(nom.length()==0 || prenom.length()==0){ + JOptionPane.showMessageDialog(this, "le nom/prenom ne peut pas être null"); + return; + } + this.etu.add(new EtudiantNP(nom, prenom)); + this.removeAll(); + this.draw(); + this.revalidate(); + } + + private void draw(){ + this.setLayout(new GridLayout(this.etu.size()/5+1, 4)); + int index=0; + for(Etudiant e:etu){ + JButton lab=new JButton(e.getNom()+" "+e.getPrenom()+" "+e.getId()); + lab.addMouseListener(new SelecteurEtudiant(index, this)); + this.add(lab); + index++; + } + JButton nouveau=new JButton("Nouveau +"); + nouveau.setBackground(Color.RED); + nouveau.addActionListener(new ActionListenerNouveauEtu(this)); + JButton all=new JButton("tous"); + this.add(all); + all.addActionListener(new ActionListenerNouveauEtu(this)); + this.add(nouveau); + } + + public void addAll(){ + if(this.getComponent(this.etu.size()).getBackground()==Color.GREEN){ + int i=0; + for(Etudiant e:this.etu){ + this.getComponent(i).setBackground(this.getBackground()); + if(this.liste.contains(e)) + this.liste.remove(e); + i++; + } + this.getComponent(this.etu.size()).setBackground(this.getBackground()); + }else{ + int i=0; + for(Etudiant e:this.etu){ + this.getComponent(i).setBackground(Color.GREEN); + this.liste.add(e); + i++; + } + this.getComponent(this.etu.size()).setBackground(Color.GREEN); + } + this.repaint(); + } +} diff --git a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/ROOT/View/FindBarFenetre.java b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MP/ROOT/View/FindBarFenetre.java similarity index 93% rename from java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/ROOT/View/FindBarFenetre.java rename to java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MP/ROOT/View/FindBarFenetre.java index 701425f..49fe99c 100644 --- a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/ROOT/View/FindBarFenetre.java +++ b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MP/ROOT/View/FindBarFenetre.java @@ -1,4 +1,4 @@ -package fr.iutfbleau.projetIHM2022FI2.ROOT.View; +package fr.iutfbleau.projetIHM2022FI2.MP.ROOT.View; import javax.swing.JButton; @@ -8,7 +8,8 @@ import javax.swing.JTextField; import java.awt.GridLayout; import fr.iutfbleau.projetIHM2022FI2.API.Etudiant; import fr.iutfbleau.projetIHM2022FI2.API.Model; -import fr.iutfbleau.projetIHM2022FI2.ROOT.Controller.ListenerFindBar; +import fr.iutfbleau.projetIHM2022FI2.MP.ROOT.Controller.ListenerFindBar; + import java.awt.Dimension; import java.awt.BorderLayout; import java.util.Set; diff --git a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/ROOT/View/PanelEtudiant.java b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MP/ROOT/View/PanelEtudiant.java similarity index 95% rename from java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/ROOT/View/PanelEtudiant.java rename to java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MP/ROOT/View/PanelEtudiant.java index 374d925..24e21ef 100644 --- a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/ROOT/View/PanelEtudiant.java +++ b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MP/ROOT/View/PanelEtudiant.java @@ -1,4 +1,4 @@ -package fr.iutfbleau.projetIHM2022FI2.ROOT.View; +package fr.iutfbleau.projetIHM2022FI2.MP.ROOT.View; import javax.swing.JLabel; import javax.swing.JPanel; diff --git a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MP/ReservationFactoryNP.java~ b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MP/ReservationFactoryNP.java~ new file mode 100644 index 0000000..a4a4d99 --- /dev/null +++ b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MP/ReservationFactoryNP.java~ @@ -0,0 +1,164 @@ +package fr.iutfbleau.projetIHM2021FI2.MNP; +import fr.iutfbleau.projetIHM2021FI2.API.*; +import java.time.LocalDate; +import java.util.*; +import java.util.function.Predicate; +/** + * Usine non persistante stockant les réservations dans une structure de données permettant de simuler un ensemble. + * + * + */ +public interface ReservationFactory{ + + /** + * Recherche une chambre adéquate à partir de + * @param p une préréservation + * @return la chambre + * @throws NullPointerException si un argument est null + * @throws IllegalStateException si une chambre correspondant à cette Préréservation n'existe pas. + * + * Ne devrait pas retourner un objet null. + */ + public Chambre getChambre(Prereservation p); + + /** + * Recherche toutes les chambres adéquates à partir de + * @param p une préréservation + * @return les chambres (set de chambre) + * @throws NullPointerException si un argument est null + * @throws IllegalStateException si une chambre correspondant à cette Préréservation n'existe pas. + * + * Ne devrait pas retourner un objet null. + */ + public Set getChambres(Prereservation p); + + /** + * Fabrique (ajoute) une réservation + * @param p une préréservation + * @param c une chambre (normalement libre et adaptée à la préréservation) + * @return la réservation + * @throws NullPointerException si un argument est null + * @throws IllegalArgumentException si la chambre ne correspondant pas au type de chambre de la préréservation. + * @throws IllegalStateException si la chambre n'est pas disponible. + * + * Ne devrait pas retourner un objet null. + */ + public Reservation createReservation(Prereservation p, Chambre c); + + /** + * Cherche les réservations + * @param d une date + * @return la ou les réservation(s) à cette date sous forme d'un ensemble + * @throws NullPointerException si un argument est null + * + * Ne devrait pas retourner un objet null, par contre peut être un ensemble qui est vide. + */ + public Set getReservation(LocalDate d); + + /** + * Cherche le nombre de chambres disponibles pour une date (réservées ou non). + * @param d une date + * @return un entier + * @throws NullPointerException si un argument est null + * + * Ne devrait pas retourner un entier négatif. + */ + public int getDisponibles(LocalDate d); + + /** + * Cherche les réservations + * @param d une date + * @param t un type de chambre + * @return la ou les réservation(s) pour ce type de chambre à cette date sous forme d'un ensemble + * @throws NullPointerException si un argument est null + * + * Ne devrait pas retourner un objet null, par contre peut être un ensemble qui est vide. + */ + public Set getReservation(LocalDate d, TypeChambre t); + + /** + * Cherche le nombre de chambres disponibles d'un certain type pour une date (réservées ou non). + * @param d une date + * @param t un type de chambre + * @return un entier + * @throws NullPointerException si un argument est null + * + * Ne devrait pas retourner un entier négatif. + */ + public int getDisponibles(LocalDate d, TypeChambre t); + + /** + * Cherche la proportion de chambres disponibles pour une date (réservées sur réservables). + * @param d une date + * @return un entier entre 0 et 100 + * @throws NullPointerException si un argument est null + */ + public int getRatio(LocalDate d); + + /** + * Cherche la proportion de chambres disponibles d'un certain type pour une date (réservées sur réservables). + * @param d une date + * @param t un type de chambre + * @return un entier entre 0 et 100 + * @throws NullPointerException si un argument est null + */ + public int getRatio(LocalDate d, TypeChambre t); + + /** + * Cherche le nombre moyen de chambres disponibles entre deux date (réservées ou non), arrondies à l'entier inférieur. + * @param d1 une date + * @param d2 une date + * @return un entier + * @throws NullPointerException si un argument est null + * @throws IllegalArgumentException si l'ordre temporel d1 avant d2 n'est pas respecté. + * + * Ne devrait pas retourner un entier négatif. + */ + public int getDisponibles(LocalDate d1, LocalDate d2); + + /** + * Cherche les réservations + * @param d1 une date + * @param d2 une date + * @param t un type de chambre + * @return la ou les réservation(s) pour ce type de chambre entre les dates sous forme d'un ensemble + * @throws NullPointerException si un argument est null + * @throws IllegalArgumentException si l'ordre temporel d1 avant d2 n'est pas respecté. + * + * Ne devrait pas retourner un objet null, par contre peut être un ensemble qui est vide. + */ + public Set getReservation(LocalDate d1, LocalDate d2, TypeChambre t); + + /** + * Cherche le nombre moyen de chambres disponibles d'un certain type entre deux date (réservées ou non), arrondies à l'entier inférieur. + * @param d1 une date + * @param d2 une date + * @param t un type de chambre + * @return un entier + * @throws NullPointerException si un argument est null + * @throws IllegalArgumentException si l'ordre temporel d1 avant d2 n'est pas respecté. + * + * Ne devrait pas retourner un entier négatif. + */ + public int getDisponibles(LocalDate d1, LocalDate d2, TypeChambre t); + + /** + * Cherche la proportion moyenne de chambres disponibles pour une date (réservées sur réservables). + * @param d1 une date + * @param d2 une date + * @return un entier entre 0 et 100 + * @throws NullPointerException si un argument est null + */ + public int getRatio(LocalDate d1, LocalDate d2); + + /** + * Cherche la proportion moyenne de chambres disponibles d'un certain type pour une date (réservées sur réservables). + * @param d1 une date + * @param d2 une date + * @param t un type de chambre + * @return un entier entre 0 et 100 + * @throws NullPointerException si un argument est null + */ + public int getRatio(LocalDate d1, LocalDate d2, TypeChambre t); + +} diff --git a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/Permanent/TestTexteMNP.java b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/Permanent/TestTexteMNP.java index 081c4e7..96f85ec 100644 --- a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/Permanent/TestTexteMNP.java +++ b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/Permanent/TestTexteMNP.java @@ -1,5 +1,14 @@ package fr.iutfbleau.projetIHM2022FI2.Permanent; +import java.util.Iterator; + +import fr.iutfbleau.projetIHM2022FI2.API.AbstractChangementFactory; +import fr.iutfbleau.projetIHM2022FI2.API.AbstractGroupeFactory; +import fr.iutfbleau.projetIHM2022FI2.API.Etudiant; +import fr.iutfbleau.projetIHM2022FI2.API.Groupe; +import fr.iutfbleau.projetIHM2022FI2.MNP.AbstractChangementFactoryNP; +import fr.iutfbleau.projetIHM2022FI2.MNP.AbstractGroupeFactoryNP; +import fr.iutfbleau.projetIHM2022FI2.MNP.EtudiantNP; import fr.iutfbleau.projetIHM2022FI2.Permanent.Util.User; import fr.iutfbleau.projetIHM2022FI2.Permanent.View.Connexion; @@ -10,17 +19,199 @@ public class TestTexteMNP{ User chois=Connexion.seConnecter(); if(chois!=null){ if(chois==User.ROOT){ - new fr.iutfbleau.projetIHM2022FI2.ROOT.Model.ModelRoot(); + switch(Connexion.Persistant()){ + case 1: + new fr.iutfbleau.projetIHM2022FI2.MP.ROOT.Model.ModelRoot(); + break; + case 2: + AbstractGroupeFactory agf=TestTexteMNP.getAgf(); + new fr.iutfbleau.projetIHM2022FI2.MNP.ROOT.Model.ModelRoot(agf, TestTexteMNP.getChange(agf)); + break; + } } if(chois==User.ETUDIANT){ - new fr.iutfbleau.projetIHM2022FI2.ETU.Model.ModelEtu(); + switch(Connexion.Persistant()){ + case 1: + new fr.iutfbleau.projetIHM2022FI2.MP.ROOT.Model.ModelRoot(); + break; + case 2: + AbstractGroupeFactory agf=TestTexteMNP.getAgf(); + new fr.iutfbleau.projetIHM2022FI2.MNP.ETU.Model.ModelEtu(agf, TestTexteMNP.getChange(agf)); + break; + } } if(chois==User.PROF){ - + switch(Connexion.Persistant()){ + case 1: + new fr.iutfbleau.projetIHM2022FI2.MP.ROOT.Model.ModelRoot(); + break; + case 2: + AbstractGroupeFactory agf=TestTexteMNP.getAgf(); + new fr.iutfbleau.projetIHM2022FI2.MNP.PROF.Model.ModelProf(agf, TestTexteMNP.getChange(agf)); + break; + } } } - } + + public static AbstractGroupeFactory getAgf(){ + Etudiant e1=new EtudiantNP("césar","lycurgus"); + Etudiant e2=new EtudiantNP("denis","uranus"); + Etudiant e3=new EtudiantNP("marcel","castor"); + Etudiant e4=new EtudiantNP("marin","eurydice"); + Etudiant e5=new EtudiantNP("constantin","akoni"); + Etudiant e6=new EtudiantNP("donat","anakoni"); + Etudiant e7=new EtudiantNP("alexandre","apikalia"); + Etudiant e8=new EtudiantNP("andré","ekewaka"); + Etudiant e9=new EtudiantNP("renard","elikapeka"); + Etudiant e10=new EtudiantNP("achille","haukea"); + + System.out.print("."); + + Etudiant e11=new EtudiantNP("agathe","iakopa"); + Etudiant e12=new EtudiantNP("sabine","spartacus"); + Etudiant e13=new EtudiantNP("michel","caligula"); + Etudiant e14=new EtudiantNP("marthe","alaric"); + Etudiant e15=new EtudiantNP("juliane","hannibal"); + Etudiant e16=new EtudiantNP("anne","juvenal"); + Etudiant e17=new EtudiantNP("sophie","bede"); + Etudiant e18=new EtudiantNP("louis","hamilcar"); + Etudiant e19=new EtudiantNP("diane","ladislas"); + Etudiant e20=new EtudiantNP("christine","mahatma"); + + System.out.print("."); + + Etudiant e21=new EtudiantNP("francine","napoleon"); + Etudiant e22=new EtudiantNP("louise","lalita"); + Etudiant e23=new EtudiantNP("chantal","laxman"); + Etudiant e24=new EtudiantNP("giselle","laxmi"); + Etudiant e25=new EtudiantNP("caroline","leela"); + Etudiant e26=new EtudiantNP("claude","lila"); + Etudiant e27=new EtudiantNP("pauline","lilavati"); + Etudiant e28=new EtudiantNP("avril","lochan"); + Etudiant e29=new EtudiantNP("jacqueline","madhav"); + Etudiant e30=new EtudiantNP("denise","turlough"); + + System.out.print("."); + + Etudiant e31=new EtudiantNP("gabrielle","uaithne"); + Etudiant e32=new EtudiantNP("julie","uilleag"); + Etudiant e33=new EtudiantNP("madeleine","uilliam"); + Etudiant e34=new EtudiantNP("charlotte","uinseann"); + Etudiant e35=new EtudiantNP("bertrand","ulick"); + Etudiant e36=new EtudiantNP("lucile","ultan"); + Etudiant e37=new EtudiantNP("nicole","firdaus"); + Etudiant e38=new EtudiantNP("blanche","yasmin"); + Etudiant e39=new EtudiantNP("jeanine","javed"); + Etudiant e40=new EtudiantNP("roxane","naveed"); + + System.out.print("."); + + Etudiant e41=new EtudiantNP("adeline","shahnaz"); + Etudiant e42=new EtudiantNP("dion","ardashir"); + Etudiant e43=new EtudiantNP("liane","atefeh"); + Etudiant e44=new EtudiantNP("myriam","luigina"); + Etudiant e45=new EtudiantNP("danielle","luigino"); + Etudiant e46=new EtudiantNP("arlette","maddalena"); + Etudiant e47=new EtudiantNP("michelle","manfredo"); + Etudiant e48=new EtudiantNP("justine","manlio"); + Etudiant e49=new EtudiantNP("natalie","marcellino"); + Etudiant e50=new EtudiantNP("aline","mariangela"); + + System.out.print("."); + + Etudiant e51=new EtudiantNP("prosper","marzio"); + Etudiant e52=new EtudiantNP("mirabelle","massimiliano"); + Etudiant e53=new EtudiantNP("carine","matteo"); + Etudiant e54=new EtudiantNP("jeannine","melchiorre"); + Etudiant e55=new EtudiantNP("dianne","micaela"); + Etudiant e56=new EtudiantNP("evette","michela"); + Etudiant e57=new EtudiantNP("gisselle","michelangela"); + AbstractGroupeFactory agf = new AbstractGroupeFactoryNP("BUT2 FI", 15, 92); + + agf.addToGroupe(agf.getPromotion(),e1); + agf.addToGroupe(agf.getPromotion(),e2); + agf.addToGroupe(agf.getPromotion(),e3); + agf.addToGroupe(agf.getPromotion(),e4); + agf.addToGroupe(agf.getPromotion(),e5); + agf.addToGroupe(agf.getPromotion(),e6); + agf.addToGroupe(agf.getPromotion(),e7); + agf.addToGroupe(agf.getPromotion(),e8); + agf.addToGroupe(agf.getPromotion(),e9); + agf.addToGroupe(agf.getPromotion(),e10); + + System.out.print("."); + + agf.addToGroupe(agf.getPromotion(),e11); + agf.addToGroupe(agf.getPromotion(),e12); + agf.addToGroupe(agf.getPromotion(),e13); + agf.addToGroupe(agf.getPromotion(),e14); + agf.addToGroupe(agf.getPromotion(),e15); + agf.addToGroupe(agf.getPromotion(),e16); + agf.addToGroupe(agf.getPromotion(),e17); + agf.addToGroupe(agf.getPromotion(),e18); + agf.addToGroupe(agf.getPromotion(),e19); + agf.addToGroupe(agf.getPromotion(),e20); + + System.out.print("."); + + agf.addToGroupe(agf.getPromotion(),e21); + agf.addToGroupe(agf.getPromotion(),e22); + agf.addToGroupe(agf.getPromotion(),e23); + agf.addToGroupe(agf.getPromotion(),e24); + agf.addToGroupe(agf.getPromotion(),e25); + agf.addToGroupe(agf.getPromotion(),e26); + agf.addToGroupe(agf.getPromotion(),e27); + agf.addToGroupe(agf.getPromotion(),e28); + agf.addToGroupe(agf.getPromotion(),e29); + agf.addToGroupe(agf.getPromotion(),e30); + agf.addToGroupe(agf.getPromotion(),e31); + agf.addToGroupe(agf.getPromotion(),e32); + agf.addToGroupe(agf.getPromotion(),e33); + agf.addToGroupe(agf.getPromotion(),e34); + agf.addToGroupe(agf.getPromotion(),e35); + agf.addToGroupe(agf.getPromotion(),e36); + agf.addToGroupe(agf.getPromotion(),e37); + agf.addToGroupe(agf.getPromotion(),e38); + agf.addToGroupe(agf.getPromotion(),e39); + + System.out.print("."); + + agf.addToGroupe(agf.getPromotion(),e40); + agf.addToGroupe(agf.getPromotion(),e41); + agf.addToGroupe(agf.getPromotion(),e42); + agf.addToGroupe(agf.getPromotion(),e43); + agf.addToGroupe(agf.getPromotion(),e44); + agf.addToGroupe(agf.getPromotion(),e45); + agf.addToGroupe(agf.getPromotion(),e46); + agf.addToGroupe(agf.getPromotion(),e47); + agf.addToGroupe(agf.getPromotion(),e48); + agf.addToGroupe(agf.getPromotion(),e49); + agf.addToGroupe(agf.getPromotion(),e50); + agf.addToGroupe(agf.getPromotion(),e51); + agf.addToGroupe(agf.getPromotion(),e52); + agf.addToGroupe(agf.getPromotion(),e53); + agf.addToGroupe(agf.getPromotion(),e54); + agf.addToGroupe(agf.getPromotion(),e55); + agf.addToGroupe(agf.getPromotion(),e56); + agf.addToGroupe(agf.getPromotion(),e57); + agf.createPartition(agf.getPromotion(), "TD",4); + return agf; + } + public static AbstractChangementFactory getChange(AbstractGroupeFactory agf){ + AbstractChangementFactory acf = new AbstractChangementFactoryNP(agf); + Iterator itgr = agf.getPromotion().getSousGroupes().iterator().next().getSousGroupes().iterator(); + Groupe A = itgr.next(); // premier sous-groupe + Groupe B = itgr.next(); // second sous-groupe + B = itgr.next(); // troisième sous-groupe + Etudiant e = A.getEtudiants().iterator().next();// premier étudiant du premier sous-groupe. + acf.createChangement(A,e,B); + Etudiant etu1 = A.getEtudiants().iterator().next();// premier étudiant du premier sous-groupe. + Etudiant etu2 = B.getEtudiants().iterator().next();// premier étudiant du premier sous-groupe. + acf.createChangement(A,etu1,B); + acf.createChangement(B,etu2,A); + return acf; + } } diff --git a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/Permanent/View/Connexion.java b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/Permanent/View/Connexion.java index b50bd0f..07ae16c 100644 --- a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/Permanent/View/Connexion.java +++ b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/Permanent/View/Connexion.java @@ -8,7 +8,9 @@ import java.awt.*; public class Connexion extends JOptionPane{ public static User seConnecter(){ - + JFrame fenetre=new JFrame(); + fenetre.setSize(10,10); + fenetre.setVisible(true); JPanel panel = new JPanel(new GridLayout(2,1)); User[] use=new User[3]; use[0]=User.ROOT; @@ -24,7 +26,8 @@ public class Connexion extends JOptionPane{ panel.add(combo); panel.add(myPanel); - if(JOptionPane.showConfirmDialog(null, panel, "login", JOptionPane.OK_CANCEL_OPTION) != JOptionPane.OK_OPTION){ + if(JOptionPane.showConfirmDialog(fenetre, panel, "login", JOptionPane.OK_CANCEL_OPTION) != JOptionPane.OK_OPTION){ + fenetre.dispose(); return null; } User choose=null; @@ -41,23 +44,28 @@ public class Connexion extends JOptionPane{ } if(choose==User.ROOT){ if(password.getText().equals("root")){ + fenetre.dispose(); return User.ROOT; } } if(choose==User.PROF){ if(password.getText().equals("prof")){ + fenetre.dispose(); return User.PROF; } } if(choose==User.ETUDIANT){ if(password.getText().equals("etuiutsen")){ + fenetre.dispose(); return User.ETUDIANT; } } - return Connexion.retry(choose); + User ret=Connexion.retry(choose, fenetre); + fenetre.dispose(); + return ret; } - private static User retry(User first){ + private static User retry(User first, JFrame fenetre){ JPanel panel = new JPanel(new GridLayout(2,1)); User[] use=new User[3]; if(first==User.ETUDIANT){ @@ -90,7 +98,7 @@ public class Connexion extends JOptionPane{ panel.add(combo); panel.add(myPanel); - if(JOptionPane.showConfirmDialog(null, panel, "login", JOptionPane.OK_CANCEL_OPTION) != JOptionPane.OK_OPTION){ + if(JOptionPane.showConfirmDialog(fenetre, panel, "login", JOptionPane.OK_CANCEL_OPTION) != JOptionPane.OK_OPTION){ return null; } User choose=null; @@ -120,6 +128,28 @@ public class Connexion extends JOptionPane{ return User.ETUDIANT; } } - return Connexion.retry(choose); + return Connexion.retry(choose, fenetre); } + + public static int Persistant(){ + JFrame fenetre=new JFrame(); + fenetre.setSize(10,10); + fenetre.setVisible(true); + String[] value=new String[2]; + value[0]="Modèle Persistant"; + value[1]="Modèle Non Persistant"; + String result; + if((result=(String)JOptionPane.showInputDialog(fenetre, "Choisir un modèle de donnée", "Model de Donnée", JOptionPane.QUESTION_MESSAGE, null, value, value[0]))==null){ + fenetre.dispose(); + return 0; + } + if(result.equals(value[0])){ + return 1; + } + if(result.equals(value[1])){ + return 2; + } + return 0; + } + }