commentaire, javadoc et simplification

This commit is contained in:
martins 2022-11-14 09:46:50 +01:00
parent 46d4ac31d7
commit 602b5ce0da
2 changed files with 97 additions and 62 deletions

View File

@ -23,7 +23,7 @@ run : ${JAR_MNP}
# AUTRE BUTS # AUTRE BUTS
doc : doc :
javadoc -d doc src/fr/iutfbleau/projetIHM2022FI2/API/*.java src/fr/iutfbleau/projetIHM2022FI2/MNP/*.java javadoc -d doc src/fr/iutfbleau/projetIHM2022FI2/API/*.java src/fr/iutfbleau/projetIHM2022FI2/MNP/*.java src/fr/iutfbleau/projetIHM2022FI2/Graphic/Controller/*.java src/fr/iutfbleau/projetIHM2022FI2/Graphic/View/*.java
clean : clean :
rm -rf ${BUILD}/* *.jar rm -rf ${BUILD}/* *.jar

View File

@ -27,10 +27,13 @@ import fr.iutfbleau.projetIHM2022FI2.MNP.AbstractGroupeFactoryNP;
import fr.iutfbleau.projetIHM2022FI2.MNP.EtudiantNP; import fr.iutfbleau.projetIHM2022FI2.MNP.EtudiantNP;
import fr.iutfbleau.projetIHM2022FI2.MNP.GroupeNP; import fr.iutfbleau.projetIHM2022FI2.MNP.GroupeNP;
/**
* Le Model de L'IHM
*/
public class Model{ public class Model{
private FenetreGroupe fenGr; private FenetreGroupe fenGr;
private FenetreEtudiant fenEtu; private FenetreEtudiant fenEtu;
private Set<Groupe> promo; private AbstractGroupeFactory promo;
private JFrame fenetre; private JFrame fenetre;
public Model(){ public Model(){
this.fenetre=new JFrame(); this.fenetre=new JFrame();
@ -39,22 +42,14 @@ public class Model{
Chargement ch=new Chargement(); Chargement ch=new Chargement();
this.fenetre.add(ch, BorderLayout.CENTER); this.fenetre.add(ch, BorderLayout.CENTER);
this.fenetre.setVisible(true); this.fenetre.setVisible(true);
this.promo=new LinkedHashSet<>();
this.getPromo(ch); this.getPromo(ch);
switch(this.promo.size()){ //A Modif
case 0: if(this.promo==null){
this.fenGr=new FenetreGroupe(null, this); this.fenGr=new FenetreGroupe(null, this);
this.fenEtu=new FenetreEtudiant(null); this.fenEtu=new FenetreEtudiant(null);
break; }else{
case 1: this.fenGr=new FenetreGroupe(this.promo.getPromotion(), this);
this.fenGr=new FenetreGroupe(this.promo.iterator().next(), this); this.fenEtu=new FenetreEtudiant(this.promo.getPromotion());
this.fenEtu=new FenetreEtudiant(this.promo.iterator().next());
break;
default:
this.fenGr=new FenetreGroupe(this.promo.iterator().next(), this);
this.fenEtu=new FenetreEtudiant(this.promo.iterator().next());
//modifier le boutou pour changer de promo
break;
} }
this.fenetre.dispose(); this.fenetre.dispose();
this.fenetre=new JFrame(); this.fenetre=new JFrame();
@ -68,7 +63,13 @@ public class Model{
this.fenetre.setVisible(true); this.fenetre.setVisible(true);
} }
/**
* Fonction permettant d'initialiser l'AbstractFactory de la promo
* avec la Base de donné
* @param Chargement: pour indiquer la progression du chargement
*/
private void getPromo(Chargement chargement){ private void getPromo(Chargement chargement){
//On se Connecte a la BD
try{ try{
Class.forName("org.mariadb.jdbc.Driver"); Class.forName("org.mariadb.jdbc.Driver");
try{ try{
@ -76,20 +77,26 @@ public class Model{
"jdbc:mariadb://dwarves.iut-fbleau.fr/chaignea", "jdbc:mariadb://dwarves.iut-fbleau.fr/chaignea",
"chaignea", "Chaigneauphpmyadmin"); "chaignea", "Chaigneauphpmyadmin");
try{ try{
//on récupère le premier groupe de la BD (donc la racine de tous les autres) //on récupère le Groupe de la BD n'ayant pas de Parent (La promo donc)
PreparedStatement pst = cnx.prepareStatement( PreparedStatement pst = cnx.prepareStatement(
"SELECT `id`, `nom`, `min`, `max`, `value`, `id-parent` FROM `Groupe` join `TYPE` on Groupe.Type=TYPE.name where Groupe.id=`Groupe`.`id-parent` ORDER BY Groupe.id ASC;"); "SELECT `id`, `nom`, `min`, `max`, `value`, `id-parent` FROM `Groupe` join `TYPE` on Groupe.Type=TYPE.name where Groupe.id=`Groupe`.`id-parent` ORDER BY Groupe.id ASC;");
try{ try{
ResultSet rs = pst.executeQuery(); ResultSet rs = pst.executeQuery();
rs.last();
int nbpromo=rs.getRow();
rs=pst.executeQuery(); rs=pst.executeQuery();
try{ try{
while(rs.next()){ //Si il existe bien une promotion
//on image qu'il puisse avoir plusieur promo if(rs.first()){
this.promo.add(new GroupeNP(rs.getInt(1), rs.getString(2), rs.getInt(3), rs.getInt(4), TypeGroupe.getType(rs.getString(5)), null)); //On créer le groupe de promo
//on y ajoute tous ses sous-groupe Groupe groupe=new GroupeNP(rs.getInt(1), rs.getString(2), rs.getInt(3), rs.getInt(4), TypeGroupe.getType(rs.getString(5)), null);
this.addSousGroupe(promo.iterator().next(), cnx, chargement, 100/nbpromo); //On lui ajoute tout ses sous-groupe
this.addSousGroupe(groupe, cnx, chargement, 100);
//On créer la Factory
this.promo=new AbstractGroupeFactoryNP(groupe);
//On y ajoute les étudiants
this.addEtudiant(groupe, cnx);
}else{
//Si aucune ligne et donc pas de promo:
this.promo=null;
} }
}catch(SQLException e){ }catch(SQLException e){
System.out.println("erreur dans la prise de resultat"); System.out.println("erreur dans la prise de resultat");
@ -110,25 +117,42 @@ public class Model{
System.out.println("pilote non disponible"); System.out.println("pilote non disponible");
} }
} }
/**
* 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 Chargement pour indiquer la progression du chargement
* @param pourcent le pourcentage de ce groupe dans le chargement
*/
private void addSousGroupe(Groupe g, Connection cnx, Chargement ch, int pourcent){ private void addSousGroupe(Groupe g, Connection cnx, Chargement ch, int pourcent){
this.addEtudiant(g, cnx);
try{ try{
//On récupere les Groupe qui ont le parent :g
PreparedStatement pst= cnx.prepareStatement( PreparedStatement pst= cnx.prepareStatement(
"SELECT `id`, `nom`, `min`, `max`, `value`, `id-parent` FROM `Groupe` join `TYPE` on Groupe.Type=TYPE.name where Groupe.`id-parent`=? and Groupe.id!=Groupe.`id-parent`;"); "SELECT `id`, `nom`, `min`, `max`, `value`, `id-parent` FROM `Groupe` join `TYPE` on Groupe.Type=TYPE.name where Groupe.`id-parent`=? and Groupe.id!=Groupe.`id-parent`;");
try{ try{
pst.setString(1, String.valueOf(g.getId())); pst.setString(1, String.valueOf(g.getId()));
ResultSet rs=pst.executeQuery(); ResultSet rs=pst.executeQuery();
//on récupère le nombre de ligne
rs.last(); rs.last();
int nbsous=rs.getRow(); int nbsous=rs.getRow();
//si il n'y pas de sous-groupe
if(nbsous==0){ if(nbsous==0){
//on ajoute le pourcentage de chargement de ce groupe
ch.addPourcent(pourcent); ch.addPourcent(pourcent);
//La fonction est fini
rs.close();
pst.close();
return; return;
} }
rs=pst.executeQuery(); rs=pst.executeQuery();
//autrement si le groupe as des sous groupe
try{ try{
while(rs.next()){ while(rs.next()){
//on les ajoute
Groupe nouveau=new GroupeNP(rs.getInt(1), rs.getString(2), rs.getInt(3), rs.getInt(4), TypeGroupe.getType(rs.getString(5)), g); Groupe nouveau=new GroupeNP(rs.getInt(1), rs.getString(2), rs.getInt(3), rs.getInt(4), TypeGroupe.getType(rs.getString(5)), g);
g.addSousGroupe(nouveau); g.addSousGroupe(nouveau);
//on ajoute les sous groupe des sous-groupe
//le pourcentage diminue en fonction du nombre de sous-groupe
this.addSousGroupe(nouveau, cnx, ch, pourcent/nbsous); this.addSousGroupe(nouveau, cnx, ch, pourcent/nbsous);
} }
}catch(SQLException e){ }catch(SQLException e){
@ -144,32 +168,38 @@ public class Model{
} }
} }
/**
* Fonction recursive ajoutant les étudiant aux groupe de la promo
* @param g le groupe pour qui ajouter les Etudiant
* @param cnx la connection (evite de surcharger la BD)
*/
private void addEtudiant(Groupe g, Connection cnx){ private void addEtudiant(Groupe g, Connection cnx){
try{ try{
PreparedStatement pst= cnx.prepareStatement( //On récupère les etudiants contenue du groupe
"SELECT Etudiant.nom, Etudiant.prenom, Etudiant.id FROM `CONTIENT` JOIN Etudiant on CONTIENT.idEt=Etudiant.id WHERE CONTIENT.idGroupe=? Group BY Etudiant.nom ORDER BY Etudiant.id ASC"); PreparedStatement pst;
//Si c'est la promo
pst= cnx.prepareStatement("SELECT Etudiant.nom, Etudiant.prenom, Etudiant.id FROM `CONTIENT` JOIN Etudiant on CONTIENT.idEt=Etudiant.id WHERE CONTIENT.idGroupe=1 ORDER BY Etudiant.id ASC");
try{ try{
pst.setInt(1, g.getId()); pst.setInt(1, g.getId());
ResultSet rs=pst.executeQuery(); ResultSet rs=pst.executeQuery();
try{ try{
//On vérifie dans toutes le promo si personne ne connait déja l'Etudiant(s) du même noms //Pour tous les étudiants
while(rs.next()){ while(rs.next()){
for(Groupe m:this.promo){ //si c'est la groupe de promo
AbstractGroupeFactory agf=new AbstractGroupeFactoryNP(m); //On ne peut pas récuperer l'etudiant il est donc créer
Set<Etudiant> contenue=agf.getEtudiants(rs.getString(1)); if(g==this.promo.getPromotion()){
//Si il est connu on le/les ajoute this.promo.addToGroupe(g, new EtudiantNP(rs.getString(1), rs.getString(2), rs.getInt(3)));
if(contenue.iterator().hasNext()){
for(Etudiant e:contenue){
g.addEtudiant(e);
}
//autrement on les crée
}else{ }else{
agf.addToGroupe(g, new EtudiantNP(rs.getString(1), rs.getString(2), rs.getInt(3))); //autrement on recupere l'etudiant
for(Etudiant e: this.promo.getEtudiants(rs.getString(1))){
this.promo.addToGroupe(g, e);
} }
} }
} }
//on ajout les étudiants a tous les sous groupe
for(Groupe sous:g.getSousGroupes()){
this.addEtudiant(sous, cnx);
}
}catch(SQLException e){ }catch(SQLException e){
System.out.println("erreur dans la prise de resultat"); System.out.println("erreur dans la prise de resultat");
} }
@ -183,6 +213,10 @@ public class Model{
} }
} }
/**
* Fonction pour refresh/changer de groupe d'affichage
* @param g le groupe a afficher
*/
public void showGroupe(Groupe g){ public void showGroupe(Groupe g){
this.fenGr=new FenetreGroupe(g, this); this.fenGr=new FenetreGroupe(g, this);
this.fenEtu=new FenetreEtudiant(g); this.fenEtu=new FenetreEtudiant(g);
@ -191,25 +225,28 @@ public class Model{
this.fenetre.add(new JScrollPane(this.fenEtu)); this.fenetre.add(new JScrollPane(this.fenEtu));
this.fenetre.revalidate(); this.fenetre.revalidate();
} }
/**
* getteur de la fenetre
* @return JFrame la fenetre
*/
public JFrame getFenetre() { public JFrame getFenetre() {
return fenetre; return fenetre;
} }
/**
* Fonction pour supprimer un groupe
* @param g le groupe a supprimer
*/
public void delete(Groupe g){ public void delete(Groupe g){
for(Groupe sous: this.promo){ //On ne peut pas supprimer la promo
AbstractGroupeFactory agf=new AbstractGroupeFactoryNP(sous); if(g==this.promo.getPromotion()){
if(agf.knows(g)){
if(g==agf.getPromotion()){
JOptionPane.showMessageDialog(this.fenetre, "impossible de supprimer la promotion", "alerte", JOptionPane.ERROR_MESSAGE); JOptionPane.showMessageDialog(this.fenetre, "impossible de supprimer la promotion", "alerte", JOptionPane.ERROR_MESSAGE);
return; return;
} }
//autrement on récupere les groupe a supprimer par ordre avec une fonction recursive
LinkedList<Groupe> file=new LinkedList<>(); LinkedList<Groupe> file=new LinkedList<>();
this.deleteRecursif(file, g); this.deleteRecursif(file, g);
for(Groupe sup:file){ for(Groupe sup:file){
agf.deleteGroupe(sup); this.promo.deleteGroupe(sup);
}
}
} }
} }
@ -221,13 +258,11 @@ public class Model{
} }
public void partition(Groupe g, int n, String name){ public void partition(Groupe g, int n, String name){
AbstractGroupeFactory agf=new AbstractGroupeFactoryNP(g); this.promo.createPartition(g, name, n);
agf.createPartition(g, name, n);
} }
public void free(Groupe g, String name, int min, int max){ public void free(Groupe g, String name, int min, int max){
AbstractGroupeFactory agf=new AbstractGroupeFactoryNP(g); this.promo.createGroupe(g, name, min, max);
agf.createGroupe(g, name, min, max);
} }
public void rename(String name, Groupe g){ public void rename(String name, Groupe g){