diff --git a/java/APIGroupe/Makefile b/java/APIGroupe/Makefile index ef2eb6a..e0df862 100644 --- a/java/APIGroupe/Makefile +++ b/java/APIGroupe/Makefile @@ -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 diff --git a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/Graphic/Model.java b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/Graphic/Model.java index fd14289..c64eb12 100644 --- a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/Graphic/Model.java +++ b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/Graphic/Model.java @@ -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 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 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 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 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){