Subversion Repositories eFlore/Applications.del

Rev

Rev 597 | Rev 804 | Go to most recent revision | Blame | Compare with Previous | 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.i18n.I18n;
import org.tela_botanica.del.client.modeles.Utilisateur;
import org.tela_botanica.del.client.services.rest.UtilisateurService;
import org.tela_botanica.del.client.services.rest.UtilisateurServiceConcret;
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 {
        
        public abstract interface Vue extends IsWidget {
                public void ajouterVue(HasWidgets composite);
                public HasClickHandlers getSeConnecter();
                public HasClickHandlers getSeDeconnecter();
                public void basculerAffichageFormulaire();
                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();
        }
        
        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 surRetourUtilisateur(Utilisateur utilisateur) {
                                CacheClient.getInstance().setUtilisateur(utilisateur);
                                rafraichir();
                        }
                });
                gererEvenements();
                
        }
        
        public void rafraichir() {
                utilisateur = CacheClient.getInstance().getUtilisateur();               
                vue.basculerModeConnecte(this.utilisateur);
        }
        
        public void gererEvenements() {
                vue.getSeConnecter().addClickHandler(new ClickHandler() {
                        
                        @Override
                        public void onClick(ClickEvent event) {
                                vue.basculerAffichageFormulaire();
                        }
                });
                
                vue.getBoutonOK().addClickHandler(new ClickHandler() {
                        @Override
                        public void onClick(ClickEvent event) {
                                surTentativeLogin();
                        }
                });
                
                vue.getSeDeconnecter().addClickHandler(new ClickHandler() {
                        @Override
                        public void onClick(ClickEvent event) {
                                Utilisateur utilisateur = CacheClient.getInstance().getUtilisateur();
                                deconnecterUtilisateur(utilisateur.getCourriel());      
                        }
                });
                
                vue.getLoginHasKeyPressHandler().addKeyPressHandler(creerGestionnaireEvenementToucheEntree());
                vue.getMotdepasseHasKeyPressHandler().addKeyPressHandler(creerGestionnaireEvenementToucheEntree());
        }
        
        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, String motdepasse) {

                utilisateurService.connecterUtilisateur(login, motdepasse, new UtilisateurCallback() {
                        @Override
                        public void surRetourUtilisateur(Utilisateur utilisateur) {
                                CacheClient.getInstance().setUtilisateur(utilisateur);
                                if (utilisateur.estIdentifie()) {
                                        vue.masquerErreur();
                                        rafraichir();
                                        vue.basculerAffichageFormulaire();
                                        vue.viderFormulaire();
                                } else {
                                        vue.setErreur("identificationRefus");
                                        vue.afficherErreur();
                                }       
                        }
                });
        }
        
        public void deconnecterUtilisateur(String courriel) {
                utilisateurService.deconnecterUtilisateur(courriel, new UtilisateurCallback() {
                        @Override
                        public void surRetourUtilisateur(Utilisateur utilisateur) {
                                CacheClient.getInstance().setUtilisateur(utilisateur);
                                rafraichir();
                        }
                });
        }
        
        public void go(HasWidgets composite) {
                vue.ajouterVue(composite);
        }
}