diff --git a/base/base.xml b/base/base.xml index c999407..95aea02 100644 --- a/base/base.xml +++ b/base/base.xml @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/src/Windows/Window_demarre.java b/src/Windows/Window_demarre.java index 8e32827..627d1e5 100644 --- a/src/Windows/Window_demarre.java +++ b/src/Windows/Window_demarre.java @@ -238,11 +238,11 @@ public class Window_demarre extends JFrame { lblCredits.setBounds(10, 10, 704, 204); tabLicence.add(lblCredits); - JLabel lblVersion = new JLabel("

Version : 1.0.6 - juillet 2023

"); + JLabel lblVersion = new JLabel("

Version : "+ commandes.version + " - " + commandes.dateversion+"

"); 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); diff --git a/src/Windows/Window_genere_groupe.java b/src/Windows/Window_genere_groupe.java index 67ce75b..630f2cf 100644 --- a/src/Windows/Window_genere_groupe.java +++ b/src/Windows/Window_genere_groupe.java @@ -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("Pablo Rodriguez - 2023
Version "+ commandes.version+""); + 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, "Ce n'est pas possible dans le pattern" + + "d'avoir @ et #.","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 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 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 = "Il y a une erreur entre le pattern (@ ou #), et la valeur de début.

" + + "Si c'est un chiffre ou un nombre (#), saisissez une valeur numérique entière.
" + + "Si c'est une lettre (@), saisissez une lettre alphabétique.
"; + 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(); + } + } + diff --git a/src/Windows/Window_gestionnaire.java b/src/Windows/Window_gestionnaire.java index 02037b9..85e7aeb 100644 --- a/src/Windows/Window_gestionnaire.java +++ b/src/Windows/Window_gestionnaire.java @@ -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 cGroupePrincipal; private JComboBox cGroupeProjet; private JComboBox cRegime; + private JComboBox 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("Verification des covoiturages
dans cette formation"); + 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(); 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(); + 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 lGroupePrincipal = new ArrayList(); List lGroupeProjet = new ArrayList(); List lRegime = new ArrayList(); + List lCovoiturage = new ArrayList(); 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 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, "

Les groupes de L.V.2 sont verrouillés.

", "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, "

Création d'un code de covoiturage

" + + "

Pour créer un code de covoiturage, veuillez respecter le pattern ci-dessous :

" + + "

Le code \"cov\" doit être suivi d'un nombre, puis d'un tiret, et enfin d'au moins un code de groupe parmi :
" + + "TOUS, PRIN, TD, TP, INFO, DOC, LV1, LV2, PROJET.


" + + "

Exemple : cov 51 - LV1 TD

" + + "

Ce code indique que les étudiants doivent être dans les mêmes groupes de LV1 et de TD.

" + + "

Si vous utilisez le code de groupe \"TOUS\", alors les étudiants doivent être dans les mêmes groupes partout à la fois.

" + + "\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 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 + "
"); + } + } + } + } + } + + } + + if(sb.toString().isEmpty()) { + JOptionPane.showMessageDialog(null, "Pas de souci avec les covoiturages."); + }else { + String message = "" + sb.toString() + ""; + JOptionPane.showMessageDialog(null, message); + } + + } + + + + + + } diff --git a/src/gestion_version/VersionChecker.java b/src/gestion_version/VersionChecker.java index 0a5c90e..0178fc1 100644 --- a/src/gestion_version/VersionChecker.java +++ b/src/gestion_version/VersionChecker.java @@ -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; } diff --git a/src/outils/commandes.java b/src/outils/commandes.java index fc44c47..cf2a30e 100644 --- a/src/outils/commandes.java +++ b/src/outils/commandes.java @@ -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) diff --git a/src/outils/noeud.java b/src/outils/noeud.java index a2db285..756e31f 100644 --- a/src/outils/noeud.java +++ b/src/outils/noeud.java @@ -782,6 +782,55 @@ public class noeud implements Cloneable{ return null; } + /** + * Retourne le premier noeud ayant l'attibut nameAttribut et ayant la valeur value.
+ * @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.
+ * @param nameAttribut + * @param value + * @return + */ + public List getChildrenContainAttributeWithValue(String nameAttribut, String value) { + List 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 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.
* Si ne trouve pas retourne un null. diff --git a/src/resources/covoiturage.png b/src/resources/covoiturage.png new file mode 100644 index 0000000..48ad656 Binary files /dev/null and b/src/resources/covoiturage.png differ diff --git a/src/resources/rien_compris.png b/src/resources/rien_compris.png new file mode 100644 index 0000000..f720603 Binary files /dev/null and b/src/resources/rien_compris.png differ