Rev 2621 | Blame | Last modification | View Log | RSS feed
package org.tela_botanica.client.modeles.dao;/*** Modele DAO, specifique, permettant la validation, l'acces aux donnees distantes et la présentation des donnees en retour**/import org.tela_botanica.client.CarnetEnLigneModele;import org.tela_botanica.client.i18n.Msg;import org.tela_botanica.client.interfaces.Rafraichissable;import org.tela_botanica.client.modeles.objets.Configuration;import org.tela_botanica.client.modeles.objets.Utilisateur;import com.google.gwt.http.client.Request;import org.tela_botanica.client.util.RequestBuilderWithCredentials;import org.tela_botanica.client.util.Util;import com.google.gwt.http.client.RequestCallback;import com.google.gwt.http.client.RequestException;import com.google.gwt.http.client.Response;import com.google.gwt.http.client.URL;import com.google.gwt.json.client.JSONObject;import com.google.gwt.json.client.JSONParser;import com.google.gwt.json.client.JSONString;import com.google.gwt.json.client.JSONValue;import com.google.gwt.user.client.Timer;import com.google.gwt.user.client.Window;public class UtilisateurAsynchroneDAO {/*** Le modèle associé au DAO*/private CarnetEnLigneModele carnetEnLigneModele = null ;private Timer rafraichisseurJeton;/*** Constructeur*/public UtilisateurAsynchroneDAO(CarnetEnLigneModele carnetEnLigneModele) {this.carnetEnLigneModele=carnetEnLigneModele;}/*** Methode de classe d'appel du service gestion identification* @param baseURL : URL du service* @param retour : methode appelle en retour d'appel*/public void getEtatUtilisateur(final Rafraichissable r) {String url = Configuration.getIdentificationBaseUrl()+"/identite/";// Recherche identifiant utilisateur identifieRequestBuilderWithCredentials rb = new RequestBuilderWithCredentials(RequestBuilderWithCredentials.GET, url) ;try {rb.sendRequest(null, new RequestCallback() {@Overridepublic void onError(Request request, Throwable exception) {}@Overridepublic void onResponseReceived(Request request,Response response) {if(response.getText().isEmpty()) {Window.alert(Msg.get("erreur-contacter-serveur"));} else {JSONValue jsonValue = JSONParser.parse(response.getText());JSONObject objetJsonUtilisateur = jsonValue.isObject();if (objetJsonUtilisateur != null && objetJsonUtilisateur.get("session") != null) {// Drapeau leve si utilisateur deja identifieboolean identifie = objetJsonUtilisateur.get("session").isBoolean().booleanValue();if(identifie) {if(objetJsonUtilisateur.get("token").isString() != null) {String token = ((JSONString) objetJsonUtilisateur.get("token")).stringValue();Utilisateur.setJeton(token);int dureeJeton = (int)objetJsonUtilisateur.get("duration").isNumber().doubleValue();gererTimerRafraichissementJeton(dureeJeton, r);}}}// dans tous les cas même si l'on est pas identifié par le sso, ceci permet d'obtenir// une session temporaireobtenirInfosComplementairesUtilisateur(r);}}}) ;} catch (RequestException e) {}}public void obtenirInfosComplementairesUtilisateur(final Rafraichissable r) {String url = Configuration.getServiceBaseUrl()+"/User/";RequestBuilderWithCredentials rb = new RequestBuilderWithCredentials(RequestBuilderWithCredentials.GET, url) ;try {rb.sendRequest(null, new RequestCallback() {@Overridepublic void onError(Request request, Throwable exception) {}@Overridepublic void onResponseReceived(Request request,Response response) {if(response.getText().isEmpty()) {Window.alert(Msg.get("erreur-contacter-serveur"));} else {JSONValue jsonValue = JSONParser.parse(response.getText());JSONObject objetJsonUtilisateur;if ((objetJsonUtilisateur = jsonValue.isObject()) != null) {Utilisateur utilisateur = Utilisateur.InitialiserInstance(objetJsonUtilisateur);if(r != null) {r.rafraichir(utilisateur,true);}} else {}}}}) ;} catch (RequestException e) {}}public void deconnecterUtilisateur(final Rafraichissable r, String user) {RequestBuilderWithCredentials rb = new RequestBuilderWithCredentials(RequestBuilderWithCredentials.GET, Configuration.getIdentificationBaseUrl()+ "/deconnexion/") ;try {rb.sendRequest(null, new RequestCallback() {@Overridepublic void onError(Request request, Throwable exception) {// TODO Auto-generated method stub}@Overridepublic void onResponseReceived(Request request,Response response) {Utilisateur.setJeton("");gererTimerRafraichissementJeton(0, r);obtenirInfosComplementairesUtilisateur(r);}}) ;} catch (RequestException e) {}}public void connecterUtilisateur (final Rafraichissable r, String login, String password) {//connexion?login=aurelien@tela-botanica.org&password=Canard123$if(!login.isEmpty() && !password.isEmpty()) {String url = Configuration.getIdentificationBaseUrl() + "/connexion?login=" + URL.encodeComponent(login) + "&password=" + URL.encodeComponent(password);RequestBuilderWithCredentials rb = new RequestBuilderWithCredentials(RequestBuilderWithCredentials.GET, url) ;try {rb.sendRequest(null, new RequestCallback() {@Overridepublic void onError(Request request, Throwable exception) {// TODO Auto-generated method stub}@Overridepublic void onResponseReceived(Request request,Response response) {JSONValue jsonValue = JSONParser.parse(response.getText());JSONObject objetJsonUtilisateur = jsonValue.isObject();if (objetJsonUtilisateur != null && objetJsonUtilisateur.get("session") != null) {if(objetJsonUtilisateur.get("token").isString() != null) {String token = ((JSONString) objetJsonUtilisateur.get("token")).stringValue();Utilisateur.setJeton(token);int dureeJeton = (int)objetJsonUtilisateur.get("duration").isNumber().doubleValue();gererTimerRafraichissementJeton(dureeJeton, r);}obtenirInfosComplementairesUtilisateur(r);}}}) ;} catch (RequestException e) {e.printStackTrace() ;}}}private void gererTimerRafraichissementJeton(int duree, final Rafraichissable r) {// Rafraîchissement automatique du jeton - s'annule lorsque le jeton devient nulif (!Utilisateur.getJeton().isEmpty() && duree > 0) {if (rafraichisseurJeton == null) { // on sait jamais// 3/4 de la durée de vie du jeton, en millisecondes (ça laisse de la marge)int delaiRepetition = (duree * 1000) * 3 / 4;rafraichisseurJeton = new Timer() {@Overridepublic void run() {// Appel de l'annuaire pour rafraîchir le jeton (cb nul pour l'instant)// @TODO gérer le possible changement de profil / coordonnées de l'utilisateur// en cours de connexiongetEtatUtilisateur(null);}};rafraichisseurJeton.scheduleRepeating(delaiRepetition);}} else {if (rafraichisseurJeton != null) { // on sait jamais non plusrafraichisseurJeton.cancel();rafraichisseurJeton = null;}}}public void accepterLicence(String identifiantUtilisateur) {RequestBuilderWithCredentials rb = new RequestBuilderWithCredentials(RequestBuilderWithCredentials.POST,Configuration.getServiceBaseUrl() + "/LicenceUtilisateur/"+identifiantUtilisateur) ;try {String postData = "licence=1";rb.sendRequest(postData, new RequestCallback() {@Overridepublic void onError(Request request, Throwable exception) {// TODO Auto-generated method stub}@Overridepublic void onResponseReceived(Request request,Response response) {}}) ;} catch (RequestException e) {e.printStackTrace() ;}}}