Subversion Repositories eFlore/Applications.cel

Rev

Rev 2806 | 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 identifie
                RequestBuilderWithCredentials rb = new RequestBuilderWithCredentials(RequestBuilderWithCredentials.GET, url, false) ;
                
                try {
                        
                        rb.sendRequest(null, new RequestCallback() {

                                @Override
                                public void onError(Request request, Throwable exception) {
                                
                                }

                                @Override
                                public 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 identifie
                                                        boolean 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 temporaire
                                                obtenirInfosComplementairesUtilisateur(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() {

                                @Override
                                public void onError(Request request, Throwable exception) {
                                
                                }

                                @Override
                                public 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() {

                                @Override
                                public void onError(Request request, Throwable exception) {
                                        // TODO Auto-generated method stub
                                        
                                }

                                @Override
                                public 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() {
        
                                        @Override
                                        public void onError(Request request, Throwable exception) {
                                                // TODO Auto-generated method stub
                                                
                                        }
        
                                        @Override
                                        public 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 nul
                if (!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() {
                                        @Override
                                        public 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 connexion
                                                getEtatUtilisateur(r);
                                        }
                                };
                                rafraichisseurJeton.scheduleRepeating(delaiRepetition);
                        }
                } else {
                        if (rafraichisseurJeton != null) { // on sait jamais non plus
                                rafraichisseurJeton.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() {

                                @Override
                                public void onError(Request request, Throwable exception) {
                                        // TODO Auto-generated method stub
                                        
                                }

                                @Override
                                public void onResponseReceived(Request request,
                                                Response response) {
                        
                                }       
                        }) ;
                        
                } catch (RequestException e) {
                        
                        e.printStackTrace() ;
                }               
        }
}