Subversion Repositories eFlore/Applications.del

Compare Revisions

Ignore whitespace Rev 2170 → Rev 2171

/branches/v1.11-magnesium/src/org/tela_botanica/del/client/services/rest/VoteDeterminationService.java
New file
0,0 → 1,14
package org.tela_botanica.del.client.services.rest;
 
import org.tela_botanica.del.client.modeles.PropositionDetermination;
import org.tela_botanica.del.client.modeles.VoteDetermination;
import org.tela_botanica.del.client.services.rest.async.AjoutVoteDeterminationCallback;
import org.tela_botanica.del.client.services.rest.async.ListeVotesDeterminationCallback;
 
public interface VoteDeterminationService {
 
void ajouterVote(VoteDetermination voteDetermination, AjoutVoteDeterminationCallback callback);
public void modifierVote(VoteDetermination voteDetermination, AjoutVoteDeterminationCallback callback);
void consulterVotesPourPropositionDetermination(PropositionDetermination propositionDetermination, ListeVotesDeterminationCallback callBack);
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/services/rest/ImageServiceConcret.java
New file
0,0 → 1,75
package org.tela_botanica.del.client.services.rest;
 
import org.tela_botanica.del.client.config.Config;
import org.tela_botanica.del.client.modeles.Image;
import org.tela_botanica.del.client.modeles.InformationsRecherche;
import org.tela_botanica.del.client.services.rest.async.ImagesParTaxonCallback;
import org.tela_botanica.del.client.services.rest.async.SuppressionImageCallback;
import org.tela_botanica.del.client.services.rest.async.PHPCallback.ModeRequete;
import org.tela_botanica.del.client.services.RequestBuilderWithCredentials;
 
public class ImageServiceConcret implements ImageService {
 
private String baseUrl;
public ImageServiceConcret() {
Config config = new Config();
this.baseUrl = config.getServiceBaseUrl();
}
public ImageServiceConcret(Config config) {
this.baseUrl = config.getServiceBaseUrl();
}
@Override
public void getImagesEfloreParTaxon(String taxon, ImagesParTaxonCallback callback) {
RequestBuilderWithCredentials rb = new RequestBuilderWithCredentials(RequestBuilderWithCredentials.GET, baseUrl + "images?nom_taxon=" + taxon);
callback.setMode(ModeRequete.LECTURE);
try {
rb.sendRequest(null, callback);
} catch (Exception e) {
// TODO: handle exception
}
}
 
@Override
public void getImagesParTaxon(InformationsRecherche infos, int debut, int fin, ImagesParTaxonCallback callback) {
RequestBuilderWithCredentials rb = new RequestBuilderWithCredentials(RequestBuilderWithCredentials.GET, baseUrl + "images" + assemblerChaineRequete(infos, debut, fin));
callback.setMode(ModeRequete.LECTURE);
try {
rb.sendRequest(null, callback);
} catch (Exception e) {
// TODO: handle exception
}
}
 
public void getImagesParObservation(String observationId, ImagesParTaxonCallback callback) {
// TODO implementer avec une methode realiste
RequestBuilderWithCredentials rb = new RequestBuilderWithCredentials(RequestBuilderWithCredentials.GET, baseUrl + "observations/"+observationId);
callback.setMode(ModeRequete.LECTURE);
try {
rb.sendRequest(null, callback);
} catch (Exception e) {
// TODO: handle exception
}
}
 
private String assemblerChaineRequete(InformationsRecherche infos, int debut, int fin) {
String chaineRequete = "?navigation.depart=" + debut + "&navigation.limite=" + (fin - debut);
chaineRequete += infos.versChaineRequete();
 
return chaineRequete;
}
public void supprimer(Image image, SuppressionImageCallback callback) {
String urlService = baseUrl+"images/"+image.getIdImage();
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 ?
}
}
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/services/rest/PreferencesService.java
New file
0,0 → 1,14
package org.tela_botanica.del.client.services.rest;
 
import java.util.HashMap;
 
import org.tela_botanica.del.client.modeles.Utilisateur;
import org.tela_botanica.del.client.services.rest.async.ListePreferencesCallback;
import org.tela_botanica.del.client.services.rest.async.ModificationPreferencesCallback;
 
public interface PreferencesService {
public void modifierPreferences(Utilisateur utilisateur, HashMap<String, String> preferences, ModificationPreferencesCallback modificationPreferencesCallback);
public void chargerPreferences(Utilisateur utilisateur, ListePreferencesCallback listePreferencesCallbackCallback);
 
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/services/rest/CommentaireService.java
New file
0,0 → 1,13
package org.tela_botanica.del.client.services.rest;
 
import org.tela_botanica.del.client.modeles.Commentaire;
import org.tela_botanica.del.client.modeles.PropositionDetermination;
import org.tela_botanica.del.client.services.rest.async.AjoutCommentaireCallback;
import org.tela_botanica.del.client.services.rest.async.ListeCommentairesCallback;
import org.tela_botanica.del.client.services.rest.async.SuppressionCommentaireCallback;
 
public interface CommentaireService {
public void ajouterCommentaire(Commentaire commentaire, AjoutCommentaireCallback callback);
public void supprimerCommentaire(Commentaire commentaire, SuppressionCommentaireCallback callback);
public void chargerCommentaires(PropositionDetermination propositionDetermination, ListeCommentairesCallback commentaireCallback);
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/services/rest/VoteProtocoleService.java
New file
0,0 → 1,21
package org.tela_botanica.del.client.services.rest;
 
import java.util.List;
 
import org.tela_botanica.del.client.modeles.VoteProtocole;
import org.tela_botanica.del.client.services.rest.async.AjoutVoteProtocoleCallback;
import org.tela_botanica.del.client.services.rest.async.VoteProtocoleCallback;
 
public interface VoteProtocoleService {
public List<VoteProtocole> getVote(String idImage);
 
public List<VoteProtocole> getVotePourImageEtProtocole(String idImage, String protocolName);
 
void ajouterVote(String idImage, VoteProtocole voteProtocole, AjoutVoteProtocoleCallback callback);
 
public void modifierVote(String idImage, VoteProtocole voteProtocole, VoteProtocoleCallback vpc);
public void supprimerVote(String idImage, VoteProtocole voteProtocole, VoteProtocoleCallback vpc);
 
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/services/rest/ProtocoleService.java
New file
0,0 → 1,11
package org.tela_botanica.del.client.services.rest;
 
import org.tela_botanica.del.client.services.rest.async.ProtocolesCallback;
 
public interface ProtocoleService {
 
public void getProtocole(String nomProtocole);
 
public void getProtocoles(ProtocolesCallback pc);
 
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/services/rest/MotsClesServiceConcret.java
New file
0,0 → 1,81
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.services.rest.async.AjoutMotsClesImageCallback;
import org.tela_botanica.del.client.services.rest.async.ListeMotsClesImageCallBack;
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.SuppressionMotCleImageCallback;
 
import org.tela_botanica.del.client.services.RequestBuilderWithCredentials;
import com.google.gwt.http.client.URL;
 
public class MotsClesServiceConcret implements MotsClesService {
 
private String baseUrl;
public MotsClesServiceConcret() {
Config config = new Config();
this.baseUrl = config.getServiceBaseUrl();
}
public MotsClesServiceConcret(Config config) {
this.baseUrl = config.getServiceBaseUrl();
}
@Override
public void getMotsClesImage(String idImage,
ListeMotsClesImageCallBack callback) {
RequestBuilderWithCredentials rb = new RequestBuilderWithCredentials(RequestBuilderWithCredentials.GET, baseUrl + "mots-cles" + assemblerChaineRequete(idImage));
callback.setMode(ModeRequete.LECTURE);
try {
rb.sendRequest(null, callback);
} catch (Exception e) {
// TODO: handle exception
}
}
private String assemblerChaineRequete(String idImage) {
String chaineRequete = "?image="+idImage;
return chaineRequete;
}
 
@Override
public void ajouterMotCleImage(String idImage, String motCle,
AjoutMotsClesImageCallback callback) {
String urlService = baseUrl+"mots-cles/";
RequestBuilderWithCredentials rb = new RequestBuilderWithCredentials(RequestBuilderWithCredentials.PUT, urlService);
callback.setMode(ModeRequete.AJOUT);
String chainePost = assemblerChaineRequeteAjout(idImage, motCle);
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
Analytics.evenement("mot-cle-image", "ajout", "{\"mot-cle\": \"" + motCle + "\", \"image\": \"" + idImage + "\"}");
}
 
private String assemblerChaineRequeteAjout(String idImage, String motCle) {
return "image="+URL.encodeQueryString(idImage)+
"&mot_cle="+URL.encodeQueryString(motCle)+
"&"+URL.encodeQueryString("auteur.id")+"="+URL.encodeQueryString(CacheClient.getInstance().getUtilisateur().getId());
}
 
@Override
public void supprimerMotCleImage(String idMotCle, SuppressionMotCleImageCallback callback) {
String urlService = baseUrl+"mots-cles/"+idMotCle;
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("mot-cle-image", "suppression", "{\"id_mot-cle\": \"" + idMotCle + "\"}");
}
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/services/rest/PropositionDeterminationService.java
New file
0,0 → 1,13
package org.tela_botanica.del.client.services.rest;
 
import org.tela_botanica.del.client.modeles.PropositionDetermination;
import org.tela_botanica.del.client.services.rest.async.PropositionDeterminationCallBack;
import org.tela_botanica.del.client.services.rest.async.SuppressionPropositionDeterminationCallback;
import org.tela_botanica.del.client.services.rest.async.ValidationPropositionCallback;
 
public interface PropositionDeterminationService {
 
public void ajouterProposition(PropositionDetermination proposition, PropositionDeterminationCallBack callback);
public void supprimerProposition(PropositionDetermination proposition, SuppressionPropositionDeterminationCallback callback);
public void validerProposition(PropositionDetermination proposition, ValidationPropositionCallback validationPropositionCallback);
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/services/rest/ObservationServiceConcret.java
New file
0,0 → 1,72
package org.tela_botanica.del.client.services.rest;
 
import org.tela_botanica.del.client.config.Config;
import org.tela_botanica.del.client.modeles.InformationsRecherche;
import org.tela_botanica.del.client.modeles.Observation;
import org.tela_botanica.del.client.modeles.VoteDetermination;
import org.tela_botanica.del.client.services.rest.async.DepublicationObservationCallBack;
import org.tela_botanica.del.client.services.rest.async.ObservationsCallback;
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.RequestBuilderWithCredentials;
 
public class ObservationServiceConcret implements ObservationService {
 
private String baseUrl;
 
public ObservationServiceConcret() {
Config config = new Config();
this.baseUrl = config.getServiceBaseUrl();
}
public ObservationServiceConcret(Config config) {
this.baseUrl = config.getServiceBaseUrl();
}
@Override
public void getObservations(InformationsRecherche infos, int debut, int fin, String statut, ObservationsCallback callback) {
RequestBuilderWithCredentials rb = new RequestBuilderWithCredentials(RequestBuilderWithCredentials.GET, baseUrl + "observations" + assemblerChaineRequete(infos, debut, fin, statut));
callback.setMode(ModeRequete.LECTURE);
try {
rb.sendRequest(null, callback);
} catch (Exception e) {
// TODO: handle exception
}
}
 
private String assemblerChaineRequete(InformationsRecherche infos, int debut, int fin, String statut) {
String chaineRequete = "?navigation.depart=" + debut + "&navigation.limite=" + (fin - debut);
if (statut != null && !statut.equals("tous")) {
chaineRequete += "&masque.type=" + statut;
}
chaineRequete+= infos.versChaineRequete();
 
return chaineRequete;
}
 
@Override
public void getObservation(String idObservation, ObservationsCallback callback) {
RequestBuilderWithCredentials rb = new RequestBuilderWithCredentials(RequestBuilderWithCredentials.GET, baseUrl + "observations/"+idObservation);
callback.setMode(ModeRequete.LECTURE);
try {
rb.sendRequest(null, callback);
} catch (Exception e) {
// TODO: handle exception
}
}
public void depublier(Observation observation, DepublicationObservationCallBack callback) {
String urlService = baseUrl+"observations/"+observation.getId();
RequestBuilderWithCredentials rb = new RequestBuilderWithCredentials(RequestBuilderWithCredentials.POST, urlService);
callback.setMode(ModeRequete.MODIFICATION);
String chainePost = "transmission=0";
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
Analytics.evenement("observation", "depublication", "{\"observation\": {\"id\": \"" + observation.getId() + "\", \"auteur\": \"" + observation.getAuteur() + "\"}}");
}
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/services/rest/UtilisateurService.java
New file
0,0 → 1,13
package org.tela_botanica.del.client.services.rest;
 
import org.tela_botanica.del.client.services.rest.async.ActiviteUtilisateurCallback;
import org.tela_botanica.del.client.services.rest.async.UtilisateurCallback;
 
public interface UtilisateurService {
public void connecterUtilisateur(String login, String motDePasse, UtilisateurCallback callback);
public void deconnecterUtilisateur(UtilisateurCallback callback);
public void obtenirUtilisateur(UtilisateurCallback callback);
public void obtenirUtilisateur(UtilisateurCallback callback, boolean ignorerAnnuaire);
public void obtenirActiviteUtilisateur(String idUtilisateur, ActiviteUtilisateurCallback callback);
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/services/rest/async/DepublicationObservationCallBack.java
New file
0,0 → 1,13
package org.tela_botanica.del.client.services.rest.async;
 
import com.google.gwt.json.client.JSONParser;
 
public abstract class DepublicationObservationCallBack extends PHPCallback<String> {
@Override
public String parserJSON(String retourService) {
String reponse = JSONParser.parseStrict(retourService).isString().stringValue();
return reponse;
}
 
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/services/rest/async/AjoutMotsClesImageCallback.java
New file
0,0 → 1,8
package org.tela_botanica.del.client.services.rest.async;
 
public abstract class AjoutMotsClesImageCallback extends PHPCallback<Void> {
@Override
public Void parserJSON(String retourService) {
return null;
}
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/services/rest/async/ValidationPropositionCallback.java
New file
0,0 → 1,9
package org.tela_botanica.del.client.services.rest.async;
 
public abstract class ValidationPropositionCallback extends PHPCallback<String> {
 
@Override
public String parserJSON(String retourService) {
return retourService;
}
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/services/rest/async/SuppressionMotCleImageCallback.java
New file
0,0 → 1,9
package org.tela_botanica.del.client.services.rest.async;
 
public abstract class SuppressionMotCleImageCallback extends PHPCallback<String> {
 
@Override
public String parserJSON(String retourService) {
return null;
}
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/services/rest/async/AuthCallback.java
New file
0,0 → 1,20
package org.tela_botanica.del.client.services.rest.async;
 
import org.tela_botanica.del.client.modeles.AuthInfo;
import org.tela_botanica.del.client.utils.UtilitairesServiceResultat;
 
import com.google.gwt.json.client.JSONParser;
import com.google.gwt.user.client.Window;
 
/**
* Retour des services annuaire:auth : connexion, deconnexion, identite - un jeton
* JWT si identifié, false sinon
*/
public abstract class AuthCallback extends PHPCallback<AuthInfo> {
 
@Override
public AuthInfo parserJSON(String retourService) {
AuthInfo authInfo = UtilitairesServiceResultat.parserAuthJson(JSONParser.parseStrict(retourService));
return authInfo;
}
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/services/rest/async/ListePreferencesCallback.java
New file
0,0 → 1,19
package org.tela_botanica.del.client.services.rest.async;
 
import java.util.HashMap;
 
import org.tela_botanica.del.client.utils.UtilitairesServiceResultat;
 
import com.google.gwt.json.client.JSONParser;
 
/**
* Objet passé en paramètre d'un service de chargement des préférences utilisateur
*
*/
public abstract class ListePreferencesCallback extends PHPCallback<HashMap<String, String>>{
 
@Override
public HashMap<String, String> parserJSON(String retourService) {
return UtilitairesServiceResultat.parserPreferencesUtilisateur(JSONParser.parseStrict(retourService));
}
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/services/rest/async/ActiviteUtilisateurCallback.java
New file
0,0 → 1,23
package org.tela_botanica.del.client.services.rest.async;
 
import java.util.Map;
 
import org.tela_botanica.del.client.modeles.ActiviteUtilisateur;
import org.tela_botanica.del.client.modeles.Utilisateur;
import org.tela_botanica.del.client.utils.UtilitairesServiceResultat;
 
import com.google.gwt.json.client.JSONParser;
 
/**
* Objet passé en paramètre d'un service de recuperation d'un utilisateur
* @author LIENS
*
*/
public abstract class ActiviteUtilisateurCallback extends PHPCallback<ActiviteUtilisateur> {
 
@Override
public ActiviteUtilisateur parserJSON(String retourService) {
return UtilitairesServiceResultat.parserActiviteUtilisateurJson(JSONParser.parseStrict(retourService));
}
 
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/services/rest/async/AjoutVoteDeterminationCallback.java
New file
0,0 → 1,15
package org.tela_botanica.del.client.services.rest.async;
 
/**
* Objet passé en paramètre d'un service d'ajout de vote sur une determination
* @author LIENS
*
*/
public abstract class AjoutVoteDeterminationCallback extends PHPCallback<Void> {
 
@Override
public Void parserJSON(String retourService) {
return null;
}
 
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/services/rest/async/VoteProtocoleCallback.java
New file
0,0 → 1,15
package org.tela_botanica.del.client.services.rest.async;
 
/**
* Objet passé en paramètre d'un service d'ajout de votes
* @author LIENS
*
*/
public abstract class VoteProtocoleCallback extends PHPCallback<Void> {
 
@Override
public Void parserJSON(String retourService) {
return null;
}
 
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/services/rest/async/AjoutCommentaireCallback.java
New file
0,0 → 1,19
package org.tela_botanica.del.client.services.rest.async;
 
import org.tela_botanica.del.client.utils.UtilitairesServiceResultat;
 
import com.google.gwt.json.client.JSONParser;
 
/**
* Objet passé en paramètre d'un service d'ajout de commentaire
* @author LIENS
*
*/
public abstract class AjoutCommentaireCallback extends PHPCallback<String>{
 
@Override
public String parserJSON(String retourService) {
return UtilitairesServiceResultat.parserRetourAjoutCommentaire(JSONParser.parseStrict(retourService).isObject());
}
 
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/services/rest/async/AjoutVoteProtocoleCallback.java
New file
0,0 → 1,13
package org.tela_botanica.del.client.services.rest.async;
 
import org.tela_botanica.del.client.utils.UtilitairesServiceResultat;
 
import com.google.gwt.json.client.JSONParser;
 
public abstract class AjoutVoteProtocoleCallback extends PHPCallback<String> {
 
@Override
public String parserJSON(String retourService) {
return UtilitairesServiceResultat.parserRetourAjoutVoteProtocole(JSONParser.parseStrict(retourService).isObject());
}
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/services/rest/async/PropositionDeterminationCallBack.java
New file
0,0 → 1,19
package org.tela_botanica.del.client.services.rest.async;
 
import org.tela_botanica.del.client.utils.UtilitairesServiceResultat;
 
import com.google.gwt.json.client.JSONParser;
 
/**
* Objet passé en paramètre d'un service d'ajout de determination
* @author LIENS
*
*/
public abstract class PropositionDeterminationCallBack extends PHPCallback<String> {
 
@Override
public String parserJSON(String retourService) {
return UtilitairesServiceResultat.parserRetourAjoutCommentaire(JSONParser.parseStrict(retourService).isObject());
}
 
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/services/rest/async/UtilisateurCallback.java
New file
0,0 → 1,23
package org.tela_botanica.del.client.services.rest.async;
 
import org.tela_botanica.del.client.modeles.Utilisateur;
import org.tela_botanica.del.client.utils.UtilitairesServiceResultat;
 
import com.google.gwt.json.client.JSONParser;
import com.google.gwt.user.client.Window;
 
/**
* Objet passé en paramètre d'un service de recuperation d'un utilisateur
* @author LIENS
*
*/
public abstract class UtilisateurCallback extends PHPCallback<Utilisateur> {
 
@Override
public Utilisateur parserJSON(String retourService) {
Utilisateur util = UtilitairesServiceResultat.parserUtilisateurJson(JSONParser.parseStrict(retourService));
return util;
}
 
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/services/rest/async/PaysCallback.java
New file
0,0 → 1,15
package org.tela_botanica.del.client.services.rest.async;
 
import java.util.Map;
 
import org.tela_botanica.del.client.utils.UtilitairesServiceResultat;
 
import com.google.gwt.json.client.JSONParser;
 
public abstract class PaysCallback extends PHPCallback<Map<String, String>> {
 
@Override
public Map<String, String> parserJSON(String retourService) {
return UtilitairesServiceResultat.parserListePays(JSONParser.parseStrict(retourService));
}
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/services/rest/async/ObservationsCallback.java
New file
0,0 → 1,21
package org.tela_botanica.del.client.services.rest.async;
 
import org.tela_botanica.del.client.modeles.ObservationServiceResultat;
import org.tela_botanica.del.client.utils.UtilitairesServiceResultat;
 
import com.google.gwt.json.client.JSONParser;
 
/**
* Objet passé en paramètre d'un service de recuperation d'observations
*
* @author LIENS
*
*/
public abstract class ObservationsCallback extends PHPCallback<ObservationServiceResultat> {
 
@Override
public ObservationServiceResultat parserJSON(String retourService) {
return UtilitairesServiceResultat.parserObservationServiceResultat(JSONParser.parseStrict(retourService));
}
 
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/services/rest/async/SuppressionCommentaireCallback.java
New file
0,0 → 1,9
package org.tela_botanica.del.client.services.rest.async;
 
public abstract class SuppressionCommentaireCallback extends PHPCallback<String> {
 
@Override
public String parserJSON(String retourService) {
return null;
}
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/services/rest/async/ImagesParTaxonCallback.java
New file
0,0 → 1,24
package org.tela_botanica.del.client.services.rest.async;
 
import org.tela_botanica.del.client.modeles.ImageServiceResultat;
import org.tela_botanica.del.client.utils.UtilitairesServiceResultat;
 
import com.google.gwt.json.client.JSONParser;
 
/**
*
* Objet passé en paramètre d'un service d'ajout de recuperation des images pour
* un taxon
*
* @author LIENS
*
*/
public abstract class ImagesParTaxonCallback extends PHPCallback<ImageServiceResultat> {
 
@Override
public ImageServiceResultat parserJSON(String retourService) {
ImageServiceResultat resultat = UtilitairesServiceResultat.parserImageServiceResultat(JSONParser.parseStrict(retourService));
return resultat;
}
 
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/services/rest/async/SuppressionPropositionDeterminationCallback.java
New file
0,0 → 1,9
package org.tela_botanica.del.client.services.rest.async;
 
public abstract class SuppressionPropositionDeterminationCallback extends PHPCallback<String> {
 
@Override
public String parserJSON(String retourService) {
return null;
}
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/services/rest/async/ListeVotesDeterminationCallback.java
New file
0,0 → 1,22
package org.tela_botanica.del.client.services.rest.async;
 
import java.util.HashMap;
 
import org.tela_botanica.del.client.modeles.VoteDetermination;
import org.tela_botanica.del.client.utils.UtilitairesServiceResultat;
 
/**
* Objet passé en paramètre d'un service de recuperation de la liste de votes
* sur une determination
*
* @author LIENS
*
*/
public abstract class ListeVotesDeterminationCallback extends PHPCallback<HashMap<String, VoteDetermination>> {
 
@Override
public HashMap<String, VoteDetermination> parserJSON(String retourService) {
return UtilitairesServiceResultat.parserRetourListeVotesDetermination(retourService);
}
 
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/services/rest/async/PHPCallback.java
New file
0,0 → 1,95
package org.tela_botanica.del.client.services.rest.async;
 
import java.util.Arrays;
import java.util.List;
 
import org.tela_botanica.del.client.utils.StringUtils;
 
import com.google.gwt.core.shared.GWT;
import com.google.gwt.http.client.Request;
import com.google.gwt.http.client.RequestCallback;
import com.google.gwt.http.client.Response;
import com.google.gwt.json.client.JSONException;
import com.google.gwt.user.client.Window;
 
/**
* Cette classe correspond au retour asynchrone d'un webservice php qui retourne
* l'objet generique T si l'appel de service est un succcès
*
* @author LIENS
*
* @param <T>
*/
public abstract class PHPCallback<T> implements RequestCallback {
 
public enum ModeRequete {
AJOUT, MODIFICATION, SUPPRESSION, LECTURE
}
 
protected ModeRequete mode;
 
public PHPCallback() {
this.mode = ModeRequete.LECTURE;
}
 
public void setMode(ModeRequete mode) {
this.mode = mode;
}
 
@Override
public void onResponseReceived(Request request, Response response) {
int statusCode = response.getStatusCode();
List<Integer> codeAttendu = null;
switch (mode) {
case AJOUT:
codeAttendu = Arrays.asList(200, 201, 204);
break;
case MODIFICATION:
codeAttendu = Arrays.asList(200, 201, 204);
break;
case SUPPRESSION:
codeAttendu = Arrays.asList(200);
break;
case LECTURE:
codeAttendu = Arrays.asList(200);
break;
default:
codeAttendu = Arrays.asList(500);
break;
}
//GWT.log("Codes attendus:"+codeAttendu.toString());
//GWT.log("Code:"+statusCode);
if (codeAttendu != null && codeAttendu.contains(statusCode)) {
//GWT.log("Code: OK");
try {
T reponseParsee = parserJSON(response.getText());
surRetour(reponseParsee);
} catch (JSONException e) {
StringUtils.logVersConsole("Une erreur est survenue, le serveur a répondu : "+response.getText());
}
} else {
surErreur("Erreur " + statusCode + ": " + response.getText());
}
}
 
/**
* Cette methode permet de pareser le JSON retourné par le webservice pour
* le transformer en objet métier
*
* @param retourService
* @return
*/
public abstract T parserJSON(String retourService);
 
@Override
public void onError(Request request, Throwable exception) {
surErreur(exception.getMessage());
}
 
public abstract void surRetour(T objetRetour);
 
public void surErreur(String messageErreur) {
GWT.log("Erreur service : "+messageErreur);
Window.alert(messageErreur);
}
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/services/rest/async/ModificationPreferencesCallback.java
New file
0,0 → 1,15
package org.tela_botanica.del.client.services.rest.async;
 
/**
* Objet passé en paramètre d'un service de modification des préférences utilisateur
* @author LIENS
*
*/
public abstract class ModificationPreferencesCallback extends PHPCallback<String>{
 
@Override
public String parserJSON(String retourService) {
return null;
}
 
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/services/rest/async/ListeCommentairesCallback.java
New file
0,0 → 1,22
package org.tela_botanica.del.client.services.rest.async;
 
import java.util.List;
 
import org.tela_botanica.del.client.modeles.Commentaire;
import org.tela_botanica.del.client.utils.UtilitairesServiceResultat;
 
import com.google.gwt.json.client.JSONParser;
 
/**
* Objet passé en paramètre d'un service de recuperation d'une liste de commentaires
* @author LIENS
*
*/
public abstract class ListeCommentairesCallback extends PHPCallback<List<Commentaire>> {
 
@Override
public List<Commentaire> parserJSON(String retourService) {
return UtilitairesServiceResultat.parserCommentaires(JSONParser.parseStrict(retourService).isObject().get("resultats").isObject());
}
 
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/services/rest/async/ProtocolesCallback.java
New file
0,0 → 1,22
package org.tela_botanica.del.client.services.rest.async;
 
import org.tela_botanica.del.client.modeles.ProtocoleServiceResultat;
import org.tela_botanica.del.client.utils.UtilitairesServiceResultat;
 
import com.google.gwt.json.client.JSONParser;
 
/**
* Objet passé en paramètre d'un service de recuperation de la liste des
* protocoles
*
* @author LIENS
*
*/
public abstract class ProtocolesCallback extends PHPCallback<ProtocoleServiceResultat> {
 
@Override
public ProtocoleServiceResultat parserJSON(String retourService) {
return UtilitairesServiceResultat.parserProtocoleServiceResultat(JSONParser.parseStrict(retourService));
}
 
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/services/rest/async/SuppressionImageCallback.java
New file
0,0 → 1,12
package org.tela_botanica.del.client.services.rest.async;
 
import com.google.gwt.json.client.JSONParser;
 
public abstract class SuppressionImageCallback extends PHPCallback<String> {
 
@Override
public String parserJSON(String retourService) {
String reponse = JSONParser.parseStrict(retourService).isString().stringValue();
return reponse;
}
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/services/rest/async/ListeMotsClesImageCallBack.java
New file
0,0 → 1,16
package org.tela_botanica.del.client.services.rest.async;
 
import java.util.List;
 
import org.tela_botanica.del.client.modeles.MotCle;
import org.tela_botanica.del.client.utils.UtilitairesServiceResultat;
 
import com.google.gwt.json.client.JSONParser;
import com.google.gwt.user.client.Window;
 
public abstract class ListeMotsClesImageCallBack extends PHPCallback<List<MotCle>> {
@Override
public List<MotCle> parserJSON(String retourService) {
return UtilitairesServiceResultat.parserRetourListeMotsClesImage(JSONParser.parseStrict(retourService).isObject().get("resultats").isObject());
}
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/services/rest/PaysService.java
New file
0,0 → 1,7
package org.tela_botanica.del.client.services.rest;
 
import org.tela_botanica.del.client.services.rest.async.PaysCallback;
 
public interface PaysService {
public void getPays(PaysCallback callback);
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/services/rest/VoteDeterminationServiceConcret.java
New file
0,0 → 1,101
package org.tela_botanica.del.client.services.rest;
 
import org.tela_botanica.del.client.config.Config;
import org.tela_botanica.del.client.modeles.PropositionDetermination;
import org.tela_botanica.del.client.modeles.VoteDetermination;
import org.tela_botanica.del.client.services.rest.async.AjoutVoteDeterminationCallback;
import org.tela_botanica.del.client.services.rest.async.ListeVotesDeterminationCallback;
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.RequestBuilderWithCredentials;
import com.google.gwt.user.client.Window;
 
public class VoteDeterminationServiceConcret implements VoteDeterminationService {
 
private String baseUrl;
 
public VoteDeterminationServiceConcret() {
Config config = new Config();
this.baseUrl = config.getServiceBaseUrl();
}
public VoteDeterminationServiceConcret(Config config) {
this.baseUrl = config.getServiceBaseUrl();
}
@Override
public void ajouterVote(VoteDetermination voteDetermination, AjoutVoteDeterminationCallback callback) {
String idObservation = voteDetermination.getPropositionDetermination().getObservation().getId();
String idProposition = voteDetermination.getPropositionDetermination().getId();
//cas de la proposition de détermination crée automatiquement à partir de l'obs
if(idProposition == null) {
idProposition = "0";
}
String urlService = baseUrl+"observations/"+idObservation+"/"+idProposition+"/vote/";
RequestBuilderWithCredentials rb = new RequestBuilderWithCredentials(RequestBuilderWithCredentials.PUT, urlService);
callback.setMode(ModeRequete.AJOUT);
String chainePost = assemblerChaineRequeteAjoutModif(voteDetermination);
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
Analytics.evenement("vote", "ajout", "{\"vote\": {\"valeur\": \"" + voteDetermination.getVote() + "\", \"auteur\": \"" + voteDetermination.getAuteur()
+ "\"}, \"proposition\": {\"auteur\": \"" + voteDetermination.getPropositionDetermination().getAuteur() + "\", \"nom_sci\": \"" + voteDetermination.getPropositionDetermination().getEspece() + "\", \"referentiel\": \"" + voteDetermination.getPropositionDetermination().getReferentiel() + "\"}}");
}
 
@Override
public void modifierVote(VoteDetermination voteDetermination, AjoutVoteDeterminationCallback callback) {
String idObservation = voteDetermination.getPropositionDetermination().getObservation().getId();
String idProposition = voteDetermination.getPropositionDetermination().getId();
//cas de la proposition de détermination crée automatiquement à partir de l'obs
if(idProposition == null) {
idProposition = "0";
}
String urlService = baseUrl+"observations/"+idObservation+"/"+idProposition+"/vote/";
RequestBuilderWithCredentials rb = new RequestBuilderWithCredentials(RequestBuilderWithCredentials.POST, urlService);
callback.setMode(ModeRequete.MODIFICATION);
String chainePost = assemblerChaineRequeteAjoutModif(voteDetermination);
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
Analytics.evenement("vote", "modification", "{\"vote\": {\"valeur\": \"" + voteDetermination.getVote() + "\", \"auteur\": \"" + voteDetermination.getAuteur()
+ "\"}, \"proposition\": {\"auteur\": \"" + voteDetermination.getPropositionDetermination().getAuteur() + "\", \"nom_sci\": \"" + voteDetermination.getPropositionDetermination().getEspece() + "\", \"referentiel\": \"" + voteDetermination.getPropositionDetermination().getReferentiel() + "\"}}");
}
 
private String assemblerChaineRequeteAjoutModif(VoteDetermination voteDetermination) {
String chaineRequete = "utilisateur="+voteDetermination.getContributeur()+"&"+
"valeur="+voteDetermination.getVote();
return chaineRequete;
}
 
@Override
public void consulterVotesPourPropositionDetermination(PropositionDetermination propositionDetermination, ListeVotesDeterminationCallback callback) {
String idObservation = propositionDetermination.getObservation().getId();
String idProposition = propositionDetermination.getId();
//cas de la proposition de détermination crée automatiquement à partir de l'obs
if(idProposition == null) {
idProposition = "0";
}
String urlService = baseUrl+"observations/"+idObservation+"/"+idProposition+"/vote/";
RequestBuilderWithCredentials rb = new RequestBuilderWithCredentials(RequestBuilderWithCredentials.GET, urlService);
callback.setMode(ModeRequete.LECTURE);
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 ?
}
}
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/services/rest/PreferencesServiceConcret.java
New file
0,0 → 1,70
package org.tela_botanica.del.client.services.rest;
 
import java.util.HashMap;
import java.util.Iterator;
 
import org.tela_botanica.del.client.config.Config;
import org.tela_botanica.del.client.modeles.Utilisateur;
import org.tela_botanica.del.client.services.rest.async.ListePreferencesCallback;
import org.tela_botanica.del.client.services.rest.async.ModificationPreferencesCallback;
import org.tela_botanica.del.client.services.rest.async.PHPCallback.ModeRequete;
 
import org.tela_botanica.del.client.services.RequestBuilderWithCredentials;
import com.google.gwt.user.client.Window;
 
public class PreferencesServiceConcret implements PreferencesService {
private String baseUrl;
 
public PreferencesServiceConcret() {
this(new Config());
}
public PreferencesServiceConcret(Config config) {
this.baseUrl = config.getUrl("serviceUtilisateursBaseUrl");
}
 
@Override
public void modifierPreferences(Utilisateur utilisateur, HashMap<String, String> preferences, ModificationPreferencesCallback callback) {
String idUtilisateur = utilisateur.getId();
String urlService = baseUrl+"utilisateurs/"+idUtilisateur+"/preferences/";
RequestBuilderWithCredentials rb = new RequestBuilderWithCredentials(RequestBuilderWithCredentials.POST, urlService);
callback.setMode(ModeRequete.MODIFICATION);
String chainePost = assemblerRequeteModification(preferences);
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 ?
}
}
private String assemblerRequeteModification(HashMap<String, String> preferences) {
String chaine = "";
Iterator<String> it = preferences.keySet().iterator();
while (it.hasNext()) {
String cle = it.next();
if(!chaine.equals("")) {
chaine += "&";
}
chaine += cle+"="+preferences.get(cle);
}
return chaine;
}
 
@Override
public void chargerPreferences(Utilisateur utilisateur,
ListePreferencesCallback callback) {
String idUtilisateur = utilisateur.getId();
String urlService = baseUrl+"utilisateurs/"+idUtilisateur+"/preferences/";
RequestBuilderWithCredentials rb = new RequestBuilderWithCredentials(RequestBuilderWithCredentials.GET, urlService);
callback.setMode(ModeRequete.LECTURE);
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 ?
}
}
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/services/rest/CommentaireServiceConcret.java
New file
0,0 → 1,97
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.AjoutCommentaireCallback;
import org.tela_botanica.del.client.services.rest.async.ListeCommentairesCallback;
import org.tela_botanica.del.client.services.rest.async.PHPCallback.ModeRequete;
import org.tela_botanica.del.client.services.rest.async.SuppressionCommentaireCallback;
import org.tela_botanica.del.client.utils.Analytics;
import org.tela_botanica.del.client.services.RequestBuilderWithCredentials;
import com.google.gwt.http.client.URL;
 
public class CommentaireServiceConcret implements CommentaireService {
 
private String baseUrl;
 
public CommentaireServiceConcret() {
Config config = new Config();
this.baseUrl = config.getServiceBaseUrl();
}
 
public CommentaireServiceConcret(Config config) {
this.baseUrl = config.getServiceBaseUrl();
}
 
@Override
public void ajouterCommentaire(Commentaire commentaire, AjoutCommentaireCallback callback) {
 
String urlService = baseUrl+"commentaires/";
RequestBuilderWithCredentials rb = new RequestBuilderWithCredentials(RequestBuilderWithCredentials.PUT, urlService);
 
callback.setMode(ModeRequete.AJOUT);
String chainePost = assemblerChaineRequeteAjoutModif(commentaire);
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
Analytics.evenement("commentaire", "ajout", "{\"auteur\": \"" + commentaire.getAuteur() + "\", \"observation\": \"" + commentaire.getObservation().getId() + "\"}");
}
 
private String assemblerChaineRequeteAjoutModif(Commentaire commentaire) {
 
String chaineRequete = "";
if(commentaire.getObservation() != null && commentaire.getObservation().getId() != null) {
chaineRequete += "observation="+URL.encodeQueryString(commentaire.getObservation().getId());
}
if(commentaire.getContributeur().getId() != null) {
chaineRequete += "&auteur.id="+URL.encodeQueryString(commentaire.getContributeur().getId());
}
 
if(commentaire.getParent() != null && commentaire.getParent().getId() != null) {
chaineRequete += "&id_parent="+URL.encodeQueryString(commentaire.getParent().getId());
PropositionDetermination propositionParente = commentaire.getPropositionParenteOuNulle();
if(propositionParente != null) {
chaineRequete += "&proposition="+URL.encodeQueryString(propositionParente.getId());
}
}
chaineRequete += "&texte="+URL.encodeQueryString(commentaire.getCommentaire())+
"&auteur.prenom="+URL.encodeQueryString(commentaire.getContributeur().getPrenom())+
"&auteur.nom="+URL.encodeQueryString(commentaire.getContributeur().getNom())+
"&auteur.courriel="+URL.encodeQueryString(commentaire.getContributeur().getAdresseEmail());
return chaineRequete;
}
 
public void chargerCommentaires(PropositionDetermination propositionDetermination, ListeCommentairesCallback commentaireCallback) {
String urlService = baseUrl+"commentaires/?proposition="+propositionDetermination.getId();
RequestBuilderWithCredentials rb = new RequestBuilderWithCredentials(RequestBuilderWithCredentials.GET, urlService);
commentaireCallback.setMode(ModeRequete.LECTURE);
try {
rb.sendRequest(null, commentaireCallback);
} catch (Exception e) {
//TODO: quoi faire si la requete est mal formée coté client avant d'être envoyée ?
}
}
 
@Override
public void supprimerCommentaire(Commentaire commentaire, SuppressionCommentaireCallback callback) {
String urlService = baseUrl+"commentaires/"+commentaire.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("commentaire", "suppression", "{\"auteur\": \"" + commentaire.getAuteur() + "\", \"observation\": \"" + commentaire.getObservation().getId() + "\"}");
}
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/services/rest/ImageService.java
New file
0,0 → 1,18
package org.tela_botanica.del.client.services.rest;
 
import org.tela_botanica.del.client.modeles.Image;
import org.tela_botanica.del.client.modeles.InformationsRecherche;
import org.tela_botanica.del.client.services.rest.async.ImagesParTaxonCallback;
import org.tela_botanica.del.client.services.rest.async.SuppressionImageCallback;
 
public interface ImageService {
 
public void getImagesEfloreParTaxon(String nomTaxon, ImagesParTaxonCallback callback);
 
public void getImagesParTaxon(InformationsRecherche informationsRecherche, int debut, int fin, ImagesParTaxonCallback callback);
 
public void getImagesParObservation(String observationId, ImagesParTaxonCallback callback);
public void supprimer(Image image, SuppressionImageCallback callback);
 
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/services/rest/VoteProtocoleServiceConcret.java
New file
0,0 → 1,88
package org.tela_botanica.del.client.services.rest;
 
import java.util.List;
 
import org.tela_botanica.del.client.config.Config;
import org.tela_botanica.del.client.modeles.VoteProtocole;
import org.tela_botanica.del.client.services.rest.async.AjoutVoteProtocoleCallback;
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.VoteProtocoleCallback;
 
import org.tela_botanica.del.client.services.RequestBuilderWithCredentials;
 
public class VoteProtocoleServiceConcret implements VoteProtocoleService {
 
private String baseUrl;
 
public VoteProtocoleServiceConcret() {
Config config = new Config();
this.baseUrl = config.getServiceBaseUrl();
}
public VoteProtocoleServiceConcret(Config config) {
this.baseUrl = config.getServiceBaseUrl();
}
@Override
public List<VoteProtocole> getVote(String idImage) {
// TODO Auto-generated method stub
return null;
}
 
@Override
public List<VoteProtocole> getVotePourImageEtProtocole(String idImage,
String protocolName) {
// TODO Auto-generated method stub
return null;
}
 
@Override
public void ajouterVote(String idImage, VoteProtocole voteProtocole, AjoutVoteProtocoleCallback callback) {
RequestBuilderWithCredentials rb = new RequestBuilderWithCredentials(RequestBuilderWithCredentials.PUT, baseUrl+"images/"+idImage+"/votes/");
callback.setMode(ModeRequete.AJOUT);
String chainePost = assemblerChaineRequeteAjoutModif(voteProtocole);
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
Analytics.evenement("vote", "ajout", "{\"valeur\": \"" + voteProtocole.getVote() + "\", \"auteur\": \"" + voteProtocole.getAuteur() + "\", \"id_image\": \"" + idImage + "\"}");
}
 
private String assemblerChaineRequeteAjoutModif(VoteProtocole voteProtocole) {
String chaineRequete = "utilisateur="+voteProtocole.getContributeur()+"&"+
"protocole="+voteProtocole.getIdProtocole()+"&"+
"valeur="+voteProtocole.getVote();
return chaineRequete;
}
@Override
public void modifierVote(String idImage, VoteProtocole voteProtocole, VoteProtocoleCallback callback) {
RequestBuilderWithCredentials rb = new RequestBuilderWithCredentials(RequestBuilderWithCredentials.POST, baseUrl+"images/"+idImage+"/votes/");
callback.setMode(ModeRequete.MODIFICATION);
String chainePost = assemblerChaineRequeteAjoutModif(voteProtocole);
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
Analytics.evenement("vote", "modification", "{\"valeur\": \"" + voteProtocole.getVote() + "\", \"auteur\": \"" + voteProtocole.getAuteur() + "\", \"id_image\": \"" + idImage + "\"}");
}
 
@Override
public void supprimerVote(String idImage, VoteProtocole voteProtocole,
VoteProtocoleCallback callback) {
RequestBuilderWithCredentials rb = new RequestBuilderWithCredentials(RequestBuilderWithCredentials.DELETE, baseUrl+"images/"+idImage+"/votes/"+voteProtocole.getId());
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("vote", "suppression", "{\"valeur\": \"" + voteProtocole.getVote() + "\", \"auteur\": \"" + voteProtocole.getAuteur() + "\", \"id_image\": \"" + idImage + "\"}");
}
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/services/rest/ProtocoleServiceConcret.java
New file
0,0 → 1,38
package org.tela_botanica.del.client.services.rest;
 
import org.tela_botanica.del.client.config.Config;
import org.tela_botanica.del.client.services.rest.async.PHPCallback.ModeRequete;
import org.tela_botanica.del.client.services.rest.async.ProtocolesCallback;
import org.tela_botanica.del.client.services.RequestBuilderWithCredentials;
 
public class ProtocoleServiceConcret implements ProtocoleService {
 
private String baseUrl;
public ProtocoleServiceConcret() {
Config config = new Config();
this.baseUrl = config.getServiceBaseUrl();
}
public ProtocoleServiceConcret(Config config) {
this.baseUrl = config.getServiceBaseUrl();
}
@Override
public void getProtocole(String nomProtocole) {
//TODO: voir si l'on aura besoin de ne retourner qu'un seul protocole
}
 
@Override
public void getProtocoles(ProtocolesCallback callback) {
//TODO: inventer un système de cache car sinon c'est chargé à fois qu'on accède à la partie
// recherche image
RequestBuilderWithCredentials rb = new RequestBuilderWithCredentials(RequestBuilderWithCredentials.GET, baseUrl + "protocoles");
callback.setMode(ModeRequete.LECTURE);
try {
rb.sendRequest(null, callback);
} catch (Exception e) {
// TODO: handle exception
}
}
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/services/rest/PropositionDeterminationServiceConcret.java
New file
0,0 → 1,125
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() + "\"}}");
}
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/services/rest/UtilisateurServiceConcret.java
New file
0,0 → 1,186
package org.tela_botanica.del.client.services.rest;
 
import org.tela_botanica.del.client.Del;
import org.tela_botanica.del.client.config.Config;
import org.tela_botanica.del.client.modeles.AuthInfo;
import org.tela_botanica.del.client.modeles.Utilisateur;
import org.tela_botanica.del.client.services.rest.async.ActiviteUtilisateurCallback;
import org.tela_botanica.del.client.services.rest.async.AuthCallback;
import org.tela_botanica.del.client.services.rest.async.UtilisateurCallback;
import org.tela_botanica.del.client.services.rest.async.PHPCallback.ModeRequete;
import org.tela_botanica.del.client.services.RequestBuilderWithCredentials;
import org.tela_botanica.del.client.utils.StringUtils;
 
import com.google.gwt.core.shared.GWT;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.Timer;
 
public class UtilisateurServiceConcret implements UtilisateurService {
private String baseUrl;
private String authBaseUrl;
 
private static Timer rafraichisseurJeton = null;
public UtilisateurServiceConcret() {
this(new Config());
}
public UtilisateurServiceConcret(Config config) {
this.baseUrl = config.getUrl("serviceUtilisateursBaseUrl");
this.authBaseUrl = config.getUrl("serviceAuthBaseUrl");
}
 
/**
* Connecte l'utilisateur en appelant l'annuaire (auth::connexion, SSO), puis enchaîne avec
* le service "utilisateur" de Del, pour retourner les infos requises par l'interface
*/
@Override
public void connecterUtilisateur(String login, String motDePasse, final UtilisateurCallback callback) {
RequestBuilderWithCredentials rb = new RequestBuilderWithCredentials(RequestBuilderWithCredentials.GET, authBaseUrl + "connexion?login=" + login + "&password=" + motDePasse);
try {
// Callback intermédiaire qui lit les infos de l'annuaire et appelle le service de préférences
rb.sendRequest(null, new AuthCallback() {
public void surErreur(String message) {
// merci, de rien, au revoir messieurs-dames
callback.surErreur("");
}
@Override
public void surRetour(AuthInfo objetRetour) {
gererRetourAuthInfo(objetRetour, callback);
}
});
} catch (Exception e) {
Window.alert("Exception : " + e.getMessage());
}
}
 
/**
* Déconnecte l'utilisateur en appelant l'annuaire (auth::deconnexion, SSO), puis enchaîne avec
* le service "utilisateur" de Del, pour retourner les infos requises par l'interface
*/
@Override
public void deconnecterUtilisateur(final UtilisateurCallback callback) {
RequestBuilderWithCredentials rb = new RequestBuilderWithCredentials(RequestBuilderWithCredentials.GET, authBaseUrl + "deconnexion");
try {
// Callback intermédiaire qui lit les infos de l'annuaire et appelle le service de préférences
rb.sendRequest(null, new AuthCallback() {
public void surErreur(String message) {
callback.surErreur("");
}
@Override
public void surRetour(AuthInfo objetRetour) {
gererRetourAuthInfo(objetRetour, callback);
}
});
} catch (Exception e) {
GWT.log("Exception : " + e.getMessage());
}
}
 
/**
* Va chercher les infos de l'utilisateur en vérifiant d'abord l'identité auprès de l'annuaire
* @param callback
*/
@Override
public void obtenirUtilisateur(UtilisateurCallback callback) {
obtenirUtilisateur(callback, false);
}
 
/**
* Va chercher les infos de l'utilisateur; si ignorerAnnuaire est false, vérifiera d'abord
* l'identité auprès de l'annuaire (service annuaire:auth/identite)
* @param callback
*/
@Override
public void obtenirUtilisateur(final UtilisateurCallback callback, boolean ignorerAnnuaire) {
// par défaut, on appelle d'abord le service auth/identite de l'annuaire, afin de connaître
// le statut de l'utilisateur vis à vis du SSO (connecté ou non) et rafraîchir le jeton
if (! ignorerAnnuaire) {
// ne transmet pas le header Authorization, sans quoi l'annuaire rafraîchit le
// jeton mis en cache et on ne peut pas se déconnecter depuis une autre application
RequestBuilderWithCredentials rb = new RequestBuilderWithCredentials(RequestBuilderWithCredentials.GET, authBaseUrl + "identite", false);
try {
rb.sendRequest(null, new AuthCallback() {
public void surErreur(String message) {
// Si l'annuaire n'est pas content (déconnecté depuis ailleurs ou jeton expiré), on va
// chercher un profil utilisateur "anonyme" et on déconnecte dans l'interface
gererRetourAuthInfo(new AuthInfo(), callback);
}
@Override
public void surRetour(AuthInfo objetRetour) {
gererRetourAuthInfo(objetRetour, callback);
}
});
} catch (Exception e) {
// TODO: handle exception
}
} else { // sinon on optimise, quand on vient de se (de)connecter, pas la peine de rappeler l'annuaire
obtenirUtilisateurSansAnnuaire(callback);
}
}
 
/**
* Va chercher les infos de l'utilisateur sans vérifier l'identité auprès de l'annuaire
* @param callback
*/
public void obtenirUtilisateurSansAnnuaire(UtilisateurCallback callback) {
RequestBuilderWithCredentials rb = new RequestBuilderWithCredentials(RequestBuilderWithCredentials.GET, baseUrl + "utilisateurs/");
try {
rb.sendRequest(null, callback);
} catch (Exception e) {
// TODO: handle exception
}
}
 
@Override
public void obtenirActiviteUtilisateur(String idUtilisateur, ActiviteUtilisateurCallback callback) {
RequestBuilderWithCredentials rb = new RequestBuilderWithCredentials(RequestBuilderWithCredentials.GET, baseUrl + "utilisateurs/"+idUtilisateur+"/activite");
try {
rb.sendRequest(null, callback);
} catch (Exception e) {
// TODO: handle exception
}
}
 
/**
* Enregistre le jeton (potentiellement NULL), sa durée de vie, et appelle
* le service Del pour obtenir le profil utilisateur associé; lorsque le jeton
* n'est pas nul et que sa durée de vie est spécifiée, déclenche un rafraîchissement
* périodique du jeton
*
* @param objetRetour le retour de l'appel au service annuaire:auth (connexion, deconnexion ou identite)
* @param callback
*/
protected void gererRetourAuthInfo(AuthInfo objetRetour, final UtilisateurCallback callback) {
// Stockage du jeton rafraîchi et de sa durée (pourrait avoir changé)
Utilisateur.setJeton(objetRetour.token);
Utilisateur.setDureeJeton(objetRetour.duration);
 
// Rafraîchissement automatique du jeton - s'annule lorsque le jeton devient nul
if (Utilisateur.getJeton() != null && Utilisateur.getDureeJeton() > 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 = (Utilisateur.getDureeJeton() * 1000) * 3 / 4;
rafraichisseurJeton = new Timer() {
@Override
public void run() {
// Appel de l'annuaire pour rafraîchir le jeton et mettre à jour les
// données utilisateur si besoin
obtenirUtilisateur(callback);
}
};
rafraichisseurJeton.scheduleRepeating(delaiRepetition);
}
} else {
if (rafraichisseurJeton != null) { // on sait jamais non plus
rafraichisseurJeton.cancel();
rafraichisseurJeton = null;
}
}
 
// Obtention de l'utilisateur final d'après le service de préférences
obtenirUtilisateurSansAnnuaire(callback);
}
 
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/services/rest/MotsClesService.java
New file
0,0 → 1,15
package org.tela_botanica.del.client.services.rest;
 
import org.tela_botanica.del.client.services.rest.async.AjoutMotsClesImageCallback;
import org.tela_botanica.del.client.services.rest.async.ListeMotsClesImageCallBack;
import org.tela_botanica.del.client.services.rest.async.SuppressionMotCleImageCallback;
 
public interface MotsClesService {
public void getMotsClesImage(String idImage, ListeMotsClesImageCallBack listeMotsClesImageCallBack);
public void ajouterMotCleImage(String idImage, String motCle, AjoutMotsClesImageCallback ajoutMotsClesImageCallBack);
 
public void supprimerMotCleImage(String idMotCle, SuppressionMotCleImageCallback callback);
 
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/services/rest/PaysServiceConcret.java
New file
0,0 → 1,36
package org.tela_botanica.del.client.services.rest;
 
import java.util.Map;
 
import org.tela_botanica.del.client.config.Config;
import org.tela_botanica.del.client.services.RequestBuilderWithCredentials;
import org.tela_botanica.del.client.services.rest.async.PaysCallback;
import org.tela_botanica.del.client.services.rest.async.PHPCallback.ModeRequete;
 
public class PaysServiceConcret implements PaysService {
private String baseUrl;
private Map<String, String> pays;
 
public PaysServiceConcret() {
Config config = new Config();
this.baseUrl = config.getServiceBaseUrl();
}
public PaysServiceConcret(Config config) {
this.baseUrl = config.getServiceBaseUrl();
}
 
@Override
public void getPays(PaysCallback callback) {
String urlService = baseUrl+"ontologie/pays/";
RequestBuilderWithCredentials rb = new RequestBuilderWithCredentials(RequestBuilderWithCredentials.GET, urlService);
callback.setMode(ModeRequete.LECTURE);
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 ?
}
}
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/services/rest/ObservationService.java
New file
0,0 → 1,18
package org.tela_botanica.del.client.services.rest;
 
import org.tela_botanica.del.client.modeles.InformationsRecherche;
import org.tela_botanica.del.client.modeles.Observation;
import org.tela_botanica.del.client.modeles.PropositionDetermination;
import org.tela_botanica.del.client.services.rest.async.DepublicationObservationCallBack;
import org.tela_botanica.del.client.services.rest.async.ObservationsCallback;
import org.tela_botanica.del.client.services.rest.async.PropositionDeterminationCallBack;
 
public interface ObservationService {
 
public void getObservations(InformationsRecherche informationsRecherche, int debut, int fin, String statut, ObservationsCallback callback);
 
public void getObservation(String idObservation, ObservationsCallback observationsCallback);
public void depublier(Observation observation, DepublicationObservationCallBack callback);
 
}