Subversion Repositories eFlore/Applications.del

Rev

Rev 1473 | 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 java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;

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.Cookies;
import com.google.gwt.user.client.Window;
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;

                // lecture du cookie éventuel
                String id = Cookies.getCookie("del_id");
                String prenom = Cookies.getCookie("del_prenom");
                String nom = Cookies.getCookie("del_nom");
                String courriel = Cookies.getCookie("del_courriel");

                if (id != null && prenom != null && nom != null && courriel != null) {
                        utilisateur = new Utilisateur(id, prenom, nom, courriel);
                }

                CacheClient.getInstance().setUtilisateur(utilisateur);
                rafraichir();

                /*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();
        }

        // appelle le 3615 DEL pour s'identifier
        public void connecterUtilisateur(String login, String motdepasse) {

                // demande d'identification
                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()) {
                                        // posage de cookies
                                        Date dateExpiration = new Date();
                                        long dureeEnMillisecondes = 1000 * 60 * 60 * 24 * 100; // 100 jours
                                        dateExpiration.setTime(dateExpiration.getTime() + dureeEnMillisecondes);
                                        Cookies.setCookie("del_id", utilisateur.getId(), dateExpiration);
                                        Cookies.setCookie("del_prenom", utilisateur.getPrenom(), dateExpiration);
                                        Cookies.setCookie("del_nom", utilisateur.getNom(), dateExpiration);
                                        Cookies.setCookie("del_courriel", utilisateur.getCourriel(), dateExpiration);
                                        vue.masquerErreur();
                                        rafraichir();
                                        vue.viderFormulaire();
                                }
                        }
                });
        }

        // zigouille les cookies et invalide le cache
        public void deconnecterUtilisateur() {

                Cookies.removeCookie("del_id");
                Cookies.removeCookie("del_prenom");
                Cookies.removeCookie("del_nom");
                Cookies.removeCookie("del_courriel");

                utilisateur = null;
                CacheClient.getInstance().setUtilisateur(utilisateur);
                rafraichir();
        }

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