Ajout doc pour les classes pricipales

This commit is contained in:
Mathis CHAIGNEAU 2022-12-04 16:43:19 +01:00
parent e98bf1436a
commit db48814c4f
10 changed files with 325 additions and 42 deletions

View File

@ -15,6 +15,10 @@ public class AbstractChangementFactoryNP implements AbstractChangementFactory {
// Si il y a beaucoup de changements c'est plus rapide que de parcourir toute une liste.
private HashMap<Integer,Changement> brain;
/**
* Constructeur de l'usine à changement.
* @param agf l'usine à groupe travaillant en tandem avec cette usine.
*/
public AbstractChangementFactoryNP(AbstractGroupeFactory agf){
Objects.requireNonNull(agf,"On ne peut pas créer une usine à changement dont l'usine à groupe parternaire est null");
this.agf=agf;
@ -44,6 +48,8 @@ public class AbstractChangementFactoryNP implements AbstractChangementFactory {
/**
* permet de mettre en oeuvre un changement connu de l'usine abstraite.
*
* @param c le changement à mettre en oeuvre.
*
* @throws java.lang.NullPointerException si un argument est null
* @throws java.lang.IllegalStateException si le changement n'a pas de sens en l'état actuel (e.g. étudiant pas dans le groupe de départ a, groupe b inconnu, groupe a inconnu, etc).
@ -70,7 +76,9 @@ public class AbstractChangementFactoryNP implements AbstractChangementFactory {
/**
* permet de supprimer un changement connu de l'usine abstraite.
*
*
* @param c le changement à supprimer.
*
* @throws java.lang.NullPointerException si un argument est null
* @throws java.lang.IllegalArgumentException si inconnu de l'usine abstraite
*/
@ -101,7 +109,18 @@ public class AbstractChangementFactoryNP implements AbstractChangementFactory {
this.brain.put(Integer.valueOf(c.getId()),c);
}
/**
* permet d'ajouter un nouveau changement.
*
* @param A groupe actuel
* @param B groupe demandé
* @param e étudiant concerné par le changement
* @param raison la raison du changement
*
* @throws java.lang.NullPointerException si un argument est null
* @throws java.lang.IllegalArgumentException si les groupes ou l'étudiant ne sont pas connus de la factory partenaire, ou e n'appartient pas à A ou A et B ne sont pas frères dans l'arbre des groupes.
*
*/
@Override
public void createChangement(Groupe A, Etudiant e, Groupe B, String raison) {
Objects.requireNonNull(A,"Le groupe d'origine ne peut pas être null");

View File

@ -21,6 +21,11 @@ public class AbstractGroupeFactoryNP implements AbstractGroupeFactory {
/**
* Le constructeur fabrique le groupe promotion vide.
* Il faut ensuite y ajouter les étudiants.
*
* @param name le nom de la promotion
* @param min le nombre minimum d'étudiants dans la promotion
* @param max le nombre maximum d'étudiants dans la promotion
*
*/
public AbstractGroupeFactoryNP(String name, int min, int max){
Objects.requireNonNull(name,"On ne peut pas créer une promotion dont le nom est null");
@ -31,6 +36,9 @@ public class AbstractGroupeFactoryNP implements AbstractGroupeFactory {
/**
* Test plutôt optimiste. Si la clé est identique alors on fait comme si c'était le bon groupe.
* @param g le groupe à tester
* @return true si le groupe est connu de l'usine abstraite
*
*/
public Boolean knows(Groupe g){
return this.brain.containsKey(Integer.valueOf(g.getId()));
@ -50,6 +58,8 @@ public class AbstractGroupeFactoryNP implements AbstractGroupeFactory {
* permet de supprimer un groupe connu de l'usine abstraite qui ne contient pas de groupes.
* Pour détruire un groupe connu qui en contient d'autres il faut le faire récursivement.
*
* @param g le groupe à supprimer
*
* @throws java.lang.NullPointerException si un argument est null
* @throws java.lang.IllegalStateException si le groupe contient des groupes
* @throws java.lang.IllegalArgumentException si le groupe n'est pas connu de l'usine abstraite ou bien si le groupe est celui de toute la promotion (renvoyé par getPromotion)
@ -234,12 +244,24 @@ public class AbstractGroupeFactoryNP implements AbstractGroupeFactory {
return liste;
}
/**
* Ajout a l'API pour changer facilement de nom de groupe
*
* @param g le groupe
* @param name le nom
* @return true si possible
*/
@Override
public boolean changeNameGroupe(Groupe g, String name) {
g.setName(name);
return true;
}
/**
* refresh le Groupe ainsi que ses etudiants
* @param g le groupe
* @return le groupe refresh/un parent si il a été refresh
*/
@Override
public Groupe refreshALL(Groupe g) {
return g;

View File

@ -12,11 +12,22 @@ public class ChangementNP implements Changement {
//auto-incrément des changements
private static int nextId=0;
// id du changement
private int id;
// groupe d'origine et d'arrivée
private Groupe a,b;
// étudiant concerné
private Etudiant e;
// raison de la demande
private String raison;
/**
* Constructeur d'un changement.
* @param a le groupe de départ
* @param b le groupe d'arrivée
* @param e l'étudiant demandant le changement
* @param raison la raison du changement
*/
public ChangementNP(Groupe a, Etudiant e, Groupe b){
Objects.requireNonNull(a,"On ne peut pas créer un changement avec un groupe à quitter null");
Objects.requireNonNull(b,"On ne peut pas créer un changement avec un groupe à rejoindre null");
@ -28,6 +39,14 @@ public class ChangementNP implements Changement {
this.e=e;
}
/**
* Constructeur d'un changement.
* @param a le groupe de départ
* @param b le groupe d'arrivée
* @param e l'étudiant demandant le changement
* @param raison la raison du changement
*
*/
public ChangementNP(Groupe a, Etudiant e, Groupe b, String raison){
Objects.requireNonNull(a,"On ne peut pas créer un changement avec un groupe à quitter null");
Objects.requireNonNull(b,"On ne peut pas créer un changement avec un groupe à rejoindre null");
@ -70,7 +89,10 @@ public class ChangementNP implements Changement {
public Etudiant getEtu(){
return this.e;
}
/**
* permet de récupérer la raison du changement
* @return la raison du changement
*/
@Override
public String getRaison() {
return this.raison;

View File

@ -6,13 +6,18 @@ import java.util.*;
*/
public class EtudiantNP implements Etudiant{
// auto-incrément des étudiants
private static int nextId=0;
// id de l'étudiant
private int id;
// nom et prénom de l'étudiant
private String nom, prenom;
/**
* Constructeur.
* Constructeur d'un étudiant.
* @param nom le nom de l'étudiant
* @param prenom le prénom de l'étudiant
*
*/
public EtudiantNP(String nom, String prenom){
Objects.requireNonNull(nom,"On ne peut pas créer un étudiant avec un nom null");

View File

@ -11,16 +11,25 @@ public class GroupeNP implements Groupe {
private static int nextId=0;
// attributs naturels induits par getter de l'interface Groupe
private int id;
// nom du groupe
private String name;
// bornes limitatives du groupe
private int min,max;
private TypeGroupe type;
// type de groupe
private TypeGroupe type;
// groupe père
private Groupe pointPoint;
// On utilise une interface set pour les sous-groupes et pour les membres (ce sont bien des ensembles en pratique).
private Set<Groupe> sousGroupes;
// Liste des étudiants du groupe
private Set<Etudiant> membresDuGroupe;
/**
* Nouveau groupe vide de type ROOT sans étudiants, sans sous-Groupe
*
* @param name le nom du groupe
* @param min le nombre minimum d'étudiants
* @param max le nombre maximum d'étudiants
*/
public GroupeNP(String name, int min, int max){
Objects.requireNonNull(name,"On ne peut pas créer un groupe dont le nom est null");
@ -36,6 +45,12 @@ public class GroupeNP implements Groupe {
/**
* Nouveau groupe vide de type FREE sans étudiants, sans sous-Groupe
*
* @param name le nom du groupe
* @param min le nombre minimum d'étudiants
* @param max le nombre maximum d'étudiants
* @param pere le groupe père
*
*/
public GroupeNP(Groupe pere, String name, int min, int max){
Objects.requireNonNull(pere,"On ne peut pas créer un groupe dont le père est null");
@ -53,6 +68,7 @@ public class GroupeNP implements Groupe {
/**
* Nouveau groupe de type PARTITION dupliquant le groupe passé en paramètre (pour servir de racine à une partition de ce groupe de type FREE passé en paramètre).
*
* @param pere le groupe père
*/
public GroupeNP(Groupe pere){
Objects.requireNonNull(pere,"On ne peut pas créer un groupe dont le père est null");
@ -68,6 +84,8 @@ public class GroupeNP implements Groupe {
/**
* Ajoute un étudiant. Se comporte comme add de l'interface Set.
*
* @param e l'étudiant à ajouter
*
* @return true iff e est ajouté
*/
@ -78,6 +96,8 @@ public class GroupeNP implements Groupe {
/**
* Enlève un étudiant. Se comporte comme remove de l'interface Set.
*
* @param e l'étudiant à enlever
*
* @return true iff e est enlevé
*/
@ -89,6 +109,8 @@ public class GroupeNP implements Groupe {
/**
* Ajoute un sous-groupe. Se comporte comme add de l'interface Set.
* vérifie que le groupe passé en argument a bien renseigné this comme son père.
*
* @param g le groupe à ajouter
*
* @return true iff g est ajouté
*/
@ -101,6 +123,8 @@ public class GroupeNP implements Groupe {
/**
* Enlève un groupe. Se comporte comme remove de l'interface Set.
*
* @param g le sous-groupe à enlever
*
* @return true iff e est enlevé
*/
@ -112,6 +136,7 @@ public class GroupeNP implements Groupe {
/**
* 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(){
@ -188,6 +213,10 @@ public class GroupeNP implements Groupe {
return this.membresDuGroupe;
}
/**
* permet de modifier le nom du groupe
* @param name le nouveau nom
*/
@Override
public void setName(String s) {
this.name=s;

View File

@ -22,7 +22,11 @@ public class AbstractChangementFactoryNP implements AbstractChangementFactory {
// On utilise une table de hachage pour retrouver facilement un changement (à partir de son id).
// Si il y a beaucoup de changements c'est plus rapide que de parcourir toute une liste.
private HashMap<Integer,Changement> brain;
/**
* Constructeur de l'usine à changement.
* @param agf l'usine à groupe travaillant en tandem avec cette usine.
* @param fenetre la fenetre principale
*/
public AbstractChangementFactoryNP(AbstractGroupeFactory agf, JFrame fenetre){
Objects.requireNonNull(agf,"On ne peut pas créer une usine à changement dont l'usine à groupe parternaire est null");
this.agf=agf;
@ -30,7 +34,12 @@ public class AbstractChangementFactoryNP implements AbstractChangementFactory {
this.brain=new HashMap<Integer,Changement>();
this.getChange();
}
/**
* Constructeur de l'usine à changement.
* @param agf l'usine à groupe travaillant en tandem avec cette usine.
* @param fenetre la fenetre principale
* @param liste la liste des changements
*/
public AbstractChangementFactoryNP(AbstractGroupeFactory agf, JFrame fenetre, Set<Changement> liste){
Objects.requireNonNull(agf,"On ne peut pas créer une usine à changement dont l'usine à groupe parternaire est null");
this.agf=agf;
@ -66,7 +75,7 @@ public class AbstractChangementFactoryNP implements AbstractChangementFactory {
/**
* permet de mettre en oeuvre un changement connu de l'usine abstraite.
*
* @param c le changement à mettre en oeuvre.
* @throws java.lang.NullPointerException si un argument est null
* @throws java.lang.IllegalStateException si le changement n'a pas de sens en l'état actuel (e.g. étudiant pas dans le groupe de départ a, groupe b inconnu, groupe a inconnu, etc).
* @throws java.lang.IllegalArgumentException si inconnu de l'usine abstraite
@ -97,7 +106,7 @@ public class AbstractChangementFactoryNP implements AbstractChangementFactory {
/**
* permet de supprimer un changement connu de l'usine abstraite.
*
* @param c le changement à supprimer.
* @throws java.lang.NullPointerException si un argument est null
* @throws java.lang.IllegalArgumentException si inconnu de l'usine abstraite
*/
@ -222,7 +231,11 @@ public class AbstractChangementFactoryNP implements AbstractChangementFactory {
// FONCTION POUR SIMPLIFIER LES Modification BD
// ***********************
/**
* permet de se connecter à la base de donnée
*
* @return la connexion à la base de donnée
*/
private Connection cnx(){
//On se Connecte a la BD
try{
@ -239,6 +252,13 @@ public class AbstractChangementFactoryNP implements AbstractChangementFactory {
return null;
}
/**
* permet de détécter une erreur de connexion à la base de donnée
*
* @return true si une erreur est détéctée, false sinon
*
*
*/
private boolean erreurCO(){
if(JOptionPane.showConfirmDialog(this.fenetre, "erreur connection a la BD reassayer?", "erreur connection", JOptionPane.YES_NO_OPTION)==JOptionPane.YES_OPTION){
return true;
@ -247,7 +267,13 @@ public class AbstractChangementFactoryNP implements AbstractChangementFactory {
return false;
}
}
/**
* permet de détécter une erreur SQL
*
* @return true si une erreur est détéctée, false sinon
*
*
*/
private boolean erreurSQL(){
if(JOptionPane.showConfirmDialog(this.fenetre, "erreur lors de la modification, reasssayer?", "erreur SQL", JOptionPane.YES_NO_OPTION)==JOptionPane.YES_OPTION){
return true;
@ -256,6 +282,12 @@ public class AbstractChangementFactoryNP implements AbstractChangementFactory {
}
}
/**
* permet de fermer la connexion à la base de donnée
*
* @param clos outil de fermture de la connexion
*
*/
private void close(AutoCloseable clos){
try{
clos.close();
@ -265,6 +297,9 @@ public class AbstractChangementFactoryNP implements AbstractChangementFactory {
}
}
/**
* permet de remplir la liste des changements de l'usine
*/
private void getChange(){
Connection cnx=this.cnx();
try{
@ -288,7 +323,14 @@ public class AbstractChangementFactoryNP implements AbstractChangementFactory {
}
this.close(cnx);
}
/**
* permet de chercher les sous-groupes d'un groupe
*
* @param idA id du groupe A
* @param idB id du groupe B
* @param retour tableau de groupe dans lequel on va stocker les groupes
* @param toFind le groupe à comparer (ou groupe père pour la première itération)
*/
private void getGroupe(int idA, int idB, Groupe[] retour, Groupe tofind){
if(retour[0]!=null && retour[1]!=null)
return;
@ -303,6 +345,10 @@ public class AbstractChangementFactoryNP implements AbstractChangementFactory {
}
}
/**
* pemet de arfricher la liste des changements
*
*/
private void refresh(){
this.brain=new HashMap<Integer,Changement>();
this.getChange();

View File

@ -28,6 +28,8 @@ public class AbstractGroupeFactoryNP implements AbstractGroupeFactory {
/**
* Le constructeur fabrique le groupe promotion déja plein (utilisé en Modèle persistant de donné).
* @param fenetre fenetre principale
*
*/
public AbstractGroupeFactoryNP(JFrame fenetre){
this.fenetre=fenetre;
@ -38,6 +40,10 @@ public class AbstractGroupeFactoryNP implements AbstractGroupeFactory {
/**
* Le constructeur fabrique le groupe promotion vide.
* Il faut ensuite y ajouter les étudiants.
* @param fenetre fenetre principale
* @param name nom de la promotion
* @param min le nombre minimum d'étudiants dans la promotion
* @param max le nombre maximum d'étudiants dans la promotion
*/
public AbstractGroupeFactoryNP(String name, int min, int max, JFrame fenetre){
Objects.requireNonNull(name,"On ne peut pas créer une promotion dont le nom est null");
@ -51,14 +57,23 @@ public class AbstractGroupeFactoryNP implements AbstractGroupeFactory {
/**
* Test plutôt optimiste. Si la clé est identique alors on fait comme si c'était le bon groupe.
*
* @param g le groupe à tester
* @return true si le groupe est connu
*/
public Boolean knows(Groupe g){
return this.brain.containsKey(Integer.valueOf(g.getId()));
}
/**
* pemet de changer le nom d'un groupe dans la base de données
*
* @param g le groupe dont on veut changer le nom
* @param name le nouveau nom
*
* @return true si le changement a été effectué, false s'il y a eu une erreur
*
*
*/
public boolean changeNameGroupe(Groupe g, String name){
if(!this.knows(g)){
throw new IllegalArgumentException("Groupe inconu ");
@ -99,6 +114,8 @@ public class AbstractGroupeFactoryNP implements AbstractGroupeFactory {
* permet de supprimer un groupe connu de l'usine abstraite qui ne contient pas de groupes.
* Pour détruire un groupe connu qui en contient d'autres il faut le faire récursivement.
*
* @param g le groupe à supprimer
*
* @throws java.lang.NullPointerException si un argument est null
* @throws java.lang.IllegalStateException si le groupe contient des groupes
* @throws java.lang.IllegalArgumentException si le groupe n'est pas connu de l'usine abstraite ou bien si le groupe est celui de toute la promotion (renvoyé par getPromotion)
@ -315,6 +332,11 @@ public class AbstractGroupeFactoryNP implements AbstractGroupeFactory {
// ***********************
/**
* permet de se connecter à la base de donnée
*
* @return la connexion à la base de donnée
*/
private Connection cnx(){
//On se Connecte a la BD
try{
@ -331,7 +353,13 @@ public class AbstractGroupeFactoryNP implements AbstractGroupeFactory {
}
return null;
}
/**
* permet de détécter une erreur de connexion à la base de donnée
*
* @return true si une erreur est détéctée, false sinon
*
*
*/
private boolean erreurCO(){
if(JOptionPane.showConfirmDialog(this.fenetre, "erreur connection a la BD reassayer?", "erreur connection", JOptionPane.YES_NO_OPTION)==JOptionPane.YES_OPTION){
return true;
@ -340,7 +368,13 @@ public class AbstractGroupeFactoryNP implements AbstractGroupeFactory {
return false;
}
}
/**
* permet de détécter une erreur SQL
*
* @return true si une erreur est détéctée, false sinon
*
*
*/
private boolean erreurSQL(){
if(JOptionPane.showConfirmDialog(this.fenetre, "erreur lors de la modification, reasssayer?", "erreur SQL", JOptionPane.YES_NO_OPTION)==JOptionPane.YES_OPTION){
return true;
@ -348,7 +382,11 @@ public class AbstractGroupeFactoryNP implements AbstractGroupeFactory {
return false;
}
}
/**
* permet de supprimer un étudiant de la base de donnée
* @param et l'étudiant à supprimer
* @param g le groupe dans lequel il est
*/
private void deleteEtu(Etudiant et, Groupe g){
Connection cnx=this.cnx();
try{
@ -366,7 +404,12 @@ public class AbstractGroupeFactoryNP implements AbstractGroupeFactory {
}
this.close(cnx);
}
/**
* permet de supprimer un étudiant de la base de donnée
* @param pst la requete préparée
* @param cnx la connexion à la base de donnée
* @param id le groupe parent
*/
private void deleteEtu(PreparedStatement pst, Connection cnx, int id){
try{
pst.setInt(1, id);
@ -387,7 +430,12 @@ public class AbstractGroupeFactoryNP implements AbstractGroupeFactory {
}
}
}
/**
* permet de fermer la connexion à la base de donnée
*
* @param clos outil de fermture de la connexion
*
*/
private void close(AutoCloseable clos){
try{
clos.close();
@ -398,7 +446,12 @@ public class AbstractGroupeFactoryNP implements AbstractGroupeFactory {
}
}
/**
* permet d'ajouter un groupe de la base de donnée
* @param etudiant l'étudiant à ajouter
* @param g le groupe de l'étudiant
* @return true s'il n'y a pas eu d'erreur, false sinon
*/
private boolean saveEtu(Etudiant etudiant, Groupe g){
Connection cnx = this.cnx();
try{
@ -436,7 +489,11 @@ private boolean saveEtu(Etudiant etudiant, Groupe g){
this.close(cnx);
return true;
}
/**
* permet d'ajouter un groupe dans la base de donnée
* @param g le groupe à ajouter
* @return true s'il n'y a pas eu d'erreur, false sinon
*/
private boolean saveGroupe(Groupe g){
Connection cnx=this.cnx();
try{
@ -468,7 +525,11 @@ private boolean saveEtu(Etudiant etudiant, Groupe g){
this.close(cnx);
return true;
}
/**
* permet de supprimer un groupe de la base de donnée
* @param g le groupe à supprimer
* @return true s'il n'y a pas eu d'erreur, false sinon
*/
private boolean suprGroupe(Groupe g){
Connection cnx=this.cnx();
try{
@ -498,6 +559,9 @@ private boolean saveEtu(Etudiant etudiant, Groupe g){
* FONCTION POUR INITIALISER LA FACTORY AVEC LA BD
* ********************************
*/
/**
* permet de charger les groupes de la base de donnée
*/
private void init(){
Connection cnx=this.cnx();
//on récupère le Groupe de la BD n'ayant pas de Parent (La promo donc)
@ -536,7 +600,6 @@ private boolean saveEtu(Etudiant etudiant, Groupe g){
* Fonction recursive permettant de récuperrer les sous groupe a partir de la BD
* @param g le groupe
* @param cnx la connection a la BD (evite de la surcharger)
* @param pourcent le pourcentage de ce groupe dans le chargement
*/
private void addSousGroupe(Groupe g, Connection cnx){
try{
@ -618,6 +681,7 @@ private boolean saveEtu(Etudiant etudiant, Groupe g){
* Refresh le groupe donnée pour le mettre a jour avec la Base de donnée
* Si le groupe n'existe plus on retourne le groupe parent le plus proche existant encore
* @param g le groupe a refresh
* @param cnx la connection a la BD (evite de la surcharger)
* @return le groupe refresh
*/
private Groupe refreshGroupe(Groupe g, Connection cnx){

View File

@ -12,11 +12,21 @@ public class ChangementNP implements Changement {
//auto-incrément des changements
private static int nextId=0;
private String raison;
// id du changement
private int id;
// groupe d'origine et d'arrivée
private Groupe a,b;
// étudiant concerné
private Etudiant e;
// raison de la demande
private String raison;
/**
* Constructeur d'un changement.
* @param a le groupe de départ
* @param b le groupe d'arrivée
* @param e l'étudiant demandant le changement
* @param raison la raison du changement
*/
public ChangementNP(Groupe a, Etudiant e, Groupe b){
Objects.requireNonNull(a,"On ne peut pas créer un changement avec un groupe à quitter null");
Objects.requireNonNull(b,"On ne peut pas créer un changement avec un groupe à rejoindre null");
@ -27,7 +37,14 @@ public class ChangementNP implements Changement {
this.b=b;
this.e=e;
}
/**
* Constructeur d'un changement.
* @param a le groupe de départ
* @param b le groupe d'arrivée
* @param e l'étudiant demandant le changement
* @param raison la raison du changement
*
*/
public ChangementNP(Groupe a, Etudiant e, Groupe b, String raison){
Objects.requireNonNull(a,"On ne peut pas créer un changement avec un groupe à quitter null");
Objects.requireNonNull(b,"On ne peut pas créer un changement avec un groupe à rejoindre null");
@ -38,7 +55,14 @@ public class ChangementNP implements Changement {
this.b=b;
this.e=e;
}
/**
* Constructeur d'un changement.
* @param a le groupe de départ
* @param b le groupe d'arrivée
* @param e l'étudiant demandant le changement
* @param id l'id du changement
*
*/
public ChangementNP(Groupe a, Etudiant e, Groupe b, int id){
Objects.requireNonNull(a,"On ne peut pas créer un changement avec un groupe à quitter null");
Objects.requireNonNull(b,"On ne peut pas créer un changement avec un groupe à rejoindre null");
@ -52,7 +76,15 @@ public class ChangementNP implements Changement {
this.nextId=this.id;
}
}
/**
* Constructeur d'un changement.
* @param a le groupe de départ
* @param b le groupe d'arrivée
* @param e l'étudiant demandant le changement
* @param id l'id du changement
* @param raison la raison du changement
*
*/
public ChangementNP(Groupe a, Etudiant e, Groupe b, int id, String raison){
Objects.requireNonNull(a,"On ne peut pas créer un changement avec un groupe à quitter null");
Objects.requireNonNull(b,"On ne peut pas créer un changement avec un groupe à rejoindre null");
@ -97,7 +129,10 @@ public class ChangementNP implements Changement {
public Etudiant getEtu(){
return this.e;
}
/**
* permet de récupérer la raison du changement
* @return la raison du changement
*/
@Override
public String getRaison() {
return this.raison;

View File

@ -7,13 +7,19 @@ import java.util.*;
public class EtudiantNP implements Etudiant{
// auto-incrément des étudiants
private static int nextId=0;
// id de l'étudiant
private int id;
// nom et prénom de l'étudiant
private String nom, prenom;
/**
* Constructeur.
*/
* Constructeur d'un étudiant.
* @param nom le nom de l'étudiant
* @param prenom le prénom de l'étudiant
*
*/
public EtudiantNP(String nom, String prenom){
Objects.requireNonNull(nom,"On ne peut pas créer un étudiant avec un nom null");
Objects.requireNonNull(prenom,"On ne peut pas créer un étudiant avec un nom null");
@ -24,8 +30,11 @@ public class EtudiantNP implements Etudiant{
}
/**
* Constructeur pour MPN
*/
* Constructeur d'un étudiant.
* @param nom le nom de l'étudiant
* @param prenom le prénom de l'étudiant
* @param id l'id de l'étudiant
*/
public EtudiantNP(String nom, String prenom, int id){
Objects.requireNonNull(nom,"On ne peut pas créer un étudiant avec un nom null");
Objects.requireNonNull(prenom,"On ne peut pas créer un étudiant avec un nom null");

View File

@ -11,16 +11,25 @@ public class GroupeNP implements Groupe {
private static int nextId=0;
// attributs naturels induits par getter de l'interface Groupe
private int id;
// nom du groupe
private String name;
// bornes limitatives du groupe
private int min,max;
private TypeGroupe type;
// type de groupe
private TypeGroupe type;
// groupe père
private Groupe pointPoint;
// On utilise une interface set pour les sous-groupes et pour les membres (ce sont bien des ensembles en pratique).
private Set<Groupe> sousGroupes;
// Liste des étudiants du groupe
private Set<Etudiant> membresDuGroupe;
/**
* Nouveau groupe vide de type ROOT sans étudiants, sans sous-Groupe
*
* @param name le nom du groupe
* @param min le nombre minimum d'étudiants
* @param max le nombre maximum d'étudiants
*/
public GroupeNP(String name, int min, int max){
Objects.requireNonNull(name,"On ne peut pas créer un groupe dont le nom est null");
@ -33,9 +42,17 @@ public class GroupeNP implements Groupe {
this.sousGroupes=new LinkedHashSet<Groupe>();
this.membresDuGroupe=new LinkedHashSet<Etudiant>();
}
/**
* Nouveau groupe complet (pour le modèle persisant de donnée)
* Nouveau groupe vide de type FREE sans étudiants, sans sous-Groupe
*
* @param name le nom du groupe
* @param min le nombre minimum d'étudiants
* @param max le nombre maximum d'étudiants
* @param pere le groupe père
* @param id l'id du groupe
* @param type le type du groupe
*
*
*/
public GroupeNP(int id, String name, int min, int max, TypeGroupe type, Groupe pere){
Objects.requireNonNull(name,"On ne peut pas créer un groupe dont le nom est null");
@ -58,6 +75,12 @@ public class GroupeNP implements Groupe {
/**
* Nouveau groupe vide de type FREE sans étudiants, sans sous-Groupe
*
* @param name le nom du groupe
* @param min le nombre minimum d'étudiants
* @param max le nombre maximum d'étudiants
* @param pere le groupe père
*
*/
public GroupeNP(Groupe pere, String name, int min, int max){
Objects.requireNonNull(pere,"On ne peut pas créer un groupe dont le père est null");
@ -75,6 +98,7 @@ public class GroupeNP implements Groupe {
/**
* Nouveau groupe de type PARTITION dupliquant le groupe passé en paramètre (pour servir de racine à une partition de ce groupe de type FREE passé en paramètre).
*
* @param pere le groupe père
*/
public GroupeNP(Groupe pere){
Objects.requireNonNull(pere,"On ne peut pas créer un groupe dont le père est null");
@ -90,6 +114,8 @@ public class GroupeNP implements Groupe {
/**
* Ajoute un étudiant. Se comporte comme add de l'interface Set.
*
* @param e l'étudiant à ajouter
*
* @return true iff e est ajouté
*/
@ -100,6 +126,8 @@ public class GroupeNP implements Groupe {
/**
* Enlève un étudiant. Se comporte comme remove de l'interface Set.
*
* @param e l'étudiant à enlever
*
* @return true iff e est enlevé
*/
@ -111,6 +139,8 @@ public class GroupeNP implements Groupe {
/**
* Ajoute un sous-groupe. Se comporte comme add de l'interface Set.
* vérifie que le groupe passé en argument a bien renseigné this comme son père.
*
* @param g le groupe à ajouter
*
* @return true iff g est ajouté
*/
@ -123,6 +153,8 @@ public class GroupeNP implements Groupe {
/**
* Enlève un groupe. Se comporte comme remove de l'interface Set.
*
* @param g le sous-groupe à enlever
*
* @return true iff e est enlevé
*/