diff --git a/java/APIGroupe/Makefile b/java/APIGroupe/Makefile index 80d4617..93d0051 100644 --- a/java/APIGroupe/Makefile +++ b/java/APIGroupe/Makefile @@ -24,7 +24,7 @@ run : build\ # AUTRE BUTS doc : - 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 + javadoc -d doc src/fr/iutfbleau/projetIHM2022FI2/API/*.java src/fr/iutfbleau/projetIHM2022FI2/MNP/*.java src/fr/iutfbleau/projetIHM2022FI2/ROOT/Controller/*.java src/fr/iutfbleau/projetIHM2022FI2/ROOT/View/*.java clean : rm -rf ${BUILD}/* *.jar @@ -95,104 +95,162 @@ ${BUILD}/MNP/AbstractChangementFactoryNP.class : ${SRC}/MNP/AbstractChangementFa ${JAVAC} ${JAVAC_OPTIONS} ${SRC}/MNP/AbstractChangementFactoryNP.java -## Graphic ## + + + + + +## ROOT ## ## Util ### -${BUILD}/Graphic/Util/BD.class : ${SRC}/Graphic/Util/BD.java - ${JAVAC} ${JAVAC_OPTIONS} ${SRC}/Graphic/Util/BD.java +${BUILD}/ROOT/Util/BD.class : ${SRC}/ROOT/Util/BD.java + ${JAVAC} ${JAVAC_OPTIONS} ${SRC}/ROOT/Util/BD.java + +${BUILD}/ROOT/Util/User.class : ${SRC}/ROOT/Util/User.java + ${JAVAC} ${JAVAC_OPTIONS} ${SRC}/ROOT/Util/User.java ## View ## -${BUILD}/Graphic/View/JTreeGroupe.class : ${SRC}/Graphic/View/JTreeGroupe.java \ - ${BUILD}/Graphic/Controller/TreeSelectionListenerGroupe.class \ - ${BUILD}/Graphic/Controller/TreeSelectionEventGroupe.class \ - ${BUILD}/Graphic/View/DefaultMutableTreeNodeGroupe.class - ${JAVAC} ${JAVAC_OPTIONS} ${SRC}/Graphic/View/JTreeGroupe.java -${BUILD}/Graphic/View/FenetreGroupe.class : ${SRC}/Graphic/View/FenetreGroupe.java \ - ${BUILD}/Graphic/Controller/ObservateurFenetre.class \ - ${BUILD}/Graphic/Controller/ObservateurChangeGroupe.class \ - ${BUILD}/Graphic/Controller/ObservateurModifGroupe.class - ${JAVAC} ${JAVAC_OPTIONS} ${SRC}/Graphic/View/FenetreGroupe.java +${BUILD}/ROOT/View/FenetreGroupe.class : ${SRC}/ROOT/View/FenetreGroupe.java \ + ${BUILD}/ROOT/Controller/ObservateurFenetre.class \ + ${BUILD}/ROOT/Controller/ObservateurChangeGroupe.class \ + ${BUILD}/ROOT/Controller/ObservateurModifGroupe.class + ${JAVAC} ${JAVAC_OPTIONS} ${SRC}/ROOT/View/FenetreGroupe.java -${BUILD}/Graphic/View/FenetreEtudiant.class :${SRC}/Graphic/View/FenetreEtudiant.java \ - ${BUILD}/Graphic/Controller/ObservateurFenetre.class \ - ${BUILD}/Graphic/Controller/ObservateurChangeGroupe.class \ - ${BUILD}/Graphic/View/PanelEtudiant.class \ - ${BUILD}/Graphic/Controller/ActionListenerChangeEtu.class - ${JAVAC} ${JAVAC_OPTIONS} ${SRC}/Graphic/View/FenetreEtudiant.java +${BUILD}/ROOT/View/FenetreEtudiant.class :${SRC}/ROOT/View/FenetreEtudiant.java \ + ${BUILD}/ROOT/Controller/ObservateurFenetre.class \ + ${BUILD}/ROOT/Controller/ObservateurChangeGroupe.class \ + ${BUILD}/ROOT/View/PanelEtudiant.class \ + ${BUILD}/ROOT/Controller/ActionListenerChangeEtu.class + ${JAVAC} ${JAVAC_OPTIONS} ${SRC}/ROOT/View/FenetreEtudiant.java -${BUILD}/Graphic/View/PanelEtudiant.class : ${SRC}/Graphic/View/PanelEtudiant.java \ - ${BUILD}/Graphic/Controller/ActionListenerSuprEtu.class - ${JAVAC} ${JAVAC_OPTIONS} ${SRC}/Graphic/View/PanelEtudiant.java +${BUILD}/ROOT/View/PanelEtudiant.class : ${SRC}/ROOT/View/PanelEtudiant.java \ + ${BUILD}/ROOT/Controller/ActionListenerSuprEtu.class + ${JAVAC} ${JAVAC_OPTIONS} ${SRC}/ROOT/View/PanelEtudiant.java -${BUILD}/Graphic/View/Chargement.class : ${SRC}/Graphic/View/Chargement.java - ${JAVAC} ${JAVAC_OPTIONS} ${SRC}/Graphic/View/Chargement.java +${BUILD}/ROOT/View/Chargement.class : ${SRC}/ROOT/View/Chargement.java + ${JAVAC} ${JAVAC_OPTIONS} ${SRC}/ROOT/View/Chargement.java -${BUILD}/Graphic/View/FenetreSelectionEtu.class : ${SRC}/Graphic/View/FenetreSelectionEtu.java \ - ${BUILD}/Graphic/Controller/SelecteurEtudiant.class \ - ${BUILD}/Graphic/Controller/ActionListenerNouveauEtu.class - ${JAVAC} ${JAVAC_OPTIONS} ${SRC}/Graphic/View/FenetreSelectionEtu.java +${BUILD}/ROOT/View/FenetreSelectionEtu.class : ${SRC}/ROOT/View/FenetreSelectionEtu.java \ + ${BUILD}/ROOT/Controller/SelecteurEtudiant.class \ + ${BUILD}/ROOT/Controller/ActionListenerNouveauEtu.class + ${JAVAC} ${JAVAC_OPTIONS} ${SRC}/ROOT/View/FenetreSelectionEtu.java -${BUILD}/Graphic/View/DefaultMutableTreeNodeGroupe.class : ${SRC}/Graphic/View/DefaultMutableTreeNodeGroupe.java - ${JAVAC} ${JAVAC_OPTIONS} ${SRC}/Graphic/View/DefaultMutableTreeNodeGroupe.java ## Controller ## -${BUILD}/Graphic/Controller/ActionListenerChangeEtu.class : ${SRC}/Graphic/Controller/ActionListenerChangeEtu.java - ${JAVAC} ${JAVAC_OPTIONS} ${SRC}/Graphic/Controller/ActionListenerChangeEtu.java +${BUILD}/ROOT/Controller/ActionListenerChangeEtu.class : ${SRC}/ROOT/Controller/ActionListenerChangeEtu.java + ${JAVAC} ${JAVAC_OPTIONS} ${SRC}/ROOT/Controller/ActionListenerChangeEtu.java -${BUILD}/Graphic/Controller/ActionListenerSuprEtu.class : ${SRC}/Graphic/Controller/ActionListenerSuprEtu.java \ +${BUILD}/ROOT/Controller/ActionListenerSuprEtu.class : ${SRC}/ROOT/Controller/ActionListenerSuprEtu.java \ ${BUILD}/API/Etudiant.class - ${JAVAC} ${JAVAC_OPTIONS} ${SRC}/Graphic/Controller/ActionListenerSuprEtu.java + ${JAVAC} ${JAVAC_OPTIONS} ${SRC}/ROOT/Controller/ActionListenerSuprEtu.java -${BUILD}/Graphic/Controller/ObservateurFenetre.class : ${SRC}/Graphic/Controller/ObservateurFenetre.java - ${JAVAC} ${JAVAC_OPTIONS} ${SRC}/Graphic/Controller/ObservateurFenetre.java +${BUILD}/ROOT/Controller/ObservateurFenetre.class : ${SRC}/ROOT/Controller/ObservateurFenetre.java + ${JAVAC} ${JAVAC_OPTIONS} ${SRC}/ROOT/Controller/ObservateurFenetre.java -${BUILD}/Graphic/Controller/ObservateurModifGroupe.class : ${SRC}/Graphic/Controller/ObservateurModifGroupe.java \ - ${BUILD}/Graphic/View/FenetreSelectionEtu.class - ${JAVAC} ${JAVAC_OPTIONS} ${SRC}/Graphic/Controller/ObservateurModifGroupe.java +${BUILD}/ROOT/Controller/ObservateurModifGroupe.class : ${SRC}/ROOT/Controller/ObservateurModifGroupe.java \ + ${BUILD}/ROOT/View/FenetreSelectionEtu.class + ${JAVAC} ${JAVAC_OPTIONS} ${SRC}/ROOT/Controller/ObservateurModifGroupe.java -${BUILD}/Graphic/Controller/ObservateurChangeGroupe.class : ${SRC}/Graphic/Controller/ObservateurChangeGroupe.java - ${JAVAC} ${JAVAC_OPTIONS} ${SRC}/Graphic/Controller/ObservateurChangeGroupe.java +${BUILD}/ROOT/Controller/ObservateurChangeGroupe.class : ${SRC}/ROOT/Controller/ObservateurChangeGroupe.java + ${JAVAC} ${JAVAC_OPTIONS} ${SRC}/ROOT/Controller/ObservateurChangeGroupe.java -${BUILD}/Graphic/Controller/SelecteurEtudiant.class : ${SRC}/Graphic/Controller/SelecteurEtudiant.java - ${JAVAC} ${JAVAC_OPTIONS} ${SRC}/Graphic/Controller/SelecteurEtudiant.java +${BUILD}/ROOT/Controller/SelecteurEtudiant.class : ${SRC}/ROOT/Controller/SelecteurEtudiant.java + ${JAVAC} ${JAVAC_OPTIONS} ${SRC}/ROOT/Controller/SelecteurEtudiant.java -${BUILD}/Graphic/Controller/ActionListenerNouveauEtu.class : ${SRC}/Graphic/Controller/ActionListenerNouveauEtu.java - ${JAVAC} ${JAVAC_OPTIONS} ${SRC}/Graphic/Controller/ActionListenerNouveauEtu.java +${BUILD}/ROOT/Controller/ActionListenerNouveauEtu.class : ${SRC}/ROOT/Controller/ActionListenerNouveauEtu.java + ${JAVAC} ${JAVAC_OPTIONS} ${SRC}/ROOT/Controller/ActionListenerNouveauEtu.java -${BUILD}/Graphic/Controller/TreeSelectionListenerGroupe.class : ${SRC}/Graphic/Controller/TreeSelectionListenerGroupe.java \ - ${BUILD}/Graphic/Controller/TreeSelectionEventGroupe.class - ${JAVAC} ${JAVAC_OPTIONS} ${SRC}/Graphic/Controller/TreeSelectionListenerGroupe.java - -${BUILD}/Graphic/Controller/TreeSelectionEventGroupe.class : ${SRC}/Graphic/Controller/TreeSelectionEventGroupe.java - ${JAVAC} ${JAVAC_OPTIONS} ${SRC}/Graphic/Controller/TreeSelectionEventGroupe.java ##.... ##  Model ### -${BUILD}/Graphic/Model/Model.class : ${SRC}/Graphic/Model/Model.java \ - ${BUILD}/Graphic/View/FenetreGroupe.class \ - ${BUILD}/Graphic/View/FenetreEtudiant.class \ - ${BUILD}/Graphic/View/Chargement.class \ - ${BUILD}/Graphic/Util/BD.class \ - ${BUILD}/Graphic/Controller/TreeSelectionListenerGroupe.class \ - ${BUILD}/Graphic/View/JTreeGroupe.class - ${JAVAC} ${JAVAC_OPTIONS} ${SRC}/Graphic/Model/Model.java +${BUILD}/ROOT/Model/Model.class : ${SRC}/ROOT/Model/Model.java \ + ${BUILD}/ROOT/View/FenetreGroupe.class \ + ${BUILD}/ROOT/View/FenetreEtudiant.class \ + ${BUILD}/ROOT/View/Chargement.class \ + ${BUILD}/ROOT/Util/BD.class \ + ${BUILD}/ROOT/Util/User.class + ${JAVAC} ${JAVAC_OPTIONS} ${SRC}/ROOT/Model/Model.java + + + + + + +## ETU ## + +## Util ### + +${BUILD}/ETU/Util/BD.class : ${SRC}/ETU/Util/BD.java + ${JAVAC} ${JAVAC_OPTIONS} ${SRC}/ETU/Util/BD.java + +${BUILD}/ETU/Util/User.class : ${SRC}/ETU/Util/User.java + ${JAVAC} ${JAVAC_OPTIONS} ${SRC}/ETU/Util/User.java + +## View ## + +${BUILD}/ETU/View/FenetreGroupe.class : ${SRC}/ETU/View/FenetreGroupe.java \ + ${BUILD}/ETU/Controller/ObservateurFenetre.class \ + ${BUILD}/ETU/Controller/ObservateurChangeGroupe.class + ${JAVAC} ${JAVAC_OPTIONS} ${SRC}/ETU/View/FenetreGroupe.java + +${BUILD}/ETU/View/FenetreEtudiant.class :${SRC}/ETU/View/FenetreEtudiant.java \ + ${BUILD}/ETU/Controller/ObservateurFenetre.class \ + ${BUILD}/ETU/Controller/ObservateurChangeGroupe.class \ + ${BUILD}/ETU/View/PanelEtudiant.class \ + ${BUILD}/ETU/Controller/ActionListenerChangeEtu.class + ${JAVAC} ${JAVAC_OPTIONS} ${SRC}/ETU/View/FenetreEtudiant.java + +${BUILD}/ETU/View/PanelEtudiant.class : ${SRC}/ETU/View/PanelEtudiant.java + ${JAVAC} ${JAVAC_OPTIONS} ${SRC}/ETU/View/PanelEtudiant.java + +${BUILD}/ETU/View/Chargement.class : ${SRC}/ETU/View/Chargement.java + ${JAVAC} ${JAVAC_OPTIONS} ${SRC}/ETU/View/Chargement.java + + +## Controller ## +${BUILD}/ETU/Controller/ActionListenerChangeEtu.class : ${SRC}/ETU/Controller/ActionListenerChangeEtu.java + ${JAVAC} ${JAVAC_OPTIONS} ${SRC}/ETU/Controller/ActionListenerChangeEtu.java + +${BUILD}/ETU/Controller/ObservateurFenetre.class : ${SRC}/ETU/Controller/ObservateurFenetre.java + ${JAVAC} ${JAVAC_OPTIONS} ${SRC}/ETU/Controller/ObservateurFenetre.java + +${BUILD}/ETU/Controller/ObservateurChangeGroupe.class : ${SRC}/ETU/Controller/ObservateurChangeGroupe.java + ${JAVAC} ${JAVAC_OPTIONS} ${SRC}/ETU/Controller/ObservateurChangeGroupe.java + +##.... + + +##  Model ### + +${BUILD}/ETU/Model/Model.class : ${SRC}/ETU/Model/Model.java \ + ${BUILD}/ETU/View/FenetreGroupe.class \ + ${BUILD}/ETU/View/FenetreEtudiant.class \ + ${BUILD}/ETU/View/Chargement.class \ + ${BUILD}/ETU/Util/BD.class \ + ${BUILD}/ETU/Util/User.class + ${JAVAC} ${JAVAC_OPTIONS} ${SRC}/ETU/Model/Model.java ## TEST ## + ${BUILD}/Test/Connexion.class : ${SRC}/Test/Connexion.java + ${JAVAC} ${JAVAC_OPTIONS} ${SRC}/Test/Connexion.java + ${BUILD}/Test/TestTexteMNP.class : ${SRC}/Test/TestTexteMNP.java \ ${BUILD}/MNP/EtudiantNP.class \ ${BUILD}/MNP/GroupeNP.class \ ${BUILD}/MNP/ChangementNP.class \ ${BUILD}/MNP/AbstractGroupeFactoryNP.class \ ${BUILD}/MNP/AbstractChangementFactoryNP.class \ - ${BUILD}/Graphic/Model/Model.class - ${JAVAC} -Xlint:deprecation ${JAVAC_OPTIONS} ${SRC}/Test/TestTexteMNP.java + ${BUILD}/ROOT/Model/Model.class \ + ${BUILD}/ETU/Model/Model.class \ + ${BUILD}/Test/Connexion.class + ${JAVAC} ${JAVAC_OPTIONS} ${SRC}/Test/TestTexteMNP.java # ## JARS ## diff --git a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/API/AbstractGroupeFactory.java b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/API/AbstractGroupeFactory.java index b0d170e..d7fe3b8 100644 --- a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/API/AbstractGroupeFactory.java +++ b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/API/AbstractGroupeFactory.java @@ -110,4 +110,13 @@ public interface AbstractGroupeFactory { */ public Set getGroupesOfEtudiant(Etudiant etu); + + /** + * Ajout a l'API pour changer facilement de nom de groupe + * + * @param g le groupe + * @param name le nom + * @return true si possible + */ + public boolean changeNameGroupe(Groupe g, String name); } diff --git a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/API/Groupe.java b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/API/Groupe.java index 5460c1f..1ae036e 100644 --- a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/API/Groupe.java +++ b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/API/Groupe.java @@ -95,7 +95,6 @@ public interface Groupe extends MonPrint { * @param s le nouveau nom */ public void setName(String s); - /** * @see MonPrint diff --git a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/Graphic/Controller/ActionListenerChangeEtu.java b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/ETU/Controller/ActionListenerChangeEtu.java similarity index 80% rename from java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/Graphic/Controller/ActionListenerChangeEtu.java rename to java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/ETU/Controller/ActionListenerChangeEtu.java index a60abfa..d7e5525 100644 --- a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/Graphic/Controller/ActionListenerChangeEtu.java +++ b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/ETU/Controller/ActionListenerChangeEtu.java @@ -1,9 +1,9 @@ -package fr.iutfbleau.projetIHM2022FI2.Graphic.Controller; +package fr.iutfbleau.projetIHM2022FI2.ETU.Controller; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import fr.iutfbleau.projetIHM2022FI2.API.Etudiant; -import fr.iutfbleau.projetIHM2022FI2.Graphic.Model.Model; +import fr.iutfbleau.projetIHM2022FI2.ETU.Model.Model; public class ActionListenerChangeEtu implements ActionListener { public Etudiant etudiant; diff --git a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/Graphic/Controller/ObservateurChangeGroupe.java b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/ETU/Controller/ObservateurChangeGroupe.java similarity index 76% rename from java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/Graphic/Controller/ObservateurChangeGroupe.java rename to java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/ETU/Controller/ObservateurChangeGroupe.java index 52f7770..f74c5fa 100644 --- a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/Graphic/Controller/ObservateurChangeGroupe.java +++ b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/ETU/Controller/ObservateurChangeGroupe.java @@ -1,9 +1,9 @@ -package fr.iutfbleau.projetIHM2022FI2.Graphic.Controller; +package fr.iutfbleau.projetIHM2022FI2.ETU.Controller; import java.awt.event.*; import fr.iutfbleau.projetIHM2022FI2.API.Groupe; -import fr.iutfbleau.projetIHM2022FI2.Graphic.Model.Model; +import fr.iutfbleau.projetIHM2022FI2.ETU.Model.Model; public class ObservateurChangeGroupe implements ActionListener{ private Model m; diff --git a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/Graphic/Controller/ObservateurFenetre.java b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/ETU/Controller/ObservateurFenetre.java similarity index 95% rename from java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/Graphic/Controller/ObservateurFenetre.java rename to java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/ETU/Controller/ObservateurFenetre.java index bfc6b90..bf43f57 100644 --- a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/Graphic/Controller/ObservateurFenetre.java +++ b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/ETU/Controller/ObservateurFenetre.java @@ -1,4 +1,4 @@ -package fr.iutfbleau.projetIHM2022FI2.Graphic.Controller; +package fr.iutfbleau.projetIHM2022FI2.ETU.Controller; import java.awt.event.WindowEvent; import java.awt.event.WindowListener; import javax.swing.JOptionPane; diff --git a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/ETU/Model/Model.java b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/ETU/Model/Model.java new file mode 100644 index 0000000..92dc0da --- /dev/null +++ b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/ETU/Model/Model.java @@ -0,0 +1,367 @@ +package fr.iutfbleau.projetIHM2022FI2.ETU.Model; +import java.sql.PreparedStatement; +import java.sql.SQLException; +import java.util.Set; +import java.sql.Connection; +import java.sql.ResultSet; + +import javax.swing.*; +import java.awt.*; +import fr.iutfbleau.projetIHM2022FI2.API.AbstractGroupeFactory; +import fr.iutfbleau.projetIHM2022FI2.API.Etudiant; +import fr.iutfbleau.projetIHM2022FI2.API.Groupe; +import fr.iutfbleau.projetIHM2022FI2.API.TypeGroupe; +import fr.iutfbleau.projetIHM2022FI2.MNP.AbstractGroupeFactoryNP; +import fr.iutfbleau.projetIHM2022FI2.MNP.GroupeNP; +import fr.iutfbleau.projetIHM2022FI2.ETU.Controller.ObservateurFenetre; +import fr.iutfbleau.projetIHM2022FI2.ETU.Util.BD; +import fr.iutfbleau.projetIHM2022FI2.ETU.View.Chargement; +import fr.iutfbleau.projetIHM2022FI2.ETU.View.FenetreEtudiant; +import fr.iutfbleau.projetIHM2022FI2.ETU.View.FenetreGroupe; + +/** + * Le Model de L'IHM + */ +public class Model{ + + private JPanel panGroupe; + private FenetreGroupe fenGr; + private FenetreEtudiant fenEtu; + private AbstractGroupeFactory promo; + private JFrame fenetre; + private Etudiant Selected; + //private JTree tree; + private BD bd; + public Model(){ + this.fenetre=new JFrame(); + this.fenetre.setSize(1200, 720); + this.fenetre.setLocation(100,100); + this.fenetre.addWindowListener(new ObservateurFenetre()); + this.fenetre.setLayout(new GridLayout(1,2)); + this.fenetre.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE); + this.fenetre.setMinimumSize(this.fenetre.getSize()); + this.bd=new BD(this.fenetre); + Chargement ch=new Chargement(this.fenetre); + this.promo=this.getPromo(ch); + ch.dispose(); + this.fenetre.setVisible(true); + this.initEtu(null); + if(this.promo==null){ + this.fenGr=new FenetreGroupe(null, this, null); + this.fenEtu=new FenetreEtudiant(null, this.Selected); + }else{ + this.fenGr=new FenetreGroupe(this.promo.getPromotion(), this,this.promo.getGroupesOfEtudiant(this.Selected)); + this.fenEtu=new FenetreEtudiant(this.promo.getPromotion(), this.Selected); + } + this.panGroupe=new JPanel(new GridLayout(1,1)); + if(this.promo!=null){ + this.showGroupe(this.promo.getPromotion()); + }else{ + this.showGroupe(null); + } + } + +/** + * Fonction pour refresh/changer de groupe d'affichage + * @param g le groupe a afficher + */ +public void showGroupe(Groupe g){ + if(g!=null) + g=this.bd.refreshALL(g); + this.panGroupe.removeAll(); + this.fenGr=new FenetreGroupe(g, this, this.promo.getGroupesOfEtudiant(this.Selected)); + this.fenEtu=new FenetreEtudiant(g, this.Selected); + this.fenetre.getContentPane().removeAll(); + this.panGroupe.add(this.fenGr.getPan()); + this.panGroupe.revalidate(); + this.fenetre.add(this.panGroupe); + JScrollPane scroll=new JScrollPane(this.fenEtu.getPan()); + scroll.getVerticalScrollBar().setUnitIncrement(15); + this.fenetre.add(scroll); + this.fenetre.revalidate(); +} + /** + * getteur de la fenetre + * @return JFrame la fenetre + */ + public JFrame getFenetre() { + return fenetre; + } + + + /** + * Fonction permettant d'initialiser l'AbstractFactory de la promo + * avec la Base de donné + * @param Chargement: pour indiquer la progression du chargement + */ + private AbstractGroupeFactory getPromo(Chargement chargement){ + AbstractGroupeFactory agf=null; + Connection cnx=this.bd.cnx(); + //on récupère le Groupe de la BD n'ayant pas de Parent (La promo donc) + try{ + PreparedStatement pst = cnx.prepareStatement( + "SELECT `id`, `nom`, `min`, `max`, `value`, `id-parent` FROM `Groupe` join `TYPE` on Groupe.Type=TYPE.name ORDER BY Groupe.id ASC;"); + ResultSet rs = pst.executeQuery(); + rs=pst.executeQuery(); + rs.last(); + int nbgrp=rs.getRow(); + rs=pst.executeQuery(); + try{ + //Si il existe bien une promotion + if(rs.next()){ + //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.init(groupe, (100/nbgrp), chargement); + //On créer la Factory + agf=new AbstractGroupeFactoryNP(groupe, this.fenetre); + }else{ + //Si aucune ligne et donc pas de promo: + this.promo=null; + } + }catch(SQLException e){ + } + rs.close(); + pst.close(); + }catch(SQLException e){ + } + this.bd.close(cnx); + return agf; + } + + public Set getEtudiant(){ + return this.bd.getEtudiant(); + } + + private void init(Groupe g, int pourcentage, Chargement ch){ + this.bd.refreshALL(g); + ch.addPourcent(pourcentage+1); + for(Groupe gr:g.getSousGroupes()){ + this.init(gr, pourcentage, ch); + } + } + + private void initEtu(String err){ + Set liste=this.promo.getPromotion().getEtudiants(); + JPanel panel = new JPanel(); + JPanel myPanel = new JPanel(); + JTextField idd = new JTextField(15); + myPanel.add(new JLabel("Id:")); + myPanel.add(idd); + if(err!=null){ + myPanel.add(new JLabel(err, SwingConstants.RIGHT)); + } + panel.add(myPanel); + + if(JOptionPane.showConfirmDialog(null, panel, "login", JOptionPane.OK_CANCEL_OPTION) != JOptionPane.OK_OPTION){ + this.fenetre.dispose(); + System.exit(0); + }else{ + try{ + int id=Integer.parseInt(idd.getText()); + for(Etudiant et:liste){ + if(et.getId()==id){ + this.Selected=et; + return; + } + } + }catch(NumberFormatException e){ + this.initEtu("Id incomprhéhensible"); + } + } + this.initEtu("Etudiant introuvable"); + } + + + + + + // *********************** + // FONCTION POUR SUPRIMER UN ETUDIANT + // *********************** + + + public boolean deleteEtu(Etudiant e){ + if(this.deleteEtutoChildren(e, this.fenGr.getG())){ + this.promo.dropFromGroupe(this.fenGr.getG(), e); + this.showGroupe(this.fenGr.getG()); + return true; + }else{ + return false; + } + } + + private boolean deleteEtutoChildren(Etudiant e, Groupe g){ + if(g.getMax() ajout){ + Chargement ch=new Chargement(this.fenetre); + this.fenetre.setVisible(false); + //on creer le groupe + this.promo.createGroupe(g, name, min, max); + Groupe creer=null; + //on le recupere + for(Groupe gr:g.getSousGroupes()){ + if(gr.getName()==name){ + creer=gr; + break; + } + } + //on y ajoute les étudiant + int n=0; + for(Etudiant e:ajout){ + if(this.addEtudiant(creer, e)==false) + n++; + } + creer=this.bd.refreshALL(creer); + ch.dispose(); + this.fenetre.setVisible(true); + if(n>0) + JOptionPane.showMessageDialog(this.fenetre, "erreur impossible d'ajouter "+n+" etudiants par manque de place dans le groupe de ses parents", "erreur", JOptionPane.ERROR_MESSAGE); + //Si finalement avec les etudiants qui n'ont pas pus être ajouter le min n'est pas atteint + if(creer.getEtudiants().size()+1<=creer.getMin()){ + //On le supprime + this.promo.deleteGroupe(creer); + JOptionPane.showMessageDialog(this.fenetre, "en raison du manque d'etudiant pour le nombre min le groupe n'a pas pus être créer", "errer", JOptionPane.ERROR_MESSAGE); + } + this.showGroupe(g); + } + + public void addPromo(int min, int max, String name, Set ajout){ + Chargement ch=new Chargement(this.fenetre); + this.promo=new AbstractGroupeFactoryNP(name, min, max, this.fenetre); + this.fenetre.setVisible(false); + ch.addPourcent(20); + int pourcent=85/ajout.size(); + for(Etudiant e:ajout){ + this.addEtudiant(this.promo.getPromotion(), e); + ch.addPourcent(pourcent); + } + ch.dispose(); + this.fenetre.setVisible(true); + this.showGroupe(this.promo.getPromotion()); + } + +} diff --git a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/Graphic/Util/BD.java b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/ETU/Util/BD.java similarity index 54% rename from java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/Graphic/Util/BD.java rename to java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/ETU/Util/BD.java index 727f427..ff37f99 100644 --- a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/Graphic/Util/BD.java +++ b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/ETU/Util/BD.java @@ -1,4 +1,4 @@ -package fr.iutfbleau.projetIHM2022FI2.Graphic.Util; +package fr.iutfbleau.projetIHM2022FI2.ETU.Util; import java.sql.Connection; import javax.swing.JFrame; @@ -11,9 +11,12 @@ import java.sql.SQLException; import java.util.Set; import java.util.LinkedHashSet; import fr.iutfbleau.projetIHM2022FI2.API.*; -import fr.iutfbleau.projetIHM2022FI2.Graphic.View.Chargement; import fr.iutfbleau.projetIHM2022FI2.MNP.*; +import fr.iutfbleau.projetIHM2022FI2.ETU.View.Chargement; +/** + * Class relative a la BD + */ public class BD { private JFrame fenetre; public BD(JFrame fenetre){ @@ -36,7 +39,10 @@ public class BD { return null; } - + /** + * Erreur de connection + * @return true si posssible + */ 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; @@ -46,14 +52,6 @@ public class BD { } } - 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; - }else{ - return false; - } - } - public void close(AutoCloseable clos){ try{ clos.close(); @@ -110,9 +108,9 @@ public class BD { //autrement on recupere l'etudiant for(Etudiant e: g.getPointPoint().getEtudiants()){ if(e.getId()==rs.getInt(3)){ - exist=true; - g.addEtudiant(e); - break; + exist=true; + g.addEtudiant(e); + break; } } if(exist==false){ @@ -209,148 +207,6 @@ public class BD { return g; } - - public boolean saveEtu(Etudiant etudiant, Groupe g){ - Connection cnx = this.cnx(); - try{ - PreparedStatement pst=cnx.prepareStatement( - "Select id from Etudiant where id=?; "); - pst.setString(1, String.valueOf(etudiant.getId())); - ResultSet rs=pst.executeQuery(); - if(rs.next()){ - //L'etudiant est déja connu de la BD - pst.close(); - pst=cnx.prepareStatement( - "INSERT INTO `CONTIENT` (`idGroupe`, `idEt`) VALUES (?, ?);"); - pst.setInt(2, etudiant.getId()); - pst.setInt(1, g.getId()); - pst.executeUpdate(); - }else{ - pst.close(); - pst=cnx.prepareStatement( - "INSERT INTO `Etudiant` (`id`, `nom`, `prenom`) VALUES (?, ?, ?) ;"); - pst.setInt(1, etudiant.getId()); - pst.setString(2, etudiant.getNom()); - pst.setString(3, etudiant.getPrenom()); - pst.executeUpdate(); - } - rs.close(); - pst.close(); - }catch(SQLException e){ - System.out.println(e.toString()); - if(this.erreurSQL()){ - this.saveEtu(etudiant, g); - }else{ - return false; - } - } - this.close(cnx); - return true; - } - - public boolean changeNameGroupe(Groupe g, String name){ - Connection cnx=this.cnx(); - try{ - PreparedStatement pst=cnx.prepareStatement( - "UPDATE `Groupe` SET `nom` = ? WHERE `Groupe`.`id` = ? " - ); - pst.setString(1, name); - pst.setInt(2, g.getId()); - pst.executeUpdate(); - pst.close(); - }catch(SQLException e){ - System.out.println(e.toString()); - if(this.erreurSQL()){ - this.changeNameGroupe(g, name); - }else{ - return false; - } - } - this.close(cnx); - return true; - } - - public boolean suprGroupe(Groupe g){ - Connection cnx=this.cnx(); - try{ - PreparedStatement pst=cnx.prepareStatement("Delete FROM Groupe where id=?;"); - pst.setInt(1, g.getId()); - pst.executeUpdate(); - pst.close(); - }catch(SQLException e){ - System.out.println(e.toString()); - if(this.erreurSQL()){ - this.suprGroupe(g); - }else{ - return false; - } - } - this.close(cnx); - return true; - } - - - public boolean saveGroupe(Groupe g, int taille, Chargement ch){ - Connection cnx=this.cnx(); - try{ - PreparedStatement pst=cnx.prepareStatement( - "INSERT INTO `Groupe` (`id`, `nom`, `min`, `max`, `Type`, `id-parent`) VALUES (?, ?, ?, ?, ?, ?);" - ); - pst.setInt(1, g.getId()); - pst.setString(2, g.getName()); - pst.setInt(3, g.getMin()); - pst.setInt(4, g.getMax()); - pst.setString(5, g.getType().name()); - pst.setInt(6, g.getPointPoint().getId()); - pst.executeUpdate(); - pst.close(); - for(Etudiant e: g.getEtudiants()){ - this.saveEtu(e, g); - } - if(ch!=null) - ch.addPourcent(taille); - for(Groupe sous:g.getSousGroupes()){ - this.saveGroupe(sous, taille, ch); - } - }catch(SQLException e){ - System.out.println(e.toString()); - if(this.erreurSQL()){ - this.saveGroupe(g, taille, ch); - }else{ - return false; - } - } - this.close(cnx); - return true; - } - - public boolean createGroupe(Groupe g){ - Connection cnx=this.cnx(); - try{ - PreparedStatement pst=cnx.prepareStatement( - "INSERT INTO `Groupe` (`id`, `nom`, `min`, `max`, `Type`, `id-parent`) VALUES (?, ?, ?, ?, ?, ?);" - );; - //On set le mex ID: - pst.setInt(1,g.getId()); - pst.setString(2, g.getName()); - pst.setInt(3, g.getMin()); - pst.setInt(4, g.getMax()); - pst.setString(5, g.getType().name()); - pst.setInt(6, g.getPointPoint().getId()); - pst.executeUpdate(); - pst.close(); - }catch(SQLException e){ - System.out.println(e.toString()); - if(this.erreurSQL()){ - this.saveGroupe(g, 0, null); - }else{ - return false; - } - } - this.close(cnx); - return true; - } - public Set getEtudiant(){ Connection cnx=this.cnx(); Set ret=new LinkedHashSet<>(); @@ -369,37 +225,4 @@ public class BD { this.close(cnx); return ret; } - - public void deleteEtu(Etudiant et, Groupe g){ - Connection cnx=this.cnx(); - try{ - PreparedStatement pst=cnx.prepareStatement( - "DELETE FROM CONTIENT WHERE idGroupe=? AND idEt=?; " - ); - pst.setInt(2, et.getId()); - this.deleteEtu(pst, cnx, g); - pst.close(); - }catch(SQLException e){ - System.out.println(e.toString()); - if(this.erreurSQL()){ - this.deleteEtu(et, g); - } - } - this.close(cnx); - } - - private void deleteEtu(PreparedStatement pst, Connection cnx, Groupe g){ - try{ - pst.setInt(1, g.getId()); - pst.executeUpdate(); - for(Groupe sous: g.getSousGroupes()){ - this.deleteEtu(pst, cnx, sous); - } - }catch(SQLException e){ - System.out.println(e.toString()); - if(this.erreurSQL()){ - this.deleteEtu(pst, cnx, g); - } - } - } } diff --git a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/ETU/Util/User.java b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/ETU/Util/User.java new file mode 100644 index 0000000..5231700 --- /dev/null +++ b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/ETU/Util/User.java @@ -0,0 +1,11 @@ +package fr.iutfbleau.projetIHM2022FI2.ETU.Util; + +public enum User { + ROOT("root"), PROF("proffeseur"), ETUDIANT("etudiant"); + + private final String name; + + private User(String s) { + name = s; + } +} diff --git a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/Graphic/View/Chargement.java b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/ETU/View/Chargement.java similarity index 91% rename from java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/Graphic/View/Chargement.java rename to java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/ETU/View/Chargement.java index 0694328..edae3cd 100644 --- a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/Graphic/View/Chargement.java +++ b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/ETU/View/Chargement.java @@ -1,4 +1,4 @@ -package fr.iutfbleau.projetIHM2022FI2.Graphic.View; +package fr.iutfbleau.projetIHM2022FI2.ETU.View; import java.awt.Graphics; @@ -14,11 +14,11 @@ public class Chargement extends JComponent{ private int pourcentage; private JFrame fenetre; - public Chargement(Dimension n){ + public Chargement(JFrame n){ this.pourcentage=0; this.fenetre=new JFrame(); - this.fenetre.setSize(n); - this.fenetre.setLocation(100,100); + this.fenetre.setSize(n.getSize()); + this.fenetre.setLocation(n.getLocation()); this.fenetre.add(this, BorderLayout.CENTER); this.repaint(); this.fenetre.setVisible(true); diff --git a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/ETU/View/FenetreEtudiant.java b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/ETU/View/FenetreEtudiant.java new file mode 100644 index 0000000..720e3ce --- /dev/null +++ b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/ETU/View/FenetreEtudiant.java @@ -0,0 +1,63 @@ +package fr.iutfbleau.projetIHM2022FI2.ETU.View; + + +import javax.swing.JLabel; +import javax.swing.JPanel; + +import java.awt.*; +import java.util.LinkedHashSet; +import java.util.Set; + +import fr.iutfbleau.projetIHM2022FI2.API.Etudiant; +import fr.iutfbleau.projetIHM2022FI2.API.Groupe; +import fr.iutfbleau.projetIHM2022FI2.API.TypeGroupe; + + +public class FenetreEtudiant{ + private Set etu; + private JPanel pan; + private Etudiant concerner; + private boolean partition; + public FenetreEtudiant(Groupe g, Etudiant e){ + this.pan=new JPanel(); + if(g!=null){ + this.etu=g.getEtudiants(); + }else{ + this.etu=new LinkedHashSet<>(); + } + this.concerner=e; + if(g.getPointPoint().getType()==TypeGroupe.PARTITION) + this.partition=true; + else{ + this.partition=false; + } + this.draw(); + } + + private void draw(){ + if(this.etu.size()!=0){ + this.pan.setLayout(new GridLayout(this.etu.size(), 1, 30, 0)); + PanelEtudiant p=new PanelEtudiant(this.concerner, this.partition); + p.addActionChangeListener(null); + this.pan.add(p); + for(Etudiant e: this.etu){ + if(this.concerner.getId() != e.getId()){ + this.pan.add(p); + p=new PanelEtudiant(e,false); + } + } + }else{ + this.pan.setLayout(new FlowLayout()); + this.pan.add(new JLabel("Il n'y a pas d'étudiant")); + } + } + public void refresh(){ + this.pan.removeAll(); + this.draw(); + this.pan.revalidate(); + } + + public JPanel getPan() { + return pan; + } +} diff --git a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/ETU/View/FenetreGroupe.java b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/ETU/View/FenetreGroupe.java new file mode 100644 index 0000000..2f92fda --- /dev/null +++ b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/ETU/View/FenetreGroupe.java @@ -0,0 +1,98 @@ +package fr.iutfbleau.projetIHM2022FI2.ETU.View; + +import javax.swing.JButton; +import javax.swing.JLabel; +import javax.swing.JPanel; +import javax.swing.JScrollPane; +import java.awt.Font; +import java.awt.GridLayout; +import fr.iutfbleau.projetIHM2022FI2.API.Groupe; +import fr.iutfbleau.projetIHM2022FI2.API.TypeGroupe; +import fr.iutfbleau.projetIHM2022FI2.ETU.Model.Model; +import fr.iutfbleau.projetIHM2022FI2.ETU.Controller.ObservateurChangeGroupe; +import java.util.Set; +import java.awt.Color; + +public class FenetreGroupe{ + private Groupe g; + private JPanel pan; + private Model m; + private Set appartient; + public FenetreGroupe(Groupe g, Model m, Set appartient){ + super(); + this.g=g; + this.appartient=appartient; + this.m=m; + this.pan=new JPanel(); + this.draw(); + } + public Groupe getG() { + return this.g; + } + public void refresh(){ + this.pan.removeAll(); + this.draw(); + this.pan.revalidate(); + } + private void draw(){ + if(g!=null){ + int taille=1; + if(g.getType()==TypeGroupe.PARTITION || g.getType()==TypeGroupe.ROOT) + taille--; + if(g.getSousGroupes().size()>0) + this.pan.setLayout(new GridLayout(8, 1)); + else{this.pan.setLayout(new GridLayout(7, 1));} + JPanel tache=new JPanel(new GridLayout(1,taille)); + + if(g.getType()!=TypeGroupe.ROOT){ + JButton bout=new JButton(g.getPointPoint().getName()); + bout.addActionListener(new ObservateurChangeGroupe(m, g.getPointPoint())); + tache.add(bout); + } + this.pan.add(tache); + JLabel titre=new JLabel("Group : "+g.getName(), JLabel.CENTER); + titre.setFont(new Font(Font.SERIF, Font.BOLD, titre.getFont().getSize()+10)); + this.pan.add(titre); + this.pan.add(new JLabel("id= "+String.valueOf(g.getId()),JLabel.CENTER)); + this.pan.add(new JLabel("min= "+String.valueOf(g.getMin()),JLabel.CENTER)); + this.pan.add(new JLabel("max= "+String.valueOf(g.getMax()),JLabel.CENTER)); + this.pan.add(new JLabel(g.getType().name(), JLabel.CENTER)); + this.pan.add(new JLabel("Sous groupe:",JLabel.CENTER)); + if(g.getSousGroupes().size()>0){ + JPanel sous=new JPanel(new GridLayout(g.getSousGroupes().size(), 1)); + for(Groupe gr: g.getSousGroupes()){ + JButton b=new JButton(gr.getName()); + boolean contenu=false; + for(Groupe t: this.appartient){ + if(t.getId()==gr.getId()){ + contenu=true; + break; + } + } + if(contenu){ + b.addActionListener(new ObservateurChangeGroupe(m, gr)); + }else{ + b.setBackground(Color.RED); + } + sous.add(b); + } + this.pan.add(new JScrollPane(sous)); + } + }else{ + JButton creer=new JButton("créer une promo"); + creer.addActionListener(new ObservateurChangeGroupe(m, g)); + this.pan.add(creer); + } + } + + public void setG(Groupe g) { + this.g = g; + } + + public void setAppartient(Set appartient) { + this.appartient = appartient; + } + public JPanel getPan() { + return pan; + } +} diff --git a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/ETU/View/PanelEtudiant.java b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/ETU/View/PanelEtudiant.java new file mode 100644 index 0000000..efff903 --- /dev/null +++ b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/ETU/View/PanelEtudiant.java @@ -0,0 +1,29 @@ +package fr.iutfbleau.projetIHM2022FI2.ETU.View; + +import javax.swing.JLabel; +import javax.swing.JPanel; + +import fr.iutfbleau.projetIHM2022FI2.API.Etudiant; + +import javax.swing.JButton; +import java.awt.*; +import java.awt.event.ActionListener; +public class PanelEtudiant extends JPanel{ + private JButton deplacer; + public PanelEtudiant(Etudiant e, boolean concerner){ + super(new GridLayout(1,2,20,10)); + JLabel label=new JLabel(" "+e.getNom()+" "+e.getPrenom()+" "+e.getId(), JLabel.LEFT); + label.setFont(new Font(Font.SANS_SERIF, Font.PLAIN, 20)); + + this.add(label); + this.deplacer=new JButton("changer de groupe"); + if(concerner==true) + this.add(this.deplacer); + } + + + public void addActionChangeListener(ActionListener a){ + this.deplacer.addActionListener(a); + + } +} diff --git a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/Graphic/Controller/TreeSelectionEventGroupe.java b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/Graphic/Controller/TreeSelectionEventGroupe.java deleted file mode 100644 index f9566ef..0000000 --- a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/Graphic/Controller/TreeSelectionEventGroupe.java +++ /dev/null @@ -1,27 +0,0 @@ -package fr.iutfbleau.projetIHM2022FI2.Graphic.Controller; - -import javax.swing.event.*; -import javax.swing.tree.TreePath; - -import fr.iutfbleau.projetIHM2022FI2.API.Groupe; -import fr.iutfbleau.projetIHM2022FI2.Graphic.Model.Model; - -public class TreeSelectionEventGroupe extends TreeSelectionEvent{ - private Groupe groupe; - private Model model; - public TreeSelectionEventGroupe(Object source, TreePath[] paths, boolean[] areNew, TreePath oldLeadSelectionPath, - TreePath newLeadSelectionPath, Groupe g, Model m) { - super(source, paths, areNew, oldLeadSelectionPath, newLeadSelectionPath); - this.groupe=g; - this.model=m; - } - - public Groupe getGroupe() { - return groupe; - } - - public Model getModel() { - return model; - } - -} diff --git a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/Graphic/Controller/TreeSelectionListenerGroupe.java b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/Graphic/Controller/TreeSelectionListenerGroupe.java deleted file mode 100644 index fa7804e..0000000 --- a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/Graphic/Controller/TreeSelectionListenerGroupe.java +++ /dev/null @@ -1,17 +0,0 @@ -package fr.iutfbleau.projetIHM2022FI2.Graphic.Controller; - -import javax.swing.event.TreeSelectionEvent; -import javax.swing.event.TreeSelectionListener; - - -public class TreeSelectionListenerGroupe implements TreeSelectionListener{ - public TreeSelectionListenerGroupe(){ - } - - @Override - public void valueChanged(TreeSelectionEvent e) { - TreeSelectionEventGroupe k=(TreeSelectionEventGroupe)e; - k.getModel().showGroupe(k.getGroupe()); - } - -} diff --git a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/Graphic/View/DefaultMutableTreeNodeGroupe.java b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/Graphic/View/DefaultMutableTreeNodeGroupe.java deleted file mode 100644 index 1158b33..0000000 --- a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/Graphic/View/DefaultMutableTreeNodeGroupe.java +++ /dev/null @@ -1,20 +0,0 @@ -package fr.iutfbleau.projetIHM2022FI2.Graphic.View; - -import javax.swing.tree.DefaultMutableTreeNode; - -import fr.iutfbleau.projetIHM2022FI2.API.Groupe; -public class DefaultMutableTreeNodeGroupe extends DefaultMutableTreeNode{ - private Groupe groupe; - public DefaultMutableTreeNodeGroupe(Groupe g, String path){ - super(path); - this.groupe=g; - } - - public Groupe getGroupe() { - return groupe; - } - - public void setGroupe(Groupe groupe) { - this.groupe = groupe; - } -} diff --git a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/Graphic/View/JTreeGroupe.java b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/Graphic/View/JTreeGroupe.java deleted file mode 100644 index 094f383..0000000 --- a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/Graphic/View/JTreeGroupe.java +++ /dev/null @@ -1,31 +0,0 @@ -package fr.iutfbleau.projetIHM2022FI2.Graphic.View; -import javax.swing.JTree; -import javax.swing.tree.TreeSelectionModel; -import javax.swing.event.TreeSelectionEvent; -import javax.swing.event.TreeSelectionListener; -import fr.iutfbleau.projetIHM2022FI2.Graphic.Controller.TreeSelectionEventGroupe; -import fr.iutfbleau.projetIHM2022FI2.Graphic.Controller.TreeSelectionListenerGroupe; -import fr.iutfbleau.projetIHM2022FI2.Graphic.Model.Model; - -public class JTreeGroupe extends JTree{ - private Model model; - public JTreeGroupe(Model m, DefaultMutableTreeNodeGroupe mut){ - super(mut); - this.model=m; - this.setEditable(true); - this.setShowsRootHandles(true); - this.getSelectionModel().setSelectionMode( - TreeSelectionModel.SINGLE_TREE_SELECTION); - this.addTreeSelectionListener(new TreeSelectionListenerGroupe()); - this.setRowHeight(15); - } - @Override - protected void fireValueChanged(TreeSelectionEvent e) { - DefaultMutableTreeNodeGroupe node=(DefaultMutableTreeNodeGroupe) this.getLastSelectedPathComponent(); - e=new TreeSelectionEventGroupe(this, getSelectionPaths(), null, getLeadSelectionPath(), getLeadSelectionPath(), node.getGroupe(), this.model); - TreeSelectionListener[] list=this.getTreeSelectionListeners(); - TreeSelectionListenerGroupe l=(TreeSelectionListenerGroupe) list[0]; - l.valueChanged(e); - } - -} diff --git a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MNP/AbstractGroupeFactoryNP.java b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MNP/AbstractGroupeFactoryNP.java index dc0e57f..086f8ab 100644 --- a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MNP/AbstractGroupeFactoryNP.java +++ b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MNP/AbstractGroupeFactoryNP.java @@ -1,5 +1,13 @@ package fr.iutfbleau.projetIHM2022FI2.MNP; import fr.iutfbleau.projetIHM2022FI2.API.*; +import java.sql.Connection; +import org.mariadb.jdbc.*; +import java.sql.DriverManager; +import java.sql.ResultSet; +import java.sql.PreparedStatement; +import java.sql.SQLException; +import javax.swing.JFrame; +import javax.swing.JOptionPane; import java.util.*; /** * Usine abstraite gérant l'ensemble des groupes. @@ -10,6 +18,9 @@ public class AbstractGroupeFactoryNP implements AbstractGroupeFactory { // la racine (promotion) private Groupe promo; + + //la fentre pour les fenetre modale + private JFrame fenetre; // On utilise une table de hachage pour retrouver facilement un groupe (à partir de son id). // Si il y a beaucoup de groupes c'est plus rapide que de parcourir toute une liste. @@ -18,11 +29,24 @@ public class AbstractGroupeFactoryNP implements AbstractGroupeFactory { /** * Le constructeur fabrique le groupe promotion déja plein (utilisé en Modèle persistant de donné). */ - public AbstractGroupeFactoryNP(Groupe promo){ + public AbstractGroupeFactoryNP(Groupe promo, JFrame fenetre){ this.promo=promo; + this.fenetre=fenetre; + this.brain=new HashMap(); + this.addSousGroupe(this.promo); + } + + /** + * Le constructeur fabrique le groupe promotion vide. + * Il faut ensuite y ajouter les étudiants. + */ + 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"); + this.promo=new GroupeNP(name,min,max); + this.fenetre=fenetre; this.brain=new HashMap(); this.brain.put(Integer.valueOf(this.promo.getId()),this.promo); - this.addSousGroupe(this.promo); + this.saveGroupe(promo); } /** @@ -37,17 +61,6 @@ public class AbstractGroupeFactoryNP implements AbstractGroupeFactory { this.addSousGroupe(s); } } - - /** - * Le constructeur fabrique le groupe promotion vide. - * Il faut ensuite y ajouter les étudiants. - */ - public AbstractGroupeFactoryNP(String name, int min, int max){ - Objects.requireNonNull(name,"On ne peut pas créer une promotion dont le nom est null"); - this.promo=new GroupeNP(name,min,max); - this.brain=new HashMap(); - this.brain.put(Integer.valueOf(this.promo.getId()),this.promo); - } /** * Test plutôt optimiste. Si la clé est identique alors on fait comme si c'était le bon groupe. @@ -58,8 +71,35 @@ public class AbstractGroupeFactoryNP implements AbstractGroupeFactory { return this.brain.containsKey(Integer.valueOf(g.getId())); } - - + + public boolean changeNameGroupe(Groupe g, String name){ + if(!this.knows(g)){ + throw new IllegalArgumentException("Groupe inconu "); + } + Connection cnx=this.cnx(); + try{ + PreparedStatement pst=cnx.prepareStatement( + "UPDATE `Groupe` SET `nom` = ? WHERE `Groupe`.`id` = ? " + ); + pst.setString(1, name); + pst.setInt(2, g.getId()); + pst.executeUpdate(); + pst.close(); + }catch(SQLException e){ + System.out.println(e.toString()); + if(this.erreurSQL()){ + this.changeNameGroupe(g, name); + }else{ + return false; + } + } + this.close(cnx); + g.setName(name); + return true; + } + + + /** * permet de récupérer le Groupe qui contient les étudiants de toute la promotion * @return la promo. @@ -81,14 +121,9 @@ public class AbstractGroupeFactoryNP implements AbstractGroupeFactory { if (!this.knows(g)){ throw new IllegalArgumentException("Impossible d'enlever un groupe inconnu"); } - if (this.getPromotion().equals(g)){ - throw new IllegalArgumentException("Impossible de détruire le groupe de toute la promotion"); - } - if (g.getSousGroupes().size()>0){ - throw new IllegalStateException("Impossible de détruire un groupe contenant un groupe"); - } g.getPointPoint().removeSousGroupe(g); this.brain.remove(Integer.valueOf(g.getId())); + this.suprGroupe(g); } /** @@ -104,6 +139,7 @@ public class AbstractGroupeFactoryNP implements AbstractGroupeFactory { public void createGroupe(Groupe pere, String name, int min, int max){ Objects.requireNonNull(pere,"Le groupe pere ne peut pas être null"); Objects.requireNonNull(name,"Le nouveau groupe ne peut pas avoir null comme nom"); + if (!this.knows(pere)){ throw new IllegalArgumentException("Interdit d'ajouter un fils à un groupe inconnu"); } @@ -113,9 +149,11 @@ public class AbstractGroupeFactoryNP implements AbstractGroupeFactory { if ( min <= 0 || max < min){ throw new IllegalArgumentException("Il faut que 0 < min <= max"); } + Groupe g = new GroupeNP(pere,name,min,max); pere.addSousGroupe(g); this.brain.put(Integer.valueOf(g.getId()),g); + this.saveGroupe(g); } /** @@ -167,6 +205,7 @@ public class AbstractGroupeFactoryNP implements AbstractGroupeFactory { groupes.get(i).addEtudiant(s); i = (i+1) %n; } + this.saveGroupe(copiePereRacinePartition); } /** @@ -186,6 +225,7 @@ public class AbstractGroupeFactoryNP implements AbstractGroupeFactory { throw new IllegalArgumentException("Impossible d'ajouter l'étudiant car le est groupe inconnu"); } g.addEtudiant(e); + this.saveEtu(e, g); } /** @@ -205,6 +245,7 @@ public class AbstractGroupeFactoryNP implements AbstractGroupeFactory { throw new IllegalArgumentException("Impossible d'ajouter l'étudiant car le est groupe inconnu"); } g.removeEtudiant(e); + this.deleteEtu(e, g); } /** @@ -250,4 +291,180 @@ public class AbstractGroupeFactoryNP implements AbstractGroupeFactory { } return ret; } + + + + // ********************** + // FONCTION POUR SIMPLIFIER LES Modification BD + // *********************** + + + private Connection cnx(){ + //On se Connecte a la BD + try{ + Class.forName("org.mariadb.jdbc.Driver"); + Connection cnx = DriverManager.getConnection( + "jdbc:mariadb://dwarves.iut-fbleau.fr/chaignea", + "chaignea", "Chaigneauphpmyadmin"); + return cnx; + }catch(Exception e){ + if(this.erreurCO()==true){ + return this.cnx(); + } + } + return null; + } + + 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; + }else{ + this.fenetre.dispose(); + return false; + } + } + + 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; + }else{ + return false; + } + } + + private void deleteEtu(Etudiant et, Groupe g){ + Connection cnx=this.cnx(); + try{ + PreparedStatement pst=cnx.prepareStatement( + "DELETE FROM CONTIENT WHERE idGroupe=? AND idEt=?; " + ); + pst.setInt(2, et.getId()); + this.deleteEtu(pst, cnx, g); + pst.close(); + }catch(SQLException e){ + System.out.println(e.toString()); + if(this.erreurSQL()){ + this.deleteEtu(et, g); + } + } + this.close(cnx); + } + + private void deleteEtu(PreparedStatement pst, Connection cnx, Groupe g){ + try{ + pst.setInt(1, g.getId()); + pst.executeUpdate(); + for(Groupe sous: g.getSousGroupes()){ + this.deleteEtu(pst, cnx, sous); + } + }catch(SQLException e){ + System.out.println(e.toString()); + if(this.erreurSQL()){ + this.deleteEtu(pst, cnx, g); + } + } + } + + private void close(AutoCloseable clos){ + try{ + clos.close(); + }catch(Exception e){ + if(this.erreurCO()==true) + this.close(clos); + } +} + + +private boolean saveEtu(Etudiant etudiant, Groupe g){ + Connection cnx = this.cnx(); + try{ + PreparedStatement pst=cnx.prepareStatement( + "Select id from Etudiant where id=?; "); + pst.setString(1, String.valueOf(etudiant.getId())); + ResultSet rs=pst.executeQuery(); + if(rs.next()){ + //L'etudiant est déja connu de la BD + pst.close(); + pst=cnx.prepareStatement( + "INSERT INTO `CONTIENT` (`idGroupe`, `idEt`) VALUES (?, ?);"); + pst.setInt(2, etudiant.getId()); + pst.setInt(1, g.getId()); + pst.executeUpdate(); + }else{ + pst.close(); + pst=cnx.prepareStatement( + "INSERT INTO `Etudiant` (`id`, `nom`, `prenom`) VALUES (?, ?, ?) ;"); + pst.setInt(1, etudiant.getId()); + pst.setString(2, etudiant.getNom()); + pst.setString(3, etudiant.getPrenom()); + pst.executeUpdate(); + } + rs.close(); + pst.close(); + }catch(SQLException e){ + System.out.println(e.toString()); + if(this.erreurSQL()){ + this.saveEtu(etudiant, g); + }else{ + return false; + } + } + this.close(cnx); + return true; + } + + private boolean saveGroupe(Groupe g){ + Connection cnx=this.cnx(); + try{ + PreparedStatement pst=cnx.prepareStatement( + "INSERT INTO `Groupe` (`id`, `nom`, `min`, `max`, `Type`, `id-parent`) VALUES (?, ?, ?, ?, ?, ?);" + ); + pst.setInt(1, g.getId()); + pst.setString(2, g.getName()); + pst.setInt(3, g.getMin()); + pst.setInt(4, g.getMax()); + pst.setString(5, g.getType().name()); + pst.setInt(6, g.getPointPoint().getId()); + pst.executeUpdate(); + pst.close(); + for(Etudiant e: g.getEtudiants()){ + this.saveEtu(e, g); + } + for(Groupe sous:g.getSousGroupes()){ + this.saveGroupe(sous); + } + }catch(SQLException e){ + System.out.println(e.toString()); + if(this.erreurSQL()){ + this.saveGroupe(g); + }else{ + return false; + } + } + this.close(cnx); + return true; + } + + private boolean suprGroupe(Groupe g){ + Connection cnx=this.cnx(); + try{ + PreparedStatement pst=cnx.prepareStatement("Delete FROM Groupe where id=?;"); + pst.setInt(1, g.getId()); + pst.executeUpdate(); + pst.close(); + pst=cnx.prepareStatement("Delete FROM CONTIENT where idGroupe=?;"); + pst.setInt(1, g.getId()); + pst.executeUpdate(); + pst.close(); + }catch(SQLException e){ + System.out.println(e.toString()); + if(this.erreurSQL()){ + this.suprGroupe(g); + }else{ + return false; + } + } + this.close(cnx); + return true; + } } diff --git a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/ROOT/Controller/ActionListenerChangeEtu.java b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/ROOT/Controller/ActionListenerChangeEtu.java new file mode 100644 index 0000000..6c294ca --- /dev/null +++ b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/ROOT/Controller/ActionListenerChangeEtu.java @@ -0,0 +1,20 @@ +package fr.iutfbleau.projetIHM2022FI2.ROOT.Controller; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; + +import fr.iutfbleau.projetIHM2022FI2.API.Etudiant; +import fr.iutfbleau.projetIHM2022FI2.ROOT.Model.Model; + +public class ActionListenerChangeEtu implements ActionListener { + public Etudiant etudiant; + public Model model; + public ActionListenerChangeEtu(Model m, Etudiant e){ + this.model=m; + this.etudiant=e; + } + @Override + public void actionPerformed(ActionEvent e) { + System.out.println(this.etudiant.toString()); + } + +} diff --git a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/Graphic/Controller/ActionListenerNouveauEtu.java b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/ROOT/Controller/ActionListenerNouveauEtu.java similarity index 89% rename from java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/Graphic/Controller/ActionListenerNouveauEtu.java rename to java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/ROOT/Controller/ActionListenerNouveauEtu.java index 9e0952b..c02ba60 100644 --- a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/Graphic/Controller/ActionListenerNouveauEtu.java +++ b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/ROOT/Controller/ActionListenerNouveauEtu.java @@ -1,9 +1,11 @@ -package fr.iutfbleau.projetIHM2022FI2.Graphic.Controller; +package fr.iutfbleau.projetIHM2022FI2.ROOT.Controller; import java.awt.event.ActionListener; -import fr.iutfbleau.projetIHM2022FI2.Graphic.View.FenetreSelectionEtu; import javax.swing.*; + +import fr.iutfbleau.projetIHM2022FI2.ROOT.View.FenetreSelectionEtu; + import java.awt.event.ActionEvent; public class ActionListenerNouveauEtu implements ActionListener{ diff --git a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/Graphic/Controller/ActionListenerSuprEtu.java b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/ROOT/Controller/ActionListenerSuprEtu.java similarity index 85% rename from java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/Graphic/Controller/ActionListenerSuprEtu.java rename to java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/ROOT/Controller/ActionListenerSuprEtu.java index d1c6440..ac92de1 100644 --- a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/Graphic/Controller/ActionListenerSuprEtu.java +++ b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/ROOT/Controller/ActionListenerSuprEtu.java @@ -1,11 +1,11 @@ -package fr.iutfbleau.projetIHM2022FI2.Graphic.Controller; +package fr.iutfbleau.projetIHM2022FI2.ROOT.Controller; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JOptionPane; import fr.iutfbleau.projetIHM2022FI2.API.Etudiant; -import fr.iutfbleau.projetIHM2022FI2.Graphic.Model.Model; +import fr.iutfbleau.projetIHM2022FI2.ROOT.Model.Model; public class ActionListenerSuprEtu implements ActionListener { public Etudiant etudiant; public Model model; diff --git a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/ROOT/Controller/ObservateurChangeGroupe.java b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/ROOT/Controller/ObservateurChangeGroupe.java new file mode 100644 index 0000000..75788dd --- /dev/null +++ b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/ROOT/Controller/ObservateurChangeGroupe.java @@ -0,0 +1,21 @@ +package fr.iutfbleau.projetIHM2022FI2.ROOT.Controller; + +import java.awt.event.*; + +import fr.iutfbleau.projetIHM2022FI2.API.Groupe; +import fr.iutfbleau.projetIHM2022FI2.ROOT.Model.Model; + +public class ObservateurChangeGroupe implements ActionListener{ + private Model m; + private Groupe g; + public ObservateurChangeGroupe(Model m, Groupe g){ + this.m=m; + this.g=g; + } + + @Override + public void actionPerformed(ActionEvent e) { + m.showGroupe(this.g); + } + +} diff --git a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/ROOT/Controller/ObservateurFenetre.java b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/ROOT/Controller/ObservateurFenetre.java new file mode 100644 index 0000000..2a5150d --- /dev/null +++ b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/ROOT/Controller/ObservateurFenetre.java @@ -0,0 +1,58 @@ +package fr.iutfbleau.projetIHM2022FI2.ROOT.Controller; +import java.awt.event.WindowEvent; +import java.awt.event.WindowListener; +import javax.swing.JOptionPane; +import javax.swing.JFrame; + +public class ObservateurFenetre implements WindowListener{ + + public ObservateurFenetre(){ + + } + + @Override + public void windowActivated(WindowEvent e) { + // TODO Auto-generated method stub + + } + + @Override + public void windowClosed(WindowEvent e) { + // TODO Auto-generated method stub + + } + + @Override + public void windowClosing(WindowEvent e) { + JFrame fenetre= (JFrame) e.getSource(); + int confirmation = JOptionPane.showConfirmDialog(fenetre.getContentPane(), "Voulez vous quitter?", "Quitter", JOptionPane.YES_NO_OPTION); + if(confirmation == JOptionPane.YES_OPTION){ + fenetre.dispose(); + } + } + + @Override + public void windowDeactivated(WindowEvent e) { + // TODO Auto-generated method stub + + } + + @Override + public void windowDeiconified(WindowEvent e) { + // TODO Auto-generated method stub + + } + + @Override + public void windowIconified(WindowEvent e) { + // TODO Auto-generated method stub + + } + + @Override + public void windowOpened(WindowEvent e) { + // TODO Auto-generated method stub + + } + +} diff --git a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/Graphic/Controller/ObservateurModifGroupe.java b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/ROOT/Controller/ObservateurModifGroupe.java similarity index 98% rename from java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/Graphic/Controller/ObservateurModifGroupe.java rename to java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/ROOT/Controller/ObservateurModifGroupe.java index b57fc7a..315bd9d 100644 --- a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/Graphic/Controller/ObservateurModifGroupe.java +++ b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/ROOT/Controller/ObservateurModifGroupe.java @@ -1,12 +1,13 @@ -package fr.iutfbleau.projetIHM2022FI2.Graphic.Controller; +package fr.iutfbleau.projetIHM2022FI2.ROOT.Controller; import java.awt.event.*; import java.util.LinkedHashSet; import fr.iutfbleau.projetIHM2022FI2.API.*; import javax.swing.JOptionPane; import fr.iutfbleau.projetIHM2022FI2.API.Groupe; -import fr.iutfbleau.projetIHM2022FI2.Graphic.Model.Model; -import fr.iutfbleau.projetIHM2022FI2.Graphic.View.FenetreSelectionEtu; +import fr.iutfbleau.projetIHM2022FI2.ROOT.Model.Model; +import fr.iutfbleau.projetIHM2022FI2.ROOT.View.FenetreSelectionEtu; + import javax.swing.*; import java.util.Set; public class ObservateurModifGroupe implements ActionListener{ diff --git a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/Graphic/Controller/SelecteurEtudiant.java b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/ROOT/Controller/SelecteurEtudiant.java similarity index 88% rename from java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/Graphic/Controller/SelecteurEtudiant.java rename to java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/ROOT/Controller/SelecteurEtudiant.java index 4b6f5ae..4a4c0ab 100644 --- a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/Graphic/Controller/SelecteurEtudiant.java +++ b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/ROOT/Controller/SelecteurEtudiant.java @@ -1,9 +1,9 @@ -package fr.iutfbleau.projetIHM2022FI2.Graphic.Controller; +package fr.iutfbleau.projetIHM2022FI2.ROOT.Controller; import java.awt.Color; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; -import fr.iutfbleau.projetIHM2022FI2.Graphic.View.FenetreSelectionEtu; +import fr.iutfbleau.projetIHM2022FI2.ROOT.View.FenetreSelectionEtu; public class SelecteurEtudiant implements MouseListener{ private FenetreSelectionEtu pere; diff --git a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/Graphic/Model/Model.java b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/ROOT/Model/Model.java similarity index 58% rename from java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/Graphic/Model/Model.java rename to java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/ROOT/Model/Model.java index fbcad6e..678c712 100644 --- a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/Graphic/Model/Model.java +++ b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/ROOT/Model/Model.java @@ -1,7 +1,6 @@ -package fr.iutfbleau.projetIHM2022FI2.Graphic.Model; +package fr.iutfbleau.projetIHM2022FI2.ROOT.Model; import java.sql.PreparedStatement; import java.sql.SQLException; -import java.util.HashMap; import java.util.Set; import java.sql.Connection; import java.sql.ResultSet; @@ -12,15 +11,13 @@ import fr.iutfbleau.projetIHM2022FI2.API.AbstractGroupeFactory; import fr.iutfbleau.projetIHM2022FI2.API.Etudiant; import fr.iutfbleau.projetIHM2022FI2.API.Groupe; import fr.iutfbleau.projetIHM2022FI2.API.TypeGroupe; -import fr.iutfbleau.projetIHM2022FI2.Graphic.Controller.ObservateurFenetre; -import fr.iutfbleau.projetIHM2022FI2.Graphic.Util.BD; -import fr.iutfbleau.projetIHM2022FI2.Graphic.View.Chargement; -import fr.iutfbleau.projetIHM2022FI2.Graphic.View.DefaultMutableTreeNodeGroupe; -import fr.iutfbleau.projetIHM2022FI2.Graphic.View.FenetreEtudiant; -import fr.iutfbleau.projetIHM2022FI2.Graphic.View.FenetreGroupe; -import fr.iutfbleau.projetIHM2022FI2.Graphic.View.JTreeGroupe; import fr.iutfbleau.projetIHM2022FI2.MNP.AbstractGroupeFactoryNP; import fr.iutfbleau.projetIHM2022FI2.MNP.GroupeNP; +import fr.iutfbleau.projetIHM2022FI2.ROOT.Controller.ObservateurFenetre; +import fr.iutfbleau.projetIHM2022FI2.ROOT.Util.BD; +import fr.iutfbleau.projetIHM2022FI2.ROOT.View.Chargement; +import fr.iutfbleau.projetIHM2022FI2.ROOT.View.FenetreEtudiant; +import fr.iutfbleau.projetIHM2022FI2.ROOT.View.FenetreGroupe; /** * Le Model de L'IHM @@ -31,21 +28,23 @@ public class Model{ private FenetreGroupe fenGr; private FenetreEtudiant fenEtu; private AbstractGroupeFactory promo; - private JFrame fenetre; + private JFrame fenetre; //private JTree tree; private BD bd; - private HashMap brain; public Model(){ this.fenetre=new JFrame(); this.fenetre.setSize(1200, 720); this.fenetre.setLocation(100,100); this.fenetre.addWindowListener(new ObservateurFenetre()); + + + + this.fenetre.setLayout(new GridLayout(1,2)); this.fenetre.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE); this.fenetre.setMinimumSize(this.fenetre.getSize()); - this.brain=new HashMap<>(); this.bd=new BD(this.fenetre); - Chargement ch=new Chargement(this.fenetre.getSize()); + Chargement ch=new Chargement(this.fenetre); this.promo=this.getPromo(ch); ch.dispose(); this.fenetre.setVisible(true); @@ -57,11 +56,6 @@ public class Model{ this.fenEtu=new FenetreEtudiant(this.promo.getPromotion(), this); } this.panGroupe=new JPanel(new GridLayout(1,1)); - if(this.promo!=null){ - //this.initJtree(this.promo.getPromotion()); - }else{ - //this.initJtree(null); - } if(this.promo!=null){ this.showGroupe(this.promo.getPromotion()); }else{ @@ -80,11 +74,10 @@ public void showGroupe(Groupe g){ this.fenGr=new FenetreGroupe(g, this); this.fenEtu=new FenetreEtudiant(g, this); this.fenetre.getContentPane().removeAll(); - //this.panGroupe.add(this.tree); - this.panGroupe.add(this.fenGr); + this.panGroupe.add(this.fenGr.getPan()); this.panGroupe.revalidate(); this.fenetre.add(this.panGroupe); - JScrollPane scroll=new JScrollPane(this.fenEtu); + JScrollPane scroll=new JScrollPane(this.fenEtu.getPan()); scroll.getVerticalScrollBar().setUnitIncrement(15); this.fenetre.add(scroll); this.fenetre.revalidate(); @@ -96,137 +89,96 @@ public void showGroupe(Groupe g){ public JFrame getFenetre() { return fenetre; } + + /** - * Fonction pour supprimer un groupe - * @param g le groupe a supprimer + * Fonction permettant d'initialiser l'AbstractFactory de la promo + * avec la Base de donné + * @param Chargement: pour indiquer la progression du chargement */ - public void delete(Groupe g){ - //On ne peut pas supprimer la promo normallement - if(g==this.promo.getPromotion()){ - if(JOptionPane.showConfirmDialog(this.fenetre, "Attention ête vous sûr de vouloir supprimer la promo", "Attention", JOptionPane.YES_NO_OPTION)==JOptionPane.YES_OPTION){ - this.promo=null; - if(this.bd.suprGroupe(g)){ - this.initJtree(null); + private AbstractGroupeFactory getPromo(Chargement chargement){ + AbstractGroupeFactory agf=null; + Connection cnx=this.bd.cnx(); + //on récupère le Groupe de la BD n'ayant pas de Parent (La promo donc) + try{ + PreparedStatement pst = cnx.prepareStatement( + "SELECT `id`, `nom`, `min`, `max`, `value`, `id-parent` FROM `Groupe` join `TYPE` on Groupe.Type=TYPE.name ORDER BY Groupe.id ASC;"); + ResultSet rs = pst.executeQuery(); + rs=pst.executeQuery(); + rs.last(); + int nbgrp=rs.getRow(); + rs=pst.executeQuery(); + try{ + //Si il existe bien une promotion + if(rs.next()){ + //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.init(groupe, (100/nbgrp), chargement); + //On créer la Factory + agf=new AbstractGroupeFactoryNP(groupe, this.fenetre); + }else{ + //Si aucune ligne et donc pas de promo: + this.promo=null; + } + }catch(SQLException e){ } - this.showGroupe(null); - }else{ - return; + rs.close(); + pst.close(); + }catch(SQLException e){ } - //JOptionPane.showMessageDialog(this.fenetre, "impossible de supprimer la promotion", "alerte", JOptionPane.ERROR_MESSAGE); + this.bd.close(cnx); + return agf; + } + + public Set getEtudiant(){ + return this.bd.getEtudiant(); + } + + private void init(Groupe g, int pourcentage, Chargement ch){ + this.bd.refreshALL(g); + ch.addPourcent(pourcentage+1); + for(Groupe gr:g.getSousGroupes()){ + this.init(gr, pourcentage, ch); + } + } + + + + + + + // *********************** + // FONCTION POUR SUPRIMER UN ETUDIANT + // *********************** + + + public boolean deleteEtu(Etudiant e){ + if(this.deleteEtutoChildren(e, this.fenGr.getG())){ + this.promo.dropFromGroupe(this.fenGr.getG(), e); + this.showGroupe(this.fenGr.getG()); + return true; }else{ - //autrement on récupere les groupe a supprimer par ordre avec une fonction recursive - //elle contiendra les sous-groupe remontant j'usqau groupe a supprimer - //On initialise la liste - if(this.bd.suprGroupe(g)){ - //this.refreshTree(this.brain.get(g.getId()), g); - } - this.showGroupe(g.getPointPoint()); + return false; } } - private int getTailleGroupe(Groupe g){ - int i=0; - for(Groupe gr: g.getSousGroupes()){ - i+=this.getTailleGroupe(gr); - } - return 1+i; - } - - /** - * Fonction permetant de créer une partition d'un groupe - * @param g le groupe a partitionner - * @param n le nombre de partition - * @param name le nom des partition - */ - public void partition(Groupe g, int n, String name){ - Chargement ch=new Chargement(this.fenetre.getSize()); - this.promo.createPartition(g, name, n); - //On recherche le groupe Partitionner pour le sauvegarder dans la BD - - for(Groupe gr: g.getSousGroupes()){ - if(gr.getSousGroupes().size()>0 && gr.getSousGroupes().iterator().next().getName().contains(name)){ - this.fenetre.setVisible(false); - if(this.bd.saveGroupe(gr, 100/this.getTailleGroupe(gr)+1, ch)){ - //this.refreshTree(this.brain.get(g.getId()), g); - } - ch.dispose(); - this.fenetre.setVisible(true); - break; + private boolean deleteEtutoChildren(Etudiant e, Groupe g){ + if(g.getMax() ajout){ - //on creer le groupe - this.promo.createGroupe(g, name, min, max); - Groupe creer=null; - //on le recupere - for(Groupe gr:g.getSousGroupes()){ - if(gr.getName()==name){ - creer=gr; - break; - } - } - //on crééer le groupe - this.bd.createGroupe(creer); - //on y ajoute les étudiant - int n=0; - for(Etudiant e:ajout){ - if(this.addEtudiant(creer, e)==false) - n++; - } - creer=this.bd.refreshALL(creer); - if(n>0) - JOptionPane.showMessageDialog(this.fenetre, "erreur impossible d'ajouter "+n+" etudiants par manque de place dans le groupe de ses parents", "erreur", JOptionPane.ERROR_MESSAGE); - //Si finalement avec les etudiants qui n'ont pas pus être ajouter le min n'est pas atteint - if(creer.getEtudiants().size()<=creer.getMin()){ - //On le supprime - this.promo.deleteGroupe(creer); - //this.bd.suprGroupe(creer); - JOptionPane.showMessageDialog(this.fenetre, "en raison du manque d'etudiant pour le nombre min le groupe n'a pas pus être créer", "errer", JOptionPane.ERROR_MESSAGE); - } - this.showGroupe(g); - } - - /** - * Fonction pour renomer un groupe - * @param name - * @param g - */ - public void rename(String name, Groupe g){ - this.bd.changeNameGroupe(g, name); - g.setName(name); - this.showGroupe(g); + return true; } - - public void addPromo(int min, int max, String name, Set ajout){ - Chargement ch=new Chargement(this.fenetre.getSize()); - this.promo=new AbstractGroupeFactoryNP(name, min, max); - this.fenetre.setVisible(false); - this.bd.saveGroupe(this.promo.getPromotion(), this.getTailleGroupe(this.promo.getPromotion()), ch); - ch.addPourcent(20); - int pourcent=85/ajout.size(); - for(Etudiant e:ajout){ - this.addEtudiant(this.promo.getPromotion(), e); - ch.addPourcent(pourcent); - } - ch.dispose(); - this.fenetre.setVisible(true); - this.showGroupe(this.promo.getPromotion()); - } - + // *********************** + // FONCTION POUR Ajouter UN ETUDIANT + // *********************** + /** * Fonction pour ajouter un étudiant au groupe * @param g @@ -239,7 +191,7 @@ public void showGroupe(Groupe g){ if(this.addEtuToParent(g.getPointPoint(), e)==false) return false; //On induqe a la BD de sauvegarder cette modification - this.bd.saveEtu(e, g); + this.promo.addToGroupe(g, e); return true; } @@ -262,112 +214,126 @@ public void showGroupe(Groupe g){ return false; } } - this.bd.saveEtu(e, g); + this.promo.addToGroupe(g, e); return true; } - /** - * Fonction permettant d'initialiser l'AbstractFactory de la promo - * avec la Base de donné - * @param Chargement: pour indiquer la progression du chargement - */ - private AbstractGroupeFactory getPromo(Chargement chargement){ - AbstractGroupeFactory agf=null; - Connection cnx=this.bd.cnx(); - //on récupère le Groupe de la BD n'ayant pas de Parent (La promo donc) - try{ - PreparedStatement pst = cnx.prepareStatement( - "SELECT `id`, `nom`, `min`, `max`, `value`, `id-parent` FROM `Groupe` join `TYPE` on Groupe.Type=TYPE.name ORDER BY Groupe.id ASC;"); - ResultSet rs = pst.executeQuery(); - rs=pst.executeQuery(); - rs.last(); - int nbgrp=rs.getRow(); - rs=pst.executeQuery(); - try{ - //Si il existe bien une promotion - if(rs.next()){ - //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.init(groupe, (100/nbgrp), chargement); - //On créer la Factory - agf=new AbstractGroupeFactoryNP(groupe); - }else{ - //Si aucune ligne et donc pas de promo: - this.promo=null; - } - }catch(SQLException e){ - } - rs.close(); - pst.close(); - }catch(SQLException e){ - } - this.bd.close(cnx); - return agf; + // *********************** + // FONCTION POUR SUPRIMER UN GROUPE + // *********************** + + /** + * Fonction pour supprimer un groupe + * @param g le groupe a supprimer + */ + public void delete(Groupe g){ + //On ne peut pas supprimer la promo normallement + if(g==this.promo.getPromotion()){ + if(JOptionPane.showConfirmDialog(this.fenetre, "Attention ête vous sûr de vouloir supprimer la promo", "Attention", JOptionPane.YES_NO_OPTION)==JOptionPane.YES_OPTION){ + this.promo.deleteGroupe(g); + this.promo=null; + this.showGroupe(null); + }else{ + return; } - - public Set getEtudiant(){ - return this.bd.getEtudiant(); - } - - private void init(Groupe g, int pourcentage, Chargement ch){ - this.bd.refreshALL(g); - ch.addPourcent(pourcentage+1); - for(Groupe gr:g.getSousGroupes()){ - this.init(gr, pourcentage, ch); - } - } - - public boolean deleteEtu(Etudiant e){ - if(this.deleteEtutoChildren(e, this.fenGr.getG())){ - this.bd.deleteEtu(e, this.fenGr.getG()); - this.showGroupe(this.fenGr.getG()); - return true; + //JOptionPane.showMessageDialog(this.fenetre, "impossible de supprimer la promotion", "alerte", JOptionPane.ERROR_MESSAGE); }else{ - return false; + //on suprime le groupe + this.promo.deleteGroupe(g); + this.showGroupe(g.getPointPoint()); } } - private boolean deleteEtutoChildren(Etudiant e, Groupe g){ - if(g.getMax() ajout){ + Chargement ch=new Chargement(this.fenetre); + this.fenetre.setVisible(false); + //on creer le groupe + this.promo.createGroupe(g, name, min, max); + Groupe creer=null; + //on le recupere + for(Groupe gr:g.getSousGroupes()){ + if(gr.getName()==name){ + creer=gr; + break; } } - return true; - } - - private void initJtree(Groupe g){/* - this.brain=new HashMap<>(); - DefaultMutableTreeNodeGroupe mut; - if(g!=null){ - mut=new DefaultMutableTreeNodeGroupe(g, g.getName()); - this.brain.put(g.getId(), mut); - for(Groupe sous:g.getSousGroupes()){ - this.treeRecursif(sous, mut); - } - }else{ - mut=new DefaultMutableTreeNodeGroupe(g, null); + //on y ajoute les étudiant + int n=0; + for(Etudiant e:ajout){ + if(this.addEtudiant(creer, e)==false) + n++; } - //this.tree=new JTreeGroupe(this, mut);*/ + creer=this.bd.refreshALL(creer); + ch.dispose(); + this.fenetre.setVisible(true); + if(n>0) + JOptionPane.showMessageDialog(this.fenetre, "erreur impossible d'ajouter "+n+" etudiants par manque de place dans le groupe de ses parents", "erreur", JOptionPane.ERROR_MESSAGE); + //Si finalement avec les etudiants qui n'ont pas pus être ajouter le min n'est pas atteint + if(creer.getEtudiants().size()+1<=creer.getMin()){ + //On le supprime + this.promo.deleteGroupe(creer); + JOptionPane.showMessageDialog(this.fenetre, "en raison du manque d'etudiant pour le nombre min le groupe n'a pas pus être créer", "errer", JOptionPane.ERROR_MESSAGE); + } + this.showGroupe(g); } - private void treeRecursif(Groupe g, DefaultMutableTreeNodeGroupe m){/* - this.brain.put(g.getId(), m); - DefaultMutableTreeNodeGroupe mut=new DefaultMutableTreeNodeGroupe(g, g.getName()); - m.add(mut); - for(Groupe sous: g.getSousGroupes()){ - this.treeRecursif(sous, mut); - }*/ + public void addPromo(int min, int max, String name, Set ajout){ + Chargement ch=new Chargement(this.fenetre); + this.promo=new AbstractGroupeFactoryNP(name, min, max, this.fenetre); + this.fenetre.setVisible(false); + ch.addPourcent(20); + int pourcent=85/ajout.size(); + for(Etudiant e:ajout){ + this.addEtudiant(this.promo.getPromotion(), e); + ch.addPourcent(pourcent); + } + ch.dispose(); + this.fenetre.setVisible(true); + this.showGroupe(this.promo.getPromotion()); } - private void refreshTree(DefaultMutableTreeNodeGroupe m, Groupe g){ - /* m.removeAllChildren(); - for(Groupe sous:g.getSousGroupes()){ - this.treeRecursif(sous, m); - }*/ - } } diff --git a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/ROOT/Util/BD.java b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/ROOT/Util/BD.java new file mode 100644 index 0000000..108b5da --- /dev/null +++ b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/ROOT/Util/BD.java @@ -0,0 +1,228 @@ +package fr.iutfbleau.projetIHM2022FI2.ROOT.Util; + +import java.sql.Connection; +import javax.swing.JFrame; +import javax.swing.JOptionPane; +import org.mariadb.jdbc.*; +import java.sql.DriverManager; +import java.sql.ResultSet; +import java.sql.PreparedStatement; +import java.sql.SQLException; +import java.util.Set; +import java.util.LinkedHashSet; +import fr.iutfbleau.projetIHM2022FI2.API.*; +import fr.iutfbleau.projetIHM2022FI2.MNP.*; +import fr.iutfbleau.projetIHM2022FI2.ROOT.View.Chargement; + +/** + * Class relative a la BD + */ +public class BD { + private JFrame fenetre; + public BD(JFrame fenetre){ + this.fenetre=fenetre; + } + + public Connection cnx(){ + //On se Connecte a la BD + try{ + Class.forName("org.mariadb.jdbc.Driver"); + Connection cnx = DriverManager.getConnection( + "jdbc:mariadb://dwarves.iut-fbleau.fr/chaignea", + "chaignea", "Chaigneauphpmyadmin"); + return cnx; + }catch(Exception e){ + if(this.erreurCO()==true){ + return this.cnx(); + } + } + return null; + } + + /** + * Erreur de connection + * @return true si posssible + */ + 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; + }else{ + this.fenetre.dispose(); + return false; + } + } + + public void close(AutoCloseable clos){ + try{ + clos.close(); + }catch(Exception e){ + if(this.erreurCO()==true) + this.close(clos); + } + } + + /** + * 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{ + //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`;"); + pst.setString(1, String.valueOf(g.getId())); + ResultSet rs=pst.executeQuery(); + rs=pst.executeQuery(); + //autrement si le groupe as des sous groupe + 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 + } + rs.close(); + }catch(SQLException e){ + if(this.erreurCO()) + this.addSousGroupe(g, cnx); + } + } + + /** + * 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 addBDEtudiant(Groupe g, Connection cnx){ + try{ + //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=? ORDER BY Etudiant.id ASC"); + pst.setInt(1, g.getId()); + ResultSet rs=pst.executeQuery(); + //Pour tous les étudiants + while(rs.next()){ + boolean exist=false; + //autrement on recupere l'etudiant + for(Etudiant e: g.getPointPoint().getEtudiants()){ + if(e.getId()==rs.getInt(3)){ + exist=true; + g.addEtudiant(e); + break; + } + } + if(exist==false){ + g.addEtudiant(new EtudiantNP(rs.getString(1), rs.getString(2), rs.getInt(3))); + } + } + rs.close(); + pst.close(); + }catch(SQLException e){ + if(this.erreurCO()) + this.addBDEtudiant(g, cnx); + } + } + + /** + * 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 + * @return le groupe refresh + */ + public Groupe refreshGroupe(Groupe g){ + Connection cnx=this.cnx(); + g=this.refreshGroupe(g, cnx); + this.close(cnx); + return 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 + * @return le groupe refresh + */ + private Groupe refreshGroupe(Groupe g, Connection cnx){ + + try{ + PreparedStatement pst = cnx.prepareStatement( + "SELECT `id`, `nom`, `min`, `max`, `value`, `id-parent` FROM `Groupe` join `TYPE` on Groupe.Type=TYPE.name where Groupe.`id`=? OR Groupe.`id-parent`=? ORDER BY Groupe.id ASC;"); + pst.setString(1, String.valueOf(g.getId())); + pst.setString(2, String.valueOf(g.getId())); + ResultSet rs=pst.executeQuery(); + if(rs.next()){ + if(rs.getString(2)!=g.getName()){ + g.setName(rs.getString(2)); + } + Set it=new LinkedHashSet<>(); + for(Groupe gr:g.getSousGroupes()){ + it.add(gr); + } + for(Groupe gr:it){ + g.removeSousGroupe(gr); + } + Set et=new LinkedHashSet<>(); + for(Etudiant gr:g.getEtudiants()){ + et.add(gr); + } + for(Etudiant gr:et){ + g.removeEtudiant(gr); + } + this.addSousGroupe(g, cnx); + }else{ + if(g==g.getPointPoint()){ + g=null; + }else{ + g=this.refreshGroupe(g.getPointPoint(), cnx); + } + } + rs.close(); + }catch(SQLException e){ + if(this.erreurCO()) + this.refreshGroupe(g, cnx); + } + return g; + } + + /** + * refresh le Groupe ainsi que ses etudiants + * @param g le groupe + * @return le groupe refresh/un parent si il a été refresh + */ + public Groupe refreshALL(Groupe g){ + Connection cnx = this.cnx(); + g=this.refreshGroupe(g, cnx); + Set et=new LinkedHashSet<>(); + for(Etudiant gr:g.getEtudiants()){ + et.add(gr); + } + for(Etudiant gr:et){ + g.removeEtudiant(gr); + } + this.addBDEtudiant(g, cnx); + this.close(cnx); + return g; + } + + public Set getEtudiant(){ + Connection cnx=this.cnx(); + Set ret=new LinkedHashSet<>(); + try{ + PreparedStatement pst=cnx.prepareStatement("SELECT * FROM Etudiant"); + ResultSet rs=pst.executeQuery(); + while(rs.next()){ + ret.add(new EtudiantNP(rs.getString(2), rs.getString(3), rs.getInt(1))); + } + pst.close(); + rs.close(); + }catch(SQLException e){ + if(this.erreurCO()) + return this.getEtudiant(); + } + this.close(cnx); + return ret; + } +} diff --git a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/ROOT/Util/User.java b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/ROOT/Util/User.java new file mode 100644 index 0000000..bbe348a --- /dev/null +++ b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/ROOT/Util/User.java @@ -0,0 +1,11 @@ +package fr.iutfbleau.projetIHM2022FI2.ROOT.Util; + +public enum User { + ROOT("root"), PROF("proffeseur"), ETUDIANT("etudiant"); + + private final String name; + + private User(String s) { + name = s; + } +} diff --git a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/ROOT/View/Chargement.java b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/ROOT/View/Chargement.java new file mode 100644 index 0000000..84f4a00 --- /dev/null +++ b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/ROOT/View/Chargement.java @@ -0,0 +1,55 @@ +package fr.iutfbleau.projetIHM2022FI2.ROOT.View; + +import java.awt.Graphics; + +import javax.swing.JComponent; +import javax.swing.JFrame; + +import java.awt.*; + +/** + * Class Dessinant les boutons du menu + */ +public class Chargement extends JComponent{ + private int pourcentage; + private JFrame fenetre; + + public Chargement(JFrame n){ + this.pourcentage=0; + this.fenetre=new JFrame(); + this.fenetre.setSize(n.getSize()); + this.fenetre.setLocation(n.getLocation()); + this.fenetre.add(this, BorderLayout.CENTER); + this.repaint(); + this.fenetre.setVisible(true); + } + public void addPourcent(int n){ + this.pourcentage+=n; + this.repaint(); + } + + public void dispose(){ + this.fenetre.dispose(); + } + + @Override + protected void paintComponent(Graphics pinceau) { + // obligatoire : on crée un nouveau pinceau pour pouvoir le modifier plus tard + Graphics2D secondPinceau = (Graphics2D) pinceau.create(); + secondPinceau.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); + // obligatoire : si le composant n'est pas censé être transparent + if (this.isOpaque()) { + // obligatoire : on repeint toute la surface avec la couleur de fond + secondPinceau.setColor(this.getBackground()); + secondPinceau.fillRect(0, 0, this.getWidth(), this.getHeight()); + } + // maintenant on dessine ce que l'on veut + secondPinceau.setColor(Color.BLUE); + secondPinceau.setFont(new Font(Font.SANS_SERIF, Font.BOLD, (this.getWidth()/10))); + FontMetrics metrics = secondPinceau.getFontMetrics(secondPinceau.getFont()); + secondPinceau.drawString("CHARGEMENT", (this.getWidth()/2-metrics.stringWidth("CHARGEMENT")/2), (this.getHeight()-metrics.getHeight())/3+metrics.getAscent()); + secondPinceau.drawRect(this.getWidth()/10, this.getHeight()/2, this.getWidth()/10*8, this.getHeight()/10); + float stat=(int) 8.F/100.F*(pourcentage); + secondPinceau.fillRect(this.getWidth()/10, this.getHeight()/2, this.getWidth()/10*((int) stat), this.getHeight()/10); + } +} \ No newline at end of file diff --git a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/Graphic/View/FenetreEtudiant.java b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/ROOT/View/FenetreEtudiant.java similarity index 57% rename from java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/Graphic/View/FenetreEtudiant.java rename to java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/ROOT/View/FenetreEtudiant.java index b21f667..005058a 100644 --- a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/Graphic/View/FenetreEtudiant.java +++ b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/ROOT/View/FenetreEtudiant.java @@ -1,4 +1,4 @@ -package fr.iutfbleau.projetIHM2022FI2.Graphic.View; +package fr.iutfbleau.projetIHM2022FI2.ROOT.View; import javax.swing.JLabel; @@ -10,16 +10,17 @@ import java.util.Set; import fr.iutfbleau.projetIHM2022FI2.API.Etudiant; import fr.iutfbleau.projetIHM2022FI2.API.Groupe; -import fr.iutfbleau.projetIHM2022FI2.Graphic.Controller.ActionListenerChangeEtu; -import fr.iutfbleau.projetIHM2022FI2.Graphic.Controller.ActionListenerSuprEtu; -import fr.iutfbleau.projetIHM2022FI2.Graphic.Model.Model; +import fr.iutfbleau.projetIHM2022FI2.ROOT.Controller.ActionListenerChangeEtu; +import fr.iutfbleau.projetIHM2022FI2.ROOT.Controller.ActionListenerSuprEtu; +import fr.iutfbleau.projetIHM2022FI2.ROOT.Model.Model; -public class FenetreEtudiant extends JPanel{ +public class FenetreEtudiant{ private Set etu; private Model m; + private JPanel pan; public FenetreEtudiant(Groupe g, Model m){ - super(); + this.pan=new JPanel(); this.m=m; if(g!=null){ this.etu=g.getEtudiants(); @@ -31,21 +32,25 @@ public class FenetreEtudiant extends JPanel{ private void draw(){ if(this.etu.size()!=0){ - this.setLayout(new GridLayout(this.etu.size(), 1, 10, 0)); + this.pan.setLayout(new GridLayout(this.etu.size(), 1, 10, 0)); for(Etudiant e: this.etu){ PanelEtudiant p=new PanelEtudiant(e); p.addActionDeleteListener(new ActionListenerSuprEtu(m, e)); p.addActionChangeListener(new ActionListenerChangeEtu(m, e)); - this.add(p); + this.pan.add(p); } }else{ - this.setLayout(new FlowLayout()); - this.add(new JLabel("Il n'y a pas d'étudiant")); + this.pan.setLayout(new FlowLayout()); + this.pan.add(new JLabel("Il n'y a pas d'étudiant")); } } public void refresh(){ - this.removeAll(); + this.pan.removeAll(); this.draw(); - this.revalidate(); + this.pan.revalidate(); + } + + public JPanel getPan() { + return pan; } } diff --git a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/Graphic/View/FenetreGroupe.java b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/ROOT/View/FenetreGroupe.java similarity index 69% rename from java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/Graphic/View/FenetreGroupe.java rename to java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/ROOT/View/FenetreGroupe.java index a686f20..da5db7c 100644 --- a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/Graphic/View/FenetreGroupe.java +++ b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/ROOT/View/FenetreGroupe.java @@ -1,4 +1,4 @@ -package fr.iutfbleau.projetIHM2022FI2.Graphic.View; +package fr.iutfbleau.projetIHM2022FI2.ROOT.View; import javax.swing.JButton; import javax.swing.JLabel; @@ -8,27 +8,29 @@ import java.awt.Font; import java.awt.GridLayout; import fr.iutfbleau.projetIHM2022FI2.API.Groupe; import fr.iutfbleau.projetIHM2022FI2.API.TypeGroupe; -import fr.iutfbleau.projetIHM2022FI2.Graphic.Controller.ObservateurChangeGroupe; -import fr.iutfbleau.projetIHM2022FI2.Graphic.Controller.ObservateurModifGroupe; -import fr.iutfbleau.projetIHM2022FI2.Graphic.Model.Model; +import fr.iutfbleau.projetIHM2022FI2.ROOT.Controller.ObservateurChangeGroupe; +import fr.iutfbleau.projetIHM2022FI2.ROOT.Controller.ObservateurModifGroupe; +import fr.iutfbleau.projetIHM2022FI2.ROOT.Model.Model; -public class FenetreGroupe extends JPanel{ +public class FenetreGroupe{ private Groupe g; + private JPanel pan; private Model m; public FenetreGroupe(Groupe g, Model m){ super(); this.g=g; this.m=m; + this.pan=new JPanel(); this.draw(); } public Groupe getG() { return this.g; } public void refresh(){ - this.removeAll(); + this.pan.removeAll(); this.draw(); - this.revalidate(); + this.pan.revalidate(); } private void draw(){ if(g!=null){ @@ -36,8 +38,8 @@ public class FenetreGroupe extends JPanel{ if(g.getType()==TypeGroupe.PARTITION || g.getType()==TypeGroupe.ROOT) taille--; if(g.getSousGroupes().size()>0) - this.setLayout(new GridLayout(8, 1)); - else{this.setLayout(new GridLayout(7, 1));} + this.pan.setLayout(new GridLayout(8, 1)); + else{this.pan.setLayout(new GridLayout(7, 1));} JPanel tache=new JPanel(new GridLayout(1,taille)); if(g.getType()!=TypeGroupe.ROOT){ JButton bout=new JButton(g.getPointPoint().getName()); @@ -58,15 +60,15 @@ public class FenetreGroupe extends JPanel{ creer.addActionListener(new ObservateurModifGroupe(m, g)); tache.add(creer); } - this.add(tache); + this.pan.add(tache); JLabel titre=new JLabel("Group : "+g.getName(), JLabel.CENTER); titre.setFont(new Font(Font.SERIF, Font.BOLD, titre.getFont().getSize()+10)); - this.add(titre); - this.add(new JLabel("id= "+String.valueOf(g.getId()),JLabel.CENTER)); - this.add(new JLabel("min= "+String.valueOf(g.getMin()),JLabel.CENTER)); - this.add(new JLabel("max= "+String.valueOf(g.getMax()),JLabel.CENTER)); - this.add(new JLabel(g.getType().name(), JLabel.CENTER)); - this.add(new JLabel("Sous groupe:",JLabel.CENTER)); + this.pan.add(titre); + this.pan.add(new JLabel("id= "+String.valueOf(g.getId()),JLabel.CENTER)); + this.pan.add(new JLabel("min= "+String.valueOf(g.getMin()),JLabel.CENTER)); + this.pan.add(new JLabel("max= "+String.valueOf(g.getMax()),JLabel.CENTER)); + this.pan.add(new JLabel(g.getType().name(), JLabel.CENTER)); + this.pan.add(new JLabel("Sous groupe:",JLabel.CENTER)); if(g.getSousGroupes().size()>0){ JPanel sous=new JPanel(new GridLayout(g.getSousGroupes().size(), 1)); for(Groupe gr: g.getSousGroupes()){ @@ -74,16 +76,20 @@ public class FenetreGroupe extends JPanel{ b.addActionListener(new ObservateurChangeGroupe(m, gr)); sous.add(b); } - this.add(new JScrollPane(sous)); + this.pan.add(new JScrollPane(sous)); } }else{ JButton creer=new JButton("créer une promo"); creer.addActionListener(new ObservateurModifGroupe(m, g)); - this.add(creer); + this.pan.add(creer); } } public void setG(Groupe g) { this.g = g; } + + public JPanel getPan() { + return pan; + } } diff --git a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/Graphic/View/FenetreSelectionEtu.java b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/ROOT/View/FenetreSelectionEtu.java similarity index 92% rename from java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/Graphic/View/FenetreSelectionEtu.java rename to java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/ROOT/View/FenetreSelectionEtu.java index 027ef5e..0b0b707 100644 --- a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/Graphic/View/FenetreSelectionEtu.java +++ b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/ROOT/View/FenetreSelectionEtu.java @@ -1,13 +1,11 @@ -package fr.iutfbleau.projetIHM2022FI2.Graphic.View; +package fr.iutfbleau.projetIHM2022FI2.ROOT.View; import fr.iutfbleau.projetIHM2022FI2.API.Etudiant; import fr.iutfbleau.projetIHM2022FI2.API.Groupe; -import fr.iutfbleau.projetIHM2022FI2.Graphic.Controller.ActionListenerNouveauEtu; -import fr.iutfbleau.projetIHM2022FI2.Graphic.Controller.SelecteurEtudiant; import fr.iutfbleau.projetIHM2022FI2.MNP.EtudiantNP; +import fr.iutfbleau.projetIHM2022FI2.ROOT.Controller.ActionListenerNouveauEtu; +import fr.iutfbleau.projetIHM2022FI2.ROOT.Controller.SelecteurEtudiant; -import java.util.Iterator; -import java.util.LinkedHashSet; import java.util.Set; import java.awt.GridLayout; import java.awt.Color; diff --git a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/Graphic/View/PanelEtudiant.java b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/ROOT/View/PanelEtudiant.java similarity index 94% rename from java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/Graphic/View/PanelEtudiant.java rename to java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/ROOT/View/PanelEtudiant.java index ede8a8e..1467083 100644 --- a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/Graphic/View/PanelEtudiant.java +++ b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/ROOT/View/PanelEtudiant.java @@ -1,4 +1,4 @@ -package fr.iutfbleau.projetIHM2022FI2.Graphic.View; +package fr.iutfbleau.projetIHM2022FI2.ROOT.View; import javax.swing.JLabel; import javax.swing.JPanel; diff --git a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/Test/Connexion.java b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/Test/Connexion.java new file mode 100644 index 0000000..b78154f --- /dev/null +++ b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/Test/Connexion.java @@ -0,0 +1,50 @@ +package fr.iutfbleau.projetIHM2022FI2.Test; +import fr.iutfbleau.projetIHM2022FI2.ROOT.Util.User; + +import javax.swing.*; + +import java.awt.*; + +public class Connexion extends JOptionPane{ + + public static User seConnecter(boolean err){ + + JPanel panel = new JPanel(new GridLayout(2,1)); + User[] use=new User[3]; + use[0]=User.ROOT; + use[1]=User.PROF; + use[2]=User.ETUDIANT; + + JComboBox combo=new JComboBox(use); + + JPanel myPanel = new JPanel(); + JTextField password = new JTextField(15); + myPanel.add(new JLabel("Password:")); + myPanel.add(password); + if(err==true){ + myPanel.add(new JLabel("mdp incorect", SwingConstants.RIGHT)); + } + panel.add(combo); + panel.add(myPanel); + + if(JOptionPane.showConfirmDialog(null, panel, "login", JOptionPane.OK_CANCEL_OPTION) != JOptionPane.OK_OPTION){ + return null; + } + if(combo.getSelectedIndex()==0){ + if(password.getText().equals("root")){ + return User.ROOT; + } + } + if(combo.getSelectedIndex()==1){ + if(password.getText().equals("prof")){ + return User.PROF; + } + } + if(combo.getSelectedIndex()==2){ + if(password.getText().equals("etuiutsen")){ + return User.ETUDIANT; + } + } + return Connexion.seConnecter(true); + } +} diff --git a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/Test/TestTexteMNP.java b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/Test/TestTexteMNP.java index 10631af..a486a80 100644 --- a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/Test/TestTexteMNP.java +++ b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/Test/TestTexteMNP.java @@ -1,11 +1,24 @@ package fr.iutfbleau.projetIHM2022FI2.Test; -import fr.iutfbleau.projetIHM2022FI2.Graphic.Model.Model; +import fr.iutfbleau.projetIHM2022FI2.ROOT.Util.User; public class TestTexteMNP{ public static void main(String[] args) { - new Model(); + User chois=Connexion.seConnecter(false); + if(chois!=null){ + if(chois==User.ROOT){ + new fr.iutfbleau.projetIHM2022FI2.ROOT.Model.Model(); + } + if(chois==User.ETUDIANT){ + new fr.iutfbleau.projetIHM2022FI2.ETU.Model.Model(); + } + if(chois==User.PROF){ + + } + } + + /* Iterator itgr = racineDeLaPartition.getSousGroupes().iterator(); Groupe A = itgr.next(); // premier sous-groupe @@ -44,38 +57,9 @@ public class TestTexteMNP{ acf.deleteChangement(itch.next()); for (Changement cgt : acf.getAllChangements()){ System.out.println(cgt.monPrint()); - } + }*/ - - - try{ - Class.forName("org.mariadb.jdbc.Driver"); - try{ - Connection cnx = DriverManager.getConnection( - "jdbc:mariadb://dwarves.iut-fbleau.fr/chaignea", - "chaignea", "Chaigneauphpmyadmin"); - try{ - PreparedStatement pst = cnx.prepareStatement( - "INSERT INTO `CONTIENT` (`idGroupe`, `idEt`) VALUES (?, ?);"); - for(Groupe k: racineDeLaPartition.getSousGroupes()){ - for(Etudiant et: k.getEtudiants()){ - pst.setInt(1, k.getId()); - pst.setInt(2, et.getId()); - pst.executeQuery(); - } - } - pst.close(); - }catch(SQLException ef){ - System.out.println("erreur dans la preparation"); - } - cnx.close(); - }catch(SQLException ef){ - System.out.println("Erreur dans la connexion!"); - } - }catch(ClassNotFoundException ef){ - System.out.println("pilote non disponible"); - }*/ }