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
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 :
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.GroupeNP;
/**
* Le Model de L'IHM
*/
public class Model{
private FenetreGroupe fenGr;
private FenetreEtudiant fenEtu;
private Set<Groupe> promo;
private AbstractGroupeFactory promo;
private JFrame fenetre;
public Model(){
this.fenetre=new JFrame();
@ -39,22 +42,14 @@ public class Model{
Chargement ch=new Chargement();
this.fenetre.add(ch, BorderLayout.CENTER);
this.fenetre.setVisible(true);
this.promo=new LinkedHashSet<>();
this.getPromo(ch);
switch(this.promo.size()){
case 0:
this.fenGr=new FenetreGroupe(null, this);
this.fenEtu=new FenetreEtudiant(null);
break;
case 1:
this.fenGr=new FenetreGroupe(this.promo.iterator().next(), this);
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;
//A Modif
if(this.promo==null){
this.fenGr=new FenetreGroupe(null, this);
this.fenEtu=new FenetreEtudiant(null);
}else{
this.fenGr=new FenetreGroupe(this.promo.getPromotion(), this);
this.fenEtu=new FenetreEtudiant(this.promo.getPromotion());
}
this.fenetre.dispose();
this.fenetre=new JFrame();
@ -68,7 +63,13 @@ public class Model{
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){
//On se Connecte a la BD
try{
Class.forName("org.mariadb.jdbc.Driver");
try{
@ -76,20 +77,26 @@ public class Model{
"jdbc:mariadb://dwarves.iut-fbleau.fr/chaignea",
"chaignea", "Chaigneauphpmyadmin");
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(
"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{
ResultSet rs = pst.executeQuery();
rs.last();
int nbpromo=rs.getRow();
rs=pst.executeQuery();
try{
while(rs.next()){
//on image qu'il puisse avoir plusieur promo
this.promo.add(new GroupeNP(rs.getInt(1), rs.getString(2), rs.getInt(3), rs.getInt(4), TypeGroupe.getType(rs.getString(5)), null));
//on y ajoute tous ses sous-groupe
this.addSousGroupe(promo.iterator().next(), cnx, chargement, 100/nbpromo);
//Si il existe bien une promotion
if(rs.first()){
//On créer le groupe de promo
Groupe groupe=new GroupeNP(rs.getInt(1), rs.getString(2), rs.getInt(3), rs.getInt(4), TypeGroupe.getType(rs.getString(5)), null);
//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){
System.out.println("erreur dans la prise de resultat");
@ -110,25 +117,42 @@ public class Model{
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){
this.addEtudiant(g, cnx);
try{
//On récupere les Groupe qui ont le parent :g
PreparedStatement pst= cnx.prepareStatement(
"SELECT `id`, `nom`, `min`, `max`, `value`, `id-parent` FROM `Groupe` join `TYPE` on Groupe.Type=TYPE.name where Groupe.`id-parent`=? and Groupe.id!=Groupe.`id-parent`;");
try{
pst.setString(1, String.valueOf(g.getId()));
ResultSet rs=pst.executeQuery();
//on récupère le nombre de ligne
rs.last();
int nbsous=rs.getRow();
//si il n'y pas de sous-groupe
if(nbsous==0){
//on ajoute le pourcentage de chargement de ce groupe
ch.addPourcent(pourcent);
//La fonction est fini
rs.close();
pst.close();
return;
}
rs=pst.executeQuery();
//autrement si le groupe as des sous groupe
try{
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);
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);
}
}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){
try{
PreparedStatement pst= cnx.prepareStatement(
"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");
//On récupère les etudiants contenue du groupe
PreparedStatement pst;
//Si c'est la promo
pst= cnx.prepareStatement("SELECT Etudiant.nom, Etudiant.prenom, Etudiant.id FROM `CONTIENT` JOIN Etudiant on CONTIENT.idEt=Etudiant.id WHERE CONTIENT.idGroupe=1 ORDER BY Etudiant.id ASC");
try{
pst.setInt(1, g.getId());
ResultSet rs=pst.executeQuery();
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()){
for(Groupe m:this.promo){
AbstractGroupeFactory agf=new AbstractGroupeFactoryNP(m);
Set<Etudiant> contenue=agf.getEtudiants(rs.getString(1));
//Si il est connu on le/les ajoute
if(contenue.iterator().hasNext()){
for(Etudiant e:contenue){
g.addEtudiant(e);
}
//autrement on les crée
}else{
agf.addToGroupe(g, new EtudiantNP(rs.getString(1), rs.getString(2), rs.getInt(3)));
}
//si c'est la groupe de promo
//On ne peut pas récuperer l'etudiant il est donc créer
if(g==this.promo.getPromotion()){
this.promo.addToGroupe(g, new EtudiantNP(rs.getString(1), rs.getString(2), rs.getInt(3)));
}else{
//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){
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){
this.fenGr=new FenetreGroupe(g, this);
this.fenEtu=new FenetreEtudiant(g);
@ -191,25 +225,28 @@ public class Model{
this.fenetre.add(new JScrollPane(this.fenEtu));
this.fenetre.revalidate();
}
/**
* getteur de la fenetre
* @return JFrame la fenetre
*/
public JFrame getFenetre() {
return fenetre;
}
/**
* Fonction pour supprimer un groupe
* @param g le groupe a supprimer
*/
public void delete(Groupe g){
for(Groupe sous: this.promo){
AbstractGroupeFactory agf=new AbstractGroupeFactoryNP(sous);
if(agf.knows(g)){
if(g==agf.getPromotion()){
JOptionPane.showMessageDialog(this.fenetre, "impossible de supprimer la promotion", "alerte", JOptionPane.ERROR_MESSAGE);
return;
}
LinkedList<Groupe> file=new LinkedList<>();
this.deleteRecursif(file, g);
for(Groupe sup:file){
agf.deleteGroupe(sup);
}
}
//On ne peut pas supprimer la promo
if(g==this.promo.getPromotion()){
JOptionPane.showMessageDialog(this.fenetre, "impossible de supprimer la promotion", "alerte", JOptionPane.ERROR_MESSAGE);
return;
}
//autrement on récupere les groupe a supprimer par ordre avec une fonction recursive
LinkedList<Groupe> file=new LinkedList<>();
this.deleteRecursif(file, g);
for(Groupe sup:file){
this.promo.deleteGroupe(sup);
}
}
@ -221,13 +258,11 @@ public class Model{
}
public void partition(Groupe g, int n, String name){
AbstractGroupeFactory agf=new AbstractGroupeFactoryNP(g);
agf.createPartition(g, name, n);
this.promo.createPartition(g, name, n);
}
public void free(Groupe g, String name, int min, int max){
AbstractGroupeFactory agf=new AbstractGroupeFactoryNP(g);
agf.createGroupe(g, name, min, max);
this.promo.createGroupe(g, name, min, max);
}
public void rename(String name, Groupe g){