simplification repartition class et constructeur et modif API
This commit is contained in:
parent
b926dc4d32
commit
35696d3b14
@ -102,12 +102,6 @@ ${BUILD}/MNP/AbstractChangementFactoryNP.class : ${SRC}/MNP/AbstractChangementFa
|
||||
|
||||
## ROOT ##
|
||||
|
||||
## Util ###
|
||||
|
||||
${BUILD}/ROOT/Util/BD.class : ${SRC}/ROOT/Util/BD.java
|
||||
${JAVAC} ${JAVAC_OPTIONS} ${SRC}/ROOT/Util/BD.java
|
||||
|
||||
|
||||
|
||||
## View ##
|
||||
|
||||
@ -128,8 +122,6 @@ ${BUILD}/ROOT/View/PanelEtudiant.class : ${SRC}/ROOT/View/PanelEtudiant.java \
|
||||
${BUILD}/ROOT/Controller/ActionListenerSuprEtu.class
|
||||
${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/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/View/FenetreGroupe.class \
|
||||
${BUILD}/ROOT/View/FenetreEtudiant.class \
|
||||
${BUILD}/ROOT/View/Chargement.class \
|
||||
${BUILD}/ROOT/Util/BD.class
|
||||
${BUILD}/Permanent/View/Chargement.class
|
||||
${JAVAC} ${JAVAC_OPTIONS} ${SRC}/ROOT/Model/Model.java
|
||||
|
||||
|
||||
@ -182,11 +173,6 @@ ${BUILD}/ROOT/Model/Model.class : ${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
|
||||
|
||||
|
||||
## 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
|
||||
${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 ##
|
||||
@ -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/View/FenetreGroupe.class \
|
||||
${BUILD}/ETU/View/FenetreEtudiant.class \
|
||||
${BUILD}/ETU/View/Chargement.class \
|
||||
${BUILD}/ETU/Util/BD.class
|
||||
${BUILD}/Permanent/View/Chargement.class
|
||||
${JAVAC} ${JAVAC_OPTIONS} ${SRC}/ETU/Model/Model.java
|
||||
|
||||
|
||||
## TEST ##
|
||||
## Permanent ##
|
||||
|
||||
${BUILD}/Test/Connexion.class : ${SRC}/Test/Connexion.java
|
||||
${JAVAC} ${JAVAC_OPTIONS} ${SRC}/Test/Connexion.java
|
||||
${BUILD}/Permanent/Connexion.class : ${SRC}/Permanent/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/GroupeNP.class \
|
||||
${BUILD}/MNP/ChangementNP.class \
|
||||
@ -249,14 +232,23 @@ ${BUILD}/ETU/Model/Model.class : ${SRC}/ETU/Model/Model.java \
|
||||
${BUILD}/MNP/AbstractChangementFactoryNP.class \
|
||||
${BUILD}/ROOT/Model/Model.class \
|
||||
${BUILD}/ETU/Model/Model.class \
|
||||
${BUILD}/Test/Connexion.class \
|
||||
${BUILD}/Test/User.class
|
||||
${JAVAC} ${JAVAC_OPTIONS} ${SRC}/Test/TestTexteMNP.java
|
||||
${BUILD}/Permanent/View/Connexion.class \
|
||||
${BUILD}/Permanent/Util/User.class
|
||||
${JAVAC} ${JAVAC_OPTIONS} ${SRC}/Permanent/TestTexteMNP.java
|
||||
## View ##
|
||||
|
||||
${BUILD}/Test/User.class : ${SRC}/Test/User.java
|
||||
${JAVAC} ${JAVAC_OPTIONS} ${SRC}/Test/User.java
|
||||
${BUILD}/Permanent/View/Chargement.class : ${SRC}/Permanent/View/Chargement.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 ##
|
||||
|
||||
${JAR_MNP} : ${BUILD}/Test/TestTexteMNP.class
|
||||
${JAR} cfme ${JAR_MNP} Manifest.txt fr/iutfbleau/projetIHM2022FI2/Test/TestTexteMNP res/ -C build fr
|
||||
${JAR_MNP} : ${BUILD}/Permanent/TestTexteMNP.class
|
||||
${JAR} cfme ${JAR_MNP} Manifest.txt fr/iutfbleau/projetIHM2022FI2/Permanent/TestTexteMNP res/ -C build fr
|
||||
|
@ -120,4 +120,10 @@ public interface AbstractGroupeFactory {
|
||||
*/
|
||||
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);
|
||||
}
|
||||
|
@ -1,14 +1,8 @@
|
||||
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 java.awt.*;
|
||||
|
||||
import java.util.Set;
|
||||
import java.util.HashSet;
|
||||
import fr.iutfbleau.projetIHM2022FI2.API.AbstractChangementFactory;
|
||||
import fr.iutfbleau.projetIHM2022FI2.API.AbstractGroupeFactory;
|
||||
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.MNP.AbstractChangementFactoryNP;
|
||||
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.Util.BD;
|
||||
import fr.iutfbleau.projetIHM2022FI2.ETU.View.Chargement;
|
||||
import fr.iutfbleau.projetIHM2022FI2.ETU.View.FenetreEtudiant;
|
||||
import fr.iutfbleau.projetIHM2022FI2.ETU.View.FenetreGroupe;
|
||||
|
||||
@ -36,7 +28,6 @@ public class Model{
|
||||
private JFrame fenetre;
|
||||
private Etudiant Selected;
|
||||
|
||||
private BD bd;
|
||||
public Model(){
|
||||
this.fenetre=new JFrame();
|
||||
this.fenetre.setSize(1200, 720);
|
||||
@ -45,9 +36,11 @@ public class Model{
|
||||
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);
|
||||
this.promo=new AbstractGroupeFactoryNP(this.fenetre);
|
||||
if(this.promo.getPromotion()==null){
|
||||
this.promo=null;
|
||||
}
|
||||
ch.dispose();
|
||||
this.fenetre.setVisible(true);
|
||||
this.initEtu(null);
|
||||
@ -68,13 +61,14 @@ public class Model{
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 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);
|
||||
g=this.promo .refreshALL(g);
|
||||
this.panGroupe.removeAll();
|
||||
this.fenGr=new FenetreGroupe(g, this, this.promo.getGroupesOfEtudiant(this.Selected));
|
||||
this.fenEtu=new FenetreEtudiant(g, this.Selected, this);
|
||||
@ -95,57 +89,8 @@ public void showGroupe(Groupe g){
|
||||
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(){
|
||||
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);
|
||||
}
|
||||
return this.promo.getPromotion().getEtudiants();
|
||||
}
|
||||
|
||||
private void initEtu(String err){
|
||||
@ -179,208 +124,13 @@ public void showGroupe(Groupe g){
|
||||
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
|
||||
// ******************************
|
||||
public void changeGroupe(Etudiant e, Groupe b){
|
||||
if(b==null)
|
||||
return;
|
||||
b=this.bd.refreshGroupe(b);
|
||||
b=this.promo.refreshALL(b);
|
||||
if(b.getEtudiants()!=null && b.getMax()>b.getEtudiants().size()+1){
|
||||
this.changement.createChangement(this.fenGr.getG(), e, b);
|
||||
}else{
|
||||
@ -390,7 +140,7 @@ public void showGroupe(Groupe g){
|
||||
}
|
||||
|
||||
public Set<Groupe> getGroupePartition(){
|
||||
this.bd.refreshGroupe(this.fenGr.getG().getPointPoint());
|
||||
this.promo.refreshALL(this.fenGr.getG().getPointPoint());
|
||||
Set<Groupe> retour=new HashSet<>();
|
||||
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");
|
||||
|
@ -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;
|
||||
}
|
||||
}
|
@ -28,6 +28,7 @@ public class AbstractChangementFactoryNP implements AbstractChangementFactory {
|
||||
this.agf=agf;
|
||||
this.fenetre=fenetre;
|
||||
this.brain=new HashMap<Integer,Changement>();
|
||||
this.getChange();
|
||||
}
|
||||
|
||||
public AbstractChangementFactoryNP(AbstractGroupeFactory agf, JFrame fenetre, Set<Changement> liste){
|
||||
@ -38,6 +39,7 @@ public class AbstractChangementFactoryNP implements AbstractChangementFactory {
|
||||
for(Changement ch:liste){
|
||||
this.brain.put(ch.getId(), ch);
|
||||
}
|
||||
this.getChange();
|
||||
}
|
||||
|
||||
|
||||
@ -207,4 +209,40 @@ public class AbstractChangementFactoryNP implements AbstractChangementFactory {
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
@ -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é).
|
||||
*/
|
||||
public AbstractGroupeFactoryNP(Groupe promo, JFrame fenetre){
|
||||
this.promo=promo;
|
||||
public AbstractGroupeFactoryNP(JFrame fenetre){
|
||||
this.fenetre=fenetre;
|
||||
this.brain=new HashMap<Integer,Groupe>();
|
||||
this.addSousGroupe(this.promo);
|
||||
this.init();
|
||||
}
|
||||
|
||||
/**
|
||||
@ -49,18 +48,6 @@ public class AbstractGroupeFactoryNP implements AbstractGroupeFactory {
|
||||
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.
|
||||
@ -118,10 +105,9 @@ public class AbstractGroupeFactoryNP implements AbstractGroupeFactory {
|
||||
*/
|
||||
public void deleteGroupe(Groupe g){
|
||||
Objects.requireNonNull(g,"On ne peut pas enlever un groupe null car null n'est pas un groupe autorisé");
|
||||
//if (!this.knows(g)){
|
||||
//throw new IllegalArgumentException("Impossible d'enlever un groupe inconnu");
|
||||
//possible maintenant
|
||||
//}
|
||||
if (!this.knows(g)){
|
||||
throw new IllegalArgumentException("Impossible d'enlever un groupe inconnu");
|
||||
}
|
||||
g.getPointPoint().removeSousGroupe(g);
|
||||
this.brain.remove(Integer.valueOf(g.getId()));
|
||||
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(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");
|
||||
//Possible maintenant
|
||||
//}
|
||||
if (!this.knows(pere)){
|
||||
throw new IllegalArgumentException("Interdit d'ajouter un fils à un groupe inconnu");
|
||||
}
|
||||
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");
|
||||
}
|
||||
@ -177,10 +162,9 @@ public class AbstractGroupeFactoryNP implements AbstractGroupeFactory {
|
||||
public void createPartition(Groupe pere, String name, int n){
|
||||
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("Impossible de partitionner ce groupe inconnu");
|
||||
//possible maintenant
|
||||
//}
|
||||
if (!this.knows(pere)){
|
||||
throw new IllegalArgumentException("Impossible de partitionner ce groupe inconnu");
|
||||
}
|
||||
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.");
|
||||
}
|
||||
@ -224,10 +208,9 @@ public class AbstractGroupeFactoryNP implements AbstractGroupeFactory {
|
||||
public void addToGroupe(Groupe g, Etudiant e){
|
||||
Objects.requireNonNull(g,"Le groupe ne peut pas être null");
|
||||
Objects.requireNonNull(e,"L'étudiant ne peut pas être null");
|
||||
//if (!this.knows(g)){
|
||||
//throw new IllegalArgumentException("Impossible d'ajouter l'étudiant car le est groupe inconnu");
|
||||
//rendu possible maintenant par la syncronisation en temps réel
|
||||
//}
|
||||
if (!this.knows(g)){
|
||||
throw new IllegalArgumentException("Impossible d'ajouter l'étudiant car le est groupe inconnu");
|
||||
}
|
||||
g.addEtudiant(e);
|
||||
this.saveEtu(e, g);
|
||||
}
|
||||
@ -245,10 +228,9 @@ public class AbstractGroupeFactoryNP implements AbstractGroupeFactory {
|
||||
public void dropFromGroupe(Groupe g, Etudiant e){
|
||||
Objects.requireNonNull(g,"Le groupe ne peut pas être null");
|
||||
Objects.requireNonNull(e,"L'étudiant ne peut pas être null");
|
||||
//if (!this.knows(g)){
|
||||
//throw new IllegalArgumentException("Impossible de suprimer l'étudiant car le est groupe inconnu");
|
||||
//Possible maintenant
|
||||
//}
|
||||
if (!this.knows(g)){
|
||||
throw new IllegalArgumentException("Impossible de suprimer l'étudiant car le est groupe inconnu");
|
||||
}
|
||||
g.removeEtudiant(e);
|
||||
this.deleteEtu(e, g);
|
||||
}
|
||||
@ -268,7 +250,7 @@ public class AbstractGroupeFactoryNP implements AbstractGroupeFactory {
|
||||
public Set<Etudiant> getEtudiants(String nomEtu){
|
||||
Set<Etudiant> s=new LinkedHashSet<>();
|
||||
for(Etudiant e:this.getPromotion().getEtudiants()){
|
||||
if((e.getNom()).equals(nomEtu.toString())){
|
||||
if((e.getNom()).contains(nomEtu)){
|
||||
s.add(e);
|
||||
}
|
||||
}
|
||||
@ -284,11 +266,13 @@ public class AbstractGroupeFactoryNP implements AbstractGroupeFactory {
|
||||
* @throws java.lang.NullPointerException si le String est null.
|
||||
*/
|
||||
public Set<Groupe> getGroupesOfEtudiant(Etudiant etu){
|
||||
if(etu==null)
|
||||
throw new NullPointerException();
|
||||
Collection<Groupe> s= this.brain.values();
|
||||
Set<Groupe> ret=new LinkedHashSet<Groupe>();
|
||||
for(Groupe g: s){
|
||||
for(Etudiant e: g.getEtudiants()){
|
||||
if(e==etu){
|
||||
if(etu==e){
|
||||
ret.add(g);
|
||||
break;
|
||||
}
|
||||
@ -476,4 +460,191 @@ private boolean saveEtu(Etudiant etudiant, Groupe g){
|
||||
this.close(cnx);
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
@ -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){
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
@ -1,4 +1,4 @@
|
||||
package fr.iutfbleau.projetIHM2022FI2.Test;
|
||||
package fr.iutfbleau.projetIHM2022FI2.Permanent.Util;
|
||||
|
||||
public enum User {
|
||||
ROOT("root"), PROF("proffeseur"), ETUDIANT("etudiant");
|
@ -1,4 +1,4 @@
|
||||
package fr.iutfbleau.projetIHM2022FI2.ETU.View;
|
||||
package fr.iutfbleau.projetIHM2022FI2.Permanent.View;
|
||||
|
||||
import java.awt.Graphics;
|
||||
|
||||
@ -11,20 +11,16 @@ 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();
|
||||
}
|
||||
|
||||
@ -48,8 +44,5 @@ public class Chargement extends JComponent{
|
||||
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);
|
||||
}
|
||||
}
|
@ -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);
|
||||
}
|
||||
}
|
@ -1,22 +1,13 @@
|
||||
package fr.iutfbleau.projetIHM2022FI2.ROOT.Model;
|
||||
import java.sql.PreparedStatement;
|
||||
import java.sql.SQLException;
|
||||
import java.util.Iterator;
|
||||
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.Permanent.View.Chargement;
|
||||
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;
|
||||
|
||||
@ -30,7 +21,6 @@ public class Model{
|
||||
private FenetreEtudiant fenEtu;
|
||||
private AbstractGroupeFactory promo;
|
||||
private JFrame fenetre;
|
||||
private BD bd;
|
||||
public Model(){
|
||||
this.fenetre=new JFrame();
|
||||
this.fenetre.setSize(1200, 720);
|
||||
@ -39,9 +29,11 @@ public class Model{
|
||||
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);
|
||||
this.promo=new AbstractGroupeFactoryNP(this.fenetre);
|
||||
if(this.promo.getPromotion()==null){
|
||||
this.promo=null;
|
||||
}
|
||||
ch.dispose();
|
||||
this.fenetre.setVisible(true);
|
||||
if(this.promo==null){
|
||||
@ -65,7 +57,7 @@ public class Model{
|
||||
*/
|
||||
public void showGroupe(Groupe g){
|
||||
if(g!=null)
|
||||
g=this.bd.refreshALL(g);
|
||||
g=this.promo.refreshALL(g);
|
||||
this.panGroupe.removeAll();
|
||||
this.fenGr=new FenetreGroupe(g, this);
|
||||
this.fenEtu=new FenetreEtudiant(g, this);
|
||||
@ -86,64 +78,10 @@ public void showGroupe(Groupe g){
|
||||
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(){
|
||||
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
|
||||
// ***********************
|
||||
@ -303,7 +241,7 @@ public void showGroupe(Groupe g){
|
||||
if(this.addEtudiant(creer, e)==false)
|
||||
n++;
|
||||
}
|
||||
creer=this.bd.refreshALL(creer);
|
||||
creer=this.promo.refreshALL(creer);
|
||||
ch.dispose();
|
||||
this.fenetre.setVisible(true);
|
||||
if(n>0)
|
||||
|
@ -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;
|
||||
}
|
||||
}
|
@ -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);
|
||||
}
|
||||
}
|
@ -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);
|
||||
}
|
||||
}
|
@ -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());
|
||||
}*/
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
@ -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());
|
||||
}
|
||||
|
||||
|
||||
}
|
Loading…
Reference in New Issue
Block a user