package client.control;

import client.Application;
import client.ApplicationHelper;
import client.model.user.Droits;
import client.model.user.Role;
import client.view.PanelGenerale;
import client.view.accueil.PanelAccueil;
import client.view.accueil.button.ButtonDisconnect;
import client.view.accueil.button.ButtonGoTo;
import client.view.admin.PanelAdmin;
import client.view.admin.gestionGroup.PanelCreerGroupe;
import client.view.admin.gestionGroup.PanelGestionGroupe;
import client.view.admin.gestionGroup.PanelModifierGroupe;
import client.view.admin.gestionGroup.button.ButtonAccepterUser;
import client.view.admin.gestionGroup.button.ButtonAnnulerCreerGroup;
import client.view.admin.gestionGroup.button.ButtonAnnulerModifierGroup;
import client.view.admin.gestionGroup.button.ButtonModifierGroup;
import client.view.admin.gestionGroup.button.ButtonRefuserUser;
import client.view.admin.gestionGroup.button.ButtonSupprimerGroup;
import client.view.admin.gestionGroup.button.ButtonValiderCreerGroup;
import client.view.admin.gestionGroup.button.ButtonValiderModifierGroup;
import client.view.admin.gestionUser.PanelCreerUser;
import client.view.admin.gestionUser.PanelExclureUser;
import client.view.admin.gestionUser.PanelGestionUser;
import client.view.admin.gestionUser.button.ButtonAnnulerAssignerUser;
import client.view.admin.gestionUser.button.ButtonAnnulerCreerUser;
import client.view.admin.gestionUser.button.ButtonAnnulerExclureUser;
import client.view.admin.gestionUser.button.ButtonAnnulerModifierUser;
import client.view.admin.gestionUser.button.ButtonAssignerUser;
import client.view.admin.gestionUser.button.ButtonExclureUser;
import client.view.admin.gestionUser.button.ButtonModifierUser;
import client.view.admin.gestionUser.button.ButtonSupprimerUser;
import client.view.admin.gestionUser.button.ButtonValiderAssignerUser;
import client.view.admin.gestionUser.button.ButtonValiderCreerUser;
import client.view.admin.gestionUser.button.ButtonValiderExclureUser;
import client.view.admin.gestionUser.button.ButtonValiderModifierUser;
import client.view.connexion.PanelConnexion;
import client.view.connexion.PanelConnexionCreerUser;
import client.view.connexion.button.ButtonAnnulerConnexion;
import client.view.connexion.button.ButtonAnnulerCreerUserConnexion;
import client.view.connexion.button.ButtonValiderConnexion;
import client.view.connexion.button.ButtonValiderCreerUserConnexion;
import client.view.member.PanelMembre;
import client.view.member.button.ButtonQuitterGroupe;
import client.view.member.button.ButtonRejoindreGroupe;
import client.view.respoGroup.PanelRespoGroupe;
import client.view.respoGroup.button.ButtonSupprimerUserGroup;
import client.view.role.button.ButtonAnnulerNouvRoleUser;
import client.view.role.button.ButtonValiderNouvRoleUser;

/**<u><b>Explication générale de la classe :</b></u>
 * <P>Cette classe permet de gérer l'ensemble des évènements Controleur -> IHM
 *
 * @author Dream Team - ING2
 */
public class MediatorButton {

	// Déclaration des boutons des panels permettant de gérer l'application
	private ButtonGoTo bgt;
	private ButtonDisconnect bd;
	private ButtonAccepterUser bau;
	private ButtonAnnulerCreerGroup bacg;
	private ButtonAnnulerModifierGroup bamg;
	private ButtonModifierGroup bmg;
	private ButtonRefuserUser bru;
	private ButtonSupprimerGroup bsg;
	private ButtonSupprimerUserGroup bsug;
	private ButtonValiderCreerGroup bvcg;
	private ButtonValiderModifierGroup bvmg;
	private ButtonAnnulerAssignerUser baau;
	private ButtonAnnulerCreerUser bacu;
	private ButtonAnnulerExclureUser baeu;
	private ButtonAnnulerModifierUser bamu;
	private ButtonAssignerUser basu;
	private ButtonExclureUser beu;
	private ButtonModifierUser bmu;
	private ButtonSupprimerUser bsu;
	private ButtonValiderAssignerUser bvau;
	private ButtonValiderCreerUser bvcu;
	private ButtonValiderExclureUser bveu;
	private ButtonValiderModifierUser bvmu;
	private ButtonAnnulerConnexion bac;
	private ButtonAnnulerCreerUserConnexion bacuc;
	private ButtonValiderConnexion bvc;
	private ButtonValiderCreerUserConnexion bvcuc;
	private ButtonAnnulerNouvRoleUser banru;
	private ButtonValiderNouvRoleUser bvnru;
	private ButtonQuitterGroupe bqg;
	private ButtonRejoindreGroupe brg;

	private static MediatorButton singleton = null;

	public static MediatorButton getInstance() {
		if (singleton == null) {
			singleton = new MediatorButton();
		}
		return singleton;
	}

	private MediatorButton() {
	}

	/**<u><i>Explication générale de la méthode :</i></u>
	 * <P> Cette méthode permet de récupérer le bouton
	 * 
	 * @param bgt bouton en question
	 */
	public void registerGoTo(ButtonGoTo bgt) {
		this.bgt = bgt;
	}

	/**<u><i>Explication générale de la méthode :</i></u>
	 * <P> Cette méthode permet de récupérer le bouton
	 * 
	 * @param bd bouton en question
	 */
	public void registerDisonnect(ButtonDisconnect bd) {
		this.bd = bd;
	}

	/**<u><i>Explication générale de la méthode :</i></u>
	 * <P> Cette méthode permet de récupérer le bouton
	 * 
	 * @param bau bouton en question
	 */
	public void registerAcceptUser(ButtonAccepterUser bau) {
		this.bau = bau;
	}

	/**<u><i>Explication générale de la méthode :</i></u>
	 * <P> Cette méthode permet de récupérer le bouton
	 * 
	 * @param bacg bouton en question
	 */
	public void registerAnnulerCreateGroup(ButtonAnnulerCreerGroup bacg) {
		this.bacg = bacg;
	}

	/**<u><i>Explication générale de la méthode :</i></u>
	 * <P> Cette méthode permet de récupérer le bouton
	 * 
	 * @param bamg bouton en question
	 */
	public void registerAnnulerModifyGroup(ButtonAnnulerModifierGroup bamg) {
		this.bamg = bamg;
	}

	/**<u><i>Explication générale de la méthode :</i></u>
	 * <P> Cette méthode permet de récupérer le bouton
	 * 
	 * @param bmg bouton en question
	 */
	public void registerModifyGroup(ButtonModifierGroup bmg) {
		this.bmg = bmg;
	}

	/**<u><i>Explication générale de la méthode :</i></u>
	 * <P> Cette méthode permet de récupérer le bouton
	 * 
	 * @param bru bouton en question
	 */
	public void registerRefuseUser(ButtonRefuserUser bru) {
		this.bru = bru;
	}

	/**<u><i>Explication générale de la méthode :</i></u>
	 * <P> Cette méthode permet de récupérer le bouton
	 * 
	 * @param bsg bouton en question
	 */
	public void registerDeleteGroup(ButtonSupprimerGroup bsg) {
		this.bsg = bsg;
	}

	/**<u><i>Explication générale de la méthode :</i></u>
	 * <P> Cette méthode permet de récupérer le bouton
	 * 
	 * @param bsug bouton en question
	 */
	public void registerDeleteUserGroup(ButtonSupprimerUserGroup bsug) {
		this.bsug = bsug;
	}

	/**<u><i>Explication générale de la méthode :</i></u>
	 * <P> Cette méthode permet de récupérer le bouton
	 * 
	 * @param bvcg bouton en question
	 */
	public void registerValideCreateGroup(ButtonValiderCreerGroup bvcg) {
		this.bvcg = bvcg;
	}

	/**<u><i>Explication générale de la méthode :</i></u>
	 * <P> Cette méthode permet de récupérer le bouton
	 * 
	 * @param bvmg bouton en question
	 */
	public void registerValideModifyGroup(ButtonValiderModifierGroup bvmg) {
		this.bvmg = bvmg;
	}

	/**<u><i>Explication générale de la méthode :</i></u>
	 * <P> Cette méthode permet de récupérer le bouton
	 * 
	 * @param baau bouton en question
	 */
	public void registerAnnulerAssignUser(ButtonAnnulerAssignerUser baau) {
		this.baau = baau;
	}

	/**<u><i>Explication générale de la méthode :</i></u>
	 * <P> Cette méthode permet de récupérer le bouton
	 * 
	 * @param bacu bouton en question
	 */
	public void registerAnnulerCreateUser(ButtonAnnulerCreerUser bacu) {
		this.bacu = bacu;
	}

	/**<u><i>Explication générale de la méthode :</i></u>
	 * <P> Cette méthode permet de récupérer le bouton
	 * 
	 * @param baeu bouton en question
	 */
	public void registerAnnulerKickUser(ButtonAnnulerExclureUser baeu) {
		this.baeu = baeu;
	}

	/**<u><i>Explication générale de la méthode :</i></u>
	 * <P> Cette méthode permet de récupérer le bouton
	 * 
	 * @param bamu bouton en question
	 */
	public void registerAnnulerModifyUser(ButtonAnnulerModifierUser bamu) {
		this.bamu = bamu;
	}

	/**<u><i>Explication générale de la méthode :</i></u>
	 * <P> Cette méthode permet de récupérer le bouton
	 * 
	 * @param basu bouton en question
	 */
	public void registerAssignUser(ButtonAssignerUser basu) {
		this.basu = basu;
	}

	/**<u><i>Explication générale de la méthode :</i></u>
	 * <P> Cette méthode permet de récupérer le bouton
	 * 
	 * @param beu bouton en question
	 */
	public void registerKickUser(ButtonExclureUser beu) {
		this.beu = beu;
	}

	/**<u><i>Explication générale de la méthode :</i></u>
	 * <P> Cette méthode permet de récupérer le bouton
	 * 
	 * @param bmu bouton en question
	 */
	public void registerModifyUser(ButtonModifierUser bmu) {
		this.bmu = bmu;
	}

	/**<u><i>Explication générale de la méthode :</i></u>
	 * <P> Cette méthode permet de récupérer le bouton
	 * 
	 * @param bsu bouton en question
	 */
	public void registerDeleteUser(ButtonSupprimerUser bsu) {
		this.bsu = bsu;
	}

	/**<u><i>Explication générale de la méthode :</i></u>
	 * <P> Cette méthode permet de récupérer le bouton
	 * 
	 * @param bvau bouton en question
	 */
	public void registerValideAssignUser(ButtonValiderAssignerUser bvau) {
		this.bvau = bvau;
	}

	/**<u><i>Explication générale de la méthode :</i></u>
	 * <P> Cette méthode permet de récupérer le bouton
	 * 
	 * @param bvcu bouton en question
	 */
	public void registerValideCreateUser(ButtonValiderCreerUser bvcu) {
		this.bvcu = bvcu;
	}

	/**<u><i>Explication générale de la méthode :</i></u>
	 * <P> Cette méthode permet de récupérer le bouton
	 * 
	 * @param bveu bouton en question
	 */
	public void registerValideKickUser(ButtonValiderExclureUser bveu) {
		this.bveu = bveu;
	}

	/**<u><i>Explication générale de la méthode :</i></u>
	 * <P> Cette méthode permet de récupérer le bouton
	 * 
	 * @param bvmu bouton en question
	 */
	public void registerValideModifyUser(ButtonValiderModifierUser bvmu) {
		this.bvmu = bvmu;
	}

	/**<u><i>Explication générale de la méthode :</i></u>
	 * <P> Cette méthode permet de récupérer le bouton
	 * 
	 * @param bac bouton en question
	 */
	public void registerAnnulerConnexion(ButtonAnnulerConnexion bac) {
		this.bac = bac;
	}

	/**<u><i>Explication générale de la méthode :</i></u>
	 * <P> Cette méthode permet de récupérer le bouton
	 * 
	 * @param bacuc bouton en question
	 */
	public void registerAnnulerCreateUserConnexion(
			ButtonAnnulerCreerUserConnexion bacuc) {
		this.bacuc = bacuc;
	}

	/**<u><i>Explication générale de la méthode :</i></u>
	 * <P> Cette méthode permet de récupérer le bouton
	 * 
	 * @param bvc bouton en question
	 */
	public void registerValideConnexion(ButtonValiderConnexion bvc) {
		this.bvc = bvc;
	}

	/**<u><i>Explication générale de la méthode :</i></u>
	 * <P> Cette méthode permet de récupérer le bouton
	 * 
	 * @param bvcuc bouton en question
	 */
	public void registerValideCreateUserConnexion(
			ButtonValiderCreerUserConnexion bvcuc) {
		this.bvcuc = bvcuc;
	}

	/**<u><i>Explication générale de la méthode :</i></u>
	 * <P> Cette méthode permet de récupérer le bouton
	 * 
	 * @param bvnru bouton en question
	 */
	public void registerValideNouvRoleUser(ButtonValiderNouvRoleUser bvnru) {
		this.bvnru = bvnru;
	}

	/**<u><i>Explication générale de la méthode :</i></u>
	 * <P> Cette méthode permet de récupérer le bouton
	 * 
	 * @param banru bouton en question
	 */
	public void registerAnnulerNouvRoleUser(ButtonAnnulerNouvRoleUser banru) {
		this.banru = banru;
	}

	/**<u><i>Explication générale de la méthode :</i></u>
	 * <P> Cette méthode permet de récupérer le bouton
	 * 
	 * @param bqg bouton en question
	 */
	public void registerQuitterGroupe(ButtonQuitterGroupe bqg) {
		this.bqg = bqg;
	}

	/**<u><i>Explication générale de la méthode :</i></u>
	 * <P> Cette méthode permet de récupérer le bouton
	 * 
	 * @param brg bouton en question
	 */
	public void registerRejoindreGroupe(ButtonRejoindreGroupe brg) {
		this.brg = brg;
	}

	// Listener du bouton goTo
	public void goTo() {
		// NOTHING
	}

	/**<u><i>Explication générale de la méthode :</i></u>
	 * <P> Cette méthode permet d'effectuer l'action du bouton correspondant
	 * 
	 */
	public void disconnect() {
		PanelGenerale.getInstance().setVisible(false);
		PanelConnexion.getInstance().setVisible(true);

		PanelGenerale.getInstance().setVueOnglet(null);
		PanelGenerale.setPanSingleton(null);
		PanelAccueil.setPanSingleton(null);

		if (Application.idSelect == Role.IDADMINISTRATEUR) {
			PanelAdmin.setPanSingleton(null);
			PanelGestionUser.setPanSingleton(null);
			PanelGestionGroupe.setPanSingleton(null);
		}
		
		Application.getInstance().clearAllMap();
	}

	/**<u><i>Explication générale de la méthode :</i></u>
	 * <P> Cette méthode permet d'effectuer l'action du bouton correspondant
	 * 
	 */
	public void assignUser() {

		Role role = Application.getInstance().getUser(Application.idSelect)
				.getRolePersonne();

		// Si on a un role ayant au moins un droit de l'admin, on aura un role
		// différent de null
		if (role != null) {
			// idRole du role en question
			int idRole = Application.getInstance().getIdRole(role);

			// On test si ce role possède le droit d'assigner un rôle
			if (ApplicationHelper.ARoleCan(idRole, Droits.ASSIGNER_ROLE)) {
				PanelAdmin.getInstance().getPau().setVisible(true);

				// On met les boutons bloqués
				PanelAdmin.getInstance().getPanUser().getUserBox().setEnabled(
						false);
				basu.setEnabled(false);
				beu.setEnabled(false);
				bmu.setEnabled(false);
				bsu.setEnabled(false);
			}
		}
	}

	/**<u><i>Explication générale de la méthode :</i></u>
	 * <P> Cette méthode permet d'effectuer l'action du bouton correspondant
	 * 
	 */
	public void kickUser() {

		Role role = Application.getInstance().getUser(Application.idSelect)
				.getRolePersonne();

		// Si on a un role ayant au moins un droit de l'admin, on aura un role
		// différent de nul
		if (role != null) {
			// idRole du role en question
			int idRole = Application.getInstance().getIdRole(role);

			// On test si ce role possède le droit d'exclure le membre
			if (ApplicationHelper.ARoleCan(idRole, Droits.EXCLURE_MEMBRE)) {
				PanelAdmin.getInstance().getPeu().setVisible(true);

				// On met les boutons bloqués
				PanelAdmin.getInstance().getPanUser().getUserBox().setEnabled(
						false);
				basu.setEnabled(false);
				beu.setEnabled(false);
				bmu.setEnabled(false);
				bsu.setEnabled(false);
			}
		}
	}

	/**<u><i>Explication générale de la méthode :</i></u>
	 * <P> Cette méthode permet d'effectuer l'action du bouton correspondant
	 * 
	 */
	public void acceptUser() {
		PanelGestionGroupe.getInstance().remplirUserPendingBox();

		// MAJ des composants Box Gestion d'User
		int sizeOld = PanelGestionUser.getInstance().getUserBox()
				.getItemCount();
		PanelGestionUser.getInstance().remplirUserBox();
		PanelGestionUser.getInstance().deleteItemOfUserBox(sizeOld);
		PanelGestionUser.getInstance().updateUI();
	}

	/**<u><i>Explication générale de la méthode :</i></u>
	 * <P> Cette méthode permet d'effectuer l'action du bouton correspondant
	 * 
	 */
	public void refuseUser() {
		PanelGestionGroupe.getInstance().remplirUserPendingBox();
	}

	/**<u><i>Explication générale de la méthode :</i></u>
	 * <P> Cette méthode permet d'effectuer l'action du bouton correspondant
	 * 
	 */
	public void quitGroup() {
		// Do Nothing
	}

	/**<u><i>Explication générale de la méthode :</i></u>
	 * <P> Cette méthode permet d'effectuer l'action du bouton correspondant
	 * 
	 */
	public void joinGroup() {

		// On recupère le panel du membre
		PanelMembre pm = (PanelMembre) PanelGenerale.getInstance()
				.getVueOnglet().getSelectedComponent();

		int idUser = Application.idSelect;
		int idGroup = Application.getInstance().getIdGroupe(
				pm.getAccueil().getNomGroupe());

		// On test si ce role possède le droit de rejoindre le groupe
		if (ApplicationHelper.ARoleCanInGroup(idUser, idGroup,
				Droits.REJOINDRE_GROUPE)) {

			pm.getAccueil().getPanMembre().remplirDeleteBoxGroupe();
			pm.getAccueil().getPanMembre().remplirJoinBoxGroupe();
			pm.getAccueil().getPanMembre().updateUI();

			PanelAccueil.getInstance().remplirGroupeBox();
			PanelAccueil.getInstance().updateUI();
		}
	}

	/**<u><i>Explication générale de la méthode :</i></u>
	 * <P> Cette méthode permet d'effectuer l'action du bouton correspondant
	 * 
	 */
	public void modifyUser() {

		Role role = Application.getInstance().getUser(Application.idSelect)
				.getRolePersonne();

		// Si on a un role ayant au moins un droit de l'admin, on aura un role
		// différent de nul
		if (role != null) {
			// idRole du role en question
			int idRole = Application.getInstance().getIdRole(role);

			// On test si ce role possède le droit de modification de membre
			if (ApplicationHelper.ARoleCan(idRole, Droits.MODIFIER_MEMBRE)) {
				PanelAdmin.getInstance().getPmu().setVisible(true);

				// On met les boutons bloqués
				PanelAdmin.getInstance().getPanUser().getUserBox().setEnabled(
						false);
				basu.setEnabled(false);
				beu.setEnabled(false);
				bmu.setEnabled(false);
				bsu.setEnabled(false);
			}
		}
	}

	/**<u><i>Explication générale de la méthode :</i></u>
	 * <P> Cette méthode permet d'effectuer l'action du bouton correspondant
	 * 
	 */
	public void modifyGroup() {
		Role role = Application.getInstance().getUser(Application.idSelect)
				.getRolePersonne();

		// Si on a un role ayant au moins un droit de l'admin, on aura un role
		// différent de nul
		// if (role != null) {
		// idRole du role en question
		int idRole = Application.getInstance().getIdRole(role);

		// On test si ce role possède le droit de modification de groupe
		if (ApplicationHelper.ARoleCan(idRole, Droits.MODIFIER_GROUPE)) {
			PanelAdmin.getInstance().getPmg().setVisible(true);
			PanelAdmin.getInstance().getPanGroup().setVisible(false);

			PanelAdmin.getInstance().getPmg().getNomGroupe().setText(
					PanelAdmin.getInstance().getPmg().getAncienGroupe());
			PanelAdmin.getInstance().getPmg().updateUI();
		} else {
			System.out.println("vous n'avez pas les droits !");
		}
		// }
	}

	public void removeUser() {
		// Do Nothing
	}

	/**<u><i>Explication générale de la méthode :</i></u>
	 * <P> Cette méthode permet d'effectuer l'action du bouton correspondant
	 * 
	 */
	public void removeGroup() {

		Role role = Application.getInstance().getUser(Application.idSelect)
				.getRolePersonne();

		// Si on a un role ayant au moins un droit de l'admin, on aura un role
		// différent de nul
		if (role != null) {
			// idRole du role en question
			int idRole = Application.getInstance().getIdRole(role);

			// On test si ce role possède le droit de suppression de groupe
			if (ApplicationHelper.ARoleCan(idRole, Droits.SUPPRIMER_GROUPE)) {

				// MAJ des composants Box dans les inscriptions
				PanelConnexionCreerUser pccr = PanelConnexionCreerUser
						.getInstance();
				pccr.remplirGroupeBox();
				pccr.updateUI();

				// MAJ des composants Box Accueil
				PanelAccueil.getInstance().remplirGroupeBox();
				PanelAccueil.getInstance().updateUI();

				// MAJ des composants Box Gestion de Groupe
				int sizeOld = PanelGestionGroupe.getInstance().getGroupBox()
						.getItemCount();
				PanelGestionGroupe.getInstance().remplirGroupeBox();
				PanelGestionGroupe.getInstance().deleteItemOfGroupBox(sizeOld);
				PanelGestionGroupe.getInstance().updateUI();

				PanelExclureUser.getInstance().remplirGroupeBox();
				PanelExclureUser.getInstance().updateUI();
			}
		}
	}

	/**<u><i>Explication générale de la méthode :</i></u>
	 * <P> Cette méthode permet d'effectuer l'action du bouton correspondant
	 * 
	 */
	public void removeUserGroup() {

		Role role = Application.getInstance().getUser(Application.idSelect)
				.getRolePersonne();

		// Si on a un role ayant au moins un droit de l'admin, on aura un role
		// différent de nul
		if (role != null) {
			// idRole du role en question
			int idRole = Application.getInstance().getIdRole(role);

			// On test si ce role possède le droit de supprimer un user de son
			// groupe
			if (ApplicationHelper
					.ARoleCan(idRole, Droits.EXCLURE_MEMBRE_GROUPE)) {
				// MAJ des composants Box dans la gestion du groupe
				PanelRespoGroupe prg = (PanelRespoGroupe) PanelGenerale
						.getInstance().getVueOnglet().getSelectedComponent();
				prg.getAccueil().getPanGroup().remplirUserBoxRespoGroupe();
				prg.updateUI();
			}
		}
	}

	/**<u><i>Explication générale de la méthode :</i></u>
	 * <P> Cette méthode permet d'effectuer l'action du bouton correspondant
	 * 
	 */
	public void valideCreateGroup() {

		// On test si on peut bien créer le groupe
		if (PanelCreerGroupe.getInstance().getNomBox().getSelectedIndex() != 0
				&& !PanelCreerGroupe.getInstance().getNomGroupe().getText()
						.isEmpty()) {

			PanelAdmin.getInstance().getPcg().setVisible(false);
			PanelAdmin.getInstance().getPanGroup().setVisible(true);

			// MAJ des composants Box dans les inscriptions
			PanelConnexionCreerUser.getInstance().remplirGroupeBox();
			PanelConnexionCreerUser.getInstance().updateUI();

			// MAJ des composants Box Accueil
			PanelAccueil.getInstance().remplirGroupeBox();
			PanelAccueil.getInstance().updateUI();

			// MAJ des composants Box Gestion de Groupe
			int sizeOld = PanelGestionGroupe.getInstance().getGroupBox()
					.getItemCount();
			PanelGestionGroupe.getInstance().remplirGroupeBox();
			PanelGestionGroupe.getInstance().deleteItemOfGroupBox(sizeOld);
			PanelGestionGroupe.getInstance().updateUI();
		}
	}

	/**<u><i>Explication générale de la méthode :</i></u>
	 * <P> Cette méthode permet d'effectuer l'action du bouton correspondant
	 * 
	 */
	public void valideModifyGroup() {

		String nomNouvGroupe = PanelAdmin.getInstance().getPmg().getNomGroupe()
				.getText();

		if (PanelAdmin.getInstance().getPmg().getUserBox().getSelectedIndex() != 0
				&& !PanelModifierGroupe.getInstance().getNomGroupe().getText()
						.isEmpty() && nomNouvGroupe.length() > 0) {

			PanelAdmin.getInstance().getPmg().setVisible(false);
			PanelAdmin.getInstance().getPanGroup().setVisible(true);

			// MAJ des composants Box dans les inscriptions
			PanelConnexionCreerUser.getInstance().remplirGroupeBox();

			// MAJ des composants Box Accueil
			PanelAccueil.getInstance().remplirGroupeBox();

			// MAJ des composants Box Gestion de Groupe
			int sizeOld = PanelGestionGroupe.getInstance().getGroupBox()
					.getItemCount();
			PanelGestionGroupe.getInstance().remplirGroupeBox();
			PanelGestionGroupe.getInstance().deleteItemOfGroupBox(sizeOld);
			PanelGestionGroupe.getInstance().updateUI();
		}
	}

	/**<u><i>Explication générale de la méthode :</i></u>
	 * <P> Cette méthode permet d'effectuer l'action du bouton correspondant
	 * 
	 */
	public void valideNouvRoleUser() {
		PanelAdmin.getInstance().getPcr().setVisible(false);
		PanelAdmin.getInstance().getPau().setVisible(false);

		basu.setEnabled(true);
		beu.setEnabled(true);
		bmu.setEnabled(true);
		bsu.setEnabled(true);
		PanelGestionUser.getInstance().getUserBox().setEnabled(true);
	}

	/**<u><i>Explication générale de la méthode :</i></u>
	 * <P> Cette méthode permet d'effectuer l'action du bouton correspondant
	 * 
	 */
	public void valideAssignUser() {
		if (PanelAdmin.getInstance().getPau().getNouveauButton().isSelected()
				&& PanelAdmin.getInstance().getPau().getGroupBox()
						.getSelectedIndex() != 0) {
			PanelAdmin.getInstance().getPcr().setVisible(true);
			PanelAdmin.getInstance().getPau().setVisible(false);
		} else {
			PanelAdmin.getInstance().getPcr().setVisible(false);
			PanelAdmin.getInstance().getPau().setVisible(false);

			basu.setEnabled(true);
			beu.setEnabled(true);
			bmu.setEnabled(true);
			bsu.setEnabled(true);
			PanelGestionUser.getInstance().getUserBox().setEnabled(true);
		}
	}

	/**<u><i>Explication générale de la méthode :</i></u>
	 * <P> Cette méthode permet d'effectuer l'action du bouton correspondant
	 * 
	 */
	public void valideCreateUser() {
		PanelAdmin.getInstance().getPcu().setVisible(false);

		basu.setEnabled(true);
		beu.setEnabled(true);
		bmu.setEnabled(true);
		bsu.setEnabled(true);
		PanelGestionUser.getInstance().getUserBox().setEnabled(true);
	}

	/**<u><i>Explication générale de la méthode :</i></u>
	 * <P> Cette méthode permet d'effectuer l'action du bouton correspondant
	 * 
	 */
	public void valideKickUser() {
		PanelAdmin.getInstance().getPeu().setVisible(false);

		basu.setEnabled(true);
		beu.setEnabled(true);
		bmu.setEnabled(true);
		bsu.setEnabled(true);
		PanelGestionUser.getInstance().getUserBox().setEnabled(true);
	}

	/**<u><i>Explication générale de la méthode :</i></u>
	 * <P> Cette méthode permet d'effectuer l'action du bouton correspondant
	 * 
	 */
	public void valideModifyUser() {
		PanelAdmin.getInstance().getPmu().setVisible(false);

		basu.setEnabled(true);
		beu.setEnabled(true);
		bmu.setEnabled(true);
		bsu.setEnabled(true);
		PanelGestionUser.getInstance().getUserBox().setEnabled(true);

		// MAJ des composants Box Gestion de User
		int sizeOld = PanelGestionUser.getInstance().getUserBox()
				.getItemCount();
		PanelGestionUser.getInstance().remplirUserBox();
		PanelGestionUser.getInstance().deleteItemOfUserBox(sizeOld);
		PanelGestionUser.getInstance().updateUI();
	}

	/**<u><i>Explication générale de la méthode :</i></u>
	 * <P> Cette méthode permet d'effectuer l'action du bouton correspondant
	 * 
	 */
	public void valideConnexion() {
		PanelConnexion.getInstance().setVisible(false);
		PanelGenerale.getInstance().setVisible(true);
	}

	/**<u><i>Explication générale de la méthode :</i></u>
	 * <P> Cette méthode permet d'effectuer l'action du bouton correspondant
	 * 
	 */
	public void valideCreateUserConnexion() {
		PanelCreerUser.getInstance().setVisible(false);
		PanelConnexion.getInstance().setVisible(true);
	}

	/**<u><i>Explication générale de la méthode :</i></u>
	 * <P> Cette méthode permet d'effectuer l'action du bouton correspondant
	 * 
	 */
	public void valideCreateProblem() {

	}

	/**<u><i>Explication générale de la méthode :</i></u>
	 * <P> Cette méthode permet d'effectuer l'action du bouton correspondant
	 * 
	 */
	public void annulerAssignUser() {
		PanelAdmin.getInstance().getPau().setVisible(false);

		basu.setEnabled(true);
		beu.setEnabled(true);
		bmu.setEnabled(true);
		bsu.setEnabled(true);
		PanelGestionUser.getInstance().getUserBox().setEnabled(true);
	}

	/**<u><i>Explication générale de la méthode :</i></u>
	 * <P> Cette méthode permet d'effectuer l'action du bouton correspondant
	 * 
	 */
	public void annulerConnexion() {
		PanelConnexion.getInstance().getLoginText().setText("");
		PanelConnexion.getInstance().getPasswordText().setText("");
	}

	/**<u><i>Explication générale de la méthode :</i></u>
	 * <P> Cette méthode permet d'effectuer l'action du bouton correspondant
	 * 
	 */
	public void annulerCreateUserConnexion() {
		PanelCreerUser.getInstance().setVisible(false);
		PanelConnexion.getInstance().setVisible(true);
	}
	
	/**<u><i>Explication générale de la méthode :</i></u>
	 * <P> Cette méthode permet d'effectuer l'action du bouton correspondant
	 * 
	 */
	public void annulerNouvRoleUser() {
		PanelAdmin.getInstance().getPau().setVisible(true);
		PanelAdmin.getInstance().getPcr().setVisible(false);
	}

	/**<u><i>Explication générale de la méthode :</i></u>
	 * <P> Cette méthode permet d'effectuer l'action du bouton correspondant
	 * 
	 */
	public void annulerCreateGroup() {
		PanelAdmin.getInstance().getPcg().setVisible(false);
		PanelAdmin.getInstance().getPanGroup().setVisible(true);
	}

	/**<u><i>Explication générale de la méthode :</i></u>
	 * <P> Cette méthode permet d'effectuer l'action du bouton correspondant
	 * 
	 */
	public void annulerModifyGroup() {
		PanelAdmin.getInstance().getPmg().setVisible(false);
		PanelAdmin.getInstance().getPanGroup().setVisible(true);
	}

	/**<u><i>Explication générale de la méthode :</i></u>
	 * <P> Cette méthode permet d'effectuer l'action du bouton correspondant
	 * 
	 */
	public void annulerCreateUser() {
		PanelAdmin.getInstance().getPcu().setVisible(false);

		basu.setEnabled(true);
		beu.setEnabled(true);
		bmu.setEnabled(true);
		bsu.setEnabled(true);
		PanelGestionUser.getInstance().getUserBox().setEnabled(true);
	}

	/**<u><i>Explication générale de la méthode :</i></u>
	 * <P> Cette méthode permet d'effectuer l'action du bouton correspondant
	 * 
	 */
	public void annulerKickUser() {
		PanelAdmin.getInstance().getPeu().setVisible(false);

		basu.setEnabled(true);
		beu.setEnabled(true);
		bmu.setEnabled(true);
		bsu.setEnabled(true);
		PanelGestionUser.getInstance().getUserBox().setEnabled(true);
	}

	/**<u><i>Explication générale de la méthode :</i></u>
	 * <P> Cette méthode permet d'effectuer l'action du bouton correspondant
	 * 
	 */
	public void annulerModifyUser() {
		PanelAdmin.getInstance().getPmu().setVisible(false);

		basu.setEnabled(true);
		beu.setEnabled(true);
		bmu.setEnabled(true);
		bsu.setEnabled(true);
		PanelGestionUser.getInstance().getUserBox().setEnabled(true);
	}
}
