Rev 1473 | Rev 1496 | 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);
}
}