Subversion Repositories eFlore/Applications.coel

Rev

Rev 1906 | Blame | Compare with Previous | Last modification | View Log | RSS feed

package org.tela_botanica.client.util;

import java.util.HashMap;
import java.util.Iterator;

import org.tela_botanica.client.RegistreId;
import org.tela_botanica.client.configuration.Configuration;
import org.tela_botanica.client.http.JsonRestRequestBuilder;

import com.extjs.gxt.ui.client.Registry;
import com.google.gwt.http.client.URL;

/**
 * @author Gréguoire DUCHÉ <greguoire@tela-botanica.org>
 * @author Jean-Pascal MILCENT <jpm@tela-botanica.org>
 * @description La classe utilDAO fournit des méthodes communes pour les outils DAO
 * */
public class UtilDAO {
        
        private static String baseUrl = ((Configuration) Registry.get(RegistreId.CONFIG)).getServiceBaseUrl();
        private static String baseAuthUrl = ((Configuration) Registry.get(RegistreId.CONFIG)).getAuthServiceBaseUrl();
        public static final String GET = "GET";
        public static final String POST = "POST";
        public static final String DELETE = "DELETE";
        public static final String PUT = "PUT";
        private static final String SEPARATEUR_CHEMIN = "/";
        private static final String SEPARATEUR_CLE_VALEUR = "=";
        private static final String SEPARATEUR_PARAMETRE = "&";
        private static final String SEPARATEUR_CHEMIN_PARAMETRE = "?";
        private static final String CONTENU_CHEMIN_VIDE = "*";

        public static JsonRestRequestBuilder construireRequetePost(String nomService)   {
                return construireRequete(nomService, null, null, POST);
        }

        public static JsonRestRequestBuilder construireRequetePost(String nomService, String[] parametres)      {
                return construireRequete(nomService, parametres, null, POST);
        }

        public static JsonRestRequestBuilder construireRequete(String nomService)       {
                return construireRequete(nomService, null, null, GET);
        }
        
        public static JsonRestRequestBuilder construireRequete(String nomService, String[] parametres)  {
                return construireRequete(nomService, parametres, null, GET);
        }
        
        public static JsonRestRequestBuilder construireRequete(String nomService, HashMap<String, String> restrictions) {
                return construireRequete(nomService, null, restrictions, GET);
        }
        
        public static JsonRestRequestBuilder construireRequete(String nomService, String[] parametres, HashMap<String, String> restrictions)    {
                return construireRequete(nomService, parametres, restrictions, GET);
        }

        private static JsonRestRequestBuilder construireRequete(String nomService, String[] parametres, HashMap<String, String> restrictions, String typeRequete)       {
                String restrictionsUrl = construireUrlParametres(restrictions);
                String parametresUrl = construireUrlChemin(parametres);
                
                String urlComplete = baseUrl + nomService + parametresUrl + restrictionsUrl;
                String urlCompleteEncodee = URL.encode(urlComplete);
                
                JsonRestRequestBuilder jrrb;
                if (typeRequete.equals(GET))    {
                        jrrb = new JsonRestRequestBuilder(JsonRestRequestBuilder.GET, urlCompleteEncodee);
                } else  {
                        jrrb = new JsonRestRequestBuilder(JsonRestRequestBuilder.POST, urlCompleteEncodee);
                }
                return jrrb;
        }
        
        private static String construireUrlParametres(HashMap<String, String> parametres) {
                String parametresUrl = "";
                if (parametres != null && parametres.size() > 0)        {
                        parametresUrl = SEPARATEUR_CHEMIN_PARAMETRE;
                        Iterator<String> iterateur = parametres.keySet().iterator();
                        while (iterateur.hasNext())     {
                                String cle = iterateur.next();
                                parametresUrl += cle + SEPARATEUR_CLE_VALEUR + parametres.get(cle);
                                
                                if (iterateur.hasNext())        {
                                        parametresUrl = parametresUrl + SEPARATEUR_PARAMETRE;
                                }
                        }
                }
                return parametresUrl;
        }
        
        private static String construireUrlChemin(String[] morceauxDuChemin) {
                String cheminUrl = "";
                if (morceauxDuChemin != null && morceauxDuChemin.length > 0)    {
                        cheminUrl = SEPARATEUR_CHEMIN;
                        for (int i = 0; i < morceauxDuChemin.length; i++)       {
                                cheminUrl += (UtilString.isEmpty(morceauxDuChemin[i]) ? CONTENU_CHEMIN_VIDE : morceauxDuChemin[i]) + SEPARATEUR_CHEMIN;
                        }
                }
                return cheminUrl;
        }

        /**
         * Construit un JsonRestRequestBuilder avec le header Authorization
         */
        public static JsonRestRequestBuilder construireRequeteAuth(String nomService, HashMap<String, String> parametres) {
                return construireRequeteAuth(nomService, parametres, true);
        }

        /**
         * Construit un JsonRestRequestBuilder simple; si authorizationHeader vaut true, ajoute le header
         * "Authorization" pour le service d'authentification SSO (annuaire::auth)
         * 
         * @param nomService le nom du service (identite, login, logout...)
         * @param parametres tableau de paramètres
         * @param boolean authorizationHeader si true, enverra le jeton (si existant) dans un header Authorization
         * @return JsonRestRequestBuilder
         */
        public static JsonRestRequestBuilder construireRequeteAuth(String nomService, HashMap<String, String> parametres, boolean authorizationHeader) {
                String parametresUrl = construireUrlParametres(parametres);
                String urlComplete = baseAuthUrl + nomService + parametresUrl;
                String urlCompleteEncodee = URL.encode(urlComplete);
                JsonRestRequestBuilder jrrb = new JsonRestRequestBuilder(JsonRestRequestBuilder.GET, urlCompleteEncodee, authorizationHeader);
                return jrrb;
        }

        public static String getUrlService(String nomService) {
                return baseUrl + nomService;
        }
}