diff --git a/FI_PRJ.iml b/FI_PRJ.iml new file mode 100644 index 0000000..9bce85b --- /dev/null +++ b/FI_PRJ.iml @@ -0,0 +1,12 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..705bc1b --- /dev/null +++ b/Makefile @@ -0,0 +1,35 @@ +## Commandes +JAVA = javac +EXEC = java +OPTIONS = -cp "src/Test/libs/mariadb-connector.jar" +OPTIONS2 = -cp "src/Test/libs/mariadb-connector.jar;" +BUILD_EX = -d build/ +BUILD_DOCS = -d docs/ +JAVADOC = javadoc +DEL = rm -rf +CREATEFILE = mkdir + +## Chemin +BUILD = build/ +COMPILE = build/Test/TestTexteMNP +API = src/API/*.java +MNP = src/MNP/*.java +TEST = src/Test/*.java +DOCS = docs/ +MAIN = TestTexteMNP + +.PHONY: run clean doc + +## Compile +run: + ${JAVA} ${BUILD_EX} ${OPTIONS} ${API} ${MNP} ${TEST} -Xlint:deprecation + cp -r src/Test/libs build/Test + cd build/Test + ${EXEC} ${OPTIONS2} ${MAIN} -Xlint:deprecation + +clean: + ${DEL} ${BUILD}* + ${DEL} ${DOCS}* + +doc: + ${JAVADOC} ${BUILD_DOCS} ${OPTIONS} ${API} ${MNP} ${TEST} \ No newline at end of file diff --git a/build/API/AbstractChangementFactory.class b/build/API/AbstractChangementFactory.class new file mode 100644 index 0000000..ad80235 Binary files /dev/null and b/build/API/AbstractChangementFactory.class differ diff --git a/build/API/AbstractGroupeFactory.class b/build/API/AbstractGroupeFactory.class new file mode 100644 index 0000000..cc61166 Binary files /dev/null and b/build/API/AbstractGroupeFactory.class differ diff --git a/build/API/Changement.class b/build/API/Changement.class new file mode 100644 index 0000000..17a2e8e Binary files /dev/null and b/build/API/Changement.class differ diff --git a/build/API/Etudiant.class b/build/API/Etudiant.class new file mode 100644 index 0000000..b5eda6e Binary files /dev/null and b/build/API/Etudiant.class differ diff --git a/build/API/Groupe.class b/build/API/Groupe.class new file mode 100644 index 0000000..afe4ab2 Binary files /dev/null and b/build/API/Groupe.class differ diff --git a/build/API/MonPrint.class b/build/API/MonPrint.class new file mode 100644 index 0000000..74b2632 Binary files /dev/null and b/build/API/MonPrint.class differ diff --git a/build/API/TypeGroupe.class b/build/API/TypeGroupe.class new file mode 100644 index 0000000..922fef6 Binary files /dev/null and b/build/API/TypeGroupe.class differ diff --git a/build/MNP/AbstractChangementFactoryNP.class b/build/MNP/AbstractChangementFactoryNP.class new file mode 100644 index 0000000..0e1f6e5 Binary files /dev/null and b/build/MNP/AbstractChangementFactoryNP.class differ diff --git a/build/MNP/AbstractGroupeFactoryNP.class b/build/MNP/AbstractGroupeFactoryNP.class new file mode 100644 index 0000000..b3d3523 Binary files /dev/null and b/build/MNP/AbstractGroupeFactoryNP.class differ diff --git a/build/MNP/ChangementNP.class b/build/MNP/ChangementNP.class new file mode 100644 index 0000000..6cd5563 Binary files /dev/null and b/build/MNP/ChangementNP.class differ diff --git a/build/MNP/EtudiantNP.class b/build/MNP/EtudiantNP.class new file mode 100644 index 0000000..b8e40b7 Binary files /dev/null and b/build/MNP/EtudiantNP.class differ diff --git a/build/MNP/GroupeNP.class b/build/MNP/GroupeNP.class new file mode 100644 index 0000000..48e3db2 Binary files /dev/null and b/build/MNP/GroupeNP.class differ diff --git a/build/Test/BDatabase.class b/build/Test/BDatabase.class new file mode 100644 index 0000000..986677b Binary files /dev/null and b/build/Test/BDatabase.class differ diff --git a/build/Test/BFrame.class b/build/Test/BFrame.class new file mode 100644 index 0000000..e0ad284 Binary files /dev/null and b/build/Test/BFrame.class differ diff --git a/build/Test/TestTexteMNP.class b/build/Test/TestTexteMNP.class new file mode 100644 index 0000000..e858af1 Binary files /dev/null and b/build/Test/TestTexteMNP.class differ diff --git a/build/Test/libs/mariadb-connector.jar b/build/Test/libs/mariadb-connector.jar new file mode 100644 index 0000000..58d75f3 Binary files /dev/null and b/build/Test/libs/mariadb-connector.jar differ diff --git a/docs/API/AbstractChangementFactory.html b/docs/API/AbstractChangementFactory.html new file mode 100644 index 0000000..7b9bb96 --- /dev/null +++ b/docs/API/AbstractChangementFactory.html @@ -0,0 +1,325 @@ + + + + + +AbstractChangementFactory + + + + + + + + +
+ + +
Skip navigation links
+ + + + +
+ + + +
+
API
+

Interface AbstractChangementFactory

+
+
+
+ +
+
+ +
+
+ +
+
+ + +
+ + +
Skip navigation links
+ + + + +
+ + + + diff --git a/docs/API/AbstractGroupeFactory.html b/docs/API/AbstractGroupeFactory.html new file mode 100644 index 0000000..2b09d16 --- /dev/null +++ b/docs/API/AbstractGroupeFactory.html @@ -0,0 +1,446 @@ + + + + + +AbstractGroupeFactory + + + + + + + + +
+ + +
Skip navigation links
+ + + + +
+ + + +
+
API
+

Interface AbstractGroupeFactory

+
+
+
+ +
+
+ +
+
+ +
+
+ + +
+ + +
Skip navigation links
+ + + + +
+ + + + diff --git a/docs/API/Changement.html b/docs/API/Changement.html new file mode 100644 index 0000000..7ca17d6 --- /dev/null +++ b/docs/API/Changement.html @@ -0,0 +1,324 @@ + + + + + +Changement + + + + + + + + +
+ + +
Skip navigation links
+ + + + +
+ + + +
+
API
+

Interface Changement

+
+
+
+ +
+
+ +
+
+ +
+
+ + +
+ + +
Skip navigation links
+ + + + +
+ + + + diff --git a/docs/API/Etudiant.html b/docs/API/Etudiant.html new file mode 100644 index 0000000..6c7212d --- /dev/null +++ b/docs/API/Etudiant.html @@ -0,0 +1,300 @@ + + + + + +Etudiant + + + + + + + + +
+ + +
Skip navigation links
+ + + + +
+ + + +
+
API
+

Interface Etudiant

+
+
+
+ +
+
+ +
+
+ +
+
+ + +
+ + +
Skip navigation links
+ + + + +
+ + + + diff --git a/docs/API/Groupe.html b/docs/API/Groupe.html new file mode 100644 index 0000000..3f4fbbb --- /dev/null +++ b/docs/API/Groupe.html @@ -0,0 +1,506 @@ + + + + + +Groupe + + + + + + + + +
+ + +
Skip navigation links
+ + + + +
+ + + +
+
API
+

Interface Groupe

+
+
+
+ +
+
+ +
+
+ +
+
+ + +
+ + +
Skip navigation links
+ + + + +
+ + + + diff --git a/docs/API/MonPrint.html b/docs/API/MonPrint.html new file mode 100644 index 0000000..6dbc10a --- /dev/null +++ b/docs/API/MonPrint.html @@ -0,0 +1,232 @@ + + + + + +MonPrint + + + + + + + + +
+ + +
Skip navigation links
+ + + + +
+ + + +
+
API
+

Interface MonPrint

+
+
+
+ +
+
+ +
+
+ +
+
+ + +
+ + +
Skip navigation links
+ + + + +
+ + + + diff --git a/docs/API/TypeGroupe.html b/docs/API/TypeGroupe.html new file mode 100644 index 0000000..beb1756 --- /dev/null +++ b/docs/API/TypeGroupe.html @@ -0,0 +1,351 @@ + + + + + +TypeGroupe + + + + + + + + +
+ + +
Skip navigation links
+ + + + +
+ + + +
+
API
+

Enum TypeGroupe

+
+
+ +
+ +
+
+ +
+
+ +
+
+ + +
+ + +
Skip navigation links
+ + + + +
+ + + + diff --git a/docs/API/package-frame.html b/docs/API/package-frame.html new file mode 100644 index 0000000..95cab44 --- /dev/null +++ b/docs/API/package-frame.html @@ -0,0 +1,29 @@ + + + + + +API + + + + + +

API

+
+

Interfaces

+ +

Enums

+ +
+ + diff --git a/docs/API/package-summary.html b/docs/API/package-summary.html new file mode 100644 index 0000000..51f69cb --- /dev/null +++ b/docs/API/package-summary.html @@ -0,0 +1,188 @@ + + + + + +API + + + + + + + + +
+ + +
Skip navigation links
+ + + + +
+ + +
+

Package API

+
+
+ +
+ +
+ + +
Skip navigation links
+ + + + +
+ + + + diff --git a/docs/API/package-tree.html b/docs/API/package-tree.html new file mode 100644 index 0000000..1534e14 --- /dev/null +++ b/docs/API/package-tree.html @@ -0,0 +1,151 @@ + + + + + +API Class Hierarchy + + + + + + + + +
+ + +
Skip navigation links
+ + + + +
+ + +
+

Hierarchy For Package API

+Package Hierarchies: + +
+
+

Interface Hierarchy

+ +

Enum Hierarchy

+ +
+ +
+ + +
Skip navigation links
+ + + + +
+ + + + diff --git a/docs/BPackage/BDatabase.html b/docs/BPackage/BDatabase.html new file mode 100644 index 0000000..c6f6c89 --- /dev/null +++ b/docs/BPackage/BDatabase.html @@ -0,0 +1,532 @@ + + + + + +BDatabase + + + + + + + + +
+ + +
Skip navigation links
+ + + + +
+ + + +
+
BPackage
+

Class BDatabase

+
+
+ +
+ +
+
+ +
+
+ +
+
+ + +
+ + +
Skip navigation links
+ + + + +
+ + + + diff --git a/docs/BPackage/package-frame.html b/docs/BPackage/package-frame.html new file mode 100644 index 0000000..9f8c89d --- /dev/null +++ b/docs/BPackage/package-frame.html @@ -0,0 +1,20 @@ + + + + + +BPackage + + + + + +

BPackage

+
+

Classes

+ +
+ + diff --git a/docs/BPackage/package-summary.html b/docs/BPackage/package-summary.html new file mode 100644 index 0000000..87e0823 --- /dev/null +++ b/docs/BPackage/package-summary.html @@ -0,0 +1,142 @@ + + + + + +BPackage + + + + + + + + +
+ + +
Skip navigation links
+ + + + +
+ + +
+

Package BPackage

+
+
+ +
+ +
+ + +
Skip navigation links
+ + + + +
+ + + + diff --git a/docs/BPackage/package-tree.html b/docs/BPackage/package-tree.html new file mode 100644 index 0000000..35c05ae --- /dev/null +++ b/docs/BPackage/package-tree.html @@ -0,0 +1,135 @@ + + + + + +BPackage Class Hierarchy + + + + + + + + +
+ + +
Skip navigation links
+ + + + +
+ + +
+

Hierarchy For Package BPackage

+Package Hierarchies: + +
+
+

Class Hierarchy

+ +
+ +
+ + +
Skip navigation links
+ + + + +
+ + + + diff --git a/docs/MNP/AbstractChangementFactoryNP.html b/docs/MNP/AbstractChangementFactoryNP.html new file mode 100644 index 0000000..11462a4 --- /dev/null +++ b/docs/MNP/AbstractChangementFactoryNP.html @@ -0,0 +1,384 @@ + + + + + +AbstractChangementFactoryNP + + + + + + + + +
+ + +
Skip navigation links
+ + + + +
+ + + +
+
MNP
+

Class AbstractChangementFactoryNP

+
+
+ +
+ +
+
+ +
+
+ +
+
+ + +
+ + +
Skip navigation links
+ + + + +
+ + + + diff --git a/docs/MNP/AbstractGroupeFactoryNP.html b/docs/MNP/AbstractGroupeFactoryNP.html new file mode 100644 index 0000000..1c459a6 --- /dev/null +++ b/docs/MNP/AbstractGroupeFactoryNP.html @@ -0,0 +1,523 @@ + + + + + +AbstractGroupeFactoryNP + + + + + + + + +
+ + +
Skip navigation links
+ + + + +
+ + + +
+
MNP
+

Class AbstractGroupeFactoryNP

+
+
+ +
+ +
+
+ +
+
+ +
+
+ + +
+ + +
Skip navigation links
+ + + + +
+ + + + diff --git a/docs/MNP/ChangementNP.html b/docs/MNP/ChangementNP.html new file mode 100644 index 0000000..f1c587e --- /dev/null +++ b/docs/MNP/ChangementNP.html @@ -0,0 +1,364 @@ + + + + + +ChangementNP + + + + + + + + +
+ + +
Skip navigation links
+ + + + +
+ + + +
+
MNP
+

Class ChangementNP

+
+
+ +
+ +
+
+ +
+
+ +
+
+ + +
+ + +
Skip navigation links
+ + + + +
+ + + + diff --git a/docs/MNP/EtudiantNP.html b/docs/MNP/EtudiantNP.html new file mode 100644 index 0000000..054df80 --- /dev/null +++ b/docs/MNP/EtudiantNP.html @@ -0,0 +1,340 @@ + + + + + +EtudiantNP + + + + + + + + +
+ + +
Skip navigation links
+ + + + +
+ + + +
+
MNP
+

Class EtudiantNP

+
+
+ +
+ +
+
+ +
+
+ +
+
+ + +
+ + +
Skip navigation links
+ + + + +
+ + + + diff --git a/docs/MNP/GroupeNP.html b/docs/MNP/GroupeNP.html new file mode 100644 index 0000000..ddefb62 --- /dev/null +++ b/docs/MNP/GroupeNP.html @@ -0,0 +1,605 @@ + + + + + +GroupeNP + + + + + + + + +
+ + +
Skip navigation links
+ + + + +
+ + + +
+
MNP
+

Class GroupeNP

+
+
+ +
+ +
+
+ +
+
+ +
+
+ + +
+ + +
Skip navigation links
+ + + + +
+ + + + diff --git a/docs/MNP/package-frame.html b/docs/MNP/package-frame.html new file mode 100644 index 0000000..3cd871a --- /dev/null +++ b/docs/MNP/package-frame.html @@ -0,0 +1,24 @@ + + + + + +MNP + + + + + +

MNP

+
+

Classes

+ +
+ + diff --git a/docs/MNP/package-summary.html b/docs/MNP/package-summary.html new file mode 100644 index 0000000..778fc0c --- /dev/null +++ b/docs/MNP/package-summary.html @@ -0,0 +1,167 @@ + + + + + +MNP + + + + + + + + +
+ + +
Skip navigation links
+ + + + +
+ + +
+

Package MNP

+
+
+ +
+ +
+ + +
Skip navigation links
+ + + + +
+ + + + diff --git a/docs/MNP/package-tree.html b/docs/MNP/package-tree.html new file mode 100644 index 0000000..9b33724 --- /dev/null +++ b/docs/MNP/package-tree.html @@ -0,0 +1,139 @@ + + + + + +MNP Class Hierarchy + + + + + + + + +
+ + +
Skip navigation links
+ + + + +
+ + +
+

Hierarchy For Package MNP

+Package Hierarchies: + +
+
+

Class Hierarchy

+ +
+ +
+ + +
Skip navigation links
+ + + + +
+ + + + diff --git a/docs/Test/BDatabase.html b/docs/Test/BDatabase.html new file mode 100644 index 0000000..8dcad4e --- /dev/null +++ b/docs/Test/BDatabase.html @@ -0,0 +1,529 @@ + + + + + +BDatabase + + + + + + + + +
+ + +
Skip navigation links
+ + + + +
+ + + +
+
Test
+

Class BDatabase

+
+
+ +
+ +
+
+ +
+
+ +
+
+ + +
+ + +
Skip navigation links
+ + + + +
+ + + + diff --git a/docs/Test/BFrame.html b/docs/Test/BFrame.html new file mode 100644 index 0000000..5b380cf --- /dev/null +++ b/docs/Test/BFrame.html @@ -0,0 +1,666 @@ + + + + + +BFrame + + + + + + + + +
+ + +
Skip navigation links
+ + + + +
+ + + +
+
Test
+

Class BFrame

+
+
+ +
+ +
+
+ +
+
+ +
+
+ + +
+ + +
Skip navigation links
+ + + + +
+ + + + diff --git a/docs/Test/TestTexteMNP.html b/docs/Test/TestTexteMNP.html new file mode 100644 index 0000000..601ad97 --- /dev/null +++ b/docs/Test/TestTexteMNP.html @@ -0,0 +1,269 @@ + + + + + +TestTexteMNP + + + + + + + + +
+ + +
Skip navigation links
+ + + + +
+ + + +
+
Test
+

Class TestTexteMNP

+
+
+ +
+ +
+
+ +
+
+ +
+
+ + +
+ + +
Skip navigation links
+ + + + +
+ + + + diff --git a/docs/Test/package-frame.html b/docs/Test/package-frame.html new file mode 100644 index 0000000..a3f0724 --- /dev/null +++ b/docs/Test/package-frame.html @@ -0,0 +1,21 @@ + + + + + +Test + + + + + +

Test

+
+

Classes

+ +
+ + diff --git a/docs/Test/package-summary.html b/docs/Test/package-summary.html new file mode 100644 index 0000000..07833ed --- /dev/null +++ b/docs/Test/package-summary.html @@ -0,0 +1,148 @@ + + + + + +Test + + + + + + + + +
+ + +
Skip navigation links
+ + + + +
+ + +
+

Package Test

+
+
+ +
+ +
+ + +
Skip navigation links
+ + + + +
+ + + + diff --git a/docs/Test/package-tree.html b/docs/Test/package-tree.html new file mode 100644 index 0000000..15e0f56 --- /dev/null +++ b/docs/Test/package-tree.html @@ -0,0 +1,156 @@ + + + + + +Test Class Hierarchy + + + + + + + + +
+ + +
Skip navigation links
+ + + + +
+ + +
+

Hierarchy For Package Test

+Package Hierarchies: + +
+
+

Class Hierarchy

+ +
+ +
+ + +
Skip navigation links
+ + + + +
+ + + + diff --git a/docs/allclasses-frame.html b/docs/allclasses-frame.html new file mode 100644 index 0000000..5d75fd8 --- /dev/null +++ b/docs/allclasses-frame.html @@ -0,0 +1,33 @@ + + + + + +All Classes + + + + + +

All Classes

+
+ +
+ + diff --git a/docs/allclasses-noframe.html b/docs/allclasses-noframe.html new file mode 100644 index 0000000..94e0fcd --- /dev/null +++ b/docs/allclasses-noframe.html @@ -0,0 +1,33 @@ + + + + + +All Classes + + + + + +

All Classes

+
+ +
+ + diff --git a/docs/constant-values.html b/docs/constant-values.html new file mode 100644 index 0000000..83b030a --- /dev/null +++ b/docs/constant-values.html @@ -0,0 +1,122 @@ + + + + + +Constant Field Values + + + + + + + + +
+ + +
Skip navigation links
+ + + + +
+ + +
+

Constant Field Values

+

Contents

+
+ +
+ + +
Skip navigation links
+ + + + +
+ + + + diff --git a/docs/deprecated-list.html b/docs/deprecated-list.html new file mode 100644 index 0000000..a08230e --- /dev/null +++ b/docs/deprecated-list.html @@ -0,0 +1,122 @@ + + + + + +Deprecated List + + + + + + + + +
+ + +
Skip navigation links
+ + + + +
+ + +
+

Deprecated API

+

Contents

+
+ +
+ + +
Skip navigation links
+ + + + +
+ + + + diff --git a/docs/help-doc.html b/docs/help-doc.html new file mode 100644 index 0000000..29e05e5 --- /dev/null +++ b/docs/help-doc.html @@ -0,0 +1,223 @@ + + + + + +API Help + + + + + + + + +
+ + +
Skip navigation links
+ + + + +
+ + +
+

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.
+ +
+ + +
Skip navigation links
+ + + + +
+ + + + diff --git a/docs/index-all.html b/docs/index-all.html new file mode 100644 index 0000000..9253844 --- /dev/null +++ b/docs/index-all.html @@ -0,0 +1,700 @@ + + + + + +Index + + + + + + + + +
+ + +
Skip navigation links
+ + + + +
+ + +
A B C D E F G I K M O R S T U V  + + +

A

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

B

+
+
BDatabase - Class in BPackage
+
+
Methodes pour les interaction avec une base de donnees
+
+
BDatabase() - Constructor for class BPackage.BDatabase
+
+
Instantiates a new B database.
+
+
BFrame - Class in Test
+
+
+ Pour creer une fenetre rapidement avec les methodes simplifier +
+
+
BFrame(String, int) - Constructor for class Test.BFrame
+
+
Avec le titre et mode de fermeture.
+
+
BFrame(String, int, int, int) - Constructor for class Test.BFrame
+
+
Avec le titre, la taille (en L et l) et mode de fermeture.
+
+
BFrame(String, int, int, int, int, int) - Constructor for class Test.BFrame
+
+
Avec le titre, la locasation (en x et y), la taille (en L et l) et mode de + fermeture.
+
+
BFrame(String, int, int, int, int, String, int, int, int) - Constructor for class Test.BFrame
+
+
Avec le titre, la locasation (en x et y), la taille (en L et l), le layout et + le mode de fermeture.
+
+
BPackage - package BPackage
+
 
+
+ + + +

C

+
+
Changement - Interface in 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 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 MNP.ChangementNP
+
 
+
closeBFrame() - Method in class Test.BFrame
+
+
Fermer la fenetre
+
+
createChangement(Groupe, Etudiant, Groupe) - Method in interface API.AbstractChangementFactory
+
+
permet d'ajouter un nouveau changement.
+
+
createChangement(Groupe, Etudiant, Groupe) - Method in class MNP.AbstractChangementFactoryNP
+
+
permet d'ajouter un nouveau changement.
+
+
createGroupe(Groupe, String, int, int) - Method in interface 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 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 API.AbstractGroupeFactory
+
+
permet de créer une partition automatiquement sous un groupe donné.
+
+
createPartition(Groupe, String, int) - Method in class MNP.AbstractGroupeFactoryNP
+
+
permet de créer une partition automatiquement sous un groupe donné.
+
+
+ + + +

D

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

E

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

F

+
+
fetchAll(String) - Method in class BPackage.BDatabase
+
+
Recuperer les informations d'un requete de type SELECT.
+
+
+ + + +

G

+
+
getA() - Method in interface API.Changement
+
+
permet de récupérer le groupe de depart
+
+
getA() - Method in class MNP.ChangementNP
+
+
permet de récupérer le groupe de depart
+
+
getAllChangements() - Method in interface API.AbstractChangementFactory
+
+
permet de récupérer les changements
+
+
getAllChangements() - Method in class MNP.AbstractChangementFactoryNP
+
+
permet de récupérer les changements
+
+
getAllColumns(String) - Method in class BPackage.BDatabase
+
+
Pour recuperer les colonnes d'une table (A finir)
+
+
getB() - Method in interface API.Changement
+
+
permet de récupérer le groupe d'arrivée
+
+
getB() - Method in class MNP.ChangementNP
+
+
permet de récupérer le groupe d'arrivée
+
+
getDatabaseName() - Method in class BPackage.BDatabase
+
+
Recuperer le nom de la base de donnees.
+
+
getEtu() - Method in interface API.Changement
+
+
permet de récupérer l'étudiant demandant le changement
+
+
getEtu() - Method in class MNP.ChangementNP
+
+
permet de récupérer l'étudiant demandant le changement
+
+
getEtudiants(String) - Method in interface API.AbstractGroupeFactory
+
+
permet de retrouver un étudiant à partir d'un String.
+
+
getEtudiants() - Method in interface API.Groupe
+
+
Potentiellement "vide"
+
+
getEtudiants(String) - Method in class MNP.AbstractGroupeFactoryNP
+
+
permet de retrouver un étudiant à partir d'un String.
+
+
getEtudiants() - Method in class MNP.GroupeNP
+
+
Potentiellement "vide" + Attention nous renvoyons l'ensemble sans le copier
+
+
getGroupeFactory() - Method in interface 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 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 API.AbstractGroupeFactory
+
+
permet de retrouver les groupes d'un étudiant.
+
+
getGroupesOfEtudiant(Etudiant) - Method in class MNP.AbstractGroupeFactoryNP
+
+
permet de retrouver les groupes d'un étudiant.
+
+
getHost() - Method in class BPackage.BDatabase
+
+
Recuperer l'hote courant.
+
+
getId() - Method in interface API.Changement
+
+
permet de récupérer l'identifiant du changement (référence interne sans intérêt irl).
+
+
getId() - Method in interface API.Etudiant
+
+
permet de récupérer l'identifiant de l'étudiant.
+
+
getId() - Method in interface 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 MNP.ChangementNP
+
+
permet de récupérer l'identifiant du changement (référence interne sans intérêt irl).
+
+
getId() - Method in class MNP.EtudiantNP
+
+
permet de récupérer l'identifiant de l'étudiant.
+
+
getId() - Method in class 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 API.Groupe
+
+
permet de récupérer le nombre maximum d'étudiants souhaités dans un groupe.
+
+
getMax() - Method in class MNP.GroupeNP
+
+
permet de récupérer le nombre maximum d'étudiants souhaités dans un groupe.
+
+
getMin() - Method in interface API.Groupe
+
+
permet de récupérer le nombre minimum d'étudiants souhaités dans le groupe.
+
+
getMin() - Method in class MNP.GroupeNP
+
+
permet de récupérer le nombre minimum d'étudiants souhaités dans le groupe.
+
+
getName() - Method in interface API.Groupe
+
+
permet de récupérer le nom d'un groupe (utile irl).
+
+
getName() - Method in class MNP.GroupeNP
+
+
permet de récupérer le nom d'un groupe (utile irl).
+
+
getNom() - Method in interface API.Etudiant
+
+
permet de récupérer
+
+
getNom() - Method in class MNP.EtudiantNP
+
+
permet de récupérer
+
+
getPointPoint() - Method in interface API.Groupe
+
+
permet de récupérer le groupe père + un groupe racine devrait retourner lui-même
+
+
getPointPoint() - Method in class MNP.GroupeNP
+
+
permet de récupérer le groupe père + un groupe racine devrait retourner lui-même
+
+
getPrenom() - Method in interface API.Etudiant
+
+
permet de récupérer
+
+
getPrenom() - Method in class MNP.EtudiantNP
+
+
permet de récupérer
+
+
getPromotion() - Method in interface API.AbstractGroupeFactory
+
+
permet de récupérer le Groupe qui contient les étudiants de toute la promotion
+
+
getPromotion() - Method in class MNP.AbstractGroupeFactoryNP
+
+
permet de récupérer le Groupe qui contient les étudiants de toute la promotion
+
+
getSharedObject() - Method in class BPackage.BDatabase
+
+
Recuperer l'objet Connection pour pouvoir utiliser ses methodes.
+
+
getSize() - Method in interface API.Groupe
+
+
permet de récupérer le nombre d'étudiants dans ce groupe.
+
+
getSize() - Method in class MNP.GroupeNP
+
+
permet de récupérer le nombre d'étudiants dans ce groupe.
+
+
getSousGroupes() - Method in interface API.Groupe
+
+
Potentiellement "vide"
+
+
getSousGroupes() - Method in class MNP.GroupeNP
+
+
Potentiellement "vide" + Attention nous renvoyons l'ensemble sans le copier
+
+
getStatus() - Method in class BPackage.BDatabase
+
+
Gets status.
+
+
getType() - Method in interface API.Groupe
+
+
permet de récupérer la nature du groupe
+
+
getType() - Method in class MNP.GroupeNP
+
+
permet de récupérer la nature du groupe
+
+
getUser() - Method in class BPackage.BDatabase
+
+
Recuperer l'utilisateur courant.
+
+
Groupe - Interface in API
+
+
Un groupe
+
+
GroupeNP - Class in MNP
+
+
Un groupe
+
+
GroupeNP(String, int, int) - Constructor for class MNP.GroupeNP
+
+
Nouveau groupe vide de type ROOT sans étudiants, sans sous-Groupe
+
+
GroupeNP(Groupe, String, int, int) - Constructor for class MNP.GroupeNP
+
+
Nouveau groupe vide de type FREE sans étudiants, sans sous-Groupe
+
+
GroupeNP(Groupe) - Constructor for class 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).
+
+
+ + + +

I

+
+
initBFrame() - Method in class Test.BFrame
+
+
Initialiser la fenetre sans Layout par def.
+
+
initBFrame(String, int, int) - Method in class Test.BFrame
+
+
Initialiser la fenetre avec Layout
+
+
inlineArray(String...) - Method in class BPackage.BDatabase
+
+
Creer un tableau en parametre de fonction pour les requetes qui necessite des colonnes
+
+
insertRow(String, String[], String[]) - Method in class BPackage.BDatabase
+
+
Insert une ligne dans une table.
+
+
isVisible() - Method in class Test.BFrame
+
+
Statut de visibilite de la fenetre
+
+
+ + + +

K

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

M

+
+
main(String[]) - Static method in class Test.TestTexteMNP
+
 
+
MNP - package MNP
+
 
+
monPrint() - Method in interface API.Changement
+
 
+
monPrint() - Method in interface API.Etudiant
+
 
+
monPrint() - Method in interface API.Groupe
+
 
+
MonPrint - Interface in API
+
+
Toutes nos interfaces vont étendre cette interface.
+
+
monPrint() - Method in interface API.MonPrint
+
+
Fonctionne comme ToPrint() sauf car une interface n'a pas le droit de faire un override sur ToPrint().
+
+
+ + + +

O

+
+
openBFrame() - Method in class Test.BFrame
+
+
Ouvrir la fenetre
+
+
+ + + +

R

+
+
refreshBFrame() - Method in class Test.BFrame
+
+
Rafraichir la fenetre
+
+
removeEtudiant(Etudiant) - Method in interface API.Groupe
+
+
Enlève un étudiant.
+
+
removeEtudiant(Etudiant) - Method in class MNP.GroupeNP
+
+
Enlève un étudiant.
+
+
removeSousGroupe(Groupe) - Method in interface API.Groupe
+
+
Enlève un groupe.
+
+
removeSousGroupe(Groupe) - Method in class MNP.GroupeNP
+
+
Enlève un groupe.
+
+
+ + + +

S

+
+
sharedObject - Variable in class BPackage.BDatabase
+
+
The Shared object.
+
+
+ + + +

T

+
+
Test - package Test
+
 
+
TestTexteMNP - Class in Test
+
 
+
TestTexteMNP() - Constructor for class Test.TestTexteMNP
+
 
+
toString() - Method in class BPackage.BDatabase
+
 
+
toString() - Method in class Test.BFrame
+
 
+
TypeGroupe - Enum in API
+
 
+
+ + + +

U

+
+
updateRow(String) - Method in class BPackage.BDatabase
+
+
Faire des requetes de type UPDATE SET (il y aura plus d'argument prochainement).
+
+
+ + + +

V

+
+
valueOf(String) - Static method in enum API.TypeGroupe
+
+
Returns the enum constant of this type with the specified name.
+
+
values() - Static method in enum API.TypeGroupe
+
+
Returns an array containing the constants of this enum type, in +the order they are declared.
+
+
+A B C D E F G I K M O R S T U V 
+ +
+ + +
Skip navigation links
+ + + + +
+ + + + diff --git a/docs/index.html b/docs/index.html new file mode 100644 index 0000000..aadefb4 --- /dev/null +++ b/docs/index.html @@ -0,0 +1,75 @@ + + + + + +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/docs/overview-frame.html b/docs/overview-frame.html new file mode 100644 index 0000000..bca6889 --- /dev/null +++ b/docs/overview-frame.html @@ -0,0 +1,24 @@ + + + + + +Overview List + + + + + +
All Classes
+
+

Packages

+ +
+

 

+ + diff --git a/docs/overview-summary.html b/docs/overview-summary.html new file mode 100644 index 0000000..df75dec --- /dev/null +++ b/docs/overview-summary.html @@ -0,0 +1,145 @@ + + + + + +Overview + + + + + + + + +
+ + +
Skip navigation links
+ + + + +
+ + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
Packages 
PackageDescription
API 
BPackage 
MNP 
Test 
+
+ +
+ + +
Skip navigation links
+ + + + +
+ + + + diff --git a/docs/overview-tree.html b/docs/overview-tree.html new file mode 100644 index 0000000..0356ad3 --- /dev/null +++ b/docs/overview-tree.html @@ -0,0 +1,189 @@ + + + + + +Class Hierarchy + + + + + + + + +
+ + +
Skip navigation links
+ + + + +
+ + +
+

Hierarchy For All Packages

+Package Hierarchies: + +
+
+

Class Hierarchy

+ +

Interface Hierarchy

+ +

Enum Hierarchy

+ +
+ +
+ + +
Skip navigation links
+ + + + +
+ + + + diff --git a/docs/package-list b/docs/package-list new file mode 100644 index 0000000..1b97c7b --- /dev/null +++ b/docs/package-list @@ -0,0 +1,4 @@ +API +BPackage +MNP +Test diff --git a/docs/script.js b/docs/script.js new file mode 100644 index 0000000..b346356 --- /dev/null +++ b/docs/script.js @@ -0,0 +1,30 @@ +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/docs/serialized-form.html b/docs/serialized-form.html new file mode 100644 index 0000000..2477c11 --- /dev/null +++ b/docs/serialized-form.html @@ -0,0 +1,170 @@ + + + + + +Serialized Form + + + + + + + + +
+ + +
Skip navigation links
+ + + + +
+ + +
+

Serialized Form

+
+
+ +
+ +
+ + +
Skip navigation links
+ + + + +
+ + + + diff --git a/docs/stylesheet.css b/docs/stylesheet.css new file mode 100644 index 0000000..98055b2 --- /dev/null +++ b/docs/stylesheet.css @@ -0,0 +1,574 @@ +/* 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/out/production/FI_PRJ/API/AbstractChangementFactory.class b/out/production/FI_PRJ/API/AbstractChangementFactory.class new file mode 100644 index 0000000..3ce3579 Binary files /dev/null and b/out/production/FI_PRJ/API/AbstractChangementFactory.class differ diff --git a/out/production/FI_PRJ/API/AbstractGroupeFactory.class b/out/production/FI_PRJ/API/AbstractGroupeFactory.class new file mode 100644 index 0000000..a04ccaa Binary files /dev/null and b/out/production/FI_PRJ/API/AbstractGroupeFactory.class differ diff --git a/out/production/FI_PRJ/API/Changement.class b/out/production/FI_PRJ/API/Changement.class new file mode 100644 index 0000000..215e1ef Binary files /dev/null and b/out/production/FI_PRJ/API/Changement.class differ diff --git a/out/production/FI_PRJ/API/Etudiant.class b/out/production/FI_PRJ/API/Etudiant.class new file mode 100644 index 0000000..bd2ec0e Binary files /dev/null and b/out/production/FI_PRJ/API/Etudiant.class differ diff --git a/out/production/FI_PRJ/API/Groupe.class b/out/production/FI_PRJ/API/Groupe.class new file mode 100644 index 0000000..e01cae6 Binary files /dev/null and b/out/production/FI_PRJ/API/Groupe.class differ diff --git a/out/production/FI_PRJ/API/MonPrint.class b/out/production/FI_PRJ/API/MonPrint.class new file mode 100644 index 0000000..7f0751c Binary files /dev/null and b/out/production/FI_PRJ/API/MonPrint.class differ diff --git a/out/production/FI_PRJ/API/TypeGroupe.class b/out/production/FI_PRJ/API/TypeGroupe.class new file mode 100644 index 0000000..f836efa Binary files /dev/null and b/out/production/FI_PRJ/API/TypeGroupe.class differ diff --git a/out/production/FI_PRJ/MNP/AbstractChangementFactoryNP.class b/out/production/FI_PRJ/MNP/AbstractChangementFactoryNP.class new file mode 100644 index 0000000..01ffb65 Binary files /dev/null and b/out/production/FI_PRJ/MNP/AbstractChangementFactoryNP.class differ diff --git a/out/production/FI_PRJ/MNP/AbstractGroupeFactoryNP.class b/out/production/FI_PRJ/MNP/AbstractGroupeFactoryNP.class new file mode 100644 index 0000000..d044cc2 Binary files /dev/null and b/out/production/FI_PRJ/MNP/AbstractGroupeFactoryNP.class differ diff --git a/out/production/FI_PRJ/MNP/ChangementNP.class b/out/production/FI_PRJ/MNP/ChangementNP.class new file mode 100644 index 0000000..da19d1e Binary files /dev/null and b/out/production/FI_PRJ/MNP/ChangementNP.class differ diff --git a/out/production/FI_PRJ/MNP/EtudiantNP.class b/out/production/FI_PRJ/MNP/EtudiantNP.class new file mode 100644 index 0000000..4cf70da Binary files /dev/null and b/out/production/FI_PRJ/MNP/EtudiantNP.class differ diff --git a/out/production/FI_PRJ/MNP/GroupeNP.class b/out/production/FI_PRJ/MNP/GroupeNP.class new file mode 100644 index 0000000..e202b72 Binary files /dev/null and b/out/production/FI_PRJ/MNP/GroupeNP.class differ diff --git a/out/production/FI_PRJ/Test/BDatabase.class b/out/production/FI_PRJ/Test/BDatabase.class new file mode 100644 index 0000000..b073693 Binary files /dev/null and b/out/production/FI_PRJ/Test/BDatabase.class differ diff --git a/out/production/FI_PRJ/Test/BFrame.class b/out/production/FI_PRJ/Test/BFrame.class new file mode 100644 index 0000000..804af60 Binary files /dev/null and b/out/production/FI_PRJ/Test/BFrame.class differ diff --git a/out/production/FI_PRJ/Test/BLayout.class b/out/production/FI_PRJ/Test/BLayout.class new file mode 100644 index 0000000..67c8b30 Binary files /dev/null and b/out/production/FI_PRJ/Test/BLayout.class differ diff --git a/out/production/FI_PRJ/Test/ProfView$1.class b/out/production/FI_PRJ/Test/ProfView$1.class new file mode 100644 index 0000000..0ef04a8 Binary files /dev/null and b/out/production/FI_PRJ/Test/ProfView$1.class differ diff --git a/out/production/FI_PRJ/Test/ProfView$2.class b/out/production/FI_PRJ/Test/ProfView$2.class new file mode 100644 index 0000000..be1d414 Binary files /dev/null and b/out/production/FI_PRJ/Test/ProfView$2.class differ diff --git a/out/production/FI_PRJ/Test/ProfView$3.class b/out/production/FI_PRJ/Test/ProfView$3.class new file mode 100644 index 0000000..7f9bb28 Binary files /dev/null and b/out/production/FI_PRJ/Test/ProfView$3.class differ diff --git a/out/production/FI_PRJ/Test/ProfView$4.class b/out/production/FI_PRJ/Test/ProfView$4.class new file mode 100644 index 0000000..38f8802 Binary files /dev/null and b/out/production/FI_PRJ/Test/ProfView$4.class differ diff --git a/out/production/FI_PRJ/Test/ProfView.class b/out/production/FI_PRJ/Test/ProfView.class new file mode 100644 index 0000000..2f33a85 Binary files /dev/null and b/out/production/FI_PRJ/Test/ProfView.class differ diff --git a/out/production/FI_PRJ/Test/TestTexteMNP.class b/out/production/FI_PRJ/Test/TestTexteMNP.class new file mode 100644 index 0000000..aa3324c Binary files /dev/null and b/out/production/FI_PRJ/Test/TestTexteMNP.class differ diff --git a/out/production/FI_PRJ/Test/libs/mariadb-connector.jar b/out/production/FI_PRJ/Test/libs/mariadb-connector.jar new file mode 100644 index 0000000..58d75f3 Binary files /dev/null and b/out/production/FI_PRJ/Test/libs/mariadb-connector.jar differ diff --git a/src/.DS_Store b/src/.DS_Store new file mode 100644 index 0000000..ade560a Binary files /dev/null and b/src/.DS_Store differ diff --git a/src/API/AbstractChangementFactory.java b/src/API/AbstractChangementFactory.java new file mode 100644 index 0000000..24ea4fd --- /dev/null +++ b/src/API/AbstractChangementFactory.java @@ -0,0 +1,55 @@ +package 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); + +} diff --git a/src/API/AbstractGroupeFactory.java b/src/API/AbstractGroupeFactory.java new file mode 100644 index 0000000..9cf4962 --- /dev/null +++ b/src/API/AbstractGroupeFactory.java @@ -0,0 +1,112 @@ +package 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); + + +} diff --git a/src/API/Changement.java b/src/API/Changement.java new file mode 100644 index 0000000..81d1070 --- /dev/null +++ b/src/API/Changement.java @@ -0,0 +1,52 @@ +package 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. + */ +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(); + + + /** + * @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/src/API/Etudiant.java b/src/API/Etudiant.java new file mode 100644 index 0000000..b529441 --- /dev/null +++ b/src/API/Etudiant.java @@ -0,0 +1,44 @@ +package 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(); + + /** + * Ajout de l'equipe pour recuperer son groupe + * + * @return Le groupe en entier + * */ + public int getGroupe(); + + /** + * @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() + " Groupe " + getGroupe() + " (id=" + getId() + ")"); + } +} diff --git a/src/API/Groupe.java b/src/API/Groupe.java new file mode 100644 index 0000000..486f2ee --- /dev/null +++ b/src/API/Groupe.java @@ -0,0 +1,131 @@ +package 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 + 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"); + } + return sb.toString(); + } + +} diff --git a/src/API/MonPrint.java b/src/API/MonPrint.java new file mode 100644 index 0000000..3e5cc7b --- /dev/null +++ b/src/API/MonPrint.java @@ -0,0 +1,13 @@ +package 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/src/API/TypeGroupe.java b/src/API/TypeGroupe.java new file mode 100644 index 0000000..96a32d6 --- /dev/null +++ b/src/API/TypeGroupe.java @@ -0,0 +1,11 @@ +package API; + +public enum TypeGroupe { + ROOT("Tous les étudiants"), PARTITION("partition"), FREE("libre"); + + private final String name; + + private TypeGroupe(String s) { + name = s; + } +} diff --git a/src/MNP/AbstractChangementFactoryNP.java b/src/MNP/AbstractChangementFactoryNP.java new file mode 100644 index 0000000..be1b863 --- /dev/null +++ b/src/MNP/AbstractChangementFactoryNP.java @@ -0,0 +1,105 @@ +package MNP; + +import API.*; +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; + + // On utilise une table de hachage pour retrouver facilement un changement (à partir de son id). + // Si il y a beaucoup de changements c'est plus rapide que de parcourir toute une liste. + private HashMap brain; + + public AbstractChangementFactoryNP(AbstractGroupeFactory agf){ + 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. + * + * @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. + * + * @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); + } + +} diff --git a/src/MNP/AbstractGroupeFactoryNP.java b/src/MNP/AbstractGroupeFactoryNP.java new file mode 100644 index 0000000..ba048da --- /dev/null +++ b/src/MNP/AbstractGroupeFactoryNP.java @@ -0,0 +1,226 @@ +package MNP; + +import API.*; +import java.util.*; +/** + * Usine abstraite gérant l'ensemble des groupes. + * + */ + +public class AbstractGroupeFactoryNP implements AbstractGroupeFactory { + + // la racine (promotion) + private Groupe promo; + + // On utilise une table de hachage pour retrouver facilement un groupe (à partir de son id). + // 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. + */ + public AbstractGroupeFactoryNP(int id, 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(id, name,min,max); + this.brain=new HashMap(); + this.brain.put(id,this.promo); + } + + /** + * Test plutôt optimiste. Si la clé est identique alors on fait comme si c'était le bon groupe. + */ + 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. + * + * @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"); + } + if (this.getPromotion().equals(g)){ + throw new IllegalArgumentException("Impossible de détruire le groupe de toute la promotion"); + } + if (g.getSize()>0){ + throw new IllegalStateException("Impossible de détruire un groupe contenant un groupe"); + } + g.getPointPoint().removeSousGroupe(g); + this.brain.remove(Integer.valueOf(g.getId())); + } + + /** + * 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){ + // on cherche bêtement dans la promo. + Set out = new LinkedHashSet(); + for (Etudiant e : getPromotion().getEtudiants()){ + if (e.getNom().equals(nomEtu)){ + out.add(e); + break; + } + } + return out; + } + + /** + * permet de retrouver les groupes d'un étudiant. + * + * @param Etu un étudiant + * @return Etudiant l'étudiant connu de la factory ayant cet identifiant + * + * @throws java.lang.NullPointerException si le String est null. + */ + public Set getGroupesOfEtudiant(Etudiant etu){ + throw new UnsupportedOperationException("pas encore implanté"); + } + + +} diff --git a/src/MNP/ChangementNP.java b/src/MNP/ChangementNP.java new file mode 100644 index 0000000..dbc4253 --- /dev/null +++ b/src/MNP/ChangementNP.java @@ -0,0 +1,64 @@ +package MNP; + +import API.*; +import java.util.*; +/** + * Une demande de changement de groupe + * concerne un étudiant, qui est dans un groupe A et veut aller dans un groupe B. + * + * Implémentation non persistante fournie avec l'API. + */ + +public class ChangementNP implements Changement { + + //auto-incrément des changements + private static int nextId=0; + + private int id; + private Groupe a,b; + private Etudiant e; + + public ChangementNP(Groupe a, Etudiant e, Groupe b){ + Objects.requireNonNull(a,"On ne peut pas créer un changement avec un groupe à quitter null"); + Objects.requireNonNull(b,"On ne peut pas créer un changement avec un groupe à rejoindre null"); + Objects.requireNonNull(e,"On ne peut pas créer un changement concernant un étudiant null"); + + this.id=++this.nextId; + this.a=a; + this.b=b; + this.e=e; + } + + /** + * permet de récupérer l'identifiant du changement (référence interne sans intérêt irl). + * @return l'identifiant. + */ + public int getId(){ + return this.id; + } + + /** + * permet de récupérer le groupe de depart + * @return ce groupe. + */ + public Groupe getA(){ + return this.a; + } + + /** + * permet de récupérer le groupe d'arrivée + * @return ce groupe. + */ + public Groupe getB(){ + return this.b; + } + + /** + * permet de récupérer l'étudiant demandant le changement + * @return cet étudiant + */ + public Etudiant getEtu(){ + return this.e; + } + +} diff --git a/src/MNP/EtudiantNP.java b/src/MNP/EtudiantNP.java new file mode 100644 index 0000000..b212183 --- /dev/null +++ b/src/MNP/EtudiantNP.java @@ -0,0 +1,60 @@ +package MNP; + +import API.*; +import java.util.*; +/** + * Un étudiant + */ + +public class EtudiantNP implements Etudiant{ + + private static int nextId=0; + private int id, groupe; + private String nom, prenom; + + /** + * Constructeur. (modification apporter par le groupe pour accueillir un nouveau parametre : groupe) + */ + public EtudiantNP(String nom, String prenom, int groupe){ + 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.groupe = groupe; + 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; + } + + /** + * Ajout de l'equipe pour recuperer son groupe + * + * @return Le groupe en entier + * */ + public int getGroupe() { + return this.groupe; + } +} diff --git a/src/MNP/GroupeNP.java b/src/MNP/GroupeNP.java new file mode 100644 index 0000000..7d4661b --- /dev/null +++ b/src/MNP/GroupeNP.java @@ -0,0 +1,193 @@ +package MNP; + +import API.*; +import java.util.*; +/** + * Un groupe + */ + +public class GroupeNP implements Groupe { + + //auto-incrément des groupes. (NB. inutile, mais ça fair un exemple d'attribut statique). + private static int nextId=0; + // attributs naturels induits par getter de l'interface Groupe + private int id; + private String name; + private int min,max; + private TypeGroupe type; + private Groupe pointPoint; + // On utilise une interface set pour les sous-groupes et pour les membres (ce sont bien des ensembles en pratique). + private Set sousGroupes; + private Set membresDuGroupe; + + /** + * Nouveau groupe vide de type ROOT sans étudiants, sans sous-Groupe + */ + public GroupeNP(int id, String name, int min, int max){ + Objects.requireNonNull(name,"On ne peut pas créer un groupe dont le nom est null"); + this.id=id; + 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 + */ + public GroupeNP(Groupe pere, String name, int min, int max){ + Objects.requireNonNull(pere,"On ne peut pas créer un groupe dont le père est null"); + Objects.requireNonNull(name,"On ne peut pas créer un groupe dont le nom est null"); + this.id=++this.nextId; + this.name=name; + this.min=min; + this.max=max; + this.type=TypeGroupe.FREE; + this.pointPoint=pere; + this.sousGroupes=new LinkedHashSet(); + this.membresDuGroupe=new LinkedHashSet(); + } + + /** + * Nouveau groupe de type PARTITION dupliquant le groupe passé en paramètre (pour servir de racine à une partition de ce groupe de type FREE passé en paramètre). + * + */ + public GroupeNP(Groupe pere){ + Objects.requireNonNull(pere,"On ne peut pas créer un groupe dont le père est null"); + this.id=++this.nextId; + this.name=pere.getName()+"_PARTITION_"+ this.id; + this.min=pere.getMin(); + this.max=pere.getMax(); + this.type=TypeGroupe.PARTITION; + this.pointPoint=pere; + this.sousGroupes= new LinkedHashSet(); + this.membresDuGroupe= pere.getEtudiants(); + } + + /** + * Ajoute un étudiant. Se comporte comme add de l'interface Set. + * + * @return true iff e est ajouté + */ + public boolean addEtudiant(Etudiant e){ + Objects.requireNonNull(e,"On ne peut pas ajouter un Étudiant qui est null"); + return this.membresDuGroupe.add(e); + } + + /** + * Enlève un étudiant. Se comporte comme remove de l'interface Set. + * + * @return true iff e est enlevé + */ + public boolean removeEtudiant(Etudiant e){ + Objects.requireNonNull(e,"On ne peut pas enlever un Étudiant qui est null"); + return this.membresDuGroupe.remove(e); + } + + /** + * Ajoute un sous-groupe. Se comporte comme add de l'interface Set. + * vérifie que le groupe passé en argument a bien renseigné this comme son père. + * + * @return true iff g est ajouté + */ + public boolean addSousGroupe(Groupe g){ + Objects.requireNonNull(g,"On ne peut pas ajouter un sous-groupe qui est null"); + if (this.equals(g.getPointPoint())) + return this.sousGroupes.add(g); + else throw new IllegalArgumentException("on ne peut pas ajouter un sous-groupe ont le père n'est pas this"); + } + + /** + * Enlève un groupe. Se comporte comme remove de l'interface Set. + * + * @return true iff e est enlevé + */ + public boolean removeSousGroupe(Groupe g){ + Objects.requireNonNull(g,"On ne peut pas enlever un Étudiant qui est null"); + return this.sousGroupes.remove(g); + } + + + /** + * permet de récupérer l'identifiant d'un groupe (référence interne sans intérêt irl). + * @return l'identifiant. + */ + public int getId(){ + return this.id; + } + + /** + * permet de récupérer le nom d'un groupe (utile irl). + * @return le nom. + */ + public String getName(){ + return this.name; + } + + /** + * permet de récupérer le nombre minimum d'étudiants souhaités dans le groupe. + * @return le minimum souhaité + */ + public int getMin(){ + return this.min; + } + + /** + * permet de récupérer le nombre maximum d'étudiants souhaités dans un groupe. + * @return le maximum souhaité + */ + public int getMax(){ + return this.max; + } + + /** + * permet de récupérer le nombre d'étudiants dans ce groupe. + * @return le nombre de places prises (pas forcément limité entre Min et Max, mais c'est le but) + */ + public int getSize(){ + return this.membresDuGroupe.size(); + } + + /** + * permet de récupérer la nature du groupe + * @return le type du groupe + */ + public TypeGroupe getType(){ + return type; + } + + /** + * permet de récupérer le groupe père + * un groupe racine devrait retourner lui-même + * + * @return le père + */ + public Groupe getPointPoint(){ + return this.pointPoint; + } + + /** + * Potentiellement "vide" + * Attention nous renvoyons l'ensemble sans le copier + * + * @return l'ensemble des sous-groupes. + */ + public Set getSousGroupes(){ + return this.sousGroupes; + } + + /** + * Potentiellement "vide" + * Attention nous renvoyons l'ensemble sans le copier + * + * @return l'ensemble des étudiants. + */ + public Set getEtudiants(){ + return this.membresDuGroupe; + } + + +} diff --git a/src/Test/BDatabase.java b/src/Test/BDatabase.java new file mode 100644 index 0000000..30cb75b --- /dev/null +++ b/src/Test/BDatabase.java @@ -0,0 +1,178 @@ +package Test; + +/* [BPakage.BDatabase] + * Desc: To create Operationnal Database Link fast :) + * GitHub: https://github.com/lalBi94 + * Created by: Bilal Boudjemline + * 28/09/2022 at 20:35 + * */ + +import java.sql.*; +import java.sql.Connection; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Iterator; +import org.mariadb.jdbc.*; + +/** + *

Methodes pour les interaction avec une base de donnees

+ * + * @author Bilal Boudjemline + */ + +public class BDatabase { + private final String db_host; + private final String db_name; + private final String db_user; + private final String db_password; + protected Connection sharedObject; + private boolean status; + + public BDatabase() { + this.db_host = "jdbc:mariadb://dwarves.iut-fbleau.fr/"; + this.db_name = "brinet"; + this.db_user = "brinet"; + this.db_password = "Aignan41!"; + + try { + Class.forName("org.mariadb.jdbc.Driver"); + } catch(ClassNotFoundException e) { + e.printStackTrace(); + } + + try { + this.sharedObject = DriverManager.getConnection(this.db_host + this.db_name, this.db_user, this.db_password); + this.status = true; + } catch (SQLException e) { + System.out.println("Erreur de liaison avec la base de donnees."); + } + } + + /** + * Recuperer les informations d'un requete de type SELECT. + * + * @param request Le SELECT a faire (il y aura plus d'argument prochainement) + * @return Les resultats engendre par la requete + */ + public ArrayList fetchAll(String request) { + try { + ArrayList toReturn = new ArrayList(); + ResultSet rs = this.sharedObject.prepareStatement(request).executeQuery(); + + for(int i = 0; rs.next(); i++) { + toReturn.add(i, String.valueOf(rs.getString(1))); + } + + return toReturn; + } catch(SQLException e) { + System.out.println("Erreur de la requete : " + e); + return null; + } + } + + /** + * Insert une ligne dans une table. + * + * @param table La table + * @param col Tableau qui contient les colonnes d'affectation + * @param value Valeur des colonnes + * @return Retourne true si ca a reussit et false dans le cas inverse + */ + public boolean insertRow(String table, String[] col, String[] value) { + StringBuilder collumns = new StringBuilder(); + StringBuilder values = new StringBuilder(); + Iterator iteCol = Arrays.stream(col).iterator(); + Iterator iteVal = Arrays.stream(value).iterator(); + + collumns.append("("); + while(iteCol.hasNext()) { + collumns.append(iteCol.next()).append(", "); + } + collumns.setLength(collumns.length()-2); + collumns.append(")"); + + values.append("("); + while(iteVal.hasNext()) { + values.append("\"").append(iteVal.next()).append("\"").append(", "); + } + values.setLength(values.length()-2); + values.append(")"); + + String request = "INSERT INTO " + table + collumns + " VALUES" + values + ";"; + System.out.println(request); + + try { + this.sharedObject.prepareStatement(request).executeQuery(); + System.out.println("Succes: " + request); + return true; + } catch(SQLException e) { + return false; + } + } + + /** + * Faire des requetes de type UPDATE SET (il y aura plus d'argument prochainement). + * + * @param request La requete + * @return Si oui ou non ca a fonctionne + */ + public boolean updateRow(String request) { + try { + this.sharedObject.prepareStatement(request).executeQuery(); + System.out.println("Succes: " + request); + return true; + } catch(SQLException e) { + return false; + } + } + + /** + * Recuperer l'objet Connection pour pouvoir utiliser ses methodes. + * + * @return L 'objet Connection. + */ + public Connection getSharedObject() { + return this.sharedObject; + } + + /** + * Recuperer l'utilisateur courant. + * + * @return L 'utilisateur. + */ + public String getUser() { + return this.db_user; + } + + /** + * Recuperer l'hote courant. + * + * @return L 'hote. + */ + public String getHost() { + return this.db_host; + } + + /** + * Recuperer le nom de la base de donnees. + * + * @return Le nom de la base de donnees. + */ + public String getDatabaseName() { + return this.db_name; + } + + /** + * Recuperer le status de connection. + * + * @return Le status de connection. + */ + public boolean getStatus() { + return this.status; + } + + @Override + public String toString() { + return this.db_host + "\n" + this.db_name + "\n" + this.db_user + "\n"; + } +} \ No newline at end of file diff --git a/src/Test/BFrame.java b/src/Test/BFrame.java new file mode 100644 index 0000000..e1e1ae0 --- /dev/null +++ b/src/Test/BFrame.java @@ -0,0 +1,174 @@ +package Test; + +/* [BPackage.BFrame] + * Desc: To create Operationnal JFrame with utils methods fast :) + * GitHub: https://github.com/lalBi94 + * Created by: Bilal Boudjemline + * 28/09/2022 at 20:35 + * */ + +import javax.swing.JFrame; +import javax.swing.SwingUtilities; +import javax.swing.ImageIcon; +import java.awt.GridBagLayout; +import java.awt.GridLayout; +import java.awt.event.WindowEvent; + +/** + *

Pour creer une fenetre rapidement avec les methodes simplifier

+ * + * @author Bilal Boudjemline + */ + +public class BFrame extends JFrame { + private final String title; + private int location_x = 1; + private int location_y = 1; + private int width = 500; + private int height = 500; + private int killProcess = 3; + private boolean isOpen = false; + + /** + * Avec le titre et mode de fermeture. + * + * @param title Le titre de la fenetre + * @param oC Mode de fermeture de la fenetre + */ + public BFrame(String title, int oC) { + this.title = title; + this.killProcess = oC; + initBFrame(); + } + + /** + * Avec le titre, la taille (en L et l) et mode de fermeture. + * + * @param titlee Le titre de la fenetre + * @param size_x La longueur de la fenetre + * @param size_y La largeur y de la fenetre + * @param oC Mode de fermeture de la fenetre + */ + public BFrame(String titlee, int size_x, int size_y, int oC) { + this.title = titlee; + this.width = size_x; + this.height = size_y; + this.killProcess = oC; + initBFrame(); + } + + /** + * Avec le titre, la locasation (en x et y), la taille (en L et l) et mode de fermeture. + * + * @param title Le titre de la fenetre + * @param loca_x La localisation en x de la fenetre + * @param loca_y La localisation en y de la fenetre + * @param size_x La longueur de la fenetre + * @param size_y La largeur de la fenetre + * @param oC Mode de fermeture de la fenetre + */ + public BFrame(String title, int loca_x, int loca_y, int size_x, int size_y, int oC) { + this.title = title; + this.location_x = loca_x; + this.location_y = loca_y; + this.width = size_x; + this.height = size_y; + this.killProcess = oC; + initBFrame(); + } + + /** + * Avec le titre, la locasation (en x et y), la taille (en L et l), le layout et le mode de fermeture. + * + * @param title Le titre de la fenetre + * @param loca_x La localisation en x de la fenetre + * @param loca_y La localisation en y de la fenetre + * @param size_x La longueur de la fenetre + * @param size_y La largeur de la fenetre + * @param layout Layout a utiliser dispo : GridBagLayout / GridLayout + * @param layout_row the layout row + * @param layout_col the layout col + * @param oC Mode de fermeture de la fenetre + */ + public BFrame(String title, int loca_x, int loca_y, int size_x, int size_y, String layout, int layout_row, int layout_col, int oC) { + this.title = title; + this.location_x = loca_x; + this.location_y = loca_y; + this.width = size_x; + this.height = size_y; + this.killProcess = oC; + initBFrame(layout, layout_row, layout_col); + } + + /** + * Initialiser la fenetre sans Layout par def. + */ + protected void initBFrame() { + ImageIcon icon = new ImageIcon("assets/logo.png"); + this.setTitle(this.title); + this.setLocation(this.location_x, this.location_y); + this.setSize(this.width, this.height); + this.setLayout(new GridBagLayout()); + this.setIconImage(icon.getImage()); + this.setDefaultCloseOperation(this.killProcess); + } + + /** + * Initialiser la fenetre avec Layout + * + * @param layout the layout + * @param row the row + * @param col the col + */ + protected void initBFrame(String layout, int row, int col) { + ImageIcon icon = new ImageIcon("assets/logo.png"); + this.setTitle(this.title); + this.setLocation(this.location_x, this.location_y); + this.setSize(this.width, this.height); + + if(layout == "GridLayout") { + this.setLayout(new GridLayout(row, col)); + } else { + System.out.println("Un layout doit etre fourni."); + } + + this.setIconImage(icon.getImage()); + this.setDefaultCloseOperation(this.killProcess); + } + + /** + * Ouvrir la fenetre + */ + public void openBFrame() { + this.isOpen = true; + this.setVisible(true); + } + + /** + * Fermer la fenetre + */ + public void closeBFrame() { + this.isOpen = false; + this.setVisible(false); + this.dispatchEvent(new WindowEvent(this, WindowEvent.WINDOW_CLOSING)); + } + + /** + * Rafraichir la fenetre + */ + public void refreshBFrame() { + SwingUtilities.updateComponentTreeUI(this); + } + + /** + * Statut de visibilite de la fenetre + */ + public boolean isVisible() { + return this.isOpen; + } + + @Override + public String toString() { + return this.title + ": is opened"; + } +} \ No newline at end of file diff --git a/src/Test/BLayout.java b/src/Test/BLayout.java new file mode 100644 index 0000000..aceb7fd --- /dev/null +++ b/src/Test/BLayout.java @@ -0,0 +1,171 @@ +package Test; + +/* [BPakage.BLayout] + * Desc: To create a layout fast :) + * GitHub: https://github.com/lalBi94 + * Created by: Bilal Boudjemline + * 28/09/2022 at 20:35 + * */ + +import java.awt.GridBagConstraints; +import java.awt.Insets; + +/** + *

Pour creer un layout de type GridBagLayout rapidement avec les methodes simplifier.

+ * + * @author Bilal Boudjemline + */ + +public class BLayout extends GridBagConstraints { + public int PositionOnX = 0; + public int PositionOnY = 0; + public int takeCaseOnX = 1; + public int takeCaseOnY = 1; + public double sizeOnX = 0.0f; + public double sizeOnY = 0.0f; + public int padding_top = 1; + public int padding_left = 1; + public int padding_bottom = 1; + public int padding_right = 1; + public Insets padding = new Insets(this.padding_top, this.padding_left, this.padding_bottom, this.padding_right); + public int positionOnScreen = GridBagConstraints.NORTH; + public int filler = GridBagConstraints.BASELINE; + + public BLayout() { + initLayout(); + } + + /** + * @param positionX Position en X. + * @param positionY Position en y. + * @param manyCaseX Combien le component prend de case en x. + * @param manyCaseY Combien le component prend de case en y. + * @param sizeX Taille en double en x. + * @param sizeY Taille en double en y. + * @param pad Le padding. + * @param positionOnScreen La position sur la frame (centre, north etc...). + * @param filling Remplissage (H, V, B). + */ + public BLayout(int positionX, int positionY, int manyCaseX, int manyCaseY, double sizeX, + double sizeY, Insets pad, int positionOnScreen, int filling) { + this.PositionOnX = positionX; + this.PositionOnY = positionY; + this.takeCaseOnX = manyCaseX; + this.takeCaseOnY = manyCaseY; + this.sizeOnX = sizeX; + this.sizeOnY = sizeY; + this.padding_top = pad.top; + this.padding_left = pad.left; + this.padding_bottom = pad.bottom; + this.padding_right = pad.right; + this.padding = pad; + this.positionOnScreen = positionOnScreen; + this.filler = filling; + initLayout(); + } + + /** + * Initialiser le layout pour le changer dans GridBagConstraint (Valeur attribuer par def.). + * */ + private void initLayout() { + this.gridx = this.PositionOnX; + this.gridy = this.PositionOnY; + this.gridheight = this.takeCaseOnX; + this.gridwidth = this.takeCaseOnY; + this.weightx = this.sizeOnX; + this.weighty = this.sizeOnY; + this.insets = this.padding; + this.anchor = this.positionOnScreen; + this.fill = this.filler; + } + + /** + * Changer le cuseur en x. + * + * @param by par quoi + */ + public void setPositionX(int by) { + this.PositionOnX = by; + initLayout(); + } + + /** + * Changer le cuseur en y. + * + * @param by par quoi + */ + public void setPositionY(int by) { + this.PositionOnY = by; + initLayout(); + } + + /** + * Changer la place occupe en x. + * + * @param by par quoi + */ + public void setTakeCaseOnX(int by) { + this.takeCaseOnX = by; + initLayout(); + } + + /** + * Changer la place occupe en y. + * + * @param by par quoi + */ + public void setTakeCaseOnY(int by) { + this.takeCaseOnY = by; + initLayout(); + } + + /** + * Mettre sa taille en x. + * + * @param by par quoi + */ + public void setSizeX(double by) { + this.sizeOnX = by; + initLayout(); + } + + /** + * Mettre sa taille en y. + * + * @param by par quoi + */ + public void setSizeY(double by) { + this.sizeOnY = by; + initLayout(); + } + + /** + * Mettre un padding. + * + * @param by par quoi + */ + public void setPadding(Insets by) { + this.padding = by; + initLayout(); + } + + /** + * Mettre une ancre. + * + * @param by par quoi + */ + public void setAnchor(int by) { + this.positionOnScreen = by; + initLayout(); + } + + /** + * Mettre un remplissage. + * + * @param by par quoi + */ + public void setFill(int by) { + this.filler = by; + initLayout(); + } +} diff --git a/src/Test/ProfView.java b/src/Test/ProfView.java new file mode 100644 index 0000000..7032f78 --- /dev/null +++ b/src/Test/ProfView.java @@ -0,0 +1,266 @@ +package Test; + +import API.*; +import MNP.*; + +import java.awt.*; +import java.awt.event.*; +import java.util.ArrayList; +import javax.swing.*; + +public class ProfView extends BFrame implements ActionListener { + private final ArrayList e; + private final ArrayList g; + private JComboBox groupeOption; + private JTextField text; + private BDatabase db; + + public ProfView(ArrayList e, ArrayList g, BDatabase db) { + super( + "Vue professeur", + 1, + 1, + 500, + 500, + 3 + ); + + this.e = e; + this.g = g; + this.db = db; + + Display(); + } + + public void Display() { + BLayout settings = new BLayout(); + settings.setPositionX(0); + settings.setPositionY(3); + + settings.setPositionY(0); + JButton studList = new JButton("Voir la liste des etudiants"); + studList.setActionCommand("fi::GetStudList"); + studList.addActionListener(this); + this.add(studList, settings); + + settings.setPositionY(1); + this.add(new JLabel(" "), settings); + + settings.setPositionY(2); + JLabel gs = new JLabel("Afficher les etudiants se trouvant dans le groupe :"); + this.add(gs, settings); + + settings.setPositionY(3); + String[] groupeList = new String[this.g.size()]; + + for(int i = 0; i <= this.g.size()-1; i++) { + groupeList[i] = this.g.get(i).getName(); + } + + this.groupeOption = new JComboBox(groupeList); + this.groupeOption.setPreferredSize(new Dimension(110, 30)); + this.add(groupeOption, settings); + + settings.setPositionY(3); + settings.setAnchor(GridBagConstraints.EAST); + JButton confirm = new JButton("Rechercher"); + confirm.setActionCommand("fi::GetListFiltered"); + confirm.addActionListener(this); + this.add(confirm, settings); + + settings.setAnchor(GridBagConstraints.CENTER); + + settings.setPositionY(4); + this.add(new JLabel(" "), settings); + + settings.setPositionY(5); + JLabel pf = new JLabel("Rechercher un etudiant : "); + this.add(pf, settings); + + settings.setPositionY(6); + this.text = new JTextField(); + this.text.setPreferredSize(new Dimension(110, 30)); + text.addKeyListener(new KeyAdapter() { + public void keyTyped(KeyEvent e) { + if (text.getText().length() >= 3 ) // limit textfield to 3 characters + e.consume(); + } + }); + this.add(this.text, settings); + + settings.setPositionY(6); + settings.setAnchor(GridBagConstraints.EAST); + JButton searchTLetters = new JButton("Rechercher"); + searchTLetters.addActionListener(this); + searchTLetters.setActionCommand("fi::SearchStudentPer3Letters"); + this.add(searchTLetters, settings); + + this.openBFrame(); + this.refreshBFrame(); + } + + @Override + public void actionPerformed(ActionEvent e) { + String command = e.getActionCommand(); + + if (command == "fi::GetStudList") { + BFrame frame = new BFrame( + "Liste des eleves", + 1, + 1, + 500, + 500, + "GridLayout", + 1, + 1, + 2 + ); + + String[][] data = new String[this.e.size()][2]; + + String[] titre = { + "Nom", + "Prenom", + "Groupe" + }; + + for(int i = 0; i <= this.e.size()-1; i++) { + String[] info = { + this.e.get(i).getNom(), + this.e.get(i).getPrenom(), + String.valueOf(this.e.get(i).getGroupe()) + }; + + data[i] = info; + } + + JTable liste = new JTable(data, titre) { + public boolean editCellAt(int row, int column, java.util.EventObject e) { + return false; + } + }; + + liste.getTableHeader().setReorderingAllowed(false); + liste.setFillsViewportHeight(true); + + JScrollPane scroll = new JScrollPane(liste); + frame.getContentPane().add(scroll); + + frame.openBFrame(); + } else if(command == "fi::GetListFiltered") { + BFrame frame = new BFrame( + "Liste des eleves du " + this.groupeOption.getSelectedItem(), + 1, + 1, + 500, + 500, + "GridLayout", + 1, + 1, + 2 + ); + + String[][] data = new String[this.e.size()][1]; + + String[] titre = { + "Nom", + "Prenom" + }; + + int i, j; + + for(i = 0, j = 0; i <= this.e.size()-1; i++) { + if(this.e.get(i).getGroupe() == this.groupeOption.getSelectedIndex()) { + String[] info = { + this.e.get(i).getNom(), + this.e.get(i).getPrenom() + }; + + data[j] = info; + j++; + } + } + + String[][] data_final = new String[j][1]; + for(int x = 0; x <= j-1; x++) { + data_final[x] = data[x]; + } + + + JTable liste = new JTable(data_final, titre) { + public boolean editCellAt(int row, int column, java.util.EventObject e) { + return false; + } + }; + + liste.getTableHeader().setReorderingAllowed(false); + liste.setFillsViewportHeight(true); + + JScrollPane scroll = new JScrollPane(liste); + frame.getContentPane().add(scroll); + + frame.openBFrame(); + } else if(command == "fi::SearchStudentPer3Letters") { + /** + * Faire l'interface du filtrage. + * */ + char[] beg = this.text.getText().toCharArray(); + ArrayList listFiltered = new ArrayList<>(); + char[] cur; + + for(int i = 0; i <= this.e.size()-1; i++) { + cur = this.e.get(i).getNom().toCharArray(); + if(cur[0] == beg[0] && cur[1] == beg[1] && cur[2] == beg[2]) { + listFiltered.add(new EtudiantNP( + this.e.get(i).getNom(), + this.e.get(i).getPrenom(), + this.e.get(i).getGroupe() + )); + } + } + + BFrame frame = new BFrame( + "Liste d'eleves d'ou les noms commence par " + beg[0] + beg[1] + beg[2], + 1, + 1, + 500, + 500, + "GridLayout", + 1, + 1, + 2 + ); + + String[] titre = { + "Nom", + "Prenom", + "Groupe" + }; + + String[][] data = new String[listFiltered.size()][2]; + + for(int i = 0; i <= listFiltered.size()-1; i++){ + data[i] = new String[]{ + this.e.get(i).getNom(), + this.e.get(i).getPrenom(), + String.valueOf(this.e.get(i).getGroupe()) + }; + } + + JTable liste = new JTable(data, titre) { + public boolean editCellAt(int row, int column, java.util.EventObject e) { + return false; + } + }; + + liste.getTableHeader().setReorderingAllowed(false); + liste.setFillsViewportHeight(true); + + JScrollPane scroll = new JScrollPane(liste); + frame.getContentPane().add(scroll); + + frame.openBFrame(); + frame.refreshBFrame(); + } + } +} diff --git a/src/Test/TestTexteMNP.java b/src/Test/TestTexteMNP.java new file mode 100644 index 0000000..7c5a193 --- /dev/null +++ b/src/Test/TestTexteMNP.java @@ -0,0 +1,70 @@ +package Test; + +import API.*; +import MNP.*; +import java.util.*; + +public class TestTexteMNP { + public static void main(String[] args) { + /** + * Objet de la base de donnee contenant des methodes utile a notre developpement + * */ + BDatabase bd = new BDatabase(); + + /** + * Chargement des eleves + * */ + ArrayList listEtu = new ArrayList<>(); + ArrayList studPrenom = bd.fetchAll("SELECT prenom FROM fi_eleves"); + ArrayList studNom = bd.fetchAll("SELECT nom FROM fi_eleves"); + ArrayList studGroupe = bd.fetchAll("SELECT groupe FROM fi_eleves"); + + for(int i = 0; i <= studPrenom.size()-1; i++) { + if(studPrenom.get(i) != null && studNom.get(i) != null && studGroupe.get(i) != null) { + listEtu.add( + new EtudiantNP( + studNom.get(i), + studPrenom.get(i), + Integer.parseInt(studGroupe.get(i), 10) + ) + ); + + //System.out.println(listEtu.get(i).monPrint()); + } else { + System.out.println("[!] Erreur lors du chargement de la liste des etudiants."); + System.exit(-1); + } + } + + System.out.println("[+] Liste des etudiants chargees."); + + /** + * Chargement des groupes + * */ + ArrayList listGroupe = new ArrayList<>(); + ArrayList groupeId = bd.fetchAll("SELECT id FROM fi_groupe"); + ArrayList groupeNom = bd.fetchAll("SELECT nom FROM fi_groupe"); + ArrayList groupeMin = bd.fetchAll("SELECT min FROM fi_groupe"); + ArrayList groupeMax = bd.fetchAll("SELECT max FROM fi_groupe"); + + for(int i = 0; i <= groupeNom.size()-1; i++) { + if(groupeId.get(i) != null && groupeNom.get(i) != null && groupeMin.get(i) != null && groupeMax.get(i) != null) { + listGroupe.add( + new GroupeNP( + Integer.parseInt(groupeId.get(i), 10), + groupeNom.get(i), + Integer.parseInt(groupeMin.get(i), 10), + Integer.parseInt(groupeMax.get(i), 10) + ) + ); + } else { + System.out.println("[!] Erreur lors du chargement de la liste des groupes."); + System.exit(-1); + } + } + + System.out.println("[+] Liste des groupes chargees."); + + new ProfView(listEtu, listGroupe, bd); + } +} diff --git a/src/Test/libs/mariadb-connector.jar b/src/Test/libs/mariadb-connector.jar new file mode 100644 index 0000000..58d75f3 Binary files /dev/null and b/src/Test/libs/mariadb-connector.jar differ