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. // Si il y a beaucoup de changements c'est plus rapide que de parcourir toute une liste.
private HashMap<Integer,Changement> brain; 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){ public AbstractChangementFactoryNP(AbstractGroupeFactory agf){
Objects.requireNonNull(agf,"On ne peut pas créer une usine à changement dont l'usine à groupe parternaire est null"); Objects.requireNonNull(agf,"On ne peut pas créer une usine à changement dont l'usine à groupe parternaire est null");
this.agf=agf; this.agf=agf;
@ -44,6 +48,8 @@ public class AbstractChangementFactoryNP implements AbstractChangementFactory {
/** /**
* permet de mettre en oeuvre un changement connu de l'usine abstraite. * 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.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.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. * 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.NullPointerException si un argument est null
* @throws java.lang.IllegalArgumentException si inconnu de l'usine abstraite * @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); 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 @Override
public void createChangement(Groupe A, Etudiant e, Groupe B, String raison) { public void createChangement(Groupe A, Etudiant e, Groupe B, String raison) {
Objects.requireNonNull(A,"Le groupe d'origine ne peut pas être null"); Objects.requireNonNull(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. * Le constructeur fabrique le groupe promotion vide.
* Il faut ensuite y ajouter les étudiants. * 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){ public AbstractGroupeFactoryNP(String name, int min, int max){
Objects.requireNonNull(name,"On ne peut pas créer une promotion dont le nom est null"); 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. * 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){ public Boolean knows(Groupe g){
return this.brain.containsKey(Integer.valueOf(g.getId())); return this.brain.containsKey(Integer.valueOf(g.getId()));
@ -49,7 +57,9 @@ public class AbstractGroupeFactoryNP implements AbstractGroupeFactory {
/** /**
* permet de supprimer un groupe connu de l'usine abstraite qui ne contient pas de groupes. * 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. * 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.NullPointerException si un argument est null
* @throws java.lang.IllegalStateException si le groupe contient des groupes * @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) * @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; 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 @Override
public boolean changeNameGroupe(Groupe g, String name) { public boolean changeNameGroupe(Groupe g, String name) {
g.setName(name); g.setName(name);
return true; 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 @Override
public Groupe refreshALL(Groupe g) { public Groupe refreshALL(Groupe g) {
return g; return g;

View File

@ -12,11 +12,22 @@ public class ChangementNP implements Changement {
//auto-incrément des changements //auto-incrément des changements
private static int nextId=0; private static int nextId=0;
// id du changement
private int id; private int id;
// groupe d'origine et d'arrivée
private Groupe a,b; private Groupe a,b;
// étudiant concerné
private Etudiant e; private Etudiant e;
// raison de la demande
private String raison; 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){ 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(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(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; 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){ 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(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(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(){ public Etudiant getEtu(){
return this.e; return this.e;
} }
/**
* permet de récupérer la raison du changement
* @return la raison du changement
*/
@Override @Override
public String getRaison() { public String getRaison() {
return this.raison; return this.raison;

View File

@ -6,13 +6,18 @@ import java.util.*;
*/ */
public class EtudiantNP implements Etudiant{ public class EtudiantNP implements Etudiant{
// auto-incrément des étudiants
private static int nextId=0; private static int nextId=0;
// id de l'étudiant
private int id; private int id;
// nom et prénom de l'étudiant
private String nom, prenom; 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){ public EtudiantNP(String nom, String prenom){
Objects.requireNonNull(nom,"On ne peut pas créer un étudiant avec un nom null"); 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; private static int nextId=0;
// attributs naturels induits par getter de l'interface Groupe // attributs naturels induits par getter de l'interface Groupe
private int id; private int id;
// nom du groupe
private String name; private String name;
// bornes limitatives du groupe
private int min,max; private int min,max;
private TypeGroupe type; // type de groupe
private TypeGroupe type;
// groupe père
private Groupe pointPoint; private Groupe pointPoint;
// On utilise une interface set pour les sous-groupes et pour les membres (ce sont bien des ensembles en pratique). // On utilise une interface set pour les sous-groupes et pour les membres (ce sont bien des ensembles en pratique).
private Set<Groupe> sousGroupes; private Set<Groupe> sousGroupes;
// Liste des étudiants du groupe
private Set<Etudiant> membresDuGroupe; private Set<Etudiant> membresDuGroupe;
/** /**
* Nouveau groupe vide de type ROOT sans étudiants, sans sous-Groupe * 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){ public GroupeNP(String name, int min, int max){
Objects.requireNonNull(name,"On ne peut pas créer un groupe dont le nom est null"); 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 * 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){ 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(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). * 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){ public GroupeNP(Groupe pere){
Objects.requireNonNull(pere,"On ne peut pas créer un groupe dont le père est null"); 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. * Ajoute un étudiant. Se comporte comme add de l'interface Set.
*
* @param e l'étudiant à ajouter
* *
* @return true iff e est ajouté * @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. * Enlève un étudiant. Se comporte comme remove de l'interface Set.
*
* @param e l'étudiant à enlever
* *
* @return true iff e est enlevé * @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. * 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. * 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é * @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. * Enlève un groupe. Se comporte comme remove de l'interface Set.
*
* @param g le sous-groupe à enlever
* *
* @return true iff e est enlevé * @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). * permet de récupérer l'identifiant d'un groupe (référence interne sans intérêt irl).
*
* @return l'identifiant. * @return l'identifiant.
*/ */
public int getId(){ public int getId(){
@ -188,6 +213,10 @@ public class GroupeNP implements Groupe {
return this.membresDuGroupe; return this.membresDuGroupe;
} }
/**
* permet de modifier le nom du groupe
* @param name le nouveau nom
*/
@Override @Override
public void setName(String s) { public void setName(String s) {
this.name=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). // 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. // Si il y a beaucoup de changements c'est plus rapide que de parcourir toute une liste.
private HashMap<Integer,Changement> brain; 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){ 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"); Objects.requireNonNull(agf,"On ne peut pas créer une usine à changement dont l'usine à groupe parternaire est null");
this.agf=agf; this.agf=agf;
@ -30,7 +34,12 @@ public class AbstractChangementFactoryNP implements AbstractChangementFactory {
this.brain=new HashMap<Integer,Changement>(); this.brain=new HashMap<Integer,Changement>();
this.getChange(); 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){ 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"); Objects.requireNonNull(agf,"On ne peut pas créer une usine à changement dont l'usine à groupe parternaire est null");
this.agf=agf; this.agf=agf;
@ -66,7 +75,7 @@ public class AbstractChangementFactoryNP implements AbstractChangementFactory {
/** /**
* permet de mettre en oeuvre un changement connu de l'usine abstraite. * 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.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.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 * @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. * 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.NullPointerException si un argument est null
* @throws java.lang.IllegalArgumentException si inconnu de l'usine abstraite * @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 // 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(){ private Connection cnx(){
//On se Connecte a la BD //On se Connecte a la BD
try{ try{
@ -239,6 +252,13 @@ public class AbstractChangementFactoryNP implements AbstractChangementFactory {
return null; 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(){ private boolean erreurCO(){
if(JOptionPane.showConfirmDialog(this.fenetre, "erreur connection a la BD reassayer?", "erreur connection", JOptionPane.YES_NO_OPTION)==JOptionPane.YES_OPTION){ if(JOptionPane.showConfirmDialog(this.fenetre, "erreur connection a la BD reassayer?", "erreur connection", JOptionPane.YES_NO_OPTION)==JOptionPane.YES_OPTION){
return true; return true;
@ -247,7 +267,13 @@ public class AbstractChangementFactoryNP implements AbstractChangementFactory {
return false; 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(){ private boolean erreurSQL(){
if(JOptionPane.showConfirmDialog(this.fenetre, "erreur lors de la modification, reasssayer?", "erreur SQL", JOptionPane.YES_NO_OPTION)==JOptionPane.YES_OPTION){ if(JOptionPane.showConfirmDialog(this.fenetre, "erreur lors de la modification, reasssayer?", "erreur SQL", JOptionPane.YES_NO_OPTION)==JOptionPane.YES_OPTION){
return true; 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){ private void close(AutoCloseable clos){
try{ try{
clos.close(); clos.close();
@ -265,6 +297,9 @@ public class AbstractChangementFactoryNP implements AbstractChangementFactory {
} }
} }
/**
* permet de remplir la liste des changements de l'usine
*/
private void getChange(){ private void getChange(){
Connection cnx=this.cnx(); Connection cnx=this.cnx();
try{ try{
@ -288,7 +323,14 @@ public class AbstractChangementFactoryNP implements AbstractChangementFactory {
} }
this.close(cnx); 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){ private void getGroupe(int idA, int idB, Groupe[] retour, Groupe tofind){
if(retour[0]!=null && retour[1]!=null) if(retour[0]!=null && retour[1]!=null)
return; return;
@ -303,6 +345,10 @@ public class AbstractChangementFactoryNP implements AbstractChangementFactory {
} }
} }
/**
* pemet de arfricher la liste des changements
*
*/
private void refresh(){ private void refresh(){
this.brain=new HashMap<Integer,Changement>(); this.brain=new HashMap<Integer,Changement>();
this.getChange(); 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é). * Le constructeur fabrique le groupe promotion déja plein (utilisé en Modèle persistant de donné).
* @param fenetre fenetre principale
*
*/ */
public AbstractGroupeFactoryNP(JFrame fenetre){ public AbstractGroupeFactoryNP(JFrame fenetre){
this.fenetre=fenetre; this.fenetre=fenetre;
@ -38,6 +40,10 @@ public class AbstractGroupeFactoryNP implements AbstractGroupeFactory {
/** /**
* Le constructeur fabrique le groupe promotion vide. * Le constructeur fabrique le groupe promotion vide.
* Il faut ensuite y ajouter les étudiants. * 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){ 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"); 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. * 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 * @return true si le groupe est connu
*/ */
public Boolean knows(Groupe g){ public Boolean knows(Groupe g){
return this.brain.containsKey(Integer.valueOf(g.getId())); 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){ public boolean changeNameGroupe(Groupe g, String name){
if(!this.knows(g)){ if(!this.knows(g)){
throw new IllegalArgumentException("Groupe inconu "); 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. * 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. * 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.NullPointerException si un argument est null
* @throws java.lang.IllegalStateException si le groupe contient des groupes * @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) * @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)
@ -314,7 +331,12 @@ public class AbstractGroupeFactoryNP implements AbstractGroupeFactory {
// FONCTION POUR SIMPLIFIER LES Modification BD // 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(){ private Connection cnx(){
//On se Connecte a la BD //On se Connecte a la BD
try{ try{
@ -331,7 +353,13 @@ public class AbstractGroupeFactoryNP implements AbstractGroupeFactory {
} }
return null; 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(){ private boolean erreurCO(){
if(JOptionPane.showConfirmDialog(this.fenetre, "erreur connection a la BD reassayer?", "erreur connection", JOptionPane.YES_NO_OPTION)==JOptionPane.YES_OPTION){ if(JOptionPane.showConfirmDialog(this.fenetre, "erreur connection a la BD reassayer?", "erreur connection", JOptionPane.YES_NO_OPTION)==JOptionPane.YES_OPTION){
return true; return true;
@ -340,7 +368,13 @@ public class AbstractGroupeFactoryNP implements AbstractGroupeFactory {
return false; 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(){ private boolean erreurSQL(){
if(JOptionPane.showConfirmDialog(this.fenetre, "erreur lors de la modification, reasssayer?", "erreur SQL", JOptionPane.YES_NO_OPTION)==JOptionPane.YES_OPTION){ if(JOptionPane.showConfirmDialog(this.fenetre, "erreur lors de la modification, reasssayer?", "erreur SQL", JOptionPane.YES_NO_OPTION)==JOptionPane.YES_OPTION){
return true; return true;
@ -348,7 +382,11 @@ public class AbstractGroupeFactoryNP implements AbstractGroupeFactory {
return false; 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){ private void deleteEtu(Etudiant et, Groupe g){
Connection cnx=this.cnx(); Connection cnx=this.cnx();
try{ try{
@ -366,7 +404,12 @@ public class AbstractGroupeFactoryNP implements AbstractGroupeFactory {
} }
this.close(cnx); 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){ private void deleteEtu(PreparedStatement pst, Connection cnx, int id){
try{ try{
pst.setInt(1, id); 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){ private void close(AutoCloseable clos){
try{ try{
clos.close(); 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){ private boolean saveEtu(Etudiant etudiant, Groupe g){
Connection cnx = this.cnx(); Connection cnx = this.cnx();
try{ try{
@ -436,7 +489,11 @@ private boolean saveEtu(Etudiant etudiant, Groupe g){
this.close(cnx); this.close(cnx);
return true; 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){ private boolean saveGroupe(Groupe g){
Connection cnx=this.cnx(); Connection cnx=this.cnx();
try{ try{
@ -468,7 +525,11 @@ private boolean saveEtu(Etudiant etudiant, Groupe g){
this.close(cnx); this.close(cnx);
return true; 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){ private boolean suprGroupe(Groupe g){
Connection cnx=this.cnx(); Connection cnx=this.cnx();
try{ try{
@ -498,6 +559,9 @@ private boolean saveEtu(Etudiant etudiant, Groupe g){
* FONCTION POUR INITIALISER LA FACTORY AVEC LA BD * FONCTION POUR INITIALISER LA FACTORY AVEC LA BD
* ******************************** * ********************************
*/ */
/**
* permet de charger les groupes de la base de donnée
*/
private void init(){ private void init(){
Connection cnx=this.cnx(); Connection cnx=this.cnx();
//on récupère le Groupe de la BD n'ayant pas de Parent (La promo donc) //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 * Fonction recursive permettant de récuperrer les sous groupe a partir de la BD
* @param g le groupe * @param g le groupe
* @param cnx la connection a la BD (evite de la surcharger) * @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){ private void addSousGroupe(Groupe g, Connection cnx){
try{ 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 * 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 * Si le groupe n'existe plus on retourne le groupe parent le plus proche existant encore
* @param g le groupe a refresh * @param g le groupe a refresh
* @param cnx la connection a la BD (evite de la surcharger)
* @return le groupe refresh * @return le groupe refresh
*/ */
private Groupe refreshGroupe(Groupe g, Connection cnx){ private Groupe refreshGroupe(Groupe g, Connection cnx){

View File

@ -12,11 +12,21 @@ public class ChangementNP implements Changement {
//auto-incrément des changements //auto-incrément des changements
private static int nextId=0; private static int nextId=0;
private String raison; // id du changement
private int id; private int id;
// groupe d'origine et d'arrivée
private Groupe a,b; private Groupe a,b;
// étudiant concerné
private Etudiant e; 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){ 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(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(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.b=b;
this.e=e; 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){ 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(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(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.b=b;
this.e=e; 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){ 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(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(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; 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){ 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(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(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(){ public Etudiant getEtu(){
return this.e; return this.e;
} }
/**
* permet de récupérer la raison du changement
* @return la raison du changement
*/
@Override @Override
public String getRaison() { public String getRaison() {
return this.raison; return this.raison;

View File

@ -7,13 +7,19 @@ import java.util.*;
public class EtudiantNP implements Etudiant{ public class EtudiantNP implements Etudiant{
// auto-incrément des étudiants
private static int nextId=0; private static int nextId=0;
// id de l'étudiant
private int id; private int id;
// nom et prénom de l'étudiant
private String nom, prenom; 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){ public EtudiantNP(String nom, String prenom){
Objects.requireNonNull(nom,"On ne peut pas créer un étudiant avec un nom null"); 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"); 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){ 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(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"); 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; private static int nextId=0;
// attributs naturels induits par getter de l'interface Groupe // attributs naturels induits par getter de l'interface Groupe
private int id; private int id;
// nom du groupe
private String name; private String name;
// bornes limitatives du groupe
private int min,max; private int min,max;
private TypeGroupe type; // type de groupe
private TypeGroupe type;
// groupe père
private Groupe pointPoint; private Groupe pointPoint;
// On utilise une interface set pour les sous-groupes et pour les membres (ce sont bien des ensembles en pratique). // On utilise une interface set pour les sous-groupes et pour les membres (ce sont bien des ensembles en pratique).
private Set<Groupe> sousGroupes; private Set<Groupe> sousGroupes;
// Liste des étudiants du groupe
private Set<Etudiant> membresDuGroupe; private Set<Etudiant> membresDuGroupe;
/** /**
* Nouveau groupe vide de type ROOT sans étudiants, sans sous-Groupe * 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){ public GroupeNP(String name, int min, int max){
Objects.requireNonNull(name,"On ne peut pas créer un groupe dont le nom est null"); 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.sousGroupes=new LinkedHashSet<Groupe>();
this.membresDuGroupe=new LinkedHashSet<Etudiant>(); 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){ 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"); Objects.requireNonNull(name,"On ne peut pas créer un groupe dont le nom est null");
@ -55,9 +72,15 @@ public class GroupeNP implements Groupe {
this.sousGroupes=new LinkedHashSet<Groupe>(); this.sousGroupes=new LinkedHashSet<Groupe>();
this.membresDuGroupe=new LinkedHashSet<Etudiant>(); this.membresDuGroupe=new LinkedHashSet<Etudiant>();
} }
/** /**
* Nouveau groupe vide de type FREE sans étudiants, sans sous-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){ 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(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). * 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){ public GroupeNP(Groupe pere){
Objects.requireNonNull(pere,"On ne peut pas créer un groupe dont le père est null"); 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. * Ajoute un étudiant. Se comporte comme add de l'interface Set.
*
* @param e l'étudiant à ajouter
* *
* @return true iff e est ajouté * @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. * Enlève un étudiant. Se comporte comme remove de l'interface Set.
*
* @param e l'étudiant à enlever
* *
* @return true iff e est enlevé * @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. * 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. * 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é * @return true iff g est ajouté
*/ */
@ -120,9 +150,11 @@ public class GroupeNP implements Groupe {
return this.sousGroupes.add(g); 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"); 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. * Enlève un groupe. Se comporte comme remove de l'interface Set.
*
* @param g le sous-groupe à enlever
* *
* @return true iff e est enlevé * @return true iff e est enlevé
*/ */