diff --git a/java/APIGroupe/Makefile b/java/APIGroupe/Makefile index 48ab5d3..ef2eb6a 100644 --- a/java/APIGroupe/Makefile +++ b/java/APIGroupe/Makefile @@ -97,31 +97,45 @@ ${BUILD}/MNP/AbstractChangementFactoryNP.class : ${SRC}/MNP/AbstractChangementFa ## View ## ${BUILD}/Graphic/View/FenetreGroupe.class : ${SRC}/Graphic/View/FenetreGroupe.java \ ${BUILD}/Graphic/Controller/ObservateurFenetre.class \ - ${BUILD}/Graphic/Controller/ObservateurChangeGroupe.class + ${BUILD}/Graphic/Controller/ObservateurChangeGroupe.class \ + ${BUILD}/Graphic/Controller/ObservateurModifGroupe.class ${JAVAC} ${JAVAC_OPTIONS} ${SRC}/Graphic/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/Controller/ObservateurChangeGroupe.class \ + ${BUILD}/Graphic/View/PanelEtudiant.class ${JAVAC} ${JAVAC_OPTIONS} ${SRC}/Graphic/View/FenetreEtudiant.java +${BUILD}/Graphic/View/PanelEtudiant.class : ${SRC}/Graphic/View/PanelEtudiant.java + ${JAVAC} ${JAVAC_OPTIONS} ${SRC}/Graphic/View/PanelEtudiant.java + ${BUILD}/Graphic/View/Chargement.class : ${SRC}/Graphic/View/Chargement.java ${JAVAC} ${JAVAC_OPTIONS} ${SRC}/Graphic/View/Chargement.java + ${BUILD}/Graphic/Model.class : ${SRC}/Graphic/Model.java \ ${BUILD}/Graphic/View/FenetreGroupe.class \ ${BUILD}/Graphic/View/FenetreEtudiant.class \ ${BUILD}/Graphic/View/Chargement.class ${JAVAC} ${JAVAC_OPTIONS} ${SRC}/Graphic/Model.java +${BUILD}/Graphic/View/FenetreSelectionEtu.class : ${SRC}/Graphic/View/FenetreSelectionEtu.java \ + ${BUILD}/Graphic/Controller/SelecteurEtudiant.class + ${JAVAC} ${JAVAC_OPTIONS} ${SRC}/Graphic/View/FenetreSelectionEtu.java ## Controller ## ${BUILD}/Graphic/Controller/ObservateurFenetre.class : ${SRC}/Graphic/Controller/ObservateurFenetre.java ${JAVAC} ${JAVAC_OPTIONS} ${SRC}/Graphic/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}/Graphic/Controller/ObservateurChangeGroupe.class : ${SRC}/Graphic/Controller/ObservateurChangeGroupe.java ${JAVAC} ${JAVAC_OPTIONS} ${SRC}/Graphic/Controller/ObservateurChangeGroupe.java - +${BUILD}/Graphic/Controller/SelecteurEtudiant.class : ${SRC}/Graphic/Controller/SelecteurEtudiant.java + ${JAVAC} ${JAVAC_OPTIONS} ${SRC}/Graphic/Controller/SelecteurEtudiant.java ##.... ## TEST ## diff --git a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/API/Groupe.java b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/API/Groupe.java index 6793be6..5460c1f 100644 --- a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/API/Groupe.java +++ b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/API/Groupe.java @@ -90,6 +90,13 @@ public interface Groupe extends MonPrint { */ public Set getEtudiants(); + /** + * Change le nom du groupe + * @param s le nouveau nom + */ + public void setName(String s); + + /** * @see MonPrint * NB. On n'utilise le mécanisme des méthodes par défaut pour donner du code dans une interface. C'est un petit peu laid et à contre-emploi mais pratique ici. diff --git a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/Graphic/Controller/ObservateurModifGroupe.java b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/Graphic/Controller/ObservateurModifGroupe.java new file mode 100644 index 0000000..da53373 --- /dev/null +++ b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/Graphic/Controller/ObservateurModifGroupe.java @@ -0,0 +1,108 @@ +package fr.iutfbleau.projetIHM2022FI2.Graphic.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; +import fr.iutfbleau.projetIHM2022FI2.Graphic.View.FenetreSelectionEtu; +import javax.swing.*; +import java.util.Set; +public class ObservateurModifGroupe implements ActionListener{ + private Model m; + private Groupe groupe; + public ObservateurModifGroupe(Model m, Groupe g){ + this.m=m; + this.groupe=g; + } + + @Override + public void actionPerformed(ActionEvent e) { + if(e.getActionCommand()=="suprimer ce groupe"){ + Groupe pointpoint=this.groupe.getPointPoint(); + this.m.delete(this.groupe); + this.m.showGroupe(pointpoint); + } + if(e.getActionCommand()=="créer un sous groupe"){ + String g[]=new String[2]; + g[0]="Partition"; + g[1]="Free"; + int rep=JOptionPane.showOptionDialog(m.getFenetre(), "Type du nouveau Groupe","Type", JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE, null, g, g[0]); + if(rep==JOptionPane.YES_OPTION){ + try{ + + JPanel myPanel = new JPanel(); + JTextField xField = new JTextField(5); + JTextField yField = new JTextField(20); + myPanel.add(new JLabel("Nombre:")); + myPanel.add(xField); + myPanel.add(Box.createHorizontalStrut(15)); // a spacer + myPanel.add(new JLabel("Nom:")); + myPanel.add(yField); + int result = JOptionPane.showConfirmDialog(m.getFenetre(), myPanel, + "Entrer le nombre et le nom des Partitions", JOptionPane.OK_CANCEL_OPTION); + if (result == JOptionPane.OK_OPTION) { + int nb=Integer.parseInt(xField.getText()); + if(nb>this.groupe.getEtudiants().size()){ + JOptionPane.showMessageDialog(m.getFenetre(), "nombre de partition trop grand", "erreur", JOptionPane.ERROR_MESSAGE); + return; + } + m.partition(this.groupe, nb, yField.getText()); + m.showGroupe(this.groupe); + } + }catch(NumberFormatException er){ + JOptionPane.showMessageDialog(m.getFenetre(), "erreur dans le nombre de partition", "erreur", JOptionPane.ERROR_MESSAGE); + } + }else{ + try{ + JPanel myPanel = new JPanel(); + JTextField xField = new JTextField(5); + JTextField zField = new JTextField(5); + JTextField yField = new JTextField(20); + myPanel.add(new JLabel("Nom:")); + myPanel.add(yField); + myPanel.add(Box.createHorizontalStrut(15)); // a spacer + myPanel.add(new JLabel("Min:")); + myPanel.add(xField); + myPanel.add(new JLabel("Max:")); + myPanel.add(zField); + int result = JOptionPane.showConfirmDialog(m.getFenetre(), myPanel, + "Entrer le nombre et le nom des Partitions", JOptionPane.OK_CANCEL_OPTION); + if (result == JOptionPane.OK_OPTION) { + int min=Integer.parseInt(xField.getText()); + int max=Integer.parseInt(zField.getText()); + if(min>this.groupe.getEtudiants().size() || max>this.groupe.getEtudiants().size()){ + JOptionPane.showMessageDialog(m.getFenetre(), "nombre de partition trop grand", "erreur", JOptionPane.ERROR_MESSAGE); + return; + } + m.free(groupe, yField.getText(), min, max); + m.showGroupe(this.groupe); + } + }catch(NumberFormatException er){ + JOptionPane.showMessageDialog(m.getFenetre(), "erreur dans le nombre de partition", "erreur", JOptionPane.ERROR_MESSAGE); + } + } + } + if(e.getActionCommand()=="renomer"){ + String nouveau=JOptionPane.showInputDialog(m.getFenetre(), "Rentrer le nouveau Nom"); + this.groupe.setName(nouveau); + m.showGroupe(this.groupe); + } + if(e.getActionCommand()=="ajouter"){ + Set ajout=new LinkedHashSet<>(); + JPanel myPanel=new FenetreSelectionEtu(this.groupe.getPointPoint(), ajout); + if(JOptionPane.showConfirmDialog(m.getFenetre(), new JScrollPane(myPanel), "Selectionner les étudiant a ajouter", JOptionPane.OK_CANCEL_OPTION) ==JOptionPane.YES_OPTION){ + if(this.groupe.getMax() file=new LinkedList<>(); + this.deleteRecursif(file, g); + for(Groupe sup:file){ + agf.deleteGroupe(sup); + } + } + } + } + + private void deleteRecursif(LinkedList file, Groupe bedelete){ + for(Groupe g: bedelete.getSousGroupes()){ + this.deleteRecursif(file, g); + } + file.add(bedelete); + } + + public void partition(Groupe g, int n, String name){ + AbstractGroupeFactory agf=new AbstractGroupeFactoryNP(g); + agf.createPartition(g, name, n); + } + + public void free(Groupe g, String name, int min, int max){ + AbstractGroupeFactory agf=new AbstractGroupeFactoryNP(g); + agf.createGroupe(g, name, min, max); + } } diff --git a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/Graphic/View/Chargement.java b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/Graphic/View/Chargement.java index f764ef8..5109487 100644 --- a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/Graphic/View/Chargement.java +++ b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/Graphic/View/Chargement.java @@ -37,6 +37,7 @@ public class Chargement extends JComponent{ 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); - secondPinceau.fillRect(this.getWidth()/10, this.getHeight()/2, this.getWidth()/10*8/100*pourcentage, 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/Graphic/View/FenetreEtudiant.java index 52aeb4f..484c07a 100644 --- a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/Graphic/View/FenetreEtudiant.java +++ b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/Graphic/View/FenetreEtudiant.java @@ -4,7 +4,7 @@ package fr.iutfbleau.projetIHM2022FI2.Graphic.View; import javax.swing.JLabel; import javax.swing.JPanel; -import java.awt.GridLayout; +import java.awt.*; import java.util.Set; import fr.iutfbleau.projetIHM2022FI2.API.Etudiant; @@ -16,10 +16,11 @@ public class FenetreEtudiant extends JPanel{ public FenetreEtudiant(Groupe g){ super(); if(g!=null){ - this.setLayout(new GridLayout(57, 1)); this.etu=g.getEtudiants(); + this.setLayout(new GridLayout(this.etu.size(), 1, 10, 0)); for(Etudiant e: this.etu){ - this.add(new JLabel(e.monPrint())); + PanelEtudiant p=new PanelEtudiant(e); + this.add(p); } }else{ this.add(new JLabel("Il n'y a pas d'étudiant")); diff --git a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/Graphic/View/FenetreGroupe.java b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/Graphic/View/FenetreGroupe.java index fab09c2..199b3a9 100644 --- a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/Graphic/View/FenetreGroupe.java +++ b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/Graphic/View/FenetreGroupe.java @@ -6,8 +6,10 @@ import javax.swing.JPanel; import java.awt.GridLayout; import fr.iutfbleau.projetIHM2022FI2.API.Groupe; +import fr.iutfbleau.projetIHM2022FI2.API.TypeGroupe; import fr.iutfbleau.projetIHM2022FI2.Graphic.Model; import fr.iutfbleau.projetIHM2022FI2.Graphic.Controller.ObservateurChangeGroupe; +import fr.iutfbleau.projetIHM2022FI2.Graphic.Controller.ObservateurModifGroupe; public class FenetreGroupe extends JPanel{ @@ -16,7 +18,7 @@ public class FenetreGroupe extends JPanel{ super(); this.g=g; if(g!=null){ - this.setLayout(new GridLayout(15, 1)); + this.setLayout(new GridLayout(11+g.getSousGroupes().size(), 1)); JButton bout=new JButton("point point"); bout.addActionListener(new ObservateurChangeGroupe(m, this.g.getPointPoint())); this.add(bout); @@ -24,12 +26,27 @@ public class FenetreGroupe extends JPanel{ this.add(new JLabel("id= "+String.valueOf(g.getId()))); this.add(new JLabel("min= "+String.valueOf(g.getMin()))); this.add(new JLabel("max= "+String.valueOf(g.getMax()))); + this.add(new JLabel(g.getType().name())); this.add(new JLabel("Sous groupe")); for(Groupe gr: g.getSousGroupes()){ JButton b=new JButton(gr.getName()); b.addActionListener(new ObservateurChangeGroupe(m, gr)); this.add(b); } + JButton supprimer=new JButton("suprimer ce groupe"); + supprimer.addActionListener(new ObservateurModifGroupe(m, g)); + this.add(supprimer); + if(g.getType()!=TypeGroupe.PARTITION){ + JButton creer=new JButton("créer un sous groupe"); + creer.addActionListener(new ObservateurModifGroupe(m, g)); + this.add(creer); + } + JButton renomer=new JButton("renomer"); + renomer.addActionListener(new ObservateurModifGroupe(m, g)); + this.add(renomer); + JButton ajouter=new JButton("ajouter"); + ajouter.addActionListener(new ObservateurModifGroupe(m, g)); + this.add(ajouter); }else{ this.add(new JLabel("Il n'y a pas encore de Groupe")); } diff --git a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/Graphic/View/FenetreSelectionEtu.java b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/Graphic/View/FenetreSelectionEtu.java new file mode 100644 index 0000000..6fd8e96 --- /dev/null +++ b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/Graphic/View/FenetreSelectionEtu.java @@ -0,0 +1,48 @@ +package fr.iutfbleau.projetIHM2022FI2.Graphic.View; + +import fr.iutfbleau.projetIHM2022FI2.API.Etudiant; +import fr.iutfbleau.projetIHM2022FI2.API.Groupe; +import fr.iutfbleau.projetIHM2022FI2.Graphic.Controller.SelecteurEtudiant; + +import java.util.Set; +import java.awt.GridLayout; + +import javax.swing.JButton; +import javax.swing.JPanel; + +public class FenetreSelectionEtu extends JPanel{ + private Set liste; + private Groupe racine; + public FenetreSelectionEtu(Groupe g, Set liste){ + super(new GridLayout(g.getEtudiants().size()/3, 3)); + this.racine=g; + this.liste=liste; + int index=0; + for(Etudiant e:g.getEtudiants()){ + JButton lab=new JButton(e.getNom()+" "+e.getPrenom()+" "+e.getId()); + lab.addMouseListener(new SelecteurEtudiant(index, this)); + this.add(lab); + index++; + } + } + public void addList(int index){ + int i=0; + for(Etudiant e:racine.getEtudiants()){ + if(i==index){ + this.liste.add(e); + return; + } + i++; + } + } + public void removeList(int index){ + int i=0; + for(Etudiant e:racine.getEtudiants()){ + if(i==index){ + this.liste.remove(e); + return; + } + i++; + } + } +} diff --git a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/Graphic/View/PanelEtudiant.java b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/Graphic/View/PanelEtudiant.java new file mode 100644 index 0000000..75b9247 --- /dev/null +++ b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/Graphic/View/PanelEtudiant.java @@ -0,0 +1,41 @@ +package fr.iutfbleau.projetIHM2022FI2.Graphic.View; + +import javax.swing.JLabel; +import javax.swing.JPanel; + +import fr.iutfbleau.projetIHM2022FI2.API.Etudiant; + +import javax.swing.JButton; +import java.awt.*; + +public class PanelEtudiant extends JPanel{ + private JLabel nom; + private Etudiant e; + private JButton renomer; + private JButton supprimer; + private JButton deplacer; + public PanelEtudiant(Etudiant e){ + super(new GridBagLayout()); + this.nom=new JLabel(e.getNom()+" "+e.getPrenom()+" "+e.getId(), JLabel.LEFT); + + this.renomer=new JButton("r"); + this.supprimer=new JButton("-"); + this.deplacer=new JButton("c"); + GridBagConstraints cbg=new GridBagConstraints(); + + cbg.gridy=0; + cbg.anchor=GridBagConstraints.EAST; + cbg.fill=GridBagConstraints.BOTH; + + this.add(this.nom, cbg); + + cbg.gridwidth=0; + cbg.gridheight=0; + cbg.anchor=GridBagConstraints.EAST; + cbg.fill=GridBagConstraints.NONE; + + this.add(this.renomer, cbg); + this.add(this.supprimer, cbg); + this.add(this.deplacer, cbg); + } +} diff --git a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MNP/AbstractGroupeFactoryNP.java b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MNP/AbstractGroupeFactoryNP.java index a71dc9a..dc0e57f 100644 --- a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MNP/AbstractGroupeFactoryNP.java +++ b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MNP/AbstractGroupeFactoryNP.java @@ -32,8 +32,8 @@ public class AbstractGroupeFactoryNP implements AbstractGroupeFactory { * @param g le groupe (methode récursive) */ private void addSousGroupe(Groupe g){ + this.brain.put(g.getId(), g); for(Groupe s:g.getSousGroupes()){ - this.brain.put(g.getId(), g); this.addSousGroupe(s); } } @@ -84,7 +84,7 @@ public class AbstractGroupeFactoryNP implements AbstractGroupeFactory { if (this.getPromotion().equals(g)){ throw new IllegalArgumentException("Impossible de détruire le groupe de toute la promotion"); } - if (g.getSize()>0){ + if (g.getSousGroupes().size()>0){ throw new IllegalStateException("Impossible de détruire un groupe contenant un groupe"); } g.getPointPoint().removeSousGroupe(g); diff --git a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MNP/EtudiantNP.java b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MNP/EtudiantNP.java index 4d9df60..1a8b24a 100644 --- a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MNP/EtudiantNP.java +++ b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MNP/EtudiantNP.java @@ -22,6 +22,19 @@ public class EtudiantNP implements Etudiant{ this.nom=nom; this.prenom=prenom; } + + /** + * Constructeur. + */ + public EtudiantNP(String nom, String prenom, int id){ + Objects.requireNonNull(nom,"On ne peut pas créer un étudiant avec un nom null"); + Objects.requireNonNull(prenom,"On ne peut pas créer un étudiant avec un nom null"); + // auto incrément de l'id + this.id=id; + this.nextId++; + this.nom=nom; + this.prenom=prenom; + } /** * permet de récupérer l'identifiant de l'étudiant. diff --git a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MNP/GroupeNP.java b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MNP/GroupeNP.java index aca294a..7aae4a7 100644 --- a/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MNP/GroupeNP.java +++ b/java/APIGroupe/src/fr/iutfbleau/projetIHM2022FI2/MNP/GroupeNP.java @@ -207,6 +207,14 @@ public class GroupeNP implements Groupe { public Set getEtudiants(){ return this.membresDuGroupe; } - + + /** + * Change le nom du groupe + * @param s le nouveau nom + */ + @Override + public void setName(String s){ + this.name=s; + } }