simplification repartition class et constructeur et modif API

This commit is contained in:
martins 2022-12-01 19:58:40 +01:00
parent b926dc4d32
commit 35696d3b14
16 changed files with 449 additions and 1217 deletions

View File

@ -102,12 +102,6 @@ ${BUILD}/MNP/AbstractChangementFactoryNP.class : ${SRC}/MNP/AbstractChangementFa
## ROOT ## ## ROOT ##
## Util ###
${BUILD}/ROOT/Util/BD.class : ${SRC}/ROOT/Util/BD.java
${JAVAC} ${JAVAC_OPTIONS} ${SRC}/ROOT/Util/BD.java
## View ## ## View ##
@ -128,8 +122,6 @@ ${BUILD}/ROOT/View/PanelEtudiant.class : ${SRC}/ROOT/View/PanelEtudiant.java \
${BUILD}/ROOT/Controller/ActionListenerSuprEtu.class ${BUILD}/ROOT/Controller/ActionListenerSuprEtu.class
${JAVAC} ${JAVAC_OPTIONS} ${SRC}/ROOT/View/PanelEtudiant.java ${JAVAC} ${JAVAC_OPTIONS} ${SRC}/ROOT/View/PanelEtudiant.java
${BUILD}/ROOT/View/Chargement.class : ${SRC}/ROOT/View/Chargement.java
${JAVAC} ${JAVAC_OPTIONS} ${SRC}/ROOT/View/Chargement.java
${BUILD}/ROOT/View/FenetreSelectionEtu.class : ${SRC}/ROOT/View/FenetreSelectionEtu.java \ ${BUILD}/ROOT/View/FenetreSelectionEtu.class : ${SRC}/ROOT/View/FenetreSelectionEtu.java \
${BUILD}/ROOT/Controller/SelecteurEtudiant.class \ ${BUILD}/ROOT/Controller/SelecteurEtudiant.class \
@ -171,8 +163,7 @@ ${BUILD}/ROOT/Controller/ActionListenerNouveauEtu.class : ${SRC}/ROOT/Controller
${BUILD}/ROOT/Model/Model.class : ${SRC}/ROOT/Model/Model.java \ ${BUILD}/ROOT/Model/Model.class : ${SRC}/ROOT/Model/Model.java \
${BUILD}/ROOT/View/FenetreGroupe.class \ ${BUILD}/ROOT/View/FenetreGroupe.class \
${BUILD}/ROOT/View/FenetreEtudiant.class \ ${BUILD}/ROOT/View/FenetreEtudiant.class \
${BUILD}/ROOT/View/Chargement.class \ ${BUILD}/Permanent/View/Chargement.class
${BUILD}/ROOT/Util/BD.class
${JAVAC} ${JAVAC_OPTIONS} ${SRC}/ROOT/Model/Model.java ${JAVAC} ${JAVAC_OPTIONS} ${SRC}/ROOT/Model/Model.java
@ -182,11 +173,6 @@ ${BUILD}/ROOT/Model/Model.class : ${SRC}/ROOT/Model/Model.java \
## ETU ## ## ETU ##
## Util ###
${BUILD}/ETU/Util/BD.class : ${SRC}/ETU/Util/BD.java
${JAVAC} ${JAVAC_OPTIONS} ${SRC}/ETU/Util/BD.java
## View ## ## View ##
@ -205,8 +191,6 @@ ${BUILD}/ETU/View/FenetreEtudiant.class :${SRC}/ETU/View/FenetreEtudiant.java \
${BUILD}/ETU/View/PanelEtudiant.class : ${SRC}/ETU/View/PanelEtudiant.java ${BUILD}/ETU/View/PanelEtudiant.class : ${SRC}/ETU/View/PanelEtudiant.java
${JAVAC} ${JAVAC_OPTIONS} ${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 ## ## Controller ##
@ -231,17 +215,16 @@ ${BUILD}/ETU/Controller/ObservateurChangeGroupe.class : ${SRC}/ETU/Controller/Ob
${BUILD}/ETU/Model/Model.class : ${SRC}/ETU/Model/Model.java \ ${BUILD}/ETU/Model/Model.class : ${SRC}/ETU/Model/Model.java \
${BUILD}/ETU/View/FenetreGroupe.class \ ${BUILD}/ETU/View/FenetreGroupe.class \
${BUILD}/ETU/View/FenetreEtudiant.class \ ${BUILD}/ETU/View/FenetreEtudiant.class \
${BUILD}/ETU/View/Chargement.class \ ${BUILD}/Permanent/View/Chargement.class
${BUILD}/ETU/Util/BD.class
${JAVAC} ${JAVAC_OPTIONS} ${SRC}/ETU/Model/Model.java ${JAVAC} ${JAVAC_OPTIONS} ${SRC}/ETU/Model/Model.java
## TEST ## ## Permanent ##
${BUILD}/Test/Connexion.class : ${SRC}/Test/Connexion.java ${BUILD}/Permanent/Connexion.class : ${SRC}/Permanent/Connexion.java
${JAVAC} ${JAVAC_OPTIONS} ${SRC}/Test/Connexion.java ${JAVAC} ${JAVAC_OPTIONS} ${SRC}/Permanent/View/Connexion.java
${BUILD}/Test/TestTexteMNP.class : ${SRC}/Test/TestTexteMNP.java \ ${BUILD}/Permanent/TestTexteMNP.class : ${SRC}/Permanent/TestTexteMNP.java \
${BUILD}/MNP/EtudiantNP.class \ ${BUILD}/MNP/EtudiantNP.class \
${BUILD}/MNP/GroupeNP.class \ ${BUILD}/MNP/GroupeNP.class \
${BUILD}/MNP/ChangementNP.class \ ${BUILD}/MNP/ChangementNP.class \
@ -249,14 +232,23 @@ ${BUILD}/ETU/Model/Model.class : ${SRC}/ETU/Model/Model.java \
${BUILD}/MNP/AbstractChangementFactoryNP.class \ ${BUILD}/MNP/AbstractChangementFactoryNP.class \
${BUILD}/ROOT/Model/Model.class \ ${BUILD}/ROOT/Model/Model.class \
${BUILD}/ETU/Model/Model.class \ ${BUILD}/ETU/Model/Model.class \
${BUILD}/Test/Connexion.class \ ${BUILD}/Permanent/View/Connexion.class \
${BUILD}/Test/User.class ${BUILD}/Permanent/Util/User.class
${JAVAC} ${JAVAC_OPTIONS} ${SRC}/Test/TestTexteMNP.java ${JAVAC} ${JAVAC_OPTIONS} ${SRC}/Permanent/TestTexteMNP.java
## View ##
${BUILD}/Test/User.class : ${SRC}/Test/User.java ${BUILD}/Permanent/View/Chargement.class : ${SRC}/Permanent/View/Chargement.java
${JAVAC} ${JAVAC_OPTIONS} ${SRC}/Test/User.java ${JAVAC} ${JAVAC_OPTIONS} ${SRC}/Permanent//View/Chargement.java
${BUILD}/Permanent/View/Connexion.class : ${SRC}/Permanent/View/Connexion.java
${JAVAC} ${JAVAC_OPTIONS} ${SRC}/Permanent/View/Connexion.java
## Util  ##
${BUILD}/Permanent/Util/User.class : ${SRC}/Permanent/Util/User.java
${JAVAC} ${JAVAC_OPTIONS} ${SRC}/Permanent/Util/User.java
# ## JARS ## # ## JARS ##
${JAR_MNP} : ${BUILD}/Test/TestTexteMNP.class ${JAR_MNP} : ${BUILD}/Permanent/TestTexteMNP.class
${JAR} cfme ${JAR_MNP} Manifest.txt fr/iutfbleau/projetIHM2022FI2/Test/TestTexteMNP res/ -C build fr ${JAR} cfme ${JAR_MNP} Manifest.txt fr/iutfbleau/projetIHM2022FI2/Permanent/TestTexteMNP res/ -C build fr

View File

@ -120,4 +120,10 @@ public interface AbstractGroupeFactory {
*/ */
public boolean changeNameGroupe(Groupe g, String name); public boolean changeNameGroupe(Groupe g, String name);
/**
* 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);
} }

View File

@ -1,14 +1,8 @@
package fr.iutfbleau.projetIHM2022FI2.ETU.Model; package fr.iutfbleau.projetIHM2022FI2.ETU.Model;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.HashSet;
import java.util.Set;
import java.sql.Connection;
import java.sql.ResultSet;
import javax.swing.*; import javax.swing.*;
import java.awt.*; import java.awt.*;
import java.util.Set;
import java.util.HashSet;
import fr.iutfbleau.projetIHM2022FI2.API.AbstractChangementFactory; import fr.iutfbleau.projetIHM2022FI2.API.AbstractChangementFactory;
import fr.iutfbleau.projetIHM2022FI2.API.AbstractGroupeFactory; import fr.iutfbleau.projetIHM2022FI2.API.AbstractGroupeFactory;
import fr.iutfbleau.projetIHM2022FI2.API.Etudiant; import fr.iutfbleau.projetIHM2022FI2.API.Etudiant;
@ -16,10 +10,8 @@ import fr.iutfbleau.projetIHM2022FI2.API.Groupe;
import fr.iutfbleau.projetIHM2022FI2.API.TypeGroupe; import fr.iutfbleau.projetIHM2022FI2.API.TypeGroupe;
import fr.iutfbleau.projetIHM2022FI2.MNP.AbstractChangementFactoryNP; import fr.iutfbleau.projetIHM2022FI2.MNP.AbstractChangementFactoryNP;
import fr.iutfbleau.projetIHM2022FI2.MNP.AbstractGroupeFactoryNP; import fr.iutfbleau.projetIHM2022FI2.MNP.AbstractGroupeFactoryNP;
import fr.iutfbleau.projetIHM2022FI2.MNP.GroupeNP; import fr.iutfbleau.projetIHM2022FI2.Permanent.View.Chargement;
import fr.iutfbleau.projetIHM2022FI2.ETU.Controller.ObservateurFenetre; 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.FenetreEtudiant;
import fr.iutfbleau.projetIHM2022FI2.ETU.View.FenetreGroupe; import fr.iutfbleau.projetIHM2022FI2.ETU.View.FenetreGroupe;
@ -36,7 +28,6 @@ public class Model{
private JFrame fenetre; private JFrame fenetre;
private Etudiant Selected; private Etudiant Selected;
private BD bd;
public Model(){ public Model(){
this.fenetre=new JFrame(); this.fenetre=new JFrame();
this.fenetre.setSize(1200, 720); this.fenetre.setSize(1200, 720);
@ -45,9 +36,11 @@ public class Model{
this.fenetre.setLayout(new GridLayout(1,2)); this.fenetre.setLayout(new GridLayout(1,2));
this.fenetre.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE); this.fenetre.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
this.fenetre.setMinimumSize(this.fenetre.getSize()); this.fenetre.setMinimumSize(this.fenetre.getSize());
this.bd=new BD(this.fenetre);
Chargement ch=new Chargement(this.fenetre); Chargement ch=new Chargement(this.fenetre);
this.promo=this.getPromo(ch); this.promo=new AbstractGroupeFactoryNP(this.fenetre);
if(this.promo.getPromotion()==null){
this.promo=null;
}
ch.dispose(); ch.dispose();
this.fenetre.setVisible(true); this.fenetre.setVisible(true);
this.initEtu(null); this.initEtu(null);
@ -68,13 +61,14 @@ public class Model{
} }
} }
/** /**
* Fonction pour refresh/changer de groupe d'affichage * Fonction pour refresh/changer de groupe d'affichage
* @param g le groupe a afficher * @param g le groupe a afficher
*/ */
public void showGroupe(Groupe g){ public void showGroupe(Groupe g){
if(g!=null) if(g!=null)
g=this.bd.refreshALL(g); g=this.promo .refreshALL(g);
this.panGroupe.removeAll(); this.panGroupe.removeAll();
this.fenGr=new FenetreGroupe(g, this, this.promo.getGroupesOfEtudiant(this.Selected)); this.fenGr=new FenetreGroupe(g, this, this.promo.getGroupesOfEtudiant(this.Selected));
this.fenEtu=new FenetreEtudiant(g, this.Selected, this); this.fenEtu=new FenetreEtudiant(g, this.Selected, this);
@ -94,58 +88,9 @@ public void showGroupe(Groupe g){
public JFrame getFenetre() { public JFrame getFenetre() {
return fenetre; 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<Etudiant> getEtudiant(){ public Set<Etudiant> getEtudiant(){
return this.bd.getEtudiant(); return this.promo.getPromotion().getEtudiants();
}
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){ private void initEtu(String err){
@ -179,208 +124,13 @@ public void showGroupe(Groupe g){
this.initEtu("Etudiant introuvable"); 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()<g.getEtudiants().size()-1)
return false;
for(Groupe sous: g.getSousGroupes()){
if(this.deleteEtutoChildren(e, sous)==false){
return false;
}
}
return true;
}
// ***********************
// FONCTION POUR Ajouter UN ETUDIANT
// ***********************
/**
* Fonction pour ajouter un étudiant au groupe
* @param g
* @param e
* @return boolean pour savoir si il a pus être ajouter
*/
public boolean addEtudiant(Groupe g, Etudiant e){
//Si on a la place
if(g!=g.getPointPoint())
if(this.addEtuToParent(g.getPointPoint(), e)==false)
return false;
//On induqe a la BD de sauvegarder cette modification
this.promo.addToGroupe(g, e);
return true;
}
/**
* Fonction recursive pour ajouter l'etudiant a ses parents si il ne l'ont pas
* @param g groupe
* @param e etudiant
* @return true si possible
*/
private boolean addEtuToParent(Groupe g, Etudiant e){
if(g.getMax()==g.getSize())
return false;
for(Etudiant et:g.getEtudiants()){
if(et.getId()==e.getId()){
return true;
}
}
if(g.getPointPoint()!=g){
if(this.addEtuToParent(g.getPointPoint(), e)==false){
return false;
}
}
this.promo.addToGroupe(g, e);
return true;
}
// ***********************
// 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.changement=null;
this.showGroupe(null);
}else{
return;
}
//JOptionPane.showMessageDialog(this.fenetre, "impossible de supprimer la promotion", "alerte", JOptionPane.ERROR_MESSAGE);
}else{
//on suprime le groupe
this.promo.deleteGroupe(g);
this.showGroupe(g.getPointPoint());
}
}
// ***********************
// FONCTION POUR RENOMER UN GROUPE
// ***********************
/**
* Fonction pour renomer un groupe
* @param name
* @param g
*/
public void rename(String name, Groupe g){
this.promo.changeNameGroupe(g, name);
this.showGroupe(g);
}
// **********************
// FONCTION POUR CREER UN GROUPE
// **********************
/**
* 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);
this.fenetre.setVisible(false);
this.promo.createPartition(g, name, n);
ch.dispose();
this.fenetre.setVisible(true);
this.showGroupe(g);
}
/**
* Fonction permettant de créer un sous-groupe d'un groupe
* @param g le groupe parent
* @param name le nom du sous-groupe
* @param min le nombre min d'etudiant
* @param max le nombre max d'etudiant
* @param ajout la liste des étudiants a ajouter au groupe
*/
public void free(Groupe g, String name, int min, int max, Set<Etudiant> 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<Etudiant> ajout){
Chargement ch=new Chargement(this.fenetre);
this.promo=new AbstractGroupeFactoryNP(name, min, max, this.fenetre);
this.changement=new AbstractChangementFactoryNP(promo, 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());
}
// ************************** // **************************
// FONCTION POUR LES CHANGEMENTS // FONCTION POUR LES CHANGEMENTS
// ****************************** // ******************************
public void changeGroupe(Etudiant e, Groupe b){ public void changeGroupe(Etudiant e, Groupe b){
if(b==null) if(b==null)
return; return;
b=this.bd.refreshGroupe(b); b=this.promo.refreshALL(b);
if(b.getEtudiants()!=null && b.getMax()>b.getEtudiants().size()+1){ if(b.getEtudiants()!=null && b.getMax()>b.getEtudiants().size()+1){
this.changement.createChangement(this.fenGr.getG(), e, b); this.changement.createChangement(this.fenGr.getG(), e, b);
}else{ }else{
@ -390,7 +140,7 @@ public void showGroupe(Groupe g){
} }
public Set<Groupe> getGroupePartition(){ public Set<Groupe> getGroupePartition(){
this.bd.refreshGroupe(this.fenGr.getG().getPointPoint()); this.promo.refreshALL(this.fenGr.getG().getPointPoint());
Set<Groupe> retour=new HashSet<>(); Set<Groupe> retour=new HashSet<>();
if(this.fenGr.getG().getPointPoint().getType()!=TypeGroupe.PARTITION) if(this.fenGr.getG().getPointPoint().getType()!=TypeGroupe.PARTITION)
throw new IllegalStateException("impossible de changer un étudiant d'un groupe ne provenant pas d'une partition"); throw new IllegalStateException("impossible de changer un étudiant d'un groupe ne provenant pas d'une partition");

View File

@ -1,228 +0,0 @@
package fr.iutfbleau.projetIHM2022FI2.ETU.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.ETU.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<Groupe> it=new LinkedHashSet<>();
for(Groupe gr:g.getSousGroupes()){
it.add(gr);
}
for(Groupe gr:it){
g.removeSousGroupe(gr);
}
Set<Etudiant> 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<Etudiant> 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<Etudiant> getEtudiant(){
Connection cnx=this.cnx();
Set<Etudiant> 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;
}
}

View File

@ -27,7 +27,8 @@ public class AbstractChangementFactoryNP implements AbstractChangementFactory {
Objects.requireNonNull(agf,"On ne peut pas créer une usine à changement dont l'usine à groupe parternaire est null"); Objects.requireNonNull(agf,"On ne peut pas créer une usine à changement dont l'usine à groupe parternaire est null");
this.agf=agf; this.agf=agf;
this.fenetre=fenetre; this.fenetre=fenetre;
this.brain=new HashMap<Integer,Changement>(); this.brain=new HashMap<Integer,Changement>();
this.getChange();
} }
public AbstractChangementFactoryNP(AbstractGroupeFactory agf, JFrame fenetre, Set<Changement> liste){ public AbstractChangementFactoryNP(AbstractGroupeFactory agf, JFrame fenetre, Set<Changement> liste){
@ -37,7 +38,8 @@ public class AbstractChangementFactoryNP implements AbstractChangementFactory {
this.brain=new HashMap<Integer,Changement>(); this.brain=new HashMap<Integer,Changement>();
for(Changement ch:liste){ for(Changement ch:liste){
this.brain.put(ch.getId(), ch); this.brain.put(ch.getId(), ch);
} }
this.getChange();
} }
@ -207,4 +209,40 @@ public class AbstractChangementFactoryNP implements AbstractChangementFactory {
this.close(clos); this.close(clos);
} }
} }
private void getChange(){
Connection cnx=this.cnx();
try{
PreparedStatement pst=cnx.prepareStatement("SELECT * FROM `Changement` NATURAL JOIN Etudiant; ");
ResultSet rs=pst.executeQuery();
while(rs.next()){
Groupe[] ab=new Groupe[2];
this.getGroupe(rs.getInt(2), rs.getInt(3), ab, this.agf.getPromotion());
Etudiant e=new EtudiantNP(rs.getString(5), rs.getString(6), rs.getInt(4));
this.brain.put(rs.getInt(1), new ChangementNP(ab[0], e, ab[1], rs.getInt(1)));
}
pst.close();
}catch(SQLException e){
if(this.erreurCO())
this.getChange();
return;
}
this.close(cnx);
}
private void getGroupe(int idA, int idB, Groupe[] retour, Groupe tofind){
if(retour[0]!=null && retour[1]!=null)
return;
if(tofind.getId()==idA){
retour[0]=tofind;
}
if(tofind.getId()==idB){
retour[1]=tofind;
}
for(Groupe sous:tofind.getSousGroupes()){
this.getGroupe(idA, idB, retour, sous);
}
}
} }

View File

@ -29,11 +29,10 @@ public class AbstractGroupeFactoryNP implements AbstractGroupeFactory {
/** /**
* Le constructeur fabrique le groupe promotion déja plein (utilisé en Modèle persistant de donné). * Le constructeur fabrique le groupe promotion déja plein (utilisé en Modèle persistant de donné).
*/ */
public AbstractGroupeFactoryNP(Groupe promo, JFrame fenetre){ public AbstractGroupeFactoryNP(JFrame fenetre){
this.promo=promo;
this.fenetre=fenetre; this.fenetre=fenetre;
this.brain=new HashMap<Integer,Groupe>(); this.brain=new HashMap<Integer,Groupe>();
this.addSousGroupe(this.promo); this.init();
} }
/** /**
@ -49,18 +48,6 @@ public class AbstractGroupeFactoryNP implements AbstractGroupeFactory {
this.saveGroupe(promo); this.saveGroupe(promo);
} }
/**
* permet d'ajouter les sous groupe lors de l'initialisation de la promo
* avec un groupe déja créer
*
* @param g le groupe (methode récursive)
*/
private void addSousGroupe(Groupe g){
this.brain.put(g.getId(), g);
for(Groupe s:g.getSousGroupes()){
this.addSousGroupe(s);
}
}
/** /**
* Test plutôt optimiste. Si la clé est identique alors on fait comme si c'était le bon groupe. * Test plutôt optimiste. Si la clé est identique alors on fait comme si c'était le bon groupe.
@ -118,10 +105,9 @@ public class AbstractGroupeFactoryNP implements AbstractGroupeFactory {
*/ */
public void deleteGroupe(Groupe g){ public void deleteGroupe(Groupe g){
Objects.requireNonNull(g,"On ne peut pas enlever un groupe null car null n'est pas un groupe autorisé"); Objects.requireNonNull(g,"On ne peut pas enlever un groupe null car null n'est pas un groupe autorisé");
//if (!this.knows(g)){ if (!this.knows(g)){
//throw new IllegalArgumentException("Impossible d'enlever un groupe inconnu"); throw new IllegalArgumentException("Impossible d'enlever un groupe inconnu");
//possible maintenant }
//}
g.getPointPoint().removeSousGroupe(g); g.getPointPoint().removeSousGroupe(g);
this.brain.remove(Integer.valueOf(g.getId())); this.brain.remove(Integer.valueOf(g.getId()));
this.suprGroupe(g); this.suprGroupe(g);
@ -141,10 +127,9 @@ public class AbstractGroupeFactoryNP implements AbstractGroupeFactory {
Objects.requireNonNull(pere,"Le groupe pere ne peut pas être null"); Objects.requireNonNull(pere,"Le groupe pere ne peut pas être null");
Objects.requireNonNull(name,"Le nouveau groupe ne peut pas avoir null comme nom"); Objects.requireNonNull(name,"Le nouveau groupe ne peut pas avoir null comme nom");
//if (!this.knows(pere)){ if (!this.knows(pere)){
// throw new IllegalArgumentException("Interdit d'ajouter un fils à un groupe inconnu"); throw new IllegalArgumentException("Interdit d'ajouter un fils à un groupe inconnu");
//Possible maintenant }
//}
if (pere.getType().equals(TypeGroupe.PARTITION)){ if (pere.getType().equals(TypeGroupe.PARTITION)){
throw new IllegalArgumentException("Impossible d'ajouter un groupe à une parition. Il faut utiliser createPartition pour créer une partition"); throw new IllegalArgumentException("Impossible d'ajouter un groupe à une parition. Il faut utiliser createPartition pour créer une partition");
} }
@ -177,10 +162,9 @@ public class AbstractGroupeFactoryNP implements AbstractGroupeFactory {
public void createPartition(Groupe pere, String name, int n){ public void createPartition(Groupe pere, String name, int n){
Objects.requireNonNull(pere,"Le groupe pere ne peut pas être null"); Objects.requireNonNull(pere,"Le groupe pere ne peut pas être null");
Objects.requireNonNull(name,"Le nouveau groupe ne peut pas avoir null comme nom"); Objects.requireNonNull(name,"Le nouveau groupe ne peut pas avoir null comme nom");
//if (!this.knows(pere)){ if (!this.knows(pere)){
//throw new IllegalArgumentException("Impossible de partitionner ce groupe inconnu"); throw new IllegalArgumentException("Impossible de partitionner ce groupe inconnu");
//possible maintenant }
//}
if (pere.getType().equals(TypeGroupe.PARTITION)){ if (pere.getType().equals(TypeGroupe.PARTITION)){
throw new IllegalArgumentException("Impossible de créer une partition à ce niveau. Il faut soit repartitionner le groupe au dessus, soit partitionner une partition en dessous."); throw new IllegalArgumentException("Impossible de créer une partition à ce niveau. Il faut soit repartitionner le groupe au dessus, soit partitionner une partition en dessous.");
} }
@ -224,10 +208,9 @@ public class AbstractGroupeFactoryNP implements AbstractGroupeFactory {
public void addToGroupe(Groupe g, Etudiant e){ public void addToGroupe(Groupe g, Etudiant e){
Objects.requireNonNull(g,"Le groupe ne peut pas être null"); Objects.requireNonNull(g,"Le groupe ne peut pas être null");
Objects.requireNonNull(e,"L'étudiant ne peut pas être null"); Objects.requireNonNull(e,"L'étudiant ne peut pas être null");
//if (!this.knows(g)){ if (!this.knows(g)){
//throw new IllegalArgumentException("Impossible d'ajouter l'étudiant car le est groupe inconnu"); throw new IllegalArgumentException("Impossible d'ajouter l'étudiant car le est groupe inconnu");
//rendu possible maintenant par la syncronisation en temps réel }
//}
g.addEtudiant(e); g.addEtudiant(e);
this.saveEtu(e, g); this.saveEtu(e, g);
} }
@ -245,10 +228,9 @@ public class AbstractGroupeFactoryNP implements AbstractGroupeFactory {
public void dropFromGroupe(Groupe g, Etudiant e){ public void dropFromGroupe(Groupe g, Etudiant e){
Objects.requireNonNull(g,"Le groupe ne peut pas être null"); Objects.requireNonNull(g,"Le groupe ne peut pas être null");
Objects.requireNonNull(e,"L'étudiant ne peut pas être null"); Objects.requireNonNull(e,"L'étudiant ne peut pas être null");
//if (!this.knows(g)){ if (!this.knows(g)){
//throw new IllegalArgumentException("Impossible de suprimer l'étudiant car le est groupe inconnu"); throw new IllegalArgumentException("Impossible de suprimer l'étudiant car le est groupe inconnu");
//Possible maintenant }
//}
g.removeEtudiant(e); g.removeEtudiant(e);
this.deleteEtu(e, g); this.deleteEtu(e, g);
} }
@ -268,7 +250,7 @@ public class AbstractGroupeFactoryNP implements AbstractGroupeFactory {
public Set<Etudiant> getEtudiants(String nomEtu){ public Set<Etudiant> getEtudiants(String nomEtu){
Set<Etudiant> s=new LinkedHashSet<>(); Set<Etudiant> s=new LinkedHashSet<>();
for(Etudiant e:this.getPromotion().getEtudiants()){ for(Etudiant e:this.getPromotion().getEtudiants()){
if((e.getNom()).equals(nomEtu.toString())){ if((e.getNom()).contains(nomEtu)){
s.add(e); s.add(e);
} }
} }
@ -284,11 +266,13 @@ public class AbstractGroupeFactoryNP implements AbstractGroupeFactory {
* @throws java.lang.NullPointerException si le String est null. * @throws java.lang.NullPointerException si le String est null.
*/ */
public Set<Groupe> getGroupesOfEtudiant(Etudiant etu){ public Set<Groupe> getGroupesOfEtudiant(Etudiant etu){
if(etu==null)
throw new NullPointerException();
Collection<Groupe> s= this.brain.values(); Collection<Groupe> s= this.brain.values();
Set<Groupe> ret=new LinkedHashSet<Groupe>(); Set<Groupe> ret=new LinkedHashSet<Groupe>();
for(Groupe g: s){ for(Groupe g: s){
for(Etudiant e: g.getEtudiants()){ for(Etudiant e: g.getEtudiants()){
if(e==etu){ if(etu==e){
ret.add(g); ret.add(g);
break; break;
} }
@ -476,4 +460,191 @@ private boolean saveEtu(Etudiant etudiant, Groupe g){
this.close(cnx); this.close(cnx);
return true; return true;
} }
/*****************************
* FONCTION POUR INITIALISER LA FACTORY AVEC LA BD
* ********************************
*/
private void init(){
Connection cnx=this.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();
try{
//Si il existe bien une promotion
if(rs.next()){
//On créer le groupe de promo
this.promo=new GroupeNP(rs.getInt(1), rs.getString(2), rs.getInt(3), rs.getInt(4), TypeGroupe.getType(rs.getString(5)), null);
//on ajoute au cerveau
this.brain.put(this.promo.getId(), this.promo);
//On lui ajoute tout ses sous-groupe
this.addSousGroupe(this.promo, cnx);
//On ajoute les étudiants:
for(Groupe sous: this.brain.values()){
this.addBDEtudiant(sous, cnx);
}
}else{
//Si aucune ligne et donc pas de promo:
this.promo=null;
}
}catch(SQLException e){
}
rs.close();
pst.close();
}catch(SQLException e){
}
this.close(cnx);
}
/**
* 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);
//Si one le connait pas
if(this.brain.get(nouveau.getId())==null){
this.brain.put(nouveau.getId(), nouveau);
}
g.addSousGroupe(nouveau);
this.addSousGroupe(nouveau, cnx);
//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);
}
}
/*******************
* FONCTION POUR REFRESH
* *******************
*/
/**
* 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<Groupe> it=new LinkedHashSet<>();
for(Groupe gr:g.getSousGroupes()){
it.add(gr);
}
for(Groupe gr:it){
g.removeSousGroupe(gr);
}
Set<Etudiant> 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<Etudiant> 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;
}
} }

View File

@ -0,0 +1,26 @@
package fr.iutfbleau.projetIHM2022FI2.Permanent;
import fr.iutfbleau.projetIHM2022FI2.Permanent.Util.User;
import fr.iutfbleau.projetIHM2022FI2.Permanent.View.Connexion;
public class TestTexteMNP{
public static void main(String[] args) {
User chois=Connexion.seConnecter();
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){
}
}
}
}

View File

@ -1,4 +1,4 @@
package fr.iutfbleau.projetIHM2022FI2.Test; package fr.iutfbleau.projetIHM2022FI2.Permanent.Util;
public enum User { public enum User {
ROOT("root"), PROF("proffeseur"), ETUDIANT("etudiant"); ROOT("root"), PROF("proffeseur"), ETUDIANT("etudiant");

View File

@ -1,4 +1,4 @@
package fr.iutfbleau.projetIHM2022FI2.ETU.View; package fr.iutfbleau.projetIHM2022FI2.Permanent.View;
import java.awt.Graphics; import java.awt.Graphics;
@ -11,20 +11,16 @@ import java.awt.*;
* Class Dessinant les boutons du menu * Class Dessinant les boutons du menu
*/ */
public class Chargement extends JComponent{ public class Chargement extends JComponent{
private int pourcentage;
private JFrame fenetre; private JFrame fenetre;
public Chargement(JFrame n){ public Chargement(JFrame n){
this.pourcentage=0;
this.fenetre=new JFrame(); this.fenetre=new JFrame();
this.fenetre.setSize(n.getSize()); this.fenetre.setSize(n.getSize());
this.fenetre.setLocation(n.getLocation()); this.fenetre.setLocation(n.getLocation());
this.fenetre.add(this, BorderLayout.CENTER); this.fenetre.add(this, BorderLayout.CENTER);
this.repaint();
this.fenetre.setVisible(true); this.fenetre.setVisible(true);
} }
public void addPourcent(int n){ public void addPourcent(int n){
this.pourcentage+=n;
this.repaint(); this.repaint();
} }
@ -48,8 +44,5 @@ public class Chargement extends JComponent{
secondPinceau.setFont(new Font(Font.SANS_SERIF, Font.BOLD, (this.getWidth()/10))); secondPinceau.setFont(new Font(Font.SANS_SERIF, Font.BOLD, (this.getWidth()/10)));
FontMetrics metrics = secondPinceau.getFontMetrics(secondPinceau.getFont()); FontMetrics metrics = secondPinceau.getFontMetrics(secondPinceau.getFont());
secondPinceau.drawString("CHARGEMENT", (this.getWidth()/2-metrics.stringWidth("CHARGEMENT")/2), (this.getHeight()-metrics.getHeight())/3+metrics.getAscent()); 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);
} }
} }

View File

@ -0,0 +1,125 @@
package fr.iutfbleau.projetIHM2022FI2.Permanent.View;
import javax.swing.*;
import fr.iutfbleau.projetIHM2022FI2.Permanent.Util.User;
import java.awt.*;
public class Connexion extends JOptionPane{
public static User seConnecter(){
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<User> combo=new JComboBox<User>(use);
JPanel myPanel = new JPanel();
JTextField password = new JTextField(15);
myPanel.add(new JLabel("Password:"));
myPanel.add(password);
panel.add(combo);
panel.add(myPanel);
if(JOptionPane.showConfirmDialog(null, panel, "login", JOptionPane.OK_CANCEL_OPTION) != JOptionPane.OK_OPTION){
return null;
}
User choose=null;
switch(combo.getSelectedIndex()){
case 0:
choose=use[0];
break;
case 1:
choose=use[1];
break;
case 2:
choose=use[2];
break;
}
if(choose==User.ROOT){
if(password.getText().equals("root")){
return User.ROOT;
}
}
if(choose==User.PROF){
if(password.getText().equals("prof")){
return User.PROF;
}
}
if(choose==User.ETUDIANT){
if(password.getText().equals("etuiutsen")){
return User.ETUDIANT;
}
}
return Connexion.retry(choose);
}
private static User retry(User first){
JPanel panel = new JPanel(new GridLayout(2,1));
User[] use=new User[3];
if(first==User.ETUDIANT){
use[0]=User.ETUDIANT;
use[1]=User.ROOT;
use[2]=User.PROF;
}
if(first==User.ROOT){
use[1]=User.ETUDIANT;
use[0]=User.ROOT;
use[2]=User.PROF;
}
if(first==User.PROF){
use[1]=User.ETUDIANT;
use[2]=User.ROOT;
use[0]=User.PROF;
}
JComboBox<User> combo=new JComboBox<User>(use);
JPanel myPanel = new JPanel();
JTextField password = new JTextField(15);
myPanel.add(new JLabel("Password:"));
myPanel.add(password);
JLabel erre=new JLabel("mdp incorect", SwingConstants.RIGHT);
erre.setForeground(Color.RED);
myPanel.add(erre);
panel.add(combo);
panel.add(myPanel);
if(JOptionPane.showConfirmDialog(null, panel, "login", JOptionPane.OK_CANCEL_OPTION) != JOptionPane.OK_OPTION){
return null;
}
User choose=null;
switch(combo.getSelectedIndex()){
case 0:
choose=use[0];
break;
case 1:
choose=use[1];
break;
case 2:
choose=use[2];
break;
}
if(choose==User.ROOT){
if(password.getText().equals("root")){
return User.ROOT;
}
}
if(choose==User.PROF){
if(password.getText().equals("prof")){
return User.PROF;
}
}
if(choose==User.ETUDIANT){
if(password.getText().equals("etuiutsen")){
return User.ETUDIANT;
}
}
return Connexion.retry(choose);
}
}

View File

@ -1,22 +1,13 @@
package fr.iutfbleau.projetIHM2022FI2.ROOT.Model; package fr.iutfbleau.projetIHM2022FI2.ROOT.Model;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.Iterator;
import java.util.Set; import java.util.Set;
import java.sql.Connection;
import java.sql.ResultSet;
import javax.swing.*; import javax.swing.*;
import java.awt.*; import java.awt.*;
import fr.iutfbleau.projetIHM2022FI2.API.AbstractGroupeFactory; import fr.iutfbleau.projetIHM2022FI2.API.AbstractGroupeFactory;
import fr.iutfbleau.projetIHM2022FI2.API.Etudiant; import fr.iutfbleau.projetIHM2022FI2.API.Etudiant;
import fr.iutfbleau.projetIHM2022FI2.API.Groupe; import fr.iutfbleau.projetIHM2022FI2.API.Groupe;
import fr.iutfbleau.projetIHM2022FI2.API.TypeGroupe;
import fr.iutfbleau.projetIHM2022FI2.MNP.AbstractGroupeFactoryNP; import fr.iutfbleau.projetIHM2022FI2.MNP.AbstractGroupeFactoryNP;
import fr.iutfbleau.projetIHM2022FI2.MNP.GroupeNP; import fr.iutfbleau.projetIHM2022FI2.Permanent.View.Chargement;
import fr.iutfbleau.projetIHM2022FI2.ROOT.Controller.ObservateurFenetre; 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.FenetreEtudiant;
import fr.iutfbleau.projetIHM2022FI2.ROOT.View.FenetreGroupe; import fr.iutfbleau.projetIHM2022FI2.ROOT.View.FenetreGroupe;
@ -30,7 +21,6 @@ public class Model{
private FenetreEtudiant fenEtu; private FenetreEtudiant fenEtu;
private AbstractGroupeFactory promo; private AbstractGroupeFactory promo;
private JFrame fenetre; private JFrame fenetre;
private BD bd;
public Model(){ public Model(){
this.fenetre=new JFrame(); this.fenetre=new JFrame();
this.fenetre.setSize(1200, 720); this.fenetre.setSize(1200, 720);
@ -39,9 +29,11 @@ public class Model{
this.fenetre.setLayout(new GridLayout(1,2)); this.fenetre.setLayout(new GridLayout(1,2));
this.fenetre.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE); this.fenetre.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
this.fenetre.setMinimumSize(this.fenetre.getSize()); this.fenetre.setMinimumSize(this.fenetre.getSize());
this.bd=new BD(this.fenetre);
Chargement ch=new Chargement(this.fenetre); Chargement ch=new Chargement(this.fenetre);
this.promo=this.getPromo(ch); this.promo=new AbstractGroupeFactoryNP(this.fenetre);
if(this.promo.getPromotion()==null){
this.promo=null;
}
ch.dispose(); ch.dispose();
this.fenetre.setVisible(true); this.fenetre.setVisible(true);
if(this.promo==null){ if(this.promo==null){
@ -65,7 +57,7 @@ public class Model{
*/ */
public void showGroupe(Groupe g){ public void showGroupe(Groupe g){
if(g!=null) if(g!=null)
g=this.bd.refreshALL(g); g=this.promo.refreshALL(g);
this.panGroupe.removeAll(); this.panGroupe.removeAll();
this.fenGr=new FenetreGroupe(g, this); this.fenGr=new FenetreGroupe(g, this);
this.fenEtu=new FenetreEtudiant(g, this); this.fenEtu=new FenetreEtudiant(g, this);
@ -86,64 +78,10 @@ public void showGroupe(Groupe g){
return fenetre; 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<Etudiant> getEtudiant(){ public Set<Etudiant> getEtudiant(){
return this.bd.getEtudiant(); return this.promo.getPromotion().getEtudiants();
} }
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 // FONCTION POUR SUPRIMER UN ETUDIANT
// *********************** // ***********************
@ -303,7 +241,7 @@ public void showGroupe(Groupe g){
if(this.addEtudiant(creer, e)==false) if(this.addEtudiant(creer, e)==false)
n++; n++;
} }
creer=this.bd.refreshALL(creer); creer=this.promo.refreshALL(creer);
ch.dispose(); ch.dispose();
this.fenetre.setVisible(true); this.fenetre.setVisible(true);
if(n>0) if(n>0)

View File

@ -1,228 +0,0 @@
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<Groupe> it=new LinkedHashSet<>();
for(Groupe gr:g.getSousGroupes()){
it.add(gr);
}
for(Groupe gr:it){
g.removeSousGroupe(gr);
}
Set<Etudiant> 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<Etudiant> 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<Etudiant> getEtudiant(){
Connection cnx=this.cnx();
Set<Etudiant> 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;
}
}

View File

@ -1,55 +0,0 @@
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);
}
}

View File

@ -1,48 +0,0 @@
package fr.iutfbleau.projetIHM2022FI2.Test;
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<User> combo=new JComboBox<User>(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);
}
}

View File

@ -1,65 +0,0 @@
package fr.iutfbleau.projetIHM2022FI2.Test;
public class TestTexteMNP{
public static void main(String[] args) {
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<Groupe> itgr = racineDeLaPartition.getSousGroupes().iterator();
Groupe A = itgr.next(); // premier sous-groupe
Groupe B = itgr.next(); // second sous-groupe
B = itgr.next(); // troisième sous-groupe
Etudiant e = A.getEtudiants().iterator().next();// premier étudiant du premier sous-groupe.
acf.createChangement(A,e,B);
System.out.println("Récupération des changements (en fait un seul pour l'instant)");
Iterator<Changement> itch = acf.getAllChangements().iterator();
Changement c = itch.next();
System.out.println(c.monPrint());
System.out.println("Application du changement");
acf.applyChangement(c);
System.out.println("==========================");
System.out.println("== nouveau contenu des groupes de la partition ");
for(Groupe g : racineDeLaPartition.getSousGroupes()){
System.out.println(g.monPrint());
}
System.out.println("==========================");
System.out.println("Création de 2 changements");
itgr = racineDeLaPartition.getSousGroupes().iterator();
A = itgr.next(); // premier sous-groupe
B = itgr.next(); // second sous-groupe
Etudiant etu1 = A.getEtudiants().iterator().next();// premier étudiant du premier sous-groupe.
Etudiant etu2 = B.getEtudiants().iterator().next();// premier étudiant du premier sous-groupe.
acf.createChangement(A,etu1,B);
acf.createChangement(B,etu2,A);
// Impression des changements.
for (Changement cgt : acf.getAllChangements()){
System.out.println(cgt.monPrint());
}
itch = acf.getAllChangements().iterator();
c = itch.next();
System.out.println("Suppression d'un changement. Il reste :");
acf.deleteChangement(itch.next());
for (Changement cgt : acf.getAllChangements()){
System.out.println(cgt.monPrint());
}*/
}
}

View File

@ -1,183 +0,0 @@
package fr.iutfbleau.projetIHM2022FI2.Test;
import fr.iutfbleau.projetIHM2022FI2.API.*;
import fr.iutfbleau.projetIHM2022FI2.MNP.*;
import java.util.*;
//import java.util.Random;
public class TestTexteMNP{
public static void main(String[] args) {
// morceaux de modèle
// Notez que à gauche d'une déclaration on utilise une interface et à droite une version concrète.
// Il faut que votre vue se calque sur le fonctionnemment de ce main et ne fasse pas d'hypothèse sur l'implémentation concrète de l'interface.
// i.e. entre les versions non persistantes (qui terminent par NP) et votre implémentation éventuelle persistante, le seul changement de comportement devrait être la persistance.
//
System.out.println("Test de l\'API");
System.out.print("Création des étudiants");
Etudiant e1=new EtudiantNP("césar","lycurgus");
Etudiant e2=new EtudiantNP("denis","uranus");
Etudiant e3=new EtudiantNP("marcel","castor");
Etudiant e4=new EtudiantNP("marin","eurydice");
Etudiant e5=new EtudiantNP("constantin","akoni");
Etudiant e6=new EtudiantNP("donat","anakoni");
Etudiant e7=new EtudiantNP("alexandre","apikalia");
Etudiant e8=new EtudiantNP("andré","ekewaka");
Etudiant e9=new EtudiantNP("renard","elikapeka");
Etudiant e10=new EtudiantNP("achille","haukea");
System.out.print(".");
Etudiant e11=new EtudiantNP("agathe","iakopa");
Etudiant e12=new EtudiantNP("sabine","spartacus");
Etudiant e13=new EtudiantNP("michel","caligula");
Etudiant e14=new EtudiantNP("marthe","alaric");
Etudiant e15=new EtudiantNP("juliane","hannibal");
Etudiant e16=new EtudiantNP("anne","juvenal");
Etudiant e17=new EtudiantNP("sophie","bede");
Etudiant e18=new EtudiantNP("louis","hamilcar");
Etudiant e19=new EtudiantNP("diane","ladislas");
Etudiant e20=new EtudiantNP("christine","mahatma");
System.out.print(".");
Etudiant e21=new EtudiantNP("francine","napoleon");
Etudiant e22=new EtudiantNP("louise","lalita");
Etudiant e23=new EtudiantNP("chantal","laxman");
Etudiant e24=new EtudiantNP("giselle","laxmi");
Etudiant e25=new EtudiantNP("caroline","leela");
Etudiant e26=new EtudiantNP("claude","lila");
Etudiant e27=new EtudiantNP("pauline","lilavati");
Etudiant e28=new EtudiantNP("avril","lochan");
Etudiant e29=new EtudiantNP("jacqueline","madhav");
Etudiant e30=new EtudiantNP("denise","turlough");
System.out.print(".");
Etudiant e31=new EtudiantNP("gabrielle","uaithne");
Etudiant e32=new EtudiantNP("julie","uilleag");
Etudiant e33=new EtudiantNP("madeleine","uilliam");
Etudiant e34=new EtudiantNP("charlotte","uinseann");
Etudiant e35=new EtudiantNP("bertrand","ulick");
Etudiant e36=new EtudiantNP("lucile","ultan");
Etudiant e37=new EtudiantNP("nicole","firdaus");
Etudiant e38=new EtudiantNP("blanche","yasmin");
Etudiant e39=new EtudiantNP("jeanine","javed");
Etudiant e40=new EtudiantNP("roxane","naveed");
System.out.print(".");
Etudiant e41=new EtudiantNP("adeline","shahnaz");
Etudiant e42=new EtudiantNP("dion","ardashir");
Etudiant e43=new EtudiantNP("liane","atefeh");
Etudiant e44=new EtudiantNP("myriam","luigina");
Etudiant e45=new EtudiantNP("danielle","luigino");
Etudiant e46=new EtudiantNP("arlette","maddalena");
Etudiant e47=new EtudiantNP("michelle","manfredo");
Etudiant e48=new EtudiantNP("justine","manlio");
Etudiant e49=new EtudiantNP("natalie","marcellino");
Etudiant e50=new EtudiantNP("aline","mariangela");
System.out.print(".");
Etudiant e51=new EtudiantNP("prosper","marzio");
Etudiant e52=new EtudiantNP("mirabelle","massimiliano");
Etudiant e53=new EtudiantNP("carine","matteo");
Etudiant e54=new EtudiantNP("jeannine","melchiorre");
Etudiant e55=new EtudiantNP("dianne","micaela");
Etudiant e56=new EtudiantNP("evette","michela");
Etudiant e57=new EtudiantNP("gisselle","michelangela");
System.out.prinln("terminé.");
System.out.print("Création de l\'usine à groupe");
AbstractGroupeFactory agf = new AbstractGroupeFactoryNP("BUT2 FI", 15, 92);
System.out.prinln("terminé.");
System.out.print("Ajout des étudiants dans le groupe de la promotion racine");
agf.addToGroupe(agf.getPromotion(),e1);
agf.addToGroupe(agf.getPromotion(),e2);
agf.addToGroupe(agf.getPromotion(),e3);
agf.addToGroupe(agf.getPromotion(),e4);
agf.addToGroupe(agf.getPromotion(),e5);
agf.addToGroupe(agf.getPromotion(),e6);
agf.addToGroupe(agf.getPromotion(),e7);
agf.addToGroupe(agf.getPromotion(),e8);
agf.addToGroupe(agf.getPromotion(),e9);
agf.addToGroupe(agf.getPromotion(),e10);
System.out.print(".");
agf.addToGroupe(agf.getPromotion(),e11);
agf.addToGroupe(agf.getPromotion(),e12);
agf.addToGroupe(agf.getPromotion(),e13);
agf.addToGroupe(agf.getPromotion(),e14);
agf.addToGroupe(agf.getPromotion(),e15);
agf.addToGroupe(agf.getPromotion(),e16);
agf.addToGroupe(agf.getPromotion(),e17);
agf.addToGroupe(agf.getPromotion(),e18);
agf.addToGroupe(agf.getPromotion(),e19);
agf.addToGroupe(agf.getPromotion(),e20);
System.out.print(".");
agf.addToGroupe(agf.getPromotion(),e21);
agf.addToGroupe(agf.getPromotion(),e22);
agf.addToGroupe(agf.getPromotion(),e23);
agf.addToGroupe(agf.getPromotion(),e24);
agf.addToGroupe(agf.getPromotion(),e25);
agf.addToGroupe(agf.getPromotion(),e26);
agf.addToGroupe(agf.getPromotion(),e27);
agf.addToGroupe(agf.getPromotion(),e28);
agf.addToGroupe(agf.getPromotion(),e29);
agf.addToGroupe(agf.getPromotion(),e30);
agf.addToGroupe(agf.getPromotion(),e31);
agf.addToGroupe(agf.getPromotion(),e32);
agf.addToGroupe(agf.getPromotion(),e33);
agf.addToGroupe(agf.getPromotion(),e34);
agf.addToGroupe(agf.getPromotion(),e35);
agf.addToGroupe(agf.getPromotion(),e36);
agf.addToGroupe(agf.getPromotion(),e37);
agf.addToGroupe(agf.getPromotion(),e38);
agf.addToGroupe(agf.getPromotion(),e39);
System.out.print(".");
agf.addToGroupe(agf.getPromotion(),e40);
agf.addToGroupe(agf.getPromotion(),e41);
agf.addToGroupe(agf.getPromotion(),e42);
agf.addToGroupe(agf.getPromotion(),e43);
agf.addToGroupe(agf.getPromotion(),e44);
agf.addToGroupe(agf.getPromotion(),e45);
agf.addToGroupe(agf.getPromotion(),e46);
agf.addToGroupe(agf.getPromotion(),e47);
agf.addToGroupe(agf.getPromotion(),e48);
agf.addToGroupe(agf.getPromotion(),e49);
agf.addToGroupe(agf.getPromotion(),e50);
agf.addToGroupe(agf.getPromotion(),e51);
agf.addToGroupe(agf.getPromotion(),e52);
agf.addToGroupe(agf.getPromotion(),e53);
agf.addToGroupe(agf.getPromotion(),e54);
agf.addToGroupe(agf.getPromotion(),e55);
agf.addToGroupe(agf.getPromotion(),e56);
agf.addToGroupe(agf.getPromotion(),e57);
System.out.prinln("terminé.");
System.out.prinln("Initialisation complète.");
System.out.println("==========================");
System.out.prinln("Le groupe promotion");
System.out.println(agf.getPromotion().monPrint());
System.out.println("==========================");
System.out.prinln("Partition du groupe racine en 3 groupes TD.");
agf.createPartition(agf.getPromotion(), "TD",3);
System.out.println(agf.getPromotion().monPrint());
}
}