correctif bug et ajout fonctionnalité
This commit is contained in:
parent
124dfd8a71
commit
a444123b99
@ -70,12 +70,12 @@ public class ObservateurModifGroupe implements ActionListener{
|
|||||||
if (result == JOptionPane.OK_OPTION) {
|
if (result == JOptionPane.OK_OPTION) {
|
||||||
int min=Integer.parseInt(xField.getText());
|
int min=Integer.parseInt(xField.getText());
|
||||||
int max=Integer.parseInt(zField.getText());
|
int max=Integer.parseInt(zField.getText());
|
||||||
if(max>this.groupe.getMax() || min<=0){
|
if(max>this.groupe.getMax() || min<=0 || max<=0 || min>max){
|
||||||
JOptionPane.showMessageDialog(m.getFenetre(), "nombre min/max inchoérent", "erreur", JOptionPane.ERROR_MESSAGE);
|
JOptionPane.showMessageDialog(m.getFenetre(), "nombre min/max inchoérent", "erreur", JOptionPane.ERROR_MESSAGE);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
Set<Etudiant> ajout=new LinkedHashSet<>();
|
Set<Etudiant> ajout=new LinkedHashSet<>();
|
||||||
myPanel=new FenetreSelectionEtu(this.groupe, ajout);
|
myPanel=new FenetreSelectionEtu(this.groupe, ajout, false, m.getEtudiant());
|
||||||
if(JOptionPane.showConfirmDialog(m.getFenetre(), new JScrollPane(myPanel), "Selectionner les étudiant a ajouter", JOptionPane.OK_CANCEL_OPTION) ==JOptionPane.YES_OPTION){
|
if(JOptionPane.showConfirmDialog(m.getFenetre(), new JScrollPane(myPanel), "Selectionner les étudiant a ajouter", JOptionPane.OK_CANCEL_OPTION) ==JOptionPane.YES_OPTION){
|
||||||
if(ajout.size()>=min && ajout.size()<=max){
|
if(ajout.size()>=min && ajout.size()<=max){
|
||||||
m.free(groupe, yField.getText(), min, max, ajout);
|
m.free(groupe, yField.getText(), min, max, ajout);
|
||||||
@ -94,12 +94,21 @@ public class ObservateurModifGroupe implements ActionListener{
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if(e.getActionCommand()=="rename"){
|
if(e.getActionCommand()=="rename"){
|
||||||
String nouveau=JOptionPane.showInputDialog(m.getFenetre(), "Rentrer le nouveau Nom");
|
JPanel myPanel = new JPanel();
|
||||||
m.rename(nouveau, this.groupe);
|
JTextField xField = new JTextField(50);
|
||||||
|
myPanel.add(new JLabel("Nom:"));
|
||||||
|
myPanel.add(xField);
|
||||||
|
if(JOptionPane.showConfirmDialog(m.getFenetre(), new JScrollPane(myPanel), "Nouveau Nom", JOptionPane.OK_CANCEL_OPTION) ==JOptionPane.OK_OPTION){
|
||||||
|
if(xField.getText().length()==0){
|
||||||
|
JOptionPane.showMessageDialog(m.getFenetre(), "erreur nom null", "erreur", JOptionPane.ERROR_MESSAGE);
|
||||||
|
}else{
|
||||||
|
m.rename(xField.getText(), this.groupe);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if(e.getActionCommand()=="add"){
|
if(e.getActionCommand()=="add"){
|
||||||
Set<Etudiant> ajout=new LinkedHashSet<>();
|
Set<Etudiant> ajout=new LinkedHashSet<>();
|
||||||
JPanel myPanel=new FenetreSelectionEtu(this.groupe, ajout);
|
JPanel myPanel=new FenetreSelectionEtu(this.groupe, ajout, true, this.m.getEtudiant());
|
||||||
if(JOptionPane.showConfirmDialog(m.getFenetre(), new JScrollPane(myPanel), "Selectionner les étudiant a ajouter", JOptionPane.OK_CANCEL_OPTION) ==JOptionPane.YES_OPTION){
|
if(JOptionPane.showConfirmDialog(m.getFenetre(), new JScrollPane(myPanel), "Selectionner les étudiant a ajouter", JOptionPane.OK_CANCEL_OPTION) ==JOptionPane.YES_OPTION){
|
||||||
if(this.groupe.getMax()<this.groupe.getEtudiants().size()+ajout.size()){
|
if(this.groupe.getMax()<this.groupe.getEtudiants().size()+ajout.size()){
|
||||||
JOptionPane.showMessageDialog(m.getFenetre(), "Il y a trop d'etudiant pour le groupe", "erreur", JOptionPane.ERROR_MESSAGE);
|
JOptionPane.showMessageDialog(m.getFenetre(), "Il y a trop d'etudiant pour le groupe", "erreur", JOptionPane.ERROR_MESSAGE);
|
||||||
@ -111,6 +120,7 @@ public class ObservateurModifGroupe implements ActionListener{
|
|||||||
i++;
|
i++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
m.showGroupe(this.groupe);
|
||||||
if(i>0){JOptionPane.showMessageDialog(m.getFenetre(), "erreur impossible d'ajouter "+i+" etudiants par manque de place dans le groupe de ses parents", "errer", JOptionPane.ERROR_MESSAGE);}
|
if(i>0){JOptionPane.showMessageDialog(m.getFenetre(), "erreur impossible d'ajouter "+i+" etudiants par manque de place dans le groupe de ses parents", "errer", JOptionPane.ERROR_MESSAGE);}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -31,14 +31,10 @@ public class Model{
|
|||||||
private JFrame fenetre;
|
private JFrame fenetre;
|
||||||
private BD bd;
|
private BD bd;
|
||||||
public Model(){
|
public Model(){
|
||||||
this.fenetre=new JFrame();
|
|
||||||
this.fenetre.setSize(1200, 720);
|
|
||||||
this.fenetre.setLocation(100,100);
|
|
||||||
Chargement ch=new Chargement();
|
|
||||||
this.fenetre.add(ch, BorderLayout.CENTER);
|
|
||||||
this.fenetre.setVisible(true);
|
|
||||||
this.bd=new BD(this.fenetre);
|
this.bd=new BD(this.fenetre);
|
||||||
|
Chargement ch=new Chargement();
|
||||||
this.promo=this.getPromo(ch);
|
this.promo=this.getPromo(ch);
|
||||||
|
|
||||||
if(this.promo==null){
|
if(this.promo==null){
|
||||||
this.fenGr=new FenetreGroupe(null, this);
|
this.fenGr=new FenetreGroupe(null, this);
|
||||||
this.fenEtu=new FenetreEtudiant(null);
|
this.fenEtu=new FenetreEtudiant(null);
|
||||||
@ -46,7 +42,7 @@ public class Model{
|
|||||||
this.fenGr=new FenetreGroupe(this.promo.getPromotion(), this);
|
this.fenGr=new FenetreGroupe(this.promo.getPromotion(), this);
|
||||||
this.fenEtu=new FenetreEtudiant(this.promo.getPromotion());
|
this.fenEtu=new FenetreEtudiant(this.promo.getPromotion());
|
||||||
}
|
}
|
||||||
this.fenetre.dispose();
|
|
||||||
this.fenetre=new JFrame();
|
this.fenetre=new JFrame();
|
||||||
this.fenetre.setSize(1200, 720);
|
this.fenetre.setSize(1200, 720);
|
||||||
this.bd.setFenetre(this.fenetre);
|
this.bd.setFenetre(this.fenetre);
|
||||||
@ -60,6 +56,8 @@ public class Model{
|
|||||||
scroll.getVerticalScrollBar().setUnitIncrement(15);
|
scroll.getVerticalScrollBar().setUnitIncrement(15);
|
||||||
this.fenetre.add(scroll);
|
this.fenetre.add(scroll);
|
||||||
this.fenetre.setVisible(true);
|
this.fenetre.setVisible(true);
|
||||||
|
if(this.promo!=null)
|
||||||
|
this.showGroupe(this.promo.getPromotion());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -69,7 +67,6 @@ public class Model{
|
|||||||
*/
|
*/
|
||||||
public void showGroupe(Groupe g){
|
public void showGroupe(Groupe g){
|
||||||
g=this.bd.refreshALL(g);
|
g=this.bd.refreshALL(g);
|
||||||
this.promo=this.getPromo(null);
|
|
||||||
this.fenGr=new FenetreGroupe(g, this);
|
this.fenGr=new FenetreGroupe(g, this);
|
||||||
this.fenEtu=new FenetreEtudiant(g);
|
this.fenEtu=new FenetreEtudiant(g);
|
||||||
this.fenetre.getContentPane().removeAll();
|
this.fenetre.getContentPane().removeAll();
|
||||||
@ -94,33 +91,21 @@ public class Model{
|
|||||||
//On ne peut pas supprimer la promo
|
//On ne peut pas supprimer la promo
|
||||||
if(g==this.promo.getPromotion()){
|
if(g==this.promo.getPromotion()){
|
||||||
JOptionPane.showMessageDialog(this.fenetre, "impossible de supprimer la promotion", "alerte", JOptionPane.ERROR_MESSAGE);
|
JOptionPane.showMessageDialog(this.fenetre, "impossible de supprimer la promotion", "alerte", JOptionPane.ERROR_MESSAGE);
|
||||||
return;
|
}else{
|
||||||
}
|
|
||||||
//autrement on récupere les groupe a supprimer par ordre avec une fonction recursive
|
//autrement on récupere les groupe a supprimer par ordre avec une fonction recursive
|
||||||
//elle contiendra les sous-groupe remontant j'usqau groupe a supprimer
|
//elle contiendra les sous-groupe remontant j'usqau groupe a supprimer
|
||||||
LinkedList<Groupe> file=new LinkedList<>();
|
|
||||||
//On initialise la liste
|
//On initialise la liste
|
||||||
this.deleteRecursif(file, g);
|
this.bd.suprGroupe(g);
|
||||||
for(Groupe sup:file){
|
|
||||||
//on supprime les groupe
|
|
||||||
this.promo.deleteGroupe(sup);
|
|
||||||
}
|
|
||||||
this.showGroupe(g.getPointPoint());
|
this.showGroupe(g.getPointPoint());
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* fonction recursive initialisant la liste ordonnée de tous les groupe a supprimer avant de supprimer ce groupe
|
|
||||||
* @param file la liste
|
|
||||||
* @param bedelete le groupe a supprimer
|
|
||||||
*/
|
|
||||||
private void deleteRecursif(LinkedList<Groupe> file, Groupe bedelete){
|
|
||||||
//on parcour tous ses sous groupe
|
|
||||||
for(Groupe g: bedelete.getSousGroupes()){
|
|
||||||
//qui eux aussi ajouterons leurs sous-groupe a la file
|
|
||||||
this.deleteRecursif(file, g);
|
|
||||||
}
|
}
|
||||||
// on ajoute le groupe (les sous-groupe ayant déja ajouter leur groupe)
|
|
||||||
file.add(bedelete);
|
private int getTailleGroupe(Groupe g){
|
||||||
|
int i=0;
|
||||||
|
for(Groupe gr: g.getSousGroupes()){
|
||||||
|
i+=this.getTailleGroupe(gr);
|
||||||
|
}
|
||||||
|
return 1+i;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -130,18 +115,20 @@ public class Model{
|
|||||||
* @param name le nom des partition
|
* @param name le nom des partition
|
||||||
*/
|
*/
|
||||||
public void partition(Groupe g, int n, String name){
|
public void partition(Groupe g, int n, String name){
|
||||||
|
Chargement ch=new Chargement();
|
||||||
this.promo.createPartition(g, name, n);
|
this.promo.createPartition(g, name, n);
|
||||||
//On recherche le groupe Partitionner pour le sauvegarder dans la BD
|
//On recherche le groupe Partitionner pour le sauvegarder dans la BD
|
||||||
Groupe creer;
|
|
||||||
for(Groupe gr: g.getSousGroupes()){
|
for(Groupe gr: g.getSousGroupes()){
|
||||||
if(gr.getName()==name){
|
if(gr.getSousGroupes().size()>0 && gr.getSousGroupes().iterator().next().getName().contains(name)){
|
||||||
creer=gr;
|
this.fenetre.setVisible(false);
|
||||||
|
this.bd.saveGroupe(gr, 100/this.getTailleGroupe(gr)+1, ch);
|
||||||
|
this.fenetre.setVisible(true);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
//On dis a la BD de sauvegarder ce groupe et tous ces sous Groupe
|
//On dis a la BD de sauvegarder ce groupe et tous ces sous Groupe
|
||||||
this.fenGr.setG(this.bd.refreshGroupe(g));
|
this.showGroupe(g);
|
||||||
this.fenGr.refresh();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -163,18 +150,22 @@ public class Model{
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
//on crééer le groupe
|
||||||
|
this.bd.createGroupe(creer);
|
||||||
//on y ajoute les étudiant
|
//on y ajoute les étudiant
|
||||||
int n=0;
|
int n=0;
|
||||||
for(Etudiant e:ajout){
|
for(Etudiant e:ajout){
|
||||||
if(this.addEtudiant(creer, e)==false)
|
if(this.addEtudiant(creer, e)==false)
|
||||||
n++;
|
n++;
|
||||||
}
|
}
|
||||||
|
creer=this.bd.refreshALL(creer);
|
||||||
if(n>0)
|
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);
|
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
|
//Si finalement avec les etudiants qui n'ont pas pus être ajouter le min n'est pas atteint
|
||||||
if(creer.getSize()<creer.getMin()){
|
if(creer.getEtudiants().size()<=creer.getMin()){
|
||||||
//On le supprime
|
//On le supprime
|
||||||
this.promo.deleteGroupe(creer);
|
this.promo.deleteGroupe(creer);
|
||||||
|
//this.bd.suprGroupe(creer);
|
||||||
JOptionPane.showMessageDialog(this.fenetre, "en raison du manque d'etudiant pour le nombre min le groupe n'a pas pus être créer", "errer", JOptionPane.ERROR_MESSAGE);
|
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);
|
this.showGroupe(g);
|
||||||
@ -194,8 +185,11 @@ public class Model{
|
|||||||
|
|
||||||
|
|
||||||
public void addPromo(int min, int max, String name){
|
public void addPromo(int min, int max, String name){
|
||||||
|
Chargement ch=new Chargement();
|
||||||
this.promo=new AbstractGroupeFactoryNP(name, min, max);
|
this.promo=new AbstractGroupeFactoryNP(name, min, max);
|
||||||
//this.bd.saveGroupe(this.promo.getPromotion());
|
this.fenetre.setVisible(false);
|
||||||
|
this.bd.saveGroupe(this.promo.getPromotion(), this.getTailleGroupe(this.promo.getPromotion()), ch);
|
||||||
|
this.fenetre.setVisible(true);
|
||||||
this.showGroupe(this.bd.refreshALL(this.promo.getPromotion()));
|
this.showGroupe(this.bd.refreshALL(this.promo.getPromotion()));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -211,10 +205,6 @@ public class Model{
|
|||||||
return false;
|
return false;
|
||||||
//On induqe a la BD de sauvegarder cette modification
|
//On induqe a la BD de sauvegarder cette modification
|
||||||
this.bd.saveEtu(e, g);
|
this.bd.saveEtu(e, g);
|
||||||
//pour un modele NP on l'ajout en local
|
|
||||||
this.promo.addToGroupe(g, e);
|
|
||||||
//on refresh avec la bd
|
|
||||||
this.showGroupe(this.bd.refreshALL(g));
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -250,17 +240,19 @@ public class Model{
|
|||||||
//on récupère le Groupe de la BD n'ayant pas de Parent (La promo donc)
|
//on récupère le Groupe de la BD n'ayant pas de Parent (La promo donc)
|
||||||
try{
|
try{
|
||||||
PreparedStatement pst = cnx.prepareStatement(
|
PreparedStatement pst = cnx.prepareStatement(
|
||||||
"SELECT `id`, `nom`, `min`, `max`, `value`, `id-parent` FROM `Groupe` join `TYPE` on Groupe.Type=TYPE.name where Groupe.id=`Groupe`.`id-parent` ORDER BY Groupe.id ASC;");
|
"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();
|
ResultSet rs = pst.executeQuery();
|
||||||
rs=pst.executeQuery();
|
rs=pst.executeQuery();
|
||||||
|
rs.last();
|
||||||
|
int nbgrp=rs.getRow();
|
||||||
|
rs=pst.executeQuery();
|
||||||
try{
|
try{
|
||||||
//Si il existe bien une promotion
|
//Si il existe bien une promotion
|
||||||
if(rs.first()){
|
if(rs.next()){
|
||||||
//On créer le groupe de promo
|
//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);
|
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
|
//On lui ajoute tout ses sous-groupe
|
||||||
//et ses etudiants
|
this.init(groupe, (100/nbgrp), chargement);
|
||||||
this.bd.refreshALL(groupe, chargement);
|
|
||||||
//On créer la Factory
|
//On créer la Factory
|
||||||
agf=new AbstractGroupeFactoryNP(groupe);
|
agf=new AbstractGroupeFactoryNP(groupe);
|
||||||
}else{
|
}else{
|
||||||
@ -268,7 +260,7 @@ public class Model{
|
|||||||
this.promo=null;
|
this.promo=null;
|
||||||
}
|
}
|
||||||
}catch(SQLException e){
|
}catch(SQLException e){
|
||||||
System.out.println("erreur dans la prise de resultat");
|
System.out.println("hooo");
|
||||||
}
|
}
|
||||||
rs.close();
|
rs.close();
|
||||||
pst.close();
|
pst.close();
|
||||||
@ -279,4 +271,15 @@ public class Model{
|
|||||||
return agf;
|
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);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -11,8 +11,8 @@ import java.sql.SQLException;
|
|||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import java.util.LinkedHashSet;
|
import java.util.LinkedHashSet;
|
||||||
import fr.iutfbleau.projetIHM2022FI2.API.*;
|
import fr.iutfbleau.projetIHM2022FI2.API.*;
|
||||||
import fr.iutfbleau.projetIHM2022FI2.MNP.*;
|
|
||||||
import fr.iutfbleau.projetIHM2022FI2.Graphic.View.Chargement;
|
import fr.iutfbleau.projetIHM2022FI2.Graphic.View.Chargement;
|
||||||
|
import fr.iutfbleau.projetIHM2022FI2.MNP.*;
|
||||||
|
|
||||||
public class BD {
|
public class BD {
|
||||||
private JFrame fenetre;
|
private JFrame fenetre;
|
||||||
@ -67,19 +67,15 @@ public class BD {
|
|||||||
* Fonction recursive permettant de récuperrer les sous groupe a partir de la BD
|
* Fonction recursive permettant de récuperrer les sous groupe a partir de la BD
|
||||||
* @param g le groupe
|
* @param g le groupe
|
||||||
* @param cnx la connection a la BD (evite de la surcharger)
|
* @param cnx la connection a la BD (evite de la surcharger)
|
||||||
* @param Chargement pour indiquer la progression du chargement
|
|
||||||
* @param pourcent le pourcentage de ce groupe dans le chargement
|
* @param pourcent le pourcentage de ce groupe dans le chargement
|
||||||
*/
|
*/
|
||||||
private void addSousGroupe(Groupe g, Connection cnx, Chargement ch){
|
private void addSousGroupe(Groupe g, Connection cnx){
|
||||||
try{
|
try{
|
||||||
//On récupere les Groupe qui ont le parent :g
|
//On récupere les Groupe qui ont le parent :g
|
||||||
PreparedStatement pst= cnx.prepareStatement(
|
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`;");
|
"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()));
|
pst.setString(1, String.valueOf(g.getId()));
|
||||||
ResultSet rs=pst.executeQuery();
|
ResultSet rs=pst.executeQuery();
|
||||||
//on récupère le nombre de ligne
|
|
||||||
rs.last();
|
|
||||||
int nbsous=rs.getRow();
|
|
||||||
rs=pst.executeQuery();
|
rs=pst.executeQuery();
|
||||||
//autrement si le groupe as des sous groupe
|
//autrement si le groupe as des sous groupe
|
||||||
while(rs.next()){
|
while(rs.next()){
|
||||||
@ -87,14 +83,11 @@ public class BD {
|
|||||||
Groupe nouveau=new GroupeNP(rs.getInt(1), rs.getString(2), rs.getInt(3), rs.getInt(4), TypeGroupe.getType(rs.getString(5)), g);
|
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);
|
g.addSousGroupe(nouveau);
|
||||||
//on ajoute les sous groupe des sous-groupe
|
//on ajoute les sous groupe des sous-groupe
|
||||||
if(ch!=null)
|
|
||||||
ch.addPourcent(100/nbsous);
|
|
||||||
}
|
}
|
||||||
rs.close();
|
rs.close();
|
||||||
pst.close();
|
|
||||||
}catch(SQLException e){
|
}catch(SQLException e){
|
||||||
if(this.erreurCO())
|
if(this.erreurCO())
|
||||||
this.addSousGroupe(g, cnx, ch);
|
this.addSousGroupe(g, cnx);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -155,13 +148,14 @@ public class BD {
|
|||||||
* @return le groupe refresh
|
* @return le groupe refresh
|
||||||
*/
|
*/
|
||||||
private Groupe refreshGroupe(Groupe g, Connection cnx){
|
private Groupe refreshGroupe(Groupe g, Connection cnx){
|
||||||
|
|
||||||
try{
|
try{
|
||||||
PreparedStatement pst = cnx.prepareStatement(
|
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;");
|
"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(1, String.valueOf(g.getId()));
|
||||||
pst.setString(2, String.valueOf(g.getId()));
|
pst.setString(2, String.valueOf(g.getId()));
|
||||||
ResultSet rs=pst.executeQuery();
|
ResultSet rs=pst.executeQuery();
|
||||||
if(rs.first()){
|
if(rs.next()){
|
||||||
if(rs.getString(2)!=g.getName()){
|
if(rs.getString(2)!=g.getName()){
|
||||||
g.setName(rs.getString(2));
|
g.setName(rs.getString(2));
|
||||||
}
|
}
|
||||||
@ -179,7 +173,7 @@ public class BD {
|
|||||||
for(Etudiant gr:et){
|
for(Etudiant gr:et){
|
||||||
g.removeEtudiant(gr);
|
g.removeEtudiant(gr);
|
||||||
}
|
}
|
||||||
this.addSousGroupe(g, cnx, null);
|
this.addSousGroupe(g, cnx);
|
||||||
}else{
|
}else{
|
||||||
if(g==g.getPointPoint()){
|
if(g==g.getPointPoint()){
|
||||||
g=null;
|
g=null;
|
||||||
@ -188,7 +182,6 @@ public class BD {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
rs.close();
|
rs.close();
|
||||||
pst.close();
|
|
||||||
}catch(SQLException e){
|
}catch(SQLException e){
|
||||||
if(this.erreurCO())
|
if(this.erreurCO())
|
||||||
this.refreshGroupe(g, cnx);
|
this.refreshGroupe(g, cnx);
|
||||||
@ -196,54 +189,6 @@ public class BD {
|
|||||||
return g;
|
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, Chargement ch){
|
|
||||||
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.first()){
|
|
||||||
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, ch);
|
|
||||||
}else{
|
|
||||||
if(g==g.getPointPoint()){
|
|
||||||
g=null;
|
|
||||||
}else{
|
|
||||||
g=this.refreshGroupe(g.getPointPoint(), cnx);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
rs.close();
|
|
||||||
pst.close();
|
|
||||||
}catch(SQLException e){
|
|
||||||
if(this.erreurCO())
|
|
||||||
this.refreshGroupe(g, cnx, ch);
|
|
||||||
}
|
|
||||||
return g;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* refresh le Groupe ainsi que ses etudiants
|
* refresh le Groupe ainsi que ses etudiants
|
||||||
* @param g le groupe
|
* @param g le groupe
|
||||||
@ -264,25 +209,6 @@ public class BD {
|
|||||||
return g;
|
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, Chargement ch){
|
|
||||||
Connection cnx = this.cnx();
|
|
||||||
g=this.refreshGroupe(g, cnx, ch);
|
|
||||||
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 boolean saveEtu(Etudiant etudiant, Groupe g){
|
public boolean saveEtu(Etudiant etudiant, Groupe g){
|
||||||
Connection cnx = this.cnx();
|
Connection cnx = this.cnx();
|
||||||
@ -291,14 +217,14 @@ public class BD {
|
|||||||
"Select id from Etudiant where id=?; ");
|
"Select id from Etudiant where id=?; ");
|
||||||
pst.setString(1, String.valueOf(etudiant.getId()));
|
pst.setString(1, String.valueOf(etudiant.getId()));
|
||||||
ResultSet rs=pst.executeQuery();
|
ResultSet rs=pst.executeQuery();
|
||||||
if(rs.first()){
|
if(rs.next()){
|
||||||
//L'etudiant est déja connu de la BD
|
//L'etudiant est déja connu de la BD
|
||||||
pst.close();
|
pst.close();
|
||||||
pst=cnx.prepareStatement(
|
pst=cnx.prepareStatement(
|
||||||
"INSERT INTO `CONTIENT` (`idGroupe`, `idEt`) VALUES (?, ?);");
|
"INSERT INTO `CONTIENT` (`idGroupe`, `idEt`) VALUES (?, ?);");
|
||||||
pst.setInt(2, etudiant.getId());
|
pst.setInt(2, etudiant.getId());
|
||||||
pst.setInt(1, g.getId());
|
pst.setInt(1, g.getId());
|
||||||
pst.executeQuery();
|
pst.executeUpdate();
|
||||||
boolean la=false;
|
boolean la=false;
|
||||||
while(g!=g.getPointPoint() || la==false){
|
while(g!=g.getPointPoint() || la==false){
|
||||||
g=g.getPointPoint();
|
g=g.getPointPoint();
|
||||||
@ -311,7 +237,7 @@ public class BD {
|
|||||||
if(la==false){
|
if(la==false){
|
||||||
pst.setInt(2, etudiant.getId());
|
pst.setInt(2, etudiant.getId());
|
||||||
pst.setInt(1, g.getId());
|
pst.setInt(1, g.getId());
|
||||||
pst.executeQuery();
|
pst.executeUpdate();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}else{
|
}else{
|
||||||
@ -321,27 +247,27 @@ public class BD {
|
|||||||
pst.setInt(1, etudiant.getId());
|
pst.setInt(1, etudiant.getId());
|
||||||
pst.setString(2, etudiant.getNom());
|
pst.setString(2, etudiant.getNom());
|
||||||
pst.setString(3, etudiant.getPrenom());
|
pst.setString(3, etudiant.getPrenom());
|
||||||
pst.executeQuery();
|
pst.executeUpdate();
|
||||||
pst.close();
|
pst.close();
|
||||||
pst=cnx.prepareStatement(
|
pst=cnx.prepareStatement(
|
||||||
"INSERT INTO `CONTIENT` (`idGroupe`, `idEt`) VALUES (?, ?);");
|
"INSERT INTO `CONTIENT` (`idGroupe`, `idEt`) VALUES (?, ?);");
|
||||||
pst.setInt(2, etudiant.getId());
|
pst.setInt(2, etudiant.getId());
|
||||||
pst.setInt(1, g.getId());
|
pst.setInt(1, g.getId());
|
||||||
pst.executeQuery();
|
pst.executeUpdate();
|
||||||
while(g.getPointPoint()!=g){
|
while(g.getPointPoint()!=g){
|
||||||
g=g.getPointPoint();
|
g=g.getPointPoint();
|
||||||
pst.setInt(2, etudiant.getId());
|
pst.setInt(2, etudiant.getId());
|
||||||
pst.setInt(1, g.getId());
|
pst.setInt(1, g.getId());
|
||||||
pst.executeQuery();
|
pst.executeUpdate();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
rs.close();
|
rs.close();
|
||||||
pst.close();
|
pst.close();
|
||||||
}catch(SQLException e){
|
}catch(SQLException e){
|
||||||
|
System.out.println(e.toString());
|
||||||
if(this.erreurSQL()){
|
if(this.erreurSQL()){
|
||||||
this.saveEtu(etudiant, g);
|
this.saveEtu(etudiant, g);
|
||||||
}else{
|
}else{
|
||||||
this.refreshALL(g);
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -357,13 +283,13 @@ public class BD {
|
|||||||
);
|
);
|
||||||
pst.setString(1, name);
|
pst.setString(1, name);
|
||||||
pst.setInt(2, g.getId());
|
pst.setInt(2, g.getId());
|
||||||
pst.executeQuery();
|
pst.executeUpdate();
|
||||||
pst.close();
|
pst.close();
|
||||||
}catch(SQLException e){
|
}catch(SQLException e){
|
||||||
|
System.out.println(e.toString());
|
||||||
if(this.erreurSQL()){
|
if(this.erreurSQL()){
|
||||||
this.changeNameGroupe(g, name);
|
this.changeNameGroupe(g, name);
|
||||||
}else{
|
}else{
|
||||||
this.refreshALL(g);
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -371,6 +297,105 @@ public class BD {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean suprGroupe(Groupe g){
|
||||||
|
Connection cnx=this.cnx();
|
||||||
|
try{
|
||||||
|
PreparedStatement pst=cnx.prepareStatement("Delete FROM Groupe where id=?;");
|
||||||
|
pst.setInt(1, g.getId());
|
||||||
|
pst.executeUpdate();
|
||||||
|
pst.close();
|
||||||
|
}catch(SQLException e){
|
||||||
|
System.out.println(e.toString());
|
||||||
|
if(this.erreurSQL()){
|
||||||
|
this.suprGroupe(g);
|
||||||
|
}else{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
this.close(cnx);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public boolean saveGroupe(Groupe g, int taille, Chargement ch){
|
||||||
|
Connection cnx=this.cnx();
|
||||||
|
try{
|
||||||
|
PreparedStatement pst=cnx.prepareStatement(
|
||||||
|
"INSERT INTO `Groupe` (`id`, `nom`, `min`, `max`, `Type`, `id-parent`) VALUES (?, ?, ?, ?, ?, ?);"
|
||||||
|
);
|
||||||
|
pst.setInt(1, g.getId());
|
||||||
|
pst.setString(2, g.getName());
|
||||||
|
pst.setInt(3, g.getMin());
|
||||||
|
pst.setInt(4, g.getMax());
|
||||||
|
pst.setString(5, g.getType().name());
|
||||||
|
pst.setInt(6, g.getPointPoint().getId());
|
||||||
|
pst.executeUpdate();
|
||||||
|
pst.close();
|
||||||
|
for(Etudiant e: g.getEtudiants()){
|
||||||
|
this.saveEtu(e, g);
|
||||||
|
}
|
||||||
|
if(ch!=null)
|
||||||
|
ch.addPourcent(taille);
|
||||||
|
for(Groupe sous:g.getSousGroupes()){
|
||||||
|
this.saveGroupe(sous, taille, ch);
|
||||||
|
}
|
||||||
|
}catch(SQLException e){
|
||||||
|
System.out.println(e.toString());
|
||||||
|
if(this.erreurSQL()){
|
||||||
|
this.saveGroupe(g, taille, ch);
|
||||||
|
}else{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
this.close(cnx);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean createGroupe(Groupe g){
|
||||||
|
Connection cnx=this.cnx();
|
||||||
|
try{
|
||||||
|
PreparedStatement pst=cnx.prepareStatement(
|
||||||
|
"INSERT INTO `Groupe` (`id`, `nom`, `min`, `max`, `Type`, `id-parent`) VALUES (?, ?, ?, ?, ?, ?);"
|
||||||
|
);;
|
||||||
|
//On set le mex ID:
|
||||||
|
pst.setInt(1,g.getId());
|
||||||
|
pst.setString(2, g.getName());
|
||||||
|
pst.setInt(3, g.getMin());
|
||||||
|
pst.setInt(4, g.getMax());
|
||||||
|
pst.setString(5, g.getType().name());
|
||||||
|
pst.setInt(6, g.getPointPoint().getId());
|
||||||
|
pst.executeUpdate();
|
||||||
|
pst.close();
|
||||||
|
}catch(SQLException e){
|
||||||
|
System.out.println(e.toString());
|
||||||
|
if(this.erreurSQL()){
|
||||||
|
this.saveGroupe(g, 0, null);
|
||||||
|
}else{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
this.close(cnx);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Set<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;
|
||||||
|
}
|
||||||
public void setFenetre(JFrame fenetre) {
|
public void setFenetre(JFrame fenetre) {
|
||||||
this.fenetre = fenetre;
|
this.fenetre = fenetre;
|
||||||
}
|
}
|
||||||
|
@ -3,6 +3,7 @@ package fr.iutfbleau.projetIHM2022FI2.Graphic.View;
|
|||||||
import java.awt.Graphics;
|
import java.awt.Graphics;
|
||||||
|
|
||||||
import javax.swing.JComponent;
|
import javax.swing.JComponent;
|
||||||
|
import javax.swing.JFrame;
|
||||||
|
|
||||||
import java.awt.*;
|
import java.awt.*;
|
||||||
|
|
||||||
@ -11,15 +12,24 @@ import java.awt.*;
|
|||||||
*/
|
*/
|
||||||
public class Chargement extends JComponent{
|
public class Chargement extends JComponent{
|
||||||
private int pourcentage;
|
private int pourcentage;
|
||||||
private boolean erreur;
|
private JFrame fenetre;
|
||||||
|
|
||||||
public Chargement(){
|
public Chargement(){
|
||||||
this.erreur=false;
|
|
||||||
this.pourcentage=0;
|
this.pourcentage=0;
|
||||||
|
this.fenetre=new JFrame();
|
||||||
|
this.fenetre.setSize(1200, 720);
|
||||||
|
this.fenetre.setLocation(100,100);
|
||||||
|
this.fenetre.add(this, BorderLayout.CENTER);
|
||||||
|
this.repaint();
|
||||||
|
this.fenetre.setVisible(true);
|
||||||
}
|
}
|
||||||
public void addPourcent(int n){
|
public void addPourcent(int n){
|
||||||
|
System.out.println(this.pourcentage+n);
|
||||||
this.pourcentage+=n;
|
this.pourcentage+=n;
|
||||||
this.repaint();
|
this.repaint();
|
||||||
|
if(this.pourcentage>95){
|
||||||
|
this.fenetre.dispose();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -41,15 +51,5 @@ public class Chargement extends JComponent{
|
|||||||
secondPinceau.drawRect(this.getWidth()/10, this.getHeight()/2, this.getWidth()/10*8, this.getHeight()/10);
|
secondPinceau.drawRect(this.getWidth()/10, this.getHeight()/2, this.getWidth()/10*8, this.getHeight()/10);
|
||||||
float stat=(int) 8.F/100.F*(pourcentage);
|
float stat=(int) 8.F/100.F*(pourcentage);
|
||||||
secondPinceau.fillRect(this.getWidth()/10, this.getHeight()/2, this.getWidth()/10*((int) stat), this.getHeight()/10);
|
secondPinceau.fillRect(this.getWidth()/10, this.getHeight()/2, this.getWidth()/10*((int) stat), this.getHeight()/10);
|
||||||
if(this.erreur==true){
|
|
||||||
secondPinceau.setColor(Color.RED);
|
|
||||||
secondPinceau.setFont(new Font(Font.SANS_SERIF, Font.BOLD, (this.getWidth()/20)));
|
|
||||||
metrics = secondPinceau.getFontMetrics(secondPinceau.getFont());
|
|
||||||
secondPinceau.drawString("erreur connection BD", (this.getWidth()/2-metrics.stringWidth("erreur connection BD")/2), (this.getHeight()-metrics.getHeight())/4*3+metrics.getAscent());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void erreur(){
|
|
||||||
this.erreur=true;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -6,7 +6,6 @@ import fr.iutfbleau.projetIHM2022FI2.Graphic.Controller.ActionListenerNouveauEtu
|
|||||||
import fr.iutfbleau.projetIHM2022FI2.Graphic.Controller.SelecteurEtudiant;
|
import fr.iutfbleau.projetIHM2022FI2.Graphic.Controller.SelecteurEtudiant;
|
||||||
import fr.iutfbleau.projetIHM2022FI2.MNP.EtudiantNP;
|
import fr.iutfbleau.projetIHM2022FI2.MNP.EtudiantNP;
|
||||||
|
|
||||||
import java.util.LinkedHashSet;
|
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import java.awt.GridLayout;
|
import java.awt.GridLayout;
|
||||||
import java.awt.Color;
|
import java.awt.Color;
|
||||||
@ -18,22 +17,23 @@ import javax.swing.JPanel;
|
|||||||
public class FenetreSelectionEtu extends JPanel{
|
public class FenetreSelectionEtu extends JPanel{
|
||||||
private Set<Etudiant> liste;
|
private Set<Etudiant> liste;
|
||||||
private Set<Etudiant> etu;
|
private Set<Etudiant> etu;
|
||||||
public FenetreSelectionEtu(Groupe g, Set<Etudiant> liste){
|
public FenetreSelectionEtu(Groupe g, Set<Etudiant> liste, boolean supression, Set<Etudiant> etu0){
|
||||||
super();
|
super();
|
||||||
this.etu=new LinkedHashSet<>();
|
this.etu=etu0;
|
||||||
Groupe promo=g.getPointPoint();
|
if(supression==true){
|
||||||
while(promo.getPointPoint()!=promo){
|
|
||||||
promo=promo.getPointPoint();
|
|
||||||
}
|
|
||||||
for(Etudiant e:promo.getEtudiants()){
|
|
||||||
this.etu.add(e);
|
|
||||||
}
|
|
||||||
for(Etudiant e:g.getEtudiants()){
|
for(Etudiant e:g.getEtudiants()){
|
||||||
this.etu.remove(e);
|
for(Etudiant et:etu){
|
||||||
|
if(e.getId()==et.getId()){
|
||||||
|
etu.remove(et);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
this.liste=liste;
|
this.liste=liste;
|
||||||
this.draw();
|
this.draw();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void addList(int index){
|
public void addList(int index){
|
||||||
int i=0;
|
int i=0;
|
||||||
for(Etudiant e:this.etu){
|
for(Etudiant e:this.etu){
|
||||||
@ -44,6 +44,7 @@ public class FenetreSelectionEtu extends JPanel{
|
|||||||
i++;
|
i++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void removeList(int index){
|
public void removeList(int index){
|
||||||
int i=0;
|
int i=0;
|
||||||
for(Etudiant e:this.etu){
|
for(Etudiant e:this.etu){
|
||||||
|
@ -40,7 +40,9 @@ public class GroupeNP implements Groupe {
|
|||||||
public GroupeNP(int id, String name, int min, int max, TypeGroupe type, Groupe pere){
|
public GroupeNP(int id, String name, int min, int max, TypeGroupe type, Groupe pere){
|
||||||
Objects.requireNonNull(name,"On ne peut pas créer un groupe dont le nom est null");
|
Objects.requireNonNull(name,"On ne peut pas créer un groupe dont le nom est null");
|
||||||
this.id=id;
|
this.id=id;
|
||||||
this.nextId++;
|
if(id>this.nextId){
|
||||||
|
this.nextId=id;
|
||||||
|
}
|
||||||
this.name=name;
|
this.name=name;
|
||||||
this.min=min;
|
this.min=min;
|
||||||
this.max=max;
|
this.max=max;
|
||||||
|
Loading…
Reference in New Issue
Block a user