Subversion Repositories eFlore/Applications.del

Rev

Rev 1496 | Blame | Last modification | View Log | RSS feed

package org.tela_botanica.del.client.composants.formulaires.identification;

import org.tela_botanica.del.client.cache.CacheClient;
import org.tela_botanica.del.client.composants.fenetreoverlay.FenetreOverlayDefilanteVue;
import org.tela_botanica.del.client.composants.fenetreoverlay.FenetreOverlaySimplePresenteur;
import org.tela_botanica.del.client.composants.preferences.PreferencesPresenteur;
import org.tela_botanica.del.client.composants.preferences.PreferencesVue;
import org.tela_botanica.del.client.modeles.Utilisateur;
import org.tela_botanica.del.client.navigation.evenement.BusEvenementiel;
import org.tela_botanica.del.client.navigation.evenement.changementEtatUtilisateur.EvenementChangementEtatUtilisateur;
import org.tela_botanica.del.client.navigation.evenement.changementPreferences.EvenementChangementPreferences;
import org.tela_botanica.del.client.navigation.evenement.changementPreferences.GestionnaireEvenementChangementPreferences;
import org.tela_botanica.del.client.services.rest.PreferencesServiceConcret;
import org.tela_botanica.del.client.services.rest.UtilisateurService;
import org.tela_botanica.del.client.services.rest.async.UtilisateurCallback;

import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.event.dom.client.HasClickHandlers;
import com.google.gwt.event.dom.client.HasKeyPressHandlers;
import com.google.gwt.event.dom.client.KeyCodes;
import com.google.gwt.event.dom.client.KeyPressEvent;
import com.google.gwt.event.dom.client.KeyPressHandler;
import com.google.gwt.user.client.ui.HasText;
import com.google.gwt.user.client.ui.HasWidgets;
import com.google.gwt.user.client.ui.IsWidget;

public class FormulaireIdentificationPresenteur {
        
        FenetreOverlaySimplePresenteur fenetreModalePresenteur = null;

        public abstract interface Vue extends IsWidget {
                public void ajouterVue(HasWidgets composite);

                public HasClickHandlers getSeConnecter();

                public HasClickHandlers getSeDeconnecter();

                public void basculerAffichageFormulaire(boolean estConnecte);

                public void basculerModeConnecte(Utilisateur utilisateur);

                public HasClickHandlers getBoutonOK();

                public HasText getLogin();

                public HasText getMotdepasse();

                public void afficherErreur();

                public void masquerErreur();

                public void viderFormulaire();

                public void setErreur(String idTexte);

                public String getErreur();

                public HasKeyPressHandlers getLoginHasKeyPressHandler();

                public HasKeyPressHandlers getMotdepasseHasKeyPressHandler();

                HasClickHandlers getZonePreferencesClickHandler();
        }

        private Vue vue;
        private Utilisateur utilisateur;
        private UtilisateurService utilisateurService;

        public FormulaireIdentificationPresenteur(Vue vue, UtilisateurService utilisateurService) {
                this.vue = vue;
                this.utilisateurService = utilisateurService;
                utilisateurService.obtenirUtilisateur(new UtilisateurCallback() {

                        @Override
                        public void surRetour(Utilisateur objetRetour) {
                                utilisateur = objetRetour;
                                CacheClient.getInstance().setUtilisateur(utilisateur);
                                rafraichir();
                        }
                });
                gererEvenements();
        }

        public void rafraichir() {
                utilisateur = CacheClient.getInstance().getUtilisateur();
                vue.basculerModeConnecte(this.utilisateur);
                BusEvenementiel.getInstance().fireEvent(new EvenementChangementEtatUtilisateur(utilisateur));
        }

        public void gererEvenements() {
                vue.getBoutonOK().addClickHandler(new ClickHandler() {
                        @Override
                        public void onClick(ClickEvent event) {
                                surTentativeLogin();
                        }
                });

                vue.getSeDeconnecter().addClickHandler(new ClickHandler() {
                        @Override
                        public void onClick(ClickEvent event) {
                                deconnecterUtilisateur();
                        }
                });

                vue.getLoginHasKeyPressHandler().addKeyPressHandler(creerGestionnaireEvenementToucheEntree());
                vue.getMotdepasseHasKeyPressHandler().addKeyPressHandler(creerGestionnaireEvenementToucheEntree());
                
                vue.getZonePreferencesClickHandler().addClickHandler(new ClickHandler() {               
                        @Override
                        public void onClick(ClickEvent event) {
                                if(utilisateur.estIdentifie()) {
                                        PreferencesPresenteur preferencesPresenteur = new PreferencesPresenteur(new PreferencesVue(), new PreferencesServiceConcret());
                                        fenetreModalePresenteur = new FenetreOverlaySimplePresenteur(new FenetreOverlayDefilanteVue());
                                        fenetreModalePresenteur.ouvrirFenetreModale(preferencesPresenteur);
                                }
                        }
                });
                
                BusEvenementiel.getInstance().addHandler(EvenementChangementPreferences.TYPE, new GestionnaireEvenementChangementPreferences() {                
                        @Override
                        public void onChangementPreferences(EvenementChangementPreferences event) {
                                if(fenetreModalePresenteur != null && fenetreModalePresenteur.fenetreModaleEstOuverte()) {
                                        fenetreModalePresenteur.fermerFenetreModale();
                                }
                        }
                });
        }

        private void surTentativeLogin() {
                String login = vue.getLogin().getText();
                String motdepasse = vue.getMotdepasse().getText();

                if (login.equals("") || motdepasse.equals("")) {
                        gererErreur("saisirLogin");
                } else {
                        connecterUtilisateur(login, motdepasse);
                }
        }

        public KeyPressHandler creerGestionnaireEvenementToucheEntree() {
                return new KeyPressHandler() {
                        public void onKeyPress(KeyPressEvent event) {
                                if (event.getNativeEvent().getKeyCode() == KeyCodes.KEY_ENTER) {
                                        surTentativeLogin();
                                }
                        }
                };
        }

        public void gererErreur(String erreur) {
                vue.setErreur(erreur);
                vue.afficherErreur();
        }

        public void connecterUtilisateur(String login, final String motdepasse) {

                utilisateurService.connecterUtilisateur(login, motdepasse, new UtilisateurCallback() {

                        public void surErreur(String message) {
                                vue.setErreur("identificationRefus");
                                vue.afficherErreur();
                        }

                        @Override
                        public void surRetour(Utilisateur objetRetour) {
                                utilisateur = objetRetour;
                                CacheClient.getInstance().setUtilisateur(utilisateur);
                                if (utilisateur.estIdentifie()) {
                                        vue.masquerErreur();
                                        rafraichir();
                                        vue.viderFormulaire();
                                }
                        }
                });
        }

        public void deconnecterUtilisateur() {
                utilisateurService.deconnecterUtilisateur(new UtilisateurCallback() {

                        public void surErreur(String message) {
                                vue.setErreur("identificationRefus");
                                vue.afficherErreur();
                        }

                        @Override
                        public void surRetour(Utilisateur objetRetour) {
                                utilisateur = objetRetour;
                                CacheClient.getInstance().setUtilisateur(utilisateur);
                                rafraichir();
                        }
                });
        }

        public void go(HasWidgets composite) {
                vue.ajouterVue(composite);
        }
}