Maj V1.0.6
This commit is contained in:
parent
e162eae002
commit
00f08babd0
File diff suppressed because one or more lines are too long
@ -238,11 +238,11 @@ public class Window_demarre extends JFrame {
|
||||
lblCredits.setBounds(10, 10, 704, 204);
|
||||
tabLicence.add(lblCredits);
|
||||
|
||||
JLabel lblVersion = new JLabel("<html><h2>Version : 1.0.6 - juillet 2023</h2></html>");
|
||||
JLabel lblVersion = new JLabel("<html><h2>Version : "+ commandes.version + " - " + commandes.dateversion+"</h2></html>");
|
||||
lblVersion.setForeground(SystemColor.textHighlight);
|
||||
lblVersion.setVerticalAlignment(SwingConstants.TOP);
|
||||
lblVersion.setHorizontalAlignment(SwingConstants.RIGHT);
|
||||
lblVersion.setBounds(455, 6, 259, 33);
|
||||
lblVersion.setBounds(278, 6, 436, 33);
|
||||
tabLicence.add(lblVersion);
|
||||
|
||||
|
||||
|
@ -10,6 +10,8 @@ import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Map.Entry;
|
||||
import java.util.Random;
|
||||
import java.util.regex.Matcher;
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
import javax.swing.Icon;
|
||||
import javax.swing.ImageIcon;
|
||||
@ -42,6 +44,7 @@ public class Window_genere_groupe extends JFrame {
|
||||
private JTextField textNombre_Etudiant_Groupe;
|
||||
private int nombreEtudiantDansGroupe = 30;
|
||||
static JLabel lblAuteurVersion = new JLabel("<html>Pablo Rodriguez - 2023<br>Version "+ commandes.version+"</html>");
|
||||
private JTextField textFirstLettreChiffre;
|
||||
|
||||
|
||||
|
||||
@ -148,7 +151,7 @@ public class Window_genere_groupe extends JFrame {
|
||||
lblNewLabel_1.setForeground(Color.BLUE);
|
||||
lblNewLabel_1.setFont(new Font("Arial", Font.BOLD | Font.ITALIC, 14));
|
||||
lblNewLabel_1.setVerticalAlignment(SwingConstants.TOP);
|
||||
lblNewLabel_1.setBounds(10, 366, 441, 58);
|
||||
lblNewLabel_1.setBounds(10, 396, 441, 58);
|
||||
getContentPane().add(lblNewLabel_1);
|
||||
|
||||
|
||||
@ -203,6 +206,16 @@ public class Window_genere_groupe extends JFrame {
|
||||
rdbtnAlphabetique.setBounds(670, 366, 167, 23);
|
||||
getContentPane().add(rdbtnAlphabetique);
|
||||
|
||||
JLabel lblNewLabel_2 = new JLabel("À partir de ...");
|
||||
lblNewLabel_2.setFont(new Font("Arial", Font.BOLD, 13));
|
||||
lblNewLabel_2.setBounds(66, 365, 94, 20);
|
||||
getContentPane().add(lblNewLabel_2);
|
||||
|
||||
textFirstLettreChiffre = new JTextField();
|
||||
textFirstLettreChiffre.setBounds(170, 357, 86, 28);
|
||||
getContentPane().add(textFirstLettreChiffre);
|
||||
textFirstLettreChiffre.setColumns(2);
|
||||
|
||||
rdbtnAlphabetique.addActionListener(new ActionListener() {
|
||||
@Override
|
||||
public void actionPerformed(ActionEvent e) {
|
||||
@ -249,27 +262,39 @@ public class Window_genere_groupe extends JFrame {
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
|
||||
if(!textFirstLettreChiffre.getText().isEmpty()) {
|
||||
boolean erreur=false;
|
||||
if(textPattern_Groupe.getText().contains("@") && verifieChiffre(textFirstLettreChiffre.getText()) ) erreur =true;
|
||||
if(textPattern_Groupe.getText().contains("#") && verifieLettre(textFirstLettreChiffre.getText()) ) erreur =true;
|
||||
if(erreur) {
|
||||
showCustomDialogErreurPattern();
|
||||
return ;
|
||||
}
|
||||
if(textPattern_Groupe.getText().contains("@") && textPattern_Groupe.getText().contains("#")) {
|
||||
JOptionPane.showMessageDialog(null, "<html>Ce n'est pas possible dans le pattern<r>"
|
||||
+ "d'avoir @ et #.</html>","Erreur", JOptionPane.ERROR_MESSAGE);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
if(!verrouillageGroupe) {
|
||||
int choice = showCustomDialog();
|
||||
if (choice == JOptionPane.YES_OPTION) {
|
||||
if(rdbtnAleatoire.isSelected()) {
|
||||
generateAleatoireGroupe(nameGroupe, instance, textPattern_Groupe.getText(), Integer.parseInt(textNombre_Etudiant_Groupe.getText()),verrouillageGroupe);
|
||||
generateAleatoireGroupe(nameGroupe, instance, textPattern_Groupe.getText(), Integer.parseInt(textNombre_Etudiant_Groupe.getText()),verrouillageGroupe, textFirstLettreChiffre.getText());
|
||||
dispose();
|
||||
}
|
||||
if(rdbtnAlphabetique.isSelected()) {
|
||||
generateAlphabetiqueGroupe(nameGroupe, instance, textPattern_Groupe.getText(), Integer.parseInt(textNombre_Etudiant_Groupe.getText()),verrouillageGroupe);
|
||||
generateAlphabetiqueGroupe(nameGroupe, instance, textPattern_Groupe.getText(), Integer.parseInt(textNombre_Etudiant_Groupe.getText()),verrouillageGroupe, textFirstLettreChiffre.getText());
|
||||
dispose();
|
||||
}
|
||||
}
|
||||
}else {
|
||||
if(rdbtnAleatoire.isSelected()) {
|
||||
generateAleatoireGroupe(nameGroupe, instance, textPattern_Groupe.getText(), Integer.parseInt(textNombre_Etudiant_Groupe.getText()),verrouillageGroupe);
|
||||
generateAleatoireGroupe(nameGroupe, instance, textPattern_Groupe.getText(), Integer.parseInt(textNombre_Etudiant_Groupe.getText()),verrouillageGroupe, textFirstLettreChiffre.getText());
|
||||
}
|
||||
if(rdbtnAlphabetique.isSelected()) {
|
||||
generateAlphabetiqueGroupe(nameGroupe, instance, textPattern_Groupe.getText(), Integer.parseInt(textNombre_Etudiant_Groupe.getText()),verrouillageGroupe);
|
||||
generateAlphabetiqueGroupe(nameGroupe, instance, textPattern_Groupe.getText(), Integer.parseInt(textNombre_Etudiant_Groupe.getText()),verrouillageGroupe, textFirstLettreChiffre.getText());
|
||||
}
|
||||
dispose();
|
||||
}
|
||||
@ -289,7 +314,7 @@ public class Window_genere_groupe extends JFrame {
|
||||
* @param patternGroupe
|
||||
* @param tailleDesGroupes
|
||||
*/
|
||||
private static void generateAleatoireGroupe(String nameGroupe,Window_gestionnaire instance, String patternGroupe, Integer tailleDesGroupes,boolean verrouillageGroupe) {
|
||||
private static void generateAleatoireGroupe(String nameGroupe,Window_gestionnaire instance, String patternGroupe, Integer tailleDesGroupes,boolean verrouillageGroupe,String firstLettreChiffre) {
|
||||
noeud nFormation = commandes.nBase.getChild(instance.getTable().getAttributes("Formation"));
|
||||
int compteurEtudiantInsereDansGroupe=0;
|
||||
List<noeud> tableChild = instance.getTable().getChildren();
|
||||
@ -304,14 +329,18 @@ public class Window_genere_groupe extends JFrame {
|
||||
if(patternGroupe.contains("@")) {
|
||||
String patternCopy = new String(patternGroupe);
|
||||
Random random = new Random();
|
||||
String caractere = "A";
|
||||
String str = patternCopy.replaceAll("@", caractere);
|
||||
String caractereDebut = "A";
|
||||
if(!firstLettreChiffre.isEmpty()) {
|
||||
if(verifieLettre(firstLettreChiffre)) caractereDebut = firstLettreChiffre;
|
||||
}
|
||||
|
||||
String str = patternCopy.replaceAll("@", caractereDebut);
|
||||
|
||||
for (noeud child : tableChild) {
|
||||
if(!verrouillageGroupe || child.getAttributes(nameGroupe).isEmpty()) {
|
||||
do {
|
||||
char randomChar = (char) ('A' + random.nextInt(nombreDeGroupes));
|
||||
caractere = String.valueOf(randomChar);
|
||||
char randomChar = (char) ( caractereDebut.toCharArray()[0] + random.nextInt(nombreDeGroupes));
|
||||
String caractere = String.valueOf(randomChar);
|
||||
patternCopy = new String(patternGroupe);
|
||||
str = patternCopy.replaceAll("@", caractere);
|
||||
}while(nFormation.getNumberAttribut(nameGroupe, str)>=tailleDesGroupes);
|
||||
@ -322,14 +351,26 @@ public class Window_genere_groupe extends JFrame {
|
||||
sauvegardeXMLBase.save(commandes.nBase,saveType.SANS_MESSAGE,null);
|
||||
instance.majFiltres();
|
||||
}else if (patternGroupe.contains("#")) {
|
||||
patternGroupe = patternGroupe.replaceAll("#", "");
|
||||
String patternCopy = new String(patternGroupe);
|
||||
int debut = 1;
|
||||
Random random = new Random();
|
||||
String str = "";
|
||||
String str = patternCopy.replaceAll("#",String.valueOf(debut));
|
||||
|
||||
|
||||
if(!firstLettreChiffre.isEmpty()) {
|
||||
if(verifieChiffre(firstLettreChiffre)) {
|
||||
patternCopy = new String(patternGroupe);
|
||||
debut = Integer.valueOf(firstLettreChiffre);
|
||||
str = patternCopy.replaceAll("#",String.valueOf(debut));
|
||||
}
|
||||
}
|
||||
|
||||
for (noeud child : tableChild) {
|
||||
if(!verrouillageGroupe || child.getAttributes(nameGroupe).isEmpty()) {
|
||||
do {
|
||||
int randomInteger = (1 + random.nextInt(nombreDeGroupes));
|
||||
str = patternGroupe + String.valueOf(randomInteger);
|
||||
int randomInteger = (debut + random.nextInt(nombreDeGroupes));
|
||||
patternCopy = new String(patternGroupe);
|
||||
str = patternCopy.replaceAll("#",String.valueOf(randomInteger));
|
||||
}while(nFormation.getNumberAttribut(nameGroupe, str)>=tailleDesGroupes);
|
||||
compteurEtudiantInsereDansGroupe++;
|
||||
nFormation.getChild(child.getName()).setAttribut(nameGroupe, str);
|
||||
@ -366,7 +407,7 @@ public class Window_genere_groupe extends JFrame {
|
||||
* @param tailleDesGroupes
|
||||
* @param verrouillageGroupe
|
||||
*/
|
||||
private static void generateAlphabetiqueGroupe(String nameGroupe, Window_gestionnaire instance, String patternGroupe, Integer tailleDesGroupes, boolean verrouillageGroupe) {
|
||||
private static void generateAlphabetiqueGroupe(String nameGroupe, Window_gestionnaire instance, String patternGroupe, Integer tailleDesGroupes, boolean verrouillageGroupe, String firstLettreChiffre) {
|
||||
noeud nFormation = commandes.nBase.getChild(instance.getTable().getAttributes("Formation"));
|
||||
int compteurEtudiantInsereDansGroupe =0;
|
||||
List<noeud> tableChild = instance.getTable().getChildren();
|
||||
@ -380,8 +421,12 @@ public class Window_genere_groupe extends JFrame {
|
||||
if(patternGroupe.contains("@")) {
|
||||
String patternCopy = new String(patternGroupe);
|
||||
int nombreDeGroupes=0;
|
||||
String caractere = "A";
|
||||
String str = patternCopy.replaceAll("@", caractere);
|
||||
String caractereDebut = "A";
|
||||
if(!firstLettreChiffre.isEmpty()) {
|
||||
if(verifieLettre(firstLettreChiffre)) caractereDebut = firstLettreChiffre;
|
||||
}
|
||||
|
||||
String str = patternCopy.replaceAll("@", caractereDebut);
|
||||
int compteur = 0;
|
||||
for (noeud child : tableChild) {
|
||||
//Groupes non verrouillés
|
||||
@ -389,7 +434,7 @@ public class Window_genere_groupe extends JFrame {
|
||||
if(compteur==tailleDesGroupes) {
|
||||
compteur = 0;
|
||||
nombreDeGroupes++;
|
||||
caractere = String.valueOf( (char) ('A' + nombreDeGroupes));
|
||||
String caractere = String.valueOf( (char) (caractereDebut.toCharArray()[0] + nombreDeGroupes));
|
||||
patternCopy = new String(patternGroupe);
|
||||
str = patternCopy.replaceAll("@", caractere);
|
||||
}
|
||||
@ -402,7 +447,7 @@ public class Window_genere_groupe extends JFrame {
|
||||
if(nombreGroupeDejaPresent>=tailleDesGroupes) {
|
||||
do {
|
||||
nombreDeGroupes++;
|
||||
caractere = String.valueOf((char) ('A' + nombreDeGroupes));
|
||||
String caractere = String.valueOf((char) (caractereDebut.toCharArray()[0] + nombreDeGroupes));
|
||||
patternCopy = new String(patternGroupe);
|
||||
str = patternCopy.replaceAll("@", caractere);
|
||||
}while(nFormation.getNumberAttribut(nameGroupe, str)>=tailleDesGroupes);
|
||||
@ -414,16 +459,30 @@ public class Window_genere_groupe extends JFrame {
|
||||
sauvegardeXMLBase.save(commandes.nBase,saveType.SANS_MESSAGE,null);
|
||||
instance.majFiltres();
|
||||
}else if (patternGroupe.contains("#")) {
|
||||
patternGroupe = patternGroupe.replaceAll("#", "");
|
||||
String patternCopy = new String(patternGroupe);
|
||||
|
||||
int nombreDeGroupes = 1;
|
||||
int compteur = 0;
|
||||
String str = patternGroupe + String.valueOf(nombreDeGroupes);
|
||||
|
||||
|
||||
String str = patternCopy.replaceAll("#", String.valueOf(nombreDeGroupes));
|
||||
|
||||
if(!firstLettreChiffre.isEmpty()) {
|
||||
if(verifieChiffre(firstLettreChiffre)) {
|
||||
patternCopy = new String(patternGroupe);
|
||||
nombreDeGroupes = Integer.valueOf(firstLettreChiffre);
|
||||
str = patternCopy.replaceAll("#", firstLettreChiffre);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
for (noeud child : tableChild) {
|
||||
if(!verrouillageGroupe) {
|
||||
if(compteur==tailleDesGroupes) {
|
||||
compteur = 0;
|
||||
nombreDeGroupes++;
|
||||
str = patternGroupe + nombreDeGroupes;
|
||||
patternCopy = new String(patternGroupe);
|
||||
str = patternCopy.replaceAll("#", String.valueOf(nombreDeGroupes));
|
||||
}
|
||||
compteur++;
|
||||
compteurEtudiantInsereDansGroupe++;
|
||||
@ -434,7 +493,8 @@ public class Window_genere_groupe extends JFrame {
|
||||
if(nombreGroupeDejaPresent>=tailleDesGroupes) {
|
||||
do {
|
||||
nombreDeGroupes++;
|
||||
str = patternGroupe + nombreDeGroupes;
|
||||
patternCopy = new String(patternGroupe);
|
||||
str = patternCopy.replaceAll("#", String.valueOf(nombreDeGroupes));
|
||||
}while(nFormation.getNumberAttribut(nameGroupe, str)>=tailleDesGroupes);
|
||||
}
|
||||
compteurEtudiantInsereDansGroupe++;
|
||||
@ -517,6 +577,17 @@ public class Window_genere_groupe extends JFrame {
|
||||
int optionType = JOptionPane.YES_NO_OPTION;
|
||||
Icon icon = new ImageIcon(Window_demarre.class.getResource("/resources/Danger.png"));
|
||||
|
||||
return JOptionPane.showOptionDialog(null, message, title, optionType, JOptionPane.QUESTION_MESSAGE, icon, null, null);
|
||||
}
|
||||
|
||||
private static int showCustomDialogErreurPattern() {
|
||||
String message = "<html>Il y a une erreur entre le pattern (@ ou #), et la valeur de début.<br><br>"
|
||||
+ "<b>Si c'est un chiffre ou un nombre (#), saisissez une valeur numérique entière.<br>"
|
||||
+ "Si c'est une lettre (@), saisissez une lettre alphabétique.</b></html>";
|
||||
String title = "Erreur";
|
||||
int optionType = JOptionPane.PLAIN_MESSAGE;
|
||||
Icon icon = new ImageIcon(Window_demarre.class.getResource("/resources/rien_compris.png"));
|
||||
|
||||
return JOptionPane.showOptionDialog(null, message, title, optionType, JOptionPane.QUESTION_MESSAGE, icon, null, null);
|
||||
}
|
||||
|
||||
@ -540,4 +611,30 @@ public class Window_genere_groupe extends JFrame {
|
||||
|
||||
return JOptionPane.showOptionDialog(null, message, title, optionType, JOptionPane.QUESTION_MESSAGE, icon, null, null);
|
||||
}
|
||||
|
||||
/**
|
||||
* Retourne TRUE si l'utilisateur à saisie une lettre de a à Z en minuscule ou majuscule.
|
||||
* @param chaine
|
||||
* @return
|
||||
*/
|
||||
public static boolean verifieLettre(String chaine) {
|
||||
// Pattern pour vérifier si la chaine contient une lettre de A à Z (majuscule ou minuscule)
|
||||
Pattern pattern = Pattern.compile("^[a-zA-Z]$");
|
||||
Matcher matcher = pattern.matcher(chaine);
|
||||
return matcher.matches();
|
||||
}
|
||||
|
||||
/**
|
||||
* Retourne TRUE si l'utilisateur à saisie un chiffre de 0 à 9.
|
||||
* @param chaine
|
||||
* @return
|
||||
*/
|
||||
public static boolean verifieChiffre(String chaine) {
|
||||
// Pattern pour vérifier si la chaine contient un chiffre de 0 à 9
|
||||
Pattern pattern = Pattern.compile("^[0-9]{1,2}$");
|
||||
Matcher matcher = pattern.matcher(chaine);
|
||||
return matcher.matches();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
@ -24,6 +24,8 @@ import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Random;
|
||||
import java.util.regex.Matcher;
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
import javax.swing.BoxLayout;
|
||||
import javax.swing.ImageIcon;
|
||||
@ -92,6 +94,8 @@ public class Window_gestionnaire extends JFrame {
|
||||
private JComboBox<String> cGroupePrincipal;
|
||||
private JComboBox<String> cGroupeProjet;
|
||||
private JComboBox<String> cRegime;
|
||||
private JComboBox<String> cCovoiturage
|
||||
;
|
||||
|
||||
private JCheckBoxMenuItem chckToutesLesColonnes = new JCheckBoxMenuItem("Affiche toutes les colonnes");
|
||||
private JCheckBoxMenuItem chckGroupeTD = new JCheckBoxMenuItem("Groupe TD");
|
||||
@ -201,16 +205,17 @@ public class Window_gestionnaire extends JFrame {
|
||||
scrollPaneTable.setColumnHeaderView(chckbxmntmNewCheckItem);
|
||||
|
||||
JPanel panelFiltre = new JPanel();
|
||||
panelFiltre.setPreferredSize(new Dimension(1900, 128));
|
||||
panelFiltre.setPreferredSize(new Dimension(1900, 120));
|
||||
panelFiltre.setBackground(Color.gray);
|
||||
|
||||
GridBagLayout gbl_panelFiltre = new GridBagLayout();
|
||||
gbl_panelFiltre.columnWidths = new int[] {160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160};
|
||||
gbl_panelFiltre.columnWidths = new int[] {160, 80, 180, 180, 180, 180, 180, 180, 180, 160};
|
||||
gbl_panelFiltre.rowHeights = new int[] {14, 32, 14, 32, 2};
|
||||
gbl_panelFiltre.columnWeights = new double[]{1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0};
|
||||
gbl_panelFiltre.rowWeights = new double[]{0.0, 0.0, 0.0, 0.0};
|
||||
gbl_panelFiltre.columnWeights = new double[]{0.5, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0};
|
||||
gbl_panelFiltre.rowWeights = new double[]{0.0, 1.0, 0.0, 1.0};
|
||||
panelFiltre.setLayout(gbl_panelFiltre);
|
||||
|
||||
|
||||
JLabel lblYears = new JLabel("Année");
|
||||
lblYears.setFont(new Font("Tahoma", Font.BOLD, 12));
|
||||
lblYears.setHorizontalAlignment(SwingConstants.LEFT);
|
||||
@ -316,6 +321,7 @@ public class Window_gestionnaire extends JFrame {
|
||||
cLangueLV1.setSelectedIndex(0);
|
||||
cLangueLV2.setSelectedIndex(0);
|
||||
cRegime.setSelectedIndex(0);
|
||||
cCovoiturage.setSelectedIndex(0);
|
||||
nStudent = null;
|
||||
majTable();
|
||||
}
|
||||
@ -547,6 +553,17 @@ public class Window_gestionnaire extends JFrame {
|
||||
gbc_lblRegime.gridx = 7;
|
||||
gbc_lblRegime.gridy = 2;
|
||||
panelFiltre.add(lblRegime, gbc_lblRegime);
|
||||
|
||||
JLabel lblCovoiturage = new JLabel("Etudiants en covoiturage");
|
||||
lblCovoiturage.setFont(new Font("Tahoma", Font.BOLD, 12));
|
||||
lblCovoiturage.setHorizontalAlignment(SwingConstants.LEFT);
|
||||
lblCovoiturage.setVerticalAlignment(SwingConstants.TOP);
|
||||
GridBagConstraints gbc_lblCovoiturage = new GridBagConstraints();
|
||||
gbc_lblCovoiturage.anchor = GridBagConstraints.WEST;
|
||||
gbc_lblCovoiturage.insets = new Insets(0, 0, 5, 5);
|
||||
gbc_lblCovoiturage.gridx = 8;
|
||||
gbc_lblCovoiturage.gridy = 2;
|
||||
panelFiltre.add(lblCovoiturage, gbc_lblCovoiturage);
|
||||
|
||||
GridBagConstraints gbc_cFormations = new GridBagConstraints();
|
||||
gbc_cFormations.gridwidth = 2;
|
||||
@ -558,7 +575,7 @@ public class Window_gestionnaire extends JFrame {
|
||||
|
||||
JPanel panelNorth = new JPanel();
|
||||
contentPane.add(panelNorth, BorderLayout.NORTH);
|
||||
panelNorth.setLayout(new BorderLayout(0, 0));
|
||||
panelNorth.setLayout(new BorderLayout(0, 2));
|
||||
|
||||
JMenuBar menuBar = new JMenuBar();
|
||||
|
||||
@ -994,6 +1011,20 @@ public class Window_gestionnaire extends JFrame {
|
||||
}
|
||||
});
|
||||
|
||||
JMenu menuCovoiturage = new JMenu("Covoiturage");
|
||||
menuCovoiturage.setFont(new Font("Arial", Font.BOLD, 16));
|
||||
menuBar.add(menuCovoiturage);
|
||||
|
||||
JMenuItem menuCovoiturageTousLesGroupes = new JMenuItem("<html>Verification des covoiturages<br>dans cette formation</html>");
|
||||
menuCovoiturageTousLesGroupes.setIcon(new ImageIcon(Window_gestionnaire.class.getResource("/resources/covoiturage.png")));
|
||||
menuCovoiturageTousLesGroupes.setFont(new Font("Arial", Font.BOLD, 14));
|
||||
menuCovoiturage.add(menuCovoiturageTousLesGroupes);
|
||||
menuCovoiturageTousLesGroupes.addActionListener(new ActionListener() {
|
||||
public void actionPerformed(ActionEvent e) {
|
||||
verificationCovoiturageTousLesGroupes();
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
|
||||
JScrollPane scrollPaneFiltre = new JScrollPane(panelFiltre);
|
||||
@ -1024,7 +1055,7 @@ public class Window_gestionnaire extends JFrame {
|
||||
cLangueLV2 = new JComboBox<String>();
|
||||
GridBagConstraints gbc_cLangueLV2 = new GridBagConstraints();
|
||||
gbc_cLangueLV2.insets = new Insets(0, 0, 5, 5);
|
||||
gbc_cLangueLV2.fill = GridBagConstraints.HORIZONTAL;
|
||||
gbc_cLangueLV2.fill = GridBagConstraints.BOTH;
|
||||
gbc_cLangueLV2.gridx = 3;
|
||||
gbc_cLangueLV2.gridy = 3;
|
||||
panelFiltre.add(cLangueLV2, gbc_cLangueLV2);
|
||||
@ -1070,7 +1101,7 @@ public class Window_gestionnaire extends JFrame {
|
||||
|
||||
GridBagConstraints gbc_cGroupeTP = new GridBagConstraints();
|
||||
gbc_cGroupeTP.insets = new Insets(0, 0, 5, 5);
|
||||
gbc_cGroupeTP.fill = GridBagConstraints.HORIZONTAL;
|
||||
gbc_cGroupeTP.fill = GridBagConstraints.BOTH;
|
||||
gbc_cGroupeTP.gridx = 5;
|
||||
gbc_cGroupeTP.gridy = 3;
|
||||
panelFiltre.add(cGroupeTP, gbc_cGroupeTP);
|
||||
@ -1109,6 +1140,23 @@ public class Window_gestionnaire extends JFrame {
|
||||
}
|
||||
});
|
||||
|
||||
cCovoiturage = new JComboBox<String>();
|
||||
GridBagConstraints gbc_cCovoiturage = new GridBagConstraints();
|
||||
gbc_cCovoiturage.insets = new Insets(0, 0, 5, 5);
|
||||
gbc_cCovoiturage.fill = GridBagConstraints.BOTH;
|
||||
gbc_cCovoiturage.gridx = 8;
|
||||
gbc_cCovoiturage.gridy = 3;
|
||||
panelFiltre.add(cCovoiturage, gbc_cCovoiturage);
|
||||
cCovoiturage.addActionListener(new ActionListener() {
|
||||
@Override
|
||||
public void actionPerformed(ActionEvent e) {
|
||||
if(!ignoreComboChange) {
|
||||
majTable();
|
||||
ignoreComboChange=false;
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
JPanel panelSouth = new JPanel();
|
||||
panelSouth.setPreferredSize(new Dimension(1920, 60));
|
||||
panelSouth.setBackground(Color.gray);
|
||||
@ -1236,6 +1284,7 @@ public class Window_gestionnaire extends JFrame {
|
||||
String selectedGroupePrincipal = null;
|
||||
String selectedGroupeProjet = null;
|
||||
String selectedRegime = null;
|
||||
String selectedCovoiturage = null;
|
||||
|
||||
if(cGroupeTD.getItemCount()>0) selectedGroupeTD = cGroupeTD.getSelectedItem().toString();
|
||||
if(cGroupeTP.getItemCount()>0) selectedGroupeTP = cGroupeTP.getSelectedItem().toString();
|
||||
@ -1249,6 +1298,7 @@ public class Window_gestionnaire extends JFrame {
|
||||
if(cGroupePrincipal.getItemCount()>0) selectedGroupePrincipal = cGroupePrincipal.getSelectedItem().toString();
|
||||
if(cGroupeProjet.getItemCount()>0) selectedGroupeProjet = cGroupeProjet.getSelectedItem().toString();
|
||||
if(cRegime.getItemCount()>0) selectedRegime = cRegime.getSelectedItem().toString();
|
||||
if(cCovoiturage.getItemCount()>0) selectedCovoiturage = cCovoiturage.getSelectedItem().toString();
|
||||
|
||||
ignoreComboChange=true;
|
||||
cGroupeTD.removeAllItems();
|
||||
@ -1263,6 +1313,7 @@ public class Window_gestionnaire extends JFrame {
|
||||
cGroupePrincipal.removeAllItems();
|
||||
cGroupeProjet.removeAllItems();
|
||||
cRegime.removeAllItems();
|
||||
cCovoiturage.removeAllItems();
|
||||
ignoreComboChange=false;
|
||||
|
||||
|
||||
@ -1278,6 +1329,7 @@ public class Window_gestionnaire extends JFrame {
|
||||
List<String> lGroupePrincipal = new ArrayList<String>();
|
||||
List<String> lGroupeProjet = new ArrayList<String>();
|
||||
List<String> lRegime = new ArrayList<String>();
|
||||
List<String> lCovoiturage = new ArrayList<String>();
|
||||
|
||||
String pasChoisi = " - ";
|
||||
|
||||
@ -1297,6 +1349,7 @@ public class Window_gestionnaire extends JFrame {
|
||||
String GroupePrincipal = nStudent.getAttributes("Groupe_Principal");
|
||||
String GroupeProjet = nStudent.getAttributes("Groupe_Projet");
|
||||
String Regime = nStudent.getAttributes("Regime");
|
||||
String Covoiturage = nStudent.getAttributes("Etudiant_Covoiturage");
|
||||
|
||||
boolean isOnlySpaces = GroupeTD.matches("\\s+");
|
||||
if(!lGroupeTD.contains(GroupeTD) && !isOnlySpaces) {
|
||||
@ -1345,7 +1398,11 @@ public class Window_gestionnaire extends JFrame {
|
||||
isOnlySpaces = Regime.matches("\\s+");
|
||||
if(!lRegime.contains(Regime) && !isOnlySpaces) {
|
||||
lRegime.add(Regime);
|
||||
}
|
||||
}
|
||||
isOnlySpaces = Covoiturage.matches("\\s+");
|
||||
if(!lCovoiturage.contains(Covoiturage) && !isOnlySpaces) {
|
||||
lCovoiturage.add(Covoiturage);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -1457,6 +1514,16 @@ public class Window_gestionnaire extends JFrame {
|
||||
if(selectedRegime!=null)if(lRegime.contains(selectedRegime)) {
|
||||
cRegime.setSelectedItem(selectedRegime);
|
||||
}
|
||||
|
||||
Collections.sort(lCovoiturage);
|
||||
cCovoiturage.addItem(pasChoisi);
|
||||
for (String option : lCovoiturage) {
|
||||
cCovoiturage.addItem(option);
|
||||
}
|
||||
if(selectedCovoiturage!=null)if(lCovoiturage.contains(selectedCovoiturage)) {
|
||||
cCovoiturage.setSelectedItem(selectedCovoiturage);
|
||||
}
|
||||
|
||||
ignoreComboChange = false;
|
||||
majTable();
|
||||
}
|
||||
@ -1486,6 +1553,7 @@ public class Window_gestionnaire extends JFrame {
|
||||
String GroupePrincipal = (String) cGroupePrincipal.getSelectedItem();
|
||||
String GroupeProjet = (String) cGroupeProjet.getSelectedItem();
|
||||
String Regime = (String) cRegime.getSelectedItem();
|
||||
String Covoiturage = (String) cCovoiturage.getSelectedItem();
|
||||
|
||||
// le noeud table
|
||||
nTable = new noeud("Table");
|
||||
@ -1526,6 +1594,9 @@ public class Window_gestionnaire extends JFrame {
|
||||
nTable.setAttribut("Regime", Regime);
|
||||
nTable.setAttribut("isRegime", "true");
|
||||
if(Regime.equals(pasChoisi) || Regime.isEmpty()) nTable.setAttribut("isRegime", "false");
|
||||
nTable.setAttribut("Covoiturage", Covoiturage);
|
||||
nTable.setAttribut("isCovoiturage", "true");
|
||||
if(Covoiturage.equals(pasChoisi) || Covoiturage.isEmpty()) nTable.setAttribut("isCovoiturage", "false");
|
||||
|
||||
|
||||
Map<String, Integer> headTable = new HashMap<>();
|
||||
@ -1598,7 +1669,8 @@ public class Window_gestionnaire extends JFrame {
|
||||
|
||||
|
||||
if(!searchStudent || (searchStudent&&containNameStudent)) {
|
||||
if( ( nStudent.getAttributes("Groupe_TP").equals(GroupeTP) || GroupeTP.equals(pasChoisi) )
|
||||
if( ( nStudent.getAttributes("Etudiant_Covoiturage").equals(Covoiturage) || Covoiturage.equals(pasChoisi) )
|
||||
&& ( nStudent.getAttributes("Groupe_TP").equals(GroupeTP) || GroupeTP.equals(pasChoisi) )
|
||||
&& ( nStudent.getAttributes("Regime").equals(Regime) || Regime.equals(pasChoisi) )
|
||||
&& ( nStudent.getAttributes("Groupe_Projet").equals(GroupeProjet) || GroupeProjet.equals(pasChoisi) )
|
||||
&& ( nStudent.getAttributes("Groupe_Principal").equals(GroupePrincipal) || GroupePrincipal.equals(pasChoisi) )
|
||||
@ -1704,15 +1776,41 @@ public class Window_gestionnaire extends JFrame {
|
||||
if( (key.equals("Groupe_LV2") && (verouillage_Groupe_LV2 || verouillage_Tous_Les_Groupes))) {
|
||||
JOptionPane.showMessageDialog(null, "<html><h2>Les groupes de L.V.2 sont verrouillés.</h2></html>", "Erreur", JOptionPane.ERROR_MESSAGE);
|
||||
modificationInterdite=true;
|
||||
}
|
||||
|
||||
|
||||
|
||||
String value = (String) table.getValueAt(row, column);
|
||||
|
||||
if( key.equals("Etudiant_Covoiturage")&&!value.isEmpty()) {
|
||||
String regex = "\\b(?:cov\\s\\d+-\\s)*(?:TOUS|PRIN|TD|TP|PROJET|INFO|DOC|LV1|LV2)\\b";
|
||||
|
||||
Pattern pattern = Pattern.compile(regex);
|
||||
Matcher matcher = pattern.matcher(value);
|
||||
|
||||
if (matcher.find()) {
|
||||
|
||||
} else {
|
||||
JOptionPane.showMessageDialog(null, "<html><h2>Création d'un code de covoiturage</h2>"
|
||||
+ "<p>Pour créer un code de covoiturage, veuillez respecter le pattern ci-dessous :</p>"
|
||||
+ "<p>Le code \"<b>cov</b>\" doit être suivi d'un nombre, puis d'un tiret, et enfin d'au moins un code de groupe parmi :<br>"
|
||||
+ "<b>TOUS, PRIN, TD, TP, INFO, DOC, LV1, LV2, PROJET</b>.</p><br>"
|
||||
+ "<p>Exemple : <b>cov 51 - LV1 TD</b></p>"
|
||||
+ "<p>Ce code indique que les étudiants doivent être dans les mêmes groupes de LV1 et de TD.</p>"
|
||||
+ "<p>Si vous utilisez le code de groupe \"<b>TOUS</b>\", alors les étudiants doivent être dans les mêmes groupes partout à la fois.</p>"
|
||||
+ "</html>\r\n"
|
||||
+ "", "Erreur", JOptionPane.ERROR_MESSAGE);
|
||||
modificationInterdite=true;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
if(modificationInterdite) {
|
||||
majFiltres();
|
||||
return;
|
||||
}
|
||||
|
||||
String value = (String) table.getValueAt(row, column);
|
||||
|
||||
// Obtenir l'indice de la colonne "Individu_-_Code_Etudiant"
|
||||
int columnIndex = table.getColumnModel().getColumnIndex(commandes.nomColonneCodeEtudiant);
|
||||
String numeroEtudiant = (String) table.getModel().getValueAt(row, columnIndex);
|
||||
@ -2327,4 +2425,88 @@ public class Window_gestionnaire extends JFrame {
|
||||
majAffichageDesChck();
|
||||
}
|
||||
|
||||
|
||||
private void verificationCovoiturageTousLesGroupes() {
|
||||
int itemCount = cCovoiturage.getItemCount();
|
||||
StringBuilder sb = new StringBuilder();
|
||||
|
||||
for (int i = 0; i < itemCount; i++) {
|
||||
|
||||
String itemCovoiturage = cCovoiturage.getItemAt(i);
|
||||
if(itemCovoiturage.isEmpty() || itemCovoiturage.equals(" - ") ) continue;
|
||||
|
||||
boolean problem = false;
|
||||
boolean first = false;
|
||||
String Groupe_Principal = "";
|
||||
String Groupe_TD = "";
|
||||
String Groupe_Informatique = "";
|
||||
String Groupe_Documentation = "";
|
||||
String Groupe_LV1 = "";
|
||||
String Groupe_LV2 = "";
|
||||
String Groupe_Projet = "";
|
||||
String Groupe_TP = "";
|
||||
|
||||
List<noeud> lChild = commandes.nBase.getChildrenContainAttributeWithValue("Etudiant_Covoiturage", itemCovoiturage);
|
||||
for(noeud child : lChild) {
|
||||
if(child.getAttributes("Covoiturage").equalsIgnoreCase("oui")){
|
||||
if(!first) {
|
||||
Groupe_Principal = child.getAttributes("Groupe_Principal");
|
||||
Groupe_TD = child.getAttributes("Groupe_TD");
|
||||
Groupe_Informatique = child.getAttributes("Groupe_Informatique");
|
||||
Groupe_Documentation = child.getAttributes("Groupe_Doc");
|
||||
Groupe_LV1 = child.getAttributes("Groupe_LV1");
|
||||
Groupe_LV2 = child.getAttributes("Groupe_LV2");
|
||||
Groupe_Projet = child.getAttributes("Groupe_Projet");
|
||||
Groupe_TP = child.getAttributes("Groupe_TP");
|
||||
first=true;
|
||||
}else {
|
||||
if(!problem) {
|
||||
if(!Groupe_Principal.equals(child.getAttributes("Groupe_Principal"))&&(itemCovoiturage.contains("PRIN")||itemCovoiturage.contains("TOUS"))) {
|
||||
problem=true;
|
||||
}
|
||||
if(!Groupe_TD.equals(child.getAttributes("Groupe_TD"))&&(itemCovoiturage.contains("TD")||itemCovoiturage.contains("TOUS"))) {
|
||||
problem=true;
|
||||
}
|
||||
if(!Groupe_Informatique.equals(child.getAttributes("Groupe_Informatique"))&&(itemCovoiturage.contains("INFO")||itemCovoiturage.contains("TOUS"))) {
|
||||
problem=true;
|
||||
}
|
||||
if(!Groupe_Documentation.equals(child.getAttributes("Groupe_Doc"))&&(itemCovoiturage.contains("DOC")||itemCovoiturage.contains("TOUS"))) {
|
||||
problem=true;
|
||||
}
|
||||
if(!Groupe_LV1.equals(child.getAttributes("Groupe_LV1"))&&(itemCovoiturage.contains("LV1")||itemCovoiturage.contains("TOUS"))) {
|
||||
problem=true;
|
||||
}
|
||||
if(!Groupe_LV2.equals(child.getAttributes("Groupe_LV2"))&&(itemCovoiturage.contains("LV2")||itemCovoiturage.contains("TOUS"))) {
|
||||
problem=true;
|
||||
}
|
||||
if(!Groupe_Projet.equals(child.getAttributes("Groupe_Projet"))&&(itemCovoiturage.contains("PROJET")||itemCovoiturage.contains("TOUS"))) {
|
||||
problem=true;
|
||||
}
|
||||
if(!Groupe_TP.equals(child.getAttributes("Groupe_TP"))&&(itemCovoiturage.contains("TP")||itemCovoiturage.contains("TOUS"))) {
|
||||
problem=true;
|
||||
}
|
||||
if(problem) {
|
||||
sb.append("Il y a un problème avec le covoiturage étudiant. Code : " + itemCovoiturage + "<br>");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
if(sb.toString().isEmpty()) {
|
||||
JOptionPane.showMessageDialog(null, "Pas de souci avec les covoiturages.");
|
||||
}else {
|
||||
String message = "<html>" + sb.toString() + "</html>";
|
||||
JOptionPane.showMessageDialog(null, message);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
@ -480,6 +480,8 @@ public class VersionChecker {
|
||||
nFormation.setAttribut("pattern_Groupe_TP", "groupe TP n°#");
|
||||
nFormation.setAttribut("nombre_Student_Groupe_TP", "24");
|
||||
nFormation.setAttribut("aleatoire_Groupe_TP", "false");
|
||||
|
||||
|
||||
}
|
||||
return nBase;
|
||||
}
|
||||
|
@ -12,7 +12,7 @@ public class commandes {
|
||||
|
||||
public static noeud nBase = null; // La base de données sous forme de noeud.
|
||||
public static String version = "1.0.6"; // La version actuelle
|
||||
public static String dateversion = "30 juillet 2023"; // La version actuelle
|
||||
public static String dateversion = "2 aout 2023"; // La version actuelle
|
||||
|
||||
// Les colonnes obligatoires dû à l'inscription des étudaints.
|
||||
// nom des colonnes après traitement des caractères (Accès à la base XML)
|
||||
|
@ -782,6 +782,55 @@ public class noeud implements Cloneable{
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Retourne le premier noeud ayant l'attibut nameAttribut et ayant la valeur value.<br>
|
||||
* @param nameAttribut
|
||||
* @param value
|
||||
* @return
|
||||
*/
|
||||
public noeud getChildContainAttributWithValue(String nameAttribut, String value){
|
||||
if(hasChildren()) {
|
||||
for (noeud child : children) {
|
||||
if(child.getAttributes().containsKey(nameAttribut)) {
|
||||
if(child.getAttributes().get(nameAttribut).equals(value)) return child;
|
||||
}
|
||||
if(child.getChildren().size()>0) {
|
||||
noeud child_child = child.getChildContainAttributWithValue(nameAttribut,value);
|
||||
if(child_child!=null) {
|
||||
if(child_child.getAttributes().get(nameAttribut).equals(value)) return child_child;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
/**
|
||||
* Retourne la liste des noeuds contenant un attribut nameAttribut ayant comme valeur value.<br>
|
||||
* @param nameAttribut
|
||||
* @param value
|
||||
* @return
|
||||
*/
|
||||
public List<noeud> getChildrenContainAttributeWithValue(String nameAttribut, String value) {
|
||||
List<noeud> ListChildren = new ArrayList<>();
|
||||
if(this.getAttributes().containsKey(nameAttribut)) {
|
||||
if(this.getAttributes().get(nameAttribut).equals(value)) ListChildren.add(this);
|
||||
}
|
||||
if(hasChildren()) {
|
||||
for (noeud child : children) {
|
||||
if(child.getAttributes().containsKey(nameAttribut)) {
|
||||
if(child.getAttributes().get(nameAttribut).equals(value)) ListChildren.add(child);
|
||||
}
|
||||
for (noeud child_child : child.getChildren()) {
|
||||
List<noeud> ListChildren2 = child_child.getChildrenContainAttributeWithValue( nameAttribut,value);
|
||||
if(ListChildren2!=null) ListChildren.addAll(ListChildren2);
|
||||
}
|
||||
}
|
||||
}
|
||||
if(ListChildren.size()>0) return ListChildren;
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Retourne le premier noeud dont le contenu textuel est identique au String searchContent.<br>
|
||||
* Si ne trouve pas retourne un null.
|
||||
|
BIN
src/resources/covoiturage.png
Normal file
BIN
src/resources/covoiturage.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 4.7 KiB |
BIN
src/resources/rien_compris.png
Normal file
BIN
src/resources/rien_compris.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 12 KiB |
Loading…
Reference in New Issue
Block a user