Maj V1.0.6

This commit is contained in:
pablo rodriguez 2023-08-07 14:19:06 +02:00
parent e162eae002
commit 00f08babd0
9 changed files with 370 additions and 40 deletions

File diff suppressed because one or more lines are too long

View File

@ -238,11 +238,11 @@ public class Window_demarre extends JFrame {
lblCredits.setBounds(10, 10, 704, 204); lblCredits.setBounds(10, 10, 704, 204);
tabLicence.add(lblCredits); 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.setForeground(SystemColor.textHighlight);
lblVersion.setVerticalAlignment(SwingConstants.TOP); lblVersion.setVerticalAlignment(SwingConstants.TOP);
lblVersion.setHorizontalAlignment(SwingConstants.RIGHT); lblVersion.setHorizontalAlignment(SwingConstants.RIGHT);
lblVersion.setBounds(455, 6, 259, 33); lblVersion.setBounds(278, 6, 436, 33);
tabLicence.add(lblVersion); tabLicence.add(lblVersion);

View File

@ -10,6 +10,8 @@ import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Map.Entry; import java.util.Map.Entry;
import java.util.Random; import java.util.Random;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import javax.swing.Icon; import javax.swing.Icon;
import javax.swing.ImageIcon; import javax.swing.ImageIcon;
@ -42,6 +44,7 @@ public class Window_genere_groupe extends JFrame {
private JTextField textNombre_Etudiant_Groupe; private JTextField textNombre_Etudiant_Groupe;
private int nombreEtudiantDansGroupe = 30; private int nombreEtudiantDansGroupe = 30;
static JLabel lblAuteurVersion = new JLabel("<html>Pablo Rodriguez - 2023<br>Version "+ commandes.version+"</html>"); 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.setForeground(Color.BLUE);
lblNewLabel_1.setFont(new Font("Arial", Font.BOLD | Font.ITALIC, 14)); lblNewLabel_1.setFont(new Font("Arial", Font.BOLD | Font.ITALIC, 14));
lblNewLabel_1.setVerticalAlignment(SwingConstants.TOP); lblNewLabel_1.setVerticalAlignment(SwingConstants.TOP);
lblNewLabel_1.setBounds(10, 366, 441, 58); lblNewLabel_1.setBounds(10, 396, 441, 58);
getContentPane().add(lblNewLabel_1); getContentPane().add(lblNewLabel_1);
@ -203,6 +206,16 @@ public class Window_genere_groupe extends JFrame {
rdbtnAlphabetique.setBounds(670, 366, 167, 23); rdbtnAlphabetique.setBounds(670, 366, 167, 23);
getContentPane().add(rdbtnAlphabetique); 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() { rdbtnAlphabetique.addActionListener(new ActionListener() {
@Override @Override
public void actionPerformed(ActionEvent e) { public void actionPerformed(ActionEvent e) {
@ -249,27 +262,39 @@ public class Window_genere_groupe extends JFrame {
break; 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) { if(!verrouillageGroupe) {
int choice = showCustomDialog(); int choice = showCustomDialog();
if (choice == JOptionPane.YES_OPTION) { if (choice == JOptionPane.YES_OPTION) {
if(rdbtnAleatoire.isSelected()) { 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(); dispose();
} }
if(rdbtnAlphabetique.isSelected()) { 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(); dispose();
} }
} }
}else { }else {
if(rdbtnAleatoire.isSelected()) { 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()) { 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(); dispose();
} }
@ -289,7 +314,7 @@ public class Window_genere_groupe extends JFrame {
* @param patternGroupe * @param patternGroupe
* @param tailleDesGroupes * @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")); noeud nFormation = commandes.nBase.getChild(instance.getTable().getAttributes("Formation"));
int compteurEtudiantInsereDansGroupe=0; int compteurEtudiantInsereDansGroupe=0;
List<noeud> tableChild = instance.getTable().getChildren(); List<noeud> tableChild = instance.getTable().getChildren();
@ -304,14 +329,18 @@ public class Window_genere_groupe extends JFrame {
if(patternGroupe.contains("@")) { if(patternGroupe.contains("@")) {
String patternCopy = new String(patternGroupe); String patternCopy = new String(patternGroupe);
Random random = new Random(); Random random = new Random();
String caractere = "A"; String caractereDebut = "A";
String str = patternCopy.replaceAll("@", caractere); if(!firstLettreChiffre.isEmpty()) {
if(verifieLettre(firstLettreChiffre)) caractereDebut = firstLettreChiffre;
}
String str = patternCopy.replaceAll("@", caractereDebut);
for (noeud child : tableChild) { for (noeud child : tableChild) {
if(!verrouillageGroupe || child.getAttributes(nameGroupe).isEmpty()) { if(!verrouillageGroupe || child.getAttributes(nameGroupe).isEmpty()) {
do { do {
char randomChar = (char) ('A' + random.nextInt(nombreDeGroupes)); char randomChar = (char) ( caractereDebut.toCharArray()[0] + random.nextInt(nombreDeGroupes));
caractere = String.valueOf(randomChar); String caractere = String.valueOf(randomChar);
patternCopy = new String(patternGroupe); patternCopy = new String(patternGroupe);
str = patternCopy.replaceAll("@", caractere); str = patternCopy.replaceAll("@", caractere);
}while(nFormation.getNumberAttribut(nameGroupe, str)>=tailleDesGroupes); }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); sauvegardeXMLBase.save(commandes.nBase,saveType.SANS_MESSAGE,null);
instance.majFiltres(); instance.majFiltres();
}else if (patternGroupe.contains("#")) { }else if (patternGroupe.contains("#")) {
patternGroupe = patternGroupe.replaceAll("#", ""); String patternCopy = new String(patternGroupe);
int debut = 1;
Random random = new Random(); 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) { for (noeud child : tableChild) {
if(!verrouillageGroupe || child.getAttributes(nameGroupe).isEmpty()) { if(!verrouillageGroupe || child.getAttributes(nameGroupe).isEmpty()) {
do { do {
int randomInteger = (1 + random.nextInt(nombreDeGroupes)); int randomInteger = (debut + random.nextInt(nombreDeGroupes));
str = patternGroupe + String.valueOf(randomInteger); patternCopy = new String(patternGroupe);
str = patternCopy.replaceAll("#",String.valueOf(randomInteger));
}while(nFormation.getNumberAttribut(nameGroupe, str)>=tailleDesGroupes); }while(nFormation.getNumberAttribut(nameGroupe, str)>=tailleDesGroupes);
compteurEtudiantInsereDansGroupe++; compteurEtudiantInsereDansGroupe++;
nFormation.getChild(child.getName()).setAttribut(nameGroupe, str); nFormation.getChild(child.getName()).setAttribut(nameGroupe, str);
@ -366,7 +407,7 @@ public class Window_genere_groupe extends JFrame {
* @param tailleDesGroupes * @param tailleDesGroupes
* @param verrouillageGroupe * @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")); noeud nFormation = commandes.nBase.getChild(instance.getTable().getAttributes("Formation"));
int compteurEtudiantInsereDansGroupe =0; int compteurEtudiantInsereDansGroupe =0;
List<noeud> tableChild = instance.getTable().getChildren(); List<noeud> tableChild = instance.getTable().getChildren();
@ -380,8 +421,12 @@ public class Window_genere_groupe extends JFrame {
if(patternGroupe.contains("@")) { if(patternGroupe.contains("@")) {
String patternCopy = new String(patternGroupe); String patternCopy = new String(patternGroupe);
int nombreDeGroupes=0; int nombreDeGroupes=0;
String caractere = "A"; String caractereDebut = "A";
String str = patternCopy.replaceAll("@", caractere); if(!firstLettreChiffre.isEmpty()) {
if(verifieLettre(firstLettreChiffre)) caractereDebut = firstLettreChiffre;
}
String str = patternCopy.replaceAll("@", caractereDebut);
int compteur = 0; int compteur = 0;
for (noeud child : tableChild) { for (noeud child : tableChild) {
//Groupes non verrouillés //Groupes non verrouillés
@ -389,7 +434,7 @@ public class Window_genere_groupe extends JFrame {
if(compteur==tailleDesGroupes) { if(compteur==tailleDesGroupes) {
compteur = 0; compteur = 0;
nombreDeGroupes++; nombreDeGroupes++;
caractere = String.valueOf( (char) ('A' + nombreDeGroupes)); String caractere = String.valueOf( (char) (caractereDebut.toCharArray()[0] + nombreDeGroupes));
patternCopy = new String(patternGroupe); patternCopy = new String(patternGroupe);
str = patternCopy.replaceAll("@", caractere); str = patternCopy.replaceAll("@", caractere);
} }
@ -402,7 +447,7 @@ public class Window_genere_groupe extends JFrame {
if(nombreGroupeDejaPresent>=tailleDesGroupes) { if(nombreGroupeDejaPresent>=tailleDesGroupes) {
do { do {
nombreDeGroupes++; nombreDeGroupes++;
caractere = String.valueOf((char) ('A' + nombreDeGroupes)); String caractere = String.valueOf((char) (caractereDebut.toCharArray()[0] + nombreDeGroupes));
patternCopy = new String(patternGroupe); patternCopy = new String(patternGroupe);
str = patternCopy.replaceAll("@", caractere); str = patternCopy.replaceAll("@", caractere);
}while(nFormation.getNumberAttribut(nameGroupe, str)>=tailleDesGroupes); }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); sauvegardeXMLBase.save(commandes.nBase,saveType.SANS_MESSAGE,null);
instance.majFiltres(); instance.majFiltres();
}else if (patternGroupe.contains("#")) { }else if (patternGroupe.contains("#")) {
patternGroupe = patternGroupe.replaceAll("#", ""); String patternCopy = new String(patternGroupe);
int nombreDeGroupes = 1; int nombreDeGroupes = 1;
int compteur = 0; 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) { for (noeud child : tableChild) {
if(!verrouillageGroupe) { if(!verrouillageGroupe) {
if(compteur==tailleDesGroupes) { if(compteur==tailleDesGroupes) {
compteur = 0; compteur = 0;
nombreDeGroupes++; nombreDeGroupes++;
str = patternGroupe + nombreDeGroupes; patternCopy = new String(patternGroupe);
str = patternCopy.replaceAll("#", String.valueOf(nombreDeGroupes));
} }
compteur++; compteur++;
compteurEtudiantInsereDansGroupe++; compteurEtudiantInsereDansGroupe++;
@ -434,7 +493,8 @@ public class Window_genere_groupe extends JFrame {
if(nombreGroupeDejaPresent>=tailleDesGroupes) { if(nombreGroupeDejaPresent>=tailleDesGroupes) {
do { do {
nombreDeGroupes++; nombreDeGroupes++;
str = patternGroupe + nombreDeGroupes; patternCopy = new String(patternGroupe);
str = patternCopy.replaceAll("#", String.valueOf(nombreDeGroupes));
}while(nFormation.getNumberAttribut(nameGroupe, str)>=tailleDesGroupes); }while(nFormation.getNumberAttribut(nameGroupe, str)>=tailleDesGroupes);
} }
compteurEtudiantInsereDansGroupe++; compteurEtudiantInsereDansGroupe++;
@ -517,6 +577,17 @@ public class Window_genere_groupe extends JFrame {
int optionType = JOptionPane.YES_NO_OPTION; int optionType = JOptionPane.YES_NO_OPTION;
Icon icon = new ImageIcon(Window_demarre.class.getResource("/resources/Danger.png")); 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); 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); 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();
}
} }

View File

@ -24,6 +24,8 @@ import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Random; import java.util.Random;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import javax.swing.BoxLayout; import javax.swing.BoxLayout;
import javax.swing.ImageIcon; import javax.swing.ImageIcon;
@ -92,6 +94,8 @@ public class Window_gestionnaire extends JFrame {
private JComboBox<String> cGroupePrincipal; private JComboBox<String> cGroupePrincipal;
private JComboBox<String> cGroupeProjet; private JComboBox<String> cGroupeProjet;
private JComboBox<String> cRegime; private JComboBox<String> cRegime;
private JComboBox<String> cCovoiturage
;
private JCheckBoxMenuItem chckToutesLesColonnes = new JCheckBoxMenuItem("Affiche toutes les colonnes"); private JCheckBoxMenuItem chckToutesLesColonnes = new JCheckBoxMenuItem("Affiche toutes les colonnes");
private JCheckBoxMenuItem chckGroupeTD = new JCheckBoxMenuItem("Groupe TD"); private JCheckBoxMenuItem chckGroupeTD = new JCheckBoxMenuItem("Groupe TD");
@ -201,16 +205,17 @@ public class Window_gestionnaire extends JFrame {
scrollPaneTable.setColumnHeaderView(chckbxmntmNewCheckItem); scrollPaneTable.setColumnHeaderView(chckbxmntmNewCheckItem);
JPanel panelFiltre = new JPanel(); JPanel panelFiltre = new JPanel();
panelFiltre.setPreferredSize(new Dimension(1900, 128)); panelFiltre.setPreferredSize(new Dimension(1900, 120));
panelFiltre.setBackground(Color.gray); panelFiltre.setBackground(Color.gray);
GridBagLayout gbl_panelFiltre = new GridBagLayout(); 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.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.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, 0.0, 0.0, 0.0}; gbl_panelFiltre.rowWeights = new double[]{0.0, 1.0, 0.0, 1.0};
panelFiltre.setLayout(gbl_panelFiltre); panelFiltre.setLayout(gbl_panelFiltre);
JLabel lblYears = new JLabel("Année"); JLabel lblYears = new JLabel("Année");
lblYears.setFont(new Font("Tahoma", Font.BOLD, 12)); lblYears.setFont(new Font("Tahoma", Font.BOLD, 12));
lblYears.setHorizontalAlignment(SwingConstants.LEFT); lblYears.setHorizontalAlignment(SwingConstants.LEFT);
@ -316,6 +321,7 @@ public class Window_gestionnaire extends JFrame {
cLangueLV1.setSelectedIndex(0); cLangueLV1.setSelectedIndex(0);
cLangueLV2.setSelectedIndex(0); cLangueLV2.setSelectedIndex(0);
cRegime.setSelectedIndex(0); cRegime.setSelectedIndex(0);
cCovoiturage.setSelectedIndex(0);
nStudent = null; nStudent = null;
majTable(); majTable();
} }
@ -547,6 +553,17 @@ public class Window_gestionnaire extends JFrame {
gbc_lblRegime.gridx = 7; gbc_lblRegime.gridx = 7;
gbc_lblRegime.gridy = 2; gbc_lblRegime.gridy = 2;
panelFiltre.add(lblRegime, gbc_lblRegime); 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(); GridBagConstraints gbc_cFormations = new GridBagConstraints();
gbc_cFormations.gridwidth = 2; gbc_cFormations.gridwidth = 2;
@ -558,7 +575,7 @@ public class Window_gestionnaire extends JFrame {
JPanel panelNorth = new JPanel(); JPanel panelNorth = new JPanel();
contentPane.add(panelNorth, BorderLayout.NORTH); contentPane.add(panelNorth, BorderLayout.NORTH);
panelNorth.setLayout(new BorderLayout(0, 0)); panelNorth.setLayout(new BorderLayout(0, 2));
JMenuBar menuBar = new JMenuBar(); 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); JScrollPane scrollPaneFiltre = new JScrollPane(panelFiltre);
@ -1024,7 +1055,7 @@ public class Window_gestionnaire extends JFrame {
cLangueLV2 = new JComboBox<String>(); cLangueLV2 = new JComboBox<String>();
GridBagConstraints gbc_cLangueLV2 = new GridBagConstraints(); GridBagConstraints gbc_cLangueLV2 = new GridBagConstraints();
gbc_cLangueLV2.insets = new Insets(0, 0, 5, 5); 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.gridx = 3;
gbc_cLangueLV2.gridy = 3; gbc_cLangueLV2.gridy = 3;
panelFiltre.add(cLangueLV2, gbc_cLangueLV2); panelFiltre.add(cLangueLV2, gbc_cLangueLV2);
@ -1070,7 +1101,7 @@ public class Window_gestionnaire extends JFrame {
GridBagConstraints gbc_cGroupeTP = new GridBagConstraints(); GridBagConstraints gbc_cGroupeTP = new GridBagConstraints();
gbc_cGroupeTP.insets = new Insets(0, 0, 5, 5); 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.gridx = 5;
gbc_cGroupeTP.gridy = 3; gbc_cGroupeTP.gridy = 3;
panelFiltre.add(cGroupeTP, gbc_cGroupeTP); 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(); JPanel panelSouth = new JPanel();
panelSouth.setPreferredSize(new Dimension(1920, 60)); panelSouth.setPreferredSize(new Dimension(1920, 60));
panelSouth.setBackground(Color.gray); panelSouth.setBackground(Color.gray);
@ -1236,6 +1284,7 @@ public class Window_gestionnaire extends JFrame {
String selectedGroupePrincipal = null; String selectedGroupePrincipal = null;
String selectedGroupeProjet = null; String selectedGroupeProjet = null;
String selectedRegime = null; String selectedRegime = null;
String selectedCovoiturage = null;
if(cGroupeTD.getItemCount()>0) selectedGroupeTD = cGroupeTD.getSelectedItem().toString(); if(cGroupeTD.getItemCount()>0) selectedGroupeTD = cGroupeTD.getSelectedItem().toString();
if(cGroupeTP.getItemCount()>0) selectedGroupeTP = cGroupeTP.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(cGroupePrincipal.getItemCount()>0) selectedGroupePrincipal = cGroupePrincipal.getSelectedItem().toString();
if(cGroupeProjet.getItemCount()>0) selectedGroupeProjet = cGroupeProjet.getSelectedItem().toString(); if(cGroupeProjet.getItemCount()>0) selectedGroupeProjet = cGroupeProjet.getSelectedItem().toString();
if(cRegime.getItemCount()>0) selectedRegime = cRegime.getSelectedItem().toString(); if(cRegime.getItemCount()>0) selectedRegime = cRegime.getSelectedItem().toString();
if(cCovoiturage.getItemCount()>0) selectedCovoiturage = cCovoiturage.getSelectedItem().toString();
ignoreComboChange=true; ignoreComboChange=true;
cGroupeTD.removeAllItems(); cGroupeTD.removeAllItems();
@ -1263,6 +1313,7 @@ public class Window_gestionnaire extends JFrame {
cGroupePrincipal.removeAllItems(); cGroupePrincipal.removeAllItems();
cGroupeProjet.removeAllItems(); cGroupeProjet.removeAllItems();
cRegime.removeAllItems(); cRegime.removeAllItems();
cCovoiturage.removeAllItems();
ignoreComboChange=false; ignoreComboChange=false;
@ -1278,6 +1329,7 @@ public class Window_gestionnaire extends JFrame {
List<String> lGroupePrincipal = new ArrayList<String>(); List<String> lGroupePrincipal = new ArrayList<String>();
List<String> lGroupeProjet = new ArrayList<String>(); List<String> lGroupeProjet = new ArrayList<String>();
List<String> lRegime = new ArrayList<String>(); List<String> lRegime = new ArrayList<String>();
List<String> lCovoiturage = new ArrayList<String>();
String pasChoisi = " - "; String pasChoisi = " - ";
@ -1297,6 +1349,7 @@ public class Window_gestionnaire extends JFrame {
String GroupePrincipal = nStudent.getAttributes("Groupe_Principal"); String GroupePrincipal = nStudent.getAttributes("Groupe_Principal");
String GroupeProjet = nStudent.getAttributes("Groupe_Projet"); String GroupeProjet = nStudent.getAttributes("Groupe_Projet");
String Regime = nStudent.getAttributes("Regime"); String Regime = nStudent.getAttributes("Regime");
String Covoiturage = nStudent.getAttributes("Etudiant_Covoiturage");
boolean isOnlySpaces = GroupeTD.matches("\\s+"); boolean isOnlySpaces = GroupeTD.matches("\\s+");
if(!lGroupeTD.contains(GroupeTD) && !isOnlySpaces) { if(!lGroupeTD.contains(GroupeTD) && !isOnlySpaces) {
@ -1345,7 +1398,11 @@ public class Window_gestionnaire extends JFrame {
isOnlySpaces = Regime.matches("\\s+"); isOnlySpaces = Regime.matches("\\s+");
if(!lRegime.contains(Regime) && !isOnlySpaces) { if(!lRegime.contains(Regime) && !isOnlySpaces) {
lRegime.add(Regime); 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)) { if(selectedRegime!=null)if(lRegime.contains(selectedRegime)) {
cRegime.setSelectedItem(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; ignoreComboChange = false;
majTable(); majTable();
} }
@ -1486,6 +1553,7 @@ public class Window_gestionnaire extends JFrame {
String GroupePrincipal = (String) cGroupePrincipal.getSelectedItem(); String GroupePrincipal = (String) cGroupePrincipal.getSelectedItem();
String GroupeProjet = (String) cGroupeProjet.getSelectedItem(); String GroupeProjet = (String) cGroupeProjet.getSelectedItem();
String Regime = (String) cRegime.getSelectedItem(); String Regime = (String) cRegime.getSelectedItem();
String Covoiturage = (String) cCovoiturage.getSelectedItem();
// le noeud table // le noeud table
nTable = new noeud("Table"); nTable = new noeud("Table");
@ -1526,6 +1594,9 @@ public class Window_gestionnaire extends JFrame {
nTable.setAttribut("Regime", Regime); nTable.setAttribut("Regime", Regime);
nTable.setAttribut("isRegime", "true"); nTable.setAttribut("isRegime", "true");
if(Regime.equals(pasChoisi) || Regime.isEmpty()) nTable.setAttribut("isRegime", "false"); 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<>(); Map<String, Integer> headTable = new HashMap<>();
@ -1598,7 +1669,8 @@ public class Window_gestionnaire extends JFrame {
if(!searchStudent || (searchStudent&&containNameStudent)) { 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("Regime").equals(Regime) || Regime.equals(pasChoisi) )
&& ( nStudent.getAttributes("Groupe_Projet").equals(GroupeProjet) || GroupeProjet.equals(pasChoisi) ) && ( nStudent.getAttributes("Groupe_Projet").equals(GroupeProjet) || GroupeProjet.equals(pasChoisi) )
&& ( nStudent.getAttributes("Groupe_Principal").equals(GroupePrincipal) || GroupePrincipal.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))) { 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); JOptionPane.showMessageDialog(null, "<html><h2>Les groupes de L.V.2 sont verrouillés.</h2></html>", "Erreur", JOptionPane.ERROR_MESSAGE);
modificationInterdite=true; 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) { if(modificationInterdite) {
majFiltres(); majFiltres();
return; return;
} }
String value = (String) table.getValueAt(row, column);
// Obtenir l'indice de la colonne "Individu_-_Code_Etudiant" // Obtenir l'indice de la colonne "Individu_-_Code_Etudiant"
int columnIndex = table.getColumnModel().getColumnIndex(commandes.nomColonneCodeEtudiant); int columnIndex = table.getColumnModel().getColumnIndex(commandes.nomColonneCodeEtudiant);
String numeroEtudiant = (String) table.getModel().getValueAt(row, columnIndex); String numeroEtudiant = (String) table.getModel().getValueAt(row, columnIndex);
@ -2327,4 +2425,88 @@ public class Window_gestionnaire extends JFrame {
majAffichageDesChck(); 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);
}
}
} }

View File

@ -480,6 +480,8 @@ public class VersionChecker {
nFormation.setAttribut("pattern_Groupe_TP", "groupe TP n°#"); nFormation.setAttribut("pattern_Groupe_TP", "groupe TP n°#");
nFormation.setAttribut("nombre_Student_Groupe_TP", "24"); nFormation.setAttribut("nombre_Student_Groupe_TP", "24");
nFormation.setAttribut("aleatoire_Groupe_TP", "false"); nFormation.setAttribut("aleatoire_Groupe_TP", "false");
} }
return nBase; return nBase;
} }

View File

@ -12,7 +12,7 @@ public class commandes {
public static noeud nBase = null; // La base de données sous forme de noeud. 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 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 à l'inscription des étudaints. // Les colonnes obligatoires à l'inscription des étudaints.
// nom des colonnes après traitement des caractères (Accès à la base XML) // nom des colonnes après traitement des caractères (Accès à la base XML)

View File

@ -782,6 +782,55 @@ public class noeud implements Cloneable{
return null; 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> * Retourne le premier noeud dont le contenu textuel est identique au String searchContent.<br>
* Si ne trouve pas retourne un null. * Si ne trouve pas retourne un null.

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB