From 3c7b7bda6dc6bdd56c6553872a2430f7ee10f379 Mon Sep 17 00:00:00 2001 From: martins Date: Thu, 8 Dec 2022 11:04:42 +0100 Subject: [PATCH] supression git --- java/APIGroupe/Makefile | 373 --------- java/APIGroupe/Manifest.txt | 3 - java/APIGroupe/doc/allclasses-frame.html | 30 - java/APIGroupe/doc/allclasses-noframe.html | 30 - java/APIGroupe/doc/constant-values.html | 122 --- java/APIGroupe/doc/deprecated-list.html | 122 --- .../API/AbstractChangementFactory.html | 325 -------- .../API/AbstractGroupeFactory.html | 446 ---------- .../projetIHM2022FI2/API/Changement.html | 324 -------- .../projetIHM2022FI2/API/Etudiant.html | 300 ------- .../projetIHM2022FI2/API/Groupe.html | 506 ------------ .../projetIHM2022FI2/API/MonPrint.html | 232 ------ .../projetIHM2022FI2/API/TypeGroupe.html | 351 -------- .../projetIHM2022FI2/API/package-frame.html | 29 - .../projetIHM2022FI2/API/package-summary.html | 188 ----- .../projetIHM2022FI2/API/package-tree.html | 151 ---- .../MNP/AbstractChangementFactoryNP.html | 384 --------- .../MNP/AbstractGroupeFactoryNP.html | 523 ------------ .../projetIHM2022FI2/MNP/ChangementNP.html | 364 -------- .../projetIHM2022FI2/MNP/EtudiantNP.html | 340 -------- .../projetIHM2022FI2/MNP/GroupeNP.html | 605 -------------- .../projetIHM2022FI2/MNP/package-frame.html | 24 - .../projetIHM2022FI2/MNP/package-summary.html | 167 ---- .../projetIHM2022FI2/MNP/package-tree.html | 139 ---- java/APIGroupe/doc/help-doc.html | 223 ----- java/APIGroupe/doc/index-all.html | 556 ------------- java/APIGroupe/doc/index.html | 75 -- java/APIGroupe/doc/overview-frame.html | 22 - java/APIGroupe/doc/overview-summary.html | 137 --- java/APIGroupe/doc/overview-tree.html | 164 ---- java/APIGroupe/doc/package-list | 2 - java/APIGroupe/doc/script.js | 30 - java/APIGroupe/doc/stylesheet.css | 574 ------------- java/APIGroupe/res/mariadb-client.jar | Bin 446705 -> 0 bytes .../API/AbstractChangementFactory.java | 69 -- .../API/AbstractChangementFactory.java~ | 93 --- .../API/AbstractGroupeFactory.java | 129 --- .../API/AbstractGroupeFactory.java~ | 106 --- .../projetIHM2022FI2/API/Changement.java | 53 -- .../projetIHM2022FI2/API/Changement.java~ | 85 -- .../projetIHM2022FI2/API/Etudiant.java | 33 - .../projetIHM2022FI2/API/Etudiant.java~ | 33 - .../projetIHM2022FI2/API/Groupe.java | 129 --- .../projetIHM2022FI2/API/Groupe.java~ | 115 --- .../iutfbleau/projetIHM2022FI2/API/Model.java | 168 ---- .../projetIHM2022FI2/API/MonPrint.java | 12 - .../projetIHM2022FI2/API/MonPrint.java~ | 7 - .../projetIHM2022FI2/API/TypeGroupe.java | 22 - .../projetIHM2022FI2/API/TypeGroupe.java~ | 10 - .../MNP/AbstractChangementFactoryNP.java | 136 --- .../MNP/AbstractGroupeFactoryNP.java | 274 ------ .../MNP/ETU/Model/ModelEtu.java | 360 -------- .../MNP/PROF/Model/ModelProf.java | 325 -------- .../MNP/ROOT/Model/ModelRoot.java | 463 ----------- .../MP/AbstractChangementFactoryNP.java | 358 -------- .../MP/AbstractGroupeFactoryNP.java | 782 ------------------ .../projetIHM2022FI2/MP/ChangementNP.java | 141 ---- .../MP/ETU/Model/ModelEtu.java | 358 -------- .../MP/ETU/View/FenetreEtudiant.java | 91 -- .../MP/ETU/View/FenetreGroupe.java | 132 --- .../MP/ETU/View/PanelEtudiant.java | 41 - .../projetIHM2022FI2/MP/EtudiantNP.java | 74 -- .../projetIHM2022FI2/MP/GroupeNP.java | 254 ------ .../MP/PROF/Model/ModelProf.java | 325 -------- .../MP/PROF/View/FenetreEtudiant.java | 67 -- .../MP/PROF/View/FenetreGroupe.java | 106 --- .../MP/PROF/View/PanelEtudiant.java | 21 - .../MP/ROOT/Controller/ActionChangement.java | 47 -- .../MP/ROOT/Controller/ActionListChange.java | 38 - .../Controller/ActionListenerNouveauEtu.java | 49 -- .../Controller/ActionListenerSuprEtu.java | 37 - .../MP/ROOT/Controller/ListenerFindBar.java | 43 - .../Controller/ObservateurModifGroupe.java | 183 ---- .../MP/ROOT/Controller/SelecteurEtudiant.java | 59 -- .../MP/ROOT/Model/ModelRoot.java | 462 ----------- .../MP/ROOT/View/FenetreChangement.java | 78 -- .../MP/ROOT/View/FenetreEtudiant.java | 103 --- .../MP/ROOT/View/FenetreGroupe.java | 127 --- .../MP/ROOT/View/FenetreSelectionEtu.java | 134 --- .../MP/ROOT/View/FindBarFenetre.java | 85 -- .../MP/ROOT/View/PanelEtudiant.java | 54 -- .../Controller/ActionListenerChangeEtu.java | 84 -- .../ControllerGroupeBChangement.java | 32 - .../Controller/ObservateurChangeGroupe.java | 33 - .../Controller/ObservateurFenetre.java | 65 -- .../projetIHM2022FI2/Permanent/IHM.java | 217 ----- .../projetIHM2022FI2/Permanent/Util/User.java | 11 - .../Permanent/View/Chargement.java | 45 - .../Permanent/View/Connexion.java | 162 ---- 89 files changed, 15381 deletions(-) delete mode 100644 java/APIGroupe/Makefile delete mode 100644 java/APIGroupe/Manifest.txt delete mode 100644 java/APIGroupe/doc/allclasses-frame.html delete mode 100644 java/APIGroupe/doc/allclasses-noframe.html delete mode 100644 java/APIGroupe/doc/constant-values.html delete mode 100644 java/APIGroupe/doc/deprecated-list.html delete mode 100644 java/APIGroupe/doc/fr/iutfbleau/projetIHM2022FI2/API/AbstractChangementFactory.html delete mode 100644 java/APIGroupe/doc/fr/iutfbleau/projetIHM2022FI2/API/AbstractGroupeFactory.html delete mode 100644 java/APIGroupe/doc/fr/iutfbleau/projetIHM2022FI2/API/Changement.html delete mode 100644 java/APIGroupe/doc/fr/iutfbleau/projetIHM2022FI2/API/Etudiant.html delete mode 100644 java/APIGroupe/doc/fr/iutfbleau/projetIHM2022FI2/API/Groupe.html delete mode 100644 java/APIGroupe/doc/fr/iutfbleau/projetIHM2022FI2/API/MonPrint.html delete mode 100644 java/APIGroupe/doc/fr/iutfbleau/projetIHM2022FI2/API/TypeGroupe.html delete mode 100644 java/APIGroupe/doc/fr/iutfbleau/projetIHM2022FI2/API/package-frame.html delete mode 100644 java/APIGroupe/doc/fr/iutfbleau/projetIHM2022FI2/API/package-summary.html delete mode 100644 java/APIGroupe/doc/fr/iutfbleau/projetIHM2022FI2/API/package-tree.html delete mode 100644 java/APIGroupe/doc/fr/iutfbleau/projetIHM2022FI2/MNP/AbstractChangementFactoryNP.html delete mode 100644 java/APIGroupe/doc/fr/iutfbleau/projetIHM2022FI2/MNP/AbstractGroupeFactoryNP.html delete mode 100644 java/APIGroupe/doc/fr/iutfbleau/projetIHM2022FI2/MNP/ChangementNP.html delete mode 100644 java/APIGroupe/doc/fr/iutfbleau/projetIHM2022FI2/MNP/EtudiantNP.html delete mode 100644 java/APIGroupe/doc/fr/iutfbleau/projetIHM2022FI2/MNP/GroupeNP.html delete mode 100644 java/APIGroupe/doc/fr/iutfbleau/projetIHM2022FI2/MNP/package-frame.html delete mode 100644 java/APIGroupe/doc/fr/iutfbleau/projetIHM2022FI2/MNP/package-summary.html delete mode 100644 java/APIGroupe/doc/fr/iutfbleau/projetIHM2022FI2/MNP/package-tree.html delete mode 100644 java/APIGroupe/doc/help-doc.html delete mode 100644 java/APIGroupe/doc/index-all.html delete mode 100644 java/APIGroupe/doc/index.html delete mode 100644 java/APIGroupe/doc/overview-frame.html delete mode 100644 java/APIGroupe/doc/overview-summary.html delete mode 100644 java/APIGroupe/doc/overview-tree.html delete mode 100644 java/APIGroupe/doc/package-list delete mode 100644 java/APIGroupe/doc/script.js delete mode 100644 java/APIGroupe/doc/stylesheet.css delete mode 100644 java/APIGroupe/res/mariadb-client.jar delete mode 100644 java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/API/AbstractChangementFactory.java delete mode 100644 java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/API/AbstractChangementFactory.java~ delete mode 100644 java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/API/AbstractGroupeFactory.java delete mode 100644 java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/API/AbstractGroupeFactory.java~ delete mode 100644 java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/API/Changement.java delete mode 100644 java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/API/Changement.java~ delete mode 100644 java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/API/Etudiant.java delete mode 100644 java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/API/Etudiant.java~ delete mode 100644 java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/API/Groupe.java delete mode 100644 java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/API/Groupe.java~ delete mode 100644 java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/API/Model.java delete mode 100644 java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/API/MonPrint.java delete mode 100644 java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/API/MonPrint.java~ delete mode 100644 java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/API/TypeGroupe.java delete mode 100644 java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/API/TypeGroupe.java~ delete mode 100644 java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MNP/AbstractChangementFactoryNP.java delete mode 100644 java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MNP/AbstractGroupeFactoryNP.java delete mode 100644 java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MNP/ETU/Model/ModelEtu.java delete mode 100644 java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MNP/PROF/Model/ModelProf.java delete mode 100644 java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MNP/ROOT/Model/ModelRoot.java delete mode 100644 java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MP/AbstractChangementFactoryNP.java delete mode 100644 java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MP/AbstractGroupeFactoryNP.java delete mode 100644 java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MP/ChangementNP.java delete mode 100644 java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MP/ETU/Model/ModelEtu.java delete mode 100644 java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MP/ETU/View/FenetreEtudiant.java delete mode 100644 java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MP/ETU/View/FenetreGroupe.java delete mode 100644 java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MP/ETU/View/PanelEtudiant.java delete mode 100644 java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MP/EtudiantNP.java delete mode 100644 java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MP/GroupeNP.java delete mode 100644 java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MP/PROF/Model/ModelProf.java delete mode 100644 java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MP/PROF/View/FenetreEtudiant.java delete mode 100644 java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MP/PROF/View/FenetreGroupe.java delete mode 100644 java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MP/PROF/View/PanelEtudiant.java delete mode 100644 java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MP/ROOT/Controller/ActionChangement.java delete mode 100644 java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MP/ROOT/Controller/ActionListChange.java delete mode 100644 java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MP/ROOT/Controller/ActionListenerNouveauEtu.java delete mode 100644 java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MP/ROOT/Controller/ActionListenerSuprEtu.java delete mode 100644 java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MP/ROOT/Controller/ListenerFindBar.java delete mode 100644 java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MP/ROOT/Controller/ObservateurModifGroupe.java delete mode 100644 java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MP/ROOT/Controller/SelecteurEtudiant.java delete mode 100644 java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MP/ROOT/Model/ModelRoot.java delete mode 100644 java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MP/ROOT/View/FenetreChangement.java delete mode 100644 java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MP/ROOT/View/FenetreEtudiant.java delete mode 100644 java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MP/ROOT/View/FenetreGroupe.java delete mode 100644 java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MP/ROOT/View/FenetreSelectionEtu.java delete mode 100644 java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MP/ROOT/View/FindBarFenetre.java delete mode 100644 java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MP/ROOT/View/PanelEtudiant.java delete mode 100644 java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/Permanent/Controller/ActionListenerChangeEtu.java delete mode 100644 java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/Permanent/Controller/ControllerGroupeBChangement.java delete mode 100644 java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/Permanent/Controller/ObservateurChangeGroupe.java delete mode 100644 java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/Permanent/Controller/ObservateurFenetre.java delete mode 100644 java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/Permanent/IHM.java delete mode 100644 java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/Permanent/Util/User.java delete mode 100644 java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/Permanent/View/Chargement.java delete mode 100644 java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/Permanent/View/Connexion.java diff --git a/java/APIGroupe/Makefile b/java/APIGroupe/Makefile deleted file mode 100644 index f327c55..0000000 --- a/java/APIGroupe/Makefile +++ /dev/null @@ -1,373 +0,0 @@ -# COMMANDES # -JAVAC = javac -# note $$ to get a single shell $ -JAVAC_OPTIONS = -implicit:none -d build -classpath "res/mariadb-client.jar:build" -sourcepath src -JAVA = java -JAR = jar -EXEC_JAR = ${JAVA} -jar - -# CHEMINS RELATIFS -SRC = src/fr/iutfbleau/projetIHM2022FI2 -BUILD = build/fr/iutfbleau/projetIHM2022FI2 -DOC = doc/fr/iutfbleau/projetIHM2022FI2 - -# CHOIX NOMS -JAR_MNP = IHM.jar - -# BUTS FACTICES # -.PHONY : run clean doc - -# BUT PAR DEFAUT # -run : build\ - ${JAR_MNP} - ${EXEC_JAR} ${JAR_MNP} - -# AUTRE BUTS -doc : - 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/ROOT/Model/*.java src/fr/iutfbleau/projetIHM2022FI2/PROF/Model/*.java src/fr/iutfbleau/projetIHM2022FI2/PROF/View/*.java src/fr/iutfbleau/projetIHM2022FI2/PROF/Controller/*.java - javadoc -d doc src/fr/iutfbleau/projetIHM2022FI2/API/*.java src/fr/iutfbleau/projetIHM2022FI2/MNP/*.java src/fr/iutfbleau/projetIHM2022FI2/MNP/ROOT/Controller/*.java src/fr/iutfbleau/projetIHM2022FI2/MNP/ROOT/View/*.java src/fr/iutfbleau/projetIHM2022FI2/MNP/ETU/Controller/*.java src/fr/iutfbleau/projetIHM2022FI2/MNP/ETU/View/*.java src/fr/iutfbleau/projetIHM2022FI2/MNP/ETU/Model/*.java src/fr/iutfbleau/projetIHM2022FI2/ROOT/Model/*.java src/fr/iutfbleau/projetIHM2022FI2/PROF/Model/*.java src/fr/iutfbleau/projetIHM2022FI2/PROF/View/*.java src/fr/iutfbleau/projetIHM2022FI2/PROF/Controller/*.java -clean : - rm -rf ${BUILD}/* *.jar - - -# REGLES DE DEPENDANCE # -## Dossier ## -build : - mkdir build -## API ## -${BUILD}/API/Model.class : ${SRC}/API/Model.java - ${JAVAC} ${JAVAC_OPTIONS} ${SRC}/API/Model.java - -${BUILD}/API/MonPrint.class : ${SRC}/API/MonPrint.java - ${JAVAC} ${JAVAC_OPTIONS} ${SRC}/API/MonPrint.java - -${BUILD}/API/TypeGroupe.class : ${SRC}/API/TypeGroupe.java - ${JAVAC} ${JAVAC_OPTIONS} ${SRC}/API/TypeGroupe.java - -${BUILD}/API/Groupe.class : ${SRC}/API/Groupe.java \ - ${BUILD}/API/TypeGroupe.class\ - ${BUILD}/API/MonPrint.class - ${JAVAC} ${JAVAC_OPTIONS} ${SRC}/API/Groupe.java - -${BUILD}/API/Etudiant.class : ${SRC}/API/Etudiant.java \ - ${BUILD}/API/MonPrint.class - ${JAVAC} ${JAVAC_OPTIONS} ${SRC}/API/Etudiant.java - -${BUILD}/API/Changement.class : ${SRC}/API/Changement.java \ - ${BUILD}/API/Etudiant.class \ - ${BUILD}/API/Groupe.class - ${JAVAC} ${JAVAC_OPTIONS} ${SRC}/API/Changement.java - -${BUILD}/API/AbstractGroupeFactory.class : ${SRC}/API/AbstractGroupeFactory.java \ - ${BUILD}/API/Groupe.class \ - ${BUILD}/API/Etudiant.class - ${JAVAC} ${JAVAC_OPTIONS} ${SRC}/API/AbstractGroupeFactory.java - -${BUILD}/API/AbstractChangementFactory.class : ${SRC}/API/AbstractChangementFactory.java \ - ${BUILD}/API/AbstractGroupeFactory.class \ - ${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/AbstractGroupeFactoryNP.class : ${SRC}/MNP/AbstractGroupeFactoryNP.java \ - ${BUILD}/API/AbstractGroupeFactory.class - ${JAVAC} ${JAVAC_OPTIONS} ${SRC}/MNP/AbstractGroupeFactoryNP.java - -${BUILD}/MNP/AbstractChangementFactoryNP.class : ${SRC}/MNP/AbstractChangementFactoryNP.java \ - ${BUILD}/API/AbstractChangementFactory.class \ - ${BUILD}/API/Changement.class - ${JAVAC} ${JAVAC_OPTIONS} ${SRC}/MNP/AbstractChangementFactoryNP.java - - -## ROOT ## - - -##  Model ### - -${BUILD}/MNP/ROOT/Model/ModelRoot.class : ${SRC}/MNP/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}/MNP/ROOT/Model/ModelRoot.java - - -## ETU ## - - - -##  Model ### - -${BUILD}/MNP/ETU/Model/ModelEtu.class : ${SRC}/MNP/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}/MNP/ETU/Model/ModelEtu.java - - -## PROF ## - - - -##  Model ### - -${BUILD}/MNP/PROF/Model/ModelProf.class : ${SRC}/MNP/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}/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/IHM.class : ${SRC}/Permanent/IHM.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/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/IHM.java -## View ## - -${BUILD}/Permanent/View/Chargement.class : ${SRC}/Permanent/View/Chargement.java - ${JAVAC} ${JAVAC_OPTIONS} ${SRC}/Permanent//View/Chargement.java - -${BUILD}/Permanent/View/Connexion.class : ${SRC}/Permanent/View/Connexion.java - ${JAVAC} ${JAVAC_OPTIONS} ${SRC}/Permanent/View/Connexion.java - -## Util  ## - -${BUILD}/Permanent/Util/User.class : ${SRC}/Permanent/Util/User.java - ${JAVAC} ${JAVAC_OPTIONS} ${SRC}/Permanent/Util/User.java - -## Controller ## - -${BUILD}/Permanent/Controller/ObservateurFenetre.class : ${SRC}/Permanent/Controller/ObservateurFenetre.java - ${JAVAC} ${JAVAC_OPTIONS} ${SRC}/Permanent/Controller/ObservateurFenetre.java - -${BUILD}/Permanent/Controller/ObservateurChangeGroupe.class : ${SRC}/Permanent/Controller/ObservateurChangeGroupe.java - ${JAVAC} ${JAVAC_OPTIONS} ${SRC}/Permanent/Controller/ObservateurChangeGroupe.java - -${BUILD}/Permanent/Controller/ActionListenerChangeEtu.class : ${SRC}/Permanent/Controller/ActionListenerChangeEtu.java \ - ${BUILD}/Permanent/Controller/ControllerGroupeBChangement.class - ${JAVAC} ${JAVAC_OPTIONS} ${SRC}/Permanent/Controller/ActionListenerChangeEtu.java - -${BUILD}/Permanent/Controller/ControllerGroupeBChangement.class : ${SRC}/Permanent/Controller/ControllerGroupeBChangement.java - ${JAVAC} ${JAVAC_OPTIONS} ${SRC}/Permanent/Controller/ControllerGroupeBChangement.java - -# ## JARS ## - - ${JAR_MNP} : ${BUILD}/Permanent/IHM.class - ${JAR} cfme ${JAR_MNP} Manifest.txt fr/iutfbleau/projetIHM2022FI2/Permanent/IHM res/ -C build fr diff --git a/java/APIGroupe/Manifest.txt b/java/APIGroupe/Manifest.txt deleted file mode 100644 index b9f8abb..0000000 --- a/java/APIGroupe/Manifest.txt +++ /dev/null @@ -1,3 +0,0 @@ -Manifest-Version: 1.0 -Class-Path: res/mariadb-client.jar -Created-By: 1.7.0_06 (Oracle Corporation) \ No newline at end of file diff --git a/java/APIGroupe/doc/allclasses-frame.html b/java/APIGroupe/doc/allclasses-frame.html deleted file mode 100644 index 6ad2b37..0000000 --- a/java/APIGroupe/doc/allclasses-frame.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - -All Classes - - - - - -

All Classes

-
- -
- - diff --git a/java/APIGroupe/doc/allclasses-noframe.html b/java/APIGroupe/doc/allclasses-noframe.html deleted file mode 100644 index e8ae56d..0000000 --- a/java/APIGroupe/doc/allclasses-noframe.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - -All Classes - - - - - -

All Classes

-
- -
- - diff --git a/java/APIGroupe/doc/constant-values.html b/java/APIGroupe/doc/constant-values.html deleted file mode 100644 index 508445c..0000000 --- a/java/APIGroupe/doc/constant-values.html +++ /dev/null @@ -1,122 +0,0 @@ - - - - - -Constant Field Values - - - - - - - - -
- - - - - - - -
- - -
-

Constant Field Values

-

Contents

-
- -
- - - - - - - -
- - - - diff --git a/java/APIGroupe/doc/deprecated-list.html b/java/APIGroupe/doc/deprecated-list.html deleted file mode 100644 index 6c07c71..0000000 --- a/java/APIGroupe/doc/deprecated-list.html +++ /dev/null @@ -1,122 +0,0 @@ - - - - - -Deprecated List - - - - - - - - -
- - - - - - - -
- - -
-

Deprecated API

-

Contents

-
- -
- - - - - - - -
- - - - diff --git a/java/APIGroupe/doc/fr/iutfbleau/projetIHM2022FI2/API/AbstractChangementFactory.html b/java/APIGroupe/doc/fr/iutfbleau/projetIHM2022FI2/API/AbstractChangementFactory.html deleted file mode 100644 index 03176c4..0000000 --- a/java/APIGroupe/doc/fr/iutfbleau/projetIHM2022FI2/API/AbstractChangementFactory.html +++ /dev/null @@ -1,325 +0,0 @@ - - - - - -AbstractChangementFactory - - - - - - - - -
- - - - - - - -
- - - -
-
fr.iutfbleau.projetIHM2022FI2.API
-

Interface AbstractChangementFactory

-
-
-
-
    -
  • -
    -
    All Known Implementing Classes:
    -
    AbstractChangementFactoryNP
    -
    -
    -
    -
    public interface AbstractChangementFactory
    -
    Usine abstraite gérant l'ensemble des changements.
    -
  • -
-
-
- -
-
-
    -
  • - -
      -
    • - - -

      Method Detail

      - - - -
        -
      • -

        getGroupeFactory

        -
        AbstractGroupeFactory getGroupeFactory()
        -
        permet de récupérer une usine abstraite pour les groupes qui fonctionne en tandem avec cette usine abstraite
        -
        -
        Returns:
        -
        cette usine abstraite pour les groupes
        -
        -
      • -
      - - - -
        -
      • -

        getAllChangements

        -
        java.util.Set<Changement> getAllChangements()
        -
        permet de récupérer les changements
        -
        -
        Returns:
        -
        l'ensemble de tous les changements en attente - - NB. Attention. C'était Iterator dans la version beta.
        -
        -
      • -
      - - - -
        -
      • -

        applyChangement

        -
        void applyChangement(Changement c)
        -
        permet de mettre en oeuvre un changement connu de l'usine abstraite. - En cas de succès, le changement est oublié (détruit).
        -
        -
        Throws:
        -
        java.lang.NullPointerException - si un argument est null
        -
        java.lang.IllegalArgumentException - si inconnu de l'usine abstraite
        -
        -
      • -
      - - - -
        -
      • -

        deleteChangement

        -
        void deleteChangement(Changement c)
        -
        permet de supprimer un changement connu de l'usine abstraite.
        -
        -
        Throws:
        -
        java.lang.NullPointerException - si un argument est null
        -
        java.lang.IllegalArgumentException - si inconnu de l'usine abstraite
        -
        -
      • -
      - - - -
        -
      • -

        createChangement

        -
        void createChangement(Groupe A,
        -                      Etudiant e,
        -                      Groupe B)
        -
        permet d'ajouter un nouveau changement.
        -
        -
        Parameters:
        -
        A - groupe actuel
        -
        B - groupe demandé
        -
        e - étudiant concerné par le changement
        -
        Throws:
        -
        java.lang.NullPointerException - si un argument est null
        -
        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.
        -
        -
      • -
      -
    • -
    -
  • -
-
-
- - -
- - - - - - - -
- - - - diff --git a/java/APIGroupe/doc/fr/iutfbleau/projetIHM2022FI2/API/AbstractGroupeFactory.html b/java/APIGroupe/doc/fr/iutfbleau/projetIHM2022FI2/API/AbstractGroupeFactory.html deleted file mode 100644 index 403c756..0000000 --- a/java/APIGroupe/doc/fr/iutfbleau/projetIHM2022FI2/API/AbstractGroupeFactory.html +++ /dev/null @@ -1,446 +0,0 @@ - - - - - -AbstractGroupeFactory - - - - - - - - -
- - - - - - - -
- - - -
-
fr.iutfbleau.projetIHM2022FI2.API
-

Interface AbstractGroupeFactory

-
-
-
-
    -
  • -
    -
    All Known Implementing Classes:
    -
    AbstractGroupeFactoryNP
    -
    -
    -
    -
    public interface AbstractGroupeFactory
    -
    Usine abstraite gérant l'ensemble des groupes.
    -
  • -
-
-
-
    -
  • - -
      -
    • - - -

      Method Summary

      - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
      All Methods Instance Methods Abstract Methods 
      Modifier and TypeMethod and Description
      voidaddToGroupe(Groupe g, - Etudiant e) -
      permet d'ajouter un étudiant à un groupe.
      -
      voidcreateGroupe(Groupe pere, - java.lang.String name, - int min, - int max) -
      permet d'ajouter un groupe vide de type FREE comme sous-groupe d'un groupe donné.
      -
      voidcreatePartition(Groupe pere, - java.lang.String name, - int n) -
      permet de créer une partition automatiquement sous un groupe donné.
      -
      voiddeleteGroupe(Groupe g) -
      permet de supprimer un groupe connu de l'usine abstraite qui ne contient pas de groupes.
      -
      voiddropFromGroupe(Groupe g, - Etudiant e) -
      permet d'enlever un étudiant d'un groupe.
      -
      java.util.Set<Etudiant>getEtudiants(java.lang.String nomEtu) -
      permet de retrouver un étudiant à partir d'un String.
      -
      java.util.Set<Groupe>getGroupesOfEtudiant(Etudiant etu) -
      permet de retrouver les groupes d'un étudiant.
      -
      GroupegetPromotion() -
      permet de récupérer le Groupe qui contient les étudiants de toute la promotion
      -
      java.lang.Booleanknows(Groupe g) -
      Test si le groupe g est connu de l'usine (connu maintenant).
      -
      -
    • -
    -
  • -
-
-
-
    -
  • - -
      -
    • - - -

      Method Detail

      - - - -
        -
      • -

        getPromotion

        -
        Groupe getPromotion()
        -
        permet de récupérer le Groupe qui contient les étudiants de toute la promotion
        -
        -
        Returns:
        -
        la promo.
        -
        -
      • -
      - - - -
        -
      • -

        knows

        -
        java.lang.Boolean knows(Groupe g)
        -
        Test si le groupe g est connu de l'usine (connu maintenant). - Si la réponse est true, les méthodes avec ce groupe en paramètre devraient bien fonctionner. - Si la réponse est false, le comportement n'est pas garanti.
        -
      • -
      - - - -
        -
      • -

        deleteGroupe

        -
        void deleteGroupe(Groupe g)
        -
        permet de supprimer un groupe connu de l'usine abstraite qui ne contient pas de groupes. - Pour détruire un groupe connu qui en contient d'autres il faut le faire récursivement.
        -
        -
        Throws:
        -
        java.lang.NullPointerException - si un argument est null
        -
        java.lang.IllegalStateException - si le groupe contient des groupes
        -
        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)
        -
        -
      • -
      - - - -
        -
      • -

        createGroupe

        -
        void createGroupe(Groupe pere,
        -                  java.lang.String name,
        -                  int min,
        -                  int max)
        -
        permet d'ajouter un groupe vide de type FREE comme sous-groupe d'un groupe donné.
        -
        -
        Parameters:
        -
        pere - le groupe père du groupe à créer
        -
        name - le nom du groupe à créer
        -
        min,max - bornes indicatives sur la taille du groupe à créer
        -
        Throws:
        -
        java.lang.NullPointerException - si un argument est null
        -
        java.lang.IllegalArgumentException - si le groupe pere est de type PARTITION - ou si il n'y a pas 0 < min <= max
        -
        -
      • -
      - - - -
        -
      • -

        createPartition

        -
        void createPartition(Groupe pere,
        -                     java.lang.String name,
        -                     int n)
        -
        permet de créer une partition automatiquement sous un groupe donné.
        -
        -
        Parameters:
        -
        pere - le groupe père du groupe à partitionner
        -
        name - le nom des groupe à créer (on ajoutera à la suite un numéro ou une lettre pour distinguer chaque groupe)
        -
        n - le nombre de partitions
        -
        Throws:
        -
        java.lang.NullPointerException - si un argument est null
        -
        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.
        -
        -
      • -
      - - - -
        -
      • -

        addToGroupe

        -
        void addToGroupe(Groupe g,
        -                 Etudiant e)
        -
        permet d'ajouter un étudiant à un groupe.
        -
        -
        Parameters:
        -
        g - le groupe dans lequel il faut ajouter l'étudiant
        -
        e - l'étudiant à ajouter
        -
        Throws:
        -
        java.lang.NullPointerException - si un argument est null
        -
        java.lang.IllegalArgumentException - la factory ne connaît pas g
        -
        java.lang.IllegalStateException - le père de g ne contient pas e
        -
        -
      • -
      - - - -
        -
      • -

        dropFromGroupe

        -
        void dropFromGroupe(Groupe g,
        -                    Etudiant e)
        -
        permet d'enlever un étudiant d'un groupe.
        -
        -
        Parameters:
        -
        g - le groupe dans lequel il faut enlever l'étudiant
        -
        e - l'étudiant à enlever
        -
        Throws:
        -
        java.lang.NullPointerException - si un argument est null
        -
        java.lang.IllegalStateException - g ne contient pas e
        -
        java.lang.IllegalArgumentException - la factory ne connaît pas g
        -
        -
      • -
      - - - -
        -
      • -

        getEtudiants

        -
        java.util.Set<Etudiant> getEtudiants(java.lang.String nomEtu)
        -
        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.
        -
        -
        Parameters:
        -
        String - nomEtu le nom approximmatif de l'étudiant
        -
        Returns:
        -
        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.
        -
        -
      • -
      - - - -
        -
      • -

        getGroupesOfEtudiant

        -
        java.util.Set<Groupe> getGroupesOfEtudiant(Etudiant etu)
        -
        permet de retrouver les groupes d'un étudiant.
        -
        -
        Parameters:
        -
        Etu - un étudiant
        -
        Returns:
        -
        Etudiant l'étudiant connu de la factory ayant cet identifiant
        -
        Throws:
        -
        java.lang.NullPointerException - si le String est null.
        -
        -
      • -
      -
    • -
    -
  • -
-
-
- - -
- - - - - - - -
- - - - diff --git a/java/APIGroupe/doc/fr/iutfbleau/projetIHM2022FI2/API/Changement.html b/java/APIGroupe/doc/fr/iutfbleau/projetIHM2022FI2/API/Changement.html deleted file mode 100644 index b8bb4b7..0000000 --- a/java/APIGroupe/doc/fr/iutfbleau/projetIHM2022FI2/API/Changement.html +++ /dev/null @@ -1,324 +0,0 @@ - - - - - -Changement - - - - - - - - -
- - - - - - - -
- - - -
-
fr.iutfbleau.projetIHM2022FI2.API
-

Interface Changement

-
-
-
-
    -
  • -
    -
    All Superinterfaces:
    -
    MonPrint
    -
    -
    -
    All Known Implementing Classes:
    -
    ChangementNP
    -
    -
    -
    -
    public interface Changement
    -extends MonPrint
    -
    Une demande de changement de groupe - concerne un étudiant, qui est dans un groupe A et veut aller dans un groupe B.
    -
  • -
-
-
-
    -
  • - -
      -
    • - - -

      Method Summary

      - - - - - - - - - - - - - - - - - - - - - - - - - - -
      All Methods Instance Methods Abstract Methods Default Methods 
      Modifier and TypeMethod and Description
      GroupegetA() -
      permet de récupérer le groupe de depart
      -
      GroupegetB() -
      permet de récupérer le groupe d'arrivée
      -
      EtudiantgetEtu() -
      permet de récupérer l'étudiant demandant le changement
      -
      intgetId() -
      permet de récupérer l'identifiant du changement (référence interne sans intérêt irl).
      -
      default java.lang.StringmonPrint() -
      Fonctionne comme ToPrint() sauf car une interface n'a pas le droit de faire un override sur ToPrint().
      -
      -
    • -
    -
  • -
-
-
- -
-
- - -
- - - - - - - -
- - - - diff --git a/java/APIGroupe/doc/fr/iutfbleau/projetIHM2022FI2/API/Etudiant.html b/java/APIGroupe/doc/fr/iutfbleau/projetIHM2022FI2/API/Etudiant.html deleted file mode 100644 index a040547..0000000 --- a/java/APIGroupe/doc/fr/iutfbleau/projetIHM2022FI2/API/Etudiant.html +++ /dev/null @@ -1,300 +0,0 @@ - - - - - -Etudiant - - - - - - - - -
- - - - - - - -
- - - -
-
fr.iutfbleau.projetIHM2022FI2.API
-

Interface Etudiant

-
-
-
-
    -
  • -
    -
    All Superinterfaces:
    -
    MonPrint
    -
    -
    -
    All Known Implementing Classes:
    -
    EtudiantNP
    -
    -
    -
    -
    public interface Etudiant
    -extends MonPrint
    -
    Un étudiant
    -
  • -
-
-
-
    -
  • - -
      -
    • - - -

      Method Summary

      - - - - - - - - - - - - - - - - - - - - - - -
      All Methods Instance Methods Abstract Methods Default Methods 
      Modifier and TypeMethod and Description
      intgetId() -
      permet de récupérer l'identifiant de l'étudiant.
      -
      java.lang.StringgetNom() -
      permet de récupérer
      -
      java.lang.StringgetPrenom() -
      permet de récupérer
      -
      default java.lang.StringmonPrint() -
      Fonctionne comme ToPrint() sauf car une interface n'a pas le droit de faire un override sur ToPrint().
      -
      -
    • -
    -
  • -
-
-
- -
-
- - -
- - - - - - - -
- - - - diff --git a/java/APIGroupe/doc/fr/iutfbleau/projetIHM2022FI2/API/Groupe.html b/java/APIGroupe/doc/fr/iutfbleau/projetIHM2022FI2/API/Groupe.html deleted file mode 100644 index 7c82028..0000000 --- a/java/APIGroupe/doc/fr/iutfbleau/projetIHM2022FI2/API/Groupe.html +++ /dev/null @@ -1,506 +0,0 @@ - - - - - -Groupe - - - - - - - - -
- - - - - - - -
- - - -
-
fr.iutfbleau.projetIHM2022FI2.API
-

Interface Groupe

-
-
-
-
    -
  • -
    -
    All Superinterfaces:
    -
    MonPrint
    -
    -
    -
    All Known Implementing Classes:
    -
    GroupeNP
    -
    -
    -
    -
    public interface Groupe
    -extends MonPrint
    -
    Un groupe
    -
  • -
-
-
-
    -
  • - -
      -
    • - - -

      Method Summary

      - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
      All Methods Instance Methods Abstract Methods Default Methods 
      Modifier and TypeMethod and Description
      booleanaddEtudiant(Etudiant e) -
      Ajoute un étudiant.
      -
      booleanaddSousGroupe(Groupe g) -
      Ajoute un sous-groupe.
      -
      java.util.Set<Etudiant>getEtudiants() -
      Potentiellement "vide"
      -
      intgetId() -
      permet de récupérer l'identifiant d'un groupe (référence interne sans intérêt irl).
      -
      intgetMax() -
      permet de récupérer le nombre maximum d'étudiants souhaités dans un groupe.
      -
      intgetMin() -
      permet de récupérer le nombre minimum d'étudiants souhaités dans le groupe.
      -
      java.lang.StringgetName() -
      permet de récupérer le nom d'un groupe (utile irl).
      -
      GroupegetPointPoint() -
      permet de récupérer le groupe père - un groupe racine devrait retourner lui-même
      -
      intgetSize() -
      permet de récupérer le nombre d'étudiants dans ce groupe.
      -
      java.util.Set<Groupe>getSousGroupes() -
      Potentiellement "vide"
      -
      TypeGroupegetType() -
      permet de récupérer la nature du groupe
      -
      default java.lang.StringmonPrint() -
      Fonctionne comme ToPrint() sauf car une interface n'a pas le droit de faire un override sur ToPrint().
      -
      booleanremoveEtudiant(Etudiant e) -
      Enlève un étudiant.
      -
      booleanremoveSousGroupe(Groupe g) -
      Enlève un groupe.
      -
      -
    • -
    -
  • -
-
-
-
    -
  • - -
      -
    • - - -

      Method Detail

      - - - -
        -
      • -

        addEtudiant

        -
        boolean addEtudiant(Etudiant e)
        -
        Ajoute un étudiant. Se comporte comme add de l'interface Set.
        -
        -
        Returns:
        -
        true iff e est ajouté
        -
        -
      • -
      - - - -
        -
      • -

        removeEtudiant

        -
        boolean removeEtudiant(Etudiant e)
        -
        Enlève un étudiant. Se comporte comme remove de l'interface Set.
        -
        -
        Returns:
        -
        true iff e est enlevé
        -
        -
      • -
      - - - -
        -
      • -

        addSousGroupe

        -
        boolean addSousGroupe(Groupe g)
        -
        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.
        -
        -
        Returns:
        -
        true iff g est ajouté
        -
        -
      • -
      - - - -
        -
      • -

        removeSousGroupe

        -
        boolean removeSousGroupe(Groupe g)
        -
        Enlève un groupe. Se comporte comme remove de l'interface Set.
        -
        -
        Returns:
        -
        true iff e est enlevé
        -
        -
      • -
      - - - -
        -
      • -

        getId

        -
        int getId()
        -
        permet de récupérer l'identifiant d'un groupe (référence interne sans intérêt irl).
        -
        -
        Returns:
        -
        l'identifiant.
        -
        -
      • -
      - - - -
        -
      • -

        getName

        -
        java.lang.String getName()
        -
        permet de récupérer le nom d'un groupe (utile irl).
        -
        -
        Returns:
        -
        le nom.
        -
        -
      • -
      - - - -
        -
      • -

        getMin

        -
        int getMin()
        -
        permet de récupérer le nombre minimum d'étudiants souhaités dans le groupe.
        -
        -
        Returns:
        -
        le minimum souhaité
        -
        -
      • -
      - - - -
        -
      • -

        getMax

        -
        int getMax()
        -
        permet de récupérer le nombre maximum d'étudiants souhaités dans un groupe.
        -
        -
        Returns:
        -
        le maximum souhaité
        -
        -
      • -
      - - - -
        -
      • -

        getSize

        -
        int getSize()
        -
        permet de récupérer le nombre d'étudiants dans ce groupe.
        -
        -
        Returns:
        -
        le nombre de places prises (pas forcément limité entre Min et Max, mais c'est le but)
        -
        -
      • -
      - - - -
        -
      • -

        getType

        -
        TypeGroupe getType()
        -
        permet de récupérer la nature du groupe
        -
        -
        Returns:
        -
        le type du groupe
        -
        -
      • -
      - - - -
        -
      • -

        getPointPoint

        -
        Groupe getPointPoint()
        -
        permet de récupérer le groupe père - un groupe racine devrait retourner lui-même
        -
        -
        Returns:
        -
        le père
        -
        -
      • -
      - - - -
        -
      • -

        getSousGroupes

        -
        java.util.Set<Groupe> getSousGroupes()
        -
        Potentiellement "vide"
        -
        -
        Returns:
        -
        l'ensemble des sous-groupes.
        -
        -
      • -
      - - - -
        -
      • -

        getEtudiants

        -
        java.util.Set<Etudiant> getEtudiants()
        -
        Potentiellement "vide"
        -
        -
        Returns:
        -
        l'ensemble des étudiants.
        -
        -
      • -
      - - - - -
    • -
    -
  • -
-
-
- - -
- - - - - - - -
- - - - diff --git a/java/APIGroupe/doc/fr/iutfbleau/projetIHM2022FI2/API/MonPrint.html b/java/APIGroupe/doc/fr/iutfbleau/projetIHM2022FI2/API/MonPrint.html deleted file mode 100644 index 3863bf0..0000000 --- a/java/APIGroupe/doc/fr/iutfbleau/projetIHM2022FI2/API/MonPrint.html +++ /dev/null @@ -1,232 +0,0 @@ - - - - - -MonPrint - - - - - - - - -
- - - - - - - -
- - - -
-
fr.iutfbleau.projetIHM2022FI2.API
-

Interface MonPrint

-
-
-
- -
-
-
    -
  • - -
      -
    • - - -

      Method Summary

      - - - - - - - - - - -
      All Methods Instance Methods Abstract Methods 
      Modifier and TypeMethod and Description
      java.lang.StringmonPrint() -
      Fonctionne comme ToPrint() sauf car une interface n'a pas le droit de faire un override sur ToPrint().
      -
      -
    • -
    -
  • -
-
-
-
    -
  • - -
      -
    • - - -

      Method Detail

      - - - -
        -
      • -

        monPrint

        -
        java.lang.String monPrint()
        -
        Fonctionne comme ToPrint() sauf car une interface n'a pas le droit de faire un override sur ToPrint(). - Toutes nos interfaces vont étendre cette interface.
        -
      • -
      -
    • -
    -
  • -
-
-
- - -
- - - - - - - -
- - - - diff --git a/java/APIGroupe/doc/fr/iutfbleau/projetIHM2022FI2/API/TypeGroupe.html b/java/APIGroupe/doc/fr/iutfbleau/projetIHM2022FI2/API/TypeGroupe.html deleted file mode 100644 index 37e6eb8..0000000 --- a/java/APIGroupe/doc/fr/iutfbleau/projetIHM2022FI2/API/TypeGroupe.html +++ /dev/null @@ -1,351 +0,0 @@ - - - - - -TypeGroupe - - - - - - - - -
- - - - - - - -
- - - -
-
fr.iutfbleau.projetIHM2022FI2.API
-

Enum TypeGroupe

-
-
- -
-
    -
  • -
    -
    All Implemented Interfaces:
    -
    java.io.Serializable, java.lang.Comparable<TypeGroupe>
    -
    -
    -
    -
    public enum TypeGroupe
    -extends java.lang.Enum<TypeGroupe>
    -
  • -
-
-
-
    -
  • - -
      -
    • - - -

      Enum Constant Summary

      - - - - - - - - - - - - - - -
      Enum Constants 
      Enum Constant and Description
      FREE 
      PARTITION 
      ROOT 
      -
    • -
    - -
      -
    • - - -

      Method Summary

      - - - - - - - - - - - - - - -
      All Methods Static Methods Concrete Methods 
      Modifier and TypeMethod and Description
      static TypeGroupevalueOf(java.lang.String name) -
      Returns the enum constant of this type with the specified name.
      -
      static TypeGroupe[]values() -
      Returns an array containing the constants of this enum type, in -the order they are declared.
      -
      -
        -
      • - - -

        Methods inherited from class java.lang.Enum

        -clone, compareTo, equals, finalize, getDeclaringClass, hashCode, name, ordinal, toString, valueOf
      • -
      -
        -
      • - - -

        Methods inherited from class java.lang.Object

        -getClass, notify, notifyAll, wait, wait, wait
      • -
      -
    • -
    -
  • -
-
-
-
    -
  • - - - -
      -
    • - - -

      Method Detail

      - - - -
        -
      • -

        values

        -
        public static TypeGroupe[] values()
        -
        Returns an array containing the constants of this enum type, in -the order they are declared. This method may be used to iterate -over the constants as follows: -
        -for (TypeGroupe c : TypeGroupe.values())
        -    System.out.println(c);
        -
        -
        -
        Returns:
        -
        an array containing the constants of this enum type, in the order they are declared
        -
        -
      • -
      - - - -
        -
      • -

        valueOf

        -
        public static TypeGroupe valueOf(java.lang.String name)
        -
        Returns the enum constant of this type with the specified name. -The string must match exactly an identifier used to declare an -enum constant in this type. (Extraneous whitespace characters are -not permitted.)
        -
        -
        Parameters:
        -
        name - the name of the enum constant to be returned.
        -
        Returns:
        -
        the enum constant with the specified name
        -
        Throws:
        -
        java.lang.IllegalArgumentException - if this enum type has no constant with the specified name
        -
        java.lang.NullPointerException - if the argument is null
        -
        -
      • -
      -
    • -
    -
  • -
-
-
- - -
- - - - - - - -
- - - - diff --git a/java/APIGroupe/doc/fr/iutfbleau/projetIHM2022FI2/API/package-frame.html b/java/APIGroupe/doc/fr/iutfbleau/projetIHM2022FI2/API/package-frame.html deleted file mode 100644 index 4b2cd52..0000000 --- a/java/APIGroupe/doc/fr/iutfbleau/projetIHM2022FI2/API/package-frame.html +++ /dev/null @@ -1,29 +0,0 @@ - - - - - -fr.iutfbleau.projetIHM2022FI2.API - - - - - -

fr.iutfbleau.projetIHM2022FI2.API

-
-

Interfaces

- -

Enums

- -
- - diff --git a/java/APIGroupe/doc/fr/iutfbleau/projetIHM2022FI2/API/package-summary.html b/java/APIGroupe/doc/fr/iutfbleau/projetIHM2022FI2/API/package-summary.html deleted file mode 100644 index cd0bce6..0000000 --- a/java/APIGroupe/doc/fr/iutfbleau/projetIHM2022FI2/API/package-summary.html +++ /dev/null @@ -1,188 +0,0 @@ - - - - - -fr.iutfbleau.projetIHM2022FI2.API - - - - - - - - -
- - - - - - - -
- - -
-

Package fr.iutfbleau.projetIHM2022FI2.API

-
-
- -
- -
- - - - - - - -
- - - - diff --git a/java/APIGroupe/doc/fr/iutfbleau/projetIHM2022FI2/API/package-tree.html b/java/APIGroupe/doc/fr/iutfbleau/projetIHM2022FI2/API/package-tree.html deleted file mode 100644 index 91e99c4..0000000 --- a/java/APIGroupe/doc/fr/iutfbleau/projetIHM2022FI2/API/package-tree.html +++ /dev/null @@ -1,151 +0,0 @@ - - - - - -fr.iutfbleau.projetIHM2022FI2.API Class Hierarchy - - - - - - - - -
- - - - - - - -
- - -
-

Hierarchy For Package fr.iutfbleau.projetIHM2022FI2.API

-Package Hierarchies: - -
-
-

Interface Hierarchy

- -

Enum Hierarchy

- -
- -
- - - - - - - -
- - - - diff --git a/java/APIGroupe/doc/fr/iutfbleau/projetIHM2022FI2/MNP/AbstractChangementFactoryNP.html b/java/APIGroupe/doc/fr/iutfbleau/projetIHM2022FI2/MNP/AbstractChangementFactoryNP.html deleted file mode 100644 index 7f9d87b..0000000 --- a/java/APIGroupe/doc/fr/iutfbleau/projetIHM2022FI2/MNP/AbstractChangementFactoryNP.html +++ /dev/null @@ -1,384 +0,0 @@ - - - - - -AbstractChangementFactoryNP - - - - - - - - -
- - - - - - - -
- - - -
-
fr.iutfbleau.projetIHM2022FI2.MNP
-

Class AbstractChangementFactoryNP

-
-
- -
- -
-
- -
-
-
    -
  • - - - -
      -
    • - - -

      Method Detail

      - - - -
        -
      • -

        getGroupeFactory

        -
        public AbstractGroupeFactory getGroupeFactory()
        -
        permet de récupérer l'usine abstraite pour les groupes qui fonctionne en tandem avec cette usine abstraite
        -
        -
        Specified by:
        -
        getGroupeFactory in interface AbstractChangementFactory
        -
        Returns:
        -
        cette usine abstraite pour les groupes
        -
        -
      • -
      - - - - - - - -
        -
      • -

        applyChangement

        -
        public void applyChangement(Changement c)
        -
        permet de mettre en oeuvre un changement connu de l'usine abstraite.
        -
        -
        Specified by:
        -
        applyChangement in interface AbstractChangementFactory
        -
        Throws:
        -
        java.lang.NullPointerException - si un argument est null
        -
        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).
        -
        java.lang.IllegalArgumentException - si inconnu de l'usine abstraite
        -
        -
      • -
      - - - -
        -
      • -

        deleteChangement

        -
        public void deleteChangement(Changement c)
        -
        permet de supprimer un changement connu de l'usine abstraite.
        -
        -
        Specified by:
        -
        deleteChangement in interface AbstractChangementFactory
        -
        Throws:
        -
        java.lang.NullPointerException - si un argument est null
        -
        java.lang.IllegalArgumentException - si inconnu de l'usine abstraite
        -
        -
      • -
      - - - -
        -
      • -

        createChangement

        -
        public void createChangement(Groupe A,
        -                             Etudiant e,
        -                             Groupe B)
        -
        permet d'ajouter un nouveau changement.
        -
        -
        Specified by:
        -
        createChangement in interface AbstractChangementFactory
        -
        Parameters:
        -
        A - groupe actuel
        -
        B - groupe demandé
        -
        e - étudiant concerné par le changement
        -
        Throws:
        -
        java.lang.NullPointerException - si un argument est null
        -
        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.
        -
        -
      • -
      -
    • -
    -
  • -
-
-
- - -
- - - - - - - -
- - - - diff --git a/java/APIGroupe/doc/fr/iutfbleau/projetIHM2022FI2/MNP/AbstractGroupeFactoryNP.html b/java/APIGroupe/doc/fr/iutfbleau/projetIHM2022FI2/MNP/AbstractGroupeFactoryNP.html deleted file mode 100644 index b9d5a80..0000000 --- a/java/APIGroupe/doc/fr/iutfbleau/projetIHM2022FI2/MNP/AbstractGroupeFactoryNP.html +++ /dev/null @@ -1,523 +0,0 @@ - - - - - -AbstractGroupeFactoryNP - - - - - - - - -
- - - - - - - -
- - - -
-
fr.iutfbleau.projetIHM2022FI2.MNP
-

Class AbstractGroupeFactoryNP

-
-
- -
-
    -
  • -
    -
    All Implemented Interfaces:
    -
    AbstractGroupeFactory
    -
    -
    -
    -
    public class AbstractGroupeFactoryNP
    -extends java.lang.Object
    -implements AbstractGroupeFactory
    -
    Usine abstraite gérant l'ensemble des groupes.
    -
  • -
-
-
-
    -
  • - -
      -
    • - - -

      Constructor Summary

      - - - - - - - - -
      Constructors 
      Constructor and Description
      AbstractGroupeFactoryNP(java.lang.String name, - int min, - int max) -
      Le constructeur fabrique le groupe promotion vide.
      -
      -
    • -
    - -
      -
    • - - -

      Method Summary

      - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
      All Methods Instance Methods Concrete Methods 
      Modifier and TypeMethod and Description
      voidaddToGroupe(Groupe g, - Etudiant e) -
      permet d'ajouter un étudiant à un groupe.
      -
      voidcreateGroupe(Groupe pere, - java.lang.String name, - int min, - int max) -
      permet d'ajouter un groupe vide de type FREE comme sous-groupe d'un groupe donné.
      -
      voidcreatePartition(Groupe pere, - java.lang.String name, - int n) -
      permet de créer une partition automatiquement sous un groupe donné.
      -
      voiddeleteGroupe(Groupe g) -
      permet de supprimer un groupe connu de l'usine abstraite qui ne contient pas de groupes.
      -
      voiddropFromGroupe(Groupe g, - Etudiant e) -
      permet d'enlever un étudiant d'un groupe.
      -
      java.util.Set<Etudiant>getEtudiants(java.lang.String nomEtu) -
      permet de retrouver un étudiant à partir d'un String.
      -
      java.util.Set<Groupe>getGroupesOfEtudiant(Etudiant etu) -
      permet de retrouver les groupes d'un étudiant.
      -
      GroupegetPromotion() -
      permet de récupérer le Groupe qui contient les étudiants de toute la promotion
      -
      java.lang.Booleanknows(Groupe g) -
      Test plutôt optimiste.
      -
      -
        -
      • - - -

        Methods inherited from class java.lang.Object

        -clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
      • -
      -
    • -
    -
  • -
-
-
-
    -
  • - -
      -
    • - - -

      Constructor Detail

      - - - -
        -
      • -

        AbstractGroupeFactoryNP

        -
        public AbstractGroupeFactoryNP(java.lang.String name,
        -                               int min,
        -                               int max)
        -
        Le constructeur fabrique le groupe promotion vide. - Il faut ensuite y ajouter les étudiants.
        -
      • -
      -
    • -
    - -
      -
    • - - -

      Method Detail

      - - - -
        -
      • -

        knows

        -
        public java.lang.Boolean knows(Groupe g)
        -
        Test plutôt optimiste. Si la clé est identique alors on fait comme si c'était le bon groupe.
        -
        -
        Specified by:
        -
        knows in interface AbstractGroupeFactory
        -
        -
      • -
      - - - -
        -
      • -

        getPromotion

        -
        public Groupe getPromotion()
        -
        permet de récupérer le Groupe qui contient les étudiants de toute la promotion
        -
        -
        Specified by:
        -
        getPromotion in interface AbstractGroupeFactory
        -
        Returns:
        -
        la promo.
        -
        -
      • -
      - - - -
        -
      • -

        deleteGroupe

        -
        public void deleteGroupe(Groupe g)
        -
        permet de supprimer un groupe connu de l'usine abstraite qui ne contient pas de groupes. - Pour détruire un groupe connu qui en contient d'autres il faut le faire récursivement.
        -
        -
        Specified by:
        -
        deleteGroupe in interface AbstractGroupeFactory
        -
        Throws:
        -
        java.lang.NullPointerException - si un argument est null
        -
        java.lang.IllegalStateException - si le groupe contient des groupes
        -
        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)
        -
        -
      • -
      - - - -
        -
      • -

        createGroupe

        -
        public void createGroupe(Groupe pere,
        -                         java.lang.String name,
        -                         int min,
        -                         int max)
        -
        permet d'ajouter un groupe vide de type FREE comme sous-groupe d'un groupe donné.
        -
        -
        Specified by:
        -
        createGroupe in interface AbstractGroupeFactory
        -
        Parameters:
        -
        pere - le groupe père du groupe à créer
        -
        name - le nom du groupe à créer
        -
        min,max - bornes indicatives sur la taille du groupe à créer
        -
        Throws:
        -
        java.lang.NullPointerException - si un argument est null
        -
        java.lang.IllegalArgumentException - si le groupe pere est de type PARTITION - ou si il n'y a pas 0 < min <= max
        -
        -
      • -
      - - - -
        -
      • -

        createPartition

        -
        public void createPartition(Groupe pere,
        -                            java.lang.String name,
        -                            int n)
        -
        permet de créer une partition automatiquement sous un groupe donné.
        -
        -
        Specified by:
        -
        createPartition in interface AbstractGroupeFactory
        -
        Parameters:
        -
        pere - le groupe père du groupe à partitionner
        -
        name - le nom des groupe à créer (on ajoute à la suite un numéro de 1 à n pour distinguer chaque groupe formant la partition)
        -
        n - le nombre de partitions
        -
        Throws:
        -
        java.lang.NullPointerException - si un argument est null
        -
        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.
        -
        -
      • -
      - - - -
        -
      • -

        addToGroupe

        -
        public void addToGroupe(Groupe g,
        -                        Etudiant e)
        -
        permet d'ajouter un étudiant à un groupe.
        -
        -
        Specified by:
        -
        addToGroupe in interface AbstractGroupeFactory
        -
        Parameters:
        -
        g - le groupe dans lequel il faut ajouter l'étudiant
        -
        e - l'étudiant à ajouter
        -
        Throws:
        -
        java.lang.NullPointerException - si un argument est null
        -
        java.lang.IllegalArgumentException - la factory ne connaît pas g
        -
        java.lang.IllegalStateException - le père de g ne contient pas e
        -
        -
      • -
      - - - -
        -
      • -

        dropFromGroupe

        -
        public void dropFromGroupe(Groupe g,
        -                           Etudiant e)
        -
        permet d'enlever un étudiant d'un groupe.
        -
        -
        Specified by:
        -
        dropFromGroupe in interface AbstractGroupeFactory
        -
        Parameters:
        -
        g - le groupe dans lequel il faut enlever l'étudiant
        -
        e - l'étudiant à enlever
        -
        Throws:
        -
        java.lang.NullPointerException - si un argument est null
        -
        java.lang.IllegalStateException - g ne contient pas e
        -
        java.lang.IllegalArgumentException - la factory ne connaît pas g
        -
        -
      • -
      - - - -
        -
      • -

        getEtudiants

        -
        public java.util.Set<Etudiant> getEtudiants(java.lang.String nomEtu)
        -
        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.
        -
        -
        Specified by:
        -
        getEtudiants in interface AbstractGroupeFactory
        -
        Parameters:
        -
        String - nomEtu le nom approximmatif de l'étudiant
        -
        Returns:
        -
        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.
        -
        -
      • -
      - - - -
        -
      • -

        getGroupesOfEtudiant

        -
        public java.util.Set<Groupe> getGroupesOfEtudiant(Etudiant etu)
        -
        permet de retrouver les groupes d'un étudiant.
        -
        -
        Specified by:
        -
        getGroupesOfEtudiant in interface AbstractGroupeFactory
        -
        Parameters:
        -
        Etu - un étudiant
        -
        Returns:
        -
        Etudiant l'étudiant connu de la factory ayant cet identifiant
        -
        Throws:
        -
        java.lang.NullPointerException - si le String est null.
        -
        -
      • -
      -
    • -
    -
  • -
-
-
- - -
- - - - - - - -
- - - - diff --git a/java/APIGroupe/doc/fr/iutfbleau/projetIHM2022FI2/MNP/ChangementNP.html b/java/APIGroupe/doc/fr/iutfbleau/projetIHM2022FI2/MNP/ChangementNP.html deleted file mode 100644 index f02a0c9..0000000 --- a/java/APIGroupe/doc/fr/iutfbleau/projetIHM2022FI2/MNP/ChangementNP.html +++ /dev/null @@ -1,364 +0,0 @@ - - - - - -ChangementNP - - - - - - - - -
- - - - - - - -
- - - -
-
fr.iutfbleau.projetIHM2022FI2.MNP
-

Class ChangementNP

-
-
- -
-
    -
  • -
    -
    All Implemented Interfaces:
    -
    Changement, MonPrint
    -
    -
    -
    -
    public class ChangementNP
    -extends java.lang.Object
    -implements Changement
    -
    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.
    -
  • -
-
-
-
    -
  • - - - -
      -
    • - - -

      Method Summary

      - - - - - - - - - - - - - - - - - - - - - - -
      All Methods Instance Methods Concrete Methods 
      Modifier and TypeMethod and Description
      GroupegetA() -
      permet de récupérer le groupe de depart
      -
      GroupegetB() -
      permet de récupérer le groupe d'arrivée
      -
      EtudiantgetEtu() -
      permet de récupérer l'étudiant demandant le changement
      -
      intgetId() -
      permet de récupérer l'identifiant du changement (référence interne sans intérêt irl).
      -
      -
        -
      • - - -

        Methods inherited from class java.lang.Object

        -clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
      • -
      - -
    • -
    -
  • -
-
-
-
    -
  • - - - -
      -
    • - - -

      Method Detail

      - - - -
        -
      • -

        getId

        -
        public int getId()
        -
        permet de récupérer l'identifiant du changement (référence interne sans intérêt irl).
        -
        -
        Specified by:
        -
        getId in interface Changement
        -
        Returns:
        -
        l'identifiant.
        -
        -
      • -
      - - - -
        -
      • -

        getA

        -
        public Groupe getA()
        -
        permet de récupérer le groupe de depart
        -
        -
        Specified by:
        -
        getA in interface Changement
        -
        Returns:
        -
        ce groupe.
        -
        -
      • -
      - - - -
        -
      • -

        getB

        -
        public Groupe getB()
        -
        permet de récupérer le groupe d'arrivée
        -
        -
        Specified by:
        -
        getB in interface Changement
        -
        Returns:
        -
        ce groupe.
        -
        -
      • -
      - - - -
        -
      • -

        getEtu

        -
        public Etudiant getEtu()
        -
        permet de récupérer l'étudiant demandant le changement
        -
        -
        Specified by:
        -
        getEtu in interface Changement
        -
        Returns:
        -
        cet étudiant
        -
        -
      • -
      -
    • -
    -
  • -
-
-
- - -
- - - - - - - -
- - - - diff --git a/java/APIGroupe/doc/fr/iutfbleau/projetIHM2022FI2/MNP/EtudiantNP.html b/java/APIGroupe/doc/fr/iutfbleau/projetIHM2022FI2/MNP/EtudiantNP.html deleted file mode 100644 index 8bc63ee..0000000 --- a/java/APIGroupe/doc/fr/iutfbleau/projetIHM2022FI2/MNP/EtudiantNP.html +++ /dev/null @@ -1,340 +0,0 @@ - - - - - -EtudiantNP - - - - - - - - -
- - - - - - - -
- - - -
-
fr.iutfbleau.projetIHM2022FI2.MNP
-

Class EtudiantNP

-
-
- -
-
    -
  • -
    -
    All Implemented Interfaces:
    -
    Etudiant, MonPrint
    -
    -
    -
    -
    public class EtudiantNP
    -extends java.lang.Object
    -implements Etudiant
    -
    Un étudiant
    -
  • -
-
-
-
    -
  • - -
      -
    • - - -

      Constructor Summary

      - - - - - - - - -
      Constructors 
      Constructor and Description
      EtudiantNP(java.lang.String nom, - java.lang.String prenom) -
      Constructeur.
      -
      -
    • -
    - -
      -
    • - - -

      Method Summary

      - - - - - - - - - - - - - - - - - - -
      All Methods Instance Methods Concrete Methods 
      Modifier and TypeMethod and Description
      intgetId() -
      permet de récupérer l'identifiant de l'étudiant.
      -
      java.lang.StringgetNom() -
      permet de récupérer
      -
      java.lang.StringgetPrenom() -
      permet de récupérer
      -
      -
        -
      • - - -

        Methods inherited from class java.lang.Object

        -clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
      • -
      - -
    • -
    -
  • -
-
-
-
    -
  • - -
      -
    • - - -

      Constructor Detail

      - - - -
        -
      • -

        EtudiantNP

        -
        public EtudiantNP(java.lang.String nom,
        -                  java.lang.String prenom)
        -
        Constructeur.
        -
      • -
      -
    • -
    - -
      -
    • - - -

      Method Detail

      - - - -
        -
      • -

        getId

        -
        public int getId()
        -
        permet de récupérer l'identifiant de l'étudiant.
        -
        -
        Specified by:
        -
        getId in interface Etudiant
        -
        Returns:
        -
        l'identifiant.
        -
        -
      • -
      - - - -
        -
      • -

        getNom

        -
        public java.lang.String getNom()
        -
        permet de récupérer
        -
        -
        Specified by:
        -
        getNom in interface Etudiant
        -
        Returns:
        -
        le nom de l'étudiant.
        -
        -
      • -
      - - - -
        -
      • -

        getPrenom

        -
        public java.lang.String getPrenom()
        -
        permet de récupérer
        -
        -
        Specified by:
        -
        getPrenom in interface Etudiant
        -
        Returns:
        -
        le prénom de l'étudiant
        -
        -
      • -
      -
    • -
    -
  • -
-
-
- - -
- - - - - - - -
- - - - diff --git a/java/APIGroupe/doc/fr/iutfbleau/projetIHM2022FI2/MNP/GroupeNP.html b/java/APIGroupe/doc/fr/iutfbleau/projetIHM2022FI2/MNP/GroupeNP.html deleted file mode 100644 index 8df93d9..0000000 --- a/java/APIGroupe/doc/fr/iutfbleau/projetIHM2022FI2/MNP/GroupeNP.html +++ /dev/null @@ -1,605 +0,0 @@ - - - - - -GroupeNP - - - - - - - - -
- - - - - - - -
- - - -
-
fr.iutfbleau.projetIHM2022FI2.MNP
-

Class GroupeNP

-
-
- -
-
    -
  • -
    -
    All Implemented Interfaces:
    -
    Groupe, MonPrint
    -
    -
    -
    -
    public class GroupeNP
    -extends java.lang.Object
    -implements Groupe
    -
    Un groupe
    -
  • -
-
-
-
    -
  • - -
      -
    • - - -

      Constructor Summary

      - - - - - - - - - - - - - - -
      Constructors 
      Constructor and Description
      GroupeNP(Groupe pere) -
      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).
      -
      GroupeNP(Groupe pere, - java.lang.String name, - int min, - int max) -
      Nouveau groupe vide de type FREE sans étudiants, sans sous-Groupe
      -
      GroupeNP(java.lang.String name, - int min, - int max) -
      Nouveau groupe vide de type ROOT sans étudiants, sans sous-Groupe
      -
      -
    • -
    - -
      -
    • - - -

      Method Summary

      - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
      All Methods Instance Methods Concrete Methods 
      Modifier and TypeMethod and Description
      booleanaddEtudiant(Etudiant e) -
      Ajoute un étudiant.
      -
      booleanaddSousGroupe(Groupe g) -
      Ajoute un sous-groupe.
      -
      java.util.Set<Etudiant>getEtudiants() -
      Potentiellement "vide" - Attention nous renvoyons l'ensemble sans le copier
      -
      intgetId() -
      permet de récupérer l'identifiant d'un groupe (référence interne sans intérêt irl).
      -
      intgetMax() -
      permet de récupérer le nombre maximum d'étudiants souhaités dans un groupe.
      -
      intgetMin() -
      permet de récupérer le nombre minimum d'étudiants souhaités dans le groupe.
      -
      java.lang.StringgetName() -
      permet de récupérer le nom d'un groupe (utile irl).
      -
      GroupegetPointPoint() -
      permet de récupérer le groupe père - un groupe racine devrait retourner lui-même
      -
      intgetSize() -
      permet de récupérer le nombre d'étudiants dans ce groupe.
      -
      java.util.Set<Groupe>getSousGroupes() -
      Potentiellement "vide" - Attention nous renvoyons l'ensemble sans le copier
      -
      TypeGroupegetType() -
      permet de récupérer la nature du groupe
      -
      booleanremoveEtudiant(Etudiant e) -
      Enlève un étudiant.
      -
      booleanremoveSousGroupe(Groupe g) -
      Enlève un groupe.
      -
      -
        -
      • - - -

        Methods inherited from class java.lang.Object

        -clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
      • -
      -
        -
      • - - -

        Methods inherited from interface fr.iutfbleau.projetIHM2022FI2.API.Groupe

        -monPrint
      • -
      -
    • -
    -
  • -
-
-
-
    -
  • - -
      -
    • - - -

      Constructor Detail

      - - - -
        -
      • -

        GroupeNP

        -
        public GroupeNP(java.lang.String name,
        -                int min,
        -                int max)
        -
        Nouveau groupe vide de type ROOT sans étudiants, sans sous-Groupe
        -
      • -
      - - - -
        -
      • -

        GroupeNP

        -
        public GroupeNP(Groupe pere,
        -                java.lang.String name,
        -                int min,
        -                int max)
        -
        Nouveau groupe vide de type FREE sans étudiants, sans sous-Groupe
        -
      • -
      - - - -
        -
      • -

        GroupeNP

        -
        public GroupeNP(Groupe pere)
        -
        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).
        -
      • -
      -
    • -
    - -
      -
    • - - -

      Method Detail

      - - - -
        -
      • -

        addEtudiant

        -
        public boolean addEtudiant(Etudiant e)
        -
        Ajoute un étudiant. Se comporte comme add de l'interface Set.
        -
        -
        Specified by:
        -
        addEtudiant in interface Groupe
        -
        Returns:
        -
        true iff e est ajouté
        -
        -
      • -
      - - - -
        -
      • -

        removeEtudiant

        -
        public boolean removeEtudiant(Etudiant e)
        -
        Enlève un étudiant. Se comporte comme remove de l'interface Set.
        -
        -
        Specified by:
        -
        removeEtudiant in interface Groupe
        -
        Returns:
        -
        true iff e est enlevé
        -
        -
      • -
      - - - -
        -
      • -

        addSousGroupe

        -
        public boolean addSousGroupe(Groupe g)
        -
        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.
        -
        -
        Specified by:
        -
        addSousGroupe in interface Groupe
        -
        Returns:
        -
        true iff g est ajouté
        -
        -
      • -
      - - - -
        -
      • -

        removeSousGroupe

        -
        public boolean removeSousGroupe(Groupe g)
        -
        Enlève un groupe. Se comporte comme remove de l'interface Set.
        -
        -
        Specified by:
        -
        removeSousGroupe in interface Groupe
        -
        Returns:
        -
        true iff e est enlevé
        -
        -
      • -
      - - - -
        -
      • -

        getId

        -
        public int getId()
        -
        permet de récupérer l'identifiant d'un groupe (référence interne sans intérêt irl).
        -
        -
        Specified by:
        -
        getId in interface Groupe
        -
        Returns:
        -
        l'identifiant.
        -
        -
      • -
      - - - -
        -
      • -

        getName

        -
        public java.lang.String getName()
        -
        permet de récupérer le nom d'un groupe (utile irl).
        -
        -
        Specified by:
        -
        getName in interface Groupe
        -
        Returns:
        -
        le nom.
        -
        -
      • -
      - - - -
        -
      • -

        getMin

        -
        public int getMin()
        -
        permet de récupérer le nombre minimum d'étudiants souhaités dans le groupe.
        -
        -
        Specified by:
        -
        getMin in interface Groupe
        -
        Returns:
        -
        le minimum souhaité
        -
        -
      • -
      - - - -
        -
      • -

        getMax

        -
        public int getMax()
        -
        permet de récupérer le nombre maximum d'étudiants souhaités dans un groupe.
        -
        -
        Specified by:
        -
        getMax in interface Groupe
        -
        Returns:
        -
        le maximum souhaité
        -
        -
      • -
      - - - -
        -
      • -

        getSize

        -
        public int getSize()
        -
        permet de récupérer le nombre d'étudiants dans ce groupe.
        -
        -
        Specified by:
        -
        getSize in interface Groupe
        -
        Returns:
        -
        le nombre de places prises (pas forcément limité entre Min et Max, mais c'est le but)
        -
        -
      • -
      - - - -
        -
      • -

        getType

        -
        public TypeGroupe getType()
        -
        permet de récupérer la nature du groupe
        -
        -
        Specified by:
        -
        getType in interface Groupe
        -
        Returns:
        -
        le type du groupe
        -
        -
      • -
      - - - -
        -
      • -

        getPointPoint

        -
        public Groupe getPointPoint()
        -
        permet de récupérer le groupe père - un groupe racine devrait retourner lui-même
        -
        -
        Specified by:
        -
        getPointPoint in interface Groupe
        -
        Returns:
        -
        le père
        -
        -
      • -
      - - - -
        -
      • -

        getSousGroupes

        -
        public java.util.Set<Groupe> getSousGroupes()
        -
        Potentiellement "vide" - Attention nous renvoyons l'ensemble sans le copier
        -
        -
        Specified by:
        -
        getSousGroupes in interface Groupe
        -
        Returns:
        -
        l'ensemble des sous-groupes.
        -
        -
      • -
      - - - -
        -
      • -

        getEtudiants

        -
        public java.util.Set<Etudiant> getEtudiants()
        -
        Potentiellement "vide" - Attention nous renvoyons l'ensemble sans le copier
        -
        -
        Specified by:
        -
        getEtudiants in interface Groupe
        -
        Returns:
        -
        l'ensemble des étudiants.
        -
        -
      • -
      -
    • -
    -
  • -
-
-
- - -
- - - - - - - -
- - - - diff --git a/java/APIGroupe/doc/fr/iutfbleau/projetIHM2022FI2/MNP/package-frame.html b/java/APIGroupe/doc/fr/iutfbleau/projetIHM2022FI2/MNP/package-frame.html deleted file mode 100644 index 87bb233..0000000 --- a/java/APIGroupe/doc/fr/iutfbleau/projetIHM2022FI2/MNP/package-frame.html +++ /dev/null @@ -1,24 +0,0 @@ - - - - - -fr.iutfbleau.projetIHM2022FI2.MNP - - - - - -

fr.iutfbleau.projetIHM2022FI2.MNP

-
-

Classes

- -
- - diff --git a/java/APIGroupe/doc/fr/iutfbleau/projetIHM2022FI2/MNP/package-summary.html b/java/APIGroupe/doc/fr/iutfbleau/projetIHM2022FI2/MNP/package-summary.html deleted file mode 100644 index 3602d32..0000000 --- a/java/APIGroupe/doc/fr/iutfbleau/projetIHM2022FI2/MNP/package-summary.html +++ /dev/null @@ -1,167 +0,0 @@ - - - - - -fr.iutfbleau.projetIHM2022FI2.MNP - - - - - - - - -
- - - - - - - -
- - -
-

Package fr.iutfbleau.projetIHM2022FI2.MNP

-
-
- -
- -
- - - - - - - -
- - - - diff --git a/java/APIGroupe/doc/fr/iutfbleau/projetIHM2022FI2/MNP/package-tree.html b/java/APIGroupe/doc/fr/iutfbleau/projetIHM2022FI2/MNP/package-tree.html deleted file mode 100644 index 3b39409..0000000 --- a/java/APIGroupe/doc/fr/iutfbleau/projetIHM2022FI2/MNP/package-tree.html +++ /dev/null @@ -1,139 +0,0 @@ - - - - - -fr.iutfbleau.projetIHM2022FI2.MNP Class Hierarchy - - - - - - - - -
- - - - - - - -
- - -
-

Hierarchy For Package fr.iutfbleau.projetIHM2022FI2.MNP

-Package Hierarchies: - -
-
-

Class Hierarchy

- -
- -
- - - - - - - -
- - - - diff --git a/java/APIGroupe/doc/help-doc.html b/java/APIGroupe/doc/help-doc.html deleted file mode 100644 index 701ee6c..0000000 --- a/java/APIGroupe/doc/help-doc.html +++ /dev/null @@ -1,223 +0,0 @@ - - - - - -API Help - - - - - - - - -
- - - - - - - -
- - -
-

How This API Document Is Organized

-
This API (Application Programming Interface) document has pages corresponding to the items in the navigation bar, described as follows.
-
-
- -This help file applies to API documentation generated using the standard doclet.
- -
- - - - - - - -
- - - - diff --git a/java/APIGroupe/doc/index-all.html b/java/APIGroupe/doc/index-all.html deleted file mode 100644 index 1e53f59..0000000 --- a/java/APIGroupe/doc/index-all.html +++ /dev/null @@ -1,556 +0,0 @@ - - - - - -Index - - - - - - - - -
- - - - - - - -
- - -
A C D E F G K M R T V  - - -

A

-
-
AbstractChangementFactory - Interface in fr.iutfbleau.projetIHM2022FI2.API
-
-
Usine abstraite gérant l'ensemble des changements.
-
-
AbstractChangementFactoryNP - Class in fr.iutfbleau.projetIHM2022FI2.MNP
-
-
Usine abstraite gérant l'ensemble des changements.
-
-
AbstractChangementFactoryNP(AbstractGroupeFactory) - Constructor for class fr.iutfbleau.projetIHM2022FI2.MNP.AbstractChangementFactoryNP
-
 
-
AbstractGroupeFactory - Interface in fr.iutfbleau.projetIHM2022FI2.API
-
-
Usine abstraite gérant l'ensemble des groupes.
-
-
AbstractGroupeFactoryNP - Class in fr.iutfbleau.projetIHM2022FI2.MNP
-
-
Usine abstraite gérant l'ensemble des groupes.
-
-
AbstractGroupeFactoryNP(String, int, int) - Constructor for class fr.iutfbleau.projetIHM2022FI2.MNP.AbstractGroupeFactoryNP
-
-
Le constructeur fabrique le groupe promotion vide.
-
-
addEtudiant(Etudiant) - Method in interface fr.iutfbleau.projetIHM2022FI2.API.Groupe
-
-
Ajoute un étudiant.
-
-
addEtudiant(Etudiant) - Method in class fr.iutfbleau.projetIHM2022FI2.MNP.GroupeNP
-
-
Ajoute un étudiant.
-
-
addSousGroupe(Groupe) - Method in interface fr.iutfbleau.projetIHM2022FI2.API.Groupe
-
-
Ajoute un sous-groupe.
-
-
addSousGroupe(Groupe) - Method in class fr.iutfbleau.projetIHM2022FI2.MNP.GroupeNP
-
-
Ajoute un sous-groupe.
-
-
addToGroupe(Groupe, Etudiant) - Method in interface fr.iutfbleau.projetIHM2022FI2.API.AbstractGroupeFactory
-
-
permet d'ajouter un étudiant à un groupe.
-
-
addToGroupe(Groupe, Etudiant) - Method in class fr.iutfbleau.projetIHM2022FI2.MNP.AbstractGroupeFactoryNP
-
-
permet d'ajouter un étudiant à un groupe.
-
-
applyChangement(Changement) - Method in interface fr.iutfbleau.projetIHM2022FI2.API.AbstractChangementFactory
-
-
permet de mettre en oeuvre un changement connu de l'usine abstraite.
-
-
applyChangement(Changement) - Method in class fr.iutfbleau.projetIHM2022FI2.MNP.AbstractChangementFactoryNP
-
-
permet de mettre en oeuvre un changement connu de l'usine abstraite.
-
-
- - - -

C

-
-
Changement - Interface in fr.iutfbleau.projetIHM2022FI2.API
-
-
Une demande de changement de groupe - concerne un étudiant, qui est dans un groupe A et veut aller dans un groupe B.
-
-
ChangementNP - Class in fr.iutfbleau.projetIHM2022FI2.MNP
-
-
Une demande de changement de groupe - concerne un étudiant, qui est dans un groupe A et veut aller dans un groupe B.
-
-
ChangementNP(Groupe, Etudiant, Groupe) - Constructor for class fr.iutfbleau.projetIHM2022FI2.MNP.ChangementNP
-
 
-
createChangement(Groupe, Etudiant, Groupe) - Method in interface fr.iutfbleau.projetIHM2022FI2.API.AbstractChangementFactory
-
-
permet d'ajouter un nouveau changement.
-
-
createChangement(Groupe, Etudiant, Groupe) - Method in class fr.iutfbleau.projetIHM2022FI2.MNP.AbstractChangementFactoryNP
-
-
permet d'ajouter un nouveau changement.
-
-
createGroupe(Groupe, String, int, int) - Method in interface fr.iutfbleau.projetIHM2022FI2.API.AbstractGroupeFactory
-
-
permet d'ajouter un groupe vide de type FREE comme sous-groupe d'un groupe donné.
-
-
createGroupe(Groupe, String, int, int) - Method in class fr.iutfbleau.projetIHM2022FI2.MNP.AbstractGroupeFactoryNP
-
-
permet d'ajouter un groupe vide de type FREE comme sous-groupe d'un groupe donné.
-
-
createPartition(Groupe, String, int) - Method in interface fr.iutfbleau.projetIHM2022FI2.API.AbstractGroupeFactory
-
-
permet de créer une partition automatiquement sous un groupe donné.
-
-
createPartition(Groupe, String, int) - Method in class fr.iutfbleau.projetIHM2022FI2.MNP.AbstractGroupeFactoryNP
-
-
permet de créer une partition automatiquement sous un groupe donné.
-
-
- - - -

D

-
-
deleteChangement(Changement) - Method in interface fr.iutfbleau.projetIHM2022FI2.API.AbstractChangementFactory
-
-
permet de supprimer un changement connu de l'usine abstraite.
-
-
deleteChangement(Changement) - Method in class fr.iutfbleau.projetIHM2022FI2.MNP.AbstractChangementFactoryNP
-
-
permet de supprimer un changement connu de l'usine abstraite.
-
-
deleteGroupe(Groupe) - Method in interface fr.iutfbleau.projetIHM2022FI2.API.AbstractGroupeFactory
-
-
permet de supprimer un groupe connu de l'usine abstraite qui ne contient pas de groupes.
-
-
deleteGroupe(Groupe) - Method in class fr.iutfbleau.projetIHM2022FI2.MNP.AbstractGroupeFactoryNP
-
-
permet de supprimer un groupe connu de l'usine abstraite qui ne contient pas de groupes.
-
-
dropFromGroupe(Groupe, Etudiant) - Method in interface fr.iutfbleau.projetIHM2022FI2.API.AbstractGroupeFactory
-
-
permet d'enlever un étudiant d'un groupe.
-
-
dropFromGroupe(Groupe, Etudiant) - Method in class fr.iutfbleau.projetIHM2022FI2.MNP.AbstractGroupeFactoryNP
-
-
permet d'enlever un étudiant d'un groupe.
-
-
- - - -

E

-
-
Etudiant - Interface in fr.iutfbleau.projetIHM2022FI2.API
-
-
Un étudiant
-
-
EtudiantNP - Class in fr.iutfbleau.projetIHM2022FI2.MNP
-
-
Un étudiant
-
-
EtudiantNP(String, String) - Constructor for class fr.iutfbleau.projetIHM2022FI2.MNP.EtudiantNP
-
-
Constructeur.
-
-
- - - -

F

-
-
fr.iutfbleau.projetIHM2022FI2.API - package fr.iutfbleau.projetIHM2022FI2.API
-
 
-
fr.iutfbleau.projetIHM2022FI2.MNP - package fr.iutfbleau.projetIHM2022FI2.MNP
-
 
-
- - - -

G

-
-
getA() - Method in interface fr.iutfbleau.projetIHM2022FI2.API.Changement
-
-
permet de récupérer le groupe de depart
-
-
getA() - Method in class fr.iutfbleau.projetIHM2022FI2.MNP.ChangementNP
-
-
permet de récupérer le groupe de depart
-
-
getAllChangements() - Method in interface fr.iutfbleau.projetIHM2022FI2.API.AbstractChangementFactory
-
-
permet de récupérer les changements
-
-
getAllChangements() - Method in class fr.iutfbleau.projetIHM2022FI2.MNP.AbstractChangementFactoryNP
-
-
permet de récupérer les changements
-
-
getB() - Method in interface fr.iutfbleau.projetIHM2022FI2.API.Changement
-
-
permet de récupérer le groupe d'arrivée
-
-
getB() - Method in class fr.iutfbleau.projetIHM2022FI2.MNP.ChangementNP
-
-
permet de récupérer le groupe d'arrivée
-
-
getEtu() - Method in interface fr.iutfbleau.projetIHM2022FI2.API.Changement
-
-
permet de récupérer l'étudiant demandant le changement
-
-
getEtu() - Method in class fr.iutfbleau.projetIHM2022FI2.MNP.ChangementNP
-
-
permet de récupérer l'étudiant demandant le changement
-
-
getEtudiants(String) - Method in interface fr.iutfbleau.projetIHM2022FI2.API.AbstractGroupeFactory
-
-
permet de retrouver un étudiant à partir d'un String.
-
-
getEtudiants() - Method in interface fr.iutfbleau.projetIHM2022FI2.API.Groupe
-
-
Potentiellement "vide"
-
-
getEtudiants(String) - Method in class fr.iutfbleau.projetIHM2022FI2.MNP.AbstractGroupeFactoryNP
-
-
permet de retrouver un étudiant à partir d'un String.
-
-
getEtudiants() - Method in class fr.iutfbleau.projetIHM2022FI2.MNP.GroupeNP
-
-
Potentiellement "vide" - Attention nous renvoyons l'ensemble sans le copier
-
-
getGroupeFactory() - Method in interface fr.iutfbleau.projetIHM2022FI2.API.AbstractChangementFactory
-
-
permet de récupérer une usine abstraite pour les groupes qui fonctionne en tandem avec cette usine abstraite
-
-
getGroupeFactory() - Method in class fr.iutfbleau.projetIHM2022FI2.MNP.AbstractChangementFactoryNP
-
-
permet de récupérer l'usine abstraite pour les groupes qui fonctionne en tandem avec cette usine abstraite
-
-
getGroupesOfEtudiant(Etudiant) - Method in interface fr.iutfbleau.projetIHM2022FI2.API.AbstractGroupeFactory
-
-
permet de retrouver les groupes d'un étudiant.
-
-
getGroupesOfEtudiant(Etudiant) - Method in class fr.iutfbleau.projetIHM2022FI2.MNP.AbstractGroupeFactoryNP
-
-
permet de retrouver les groupes d'un étudiant.
-
-
getId() - Method in interface fr.iutfbleau.projetIHM2022FI2.API.Changement
-
-
permet de récupérer l'identifiant du changement (référence interne sans intérêt irl).
-
-
getId() - Method in interface fr.iutfbleau.projetIHM2022FI2.API.Etudiant
-
-
permet de récupérer l'identifiant de l'étudiant.
-
-
getId() - Method in interface fr.iutfbleau.projetIHM2022FI2.API.Groupe
-
-
permet de récupérer l'identifiant d'un groupe (référence interne sans intérêt irl).
-
-
getId() - Method in class fr.iutfbleau.projetIHM2022FI2.MNP.ChangementNP
-
-
permet de récupérer l'identifiant du changement (référence interne sans intérêt irl).
-
-
getId() - Method in class fr.iutfbleau.projetIHM2022FI2.MNP.EtudiantNP
-
-
permet de récupérer l'identifiant de l'étudiant.
-
-
getId() - Method in class fr.iutfbleau.projetIHM2022FI2.MNP.GroupeNP
-
-
permet de récupérer l'identifiant d'un groupe (référence interne sans intérêt irl).
-
-
getMax() - Method in interface fr.iutfbleau.projetIHM2022FI2.API.Groupe
-
-
permet de récupérer le nombre maximum d'étudiants souhaités dans un groupe.
-
-
getMax() - Method in class fr.iutfbleau.projetIHM2022FI2.MNP.GroupeNP
-
-
permet de récupérer le nombre maximum d'étudiants souhaités dans un groupe.
-
-
getMin() - Method in interface fr.iutfbleau.projetIHM2022FI2.API.Groupe
-
-
permet de récupérer le nombre minimum d'étudiants souhaités dans le groupe.
-
-
getMin() - Method in class fr.iutfbleau.projetIHM2022FI2.MNP.GroupeNP
-
-
permet de récupérer le nombre minimum d'étudiants souhaités dans le groupe.
-
-
getName() - Method in interface fr.iutfbleau.projetIHM2022FI2.API.Groupe
-
-
permet de récupérer le nom d'un groupe (utile irl).
-
-
getName() - Method in class fr.iutfbleau.projetIHM2022FI2.MNP.GroupeNP
-
-
permet de récupérer le nom d'un groupe (utile irl).
-
-
getNom() - Method in interface fr.iutfbleau.projetIHM2022FI2.API.Etudiant
-
-
permet de récupérer
-
-
getNom() - Method in class fr.iutfbleau.projetIHM2022FI2.MNP.EtudiantNP
-
-
permet de récupérer
-
-
getPointPoint() - Method in interface fr.iutfbleau.projetIHM2022FI2.API.Groupe
-
-
permet de récupérer le groupe père - un groupe racine devrait retourner lui-même
-
-
getPointPoint() - Method in class fr.iutfbleau.projetIHM2022FI2.MNP.GroupeNP
-
-
permet de récupérer le groupe père - un groupe racine devrait retourner lui-même
-
-
getPrenom() - Method in interface fr.iutfbleau.projetIHM2022FI2.API.Etudiant
-
-
permet de récupérer
-
-
getPrenom() - Method in class fr.iutfbleau.projetIHM2022FI2.MNP.EtudiantNP
-
-
permet de récupérer
-
-
getPromotion() - Method in interface fr.iutfbleau.projetIHM2022FI2.API.AbstractGroupeFactory
-
-
permet de récupérer le Groupe qui contient les étudiants de toute la promotion
-
-
getPromotion() - Method in class fr.iutfbleau.projetIHM2022FI2.MNP.AbstractGroupeFactoryNP
-
-
permet de récupérer le Groupe qui contient les étudiants de toute la promotion
-
-
getSize() - Method in interface fr.iutfbleau.projetIHM2022FI2.API.Groupe
-
-
permet de récupérer le nombre d'étudiants dans ce groupe.
-
-
getSize() - Method in class fr.iutfbleau.projetIHM2022FI2.MNP.GroupeNP
-
-
permet de récupérer le nombre d'étudiants dans ce groupe.
-
-
getSousGroupes() - Method in interface fr.iutfbleau.projetIHM2022FI2.API.Groupe
-
-
Potentiellement "vide"
-
-
getSousGroupes() - Method in class fr.iutfbleau.projetIHM2022FI2.MNP.GroupeNP
-
-
Potentiellement "vide" - Attention nous renvoyons l'ensemble sans le copier
-
-
getType() - Method in interface fr.iutfbleau.projetIHM2022FI2.API.Groupe
-
-
permet de récupérer la nature du groupe
-
-
getType() - Method in class fr.iutfbleau.projetIHM2022FI2.MNP.GroupeNP
-
-
permet de récupérer la nature du groupe
-
-
Groupe - Interface in fr.iutfbleau.projetIHM2022FI2.API
-
-
Un groupe
-
-
GroupeNP - Class in fr.iutfbleau.projetIHM2022FI2.MNP
-
-
Un groupe
-
-
GroupeNP(String, int, int) - Constructor for class fr.iutfbleau.projetIHM2022FI2.MNP.GroupeNP
-
-
Nouveau groupe vide de type ROOT sans étudiants, sans sous-Groupe
-
-
GroupeNP(Groupe, String, int, int) - Constructor for class fr.iutfbleau.projetIHM2022FI2.MNP.GroupeNP
-
-
Nouveau groupe vide de type FREE sans étudiants, sans sous-Groupe
-
-
GroupeNP(Groupe) - Constructor for class fr.iutfbleau.projetIHM2022FI2.MNP.GroupeNP
-
-
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).
-
-
- - - -

K

-
-
knows(Groupe) - Method in interface fr.iutfbleau.projetIHM2022FI2.API.AbstractGroupeFactory
-
-
Test si le groupe g est connu de l'usine (connu maintenant).
-
-
knows(Groupe) - Method in class fr.iutfbleau.projetIHM2022FI2.MNP.AbstractGroupeFactoryNP
-
-
Test plutôt optimiste.
-
-
- - - -

M

-
-
monPrint() - Method in interface fr.iutfbleau.projetIHM2022FI2.API.Changement
-
 
-
monPrint() - Method in interface fr.iutfbleau.projetIHM2022FI2.API.Etudiant
-
 
-
monPrint() - Method in interface fr.iutfbleau.projetIHM2022FI2.API.Groupe
-
 
-
MonPrint - Interface in fr.iutfbleau.projetIHM2022FI2.API
-
-
Toutes nos interfaces vont étendre cette interface.
-
-
monPrint() - Method in interface fr.iutfbleau.projetIHM2022FI2.API.MonPrint
-
-
Fonctionne comme ToPrint() sauf car une interface n'a pas le droit de faire un override sur ToPrint().
-
-
- - - -

R

-
-
removeEtudiant(Etudiant) - Method in interface fr.iutfbleau.projetIHM2022FI2.API.Groupe
-
-
Enlève un étudiant.
-
-
removeEtudiant(Etudiant) - Method in class fr.iutfbleau.projetIHM2022FI2.MNP.GroupeNP
-
-
Enlève un étudiant.
-
-
removeSousGroupe(Groupe) - Method in interface fr.iutfbleau.projetIHM2022FI2.API.Groupe
-
-
Enlève un groupe.
-
-
removeSousGroupe(Groupe) - Method in class fr.iutfbleau.projetIHM2022FI2.MNP.GroupeNP
-
-
Enlève un groupe.
-
-
- - - -

T

-
-
TypeGroupe - Enum in fr.iutfbleau.projetIHM2022FI2.API
-
 
-
- - - -

V

-
-
valueOf(String) - Static method in enum fr.iutfbleau.projetIHM2022FI2.API.TypeGroupe
-
-
Returns the enum constant of this type with the specified name.
-
-
values() - Static method in enum fr.iutfbleau.projetIHM2022FI2.API.TypeGroupe
-
-
Returns an array containing the constants of this enum type, in -the order they are declared.
-
-
-A C D E F G K M R T V 
- -
- - - - - - - -
- - - - diff --git a/java/APIGroupe/doc/index.html b/java/APIGroupe/doc/index.html deleted file mode 100644 index fb53118..0000000 --- a/java/APIGroupe/doc/index.html +++ /dev/null @@ -1,75 +0,0 @@ - - - - - -Generated Documentation (Untitled) - - - - - - - - - -<noscript> -<div>JavaScript is disabled on your browser.</div> -</noscript> -<h2>Frame Alert</h2> -<p>This document is designed to be viewed using the frames feature. If you see this message, you are using a non-frame-capable web client. Link to <a href="overview-summary.html">Non-frame version</a>.</p> - - - diff --git a/java/APIGroupe/doc/overview-frame.html b/java/APIGroupe/doc/overview-frame.html deleted file mode 100644 index ef3a28b..0000000 --- a/java/APIGroupe/doc/overview-frame.html +++ /dev/null @@ -1,22 +0,0 @@ - - - - - -Overview List - - - - - -
All Classes
-
-

Packages

- -
-

 

- - diff --git a/java/APIGroupe/doc/overview-summary.html b/java/APIGroupe/doc/overview-summary.html deleted file mode 100644 index b6e5d88..0000000 --- a/java/APIGroupe/doc/overview-summary.html +++ /dev/null @@ -1,137 +0,0 @@ - - - - - -Overview - - - - - - - - -
- - - - - - - -
- - -
- - - - - - - - - - - - - - - - -
Packages 
PackageDescription
fr.iutfbleau.projetIHM2022FI2.API 
fr.iutfbleau.projetIHM2022FI2.MNP 
-
- -
- - - - - - - -
- - - - diff --git a/java/APIGroupe/doc/overview-tree.html b/java/APIGroupe/doc/overview-tree.html deleted file mode 100644 index 1eda006..0000000 --- a/java/APIGroupe/doc/overview-tree.html +++ /dev/null @@ -1,164 +0,0 @@ - - - - - -Class Hierarchy - - - - - - - - -
- - - - - - - -
- - -
-

Hierarchy For All Packages

-Package Hierarchies: - -
-
-

Class Hierarchy

- -

Interface Hierarchy

- -

Enum Hierarchy

- -
- -
- - - - - - - -
- - - - diff --git a/java/APIGroupe/doc/package-list b/java/APIGroupe/doc/package-list deleted file mode 100644 index 8fcbc66..0000000 --- a/java/APIGroupe/doc/package-list +++ /dev/null @@ -1,2 +0,0 @@ -fr.iutfbleau.projetIHM2022FI2.API -fr.iutfbleau.projetIHM2022FI2.MNP diff --git a/java/APIGroupe/doc/script.js b/java/APIGroupe/doc/script.js deleted file mode 100644 index b346356..0000000 --- a/java/APIGroupe/doc/script.js +++ /dev/null @@ -1,30 +0,0 @@ -function show(type) -{ - count = 0; - for (var key in methods) { - var row = document.getElementById(key); - if ((methods[key] & type) != 0) { - row.style.display = ''; - row.className = (count++ % 2) ? rowColor : altColor; - } - else - row.style.display = 'none'; - } - updateTabs(type); -} - -function updateTabs(type) -{ - for (var value in tabs) { - var sNode = document.getElementById(tabs[value][0]); - var spanNode = sNode.firstChild; - if (value == type) { - sNode.className = activeTableTab; - spanNode.innerHTML = tabs[value][1]; - } - else { - sNode.className = tableTab; - spanNode.innerHTML = "" + tabs[value][1] + ""; - } - } -} diff --git a/java/APIGroupe/doc/stylesheet.css b/java/APIGroupe/doc/stylesheet.css deleted file mode 100644 index 98055b2..0000000 --- a/java/APIGroupe/doc/stylesheet.css +++ /dev/null @@ -1,574 +0,0 @@ -/* Javadoc style sheet */ -/* -Overall document style -*/ - -@import url('resources/fonts/dejavu.css'); - -body { - background-color:#ffffff; - color:#353833; - font-family:'DejaVu Sans', Arial, Helvetica, sans-serif; - font-size:14px; - margin:0; -} -a:link, a:visited { - text-decoration:none; - color:#4A6782; -} -a:hover, a:focus { - text-decoration:none; - color:#bb7a2a; -} -a:active { - text-decoration:none; - color:#4A6782; -} -a[name] { - color:#353833; -} -a[name]:hover { - text-decoration:none; - color:#353833; -} -pre { - font-family:'DejaVu Sans Mono', monospace; - font-size:14px; -} -h1 { - font-size:20px; -} -h2 { - font-size:18px; -} -h3 { - font-size:16px; - font-style:italic; -} -h4 { - font-size:13px; -} -h5 { - font-size:12px; -} -h6 { - font-size:11px; -} -ul { - list-style-type:disc; -} -code, tt { - font-family:'DejaVu Sans Mono', monospace; - font-size:14px; - padding-top:4px; - margin-top:8px; - line-height:1.4em; -} -dt code { - font-family:'DejaVu Sans Mono', monospace; - font-size:14px; - padding-top:4px; -} -table tr td dt code { - font-family:'DejaVu Sans Mono', monospace; - font-size:14px; - vertical-align:top; - padding-top:4px; -} -sup { - font-size:8px; -} -/* -Document title and Copyright styles -*/ -.clear { - clear:both; - height:0px; - overflow:hidden; -} -.aboutLanguage { - float:right; - padding:0px 21px; - font-size:11px; - z-index:200; - margin-top:-9px; -} -.legalCopy { - margin-left:.5em; -} -.bar a, .bar a:link, .bar a:visited, .bar a:active { - color:#FFFFFF; - text-decoration:none; -} -.bar a:hover, .bar a:focus { - color:#bb7a2a; -} -.tab { - background-color:#0066FF; - color:#ffffff; - padding:8px; - width:5em; - font-weight:bold; -} -/* -Navigation bar styles -*/ -.bar { - background-color:#4D7A97; - color:#FFFFFF; - padding:.8em .5em .4em .8em; - height:auto;/*height:1.8em;*/ - font-size:11px; - margin:0; -} -.topNav { - background-color:#4D7A97; - color:#FFFFFF; - float:left; - padding:0; - width:100%; - clear:right; - height:2.8em; - padding-top:10px; - overflow:hidden; - font-size:12px; -} -.bottomNav { - margin-top:10px; - background-color:#4D7A97; - color:#FFFFFF; - float:left; - padding:0; - width:100%; - clear:right; - height:2.8em; - padding-top:10px; - overflow:hidden; - font-size:12px; -} -.subNav { - background-color:#dee3e9; - float:left; - width:100%; - overflow:hidden; - font-size:12px; -} -.subNav div { - clear:left; - float:left; - padding:0 0 5px 6px; - text-transform:uppercase; -} -ul.navList, ul.subNavList { - float:left; - margin:0 25px 0 0; - padding:0; -} -ul.navList li{ - list-style:none; - float:left; - padding: 5px 6px; - text-transform:uppercase; -} -ul.subNavList li{ - list-style:none; - float:left; -} -.topNav a:link, .topNav a:active, .topNav a:visited, .bottomNav a:link, .bottomNav a:active, .bottomNav a:visited { - color:#FFFFFF; - text-decoration:none; - text-transform:uppercase; -} -.topNav a:hover, .bottomNav a:hover { - text-decoration:none; - color:#bb7a2a; - text-transform:uppercase; -} -.navBarCell1Rev { - background-color:#F8981D; - color:#253441; - margin: auto 5px; -} -.skipNav { - position:absolute; - top:auto; - left:-9999px; - overflow:hidden; -} -/* -Page header and footer styles -*/ -.header, .footer { - clear:both; - margin:0 20px; - padding:5px 0 0 0; -} -.indexHeader { - margin:10px; - position:relative; -} -.indexHeader span{ - margin-right:15px; -} -.indexHeader h1 { - font-size:13px; -} -.title { - color:#2c4557; - margin:10px 0; -} -.subTitle { - margin:5px 0 0 0; -} -.header ul { - margin:0 0 15px 0; - padding:0; -} -.footer ul { - margin:20px 0 5px 0; -} -.header ul li, .footer ul li { - list-style:none; - font-size:13px; -} -/* -Heading styles -*/ -div.details ul.blockList ul.blockList ul.blockList li.blockList h4, div.details ul.blockList ul.blockList ul.blockListLast li.blockList h4 { - background-color:#dee3e9; - border:1px solid #d0d9e0; - margin:0 0 6px -8px; - padding:7px 5px; -} -ul.blockList ul.blockList ul.blockList li.blockList h3 { - background-color:#dee3e9; - border:1px solid #d0d9e0; - margin:0 0 6px -8px; - padding:7px 5px; -} -ul.blockList ul.blockList li.blockList h3 { - padding:0; - margin:15px 0; -} -ul.blockList li.blockList h2 { - padding:0px 0 20px 0; -} -/* -Page layout container styles -*/ -.contentContainer, .sourceContainer, .classUseContainer, .serializedFormContainer, .constantValuesContainer { - clear:both; - padding:10px 20px; - position:relative; -} -.indexContainer { - margin:10px; - position:relative; - font-size:12px; -} -.indexContainer h2 { - font-size:13px; - padding:0 0 3px 0; -} -.indexContainer ul { - margin:0; - padding:0; -} -.indexContainer ul li { - list-style:none; - padding-top:2px; -} -.contentContainer .description dl dt, .contentContainer .details dl dt, .serializedFormContainer dl dt { - font-size:12px; - font-weight:bold; - margin:10px 0 0 0; - color:#4E4E4E; -} -.contentContainer .description dl dd, .contentContainer .details dl dd, .serializedFormContainer dl dd { - margin:5px 0 10px 0px; - font-size:14px; - font-family:'DejaVu Sans Mono',monospace; -} -.serializedFormContainer dl.nameValue dt { - margin-left:1px; - font-size:1.1em; - display:inline; - font-weight:bold; -} -.serializedFormContainer dl.nameValue dd { - margin:0 0 0 1px; - font-size:1.1em; - display:inline; -} -/* -List styles -*/ -ul.horizontal li { - display:inline; - font-size:0.9em; -} -ul.inheritance { - margin:0; - padding:0; -} -ul.inheritance li { - display:inline; - list-style:none; -} -ul.inheritance li ul.inheritance { - margin-left:15px; - padding-left:15px; - padding-top:1px; -} -ul.blockList, ul.blockListLast { - margin:10px 0 10px 0; - padding:0; -} -ul.blockList li.blockList, ul.blockListLast li.blockList { - list-style:none; - margin-bottom:15px; - line-height:1.4; -} -ul.blockList ul.blockList li.blockList, ul.blockList ul.blockListLast li.blockList { - padding:0px 20px 5px 10px; - border:1px solid #ededed; - background-color:#f8f8f8; -} -ul.blockList ul.blockList ul.blockList li.blockList, ul.blockList ul.blockList ul.blockListLast li.blockList { - padding:0 0 5px 8px; - background-color:#ffffff; - border:none; -} -ul.blockList ul.blockList ul.blockList ul.blockList li.blockList { - margin-left:0; - padding-left:0; - padding-bottom:15px; - border:none; -} -ul.blockList ul.blockList ul.blockList ul.blockList li.blockListLast { - list-style:none; - border-bottom:none; - padding-bottom:0; -} -table tr td dl, table tr td dl dt, table tr td dl dd { - margin-top:0; - margin-bottom:1px; -} -/* -Table styles -*/ -.overviewSummary, .memberSummary, .typeSummary, .useSummary, .constantsSummary, .deprecatedSummary { - width:100%; - border-left:1px solid #EEE; - border-right:1px solid #EEE; - border-bottom:1px solid #EEE; -} -.overviewSummary, .memberSummary { - padding:0px; -} -.overviewSummary caption, .memberSummary caption, .typeSummary caption, -.useSummary caption, .constantsSummary caption, .deprecatedSummary caption { - position:relative; - text-align:left; - background-repeat:no-repeat; - color:#253441; - font-weight:bold; - clear:none; - overflow:hidden; - padding:0px; - padding-top:10px; - padding-left:1px; - margin:0px; - white-space:pre; -} -.overviewSummary caption a:link, .memberSummary caption a:link, .typeSummary caption a:link, -.useSummary caption a:link, .constantsSummary caption a:link, .deprecatedSummary caption a:link, -.overviewSummary caption a:hover, .memberSummary caption a:hover, .typeSummary caption a:hover, -.useSummary caption a:hover, .constantsSummary caption a:hover, .deprecatedSummary caption a:hover, -.overviewSummary caption a:active, .memberSummary caption a:active, .typeSummary caption a:active, -.useSummary caption a:active, .constantsSummary caption a:active, .deprecatedSummary caption a:active, -.overviewSummary caption a:visited, .memberSummary caption a:visited, .typeSummary caption a:visited, -.useSummary caption a:visited, .constantsSummary caption a:visited, .deprecatedSummary caption a:visited { - color:#FFFFFF; -} -.overviewSummary caption span, .memberSummary caption span, .typeSummary caption span, -.useSummary caption span, .constantsSummary caption span, .deprecatedSummary caption span { - white-space:nowrap; - padding-top:5px; - padding-left:12px; - padding-right:12px; - padding-bottom:7px; - display:inline-block; - float:left; - background-color:#F8981D; - border: none; - height:16px; -} -.memberSummary caption span.activeTableTab span { - white-space:nowrap; - padding-top:5px; - padding-left:12px; - padding-right:12px; - margin-right:3px; - display:inline-block; - float:left; - background-color:#F8981D; - height:16px; -} -.memberSummary caption span.tableTab span { - white-space:nowrap; - padding-top:5px; - padding-left:12px; - padding-right:12px; - margin-right:3px; - display:inline-block; - float:left; - background-color:#4D7A97; - height:16px; -} -.memberSummary caption span.tableTab, .memberSummary caption span.activeTableTab { - padding-top:0px; - padding-left:0px; - padding-right:0px; - background-image:none; - float:none; - display:inline; -} -.overviewSummary .tabEnd, .memberSummary .tabEnd, .typeSummary .tabEnd, -.useSummary .tabEnd, .constantsSummary .tabEnd, .deprecatedSummary .tabEnd { - display:none; - width:5px; - position:relative; - float:left; - background-color:#F8981D; -} -.memberSummary .activeTableTab .tabEnd { - display:none; - width:5px; - margin-right:3px; - position:relative; - float:left; - background-color:#F8981D; -} -.memberSummary .tableTab .tabEnd { - display:none; - width:5px; - margin-right:3px; - position:relative; - background-color:#4D7A97; - float:left; - -} -.overviewSummary td, .memberSummary td, .typeSummary td, -.useSummary td, .constantsSummary td, .deprecatedSummary td { - text-align:left; - padding:0px 0px 12px 10px; -} -th.colOne, th.colFirst, th.colLast, .useSummary th, .constantsSummary th, -td.colOne, td.colFirst, td.colLast, .useSummary td, .constantsSummary td{ - vertical-align:top; - padding-right:0px; - padding-top:8px; - padding-bottom:3px; -} -th.colFirst, th.colLast, th.colOne, .constantsSummary th { - background:#dee3e9; - text-align:left; - padding:8px 3px 3px 7px; -} -td.colFirst, th.colFirst { - white-space:nowrap; - font-size:13px; -} -td.colLast, th.colLast { - font-size:13px; -} -td.colOne, th.colOne { - font-size:13px; -} -.overviewSummary td.colFirst, .overviewSummary th.colFirst, -.useSummary td.colFirst, .useSummary th.colFirst, -.overviewSummary td.colOne, .overviewSummary th.colOne, -.memberSummary td.colFirst, .memberSummary th.colFirst, -.memberSummary td.colOne, .memberSummary th.colOne, -.typeSummary td.colFirst{ - width:25%; - vertical-align:top; -} -td.colOne a:link, td.colOne a:active, td.colOne a:visited, td.colOne a:hover, td.colFirst a:link, td.colFirst a:active, td.colFirst a:visited, td.colFirst a:hover, td.colLast a:link, td.colLast a:active, td.colLast a:visited, td.colLast a:hover, .constantValuesContainer td a:link, .constantValuesContainer td a:active, .constantValuesContainer td a:visited, .constantValuesContainer td a:hover { - font-weight:bold; -} -.tableSubHeadingColor { - background-color:#EEEEFF; -} -.altColor { - background-color:#FFFFFF; -} -.rowColor { - background-color:#EEEEEF; -} -/* -Content styles -*/ -.description pre { - margin-top:0; -} -.deprecatedContent { - margin:0; - padding:10px 0; -} -.docSummary { - padding:0; -} - -ul.blockList ul.blockList ul.blockList li.blockList h3 { - font-style:normal; -} - -div.block { - font-size:14px; - font-family:'DejaVu Serif', Georgia, "Times New Roman", Times, serif; -} - -td.colLast div { - padding-top:0px; -} - - -td.colLast a { - padding-bottom:3px; -} -/* -Formatting effect styles -*/ -.sourceLineNo { - color:green; - padding:0 30px 0 0; -} -h1.hidden { - visibility:hidden; - overflow:hidden; - font-size:10px; -} -.block { - display:block; - margin:3px 10px 2px 0px; - color:#474747; -} -.deprecatedLabel, .descfrmTypeLabel, .memberNameLabel, .memberNameLink, -.overrideSpecifyLabel, .packageHierarchyLabel, .paramLabel, .returnLabel, -.seeLabel, .simpleTagLabel, .throwsLabel, .typeNameLabel, .typeNameLink { - font-weight:bold; -} -.deprecationComment, .emphasizedPhrase, .interfaceName { - font-style:italic; -} - -div.block div.block span.deprecationComment, div.block div.block span.emphasizedPhrase, -div.block div.block span.interfaceName { - font-style:normal; -} - -div.contentContainer ul.blockList li.blockList h2{ - padding-bottom:0px; -} diff --git a/java/APIGroupe/res/mariadb-client.jar b/java/APIGroupe/res/mariadb-client.jar deleted file mode 100644 index f18798b9ec45bb81adfdcb393a30c61be9bef13e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 446705 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�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%0D;VNQN5wge`If#@7Q-V#blCwi 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�k0Wr}X5Ctg{$v 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%0Ac) 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

&{2 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�!_eN>uLLn9I8K-|D!LxUm49Gal%fZdl zE)v2QvTW!p69F<sCCG030JK0aGVG?-w=Wg;ydTz&}a+uc`X)NnCHowFCqP06_i2 zi-`O`B(ak74@qM4|IcI9_a9~i`HK~fl^V(%0HuQE6&f&{=1HMhJwUVn);v(Lj+b>D z63T#W%NqF&-sVc_U9mE`e&!U;rDSm?Pbpu?^z!C2mh)gK$BT`cz|Y9S)G_zO`-JNx z$Lsp*X%;UQkl8>`5WahOHKJ8xaWvyM#ONKYm24RM8IG^zH}N_r$sRNEpCJ)qZ*fWT z;B%kzu&jOnE3otyQbTb;6i*E%YC;kN7*8K`gKpXZa#741Np+~jP-v~DRpN_54ZN9f z^e2NV^qV~&1iY|U`5_NLS{kA}O3tDzm4OTd+r>o>+@fcT4pSDWG6>p;#ce$|X}{8C@d}`c!i*YMQ?dPuwZb8# zru|q<2oe`*1{T&?8qX>L(JB(lG~hjimei=w(1bf-^+lTHrDSDx8DnLtEM;iSjEOMG zi}X61MlV%czKMfMxg}7NB_ERNmU+);CS7eASy=Fa+;Fz zD3rN}5sN@#ol&ABw2DL(?3w(YR7Z7TE|Nk&#{JFy0ek#yrWDd>&Vo8;>w94h<|gT- zIdE9=lmVTK6RGSq?eRsBh0#p4iY0|uSqPq5M}lYWk1s-eI2SID=<`X(`EkDd_{d6)0oh!+~_kW zggtS0B(#mk5mB}F{!2L+#u$1BSb&vKauf;6iW193i<@Rp*YS5WJxFy0@`^($7%TSK z2(LM^*GEze8q(@bdnUPtc(#1jloCdAUJa?63D4fAdQ4fwApl)%hqC_M) zXGs5AZ9%^Qm1^%Qnbe(Zb!JRMSC(evM~ui(o-(fFDeXAmS$8^Jvh@rufC_RF1Zm=R z=Wcl9b;?U2USH3lY5dzBf!vN0?i#LGM}cmE zPle!8k8~pz@mcY2BXdl_vM&Vf{63;KA(b4l+akErq?Zu?;V@A+Hk>*VoW%qq%>iA;(}FwRE>Rw#8AQg# zTDVUzHUqs}zuah@$Crx1&V^-sG-tKe9VNLfeXC8Ys?eh&YRTxw9qGeC!OX8CxxPO8A3LPw2QJN zsvnwusYmV&-MNF4VjR2nSO!xb8SMU)2l43v-@Fsq_%itg^!z6j{0G8sgxR;n+~D_% zM!J5g$x}oEH<8)kg5W&Zm(DlqArvgNYlRaS%1<&zDvy6-;}yMJ#0HHfF1=P616hi6 zuWHi=pqSJ*R&L=hO6~}!KQ7AC1@#^M!!niI)oGA6;*cKfvZCJD{Tx%yrW2F`9g%C@(&AhwGk@db(*jpoE^qUyZmd^hjhN6?tH}m1TG9EF;gb ziA&~vYncmi1wXMA={;N^Oz`v-LX6m+dRfM7R{ct6vAy8p4#Rj2Msy*2Y61A6nmps@3`Ty^WhhfUQhLHt#rGP*QF6z-z zQ~ba>=G}ImsXUbEYwvI@EakQpi|<`EfFI`XyE~(hi>0T16x$y+hi7TMAe%}kN%E)@ zE-eGnlwkpT%X$54Sqv3}-We*-C3n)bn!rT?8rm95Nw5o~?^gCAvSr@{sK zPK6R8Mp2U{#Ds68S0&Dy^v9R5P&Zicg1e$^yR>Iepkt0KPiglTxe1&{~U6A%e}fU>PF2)CMMK z!}KnY?ba?eMdLt+aioJwA7#RI!(i&A&FUi0EWPS^TXy9k={0+}s%k)hNQ)^Cx9{>1 zHA|o*wDLKp$ahfK@YZI~rr)@DlMCkX-2}K;_0bve$+p)^bX;Lb)u?-Lux})mE)WZI&#&_Qa}o8K$XGOM#ug0^ z-k}E_dqO`#X9FfJ%PE^xpxnE1CF>vpAw+-Tl=j2FYC#;+@55pWDhJ$ESIyiTxE}k^ z5ty0B2DzbGl6p0tV0^8I!(FLv&<(AH-bqHHQ(%L-$&nhtqRbc!m31f^>?truw?^CUAg4iaN<#|5=S}V)GDVJ3}04<1D%-V zEgn{FeoW>oDTYeTX7ltbM`b@L?)hSYbjdv~xsLOv3hg(Tz@#Zrkzyrr-+T?cQ%2XO z+$orJ5AH}~sbFNXRtvTm11;|-9>}ld_9R$S`gvjz4OoZ`a#*H{Ih@KZa9O5uvet|; zV(ZqD89JnuHtv73(cQGJ2D#?O*KlwZ*ZA68IJHB4Hz|-S+210d5G(j6PMulw>|!|I za$VXUKg8Z~botL7thi&_?LladB)Y@t^{H@+uzJUDx@Sl_q*UCJtOqzP`Ozsc^$1pr zD`4g1%W_M->|QYY*)0UR$BfwLklxZr?t<>WkYwiRPJO@(DTTyY9pzV?*1A zCb(VXg2n)^+M0;z7fDYT-hJ-@-+qNRQtx5L z2g>h3Z;wdoSDdvwuZsSSCIsKS=~p7Pz1&k+?GoLObgEmNn!erzh>vJP_f*q6H&5j6 zywW>4PgJ#2lPeLwdYUZ%W1>h)2Ce`~B$+alY3yn0F$UQur;dTl=cfO2P*B*YhB!Lz`4e$9+!>jP0 z)E-VIw#Ia3PEH2)7IZ%zDz?T3j>cmD^(x@vY;I!fY+>|olxVfu#XrsOH;sgPSR@z- zgE>`8Q^-j`1e~&FURgaz96oQQEo-VVfwexK-ydG@rk-`pjrCBU)jzITXHiV6@#w zN&*oV&@mI05@e7Oot*pNsjm9*w#R6Z1p}Ed>uMw`7vac3=xj}WZ#RwMvXPP+vk+)s z!#Fk8?M3)8?`Ekv&EUY-uP@{`Qmx$-3mM0W`R%|zpN!s{cS!KnV$Ys*9IrluZzRe| z9BDS`0Jc*6bFo!{s<0-7IX2S5)2$(QKCG0tMiMMKetDgw7vlV z3HFGkzepf%^s|H995nkD#5^PhFtU>EVNXc9LSIO{{h$zeheQzYBwo>T#oL19NW4ct zc}E=}^mZG<=t#VSYe~EVsR(<1=5uSrUvbqa@Nut{09|6kFUt~=+}5Yq84si>%FAre zp;IW~^fe}~Bi&W)%Bri6ZoUNsaa5JcGe?_HcD>m3L8{(z5fUNZ=9CFhO{VB1ci&&8 z0SMXc>T{Y0sp_fvEEMpW+ytUD1h$C1RCJNa{ZGi{6un;Z zb@u+$2wlnKt4{DFL)WWgwv0fd8IuQNJj$gscQv)7l<%X$a0@aA{(*Lx(^r74Pgq5s zvOoD`Ot-5e$V^uqYq2Kj*AclQuZuNGEKRQtk|xeicR+QC+a%K`xal$|k;TeDTHV2h zPI(}tx>x_zNB}4(-Q5(druB16aQz}I`JiuV$zcA z;0ofcI(Dgv;+U8p_Rk@jVCT66vVs!hs-GbKIYWe%ty3!Fg7?t=4o(jLdZrd*khA?v z)5TB0jPS)jLG$)XT}-D3INN{pa5n-pC*D1bQNA&^(h&LksO;xLxR)s&b4_ zSsA97s>l<&HcIPmkHEV|8DWOZ0zY3xIBh;pf*6b?pxMZi;_IEHH1`7KhYXoxnA;63 zw-;1{oq+W_C`W!pMCRBVMmvT3Mr8#Rs2ZeV;Kq&Xj;JoGcJC3h`vX<=&15eh6&aB9-I|EI;pi)jcBO!CjyMoPp(MGaL^+wSpe{sT&2p}WL z3`7!82MN5Bs`e4qiG}+n>9dE(xFd1dW8<(3d~?b!xWI<1}740B#oSu(=WXnYo4DqIle|_ zRoeED%}#*m^I#1Sg>IfYv+3=YF(XTDGt*g<>Czus~%<6=6d-;@8LE zON-o`3{bseTM|In!H zrL()vuSCtc#xtwFaE1@?e|qeHMYDg$Ig;Md@wuOqnYEuDoBuz?Ii(-4`vErrdy9X- z?O)sMVl@aiq!pB}krd{8dU$x&A;5^l5PZ7?33Eg1yn1XbQGB8k+Z_nZY5oikl?r1TM)Jg>}azQRvX9-e z&YS6rZ=WL;fS0{oNLWI>!EFwV7IPfXWqT9kfixBR(1-m`LG)NEcObctJKbQx8>L(1 z9M#+3+(ae0$#;Mlc*^kop+g6Qj5&#ST>&_+;^=rNSEEA*2Zr}Z`*#wcF0V;Za-nzW z^t@Etyl5jQD3^n118E6&0jIweMnpjM22xGDMFfa?Fh^F5y>;6D76hPr3yrXucuS46 zqF}?@?Zn^dV5AaT&sd!`c5GC3o>^?A*q6;Vl8e~c{Ia0mm(7X|5xVj+I6p1TJv_=VdNzTj1M0T^5(XIj zkZ~}j;VN3yFu*WlmGoQOi3LLC00N?+E`4EEA}--kAT326?@0xQidWtK0W|fzBjo~F zKt;pZQS8WLpF<%n3t1w(8bP$5rNKduKIaxQpTi8RX3l#QGb5%|b~E-lq_~x!l?R<0E?e&? z&qy}O!Mk?piMQr#XNUEJwn+f=1Uhlw2UwAidk zQO7%R4yF_GCg|o&=k#xrtZ=mll3Zpj=pZ!Nc8F>s9ej3h*~AlP&yReA_j{{4kSW^*IvJsQVQ_;AHtrb(vNAG2^PDQbZQEg0uAf+TPvmlH>G5#K- zJU~M>B{M;}Y}&R8(^1p2z#9%iLAiR3k9fcH3rf)m$BP3M4=J7=ScG^vnpAUHBf8IhLipfXH%8xaBep*Zm6lGr#l z#FC|*EKJy=rqUH+g$P>}C@b2yF9f>PQ#V9&e?GFFM2@}|1yGB#l0Ifz88^+Gma-Ao zBAp0vV=jM3^`SXzXD>5scgKa&i`MP>As}c&0wmS;Sv_Slms%R|($d=84DrOL$YXP4 zDBB-3ou+wd9G(XB&R6fb(V8|#RZMVnB$g8bZYRre1%xdl$auQth8-b+O}=mwr$(CZ96NiO54^-+pNm`bAM;wcK3ey&%Ld!m$~MAnq$mp zy~l_iVekX(SR?A8X6C)95ry5Hh7z2-wWYVMbwjEgpv?hr_Cqq3B7>Op?9%!LP+{TB z)9`GFMj^z+laE+gWwT5n&%c^`vFkJ4CU5-f%!poVP-4$2o2Dt6BN}Z-Z>5fGTjO#C zd3FM=m4?B~=@zfJ?gBN_e_ zL~I8exjZjFzm1hn7V6 zos?l0T3fAbW{QWQF1xCAIEh|&jEDcpy2hNF)DSsT>8yzkmH5j7>|=aFlf%im$ds6P zv5l3y;N|h97G>f9u4F`beAg2}Z4OJnaIs@WmDD7oc||kKt74E2v%Y~*4LtgV4HT?~fRC{nQc-$Vv-cyL__(cy2f|By1hvvOYd&J_nb}K|r z4odZB^bOPI4wy;VEn@%XM0&k$q)8-m- zIb7=k5LcRsv6S8uG3@P60MTHn+c zdE~+dLzTs7q+XCIT!gVeim5#4bH#6*#0!*$e5BnISU>GaKYQk*n~&s}cAtA=dye<0 zMG!~91J&tdoz$5{DtlP+z@7F8dXQIo#**Tf^~ihrX<1ZF2%b)6QuAgJC^uJC(VpHf z>n%e-^@DKGUSLla8`>j>!DMQT14dHpnLhzi3ckh2t840=;9u3lf7S^9T|LMqWaJhC z0|5zsOXj8ie^n34&NlzAVqVGA(bd%XTjudECDH%T^|dOx@+gXkyzK-jX`)uu6coS* z;*_bXh+u`F+N3{VRI3VlZQI)$G~6z(b(dZt{$PB9qf|yBjF|hUIGQC|#SoU=8Jgel zGCLn%_Aq~3eVot(l{IDv(9``c+-J(BX4H}W83dbscZ>Y{mTJ;0NH%V|6_d<(&bWgv zfe9zAMRnc+TeaGdQrZjHNOdoSeB1Xd4c2>;y^S;wEU*r2vTdnIfTdXra~CxNH5dEs zT`G-s^>0s=3jxkDIALXyF?Ou%P^-rmN=yY_^l7?uTvzQ)W4+q4yS1uvyA7%Crp2l3 zkPl(%wPaVB`j|?$*nFd{CDmjj`=PYH*SR4gv%C*38AAf)74}D%9jDj2x~#rx3UzFc zCpxB6g~8YEU*LVRF7vo~09fI>;W&R2%8Pz>)A(RFrrlic!D}65I_>95BVbv+i3rY8 z#`08HX-KjJw2T|END*gii6K}U+s;^R2>03|V>Bp?rwsJ^Z~PFt1i1KGf!o~VvMw}I z#s~W`8u&#R<*#8R-S<;5wTUa`l8>?5+$WC-hs{vpOf>K={a|S`16VtVutSQ(YL{N=&Sc z5be{QiO}RT^n*+3xNg%Iba8Sg+Q&c0sipepw?K+17Oi5WD~|Z4$WM@5Y!#dN2I$!u z{foQ9$D2kEsJtS;#i*`7hK9L>EJ6|#z39MQNBsVwkN$J}|M!QnVJPY_^DUn<`PTgY zFGp8S_Ad6u_TNrC&YpJ0vft-dmP+6ABuf7rW&K+{m!vO`B8d8X_HlM44UCE?D5zgs z8<`Ag9uYQ@@KyzE{?XUXU8!8tEo)tucvlJ~G7`ZLh(G1-x`l2IU3r|u-Q4at=VLSZ z?dfAw9*BFbqA+GuHRYCsx*DxU^)|(@&E7;G(~}IqB7>RN+In{HY?uPcvjfAEUrmun zhD<1rf_5)p;pe5>JgbnJ@4GIa5{Kzl#^{kQ{$F!Y0<3Xd!-fQ?^RAnQs)8t@%<7(yOS<`f>Mh4cj zjglV{jlH7FQPI&6PBk>iJtCcH;>Uxkn4a&!d!}5yX5rQ#Y2Pk`&?yjoyoMKBWREo* ziB(0HD|ZQJ(EEf})9M;26s=qIx(sbrNtb{mp+F>=O5(hfTRgKMAXW{(rpp#K-zlFJ z$k}d=z5X6Hn7*~pINjOm2!RpC28-a-6ik?DTv-=j)z&4E6}~EvgF8Gfh<-N0A>oK> z;z=}yj4umJ85dNOWOjv~Kyzzz+q7Ks=bxD7|J)w`y>S-n?@hg+fPik%{#V`Q|Fdyq z4ZqEsoSc~Ozy4BA4RPP&0wuXPogylR@6lbv4a6c0kx?sRle(LAJ>#%Qbi(UL?H^lFxlBE>W$h3S5Z5X5x<90LXp8M(-r^E;o9x=dybrf~gsxHUbqQZ4 zgLs*|1jd4eddv3-4f%7z#qVz`!bX8JLVAQc?{7VT0C&EbJcPyMp**CAmV_T70|+AT zSObs3SbrtNX06up<4+s}&`Cmg>i5Ay58#Q>*>gkPNQ}Y`47rO6*r;O8B!&-Qrc8tN zj%VP+2k)v;)7043<+K}y90tX#r5&8Dr71dA8r87nrd-am*>E;v42baCf(W_4y$a&6 zA|YtGTS(D$Y@IGK6FpGMpHweU|G-?SDI1z7a~RRdyR>A?U>E-;Do>Gywa#7JmR`X-HI&QWZ4VW!D2wlY*M%VY8wrw_c z42BF)rQM1OTUQ&87=_efZk`FRIS#a7yE&*1x^Q9KKxQhALrEP!jc5~&y5Mdm<~rjw z#7Jm2a9)QH+cwQe{VHep0tOT(*n5o09t+*|J5ZiB#&A$f;hO=WL7R%>yxYW%H!SaQ zh@B8QTMyQ_OIwQTSJpUkVJ(!#gor}Chs&fqN?*=c*gMJN?2T^~x?fRk+ z_{Bv>JyDqyz;(Pw&1Ghk7Pp>Js*qM&ra{2fiDX)N>VZ`sv1EuRp0MPgGRoLp1z^Qp z{T|UVAUxv;tcXkIC^cqoJM~a5<43wzCbZu-=Lrs*aL2O;w8Z5DFt~P*?xnk{0lfP? z^w=A7b;L1lq0}>7_7|^ca@0D#TXhVWEw*N&6nK5m?2{6?(4#S0`w4{(>ze3pCFfR` z{Ud!pk=nFm#e+l<{9<<hZ;mBM{1fJJ|0s@ybF~E#5$wxzebUr@ zii-Jz&8~0`O^d_%FU|*maec=5!(ui4@OnqK-vMidRkQxGD`#-ls4dXTm|{DTk?S)R^&~@r<8?e1$=)+IHvg`V z8LaVHPzGnrrtmVCU#uKpl$jx@k4J>?%dATtPHIMNforBNIG$fX(pC0KvBGK>DF*T2 z!Y%YdQu?hGmPUxKHww7z!iZ)>$BBwZaB4`k?j3pR1o|j$ZHY2BJ~ZVal5n>tWfo-V z8gOf0;fclxtvhG+EL<%|^g_|X<^PL6vb%?Z?j<=jU*uo3 z!>5#zF-W4`iKF{#*H#PBNfa2a-ijmZ9X%8^dEZJyj2ltWb`9yfE~P)x6q~ezABsd| z7f#AjWF8sNJRzTUvxRw9tA%;vE*0iMpyYV*e|bgoB>I_~t6Yq7j|u0cs4KW%Y-RZ4 z?r`Fa7s84=RCqFU-bs`0w@By!%#o9(ucm~lM@w3+N-OEs;)=da*&m%~5O?-5qlDcT ze7i%V*AM!y!@lp^upU^gCDshzVRn=&gb{EuRk1R~7xN+Y#=Ld{5OyM zZ#sgzSMqGt-ZyH;j`CVTU#mZ@6(0kBEJr{rFMCMT_77Q6<14lwFt)~K^;h?bSEUo^PQ?Jl^URj4d9eH?By-_sUQGgL$%Gp7;r zvfMYPSU}8j40BzVlH_-cJF%0@wGZ-kmt_qVK9sOsU1kuq?vA0ZsFN&8JDM2PpbvHa z1EDNBikg=srJR1nEn%6T&8@u798iu~Uv6nkFmVe@H`tsJ@z+KPLLu~Iy-Lr(nrqC* zi?O(Q>FF9myh(ck&-0^k-qwWEw6~iHpVX9+=B2UmSzrKWn-FuJWXbg=ka1d*&@@ARw;)Yv26c7(03XkFL%6-}5zc-vL6hh7SMk4b-F^ zlvOc5<@DGk?E}%3VDBp;*2-vq)PQZ=(-^>5Qlm!E{@fvHKcj7Dw{%jDDw>fPT^$Ua z;UETd7!=~Lb1g*0oOT3Ynddl?!eDed@9)UYzvp@{hAj*hMdx_W_OHf1nYs(hcyC+4{-!0 z8$Rxr2h3?2*Ebts5YkA06ZbJuKXs{^}^$Lj%hSa95dxs*#DY0BChv;Fxu5 zPqspR8)?UsuK(_)n`?4t|F$&9N{xJ3_Z*sN;r)5mWW!s0viUqOIk%M5xlT(QqO94> zVdbhRtQp8_j*N6*OC_NKDBu$&bm3K^@wG` zPBXMaKBw1iL;v&_xHry5D?Jq_ZATeb_WVs*YoVlsD^b?ctnYEcRr0hsJT~ZZxR^K& z?di`^w;n~7TOn$*IL`96n_4-(T+mJs*7kMN!h487iJhbJMc45r8Q%C5`WYgHw%I9_ zhf-Mo_0fx(q-nI0ssKaVtW%DcW^(^I=}+{E%jUC0QZ8Gf0bDIoG#kYPqi1n4C9gUa zTheM-3BDAmItOWP3v6unA>VZ)zS3{QX-M=I`|OyS1FRBNo>*F&v}7s6shF2siK%cz zjSmNJcr-X>+DXmjnVm8PXRExdJ z)UeEGYNdmN4Av@%zZ-y54jIab=tIHK*rKRLj^YZ2q%$&{9}G@ZY(~h?(izF-x^cxC zi<%a94kPlKFe0|@$5)RO0}EEinUUw5IJc!>SZGCOMT?ZWjt1JBohfT7wQJU%AqSaD znCdb`d)y@o%Id29Bp1Lmh5MGA7DyD;lQergiH#fRUVf^qt&2P-<=xCd>wrBr7MY>r zL!YTm?i<@Q6h9q<;$g9Ry$6;gvnyE?DleA(n#CbVgB+f5q_(^57+wY8lV?V&{0Mi?2`C1L4 ztbqNRE#!b*NMHoF2jr}(Ac~Yv96Z^20~3BtLtT&W|GdrdUewf`+n$!a{j&CRL$9{Wj?X0}lFG(T!k~V}_~3T@Omeh(GuBbVWKG z;uw?Yvw&te7wg$+TlbHOn0Kywy+~L2nOpSi=0W@`aqmUP4(i>F4V(xFsRo)Qx~koQ zBto5GYnPTjc%~PtdxBFhf)W7RtMnRoZNReu4Wl+`Xw5iv!jX*EXhB{qC;ffWe3((i zc?u;H*qm*pU~Gs*4wY^n@{T`tbu5_LCs}V4bEkjQ17#OL1%l=XVGqFH8MyJl_}csH z32ri0fd>!bw$F>df0e?zPaOW^huG_eVF1qr^Mkl&*>He2&zvbZ%Mkx0H_2X+)=1C# zZ(ndMsLs)C@M~haMEW5*56>}}Qh@)zNYnp>`2PlfR5{tR$!}h0_8a`!{;%NgZ2!+_ z<-Y*mM8VR*RQaFle*?d&tg^Q1x2*`|R)U@s4&S@3b*(LAXiKX`Yip{XLL+LzPw0`A z>}(JnFK7F#t$=rs9LN0;QFE95L0JsC7G_{(w~FpfpP_F|U zPE?b`d*`{VCy-kX8d;39jynNe1)C{#2XAyXH;6;pzK@Qn@E*K7G^tfdNY$(^Fp`md zZ9AILL=&$qp7v;{De7X`S5IpqbycG=QI7)SzVHaF@kqn-$~&E|Ae zlTDH8j_+R?`b>A&GmttSn$m7c%I(mPOWJl-e#)TmEa|bLiSgEH)p-dc>;_d0gOe_< z0k+GAsgsw8frYyGk%4&HNJy7!B763nXRw3>=>AB3otxU-I|@t7MFUCh~tnFFrFOed@J&oSDJC7fl5Cmz`VJiaGmmcHm8 z*E!JB2?GV-H!Ihnd6hs$InDNzso6PtAU&D8h+oM&6l`;ONEZ>*`nGVr*8}~af45Hf z$5Nh6!`c$-4QuJW5{^h_iedif4wsHC!{Lum#7-G(f^+GaBrR=nx)`VxKZjdA!NPvR z=#eeCttCP}+ox%WwvWsi8-h2cGzJd8aNObMK4eRjJ=^vl@@;3~oM!n%HEWZ93?*ZV zR(W@+9dp7@A(X<~5&brDSZ0=|^IDxB_3XG#x5ak*d2!x=S5l&kjWU;9u*$qszVRHEX~+?~^1#m9>5%SuG-2zJ%T}a$1z3U&2`twYuQEN07tu@YW{W8Cb3`Zc3Tx z&EN_hvY)lPEBbEV3}Elh+AAj}3_z-#?J<`P+hx6_Jg!r~PSn2i+3zYKRcQP178NX$^O03=`4i!5`F7_+f|hFwi+YAX(ARx~FFL0@BVd!LPB5P`E@8tQPh*_%zt|T{@NK-&D>>tzW=y^3IlRXxk=^IHzBzXiFV(Ue zuZpBkRiHj~IkZQ6xhg_&Ftc5ZAq0~5!tnD`{^5gBqgQzZ1%IM>e@_dv9wj;V1$okU z`%Jy+{zunHzhgrB9-^=>%F)|C;H$6U%M&9H;Ua2$Epo&a#__2G>fuIZSUScIQ#urV z$$pc}Ny0>4Wc9I{F`cu*S{+j7)+tut29bi5iEb5|v~eBs2PcI3y;P$>d^ZxSp)` zDQlxGOinto*2KOW8ce=r{MIE+V#5;F=a|XJbFQ@8xeCl!v_maLh|C2iNTfTU)Gl!` z)s-Hb=rS+Xmb%grmOWnu{5(qp_XLr!p`9F0syZkf;xEOYgn)f z@EVte3Y}v<-kG#KcBH{upF=9I_s%HD&&{^*VM@onF==kQ3#t27hFIZBmyP>N67OEp?%c$AE*bdgySI&L~n` z3ozB;Xldbky~Y%p25m5c=t+|@I|@#cVBIm&X8tx?pXtD7cMBF?)Df=Zhy1ZUjwJg^ zQfFOwxz>;tS2YAB>%oqti~_OjqEmAvo9?KS;i}D$iT@M}wKmppGd$)nWo}hc4W&

Cy85Y2gx2SXgl%S9&W7+AC+h(|-D)q!} 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

TjP)I{;i?Y|2+Z4v${0LUYa zA~qeS$mQl;b8?mymf4L}e#dnSE+R(yRq$ZgPR}KCw018k>fL~;)gMc;2z%HSk9O+6 zL_cMpQ~CBp#pb4h^69{+!OMFNWlN$}&pAB{XibrSe~G52o{j&Wp>=D8+8H#P&i~uF z_wCRP#MsE!N1ATF3xbz&*||sbSL-@6yA%t{n_6xiCbx*+{Vy2%YhS69N-4uI<~&TU zexAt8;@$S09Bc)r6`R+L0zDe0Ux7nr1K11Qw4>7?+Oc{4z=y3QWU+IYwwm%`6&0O`?;c#Ef?$3`+EebKCjGr`EYQpyfE#RVx>KxzSUf1j_7hlOol5bK z0r=k8gwAM5+ga!upf%Yo00a)Oi=0p|zBMRMF-;i6wy%+B;;BYU72yc<GSfI4#Xhh2=dALHEg zJ6pGibgB10E4nfWsli_a23TKMrRJ!y=W67@s3rEq;+uN|Bt?X?LJ z=Y9i^74eGbGOA?J@EI*DXgD+KZ*(QqjRA;M6nPzbIFk<>)lgp;W?a#5OHhi>FoiwM z`YM{Gst{O~ilvRR8hNB6x(z+(DqiI8$a3nQsHWZxtXVU7fXy5NNmDtYBt-Xm6dUo3 z&5{tmXBh&Cf;cCv%i<{vp*1X3q+{Mf9?W)rKYYmQ{y#eeCD0^YD6L?dYI(b)ZC@Occo28+Y8aZ8mDeo~JB}P4!Ie$+)FU)7Xba|MR7=QJZo2KBRB6uE! z3KKHk;}z_Ue5{lg82K0|Jx)qRi*-*-MM-!bb45vr9vur4(%eF3Yd z63Ym40!H6-+*0{)4E0|$o7QG4lc#;q${9oPq?C*Kg!L8Qjl4?lHGr+~%4RTbXvDfuVanyAVL0sBjYT&GL=Cq5mq! z1kMe3>gDZBILi#OF2KW1@asrH9GLdmqrV8F}&Q>eV2th;k9I z2$VwXC}Hd$1*<|po+qQy`d1u(uGGcLGFV~46}x;Hx} zE$1w5ia8s8sID1Ud0fG=wni>n3Eb8ffq$MboEeN>n>3phsB4n}bHPKA5SI8q9QJQl z1nk7jIhzfDV!)2fc5RB4~ zAq*1evg|=9{j~?af=}F6U;xQM812g} zz}`Vr+Q(sl;YC=~=t&z6375RI{71Vp_ZjpBD-rEEY1}8RJfhF0I~gTfeoQ}-q9@*` z$Mo5gswaJ8TnxkVo~-UUHsNQ)yfO!4IE$Cm$S%82yyHtodjl|$xo|~PEgANiGyO7( zWJpbq;uz7J0x`7?_Nvn96!A`!-(_1H*hy>V4AB@JV!9+BuA+LQkTCl27f!E{pj@

kHenN9*R3rRQJ0MVd4)EzX6a#zGS4Z{j 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 gh= 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 diff --git a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/API/AbstractChangementFactory.java b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/API/AbstractChangementFactory.java deleted file mode 100644 index 134c43e..0000000 --- a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/API/AbstractChangementFactory.java +++ /dev/null @@ -1,69 +0,0 @@ -package fr.iutfbleau.projetIHM2022FI2.API; -import java.util.*; -/** - * Usine abstraite gérant l'ensemble des changements. - * - * - */ - -public interface AbstractChangementFactory { - - /** - * permet de récupérer une usine abstraite pour les groupes qui fonctionne en tandem avec cette usine abstraite - * @return cette usine abstraite pour les groupes - */ - public AbstractGroupeFactory getGroupeFactory(); - - /** - * permet de récupérer les changements - * @return l'ensemble de tous les changements en attente - * - * NB. Attention. C'était Iterator dans la version beta. - */ - public Set getAllChangements(); - - /** - * permet de mettre en oeuvre un changement connu de l'usine abstraite. - * En cas de succès, le changement est oublié (détruit). - * - * @throws java.lang.NullPointerException si un argument est null - * @throws java.lang.IllegalArgumentException si inconnu de l'usine abstraite - */ - public void applyChangement(Changement c); - - /** - * permet de supprimer un changement connu de l'usine abstraite. - * - * @throws java.lang.NullPointerException si un argument est null - * @throws java.lang.IllegalArgumentException si inconnu de l'usine abstraite - */ - public void deleteChangement(Changement c); - - /** - * permet d'ajouter un nouveau changement. - * - * @param A groupe actuel - * @param B groupe demandé - * @param e étudiant concerné par le changement - * - * @throws java.lang.NullPointerException si un argument est null - * @throws java.lang.IllegalArgumentException si les groupes ou l'étudiant ne sont pas connus de la factory partenaire, ou e n'appartient pas à A ou A et B ne sont pas frères dans l'arbre des groupes. - * - */ - public void createChangement(Groupe A, Etudiant e, Groupe B); - - - /** - * permet d'ajouter un nouveau changement de type 2 - * - * @param A groupe actuel - * @param B groupe demandé - * @param e étudiant concerné par le changement - *@param raison la raison du changement de type 2 - * @throws java.lang.NullPointerException si un argument est null - * @throws java.lang.IllegalArgumentException si les groupes ou l'étudiant ne sont pas connus de la factory partenaire, ou e n'appartient pas à A ou A et B ne sont pas frères dans l'arbre des groupes. - * - */ - public void createChangement(Groupe A, Etudiant e, Groupe B, String raison); - -} diff --git a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/API/AbstractChangementFactory.java~ b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/API/AbstractChangementFactory.java~ deleted file mode 100644 index c0849de..0000000 --- a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/API/AbstractChangementFactory.java~ +++ /dev/null @@ -1,93 +0,0 @@ -package fr.iutfbleau.projetIHM2022FI2.API; -import java.util.*; -/** - * Usine abstraite gérant l'ensemble des groupes. - * - */ - -public interface AbstractGroupeFactory { - - /** - * permet de récupérer le Groupe qui contient les étudiants de toute la promotion - * @return la promo. - */ - public Groupe getPromotion(); - - /** - * permet de supprimer un groupe connu de l'usine abstraite qui ne contient pas de groupes. - * Pour détruire un groupe connu qui en contient d'autres il faut le faire récursivement. - * - * @throws java.lang.NullPointerException si un argument est null - * @throws java.lang.IllegalStateException si le groupe contient des groupes - * @throws java.lang.IllegalArgumentException si le groupe n'est pas connu de l'usine abstraite ou bien si le groupe est celui de toute la promotion (renvoyé par getPromotion) - */ - public void deleteGroupe(Groupe g); - - /** - * permet d'ajouter un groupe vide de type FREE comme sous-groupe d'un groupe donné. - * @param pere le groupe père du groupe à créer - * @param name le nom du groupe à créer - * @param min,max bornes indicatives sur la taille du groupe à créer - * - * @throws java.lang.NullPointerException si un argument est null - * @throws java.lang.IllegalArgumentException si le groupe pere est de type PARTITION - * ou si il n'y a pas 0 < min <= max - */ - public void createGroupe(Groupe pere, String name, int min, int max); - - /** - * permet de créer une partition automatiquement sous un groupe donné. - * - * @param pere le groupe père du groupe à partitionner - * @param name le nom des groupe à créer (on ajoutera à la suite un numéro ou une lettre pour distinguer chaque groupe) - * @param n le nombre de partitions - * @throws java.lang.NullPointerException si un argument est null - * @throws java.lang.IllegalArgumentException si le groupe pere est de type PARTITION - * ou n négatif ou nul - * - * NB. doit créer une "copie" de pere - * sous pere de type Partition et ajouter sous ce groupe, n groupes de type "FREE". - * les valeurs min et max de ces n groupes sont - * min = 0 et - * max = partie entière de N/n plus 1, où N est le nombre max du groupe pere. - */ - public void createPartition(Groupe pere, String name, int n); - - /** - * permet d'ajouter un étudiant à un groupe. - * - * @param g le groupe dans lequel il faut ajouter l'étudiant - * @param e l'étudiant à ajouter - * - * @throws java.lang.NullPointerException si un argument est null - * @throws java.lang.IllegalArgumentException la factory ne connaît pas g - * @throws java.lang.IllegalStateException le père de g ne contient pas e - */ - public void addToGroupe(Groupe g, Etudiant e); - - /** - * permet d'enlever un étudiant d'un groupe. - * - * @param g le groupe dans lequel il faut enlever l'étudiant - * @param e l'étudiant à enlever - * - * @throws java.lang.NullPointerException si un argument est null - * @throws java.lang.IllegalStateException g ne contient pas e - * @throws java.lang.IllegalArgumentException la factory ne connaît pas g - */ - public void dropFromGroupe(Groupe g, Etudiant e); - - /** - * permet de retrouver un étudiant à partir de son identifiant - * - * @param id l'identifiant de l'étudiant - * @return Etudiant l'étudiant connu de la factory ayant cet identifiant - * - * @throws java.lang.IllegalStateException la factory ne connaît pas l'étudiant. - */ - public Etudiant getEtudiantFromId(int idEtu); - - - - -} diff --git a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/API/AbstractGroupeFactory.java b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/API/AbstractGroupeFactory.java deleted file mode 100644 index 37959ee..0000000 --- a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/API/AbstractGroupeFactory.java +++ /dev/null @@ -1,129 +0,0 @@ -package fr.iutfbleau.projetIHM2022FI2.API; -import java.util.*; -/** - * Usine abstraite gérant l'ensemble des groupes. - * - */ - -public interface AbstractGroupeFactory { - - /** - * permet de récupérer le Groupe qui contient les étudiants de toute la promotion - * @return la promo. - */ - public Groupe getPromotion(); - - - /** - * Test si le groupe g est connu de l'usine (connu maintenant). - * Si la réponse est true, les méthodes avec ce groupe en paramètre devraient bien fonctionner. - * Si la réponse est false, le comportement n'est pas garanti. - */ - public Boolean knows(Groupe g); - - - /** - * permet de supprimer un groupe connu de l'usine abstraite qui ne contient pas de groupes. - * Pour détruire un groupe connu qui en contient d'autres il faut le faire récursivement. - * - * @throws java.lang.NullPointerException si un argument est null - * @throws java.lang.IllegalStateException si le groupe contient des groupes - * @throws java.lang.IllegalArgumentException si le groupe n'est pas connu de l'usine abstraite ou bien si le groupe est celui de toute la promotion (renvoyé par getPromotion) - */ - public void deleteGroupe(Groupe g); - - /** - * permet d'ajouter un groupe vide de type FREE comme sous-groupe d'un groupe donné. - * @param pere le groupe père du groupe à créer - * @param name le nom du groupe à créer - * @param min,max bornes indicatives sur la taille du groupe à créer - * - * @throws java.lang.NullPointerException si un argument est null - * @throws java.lang.IllegalArgumentException si le groupe pere est de type PARTITION - * ou si il n'y a pas 0 < min <= max - */ - public void createGroupe(Groupe pere, String name, int min, int max); - - /** - * permet de créer une partition automatiquement sous un groupe donné. - * - * @param pere le groupe père du groupe à partitionner - * @param name le nom des groupe à créer (on ajoutera à la suite un numéro ou une lettre pour distinguer chaque groupe) - * @param n le nombre de partitions - * @throws java.lang.NullPointerException si un argument est null - * @throws java.lang.IllegalArgumentException si le groupe pere est de type PARTITION - * ou n négatif ou nul - * - * NB. doit créer une "copie" de pere - * sous pere de type Partition et ajouter sous ce groupe, n groupes de type "FREE". - * les valeurs min et max de ces n groupes sont - * min = 0 et - * max = partie entière de N/n plus 1, où N est le nombre max du groupe pere. - */ - public void createPartition(Groupe pere, String name, int n); - - /** - * permet d'ajouter un étudiant à un groupe. - * - * @param g le groupe dans lequel il faut ajouter l'étudiant - * @param e l'étudiant à ajouter - * - * @throws java.lang.NullPointerException si un argument est null - * @throws java.lang.IllegalArgumentException la factory ne connaît pas g - * @throws java.lang.IllegalStateException le père de g ne contient pas e - */ - public void addToGroupe(Groupe g, Etudiant e); - - /** - * permet d'enlever un étudiant d'un groupe. - * - * @param g le groupe dans lequel il faut enlever l'étudiant - * @param e l'étudiant à enlever - * - * @throws java.lang.NullPointerException si un argument est null - * @throws java.lang.IllegalStateException g ne contient pas e - * @throws java.lang.IllegalArgumentException la factory ne connaît pas g - */ - public void dropFromGroupe(Groupe g, Etudiant e); - - /** - * permet de retrouver un étudiant à partir d'un String. - * - * NB. dans une version simple il doit s'agir du nom exact. - * dans une version un peu plus complexe, il s'agit des premières lettres du nom - * dans une version avancée, on peut autoriser une expression régulière plus ou moins complexe qui est générée si la première recherche n'a pas renvoyé de candidat. - * - * @param String nomEtu le nom approximmatif de l'étudiant - * @return Set 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); - - /** - * 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); - - - /** - * Ajout a l'API pour changer facilement de nom de groupe - * - * @param g le groupe - * @param name le nom - * @return true si possible - */ - public boolean changeNameGroupe(Groupe g, String name); - - /** - * refresh le Groupe ainsi que ses etudiants - * @param g le groupe - * @return le groupe refresh/un parent si il a été refresh - */ - public Groupe refreshALL(Groupe g); -} diff --git a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/API/AbstractGroupeFactory.java~ b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/API/AbstractGroupeFactory.java~ deleted file mode 100644 index f1dbec9..0000000 --- a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/API/AbstractGroupeFactory.java~ +++ /dev/null @@ -1,106 +0,0 @@ -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/API/Changement.java b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/API/Changement.java deleted file mode 100644 index f8a1997..0000000 --- a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/API/Changement.java +++ /dev/null @@ -1,53 +0,0 @@ -package fr.iutfbleau.projetIHM2022FI2.API; - -/** - * Une demande de changement de groupe - * concerne un étudiant, qui est dans un groupe A et veut aller dans un groupe B. - * - */ - -public interface Changement extends MonPrint { - - /** - * permet de récupérer l'identifiant du changement (référence interne sans intérêt irl). - * @return l'identifiant. - */ - public int getId(); - - /** - * permet de récupérer le groupe de depart - * @return ce groupe. - */ - public Groupe getA(); - - /** - * permet de récupérer le groupe d'arrivée - * @return ce groupe. - */ - public Groupe getB(); - - /** - * permet de récupérer l'étudiant demandant le changement - * @return cet étudiant - */ - public Etudiant getEtu(); - - - /** - * - */ - public String getRaison(); - /** - * @see MonPrint - * NB. On n'utilise le mécanisme des méthodes par défaut pour donner du code dans une interface. C'est un petit peu laid et à contre-emploi mais pratique ici. - * - * NB2. On ne peut pas utiliser le toString de Objects - * https://stackoverflow.com/questions/24016962/java8-why-is-it-forbidden-to-define-a-default-method-for-a-method-from-java-lan - */ - public default String monPrint() { - StringBuilder sb = new StringBuilder(); - sb.append("Changement de " + this.getEtu().monPrint() + " depuis le groupe " + this.getA().getName() + " vers le groupe " + this.getB().getName()); - return sb.toString(); - } - -} diff --git a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/API/Changement.java~ b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/API/Changement.java~ deleted file mode 100644 index f345ad0..0000000 --- a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/API/Changement.java~ +++ /dev/null @@ -1,85 +0,0 @@ -package fr.iutfbleau.projetIHM2022FI2.API; -import java.util.*; -/** - * Un groupe - */ - -public interface Groupe extends MonPrint { - - /** - * permet de récupérer l'identifiant d'un groupe (référence interne sans intérêt irl). - * @return l'identifiant. - */ - public int getId(); - - /** - * permet de récupérer le nom d'un groupe (utile irl). - * @return le nom. - */ - public String getName(); - - /** - * permet de récupérer le nombre minimum d'étudiants souhaités dans le groupe. - * @return le minimum souhaité - */ - public int getMin(); - - /** - * permet de récupérer le nombre maximum d'étudiants souhaités dans un groupe. - * @return le maximum souhaité - */ - public int getMax(); - - /** - * permet de récupérer le nombre d'étudiants dans ce groupe. - * @return le nombre de places prises (pas forcément limité entre Min et Max, mais c'est le but) - */ - public int getSize(); - - /** - * permet de récupérer la nature du groupe - * @return le type du groupe - */ - public TypeGroupe getType(); - - /** - * permet de récupérer le groupe père - * un groupe racine devrait retourner lui-même - * - * @return le père - */ - public Groupe getPointPoint(); - - /** - * Potentiellement "vide" - * @return un itérateur sur sous-groupes. - */ - public Iterator getSousGroupes(); - - /** - * Potentiellement "vide" - * @return un itérateur sur les étudiants. - */ - public Iterator getEtudiants(); - - /** - * @see MonPrint - * NB. On n'utilise le mécanisme des méthodes par défaut pour donner du code dans une interface. C'est un petit peu laid et à contre-emploi mais pratique ici. - * - * NB2. On ne peut pas utiliser le toString de Objects - * https://stackoverflow.com/questions/24016962/java8-why-is-it-forbidden-to-define-a-default-method-for-a-method-from-java-lan - */ - public default String monPrint() { - StringBuilder sb = new StringBuilder(); - sb.append("Groupe " + getName() + " (" getType() +", capacité " + getMin() + " à " + getMax() +", id " + getId()+")"); - Iterator i = getEtudiants(); - sb.append("%n"); - while (i.hasNext()){ - Etudiant s = i.next(); - sb.append(s.toString()); - sb.append("%n"); - } - return sb.toString(); - } - -} diff --git a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/API/Etudiant.java b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/API/Etudiant.java deleted file mode 100644 index a31828b..0000000 --- a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/API/Etudiant.java +++ /dev/null @@ -1,33 +0,0 @@ -package fr.iutfbleau.projetIHM2022FI2.API; -/** - * Un étudiant - */ - -public interface Etudiant extends MonPrint{ - - /** - * permet de récupérer l'identifiant de l'étudiant. - * @return l'identifiant. - */ - public int getId(); - - /** - * permet de récupérer - * @return le nom de l'étudiant. - */ - public String getNom(); - - /** - * permet de récupérer - * @return le prénom de l'étudiant - */ - public String getPrenom(); - - /** - * @see MonPrint - * NB. On n'utilise le mécanisme des méthodes par défaut pour donner du code dans une interface. C'est un petit peu laid et à contre-emploi mais pratique ici. - */ - public default String monPrint() { - return String.format("Nom " + getNom() + " Prenom " + getPrenom() + " (id="+getId()+")"); - } -} diff --git a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/API/Etudiant.java~ b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/API/Etudiant.java~ deleted file mode 100644 index e7334a6..0000000 --- a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/API/Etudiant.java~ +++ /dev/null @@ -1,33 +0,0 @@ -package fr.iutfbleau.projetIHM2022FI2.API; -/** - * Un étudiant - */ - -public interface Etudiant extends MonPrint{ - - /** - * permet de récupérer l'identifiant de l'étudiant (qu'on suppose être le même pour les différents systèmes, internes et externes à l'hôtel). - * @return l'identifiant. - */ - public int getId(); - - /** - * permet de récupérer - * @return le nom de l'étudiant. - */ - public String getNom(); - - /** - * permet de récupérer - * @return le prénom de l'étudiant - */ - public String getPrenom(); - - /** - * @see MonPrint - * NB. On n'utilise le mécanisme des méthodes par défaut pour donner du code dans une interface. C'est un petit peu laid et à contre-emploi mais pratique ici. - */ - public default String monPrint() { - return String.format("Nom " + getNom() + " Prenom " + getPrenom() + " (id="+getId()+")"); - } -} diff --git a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/API/Groupe.java b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/API/Groupe.java deleted file mode 100644 index 1ae036e..0000000 --- a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/API/Groupe.java +++ /dev/null @@ -1,129 +0,0 @@ -package fr.iutfbleau.projetIHM2022FI2.API; -import java.util.*; -/** - * Un groupe - */ - -public interface Groupe extends MonPrint { - /** - * Ajoute un étudiant. Se comporte comme add de l'interface Set. - * - * @return true iff e est ajouté - */ - public boolean addEtudiant(Etudiant e); - - /** - * Enlève un étudiant. Se comporte comme remove de l'interface Set. - * - * @return true iff e est enlevé - */ - boolean removeEtudiant(Etudiant e); - - /** - * Ajoute un sous-groupe. Se comporte comme add de l'interface Set. - * vérifie que le groupe passé en argument a bien renseigné this comme son père. - * - * @return true iff g est ajouté - */ - public boolean addSousGroupe(Groupe g); - - /** - * Enlève un groupe. Se comporte comme remove de l'interface Set. - * - * @return true iff e est enlevé - */ - public boolean removeSousGroupe(Groupe g); - - /** - * permet de récupérer l'identifiant d'un groupe (référence interne sans intérêt irl). - * @return l'identifiant. - */ - public int getId(); - - /** - * permet de récupérer le nom d'un groupe (utile irl). - * @return le nom. - */ - public String getName(); - - /** - * permet de récupérer le nombre minimum d'étudiants souhaités dans le groupe. - * @return le minimum souhaité - */ - public int getMin(); - - /** - * permet de récupérer le nombre maximum d'étudiants souhaités dans un groupe. - * @return le maximum souhaité - */ - public int getMax(); - - /** - * permet de récupérer le nombre d'étudiants dans ce groupe. - * @return le nombre de places prises (pas forcément limité entre Min et Max, mais c'est le but) - */ - public int getSize(); - - /** - * permet de récupérer la nature du groupe - * @return le type du groupe - */ - public TypeGroupe getType(); - - /** - * permet de récupérer le groupe père - * un groupe racine devrait retourner lui-même - * - * @return le père - */ - public Groupe getPointPoint(); - - /** - * Potentiellement "vide" - * @return l'ensemble des sous-groupes. - */ - public Set getSousGroupes(); - - /** - * Potentiellement "vide" - * @return l'ensemble des étudiants. - */ - public Set getEtudiants(); - - /** - * Change le nom du groupe - * @param s le nouveau nom - */ - public void setName(String s); - - /** - * @see MonPrint - * NB. On n'utilise le mécanisme des méthodes par défaut pour donner du code dans une interface. C'est un petit peu laid et à contre-emploi mais pratique ici. - * - * NB2. On ne peut pas utiliser le toString de Objects - * https://stackoverflow.com/questions/24016962/java8-why-is-it-forbidden-to-define-a-default-method-for-a-method-from-java-lan - */ - public default String monPrint() { - StringBuilder sb = new StringBuilder(); - sb.append("Groupe " + getName() + " (" + getType() + ", capacité " + getMin() + " à " + getMax() +", id " + getId()+")"); - sb.append("\n"); - // NB. getEtudiants() retourne un Set qui étend Iterable - // On peut utiliser les mécanismes de boucle "moderne" de puis la version 8 - // pour se faciliter la vie quand le traitement est assez simple - // voir https://docs.oracle.com/javase/8/docs/technotes/guides/language/foreach.html - sb.append(" ** Étudiants **\n"); - for (Etudiant s: getEtudiants()){ - sb.append("\t _ "+ s.monPrint()); - sb.append("\n"); - } - sb.append(" ** Sous Groupes **\n"); - for (Groupe g: getSousGroupes()){ - sb.append("\t _ "+ g.getName() + " (" + g.getType() + ", capacité " + g.getMin() + " à " + g.getMax() +", id " + g.getId()+")"); - sb.append("\n"); - } - sb.append(" ** Groupe Pere **\n"); - sb.append(getPointPoint().getName()+"\n"); - return sb.toString(); - } - -} diff --git a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/API/Groupe.java~ b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/API/Groupe.java~ deleted file mode 100644 index 417c779..0000000 --- a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/API/Groupe.java~ +++ /dev/null @@ -1,115 +0,0 @@ -package fr.iutfbleau.projetIHM2022FI2.API; -import java.util.*; -/** - * Un groupe - */ - -public interface Groupe extends MonPrint { - /** - * Ajoute un étudiant. Se comporte comme add de l'interface Set. - * - * @return true iff e est ajouté - */ - public boolean addEtudiant(Etudiant e); - - /** - * Enlève un étudiant. Se comporte comme remove de l'interface Set. - * - * @return true iff e est enlevé - */ - boolean removeEtudiant(Etudiant e); - - /** - * Ajoute un sous-groupe. Se comporte comme add de l'interface Set. - * vérifie que le groupe passé en argument a bien renseigné this comme son père. - * - * @return true iff g est ajouté - */ - public boolean addSousGroupe(Groupe g); - - /** - * Enlève un groupe. Se comporte comme remove de l'interface Set. - * - * @return true iff e est enlevé - */ - public boolean removeSousGroupe(Groupe g); - - /** - * permet de récupérer l'identifiant d'un groupe (référence interne sans intérêt irl). - * @return l'identifiant. - */ - public int getId(); - - /** - * permet de récupérer le nom d'un groupe (utile irl). - * @return le nom. - */ - public String getName(); - - /** - * permet de récupérer le nombre minimum d'étudiants souhaités dans le groupe. - * @return le minimum souhaité - */ - public int getMin(); - - /** - * permet de récupérer le nombre maximum d'étudiants souhaités dans un groupe. - * @return le maximum souhaité - */ - public int getMax(); - - /** - * permet de récupérer le nombre d'étudiants dans ce groupe. - * @return le nombre de places prises (pas forcément limité entre Min et Max, mais c'est le but) - */ - public int getSize(); - - /** - * permet de récupérer la nature du groupe - * @return le type du groupe - */ - public TypeGroupe getType(); - - /** - * permet de récupérer le groupe père - * un groupe racine devrait retourner lui-même - * - * @return le père - */ - public Groupe getPointPoint(); - - /** - * Potentiellement "vide" - * @return l'ensemble des sous-groupes. - */ - public Set getSousGroupes(); - - /** - * Potentiellement "vide" - * @return l'ensemble des étudiants. - */ - public Set getEtudiants(); - - /** - * @see MonPrint - * NB. On n'utilise le mécanisme des méthodes par défaut pour donner du code dans une interface. C'est un petit peu laid et à contre-emploi mais pratique ici. - * - * NB2. On ne peut pas utiliser le toString de Objects - * https://stackoverflow.com/questions/24016962/java8-why-is-it-forbidden-to-define-a-default-method-for-a-method-from-java-lan - */ - public default String monPrint() { - StringBuilder sb = new StringBuilder(); - sb.append("Groupe " + getName() + " (" + getType() + ", capacité " + getMin() + " à " + getMax() +", id " + getId()+")"); - sb.append("\n"); - // NB. getEtudiants() retourne un Set qui étend Iterable - // On peut utiliser les mécanismes de boucle "moderne" de puis la version 8 - // pour se faciliter la vie quand le traitement est assez simple - // voir https://docs.oracle.com/javase/8/docs/technotes/guides/language/foreach.html - for (Etudiant s: getEtudiants()){ - sb.append("\t"+ s.monPrint()); - sb.append("\n"); - } - return sb.toString(); - } - -} diff --git a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/API/Model.java b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/API/Model.java deleted file mode 100644 index a83a356..0000000 --- a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/API/Model.java +++ /dev/null @@ -1,168 +0,0 @@ -package fr.iutfbleau.projetIHM2022FI2.API; - -import java.util.Set; -import javax.swing.JFrame; -/** - * Le Model de L'IHM - */ -public interface Model { -/** - * Fonction pour refresh/changer de groupe d'affichage - * @param g le groupe a afficher - */ -public void showGroupe(Groupe g); - /** - * getteur de la fenetre - * @return JFrame la fenetre - */ - public JFrame getFenetre(); - /** - * permet d'obtenir l'ensemble des etudiants - * @return - */ - public Set getEtudiant(); - - // *********************** - // FONCTION POUR SUPRIMER UN ETUDIANT - // *********************** -/** - * Fonction pour supprimer un etudiant. - * @param e l'etudiant a supprimer - * @return boolean true si l'etudiant a ete supprimer, false sinon - */ - public boolean deleteEtu(Etudiant e); - - - // *********************** - // FONCTION POUR Ajouter UN ETUDIANT - // *********************** - - /** - * Fonction pour ajouter un étudiant au groupe - * @param g - * @param e - * @return boolean pour savoir si il a pus être ajouter - */ - public boolean addEtudiant(Groupe g, Etudiant e); - - - - // *********************** - // FONCTION POUR SUPRIMER UN GROUPE - // *********************** - - /** - * Fonction pour supprimer un groupe - * @param g le groupe a supprimer - */ - public void delete(Groupe g); - - // *********************** - // FONCTION POUR RENOMER UN GROUPE - // *********************** - - /** - * Fonction pour renomer un groupe - * @param name - * @param g - */ - public void rename(String name, Groupe g); - - - // ********************** - // FONCTION POUR CREER UN GROUPE - // ********************** - - - /** - * Fonction permetant de créer une partition d'un groupe - * @param g le groupe a partitionner - * @param n le nombre de partition - * @param name le nom des partition - */ - public void partition(Groupe g, int n, String name); - - /** - * Fonction permettant de créer un sous-groupe d'un groupe - * @param g le groupe parent - * @param name le nom du sous-groupe - * @param min le nombre min d'etudiant - * @param max le nombre max d'etudiant - * @param ajout la liste des étudiants a ajouter au groupe - */ - public void free(Groupe g, String name, int min, int max, Set ajout); - - /** - * ajoute une nouvelle promotion - * @param min le nombre min - * @param max le nombre max - * @param name le nom - * @param ajout les etudiant a ajouter a la promo - */ - public void addPromo(int min, int max, String name, Set ajout); - - // ************************** - // FONCTION POUR LES CHANGEMENTS - // ****************************** - - /** - * Créer un changement depuis le groupe courant - * @param e l'etudiant - * @param b le groupe a changer - */ - public void changeGroupe(Etudiant e, Groupe b); - - /** - * Retourn les groupe auquel on peut demander a changer depuis le groupe courant - * - * @return la liste des groupes - */ - public Set getGroupePartition(); - - /** - * Fonction pour afficher une fenetre listnatn les changements - * - */ - public void listChange(); - - - /** - * Fonction pour effectuer un changement - * @param Changement le changement a effecteur - */ - public void change(Changement change); - - /** - * Fonction supprimant un changement - * - * @param to_delete la changement a delete - */ - public void deleteChange(Changement to_delete); - - - /** - * Fonction affichant les raison d'un changement - * - * @param change le changement - */ - public void showRaisonChange(Changement change); - - - /** - * Fonction affichant une fentre pour trouver un etudiant et tous ses groupes asociée - */ - public void findEtu(); - - /** - * Fonction pour recuperer les etudiant avec ce nom - * @param name le nom de(s) etudiants - * @return la liste - */ - public Set getEtu(String name); - - /** - *affiche les groupe d'un etudiant - * @param e l'etudiant - */ - public void showGroupOfEtudiant(Etudiant e); -} diff --git a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/API/MonPrint.java b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/API/MonPrint.java deleted file mode 100644 index 7f8d663..0000000 --- a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/API/MonPrint.java +++ /dev/null @@ -1,12 +0,0 @@ -package fr.iutfbleau.projetIHM2022FI2.API; -/** - * Toutes nos interfaces vont étendre cette interface. - */ -public interface MonPrint { - - /** - * Fonctionne comme ToPrint() sauf car une interface n'a pas le droit de faire un override sur ToPrint(). - * Toutes nos interfaces vont étendre cette interface. - */ - public String monPrint(); -} diff --git a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/API/MonPrint.java~ b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/API/MonPrint.java~ deleted file mode 100644 index e5fafae..0000000 --- a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/API/MonPrint.java~ +++ /dev/null @@ -1,7 +0,0 @@ -public interface MonPrint{ - - /** - * Fonctionne comme ToPrint() sauf car une interface n'a pas le droit de faire un override sur ToPrint(); - */ - public String monPrint(); -} diff --git a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/API/TypeGroupe.java b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/API/TypeGroupe.java deleted file mode 100644 index e7e3119..0000000 --- a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/API/TypeGroupe.java +++ /dev/null @@ -1,22 +0,0 @@ -package fr.iutfbleau.projetIHM2022FI2.API; -public enum TypeGroupe { - ROOT ("Tous les étudiants"), PARTITION ("partition"), FREE ("libre") ; - - private final String name; - - private TypeGroupe(String s) { - name = s; - } - public static TypeGroupe getType(String s){ - switch(s){ - case("Tous les étudiants"): - return TypeGroupe.ROOT; - case("partition"): - return TypeGroupe.PARTITION; - case("libre"): - return TypeGroupe.FREE; - default: return null; - } - } - -} diff --git a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/API/TypeGroupe.java~ b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/API/TypeGroupe.java~ deleted file mode 100644 index 902843e..0000000 --- a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/API/TypeGroupe.java~ +++ /dev/null @@ -1,10 +0,0 @@ -package fr.iutfbleau.projetIHM2022FI2.API; -public enum TypeGroupe { - ROOT ("Tous les étudiants"), PARTITION ("partitionable"), FREE ("libre") ; - - private final String name; - - private TypeGroupe(String s) { - name = s; - } -} diff --git a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MNP/AbstractChangementFactoryNP.java b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MNP/AbstractChangementFactoryNP.java deleted file mode 100644 index 0425714..0000000 --- a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MNP/AbstractChangementFactoryNP.java +++ /dev/null @@ -1,136 +0,0 @@ -package fr.iutfbleau.projetIHM2022FI2.MNP; -import fr.iutfbleau.projetIHM2022FI2.API.*; -import java.util.*; -import fr.iutfbleau.projetIHM2022FI2.MP.*; -/** - * Usine abstraite gérant l'ensemble des changements. - * - */ - -public class AbstractChangementFactoryNP implements AbstractChangementFactory { - - // l'usine à groupe travaillant en tandem avec cette usine. - private AbstractGroupeFactory agf; - - // On utilise une table de hachage pour retrouver facilement un changement (à partir de son id). - // Si il y a beaucoup de changements c'est plus rapide que de parcourir toute une liste. - private HashMap brain; - - /** - * Constructeur de l'usine à changement. - * @param agf l'usine à groupe travaillant en tandem avec cette usine. - */ - public AbstractChangementFactoryNP(AbstractGroupeFactory agf){ - Objects.requireNonNull(agf,"On ne peut pas créer une usine à changement dont l'usine à groupe parternaire est null"); - this.agf=agf; - this.brain=new HashMap(); - } - - - /** - * 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(){ - // 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. - * - * @param c le changement à mettre en oeuvre. - * - * @throws java.lang.NullPointerException si un argument est null - * @throws java.lang.IllegalStateException si le changement n'a pas de sens en l'état actuel (e.g. étudiant pas dans le groupe de départ a, groupe b inconnu, groupe a inconnu, etc). - * @throws java.lang.IllegalArgumentException si inconnu de l'usine abstraite - */ - public void applyChangement(Changement c){ - Objects.requireNonNull(c,"On ne peut pas appliquer un changement qui est null"); - Etudiant e = c.getEtu(); - Groupe a = c.getA(); - Groupe b = c.getB(); - - if (!agf.knows(a)) throw new IllegalStateException("Le groupe de départ du changement est inconnu. Impossible à mettre en oeuvre."); - - if (!agf.knows(b)) throw new IllegalStateException("Le groupe d'arrivée du changement est inconnu. Impossible à mettre en oeuvre."); - // pas encore implanté. - // if(!agf.getGroupesOfEtudiant(e).contains(a)) throw new IllegalStateException("Le groupe de départ ne contient pas l'étudiant. Impossible à mettre en oeuvre."); - - agf.dropFromGroupe(a,e); - agf.addToGroupe(b,e); - // En cas de succès, on enlève le changement du cerveau - this.brain.remove(Integer.valueOf(c.getId())); - } - - - /** - * permet de supprimer un changement connu de l'usine abstraite. - * - * @param c le changement à supprimer. - * - * @throws java.lang.NullPointerException si un argument est null - * @throws java.lang.IllegalArgumentException si inconnu de l'usine abstraite - */ - public void deleteChangement(Changement c){ - Objects.requireNonNull(c,"On ne peut pas demander la suppression d'un changement qui est null"); - - this.brain.remove(Integer.valueOf(c.getId())); - - } - - /** - * permet d'ajouter un nouveau changement. - * - * @param A groupe actuel - * @param B groupe demandé - * @param e étudiant concerné par le changement - * - * @throws java.lang.NullPointerException si un argument est null - * @throws java.lang.IllegalArgumentException si les groupes ou l'étudiant ne sont pas connus de la factory partenaire, ou e n'appartient pas à A ou A et B ne sont pas frères dans l'arbre des groupes. - * - */ - public void createChangement(Groupe A, Etudiant e, Groupe B){ - Objects.requireNonNull(A,"Le groupe d'origine ne peut pas être null"); - Objects.requireNonNull(B,"Le groupe d'arrivée ne peut pas être null"); - Objects.requireNonNull(e,"L'étudiant ne peut pas être null"); - - Changement c = new ChangementNP(A,e,B); - this.brain.put(Integer.valueOf(c.getId()),c); - } - - /** - * permet d'ajouter un nouveau changement. - * - * @param A groupe actuel - * @param B groupe demandé - * @param e étudiant concerné par le changement - * @param raison la raison du changement - * - * @throws java.lang.NullPointerException si un argument est null - * @throws java.lang.IllegalArgumentException si les groupes ou l'étudiant ne sont pas connus de la factory partenaire, ou e n'appartient pas à A ou A et B ne sont pas frères dans l'arbre des groupes. - * - */ - @Override - public void createChangement(Groupe A, Etudiant e, Groupe B, String raison) { - Objects.requireNonNull(A,"Le groupe d'origine ne peut pas être null"); - Objects.requireNonNull(B,"Le groupe d'arrivée ne peut pas être null"); - Objects.requireNonNull(e,"L'étudiant ne peut pas être null"); - Objects.requireNonNull(raison,"La raison ne peut pas être null"); - - Changement c = new ChangementNP(A,e,B, raison); - this.brain.put(Integer.valueOf(c.getId()),c); - } - -} diff --git a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MNP/AbstractGroupeFactoryNP.java b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MNP/AbstractGroupeFactoryNP.java deleted file mode 100644 index c53e63a..0000000 --- a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MNP/AbstractGroupeFactoryNP.java +++ /dev/null @@ -1,274 +0,0 @@ -package fr.iutfbleau.projetIHM2022FI2.MNP; -import fr.iutfbleau.projetIHM2022FI2.API.*; -import fr.iutfbleau.projetIHM2022FI2.MP.*; -import java.util.*; -/** - * Usine abstraite gérant l'ensemble des groupes. - * - */ - -public class AbstractGroupeFactoryNP implements AbstractGroupeFactory { - - // la racine (promotion) - private Groupe promo; - - // On utilise une table de hachage pour retrouver facilement un groupe (à partir de son id). - // Si il y a beaucoup de groupes c'est plus rapide que de parcourir toute une liste. - private HashMap brain; - - - - - /** - * Le constructeur fabrique le groupe promotion vide. - * Il faut ensuite y ajouter les étudiants. - * - * @param name le nom de la promotion - * @param min le nombre minimum d'étudiants dans la promotion - * @param max le nombre maximum d'étudiants dans la promotion - * - */ - public AbstractGroupeFactoryNP(String name, int min, int max){ - Objects.requireNonNull(name,"On ne peut pas créer une promotion dont le nom est null"); - this.promo=new GroupeNP(name,min,max); - this.brain=new HashMap(); - this.brain.put(Integer.valueOf(this.promo.getId()),this.promo); - } - - /** - * Test plutôt optimiste. Si la clé est identique alors on fait comme si c'était le bon groupe. - * @param g le groupe à tester - * @return true si le groupe est connu de l'usine abstraite - * - */ - public Boolean knows(Groupe g){ - return this.brain.containsKey(Integer.valueOf(g.getId())); - } - - - - /** - * permet de récupérer le Groupe qui contient les étudiants de toute la promotion - * @return la promo. - */ - public Groupe getPromotion(){ - return this.promo; - } - - /** - * permet de supprimer un groupe connu de l'usine abstraite qui ne contient pas de groupes. - * Pour détruire un groupe connu qui en contient d'autres il faut le faire récursivement. - * - * @param g le groupe à supprimer - * - * @throws java.lang.NullPointerException si un argument est null - * @throws java.lang.IllegalArgumentException si le groupe n'est pas connu de l'usine abstraite ou bien si le groupe est celui de toute la promotion (renvoyé par getPromotion) - */ - public void deleteGroupe(Groupe g){ - Objects.requireNonNull(g,"On ne peut pas enlever un groupe null car null n'est pas un groupe autorisé"); - if (!this.knows(g)){ - throw new IllegalArgumentException("Impossible d'enlever un groupe inconnu"); - } - g.getPointPoint().removeSousGroupe(g); - this.deleteRecursif(g); - } - - private void deleteRecursif(Groupe g){ - this.brain.remove(g.getId()); - for(Groupe sous: g.getSousGroupes()){ - this.deleteRecursif(sous); - } - } - - /** - * permet d'ajouter un groupe vide de type FREE comme sous-groupe d'un groupe donné. - * @param pere le groupe père du groupe à créer - * @param name le nom du groupe à créer - * @param min,max bornes indicatives sur la taille du groupe à créer - * - * @throws java.lang.NullPointerException si un argument est null - * @throws java.lang.IllegalArgumentException si le groupe pere est de type PARTITION - * ou si il n'y a pas 0 < min <= max - */ - public void createGroupe(Groupe pere, String name, int min, int max){ - Objects.requireNonNull(pere,"Le groupe pere ne peut pas être null"); - Objects.requireNonNull(name,"Le nouveau groupe ne peut pas avoir null comme nom"); - if (!this.knows(pere)){ - throw new IllegalArgumentException("Interdit d'ajouter un fils à un groupe inconnu"); - } - if (pere.getType().equals(TypeGroupe.PARTITION)){ - throw new IllegalArgumentException("Impossible d'ajouter un groupe à une parition. Il faut utiliser createPartition pour créer une partition"); - } - if ( min <= 0 || max < min){ - throw new IllegalArgumentException("Il faut que 0 < min <= max"); - } - Groupe g = new GroupeNP(pere,name,min,max); - pere.addSousGroupe(g); - this.brain.put(Integer.valueOf(g.getId()),g); - } - - /** - * permet de créer une partition automatiquement sous un groupe donné. - * - * @param pere le groupe père du groupe à partitionner - * @param name le nom des groupe à créer (on ajoute à la suite un numéro de 1 à n pour distinguer chaque groupe formant la partition) - * @param n le nombre de partitions - * @throws java.lang.NullPointerException si un argument est null - * @throws java.lang.IllegalArgumentException si le groupe pere est de type PARTITION - * ou n négatif ou nul - * - * NB. doit créer une "copie" de pere - * sous pere de type Partition et ajouter sous ce groupe, n groupes de type "FREE". - * les valeurs min et max de ces n groupes sont - * min = 0 et - * max = partie entière de N/n plus 1, où N est le nombre max du groupe pere. - */ - public void createPartition(Groupe pere, String name, int n){ - Objects.requireNonNull(pere,"Le groupe pere ne peut pas être null"); - Objects.requireNonNull(name,"Le nouveau groupe ne peut pas avoir null comme nom"); - if (!this.knows(pere)){ - throw new IllegalArgumentException("Impossible de partitionner ce groupe inconnu"); - } - if (pere.getType().equals(TypeGroupe.PARTITION)){ - throw new IllegalArgumentException("Impossible de créer une partition à ce niveau. Il faut soit repartitionner le groupe au dessus, soit partitionner une partition en dessous."); - } - if ( n <= 0){ - throw new IllegalArgumentException("Le nombre de partitions doit être strictement positif"); - } - //Création de la racine de la partition. - Groupe copiePereRacinePartition = new GroupeNP(pere); - pere.addSousGroupe(copiePereRacinePartition); - this.brain.put(Integer.valueOf(copiePereRacinePartition.getId()),copiePereRacinePartition); - // création des sous-groupes - int min = 0; - int max = ((int) Math.floor(pere.getSize()/n))+1; - List 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){ - if(nomEtu==null){ - return this.getPromotion().getEtudiants(); - } - // on cherche bêtement dans la promo. - Set out = new LinkedHashSet(); - for (Etudiant e : getPromotion().getEtudiants()){ - if (e.getNom().contains(nomEtu)){ - out.add(e); - } - } - return out; - } - - /** - * permet de retrouver les groupes d'un étudiant. - * - * @param Etu un étudiant - * @return Etudiant l'étudiant connu de la factory ayant cet identifiant - * - * @throws java.lang.NullPointerException si le String est null. - */ - public Set getGroupesOfEtudiant(Etudiant etu){ - Set liste=new HashSet<>(); - for(Groupe g:this.brain.values()){ - boolean condit=false; - for(Etudiant e:g.getEtudiants()){ - if(e.getId()==etu.getId()){ - liste.add(g); - condit=true; - break; - } - if(condit==true) - break; - } - } - return liste; - } - - /** - * Ajout a l'API pour changer facilement de nom de groupe - * - * @param g le groupe - * @param name le nom - * @return true si possible - */ - @Override - public boolean changeNameGroupe(Groupe g, String name) { - g.setName(name); - return true; - } - - /** - * refresh le Groupe ainsi que ses etudiants - * @param g le groupe - * @return le groupe refresh/un parent si il a été refresh - */ - @Override - public Groupe refreshALL(Groupe g) { - return g; - } - - -} 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 deleted file mode 100644 index ea8c5bb..0000000 --- a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MNP/ETU/Model/ModelEtu.java +++ /dev/null @@ -1,360 +0,0 @@ -package fr.iutfbleau.projetIHM2022FI2.MNP.ETU.Model; -import javax.swing.*; -import java.awt.*; -import java.util.Set; -import java.util.HashSet; -import fr.iutfbleau.projetIHM2022FI2.API.AbstractChangementFactory; -import fr.iutfbleau.projetIHM2022FI2.API.AbstractGroupeFactory; -import fr.iutfbleau.projetIHM2022FI2.API.Changement; -import fr.iutfbleau.projetIHM2022FI2.API.Etudiant; -import fr.iutfbleau.projetIHM2022FI2.API.Groupe; -import fr.iutfbleau.projetIHM2022FI2.API.TypeGroupe; -import fr.iutfbleau.projetIHM2022FI2.API.Model; -import fr.iutfbleau.projetIHM2022FI2.Permanent.Controller.ObservateurFenetre; -import fr.iutfbleau.projetIHM2022FI2.Permanent.View.Chargement; -import fr.iutfbleau.projetIHM2022FI2.MP.ETU.View.FenetreEtudiant; -import fr.iutfbleau.projetIHM2022FI2.MP.ETU.View.FenetreGroupe; - -/** - * Le Model de L'IHM - */ -public class ModelEtu implements Model{ - // le panel qui contient la fenetre de groupe - private JPanel panGroupe; - // la fenetre de groupe - private FenetreGroupe fenGr; - //la fenetre d'etudiant - private FenetreEtudiant fenEtu; - // le groupe courant - private AbstractGroupeFactory promo; - // le changement courant - private AbstractChangementFactory changement; - // la fenetre principale - private JFrame fenetre; - // l'etudiant courant - private Etudiant Selected; - - /** - * Constructeur du Model - * @param facto le groupe courant - * @param change le changement courant - */ - public ModelEtu(AbstractGroupeFactory facto, AbstractChangementFactory change){ - this.fenetre=new JFrame(); - this.fenetre.setSize(1200, 720); - this.fenetre.setLocation(100,100); - this.fenetre.addWindowListener(new ObservateurFenetre()); - this.fenetre.setLayout(new GridLayout(1,2)); - this.fenetre.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE); - this.fenetre.setMinimumSize(this.fenetre.getSize()); - Chargement ch=new Chargement(this.fenetre); - this.promo=facto; - this.changement=change; - if(this.promo.getPromotion()==null){ - this.promo=null; - } - ch.dispose(); - this.fenetre.setVisible(true); - this.initEtu(null); - if(this.promo==null){ - this.fenGr=new FenetreGroupe(null, this, null); - this.fenEtu=new FenetreEtudiant(null, this.Selected, this); - }else{ - this.fenGr=new FenetreGroupe(this.promo.getPromotion(), this,this.promo.getGroupesOfEtudiant(this.Selected)); - this.fenEtu=new FenetreEtudiant(this.promo.getPromotion(), this.Selected, this); - } - this.panGroupe=new JPanel(new GridLayout(1,1)); - if(this.promo!=null){ - this.showGroupe(this.promo.getPromotion()); - }else{ - this.showGroupe(null); - } - } - - - @Override - /** - * Fonction pour refresh/changer de groupe d'affichage - * @param g le groupe a afficher - */ - public void showGroupe(Groupe g){ - if(g!=null) - g=this.promo .refreshALL(g); - this.panGroupe.removeAll(); - this.fenGr=new FenetreGroupe(g, this, this.promo.getGroupesOfEtudiant(this.Selected)); - this.fenEtu=new FenetreEtudiant(g, this.Selected, this); - this.fenetre.getContentPane().removeAll(); - this.panGroupe.add(this.fenGr.getPan()); - this.panGroupe.revalidate(); - this.fenetre.add(this.panGroupe); - JScrollPane scroll=new JScrollPane(this.fenEtu.getPan()); - scroll.getVerticalScrollBar().setUnitIncrement(15); - this.fenetre.add(scroll); - this.fenetre.revalidate(); - } - @Override - /** - * getteur de la fenetre - * @return JFrame la fenetre - */ - public JFrame getFenetre() { - return fenetre; - } - - /** - * Permet d'obtenir les étudiants du groupe courant. - * @return les étudiants du groupe courant - */ - - @Override - public Set 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 - // ****************************** - /** - * Permet de changer de groupe. - * @param e l'étudiant qui change de groupe - * @param g le groupe dans lequel l'étudiant va - */ - @Override - public void changeGroupe(Etudiant e, Groupe b){ - if(b==null) - return; - b=this.promo.refreshALL(b); - if(b.getEtudiants()!=null && b.getMax()>b.getEtudiants().size()+1){ - if(b.getEtudiants().size()>this.fenGr.getG().getEtudiants().size()){ - JPanel myPanel= new JPanel(new GridLayout(2,1)); - JTextField xField = new JTextField(100); - xField.setMinimumSize(new Dimension(100, 100)); - xField.setPreferredSize(new Dimension(100,100)); - myPanel.add(new JLabel("Ce Groupe est plus grand que le votre raison du changement:")); - myPanel.add(xField); - if(JOptionPane.showConfirmDialog(this.fenetre, myPanel, "Changer dans quel Groupe ?", JOptionPane.OK_CANCEL_OPTION)==JOptionPane.OK_OPTION){ - //IL faut que l'etudiant detaile un minimun la raison - if(xField.getText().length()>5){ - this.changement.createChangement(this.fenGr.getG(), e, b, xField.getText()); - }else{ - JOptionPane.showMessageDialog(this.fenetre, "veuillez detailler votre raison", "erreur", JOptionPane.ERROR_MESSAGE); - } - } - }else{ - this.changement.createChangement(this.fenGr.getG(), e, b); - } - }else{ - JOptionPane.showMessageDialog(this.fenetre, "impossible trop d'etudiant dans l'autre Groupe", "erreur", JOptionPane.ERROR_MESSAGE); - } - this.showGroupe(this.fenGr.getG()); - } -/** - * pemet d'obtenir les sous groupes du groupe courant. - * @return les sous groupes du groupe courant - */ - @Override - public Set 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; - } - /** - * ajoute un étudiant dans un groupe. - * @param e l'étudiant à ajouter - * @param g le groupe dans lequel l'étudiant va - * @return true si l'ajout a réussi, false sinon - */ - @Override - public boolean addEtudiant(Groupe g, Etudiant e) { - // TODO Auto-generated method stub - return false; - } - - /** - * supprime un groupe. - * @param g le groupe à supprimer - */ - @Override - public void delete(Groupe g) { - // TODO Auto-generated method stub - - } - - /** - * rennome un groupe. - * @param g le groupe à renommer - * @param nom le nouveau nom du groupe - * - */ - @Override - public void rename(String name, Groupe g) { - // TODO Auto-generated method stub - - } - - /** - * Fonction permetant de créer une partition d'un groupe - * @param g le groupe a partitionner - * @param n le nombre de partition - * @param name le nom des partition - */ - @Override - public void partition(Groupe g, int n, String name) { - // TODO Auto-generated method stub - - } - - /** - * Fonction permettant de créer un sous-groupe d'un groupe - * @param g le groupe parent - * @param name le nom du sous-groupe - * @param min le nombre min d'etudiant - * @param max le nombre max d'etudiant - * @param ajout la liste des étudiants a ajouter au groupe - */ - @Override - public void free(Groupe g, String name, int min, int max, Set ajout) { - // TODO Auto-generated method stub - - } - - - /** - * ajoute une nouvelle promotion - * @param min le nombre min - * @param max le nombre max - * @param name le nom - * @param ajout les etudiant a ajouter a la promo - */ - @Override - public void addPromo(int min, int max, String name, Set ajout) { - // TODO Auto-generated method stub - - } - -/** - * Fonction pour supprimer un etudiant. - * @param e l'etudiant a supprimer - * @return boolean true si l'etudiant a ete supprimer, false sinon - - */ - @Override - public boolean deleteEtu(Etudiant e) { - // TODO Auto-generated method stub - return false; - } - - /** - * Fonction pour afficher une fenetre listnatn les changements - * - */ - @Override - public void listChange() { - // TODO Auto-generated method stub - - } - - /** - * Fonction pour effectuer un changement - * @param Changement le changement a effecteur - */ - @Override - public void change(Changement change) { - // TODO Auto-generated method stub - - } - - /** - * Fonction supprimant un changement - * - * @param to_delete la changement a delete - */ - @Override - public void deleteChange(Changement to_delete) { - // TODO Auto-generated method stub - - } - - - /** - * Fonction affichant les raison d'un changement - * - * @param change le changement - */ - @Override - public void showRaisonChange(Changement change) { - // TODO Auto-generated method stub - - } - - /** - * Fonction affichant une fentre pour trouver un etudiant et tous ses groupes asociée - */ - @Override - public void findEtu() { - // TODO Auto-generated method stub - - } - - - /** - * Fonction pour recuperer les etudiant avec ce nom - * @param name le nom de(s) etudiants - * @return la liste - */ - @Override - public Set getEtu(String name) { - // TODO Auto-generated method stub - return null; - } - - - /** - *affiche les groupe d'un etudiant - * @param e l'etudiant - */ - @Override - public void showGroupOfEtudiant(Etudiant e) { - // TODO Auto-generated method stub - - } - -} 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 deleted file mode 100644 index 59de326..0000000 --- a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MNP/PROF/Model/ModelProf.java +++ /dev/null @@ -1,325 +0,0 @@ -package fr.iutfbleau.projetIHM2022FI2.MNP.PROF.Model; -import javax.swing.*; -import java.awt.*; -import java.util.Set; -import java.util.HashSet; -import fr.iutfbleau.projetIHM2022FI2.API.AbstractChangementFactory; -import fr.iutfbleau.projetIHM2022FI2.API.AbstractGroupeFactory; -import fr.iutfbleau.projetIHM2022FI2.API.Changement; -import fr.iutfbleau.projetIHM2022FI2.API.Etudiant; -import fr.iutfbleau.projetIHM2022FI2.API.Groupe; -import fr.iutfbleau.projetIHM2022FI2.API.TypeGroupe; -import fr.iutfbleau.projetIHM2022FI2.MP.PROF.View.FenetreEtudiant; -import fr.iutfbleau.projetIHM2022FI2.MP.PROF.View.FenetreGroupe; -import fr.iutfbleau.projetIHM2022FI2.API.Model; -import fr.iutfbleau.projetIHM2022FI2.Permanent.Controller.ObservateurFenetre; -import fr.iutfbleau.projetIHM2022FI2.Permanent.View.Chargement; - -/** - * Le Model de L'IHM - */ -public class ModelProf implements Model{ - - // le panel qui contient la fenetre de groupe - private JPanel panGroupe; - // la fenetre de groupe - private FenetreGroupe fenGr; - //la fenetre d'etudiant - private FenetreEtudiant fenEtu; - // le groupe courant - private AbstractGroupeFactory promo; - // le changement courant - private AbstractChangementFactory changement; - // la fenetre principale - private JFrame fenetre; - - /** - * Constructeur du Model. - * - * @param agf le groupe principal - * @param chan le changement courant - */ - public ModelProf(AbstractGroupeFactory agf, AbstractChangementFactory chan){ - this.fenetre=new JFrame(); - this.fenetre.setSize(1200, 720); - this.fenetre.setLocation(100,100); - this.fenetre.addWindowListener(new ObservateurFenetre()); - this.fenetre.setLayout(new GridLayout(1,2)); - this.fenetre.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE); - this.fenetre.setMinimumSize(this.fenetre.getSize()); - Chargement ch=new Chargement(this.fenetre); - this.promo=agf; - this.changement=chan; - if(this.promo.getPromotion()==null){ - this.promo=null; - } - ch.dispose(); - this.fenetre.setVisible(true); - if(this.promo==null){ - this.fenGr=new FenetreGroupe(null, this); - this.fenEtu=new FenetreEtudiant(null); - }else{ - this.fenGr=new FenetreGroupe(this.promo.getPromotion(), this); - this.fenEtu=new FenetreEtudiant(this.promo.getPromotion()); - } - this.panGroupe=new JPanel(new GridLayout(1,1)); - if(this.promo!=null){ - this.showGroupe(this.promo.getPromotion()); - }else{ - this.showGroupe(null); - } - } - - - @Override - /** - * Fonction pour refresh/changer de groupe d'affichage - * @param g le groupe a afficher - */ - public void showGroupe(Groupe g){ - if(g!=null) - g=this.promo .refreshALL(g); - this.panGroupe.removeAll(); - this.fenGr=new FenetreGroupe(g, this); - this.fenEtu=new FenetreEtudiant(g); - this.fenetre.getContentPane().removeAll(); - this.panGroupe.add(this.fenGr.getPan()); - this.panGroupe.revalidate(); - this.fenetre.add(this.panGroupe); - JScrollPane scroll=new JScrollPane(this.fenEtu.getPan()); - scroll.getVerticalScrollBar().setUnitIncrement(15); - this.fenetre.add(scroll); - this.fenetre.revalidate(); - } - @Override - /** - * getteur de la fenetre - * @return JFrame la fenetre - */ - public JFrame getFenetre() { - return fenetre; - } - /** - * permet d'obtenir l'ensemble des etudiants - * @return - */ - @Override - public Set getEtudiant(){ - return this.promo.getPromotion().getEtudiants(); - } - - // ************************** - // FONCTION POUR LES CHANGEMENTS - // ****************************** - /** - * Créer un changement depuis le groupe courant - * @param e l'etudiant - * @param b le groupe a changer - */ - @Override - public void changeGroupe(Etudiant e, Groupe b){ - if(b==null) - return; - b=this.promo.refreshALL(b); - if(b.getEtudiants()!=null && b.getMax()>b.getEtudiants().size()+1){ - if(b.getEtudiants().size()>this.fenGr.getG().getEtudiants().size()){ - JPanel myPanel= new JPanel(new GridLayout(2,1)); - JTextField xField = new JTextField(100); - xField.setMinimumSize(new Dimension(100, 100)); - xField.setPreferredSize(new Dimension(100,100)); - myPanel.add(new JLabel("Ce Groupe est plus grand que le votre raison du changement:")); - myPanel.add(xField); - if(JOptionPane.showConfirmDialog(this.fenetre, myPanel, "Changer dans quel Groupe ?", JOptionPane.OK_CANCEL_OPTION)==JOptionPane.OK_OPTION){ - //IL faut que l'etudiant detaile un minimun la raison - if(xField.getText().length()>5){ - this.changement.createChangement(this.fenGr.getG(), e, b, xField.getText()); - }else{ - JOptionPane.showMessageDialog(this.fenetre, "veuillez detailler votre raison", "erreur", JOptionPane.ERROR_MESSAGE); - } - } - }else{ - this.changement.createChangement(this.fenGr.getG(), e, b); - } - }else{ - JOptionPane.showMessageDialog(this.fenetre, "impossible trop d'etudiant dans l'autre Groupe", "erreur", JOptionPane.ERROR_MESSAGE); - } - this.showGroupe(this.fenGr.getG()); - } - /** - * Retourn les groupe auquel on peut demander a changer depuis le groupe courant - * - * @return la liste des groupes - */ - @Override - public Set 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; - } - /** - * Fonction pour ajouter un étudiant au groupe - * @param g - * @param e - * @return boolean pour savoir si il a pus être ajouter - */ - @Override - public boolean addEtudiant(Groupe g, Etudiant e) { - // TODO Auto-generated method stub - return false; - } - - /** - * Fonction pour supprimer un groupe - * @param g le groupe a supprimer - */ - @Override - public void delete(Groupe g) { - // TODO Auto-generated method stub - - } - - - /** - * Fonction pour renomer un groupe - * @param name - * @param g - */ - @Override - public void rename(String name, Groupe g) { - // TODO Auto-generated method stub - - } - - - /** - * Fonction permetant de créer une partition d'un groupe - * @param g le groupe a partitionner - * @param n le nombre de partition - * @param name le nom des partition - */ - @Override - public void partition(Groupe g, int n, String name) { - // TODO Auto-generated method stub - - } - - - /** - * Fonction permettant de créer un sous-groupe d'un groupe - * @param g le groupe parent - * @param name le nom du sous-groupe - * @param min le nombre min d'etudiant - * @param max le nombre max d'etudiant - * @param ajout la liste des étudiants a ajouter au groupe - */ - @Override - public void free(Groupe g, String name, int min, int max, Set ajout) { - // TODO Auto-generated method stub - - } - - /** - * ajoute une nouvelle promotion - * @param min le nombre min - * @param max le nombre max - * @param name le nom - * @param ajout les etudiant a ajouter a la promo - */ - @Override - public void addPromo(int min, int max, String name, Set ajout) { - // TODO Auto-generated method stub - - } - -/** - * Fonction pour supprimer un etudiant. - * @param e l'etudiant a supprimer - * @return boolean true si l'etudiant a ete supprimer, false sinon - */ - @Override - public boolean deleteEtu(Etudiant e) { - // TODO Auto-generated method stub - return false; - } - /** - * Fonction pour afficher une fenetre listnatn les changements - * - */ - @Override - public void listChange() { - // TODO Auto-generated method stub - - } - - - /** - * Fonction pour effectuer un changement - * @param Changement le changement a effecteur - */ - @Override - public void change(Changement change) { - // TODO Auto-generated method stub - - } - - /** - * Fonction supprimant un changement - * - * @param to_delete la changement a delete - */ - @Override - public void deleteChange(Changement to_delete) { - // TODO Auto-generated method stub - - } - - - /** - * Fonction affichant les raison d'un changement - * - * @param change le changement - */ - @Override - public void showRaisonChange(Changement change) { - // TODO Auto-generated method stub - - } - - /** - * Fonction affichant une fentre pour trouver un etudiant et tous ses groupes asociée - */ - @Override - public void findEtu() { - // TODO Auto-generated method stub - - } - - /** - * Fonction pour recuperer les etudiant avec ce nom - * @param name le nom de(s) etudiants - * @return la liste - */ - @Override - public Set getEtu(String name) { - // TODO Auto-generated method stub - return null; - } - - /** - *affiche les groupe d'un etudiant - * @param e l'etudiant - */ - @Override - public void showGroupOfEtudiant(Etudiant e) { - // TODO Auto-generated method stub - - } - -} diff --git a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MNP/ROOT/Model/ModelRoot.java b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MNP/ROOT/Model/ModelRoot.java deleted file mode 100644 index 6e62a22..0000000 --- a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MNP/ROOT/Model/ModelRoot.java +++ /dev/null @@ -1,463 +0,0 @@ -package fr.iutfbleau.projetIHM2022FI2.MNP.ROOT.Model; -import java.util.HashSet; -import java.util.Set; -import javax.swing.*; -import java.awt.*; - -import fr.iutfbleau.projetIHM2022FI2.API.AbstractChangementFactory; -import fr.iutfbleau.projetIHM2022FI2.API.AbstractGroupeFactory; -import fr.iutfbleau.projetIHM2022FI2.API.Changement; -import fr.iutfbleau.projetIHM2022FI2.API.Etudiant; -import fr.iutfbleau.projetIHM2022FI2.API.Groupe; -import fr.iutfbleau.projetIHM2022FI2.API.Model; -import fr.iutfbleau.projetIHM2022FI2.API.TypeGroupe; -import fr.iutfbleau.projetIHM2022FI2.MNP.AbstractChangementFactoryNP; -import fr.iutfbleau.projetIHM2022FI2.MNP.AbstractGroupeFactoryNP; -import fr.iutfbleau.projetIHM2022FI2.MP.ROOT.View.FenetreChangement; -import fr.iutfbleau.projetIHM2022FI2.MP.ROOT.View.FenetreEtudiant; -import fr.iutfbleau.projetIHM2022FI2.MP.ROOT.View.FenetreGroupe; -import fr.iutfbleau.projetIHM2022FI2.MP.ROOT.View.FindBarFenetre; -import fr.iutfbleau.projetIHM2022FI2.Permanent.Controller.ObservateurChangeGroupe; -import fr.iutfbleau.projetIHM2022FI2.Permanent.Controller.ObservateurFenetre; -import fr.iutfbleau.projetIHM2022FI2.Permanent.View.Chargement; - -/** - * Le Model de L'IHM - */ -public class ModelRoot implements Model{ - - // le panel qui contient la fenetre de groupe - private JPanel panGroupe; - // la fenetre de groupe - private FenetreGroupe fenGr; - //la fenetre d'etudiant - private FenetreEtudiant fenEtu; - // le groupe courant - private AbstractGroupeFactory promo; - // le changement courant - private AbstractChangementFactory changement; - // la fenetre principale - private JFrame fenetre; - //fenetre du changement - private FenetreChangement fenChange; - - /** - * Constructeur du model. - * @param agf le groupe courant - * @param change le changement courant - */ - public ModelRoot(AbstractGroupeFactory agf, AbstractChangementFactory change){ - this.fenetre=new JFrame(); - this.fenetre.setSize(1200, 720); - this.fenetre.setLocation(100,100); - this.fenetre.addWindowListener(new ObservateurFenetre()); - this.fenetre.setLayout(new GridLayout(1,2)); - this.fenetre.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE); - this.fenetre.setMinimumSize(this.fenetre.getSize()); - Chargement ch=new Chargement(this.fenetre); - this.promo=agf; - this.changement=change; - ch.dispose(); - this.fenetre.setVisible(true); - if(this.promo.getPromotion()==null){ - this.fenGr=new FenetreGroupe(null, this); - this.fenEtu=new FenetreEtudiant(null, this); - }else{ - this.fenGr=new FenetreGroupe(this.promo.getPromotion(), this); - this.fenEtu=new FenetreEtudiant(this.promo.getPromotion(), this); - } - this.panGroupe=new JPanel(new GridLayout(1,1)); - if(this.promo.getPromotion()!=null){ - this.showGroupe(this.promo.getPromotion()); - }else{ - this.showGroupe(null); - } - this.fenChange=null; - } - - @Override - /** - * Fonction pour refresh/changer de groupe d'affichage - * @param g le groupe a afficher - */ - public void showGroupe(Groupe g){ - if(g!=null) - g=this.promo.refreshALL(g); - this.panGroupe.removeAll(); - this.fenGr=new FenetreGroupe(g, this); - this.fenEtu=new FenetreEtudiant(g, this); - this.fenetre.getContentPane().removeAll(); - this.panGroupe.add(this.fenGr.getPan()); - this.panGroupe.revalidate(); - this.fenetre.add(this.panGroupe); - JScrollPane scroll=new JScrollPane(this.fenEtu.getPan()); - scroll.getVerticalScrollBar().setUnitIncrement(15); - this.fenetre.add(scroll); - this.fenetre.revalidate(); - } - @Override - /** - * getteur de la fenetre - * @return JFrame la fenetre - */ - public JFrame getFenetre() { - return fenetre; - } - /** - * permet d'obtenir l'ensemble des etudiants - * @return - */ - @Override - public Set getEtudiant(){ - return this.promo.getEtudiants(null); - } - - // *********************** - // FONCTION POUR SUPRIMER UN ETUDIANT - // *********************** -/** - * Fonction pour supprimer un etudiant. - * @param e l'etudiant a supprimer - * @return boolean true si l'etudiant a ete supprimer, false sinon - */ - @Override - public boolean deleteEtu(Etudiant e){ - if(this.deleteEtutoChildren(e, this.fenGr.getG())){ - this.promo.dropFromGroupe(this.fenGr.getG(), e); - this.showGroupe(this.fenGr.getG()); - return true; - }else{ - return false; - } - } -/** - * Permet de savoir si un étudiant peut être supprimé - * @param e l'étudiant à supprimer - * @param g le groupe dans lequel on cherche - * @return true si possible, false sinon - */ - private boolean deleteEtutoChildren(Etudiant e, Groupe g){ - if(g.getMax() ajout){ - Chargement ch=new Chargement(this.fenetre); - this.fenetre.setVisible(false); - //on creer le groupe - this.promo.createGroupe(g, name, min, max); - Groupe creer=null; - //on le recupere - for(Groupe gr:g.getSousGroupes()){ - if(gr.getName()==name){ - creer=gr; - break; - } - } - //on y ajoute les étudiant - int n=0; - for(Etudiant e:ajout){ - if(this.addEtudiant(creer, e)==false) - n++; - } - creer=this.promo.refreshALL(creer); - ch.dispose(); - this.fenetre.setVisible(true); - if(n>0) - JOptionPane.showMessageDialog(this.fenetre, "erreur impossible d'ajouter "+n+" etudiants par manque de place dans le groupe de ses parents", "erreur", JOptionPane.ERROR_MESSAGE); - //Si finalement avec les etudiants qui n'ont pas pus être ajouter le min n'est pas atteint - if(creer.getEtudiants().size()+1<=creer.getMin()){ - //On le supprime - this.promo.deleteGroupe(creer); - JOptionPane.showMessageDialog(this.fenetre, "en raison du manque d'etudiant pour le nombre min le groupe n'a pas pus être créer", "errer", JOptionPane.ERROR_MESSAGE); - } - this.showGroupe(g); - } - /** - * ajoute une nouvelle promotion - * @param min le nombre min - * @param max le nombre max - * @param name le nom - * @param ajout les etudiant a ajouter a la promo - */ - @Override - public void addPromo(int min, int max, String name, Set ajout){ - Chargement ch=new Chargement(this.fenetre); - this.promo=new AbstractGroupeFactoryNP(name, min, max); - this.changement=new AbstractChangementFactoryNP(this.promo); - this.fenetre.setVisible(false); - for(Etudiant e:ajout){ - this.addEtudiant(this.promo.getPromotion(), e); - } - ch.dispose(); - this.fenetre.setVisible(true); - this.showGroupe(this.promo.getPromotion()); - } - - - /** - * Créer un changement depuis le groupe courant - * @param e l'etudiant - * @param b le groupe a changer - */ - @Override - public void changeGroupe(Etudiant e, Groupe b){ - if(b==null) - return; - b=this.promo.refreshALL(b); - if(b.getEtudiants()!=null && b.getMax()>b.getEtudiants().size()+1){ - if(b.getEtudiants().size()>this.fenGr.getG().getEtudiants().size()){ - JPanel myPanel= new JPanel(new GridLayout(2,1)); - JTextField xField = new JTextField(100); - xField.setMinimumSize(new Dimension(100, 100)); - xField.setPreferredSize(new Dimension(100,100)); - myPanel.add(new JLabel("Ce Groupe est plus grand que le votre raison du changement:")); - myPanel.add(xField); - if(JOptionPane.showConfirmDialog(this.fenetre, myPanel, "Changer dans quel Groupe ?", JOptionPane.OK_CANCEL_OPTION)==JOptionPane.OK_OPTION){ - //IL faut que l'etudiant detaile un minimun la raison - if(xField.getText().length()>5){ - this.changement.createChangement(this.fenGr.getG(), e, b, xField.getText()); - }else{ - JOptionPane.showMessageDialog(this.fenetre, "veuillez detailler votre raison", "erreur", JOptionPane.ERROR_MESSAGE); - } - } - }else{ - this.changement.createChangement(this.fenGr.getG(), e, b); - } - }else{ - JOptionPane.showMessageDialog(this.fenetre, "impossible trop d'etudiant dans l'autre Groupe", "erreur", JOptionPane.ERROR_MESSAGE); - } - this.showGroupe(this.fenGr.getG()); - } - /** - * Retourn les groupe auquel on peut demander a changer depuis le groupe courant - * - * @return la liste des groupes - */ - @Override - public Set 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() - */ - /** - * Fonction pour afficher une fenetre listnatn les changements - * - */ - @Override - public void listChange() { - this.fenChange=new FenetreChangement(changement, this); - JOptionPane.showMessageDialog(this.fenetre, new JScrollPane(this.fenChange), "liste des changements", JOptionPane.OK_OPTION); - } - /** - * Fonction pour effectuer un changement - * @param Changement le changement a effecteur - */ - @Override - public void change(Changement change) { - this.changement.applyChangement(change); - this.fenChange.refresh(); - if(change.getA()==this.fenGr.getG()){ - this.showGroupe(this.fenGr.getG()); - } - } - - /** - * Fonction supprimant un changement - * - * @param to_delete la changement a delete - */ - @Override - public void deleteChange(Changement to_delete) { - this.changement.deleteChangement(to_delete); - this.fenChange.refresh(); - } - - /** - * Fonction affichant les raison d'un changement - * - * @param change le changement - */ - @Override - public void showRaisonChange(Changement change) { - JOptionPane.showMessageDialog(this.fenetre, new JLabel(change.getRaison()), "Raison de la demande", JOptionPane.OK_OPTION); - } - /** - * Fonction affichant une fentre pour trouver un etudiant et tous ses groupes asociée - */ - @Override - public void findEtu() { - JScrollPane scroll=new JScrollPane(new FindBarFenetre(this).getPanel()); - scroll.getVerticalScrollBar().setUnitIncrement(5); - JOptionPane.showMessageDialog(this.fenetre, scroll, "chercher un etudiant", JOptionPane.OK_OPTION); - } - - /* (non-Javadoc) - * @see fr.iutfbleau.projetIHM2022FI2.API.Model#getEtu(java.lang.String) - */ - - /** - * Fonction pour recuperer les etudiant avec ce nom - * @param name le nom de(s) etudiants - * @return la liste - */ - @Override - public Set getEtu(String name) { - return this.promo.getEtudiants(name); - } - /** - *affiche les groupe d'un etudiant - * @param e l'etudiant - */ - @Override - public void showGroupOfEtudiant(Etudiant e){ - Set 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/MP/AbstractChangementFactoryNP.java b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MP/AbstractChangementFactoryNP.java deleted file mode 100644 index 6788ee3..0000000 --- a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MP/AbstractChangementFactoryNP.java +++ /dev/null @@ -1,358 +0,0 @@ -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; - /** - * Constructeur de l'usine à changement. - * @param agf l'usine à groupe travaillant en tandem avec cette usine. - * @param fenetre la fenetre principale - */ - public AbstractChangementFactoryNP(AbstractGroupeFactory agf, JFrame fenetre){ - Objects.requireNonNull(agf,"On ne peut pas créer une usine à changement dont l'usine à groupe parternaire est null"); - this.agf=agf; - this.fenetre=fenetre; - this.brain=new HashMap(); - this.getChange(); - } - /** - * Constructeur de l'usine à changement. - * @param agf l'usine à groupe travaillant en tandem avec cette usine. - * @param fenetre la fenetre principale - * @param liste la liste des changements - */ - public AbstractChangementFactoryNP(AbstractGroupeFactory agf, JFrame fenetre, Set 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. - * @param c le changement à mettre en oeuvre. - * @throws java.lang.NullPointerException si un argument est null - * @throws java.lang.IllegalStateException si le changement n'a pas de sens en l'état actuel (e.g. étudiant pas dans le groupe de départ a, groupe b inconnu, groupe a inconnu, etc). - * @throws java.lang.IllegalArgumentException si inconnu de l'usine abstraite - */ - public void applyChangement(Changement c){ - Objects.requireNonNull(c,"On ne peut pas appliquer un changement qui est null"); - Etudiant e = c.getEtu(); - Groupe a = c.getA(); - Groupe b = c.getB(); - - if (!agf.knows(a)) throw new IllegalStateException("Le groupe de départ du changement est inconnu. Impossible à mettre en oeuvre."); - - if (!agf.knows(b)) throw new IllegalStateException("Le groupe d'arrivée du changement est inconnu. Impossible à mettre en oeuvre."); - // pas encore implanté. - // if(!agf.getGroupesOfEtudiant(e).contains(a)) throw new IllegalStateException("Le groupe de départ ne contient pas l'étudiant. Impossible à mettre en oeuvre."); - - agf.dropFromGroupe(a,e); - agf.addToGroupe(b,e); - // En cas de succès, on enlève le changement du cerveau - this.deleteChangement(c); - for(Changement ch: this.getAllChangements()){ - if(ch.getB().getSize()+1==ch.getB().getMax()){ - this.deleteChangement(ch); - } - } - } - - - /** - * permet de supprimer un changement connu de l'usine abstraite. - * @param c le changement à supprimer. - * @throws java.lang.NullPointerException si un argument est null - * @throws java.lang.IllegalArgumentException si inconnu de l'usine abstraite - */ - public void deleteChangement(Changement c){ - Objects.requireNonNull(c,"On ne peut pas demander la suppression d'un changement qui est null"); - Connection cnx=this.cnx(); - try{ - PreparedStatement pst=cnx.prepareStatement("DELETE FROM `Changement` where `id`=?"); - pst.setInt(1, c.getId()); - pst.executeUpdate(); - pst.close(); - }catch(SQLException er){ - System.out.println(er.toString()); - if(this.erreurSQL()){ - this.deleteChangement(c); - }else{ - return; - } - } - this.close(cnx); - this.brain.remove(c.getId()); - } - - /** - * permet d'ajouter un nouveau changement. - * - * @param A groupe actuel - * @param B groupe demandé - * @param e étudiant concerné par le changement - * - * @throws java.lang.NullPointerException si un argument est null - * @throws java.lang.IllegalArgumentException si les groupes ou l'étudiant ne sont pas connus de la factory partenaire, ou e n'appartient pas à A ou A et B ne sont pas frères dans l'arbre des groupes. - * - */ - public void createChangement(Groupe A, Etudiant e, Groupe B){ - Objects.requireNonNull(A,"Le groupe d'origine ne peut pas être null"); - Objects.requireNonNull(B,"Le groupe d'arrivée ne peut pas être null"); - Objects.requireNonNull(e,"L'étudiant ne peut pas être null"); - Changement c = new ChangementNP(A,e,B); - this.brain.put(Integer.valueOf(c.getId()),c); - Connection cnx=this.cnx(); - try{ - PreparedStatement pst=cnx.prepareStatement("SELECT * FROM `Changement` where `idGroupeA`=? AND `idGroupeB`=? AND `idEtudiant`=?; "); - pst.setInt(1, A.getId()); - pst.setInt(2, B.getId()); - pst.setInt(3, e.getId()); - if(!pst.executeQuery().next()){ - pst.close(); - pst=cnx.prepareStatement("INSERT INTO `Changement` (`idGroupeA`, `idGroupeB`, `idEtudiant`, `id`) VALUES (?, ?, ?, ?);"); - pst.setInt(1, A.getId()); - pst.setInt(2, B.getId()); - pst.setInt(3, e.getId()); - pst.setInt(4, c.getId()); - pst.executeUpdate(); - pst.close(); - }else{ - pst.close(); - JOptionPane.showMessageDialog(this.fenetre, "Vous Avez deja demander a Chnager dans ce Groupe", "erreur", JOptionPane.ERROR_MESSAGE); - } - }catch(SQLException er){ - System.out.println(er.toString()); - if(this.erreurSQL()){ - this.createChangement(A, e, B); - }else{ - return; - } - } - this.close(cnx); - } - - @Override - /** - * permet d'ajouter un nouveau changement. de type 2 - * - * @param A groupe actuel - * @param B groupe demandé - * @param e étudiant concerné par le changement - * @param raison la raison du changement de type 2 - * @throws java.lang.NullPointerException si un argument est null - * @throws java.lang.IllegalArgumentException si les groupes ou l'étudiant ne sont pas connus de la factory partenaire, ou e n'appartient pas à A ou A et B ne sont pas frères dans l'arbre des groupes. - * - */ - public void createChangement(Groupe A, Etudiant e, Groupe B, String raison){ - Objects.requireNonNull(A,"Le groupe d'origine ne peut pas être null"); - Objects.requireNonNull(B,"Le groupe d'arrivée ne peut pas être null"); - Objects.requireNonNull(e,"L'étudiant ne peut pas être null"); - Changement c = new ChangementNP(A,e,B, raison); - this.brain.put(Integer.valueOf(c.getId()),c); - Connection cnx=this.cnx(); - try{ - PreparedStatement pst=cnx.prepareStatement("SELECT * FROM `Changement` where `idGroupeA`=? AND `idGroupeB`=? AND `idEtudiant`=?; "); - pst.setInt(1, A.getId()); - pst.setInt(2, B.getId()); - pst.setInt(3, e.getId()); - if(!pst.executeQuery().next()){ - pst.close(); - pst=cnx.prepareStatement("INSERT INTO `Changement` (`id`, `idGroupeA`, `idGroupeB`, `idEtudiant`, `Raison`) VALUES (?, ?, ?, ?, ?);"); - pst.setInt(1, c.getId()); - pst.setInt(2, A.getId()); - pst.setInt(3, B.getId()); - pst.setInt(4, e.getId()); - pst.setString(5, raison); - pst.executeUpdate(); - pst.close(); - }else{ - pst.close(); - JOptionPane.showMessageDialog(this.fenetre, "Vous Avez deja demander a Chnager dans ce Groupe", "erreur", JOptionPane.ERROR_MESSAGE); - } - }catch(SQLException er){ - System.out.println(er.toString()); - if(this.erreurSQL()){ - this.createChangement(A, e, B, raison); - }else{ - return; - } - } - this.close(cnx); - } - - - // ********************** - // FONCTION POUR SIMPLIFIER LES Modification BD - // *********************** - - /** - * permet de se connecter à la base de donnée - * - * @return la connexion à la base de donnée - */ - private Connection cnx(){ - //On se Connecte a la BD - try{ - Class.forName("org.mariadb.jdbc.Driver"); - Connection cnx = DriverManager.getConnection( - "jdbc:mariadb://dwarves.iut-fbleau.fr/chaignea", - "chaignea", "Chaigneauphpmyadmin"); - return cnx; - }catch(Exception e){ - if(this.erreurCO()==true){ - return this.cnx(); - } - } - return null; - } - - /** - * permet de détécter une erreur de connexion à la base de donnée - * - * @return true si une erreur est détéctée, false sinon - * - * - */ - private boolean erreurCO(){ - if(JOptionPane.showConfirmDialog(this.fenetre, "erreur connection a la BD reassayer?", "erreur connection", JOptionPane.YES_NO_OPTION)==JOptionPane.YES_OPTION){ - return true; - }else{ - this.fenetre.dispose(); - return false; - } - } - /** - * permet de détécter une erreur SQL - * - * @return true si une erreur est détéctée, false sinon - * - * - */ - private boolean erreurSQL(){ - if(JOptionPane.showConfirmDialog(this.fenetre, "erreur lors de la modification, reasssayer?", "erreur SQL", JOptionPane.YES_NO_OPTION)==JOptionPane.YES_OPTION){ - return true; - }else{ - return false; - } - } - - /** - * permet de fermer la connexion à la base de donnée - * - * @param clos outil de fermture de la connexion - * - */ - private void close(AutoCloseable clos){ - try{ - clos.close(); - }catch(Exception e){ - if(this.erreurCO()==true) - this.close(clos); - } - } - - /** - * permet de remplir la liste des changements de l'usine - */ - private void getChange(){ - Connection cnx=this.cnx(); - try{ - PreparedStatement pst=cnx.prepareStatement("SELECT * FROM `Changement` NATURAL JOIN Etudiant; "); - ResultSet rs=pst.executeQuery(); - while(rs.next()){ - Groupe[] ab=new Groupe[2]; - this.getGroupe(rs.getInt(2), rs.getInt(3), ab, this.agf.getPromotion()); - Etudiant e=new EtudiantNP(rs.getString(6), rs.getString(7), rs.getInt(4)); - if(rs.getString(5)!=null){ - this.brain.put(rs.getInt(1), new ChangementNP(ab[0], e, ab[1], rs.getInt(1), rs.getString(5))); - }else{ - this.brain.put(rs.getInt(1), new ChangementNP(ab[0], e, ab[1], rs.getInt(1))); - } - } - pst.close(); - }catch(SQLException e){ - if(this.erreurCO()) - this.getChange(); - return; - } - this.close(cnx); - } - /** - * permet de chercher les sous-groupes d'un groupe - * - * @param idA id du groupe A - * @param idB id du groupe B - * @param retour tableau de groupe dans lequel on va stocker les groupes - * @param toFind le groupe à comparer (ou groupe père pour la première itération) - */ - private void getGroupe(int idA, int idB, Groupe[] retour, Groupe tofind){ - if(retour[0]!=null && retour[1]!=null) - return; - if(tofind.getId()==idA){ - retour[0]=tofind; - } - if(tofind.getId()==idB){ - retour[1]=tofind; - } - for(Groupe sous:tofind.getSousGroupes()){ - this.getGroupe(idA, idB, retour, sous); - } - } - - /** - * pemet de arfricher la liste des changements - * - */ - private void refresh(){ - this.brain=new HashMap(); - this.getChange(); - } - - -} diff --git a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MP/AbstractGroupeFactoryNP.java b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MP/AbstractGroupeFactoryNP.java deleted file mode 100644 index f895fb1..0000000 --- a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MP/AbstractGroupeFactoryNP.java +++ /dev/null @@ -1,782 +0,0 @@ -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é). - * @param fenetre fenetre principale - * - */ - 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. - * @param fenetre fenetre principale - * @param name nom de la promotion - * @param min le nombre minimum d'étudiants dans la promotion - * @param max le nombre maximum d'étudiants dans la promotion - */ - public AbstractGroupeFactoryNP(String name, int min, int max, 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. - * @param g le groupe à tester - * @return true si le groupe est connu - */ - public Boolean knows(Groupe g){ - return this.brain.containsKey(Integer.valueOf(g.getId())); - } - - /** - * pemet de changer le nom d'un groupe dans la base de données - * - * @param g le groupe dont on veut changer le nom - * @param name le nouveau nom - * - * @return true si le changement a été effectué, false s'il y a eu une erreur - * - * - */ - 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. - * - * @param g le groupe à supprimer - * - * @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 - // *********************** - - - /** - * permet de se connecter à la base de donnée - * - * @return la connexion à la base de donnée - */ - private Connection cnx(){ - //On se Connecte a la BD - try{ - Class.forName("org.mariadb.jdbc.Driver"); - Connection cnx = DriverManager.getConnection( - "jdbc:mariadb://dwarves.iut-fbleau.fr/chaignea", - "chaignea", "Chaigneauphpmyadmin"); - return cnx; - }catch(Exception e){ - System.out.println(e.toString()); - if(this.erreurCO()==true){ - return this.cnx(); - } - } - return null; - } - /** - * permet de détécter une erreur de connexion à la base de donnée - * - * @return true si une erreur est détéctée, false sinon - * - * - */ - private boolean erreurCO(){ - if(JOptionPane.showConfirmDialog(this.fenetre, "erreur connection a la BD reassayer?", "erreur connection", JOptionPane.YES_NO_OPTION)==JOptionPane.YES_OPTION){ - return true; - }else{ - this.fenetre.dispose(); - return false; - } - } - /** - * permet de détécter une erreur SQL - * - * @return true si une erreur est détéctée, false sinon - * - * - */ - private boolean erreurSQL(){ - if(JOptionPane.showConfirmDialog(this.fenetre, "erreur lors de la modification, reasssayer?", "erreur SQL", JOptionPane.YES_NO_OPTION)==JOptionPane.YES_OPTION){ - return true; - }else{ - return false; - } - } - /** - * permet de supprimer un étudiant de la base de donnée - * @param et l'étudiant à supprimer - * @param g le groupe dans lequel il est - */ - 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); - } - /** - * permet de supprimer un étudiant de la base de donnée - * @param pst la requete préparée - * @param cnx la connexion à la base de donnée - * @param id le groupe parent - */ - 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); - } - } - } - /** - * permet de fermer la connexion à la base de donnée - * - * @param clos outil de fermture de la connexion - * - */ - private void close(AutoCloseable clos){ - try{ - clos.close(); - }catch(Exception e){ - System.out.println(e.toString()); - if(this.erreurCO()==true) - this.close(clos); - } - } - -/** - * permet d'ajouter un groupe de la base de donnée - * @param etudiant l'étudiant à ajouter - * @param g le groupe de l'étudiant - * @return true s'il n'y a pas eu d'erreur, false sinon - */ -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; - } - /** - * permet d'ajouter un groupe dans la base de donnée - * @param g le groupe à ajouter - * @return true s'il n'y a pas eu d'erreur, false sinon - */ - 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; - } - /** - * permet de supprimer un groupe de la base de donnée - * @param g le groupe à supprimer - * @return true s'il n'y a pas eu d'erreur, false sinon - */ - 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 - * ******************************** - */ - /** - * permet de charger les groupes de la base de donnée - */ - 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) - */ - 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 - * @param cnx la connection a la BD (evite de la surcharger) - * @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/ChangementNP.java b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MP/ChangementNP.java deleted file mode 100644 index 74f42e9..0000000 --- a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MP/ChangementNP.java +++ /dev/null @@ -1,141 +0,0 @@ -package fr.iutfbleau.projetIHM2022FI2.MP; -import fr.iutfbleau.projetIHM2022FI2.API.*; -import java.util.*; -/** - * Une demande de changement de groupe - * concerne un étudiant, qui est dans un groupe A et veut aller dans un groupe B. - * - * Implémentation non persistante fournie avec l'API. - */ - -public class ChangementNP implements Changement { - - //auto-incrément des changements - private static int nextId=0; - // id du changement - private int id; - // groupe d'origine et d'arrivée - private Groupe a,b; - // étudiant concerné - private Etudiant e; - // raison de la demande - private String raison; - /** - * Constructeur d'un changement. - * @param a le groupe de départ - * @param b le groupe d'arrivée - * @param e l'étudiant demandant le changement - * @param raison la raison du changement - */ - public ChangementNP(Groupe a, Etudiant e, Groupe b){ - Objects.requireNonNull(a,"On ne peut pas créer un changement avec un groupe à quitter null"); - Objects.requireNonNull(b,"On ne peut pas créer un changement avec un groupe à rejoindre null"); - Objects.requireNonNull(e,"On ne peut pas créer un changement concernant un étudiant null"); - this.raison=null; - this.id=++this.nextId; - this.a=a; - this.b=b; - this.e=e; - } - /** - * Constructeur d'un changement. - * @param a le groupe de départ - * @param b le groupe d'arrivée - * @param e l'étudiant demandant le changement - * @param raison la raison du changement - * - */ - public ChangementNP(Groupe a, Etudiant e, Groupe b, String raison){ - Objects.requireNonNull(a,"On ne peut pas créer un changement avec un groupe à quitter null"); - Objects.requireNonNull(b,"On ne peut pas créer un changement avec un groupe à rejoindre null"); - Objects.requireNonNull(e,"On ne peut pas créer un changement concernant un étudiant null"); - this.raison=raison; - this.id=++this.nextId; - this.a=a; - this.b=b; - this.e=e; - } - /** - * Constructeur d'un changement. - * @param a le groupe de départ - * @param b le groupe d'arrivée - * @param e l'étudiant demandant le changement - * @param id l'id du changement - * - */ - public ChangementNP(Groupe a, Etudiant e, Groupe b, int id){ - Objects.requireNonNull(a,"On ne peut pas créer un changement avec un groupe à quitter null"); - Objects.requireNonNull(b,"On ne peut pas créer un changement avec un groupe à rejoindre null"); - Objects.requireNonNull(e,"On ne peut pas créer un changement concernant un étudiant null"); - - this.id=id; - this.a=a; - this.b=b; - this.e=e; - if(this.id>this.nextId){ - this.nextId=this.id; - } - } - /** - * Constructeur d'un changement. - * @param a le groupe de départ - * @param b le groupe d'arrivée - * @param e l'étudiant demandant le changement - * @param id l'id du changement - * @param raison la raison du changement - * - */ - public ChangementNP(Groupe a, Etudiant e, Groupe b, int id, String raison){ - Objects.requireNonNull(a,"On ne peut pas créer un changement avec un groupe à quitter null"); - Objects.requireNonNull(b,"On ne peut pas créer un changement avec un groupe à rejoindre null"); - Objects.requireNonNull(e,"On ne peut pas créer un changement concernant un étudiant null"); - this.raison=raison; - this.id=id; - this.a=a; - this.b=b; - this.e=e; - if(this.id>this.nextId){ - this.nextId=this.id; - } - } - - /** - * permet de récupérer l'identifiant du changement (référence interne sans intérêt irl). - * @return l'identifiant. - */ - public int getId(){ - return this.id; - } - - /** - * permet de récupérer le groupe de depart - * @return ce groupe. - */ - public Groupe getA(){ - return this.a; - } - - /** e - * @return ce groupe. - */ - public Groupe getB(){ - return this.b; - } - - /** - * permet de récupérer l'étudiant demandant le changement - * @return cet étudiant - */ - public Etudiant getEtu(){ - return this.e; - } - /** - * permet de récupérer la raison du changement - * @return la raison du changement - */ - @Override - public String getRaison() { - return this.raison; - } - -} diff --git a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MP/ETU/Model/ModelEtu.java b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MP/ETU/Model/ModelEtu.java deleted file mode 100644 index 3947c29..0000000 --- a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MP/ETU/Model/ModelEtu.java +++ /dev/null @@ -1,358 +0,0 @@ -package fr.iutfbleau.projetIHM2022FI2.MP.ETU.Model; -import javax.swing.*; -import java.awt.*; -import java.util.Set; -import java.util.HashSet; -import fr.iutfbleau.projetIHM2022FI2.API.AbstractChangementFactory; -import fr.iutfbleau.projetIHM2022FI2.API.AbstractGroupeFactory; -import fr.iutfbleau.projetIHM2022FI2.API.Changement; -import fr.iutfbleau.projetIHM2022FI2.API.Etudiant; -import fr.iutfbleau.projetIHM2022FI2.API.Groupe; -import fr.iutfbleau.projetIHM2022FI2.API.TypeGroupe; -import fr.iutfbleau.projetIHM2022FI2.API.Model; -import fr.iutfbleau.projetIHM2022FI2.Permanent.Controller.ObservateurFenetre; -import fr.iutfbleau.projetIHM2022FI2.Permanent.View.Chargement; -import fr.iutfbleau.projetIHM2022FI2.MP.AbstractChangementFactoryNP; -import fr.iutfbleau.projetIHM2022FI2.MP.AbstractGroupeFactoryNP; -import fr.iutfbleau.projetIHM2022FI2.MP.ETU.View.FenetreEtudiant; -import fr.iutfbleau.projetIHM2022FI2.MP.ETU.View.FenetreGroupe; - -/** - * Le Model de L'IHM - */ -public class ModelEtu implements Model{ - // le panel qui contient la fenetre de groupe - private JPanel panGroupe; - // la fenetre de groupe - private FenetreGroupe fenGr; - //la fenetre d'etudiant - private FenetreEtudiant fenEtu; - // le groupe courant - private AbstractGroupeFactory promo; - // le changement courant - private AbstractChangementFactory changement; - // la fenetre principale - private JFrame fenetre; - // l'etudiant courant - private Etudiant Selected; - /** - * Constructeur du Model - */ - public ModelEtu(){ - this.fenetre=new JFrame(); - this.fenetre.setSize(1200, 720); - this.fenetre.setLocation(100,100); - this.fenetre.addWindowListener(new ObservateurFenetre()); - this.fenetre.setLayout(new GridLayout(1,2)); - this.fenetre.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE); - this.fenetre.setMinimumSize(this.fenetre.getSize()); - Chargement ch=new Chargement(this.fenetre); - this.promo=new AbstractGroupeFactoryNP(this.fenetre); - if(this.promo.getPromotion()==null){ - this.promo=null; - } - ch.dispose(); - this.fenetre.setVisible(true); - this.initEtu(null); - if(this.promo==null){ - this.fenGr=new FenetreGroupe(null, this, null); - this.fenEtu=new FenetreEtudiant(null, this.Selected, this); - this.changement=null; - }else{ - this.changement=new AbstractChangementFactoryNP(promo, this.fenetre); - this.fenGr=new FenetreGroupe(this.promo.getPromotion(), this,this.promo.getGroupesOfEtudiant(this.Selected)); - this.fenEtu=new FenetreEtudiant(this.promo.getPromotion(), this.Selected, this); - } - this.panGroupe=new JPanel(new GridLayout(1,1)); - if(this.promo!=null){ - this.showGroupe(this.promo.getPromotion()); - }else{ - this.showGroupe(null); - } - } - - - @Override - /** - * Fonction pour refresh/changer de groupe d'affichage - * @param g le groupe a afficher - */ - public void showGroupe(Groupe g){ - if(g!=null) - g=this.promo .refreshALL(g); - this.panGroupe.removeAll(); - this.fenGr=new FenetreGroupe(g, this, this.promo.getGroupesOfEtudiant(this.Selected)); - this.fenEtu=new FenetreEtudiant(g, this.Selected, this); - this.fenetre.getContentPane().removeAll(); - this.panGroupe.add(this.fenGr.getPan()); - this.panGroupe.revalidate(); - this.fenetre.add(this.panGroupe); - JScrollPane scroll=new JScrollPane(this.fenEtu.getPan()); - scroll.getVerticalScrollBar().setUnitIncrement(15); - this.fenetre.add(scroll); - this.fenetre.revalidate(); - } - @Override - /** - * getteur de la fenetre - * @return JFrame la fenetre - */ - public JFrame getFenetre() { - return fenetre; - } - /** - * Permet d'obtenir les étudiants du groupe courant. - * @return les étudiants du groupe courant - */ - @Override - public Set 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 - // ****************************** - /** - * Permet de changer de groupe. - * @param e l'étudiant qui change de groupe - * @param g le groupe dans lequel l'étudiant va - */ - @Override - public void changeGroupe(Etudiant e, Groupe b){ - if(b==null) - return; - b=this.promo.refreshALL(b); - if(b.getEtudiants()!=null && b.getMax()>b.getEtudiants().size()+1){ - if(b.getEtudiants().size()>this.fenGr.getG().getEtudiants().size()){ - JPanel myPanel= new JPanel(new GridLayout(2,1)); - JTextField xField = new JTextField(100); - xField.setMinimumSize(new Dimension(100, 100)); - xField.setPreferredSize(new Dimension(100,100)); - myPanel.add(new JLabel("Ce Groupe est plus grand que le votre raison du changement:")); - myPanel.add(xField); - if(JOptionPane.showConfirmDialog(this.fenetre, myPanel, "Changer dans quel Groupe ?", JOptionPane.OK_CANCEL_OPTION)==JOptionPane.OK_OPTION){ - //IL faut que l'etudiant detaile un minimun la raison - if(xField.getText().length()>5){ - this.changement.createChangement(this.fenGr.getG(), e, b, xField.getText()); - }else{ - JOptionPane.showMessageDialog(this.fenetre, "veuillez detailler votre raison", "erreur", JOptionPane.ERROR_MESSAGE); - } - } - }else{ - this.changement.createChangement(this.fenGr.getG(), e, b); - } - }else{ - JOptionPane.showMessageDialog(this.fenetre, "impossible trop d'etudiant dans l'autre Groupe", "erreur", JOptionPane.ERROR_MESSAGE); - } - this.showGroupe(this.fenGr.getG()); - } -/** - * pemet d'obtenir les sous groupes du groupe courant. - * @return les sous groupes du groupe courant - */ - @Override - public Set 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; - } - /** - * ajoute un étudiant dans un groupe. - * @param e l'étudiant à ajouter - * @param g le groupe dans lequel l'étudiant va - * @return true si l'ajout a réussi, false sinon - */ - @Override - public boolean addEtudiant(Groupe g, Etudiant e) { - // TODO Auto-generated method stub - return false; - } - - /** - * supprime un groupe. - * @param g le groupe à supprimer - */ - @Override - public void delete(Groupe g) { - // TODO Auto-generated method stub - - } - - /** - * rennome un groupe. - * @param g le groupe à renommer - * @param nom le nouveau nom du groupe - * - */ - @Override - public void rename(String name, Groupe g) { - // TODO Auto-generated method stub - - } - - /** - * Fonction permetant de créer une partition d'un groupe - * @param g le groupe a partitionner - * @param n le nombre de partition - * @param name le nom des partition - */ - @Override - public void partition(Groupe g, int n, String name) { - // TODO Auto-generated method stub - - } - - /** - * Fonction permettant de créer un sous-groupe d'un groupe - * @param g le groupe parent - * @param name le nom du sous-groupe - * @param min le nombre min d'etudiant - * @param max le nombre max d'etudiant - * @param ajout la liste des étudiants a ajouter au groupe - */ - @Override - public void free(Groupe g, String name, int min, int max, Set ajout) { - // TODO Auto-generated method stub - - } - - - /** - * ajoute une nouvelle promotion - * @param min le nombre min - * @param max le nombre max - * @param name le nom - * @param ajout les etudiant a ajouter a la promo - */ - @Override - public void addPromo(int min, int max, String name, Set ajout) { - // TODO Auto-generated method stub - - } - -/** - * Fonction pour supprimer un etudiant. - * @param e l'etudiant a supprimer - * @return boolean true si l'etudiant a ete supprimer, false sinon - - */ - @Override - public boolean deleteEtu(Etudiant e) { - // TODO Auto-generated method stub - return false; - } - - /** - * Fonction pour afficher une fenetre listnatn les changements - * - */ - @Override - public void listChange() { - // TODO Auto-generated method stub - - } - - /** - * Fonction pour effectuer un changement - * @param Changement le changement a effecteur - */ - @Override - public void change(Changement change) { - // TODO Auto-generated method stub - - } - - /** - * Fonction supprimant un changement - * - * @param to_delete la changement a delete - */ - @Override - public void deleteChange(Changement to_delete) { - // TODO Auto-generated method stub - - } - - - /** - * Fonction affichant les raison d'un changement - * - * @param change le changement - */ - @Override - public void showRaisonChange(Changement change) { - // TODO Auto-generated method stub - - } - - /** - * Fonction affichant une fentre pour trouver un etudiant et tous ses groupes asociée - */ - @Override - public void findEtu() { - // TODO Auto-generated method stub - - } - - - /** - * Fonction pour recuperer les etudiant avec ce nom - * @param name le nom de(s) etudiants - * @return la liste - */ - @Override - public Set getEtu(String name) { - // TODO Auto-generated method stub - return null; - } - - - /** - *affiche les groupe d'un etudiant - * @param e l'etudiant - */ - @Override - public void showGroupOfEtudiant(Etudiant e) { - // TODO Auto-generated method stub - - } - -} diff --git a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MP/ETU/View/FenetreEtudiant.java b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MP/ETU/View/FenetreEtudiant.java deleted file mode 100644 index e58e7d1..0000000 --- a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MP/ETU/View/FenetreEtudiant.java +++ /dev/null @@ -1,91 +0,0 @@ -package fr.iutfbleau.projetIHM2022FI2.MP.ETU.View; - - -import javax.swing.JLabel; -import javax.swing.JPanel; - -import java.awt.*; -import java.util.LinkedHashSet; -import java.util.Set; - -import fr.iutfbleau.projetIHM2022FI2.API.Etudiant; -import fr.iutfbleau.projetIHM2022FI2.API.Groupe; -import fr.iutfbleau.projetIHM2022FI2.API.TypeGroupe; -import fr.iutfbleau.projetIHM2022FI2.Permanent.Controller.ActionListenerChangeEtu; -import fr.iutfbleau.projetIHM2022FI2.API.Model; - -/** - * Affichage des édudiants d'un groupe - * - */ -public class FenetreEtudiant{ - //liste des étudiants - private Set etu; - // panel - private JPanel pan; - // l'étudiant sélectionné - private Etudiant concerner; - // model - private Model model; - // tru si le groupe est une partition - private boolean partition; - - /** - * Constructeur de l'affichage des étudiants - * @param g le groupe - * @param m le model - * @param e l'étudiant sélectionné - */ - public FenetreEtudiant(Groupe g, Etudiant e, Model m){ - this.pan=new JPanel(); - this.model=m; - if(g!=null){ - this.etu=g.getEtudiants(); - }else{ - this.etu=new LinkedHashSet<>(); - } - this.concerner=e; - if(g.getPointPoint().getType()==TypeGroupe.PARTITION) - this.partition=true; - else{ - this.partition=false; - } - this.draw(); - } - /** - * Gère l'affichage des étudiants - */ - private void draw(){ - if(this.etu.size()!=0){ - this.pan.setLayout(new GridLayout(this.etu.size(), 1, 30, 0)); - PanelEtudiant p=new PanelEtudiant(this.concerner, this.partition); - p.addActionChangeListener(new ActionListenerChangeEtu(this.model, this.concerner)); - this.pan.add(p); - for(Etudiant e: this.etu){ - if(this.concerner.getId() != e.getId()){ - this.pan.add(p); - p=new PanelEtudiant(e,false); - } - } - }else{ - this.pan.setLayout(new FlowLayout()); - this.pan.add(new JLabel("Il n'y a pas d'étudiant")); - } - } - /** - * rafraichit l'affichage. - */ - public void refresh(){ - this.pan.removeAll(); - this.draw(); - this.pan.revalidate(); - } - - /** - * premet d'obtenir le panel de l'affichage - * @return le panel de l'affichage - */ - public JPanel getPan() { - return pan; - } -} 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 deleted file mode 100644 index 3b83a6b..0000000 --- a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MP/ETU/View/FenetreGroupe.java +++ /dev/null @@ -1,132 +0,0 @@ -package fr.iutfbleau.projetIHM2022FI2.MP.ETU.View; - -import javax.swing.JButton; -import javax.swing.JLabel; -import javax.swing.JPanel; -import javax.swing.JScrollPane; -import java.awt.Font; -import java.awt.GridLayout; -import fr.iutfbleau.projetIHM2022FI2.API.Groupe; -import fr.iutfbleau.projetIHM2022FI2.API.TypeGroupe; -import fr.iutfbleau.projetIHM2022FI2.API.Model; -import fr.iutfbleau.projetIHM2022FI2.Permanent.Controller.ObservateurChangeGroupe; - -import java.util.Set; -import java.awt.Color; - -/** - * Affichage d'un groupe - * -*/ -public class FenetreGroupe{ - // le groupe affiché - private Groupe g; - // le panel d'affichage - private JPanel pan; - // le modèle - private Model m; - // liste des sous groupes - private Set appartient; - - /** - * Constructeur de l'affichage d'un groupe - * @param g le groupe à afficher - * @param m le model - * @param appartient la liste des sous groupes - * - */ - public FenetreGroupe(Groupe g, Model m, Set appartient){ - super(); - this.g=g; - this.appartient=appartient; - this.m=m; - this.pan=new JPanel(); - this.draw(); - } - /** - * permet de récupérer le groupe affiché - * @return le groupe affiché - */ - public Groupe getG() { - return this.g; - } - /** - * rafraichit l'affichage du groupe - */ - public void refresh(){ - this.pan.removeAll(); - this.draw(); - this.pan.revalidate(); - } - /** - * gère l'affichage du groupe - */ - private void draw(){ - if(g!=null){ - int taille=1; - if(g.getType()==TypeGroupe.PARTITION || g.getType()==TypeGroupe.ROOT) - taille--; - if(g.getSousGroupes().size()>0) - this.pan.setLayout(new GridLayout(7, 1)); - else{this.pan.setLayout(new GridLayout(6, 1));} - JPanel tache=new JPanel(new GridLayout(1,taille)); - - if(g.getType()!=TypeGroupe.ROOT){ - JButton bout=new JButton(g.getPointPoint().getName()); - bout.addActionListener(new ObservateurChangeGroupe(m, g.getPointPoint())); - tache.add(bout); - } - this.pan.add(tache); - JLabel titre=new JLabel("Groupe : "+g.getName(), JLabel.CENTER); - titre.setFont(new Font(Font.SERIF, Font.BOLD, titre.getFont().getSize()+10)); - this.pan.add(titre); - this.pan.add(new JLabel("min= "+String.valueOf(g.getMin())+"\t || \t max= "+String.valueOf(g.getMax()),JLabel.CENTER)); - JButton refresh= new JButton("Resfresh"); - refresh.addActionListener(new ObservateurChangeGroupe(m, g)); - this.pan.add(refresh); - this.pan.add(new JLabel("Type: "+g.getType().name()+"\t || \t id="+String.valueOf(g.getId()), JLabel.CENTER)); - this.pan.add(new JLabel("Sous groupe:",JLabel.CENTER)); - if(g.getSousGroupes().size()>0){ - JPanel sous=new JPanel(new GridLayout(g.getSousGroupes().size(), 1)); - for(Groupe gr: g.getSousGroupes()){ - JButton b=new JButton(gr.getName()); - boolean contenu=false; - for(Groupe t: this.appartient){ - if(t.getId()==gr.getId()){ - contenu=true; - break; - } - } - if(contenu){ - b.addActionListener(new ObservateurChangeGroupe(m, gr)); - }else{ - b.setBackground(Color.RED); - } - sous.add(b); - } - this.pan.add(new JScrollPane(sous)); - } - } - } - /** - * permet de modifier le groupe affiché - * @param g le nouveau groupe à afficher - */ - public void setG(Groupe g) { - this.g = g; - } - /** - * permet de modifier la liste des sous groupes - * @param appartient la nouvelle liste des sous groupes - */ - public void setAppartient(Set appartient) { - this.appartient = appartient; - } - /** - * Permet de récupérer le panel d'affichage. - * @return le panel d'affichage - */ - public JPanel getPan() { - return pan; - } -} diff --git a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MP/ETU/View/PanelEtudiant.java b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MP/ETU/View/PanelEtudiant.java deleted file mode 100644 index f8dccd6..0000000 --- a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MP/ETU/View/PanelEtudiant.java +++ /dev/null @@ -1,41 +0,0 @@ -package fr.iutfbleau.projetIHM2022FI2.MP.ETU.View; - -import javax.swing.JLabel; -import javax.swing.JPanel; - -import fr.iutfbleau.projetIHM2022FI2.API.Etudiant; - -import javax.swing.JButton; -import java.awt.*; -import java.awt.event.ActionListener; - - -public class PanelEtudiant extends JPanel{ - - // bouton déplacement - private JButton deplacer; - /** - * Constructeur du panel d'affichage d'un étudiant - * @param e l'étudiant à afficher - * @param concerner si l'étudiant à afficher est l'étudiant logué - */ - public PanelEtudiant(Etudiant e, boolean concerner){ - super(new GridLayout(1,2,20,10)); - JLabel label=new JLabel(" "+e.getNom()+" "+e.getPrenom()+" "+e.getId(), JLabel.LEFT); - label.setFont(new Font(Font.SANS_SERIF, Font.PLAIN, 20)); - - this.add(label); - this.deplacer=new JButton("changer de groupe"); - if(concerner==true) - this.add(this.deplacer); - } - - - /** - * Ajoute un listener au bouton de changement de groupe - * @param a le listener - */ - public void addActionChangeListener(ActionListener a){ - this.deplacer.addActionListener(a); - } -} diff --git a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MP/EtudiantNP.java b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MP/EtudiantNP.java deleted file mode 100644 index b7d13f1..0000000 --- a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MP/EtudiantNP.java +++ /dev/null @@ -1,74 +0,0 @@ -package fr.iutfbleau.projetIHM2022FI2.MP; -import fr.iutfbleau.projetIHM2022FI2.API.*; -import java.util.*; -/** - * Un étudiant - */ - -public class EtudiantNP implements Etudiant{ - - // auto-incrément des étudiants - private static int nextId=0; - // id de l'étudiant - private int id; - // nom et prénom de l'étudiant - private String nom, prenom; - - /** - * Constructeur d'un étudiant. - * @param nom le nom de l'étudiant - * @param prenom le prénom de l'étudiant - * - */ - public EtudiantNP(String nom, String prenom){ - Objects.requireNonNull(nom,"On ne peut pas créer un étudiant avec un nom null"); - Objects.requireNonNull(prenom,"On ne peut pas créer un étudiant avec un nom null"); - // auto incrément de l'id - this.id=++this.nextId; - this.nom=nom; - this.prenom=prenom; - } - - /** - * Constructeur d'un étudiant. - * @param nom le nom de l'étudiant - * @param prenom le prénom de l'étudiant - * @param id l'id de l'étudiant - */ - public EtudiantNP(String nom, String prenom, int id){ - Objects.requireNonNull(nom,"On ne peut pas créer un étudiant avec un nom null"); - Objects.requireNonNull(prenom,"On ne peut pas créer un étudiant avec un nom null"); - if(id>=this.nextId){ - this.nextId=id; - } - this.id=id; - this.nom=nom; - this.prenom=prenom; - } - - /** - * permet de récupérer l'identifiant de l'étudiant. - * @return l'identifiant. - */ - public int getId(){ - return this.id; - } - - /** - * permet de récupérer - * @return le nom de l'étudiant. - */ - public String getNom(){ - return this.nom; - } - - /** - * permet de récupérer - * @return le prénom de l'étudiant - */ - public String getPrenom(){ - return this.prenom; - } - - -} diff --git a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MP/GroupeNP.java b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MP/GroupeNP.java deleted file mode 100644 index ac11a0c..0000000 --- a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MP/GroupeNP.java +++ /dev/null @@ -1,254 +0,0 @@ -package fr.iutfbleau.projetIHM2022FI2.MP; -import fr.iutfbleau.projetIHM2022FI2.API.*; -import java.util.*; -/** - * Un groupe - */ - -public class GroupeNP implements Groupe { - - //auto-incrément des groupes. (NB. inutile, mais ça fair un exemple d'attribut statique). - private static int nextId=0; - // attributs naturels induits par getter de l'interface Groupe - private int id; - // nom du groupe - private String name; - // bornes limitatives du groupe - private int min,max; - // type de groupe - private TypeGroupe type; - // groupe père - private Groupe pointPoint; - // On utilise une interface set pour les sous-groupes et pour les membres (ce sont bien des ensembles en pratique). - private Set sousGroupes; - // Liste des étudiants du groupe - private Set membresDuGroupe; - - /** - * Nouveau groupe vide de type ROOT sans étudiants, sans sous-Groupe - * - * @param name le nom du groupe - * @param min le nombre minimum d'étudiants - * @param max le nombre maximum d'étudiants - */ - public GroupeNP(String name, int min, int max){ - Objects.requireNonNull(name,"On ne peut pas créer un groupe dont le nom est null"); - this.id=++this.nextId; - this.name=name; - this.min=min; - this.max=max; - this.type=TypeGroupe.ROOT; - this.pointPoint=this; - this.sousGroupes=new LinkedHashSet(); - this.membresDuGroupe=new LinkedHashSet(); - } - /** - * Nouveau groupe vide de type FREE sans étudiants, sans sous-Groupe - * - * @param name le nom du groupe - * @param min le nombre minimum d'étudiants - * @param max le nombre maximum d'étudiants - * @param pere le groupe père - * @param id l'id du groupe - * @param type le type du groupe - * - * - */ - public GroupeNP(int id, String name, int min, int max, TypeGroupe type, Groupe pere){ - Objects.requireNonNull(name,"On ne peut pas créer un groupe dont le nom est null"); - this.id=id; - if(id>this.nextId){ - this.nextId=id; - } - this.name=name; - this.min=min; - this.max=max; - this.type=type; - if(pere==null){ - this.pointPoint=this; - }else{ - this.pointPoint=pere; - } - this.sousGroupes=new LinkedHashSet(); - this.membresDuGroupe=new LinkedHashSet(); - } - - /** - * Nouveau groupe vide de type FREE sans étudiants, sans sous-Groupe - * - * @param name le nom du groupe - * @param min le nombre minimum d'étudiants - * @param max le nombre maximum d'étudiants - * @param pere le groupe père - * - */ - public GroupeNP(Groupe pere, String name, int min, int max){ - Objects.requireNonNull(pere,"On ne peut pas créer un groupe dont le père est null"); - Objects.requireNonNull(name,"On ne peut pas créer un groupe dont le nom est null"); - this.id=++this.nextId; - this.name=name; - this.min=min; - this.max=max; - this.type=TypeGroupe.FREE; - this.pointPoint=pere; - this.sousGroupes=new LinkedHashSet(); - 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). - * - * @param pere le groupe père - */ - public GroupeNP(Groupe pere){ - Objects.requireNonNull(pere,"On ne peut pas créer un groupe dont le père est null"); - this.id=++this.nextId; - this.name=pere.getName()+"_PARTITION_"+ this.id; - this.min=pere.getMin(); - this.max=pere.getMax(); - this.type=TypeGroupe.PARTITION; - this.pointPoint=pere; - this.sousGroupes= new LinkedHashSet(); - this.membresDuGroupe= pere.getEtudiants(); - } - - /** - * Ajoute un étudiant. Se comporte comme add de l'interface Set. - * - * @param e l'étudiant à ajouter - * - * @return true iff e est ajouté - */ - public boolean addEtudiant(Etudiant e){ - Objects.requireNonNull(e,"On ne peut pas ajouter un Étudiant qui est null"); - return this.membresDuGroupe.add(e); - } - - /** - * Enlève un étudiant. Se comporte comme remove de l'interface Set. - * - * @param e l'étudiant à enlever - * - * @return true iff e est enlevé - */ - public boolean removeEtudiant(Etudiant e){ - Objects.requireNonNull(e,"On ne peut pas enlever un Étudiant qui est null"); - return this.membresDuGroupe.remove(e); - } - - /** - * Ajoute un sous-groupe. Se comporte comme add de l'interface Set. - * vérifie que le groupe passé en argument a bien renseigné this comme son père. - * - * @param g le groupe à ajouter - * - * @return true iff g est ajouté - */ - public boolean addSousGroupe(Groupe g){ - Objects.requireNonNull(g,"On ne peut pas ajouter un sous-groupe qui est null"); - if (this.equals(g.getPointPoint())) - return this.sousGroupes.add(g); - else throw new IllegalArgumentException("on ne peut pas ajouter un sous-groupe ont le père n'est pas this"); - } - - /** - * Enlève un groupe. Se comporte comme remove de l'interface Set. - * - * @param g le sous-groupe à enlever - * - * @return true iff e est enlevé - */ - public boolean removeSousGroupe(Groupe g){ - Objects.requireNonNull(g,"On ne peut pas enlever un Étudiant qui est null"); - return this.sousGroupes.remove(g); - } - - - /** - * permet de récupérer l'identifiant d'un groupe (référence interne sans intérêt irl). - * @return l'identifiant. - */ - public int getId(){ - return this.id; - } - - /** - * permet de récupérer le nom d'un groupe (utile irl). - * @return le nom. - */ - public String getName(){ - return this.name; - } - - /** - * permet de récupérer le nombre minimum d'étudiants souhaités dans le groupe. - * @return le minimum souhaité - */ - public int getMin(){ - return this.min; - } - - /** - * permet de récupérer le nombre maximum d'étudiants souhaités dans un groupe. - * @return le maximum souhaité - */ - public int getMax(){ - return this.max; - } - - /** - * permet de récupérer le nombre d'étudiants dans ce groupe. - * @return le nombre de places prises (pas forcément limité entre Min et Max, mais c'est le but) - */ - public int getSize(){ - return this.membresDuGroupe.size(); - } - - /** - * permet de récupérer la nature du groupe - * @return le type du groupe - */ - public TypeGroupe getType(){ - return type; - } - - /** - * permet de récupérer le groupe père - * un groupe racine devrait retourner lui-même - * - * @return le père - */ - public Groupe getPointPoint(){ - return this.pointPoint; - } - - /** - * Potentiellement "vide" - * Attention nous renvoyons l'ensemble sans le copier - * - * @return l'ensemble des sous-groupes. - */ - public Set 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/PROF/Model/ModelProf.java b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MP/PROF/Model/ModelProf.java deleted file mode 100644 index 45feaa0..0000000 --- a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MP/PROF/Model/ModelProf.java +++ /dev/null @@ -1,325 +0,0 @@ -package fr.iutfbleau.projetIHM2022FI2.MP.PROF.Model; -import javax.swing.*; -import java.awt.*; -import java.util.Set; -import java.util.HashSet; -import fr.iutfbleau.projetIHM2022FI2.API.AbstractChangementFactory; -import fr.iutfbleau.projetIHM2022FI2.API.AbstractGroupeFactory; -import fr.iutfbleau.projetIHM2022FI2.API.Changement; -import fr.iutfbleau.projetIHM2022FI2.API.Etudiant; -import fr.iutfbleau.projetIHM2022FI2.API.Groupe; -import fr.iutfbleau.projetIHM2022FI2.API.TypeGroupe; -import fr.iutfbleau.projetIHM2022FI2.MP.AbstractChangementFactoryNP; -import fr.iutfbleau.projetIHM2022FI2.MP.AbstractGroupeFactoryNP; -import fr.iutfbleau.projetIHM2022FI2.MP.PROF.View.FenetreEtudiant; -import fr.iutfbleau.projetIHM2022FI2.MP.PROF.View.FenetreGroupe; -import fr.iutfbleau.projetIHM2022FI2.API.Model; -import fr.iutfbleau.projetIHM2022FI2.Permanent.Controller.ObservateurFenetre; -import fr.iutfbleau.projetIHM2022FI2.Permanent.View.Chargement; - -/** - * Le Model de L'IHM - */ -public class ModelProf implements Model{ - - // le panel qui contient la fenetre de groupe - private JPanel panGroupe; - // la fenetre de groupe - private FenetreGroupe fenGr; - //la fenetre d'etudiant - private FenetreEtudiant fenEtu; - // le groupe courant - private AbstractGroupeFactory promo; - // le changement courant - private AbstractChangementFactory changement; - // la fenetre principale - private JFrame fenetre; - - /** - * Constructeur du Model. - */ - public ModelProf(){ - this.fenetre=new JFrame(); - this.fenetre.setSize(1200, 720); - this.fenetre.setLocation(100,100); - this.fenetre.addWindowListener(new ObservateurFenetre()); - this.fenetre.setLayout(new GridLayout(1,2)); - this.fenetre.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE); - this.fenetre.setMinimumSize(this.fenetre.getSize()); - Chargement ch=new Chargement(this.fenetre); - this.promo=new AbstractGroupeFactoryNP(this.fenetre); - if(this.promo.getPromotion()==null){ - this.promo=null; - } - ch.dispose(); - this.fenetre.setVisible(true); - if(this.promo==null){ - this.fenGr=new FenetreGroupe(null, this); - this.fenEtu=new FenetreEtudiant(null); - this.changement=null; - }else{ - this.changement=new AbstractChangementFactoryNP(promo, this.fenetre); - this.fenGr=new FenetreGroupe(this.promo.getPromotion(), this); - this.fenEtu=new FenetreEtudiant(this.promo.getPromotion()); - } - this.panGroupe=new JPanel(new GridLayout(1,1)); - if(this.promo!=null){ - this.showGroupe(this.promo.getPromotion()); - }else{ - this.showGroupe(null); - } - } - - - @Override - /** - * Fonction pour refresh/changer de groupe d'affichage - * @param g le groupe a afficher - */ - public void showGroupe(Groupe g){ - if(g!=null) - g=this.promo .refreshALL(g); - this.panGroupe.removeAll(); - this.fenGr=new FenetreGroupe(g, this); - this.fenEtu=new FenetreEtudiant(g); - this.fenetre.getContentPane().removeAll(); - this.panGroupe.add(this.fenGr.getPan()); - this.panGroupe.revalidate(); - this.fenetre.add(this.panGroupe); - JScrollPane scroll=new JScrollPane(this.fenEtu.getPan()); - scroll.getVerticalScrollBar().setUnitIncrement(15); - this.fenetre.add(scroll); - this.fenetre.revalidate(); - } - @Override - /** - * getteur de la fenetre - * @return JFrame la fenetre - */ - public JFrame getFenetre() { - return fenetre; - } - /** - * permet d'obtenir l'ensemble des etudiants - * @return - */ - @Override - public Set getEtudiant(){ - return this.promo.getPromotion().getEtudiants(); - } - - // ************************** - // FONCTION POUR LES CHANGEMENTS - // ****************************** - /** - * Créer un changement depuis le groupe courant - * @param e l'etudiant - * @param b le groupe a changer - */ - @Override - public void changeGroupe(Etudiant e, Groupe b){ - if(b==null) - return; - b=this.promo.refreshALL(b); - if(b.getEtudiants()!=null && b.getMax()>b.getEtudiants().size()+1){ - if(b.getEtudiants().size()>this.fenGr.getG().getEtudiants().size()){ - JPanel myPanel= new JPanel(new GridLayout(2,1)); - JTextField xField = new JTextField(100); - xField.setMinimumSize(new Dimension(100, 100)); - xField.setPreferredSize(new Dimension(100,100)); - myPanel.add(new JLabel("Ce Groupe est plus grand que le votre raison du changement:")); - myPanel.add(xField); - if(JOptionPane.showConfirmDialog(this.fenetre, myPanel, "Changer dans quel Groupe ?", JOptionPane.OK_CANCEL_OPTION)==JOptionPane.OK_OPTION){ - //IL faut que l'etudiant detaile un minimun la raison - if(xField.getText().length()>5){ - this.changement.createChangement(this.fenGr.getG(), e, b, xField.getText()); - }else{ - JOptionPane.showMessageDialog(this.fenetre, "veuillez detailler votre raison", "erreur", JOptionPane.ERROR_MESSAGE); - } - } - }else{ - this.changement.createChangement(this.fenGr.getG(), e, b); - } - }else{ - JOptionPane.showMessageDialog(this.fenetre, "impossible trop d'etudiant dans l'autre Groupe", "erreur", JOptionPane.ERROR_MESSAGE); - } - this.showGroupe(this.fenGr.getG()); - } - /** - * Retourn les groupe auquel on peut demander a changer depuis le groupe courant - * - * @return la liste des groupes - */ - @Override - public Set 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; - } - /** - * Fonction pour ajouter un étudiant au groupe - * @param g - * @param e - * @return boolean pour savoir si il a pus être ajouter - */ - @Override - public boolean addEtudiant(Groupe g, Etudiant e) { - // TODO Auto-generated method stub - return false; - } - - /** - * Fonction pour supprimer un groupe - * @param g le groupe a supprimer - */ - @Override - public void delete(Groupe g) { - // TODO Auto-generated method stub - - } - - - /** - * Fonction pour renomer un groupe - * @param name - * @param g - */ - @Override - public void rename(String name, Groupe g) { - // TODO Auto-generated method stub - - } - - - /** - * Fonction permetant de créer une partition d'un groupe - * @param g le groupe a partitionner - * @param n le nombre de partition - * @param name le nom des partition - */ - @Override - public void partition(Groupe g, int n, String name) { - // TODO Auto-generated method stub - - } - - - /** - * Fonction permettant de créer un sous-groupe d'un groupe - * @param g le groupe parent - * @param name le nom du sous-groupe - * @param min le nombre min d'etudiant - * @param max le nombre max d'etudiant - * @param ajout la liste des étudiants a ajouter au groupe - */ - @Override - public void free(Groupe g, String name, int min, int max, Set ajout) { - // TODO Auto-generated method stub - - } - /** - * ajoute une nouvelle promotion - * @param min le nombre min - * @param max le nombre max - * @param name le nom - * @param ajout les etudiant a ajouter a la promo - */ - - @Override - public void addPromo(int min, int max, String name, Set ajout) { - // TODO Auto-generated method stub - - } - -/** - * Fonction pour supprimer un etudiant. - * @param e l'etudiant a supprimer - * @return boolean true si l'etudiant a ete supprimer, false sinon - */ - @Override - public boolean deleteEtu(Etudiant e) { - // TODO Auto-generated method stub - return false; - } - /** - * Fonction pour afficher une fenetre listnatn les changements - * - */ - @Override - public void listChange() { - // TODO Auto-generated method stub - - } - - - /** - * Fonction pour effectuer un changement - * @param Changement le changement a effecteur - */ - @Override - public void change(Changement change) { - // TODO Auto-generated method stub - - } - - /** - * Fonction supprimant un changement - * - * @param to_delete la changement a delete - */ - @Override - public void deleteChange(Changement to_delete) { - // TODO Auto-generated method stub - - } - - - /** - * Fonction affichant les raison d'un changement - * - * @param change le changement - */ - @Override - public void showRaisonChange(Changement change) { - // TODO Auto-generated method stub - - } - - /** - * Fonction affichant une fentre pour trouver un etudiant et tous ses groupes asociée - */ - @Override - public void findEtu() { - // TODO Auto-generated method stub - - } - - /** - * Fonction pour recuperer les etudiant avec ce nom - * @param name le nom de(s) etudiants - * @return la liste - */ - @Override - public Set getEtu(String name) { - // TODO Auto-generated method stub - return null; - } - - /** - *affiche les groupe d'un etudiant - * @param e l'etudiant - */ - @Override - public void showGroupOfEtudiant(Etudiant e) { - // TODO Auto-generated method stub - - } - -} 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 deleted file mode 100644 index 3eb3037..0000000 --- a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MP/PROF/View/FenetreEtudiant.java +++ /dev/null @@ -1,67 +0,0 @@ -package fr.iutfbleau.projetIHM2022FI2.MP.PROF.View; - - -import javax.swing.JLabel; -import javax.swing.JPanel; - -import java.awt.*; -import java.util.LinkedHashSet; -import java.util.Set; - -import fr.iutfbleau.projetIHM2022FI2.API.Etudiant; -import fr.iutfbleau.projetIHM2022FI2.API.Groupe; - -/** - * Affichage des édudiants d'un groupe - * - */ -public class FenetreEtudiant{ - // liste des étudiants - private Set etu; - // panel - private JPanel pan; - - /** - * Constructeur de l'affichage des étudiants - * @param g le groupe - */ - public FenetreEtudiant(Groupe g){ - this.pan=new JPanel(); - if(g!=null){ - this.etu=g.getEtudiants(); - }else{ - this.etu=new LinkedHashSet<>(); - } - this.draw(); - } - /** - * Gère l'affichage des étudiants - */ - private void draw(){ - if(this.etu.size()!=0){ - this.pan.setLayout(new GridLayout(this.etu.size(), 1, 30, 0)); - for(Etudiant e: this.etu){ - PanelEtudiant p=new PanelEtudiant(e); - this.pan.add(p); - } - }else{ - this.pan.setLayout(new FlowLayout()); - this.pan.add(new JLabel("Il n'y a pas d'étudiant")); - } - } - /** - * rafraichit l'affichage. - */ - public void refresh(){ - this.pan.removeAll(); - this.draw(); - this.pan.revalidate(); - } - /** - * premet d'obtenir le panel de l'affichage - * @return le panel de l'affichage - */ - public JPanel getPan() { - return pan; - } -} 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 deleted file mode 100644 index 4d3f356..0000000 --- a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MP/PROF/View/FenetreGroupe.java +++ /dev/null @@ -1,106 +0,0 @@ -package fr.iutfbleau.projetIHM2022FI2.MP.PROF.View; - -import javax.swing.JButton; -import javax.swing.JLabel; -import javax.swing.JPanel; -import javax.swing.JScrollPane; -import java.awt.Font; -import java.awt.GridLayout; -import fr.iutfbleau.projetIHM2022FI2.API.Groupe; -import fr.iutfbleau.projetIHM2022FI2.API.TypeGroupe; -import fr.iutfbleau.projetIHM2022FI2.API.Model; -import fr.iutfbleau.projetIHM2022FI2.Permanent.Controller.ObservateurChangeGroupe; - -/** - * Affichage d'un groupe - * -*/ -public class FenetreGroupe{ - // le groupe affiché - private Groupe g; - // le panel d'affichage - private JPanel pan; - // le modèle - private Model m; - - /** - * Constructeur de l'affichage d'un groupe - * @param g le groupe à afficher - * @param m le model - */ - public FenetreGroupe(Groupe g, Model m){ - super(); - this.g=g; - this.m=m; - this.pan=new JPanel(); - this.draw(); - } - /** - * permet de récupérer le groupe affiché - * @return le groupe affiché - */ - public Groupe getG() { - return this.g; - } - /** - * rafraichit l'affichage du groupe - */ - public void refresh(){ - this.pan.removeAll(); - this.draw(); - this.pan.revalidate(); - } - /** - * gère l'affichage du groupe - */ - private void draw(){ - if(g!=null){ - int taille=1; - if(g.getType()==TypeGroupe.PARTITION || g.getType()==TypeGroupe.ROOT) - taille--; - if(g.getSousGroupes().size()>0) - this.pan.setLayout(new GridLayout(7, 1)); - else{this.pan.setLayout(new GridLayout(6, 1));} - JPanel tache=new JPanel(new GridLayout(1,taille)); - - if(g.getType()!=TypeGroupe.ROOT){ - JButton bout=new JButton(g.getPointPoint().getName()); - bout.addActionListener(new ObservateurChangeGroupe(m, g.getPointPoint())); - tache.add(bout); - } - this.pan.add(tache); - JLabel titre=new JLabel("Groupe : "+g.getName(), JLabel.CENTER); - titre.setFont(new Font(Font.SERIF, Font.BOLD, titre.getFont().getSize()+10)); - this.pan.add(titre); - this.pan.add(new JLabel("min= "+String.valueOf(g.getMin())+"\t || \t max= "+String.valueOf(g.getMax()),JLabel.CENTER)); - JButton refresh= new JButton("Resfresh"); - refresh.addActionListener(new ObservateurChangeGroupe(m, g)); - this.pan.add(refresh); - this.pan.add(new JLabel("Type: "+g.getType().name()+"\t || \t id="+String.valueOf(g.getId()), JLabel.CENTER)); - this.pan.add(new JLabel("Sous groupe:",JLabel.CENTER)); - if(g.getSousGroupes().size()>0){ - JPanel sous=new JPanel(new GridLayout(g.getSousGroupes().size(), 1)); - for(Groupe gr: g.getSousGroupes()){ - JButton b=new JButton(gr.getName()); - b.addActionListener(new ObservateurChangeGroupe(m, gr)); - sous.add(b); - } - this.pan.add(new JScrollPane(sous)); - } - } - } - /** - * permet de modifier le groupe affiché - * @param g le nouveau groupe à afficher - */ - public void setG(Groupe g) { - this.g = g; - } - /** - * Permet de récupérer le panel d'affichage. - * @return le panel d'affichage - */ - public JPanel getPan() { - return pan; - } -} 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 deleted file mode 100644 index e174084..0000000 --- a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MP/PROF/View/PanelEtudiant.java +++ /dev/null @@ -1,21 +0,0 @@ -package fr.iutfbleau.projetIHM2022FI2.MP.PROF.View; - -import javax.swing.JLabel; -import javax.swing.JPanel; - -import fr.iutfbleau.projetIHM2022FI2.API.Etudiant; -import java.awt.*; - -public class PanelEtudiant extends JPanel{ - /** - * Constructeur du panel d'affichage d'un étudiant - * @param e l'étudiant à afficher - * @param change si l'étudiant peut être déplacé - */ - public PanelEtudiant(Etudiant e){ - super(new GridLayout(1,1,20, 20)); - JLabel label=new JLabel(" "+e.getNom()+" "+e.getPrenom()+" "+e.getId(), JLabel.LEFT); - label.setFont(new Font(Font.SANS_SERIF, Font.PLAIN, 20)); - this.add(label); - } -} diff --git a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MP/ROOT/Controller/ActionChangement.java b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MP/ROOT/Controller/ActionChangement.java deleted file mode 100644 index 11f733f..0000000 --- a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MP/ROOT/Controller/ActionChangement.java +++ /dev/null @@ -1,47 +0,0 @@ -package fr.iutfbleau.projetIHM2022FI2.MP.ROOT.Controller; -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; - -import javax.swing.JButton; - -import fr.iutfbleau.projetIHM2022FI2.API.Changement; -import fr.iutfbleau.projetIHM2022FI2.API.Model; - -/** - * le controller pour les changements - */ -public class ActionChangement implements ActionListener{ - //le model - private Model m; - //le changement - private Changement change; - /** - * le constructeur - * - * @param m le model - * @param change le changement - * - */ - public ActionChangement(Model m, Changement change){ - this.m=m; - this.change=change; - } - /** - * méthode invoquée lors d'un clic sur un bouton - * @param e l'événement - */ - @Override - public void actionPerformed(ActionEvent e) { - String text=((JButton)e.getSource()).getText(); - if(text.equals("Supprimer")){ - this.m.deleteChange(change); - } - if(text.equals("Valider")){ - this.m.change(change); - } - if(text.equals("Raison")){ - this.m.showRaisonChange(change); - } - } - -} diff --git a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MP/ROOT/Controller/ActionListChange.java b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MP/ROOT/Controller/ActionListChange.java deleted file mode 100644 index 28e46fe..0000000 --- a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MP/ROOT/Controller/ActionListChange.java +++ /dev/null @@ -1,38 +0,0 @@ -package fr.iutfbleau.projetIHM2022FI2.MP.ROOT.Controller; -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; - -import javax.swing.JButton; - -import fr.iutfbleau.projetIHM2022FI2.API.Model; -/** - * listener pour la liste des étudiants - */ -public class ActionListChange implements ActionListener{ - // le model - private Model m; - /** - * le constructeur - * - * @param m le model - * - */ - public ActionListChange(Model m){ - this.m=m; - } - /** - * méthode invoquée lors d'un clic sur un bouton - * @param e l'événement - */ - @Override - public void actionPerformed(ActionEvent e) { - String text=((JButton)e.getSource()).getText(); - if(text.equals("Changement")){ - this.m.listChange(); - } - if(text.equals("Find Etu")){ - this.m.findEtu(); - } - } - -} diff --git a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MP/ROOT/Controller/ActionListenerNouveauEtu.java b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MP/ROOT/Controller/ActionListenerNouveauEtu.java deleted file mode 100644 index e79e1da..0000000 --- a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MP/ROOT/Controller/ActionListenerNouveauEtu.java +++ /dev/null @@ -1,49 +0,0 @@ -package fr.iutfbleau.projetIHM2022FI2.MP.ROOT.Controller; - -import java.awt.event.ActionListener; - -import javax.swing.*; - -import fr.iutfbleau.projetIHM2022FI2.MP.ROOT.View.FenetreSelectionEtu; - -import java.awt.event.ActionEvent; - -/** - * listener pour la création d'étudiants - */ -public class ActionListenerNouveauEtu implements ActionListener{ - // la fenetre de sélection - private FenetreSelectionEtu pere; - /** - * le constructeur - * @param pere la fenetre de sélection - */ - public ActionListenerNouveauEtu(FenetreSelectionEtu pere){ - this.pere=pere; - } - /** - * méthode invoquée lors d'un clic sur un bouton - * @param e l'événement - */ - @Override - public void actionPerformed(ActionEvent e) { - if(e.getActionCommand()=="tous"){ - this.pere.addAll(); - }else{ - JPanel myPanel = new JPanel(); - JTextField xField = new JTextField(20); - JTextField yField = new JTextField(20); - myPanel.add(new JLabel("Nom:")); - myPanel.add(xField); - myPanel.add(Box.createHorizontalStrut(15)); - myPanel.add(new JLabel("Prenom:")); - myPanel.add(yField); - int result = JOptionPane.showConfirmDialog(this.pere, myPanel, - "Entrer le nombre et le nom des Partitions", JOptionPane.OK_CANCEL_OPTION); - if(result==JOptionPane.YES_OPTION){ - this.pere.addEtudiant(xField.getText(), yField.getText()); - } - } - } - -} diff --git a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MP/ROOT/Controller/ActionListenerSuprEtu.java b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MP/ROOT/Controller/ActionListenerSuprEtu.java deleted file mode 100644 index daf66fd..0000000 --- a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MP/ROOT/Controller/ActionListenerSuprEtu.java +++ /dev/null @@ -1,37 +0,0 @@ -package fr.iutfbleau.projetIHM2022FI2.MP.ROOT.Controller; -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; - -import javax.swing.JOptionPane; - -import fr.iutfbleau.projetIHM2022FI2.API.Etudiant; -import fr.iutfbleau.projetIHM2022FI2.API.Model; -/** - * le controller pour la suppression d'etudiants - */ -public class ActionListenerSuprEtu implements ActionListener { - // l'etudiant a supprimer - public Etudiant etudiant; - // le model - public Model model; - /** - * le constructeur - * @param m le model - * @param e l'etudiant a supprimer - */ - public ActionListenerSuprEtu(Model m, Etudiant e){ - this.model=m; - this.etudiant=e; - } - /** - * méthode invoquée lors d'un clic sur un bouton - * @param e l'événement - */ - @Override - public void actionPerformed(ActionEvent e) { - if(this.model.deleteEtu(this.etudiant)==false){ - JOptionPane.showMessageDialog(this.model.getFenetre(), "erreur trop peu d'etudiant dans le groupe/ les groupes fils", "erreur", JOptionPane.ERROR_MESSAGE); - } - } - -} diff --git a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MP/ROOT/Controller/ListenerFindBar.java b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MP/ROOT/Controller/ListenerFindBar.java deleted file mode 100644 index 1ae68dd..0000000 --- a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MP/ROOT/Controller/ListenerFindBar.java +++ /dev/null @@ -1,43 +0,0 @@ -package fr.iutfbleau.projetIHM2022FI2.MP.ROOT.Controller; - -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; - -import javax.swing.JButton; -import javax.swing.JTextField; - -import fr.iutfbleau.projetIHM2022FI2.API.Etudiant; -import fr.iutfbleau.projetIHM2022FI2.MP.ROOT.View.FindBarFenetre; -/** - * le controller pour la recherche d'etudiants - */ -public class ListenerFindBar implements ActionListener{ - // la fenetre de recherche - private FindBarFenetre fenetre; - // l'etudiant a rechercher - private Etudiant et; - /** - * le constructeur - * @param fenetre la fenetre de recherche - * @param e l'etudiant a rechercher - * - */ - public ListenerFindBar(FindBarFenetre fenetre, Etudiant e){ - this.fenetre=fenetre; - this.et=e; - } - /** - * méthode invoquée lors d'un clic sur un bouton - * @param e l'événement - */ - @Override - public void actionPerformed(ActionEvent e) { - String text=((JButton)e.getSource()).getText(); - if(text.equals("->")) - this.fenetre.search(((JTextField)((JButton)e.getSource()).getParent()).getText()); - else{ - this.fenetre.showGroupe(et); - } - } - -} diff --git a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MP/ROOT/Controller/ObservateurModifGroupe.java b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MP/ROOT/Controller/ObservateurModifGroupe.java deleted file mode 100644 index 6225e41..0000000 --- a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MP/ROOT/Controller/ObservateurModifGroupe.java +++ /dev/null @@ -1,183 +0,0 @@ -package fr.iutfbleau.projetIHM2022FI2.MP.ROOT.Controller; - -import java.awt.event.*; -import java.util.LinkedHashSet; -import fr.iutfbleau.projetIHM2022FI2.API.*; -import javax.swing.JOptionPane; -import fr.iutfbleau.projetIHM2022FI2.API.Groupe; -import fr.iutfbleau.projetIHM2022FI2.API.Model; -import fr.iutfbleau.projetIHM2022FI2.MP.ROOT.View.FenetreSelectionEtu; - -import javax.swing.*; -import java.util.Set; -/** - * le controller pour les groupes - */ -public class ObservateurModifGroupe implements ActionListener{ - //le model - private Model m; - //le groupe courant - private Groupe groupe; - /** - * le constructeur - * @param m le model - * @param g le groupe courant - */ - public ObservateurModifGroupe(Model m, Groupe g){ - this.m=m; - this.groupe=g; - } - /** - * méthode invoquée lors d'un clic sur un bouton - * @param e l'événement - */ - @Override - public void actionPerformed(ActionEvent e) { - if(e.getActionCommand()=="supr"){ - this.m.delete(this.groupe); - } - if(e.getActionCommand()=="new Groupe"){ - String g[]=new String[2]; - g[0]="Partition"; - g[1]="Free"; - int rep=JOptionPane.showOptionDialog(m.getFenetre(), "Type du nouveau Groupe","Type", JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE, null, g, g[0]); - if(rep==JOptionPane.YES_OPTION){ - try{ - - JPanel myPanel = new JPanel(); - JTextField xField = new JTextField(5); - JTextField yField = new JTextField(20); - myPanel.add(new JLabel("Nombre:")); - myPanel.add(xField); - myPanel.add(Box.createHorizontalStrut(15)); - myPanel.add(new JLabel("Nom:")); - myPanel.add(yField); - int result = JOptionPane.showConfirmDialog(m.getFenetre(), myPanel, - "Entrer le nombre et le nom des Partitions", JOptionPane.OK_CANCEL_OPTION); - if (result == JOptionPane.OK_OPTION) { - int nb=Integer.parseInt(xField.getText()); - if(nb>this.groupe.getEtudiants().size()){ - JOptionPane.showMessageDialog(m.getFenetre(), "nombre de partition trop grand", "erreur", JOptionPane.ERROR_MESSAGE); - return; - } - m.partition(this.groupe, nb, yField.getText()); - } - }catch(NumberFormatException er){ - JOptionPane.showMessageDialog(m.getFenetre(), "erreur dans le nombre de partition", "erreur", JOptionPane.ERROR_MESSAGE); - } - } - if(rep==JOptionPane.NO_OPTION){ - try{ - JPanel myPanel = new JPanel(); - JTextField xField = new JTextField(5); - JTextField zField = new JTextField(5); - JTextField yField = new JTextField(20); - myPanel.add(new JLabel("Nom:")); - myPanel.add(yField); - myPanel.add(Box.createHorizontalStrut(15)); - myPanel.add(new JLabel("Min:")); - myPanel.add(xField); - myPanel.add(new JLabel("Max:")); - myPanel.add(zField); - int result = JOptionPane.showConfirmDialog(m.getFenetre(), myPanel, - "Entrer le nombre et le nom des Partitions", JOptionPane.OK_CANCEL_OPTION); - if (result == JOptionPane.OK_OPTION) { - int min=Integer.parseInt(xField.getText()); - int max=Integer.parseInt(zField.getText()); - if(max>this.groupe.getMax() || min<=0 || max<=0 || min>max){ - JOptionPane.showMessageDialog(m.getFenetre(), "nombre min/max inchoérent", "erreur", JOptionPane.ERROR_MESSAGE); - return; - } - Set 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 - // *********************** -/** - * Fonction pour supprimer un etudiant. - * @param e l'etudiant a supprimer - * @return boolean true si l'etudiant a ete supprimer, false sinon - */ - @Override - public boolean deleteEtu(Etudiant e){ - if(this.deleteEtutoChildren(e, this.fenGr.getG())){ - this.promo.dropFromGroupe(this.fenGr.getG(), e); - this.showGroupe(this.fenGr.getG()); - return true; - }else{ - return false; - } - } -/** - * Permet de savoir si un étudiant peut être supprimé - * @param e l'étudiant à supprimer - * @param g le groupe dans lequel on cherche - * @return true si possible, false sinon - */ - private boolean deleteEtutoChildren(Etudiant e, Groupe g){ - if(g.getMax() ajout){ - Chargement ch=new Chargement(this.fenetre); - this.fenetre.setVisible(false); - //on creer le groupe - this.promo.createGroupe(g, name, min, max); - Groupe creer=null; - //on le recupere - for(Groupe gr:g.getSousGroupes()){ - if(gr.getName()==name){ - creer=gr; - break; - } - } - //on y ajoute les étudiant - int n=0; - for(Etudiant e:ajout){ - if(this.addEtudiant(creer, e)==false) - n++; - } - creer=this.promo.refreshALL(creer); - ch.dispose(); - this.fenetre.setVisible(true); - if(n>0) - JOptionPane.showMessageDialog(this.fenetre, "erreur impossible d'ajouter "+n+" etudiants par manque de place dans le groupe de ses parents", "erreur", JOptionPane.ERROR_MESSAGE); - //Si finalement avec les etudiants qui n'ont pas pus être ajouter le min n'est pas atteint - if(creer.getEtudiants().size()+1<=creer.getMin()){ - //On le supprime - this.promo.deleteGroupe(creer); - JOptionPane.showMessageDialog(this.fenetre, "en raison du manque d'etudiant pour le nombre min le groupe n'a pas pus être créer", "errer", JOptionPane.ERROR_MESSAGE); - } - this.showGroupe(g); - } - /** - * ajoute une nouvelle promotion - * @param min le nombre min - * @param max le nombre max - * @param name le nom - * @param ajout les etudiant a ajouter a la promo - */ - @Override - public void addPromo(int min, int max, String name, Set ajout){ - Chargement ch=new Chargement(this.fenetre); - this.promo=new AbstractGroupeFactoryNP(name, min, max, this.fenetre); - this.changement=new AbstractChangementFactoryNP(this.promo, this.fenetre); - this.fenetre.setVisible(false); - for(Etudiant e:ajout){ - this.addEtudiant(this.promo.getPromotion(), e); - } - ch.dispose(); - this.fenetre.setVisible(true); - this.showGroupe(this.promo.getPromotion()); - } - - - /** - * Créer un changement depuis le groupe courant - * @param e l'etudiant - * @param b le groupe a changer - */ - @Override - public void changeGroupe(Etudiant e, Groupe b){ - if(b==null) - return; - b=this.promo.refreshALL(b); - if(b.getEtudiants()!=null && b.getMax()>b.getEtudiants().size()+1){ - if(b.getEtudiants().size()>this.fenGr.getG().getEtudiants().size()){ - JPanel myPanel= new JPanel(new GridLayout(2,1)); - JTextField xField = new JTextField(100); - xField.setMinimumSize(new Dimension(100, 100)); - xField.setPreferredSize(new Dimension(100,100)); - myPanel.add(new JLabel("Ce Groupe est plus grand que le votre raison du changement:")); - myPanel.add(xField); - if(JOptionPane.showConfirmDialog(this.fenetre, myPanel, "Changer dans quel Groupe ?", JOptionPane.OK_CANCEL_OPTION)==JOptionPane.OK_OPTION){ - //IL faut que l'etudiant detaile un minimun la raison - if(xField.getText().length()>5){ - this.changement.createChangement(this.fenGr.getG(), e, b, xField.getText()); - }else{ - JOptionPane.showMessageDialog(this.fenetre, "veuillez detailler votre raison", "erreur", JOptionPane.ERROR_MESSAGE); - } - } - }else{ - this.changement.createChangement(this.fenGr.getG(), e, b); - } - }else{ - JOptionPane.showMessageDialog(this.fenetre, "impossible trop d'etudiant dans l'autre Groupe", "erreur", JOptionPane.ERROR_MESSAGE); - } - this.showGroupe(this.fenGr.getG()); - } - /** - * Retourn les groupe auquel on peut demander a changer depuis le groupe courant - * - * @return la liste des groupes - */ - @Override - public Set 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() - */ - /** - * Fonction pour afficher une fenetre listnatn les changements - * - */ - @Override - public void listChange() { - this.fenChange=new FenetreChangement(changement, this); - JOptionPane.showMessageDialog(this.fenetre, new JScrollPane(this.fenChange), "liste des changements", JOptionPane.OK_OPTION); - } - /** - * Fonction pour effectuer un changement - * @param Changement le changement a effecteur - */ - @Override - public void change(Changement change) { - this.changement.applyChangement(change); - this.fenChange.refresh(); - if(change.getA()==this.fenGr.getG()){ - this.showGroupe(this.fenGr.getG()); - } - } - - /** - * Fonction supprimant un changement - * - * @param to_delete la changement a delete - */ - @Override - public void deleteChange(Changement to_delete) { - this.changement.deleteChangement(to_delete); - this.fenChange.refresh(); - } - - /** - * Fonction affichant les raison d'un changement - * - * @param change le changement - */ - @Override - public void showRaisonChange(Changement change) { - JOptionPane.showMessageDialog(this.fenetre, new JLabel(change.getRaison()), "Raison de la demande", JOptionPane.OK_OPTION); - } - /** - * Fonction affichant une fentre pour trouver un etudiant et tous ses groupes asociée - */ - @Override - public void findEtu() { - JScrollPane scroll=new JScrollPane(new FindBarFenetre(this).getPanel()); - scroll.getVerticalScrollBar().setUnitIncrement(5); - JOptionPane.showMessageDialog(this.fenetre, scroll, "chercher un etudiant", JOptionPane.OK_OPTION); - } - - /* (non-Javadoc) - * @see fr.iutfbleau.projetIHM2022FI2.API.Model#getEtu(java.lang.String) - */ - - /** - * Fonction pour recuperer les etudiant avec ce nom - * @param name le nom de(s) etudiants - * @return la liste - */ - @Override - public Set getEtu(String name) { - return this.promo.getEtudiants(name); - } - /** - *affiche les groupe d'un etudiant - * @param e l'etudiant - */ - @Override - public void showGroupOfEtudiant(Etudiant e){ - Set 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/MP/ROOT/View/FenetreChangement.java b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MP/ROOT/View/FenetreChangement.java deleted file mode 100644 index 63bdee6..0000000 --- a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MP/ROOT/View/FenetreChangement.java +++ /dev/null @@ -1,78 +0,0 @@ -package fr.iutfbleau.projetIHM2022FI2.MP.ROOT.View; - -import javax.swing.JButton; -import javax.swing.JLabel; -import javax.swing.JPanel; -import java.awt.GridLayout; -import java.awt.Color; -import java.awt.FlowLayout; -import fr.iutfbleau.projetIHM2022FI2.API.AbstractChangementFactory; -import fr.iutfbleau.projetIHM2022FI2.API.Changement; -import fr.iutfbleau.projetIHM2022FI2.API.Model; -import fr.iutfbleau.projetIHM2022FI2.MP.ROOT.Controller.ActionChangement; -/** - * Affichage des changements - * - */ -public class FenetreChangement extends JPanel{ - // les changements a afficher - private AbstractChangementFactory change; - // le modèle - private Model m; - - /** - * Constructeur de l'affichage des changements - * @param list la liste des changements - * @param m le mlodèle - */ - public FenetreChangement(AbstractChangementFactory list, Model m){ - this.change=list; - this.m=m; - this.draw(); - } - - /** - * gère l'affichage des changements - */ - public void draw(){ - if(this.change==null || this.change.getAllChangements().size()==0){ - this.setBackground(Color.RED); - this.setLayout(new FlowLayout()); - JLabel text=new JLabel("Aucune Demande de changement effectuer"); - text.setMinimumSize(this.getSize()); - this.add(text); - }else{ - this.setLayout(new GridLayout(this.change.getAllChangements().size(), 6, 20, 0)); - for(Changement ch: this.change.getAllChangements()){ - this.add(new JLabel("L'etudiant "+ch.getEtu().getNom()+" "+ch.getEtu().getPrenom())); - this.add(new JLabel("veut passer du groupe "+ch.getA().getName())); - this.add(new JLabel(" au groupe "+ch.getB().getName())); - JButton raison; - if(ch.getRaison()==null){ - raison=new JButton("Type 1"); - }else{ - raison=new JButton("Raison"); - raison.addActionListener(new ActionChangement(this.m, ch)); - } - this.add(raison); - JButton supr=new JButton("Supprimer"); - supr.addActionListener(new ActionChangement(this.m, ch)); - JButton val=new JButton("Valider"); - val.addActionListener(new ActionChangement(this.m, ch)); - supr.setBackground(Color.RED); - val.setBackground(Color.GREEN); - this.add(val); - this.add(supr); - } - } - } - /** - * rafraichit l'affichage - */ - public void refresh(){ - this.removeAll(); - this.draw(); - this.revalidate(); - } - -} diff --git a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MP/ROOT/View/FenetreEtudiant.java b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MP/ROOT/View/FenetreEtudiant.java deleted file mode 100644 index 184886b..0000000 --- a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MP/ROOT/View/FenetreEtudiant.java +++ /dev/null @@ -1,103 +0,0 @@ -package fr.iutfbleau.projetIHM2022FI2.MP.ROOT.View; - - -import javax.swing.JButton; -import javax.swing.JLabel; -import javax.swing.JPanel; - -import java.awt.*; -import java.util.LinkedHashSet; -import java.util.Set; - -import fr.iutfbleau.projetIHM2022FI2.API.Etudiant; -import fr.iutfbleau.projetIHM2022FI2.API.Groupe; -import fr.iutfbleau.projetIHM2022FI2.API.TypeGroupe; -import fr.iutfbleau.projetIHM2022FI2.MP.ROOT.Controller.ActionListChange; -import fr.iutfbleau.projetIHM2022FI2.MP.ROOT.Controller.ActionListenerSuprEtu; -import fr.iutfbleau.projetIHM2022FI2.Permanent.Controller.ActionListenerChangeEtu; -import fr.iutfbleau.projetIHM2022FI2.API.Model; - -/** - * Affichage des édudiants d'un groupe - * - */ -public class FenetreEtudiant{ - //liste des étudiants - private Set etu; - // model - private Model m; - // panel - private JPanel pan; - // le type de groupe - private TypeGroupe type; - - /** - * Constructeur de l'affichage des étudiants - * @param g le groupe - * @param m le model - */ - public FenetreEtudiant(Groupe g, Model m){ - this.pan=new JPanel(); - this.m=m; - if(g!=null){ - this.type=g.getPointPoint().getType(); - this.etu=g.getEtudiants(); - }else{ - this.type=null; - this.etu=new LinkedHashSet<>(); - } - this.draw(); - } - /** - * Gère l'affichage des étudiants - */ - private void draw(){ - if(this.etu.size()!=0){ - this.pan.setLayout(new GridLayout(this.etu.size()+1, 1, 10, 0)); - JPanel bouton=new JPanel(new GridLayout(1, 2)); - JButton boutChange=new JButton("Changement"); - boutChange.addActionListener(new ActionListChange(this.m)); - JButton boutFind=new JButton("Find Etu"); - boutFind.addActionListener(new ActionListChange(this.m)); - bouton.add(boutChange); - bouton.add(boutFind); - this.pan.add(bouton); - - for(Etudiant e: this.etu){ - PanelEtudiant p; - if(type!=null && type==TypeGroupe.PARTITION){ - p=new PanelEtudiant(e, true); - }else{ - p=new PanelEtudiant(e, false); - } - p.addActionDeleteListener(new ActionListenerSuprEtu(m, e)); - p.addActionChangeListener(new ActionListenerChangeEtu(m, e)); - this.pan.add(p); - } - }else{ - this.pan.setLayout(new FlowLayout()); - this.pan.add(new JLabel("Il n'y a pas d'étudiant")); - } - } - /** - * rafraichit l'affichage. - */ - public void refresh(){ - this.pan.removeAll(); - this.draw(); - this.pan.revalidate(); - } - /** - * premet d'obtenir le panel de l'affichage - * @return le panel de l'affichage - */ - public JPanel getPan() { - return pan; - } - /** - * permet d'afficher la liste des demandes de changement - */ - public void listChange(){ - this.m.listChange(); - } -} diff --git a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MP/ROOT/View/FenetreGroupe.java b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MP/ROOT/View/FenetreGroupe.java deleted file mode 100644 index 637a26c..0000000 --- a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MP/ROOT/View/FenetreGroupe.java +++ /dev/null @@ -1,127 +0,0 @@ -package fr.iutfbleau.projetIHM2022FI2.MP.ROOT.View; - -import javax.swing.JButton; -import javax.swing.JLabel; -import javax.swing.JPanel; -import javax.swing.JScrollPane; - -import java.awt.Color; -import java.awt.Font; -import java.awt.GridLayout; -import fr.iutfbleau.projetIHM2022FI2.API.Groupe; -import fr.iutfbleau.projetIHM2022FI2.API.TypeGroupe; -import fr.iutfbleau.projetIHM2022FI2.MP.ROOT.Controller.ObservateurModifGroupe; -import fr.iutfbleau.projetIHM2022FI2.Permanent.Controller.ObservateurChangeGroupe; -import fr.iutfbleau.projetIHM2022FI2.API.Model; - -/** - * Affichage d'un groupe - * -*/ -public class FenetreGroupe{ - // le groupe affiché - private Groupe g; - // le panel d'affichage - private JPanel pan; - // le modèle - private Model m; - - /** - * Constructeur de l'affichage d'un groupe - * @param g le groupe à afficher - * @param m le model - */ - public FenetreGroupe(Groupe g, Model m){ - super(); - this.g=g; - this.m=m; - this.pan=new JPanel(); - this.draw(); - } - /** - * permet de récupérer le groupe affiché - * @return le groupe affiché - */ - public Groupe getG() { - return this.g; - } - /** - * rafraichit l'affichage du groupe - */ - public void refresh(){ - this.pan.removeAll(); - this.draw(); - this.pan.revalidate(); - } - /** - * gère l'affichage du groupe - */ - private void draw(){ - if(g!=null){ - int taille=5; - if(g.getType()==TypeGroupe.PARTITION || g.getType()==TypeGroupe.ROOT) - taille--; - if(g.getSousGroupes().size()>0) - this.pan.setLayout(new GridLayout(7, 1)); - else{this.pan.setLayout(new GridLayout(6, 1));} - JPanel tache=new JPanel(new GridLayout(1,taille)); - if(g.getType()!=TypeGroupe.ROOT){ - JButton bout=new JButton(g.getPointPoint().getName()); - bout.addActionListener(new ObservateurChangeGroupe(m, this.g.getPointPoint())); - tache.add(bout); - } - JButton renomer=new JButton("rename"); - renomer.addActionListener(new ObservateurModifGroupe(m, g)); - tache.add(renomer); - JButton ajouter=new JButton("add"); - ajouter.addActionListener(new ObservateurModifGroupe(m, g)); - tache.add(ajouter); - JButton supprimer=new JButton("supr"); - supprimer.addActionListener(new ObservateurModifGroupe(m, g)); - supprimer.setForeground(Color.RED); - tache.add(supprimer); - if(g.getType()!=TypeGroupe.PARTITION){ - JButton creer=new JButton("new Groupe"); - creer.addActionListener(new ObservateurModifGroupe(m, g)); - tache.add(creer); - } - this.pan.add(tache); - JLabel titre=new JLabel("Groupe : "+g.getName(), JLabel.CENTER); - titre.setFont(new Font(Font.SERIF, Font.BOLD, titre.getFont().getSize()+10)); - this.pan.add(titre); - this.pan.add(new JLabel("min= "+String.valueOf(g.getMin())+"\t || \t max= "+String.valueOf(g.getMax()),JLabel.CENTER)); - JButton refresh= new JButton("Resfresh"); - refresh.addActionListener(new ObservateurChangeGroupe(m, g)); - this.pan.add(refresh); - this.pan.add(new JLabel("Type: "+g.getType().name()+"\t || \t id="+String.valueOf(g.getId()), JLabel.CENTER)); - this.pan.add(new JLabel("Sous groupe:",JLabel.CENTER)); - if(g.getSousGroupes().size()>0){ - JPanel sous=new JPanel(new GridLayout(g.getSousGroupes().size(), 1)); - for(Groupe gr: g.getSousGroupes()){ - JButton b=new JButton(gr.getName()); - b.addActionListener(new ObservateurChangeGroupe(m, gr)); - sous.add(b); - } - this.pan.add(new JScrollPane(sous)); - } - }else{ - JButton creer=new JButton("créer une promo"); - creer.addActionListener(new ObservateurModifGroupe(m, g)); - this.pan.add(creer); - } - } - /** - * permet de modifier le groupe affiché - * @param g le nouveau groupe à afficher - */ - public void setG(Groupe g) { - this.g = g; - } - /** - * Permet de récupérer le panel d'affichage. - * @return le panel d'affichage - */ - public JPanel getPan() { - return pan; - } -} 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 deleted file mode 100644 index 1f3c8f7..0000000 --- a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MP/ROOT/View/FenetreSelectionEtu.java +++ /dev/null @@ -1,134 +0,0 @@ -package fr.iutfbleau.projetIHM2022FI2.MP.ROOT.View; - -import fr.iutfbleau.projetIHM2022FI2.API.Etudiant; -import fr.iutfbleau.projetIHM2022FI2.API.Groupe; -import fr.iutfbleau.projetIHM2022FI2.MP.EtudiantNP; -import fr.iutfbleau.projetIHM2022FI2.MP.ROOT.Controller.ActionListenerNouveauEtu; -import fr.iutfbleau.projetIHM2022FI2.MP.ROOT.Controller.SelecteurEtudiant; - -import java.util.Set; -import java.awt.GridLayout; -import java.awt.Color; -import javax.swing.JButton; -import javax.swing.JOptionPane; -import javax.swing.JPanel; - - -public class FenetreSelectionEtu extends JPanel{ - // liste des étudiants à ajouter - private Set liste; - // liste de tous les étudiants - private Set etu; - - - /** - * Constructeur de l'affichage de la selection des étudiants - * @param g le groupe - * @param liste la liste des étudiants à ajouter - * @param supression savoir si il faut supprimer les étudiants du groupe de la liste - * @param etu0 la liste de tous les - */ - public FenetreSelectionEtu(Groupe g, Set 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(); - } -/** - * Ajoute un étudiant à la sélection - * @param index l'index de l'étudiant - */ - public void addList(int index){ - int i=0; - for(Etudiant e:this.etu){ - if(i==index){ - this.liste.add(e); - return; - } - i++; - } - } -/** - * Retire un étudiant de la sélection - * @param index l'index de l'étudiant - */ - public void removeList(int index){ - int i=0; - for(Etudiant e:this.etu){ - if(i==index){ - this.liste.remove(e); - return; - } - i++; - } - } -/** - * Ajoute un étudiant à la liste de tous les étudiants - * @param nom le nom de l'étudiant - * @param prenom le prénom de l'étudiant - */ - public void addEtudiant(String nom, String prenom){ - if(nom.length()==0 || prenom.length()==0){ - JOptionPane.showMessageDialog(this, "le nom/prenom ne peut pas être null"); - return; - } - this.etu.add(new EtudiantNP(nom, prenom)); - this.removeAll(); - this.draw(); - this.revalidate(); - } -/** - * gère l'affichage de la sélection - */ - private void draw(){ - this.setLayout(new GridLayout(this.etu.size()/5+1, 4)); - int index=0; - for(Etudiant e:etu){ - JButton lab=new JButton(e.getNom()+" "+e.getPrenom()+" "+e.getId()); - lab.addMouseListener(new SelecteurEtudiant(index, this)); - this.add(lab); - index++; - } - JButton nouveau=new JButton("Nouveau +"); - nouveau.setBackground(Color.RED); - nouveau.addActionListener(new ActionListenerNouveauEtu(this)); - JButton all=new JButton("tous"); - this.add(all); - all.addActionListener(new ActionListenerNouveauEtu(this)); - this.add(nouveau); - } -/** - * Ajoute tous les étudiants à la liste des étudiants sélectionnés - */ - public void addAll(){ - if(this.getComponent(this.etu.size()).getBackground()==Color.GREEN){ - int i=0; - for(Etudiant e:this.etu){ - this.getComponent(i).setBackground(this.getBackground()); - if(this.liste.contains(e)) - this.liste.remove(e); - i++; - } - this.getComponent(this.etu.size()).setBackground(this.getBackground()); - }else{ - int i=0; - for(Etudiant e:this.etu){ - this.getComponent(i).setBackground(Color.GREEN); - this.liste.add(e); - i++; - } - this.getComponent(this.etu.size()).setBackground(Color.GREEN); - } - this.repaint(); - } -} diff --git a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MP/ROOT/View/FindBarFenetre.java b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MP/ROOT/View/FindBarFenetre.java deleted file mode 100644 index 845ed8a..0000000 --- a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MP/ROOT/View/FindBarFenetre.java +++ /dev/null @@ -1,85 +0,0 @@ -package fr.iutfbleau.projetIHM2022FI2.MP.ROOT.View; - - -import javax.swing.JButton; -import javax.swing.JLabel; -import javax.swing.JPanel; -import javax.swing.JTextField; -import java.awt.GridLayout; -import fr.iutfbleau.projetIHM2022FI2.API.Etudiant; -import fr.iutfbleau.projetIHM2022FI2.API.Model; -import fr.iutfbleau.projetIHM2022FI2.MP.ROOT.Controller.ListenerFindBar; - -import java.awt.Dimension; -import java.awt.BorderLayout; -import java.util.Set; - -/** - * barre de recherche d'etudiant - * - */ -public class FindBarFenetre { - // panel de la barre de recherche - private JPanel mypanel; - // model - private Model m; - //liste des étudiants trouvés - private Set liste; - - /** - * constructeur de la barre de recherche - * @param m le model - */ - public FindBarFenetre(Model m){ - this.liste=null; - this.m=m; - this.mypanel=new JPanel(); - this.draw(); - } - /** - * gère l'affichage de la barre de recherche - */ - private void draw(){ - JTextField searchField = new JTextField(30); - searchField.setLayout(new BorderLayout()); - JButton label = new JButton("->"); - label.addActionListener(new ListenerFindBar(this, null)); - searchField.add(label, BorderLayout.LINE_END); - if(this.liste!=null && this.liste.size()>0){ - this.mypanel.setLayout(new GridLayout(this.liste.size()+1, 1)); - this.mypanel.add(searchField); - for(Etudiant e: this.liste){ - JButton etu=new JButton(e.getNom()+" "+e.getPrenom()+" "+e.getId()); - etu.addActionListener(new ListenerFindBar(this, e)); - this.mypanel.add(etu); - } - }else{ - this.mypanel.setLayout(new GridLayout(4, 1)); - this.mypanel.add(searchField); - JLabel text=new JLabel("Aucun Etudiant Selectionné"); - this.mypanel.add(text); - } - mypanel.setSize(new Dimension(500, 500)); - } - /** - * retourne le panel de la barre de recherche - * @return le panel de la barre de recherche - */ - public JPanel getPanel() { - return mypanel; - } - /** - * recherche un étudiant par son nom - * @param name le nom de l'étudiant - */ - public void search(String name){ - this.liste=this.m.getEtu(name); - this.mypanel.removeAll(); - this.draw(); - this.mypanel.revalidate(); - } - - public void showGroupe(Etudiant toshow){ - this.m.showGroupOfEtudiant(toshow); - } -} diff --git a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MP/ROOT/View/PanelEtudiant.java b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MP/ROOT/View/PanelEtudiant.java deleted file mode 100644 index fa2f602..0000000 --- a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MP/ROOT/View/PanelEtudiant.java +++ /dev/null @@ -1,54 +0,0 @@ -package fr.iutfbleau.projetIHM2022FI2.MP.ROOT.View; - -import javax.swing.JLabel; -import javax.swing.JPanel; - -import fr.iutfbleau.projetIHM2022FI2.API.Etudiant; - -import javax.swing.JButton; -import java.awt.*; -import java.awt.event.ActionListener; - - -public class PanelEtudiant extends JPanel{ - - // bouton suppression - private JButton supprimer; - // bouton déplacement - private JButton deplacer; - - /** - * Constructeur du panel d'affichage d'un étudiant - * @param e l'étudiant à afficher - * @param change si l'étudiant peut être déplacé - */ - public PanelEtudiant(Etudiant e, boolean change){ - super(new GridLayout(1,2,20,10)); - JPanel bouton=new JPanel(new GridLayout(1,2)); - JLabel label=new JLabel(" "+e.getNom()+" "+e.getPrenom()+" "+e.getId(), JLabel.LEFT); - this.supprimer=new JButton("supr"); - this.supprimer.setForeground(Color.RED); - this.deplacer=new JButton("change"); - if(change==true){ - bouton.add(this.deplacer); - } - this.add(label); - bouton.add(this.supprimer); - this.add(bouton); - } - /** - * Ajoute un listener au bouton de suppression - * @param a le listener - */ - public void addActionDeleteListener(ActionListener a){ - this.supprimer.addActionListener(a); - } - - /** - * Ajoute un listener au bouton de changement de groupe - * @param a le listener - */ - public void addActionChangeListener(ActionListener a){ - this.deplacer.addActionListener(a); - } -} diff --git a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/Permanent/Controller/ActionListenerChangeEtu.java b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/Permanent/Controller/ActionListenerChangeEtu.java deleted file mode 100644 index 7acd03f..0000000 --- a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/Permanent/Controller/ActionListenerChangeEtu.java +++ /dev/null @@ -1,84 +0,0 @@ -package fr.iutfbleau.projetIHM2022FI2.Permanent.Controller; -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; -import java.util.HashSet; -import java.util.Set; - -import javax.swing.JButton; -import javax.swing.JOptionPane; -import javax.swing.JPanel; - -import java.awt.Color; -import java.awt.GridLayout; - -import fr.iutfbleau.projetIHM2022FI2.API.Etudiant; -import fr.iutfbleau.projetIHM2022FI2.API.Groupe; -import fr.iutfbleau.projetIHM2022FI2.API.Model; -/** - * le controller pour le changement de groupe d'un etudiant - */ -public class ActionListenerChangeEtu implements ActionListener { - // l'etudiant a changer - private Etudiant etudiant; - // le model - private Model model; - // le groupe d'arrivée - private Groupe B; - // les boutons - private Set bout; - // le panel - private JPanel myPanel; - /** - * le constructeur - * @param m le model - * @param e l'etudiant a changer - */ - public ActionListenerChangeEtu(Model m, Etudiant e){ - this.model=m; - this.etudiant=e; - this.B=null; - this.bout=null; - myPanel=null; - } - /** - * methode invoquée lors d'un clic sur un bouton - * @param e l'événement - */ - @Override - public void actionPerformed(ActionEvent e) { - if(this.bout==null){ - this.bout=new HashSet<>(); - for(Groupe sous:this.model.getGroupePartition()){ - JButton bouton=new JButton(sous.getName()); - bouton.addActionListener(new ControllerGroupeBChangement(sous, this)); - this.bout.add(bouton); - } - myPanel = new JPanel(new GridLayout(this.bout.size(), 1)); - } - - - for(JButton b: this.bout){ - myPanel.add(b); - } - - if(JOptionPane.showConfirmDialog(this.model.getFenetre(), this.myPanel, "Changer dans quel Groupe ?", JOptionPane.OK_CANCEL_OPTION)==JOptionPane.OK_OPTION){ - if(this.B!=null) - this.model.changeGroupe(this.etudiant, B); - } - } - /** - * methode pour changer le groupe d'arrivée - * @param b le groupe d'arrivée - */ - public void setGroupeB(Groupe b){ - this.B=b; - for(JButton bouton: this.bout){ - if(bouton.getText()==this.B.getName()){ - bouton.setBackground(Color.GREEN); - }else{ - bouton.setBackground(bouton.getParent().getBackground()); - } - } - } - -} diff --git a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/Permanent/Controller/ControllerGroupeBChangement.java b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/Permanent/Controller/ControllerGroupeBChangement.java deleted file mode 100644 index 0f3a010..0000000 --- a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/Permanent/Controller/ControllerGroupeBChangement.java +++ /dev/null @@ -1,32 +0,0 @@ -package fr.iutfbleau.projetIHM2022FI2.Permanent.Controller; - -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; -import fr.iutfbleau.projetIHM2022FI2.API.Groupe; -/** - * le controleur pour le changement de groupe d'arrivée lors d'un changement de groupe - */ -public class ControllerGroupeBChangement implements ActionListener{ - // le listener parent - private ActionListenerChangeEtu parent; - // le groupe d'arrivée - private Groupe b; - /** - * le constructeur - * @param b le groupe d'arrivée - * @param observateur le listener parent - */ - public ControllerGroupeBChangement(Groupe b, ActionListenerChangeEtu observateur){ - this.parent=observateur; - this.b=b; - } - /** - * méthode invoquée lors d'un clic sur un bouton - * @param e l'événement - */ - @Override - public void actionPerformed(ActionEvent e) { - this.parent.setGroupeB(this.b); - } - -} diff --git a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/Permanent/Controller/ObservateurChangeGroupe.java b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/Permanent/Controller/ObservateurChangeGroupe.java deleted file mode 100644 index d2c83e4..0000000 --- a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/Permanent/Controller/ObservateurChangeGroupe.java +++ /dev/null @@ -1,33 +0,0 @@ -package fr.iutfbleau.projetIHM2022FI2.Permanent.Controller; - -import java.awt.event.*; - -import fr.iutfbleau.projetIHM2022FI2.API.Groupe; -import fr.iutfbleau.projetIHM2022FI2.API.Model; -/** - * l'observateur pour le changement de groupe - */ -public class ObservateurChangeGroupe implements ActionListener{ - // le model - private Model m; - // le groupe - private Groupe g; - /** - * le constructeur - * @param m le model - * @param g le groupe - */ - public ObservateurChangeGroupe(Model m, Groupe g){ - this.m=m; - this.g=g; - } - /** - * methode invoquée lors d'un clic sur un bouton - * @param e l'événement - */ - @Override - public void actionPerformed(ActionEvent e) { - m.showGroupe(this.g); - } - -} diff --git a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/Permanent/Controller/ObservateurFenetre.java b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/Permanent/Controller/ObservateurFenetre.java deleted file mode 100644 index cb5c4c4..0000000 --- a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/Permanent/Controller/ObservateurFenetre.java +++ /dev/null @@ -1,65 +0,0 @@ -package fr.iutfbleau.projetIHM2022FI2.Permanent.Controller; -import java.awt.event.WindowEvent; -import java.awt.event.WindowListener; -import javax.swing.JOptionPane; -import javax.swing.JFrame; -/** - * l'observateur pour la fermeture de la fenetre - */ -public class ObservateurFenetre implements WindowListener{ - /** - * le constructeur - */ - public ObservateurFenetre(){ - - } - - @Override - public void windowActivated(WindowEvent e) { - // TODO Auto-generated method stub - - } - - @Override - public void windowClosed(WindowEvent e) { - // TODO Auto-generated method stub - - } - /** - * méthode invoquée lors de la fermeture de la fenetre - * @param e l'événement - */ - @Override - public void windowClosing(WindowEvent e) { - JFrame fenetre= (JFrame) e.getSource(); - int confirmation = JOptionPane.showConfirmDialog(fenetre.getContentPane(), "Voulez vous quitter?", "Quitter", JOptionPane.YES_NO_OPTION); - if(confirmation == JOptionPane.YES_OPTION){ - fenetre.dispose(); - } - } - - @Override - public void windowDeactivated(WindowEvent e) { - // TODO Auto-generated method stub - - } - - @Override - public void windowDeiconified(WindowEvent e) { - // TODO Auto-generated method stub - - } - - @Override - public void windowIconified(WindowEvent e) { - // TODO Auto-generated method stub - - } - - @Override - public void windowOpened(WindowEvent e) { - // TODO Auto-generated method stub - - } - -} diff --git a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/Permanent/IHM.java b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/Permanent/IHM.java deleted file mode 100644 index e078e96..0000000 --- a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/Permanent/IHM.java +++ /dev/null @@ -1,217 +0,0 @@ -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.MP.EtudiantNP; -import fr.iutfbleau.projetIHM2022FI2.Permanent.Util.User; -import fr.iutfbleau.projetIHM2022FI2.Permanent.View.Connexion; - -public class IHM{ - - - public static void main(String[] args) { - User chois=Connexion.seConnecter(); - if(chois!=null){ - if(chois==User.ROOT){ - switch(Connexion.Persistant()){ - case 1: - new fr.iutfbleau.projetIHM2022FI2.MP.ROOT.Model.ModelRoot(); - break; - case 2: - AbstractGroupeFactory agf=IHM.getAgf(); - new fr.iutfbleau.projetIHM2022FI2.MNP.ROOT.Model.ModelRoot(agf, IHM.getChange(agf)); - break; - } - } - if(chois==User.ETUDIANT){ - switch(Connexion.Persistant()){ - case 1: - new fr.iutfbleau.projetIHM2022FI2.MP.ETU.Model.ModelEtu(); - break; - case 2: - AbstractGroupeFactory agf=IHM.getAgf(); - new fr.iutfbleau.projetIHM2022FI2.MNP.ETU.Model.ModelEtu(agf, IHM.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=IHM.getAgf(); - new fr.iutfbleau.projetIHM2022FI2.MNP.PROF.Model.ModelProf(agf, IHM.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/Util/User.java b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/Permanent/Util/User.java deleted file mode 100644 index 709a015..0000000 --- a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/Permanent/Util/User.java +++ /dev/null @@ -1,11 +0,0 @@ -package fr.iutfbleau.projetIHM2022FI2.Permanent.Util; - -public enum User { - ROOT("root"), PROF("proffeseur"), ETUDIANT("etudiant"); - - private final String name; - - private User(String s) { - name = s; - } -} diff --git a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/Permanent/View/Chargement.java b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/Permanent/View/Chargement.java deleted file mode 100644 index 9dc3cc2..0000000 --- a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/Permanent/View/Chargement.java +++ /dev/null @@ -1,45 +0,0 @@ -package fr.iutfbleau.projetIHM2022FI2.Permanent.View; - -import java.awt.Graphics; - -import javax.swing.JComponent; -import javax.swing.JFrame; - -import java.awt.*; - -/** - * Class Dessinant les boutons du menu - */ -public class Chargement extends JComponent{ - private JFrame fenetre; - - public Chargement(JFrame n){ - this.fenetre=new JFrame(); - this.fenetre.setSize(n.getSize()); - this.fenetre.setLocation(n.getLocation()); - this.fenetre.add(this, BorderLayout.CENTER); - this.fenetre.setVisible(true); - } - - public void dispose(){ - this.fenetre.dispose(); - } - - @Override - protected void paintComponent(Graphics pinceau) { - // obligatoire : on crée un nouveau pinceau pour pouvoir le modifier plus tard - Graphics2D secondPinceau = (Graphics2D) pinceau.create(); - secondPinceau.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); - // obligatoire : si le composant n'est pas censé être transparent - if (this.isOpaque()) { - // obligatoire : on repeint toute la surface avec la couleur de fond - secondPinceau.setColor(this.getBackground()); - secondPinceau.fillRect(0, 0, this.getWidth(), this.getHeight()); - } - // maintenant on dessine ce que l'on veut - secondPinceau.setColor(Color.BLUE); - secondPinceau.setFont(new Font(Font.SANS_SERIF, Font.BOLD, (this.getWidth()/10))); - FontMetrics metrics = secondPinceau.getFontMetrics(secondPinceau.getFont()); - secondPinceau.drawString("CHARGEMENT", (this.getWidth()/2-metrics.stringWidth("CHARGEMENT")/2), (this.getHeight()-metrics.getHeight())/3+metrics.getAscent()); - } -} \ No newline at end of file diff --git a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/Permanent/View/Connexion.java b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/Permanent/View/Connexion.java deleted file mode 100644 index 4c851b6..0000000 --- a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/Permanent/View/Connexion.java +++ /dev/null @@ -1,162 +0,0 @@ -package fr.iutfbleau.projetIHM2022FI2.Permanent.View; -import javax.swing.*; - -import fr.iutfbleau.projetIHM2022FI2.Permanent.Util.User; - -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; - use[1]=User.PROF; - use[2]=User.ETUDIANT; - - JComboBox combo=new JComboBox(use); - - JPanel myPanel = new JPanel(); - JTextField password = new JPasswordField(20); - myPanel.add(new JLabel("Password:")); - myPanel.add(password); - panel.add(combo); - panel.add(myPanel); - - if(JOptionPane.showConfirmDialog(fenetre, panel, "login", JOptionPane.OK_CANCEL_OPTION) != JOptionPane.OK_OPTION){ - fenetre.dispose(); - return null; - } - User choose=null; - switch(combo.getSelectedIndex()){ - case 0: - choose=use[0]; - break; - case 1: - choose=use[1]; - break; - case 2: - choose=use[2]; - break; - } - 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; - } - } - User ret=Connexion.retry(choose, fenetre); - fenetre.dispose(); - return ret; - } - - 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){ - use[0]=User.ETUDIANT; - use[1]=User.ROOT; - use[2]=User.PROF; - } - - if(first==User.ROOT){ - use[1]=User.ETUDIANT; - use[0]=User.ROOT; - use[2]=User.PROF; - } - - if(first==User.PROF){ - use[1]=User.ETUDIANT; - use[2]=User.ROOT; - use[0]=User.PROF; - } - JComboBox combo=new JComboBox(use); - - JPanel myPanel = new JPanel(); - JTextField password = new JPasswordField(20); - myPanel.add(new JLabel("Password:")); - myPanel.add(password); - JLabel erre=new JLabel("mdp incorect", SwingConstants.RIGHT); - erre.setForeground(Color.RED); - myPanel.add(erre); - - panel.add(combo); - panel.add(myPanel); - - if(JOptionPane.showConfirmDialog(fenetre, panel, "login", JOptionPane.OK_CANCEL_OPTION) != JOptionPane.OK_OPTION){ - return null; - } - User choose=null; - switch(combo.getSelectedIndex()){ - case 0: - choose=use[0]; - break; - case 1: - choose=use[1]; - break; - case 2: - choose=use[2]; - break; - } - 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; - } - } - User ret=Connexion.retry(choose, fenetre); - fenetre.dispose(); - return ret; - } - - 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])){ - fenetre.dispose(); - return 1; - } - if(result.equals(value[1])){ - fenetre.dispose(); - return 2; - } - return 0; - } - -}