Subversion Repositories eFlore/Applications.del

Rev

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

package org.tela_botanica.del.client.services.rest;

import org.tela_botanica.del.client.cache.CacheClient;
import org.tela_botanica.del.client.config.Config;
import org.tela_botanica.del.client.modeles.Commentaire;
import org.tela_botanica.del.client.modeles.PropositionDetermination;
import org.tela_botanica.del.client.modeles.Utilisateur;
import org.tela_botanica.del.client.services.rest.async.PHPCallback.ModeRequete;
import org.tela_botanica.del.client.utils.Analytics;
import org.tela_botanica.del.client.services.rest.async.PropositionDeterminationCallBack;
import org.tela_botanica.del.client.services.rest.async.SuppressionCommentaireCallback;
import org.tela_botanica.del.client.services.rest.async.SuppressionPropositionDeterminationCallback;
import org.tela_botanica.del.client.services.rest.async.ValidationPropositionCallback;

import org.tela_botanica.del.client.services.RequestBuilderWithCredentials;
import com.google.gwt.http.client.URL;

public class PropositionDeterminationServiceConcret implements
                PropositionDeterminationService {
        
        private String baseUrl;

        public PropositionDeterminationServiceConcret() {
                Config config = new Config();
                this.baseUrl = config.getServiceBaseUrl();
        }
        
        public PropositionDeterminationServiceConcret(Config config) {
                this.baseUrl = config.getServiceBaseUrl();
        }

        @Override
        public void ajouterProposition(PropositionDetermination proposition, PropositionDeterminationCallBack callback) {
                
                String urlService = baseUrl+"commentaires/";
                RequestBuilderWithCredentials rb = new RequestBuilderWithCredentials(RequestBuilderWithCredentials.PUT, urlService);
                
                callback.setMode(ModeRequete.AJOUT);
                String chainePost = assemblerChaineRequeteAjoutModif(proposition);
                try {
                        // TODO urlencoder toutes les requetes;
                        rb.sendRequest(chainePost, callback);
                } catch (Exception e) {
                        //TODO: quoi faire si la requete est mal formée coté client avant d'être envoyée ?
                }
                // stats
                Analytics.evenement("proposition", "ajout", "{\"observation\": {\"id\": \"" + proposition.getObservation().getId() + "\", \"auteur\": \"" + proposition.getObservation().getAuteur()
                                + "\"}, \"proposition\": {\"auteur\": \"" + proposition.getAuteur() + "\", \"nom_sci\": \"" + proposition.getEspece() + "\", \"referentiel\": \"" + proposition.getReferentiel() + "\"}}");
        }
        
        private String assemblerChaineRequeteAjoutModif(PropositionDetermination proposition) {

                String chaineRequete = "";
                //TODO: tests sur les num nn et nt et la famille quand ils seront implémentés
                chaineRequete += "nom_sel="+URL.encodeQueryString(proposition.getEspece())+             
                "&auteur.prenom="+URL.encodeQueryString(proposition.getContributeur().getPrenom())+
                "&auteur.nom="+URL.encodeQueryString(proposition.getContributeur().getNom())+
                "&auteur.courriel="+URL.encodeQueryString(proposition.getContributeur().getAdresseEmail());
                
                if(proposition.getNumNomenclatural() != null) {
                        chaineRequete += "&nom_sel_nn="+URL.encodeQueryString(proposition.getNumNomenclatural());
                }
                if(proposition.getReferentiel() != null && !proposition.getReferentiel().equals("tous")) {
                        chaineRequete += "&nom_referentiel="+URL.encodeQueryString(proposition.getReferentiel());
                }
                if (proposition.getObservation() != null && proposition.getObservation().getId() != null) {
                        chaineRequete += "&observation="+URL.encodeQueryString(proposition.getObservation().getId());
                }
                if (proposition.getContributeur().getId() != null) {
                        chaineRequete += "&auteur.id="+URL.encodeQueryString(proposition.getContributeur().getId());
                }
                
                if (proposition.getParent() != null && proposition.getParent().getId() != null) {
                        chaineRequete += "&id_parent="+URL.encodeQueryString(proposition.getParent().getId());
                        PropositionDetermination propositionParente = proposition.getPropositionParenteOuNulle();
                        if(propositionParente != null) {
                                chaineRequete += "&proposition="+URL.encodeQueryString(propositionParente.getId());
                        }
                }
                
                if (proposition.getCommentaire() != null) {
                        chaineRequete += "&texte="+URL.encodeQueryString(proposition.getCommentaire());
                }

                return chaineRequete;
        }

        @Override
        public void supprimerProposition(PropositionDetermination proposition, SuppressionPropositionDeterminationCallback callback) {
                
                String urlService = baseUrl+"commentaires/"+proposition.getId();
                RequestBuilderWithCredentials rb = new RequestBuilderWithCredentials(RequestBuilderWithCredentials.DELETE, urlService);
                
                callback.setMode(ModeRequete.SUPPRESSION);
                try {
                        rb.sendRequest(null, callback);
                } catch (Exception e) {
                        //TODO: quoi faire si la requete est mal formée coté client avant d'être envoyée ?
                }
                // stats
                Analytics.evenement("proposition", "suppression", "{\"observation\": {\"id\": \"" + proposition.getObservation().getId() + "\", \"auteur\": \"" + proposition.getObservation().getAuteur()
                                + "\"}, \"proposition\": {\"auteur\": \"" + proposition.getAuteur() + "\", \"nom_sci\": \"" + proposition.getEspece() + "\", \"referentiel\": \"" + proposition.getReferentiel() + "\"}}");
        }
        
        
        @Override
        public void validerProposition(PropositionDetermination proposition, ValidationPropositionCallback callback) {
                
                String urlService = baseUrl+"determinations/valider-determination/"+proposition.getId();
                RequestBuilderWithCredentials rb = new RequestBuilderWithCredentials(RequestBuilderWithCredentials.POST, urlService);
                
                callback.setMode(ModeRequete.MODIFICATION);
                String chainePost = "auteur.id="+URL.encodeQueryString(proposition.getContributeur().getId())+
                                                        "&validateur.id="+URL.encodeQueryString(proposition.getValideePar());
                try {
                        rb.sendRequest(chainePost, callback);
                } catch (Exception e) {
                        //TODO: quoi faire si la requete est mal formée coté client avant d'être envoyée ?
                }
                // stats
                Utilisateur utilisateur = CacheClient.getInstance().getUtilisateur();
                Analytics.evenement("proposition", "validation", "{\"validateur\": \"" + utilisateur.getNomPrenomFormate() + "\", \"observation\": {\"id\": \"" + proposition.getObservation().getId() + "\", \"auteur\": \"" + proposition.getObservation().getAuteur()
                                + "\"}, \"proposition\": {\"auteur\": \"" + proposition.getAuteur() + "\", \"nom_sci\": \"" + proposition.getEspece() + "\", \"referentiel\": \"" + proposition.getReferentiel() + "\"}}");
        }
}