Subversion Repositories eFlore/Applications.del

Compare Revisions

No changes between revisions

Ignore whitespace Rev 2170 → Rev 2171

/branches/v1.11-magnesium/src/org/tela_botanica/del/uitest/ComparaisonEfloreVueTest.java
New file
0,0 → 1,42
package org.tela_botanica.del.uitest;
 
import org.tela_botanica.del.client.modeles.Image;
import org.tela_botanica.del.client.modeles.Observation;
import org.tela_botanica.del.client.vues.comparaisoneflore.ComparaisonEfloreVue;
 
import com.google.gwt.junit.client.GWTTestCase;
 
public class ComparaisonEfloreVueTest extends GWTTestCase {
 
// To run this test configure your junit launcher (Eclipse>Run>Run configurations
// classpath>Advanced>Select Folders and choose src/)
 
@Override
public String getModuleName() {
return "org.tela_botanica.del.Del";
}
 
public void testLoginView() {
 
Observation observation = new Observation();
String auteur = "benjamin";
observation.setAuteur(auteur);
observation.setNomRetenu("marronier");
observation.setNumNomenclatural("num nomenclatural ");
observation.setDateReleve("28/09/2011");
observation.setFamille("famille ");
observation.setLocalite("localite ");
 
Image image = new Image();
image.setIdImage("id image 1");
image.setUrlFormat("http://www.tela-botanica.org/appli:cel-img:00001%s%.jpg");
image.setUrl("http://www.tela-botanica.org/appli:cel-img:00001CRS.jpg");
image.setMiniature("http://www.tela-botanica.org/appli:cel-img:00001XS.jpg");
image.setObservation(observation);
 
ComparaisonEfloreVue vue = new ComparaisonEfloreVue();
vue.chargerImagePrincipale(image);
assertTrue(vue.getNomAuteur().getText().contains("benjamin"));
}
 
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/modeles/ModeTri.java
New file
0,0 → 1,19
package org.tela_botanica.del.client.modeles;
 
public enum ModeTri {
TRI_ASCENDANT {
public String toString() {
return "asc";
};
},
TRI_DESCENDANT {
public String toString() {
return "desc";
};
},
PAS_DE_TRI {
public String toString() {
return "naturel";
};
}
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/modeles/Commentaire.java
New file
0,0 → 1,23
package org.tela_botanica.del.client.modeles;
 
import java.util.Date;
 
public class Commentaire extends InterventionForum {
 
private String commentaire;
 
public Commentaire(Contributeur contributeur, Date date, String commentaire) {
setContributeur(contributeur);
setDate(date);
this.commentaire = commentaire;
}
 
public String getCommentaire() {
return commentaire;
}
 
public void setCommentaire(String commentaire) {
this.commentaire = commentaire;
}
 
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/modeles/ActiviteUtilisateur.java
New file
0,0 → 1,33
package org.tela_botanica.del.client.modeles;
 
public class ActiviteUtilisateur {
private String nbEvenements = "0";
private String dateDerniereConsultationEvenements = null;
public String getNbEvenements() {
return nbEvenements;
}
public int getNbEvenementsInt() {
int nbEvents = 0;
try {
nbEvents = Integer.parseInt(nbEvenements);
} catch (Exception e) {
nbEvents = 0;
}
return nbEvents;
}
public void setNbEvenements(String nbEvenements) {
this.nbEvenements = nbEvenements;
}
public String getDateDerniereConsultationEvenements() {
return dateDerniereConsultationEvenements;
}
public void setDateDerniereConsultationEvenements(String dateDerniereConsultationEvenements) {
this.dateDerniereConsultationEvenements = dateDerniereConsultationEvenements;
}
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/modeles/VoteProtocole.java
New file
0,0 → 1,22
package org.tela_botanica.del.client.modeles;
 
import java.io.Serializable;
 
public class VoteProtocole extends Vote implements Serializable {
 
private static final long serialVersionUID = -1017065180398557172L;
 
private Protocole protocole;
 
public Protocole getProtocole() {
return protocole;
}
public void setProtocole(Protocole protocole) {
this.protocole = protocole;
}
public int getIdProtocole() {
return getProtocole().getId();
}
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/modeles/Protocole.java
New file
0,0 → 1,60
package org.tela_botanica.del.client.modeles;
 
public class Protocole {
 
private int id;
private String nom;
private String description;
private String tag;
private String motsClesProtocoles;
private boolean doitEtreIdentifiePourVoter = false;
 
public int getId() {
return id;
}
 
public void setId(int id) {
this.id = id;
}
 
public String getNom() {
return nom;
}
 
public void setNom(String nom) {
this.nom = nom;
}
public String getDescription() {
return description;
}
 
public void setDescription(String description) {
this.description = description;
}
public String getTag() {
return tag;
}
 
public void setTag(String tag) {
this.tag = tag;
}
public void setMotsClesProtocole(String motsClesProtocole) {
this.motsClesProtocoles = motsClesProtocole;
}
public String getMotsClesProtocole() {
return motsClesProtocoles;
}
 
public boolean doitEtreIdentifiePourVoter() {
return doitEtreIdentifiePourVoter;
}
 
public void setDoitEtreIdentifiePourVoter(boolean doitEtreIdentifiePourVoter) {
this.doitEtreIdentifiePourVoter = doitEtreIdentifiePourVoter;
}
 
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/modeles/MoyenneVote.java
New file
0,0 → 1,52
package org.tela_botanica.del.client.modeles;
 
public class MoyenneVote implements Comparable<MoyenneVote> {
 
/**
* Pourcentage de personne ayant voté pour la propostion, un score de -1
* indique qu'aucun vote n'a été effectué;
*/
private int score = -1;
private String intituleAssocie;
private PropositionDetermination propositionAssociee;
 
public MoyenneVote(int score, PropositionDetermination propositionAssociee) {
this.score = score;
this.intituleAssocie = propositionAssociee.getEspece();
this.propositionAssociee = propositionAssociee;
}
 
public int getScore() {
return score;
}
 
public void setScore(int score) {
this.score = score;
}
 
public String getIntituleAssocie() {
return intituleAssocie;
}
 
public void setIntituleAssocie(String intituleAssocie) {
this.intituleAssocie = intituleAssocie;
}
 
public void setPropositionAssociee(PropositionDetermination propositionDetermination) {
this.propositionAssociee = propositionDetermination;
}
 
public PropositionDetermination getPropositionAssociee() {
return this.propositionAssociee;
}
 
@Override
public int compareTo(MoyenneVote mv) {
if (mv.getScore() > this.score)
return 1;
else if (mv.getScore() == this.score)
return 0;
else
return -1;
}
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/modeles/PropositionDetermination.java
New file
0,0 → 1,150
package org.tela_botanica.del.client.modeles;
 
import java.io.Serializable;
import java.util.HashMap;
import java.util.Map;
 
import com.google.gwt.user.client.Window;
 
public class PropositionDetermination extends InterventionForum implements Serializable {
 
private static final long serialVersionUID = 840032625524143547L;
private String id, espece, commentaire, numNomenclatural, referentiel, valideePar, dateValidation;
private int nbCommentaires = 0;
/** Doit valoir 1 s'il y a un commentaire initial, sinon 0 */
private int commentaireInitial = 0;
private boolean estPropositionInitiale = false;
private boolean estPropositionRetenue = false;
 
public boolean estPropositionInitiale() {
return estPropositionInitiale;
}
 
public void setEstPropositionInitiale(boolean estPropositionInitiale) {
this.estPropositionInitiale = estPropositionInitiale;
}
public boolean estPropositionRetenue() {
//return (this.espece.equals(this.observation.getNomRetenu()));
return estPropositionRetenue;
}
 
public void setEstPropositionRetenue(boolean estPropositionRetenue) {
this.estPropositionRetenue = estPropositionRetenue;
}
 
private Map<String, VoteDetermination> votesDeterminations = new HashMap<String, VoteDetermination>();
private Observation observation;
 
public PropositionDetermination(String id, Contributeur contributeur, String texte) {
setId(id);
setContributeur(contributeur);
setCommentaire(texte);
}
 
public PropositionDetermination(Observation observation) {
this.observation = observation;
}
 
protected void additionnerCommentaireInitial() {
if (this.commentaire != null && !this.commentaire.equals("")) {
commentaireInitial = 1;
} else {
commentaireInitial = 0;
}
}
public void ajouterVoteDetermination(VoteDetermination vd) {
votesDeterminations.put(vd.getContributeur(), vd);
}
 
public String getId() {
return id;
}
 
public void setId(String id) {
this.id = id;
}
 
public String getEspece() {
return espece;
}
 
public void setEspece(String espece) {
this.espece = espece;
}
 
public Map<String, VoteDetermination> getVotesDeterminations() {
return votesDeterminations;
}
 
public void setVotesDeterminations(Map<String, VoteDetermination> votesDeterminations) {
this.votesDeterminations = votesDeterminations;
}
 
public boolean utilisateurAVotePourDetermination(String idContributeur) {
return votesDeterminations.containsKey(idContributeur);
}
 
public Observation getObservation() {
return observation;
}
 
public void setObservation(Observation observation) {
this.observation = observation;
}
 
public void setCommentaire(String commentaire) {
this.commentaire = commentaire;
additionnerCommentaireInitial();
}
 
public String getCommentaire() {
return commentaire;
}
 
public void setNbCommentaires(int nbCommentaires) {
this.nbCommentaires = nbCommentaires;
}
 
public int getTotalCommentaires() {
if (nbCommentaires == 0 && this.listeCommentaires.size() != 0) {
// wtf ?
nbCommentaires = super.getTotalCommentaires();
}
 
return nbCommentaires + commentaireInitial;
}
public String getNumNomenclatural() {
return numNomenclatural;
}
 
public void setNumNomenclatural(String numNomenclatural) {
this.numNomenclatural = numNomenclatural;
}
public String getReferentiel() {
return referentiel;
}
 
public void setReferentiel(String referentiel) {
this.referentiel = referentiel;
}
public String getValideePar() {
return valideePar;
}
 
public void setValideePar(String idUtilisateur) {
valideePar = idUtilisateur;
}
public void setDateValidation(String dateValidation) {
this.dateValidation = dateValidation;
}
public String getDateValidation() {
return dateValidation;
}
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/modeles/Utilisateur.java
New file
0,0 → 1,124
package org.tela_botanica.del.client.modeles;
 
import java.util.HashMap;
 
import org.tela_botanica.del.client.cache.CacheClient;
import org.tela_botanica.del.client.i18n.I18n;
 
import com.google.gwt.core.shared.GWT;
 
 
public class Utilisateur {
 
private String nom = "";
private String prenom = "";
private String courriel = "";
private String id = "0";
private String sessionId = "";
private String adminNiveau = "0";
private boolean identifie = false;
private HashMap<String, String> preferences = null;
// TODO: avoir une liste d'activités avec des types différents
private ActiviteUtilisateur activiteUtilisateur = new ActiviteUtilisateur();
 
// Jeton encodé en base64 passé de manière automatique aux services dans un header
private static String jeton = "";
// Durée de vie du jeton en secondes (sert au rafraîchissement automatique)
private static int duree = 0;
 
public Utilisateur(String sessionId, String id) {
this.id = id;
this.sessionId = sessionId;
}
public Utilisateur(String sessionId, String id, String prenom, String nom, String courriel, String adminNiveau) {
this(sessionId, id);
this.prenom = prenom;
this.nom = nom;
this.courriel = courriel;
this.adminNiveau = adminNiveau;
identifie = true;
}
public String getNom() {
return nom;
}
public void setNom(String nom) {
this.nom = nom;
}
public String getPrenom() {
return prenom;
}
public void setPrenom(String prenom) {
this.prenom = prenom;
}
public String getCourriel() {
return courriel;
}
public void setCourriel(String courriel) {
this.courriel = courriel;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public boolean estIdentifie() {
return identifie;
}
public void setIdentifie(boolean identifie) {
this.identifie = identifie;
}
public String getNomPrenomFormate() {
return identifie ? prenom+" "+nom : I18n.getVocabulary().anonyme();
}
public HashMap<String, String> getPreferences() {
return preferences;
}
public void setPreferences(HashMap<String, String> preferences) {
this.preferences = preferences;
}
public boolean etreValidateur() {
return etreAdmin() || this.adminNiveau.equals("1");
}
public boolean etreAdmin() {
return this.adminNiveau.equals("2");
}
public String toString() {
String utilisateur = id + "\n" + nom + "\n" + prenom + "\n" + courriel + "\n" +
sessionId + "\n" + adminNiveau + "\n";
return utilisateur;
}
 
public void setActivite(ActiviteUtilisateur activite) {
this.activiteUtilisateur = activite;
}
public ActiviteUtilisateur getActivite() {
return this.activiteUtilisateur;
}
 
public static String getJeton() {
return Utilisateur.jeton;
}
 
public static void setJeton(String jeton) {
Utilisateur.jeton = jeton;
}
 
public static int getDureeJeton() {
return Utilisateur.duree;
}
 
public static void setDureeJeton(int duree) {
Utilisateur.duree = duree;
}
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/modeles/ProtocoleServiceResultat.java
New file
0,0 → 1,21
package org.tela_botanica.del.client.modeles;
 
import java.util.List;
 
public class ProtocoleServiceResultat {
private List<Protocole> protocoles;
 
public ProtocoleServiceResultat(List<Protocole> protocoles) {
// constructeur utilisable plus tard quand on aura implenté un systeme
// de cache
this.protocoles = protocoles;
}
 
public List<Protocole> getProtocoles() {
return protocoles;
}
 
public void setProtocoles(List<Protocole> protocoles) {
this.protocoles = protocoles;
}
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/modeles/Vote.java
New file
0,0 → 1,55
package org.tela_botanica.del.client.modeles;
 
import java.util.Date;
 
public class Vote {
 
private String id;
private int vote;
private String contributeur;
private Date date;
private Contributeur auteur;
 
public Vote() {
}
 
public String getId() {
return id;
}
 
public void setId(String id) {
this.id = id;
}
 
public int getVote() {
return vote;
}
 
public void setVote(int vote) {
this.vote = vote;
}
 
public String getContributeur() {
return contributeur;
}
 
public void setContributeur(String contributeur) {
this.contributeur = contributeur;
}
 
public Date getDate() {
return date;
}
 
public void setDate(Date date) {
this.date = date;
}
 
public Contributeur getAuteur() {
return auteur;
}
 
public void setAuteur(Contributeur auteur) {
this.auteur = auteur;
}
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/modeles/AuthInfo.java
New file
0,0 → 1,30
package org.tela_botanica.del.client.modeles;
 
/**
* Une mini classe pour stocker facilement le retour d'un appel aux services
* annuaire:auth (connexion, deconnexion, identite)
*
* @author mathias
*/
public class AuthInfo {
 
public String token;
public boolean session;
public String tokenId;
public int duration;
public Integer lastModif; // Integer pour pouvoir mettre null dedans
public String error;
 
public AuthInfo(String token, boolean session, String tokenId, int duration, Integer lastModif, String error) {
this.token = token;
this.session = session;
this.tokenId = tokenId;
this.duration = duration;
this.lastModif = lastModif;
this.error = error;
}
 
public AuthInfo() {
this(null, false, null, 0, null, null);
}
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/modeles/InformationsRecherche.java
New file
0,0 → 1,305
package org.tela_botanica.del.client.modeles;
 
import org.tela_botanica.del.client.config.Config;
import org.tela_botanica.del.client.Del;
 
import com.google.gwt.http.client.URL;
import com.google.gwt.user.client.Window;
 
public class InformationsRecherche {
 
private String rechercheLibre;
 
private String departement;
private String referentiel;
 
private String taxon;
 
private String genre;
 
// gardé pour ancienne comptabilité
private String motClef;
// mots clés publics de del
private String motClefDel;
// mots clés privés du cel
private String motClefCel;
 
private String date;
private String pays;
 
private String commune;
 
private boolean pnInscritsSeulement;
 
private String famille;
 
private String tag;
 
private String auteur;
 
private String idProtocoleSelectionne = null;
 
private ModeTri triParMoyenneArithmetique = ModeTri.PAS_DE_TRI;
 
private ModeTri triParDatePublication = ModeTri.PAS_DE_TRI;
private ModeTri triParDateObservation = ModeTri.PAS_DE_TRI;
private ModeTri triParNbCommentaires = ModeTri.PAS_DE_TRI;
private ModeTri triParNbTag = ModeTri.PAS_DE_TRI;
private ModeTri triParNbPoints = ModeTri.PAS_DE_TRI;
 
public String getRechercheLibre() {
return rechercheLibre;
}
 
public void setRechercheLibre(String rechercheLibre) {
if (rechercheLibre != null) {
this.rechercheLibre = rechercheLibre;
}
}
 
public String getDepartement() {
return departement;
}
 
public void setDepartement(String departement) {
if (departement != null) {
this.departement = departement;
}
}
public String getReferentiel() {
return referentiel;
}
 
public void setReferentiel(String referentiel) {
this.referentiel = referentiel;
}
 
public String getTaxon() {
return taxon;
}
 
public void setTaxon(String taxon) {
if (taxon != null) {
this.taxon = taxon;
}
}
 
public String getGenre() {
return genre;
}
 
public void setGenre(String genre) {
if (genre != null) {
this.genre = genre;
}
}
 
public String getMotClef() {
return motClef;
}
 
public void setMotClef(String motClef) {
if (motClef != null) {
this.motClef = motClef;
}
}
 
public String getDate() {
return date;
}
 
public void setDate(String date) {
if (date != null) {
this.date = date;
}
}
public String setPays(String pays) {
return this.pays = pays;
}
 
public String getPays() {
return pays;
}
 
public boolean getPnInscritsSeulement() {
return pnInscritsSeulement;
}
 
public void setPnInscritsSeulement(boolean pnInscritsSeulement) {
this.pnInscritsSeulement = pnInscritsSeulement;
}
public String getCommune() {
return commune;
}
 
public void setCommune(String commune) {
if (commune != null) {
String[] tableauCommuneDpt = commune.split(" ");
if (tableauCommuneDpt.length == 2) {
String dpt = tableauCommuneDpt[1].replaceAll("\\(", "").replaceAll("\\)", "");
setDepartement(dpt);
this.commune = tableauCommuneDpt[0];
} else {
this.commune = commune;
}
}
}
 
public String getFamille() {
return famille;
}
 
public void setFamille(String famille) {
if (famille != null) {
this.famille = famille;
}
}
 
public String getTag() {
return tag;
}
 
public void setTag(String tag) {
if (tag != null) {
this.tag = tag;
}
}
 
public String getAuteur() {
return auteur;
}
 
public void setAuteur(String auteur) {
if (auteur != null) {
this.auteur = auteur;
}
}
 
public ModeTri getTriParMoyenneArithmetique() {
return triParMoyenneArithmetique;
}
 
public void setTriParMoyenneArithmetique(ModeTri triParMoyenneArithmetique) {
this.triParMoyenneArithmetique = triParMoyenneArithmetique;
}
 
public void setIdProtocoleSelectionne(String idProtocoleSelectionne) {
this.idProtocoleSelectionne = idProtocoleSelectionne;
}
 
public String getIdProtocoleSelectionne() {
return idProtocoleSelectionne;
}
 
public ModeTri getTriParDatePublication() {
return triParDatePublication;
}
 
public void setTriParDatePublication(ModeTri triParDatePublication) {
this.triParDatePublication = triParDatePublication;
}
public ModeTri getTriParDateObservation() {
return triParDateObservation;
}
 
public void setTriParDateObservation(ModeTri triParDateObservation) {
this.triParDateObservation = triParDateObservation;
}
 
public void setTriParNbTags(ModeTri triParTag) {
this.triParNbTag = triParTag;
}
public ModeTri getTriParNbPoints() {
return this.triParNbPoints;
}
 
public void setTriParNbPoints(ModeTri triParPoints) {
this.triParNbPoints = triParPoints;
}
public ModeTri getTriParNbTags() {
return this.triParNbTag;
}
public void setTriParNbCommentaires(ModeTri triParNbCommentaires) {
this.triParNbCommentaires = triParNbCommentaires;
}
public ModeTri getTriParNbCommentaires() {
return triParNbCommentaires;
}
 
public String versChaineRequete() {
String chaine = "";
chaine += estNonNull(rechercheLibre) ? "&masque=" + URL.encodeQueryString(rechercheLibre) : "";
chaine += estNonNull(departement) ? "&masque.departement=" + URL.encodeQueryString(departement) : "";
chaine += estNonNull(referentiel) && !referentiel.equals("tous") ? "&masque.referentiel=" + URL.encodeQueryString(referentiel) : "";
chaine += estNonNull(taxon) ? "&masque.ns=" + URL.encodeQueryString(taxon) : "";
chaine += estNonNull(genre) ? "&masque.genre=" + URL.encodeQueryString(genre) : "";
chaine += estNonNull(motClef) ? "&masque.tag=" + URL.encodeQueryString(motClef) : "";
chaine += estNonNull(motClefCel) ? "&masque.tag_cel=" + URL.encodeQueryString(motClefCel) : "";
chaine += estNonNull(motClefDel) ? "&masque.tag_pictoflora=" + URL.encodeQueryString(motClefDel) : "";
chaine += estNonNull(date) ? "&masque.date=" + URL.encodeQueryString(date) : "";
chaine += estNonNull(commune) ? "&masque.commune=" + URL.encodeQueryString(commune) : "";
chaine += estNonNull(famille) ? "&masque.famille=" + URL.encodeQueryString(famille) : "";
chaine += estNonNull(auteur) ? "&masque.auteur=" + URL.encodeQueryString(auteur) : "";
chaine += estNonNull(pays) ? "&masque.pays=" + URL.encodeQueryString(pays) : "";
chaine += "&masque.pninscritsseulement=" + (pnInscritsSeulement ? URL.encodeQueryString("1") : URL.encodeQueryString("0"));
 
String urlCourante = Window.Location.getHref();
Config config = new Config();
String urlAppliImg = config.getUrl("pictoflora");
if (urlCourante.contains(urlAppliImg)) {
chaine += triParMoyenneArithmetique != ModeTri.PAS_DE_TRI ? "&tri=moyenne-arithmetique" : "";
chaine += triParMoyenneArithmetique != ModeTri.PAS_DE_TRI ? "&ordre=" + triParMoyenneArithmetique : "";
chaine += triParNbTag != ModeTri.PAS_DE_TRI ? "&tri=tags" : "";
chaine += triParNbTag != ModeTri.PAS_DE_TRI ? "&ordre=" + triParNbTag : "";
chaine += triParNbPoints != ModeTri.PAS_DE_TRI ? "&tri=points" : "";
chaine += triParNbPoints != ModeTri.PAS_DE_TRI ? "&ordre=" + triParNbPoints : "";
chaine += estNonNull(idProtocoleSelectionne) ? "&protocole=" + idProtocoleSelectionne : "";
} else {
chaine += triParNbCommentaires != ModeTri.PAS_DE_TRI ? "&tri=nb_commentaires" : "";
chaine += triParNbCommentaires != ModeTri.PAS_DE_TRI ? "&ordre=" + triParNbCommentaires : "";
}
 
chaine += triParDateObservation != ModeTri.PAS_DE_TRI ? "&tri=date_observation" : "";
chaine += triParDateObservation != ModeTri.PAS_DE_TRI ? "&ordre=" + triParDateObservation : "";
chaine += triParDatePublication != ModeTri.PAS_DE_TRI ? "&tri=date_transmission" : "";
chaine += triParDatePublication != ModeTri.PAS_DE_TRI ? "&ordre=" + triParDatePublication : "";
 
return chaine;
}
 
private boolean estNonNull(String critere) {
return critere != null && !critere.trim().isEmpty();
}
 
public String getMotClefDel() {
return motClefDel;
}
 
public void setMotClefDel(String motClefDel) {
this.motClefDel = motClefDel;
}
 
public String getMotClefCel() {
return motClefCel;
}
 
public void setMotClefCel(String motClefCel) {
this.motClefCel = motClefCel;
}
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/modeles/Image.java
New file
0,0 → 1,122
package org.tela_botanica.del.client.modeles;
 
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
 
import com.google.gwt.user.client.Window;
 
public class Image {
 
private String idImage;
private Observation observation;
private String url;
private String urlFormat;
private String miniature;
private List<String> motsClefs;
 
public String getUrl() {
return url;
}
 
public String getMiniature() {
return miniature;
}
 
public String getUrlFormat(String format) {
return urlFormat.replaceAll("%s%", format);
}
 
public void setUrlFormat(String urlFormat) {
this.urlFormat = urlFormat;
}
 
public void setUrl(String url) {
this.url = url;
}
 
public void setMiniature(String url) {
miniature = url;
}
 
public String getIdImage() {
return idImage;
}
 
public void setIdImage(String idImage) {
this.idImage = idImage;
}
 
// Impossible d'utiliser le type générique Map ici, pourquoi ? je ne sais pas !
private HashMap<String, HashMap<String, VoteProtocole>> votesProtocoles = new HashMap<String, HashMap<String, VoteProtocole>>();
 
public void ajouterVoteProtocole(VoteProtocole voteProcotole) {
getVotesProtocoles(voteProcotole.getIdProtocole()).put(voteProcotole.getContributeur(), voteProcotole);
}
public void supprimerVoteProtocole(String idProtocole, String idContributeur) {
if(utilisateurAVotePourProtocole(idProtocole, idContributeur)) {
votesProtocoles.get(idProtocole).remove(idContributeur);
}
}
public boolean utilisateurAVotePourProtocole(String idProtocole, String idContributeur) {
boolean aVote = false;
if (votesProtocoles.containsKey(idProtocole) && votesProtocoles.get(idProtocole).containsKey(idContributeur)) {
aVote = true;
}
return aVote;
}
public HashMap<String, VoteProtocole> getVotesProtocoles(String id_protocole) {
if(!votesProtocoles.containsKey(""+id_protocole) || votesProtocoles.get(""+id_protocole) == null) {
votesProtocoles.put(""+id_protocole, new HashMap<String, VoteProtocole>());
}
return votesProtocoles.get(id_protocole+"");
}
public HashMap<String, VoteProtocole> getVotesProtocoles(int id_protocole) {
return getVotesProtocoles(id_protocole+"");
}
public HashMap<String, HashMap<String, VoteProtocole>> getListeVotesProtocoles() {
return votesProtocoles;
}
public void setVoteProtocoles(HashMap<String, HashMap<String, VoteProtocole>> voteProtocoles) {
this.votesProtocoles = voteProtocoles;
}
 
public void setVoteProtocoles(String id_protocole, HashMap<String, VoteProtocole> voteProtocoles) {
this.votesProtocoles.put(id_protocole, voteProtocoles);
}
 
public Observation getObservation() {
return observation;
}
 
public void setObservation(Observation observation) {
this.observation = observation;
}
public List<String> getMotsClefs() {
return motsClefs;
}
 
public void setMotsClefs(List<String> motsClefs) {
this.motsClefs = motsClefs;
}
 
public void ajouterMotsClef(String motsClefs) {
if (this.motsClefs == null) {
this.motsClefs = new ArrayList<String>();
}
this.motsClefs.add(motsClefs);
}
public boolean estADeterminer() {
return observation == null || observation.estADeterminer() || motsClefs.contains("aDeterminer");
}
 
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/modeles/MotCle.java
New file
0,0 → 1,27
package org.tela_botanica.del.client.modeles;
 
public class MotCle {
private String idMotCle;
private String idImage;
private String motCle;
public MotCle(String idMotCle, String idImage, String motCle) {
super();
this.idMotCle = idMotCle;
this.idImage = idImage;
this.motCle = motCle;
}
 
public String getIdMotCle() {
return idMotCle;
}
 
public String getIdImage() {
return idImage;
}
 
public String getMotCle() {
return motCle;
}
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/modeles/Contributeur.java
New file
0,0 → 1,57
package org.tela_botanica.del.client.modeles;
 
import com.google.gwt.user.client.Window;
 
public class Contributeur {
private String id, nom, prenom, adresseEmail;
public Contributeur(String id, String nom, String prenom, String adresseEmail) {
this.id = id;
this.nom = nom;
this.prenom = prenom;
this.adresseEmail = adresseEmail;
}
 
public String getNom() {
return nom;
}
 
public void setNom(String nom) {
this.nom = nom;
}
 
public String getPrenom() {
return prenom;
}
 
public void setPrenom(String prenom) {
this.prenom = prenom;
}
 
public String getAdresseEmail() {
return adresseEmail;
}
 
public void setAdresseEmail(String adresseEmail) {
this.adresseEmail = adresseEmail;
}
public String getNomComplet() {
String retour;
if ((this.prenom == null || this.prenom.equals("")) && (this.nom == null || this.nom.equals(""))) {
retour = ""; // évite de retourner " "
} else {
retour = this.prenom + " " + this.nom;
}
return retour;
}
public void setId(String id) {
this.id = id;
}
 
public String getId() {
return id;
}
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/modeles/ImageServiceResultat.java
New file
0,0 → 1,26
package org.tela_botanica.del.client.modeles;
 
import java.util.List;
 
public class ImageServiceResultat {
 
private List<Image> images;
 
private int nbTotalImagesPourLaRecherche;
 
public List<Image> getImages() {
return images;
}
 
public void setImages(List<Image> images) {
this.images = images;
}
 
public int getNbTotalImagesPourLaRecherche() {
return nbTotalImagesPourLaRecherche;
}
 
public void setNbTotalImagesPourLaRecherche(int nbTotalImagesPourLaRecherche) {
this.nbTotalImagesPourLaRecherche = nbTotalImagesPourLaRecherche;
}
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/modeles/EvenementObs.java
New file
0,0 → 1,28
package org.tela_botanica.del.client.modeles;
 
public class EvenementObs {
public String type = "";
public String infosComplementaires = "";
public EvenementObs(String type, String infosComplementaires) {
this.type = type;
this.infosComplementaires = infosComplementaires;
}
 
public String getType() {
return type;
}
 
public void setType(String type) {
this.type = type;
}
 
public String getInfosComplementaires() {
return infosComplementaires;
}
 
public void setInfosComplementaires(String infosComplementaires) {
this.infosComplementaires = infosComplementaires;
}
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/modeles/Observation.java
New file
0,0 → 1,320
package org.tela_botanica.del.client.modeles;
 
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
 
public class Observation implements Serializable {
 
private static final long serialVersionUID = 840032625524143547L;
private String id, auteur, idAuteur, nomAuteur, prenomAuteur, courrielAuteur, nomRetenu, famille, localite, idLocalite,
dateTransmission, numNomenclatural, nomCommun, lieuDit,
milieu, commentaire, dateReleve, station, referentiel, pays;
 
private List<String> motsClefs = new ArrayList<String>();
private List<EvenementObs> evenements = new ArrayList<EvenementObs>();
 
// les propositions sont une liste ordonnée qui contient soit des
// proposition de determinations, soit des commentaires
private List<InterventionForum> propositions = new ArrayList<InterventionForum>();
private List<Image> images = new ArrayList<Image>();
private String nbCommentaires;
 
public String getAuteur() {
return auteur;
}
 
public void setAuteur(String auteur) {
this.auteur = auteur;
}
 
public String getNomRetenu() {
return nomRetenu;
}
 
public void setNomRetenu(String commonName) {
this.nomRetenu = commonName;
}
 
public String getNomCommun() {
return nomCommun;
}
 
public void setNomCommun(String nomCommun) {
this.nomCommun = nomCommun;
}
 
public String getStation() {
return this.station;
}
public void setStation(String station) {
this.station = station;
}
public String getLieuDit() {
return this.lieuDit;
}
 
public void setLieuDit(String lieuDit) {
this.lieuDit = lieuDit;
}
 
public String getMilieu() {
return milieu;
}
 
public void setMilieu(String milieu) {
this.milieu = milieu;
}
 
public String getCommentaire() {
return commentaire;
}
 
public void setCommentaire(String commentaire) {
this.commentaire = commentaire;
}
 
public String getFamille() {
return famille;
}
 
public void setFamille(String famille) {
this.famille = famille;
}
 
public String getIdLocalite() {
return idLocalite;
}
 
public void setIdLocalite(String idlocalite) {
this.idLocalite = idlocalite;
}
 
public String getLocalite() {
return localite;
}
 
public String getLocaliteAvecIdFormatee() {
String localiteFormatee = this.localite;
if (idLocalite != null && idLocalite.length() >= 5 && idLocalite.substring(0, 5).equals("INSEE")) {
String[] tableaulocalite = idLocalite.split(":");
String idLocaliteFormatee = (tableaulocalite.length == 2) ? tableaulocalite[1] : localiteFormatee;
localiteFormatee += " (" + idLocaliteFormatee + ")";
} else if (idLocalite != null && idLocalite.length() >= 2) {
localiteFormatee += " (" + idLocalite.substring(0, 2) + ")";
}
 
return localiteFormatee;
}
 
public void setLocalite(String localite) {
this.localite = localite;
}
 
public String getDateTransmission() {
return dateTransmission;
}
 
public void setDateTransmission(String date) {
this.dateTransmission = date;
}
 
public String getDateReleve() {
return dateReleve;
}
 
public void setDateReleve(String dateReleve) {
this.dateReleve = dateReleve;
}
 
public String getNumNomenclatural() {
return numNomenclatural;
}
 
public void setNumNomenclatural(String numNomenclatural) {
this.numNomenclatural = numNomenclatural;
}
 
public List<InterventionForum> getInterventionsForum() {
return propositions;
}
 
public void setInterventionsForum(List<InterventionForum> propositions) {
this.propositions = propositions;
}
 
public List<String> getMotsClefs() {
return motsClefs;
}
 
public void setMotsClefs(List<String> motsClefs) {
this.motsClefs = motsClefs;
}
 
public void ajouterMotsClef(String motsClefs) {
if (this.motsClefs == null) {
this.motsClefs = new ArrayList<String>();
}
this.motsClefs.add(motsClefs);
}
 
public void ajouterPropositionDetermination(PropositionDetermination observationValidation) {
propositions.add(observationValidation);
}
 
public ArrayList<String> getPropositionsTaxonsData() {
 
ArrayList<String> propositionsTaxonDatas = new ArrayList<String>();
for (InterventionForum proposition : propositions) {
if (proposition instanceof PropositionDetermination) {
String espece = ((PropositionDetermination) proposition).getEspece();
if (espece != "" && !propositionsTaxonDatas.contains(espece)) {
propositionsTaxonDatas.add(espece);
}
}
}
 
return propositionsTaxonDatas;
}
 
public List<PropositionDetermination> getPropositionDeterminations() {
List<PropositionDetermination> determinations = new ArrayList<PropositionDetermination>();
for (InterventionForum proposition : getInterventionsForum()) {
if (proposition instanceof PropositionDetermination) {
determinations.add((PropositionDetermination) proposition);
}
}
return determinations;
}
public List<Commentaire> getCommentairesForum() {
List<Commentaire> commentaires = new ArrayList<Commentaire>();
for (InterventionForum proposition : getInterventionsForum()) {
if (proposition instanceof Commentaire) {
commentaires.add((Commentaire) proposition);
}
}
return commentaires;
}
public void supprimerIntervention(InterventionForum intervention) {
if(propositions.contains(intervention)) {
propositions.remove(intervention);
} else {
for (Iterator<InterventionForum> iterator = propositions.iterator(); iterator.hasNext();) {
iterator.next().supprimerIntervention(intervention);
}
}
}
 
public List<Image> getImages() {
return images;
}
 
public void setImages(List<Image> images) {
this.images = images;
}
 
public String getId() {
return id;
}
 
public void setId(String id) {
this.id = id;
}
public void setIdAuteur(String idAuteur) {
this.idAuteur = idAuteur;
}
 
public String getIdAuteur() {
return idAuteur;
}
public String getNomAuteur() {
return nomAuteur;
}
 
public void setNomAuteur(String nomAuteur) {
this.nomAuteur = nomAuteur;
}
 
public String getPrenomAuteur() {
return prenomAuteur;
}
 
public void setPrenomAuteur(String prenomAuteur) {
this.prenomAuteur = prenomAuteur;
}
 
public String getCourrielAuteur() {
return courrielAuteur;
}
 
public void setCourrielAuteur(String courrielAuteur) {
this.courrielAuteur = courrielAuteur;
}
public boolean estADeterminer() {
return nomRetenu == null || nomRetenu.isEmpty() || nomRetenu.equals("0") || motsClefs.contains("aDeterminer");
}
public String getReferentiel() {
String refFmt = "";
// on ne renvoie que le code du référentiel, sans version, et seulement également si l'on possède
// un numéro nomenclatural associé (ce qui nous assure une certaine cohérence)
if(referentiel.length() >= 3 && numNomenclatural != null && !numNomenclatural.equals("0")) {
int positionDeuxPoints = referentiel.indexOf(':');
if (positionDeuxPoints == -1) {
refFmt = referentiel;
} else {
refFmt = referentiel.substring(0, positionDeuxPoints);
}
}
return refFmt;
}
public void setReferentiel(String referentiel) {
this.referentiel = referentiel;
}
public String getNomRetenuFormateReferentiel() {
String nomRetenuFmt = "";
if(nomRetenu != null && !nomRetenu.equals("")) {
nomRetenuFmt += nomRetenu;
}
String referentiel = getReferentiel();
if(!nomRetenuFmt.equals("") && !referentiel.equals("")) {
nomRetenuFmt += " ("+referentiel+")";
}
return nomRetenuFmt;
}
public String getNbCommentaires() {
return nbCommentaires;
}
 
public void setNbCommentaires(String nbCommentaires) {
this.nbCommentaires = nbCommentaires;
}
public String getPays() {
return pays;
}
 
public void setPays(String pays) {
this.pays = pays;
}
public List<EvenementObs> setEvenementsAssocies(List<EvenementObs> evenements) {
return this.evenements = evenements;
}
public List<EvenementObs> getEvenementsAssocies() {
return evenements;
}
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/modeles/InterventionForum.java
New file
0,0 → 1,133
package org.tela_botanica.del.client.modeles;
 
import java.util.ArrayList;
import java.util.Date;
import java.util.Iterator;
import java.util.List;
public class InterventionForum {
private Contributeur contributeur;
private Date date;
private String id, idParent;
private InterventionForum parent;
private Observation observation;
public List<Commentaire> listeCommentaires = new ArrayList<Commentaire>();
boolean estAffichee;
public void setId(String id) {
this.id = id;
}
public String getId() {
return id;
}
public String getIdParent() {
return idParent;
}
 
public void afficher() {
this.estAffichee = true;
}
public boolean estAffichee() {
return this.estAffichee;
}
public void setIdParent(String idParent) {
this.idParent = idParent;
}
public void setParent(InterventionForum parent) {
this.parent = parent;
}
public boolean estFils() {
return (this.parent != null);
}
public InterventionForum getParent() {
return parent;
}
public void setObservation(Observation observation) {
this.observation = observation;
}
public Observation getObservation() {
return observation;
}
public String getAuteur() {
return contributeur.getNomComplet();
}
 
public void setContributeur(Contributeur contributeur) {
this.contributeur = contributeur;
}
public Contributeur getContributeur() {
return contributeur;
}
public Date getDate() {
return date;
}
 
public void setDate(Date date) {
this.date = date;
}
 
public List<Commentaire> getListeCommentaires() {
return listeCommentaires;
}
 
public void setListeCommentaires(List<Commentaire> listeCommentaires) {
this.listeCommentaires = listeCommentaires;
}
 
public void ajouterCommentaire(Commentaire commentaire) {
listeCommentaires.add(commentaire);
}
public boolean aDesCommentaires() {
return (listeCommentaires.size() != 0);
}
public void supprimerIntervention(InterventionForum intervention) {
if(listeCommentaires.contains(intervention)) {
listeCommentaires.remove(intervention);
} else {
for (Iterator<Commentaire> iterator = listeCommentaires.iterator(); iterator.hasNext();) {
iterator.next().supprimerIntervention(intervention);
}
}
}
public PropositionDetermination getPropositionParenteOuNulle() {
InterventionForum parent = getParent();
PropositionDetermination proposition = null;
while(parent != null && !(parent instanceof PropositionDetermination)) {
parent = parent.getParent();
}
if(parent != null) {
proposition = (PropositionDetermination)parent;
}
return proposition;
}
public int getTotalCommentaires() {
int nbCommentaires = 0;
for (Commentaire commentaire : listeCommentaires) {
chargerNbCommentairesRecursivement(nbCommentaires, commentaire);
}
return nbCommentaires;
}
 
private void chargerNbCommentairesRecursivement(int nbCommentaires, Commentaire commentaire) {
nbCommentaires ++;
for (Commentaire commentaireFils: commentaire.getListeCommentaires()) {
chargerNbCommentairesRecursivement(nbCommentaires, commentaireFils);
}
}
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/modeles/ModeRecherche.java
New file
0,0 → 1,5
package org.tela_botanica.del.client.modeles;
 
public enum ModeRecherche {
MODE_OBSERVATION, MODE_IMAGE
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/modeles/TypeInterventionForum.java
New file
0,0 → 1,14
package org.tela_botanica.del.client.modeles;
 
public enum TypeInterventionForum {
TYPE_COMMENTAIRE {
public String toString() {
return "type_commentaire";
};
},
TYPE_PROPOSITION_DETERMINATION {
public String toString() {
return "type_proposition_determination";
};
}
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/modeles/ObservationServiceResultat.java
New file
0,0 → 1,26
package org.tela_botanica.del.client.modeles;
 
import java.util.List;
 
public class ObservationServiceResultat {
 
private List<Observation> observations;
 
private int nbTotalObservationsPourLaRecherche;
 
public List<Observation> getObservations() {
return observations;
}
 
public void setObservations(List<Observation> observations) {
this.observations = observations;
}
 
public int getNbTotalObservationsPourLaRecherche() {
return nbTotalObservationsPourLaRecherche;
}
 
public void setNbTotalObservationsPourLaRecherche(int nbTotalObservationsPourLaRecherche) {
this.nbTotalObservationsPourLaRecherche = nbTotalObservationsPourLaRecherche;
}
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/modeles/VoteDetermination.java
New file
0,0 → 1,18
package org.tela_botanica.del.client.modeles;
 
 
public class VoteDetermination extends Vote {
 
private static final long serialVersionUID = -1017065180398557172L;
private PropositionDetermination propositionDetermination;
 
public PropositionDetermination getPropositionDetermination() {
return propositionDetermination;
}
 
public void setPropositionDetermination(
PropositionDetermination propositionDetermination) {
this.propositionDetermination = propositionDetermination;
}
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/resources/flecheGauche.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/resources/flecheGauche.png
New file
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/resources/Ressources.java
New file
0,0 → 1,21
package org.tela_botanica.del.client.resources;
 
import com.google.gwt.resources.client.ClientBundle;
import com.google.gwt.resources.client.ImageResource;
 
/**
* Resources used by the entire application.
*/
public interface Ressources extends ClientBundle {
 
@Source("logo.jpg")
ImageResource logo();
 
@Source("flecheGauche.png")
ImageResource arrowLeft();
 
@Source("flecheDroite.png")
ImageResource arrowRight();
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/resources/logo.jpg
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/resources/logo.jpg
New file
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/resources/flecheDroite.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/resources/flecheDroite.png
New file
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/i18n/Messages.java
New file
0,0 → 1,24
package org.tela_botanica.del.client.i18n;
 
/**
* Interface to represent the constants contained in resource bundle:
* 'D:/dev/svn/del/src/org/tela_botanica/del/client/i18n/Messages.properties'.
*/
public interface Messages extends com.google.gwt.i18n.client.Messages {
 
String rechercher_taxon(String nomTaxon);
 
String parmi_nb_pages(int nbPages);
String saisirLogin();
String identificationRefus();
String propositionDejaEffectuee(String taxon);
String etVotesAnonymes(String nbVotes);
String nouveauxVotes(String nbVotes);
String nouveauxCommentaires(String nbComms);
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/i18n/Vocabulary.java
New file
0,0 → 1,1998
package org.tela_botanica.del.client.i18n;
 
/**
* Interface to represent the constants contained in resource bundle:
* '/home/aurelien/web/del/src/org/tela_botanica/del/client/i18n/Vocabulary.properties'.
*/
public interface Vocabulary extends com.google.gwt.i18n.client.Constants {
/**
* Translated "Etes-vous d'accord ? ".
*
* @return translated "Etes-vous d'accord ? "
*/
@DefaultStringValue("Etes-vous d'accord ? ")
@Key("EtesVousDaccord")
String EtesVousDaccord();
 
/**
* Translated "Je ne suis pas d'accord".
*
* @return translated "Je ne suis pas d'accord"
*/
@DefaultStringValue("Je ne suis pas d'accord")
@Key("JeNeSuisPasDaccord")
String JeNeSuisPasDaccord();
 
/**
* Translated "Je suis d'accord".
*
* @return translated "Je suis d'accord"
*/
@DefaultStringValue("Je suis d'accord")
@Key("JeSuisDaccord")
String JeSuisDaccord();
 
/**
* Translated "Valider".
*
* @return translated "Valider"
*/
@DefaultStringValue("Valider")
@Key("accepter")
String accepter();
 
/**
* Translated "Aide".
*
* @return translated "Aide"
*/
@DefaultStringValue("Aide")
@Key("accesAide")
String accesAide();
 
/**
* Translated "Afficher".
*
* @return translated "Afficher"
*/
@DefaultStringValue("Afficher")
@Key("afficher")
String afficher();
 
/**
* Translated "Cliquez pour pour lier ou délier ce mot clé à l'image".
*
* @return translated "Cliquez pour pour lier ou délier ce mot clé à l'image"
*/
@DefaultStringValue("Cliquez pour pour lier ou délier ce mot clé à l'image")
@Key("aideLiaisonMotCle")
String aideLiaisonMotCle();
 
/**
* Translated "Saisissez des mots clés pour décrire l'image".
*
* @return translated "Saisissez des mots clés pour décrire l'image"
*/
@DefaultStringValue("Saisissez des mots clés pour décrire l'image")
@Key("aideSaisieMotCle")
String aideSaisieMotCle();
 
/**
* Translated "Ajouter un commentaire".
*
* @return translated "Ajouter un commentaire"
*/
@DefaultStringValue("Ajouter un commentaire")
@Key("ajouterCommentaire")
String ajouterCommentaire();
 
/**
* Translated "Ajouter une image".
*
* @return translated "Ajouter une image"
*/
@DefaultStringValue("Ajouter une image")
@Key("ajouterImage")
String ajouterImage();
 
/**
* Translated "Proposez une observation à déterminer".
*
* @return translated "Proposez une observation à déterminer"
*/
@DefaultStringValue("Proposez une observation à déterminer")
@Key("ajouterObservation")
String ajouterObservation();
 
/**
* Translated "Annuler".
*
* @return translated "Annuler"
*/
@DefaultStringValue("Annuler")
@Key("annuler")
String annuler();
 
/**
* Translated "Anonyme".
*
* @return translated "Anonyme"
*/
@DefaultStringValue("Anonyme")
@Key("anonyme")
String anonyme();
 
/**
* Translated "Aucun commentaire n'a été effectué sur cette détermination".
*
* @return translated "Aucun commentaire n'a été effectué sur cette détermination"
*/
@DefaultStringValue("Aucun commentaire n'a été effectué sur cette détermination")
@Key("aucunCommentaireEffectue")
String aucunCommentaireEffectue();
 
/**
* Translated "Aucun resultat trouvé".
*
* @return translated "Aucun resultat trouvé"
*/
@DefaultStringValue("Aucun resultat trouvé")
@Key("aucunResultat")
String aucunResultat();
 
/**
* Translated "Aucun vote n'a été effectué sur cette détermination, soyez le premier a voter !".
*
* @return translated "Aucun vote n'a été effectué sur cette détermination, soyez le premier a voter !"
*/
@DefaultStringValue("Aucun vote n'a été effectué sur cette détermination, soyez le premier a voter !")
@Key("aucunVoteEffectue")
String aucunVoteEffectue();
 
/**
* Translated "Publié par".
*
* @return translated "Publié par"
*/
@DefaultStringValue("Publié par")
@Key("auteur")
String auteur();
 
/**
* Translated "Autre".
*
* @return translated "Autre"
*/
@DefaultStringValue("Autre")
@Key("autre")
String autre();
 
/**
* Translated "Autre Proposition".
*
* @return translated "Autre Proposition"
*/
@DefaultStringValue("Autre Proposition")
@Key("autreProposition")
String autreProposition();
 
/**
* Translated "Autres informations ".
*
* @return translated "Autres informations "
*/
@DefaultStringValue("Autres informations ")
@Key("autresInformations")
String autresInformations();
 
/**
* Translated "Valider".
*
* @return translated "Valider"
*/
@DefaultStringValue("Valider")
@Key("boutonProposer")
String boutonProposer();
 
/**
* Translated "Chargement".
*
* @return translated "Chargement"
*/
@DefaultStringValue("Chargement")
@Key("chargement")
String chargement();
 
/**
* Translated "Proposer un nom de plante".
*
* @return translated "Proposer un nom de plante"
*/
@DefaultStringValue("Proposer un nom de plante")
@Key("choisirUnTaxon")
String choisirUnTaxon();
 
/**
* Translated "Commentaire".
*
* @return translated "Commentaire"
*/
@DefaultStringValue("Commentaire")
@Key("commentaire")
String commentaire();
 
/**
* Translated "Commentaires".
*
* @return translated "Commentaires"
*/
@DefaultStringValue("Commentaires")
@Key("commentaires")
String commentaires();
 
/**
* Translated "Pays".
*
* @return translated "Pays"
*/
@DefaultStringValue("Pays")
@Key("pays")
String pays();
/**
* Translated "Commune".
*
* @return translated "Commune"
*/
@DefaultStringValue("Commune")
@Key("commune")
String commune();
 
/**
* Translated "Comparer cette image".
*
* @return translated "Comparer cette image"
*/
@DefaultStringValue("Comparer cette image")
@Key("comparer")
String comparer();
 
/**
* Translated "Probable".
*
* @return translated "Probable"
*/
@DefaultStringValue("Probable")
@Key("confianceProbable")
String confianceProbable();
 
/**
* Translated "Simple Suggestion".
*
* @return translated "Simple Suggestion"
*/
@DefaultStringValue("Simple Suggestion")
@Key("confianceSimpleSuggestion")
String confianceSimpleSuggestion();
 
/**
* Translated "Sûr à 100%".
*
* @return translated "Sûr à 100%"
*/
@DefaultStringValue("Sûr à 100%")
@Key("confianceSurCent")
String confianceSurCent();
 
/**
* Translated "Êtes vous sur de vouloir supprimer ce commentaire ?".
*
* @return translated "Êtes vous sur de vouloir supprimer ce commentaire ?"
*/
@DefaultStringValue("Êtes vous sur de vouloir supprimer ce commentaire ?")
@Key("confirmationSuppressionCommentaire")
String confirmationSuppressionCommentaire();
 
/**
* Translated "Êtes vous sur de vouloir supprimer cette détermination ?".
*
* @return translated "Êtes vous sur de vouloir supprimer cette détermination ?"
*/
@DefaultStringValue("Êtes vous sur de vouloir supprimer cette détermination ?")
@Key("confirmationSuppressionDetermination")
String confirmationSuppressionDetermination();
 
/**
* Translated "Êtes vous sur de vouloir modifier votre observation pour le nom indiqué par cette proposition ?".
*
* @return translated "Êtes vous sur de vouloir modifier votre observation pour le nom indiqué par cette proposition ?"
*/
@DefaultStringValue("Êtes vous sur de vouloir modifier votre observation pour le nom indiqué par cette proposition ?")
@Key("confirmationValidationDetermination")
String confirmationValidationDetermination();
 
/**
* Translated "Contient les mots".
*
* @return translated "Contient les mots"
*/
@DefaultStringValue("Contient les mots")
@Key("contientMots")
String contientMots();
 
/**
* Translated "Contributeur".
*
* @return translated "Contributeur"
*/
@DefaultStringValue("Contributeur")
@Key("contributeur")
String contributeur();
 
/**
* Translated "Courriel".
*
* @return translated "Courriel"
*/
@DefaultStringValue("Courriel")
@Key("courriel")
String courriel();
 
/**
* Translated "Date".
*
* @return translated "Date"
*/
@DefaultStringValue("Date")
@Key("date")
String date();
 
/**
* Translated "Date de la prise de vue".
*
* @return translated "Date de la prise de vue"
*/
@DefaultStringValue("Date de la prise de vue")
@Key("dateObservation")
String dateObservation();
 
/**
* Translated "Le".
*
* @return translated "Le"
*/
@DefaultStringValue("Le")
@Key("dateReleve")
String dateReleve();
 
/**
* Translated "Transmis le".
*
* @return translated "Transmis le"
*/
@DefaultStringValue("Transmis le")
@Key("dateTransmission")
String dateTransmission();
 
/**
* Translated "Date de dernière validation".
*
* @return translated "Date de dernière validation"
*/
@DefaultStringValue("Date de dernière validation")
@Key("dateValidation")
String dateValidation();
 
/**
* Translated "Département (numéro ou nom)".
*
* @return translated "Département (numéro ou nom)"
*/
@DefaultStringValue("Département (numéro ou nom)")
@Key("departement")
String departement();
 
/**
* Translated "Masquer les observations smartphone anonymes".
*
* @return translated "Masquer les observations smartphone anonymes"
*/
@DefaultStringValue("Masquer les observations smartphone anonymes")
@Key("pnInscritsSeulement")
String pnInscritsSeulement();
 
/**
* Translated "Obs mobiles anonymes".
*
* @return translated "Obs mobiles anonymes"
*/
@DefaultStringValue("Obs mobiles anonymes")
@Key("pnISCourt")
String pnISCourt();
 
/**
* Translated "Détermination la plus probable : ".
*
* @return translated "Détermination la plus probable : "
*/
@DefaultStringValue("Détermination la plus probable : ")
@Key("determinationPlusProbable")
String determinationPlusProbable();
 
/**
* Translated "éléments par page".
*
* @return translated "éléments par page"
*/
@DefaultStringValue("éléments par page")
@Key("elements_par_page")
String elements_par_page();
 
/**
* Translated "page".
*
* @return translated "page"
*/
@DefaultStringValue("Page")
@Key("Page")
String page();
 
/**
* Translated "résultats".
*
* @return translated "résultats"
*/
@DefaultStringValue("résultats")
@Key("resultats")
String resultats();
 
/**
* Translated "Recherchez par espèce, genre, famille, numéro ou nom de département, commune, auteur ou mot-clé.".
*
* @return translated "Recherchez par espèce, genre, famille, numéro ou nom de département, commune, auteur ou mot-clé."
*/
@DefaultStringValue("Recherchez par espèce, genre, famille, numéro ou nom de département, commune, auteur ou mot-clé.")
@Key("entrerMotClef")
String entrerMotClef();
 
/**
* Translated "Famille (Latin)".
*
* @return translated "Famille (Latin)"
*/
@DefaultStringValue("Famille (Latin)")
@Key("famille")
String famille();
 
/**
* Translated "Fermer".
*
* @return translated "Fermer"
*/
@DefaultStringValue("Fermer")
@Key("fermer")
String fermer();
 
/**
* Translated "Fiabilité".
*
* @return translated "Fiabilité"
*/
@DefaultStringValue("Fiabilité")
@Key("fiabilite")
String fiabilite();
 
/**
* Translated "(jj/mm/aaaa ou aaaa)".
*
* @return translated "(jj/mm/aaaa ou aaaa)"
*/
@DefaultStringValue("(jj/mm/aaaa ou aaaa)")
@Key("formatDate")
String formatDate();
 
/**
* Translated "Genre".
*
* @return translated "Genre"
*/
@DefaultStringValue("Genre")
@Key("genre")
String genre();
 
/**
* Translated "Identifié".
*
* @return translated "Identifié"
*/
@DefaultStringValue("Identifié")
@Key("identifie")
String identifie();
 
/**
* Translated "Photos du Carnet en Ligne".
*
* @return translated "Photos du Carnet en Ligne"
*/
@DefaultStringValue("Photos du Carnet en Ligne")
@Key("imageEflore")
String imageEflore();
 
/**
* Translated "Image n°".
*
* @return translated "Image n°"
*/
@DefaultStringValue("Image n°")
@Key("imageNumero")
String imageNumero();
 
/**
* Translated "Cliquez sur l'image pour l'agrandir ou sur le bandeau contenant le nom pour accéder à la fiche de l'observation".
*
* @return translated "Cliquez sur l'image pour l'agrandir ou sur le bandeau contenant le nom pour accéder à la fiche de l'observation"
*/
@DefaultStringValue("Cliquez sur l'image pour l'agrandir ou sur le bandeau contenant le nom pour accéder à la fiche de l'observation")
@Key("indicationActionClicImage")
String indicationActionClicImage();
 
/**
* Translated "Supprimer ce mot clé".
*
* @return translated "Supprimer ce mot clé"
*/
@DefaultStringValue("Supprimer ce mot clé")
@Key("indiceSupprimerMotCle")
String indiceSupprimerMotCle();
 
/**
* Translated "Saisissez un nom de plante à comparer avec l'image".
*
* @return translated "Saisissez un nom de plante à comparer avec l'image"
*/
@DefaultStringValue("Saisissez un nom de plante à comparer avec l'image")
@Key("infoComparer")
String infoComparer();
 
/**
* Translated "Indiquez votre niveau de certitude vis-à-vis de votre proposition.".
*
* @return translated "Indiquez votre niveau de certitude vis-à-vis de votre proposition."
*/
@DefaultStringValue("Indiquez votre niveau de certitude vis-à-vis de votre proposition.")
@Key("infoFiabilite")
String infoFiabilite();
 
/**
* Translated "Pour proposer un commentaire, remplissez les champs ci-dessous et cliquez sur le bouton Valider !".
*
* @return translated "Pour proposer un commentaire, remplissez les champs ci-dessous et cliquez sur le bouton Valider !"
*/
@DefaultStringValue("Pour proposer un commentaire, remplissez les champs ci-dessous et cliquez sur le bouton Valider !")
@Key("infoProposerCommentaire")
String infoProposerCommentaire();
 
/**
* Translated "Pour proposer une détermination, remplissez les champs ci-dessous et cliquez sur le bouton Proposer !".
*
* @return translated "Pour proposer une détermination, remplissez les champs ci-dessous et cliquez sur le bouton Proposer !"
*/
@DefaultStringValue("Pour proposer une détermination, remplissez les champs ci-dessous et cliquez sur le bouton Proposer !")
@Key("infoProposerDetermination")
String infoProposerDetermination();
 
/**
* Translated "D'autres utilisateurs ont laissé une détermination".
*
* @return translated "D'autres utilisateurs ont laissé une détermination"
*/
@DefaultStringValue("D'autres utilisateurs ont laissé une détermination")
@Key("infoPropositions")
String infoPropositions();
 
/**
* Translated "Tapez les premières lettres d'un nom latin pour voir apparaître des propositions.".
*
* @return translated "Tapez les premières lettres d'un nom latin pour voir apparaître des propositions."
*/
@DefaultStringValue("Tapez les premières lettres d'un nom latin pour voir apparaître des propositions.")
@Key("infoTaxon")
String infoTaxon();
 
/**
* Translated "Voici la moyenne des votes en fonction du protocole choisi :".
*
* @return translated "Voici la moyenne des votes en fonction du protocole choisi :"
*/
@DefaultStringValue("Voici la moyenne des votes en fonction du protocole choisi :")
@Key("infoVotes")
String infoVotes();
 
/**
* Translated "Vos nom et prénom".
*
* @return translated "Vos nom et prénom"
*/
@DefaultStringValue("Vos nom et prénom")
@Key("infoVous")
String infoVous();
 
/**
* Translated "Cette galerie vous permet de rechercher les illustrations des membres du réseau issues du Carnet en ligne... et de voter pour la qualité des images selon un protocole défini.".
*
* @return translated "Cette galerie vous permet de rechercher les illustrations des membres du réseau issues du Carnet en ligne... et de voter pour la qualité des images selon un protocole défini."
*/
@DefaultStringValue("Cette galerie vous permet de rechercher les illustrations des membres du réseau issues du Carnet en ligne... et de voter pour la qualité des images selon un protocole défini.")
@Key("introRechercheImages")
String introRechercheImages();
 
/**
* Translated "Cet espace vous permet d'échanger sur la détermination d'espèces. <br />Vous ne parvenez pas à déterminer une plante ? Soumettez-la aux membres du réseau. <br /> Vous avez relevé des erreurs dans les images soumises par le réseau ? Postez un commentaire ou proposez une nouvelle détermination.".
*
* @return translated "Cet espace vous permet d'échanger sur la détermination d'espèces. <br />Vous ne parvenez pas à déterminer une plante ? Soumettez-la aux membres du réseau. <br /> Vous avez relevé des erreurs dans les images soumises par le réseau ? Postez un commentaire ou proposez une nouvelle détermination."
*/
@DefaultStringValue("Cet espace vous permet d'échanger sur la détermination d'espèces. <br />Vous ne parvenez pas à déterminer une plante ? Soumettez-la aux membres du réseau. <br /> Vous avez relevé des erreurs dans les images soumises par le réseau ? Postez un commentaire ou proposez une nouvelle détermination.")
@Key("introRechercheObservations")
String introRechercheObservations();
 
/**
* Translated "Choisir un protocole".
*
* @return translated "Choisir un protocole"
*/
@DefaultStringValue("Choisir un protocole")
@Key("labelProtocole")
String labelProtocole();
 
/**
* Translated "Ajoutez une image pour participer à ce projet".
*
* @return translated "Ajoutez une image pour participer à ce projet"
*/
@DefaultStringValue("Ajoutez une image pour participer à ce projet")
@Key("legendeAjouterImage")
String legendeAjouterImage();
 
/**
* Translated "Soumettez au réseau une observation à déterminer \n Si vous avez déjà un carnet en ligne, ajoutez votre observation dans le projet \"aDeterminer\"".
*
* @return translated "Soumettez au réseau une observation à déterminer \n Si vous avez déjà un carnet en ligne, ajoutez votre observation dans le projet \"aDeterminer\""
*/
@DefaultStringValue("Soumettez au réseau une observation à déterminer \n Si vous avez déjà un carnet en ligne, ajoutez votre observation dans le projet \"aDeterminer\"")
@Key("legendeAjouterObservation")
String legendeAjouterObservation();
 
/**
* Translated "Propositions ".
*
* @return translated "Propositions "
*/
@DefaultStringValue("Propositions ")
@Key("lesPropositions")
String lesPropositions();
 
/**
* Translated "http://www.tela-botanica.org/page:liste_projets?id_projet=95&act=wikini".
*
* @return translated "http://www.tela-botanica.org/page:liste_projets?id_projet=95&act=wikini"
*/
@DefaultStringValue("http://www.tela-botanica.org/page:liste_projets?id_projet=95&act=wikini")
@Key("lienAideIdentiplante")
String lienAideIdentiplante();
 
/**
* Translated "http://www.tela-botanica.org/page:liste_projets?id_projet=112&act=wikini ".
*
* @return translated "http://www.tela-botanica.org/page:liste_projets?id_projet=112&act=wikini "
*/
@DefaultStringValue("http://www.tela-botanica.org/page:liste_projets?id_projet=112&act=wikini ")
@Key("lienAidePictoflora")
String lienAidePictoflora();
 
/**
* Translated "http://www.tela-botanica.org/widget:cel:saisie?tag-img=aDeterminer&tag-obs=aDeterminer&titre=&titre=Ajouter%20une%20photo%20%26agrave%3B%20d%26eacute%3Bterminer".
*
* @return translated "http://www.tela-botanica.org/widget:cel:saisie?tag-img=aDeterminer&tag-obs=aDeterminer&titre=&titre=Ajouter%20une%20photo%20%26agrave%3B%20d%26eacute%3Bterminer"
*/
@DefaultStringValue("http://www.tela-botanica.org/widget:cel:saisie?tag-img=aDeterminer&tag-obs=aDeterminer&titre=&titre=Ajouter%20une%20photo%20%26agrave%3B%20d%26eacute%3Bterminer")
@Key("lienAppliSaisie")
String lienAppliSaisie();
 
/**
* Translated "http://www.tela-botanica.org/widget:cel:saisie?tag-img={projet}&tag-obs={projet}".
*
* @return translated "http://www.tela-botanica.org/widget:cel:saisie?tag-img={projet}&tag-obs={projet}"
*/
@DefaultStringValue("http://www.tela-botanica.org/widget:cel:saisie?tag-img={projet}&tag-obs={projet}")
@Key("lienAppliSaisieProjetUrl")
String lienAppliSaisieProjetUrl();
 
/**
* Translated "Lieu-dit".
*
* @return translated "Lieu-dit"
*/
@DefaultStringValue("Lieu-dit")
@Key("lieuDit")
String lieuDit();
 
/**
* Translated "Lieu du relevé".
*
* @return translated "Lieu du relevé"
*/
@DefaultStringValue("Lieu du relevé")
@Key("lieuDuReleve")
String lieuDuReleve();
 
/**
* Translated "Localite".
*
* @return translated "Localite"
*/
@DefaultStringValue("Localite")
@Key("localite")
String localite();
 
/**
* Translated "Courriel :".
*
* @return translated "Courriel :"
*/
@DefaultStringValue("Courriel :")
@Key("login")
String login();
 
/**
* Translated "Identiplante permettra bientôt de recevoir des courriels journaliers récapitulant les propositions, commentaires et observations nouvellement ajoutés. En cochant ces cases vous avez la possibilité de recevoir ces courriels dès qu'il seront mis en service (vous pouvez changer cela à tout moment en revenant sur cette interface)".
*
* @return translated "Identiplante permettra bientôt de recevoir des courriels journaliers récapitulant les propositions, commentaires et observations nouvellement ajoutés. En cochant ces cases vous avez la possibilité de recevoir ces courriels dès qu'il seront mis en service (vous pouvez changer cela à tout moment en revenant sur cette interface)"
*/
@DefaultStringValue("Identiplante permettra bientôt de recevoir des courriels journaliers récapitulant les propositions, commentaires et observations nouvellement ajoutés. En cochant ces cases vous avez la possibilité de recevoir ces courriels dès qu'il seront mis en service (vous pouvez changer cela à tout moment en revenant sur cette interface)")
@Key("messageTemporaireMails")
String messageTemporaireMails();
 
/**
* Translated "Famille".
*
* @return translated "Famille"
*/
@DefaultStringValue("Famille")
@Key("metadonneeFamille")
String metadonneeFamille();
 
/**
* Translated "Métadonnées".
*
* @return translated "Métadonnées"
*/
@DefaultStringValue("Métadonnées")
@Key("metadonnees")
String metadonnees();
 
/**
* Translated "Meta-donnees de la photo".
*
* @return translated "Meta-donnees de la photo"
*/
@DefaultStringValue("Meta-donnees de la photo")
@Key("metadonneesPhoto")
String metadonneesPhoto();
 
/**
* Translated "Milieu".
*
* @return translated "Milieu"
*/
@DefaultStringValue("Milieu")
@Key("milieu")
String milieu();
 
/**
* Translated "Mon vote".
*
* @return translated "Mon vote"
*/
@DefaultStringValue("Mon vote")
@Key("monVote")
String monVote();
 
/**
* Translated "Mot-clé".
*
* @return translated "Mot-clé"
*/
@DefaultStringValue("Mot-clé")
@Key("mot_clef")
String mot_clef();
 
/**
* Translated "Mot de passe :".
*
* @return translated "Mot de passe :"
*/
@DefaultStringValue("Mot de passe :")
@Key("motdepasse")
String motdepasse();
 
/**
* Translated "Mots-clés".
*
* @return translated "Mots-clés"
*/
@DefaultStringValue("Mots-clés")
@Key("motsClefs")
String motsClefs();
 
/**
* Translated "Mots Clés".
*
* @return translated "Mots Clés"
*/
@DefaultStringValue("Mots Clés")
@Key("motsCles")
String motsCles();
 
/**
* Translated "Moyenne".
*
* @return translated "Moyenne"
*/
@DefaultStringValue("Moyenne")
@Key("moyenne")
String moyenne();
 
/**
* Translated "vote".
*
* @return translated "vote"
*/
@DefaultStringValue("vote")
@Key("nbVotes")
String nbVotes();
 
/**
* Translated "pt".
*
* @return translated "pt"
*/
@DefaultStringValue("pt")
@Key("nbPoints")
String nbPoints();
 
/**
* Translated "Nom".
*
* @return translated "Nom"
*/
@DefaultStringValue("Nom")
@Key("nom")
String nom();
 
/**
* Translated "Nom commun".
*
* @return translated "Nom commun"
*/
@DefaultStringValue("Nom commun")
@Key("nomCommun")
String nomCommun();
 
/**
* Translated "Nom retenu".
*
* @return translated "Nom retenu"
*/
@DefaultStringValue("Nom retenu")
@Key("nomRetenu")
String nomRetenu();
 
/**
* Translated "Nb votes".
*
* @return translated "Nb votes"
*/
@DefaultStringValue("Nb votes")
@Key("nombreVotes")
String nombreVotes();
 
/**
* Translated "non".
*
* @return translated "non"
*/
@DefaultStringValue("non")
@Key("non")
String non();
 
/**
* Translated "Observateur".
*
* @return translated "Observateur"
*/
@DefaultStringValue("Observateur")
@Key("observateur")
String observateur();
 
/**
* Translated "Observée le".
*
* @return translated "Observée le"
*/
@DefaultStringValue("Observée le")
@Key("observeLe")
String observeLe();
 
/**
* Translated "ok".
*
* @return translated "ok"
*/
@DefaultStringValue("ok")
@Key("ok")
String ok();
 
/**
* Translated "oui".
*
* @return translated "oui"
*/
@DefaultStringValue("oui")
@Key("oui")
String oui();
 
/**
* Translated "par".
*
* @return translated "par"
*/
@DefaultStringValue("par")
@Key("par")
String par();
 
/**
* Translated "Préférences".
*
* @return translated "Préférences"
*/
@DefaultStringValue("Préférences")
@Key("preferences")
String preferences();
 
/**
* Translated "Prénom".
*
* @return translated "Prénom"
*/
@DefaultStringValue("Prénom")
@Key("prenom")
String prenom();
 
/**
* Translated "proposé par ".
*
* @return translated "proposé par "
*/
@DefaultStringValue("proposé par ")
@Key("proposePar")
String proposePar();
 
/**
* Translated "utilisateur anonyme".
*
* @return translated "utilisateur anonyme"
*/
@DefaultStringValue("utilisateur anonyme")
@Key("utilisateurAnonyme")
String utilisateurAnonyme();
 
/**
* Translated "Proposer une détermination".
*
* @return translated "Proposer une détermination"
*/
@DefaultStringValue("Proposer une détermination")
@Key("proposerSaDetermination")
String proposerSaDetermination();
 
/**
* Translated "Protocole".
*
* @return translated "Protocole"
*/
@DefaultStringValue("Protocole")
@Key("protocole")
String protocole();
 
/**
* Translated "Protocole par défaut".
*
* @return translated "Protocole par défaut"
*/
@DefaultStringValue("Protocole par défaut")
@Key("protocoleDefaut")
String protocoleDefaut();
 
/**
* Translated "Esthétisme".
*
* @return translated "Esthétisme"
*/
@DefaultStringValue("Esthétisme")
@Key("protocoleEsthetisme")
String protocoleEsthetisme();
 
/**
* Translated "Identification automatique".
*
* @return translated "Identification automatique"
*/
@DefaultStringValue("Identification automatique")
@Key("protocoleIdentificationAuto")
String protocoleIdentificationAuto();
 
/**
* Translated "Publiée le".
*
* @return translated "Publiée le"
*/
@DefaultStringValue("Publiée le")
@Key("publiee")
String publiee();
 
/**
* Translated "Recevoir un email (1 fois par jour) récapitulant :".
*
* @return translated "Recevoir un email (1 fois par jour) récapitulant :"
*/
@DefaultStringValue("Recevoir un email (1 fois par jour) récapitulant :")
@Key("recevoirMailComProp")
String recevoirMailComProp();
 
/**
* Translated "les commentaires et propositions faits sur mes observations".
*
* @return translated "les commentaires et propositions faits sur mes observations"
*/
@DefaultStringValue("les commentaires et propositions faits sur mes observations")
@Key("comEtPropSurObs")
String comEtPropSurObs();
 
/**
* Translated "les commentaires en réponse à mes commentaires et propositions".
*
* @return translated "les commentaires en réponse à mes commentaires et propositions"
*/
@DefaultStringValue("les commentaires en réponse à mes commentaires et propositions")
@Key("comSurComEtProp")
String comSurComEtProp();
 
/**
* Translated "Recevoir le mail récapitulant les nouvelles observations proposées à la détermination (1 fois par jour)".
*
* @return translated "Recevoir le mail récapitulant les nouvelles observations proposées à la détermination (1 fois par jour)"
*/
@DefaultStringValue("Recevoir le email récapitulant les nouvelles observations proposées à la détermination (1 fois par jour)")
@Key("recevoirMailsToutesObs")
String recevoirMailsToutesObs();
 
/**
* Translated "Recherche avancée".
*
* @return translated "Recherche avancée"
*/
@DefaultStringValue("Recherche avancée")
@Key("rechercheAvancee")
String rechercheAvancee();
 
/**
* Translated "Recherche libre".
*
* @return translated "Recherche libre"
*/
@DefaultStringValue("Recherche libre")
@Key("rechercheLibre")
String rechercheLibre();
 
/**
* Translated "Rechercher".
*
* @return translated "Rechercher"
*/
@DefaultStringValue("Rechercher")
@Key("rechercher")
String rechercher();
 
/**
* Translated "Rechercher et voter".
*
* @return translated "Rechercher et voter"
*/
@DefaultStringValue("Rechercher et voter")
@Key("rechercherImage")
String rechercherImage();
 
/**
* Translated "Identifier une plante".
*
* @return translated "Identifier une plante"
*/
@DefaultStringValue("Identifier une plante")
@Key("rechercherObservation")
String rechercherObservation();
 
/**
* Translated "Rechercher le taxon".
*
* @return translated "Rechercher le taxon"
*/
@DefaultStringValue("Rechercher le taxon")
@Key("rechercherTaxon")
String rechercherTaxon();
 
/**
* Translated "Référentiel".
*
* @return translated "Référentiel"
*/
@DefaultStringValue("Référentiel")
@Key("referentiel")
String referentiel();
 
/**
* Translated "Trachéophytes de France métropolitaine ".
*
* @return translated "Trachéophytes de France métropolitaine "
*/
@DefaultStringValue("France métropolitaine (BDTFX)")
@Key("referentielBdtfx")
String referentielBdtfx();
 
/**
* Translated "Trachéophytes des Antilles françaises".
*
* @return translated "Trachéophytes des Antilles françaises"
*/
@DefaultStringValue("Antilles françaises (BDTXA)")
@Key("referentielBdtxa")
String referentielBdtxa();
/**
* Translated "Trachéophytes de la Réunion".
*
* @return translated "Trachéophytes de la Réunion"
*/
@DefaultStringValue("la Réunion (BDTRE)")
@Key("referentielBdtre")
String referentielBdtre();
/**
* Translated "Trachéophytes de Guyane".
*
* @return translated "Flore de Guyane"
*/
@DefaultStringValue("Guyane (AUBLET2)")
@Key("referentielAublet")
String referentielAublet();
/**
* Translated "Trachéophytes de la Nouvelle-Calédonie".
*
* @return translated "Trachéophytes de la Réunion"
*/
@DefaultStringValue("Nouvelle-Calédonie (FLORICAL)")
@Key("referentielFlorical")
String referentielFlorical();
 
/**
* Translated "Flore d'Afrique du Nord".
*
* @return translated "Flore d'Afrique du Nord"
*/
@DefaultStringValue("Afrique du Nord (ISFAN)")
@Key("referentielIsfan")
String referentielIsfan();
 
/**
* Translated "Référentiel d'Afrique tropicale".
*
* @return translated "Référentiel d'Afrique tropicale"
*/
@DefaultStringValue("Afrique tropicale (APD)")
@Key("referentielApd")
String referentielApd();
/**
* Translated "Référentiel du Liban".
*
* @return translated "Référentiel du Liban"
*/
@DefaultStringValue("Liban (LEF)")
@Key("referentielLbf")
String referentielLbf();
 
/**
* Translated "Tous les référentiels".
*
* @return translated "Tous les référentiels"
*/
@DefaultStringValue("Tous les référentiels")
@Key("referentielTous")
String referentielTous();
 
/**
* Translated "Sauvegarder".
*
* @return translated "Sauvegarder"
*/
@DefaultStringValue("Sauvegarder")
@Key("sauvegarder")
String sauvegarder();
 
/**
* Translated "Se déconnecter".
*
* @return translated "Se déconnecter"
*/
@DefaultStringValue("Se déconnecter")
@Key("seDeconnecter")
String seDeconnecter();
 
/**
* Translated "Signaler une mauvaise identification".
*
* @return translated "Signaler une mauvaise identification"
*/
@DefaultStringValue("Signaler une mauvaise identification")
@Key("signalerIdentification")
String signalerIdentification();
 
/**
* Translated "Station".
*
* @return translated "Station"
*/
@DefaultStringValue("Station")
@Key("station")
String station();
 
/**
* Translated "Supprimer votre vote".
*
* @return translated "Supprimer votre vote"
*/
@DefaultStringValue("Supprimer votre vote")
@Key("supprimerVote")
String supprimerVote();
 
/**
* Translated "Tag".
*
* @return translated "Tag"
*/
@DefaultStringValue("Tag")
@Key("tag")
String tag();
 
/**
* Translated "Tag cel".
*
* @return translated "Tag cel"
*/
@DefaultStringValue("Tag cel")
@Key("tagCel")
String tagCel();
 
/**
* Translated "Tag pictoflora".
*
* @return translated "Tag pictoflora"
*/
@DefaultStringValue("Tag pictoflora")
@Key("tagDel")
String tagDel();
 
/**
* Translated "Espèce".
*
* @return translated "Espèce"
*/
@DefaultStringValue("Espèce")
@Key("taxon")
String taxon();
 
/**
* Translated "Taxon à déterminer".
*
* @return translated "Taxon à déterminer"
*/
@DefaultStringValue("Taxon à déterminer")
@Key("taxonADeterminer")
String taxonADeterminer();
 
/**
* Translated "texte de connexion".
*
* @return translated "texte de connexion"
*/
@DefaultStringValue("texte de connexion")
@Key("texteConnexion")
String texteConnexion();
 
/**
* Translated "Détermination / confirmation".
*
* @return translated "Détermination / confirmation"
*/
@DefaultStringValue("Détermination / confirmation")
@Key("titreDetermination")
String titreDetermination();
 
/**
* Translated "Bienvenue".
*
* @return translated "Bienvenue"
*/
@DefaultStringValue("Bienvenue")
@Key("titreEstIdentifie")
String titreEstIdentifie();
 
/**
* Translated "Synthèse de l'observation et des images associées".
*
* @return translated "Synthèse de l'observation et des images associées"
*/
@DefaultStringValue("Synthèse de l'observation et des images associées")
@Key("titrePlateformeDetermination")
String titrePlateformeDetermination();
 
/**
* Translated "Identifiez-vous".
*
* @return translated "Identifiez-vous"
*/
@DefaultStringValue("Identifiez-vous")
@Key("titreSeConnecter")
String titreSeConnecter();
 
/**
* Translated "Publié le".
*
* @return translated "Publié le"
*/
@DefaultStringValue("Publié le")
@Key("publieLe")
String publieLe();
 
/**
* Translated "Tri : ".
*
* @return translated "Tri : "
*/
@DefaultStringValue("Tri : ")
@Key("tri")
String tri();
 
/**
* Translated "Date de publication".
*
* @return translated "Date de publication"
*/
@DefaultStringValue("Date de publication")
@Key("triParDatePubli")
String triParDatePubli();
/**
* Translated "Date".
*
* @return translated "Date"
*/
@DefaultStringValue("Date d'observation")
@Key("triParDateObs")
String triParDateObs();
/**
* Translated "Trier par date de publication".
*
* @return translated "Trier par date de publication"
*/
@DefaultStringValue("Trier par date de publication")
@Key("triParDatePubliTooltip")
String triParDatePubliTooltip();
 
/**
* Translated "Tri actuel par date de publication de la plus ancienne à la plus récente".
*
* @return translated "Tri actuel par date de publication de la plus ancienne à la plus récente"
*/
@DefaultStringValue("Tri actuel par date de publication de la plus ancienne à la plus récente")
@Key("triParDatePubliAscendant")
String triParDatePubliAscendant();
 
/**
* Translated "Tri actuel par date de publication de la plus récente à la plus ancienne".
*
* @return translated "Tri actuel par date de publication de la plus récente à la plus ancienne"
*/
@DefaultStringValue("Tri actuel par date de publication de la plus récente à la plus ancienne")
@Key("triParDatePubliDescendant")
String triParDatePubliDescendant();
/**
* Translated "Trier par date d'observation".
*
* @return translated "Trier par date d'observation"
*/
@DefaultStringValue("Trier par date d'observation")
@Key("triParDateObsTooltip")
String triParDateObsTooltip();
 
/**
* Translated "Tri actuel par date d'observation de la plus ancienne à la plus récente".
*
* @return translated "Tri actuel par date d'observation de la plus ancienne à la plus récente"
*/
@DefaultStringValue("Tri actuel par date d'observation de la plus ancienne à la plus récente")
@Key("triParDateObsAscendant")
String triParDateObsAscendant();
 
/**
* Translated "Tri actuel par date d'observation de la plus récente à la plus ancienne".
*
* @return translated "Tri actuel par date d'observation de la plus récente à la plus ancienne"
*/
@DefaultStringValue("Tri actuel par date d'observation de la plus récente à la plus ancienne")
@Key("triParDateObsDescendant")
String triParDateObsDescendant();
 
/**
* Translated "Tags".
*
* @return translated "Tags"
*/
@DefaultStringValue("Tags")
@Key("triParNbTags")
String triParNbTags();
/**
* Translated "Trier par nombre de tags ( = mots-clés)".
*
* @return translated "Trier par nombre de tags"
*/
@DefaultStringValue("Trier par nombre de tags")
@Key("triParNbTagsTooltip")
String triParNbTagsTooltip();
 
/**
* Translated "Tri actuel par nombre de tags croissant".
*
* @return translated "Tri actuel par nombre de tags croissant"
*/
@DefaultStringValue("Tri actuel par nombre de tags croissant")
@Key("triParNbTagsAscendant")
String triParNbTagsAscendant();
 
/**
* Translated "Tri actuel par nombre de tags décroissant".
*
* @return translated "Tri actuel par nombre de tags décroissant"
*/
@DefaultStringValue("Tri actuel par nombre de tags décroissant")
@Key("triParNbTagsDescendant")
String triParNbTagsDescendant();
 
/**
* Translated "Note moyenne".
*
* @return translated "Note moyenne"
*/
@DefaultStringValue("Note moyenne")
@Key("triParMoyenneArithmetique")
String triParMoyenneArithmetique();
 
/**
* Translated "Trier par moyenne arithmétique des notes".
*
* @return translated "Trier par moyenne arithmétique des notes"
*/
@DefaultStringValue("Trier par moyenne arithmétique des notes")
@Key("triParMoyenneArithmetiqueTooltip")
String triParMoyenneArithmetiqueTooltip();
/**
* Translated "Tri actuel par note moyenne arithmétique des votes du minimum au maximum".
*
* @return translated "Tri actuel par note moyenne arithmétique des votes du minimum au maximum"
*/
@DefaultStringValue("Tri actuel par note moyenne arithmétique des votes du minimum au maximum")
@Key("triParMoyenneArithmetiqueAscendant")
String triParMoyenneArithmetiqueAscendant();
 
/**
* Translated "Tri actuel par note moyenne arithmétique des votes du maximum au minimum".
*
* @return translated "Tri actuel par note moyenne arithmétique des votes du maximum au minimum"
*/
@DefaultStringValue("Tri actuel par note moyenne arithmétique des votes du maximum au minimum")
@Key("triParMoyenneArithmetiqueDescendant")
String triParMoyenneArithmetiqueDescendant();
 
/**
* Translated "Points".
*
* @return translated "Points"
*/
@DefaultStringValue("Points")
@Key("triParNbPoints")
String triParNbPoints();
 
/**
* Translated "Trier par nombre de points".
*
* @return translated "Trier par nombre de points"
*/
@DefaultStringValue("Trier par nombre de points")
@Key("triParNbPointsTooltip")
String triParNbPointsTooltip();
/**
* Translated "Tri actuel par nombre de points croissant".
*
* @return translated "Tri actuel par nombre de points croissant"
*/
@DefaultStringValue("Tri actuel par nombre de points croissant")
@Key("triParNbPointsAscendant")
String triParNbPointsAscendant();
 
/**
* Translated "Tri actuel par nombre de points décroissant".
*
* @return translated "Tri actuel par nombre de points décroissant"
*/
@DefaultStringValue("Tri actuel par nombre de points décroissant")
@Key("triParNbPointsDescendant")
String triParNbPointsDescendant();
/**
* Translated "Nombre de commentaires".
*
* @return translated "Nombre de commentaires"
*/
@DefaultStringValue("Nombre de commentaires")
@Key("triParNbCommentaires")
String triParNbCommentaires();
/**
* Translated "Trier par nombre de commentaires".
*
* @return translated "Trier par nombre de commentaires"
*/
@DefaultStringValue("Trier par nombre de commentaires")
@Key("triParNbCommentairesTooltip")
String triParNbCommentairesTooltip();
 
/**
* Translated "Tri actuel par nombre de commentaires croissant".
*
* @return translated "Tri actuel par nombre de commentaires croissant"
*/
@DefaultStringValue("Tri actuel par nombre de commentaires croissant")
@Key("triParNbCommentairesAscendant")
String triParNbCommentairesAscendant();
 
/**
* Translated "Tri actuel par nombre de commentaires décroissant".
*
* @return translated "Tri actuel par nombre de commentaires décroissant"
*/
@DefaultStringValue("Tri actuel par nombre de commentaires décroissant")
@Key("triParNbCommentairesDescendant")
String triParNbCommentairesDescendant();
 
/**
* Translated "Vote".
*
* @return translated "Vote"
*/
@DefaultStringValue("Vote")
@Key("valeurVote")
String valeurVote();
 
/**
* Translated "Validé par".
*
* @return translated "Validé par"
*/
@DefaultStringValue("Validé par")
@Key("validePar")
String validePar();
 
/**
* Translated "Vider".
*
* @return translated "Vider"
*/
@DefaultStringValue("Vider")
@Key("vider")
String vider();
 
/**
* Translated "Voir tous les commentaires ".
*
* @return translated "Voir tous les commentaires "
*/
@DefaultStringValue("Voir tous les commentaires ")
@Key("voirCommentaires")
String voirCommentaires();
 
/**
* Translated "Voir les commentaires liés à cette proposition".
*
* @return translated "Voir les commentaires liés à cette proposition"
*/
@DefaultStringValue("Voir les commentaires liés à cette proposition")
@Key("voirDetailCommentaires")
String voirDetailCommentaires();
/**
* Translated "Tout".
*
* @return translated "Tout"
*/
@DefaultStringValue("Tout")
@Key("ongletTous")
String ongletTous();
/**
* Translated "A déterminer".
*
* @return translated "A déterminer"
*/
@DefaultStringValue("A déterminer")
@Key("ongletADeterminer")
String ongletADeterminer();
/**
* Translated "A confirmer".
*
* @return translated "A confirmer"
*/
@DefaultStringValue("A confirmer")
@Key("ongletAConfirmer")
String ongletAConfirmer();
/**
* Translated "Vérifiées".
*
* @return translated "Vérifiées"
*/
@DefaultStringValue("Vérifiées")
@Key("ongletVerifiees")
String ongletVerifiees();
 
/**
* Translated "Voir le détail des utilisateurs qui ont voté".
*
* @return translated "Voir le détail des utilisateurs qui ont voté"
*/
@DefaultStringValue("Voir le détail des utilisateurs qui ont voté")
@Key("voirDetailVotes")
String voirDetailVotes();
 
/**
* Translated "Voir la fiche".
*
* @return translated "Voir la fiche"
*/
@DefaultStringValue("Voir la fiche")
@Key("voirFicheIndividu")
String voirFicheIndividu();
 
/**
* Translated "Voir la date, le lieu et l'auteur de l'image".
*
* @return translated "Voir la date, le lieu et l'auteur de l'image"
*/
@DefaultStringValue("Voir la date, le lieu et l'auteur de l'image")
@Key("voirMetadonnees")
String voirMetadonnees();
 
/**
* Translated "Voir et modifier les mots clés associés à l'image".
*
* @return translated "Voir et modifier les mots clés associés à l'image"
*/
@DefaultStringValue("Voir et modifier les mots clés associés à l'image")
@Key("voirMotsCles")
String voirMotsCles();
 
/**
* Translated "Vote modifié".
*
* @return translated "Vote modifié"
*/
@DefaultStringValue("Vote modifié")
@Key("voteModifie")
String voteModifie();
 
/**
* Translated "Vote pris en compte".
*
* @return translated "Vote pris en compte"
*/
@DefaultStringValue("Vote pris en compte")
@Key("votePrisEnCompte")
String votePrisEnCompte();
 
/**
* Translated "Vote supprimé".
*
* @return translated "Vote supprimé"
*/
@DefaultStringValue("Vote supprimé")
@Key("voteSupprime")
String voteSupprime();
 
/**
* Translated "Moyenne des votes".
*
* @return translated "Moyenne des votes"
*/
@DefaultStringValue("Moyenne des votes")
@Key("votes")
String votes();
 
/**
* Translated "Moyenne pondérée des votes : ".
*
* @return translated "Moyenne pondérée des votes : "
*/
@DefaultStringValue("Moyenne pondérée des votes : ")
@Key("votesMoyennePrecise")
String votesMoyennePrecise();
 
/**
* Translated "Votez".
*
* @return translated "Votez"
*/
@DefaultStringValue("Votez")
@Key("votez")
String votez();
/**
* Translated "Identifiez-vous pour voter".
*
* @return translated "Identifiez-vous pour voter"
*/
@DefaultStringValue("Identifiez-vous pour voter")
@Key("identifiezVousPourVoter")
String identifiezVousPourVoter();
 
/**
* Translated "Vous".
*
* @return translated "Vous"
*/
@DefaultStringValue("Vous")
@Key("vous")
String vous();
 
/**
* Translated "Supprimer l'image définitivement".
*
* @return translated "Supprimer l'image définitivement"
*/
@DefaultStringValue("Supprimer l'image définitivement")
@Key("supprimerImage")
String supprimerImage();
/**
* Translated "Êtes-vous certain de vouloir supprimer l'image DÉFINITIVEMENT ? L'image est-elle réellement inutilisable ? Avez-vous contacté son auteur au préalable ?".
*
* @return translated "Êtes-vous certain de vouloir supprimer l'image DÉFINITIVEMENT ? L'image est-elle réellement inutilisable ? Avez-vous contacté son auteur au préalable ?"
*/
@DefaultStringValue("Êtes-vous certain de vouloir supprimer l'image DÉFINITIVEMENT ? L'image est-elle réellement inutilisable ? Avez-vous contacté son auteur au préalable ?")
@Key("confirmationSuppressionImg")
String confirmationSuppressionImg();
/**
* Translated "Dépublier".
*
* @return translated "Dépublier"
*/
@DefaultStringValue("Dépublier")
@Key("depublierObs")
String depublierObs();
/**
* Translated "Avez-vous contacté l'auteur de l'observation ? Êtes-vous vraiment certain de vouloir dépublier le travail de cette personne ?".
*
* @return translated "Avez-vous contacté l'auteur de l'observation ? Êtes-vous vraiment certain de vouloir dépublier le travail de cette personne ?"
*/
@DefaultStringValue("Avez-vous contacté l'auteur de l'observation ? Êtes-vous vraiment certain de vouloir dépublier le travail de cette personne ?")
@Key("confirmationDepublicationObs")
String confirmationDepublicationObs();
/**
* Translated "Accepter cette proposition".
*
* @return translated "Accepter cette proposition"
*/
@DefaultStringValue("Accepter cette proposition")
@Key("indicationValiderProposition")
String indicationValiderProposition();
/**
* Translated "Proposition acceptée".
*
* @return translated "Proposition acceptée"
*/
@DefaultStringValue("Proposition acceptée")
@Key("indicationPropositionValidee")
String indicationPropositionValidee();
/**
* Translated "Détermination proposée par".
*
* @return translated "Détermination proposée par"
*/
@DefaultStringValue("Détermination proposée par")
@Key("determinationProposeePar")
String determinationProposeePar();
/**
* Translated "Détermination originale par".
*
* @return translated "Détermination originale par"
*/
@DefaultStringValue("Détermination originale par")
@Key("determinationOriginalePar")
String determinationOriginalePar();
/**
* Translated "Attention : le taxon saisi n'est pas lié à un élément du référentiel. \nLa proposition pourra être votée mais pas acceptée par l'auteur de l'observation. \nAvez-vous selectionné le nom à partir de l'auto completion ?".
*
* @return translated "Attention : le taxon saisi n'est pas lié à un élément du référentiel. \nLa proposition pourra être votée mais pas acceptée par l'auteur de l'observation. \nAvez-vous selectionné le nom à partir de l'auto completion ?"
*/
@DefaultStringValue("Attention : le taxon saisi n'est pas lié à un élément du référentiel. \nLa proposition pourra être votée mais pas acceptée par l'auteur de l'observation. \nAvez-vous selectionné le nom à partir de l'auto completion ?")
@Key("attentionPropositionTaxon")
String attentionPropositionTaxon();
/**
* Translated "Indeterminée"
*
* @return translated "Indeterminée"
*/
@DefaultStringValue("Indeterminée")
@Key("indeterminee")
String indeterminee();
/**
* Translated ""1 nouveau vote sur une proposition""
*
* @return translated ""1 nouveau vote sur une proposition""
*/
@DefaultStringValue("1 nouveau vote sur une proposition")
@Key("nouveauVote")
String nouveauVote();
/**
* Translated "1 nouveau commentaire"
*
* @return translated "1 nouveau commentaire"
*/
@DefaultStringValue("1 nouveau commentaire")
@Key("nouveauCommentaire")
String nouveauCommentaire();
/**
* Translated "Nouvelle observation"
*
* @return translated "Nouvelle observation"
*/
@DefaultStringValue("Nouvelle observation")
@Key("nouvelleObservation")
String nouvelleObservation();
/**
* Translated "Vous avez commenté cette observation"
*
* @return translated "Vous avez commenté cette observation"
*/
@DefaultStringValue("Vous avez commenté cette observation")
@Key("nouveauCommentaireVousAObsAutre")
String nouveauCommentaireVousAObsAutre();
/**
* Translated "Un utilisateur a commenté votre observation"
*
* @return translated "Un utilisateur a commenté votre observation"
*/
@DefaultStringValue("Un utilisateur a commenté votre observation")
@Key("nouveauCommentaireAutreSurObsVous")
String nouveauCommentaireAutreSurObsVous();
/**
* Translated "Vous avez proposé un nom pour cette observation"
*
* @return translated "Vous avez proposé un nom pour cette observation"
*/
@DefaultStringValue("Vous avez proposé un nom pour cette observation")
@Key("nouvellePropositionVousAObsAutre")
String nouvellePropositionVousAObsAutre();
/**
* Translated "Un utilisateur a proposé un nom pour votre observation"
*
* @return translated "Un utilisateur a proposé un nom pour votre observation"
*/
@DefaultStringValue("Un utilisateur a proposé un nom pour votre observation")
@Key("nouvellePropositionAutreSurObsVous")
String nouvellePropositionAutreSurObsVous();
/**
* Translated "Vous avez voté pour une proposition"
*
* @return translated "Vous avez voté pour une proposition"
*/
@DefaultStringValue("Vous avez voté pour une proposition")
@Key("nouveauVoteVousAComAutre")
String nouveauVoteVousAComAutre();
/**
* Translated "Un utilisateur a voté pour votre proposition"
*
* @return translated "Un utilisateur a voté pour votre proposition"
*/
@DefaultStringValue("Un utilisateur a voté pour votre proposition")
@Key("nouveauVoteAutreSurComVous")
String nouveauVoteAutreSurComVous();
 
/**
* Translated "Vous avez validé une proposition"
*
* @return translated "Vous avez validé une proposition"
*/
@DefaultStringValue("Vous avez validé une proposition")
@Key("nouvelleValidationVousAPropAutre")
String nouvelleValidationVousAPropAutre();
 
/**
* Translated "Un utilisateur a validé votre proposition"
*
* @return translated "Un utilisateur a validé votre proposition"
*/
@DefaultStringValue("Un utilisateur a validé votre proposition")
@Key("nouvelleValidationAutreAPropVous")
String nouvelleValidationAutreAPropVous();
/**
* Translated "Un utilisateur à voté sur une proposition sur votre observation"
*
* @return translated "Un utilisateur à voté sur une proposition sur votre observation"
*/
@DefaultStringValue("Un utilisateur à voté sur une proposition sur votre observation")
@Key("nouveauVoteAutreSurComAutreObsVous")
String nouveauVoteAutreSurComAutreObsVous();
/**
* Translated "Un utilisateur a commenté votre proposition"
*
* @return translated "Un utilisateur a commenté votre proposition"
*/
@DefaultStringValue("Un utilisateur a commenté votre proposition")
@Key("nouvelleReponseAutreSurPropositionVous")
String nouvelleReponseAutreSurPropositionVous();
/**
* Translated "Un utilisateur a répondu à votre commentaire"
*
* @return translated "Un utilisateur a répondu à votre commentaire"
*/
@DefaultStringValue("Un utilisateur a répondu à votre commentaire")
@Key("nouvelleReponseAutreSurCommentaireVous")
String nouvelleReponseAutreSurCommentaireVous();
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/i18n/I18n.java
New file
0,0 → 1,18
package org.tela_botanica.del.client.i18n;
 
import com.google.gwt.core.client.GWT;
 
public class I18n {
public I18n() {
}
 
public static Vocabulary getVocabulary() {
return (Vocabulary) GWT.create(Vocabulary.class);
}
 
public static Messages getMessages() {
return (Messages) GWT.create(Messages.class);
}
 
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/i18n/Messages.properties
New file
0,0 → 1,15
rechercher_taxon=Rechercher le taxon {0}
 
#composant pagination
parmi_nb_pages = sur {0}
identificationRefus = Identification refusée
saisirLogin = Vous devez saisir un login et un mot de passe
 
#formulaire proposition determination
propositionDejaEffectuee = Le taxon {0} a deja été proposé. Vous pouvez voter pour cette determination si vous êtes d accord avec cette proposition.
etVotesAnonymes = Et {0} votes anonymes
greetings = salut
 
#évenements du flux personnel
nouveauxVotes = {0} nouveaux votes
nouveauxCommentaires = {0} nouveaux commentaires
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/i18n/Vocabulary.properties
New file
0,0 → 1,269
###########################################################################################
# ATTENTION : le fichier doit être en UTF-8 ! #
# Pour la nomenclature, nommer comme en JAVA puisque ça devient des méthodes : #
# Ex : #
# monLabelPerso = Ma définition #
###########################################################################################
 
# COMMUN
lienAppliSaisie = http://www.tela-botanica.org/widget:cel:saisie?tag-img=aDeterminer&tag-obs=aDeterminer&titre=&titre=Ajouter%20une%20photo%20%26agrave%3B%20d%26eacute%3Bterminer
lienAppliSaisieProjetUrl = http://www.tela-botanica.org/widget:cel:saisie?tag-img={projet}&tag-obs={projet}
oui = oui
non = non
accepter = Valider
annuler = Annuler
chargement = Chargement
ok = ok
fermer = Fermer
vider = Vider
moyenne = Moyenne
nombreVotes = Nb votes
observateur = Observateur
nomRetenu = Nom retenu
date = Date
famille = Famille
metadonneeFamille = Famille
localite = Localite
nom = Nom
auteur = Publié par
protocole = Protocole
protocoleDefaut = Protocole par défaut
labelProtocole = Choisir un protocole
vous = Vous
contributeur = Contributeur
commentaire = Commentaire
commentaires = Commentaires
autre = Autre
nomCommun = Nom commun
lieuDit = Lieu-dit
station = Station
milieu = Milieu
dateReleve = Le
observeLe = Observée le
lieuDuReleve = Lieu du relevé
dateTransmission = Transmis le
motdepasse = Mot de passe :
login = Courriel :
texteConnexion = texte de connexion
titreSeConnecter = Identifiez-vous
titreEstIdentifie = Bienvenue
seDeconnecter = Se déconnecter
aucunResultat = Aucun resultat trouvé
par = par
publiee = Publiée le
supprimerVote = Supprimer votre vote
votePrisEnCompte = Vote pris en compte
voteModifie = Vote modifié
voteSupprime = Vote supprimé
ajouterObservation = Proposez une observation à déterminer
ajouterImage = Ajouter une image
legendeAjouterObservation = Soumettez au réseau une observation à déterminer \n Si vous avez déjà un carnet en ligne, ajoutez votre observation dans le projet "aDeterminer"
legendeAjouterImage = Ajoutez une image pour participer à ce projet
voirCommentaires = Voir tous les commentaires
titrePlateformeDetermination = Synthèse de l'observation et des images associées
imageNumero = Image n°
aideLiaisonMotCle = Aide liaison mot-clés
 
# Recherche image
rechercherImage = Rechercher et voter
entrerMotClef = Recherchez par espèce, genre, famille, numéro ou nom de département, commune, auteur ou mot-clé.
rechercherTaxon = Rechercher le taxon
 
# Trie
tri = Tri :
triParDatePubli = Date de publication
triParDatePubliTooltip = Trier par date de publication
triParDatePubliAscendant = Tri actuel par date de publication de la plus ancienne à la plus récente
triParDatePubliDescendant = Tri actuel par date de publication de la plus récente à la plus ancienne
 
triParDateObs = Date d'observation
triParDateObsTooltip = Trier par date d'observation
triParDateObsAscendant = Tri actuel par date d'observation de la plus ancienne à la plus récente
triParDateObsDescendant = Tri actuel par date d'observation de la plus récente à la plus ancienne
 
triParMoyenneArithmetique = Note moyenne
triParMoyenneArithmetiqueTooltip = Trier par moyenne arithmétique des notes
triParMoyenneArithmetiqueAscendant = Tri actuel par note moyenne arithmétique des votes du minimum au maximum
triParMoyenneArithmetiqueDescendant = Tri actuel par note moyenne arithmétique des votes du maximum au minimum
 
triParNbPoints = Points
triParNbPointsTooltip = Trier par nombre de points
triParNbPointsAscendant = Tri actuel par nombre de points croissant
triParNbPointsDescendant = Tri actuel par nombre de points décroissant
 
triParNbTags = Tags
triParNbTagsTooltip = Trier par nombre de tags
triParNbTagsAscendant = Tri actuel par nombre de tags croissant
triParNbTagsDescendant = Tri actuel par nombre de tags décroissant
 
triParNbCommentaires = Nombre de commentaires
triParNbCommentairesTooltip = Trier par nombre de commentaires
triParNbCommentairesAscendant = Tri actuel par nombre de commentaires croissant
triParNbCommentairesDescendant = Tri actuel par nombre de commentaires décroissant
 
# Vue résultat images
introRechercheImages = Cette galerie vous permet de rechercher les illustrations des membres du réseau issues du Carnet en ligne... et de voter pour la qualité des images selon un protocole défini.
indicationActionClicImage = Cliquez sur l'image pour l'agrandir ou sur le bandeau contenant le nom pour accéder à la fiche de l'observation
voirMetadonnees = Voir la date, le lieu et l'auteur de l'image
voirMotsCles = Voir et modifier les mots clés associés à l'image
motsCles = Mots Clés
aideSaisieMotCle = Saisissez des mots clés pour décrire l'image
aideLiaisonMotCle = Cliquez pour pour lier ou délier ce mot clé à l'image
indiceSupprimerMotCle = Supprimer ce mot clé
accesAide = Aide
lienAidePictoflora = http://www.tela-botanica.org/page:liste_projets?id_projet=112&act=wikini
lienAideIdentiplante = http://www.tela-botanica.org/page:liste_projets?id_projet=95&act=wikini
signalerIdentification = Signaler une mauvaise identification
supprimerImage = Supprimer l'image définitivement
confirmationSuppressionImg = Êtes-vous certain de vouloir supprimer l'image DÉFINITIVEMENT ? L'image est-elle réellement inutilisable ? Avez-vous contacté son auteur au préalable ?
 
# Vue recherche observation
rechercherObservation = Identifier une plante
introRechercheObservations = Cet espace vous permet d'échanger sur la détermination d'espèces. <br />Vous ne parvenez pas à déterminer une plante ? Soumettez-la aux membres du réseau. <br /> Vous avez relevé des erreurs dans les images soumises par le réseau ? Postez un commentaire ou proposez une nouvelle détermination.
voirFicheIndividu = Voir la fiche
voirDetailVotes = Voir le détail des utilisateurs qui ont voté
voirDetailCommentaires = Voir les commentaires liés à cette proposition
 
ongletTous = Tout
ongletADeterminer = A déterminer
ongletAConfirmer = A confirmer
ongletVerifiees = Vérifiées
 
# Evènements vue recherche observation, flux personnel
nouveauVote = 1 nouveau vote sur une proposition
nouveauCommentaire = 1 nouveau commentaire
nouvelleObservation = Vous avez publié cette observation
 
nouveauCommentaireVousAObsAutre = Vous avez commenté cette observation
nouveauCommentaireAutreSurObsVous = Un utilisateur a commenté votre observation
nouvellePropositionVousAObsAutre = Vous avez proposé un nom pour cette observation
nouvellePropositionAutreSurObsVous = Un utilisateur a proposé un nom pour votre observation
nouveauVoteVousAComAutre = Vous avez voté pour une proposition
nouveauVoteAutreSurComVous = Un utilisateur a voté pour votre proposition
nouvelleValidationVousAPropAutre = Vous avez validé une proposition
nouvelleValidationAutreAPropVous = Un utilisateur a validé votre proposition
nouveauVoteAutreSurComAutreObsVous = Un utilisateur à voté sur une proposition sur votre observation
nouvelleReponseAutreSurPropositionVous = Un utilisateur a commenté votre proposition
nouvelleReponseAutreSurCommentaireVous = Un utilisateur a répondu à votre commentaire
 
 
# Vue determination
proposerSaDetermination = Proposer une détermination
infoProposerDetermination = Pour proposer une détermination, remplissez les champs ci-dessous et cliquez sur le bouton Proposer !
infoProposerCommentaire = Pour proposer un commentaire, remplissez les champs ci-dessous et cliquez sur le bouton Valider !
boutonProposer = Valider
infoVous = Vos nom et prénom
fiabilite = Fiabilité
infoFiabilite = Indiquez votre niveau de certitude vis-à-vis de votre proposition.
autresInformations = Autres informations
choisirUnTaxon = Proposer un nom de plante
infoTaxon = Tapez les premières lettres d'un nom latin pour voir apparaître des propositions.
autreProposition = Autre Proposition
confianceSimpleSuggestion = Simple Suggestion
confianceProbable = Probable
confianceSurCent = Sûr à 100%
comparer = Comparer cette image
infoComparer = Saisissez un nom de plante à comparer avec l'image
lesPropositions = Propositions
infoPropositions = D'autres utilisateurs ont laissé une détermination
titreDetermination = Détermination / confirmation
metadonnees = Métadonnées
ajouterCommentaire = Ajouter un commentaire
determinationPlusProbable = Détermination la plus probable :
proposePar = proposé par
utilisateurAnonyme = utilisateur anonyme
EtesVousDaccord = Etes-vous d'accord ?
JeSuisDaccord = Je suis d'accord
JeNeSuisPasDaccord = Je ne suis pas d'accord
confirmationSuppressionCommentaire = Êtes vous sur de vouloir supprimer ce commentaire ?
confirmationSuppressionDetermination = Êtes vous sur de vouloir supprimer cette détermination ?
confirmationValidationDetermination = Êtes vous sur de vouloir modifier votre observation pour le nom indiqué par cette proposition ?
depublierObs = Dépublier
confirmationDepublicationObs = Avez-vous contacté l'auteur de l'observation ? Êtes-vous vraiment certain de vouloir dépublier le travail de cette personne ?
indicationValiderProposition = Accepter cette proposition
indicationPropositionValidee = Proposition acceptée
determinationProposeePar = Détermination proposée par
determinationOriginalePar = Détermination originale par
attentionPropositionTaxon = Attention : le taxon saisi n'est pas lié à un élément du référentiel. \nLa proposition pourra être votée mais pas acceptée par l'auteur de l'observation. \nAvez-vous selectionné le nom à partir de l'auto completion ?\n Cliquez sur OK pour valider malgré tout, ou sur Annuler pour corriger votre proposition.
indeterminee = Indeterminée
 
# Vue comparaison
dateObservation = Date de la prise de vue
taxonADeterminer = Taxon à déterminer
imageEflore = Photos du Carnet en Ligne
metadonneesPhoto = Meta-donnees de la photo
motsClefs = Mots-clés
validePar = Validé par
dateValidation = Date de dernière validation
publieLe = Publié le
 
# Vue votes protocoles
votes = Moyenne des votes
votesMoyennePrecise = Moyenne pondérée des votes :
infoVotes = Voici la moyenne des votes en fonction du protocole choisi :
protocoleEsthetisme = Esthétisme
protocoleIdentificationAuto = Identification automatique
monVote = Mon vote
nbVotes = vote
nbPoints = pt
identifiezVousPourVoter = Identifiez-vous <br /> pour voter
votez = Votez
 
# Vue detail de votes détermination
aucunVoteEffectue = Aucun vote n'a été effectué sur cette détermination, soyez le premier a voter !
aucunCommentaireEffectue = Aucun commentaire n'a été effectué sur cette détermination
valeurVote = Vote
 
# Composant recherche simple
rechercher = Rechercher
rechercheLibre = Recherche libre
 
# Composant recherche avancée
rechercheAvancee = Recherche avancée
contientMots = Contient les mots
departement = Département (numéro ou nom)
taxon = Espèce
genre = Genre
mot_clef = Mot-clé
date = Date
formatDate = (jj/mm/aaaa ou aaaa)
pays = Pays
commune = Commune
famille = Famille (Latin)
pnInscritsSeulement = Masquer les observations smartphone anonymes
pnISCourt = Obs mobiles anonymes
tag = Tag
tagDel = Tag pictoflora
tagCel = Tag cel
referentiel = Référentiel
referentielTous = Tous les référentiels
referentielBdtfx = France métropolitaine (BDTFX)
referentielBdtxa = Antilles françaises (BDTXA)
referentielBdtre = la Réunion (BDTRE)
referentielAublet = Guyane (AUBLET2)
referentielFlorical = Nouvelle-Calédonie (FLORICAL)
referentielIsfan = Afrique du Nord (ISFAN)
referentielApd = Afrique tropicale (APD)
referentielLbf = Liban (LEF)
 
# Composant pagination
afficher = Afficher
elements_par_page = éléments par page
resultats = résultats
page = page
 
# Utilisateur
nom = Nom
prenom = Prénom
courriel = Courriel
anonyme = Anonyme
identifie = Identifié
 
# Préférences utilisateur
messageTemporaireMails = Identiplante permettra bientôt de recevoir des courriels journaliers récapitulant les propositions, commentaires et observations nouvellement ajoutés. En cochant ces cases vous avez la possibilité de recevoir ces courriels dès qu'il seront mis en service (vous pouvez changer cela à tout moment en revenant sur cette interface)
recevoirMailsToutesObs = Recevoir le mail récapitulant les nouvelles observations proposées à la détermination (1 fois par jour)
revevoirMailComProp = Recevoir un email (1 fois par jour) récapitulant :
comEtPropSurObs = les commentaires et propositions faits sur mes observations
comSurComEtProp = les commentaires en réponse à mes commentaires et propositions
sauvegarder = Sauvegarder
preferences = Préférences
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/i18n/VocabularyConsumer.java
New file
0,0 → 1,18
package org.tela_botanica.del.client.i18n;
 
import com.google.gwt.core.client.GWT;
 
public class VocabularyConsumer {
public VocabularyConsumer() {
}
 
public static Vocabulary getVocabulary() {
return (Vocabulary) GWT.create(Vocabulary.class);
}
 
public static Messages getMessages() {
return (Messages) GWT.create(Messages.class);
}
 
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/i18n/LocalizableResource.properties
New file
0,0 → 1,5
# Generated from org.tela_botanica.del.client.composants.formulaires.identification.FormulaireIdentificationVueBinderImplGenMessages
# for locale default
 
# Description: Greeting
greetings=Hello, worldTRTRTR.
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/i18n/Messages_en.properties
--- org/tela_botanica/del/client/i18n/Vocabulary_en.properties (revision 0)
+++ org/tela_botanica/del/client/i18n/Vocabulary_en.properties (revision 2171)
@@ -0,0 +1,3 @@
+#sample constant property to be translated in language specific versions of this property file
+
+
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/navigation/evenement/voteDetermination/EvenementVoteDetermination.java
New file
0,0 → 1,33
package org.tela_botanica.del.client.navigation.evenement.voteDetermination;
 
import org.tela_botanica.del.client.modeles.VoteDetermination;
 
import com.google.gwt.event.shared.GwtEvent;
 
public class EvenementVoteDetermination extends GwtEvent<GestionnaireEvenementVoteDetermination> {
public static com.google.gwt.event.shared.GwtEvent.Type<GestionnaireEvenementVoteDetermination> TYPE = new com.google.gwt.event.shared.GwtEvent.Type<GestionnaireEvenementVoteDetermination>();
private VoteDetermination voteDetermination;
 
public EvenementVoteDetermination(VoteDetermination voteDetermination) {
this.voteDetermination = voteDetermination;
}
 
@Override
protected void dispatch(GestionnaireEvenementVoteDetermination handler) {
handler.onVoteDetermination(this.getVoteDetermination());
}
 
@Override
public com.google.gwt.event.shared.GwtEvent.Type<GestionnaireEvenementVoteDetermination> getAssociatedType() {
return TYPE;
}
 
public VoteDetermination getVoteDetermination() {
return voteDetermination;
}
 
public void setVoteDetermination(VoteDetermination voteDetermination) {
this.voteDetermination = voteDetermination;
}
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/navigation/evenement/voteDetermination/GestionnaireEvenementVoteDetermination.java
New file
0,0 → 1,9
package org.tela_botanica.del.client.navigation.evenement.voteDetermination;
 
import org.tela_botanica.del.client.modeles.VoteDetermination;
 
import com.google.gwt.event.shared.EventHandler;
 
public interface GestionnaireEvenementVoteDetermination extends EventHandler {
public void onVoteDetermination(VoteDetermination event);
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/navigation/evenement/changementprotocole/EvenementChangementProtocole.java
New file
0,0 → 1,34
package org.tela_botanica.del.client.navigation.evenement.changementprotocole;
 
import org.tela_botanica.del.client.modeles.Protocole;
 
import com.google.gwt.event.shared.GwtEvent;
 
public class EvenementChangementProtocole extends GwtEvent<GestionnaireEvenementChangementProtocole> {
 
public static com.google.gwt.event.shared.GwtEvent.Type<GestionnaireEvenementChangementProtocole> TYPE = new com.google.gwt.event.shared.GwtEvent.Type<GestionnaireEvenementChangementProtocole>();
private Protocole protocole;
 
public EvenementChangementProtocole(Protocole protocole) {
this.protocole = protocole;
}
 
@Override
protected void dispatch(GestionnaireEvenementChangementProtocole handler) {
handler.onChangementProtocole(this);
}
 
@Override
public com.google.gwt.event.shared.GwtEvent.Type<GestionnaireEvenementChangementProtocole> getAssociatedType() {
return TYPE;
}
 
public Protocole getProtocole() {
return protocole;
}
 
public void setProtocole(Protocole protocole) {
this.protocole = protocole;
}
 
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/navigation/evenement/changementprotocole/GestionnaireEvenementChangementProtocole.java
New file
0,0 → 1,8
package org.tela_botanica.del.client.navigation.evenement.changementprotocole;
 
 
import com.google.gwt.event.shared.EventHandler;
 
public interface GestionnaireEvenementChangementProtocole extends EventHandler {
public void onChangementProtocole(EvenementChangementProtocole event);
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/navigation/evenement/activiteutilisateur/EvenementActiviteUtilisateur.java
New file
0,0 → 1,30
package org.tela_botanica.del.client.navigation.evenement.activiteutilisateur;
 
import org.tela_botanica.del.client.modeles.ActiviteUtilisateur;
import org.tela_botanica.del.client.modeles.Commentaire;
import com.google.gwt.event.shared.GwtEvent;
 
public class EvenementActiviteUtilisateur extends GwtEvent<GestionnaireEvenementActiviteUtilisateur> {
 
public static com.google.gwt.event.shared.GwtEvent.Type<GestionnaireEvenementActiviteUtilisateur> TYPE = new com.google.gwt.event.shared.GwtEvent.Type<GestionnaireEvenementActiviteUtilisateur>();
private ActiviteUtilisateur activiteUtilisateur;
 
public EvenementActiviteUtilisateur(ActiviteUtilisateur activiteUtilisateur) {
this.activiteUtilisateur = activiteUtilisateur;
}
 
@Override
protected void dispatch(GestionnaireEvenementActiviteUtilisateur handler) {
handler.onActiviteUtilisateur(this);
}
 
@Override
public com.google.gwt.event.shared.GwtEvent.Type<GestionnaireEvenementActiviteUtilisateur> getAssociatedType() {
return TYPE;
}
 
public ActiviteUtilisateur getActiviteUtilisateur() {
return activiteUtilisateur;
}
 
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/navigation/evenement/activiteutilisateur/GestionnaireEvenementActiviteUtilisateur.java
New file
0,0 → 1,8
package org.tela_botanica.del.client.navigation.evenement.activiteutilisateur;
 
 
import com.google.gwt.event.shared.EventHandler;
 
public interface GestionnaireEvenementActiviteUtilisateur extends EventHandler {
public void onActiviteUtilisateur(EvenementActiviteUtilisateur event);
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/navigation/evenement/rechercheobservation/GestionnaireEvenementRechercheObservation.java
New file
0,0 → 1,8
package org.tela_botanica.del.client.navigation.evenement.rechercheobservation;
 
 
import com.google.gwt.event.shared.EventHandler;
 
public interface GestionnaireEvenementRechercheObservation extends EventHandler {
public void onRechercheObservation(EvenementRechercheObservation event);
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/navigation/evenement/rechercheobservation/EvenementRechercheObservation.java
New file
0,0 → 1,21
package org.tela_botanica.del.client.navigation.evenement.rechercheobservation;
 
import com.google.gwt.event.shared.GwtEvent;
 
public class EvenementRechercheObservation extends GwtEvent<GestionnaireEvenementRechercheObservation> {
 
public static Type<GestionnaireEvenementRechercheObservation> TYPE = new Type<GestionnaireEvenementRechercheObservation>();
public EvenementRechercheObservation() {}
 
@Override
protected void dispatch(GestionnaireEvenementRechercheObservation handler) {
handler.onRechercheObservation(this);
}
 
@Override
public Type<GestionnaireEvenementRechercheObservation> getAssociatedType() {
return TYPE;
}
 
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/navigation/evenement/ajoutdetermination/GestionnaireEvenementAjoutDetermination.java
New file
0,0 → 1,8
package org.tela_botanica.del.client.navigation.evenement.ajoutdetermination;
 
 
import com.google.gwt.event.shared.EventHandler;
 
public interface GestionnaireEvenementAjoutDetermination extends EventHandler {
public void onAjoutDetermination(EvenementAjoutDetermination event);
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/navigation/evenement/ajoutdetermination/EvenementAjoutDetermination.java
New file
0,0 → 1,34
package org.tela_botanica.del.client.navigation.evenement.ajoutdetermination;
 
import org.tela_botanica.del.client.modeles.PropositionDetermination;
 
import com.google.gwt.event.shared.GwtEvent;
 
public class EvenementAjoutDetermination extends GwtEvent<GestionnaireEvenementAjoutDetermination> {
 
public static com.google.gwt.event.shared.GwtEvent.Type<GestionnaireEvenementAjoutDetermination> TYPE = new com.google.gwt.event.shared.GwtEvent.Type<GestionnaireEvenementAjoutDetermination>();
private PropositionDetermination propositionDetermination;
 
public EvenementAjoutDetermination(PropositionDetermination propositionDetermination) {
this.propositionDetermination = propositionDetermination;
}
 
@Override
protected void dispatch(GestionnaireEvenementAjoutDetermination handler) {
handler.onAjoutDetermination(this);
}
 
@Override
public com.google.gwt.event.shared.GwtEvent.Type<GestionnaireEvenementAjoutDetermination> getAssociatedType() {
return TYPE;
}
 
public PropositionDetermination getPropositionDetermination() {
return propositionDetermination;
}
 
public void setPropositionDetermination(PropositionDetermination propositionDetermination) {
this.propositionDetermination = propositionDetermination;
}
 
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/navigation/evenement/validationobservation/EvenementValidation.java
New file
0,0 → 1,30
package org.tela_botanica.del.client.navigation.evenement.validationobservation;
 
import org.tela_botanica.del.client.modeles.Observation;
 
import com.google.gwt.event.shared.GwtEvent;
 
public class EvenementValidation extends GwtEvent<GestionnaireEvenementValidation> {
 
public static com.google.gwt.event.shared.GwtEvent.Type<GestionnaireEvenementValidation> TYPE = new com.google.gwt.event.shared.GwtEvent.Type<GestionnaireEvenementValidation>();
private final Observation observation;
 
public EvenementValidation(Observation observation) {
this.observation = observation;
}
@Override
protected void dispatch(GestionnaireEvenementValidation handler) {
handler.onValidationObservation(this);
}
 
@Override
public com.google.gwt.event.shared.GwtEvent.Type<GestionnaireEvenementValidation> getAssociatedType() {
return TYPE;
}
 
public Observation getObservation() {
return observation;
}
 
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/navigation/evenement/validationobservation/GestionnaireEvenementValidation.java
New file
0,0 → 1,8
package org.tela_botanica.del.client.navigation.evenement.validationobservation;
 
 
import com.google.gwt.event.shared.EventHandler;
 
public interface GestionnaireEvenementValidation extends EventHandler {
public void onValidationObservation(EvenementValidation event);
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/navigation/evenement/ajoutcommentaire/EvenementAjoutCommentaire.java
New file
0,0 → 1,33
package org.tela_botanica.del.client.navigation.evenement.ajoutcommentaire;
 
import org.tela_botanica.del.client.modeles.Commentaire;
import com.google.gwt.event.shared.GwtEvent;
 
public class EvenementAjoutCommentaire extends GwtEvent<GestionnaireEvenementAjoutCommentaire> {
 
public static com.google.gwt.event.shared.GwtEvent.Type<GestionnaireEvenementAjoutCommentaire> TYPE = new com.google.gwt.event.shared.GwtEvent.Type<GestionnaireEvenementAjoutCommentaire>();
private Commentaire commentaire;
 
public EvenementAjoutCommentaire(Commentaire commentaire) {
this.commentaire = commentaire;
}
 
@Override
protected void dispatch(GestionnaireEvenementAjoutCommentaire handler) {
handler.onAjoutCommentaire(this);
}
 
@Override
public com.google.gwt.event.shared.GwtEvent.Type<GestionnaireEvenementAjoutCommentaire> getAssociatedType() {
return TYPE;
}
 
public Commentaire getCommentaire() {
return commentaire;
}
 
public void setPropositionDetermination(Commentaire commentaire) {
this.commentaire = commentaire;
}
 
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/navigation/evenement/ajoutcommentaire/GestionnaireEvenementAjoutCommentaire.java
New file
0,0 → 1,8
package org.tela_botanica.del.client.navigation.evenement.ajoutcommentaire;
 
 
import com.google.gwt.event.shared.EventHandler;
 
public interface GestionnaireEvenementAjoutCommentaire extends EventHandler {
public void onAjoutCommentaire(EvenementAjoutCommentaire event);
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/navigation/evenement/comparaisoneflore/GestionnaireEvenementComparaisonEflore.java
New file
0,0 → 1,8
package org.tela_botanica.del.client.navigation.evenement.comparaisoneflore;
 
 
import com.google.gwt.event.shared.EventHandler;
 
public interface GestionnaireEvenementComparaisonEflore extends EventHandler {
public void onComparaisonEflore(EvenementComparaisonEflore event);
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/navigation/evenement/comparaisoneflore/EvenementComparaisonEflore.java
New file
0,0 → 1,32
package org.tela_botanica.del.client.navigation.evenement.comparaisoneflore;
 
import com.google.gwt.event.shared.GwtEvent;
 
public class EvenementComparaisonEflore extends GwtEvent<GestionnaireEvenementComparaisonEflore> {
 
public static com.google.gwt.event.shared.GwtEvent.Type<GestionnaireEvenementComparaisonEflore> TYPE = new com.google.gwt.event.shared.GwtEvent.Type<GestionnaireEvenementComparaisonEflore>();
private String taxonDemande;
 
public EvenementComparaisonEflore(String taxonDemande) {
this.taxonDemande = taxonDemande;
}
 
@Override
protected void dispatch(GestionnaireEvenementComparaisonEflore handler) {
handler.onComparaisonEflore(this);
}
 
@Override
public com.google.gwt.event.shared.GwtEvent.Type<GestionnaireEvenementComparaisonEflore> getAssociatedType() {
return TYPE;
}
 
public String getTaxonDemande() {
return taxonDemande;
}
 
public void setTaxonDemande(String taxonDemande) {
this.taxonDemande = taxonDemande;
}
 
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/navigation/evenement/BusEvenementiel.java
New file
0,0 → 1,92
package org.tela_botanica.del.client.navigation.evenement;
 
import org.tela_botanica.del.client.cache.CacheClient;
import org.tela_botanica.del.client.gestionhistorique.ConstantesNavigation;
import org.tela_botanica.del.client.modeles.Observation;
import org.tela_botanica.del.client.navigation.evenement.comparaisoneflore.EvenementComparaisonEflore;
import org.tela_botanica.del.client.navigation.evenement.comparaisoneflore.GestionnaireEvenementComparaisonEflore;
import org.tela_botanica.del.client.navigation.evenement.detailsimage.EvenementRechercheImage;
import org.tela_botanica.del.client.navigation.evenement.detailsimage.GestionnaireEvenementRechercheImage;
import org.tela_botanica.del.client.navigation.evenement.rechercheobservation.EvenementRechercheObservation;
import org.tela_botanica.del.client.navigation.evenement.rechercheobservation.GestionnaireEvenementRechercheObservation;
import org.tela_botanica.del.client.navigation.evenement.validationobservation.EvenementValidation;
import org.tela_botanica.del.client.navigation.evenement.validationobservation.GestionnaireEvenementValidation;
import org.tela_botanica.del.client.navigation.evenement.validationobservationpictoflora.EvenementValidationPictoflora;
import org.tela_botanica.del.client.navigation.evenement.validationobservationpictoflora.GestionnaireEvenementValidationPictoflora;
 
import com.google.gwt.event.shared.HandlerManager;
import com.google.gwt.user.client.History;
 
public class BusEvenementiel extends HandlerManager {
 
private static BusEvenementiel instance;
private CacheClient cache;
private BusEvenementiel() {
super(null);
instance = this;
creerHandler();
this.cache = CacheClient.getInstance();
}
 
public static BusEvenementiel getInstance() {
if (instance == null) {
instance = new BusEvenementiel();
}
return instance;
}
 
private void creerHandler() {
addHandler(EvenementValidation.TYPE, new GestionnaireEvenementValidation() {
@Override
public void onValidationObservation(EvenementValidation event) {
doValidationObservation(event.getObservation());
}
});
addHandler(EvenementValidationPictoflora.TYPE, new GestionnaireEvenementValidationPictoflora() {
@Override
public void onValidationObservation(EvenementValidationPictoflora event) {
doValidationObservationPictoflora(event.getObservation());
}
});
addHandler(EvenementComparaisonEflore.TYPE, new GestionnaireEvenementComparaisonEflore() {
@Override
public void onComparaisonEflore(EvenementComparaisonEflore event) {
doComparaisonAvecEflore(event.getTaxonDemande());
}
});
 
addHandler(EvenementRechercheImage.TYPE, new GestionnaireEvenementRechercheImage() {
@Override
public void onRechercheImage(EvenementRechercheImage event) {
History.newItem("", true);
cache.setPageCourante("");
}
});
 
addHandler(EvenementRechercheObservation.TYPE, new GestionnaireEvenementRechercheObservation() {
@Override
public void onRechercheObservation(EvenementRechercheObservation event) {
History.newItem("", true);
cache.setPageCourante("");
}
});
 
}
 
private void doValidationObservation(Observation observation) {
CacheClient.getInstance().setObservationCourante(observation);
History.newItem(ConstantesNavigation.PAGE_DETAIL_OBS + "~" + observation.getId(), true);
}
private void doValidationObservationPictoflora(Observation observation) {
CacheClient.getInstance().setObservationCourante(observation);
History.newItem(ConstantesNavigation.PAGE_DETAIL_IMG + "~" + observation.getId(), true);
}
 
private void doComparaisonAvecEflore(String taxon) {
History.newItem(ConstantesNavigation.PAGE_COMPARAISON_EFLORE, true);
}
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/navigation/evenement/suppressiondetermination/EvenementSuppressionDetermination.java
New file
0,0 → 1,34
package org.tela_botanica.del.client.navigation.evenement.suppressiondetermination;
 
import org.tela_botanica.del.client.modeles.PropositionDetermination;
 
import com.google.gwt.event.shared.GwtEvent;
 
public class EvenementSuppressionDetermination extends GwtEvent<GestionnaireEvenementSuppressionDetermination> {
 
public static com.google.gwt.event.shared.GwtEvent.Type<GestionnaireEvenementSuppressionDetermination> TYPE = new com.google.gwt.event.shared.GwtEvent.Type<GestionnaireEvenementSuppressionDetermination>();
private PropositionDetermination propositionDetermination;
 
public EvenementSuppressionDetermination(PropositionDetermination propositionDetermination) {
this.propositionDetermination = propositionDetermination;
}
 
@Override
protected void dispatch(GestionnaireEvenementSuppressionDetermination handler) {
handler.onSuppressionDetermination(this);
}
 
@Override
public com.google.gwt.event.shared.GwtEvent.Type<GestionnaireEvenementSuppressionDetermination> getAssociatedType() {
return TYPE;
}
 
public PropositionDetermination getPropositionDetermination() {
return propositionDetermination;
}
 
public void setPropositionDetermination(PropositionDetermination propositionDetermination) {
this.propositionDetermination = propositionDetermination;
}
 
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/navigation/evenement/suppressiondetermination/GestionnaireEvenementSuppressionDetermination.java
New file
0,0 → 1,8
package org.tela_botanica.del.client.navigation.evenement.suppressiondetermination;
 
 
import com.google.gwt.event.shared.EventHandler;
 
public interface GestionnaireEvenementSuppressionDetermination extends EventHandler {
public void onSuppressionDetermination(EvenementSuppressionDetermination event);
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/navigation/evenement/suppressioncommentaire/EvenementSuppressionCommentaire.java
New file
0,0 → 1,33
package org.tela_botanica.del.client.navigation.evenement.suppressioncommentaire;
 
import org.tela_botanica.del.client.modeles.Commentaire;
import com.google.gwt.event.shared.GwtEvent;
 
public class EvenementSuppressionCommentaire extends GwtEvent<GestionnaireEvenementSuppressionCommentaire> {
 
public static com.google.gwt.event.shared.GwtEvent.Type<GestionnaireEvenementSuppressionCommentaire> TYPE = new com.google.gwt.event.shared.GwtEvent.Type<GestionnaireEvenementSuppressionCommentaire>();
private Commentaire commentaire;
 
public EvenementSuppressionCommentaire(Commentaire commentaire) {
this.commentaire = commentaire;
}
 
@Override
protected void dispatch(GestionnaireEvenementSuppressionCommentaire handler) {
handler.onSuppressionCommentaire(this);
}
 
@Override
public com.google.gwt.event.shared.GwtEvent.Type<GestionnaireEvenementSuppressionCommentaire> getAssociatedType() {
return TYPE;
}
 
public Commentaire getCommentaire() {
return commentaire;
}
 
public void setPropositionDetermination(Commentaire commentaire) {
this.commentaire = commentaire;
}
 
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/navigation/evenement/suppressioncommentaire/GestionnaireEvenementSuppressionCommentaire.java
New file
0,0 → 1,8
package org.tela_botanica.del.client.navigation.evenement.suppressioncommentaire;
 
 
import com.google.gwt.event.shared.EventHandler;
 
public interface GestionnaireEvenementSuppressionCommentaire extends EventHandler {
public void onSuppressionCommentaire(EvenementSuppressionCommentaire event);
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/navigation/evenement/depublierObs/EvenementDepublierObs.java
New file
0,0 → 1,27
package org.tela_botanica.del.client.navigation.evenement.depublierObs;
 
import org.tela_botanica.del.client.navigation.evenement.depublierObs.GestionnaireEvenementDepublierObs;
import com.google.gwt.event.shared.GwtEvent;
 
public class EvenementDepublierObs extends GwtEvent<GestionnaireEvenementDepublierObs>{
public static com.google.gwt.event.shared.GwtEvent.Type<GestionnaireEvenementDepublierObs> TYPE = new com.google.gwt.event.shared.GwtEvent.Type<GestionnaireEvenementDepublierObs>();
private String idObs;
 
public EvenementDepublierObs(String idObs) {
this.idObs = idObs;
}
 
@Override
protected void dispatch(GestionnaireEvenementDepublierObs handler) {
handler.onDepublicationObs(this);
}
 
public String getIdObs() {
return idObs;
}
 
@Override
public com.google.gwt.event.shared.GwtEvent.Type<GestionnaireEvenementDepublierObs> getAssociatedType() {
return TYPE;
}
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/navigation/evenement/depublierObs/GestionnaireEvenementDepublierObs.java
New file
0,0 → 1,7
package org.tela_botanica.del.client.navigation.evenement.depublierObs;
 
import com.google.gwt.event.shared.EventHandler;
 
public interface GestionnaireEvenementDepublierObs extends EventHandler {
public void onDepublicationObs(EvenementDepublierObs event);
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/navigation/evenement/supressionmotcleimage/EvenementSuppressionMotCleImage.java
New file
0,0 → 1,45
package org.tela_botanica.del.client.navigation.evenement.supressionmotcleimage;
 
import java.util.ArrayList;
import java.util.List;
 
import com.google.gwt.event.shared.GwtEvent;
 
public class EvenementSuppressionMotCleImage extends GwtEvent<GestionnaireEvenementSuppressionMotCleImage> {
 
public static com.google.gwt.event.shared.GwtEvent.Type<GestionnaireEvenementSuppressionMotCleImage> TYPE = new com.google.gwt.event.shared.GwtEvent.Type<GestionnaireEvenementSuppressionMotCleImage>();
private String idImage;
private List<String> motsCles;
 
public EvenementSuppressionMotCleImage(String idImage, String motCle) {
this.idImage = idImage;
if(motCle.indexOf(",") != -1) {
String[] motsClesTab = motCle.split(",");
motsCles = new ArrayList<String>(motsClesTab.length);
for (int i = 0; i < motsClesTab.length; i++) {
motsCles.add(motsClesTab[i]);
}
} else {
motsCles = new ArrayList<String>(1);
motsCles.add(motCle);
}
}
 
@Override
protected void dispatch(GestionnaireEvenementSuppressionMotCleImage handler) {
handler.onSuppressionMotCleImage(this);
}
 
public String getIdImage() {
return idImage;
}
public List<String> getMotsCles() {
return motsCles;
}
 
@Override
public com.google.gwt.event.shared.GwtEvent.Type<GestionnaireEvenementSuppressionMotCleImage> getAssociatedType() {
return TYPE;
}
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/navigation/evenement/supressionmotcleimage/GestionnaireEvenementSuppressionMotCleImage.java
New file
0,0 → 1,7
package org.tela_botanica.del.client.navigation.evenement.supressionmotcleimage;
 
import com.google.gwt.event.shared.EventHandler;
 
public interface GestionnaireEvenementSuppressionMotCleImage extends EventHandler {
public void onSuppressionMotCleImage(EvenementSuppressionMotCleImage evenementSuppressionMotCleImage);
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/navigation/evenement/changementEtatUtilisateur/GestionnaireEvenementChangementEtatUtilisateur.java
New file
0,0 → 1,7
package org.tela_botanica.del.client.navigation.evenement.changementEtatUtilisateur;
import com.google.gwt.event.shared.EventHandler;
 
public interface GestionnaireEvenementChangementEtatUtilisateur extends EventHandler {
 
public void onModificationEtatUtilisateur(EvenementChangementEtatUtilisateur evenementChangementEtatUtilisateur);
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/navigation/evenement/changementEtatUtilisateur/EvenementChangementEtatUtilisateur.java
New file
0,0 → 1,33
package org.tela_botanica.del.client.navigation.evenement.changementEtatUtilisateur;
 
import org.tela_botanica.del.client.modeles.Utilisateur;
 
import com.google.gwt.event.shared.GwtEvent;
 
public class EvenementChangementEtatUtilisateur extends GwtEvent<GestionnaireEvenementChangementEtatUtilisateur> {
 
public static com.google.gwt.event.shared.GwtEvent.Type<GestionnaireEvenementChangementEtatUtilisateur> TYPE = new com.google.gwt.event.shared.GwtEvent.Type<GestionnaireEvenementChangementEtatUtilisateur>();
private Utilisateur utilisateur;
 
public EvenementChangementEtatUtilisateur(Utilisateur utilisateur) {
this.utilisateur = utilisateur;
}
 
@Override
protected void dispatch(GestionnaireEvenementChangementEtatUtilisateur handler) {
handler.onModificationEtatUtilisateur(this);
}
 
@Override
public com.google.gwt.event.shared.GwtEvent.Type<GestionnaireEvenementChangementEtatUtilisateur> getAssociatedType() {
return TYPE;
}
 
public Utilisateur getUtilisateur() {
return utilisateur;
}
 
public void setUtilisateur(Utilisateur utilisateur) {
this.utilisateur = utilisateur;
}
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/navigation/evenement/validationPropositionDetermination/GestionnaireEvenementValidationPropositionDetermination.java
New file
0,0 → 1,6
package org.tela_botanica.del.client.navigation.evenement.validationPropositionDetermination;
import com.google.gwt.event.shared.EventHandler;
 
public interface GestionnaireEvenementValidationPropositionDetermination extends EventHandler {
public void onValidationPropositionDetermination(EvenementValidationPropositionDetermination event);
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/navigation/evenement/validationPropositionDetermination/EvenementValidationPropositionDetermination.java
New file
0,0 → 1,31
package org.tela_botanica.del.client.navigation.evenement.validationPropositionDetermination;
 
import org.tela_botanica.del.client.modeles.PropositionDetermination;
 
import com.google.gwt.event.shared.GwtEvent;
 
public class EvenementValidationPropositionDetermination extends GwtEvent<GestionnaireEvenementValidationPropositionDetermination> {
 
public static com.google.gwt.event.shared.GwtEvent.Type<GestionnaireEvenementValidationPropositionDetermination> TYPE = new com.google.gwt.event.shared.GwtEvent.Type<GestionnaireEvenementValidationPropositionDetermination>();
private final PropositionDetermination propositionDetermination;
 
public EvenementValidationPropositionDetermination(PropositionDetermination propositionDetermination) {
this.propositionDetermination = propositionDetermination;
}
@Override
protected void dispatch(GestionnaireEvenementValidationPropositionDetermination handler) {
handler.onValidationPropositionDetermination(this);
}
 
@Override
public com.google.gwt.event.shared.GwtEvent.Type<GestionnaireEvenementValidationPropositionDetermination> getAssociatedType() {
return TYPE;
}
 
public PropositionDetermination getPropositionDetermination() {
return propositionDetermination;
}
 
 
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/navigation/evenement/fermermotcleimage/EvenementFermerMotCleImage.java
New file
0,0 → 1,27
package org.tela_botanica.del.client.navigation.evenement.fermermotcleimage;
 
import com.google.gwt.event.shared.GwtEvent;
 
public class EvenementFermerMotCleImage extends GwtEvent<GestionnaireEvenementFermerMotCleImage> {
 
public static com.google.gwt.event.shared.GwtEvent.Type<GestionnaireEvenementFermerMotCleImage> TYPE = new com.google.gwt.event.shared.GwtEvent.Type<GestionnaireEvenementFermerMotCleImage>();
private String idImage;
 
public EvenementFermerMotCleImage(String idImage) {
this.idImage = idImage;
}
 
@Override
protected void dispatch(GestionnaireEvenementFermerMotCleImage handler) {
handler.onFermerMotCleImage(this);
}
 
public String getIdImage() {
return idImage;
}
 
@Override
public com.google.gwt.event.shared.GwtEvent.Type<GestionnaireEvenementFermerMotCleImage> getAssociatedType() {
return TYPE;
}
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/navigation/evenement/fermermotcleimage/GestionnaireEvenementFermerMotCleImage.java
New file
0,0 → 1,7
package org.tela_botanica.del.client.navigation.evenement.fermermotcleimage;
 
import com.google.gwt.event.shared.EventHandler;
 
public interface GestionnaireEvenementFermerMotCleImage extends EventHandler {
public void onFermerMotCleImage(EvenementFermerMotCleImage evenementFermerMotCleImage);
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/navigation/evenement/changementimagevalidation/GestionnaireEvenementChangementImageValidation.java
New file
0,0 → 1,8
package org.tela_botanica.del.client.navigation.evenement.changementimagevalidation;
 
 
import com.google.gwt.event.shared.EventHandler;
 
public interface GestionnaireEvenementChangementImageValidation extends EventHandler {
public void onChangementImage(EvenementChangementImageValidation event);
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/navigation/evenement/changementimagevalidation/EvenementChangementImageValidation.java
New file
0,0 → 1,25
package org.tela_botanica.del.client.navigation.evenement.changementimagevalidation;
 
import com.google.gwt.event.shared.GwtEvent;
 
public class EvenementChangementImageValidation extends GwtEvent<GestionnaireEvenementChangementImageValidation> {
 
public static com.google.gwt.event.shared.GwtEvent.Type<GestionnaireEvenementChangementImageValidation> TYPE = new com.google.gwt.event.shared.GwtEvent.Type<GestionnaireEvenementChangementImageValidation>();
 
public int indexImage;
public EvenementChangementImageValidation() {
 
}
 
@Override
protected void dispatch(GestionnaireEvenementChangementImageValidation handler) {
handler.onChangementImage(this);
}
 
@Override
public com.google.gwt.event.shared.GwtEvent.Type<GestionnaireEvenementChangementImageValidation> getAssociatedType() {
return TYPE;
}
 
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/navigation/evenement/detailsimage/GestionnaireEvenementRechercheImage.java
New file
0,0 → 1,8
package org.tela_botanica.del.client.navigation.evenement.detailsimage;
 
 
import com.google.gwt.event.shared.EventHandler;
 
public interface GestionnaireEvenementRechercheImage extends EventHandler {
public void onRechercheImage(EvenementRechercheImage event);
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/navigation/evenement/detailsimage/EvenementRechercheImage.java
New file
0,0 → 1,22
package org.tela_botanica.del.client.navigation.evenement.detailsimage;
 
import com.google.gwt.event.shared.GwtEvent;
 
public class EvenementRechercheImage extends GwtEvent<GestionnaireEvenementRechercheImage> {
 
public static com.google.gwt.event.shared.GwtEvent.Type<GestionnaireEvenementRechercheImage> TYPE = new com.google.gwt.event.shared.GwtEvent.Type<GestionnaireEvenementRechercheImage>();
 
public EvenementRechercheImage() {
}
 
@Override
protected void dispatch(GestionnaireEvenementRechercheImage handler) {
handler.onRechercheImage(this);
}
 
@Override
public com.google.gwt.event.shared.GwtEvent.Type<GestionnaireEvenementRechercheImage> getAssociatedType() {
return TYPE;
}
 
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/navigation/evenement/pagination/GestionnaireEvenementChangementPas.java
New file
0,0 → 1,7
package org.tela_botanica.del.client.navigation.evenement.pagination;
 
import com.google.gwt.event.shared.EventHandler;
 
public interface GestionnaireEvenementChangementPas extends EventHandler {
public void onChangementPas(EvenementChangementPas event);
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/navigation/evenement/pagination/EvenementChangementPage.java
New file
0,0 → 1,46
package org.tela_botanica.del.client.navigation.evenement.pagination;
 
import com.google.gwt.event.shared.GwtEvent;
 
public class EvenementChangementPage extends GwtEvent<GestionnaireEvenementChangementPage> {
 
public static com.google.gwt.event.shared.GwtEvent.Type<GestionnaireEvenementChangementPage> TYPE = new com.google.gwt.event.shared.GwtEvent.Type<GestionnaireEvenementChangementPage>();
 
private int pageAAfficher;
private String groupePagination = null;
 
public EvenementChangementPage(int pageAAfficher) {
this.pageAAfficher = pageAAfficher;
}
public EvenementChangementPage(int pageAAfficher, String groupePagination) {
this.pageAAfficher = pageAAfficher;
this.groupePagination = groupePagination;
}
 
@Override
protected void dispatch(GestionnaireEvenementChangementPage handler) {
handler.onChangementPage(this);
}
 
@Override
public com.google.gwt.event.shared.GwtEvent.Type<GestionnaireEvenementChangementPage> getAssociatedType() {
return TYPE;
}
 
public int getPageAAfficher() {
return pageAAfficher;
}
 
public void setPageAAfficher(int pageAAfficher) {
this.pageAAfficher = pageAAfficher;
}
public String getGroupePagination() {
return groupePagination;
}
 
public void setGroupePagination(String groupePagination) {
this.groupePagination = groupePagination;
}
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/navigation/evenement/pagination/EvenementChangementPas.java
New file
0,0 → 1,47
package org.tela_botanica.del.client.navigation.evenement.pagination;
 
import com.google.gwt.event.shared.GwtEvent;
 
public class EvenementChangementPas extends GwtEvent<GestionnaireEvenementChangementPas> {
 
public static com.google.gwt.event.shared.GwtEvent.Type<GestionnaireEvenementChangementPas> TYPE = new com.google.gwt.event.shared.GwtEvent.Type<GestionnaireEvenementChangementPas>();
 
private int pas;
private String groupePagination = null;
 
public EvenementChangementPas(int pas) {
this.pas = pas;
}
public EvenementChangementPas(int pas, String groupePagination) {
this.pas = pas;
this.groupePagination = groupePagination;
}
 
@Override
protected void dispatch(GestionnaireEvenementChangementPas handler) {
handler.onChangementPas(this);
}
 
@Override
public com.google.gwt.event.shared.GwtEvent.Type<GestionnaireEvenementChangementPas> getAssociatedType() {
return TYPE;
}
 
public int getPas() {
return pas;
}
 
public void setPas(int pas) {
this.pas = pas;
}
public String getGroupePagination() {
return groupePagination;
}
 
public void setGroupePagination(String groupePagination) {
this.groupePagination = groupePagination;
}
 
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/navigation/evenement/pagination/GestionnaireEvenementChangementPage.java
New file
0,0 → 1,7
package org.tela_botanica.del.client.navigation.evenement.pagination;
 
import com.google.gwt.event.shared.EventHandler;
 
public interface GestionnaireEvenementChangementPage extends EventHandler {
public void onChangementPage(EvenementChangementPage event);
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/navigation/evenement/ajoutmotcleimage/GestionnaireEvenementAjoutMotCleImage.java
New file
0,0 → 1,7
package org.tela_botanica.del.client.navigation.evenement.ajoutmotcleimage;
 
import com.google.gwt.event.shared.EventHandler;
 
public interface GestionnaireEvenementAjoutMotCleImage extends EventHandler {
public void onAjoutMotCleImage(EvenementAjoutMotCleImage evenementAjoutMotCleImage);
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/navigation/evenement/ajoutmotcleimage/EvenementAjoutMotCleImage.java
New file
0,0 → 1,32
package org.tela_botanica.del.client.navigation.evenement.ajoutmotcleimage;
 
import java.util.ArrayList;
import java.util.List;
 
import org.tela_botanica.del.client.modeles.MotCle;
 
import com.google.gwt.event.shared.GwtEvent;
 
public class EvenementAjoutMotCleImage extends GwtEvent<GestionnaireEvenementAjoutMotCleImage> {
 
public static com.google.gwt.event.shared.GwtEvent.Type<GestionnaireEvenementAjoutMotCleImage> TYPE = new com.google.gwt.event.shared.GwtEvent.Type<GestionnaireEvenementAjoutMotCleImage>();
private String idImage;
 
public EvenementAjoutMotCleImage(String idImage) {
this.idImage = idImage;
}
 
@Override
protected void dispatch(GestionnaireEvenementAjoutMotCleImage handler) {
handler.onAjoutMotCleImage(this);
}
 
public String getIdImage() {
return idImage;
}
 
@Override
public com.google.gwt.event.shared.GwtEvent.Type<GestionnaireEvenementAjoutMotCleImage> getAssociatedType() {
return TYPE;
}
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/navigation/evenement/supprimerImage/GestionnaireEvenementSupprimerImage.java
New file
0,0 → 1,7
package org.tela_botanica.del.client.navigation.evenement.supprimerImage;
 
import com.google.gwt.event.shared.EventHandler;
 
public interface GestionnaireEvenementSupprimerImage extends EventHandler {
public void onSuppressionImage(EvenementSupprimerImage event);
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/navigation/evenement/supprimerImage/EvenementSupprimerImage.java
New file
0,0 → 1,26
package org.tela_botanica.del.client.navigation.evenement.supprimerImage;
 
import com.google.gwt.event.shared.GwtEvent;
 
public class EvenementSupprimerImage extends GwtEvent<GestionnaireEvenementSupprimerImage>{
public static com.google.gwt.event.shared.GwtEvent.Type<GestionnaireEvenementSupprimerImage> TYPE = new com.google.gwt.event.shared.GwtEvent.Type<GestionnaireEvenementSupprimerImage>();
private String idImage;
 
public EvenementSupprimerImage(String idImage) {
this.idImage = idImage;
}
 
@Override
protected void dispatch(GestionnaireEvenementSupprimerImage handler) {
handler.onSuppressionImage(this);
}
 
public String getIdImage() {
return idImage;
}
 
@Override
public com.google.gwt.event.shared.GwtEvent.Type<GestionnaireEvenementSupprimerImage> getAssociatedType() {
return TYPE;
}
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/navigation/evenement/validationobservationpictoflora/GestionnaireEvenementValidationPictoflora.java
New file
0,0 → 1,8
package org.tela_botanica.del.client.navigation.evenement.validationobservationpictoflora;
 
 
import com.google.gwt.event.shared.EventHandler;
 
public interface GestionnaireEvenementValidationPictoflora extends EventHandler {
public void onValidationObservation(EvenementValidationPictoflora event);
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/navigation/evenement/validationobservationpictoflora/EvenementValidationPictoflora.java
New file
0,0 → 1,30
package org.tela_botanica.del.client.navigation.evenement.validationobservationpictoflora;
 
import org.tela_botanica.del.client.modeles.Observation;
 
import com.google.gwt.event.shared.GwtEvent;
 
public class EvenementValidationPictoflora extends GwtEvent<GestionnaireEvenementValidationPictoflora> {
 
public static com.google.gwt.event.shared.GwtEvent.Type<GestionnaireEvenementValidationPictoflora> TYPE = new com.google.gwt.event.shared.GwtEvent.Type<GestionnaireEvenementValidationPictoflora>();
private final Observation observation;
 
public EvenementValidationPictoflora(Observation observation) {
this.observation = observation;
}
@Override
protected void dispatch(GestionnaireEvenementValidationPictoflora handler) {
handler.onValidationObservation(this);
}
 
@Override
public com.google.gwt.event.shared.GwtEvent.Type<GestionnaireEvenementValidationPictoflora> getAssociatedType() {
return TYPE;
}
 
public Observation getObservation() {
return observation;
}
 
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/navigation/evenement/rechercheimage/GestionnaireEvenementVoirDetailsImage.java
New file
0,0 → 1,8
package org.tela_botanica.del.client.navigation.evenement.rechercheimage;
 
 
import com.google.gwt.event.shared.EventHandler;
 
public interface GestionnaireEvenementVoirDetailsImage extends EventHandler {
public void onVoirDetailsImage(EvenementVoirDetailsImage event);
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/navigation/evenement/rechercheimage/EvenementVoirDetailsImage.java
New file
0,0 → 1,35
package org.tela_botanica.del.client.navigation.evenement.rechercheimage;
 
import org.tela_botanica.del.client.modeles.Image;
 
import com.google.gwt.event.shared.GwtEvent;
 
public class EvenementVoirDetailsImage extends GwtEvent<GestionnaireEvenementVoirDetailsImage> {
 
public static com.google.gwt.event.shared.GwtEvent.Type<GestionnaireEvenementVoirDetailsImage> TYPE = new com.google.gwt.event.shared.GwtEvent.Type<GestionnaireEvenementVoirDetailsImage>();
 
private Image image;
public EvenementVoirDetailsImage(Image image) {
this.image=image;
}
 
@Override
protected void dispatch(GestionnaireEvenementVoirDetailsImage handler) {
handler.onVoirDetailsImage(this);
}
 
@Override
public com.google.gwt.event.shared.GwtEvent.Type<GestionnaireEvenementVoirDetailsImage> getAssociatedType() {
return TYPE;
}
 
public Image getImage() {
return image;
}
 
public void setImage(Image image) {
this.image = image;
}
 
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/navigation/evenement/changementPreferences/GestionnaireEvenementChangementPreferences.java
New file
0,0 → 1,7
package org.tela_botanica.del.client.navigation.evenement.changementPreferences;
 
import com.google.gwt.event.shared.EventHandler;
 
public interface GestionnaireEvenementChangementPreferences extends EventHandler {
public void onChangementPreferences(EvenementChangementPreferences event);
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/navigation/evenement/changementPreferences/EvenementChangementPreferences.java
New file
0,0 → 1,22
package org.tela_botanica.del.client.navigation.evenement.changementPreferences;
 
import com.google.gwt.event.shared.GwtEvent;
 
public class EvenementChangementPreferences extends GwtEvent<GestionnaireEvenementChangementPreferences> {
public static com.google.gwt.event.shared.GwtEvent.Type<GestionnaireEvenementChangementPreferences> TYPE = new com.google.gwt.event.shared.GwtEvent.Type<GestionnaireEvenementChangementPreferences>();
 
public EvenementChangementPreferences() {
 
}
 
@Override
protected void dispatch(GestionnaireEvenementChangementPreferences handler) {
handler.onChangementPreferences(this);
}
 
@Override
public com.google.gwt.event.shared.GwtEvent.Type<GestionnaireEvenementChangementPreferences> getAssociatedType() {
return TYPE;
}
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/utils/Analytics.java
New file
0,0 → 1,70
package org.tela_botanica.del.client.utils;
 
import org.tela_botanica.del.client.Del;
import org.tela_botanica.del.client.config.Config;
 
public class Analytics {
 
/**
* Envoie une notification à Google Analytics, comme quoi la page "url" a été visitée;
* passer par pageVisitee() pour s'assurer qu'on est bien en prod
*
* @param url adresse ou surnom de la page visitée
*/
public static native void pageVisiteeNatif(String url) /*-{
if (url == "") {
url = $wnd.location.href;
}
$wnd.ga('send', 'pageview', url);
}-*/;
 
/**
* Proxy pour evenementNatif() qui n'envoie l'événement que si on est en prod
*/
public static void pageVisitee(String url) {
Config config = new Config();
if (config.isProd()) {
//Del.LogVersFirebug("Page vue: " + url);
Analytics.pageVisiteeNatif(url);
} else {
}
}
 
public static void pageVisitee() {
pageVisitee("");
}
 
/**
* Envoie une notification à Google Analytics, comme quoi l'événement "action" a été déclenché
* sur la ressource "categorie" - passer par evenement() pour s'assurer qu'on
* est bien en prod
*
* @param categorie - la ressource sur laquelle l'utilisateur a agi
* @param action - ce que l'utilisateur a fait avec cette ressource
* @param label - un bout de JSON avec des détails
* @param nombre - nombre d'actions à enregistrer
*/
public static native void evenementNatif(String categorie, String action, String label, int nombre) /*-{
$wnd.ga('send', 'event', categorie, action, label, nombre);
}-*/;
 
/**
* Proxy pour evenementNatif() qui n'envoie l'événement que si on est en prod
*/
public static void evenement(String categorie, String action, String label, int nombre) {
Config config = new Config();
if (config.isProd()) {
//Del.LogVersFirebug("Evenement: " + categorie + ", " + action + ", " + label + ", " + nombre);
Analytics.evenementNatif(categorie, action, label, nombre);
}
}
 
public static void evenement(String categorie, String action, String label) {
Analytics.evenement(categorie, action, label, 1);
}
 
public static void evenement(String categorie, String action) {
Analytics.evenement(categorie, action, "", 1);
}
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/utils/StringUtils.java
New file
0,0 → 1,143
package org.tela_botanica.del.client.utils;
 
import org.tela_botanica.del.client.i18n.I18n;
 
import com.google.gwt.i18n.client.NumberFormat;
import com.google.gwt.user.client.Window;
 
public class StringUtils {
public static boolean checkStringNotNull(String s){
if(s!=null&&!s.equals("")){
return true;
}
return false;
}
public static String normaliser(String mot) {
mot = mot.toLowerCase().trim().replace(" ", "");
// Le manque de support des librairies standard java
// nous oblige à utiliser cette méthode un peu batarde
char[] accents = {'à','á','â','ã','ä','ç','è','é','ê','ë','ì','í','î','ï','ñ','ò','ó','ô','õ','ö','ù','ú','û','ü','ý','ÿ','À','Á','Â','Ã','Ä','Ç','È','É','Ê','Ë', 'Ì','Í','Î','Ï','Ñ','Ò','Ó','Ô','Õ','Ö','Ù','Ú','Û','Ü','Ý'};
char[] sansAccents = {'a','a','a','a','a','c', 'e','e','e','e','i','i','i','i','n','o','o','o','o','o','u','u','u','u', 'y','y','A','A','A','A','A','C','E','E','E','E','I','I','I','I','N','O','O','O','O','O','U','U','U','U','Y'};
for (int i = 0; i < accents.length; i++) {
mot = mot.replace(accents[i], sansAccents[i]);
}
return mot;
}
public static native void logVersConsole(Object o) /*-{
if(!!($wnd.console && $wnd.console.log)) {
$wnd.console.log(o);
}
}-*/;
public static String formaterNombre(double valeur, int decimales) {
StringBuilder patternNb = new StringBuilder(
(decimales <= 0) ? "" : ".");
for (int i = 0; i < decimales; i++) {
patternNb.append('0');
}
if(valeur == 0) {
patternNb.insert(0, 0);
}
return NumberFormat.getFormat(patternNb.toString()).format(valeur);
}
public static String getCorrespondanceChaineEvenementObs(String evenement) {
String trad = "";
// Arghhhh pourquoi on ne peut pas faire de switch sur une string !!!!!!
// arggh arrrghghhhhhh
if(evenement.equals("nouveau_vote")) {
trad = I18n.getVocabulary().nouveauVote();
}
if(evenement.equals("nouveau_commentaire")) {
trad = I18n.getVocabulary().nouveauCommentaire();
}
if(evenement.equals("nouvelle_observation")) {
trad = I18n.getVocabulary().nouvelleObservation();
}
if(evenement.equals("nouveau_commentaire_vous_a_obs_autre")) {
trad = I18n.getVocabulary().nouveauCommentaireVousAObsAutre();
}
if(evenement.equals("nouveau_commentaire_autre_sur_obs_vous")) {
trad = I18n.getVocabulary().nouveauCommentaireAutreSurObsVous();
}
if(evenement.equals("nouvelle_proposition_vous_a_obs_autre")) {
trad = I18n.getVocabulary().nouvellePropositionVousAObsAutre();
}
if(evenement.equals("nouvelle_proposition_autre_sur_obs_vous")) {
trad = I18n.getVocabulary().nouvellePropositionAutreSurObsVous();
}
if(evenement.equals("nouveau_vote_vous_a_com_autre")) {
trad = I18n.getVocabulary().nouveauVoteVousAComAutre();
}
if(evenement.equals("nouveau_vote_autre_sur_com_vous")) {
trad = I18n.getVocabulary().nouveauVoteAutreSurComVous();
}
if(evenement.equals("nouvelle_validation_vous_a_prop_autre")) {
trad = I18n.getVocabulary().nouvelleValidationVousAPropAutre();
}
if(evenement.equals("nouvelle_validation_autre_sur_prop_vous")) {
trad = I18n.getVocabulary().nouvelleValidationAutreAPropVous();
}
if(evenement.equals("nouveau_vote_autre_sur_com_autre_obs_vous")) {
trad = I18n.getVocabulary().nouveauVoteAutreSurComAutreObsVous();
}
if(evenement.equals("nouvelle_reponse_autre_sur_commentaire_vous")) {
trad = I18n.getVocabulary().nouvelleReponseAutreSurCommentaireVous();
}
if(evenement.equals("nouvelle_reponse_autre_sur_proposition_vous")) {
trad = I18n.getVocabulary().nouvelleReponseAutreSurPropositionVous();
}
return trad;
}
public static String getClasseEvenementObs(String evenement) {
String classeEvt = "";
if(evenement.equals("nouveau_commentaire_vous_a_obs_autre") ||
evenement.equals("nouveau_commentaire_autre_sur_obs_vous") ||
evenement.equals("nouvelle_reponse_autre_sur_commentaire_vous") ||
evenement.equals("nouvelle_reponse_autre_sur_proposition_vous")) {
classeEvt = "evtObsCitation";
} else {
classeEvt = "evtObsAction";
}
return classeEvt;
}
/**
* Puts ellipses in input strings that are longer than than maxCharacters. Shorter strings or
* null is returned unchanged.
* @param input the input string that may be subjected to shortening
* @param maxCharacters the maximum characters that are acceptable for the unshortended string. Must be at least 3, otherwise a string with ellipses is too long already.
* @param the number of characters that should appear after the ellipsis (0 or larger)
*/
public static String ellipsize(String input, int maxCharacters, int charactersAfterEllipsis) {
if (input == null || input.length() < maxCharacters) {
return input;
}
return input.substring(0, maxCharacters - 3 - charactersAfterEllipsis) + "..." + input.substring(input.length() - charactersAfterEllipsis);
}
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/utils/ComparateurPropositionDetermination.java
New file
0,0 → 1,41
package org.tela_botanica.del.client.utils;
 
import java.util.Comparator;
 
import org.tela_botanica.del.client.modeles.InterventionForum;
import org.tela_botanica.del.client.modeles.MoyenneVote;
import org.tela_botanica.del.client.modeles.PropositionDetermination;
import org.tela_botanica.del.client.services.CalculVoteDeterminationService;
 
import com.google.gwt.user.client.Window;
 
public class ComparateurPropositionDetermination implements Comparator<InterventionForum> {
 
@Override
public int compare(InterventionForum intervention1, InterventionForum intervention2) {
int entierRetour = 0;
if (intervention1 instanceof PropositionDetermination && intervention2 instanceof PropositionDetermination) {
PropositionDetermination proposition1 = (PropositionDetermination) intervention1;
PropositionDetermination proposition2 = (PropositionDetermination) intervention2;
// si 1 est prop et 2 est prop
MoyenneVote moyenneP1 = CalculVoteDeterminationService.calculerVoteDetermination(proposition1);
int scoreP1 = moyenneP1.getScore();
MoyenneVote moyenneP2 = CalculVoteDeterminationService.calculerVoteDetermination(proposition2);
int scoreP2 = moyenneP2.getScore();
if (scoreP1 < scoreP2) {
entierRetour = 1;
} else if(scoreP1 > scoreP2) {
entierRetour = -1;
}
} else {
entierRetour = 1;
}
//si 1 est prop et 2 est comm OU si 1 est comm et 2 est prop ou les 2 sont comm
return entierRetour;
}
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/utils/TBSuggestOracle.java
New file
0,0 → 1,65
package org.tela_botanica.del.client.utils;
 
import java.util.ArrayList;
import java.util.List;
 
import com.google.gwt.user.client.ui.MultiWordSuggestOracle.MultiWordSuggestion;
import com.google.gwt.user.client.ui.SuggestOracle;
 
/**
* Un Oracle à suggestions qui retourne les résultats en respectant au mieux l'ordre de la
* liste de suggestions fournies
*
* @author mathias
*/
public class TBSuggestOracle extends SuggestOracle {
 
// On devrait gérer des objets qui contiennent le nn plutôt que de se baser uniquement sur des Strings
protected ArrayList<InfosNomPourAutocompletion> possibilites;
 
public TBSuggestOracle() {
this.possibilites = new ArrayList<InfosNomPourAutocompletion>();
}
 
public void clear() {
this.possibilites.clear();
}
 
public void add(InfosNomPourAutocompletion suggestion) {
this.possibilites.add(suggestion);
}
 
public void requestSuggestions(Request request, Callback callback) {
String query = request.getQuery().toLowerCase();
int limit = request.getLimit();
List<MultiWordSuggestion> retenus = new ArrayList<MultiWordSuggestion>();
 
for (InfosNomPourAutocompletion possibilite : this.possibilites) {
String possibiliteTexte = possibilite.getNs();
String possibiliteHtml = possibiliteTexte;
if (possibilite.isRetenu()) {
possibiliteHtml = "<strong>" + possibiliteHtml + "</strong>";
}
if (possibiliteTexte.toLowerCase().startsWith(query)) {
MultiWordSuggestion muWoSug = new MultiWordSuggestion(possibiliteTexte, possibiliteHtml);
retenus.add(muWoSug);
}
}
 
while (retenus.size() > limit) {
retenus.remove(retenus.size() - 1);
}
 
Response reponse = new Response(retenus);
callback.onSuggestionsReady(request, reponse);
}
/**
* @override
*/
public boolean isDisplayStringHTML() {
// surcharger cette méthode permet de retourner du html dans displayString
// (l'api est pourrie pourquoi ça n'est pas genre un attribut avec des setters/getters ?)
return true;
}
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/utils/InfosNomPourAutocompletion.java
New file
0,0 → 1,48
package org.tela_botanica.del.client.utils;
 
/**
* Juste histoire de pouvoir stocker le nom scientifique, le numéro nomenclatural et
* le statut "retenu" dans un même endroit, pour nourrir ensuite l'autocomplétion
*
* @author mathias
*/
public class InfosNomPourAutocompletion {
 
/** numéro nomenclatural - un int suffit largement */
protected int nn;
/** nom scientifique (complet, avec auteur) */
protected String ns;
/** si true, désigne un nom retenu */
protected boolean retenu;
 
public InfosNomPourAutocompletion(int nn, String ns, boolean retenu) {
this.nn = nn;
this.ns = ns;
this.retenu = retenu;
}
 
// le parseur JSON produit des double, soyons courtois
public InfosNomPourAutocompletion(double nn, String ns, boolean retenu) {
this((int)nn, ns, retenu);
}
 
public int getNn() {
return nn;
}
public String getNs() {
return ns;
}
public boolean isRetenu() {
return retenu;
}
 
public void setNn(int nn) {
this.nn = nn;
}
public void setNs(String ns) {
this.ns = ns;
}
public void setRetenu(boolean retenu) {
this.retenu = retenu;
}
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/utils/ModerationUtils.java
New file
0,0 → 1,20
package org.tela_botanica.del.client.utils;
 
import org.tela_botanica.del.client.modeles.Observation;
import org.tela_botanica.del.client.modeles.Utilisateur;
 
public class ModerationUtils {
 
public static boolean utilisateurPeutValiderObservation(Utilisateur utilisateur, Observation observation) {
 
return utilisateur.etreValidateur(); // inclut le cas "etreAdmin()"
}
 
public static boolean utilisateurPeutDepublierObs(Utilisateur utilisateur) {
boolean etreAdmin = false;
if (utilisateur != null) {
etreAdmin = utilisateur.estIdentifie() && utilisateur.etreAdmin();
}
return etreAdmin;
}
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/utils/UtilitairesAutoCompletionService.java
New file
0,0 → 1,103
package org.tela_botanica.del.client.utils;
 
import java.util.LinkedHashMap;
import java.util.Map;
 
import com.google.gwt.core.client.GWT;
import com.google.gwt.http.client.Response;
import com.google.gwt.json.client.JSONArray;
import com.google.gwt.json.client.JSONObject;
import com.google.gwt.json.client.JSONParser;
import com.google.gwt.json.client.JSONValue;
import com.google.gwt.user.client.Window;
 
public class UtilitairesAutoCompletionService {
public static String effectuerPreTraitementChaineRequeteGenreEspeceSlash(String requete) {
String chaineTraitee = requete;
String[] parties = requete.split(" ", 2);
if(parties.length == 2) {
if(parties[1].trim().isEmpty()) {
parties[1] = "*";
}
chaineTraitee = parties[0]+"/"+parties[1];
}
return chaineTraitee;
}
public static String effectuerPreTraitementChaineRequeteGenreEspeceEflore(String requete) {
String chaineTraitee = "?recherche=etendue&ns.structure=au&retour.format=oss&masque="+requete;
return chaineTraitee;
}
public static Map<String, InfosNomPourAutocompletion> extraireTaxonsNumNomsResultatRetourSimple(Response response) {
JSONObject responseValue = JSONParser.parseStrict(response.getText()).isObject();
JSONArray noms = responseValue.get("resultats").isArray();
final int taillemax = noms.size();
// LinkedHashMap préserve l'ordre
Map<String, InfosNomPourAutocompletion> retourTaxons = new LinkedHashMap<String, InfosNomPourAutocompletion>(taillemax);
for (int i = 0; i < taillemax; i++) {
// comment rendre compliqué un format fait pour être simple
JSONObject obj = noms.get(i).isObject();
String ns = obj.get("ns").isString().stringValue();
double nn = obj.get("nn").isNumber().doubleValue();
boolean retenu = obj.get("retenu").isBoolean().booleanValue();
// empile, Gérard !
retourTaxons.put(ns, new InfosNomPourAutocompletion(nn, ns, retenu));
}
return retourTaxons;
}
public static InfosNomPourAutocompletion[] parserResultatRetourSimple(Response response) {
JSONObject responseValue = JSONParser.parseStrict(response.getText()).isObject();
JSONArray noms = responseValue.get("resultats").isArray();
 
final int taillemax = noms.size();
InfosNomPourAutocompletion[] valeurs = new InfosNomPourAutocompletion[taillemax];
 
// Eh les gars, si on refaisait le même truc ici que celui qu'on vient de faire en haut ?
for (int i = 0; i < taillemax; i++) {
// comment rendre comp... euh j'ai déjà dit ça il y a 20 lignes, non ?
JSONObject obj = noms.get(i).isObject();
String ns = obj.get("ns").isString().stringValue();
double nn = obj.get("nn").isNumber().doubleValue();
boolean retenu = obj.get("retenu").isBoolean().booleanValue();
// empile, Marcel !
valeurs[i] = new InfosNomPourAutocompletion(nn, ns, retenu);
}
return valeurs;
}
public static String[] parserRetourSimple(Response response) {
final JSONValue responseValue = JSONParser.parseStrict(response.getText());
JSONArray noms;
String[] valeurs = new String[0];
if ((noms=responseValue.isArray()) != null) {
final int taillemax = noms.size();
valeurs = new String[taillemax];
for (int i = 0; i < taillemax; i++) {
valeurs[i] = (noms.get(i).isArray().get(0).isString().stringValue());
}
}
return valeurs;
}
public static String[] parserRetourOss(Response response) {
JSONValue retourJson = JSONParser.parseStrict(response.getText());
JSONArray tableauResultat = retourJson.isArray().get(1).isArray();
String[] suggestions = new String[tableauResultat.size()];
for (int i = 0; i < tableauResultat.size(); i++) {
suggestions[i] = tableauResultat.get(i).isString().stringValue();
}
return suggestions;
}
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/utils/URLUtils.java
New file
0,0 → 1,23
package org.tela_botanica.del.client.utils;
 
import com.google.gwt.user.client.History;
import com.google.gwt.user.client.Window;
 
public class URLUtils {
 
/**
* Renvoie le parametre contenu apres le signe ~dans l'url
* Utile pour passer des parametres dynamiquement
* @return
*/
public static String getURLSpecialParameterValue() {
String historyToken = History.getToken();
int debutParam = historyToken.indexOf("~");
String specialParam = null;
if(debutParam != -1) {
specialParam = historyToken.substring(debutParam + 1);
}
return specialParam;
}
 
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/utils/UtilitairesServiceResultat.java
New file
0,0 → 1,854
package org.tela_botanica.del.client.utils;
 
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
 
import org.tela_botanica.del.client.Del;
import org.tela_botanica.del.client.cache.CacheClient;
import org.tela_botanica.del.client.config.Config;
import org.tela_botanica.del.client.i18n.I18n;
import org.tela_botanica.del.client.modeles.ActiviteUtilisateur;
import org.tela_botanica.del.client.modeles.AuthInfo;
import org.tela_botanica.del.client.modeles.Commentaire;
import org.tela_botanica.del.client.modeles.Contributeur;
import org.tela_botanica.del.client.modeles.EvenementObs;
import org.tela_botanica.del.client.modeles.Image;
import org.tela_botanica.del.client.modeles.ImageServiceResultat;
import org.tela_botanica.del.client.modeles.InterventionForum;
import org.tela_botanica.del.client.modeles.MotCle;
import org.tela_botanica.del.client.modeles.Observation;
import org.tela_botanica.del.client.modeles.ObservationServiceResultat;
import org.tela_botanica.del.client.modeles.PropositionDetermination;
import org.tela_botanica.del.client.modeles.Protocole;
import org.tela_botanica.del.client.modeles.ProtocoleServiceResultat;
import org.tela_botanica.del.client.modeles.Utilisateur;
import org.tela_botanica.del.client.modeles.VoteDetermination;
import org.tela_botanica.del.client.modeles.VoteProtocole;
 
import com.google.gwt.core.shared.GWT;
import com.google.gwt.i18n.client.DateTimeFormat;
import com.google.gwt.json.client.JSONArray;
import com.google.gwt.json.client.JSONNumber;
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;
 
/**
* Centralisation des methodes de parsing du code JSON retourné par les
* webservices
*
* @author LIENS
*
*/
public class UtilitairesServiceResultat {
 
/**
* Recupere un objet Image à partir du JSON
*
* @param imageJson
* @return
*/
public static Image parserImageJSON(JSONObject imageJson) {
 
Image image = new Image();
Config config = new Config();
String urlImages = config.getUrl("images");
String idImage = imageJson.get("id_image").isString().stringValue();
image.setIdImage(idImage);
image.setUrlFormat(urlImages + getIdAvecPadding(idImage) + "%s%.jpg");
image.setUrl(urlImages + getIdAvecPadding(idImage) + "CRS.jpg");
image.setMiniature(urlImages + getIdAvecPadding(idImage) + "XS.jpg");
image.setMotsClefs(parserMotsCles(UtilitairesServiceResultat.getValeurOuVide(imageJson, "mots_cles_texte")));
 
return image;
}
 
/**
* Recupere un objet Observation à partir du JSON
*
* @param imageJson
* @return
*/
public static Observation parserObservationJSON(JSONObject observationJson) {
 
Observation observation = new Observation();
observation.setAuteur(getValeurOuVide(observationJson, "auteur.prenom") + " " + getValeurOuVide(observationJson, "auteur.nom"));
observation.setNomAuteur(getValeurOuVide(observationJson, "auteur.nom"));
observation.setPrenomAuteur(getValeurOuVide(observationJson, "auteur.prenom"));
observation.setIdAuteur(getValeurOuVide(observationJson, "auteur.id"));
// TODO: renvoyer le courriel de l'auteur dans les obs
observation.setCourrielAuteur(getValeurOuVide(observationJson, "auteur.courriel"));
observation.setDateTransmission(getValeurOuVide(observationJson, "date_transmission"));
observation.setDateReleve(getValeurOuVide(observationJson, "date_observation"));
observation.setFamille(getValeurOuVide(observationJson, "determination.famille"));
observation.setId(getValeurOuVide(observationJson, "id_observation"));
observation.setPays(getValeurOuVide(observationJson, "pays"));
observation.setIdLocalite(getValeurOuVide(observationJson, "id_zone_geo"));
observation.setLocalite(getValeurOuVide(observationJson, "zone_geo"));
 
String nomRetenu = getValeurOuVide(observationJson, "determination.ns");
// Pour afficher quelque chose de plus pertinent qu'un nom vide
// (il en existe parfois et cela fausse l'affichage)
if(nomRetenu.trim().isEmpty()) {
nomRetenu = I18n.getVocabulary().indeterminee();
}
observation.setNomRetenu(nomRetenu);
observation.setMilieu(getValeurOuVide(observationJson, "milieu"));
observation.setLieuDit(getValeurOuVide(observationJson, "lieudit"));
observation.setStation(getValeurOuVide(observationJson, "station"));
observation.setCommentaire(getValeurOuVide(observationJson, "commentaire"));
observation.setNumNomenclatural(getValeurOuVide(observationJson, "determination.nn"));
observation.setReferentiel(getValeurOuVide(observationJson, "determination.referentiel"));
String nbCom = getValeurOuVide(observationJson, "nb_commentaires");
nbCom = nbCom.equals("") ? "0" : nbCom;
observation.setNbCommentaires(nbCom);
observation.setMotsClefs(parserMotsCles(UtilitairesServiceResultat.getValeurOuVide(observationJson, "mots_cles_texte")));
JSONValue propositions = observationJson.get("commentaires");
JSONValue evenements = observationJson.get("evenements");
List<EvenementObs> evenementsObs = new ArrayList<EvenementObs>();
if (evenements != null && evenements.isArray() != null) {
JSONArray evenementsTab = evenements.isArray();
for (int i = 0; i < evenementsTab.size(); i++) {
String type = evenementsTab.get(i).isObject().get("type").isString().stringValue();
String infosComplementaires = evenementsTab.get(i).isObject().get("infos_complementaires").isString().stringValue();
EvenementObs evtObs = new EvenementObs(type, infosComplementaires);
evenementsObs.add(evtObs);
}
}
observation.setEvenementsAssocies(evenementsObs);
 
boolean creerPropositionAPartirObs = true;
boolean propositionInitialeExiste = false;
PropositionDetermination propositionPotentiellementInitiale = null;
if (propositions != null && propositions.isObject() != null) {
List<InterventionForum> interventions = parserInterventions(propositions.isObject());
for (InterventionForum interventionForum : interventions) {
interventionForum.setObservation(observation);
if (interventionForum instanceof PropositionDetermination) {
PropositionDetermination proposition = (PropositionDetermination) interventionForum;
// Si une proposition avec les même nums noms et référentiel que l'observation est déjà présente,
// alors il n'est pas nécessaire de créer la proposition "factice"
if (especePropositionEtObservationCorrespondent(observation, proposition)) {
creerPropositionAPartirObs = false;
// Si de plus les auteurs correspondent, alors nous avons affaire à la proposition initiale
if(proposition.getContributeur().getNomComplet().equals(observation.getAuteur())) {
propositionPotentiellementInitiale = proposition;
}
}
if (proposition.estPropositionInitiale()) {
propositionInitialeExiste = true;
}
}
}
observation.setInterventionsForum(interventions);
}
if (!propositionInitialeExiste && propositionPotentiellementInitiale != null) {
// Ceci permet à la la proposition d'être mise en valeur différemment dans l'interface
propositionPotentiellementInitiale.setEstPropositionInitiale(true);
}
if (creerPropositionAPartirObs) {
// Si elle est nécessaire, la proposition factice est ajoutée au début
observation.getInterventionsForum().add(0, creerPropositionDeterminationAPartirObservation(observation, propositionInitialeExiste));
}
return observation;
 
}
 
public static boolean especePropositionEtObservationCorrespondent(Observation observation, PropositionDetermination proposition) {
boolean correspondent = false;
String obsNN = observation.getNumNomenclatural();
String obsRef = observation.getReferentiel();
String propNN = proposition.getNumNomenclatural();
String propRef = proposition.getReferentiel();
boolean obnNNVide = obsNN == null || obsNN.isEmpty() || obsNN.equals("0");
boolean propNNVide = propNN == null || propNN.isEmpty() || propNN.equals("0");
 
/*Del.LogVersFirebug(
"OBS NN: [" + obsNN
+ "], OBS REF: [" + obsRef
+ "], PROP NN: [" + propNN
//+ "], PROP NS: [" + proposition.getEspece()
+ "], PROP REF: [" + propRef
+ "]"
);*/
 
// @WARNING patch crado en raison d'une conception poucrave de cette appli cliente : la
// présence d'une obs non liée à un référentiel, même si ce n'est pas celle qui est
// actuellement retenue, entraînera une disparition de la proposition actuellement retenue;
// mais ce n'est pas censé arriver, car à la première création d'une proposition, la
// proposition initiale doit être matérialisée (j'ai bon ? pas sûr :P)
 
// soit les NN sont à zéro ou null (proposition non liée) et dans ce cas on ne compare pas les référentiels
if (propNNVide && obnNNVide) {
correspondent = true;
} else { // soit on compare les NN et les référentiels
correspondent = (obsNN.equals(propNN) && obsRef.equals(propRef));
}
 
return correspondent;
}
 
/**
* Créée une proposition de determination à partir d'une observation
*
* @param observation
* @return
*/
private static PropositionDetermination creerPropositionDeterminationAPartirObservation(Observation observation, boolean propositionInitialeExiste) {
 
String utilisateurNom = observation.getNomAuteur();
String utilisateurPrenom = observation.getPrenomAuteur();
 
String utilisateurCourriel = observation.getCourrielAuteur();
String utilisateurId = observation.getIdAuteur();
PropositionDetermination propositionDetermination = new PropositionDetermination(observation);
Contributeur contributeur = new Contributeur(utilisateurId, utilisateurNom, utilisateurPrenom, utilisateurCourriel);
propositionDetermination.setContributeur(contributeur);
java.util.Date datePropDeter = parserDateObservation(observation.getDateTransmission());
propositionDetermination.setDate(datePropDeter);
propositionDetermination.setEspece(observation.getNomRetenu());
propositionDetermination.setNumNomenclatural(observation.getNumNomenclatural());
propositionDetermination.setReferentiel(observation.getReferentiel());
if (!propositionInitialeExiste) {
propositionDetermination.setEstPropositionInitiale(true);
}
 
return propositionDetermination;
}
 
/**
* Recupere une liste de commentaires à partir du JSON
*
* @param imageJson
* @return
*/
public static List<Commentaire> parserCommentaires(JSONObject commentaires) {
List<InterventionForum> interventionForums = parserInterventions(commentaires);
List<Commentaire> commentairesListe = new ArrayList<Commentaire>();
for (InterventionForum interventionForum : interventionForums) {
if (interventionForum instanceof Commentaire) {
commentairesListe.add((Commentaire) interventionForum);
}
}
return commentairesListe;
 
}
 
/**
* Recupere une liste d'interventions à partir du JSON
*
* @param imageJson
* @return
*/
public static List<InterventionForum> parserInterventions(JSONObject interventions) {
HashMap<String, InterventionForum> interventionsNonTypees = new HashMap<String, InterventionForum>();
 
List<InterventionForum> retour = new ArrayList<InterventionForum>();
 
// parcourir les interventions et en faire un tableau
if (interventions == null) {
return retour;
}
Iterator<String> itInterventions = interventions.keySet().iterator();
while (itInterventions.hasNext()) {
JSONObject jsonIntervention = interventions.get(itInterventions.next()).isObject();
String nomSel = getValeurOuVide(jsonIntervention, "nom_sel");
 
String id = getValeurOuVide(jsonIntervention, "id_commentaire");
String idParent = getValeurOuVide(jsonIntervention, "id_parent");
String texte = getValeurOuVide(jsonIntervention, "texte");
 
String idUtilisateur = getValeurOuVide(jsonIntervention, "auteur.id");
String nom = getValeurOuVide(jsonIntervention, "auteur.nom");
String prenom = getValeurOuVide(jsonIntervention, "auteur.prenom");
String courriel = getValeurOuVide(jsonIntervention, "auteur.courriel");
Contributeur contributeur = new Contributeur(idUtilisateur, nom, prenom, courriel);
Date date = parserDateObservation(getValeurOuVide(jsonIntervention, "date"));
 
if (!nomSel.equals("")) {
String nom_sel = getValeurOuVide(jsonIntervention, "nom_sel");
String nom_sel_nn = getValeurOuVide(jsonIntervention, "nom_sel_nn");
String nom_ret = getValeurOuVide(jsonIntervention, "nom_ret");
String nom_ret_nn = getValeurOuVide(jsonIntervention, "nom_ret_nn");
String famille = getValeurOuVide(jsonIntervention, "famille");
String nom_referentiel = getValeurOuVide(jsonIntervention, "nom_referentiel");
String nbCommentaires = getValeurOuVide(jsonIntervention, "nb_commentaires");
 
PropositionDetermination intervention = new PropositionDetermination(id, contributeur, texte);
String proposition_initiale = getValeurOuVide(jsonIntervention, "proposition_initiale");
if (proposition_initiale != null && proposition_initiale.equals("1")) {
intervention.setEstPropositionInitiale(true);
}
String proposition_retenue = getValeurOuVide(jsonIntervention, "proposition_retenue");
if (proposition_retenue != null && proposition_retenue.equals("1")) {
intervention.setEstPropositionRetenue(true);
}
intervention.setEspece(nom_sel);
 
if (!nbCommentaires.equals("")) {
int nbComm = Integer.parseInt(nbCommentaires);
intervention.setNbCommentaires(nbComm);
}
 
if (nom_sel_nn != null && !nom_sel_nn.equals("")) {
intervention.setNumNomenclatural(nom_sel_nn);
}
if(nom_referentiel != null && !nom_referentiel.equals("")) {
intervention.setReferentiel(nom_referentiel);
}
if (!idParent.equals("")) {
intervention.setIdParent(idParent);
}
 
if (jsonIntervention.get("votes") != null && jsonIntervention.get("votes").isObject() != null) {
intervention.setVotesDeterminations(parserVotesDetermination(jsonIntervention.get("votes").isObject()));
}
 
intervention.setDate(date);
interventionsNonTypees.put(intervention.getId(), intervention);
 
} else {
Commentaire intervention = new Commentaire(contributeur, date, texte);
intervention.setId(id);
intervention.setDate(date);
interventionsNonTypees.put(intervention.getId(), intervention);
if (!idParent.equals("")) {
intervention.setIdParent(idParent);
}
}
}
 
Iterator<String> itIntervention = interventionsNonTypees.keySet().iterator();
while (itIntervention.hasNext()) {
String id = itIntervention.next();
InterventionForum intervention = interventionsNonTypees.get(id);
String idParent = intervention.getIdParent();
if (idParent != null && !idParent.equals("") && !idParent.equals("0") && interventionsNonTypees.containsKey(idParent)) {
InterventionForum parent = interventionsNonTypees.get(idParent);
intervention.setParent(parent);
parent.ajouterCommentaire((Commentaire) intervention);
} else {
retour.add(intervention);
}
}
 
return retour;
}
 
/**
* Recupere une liste de commentaires à partir du JSON
*
* @param imageJson
* @return
*/
public static String convertirEtParserRetourAjoutCommentaire(String retour) {
JSONObject retourJson = JSONParser.parseStrict(retour).isObject();
return parserRetourAjoutCommentaire(retourJson);
}
 
/**
* Recupere une liste de commentaires à partir d'un objet JSON
*
* @param imageJson
* @return
*/
public static String parserRetourAjoutCommentaire(JSONObject retour) {
String id = "";
if (retour != null) {
id = getValeurOuVide(retour, "id_commentaire");
}
return id;
}
 
public static String getValeurOuVide(JSONObject objet, String index) {
return (objet.get(index) != null && objet.get(index).isString() != null) ? objet.get(index).isString().stringValue() : "";
}
 
/**
* Recupere une liste de votes sur une determination à partir du JSON
*
* @param imageJson
* @return
*/
public static HashMap<String, VoteDetermination> parserRetourListeVotesDetermination(String votesString) {
 
HashMap<String, VoteDetermination> retour = null;
 
JSONObject votes = JSONParser.parseStrict(votesString).isObject();
if (votes != null && votes.get("resultats") != null && votes.get("resultats").isObject() != null) {
JSONObject resultat = votes.get("resultats").isObject();
retour = parserVotesDetermination(resultat);
}
return retour;
}
 
/**
* Recupere une liste de votes sur une determination à partir d'un objet
* JSON
*
* @param imageJson
* @return
*/
public static HashMap<String, VoteDetermination> parserVotesDetermination(JSONObject votes) {
HashMap<String, VoteDetermination> votesDetermination = new HashMap<String, VoteDetermination>();
java.util.Iterator<String> itVotes = votes.keySet().iterator();
while (itVotes.hasNext()) {
JSONObject vote = votes.get(itVotes.next()).isObject();
VoteDetermination vd = new VoteDetermination();
vd.setContributeur(getValeurOuVide(vote, "auteur.id"));
vd.setDate(parserDateObservation(getValeurOuVide(vote, "date")));
vd.setId(getValeurOuVide(vote, "vote.id"));
vd.setVote(Integer.parseInt(getValeurOuVide(vote, "vote")));
vd.setContributeur(getValeurOuVide(vote, "auteur.id"));
 
if (vote.get("auteur.nom") != null && vote.get("auteur.nom") != null && vote.get("auteur.courriel") != null) {
Contributeur auteur = new Contributeur(getValeurOuVide(vote, "auteur.id"), getValeurOuVide(vote, "auteur.nom"), getValeurOuVide(vote, "auteur.prenom"), getValeurOuVide(vote, "auteur.courriel"));
vd.setAuteur(auteur);
}
 
votesDetermination.put(getValeurOuVide(vote, "auteur.id"), vd);
}
return votesDetermination;
}
 
/**
* Recupere une liste de votes sur des images à partir d'un objet JSON
*
* @param imageJson
* @return
*/
public static HashMap<String, HashMap<String, VoteProtocole>> parserVotesProtocoles(JSONObject votes) {
 
HashMap<String, HashMap<String, VoteProtocole>> votesProtocoles = new HashMap<String, HashMap<String, VoteProtocole>>();
java.util.Iterator<String> itProtocoles = votes.keySet().iterator();
while (itProtocoles.hasNext()) {
JSONObject protocole = votes.get(itProtocoles.next()).isObject();
JSONObject votesPourCeProtocoles = protocole.get("votes").isObject();
String idProtocoleVote = protocole.get("protocole.id").isString().stringValue();
java.util.Iterator<String> itVotes = votesPourCeProtocoles.keySet().iterator();
while (itVotes.hasNext()) {
JSONObject voteEnCours = votesPourCeProtocoles.get(itVotes.next()).isObject();
VoteProtocole vd = new VoteProtocole();
vd.setContributeur(voteEnCours.get("auteur.id").isString().stringValue());
vd.setId(voteEnCours.get("vote.id").isString().stringValue());
// TODO récupérer la date du vote et la parser
vd.setDate(parserDateObservation(getValeurOuVide(voteEnCours, "date")));
int valeurVote = Integer.parseInt(voteEnCours.get("vote").isString().stringValue());
vd.setVote(valeurVote);
if (!votesProtocoles.containsKey(idProtocoleVote)) {
votesProtocoles.put(idProtocoleVote, new HashMap<String, VoteProtocole>());
}
// un seul vote par utilisateur - garde le premier pour être cohérent avec commun/Stats (PHP)
if (! votesProtocoles.get(idProtocoleVote).containsKey(vd.getContributeur())) {
votesProtocoles.get(idProtocoleVote).put(vd.getContributeur(), vd);
}
}
}
 
return votesProtocoles;
}
 
/**
* Recupere une date à partir du JSON
*
* @param imageJson
* @return
*/
public static Date parserDateObservation(String date) {
Date dateParsee = new Date();
DateTimeFormat formatDateObs = DateTimeFormat.getFormat("yyyy-MM-dd HH:mm:ss");
try {
dateParsee = formatDateObs.parse(date);
} catch (IllegalArgumentException e) {
dateParsee = new java.sql.Date(0);
}
return dateParsee;
}
 
/**
* Recupere des mots-clefs à partir du JSON
*
* @param imageJson
* @return
*/
public static List<String> parserMotsCles(String motsClesTexte) {
String[] tabMotsCle = motsClesTexte.split(",");
List<String> motsClesParses = new ArrayList<String>();
for (int i = 0; i < tabMotsCle.length; i++) {
motsClesParses.add(tabMotsCle[i].trim());
}
 
return motsClesParses;
}
 
public static String getIdAvecPadding(String id) {
int maxZeros = 9 - id.length();
for (int i = 0; i < maxZeros; i++) {
id = "0" + id;
}
return id;
}
 
/**
* Recupere un utilisateur à partir du JSON
*
* @param imageJson
* @return
*/
public static Utilisateur parserUtilisateurJson(JSONValue valeurJson) {
JSONObject utilisateurJson = valeurJson.isObject();
boolean connecteUtilisateur = utilisateurJson.get("connecte").isBoolean().booleanValue();
String idUtilisateur = utilisateurJson.get("id_utilisateur").isString().stringValue();
String sessionId = utilisateurJson.get("session_id").isString().stringValue();
GWT.log(valeurJson.toString());
Utilisateur utilisateur;
if (connecteUtilisateur) {
String courrielUtilisateur = utilisateurJson.get("courriel").isString().stringValue();
String nomUtilisateur = utilisateurJson.get("nom").isString().stringValue();
String prenomUtilisateur = utilisateurJson.get("prenom").isString().stringValue();
String adminNiveau = "";
if (utilisateurJson.get("admin").isString() != null) {
adminNiveau = utilisateurJson.get("admin").isString().stringValue();
}
//String nbEvtsUtilisateur = utilisateurJson.get("nb_evenements").isString().stringValue();
String dateDerniereConsultationEvts = utilisateurJson.get("date_derniere_consultation_evenements").isString().stringValue();
 
utilisateur = new Utilisateur(sessionId, idUtilisateur, prenomUtilisateur, nomUtilisateur,
courrielUtilisateur, adminNiveau);
ActiviteUtilisateur activite = new ActiviteUtilisateur();
//activite.setNbEvenements(nbEvtsUtilisateur);
activite.setDateDerniereConsultationEvenements(dateDerniereConsultationEvts);
utilisateur.setActivite(activite);
} else {
utilisateur = new Utilisateur(sessionId, idUtilisateur);
}
return utilisateur;
}
 
/**
* Recupere des informations d'authentification à partir du JSON renvoyé par les
* services Auth de l'annuaire (SSO)
*
* @param valeurJson
* @return AuthInfo
*/
public static AuthInfo parserAuthJson(JSONValue valeurJson) {
AuthInfo authInfo = new AuthInfo();
JSONObject authJson = valeurJson.isObject();
 
JSONValue erreurJSON = authJson.get("error");
// test si erreur
if (erreurJSON != null) {
JSONString erreur = erreurJSON.isString();
if (erreur != null) {
authInfo.error = erreur.stringValue();
} else {
authInfo.error = "erreur d'authentification";
}
} else {
boolean session = authJson.get("session").isBoolean().booleanValue();
authInfo.session = session;
// test si session ouverte
if (session) {
JSONValue tokenJson = authJson.get("token");
String token = null;
// protection paranoïaque
if (tokenJson != null) {
JSONString tokenString = tokenJson.isString();
if (tokenString != null) {
token = tokenString.stringValue();
}
}
String tokenId = authJson.get("token_id").isString().stringValue();
int duration = (int) authJson.get("duration").isNumber().doubleValue();
JSONValue lastModifJson = authJson.get("last_modif");
 
authInfo.token = token;
authInfo.tokenId = tokenId;
authInfo.duration = duration;
// test si lastModif est null
if (lastModifJson != null) {
JSONNumber lastModif = lastModifJson.isNumber();
if (lastModif != null) {
authInfo.lastModif = (int) lastModif.doubleValue();
}
}
}
}
//GWT.log(valeurJson.toString());
return authInfo;
}
/**
* Recupere un utilisateur à partir du JSON
*
* @param imageJson
* @return
*/
public static HashMap<String, String> parserPreferencesUtilisateur(JSONValue valeurJson) {
JSONObject utilisateurJson = valeurJson.isObject();
HashMap<String, String> preferences = new HashMap<String, String>();
JSONObject preferencesJson = utilisateurJson.get("preferences").isObject();
java.util.Iterator<String> it = preferencesJson.keySet().iterator();
while (it.hasNext()) {
String cle = it.next();
preferences.put(cle, preferencesJson.get(cle).isString().stringValue());
}
return preferences;
}
 
/**
* Retourne un objet {@link ProtocoleServiceResultat} à partir d'un objet
* JSON
*
* @param retourJson
* @return
*/
public static ProtocoleServiceResultat parserProtocoleServiceResultat(JSONValue retourJson) {
List<Protocole> protocoles = new ArrayList<Protocole>();
JSONObject tableauProto = retourJson.isObject().get("resultats").isObject();
 
if (tableauProto != null) {
java.util.Iterator<String> it = tableauProto.keySet().iterator();
while (it.hasNext()) {
 
JSONObject protocoleJSON = tableauProto.get(it.next()).isObject();
Protocole protocole = new Protocole();
String idProtocole = UtilitairesServiceResultat.getValeurOuVide(protocoleJSON, "protocole.id");
protocole.setId(Integer.parseInt(idProtocole));
String doitEtreIdentifiePourVoter = UtilitairesServiceResultat.getValeurOuVide(protocoleJSON, "protocole.identifie");
boolean boolDoitEtreIdentifie = doitEtreIdentifiePourVoter.equals("1") ? true : false;
protocole.setDoitEtreIdentifiePourVoter(boolDoitEtreIdentifie);
protocole.setNom(UtilitairesServiceResultat.getValeurOuVide(protocoleJSON, "protocole.intitule"));
protocole.setDescription(UtilitairesServiceResultat.getValeurOuVide(protocoleJSON, "protocole.descriptif"));
protocole.setTag(UtilitairesServiceResultat.getValeurOuVide(protocoleJSON, "protocole.tag"));
protocole.setMotsClesProtocole(UtilitairesServiceResultat.getValeurOuVide(protocoleJSON, "protocole.mots_cles"));
protocoles.add(protocole);
}
}
 
return new ProtocoleServiceResultat(protocoles);
}
 
/**
* Retourne un objet {@link ImageServiceResultat} à partir du JSON
*
* @param retourJson
* @return
*/
public static ImageServiceResultat parserImageServiceResultat(JSONValue retourJson) {
 
ImageServiceResultat imageServiceResultat = new ImageServiceResultat();
int nbTotalImagesPourLaRecherche;
 
List<Image> images = new ArrayList<Image>();
// TODO ajouter vérifications plus précises
if (retourJson.isObject().get("entete") != null) {
double total = retourJson.isObject().get("entete").isObject().get("total").isNumber().doubleValue();
nbTotalImagesPourLaRecherche = (int) total;
// ATTENTION : "resultats" devrait contenir un array car il garantit l'ordre ce qui est important pour
// résultat de recherche. Migration progressive des ws pour qu'ils retourne un array et non un objet.
if (retourJson.isObject().get("resultats").isObject() != null) {
// TODO : supprimer cette condition quand tous les ws seront migrés vers array.
JSONObject tableauImg = retourJson.isObject().get("resultats").isObject();
if (tableauImg != null) {
java.util.Iterator<String> it = tableauImg.keySet().iterator();
while (it.hasNext()) {
JSONObject imageJson = tableauImg.get(it.next()).isObject();
Image image = parserRetourImage(imageJson);
images.add(image);
}
}
} else if (retourJson.isObject().get("resultats").isArray() != null) {
JSONArray tableauImg = retourJson.isObject().get("resultats").isArray();
if (tableauImg != null) {
int nbInfosImagesRetournees = (int) tableauImg.size();
for (int i = 0; i < nbInfosImagesRetournees; i++) {
JSONObject imageJson = tableauImg.get(i).isObject();
Image image = parserRetourImage(imageJson);
images.add(image);
}
}
}
} else {
JSONArray tableauImg = retourJson.isObject().get("images").isArray();
nbTotalImagesPourLaRecherche = (int) tableauImg.size();
for (int i = 0; i < nbTotalImagesPourLaRecherche; i++) {
JSONObject imageJson = tableauImg.get(i).isObject();
Image image = parserRetourImage(imageJson);
images.add(image);
}
}
 
imageServiceResultat.setImages(images);
imageServiceResultat.setNbTotalImagesPourLaRecherche(nbTotalImagesPourLaRecherche);
 
return imageServiceResultat;
 
}
 
/**
* Retourne un objet {@link Image} à partir du JSON
*
* @param retourJson
* @return
*/
public static Image parserRetourImage(JSONObject imageJson) {
Image image = UtilitairesServiceResultat.parserImageJSON(imageJson);
 
if (imageJson.get("observation") != null && imageJson.get("observation").isObject() != null) {
JSONObject observationJson = imageJson.get("observation").isObject();
image.setObservation(UtilitairesServiceResultat.parserObservationJSON(observationJson));
}
 
if (imageJson.get("protocoles_votes") != null && imageJson.get("protocoles_votes").isObject() != null) {
JSONObject votes = imageJson.get("protocoles_votes").isObject();
image.setVoteProtocoles(UtilitairesServiceResultat.parserVotesProtocoles(votes));
}
 
return image;
}
 
/**
* Retourne un objet {@link ObservationServiceResultat} à partir du JSON
*
* @param retourJson
* @return
*/
public static ObservationServiceResultat parserObservationServiceResultat(JSONValue retourJson) {
 
ObservationServiceResultat observationServiceResultat = new ObservationServiceResultat();
 
List<Observation> observations = new ArrayList<Observation>();
int nbTotalObservationsPourLaRecherche = 0;
 
if (retourJson.isObject().get("entete") != null) {
// TODO ajouter vérifications plus précises
double total = retourJson.isObject().get("entete").isObject().get("total").isNumber().doubleValue();
nbTotalObservationsPourLaRecherche = (int) total;
JSONArray tableauObs = retourJson.isObject().get("resultats").isArray();
 
if (tableauObs != null) {
for(int i = 0; i < tableauObs.size(); i++) {
JSONObject observationJson = tableauObs.get(i).isObject();
Observation observation = analyserObservation(observationJson);
observations.add(observation);
}
}
} else {
JSONObject observationJson = retourJson.isObject();
Observation observation = analyserObservation(observationJson);
observations.add(observation);
CacheClient.getInstance().setObservationCourante(observation);
}
 
observationServiceResultat.setObservations(observations);
observationServiceResultat.setNbTotalObservationsPourLaRecherche(nbTotalObservationsPourLaRecherche);
 
return observationServiceResultat;
}
 
/**
* Retourne un objet {@link Observation} avec ses {@link Image} associées à
* partir du JSON
*
* @param retourJson
* @return
*/
private static Observation analyserObservation(JSONObject observationJson) {
Observation observation = UtilitairesServiceResultat.parserObservationJSON(observationJson);
JSONArray tableauImagesObs = observationJson.get("images").isArray();
List<Image> imagesPourObs = new ArrayList<Image>();
 
int nbImages = tableauImagesObs.size();
for (int j = 0; j < nbImages; j++) {
JSONObject imageJson = tableauImagesObs.get(j).isObject();
 
Image image = UtilitairesServiceResultat.parserImageJSON(imageJson);
if (imageJson.get("protocoles_votes") != null && imageJson.get("protocoles_votes").isObject() != null) {
JSONObject votes = imageJson.get("protocoles_votes").isObject();
image.setVoteProtocoles(UtilitairesServiceResultat.parserVotesProtocoles(votes));
}
image.setObservation(observation);
imagesPourObs.add(image);
}
 
observation.setImages(imagesPourObs);
 
return observation;
}
 
public static List<MotCle> parserRetourListeMotsClesImage(JSONObject retourJson) {
List<MotCle> motsCles = new ArrayList<MotCle>();
JSONObject tableauMc = retourJson;
if (tableauMc != null) {
java.util.Iterator<String> it = tableauMc.keySet().iterator();
while (it.hasNext()) {
JSONObject mc = tableauMc.get(it.next()).isObject();
MotCle motCle = new MotCle(getValeurOuVide(mc, "id_mot_cle"), getValeurOuVide(mc, "image"), getValeurOuVide(mc, "mot_cle"));
motsCles.add(motCle);
}
}
return motsCles;
}
 
public static String parserRetourAjoutVoteProtocole(JSONObject retour) {
String id = "";
if (retour != null) {
id = getValeurOuVide(retour, "id_vote");
}
return id;
}
 
public static Map<String, String> parserListePays(JSONValue retourJson) {
Map<String, String> listePays = new LinkedHashMap<String, String>();
JSONArray tableauPays = retourJson.isArray();
int nbPays = (int) tableauPays.size();
for (int i = 0; i < nbPays; i++) {
JSONObject pays = tableauPays.get(i).isObject();
listePays.put(pays.get("code_iso_3166_1").isString().stringValue(), pays.get("nom_fr").isString().stringValue());
}
return listePays;
}
 
public static ActiviteUtilisateur parserActiviteUtilisateurJson(JSONValue valeurJson) {
JSONObject activiteJson = valeurJson.isObject();
//String nbEvtsUtilisateur = activiteJson.get("nb_evenements").isString().stringValue();
String dateDerniereConsultationEvts = activiteJson.get("date_derniere_consultation_evenements").isString().stringValue();
 
ActiviteUtilisateur activite = new ActiviteUtilisateur();
//activite.setNbEvenements(nbEvtsUtilisateur);
activite.setDateDerniereConsultationEvenements(dateDerniereConsultationEvts);
return activite;
}
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/exceptions/ExceptionClient.java
New file
0,0 → 1,42
package org.tela_botanica.del.client.exceptions;
 
import com.google.gwt.user.client.rpc.IsSerializable;
 
/**
* An exception that can be displayed on the client side. It can receive an
* exception from server and display the message in the client.
*
* @author Benjamin
*
*/
public class ExceptionClient extends Exception implements IsSerializable {
 
/**
*
*/
private static final long serialVersionUID = 636898773374000925L;
 
private String clientMessage;
 
public ExceptionClient(String exceptionMessage) {
super();
clientMessage = exceptionMessage;
}
 
public ExceptionClient(Exception e) {
super(e);
clientMessage = e.getMessage();
}
 
public ExceptionClient() {
}
 
public String getClientMessage() {
return clientMessage;
}
 
public void setClientMessage(String clientMessage) {
this.clientMessage = clientMessage;
}
 
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/vues/identiplante/moteur/MoteurIdentiplante.css
New file
0,0 → 1,35
.entrerMotClef {
margin-bottom: 10px;
font-size:12px
}
 
.lienProposerObservation {
margin-left:65px;
margin-top:10px;
margin-bottom:10px;
}
.zoneStatut {
margin-top:;
}
 
.zoneStatut span {
padding-right:10px;
}
 
.zoneStatut label {
padding-left:2px;
}
 
 
.titreRechercheObs {
margin-top:5px;
}
 
.lienAide {
margin-right:70px;
padding:4px 15px;
margin-top:9px;
float:right;
color:white;
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/vues/identiplante/moteur/MoteurIdentiplanteVue.ui.xml
New file
0,0 → 1,29
<ui:UiBinder xmlns:ui="urn:ui:com.google.gwt.uibinder"
xmlns:g="urn:import:com.google.gwt.user.client.ui"
ui:generateFormat="com.google.gwt.i18n.rebind.format.PropertiesFormat"
ui:generateLocales="default">
<ui:with field="res" type="org.tela_botanica.del.client.resources.Ressources" />
<ui:with field="constants" type="org.tela_botanica.del.client.i18n.Vocabulary" />
<ui:style src="MoteurIdentiplante.css" />
<g:HTMLPanel styleName="limiteMaxResultat">
<g:HTMLPanel styleName="limiteMax importance1">
<g:Label text="{constants.rechercherObservation}" styleName="titre {style.titreRechercheObs}" />
<g:Label text="{constants.entrerMotClef}" styleName="gris {style.entrerMotClef}" />
<g:HTMLPanel ui:field="zoneRecherche" />
</g:HTMLPanel>
<g:HTMLPanel styleName="zone-onglets">
<g:Label styleName="onglet onglet-actif" text="{constants.ongletTous}" ui:field="ongletTout"></g:Label>
<g:Label styleName="onglet" text="{constants.ongletADeterminer}" ui:field="ongletADeterminer"></g:Label>
<g:Label styleName="onglet" text="{constants.ongletAConfirmer}" ui:field="ongletAConfirmer"></g:Label>
<!-- terme Validées/Vérifiées sujet à changement, "Vérifiées" en texte, "Validées" partout ailleurs dans le code -->
<g:Label styleName="onglet" text="{constants.ongletVerifiees}" ui:field="ongletValidees"></g:Label>
<!-- terme Validées/Vérifiées sujet à changement, "Vérifiées" en texte, "Validées" partout ailleurs dans le code -->
<g:HTML styleName="onglet ongletMonActivite" text=" " ui:field="ongletMonActivite"></g:HTML>
</g:HTMLPanel>
<g:HTMLPanel>
<g:HTMLPanel ui:field="zoneResultats" />
</g:HTMLPanel>
</g:HTMLPanel>
</ui:UiBinder>
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/vues/identiplante/moteur/MoteurIdentiplantePresenteur.java
New file
0,0 → 1,212
package org.tela_botanica.del.client.vues.identiplante.moteur;
 
import org.tela_botanica.del.client.cache.CacheClient;
import org.tela_botanica.del.client.composants.moteurrecherche.MoteurRecherchePresenteur;
import org.tela_botanica.del.client.composants.moteurrecherche.MoteurRechercheVue;
import org.tela_botanica.del.client.composants.partageurl.PartageUrlPresenteur;
import org.tela_botanica.del.client.composants.partageurl.PartageUrlVue;
import org.tela_botanica.del.client.composants.presenteur.Presenteur;
import org.tela_botanica.del.client.config.Config;
import org.tela_botanica.del.client.gestionhistorique.ConstantesNavigation;
import org.tela_botanica.del.client.modeles.ActiviteUtilisateur;
import org.tela_botanica.del.client.modeles.ModeRecherche;
import org.tela_botanica.del.client.modeles.Utilisateur;
import org.tela_botanica.del.client.navigation.evenement.BusEvenementiel;
import org.tela_botanica.del.client.navigation.evenement.changementEtatUtilisateur.EvenementChangementEtatUtilisateur;
import org.tela_botanica.del.client.navigation.evenement.changementEtatUtilisateur.GestionnaireEvenementChangementEtatUtilisateur;
import org.tela_botanica.del.client.services.rest.ObservationService;
import org.tela_botanica.del.client.services.rest.ObservationServiceConcret;
import org.tela_botanica.del.client.services.rest.UtilisateurServiceConcret;
import org.tela_botanica.del.client.services.rest.async.ActiviteUtilisateurCallback;
import org.tela_botanica.del.client.utils.Analytics;
import org.tela_botanica.del.client.vues.identiplante.resultats.ResultatsIdentiplantePresenteur;
import org.tela_botanica.del.client.vues.identiplante.resultats.ResultatsIdentiplanteVue;
 
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.event.dom.client.HasClickHandlers;
import com.google.gwt.user.client.Timer;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.ui.HasWidgets;
import com.google.gwt.user.client.ui.IsWidget;
import com.google.gwt.user.client.ui.Panel;
 
public class MoteurIdentiplantePresenteur extends Presenteur {
 
public interface Vue extends IsWidget {
public HasWidgets getZoneRecherche();
 
public HasWidgets getZoneResultats();
 
public HasClickHandlers getOngletAConfirmer();
public HasClickHandlers getOngletADeterminer();
public HasClickHandlers getOngletTout();
 
public HasClickHandlers getOngletValidees();
public HasClickHandlers getOngletMonActivite();
public void setOngletADeterminerActif();
public void setOngletToutActif();
public void setOngletAConfirmerActif();
 
public void setOngletValideesActif();
 
void afficherCacherOngletMonActivite(boolean afficher);
 
void setOngletMonActiviteActif();
 
void setOngletActif(String onglet);
 
public void afficherNbEvenements(String nbEvenements);
public void cacherNbEvenements();
}
 
private Vue vue;
private Timer timerRequeteActiviteUtilisateur = null;
 
public MoteurIdentiplantePresenteur(ObservationService serviceObs, Vue vue) {
this.vue = vue;
}
 
public void go(HasWidgets composite) {
 
composite.add(vue.asWidget());
ajouterMoteurRechercheAvancee();
gererEvenements();
gererAffichageOngletMonActivite();
gererTimerRequeteActiviteUtilisateur();
}
 
private void gererAffichageOngletMonActivite() {
vue.afficherCacherOngletMonActivite(CacheClient.getInstance().getUtilisateur().estIdentifie());
BusEvenementiel.getInstance().addHandler(EvenementChangementEtatUtilisateur.TYPE, new GestionnaireEvenementChangementEtatUtilisateur() {
@Override
public void onModificationEtatUtilisateur(EvenementChangementEtatUtilisateur evenementChangementEtatUtilisateur) {
Utilisateur utilisateur = CacheClient.getInstance().getUtilisateur();
vue.afficherCacherOngletMonActivite(utilisateur.estIdentifie());
vue.cacherNbEvenements();
if(!utilisateur.estIdentifie()) {
activerOnglet("tous");
} else {
if(utilisateur.getActivite().getNbEvenementsInt() > 0) {
vue.afficherNbEvenements(utilisateur.getActivite().getNbEvenements());
CacheClient.ajouterAuTitreOngletNavigateur(" ("+utilisateur.getActivite().getNbEvenements()+")");
}
}
}
});
}
 
protected void ajouterMoteurRechercheAvancee() {
MoteurRecherchePresenteur presenteur = new MoteurRecherchePresenteur(new MoteurRechercheVue("") {
}, ModeRecherche.MODE_OBSERVATION) {
 
@Override
public void lancerRecherche() {
chercherObservations();
}
};
presenteur.go(vue.getZoneRecherche());
}
 
public void chercherObservations() {
vue.getZoneResultats().clear();
CacheClient.getInstance().mettreAjourUrlCourante();
new ResultatsIdentiplantePresenteur(new ObservationServiceConcret(), new ResultatsIdentiplanteVue()).go(vue.getZoneResultats());
}
 
protected void gererEvenements() {
// Gestion du clic sur les onglets
vue.getOngletTout().addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
activerOnglet("tous");
// stats
Analytics.pageVisitee("Identiplante/tous");
}
});
vue.getOngletADeterminer().addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
activerOnglet("adeterminer");
// stats
Analytics.pageVisitee("Identiplante/adeterminer");
}
});
vue.getOngletAConfirmer().addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
activerOnglet("aconfirmer");
// stats
Analytics.pageVisitee("Identiplante/aconfirmer");
}
});
 
vue.getOngletValidees().addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
activerOnglet("validees");
// stats
Analytics.pageVisitee("Identiplante/validees");
}
});
vue.getOngletMonActivite().addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
// S'il y a de nouveau évènements sur l'obs, on les affichera tous sur la même page (dans la limite de 50)
int nbEvents = CacheClient.getInstance().getUtilisateur().getActivite().getNbEvenementsInt();
nbEvents = Math.min(nbEvents, 50);
if(CacheClient.getInstance().getPasPagination() < nbEvents) {
CacheClient.getInstance().setPasPagination(nbEvents);
}
activerOnglet("monactivite");
// stats
Analytics.pageVisitee("Identiplante/monactivite");
vue.cacherNbEvenements();
CacheClient.reinitialiserTitreOngletNavigateur();
}
});
}
public void gererTimerRequeteActiviteUtilisateur() {
timerRequeteActiviteUtilisateur = new Timer() {
@Override
public void run() {
Utilisateur utilisateur = CacheClient.getInstance().getUtilisateur();
if(utilisateur.estIdentifie()) {
UtilisateurServiceConcret serviceUtilisateur = new UtilisateurServiceConcret();
serviceUtilisateur.obtenirActiviteUtilisateur(utilisateur.getId(), new ActiviteUtilisateurCallback() {
@Override
public void surRetour(ActiviteUtilisateur activite) {
CacheClient.getInstance().getUtilisateur().setActivite(activite);
if(activite.getNbEvenementsInt() > 0) {
vue.afficherNbEvenements(activite.getNbEvenements());
CacheClient.ajouterAuTitreOngletNavigateur(" ("+activite.getNbEvenements()+")");
}
}
});
}
}
};
timerRequeteActiviteUtilisateur.scheduleRepeating(30000);
}
protected void activerOnglet(String onglet) {
CacheClient.getInstance().setFiltreStatut(onglet);
CacheClient.getInstance().setPageCouranteRechercheObservations(1);
chercherObservations();
vue.setOngletActif(onglet);
}
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/vues/identiplante/moteur/MoteurIdentiplanteVue.java
New file
0,0 → 1,146
package org.tela_botanica.del.client.vues.identiplante.moteur;
 
import org.tela_botanica.del.client.cache.CacheClient;
 
import com.google.gwt.core.client.GWT;
import com.google.gwt.event.dom.client.HasClickHandlers;
import com.google.gwt.uibinder.client.UiBinder;
import com.google.gwt.uibinder.client.UiField;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.FocusPanel;
import com.google.gwt.user.client.ui.HTML;
import com.google.gwt.user.client.ui.HasWidgets;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.Panel;
import com.google.gwt.user.client.ui.Widget;
 
public class MoteurIdentiplanteVue extends Composite implements MoteurIdentiplantePresenteur.Vue {
 
// Gestion d'UiBinder
interface Binder extends UiBinder<Widget, MoteurIdentiplanteVue> {
}
 
private static Binder binder = GWT.create(Binder.class);
 
@UiField
Panel zoneRecherche, zoneResultats;
 
@UiField
Label ongletTout, ongletADeterminer, ongletAConfirmer, ongletValidees;
@UiField
HTML ongletMonActivite;
 
public HasWidgets getZoneRecherche() {
return zoneRecherche;
}
// Constructeur de la vue
public MoteurIdentiplanteVue() {
initWidget(binder.createAndBindUi(this));
mettreAJourOngletEnFonctionDuCache();
}
 
public Panel getZoneResultats() {
return zoneResultats;
}
@Override
public HasClickHandlers getOngletAConfirmer() {
return ongletAConfirmer;
}
 
@Override
public HasClickHandlers getOngletADeterminer() {
return ongletADeterminer;
}
 
@Override
public HasClickHandlers getOngletTout() {
return ongletTout;
}
 
@Override
public HasClickHandlers getOngletValidees() {
return ongletValidees;
}
@Override
public void afficherCacherOngletMonActivite(boolean afficher) {
ongletMonActivite.setVisible(afficher);
}
 
@Override
public HasClickHandlers getOngletMonActivite() {
return ongletMonActivite;
}
 
@Override
public void setOngletADeterminerActif() {
nettoyerOngletsActifs();
ongletADeterminer.addStyleName("onglet-actif");
}
 
@Override
public void setOngletToutActif() {
nettoyerOngletsActifs();
ongletTout.addStyleName("onglet-actif");
}
 
@Override
public void setOngletAConfirmerActif() {
nettoyerOngletsActifs();
ongletAConfirmer.addStyleName("onglet-actif");
}
 
@Override
public void setOngletValideesActif() {
nettoyerOngletsActifs();
ongletValidees.addStyleName("onglet-actif");
}
@Override
public void setOngletMonActiviteActif() {
nettoyerOngletsActifs();
ongletMonActivite.addStyleName("onglet-actif");
}
public void nettoyerOngletsActifs() {
ongletTout.removeStyleName("onglet-actif");
ongletADeterminer.removeStyleName("onglet-actif");
ongletAConfirmer.removeStyleName("onglet-actif");
ongletValidees.removeStyleName("onglet-actif");
ongletMonActivite.removeStyleName("onglet-actif");
}
@Override
public void setOngletActif(String onglet) {
if (onglet == null || onglet.equals("tous")) {
setOngletToutActif();
} else if (onglet.equals("adeterminer")) {
setOngletADeterminerActif();
} else if (onglet.equals("aconfirmer")) {
setOngletAConfirmerActif();
} else if (onglet.equals("validees")) {
setOngletValideesActif();
} else if (onglet.equals("monactivite")) {
setOngletMonActiviteActif();
}
}
public void mettreAJourOngletEnFonctionDuCache() {
String statut = CacheClient.getInstance().getFiltreStatut();
setOngletActif(statut);
}
 
@Override
public void afficherNbEvenements(String nbEvenements) {
String HtmlIndication = "<div class=\"nbEvenementsMonActivite\">"+nbEvenements+"</div>";
ongletMonActivite.setHTML(HtmlIndication);
}
 
@Override
public void cacherNbEvenements() {
ongletMonActivite.setHTML("");
}
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/vues/identiplante/plateformedetermination/IdentiplanteDeterminationVue.ui.xml
New file
0,0 → 1,53
<!DOCTYPE ui:UiBinder SYSTEM "http://dl.google.com/gwt/DTD/xhtml.ent">
<ui:UiBinder
xmlns:ui='urn:ui:com.google.gwt.uibinder'
xmlns:g='urn:import:com.google.gwt.user.client.ui'
xmlns:forum="urn:import:org.tela_botanica.del.client.composants.forum">
<ui:with field="constants" type="org.tela_botanica.del.client.i18n.Vocabulary"/>
<ui:style src="determinationVue.css" />
<g:HTMLPanel styleName="{style.pageDetermination}">
<g:HTMLPanel styleName="limiteMax">
<g:HTMLPanel styleName="{style.limiteZoneMenu}">
<g:Hyperlink ui:field="lienRetour" styleName="lienRetour">Retour</g:Hyperlink>
<g:HTMLPanel ui:field="zoneActionsObs">
<g:Button ui:field="btnDepublierObs" text="{constants.depublierObs}" styleName="droite bouton {style.btnDepublierObs}" />
</g:HTMLPanel>
</g:HTMLPanel>
<g:HTMLPanel styleName="{style.limiteZoneMetadonnees}">
<g:HTMLPanel ui:field="metadonnees" styleName="{style.metadonnees}" />
</g:HTMLPanel>
</g:HTMLPanel>
<g:HTMLPanel styleName="contenuCentre">
<g:HTMLPanel styleName="{style.zoneDetailImage}">
<g:VerticalPanel ui:field="detailImageObservation" styleName="{style.zoneImage}" />
</g:HTMLPanel>
<g:HTMLPanel styleName="{style.zoneVote}">
<g:Label styleName="titre" text="{constants.titreDetermination}" />
<g:HTMLPanel styleName="nettoyage {style.boutons}">
<g:Button text="{constants.proposerSaDetermination}" ui:field="boutonAjoutProposition" styleName="bouton" />
<g:Button text="{constants.ajouterCommentaire}" ui:field="boutonAjoutCommentaire" styleName="bouton" />
<g:HTMLPanel ui:field="zoneRss" styleName="droite {style.zonerss}"></g:HTMLPanel>
</g:HTMLPanel>
<g:VerticalPanel ui:field="forum" />
<g:HTMLPanel styleName="nettoyage {style.boutons}">
<g:Button text="{constants.proposerSaDetermination}" ui:field="boutonAjoutPropositionBas" styleName="bouton" />
<g:Button text="{constants.ajouterCommentaire}" ui:field="boutonAjoutCommentaireBas" styleName="bouton" />
</g:HTMLPanel>
</g:HTMLPanel>
<g:HTMLPanel styleName="{style.zoneOutils}">
<g:Label text="Pour vous aider : " styleName="titre3"></g:Label>
<g:VerticalPanel ui:field="formulaireRechercheEflore"/>
<g:Label styleName="{style.autreOutils} sousTitre">Vérifier sa détermination</g:Label>
<g:Label styleName="lienListe labelLien" ui:field="lienEflore">eFlore</g:Label>
<g:Label styleName="{style.autreOutils} sousTitre">Autres outils en ligne</g:Label>
<g:Label styleName="lienListe labelLien" ui:field="lienOuvrages">Flores numérisées</g:Label>
<g:Label styleName="lienListe labelLien" ui:field="lienBonnier">Flore Bonnier interactive</g:Label>
<g:Label styleName="lienListe labelLien" ui:field="lienCles">Clés de détermination</g:Label>
</g:HTMLPanel>
</g:HTMLPanel>
</g:HTMLPanel>
</ui:UiBinder>
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/vues/identiplante/plateformedetermination/IdentiplanteDeterminationPresenteur.java
New file
0,0 → 1,325
package org.tela_botanica.del.client.vues.identiplante.plateformedetermination;
 
import java.util.List;
 
import org.tela_botanica.del.client.cache.CacheClient;
import org.tela_botanica.del.client.composants.fenetreoverlay.FenetreOverlayDefilanteVue;
import org.tela_botanica.del.client.composants.fenetreoverlay.FenetreOverlaySimplePresenteur;
import org.tela_botanica.del.client.composants.formulaires.formulairecommentaire.FormulaireCommentairePresenteur;
import org.tela_botanica.del.client.composants.formulaires.formulairecommentaire.FormulaireCommentaireVue;
import org.tela_botanica.del.client.composants.formulaires.formulaireproposition.FormulairePropositionPresenteur;
import org.tela_botanica.del.client.composants.formulaires.formulaireproposition.FormulairePropositionVue;
import org.tela_botanica.del.client.composants.metadonnees.MetadonneesEnLigneVue;
import org.tela_botanica.del.client.composants.metadonnees.MetadonneesPresenteur;
import org.tela_botanica.del.client.composants.observations.ObservationImagesPresenteur;
import org.tela_botanica.del.client.composants.observations.ObservationImagesVue;
import org.tela_botanica.del.client.composants.presenteur.Presenteur;
import org.tela_botanica.del.client.composants.rss.RssPresenteur;
import org.tela_botanica.del.client.composants.rss.RssVue;
import org.tela_botanica.del.client.config.Config;
import org.tela_botanica.del.client.i18n.I18n;
import org.tela_botanica.del.client.modeles.Image;
import org.tela_botanica.del.client.modeles.ModeRecherche;
import org.tela_botanica.del.client.modeles.MoyenneVote;
import org.tela_botanica.del.client.modeles.Observation;
import org.tela_botanica.del.client.modeles.ObservationServiceResultat;
import org.tela_botanica.del.client.modeles.PropositionDetermination;
import org.tela_botanica.del.client.modeles.Utilisateur;
import org.tela_botanica.del.client.modeles.VoteDetermination;
import org.tela_botanica.del.client.navigation.evenement.BusEvenementiel;
import org.tela_botanica.del.client.navigation.evenement.ajoutcommentaire.EvenementAjoutCommentaire;
import org.tela_botanica.del.client.navigation.evenement.ajoutcommentaire.GestionnaireEvenementAjoutCommentaire;
import org.tela_botanica.del.client.navigation.evenement.ajoutdetermination.EvenementAjoutDetermination;
import org.tela_botanica.del.client.navigation.evenement.ajoutdetermination.GestionnaireEvenementAjoutDetermination;
import org.tela_botanica.del.client.navigation.evenement.changementEtatUtilisateur.EvenementChangementEtatUtilisateur;
import org.tela_botanica.del.client.navigation.evenement.changementEtatUtilisateur.GestionnaireEvenementChangementEtatUtilisateur;
import org.tela_botanica.del.client.navigation.evenement.changementimagevalidation.EvenementChangementImageValidation;
import org.tela_botanica.del.client.navigation.evenement.changementimagevalidation.GestionnaireEvenementChangementImageValidation;
import org.tela_botanica.del.client.navigation.evenement.depublierObs.EvenementDepublierObs;
import org.tela_botanica.del.client.navigation.evenement.depublierObs.GestionnaireEvenementDepublierObs;
import org.tela_botanica.del.client.navigation.evenement.validationPropositionDetermination.EvenementValidationPropositionDetermination;
import org.tela_botanica.del.client.navigation.evenement.validationPropositionDetermination.GestionnaireEvenementValidationPropositionDetermination;
import org.tela_botanica.del.client.navigation.evenement.voteDetermination.EvenementVoteDetermination;
import org.tela_botanica.del.client.navigation.evenement.voteDetermination.GestionnaireEvenementVoteDetermination;
import org.tela_botanica.del.client.services.CalculVoteDeterminationService;
import org.tela_botanica.del.client.services.rest.CommentaireServiceConcret;
import org.tela_botanica.del.client.services.rest.ObservationService;
import org.tela_botanica.del.client.services.rest.PropositionDeterminationServiceConcret;
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.ValidationPropositionCallback;
import org.tela_botanica.del.client.utils.ModerationUtils;
import org.tela_botanica.del.client.utils.URLUtils;
import org.tela_botanica.del.client.navigation.evenement.rechercheobservation.EvenementRechercheObservation;
import org.tela_botanica.del.client.composants.formulairerechercheeflore.FormulaireRechercheEflorePresenteur;
import org.tela_botanica.del.client.composants.forum.ForumPresenteur;
import org.tela_botanica.del.client.composants.forum.ForumVue;
 
import com.google.gwt.core.shared.GWT;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.event.dom.client.HasClickHandlers;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.HasWidgets;
import com.google.gwt.user.client.ui.IsWidget;
import com.google.gwt.user.client.ui.Panel;
 
public class IdentiplanteDeterminationPresenteur extends Presenteur {
 
/**
* Vue de l'interface de détermination
* */
public interface Vue extends IsWidget {
public HasWidgets getForum();
 
public HasWidgets getDetailImageObservation();
 
public HasWidgets getFormulaireRechercheEflore();
 
public HasClickHandlers getBoutonAjoutProposition();
 
public HasClickHandlers getBoutonAjoutCommentaire();
 
public HasClickHandlers getBoutonAjoutPropositionBas();
 
public HasClickHandlers getBoutonAjoutCommentaireBas();
public HasClickHandlers getBoutonDepublierObs();
 
public HasWidgets getMetadonnees();
public HasClickHandlers getLienOuvrages();
public HasClickHandlers getLienBonnier();
public HasClickHandlers getLienCles();
public HasClickHandlers getLienEflore();
public HasWidgets getZoneRss();
 
public void viderMetadonnees();
public void viderForum();
void afficherZoneActionsObs();
void cacherZoneActionsObs();
}
 
private Observation observation;
private Vue vue;
private FenetreOverlaySimplePresenteur fenetreOverlaySimplePresenteur;
 
// Déclaration des services à utiliser
private ObservationService observationService;
 
private CacheClient cache = CacheClient.getInstance();
 
public IdentiplanteDeterminationPresenteur(Vue vue, ObservationService observationService) {
this.vue = vue;
this.observationService = observationService;
}
 
public void go(final HasWidgets composite) {
// TODO afficher une icone de chargement si le chargement devient trop
// long car tout l'écran est asynchrone ici
String observationId = URLUtils.getURLSpecialParameterValue();
observationService.getObservation(observationId, new ObservationsCallback() {
@Override
public void surRetour(ObservationServiceResultat objetRetour) {
observation = cache.getObservationCourante();
afficherRss(cache.getObservationCourante());
// trouve l'image courante si elle n'est pas deja en cache
List<Image> listeImages = cache.getObservationCourante().getImages();
if (listeImages.size() > 0) {
CacheClient.getInstance().setImageCourante(listeImages.get(0));
} else {
CacheClient.getInstance().setImageCourante(null);
}
new MetadonneesPresenteur(new MetadonneesEnLigneVue(), cache.getObservationCourante(), ModeRecherche.MODE_OBSERVATION, false).go(vue.getMetadonnees());
new ObservationImagesPresenteur(new ObservationImagesVue(), cache.getObservationCourante(), CacheClient.getInstance().getImageCourante()).go(vue.getDetailImageObservation());
new ForumPresenteur(new ForumVue()).go(vue.getForum());
new FormulaireRechercheEflorePresenteur().go(vue.getFormulaireRechercheEflore());
 
composite.add(vue.asWidget());
}
 
@Override
public void surErreur(String messageErreur) {
Window.alert(messageErreur + " - l'identifiant d'observation est incorrect; l'observation a peut-être été supprimée");
}
});
afficherZoneActionsObs();
gererEvenements();
}
 
public void afficherRss(Observation observation) {
new RssPresenteur(new RssVue(), observation, "Suivre cette observation").go(vue.getZoneRss());
}
 
public void gererEvenements() {
BusEvenementiel.getInstance().addHandler(EvenementAjoutDetermination.TYPE, new GestionnaireEvenementAjoutDetermination() {
@Override
public void onAjoutDetermination(EvenementAjoutDetermination event) {
if (fenetreOverlaySimplePresenteur != null && fenetreOverlaySimplePresenteur.fenetreModaleEstOuverte()) {
fenetreOverlaySimplePresenteur.fermerFenetreModale();
}
}
});
 
BusEvenementiel.getInstance().addHandler(EvenementAjoutCommentaire.TYPE, new GestionnaireEvenementAjoutCommentaire() {
@Override
public void onAjoutCommentaire(EvenementAjoutCommentaire event) {
if (fenetreOverlaySimplePresenteur != null && fenetreOverlaySimplePresenteur.fenetreModaleEstOuverte()) {
fenetreOverlaySimplePresenteur.fermerFenetreModale();
}
}
});
 
BusEvenementiel.getInstance().addHandler(EvenementChangementImageValidation.TYPE, new GestionnaireEvenementChangementImageValidation() {
@Override
public void onChangementImage(EvenementChangementImageValidation event) {
vue.getDetailImageObservation().clear();
new ObservationImagesPresenteur(
new ObservationImagesVue(),
cache.getObservationCourante(),
CacheClient.getInstance().getImageCourante()).go(vue.getDetailImageObservation());
}
});
 
ClickHandler clicAjoutProposition = new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
fenetreOverlaySimplePresenteur = new FenetreOverlaySimplePresenteur(new FenetreOverlayDefilanteVue());
fenetreOverlaySimplePresenteur.ouvrirFenetreModale(new FormulairePropositionPresenteur(new FormulairePropositionVue(), new PropositionDeterminationServiceConcret()));
}
};
vue.getBoutonAjoutProposition().addClickHandler(clicAjoutProposition);
vue.getBoutonAjoutPropositionBas().addClickHandler(clicAjoutProposition);
 
ClickHandler clicAjoutCommentaire = new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
FormulaireCommentairePresenteur commentairePresenteur = new FormulaireCommentairePresenteur(cache.getObservationCourante(), new CommentaireServiceConcret(), new FormulaireCommentaireVue());
fenetreOverlaySimplePresenteur = new FenetreOverlaySimplePresenteur(new FenetreOverlayDefilanteVue());
fenetreOverlaySimplePresenteur.ouvrirFenetreModale(commentairePresenteur);
}
};
vue.getBoutonAjoutCommentaire().addClickHandler(clicAjoutCommentaire);
vue.getBoutonAjoutCommentaireBas().addClickHandler(clicAjoutCommentaire);
 
vue.getLienOuvrages().addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
Config config = new Config();
Window.open(config.getUrl("ouvragesFlore"), "Flores numérisées", config.getInfo("popupOptions"));
}
});
 
vue.getLienBonnier().addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
Config config = new Config();
Window.open(config.getUrl("bonnierPda"), "Flore Bonnier PDA", config.getInfo("popupOptions"));
}
});
vue.getLienCles().addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
Config config = new Config();
Window.open(config.getUrl("clesDetermination"), "Clés de determination", config.getInfo("popupOptions"));
}
});
vue.getLienEflore().addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
Config config = new Config();
Window.open(config.getUrl("eflore"), "eFlore", config.getInfo("popupOptions"));
}
});
vue.getBoutonDepublierObs().addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
GWT.log("Lancer evnt : EvenementDepublierObs");
if (Window.confirm(I18n.getVocabulary().confirmationDepublicationObs())) {
BusEvenementiel.getInstance().fireEvent(new EvenementDepublierObs(observation.getId()));
}
}
});
BusEvenementiel.getInstance().addHandler(EvenementDepublierObs.TYPE, new GestionnaireEvenementDepublierObs() {
@Override
public void onDepublicationObs(EvenementDepublierObs event) {
GWT.log("Attraper evnt : EvenementDepublierObs (obs:"+event.getIdObs()+")");
if (event.getIdObs().equals(observation.getId())) {
depublierObs();
}
}
});
BusEvenementiel.getInstance().addHandler(EvenementChangementEtatUtilisateur.TYPE, new GestionnaireEvenementChangementEtatUtilisateur() {
@Override
public void onModificationEtatUtilisateur(EvenementChangementEtatUtilisateur evenementChangementEtatUtilisateur) {
afficherZoneActionsObs();
}
});
BusEvenementiel.getInstance().addHandler(EvenementValidationPropositionDetermination.TYPE, new GestionnaireEvenementValidationPropositionDetermination() {
@Override
public void onValidationPropositionDetermination(EvenementValidationPropositionDetermination event) {
String observationId = URLUtils.getURLSpecialParameterValue();
observationService.getObservation(observationId, new ObservationsCallback() {
 
@Override
public void surRetour(ObservationServiceResultat objetRetour) {
vue.viderMetadonnees();
new MetadonneesPresenteur(new MetadonneesEnLigneVue(), cache.getObservationCourante(), ModeRecherche.MODE_OBSERVATION, false).go(vue.getMetadonnees());
rechargerForum();
}
 
@Override
public void surErreur(String messageErreur) {
Window.alert(messageErreur);
}
});
}
});
}
private void rechargerForum() {
vue.viderForum();
new ForumPresenteur(new ForumVue()).go(vue.getForum());
}
private void depublierObs() {
if (ModerationUtils.utilisateurPeutDepublierObs(CacheClient.getInstance().getUtilisateur())) {
GWT.log("depublierObs :"+observation.getId());
observationService.depublier(observation, new DepublicationObservationCallBack() {
@Override
public void surRetour(String depublicationOk) {
GWT.log("Dépublication obs "+observation.getId()+" "+depublicationOk);
if (depublicationOk.equals("OK")) {
BusEvenementiel.getInstance().fireEvent(new EvenementRechercheObservation());
}
}
});
}
}
private void afficherZoneActionsObs() {
if (ModerationUtils.utilisateurPeutDepublierObs(CacheClient.getInstance().getUtilisateur())) {
vue.afficherZoneActionsObs();
} else {
vue.cacherZoneActionsObs();
}
}
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/vues/identiplante/plateformedetermination/detail/DetailImageObservationVue.java
New file
0,0 → 1,38
package org.tela_botanica.del.client.vues.identiplante.plateformedetermination.detail;
 
 
 
import com.google.gwt.core.client.GWT;
import com.google.gwt.uibinder.client.UiBinder;
import com.google.gwt.uibinder.client.UiField;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.Image;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.Widget;
 
public class DetailImageObservationVue extends Composite implements DetailImageObservationPresenteur.Vue {
 
@UiField
protected Image imageObservation;
 
@UiField
protected Label nomObservateur, nomRetenu, dateObservation, famille, localite;
 
private static DetailImageObservationUIiBinder uiBinder = GWT.create(DetailImageObservationUIiBinder.class);
 
interface DetailImageObservationUIiBinder extends UiBinder<Widget, DetailImageObservationVue> {
};
 
public DetailImageObservationVue() {
initWidget(uiBinder.createAndBindUi(this));
}
 
public void chargerInformationsObservation(org.tela_botanica.del.client.modeles.Image image) {
imageObservation.setUrl(image.getUrl());
nomObservateur.setText(image.getObservation().getAuteur());
nomRetenu.setText(image.getObservation().getNomRetenuFormateReferentiel());
famille.setText(image.getObservation().getFamille());
localite.setText(image.getObservation().getLocalite());
dateObservation.setText(image.getObservation().getDateReleve());
}
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/vues/identiplante/plateformedetermination/detail/detailObservation.css
New file
0,0 → 1,27
.detailObservation {
font-size: 11px;
position: absolute;
padding: 5px;
color: white;
background: #333;
opacity: 0.8;
margin-top: -80px;
width: 230px;
}
 
.observateur td {
font-size: 11px;
white-space: nowrap
}
 
.date {
}
 
.nomRetenu {
font-weight: bold
}
 
.dateObservation {
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/vues/identiplante/plateformedetermination/detail/DetailImageObservationVue.ui.xml
New file
0,0 → 1,36
<!DOCTYPE ui:UiBinder SYSTEM "http://dl.google.com/gwt/DTD/xhtml.ent">
<ui:UiBinder
xmlns:ui='urn:ui:com.google.gwt.uibinder'
xmlns:g='urn:import:com.google.gwt.user.client.ui'>
 
<ui:with field="constants" type="org.tela_botanica.del.client.i18n.Vocabulary"/>
<ui:style src="detailObservation.css" />
<g:VerticalPanel>
<g:Image ui:field="imageObservation"/>
<g:VerticalPanel ui:field="detailObservation" styleName="{style.detailObservation}">
<g:HorizontalPanel styleName="{style.observateur}">
<!-- g:Label text="{constants.observateur} : "/ -->
<g:Label ui:field="nomObservateur" /><g:HTML>&nbsp;-&nbsp;</g:HTML><g:Label ui:field="localite" /><g:HTML>&nbsp;-&nbsp;</g:HTML><g:Label ui:field="dateObservation" />
</g:HorizontalPanel>
<g:HorizontalPanel>
<!-- <g:Label text="{constants.nom_retenu} : "/> -->
<g:Label ui:field="nomRetenu" styleName="{style.nomRetenu}"/>
</g:HorizontalPanel>
<g:HorizontalPanel styleName="{style.date}">
<!-- <g:Label text="{constants.date_observation} : "/> -->
</g:HorizontalPanel>
<g:HorizontalPanel>
<!-- <g:Label text="{constants.famille} : "/> -->
<g:HorizontalPanel><g:Label ui:field="famille" /></g:HorizontalPanel>
</g:HorizontalPanel>
<g:HorizontalPanel>
<!-- <g:Label text="{constants.localite} : "/> -->
</g:HorizontalPanel>
</g:VerticalPanel>
</g:VerticalPanel>
 
</ui:UiBinder>
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/vues/identiplante/plateformedetermination/detail/DetailImageObservationPresenteur.java
New file
0,0 → 1,24
package org.tela_botanica.del.client.vues.identiplante.plateformedetermination.detail;
 
import org.tela_botanica.del.client.cache.CacheClient;
 
import com.google.gwt.user.client.ui.HasWidgets;
import com.google.gwt.user.client.ui.IsWidget;
 
public class DetailImageObservationPresenteur {
public interface Vue extends IsWidget {
public void chargerInformationsObservation(org.tela_botanica.del.client.modeles.Image image);
}
 
private Vue vue;
public DetailImageObservationPresenteur(Vue vue) {
this.vue = vue;
}
 
public void go(HasWidgets composite) {
vue.chargerInformationsObservation(CacheClient.getInstance().getImageCourante());
composite.add(vue.asWidget());
}
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/vues/identiplante/plateformedetermination/IdentiplanteDeterminationVue.java
New file
0,0 → 1,126
package org.tela_botanica.del.client.vues.identiplante.plateformedetermination;
 
import org.tela_botanica.del.client.gestionhistorique.ConstantesNavigation;
 
import com.google.gwt.core.client.GWT;
import com.google.gwt.event.dom.client.HasClickHandlers;
import com.google.gwt.uibinder.client.UiBinder;
import com.google.gwt.uibinder.client.UiField;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.HasWidgets;
import com.google.gwt.user.client.ui.Hyperlink;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.Panel;
import com.google.gwt.user.client.ui.Widget;
 
public class IdentiplanteDeterminationVue extends Composite implements IdentiplanteDeterminationPresenteur.Vue {
 
@UiField
Panel forum, detailImageObservation, formulaireRechercheEflore, zoneRss, zoneActionsObs;
@UiField
Label lienOuvrages, lienEflore, lienBonnier, lienCles;
@UiField
Hyperlink lienRetour;
@UiField
Button btnDepublierObs, boutonAjoutProposition, boutonAjoutPropositionBas, boutonAjoutCommentaire, boutonAjoutCommentaireBas;
@UiField
Panel metadonnees;
 
interface DeterminationUIiBinder extends UiBinder<Widget, IdentiplanteDeterminationVue> {
};
 
private static DeterminationUIiBinder uiBinder = GWT.create(DeterminationUIiBinder.class);
 
public IdentiplanteDeterminationVue() {
initWidget(uiBinder.createAndBindUi(this));
lienRetour.setTargetHistoryToken(ConstantesNavigation.HOME);
}
 
public Panel getForum() {
return forum;
}
 
public Panel getDetailImageObservation() {
return detailImageObservation;
}
 
public Panel getFormulaireRechercheEflore() {
return formulaireRechercheEflore;
}
 
public Button getBoutonAjoutProposition() {
return boutonAjoutProposition;
}
public Button getBoutonAjoutPropositionBas() {
return boutonAjoutPropositionBas;
}
@Override
public HasClickHandlers getBoutonDepublierObs() {
return btnDepublierObs;
}
public Panel getMetadonnees() {
return metadonnees;
}
 
public Button getBoutonAjoutCommentaire() {
return boutonAjoutCommentaire;
}
public Button getBoutonAjoutCommentaireBas() {
return boutonAjoutCommentaireBas;
}
 
@Override
public HasClickHandlers getLienOuvrages() {
return lienOuvrages;
}
 
@Override
public HasClickHandlers getLienBonnier() {
return lienBonnier;
}
@Override
public HasClickHandlers getLienCles() {
return lienCles;
}
 
@Override
public HasClickHandlers getLienEflore() {
return lienEflore;
}
@Override
public HasWidgets getZoneRss() {
return zoneRss;
}
 
@Override
public void viderMetadonnees() {
metadonnees.clear();
}
@Override
public void cacherZoneActionsObs() {
zoneActionsObs.setVisible(false);
}
@Override
public void afficherZoneActionsObs() {
zoneActionsObs.setVisible(true);
}
 
@Override
public void viderForum() {
forum.clear();
}
}
 
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/vues/identiplante/plateformedetermination/ligneProtocole/ligneProtocole.css
New file
0,0 → 1,7
.nomProtocole {
font-size: 11px;
overflow: hidden;
text-overflow: ellipsis;
width: 87px;
margin-bottom:15px;
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/vues/identiplante/plateformedetermination/ligneProtocole/LigneProtocoleVue.ui.xml
New file
0,0 → 1,10
<!DOCTYPE ui:UiBinder SYSTEM "http://dl.google.com/gwt/DTD/xhtml.ent">
<ui:UiBinder
xmlns:ui='urn:ui:com.google.gwt.uibinder'
xmlns:g='urn:import:com.google.gwt.user.client.ui'
xmlns:forum="urn:import:org.tela_botanica.del.client.composants.forum">
<ui:style src="ligneProtocole.css" />
<g:HorizontalPanel styleName="vote">
<g:HTMLPanel ui:field="zoneVote" />
</g:HorizontalPanel>
</ui:UiBinder>
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/vues/identiplante/plateformedetermination/ligneProtocole/LigneProtocolePresenteur.java
New file
0,0 → 1,59
package org.tela_botanica.del.client.vues.identiplante.plateformedetermination.ligneProtocole;
 
import org.tela_botanica.del.client.cache.CacheClient;
import org.tela_botanica.del.client.composants.presenteur.Presenteur;
import org.tela_botanica.del.client.composants.votes.moyennevotes.MoyenneVotePresenteur;
import org.tela_botanica.del.client.composants.votes.moyennevotes.MoyenneVoteVue;
import org.tela_botanica.del.client.modeles.Image;
import org.tela_botanica.del.client.modeles.Protocole;
import org.tela_botanica.del.client.navigation.evenement.BusEvenementiel;
import org.tela_botanica.del.client.navigation.evenement.changementimagevalidation.EvenementChangementImageValidation;
import org.tela_botanica.del.client.navigation.evenement.changementimagevalidation.GestionnaireEvenementChangementImageValidation;
import org.tela_botanica.del.client.services.rest.VoteProtocoleServiceConcret;
 
import com.google.gwt.user.client.ui.HasWidgets;
import com.google.gwt.user.client.ui.IsWidget;
 
public class LigneProtocolePresenteur extends Presenteur {
 
public interface Vue extends IsWidget {
 
HasWidgets getZoneVote();
}
 
private Vue vue;
private Protocole protocole;
 
public LigneProtocolePresenteur(Protocole protocole, Vue vue) {
this.vue = vue;
this.protocole = protocole;
chargerValeursProtocolePourImageCourante();
}
public void chargerValeursProtocolePourImageCourante(){
vue.getZoneVote().clear();
Image imageCourante = CacheClient.getInstance().getImageCourante();
MoyenneVotePresenteur votePresenteur = new MoyenneVotePresenteur(imageCourante, protocole, new MoyenneVoteVue(), new VoteProtocoleServiceConcret());
votePresenteur.go(vue.getZoneVote());
}
 
public Vue getVue() {
return vue;
}
 
public void go(HasWidgets composite) {
composite.add(vue.asWidget());
gererEvenements();
}
 
@Override
protected void gererEvenements() {
BusEvenementiel.getInstance().addHandler(EvenementChangementImageValidation.TYPE, new GestionnaireEvenementChangementImageValidation() {
 
@Override
public void onChangementImage(EvenementChangementImageValidation event) {
chargerValeursProtocolePourImageCourante();
}
});
}
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/vues/identiplante/plateformedetermination/ligneProtocole/LigneProtocoleVue.java
New file
0,0 → 1,30
package org.tela_botanica.del.client.vues.identiplante.plateformedetermination.ligneProtocole;
 
import com.google.gwt.core.client.GWT;
import com.google.gwt.uibinder.client.UiBinder;
import com.google.gwt.uibinder.client.UiField;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.HasWidgets;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.Panel;
import com.google.gwt.user.client.ui.Widget;
 
public class LigneProtocoleVue extends Composite implements LigneProtocolePresenteur.Vue {
@UiField
Panel zoneVote;
interface LigneProtocoleUIiBinder extends UiBinder<Widget, LigneProtocoleVue> {
};
 
private static LigneProtocoleUIiBinder uiBinder = GWT.create(LigneProtocoleUIiBinder.class);
 
public LigneProtocoleVue() {
initWidget(uiBinder.createAndBindUi(this));
}
 
@Override
public HasWidgets getZoneVote() {
return this.zoneVote;
}
 
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/vues/identiplante/plateformedetermination/determinationVue.css
New file
0,0 → 1,120
.pageDetermination {
}
.metadonnees {
margin-bottom:10px;
margin-top:10px;
display:inline-block;
}
.limiteZoneMenu {
max-width:840px;
margin-bottom:10px;
}
.limiteZoneMetadonnees {
width:840px;
}
.zoneVote {
margin-left: 5px;
height: 100%;
display:inline-block;
vertical-align:top;
border-left: solid 1px #DDD;
border-right: solid 1px #DDD;
padding-left: 10px;
padding-right:10px;
text-align:left;
}
.taxonPlusProbable {
float: left;
}
.zoneBarreRepartition {
border: solid 1px #DDD;
padding: 15px;
}
.zoneDetailImage {
height: 100%;
width: 255px;
display:inline-block;
vertical-align:top;
text-align:left;
clear: left;
}
.zoneImage {
margin-bottom: 10px;
margin-right: 15px
}
.zoneImage div {
clear: left;
padding-top: 5px;
}
.zoneImage div img {
float: left;
padding: 0 5px 5px 0;
}
.boutonProposer {
float: left;
padding: 5px;
cursor: pointer;
background:#8EB533;
border:none;
margin-right:10px;
margin-top:10px;
}
.boutonValiderTaxon {
margin-top: -7px;
}
.zoneOutils {
width: 15%;
padding-left:10px;
display:inline-block;
vertical-align:top;
text-align:left;
}
.boutons {
margin-bottom:15px;
}
.lienProposerObservation {
margin-left:65px;
margin-top:10px;
margin-bottom:10px;
}
.nomTaxonProbable {
padding-left:3px;
}
.taxonProbable {
background: none repeat scroll 0 0 #F8F8C3;
clear: left;
font-size: 15px;
margin-bottom: 5px;
padding: 13px 9px;
}
.voteProtocole div {
margin-bottom:10px;
}
.voteProtocole div div {
margin-bottom:0px;
border:solid 0px red
}
.autreOutils {
margin-top:15px;
}
.zonerss {
margin-top:5px;
}
.lienProposerImage {
margin-top:20px;
margin-left:70px;
margin-bottom:10px;
}
.lienAide {
margin-right:70px;
padding:4px 15px;
margin-top:10px;
float:right;
color:white;
}
.btnDepublierObs {
background:url("./img/16x16/depublier.png") 5px 5px no-repeat;
padding: 5px 5px 5px 23px;
}
.btnDepublierObs:hover {
background:#8EB533 url("./img/16x16/depublier_actif.png") 5px 5px no-repeat;
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/vues/identiplante/resultats/ResultatsIdentiplante.css
New file
0,0 → 1,48
 
.zoneObservation {
width: 100%;
clear: left;
margin-top: 10px;
}
 
.barreNavigation {
margin-top: 0;
padding-bottom: 20px;
}
 
.votes {
padding-left: 10px;
cursor: pointer;
}
 
.date {
padding-left: 10px;
cursor: pointer;
}
 
.zoneTri {
padding-left: 10px;
}
 
.boutonTriAsc, .boutonTriDesc {
border:none;
cursor:pointer;
}
.boutonTriAsc:hover, .boutonTriDesc:hover {
border-bottom:dotted 1px #8EB533
}
 
.boutonTriAsc {
height: 19px;
background: url(./img/fleche-haut.png) no-repeat
}
 
.boutonTriDesc {
height: 19px;
background: url(./img/fleche-bas.png) no-repeat
}
 
.aucunResultat{
text-align: left;
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/vues/identiplante/resultats/observations/observation.css
New file
0,0 → 1,109
.observation {
width:580px;
padding:10px;
margin-right:5px;
border:solid 1px #DDD;
}
.titrePropositions {
margin-top:0;
background:none;
}
.listePropositions {
background:none repeat scroll 0 0 #FAFAF0;
border-color:#DDDDDD;
border-radius:10px;
border-style:solid;
border-width:1px;
box-shadow:2px 2px 2px #DDDDDD;
min-height:250px;
padding:10px;
width:370px;
}
.nomEspece {
padding:7px;
font-size:15px;
font-weight:bold;
background:rgba(100,100,100,0.5);
color:white;
cursor:pointer;
position:absolute;
width:236px;
}
.nomEspece:hover {
background:#8EB533;
}
.colonneImages {
width: 300px;
background:url(./img/pasdephoto.jpg) no-repeat;
}
.description {
border:solid 1px #EEE;
border-width:0 1px 0 0;
width:270px;
padding:10px;
margin:0 1px 5px 0;
height:150px
}
.determination {
padding:10px;
margin:0 1px 5px 0;
height:150px
}
.photoPrincipale {
height:20px;
float:left;
padding:5px;
margin-bottom:15px;
cursor:pointer
}
.panneauDeterminations {
text-align:right
}
.lienDetermination {
text-align:center;
padding:5px;
color:blue;
cursor:pointer;
float:right;
margin:5px;
text-decoration:underline;
}
.miniatures img {
height:30px
}
.metadonnees {
width:280px;
}
.boutonDetermination {
background:url("./img/add.png") no-repeat scroll 5px 7px #DDDDDD;
border:1px solid #AAAAAA;
cursor:pointer;
float:right;
margin-bottom:5px;
margin-right:5px;
margin-top:10px;
padding:5px 5px 5px 25px;
}
.ligneObservation {
margin-bottom:20px;
}
.boutonDetermination:hover {
background-color:#AAA
}
.accesOutil {
margin-top:15px;
}
.ajouterProposition {
margin-top:10px;
}
.plusDeDetails {
width: 130px;
}
.evenements {
background-color: #eaedcd;
border: 1px solid #eaedcd;
border-radius: 5px;
margin-bottom: 3px;
padding: 4px;
font-size: 14px;
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/vues/identiplante/resultats/observations/ObservationVue.ui.xml
New file
0,0 → 1,41
<ui:UiBinder xmlns:ui='urn:ui:com.google.gwt.uibinder'
xmlns:g='urn:import:com.google.gwt.user.client.ui' ui:generateFormat='com.google.gwt.i18n.rebind.format.PropertiesFormat'
ui:generateKeys="com.google.gwt.i18n.rebind.keygen.MD5KeyGenerator"
ui:generateLocales="default">
<ui:with field='res'
type='org.tela_botanica.del.client.resources.Ressources' />
<ui:with field="constants" type="org.tela_botanica.del.client.i18n.Vocabulary" />
 
<ui:style src="observation.css" />
<g:HTMLPanel styleName="{style.ligneObservation} limiteMin">
<g:HTML styleName="{style.evenements}" ui:field="messageEvenements"></g:HTML>
<g:HTMLPanel styleName="gauche ombre-faible arrondi {style.observation}">
<g:HTMLPanel styleName="colonne {style.colonneImages}">
<g:Label ui:field="nomEspece" styleName="{style.nomEspece}"></g:Label>
<g:HTMLPanel ui:field="imagesPanel" />
</g:HTMLPanel>
<g:HTMLPanel styleName="colonne">
<g:HTMLPanel ui:field="metadonnees" styleName="{style.metadonnees}" />
</g:HTMLPanel>
<g:HTML>
<br class="nettoyage" />
</g:HTML>
</g:HTMLPanel>
<g:HTMLPanel styleName="gauche {style.listePropositions}">
<g:HTMLPanel styleName="{style.panneauDeterminations}">
<g:Label styleName="titre2 {style.titrePropositions}">Propositions des membres du réseau</g:Label>
<g:HTMLPanel ui:field="determinationsPanel" />
<g:HTMLPanel styleName="nettoyage">
<g:Button ui:field="boutonAjoutProposition" styleName="bouton-petit {style.ajouterProposition}"
text="{constants.proposerSaDetermination}" />
<g:Button ui:field="boutonAjoutCommentaire" styleName="bouton-petit"
text="{constants.ajouterCommentaire}" />
<g:Button ui:field="boutonPlusDeDetails" styleName="bouton-petit {style.ajouterProposition} {style.plusDeDetails}"
text="Voir tous les commentaires" />
</g:HTMLPanel>
</g:HTMLPanel>
</g:HTMLPanel>
<hr class="nettoyage" />
</g:HTMLPanel>
</ui:UiBinder>
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/vues/identiplante/resultats/observations/ObservationPresenteur.java
New file
0,0 → 1,192
package org.tela_botanica.del.client.vues.identiplante.resultats.observations;
 
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
 
import org.tela_botanica.del.client.cache.CacheClient;
import org.tela_botanica.del.client.composants.metadonnees.MetadonneesPresenteur;
import org.tela_botanica.del.client.composants.metadonnees.MetadonneesVue;
import org.tela_botanica.del.client.composants.observations.ObservationImagesPresenteur;
import org.tela_botanica.del.client.composants.observations.ObservationImagesVue;
import org.tela_botanica.del.client.composants.presenteur.Presenteur;
import org.tela_botanica.del.client.modeles.EvenementObs;
import org.tela_botanica.del.client.modeles.Image;
import org.tela_botanica.del.client.modeles.ModeRecherche;
import org.tela_botanica.del.client.modeles.Observation;
import org.tela_botanica.del.client.modeles.PropositionDetermination;
import org.tela_botanica.del.client.navigation.evenement.BusEvenementiel;
import org.tela_botanica.del.client.navigation.evenement.ajoutcommentaire.EvenementAjoutCommentaire;
import org.tela_botanica.del.client.navigation.evenement.ajoutcommentaire.GestionnaireEvenementAjoutCommentaire;
import org.tela_botanica.del.client.navigation.evenement.ajoutdetermination.EvenementAjoutDetermination;
import org.tela_botanica.del.client.navigation.evenement.ajoutdetermination.GestionnaireEvenementAjoutDetermination;
import org.tela_botanica.del.client.navigation.evenement.validationobservation.EvenementValidation;
import org.tela_botanica.del.client.composants.fenetreoverlay.FenetreOverlayDefilanteVue;
import org.tela_botanica.del.client.composants.fenetreoverlay.FenetreOverlaySimplePresenteur;
import org.tela_botanica.del.client.composants.formulaires.formulairecommentaire.FormulaireCommentairePresenteur;
import org.tela_botanica.del.client.composants.formulaires.formulairecommentaire.FormulaireCommentaireVue;
import org.tela_botanica.del.client.composants.formulaires.formulaireproposition.FormulairePropositionPresenteur;
import org.tela_botanica.del.client.composants.formulaires.formulaireproposition.FormulairePropositionVue;
import org.tela_botanica.del.client.gestionhistorique.ConstantesNavigation;
import org.tela_botanica.del.client.services.rest.CommentaireServiceConcret;
import org.tela_botanica.del.client.services.rest.PropositionDeterminationServiceConcret;
import org.tela_botanica.del.client.utils.StringUtils;
import org.tela_botanica.del.client.vues.identiplante.resultats.observationdeterminations.ObservationDeterminationPresenteur;
import org.tela_botanica.del.client.vues.identiplante.resultats.observationdeterminations.ObservationDeterminationVue;
 
import com.gargoylesoftware.htmlunit.html.Util;
import com.google.gwt.core.shared.GWT;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.event.dom.client.HasClickHandlers;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.ui.HasWidgets;
import com.google.gwt.user.client.ui.IsWidget;
 
public class ObservationPresenteur extends Presenteur {
 
public interface Vue extends IsWidget {
public HasClickHandlers getBoutonAjoutProposition();
 
public HasWidgets getDeterminationsPanel();
 
public HasWidgets getImagesPanel();
 
public HasWidgets getMetadonneesPanel();
public HasClickHandlers getNomEspece();
 
public void setNomEspece(String nomEspece);
public void setNbCommentaires(String nbCommentaires);
public HasClickHandlers getBoutonAjoutCommentaire();
public HasClickHandlers getBoutonPlusDeDetails();
 
public void afficherEvenementsObservation(String evenementsObs);
 
public void cacherEvenementsObservation();
 
public void mettreEnValeurEvenementsObs();
}
 
private Vue vue;
 
private Observation observation;
private Image imagePrincipale;
 
private ObservationDeterminationPresenteur observationDeterminationPresenteur;
 
private FenetreOverlaySimplePresenteur fenetreOverlaySimplePresenteur;
 
public ObservationPresenteur(Vue vue, Observation observation, Image imagePrincipale) {
this.observation = observation;
this.vue = vue;
this.imagePrincipale=imagePrincipale;
chargerObservation();
}
 
public void chargerObservation() {
new ObservationImagesPresenteur(new ObservationImagesVue(), observation, imagePrincipale).go(vue.getImagesPanel());
new MetadonneesPresenteur(new MetadonneesVue(), observation, ModeRecherche.MODE_OBSERVATION, false).go(vue.getMetadonneesPanel());
observationDeterminationPresenteur = new ObservationDeterminationPresenteur(new ObservationDeterminationVue(), observation.getPropositionDeterminations());
observationDeterminationPresenteur.go(vue.getDeterminationsPanel());
vue.setNomEspece(observation.getNomRetenu());
vue.setNbCommentaires(observation.getNbCommentaires());
gererAffichageEvenementsObs();
gererEvenements();
}
 
private void gererAffichageEvenementsObs() {
if(!observation.getEvenementsAssocies().isEmpty()) {
List<EvenementObs> evts = observation.getEvenementsAssocies();
StringBuilder stb = new StringBuilder();
stb.append("<ul class=\"listeEvenementsObs\">");
for (Iterator<EvenementObs> iterator = evts.iterator(); iterator.hasNext();) {
EvenementObs evt = iterator.next();
stb.append("<li>");
stb.append(StringUtils.getCorrespondanceChaineEvenementObs(evt.getType()));
if(!evt.getInfosComplementaires().isEmpty()) {
String infos = StringUtils.ellipsize(evt.getInfosComplementaires(), 50, 10);
String classeEvt = StringUtils.getClasseEvenementObs(evt.getType());
stb.append("&nbsp;<span class=\"evtObsinfosComplementaires "+classeEvt+"\">"+infos+"</span>");
}
stb.append("</li>");
}
stb.append("</ul>");
vue.afficherEvenementsObservation(stb.toString());
} else {
vue.cacherEvenementsObservation();
}
}
 
public void go(HasWidgets composite) {
composite.add(vue.asWidget());
}
 
protected void gererEvenements() {
 
BusEvenementiel.getInstance().addHandler(EvenementAjoutDetermination.TYPE, new GestionnaireEvenementAjoutDetermination() {
@Override
public void onAjoutDetermination(EvenementAjoutDetermination event) {
if (fenetreOverlaySimplePresenteur != null && fenetreOverlaySimplePresenteur.fenetreModaleEstOuverte()) {
fenetreOverlaySimplePresenteur.fermerFenetreModale();
ajouterPropositionDetermination(event.getPropositionDetermination());
}
}
});
 
vue.getBoutonAjoutProposition().addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
List<Image> images = observation.getImages();
if (images.size() > 0) {
CacheClient.getInstance().setImageCourante(images.get(0));
} else {
CacheClient.getInstance().setImageCourante(null);
}
CacheClient.getInstance().setObservationCourante(observation);
fenetreOverlaySimplePresenteur = new FenetreOverlaySimplePresenteur(new FenetreOverlayDefilanteVue());
fenetreOverlaySimplePresenteur.ouvrirFenetreModale(new FormulairePropositionPresenteur(new FormulairePropositionVue(), new PropositionDeterminationServiceConcret()));
}
});
ClickHandler versDetails = new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
BusEvenementiel.getInstance().fireEvent(new EvenementValidation(observation));
}
};
vue.getNomEspece().addClickHandler(versDetails);
vue.getBoutonPlusDeDetails().addClickHandler(versDetails);
vue.getBoutonAjoutCommentaire().addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
FormulaireCommentairePresenteur commentairePresenteur = new FormulaireCommentairePresenteur(observation, new CommentaireServiceConcret(), new FormulaireCommentaireVue());
fenetreOverlaySimplePresenteur = new FenetreOverlaySimplePresenteur(new FenetreOverlayDefilanteVue());
fenetreOverlaySimplePresenteur.ouvrirFenetreModale(commentairePresenteur);
}
});
BusEvenementiel.getInstance().addHandler(EvenementAjoutCommentaire.TYPE, new GestionnaireEvenementAjoutCommentaire() {
 
@Override
public void onAjoutCommentaire(EvenementAjoutCommentaire event) {
if (fenetreOverlaySimplePresenteur != null && fenetreOverlaySimplePresenteur.fenetreModaleEstOuverte()) {
fenetreOverlaySimplePresenteur.fermerFenetreModale();
}
}
});
}
 
private void ajouterPropositionDetermination(PropositionDetermination propositionDetermination) {
observationDeterminationPresenteur.setPropositions(observation.getPropositionDeterminations());
}
 
public void mettreEnValeurEvenementsObs() {
vue.mettreEnValeurEvenementsObs();
}
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/vues/identiplante/resultats/observations/ObservationVue.java
New file
0,0 → 1,98
package org.tela_botanica.del.client.vues.identiplante.resultats.observations;
 
 
import com.google.gwt.core.client.GWT;
import com.google.gwt.event.dom.client.HasClickHandlers;
import com.google.gwt.uibinder.client.UiBinder;
import com.google.gwt.uibinder.client.UiField;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.HTML;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.Panel;
import com.google.gwt.user.client.ui.Widget;
 
public class ObservationVue extends Composite implements ObservationPresenteur.Vue {
 
// Gestion d'UiBinder
interface Binder extends UiBinder<Widget, ObservationVue> {
}
 
private static Binder binder = GWT.create(Binder.class);
 
@UiField
Button boutonAjoutProposition, boutonAjoutCommentaire, boutonPlusDeDetails;
 
@UiField
Panel determinationsPanel, imagesPanel, metadonnees;
@UiField Label nomEspece;
@UiField HTML messageEvenements;
 
public ObservationVue() {
initWidget(binder.createAndBindUi(this));
}
 
@Override
public HasClickHandlers getBoutonAjoutProposition() {
return boutonAjoutProposition;
}
@Override
public HasClickHandlers getBoutonAjoutCommentaire() {
return boutonAjoutCommentaire;
}
@Override
public HasClickHandlers getBoutonPlusDeDetails() {
return boutonPlusDeDetails;
}
 
public Panel getDeterminationsPanel() {
return determinationsPanel;
}
 
public void setDeterminationsPanel(Panel determinationsPanel) {
this.determinationsPanel = determinationsPanel;
}
 
public Panel getImagesPanel() {
return imagesPanel;
}
public Panel getMetadonneesPanel() {
return metadonnees;
}
 
@Override
public HasClickHandlers getNomEspece() {
return nomEspece;
}
 
@Override
public void setNomEspece(String nomEspece) {
this.nomEspece.setText(nomEspece);
}
 
@Override
public void setNbCommentaires(String nbCommentaires) {
boutonPlusDeDetails.setText(boutonPlusDeDetails.getText()+" ("+nbCommentaires+")");
}
 
@Override
public void afficherEvenementsObservation(String evenementsObs) {
messageEvenements.setHTML(evenementsObs);
messageEvenements.setVisible(true);
}
 
public void cacherEvenementsObservation() {
messageEvenements.setVisible(false);
}
 
@Override
public void mettreEnValeurEvenementsObs() {
messageEvenements.addStyleName("evenementsNouveaux");
}
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/vues/identiplante/resultats/votes/DetailVoteObservationPresenteur.java
New file
0,0 → 1,41
package org.tela_botanica.del.client.vues.identiplante.resultats.votes;
 
import org.tela_botanica.del.client.composants.votes.barrerepartition.BarreRepartitionVotePresenteur;
import org.tela_botanica.del.client.composants.votes.barrerepartition.BarreRepartitionVoteVue;
import org.tela_botanica.del.client.modeles.MoyenneVote;
import org.tela_botanica.del.client.modeles.PropositionDetermination;
import org.tela_botanica.del.client.services.CalculVoteDeterminationService;
import org.tela_botanica.del.client.services.rest.VoteDeterminationServiceConcret;
 
import com.google.gwt.user.client.ui.HasWidgets;
import com.google.gwt.user.client.ui.IsWidget;
 
public class DetailVoteObservationPresenteur {
 
public interface Vue extends IsWidget {
public HasWidgets getZoneCertitude();
 
public HasWidgets getZoneCommentaires();
 
public HasWidgets getZoneNomEspece();
 
public HasWidgets getZoneVoter();
}
 
private Vue vue;
private PropositionDetermination proposition;
 
public DetailVoteObservationPresenteur(Vue vue, PropositionDetermination proposition) {
this.vue = vue;
this.proposition = proposition;
}
 
public void go(HasWidgets composite) {
composite.add(vue.asWidget());
BarreRepartitionVotePresenteur presenteurVote = new BarreRepartitionVotePresenteur(new BarreRepartitionVoteVue(), new VoteDeterminationServiceConcret());
MoyenneVote moyenne = CalculVoteDeterminationService.calculerVoteDetermination(proposition);
presenteurVote.afficherVotes(moyenne);
presenteurVote.go(vue.getZoneCertitude());
}
 
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/vues/identiplante/resultats/votes/DetailVoteObservationVue.java
New file
0,0 → 1,40
package org.tela_botanica.del.client.vues.identiplante.resultats.votes;
 
 
import com.google.gwt.core.client.GWT;
import com.google.gwt.uibinder.client.UiBinder;
import com.google.gwt.uibinder.client.UiField;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.HasWidgets;
import com.google.gwt.user.client.ui.Panel;
import com.google.gwt.user.client.ui.Widget;
 
public class DetailVoteObservationVue extends Composite implements DetailVoteObservationPresenteur.Vue {
 
interface Binder extends UiBinder<Widget, DetailVoteObservationVue> {}
 
private static Binder binder = GWT.create(Binder.class);
 
protected @UiField Panel zoneCertitude, zoneCommentaires, zoneNomEspece, zoneVoter;
public DetailVoteObservationVue() {
initWidget(binder.createAndBindUi(this));
}
public HasWidgets getZoneCertitude() {
return zoneCertitude;
}
public HasWidgets getZoneCommentaires() {
return zoneCommentaires;
}
public HasWidgets getZoneNomEspece() {
return zoneNomEspece;
}
public HasWidgets getZoneVoter() {
return zoneVoter;
}
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/vues/identiplante/resultats/votes/DetailVoteObservationVue.ui.xml
New file
0,0 → 1,12
<ui:UiBinder xmlns:ui='urn:ui:com.google.gwt.uibinder' xmlns:g='urn:import:com.google.gwt.user.client.ui'
ui:generateFormat='com.google.gwt.i18n.rebind.format.PropertiesFormat' ui:generateKeys="com.google.gwt.i18n.rebind.keygen.MD5KeyGenerator" ui:generateLocales="default">
<ui:with field='res' type='org.tela_botanica.del.client.resources.Ressources'/>
<ui:with field="constants" type="org.tela_botanica.del.client.i18n.Vocabulary"/>
 
<g:HTMLPanel>
<g:HTMLPanel ui:field="zoneCertitude" />
<g:HTMLPanel ui:field="zoneCommentaires" />
<g:HTMLPanel ui:field="zoneNomEspece" />
<g:HTMLPanel ui:field="zoneVoter" />
</g:HTMLPanel>
</ui:UiBinder>
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/vues/identiplante/resultats/observationdeterminations/ObservationDeterminationVue.ui.xml
New file
0,0 → 1,18
<ui:UiBinder xmlns:ui='urn:ui:com.google.gwt.uibinder'
xmlns:g='urn:import:com.google.gwt.user.client.ui' ui:generateFormat='com.google.gwt.i18n.rebind.format.PropertiesFormat'
ui:generateKeys="com.google.gwt.i18n.rebind.keygen.MD5KeyGenerator"
ui:generateLocales="default">
<ui:with field='res' type='org.tela_botanica.del.client.resources.Ressources' />
<ui:with field="constants" type="org.tela_botanica.del.client.i18n.Vocabulary" />
 
<ui:style src="observationdetermination.css" />
<g:HTMLPanel>
<g:HTML><br class="nettoyage"></br></g:HTML>
<g:HTMLPanel styleName="{style.determinationOriginale}" ui:field="zonePropositions">
<g:Label styleName="petit {style.headerTableau} {style.gauche}">Score</g:Label>
<g:Label styleName="petit {style.headerTableau} {style.gauche} {style.determInitiale}">Espèces proposées</g:Label>
<g:HTMLPanel styleName="{style.determination}" ui:field="tableauPropositions" />
</g:HTMLPanel>
</g:HTMLPanel>
</ui:UiBinder>
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/vues/identiplante/resultats/observationdeterminations/ObservationDeterminationPresenteur.java
New file
0,0 → 1,90
package org.tela_botanica.del.client.vues.identiplante.resultats.observationdeterminations;
 
import java.util.Collections;
import java.util.List;
 
import org.tela_botanica.del.client.composants.fenetreoverlay.FenetreOverlaySimplePresenteur;
import org.tela_botanica.del.client.modeles.PropositionDetermination;
import org.tela_botanica.del.client.modeles.VoteDetermination;
import org.tela_botanica.del.client.navigation.evenement.BusEvenementiel;
import org.tela_botanica.del.client.navigation.evenement.voteDetermination.EvenementVoteDetermination;
import org.tela_botanica.del.client.navigation.evenement.voteDetermination.GestionnaireEvenementVoteDetermination;
import org.tela_botanica.del.client.utils.ComparateurPropositionDetermination;
import org.tela_botanica.del.client.vues.identiplante.resultats.votes.DetailVoteObservationPresenteur;
import org.tela_botanica.del.client.vues.identiplante.resultats.votes.DetailVoteObservationVue;
 
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.ui.HTMLPanel;
import com.google.gwt.user.client.ui.HasWidgets;
import com.google.gwt.user.client.ui.IsWidget;
 
public class ObservationDeterminationPresenteur {
public abstract interface Vue extends IsWidget {
public void viderTableau();
public HasWidgets getTableauPropositions();
 
void setNbVotes(int index, int nbVotes);
 
void setNbCommentaires(int index, int nbCommentaires);
 
int getIndexLigneProposition(LignePropositionVue lignePropositionVue);
 
public void masquerPropositions();
}
private Vue vue;
private List<PropositionDetermination> propositions;
FenetreOverlaySimplePresenteur fenetreOverlaySimplePresenteur;
 
public ObservationDeterminationPresenteur(Vue vue, List<PropositionDetermination> propositions) {
this.propositions = propositions;
this.vue = vue;
 
BusEvenementiel.getInstance().addHandler(EvenementVoteDetermination.TYPE, new GestionnaireEvenementVoteDetermination() {
@Override
public void onVoteDetermination(VoteDetermination event) {
surVoteDetermination(event);
}
});
}
public void classerPropositions(List<PropositionDetermination> propositions) {
Collections.sort(propositions, new ComparateurPropositionDetermination());
}
 
public void chargerPropositions() {
vue.viderTableau();
int nbPropositions = 0;
classerPropositions(propositions);
for (PropositionDetermination proposition : propositions) {
nbPropositions++;
HTMLPanel panneau = new HTMLPanel("");
DetailVoteObservationPresenteur presenteurVote = new DetailVoteObservationPresenteur(new DetailVoteObservationVue(), proposition);
presenteurVote.go(panneau);
LignePropositionVue lignePropositionVue = new LignePropositionVue(panneau);
LignePropositionPresenteur lignePropositionPresenteur = new LignePropositionPresenteur(lignePropositionVue, proposition);
lignePropositionPresenteur.go(vue.getTableauPropositions());
}
if (nbPropositions <= 0) {
vue.masquerPropositions();
}
}
 
public void setPropositions(List<PropositionDetermination> propositions) {
this.propositions = propositions;
chargerPropositions();
}
 
public void go(HasWidgets composite) {
composite.add(vue.asWidget());
chargerPropositions();
}
 
public void surVoteDetermination(VoteDetermination voteDetermination) {
int indexProposition = propositions.indexOf(voteDetermination.getPropositionDetermination());
if (indexProposition != -1) {
chargerPropositions();
}
}
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/vues/identiplante/resultats/observationdeterminations/ObservationDeterminationVue.java
New file
0,0 → 1,59
package org.tela_botanica.del.client.vues.identiplante.resultats.observationdeterminations;
 
import com.google.gwt.core.client.GWT;
import com.google.gwt.uibinder.client.UiBinder;
import com.google.gwt.uibinder.client.UiField;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.HTMLPanel;
import com.google.gwt.user.client.ui.HasWidgets;
import com.google.gwt.user.client.ui.Widget;
 
public class ObservationDeterminationVue extends Composite implements ObservationDeterminationPresenteur.Vue {
 
// Gestion d'UiBinder
interface Binder extends UiBinder<Widget, ObservationDeterminationVue> {
}
 
private static Binder binder = GWT.create(Binder.class);
 
@UiField
HTMLPanel tableauPropositions, zonePropositions;
 
public HTMLPanel getTableauPropositions() {
return tableauPropositions;
}
 
public ObservationDeterminationVue() {
initWidget(binder.createAndBindUi(this));
}
 
@Override
public int getIndexLigneProposition(LignePropositionVue lignePropositionVue) {
return tableauPropositions.getWidgetIndex(lignePropositionVue);
}
 
@Override
public void setNbVotes(int index, int nbVotes) {
// cette conversion ne devrait jamais poser de problème, car le tableau
// ne doit contenir que ça
LignePropositionVue lignePropositionVue = (LignePropositionVue) tableauPropositions.getWidget(index);
lignePropositionVue.setNbVotes(nbVotes);
}
 
@Override
public void setNbCommentaires(int index, int nbCommentaires) {
// cette conversion ne devrait jamais poser de problème, car le tableau
// ne doit contenir que ça
LignePropositionVue lignePropositionVue = (LignePropositionVue) tableauPropositions.getWidget(index);
lignePropositionVue.setNbVotes(nbCommentaires);
}
 
@Override
public void viderTableau() {
tableauPropositions.clear();
}
public void masquerPropositions() {
this.zonePropositions.setVisible(false);
}
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/vues/identiplante/resultats/observationdeterminations/LignePropositionVue.ui.xml
New file
0,0 → 1,19
<ui:UiBinder xmlns:ui='urn:ui:com.google.gwt.uibinder'
xmlns:g='urn:import:com.google.gwt.user.client.ui' ui:generateFormat='com.google.gwt.i18n.rebind.format.PropertiesFormat'
ui:generateKeys="com.google.gwt.i18n.rebind.keygen.MD5KeyGenerator"
ui:generateLocales="default">
<ui:with field='res' type='org.tela_botanica.del.client.resources.Ressources' />
<ui:with field="constants" type="org.tela_botanica.del.client.i18n.Vocabulary" />
 
<ui:style src="observationdetermination.css" />
<g:HTMLPanel styleName="{style.ligneProposition}">
<g:HTMLPanel ui:field="conteneurPanneauDeterminations" />
<g:FocusPanel ui:field="conteneurPanneauVotes" styleName="{style.nombreVotes}">
<g:HTML ui:field="nbVotesHtml" styleName="{style.infobulle}"/>
</g:FocusPanel>
<g:FocusPanel ui:field="conteneurPanneauCommentaires" styleName="{style.commentaires}">
<g:HTML ui:field="nbCommentairesHtml" styleName="{style.infobulle} {style.infobulleCommentaire}"/>
</g:FocusPanel>
</g:HTMLPanel>
</ui:UiBinder>
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/vues/identiplante/resultats/observationdeterminations/LignePropositionPresenteur.java
New file
0,0 → 1,129
package org.tela_botanica.del.client.vues.identiplante.resultats.observationdeterminations;
 
import org.tela_botanica.del.client.composants.commentaires.DetailCommentairePresenteur;
import org.tela_botanica.del.client.composants.commentaires.DetailCommentaireVue;
import org.tela_botanica.del.client.composants.fenetreoverlay.FenetreOverlayDefilanteVue;
import org.tela_botanica.del.client.composants.fenetreoverlay.FenetreOverlaySimplePresenteur;
import org.tela_botanica.del.client.composants.votes.details.DetailListeVotesDeterminationPresenteur;
import org.tela_botanica.del.client.composants.votes.details.DetailListeVotesDeterminationVue;
import org.tela_botanica.del.client.modeles.PropositionDetermination;
import org.tela_botanica.del.client.modeles.VoteDetermination;
import org.tela_botanica.del.client.navigation.evenement.BusEvenementiel;
import org.tela_botanica.del.client.navigation.evenement.voteDetermination.EvenementVoteDetermination;
import org.tela_botanica.del.client.navigation.evenement.voteDetermination.GestionnaireEvenementVoteDetermination;
import org.tela_botanica.del.client.services.rest.CommentaireServiceConcret;
 
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.event.dom.client.HasClickHandlers;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.ui.HasWidgets;
import com.google.gwt.user.client.ui.IsWidget;
 
public class LignePropositionPresenteur {
 
private int nbCommentaires, nbVotes;
 
public abstract interface Vue extends IsWidget {
public HasClickHandlers getZoneNbVotes();
 
public HasClickHandlers getZoneNbCommentaires();
 
public void setNbVotes(int nbVotes);
 
public void setNbCommentaires(int nbCommentaires);
 
public void enleverLienCommentaires();
 
public void enleverLienVotes();
public void ajouterLienVotes();
public void setPropositionRetenue(boolean propositionRetenue);
}
 
private Vue vue;
 
private PropositionDetermination propositionDetermination;
 
public LignePropositionPresenteur(Vue vue,
PropositionDetermination propositionDetermination) {
this.vue = vue;
this.propositionDetermination = propositionDetermination;
}
 
public void go(HasWidgets composite) {
composite.add(vue.asWidget());
chargerPropositionDetermination();
gererEvenements();
}
 
public void chargerPropositionDetermination() {
this.nbCommentaires = propositionDetermination.getTotalCommentaires();
this.nbVotes = propositionDetermination.getVotesDeterminations().size();
vue.setNbCommentaires(nbCommentaires);
vue.setNbVotes(nbVotes);
vue.setPropositionRetenue(propositionDetermination.estPropositionRetenue());
}
 
public void gererEvenements() {
gererEvenementsVotes();
if (nbCommentaires > 0) {
vue.getZoneNbCommentaires().addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
if (nbCommentaires > 0) {
FenetreOverlaySimplePresenteur fenetreOverlaySimplePresenteur = new FenetreOverlaySimplePresenteur(
new FenetreOverlayDefilanteVue());
DetailCommentairePresenteur detailCommentairePresenteur = new DetailCommentairePresenteur(
new DetailCommentaireVue(),
new CommentaireServiceConcret(),
propositionDetermination);
fenetreOverlaySimplePresenteur
.ouvrirFenetreModale(detailCommentairePresenteur);
detailCommentairePresenteur.afficherCommentaires();
}
}
});
} else {
vue.enleverLienCommentaires();
}
BusEvenementiel.getInstance().addHandler(EvenementVoteDetermination.TYPE, new GestionnaireEvenementVoteDetermination() {
@Override
public void onVoteDetermination(VoteDetermination event) {
if(event.getPropositionDetermination() == propositionDetermination) {
if(nbVotes == 0) {
nbVotes++;
gererEvenementsVotes();
}
vue.setNbVotes(nbVotes);
}
}
});
}
 
private void gererEvenementsVotes() {
if (nbVotes > 0) {
vue.getZoneNbVotes().addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
if (nbVotes > 0) {
FenetreOverlaySimplePresenteur fenetreOverlaySimplePresenteur = new FenetreOverlaySimplePresenteur(
new FenetreOverlayDefilanteVue());
DetailListeVotesDeterminationPresenteur detailListeVotesDeterminationPresenteur = new DetailListeVotesDeterminationPresenteur(
new DetailListeVotesDeterminationVue());
fenetreOverlaySimplePresenteur
.ouvrirFenetreModale(detailListeVotesDeterminationPresenteur);
detailListeVotesDeterminationPresenteur
.afficherVotes(propositionDetermination);
}
}
});
vue.ajouterLienVotes();
} else {
vue.enleverLienVotes();
}
}
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/vues/identiplante/resultats/observationdeterminations/LignePropositionVue.java
New file
0,0 → 1,86
package org.tela_botanica.del.client.vues.identiplante.resultats.observationdeterminations;
 
import org.tela_botanica.del.client.i18n.I18n;
 
import com.google.gwt.core.client.GWT;
import com.google.gwt.event.dom.client.HasClickHandlers;
import com.google.gwt.uibinder.client.UiBinder;
import com.google.gwt.uibinder.client.UiField;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.ui.ClickListener;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.FocusPanel;
import com.google.gwt.user.client.ui.HTML;
import com.google.gwt.user.client.ui.HTMLPanel;
import com.google.gwt.user.client.ui.IsWidget;
import com.google.gwt.user.client.ui.Widget;
 
public class LignePropositionVue extends Composite implements LignePropositionPresenteur.Vue {
 
// Gestion d'UiBinder
interface MyUiBinder extends UiBinder<Widget, LignePropositionVue> {
}
 
private static MyUiBinder uibinder = GWT.create(MyUiBinder.class);
@UiField
HTMLPanel conteneurPanneauDeterminations;
 
@UiField
FocusPanel conteneurPanneauVotes, conteneurPanneauCommentaires;
 
@UiField
HTML nbVotesHtml, nbCommentairesHtml;
 
public LignePropositionVue(IsWidget panneauDeterminations) {
initWidget(uibinder.createAndBindUi(this));
conteneurPanneauDeterminations.add(panneauDeterminations);
conteneurPanneauVotes.setTitle(I18n.getVocabulary().voirDetailVotes());
conteneurPanneauCommentaires.setTitle(I18n.getVocabulary().voirDetailCommentaires());
}
 
public HasClickHandlers getZoneNbVotes() {
return conteneurPanneauVotes;
}
 
public HasClickHandlers getZoneNbCommentaires() {
return conteneurPanneauCommentaires;
}
 
public void setNbVotes(int nbVotes) {
nbVotesHtml.setHTML(nbVotes + "");
if (nbVotes == 0) {
nbVotesHtml.setVisible(false);
}
}
 
public void setNbCommentaires(int nbCommentaires) {
nbCommentairesHtml.setHTML(nbCommentaires + "");
if (nbCommentaires == 0) {
nbCommentairesHtml.setVisible(false);
}
}
public void enleverLienCommentaires() {
conteneurPanneauCommentaires.setVisible(false);
}
public void enleverLienVotes() {
nbVotesHtml.setVisible(false);
conteneurPanneauVotes.removeStyleName("nombreVotes");
}
public void ajouterLienVotes() {
nbVotesHtml.setVisible(true);
conteneurPanneauVotes.addStyleName("nombreVotes");
}
 
@Override
public void setPropositionRetenue(boolean propositionRetenue) {
if(propositionRetenue) {
addStyleName("propositionRetenuePetit");
} else {
removeStyleName("propositionRetenuePetit");
}
}
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/vues/identiplante/resultats/observationdeterminations/observationdetermination.css
New file
0,0 → 1,76
.determinationOriginale {
padding-top:3px;
}
.lignePropositionRetenue {
}
.determInitiale, .especesProposees {
padding-left:10px;
}
.headerTableau {
display:inline;
}
.gauche {
float:left;
}
.milieu {
margin:0 0 0 115px;
float:left
}
.droite {
float:right;
}
.determination {
margin:-23px 1px 5px 0;
}
.especesProposees {
margin-top:15px;
}
.determination>div {
padding-top: 3px;
}
.ligneProposition {
clear:both;
}
.ligneProposition>div {
display:block;
float:left;
}
.nombreVotes {
width:15px;
height:16px;
padding-left:10px;
margin-left:13px;
margin-top:1px;
}
.commentaires {
background:url("./img/comment.png") no-repeat scroll 0 0 transparent;
cursor:pointer;
height:20px;
padding-left:20px;
margin-left:13px;
}
.infobulle {
background:none repeat scroll 0 0 #1A5AC3;
color:white;
font-size:11px;
height:11px;
line-height:0.9;
margin-left:2px;
margin-top:8px;
min-width:7px;
padding:1px;
position:absolute;
}
.infobulleCommentaire {
margin-left:-9px;
}
.zonePropositions {
height:130px;
text-align:left;
margin-top:60px;
}
.rss {
position:absolute;
margin-top:-25px;
margin-left:446px;
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/vues/identiplante/resultats/ResultatsIdentiplanteVue.ui.xml
New file
0,0 → 1,37
<ui:UiBinder xmlns:ui='urn:ui:com.google.gwt.uibinder'
xmlns:g='urn:import:com.google.gwt.user.client.ui' ui:generateFormat='com.google.gwt.i18n.rebind.format.PropertiesFormat'
ui:generateKeys="com.google.gwt.i18n.rebind.keygen.MD5KeyGenerator"
ui:generateLocales="default">
<ui:with field='res' type='org.tela_botanica.del.client.resources.Ressources' />
<ui:with field="constants" type="org.tela_botanica.del.client.i18n.Vocabulary" />
 
<ui:style src="ResultatsIdentiplante.css" />
<g:HTMLPanel>
<g:HTMLPanel styleName="{style.barreNavigation}">
<g:VerticalPanel ui:field="zonePaginationHaut" styleName="gauche" />
<g:HTMLPanel ui:field="zoneTri" styleName="droite {style.zoneTri} petit">
<g:Label text="{constants.tri}" styleName="gauche"/>
<g:HTMLPanel ui:field="triParDate" styleName="gauche">
<g:Label text="{constants.triParDateObs}" title="{constants.triParDateObsTooltip}" styleName="gauche {style.date}" ui:field="labelDateObservation"/>
<g:Button title="{constants.triParDateObsAscendant}" ui:field="triParDateObservationAscendant" styleName="{style.boutonTriAsc} gauche" />
<g:Button title="{constants.triParDateObsDescendant}" ui:field="triParDateObservationDescendant" styleName="{style.boutonTriDesc} gauche" />
<g:Label text="{constants.triParDatePubli}" title="{constants.triParDatePubliTooltip}" styleName="gauche {style.date}" ui:field="labelDatePublication"/>
<g:Button title="{constants.triParDatePubliAscendant}" ui:field="triParDatePublicationAscendant" styleName="{style.boutonTriAsc} gauche" />
<g:Button title="{constants.triParDatePubliDescendant}" ui:field="triParDatePublicationDescendant" styleName="{style.boutonTriDesc} gauche" />
<g:Label text="{constants.triParNbCommentaires}" title="{constants.triParDatePubliTooltip}" styleName="gauche {style.date}" ui:field="labelNbCommentaires"/>
<g:Button title="{constants.triParDatePubliAscendant}" ui:field="triParNbCommentairesAscendant" styleName="{style.boutonTriAsc} gauche" />
<g:Button title="{constants.triParDatePubliDescendant}" ui:field="triParNbCommentairesDescendant" styleName="{style.boutonTriDesc} gauche" />
</g:HTMLPanel>
</g:HTMLPanel>
</g:HTMLPanel>
<g:HTMLPanel>
<g:HTMLPanel ui:field="panneauChargement">
<g:Image url="./img/wait.gif"></g:Image>
</g:HTMLPanel>
<g:Label ui:field="aucunResultat" styleName="{style.aucunResultat}" text="{constants.aucunResultat}" visible="false" />
<g:HTMLPanel ui:field="zoneObservations" styleName="{style.zoneObservation}" />
<g:VerticalPanel ui:field="zonePaginationBas" />
</g:HTMLPanel>
</g:HTMLPanel>
</ui:UiBinder>
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/vues/identiplante/resultats/ResultatsIdentiplantePresenteur.java
New file
0,0 → 1,401
package org.tela_botanica.del.client.vues.identiplante.resultats;
 
import java.util.List;
 
import org.tela_botanica.del.client.cache.CacheClient;
import org.tela_botanica.del.client.composants.pagination.PaginationPresenteur;
import org.tela_botanica.del.client.composants.pagination.PaginationVue;
import org.tela_botanica.del.client.composants.presenteur.Presenteur;
import org.tela_botanica.del.client.gestionhistorique.ConstantesNavigation;
import org.tela_botanica.del.client.modeles.ActiviteUtilisateur;
import org.tela_botanica.del.client.modeles.Image;
import org.tela_botanica.del.client.modeles.InformationsRecherche;
import org.tela_botanica.del.client.modeles.ModeTri;
import org.tela_botanica.del.client.modeles.Observation;
import org.tela_botanica.del.client.modeles.ObservationServiceResultat;
import org.tela_botanica.del.client.modeles.Utilisateur;
import org.tela_botanica.del.client.services.rest.ObservationService;
import org.tela_botanica.del.client.services.rest.UtilisateurServiceConcret;
import org.tela_botanica.del.client.services.rest.async.ActiviteUtilisateurCallback;
import org.tela_botanica.del.client.services.rest.async.ObservationsCallback;
import org.tela_botanica.del.client.utils.StringUtils;
import org.tela_botanica.del.client.vues.identiplante.resultats.observations.ObservationPresenteur;
import org.tela_botanica.del.client.vues.identiplante.resultats.observations.ObservationVue;
 
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.event.dom.client.HasClickHandlers;
import com.google.gwt.user.client.Timer;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.ui.HasWidgets;
import com.google.gwt.user.client.ui.IsWidget;
import com.google.gwt.user.client.ui.Label;
 
public class ResultatsIdentiplantePresenteur extends Presenteur {
 
/**
* Interface vue : création des composants graphiques
* */
public abstract interface Vue extends IsWidget {
public HasWidgets getZoneObservations();
 
public HasWidgets getZonePaginationHaut();
 
public HasWidgets getZonePaginationBas();
 
public void startChargement();
 
public void stopChargement();
 
public void nettoyer();
 
public HasClickHandlers getTriParDateObservationAscendant();
 
public HasClickHandlers getTriParDateObservationDescendant();
public HasClickHandlers getTriParDatePublicationAscendant();
 
public HasClickHandlers getTriParDatePublicationDescendant();
public HasClickHandlers getTriParNbCommentairesAscendant();
 
public HasClickHandlers getTriParNbCommentairesDescendant();
 
public void afficherElementsAucunResultatTrouve();
 
public void afficherElementsResultatsTrouves();
 
public HasClickHandlers getLabelDateObservation();
public HasClickHandlers getLabelDatePublication();
public HasClickHandlers getLabelNbCommentaires();
 
void setModeTriPublication(ModeTri mode);
 
void setModeTriObservation(ModeTri mode);
 
void setModeTriNbCommentaires(ModeTri mode);
void afficherCacherZoneTri(boolean afficher);
}
 
private Vue vue;
private ObservationService serviceObs;
private ModeTri triCourantDatePublication = ModeTri.TRI_DESCENDANT;
private ModeTri triCourantDateObservation = ModeTri.PAS_DE_TRI;
private ModeTri triCourantNbCommentaires = ModeTri.PAS_DE_TRI;
private CacheClient cache = CacheClient.getInstance();
private String statut;
 
/**
* Constructeur de la classe
*
* @param ObservationService
* serviceObs le service pour récupérer les observations
* @Vue Vue l'objet implémentant l'interface
* */
public ResultatsIdentiplantePresenteur(ObservationService serviceObs, Vue vue) {
String statut = CacheClient.getInstance().getFiltreStatut();
this.vue = vue;
InformationsRecherche infos = CacheClient.getInstance().getInformationsRechercheObservation();
if (infos.getTriParDatePublication() != ModeTri.PAS_DE_TRI) {
triCourantDatePublication = infos.getTriParDatePublication();
vue.setModeTriPublication(triCourantDatePublication);
}
if (infos.getTriParDateObservation() != ModeTri.PAS_DE_TRI) {
triCourantDateObservation = infos.getTriParDateObservation();
vue.setModeTriObservation(triCourantDatePublication);
}
if (infos.getTriParNbCommentaires() != ModeTri.PAS_DE_TRI) {
triCourantNbCommentaires = infos.getTriParNbCommentaires();
vue.setModeTriNbCommentaires(triCourantNbCommentaires);
}
this.serviceObs = serviceObs;
this.statut = statut;
}
 
/**
* Lancer l'affichage de la recherche dans le composant passé en paramètre
*
* @param HasWidgets composite le conteneur de widgets dans lequel ajouter la vue
* */
public void go(HasWidgets composite) {
composite.add(vue.asWidget());
lancerRechercheEtCreerWidgetPagination();
gererEvenements();
}
 
/**
* Initier un callback pour créer le widget de pagination et afficher les
* observations recues et lancer la recherche avec le service
* */
public void lancerRechercheEtCreerWidgetPagination() {
int debut = (cache.getPageCouranteRechercheObservations() - 1) * cache.getPasPagination();
int fin = cache.getPageCouranteRechercheObservations() * cache.getPasPagination();
 
ObservationsCallback callback = new ObservationsCallback() {
 
@Override
public void surRetour(ObservationServiceResultat observationsRecues) {
creerWidgetPagination(observationsRecues.getNbTotalObservationsPourLaRecherche());
afficherObservations(observationsRecues);
 
}
 
@Override
public void surErreur(String messageErreur) {
Window.alert(messageErreur);
 
}
};
 
serviceObs.getObservations(cache.getInformationsRechercheObservation(), debut, fin, statut, callback);
}
 
/**
* Créer les widgets de pagination en fonction du nombre d'observation
*
* @param int nbObservations le nombre d'observations à afficher
* */
private void creerWidgetPagination(int nbObservations) {
vue.getZonePaginationHaut().clear();
PaginationPresenteur paginationPresenteurHaut = creerPresenteurPagination(nbObservations);
paginationPresenteurHaut.setGroupePagination("pagination_observations");
paginationPresenteurHaut.go(vue.getZonePaginationHaut());
 
vue.getZonePaginationBas().clear();
PaginationPresenteur paginationPresenteurBas = creerPresenteurPagination(nbObservations);
paginationPresenteurBas.setGroupePagination("pagination_observations");
paginationPresenteurBas.go(vue.getZonePaginationBas());
}
 
/**
* Créer un présenteur du widget pagination
*
* @param int nbObservations le nombre total d'observation à afficher
* */
private PaginationPresenteur creerPresenteurPagination(int nbObservations) {
PaginationPresenteur presenteur = new PaginationPresenteur(new PaginationVue(), nbObservations, cache.getPasPagination(), cache.getPageCouranteRechercheObservations()) {
 
@Override
public void chargerElements(int debut, int fin) {
chargerEtAfficherObservations(debut, fin);
cache.setPageCouranteRechercheObservations(getPageCourante());
}
 
@Override
public void actualiserPasCache(int pas) {
cache.setPasPagination(pas);
}
 
};
return presenteur;
}
 
/**
* Gestion des évènements de la vue recherche Observation
* */
protected void gererEvenements() {
 
ClickHandler surClicDateObservation = new ClickHandler() {
/**
* Gestion du clic sur l'option de tri par date d'observation Masque
* les éléments de tri qui sont en cours et affiche les autres
* */
public void onClick(ClickEvent event) {
toggleModeTriObservation();
 
InformationsRecherche informationsRechercheObservations = cache.getInformationsRechercheObservation();
informationsRechercheObservations.setTriParDatePublication(ModeTri.PAS_DE_TRI);
informationsRechercheObservations.setTriParNbCommentaires(ModeTri.PAS_DE_TRI);
informationsRechercheObservations.setTriParDateObservation(triCourantDateObservation);
chercherEtAfficherObservationsPageEnCours();
}
};
ClickHandler surClicDatePublication = new ClickHandler() {
/**
* Gestion du clic sur l'option de tri par date d'observation Masque
* les éléments de tri qui sont en cours et affiche les autres
* */
public void onClick(ClickEvent event) {
toggleModeTriPublication();
 
InformationsRecherche informationsRechercheObservations = cache.getInformationsRechercheObservation();
informationsRechercheObservations.setTriParDateObservation(ModeTri.PAS_DE_TRI);
informationsRechercheObservations.setTriParNbCommentaires(ModeTri.PAS_DE_TRI);
informationsRechercheObservations.setTriParDatePublication(triCourantDatePublication);
 
chercherEtAfficherObservationsPageEnCours();
}
};
ClickHandler surClicNbCommentaires = new ClickHandler() {
/**
* Même comportement qu'au dessus mais pour le tri par nb de commentaires
*/
public void onClick(ClickEvent event) {
toggleModeTriNbCommentaires();
 
InformationsRecherche informationsRechercheObservations = cache.getInformationsRechercheObservation();
informationsRechercheObservations.setTriParDateObservation(ModeTri.PAS_DE_TRI);
informationsRechercheObservations.setTriParDatePublication(ModeTri.PAS_DE_TRI);
informationsRechercheObservations.setTriParNbCommentaires(triCourantNbCommentaires);
chercherEtAfficherObservationsPageEnCours();
}
};
 
vue.getLabelDateObservation().addClickHandler(surClicDateObservation);
vue.getTriParDateObservationAscendant().addClickHandler(surClicDateObservation);
vue.getTriParDateObservationDescendant().addClickHandler(surClicDateObservation);
vue.getLabelDatePublication().addClickHandler(surClicDatePublication);
vue.getTriParDatePublicationAscendant().addClickHandler(surClicDatePublication);
vue.getTriParDatePublicationDescendant().addClickHandler(surClicDatePublication);
vue.getLabelNbCommentaires().addClickHandler(surClicNbCommentaires);
vue.getTriParNbCommentairesAscendant().addClickHandler(surClicNbCommentaires);
vue.getTriParNbCommentairesDescendant().addClickHandler(surClicNbCommentaires);
}
 
/**
* Inverser le mode de tri en fonction du précédent
* */
public void toggleModeTriPublication() {
if (triCourantDatePublication == ModeTri.TRI_ASCENDANT) {
triCourantDatePublication = ModeTri.TRI_DESCENDANT;
} else if(triCourantDatePublication == ModeTri.TRI_DESCENDANT) {
triCourantDatePublication = ModeTri.TRI_ASCENDANT;
} else {
triCourantDatePublication = ModeTri.TRI_DESCENDANT;
}
triCourantDateObservation = ModeTri.PAS_DE_TRI;
triCourantNbCommentaires = ModeTri.PAS_DE_TRI;
 
vue.setModeTriPublication(triCourantDatePublication);
}
/**
* Inverser le mode de tri en fonction du précédent
* */
public void toggleModeTriObservation() {
if (triCourantDateObservation == ModeTri.TRI_ASCENDANT) {
triCourantDateObservation = ModeTri.TRI_DESCENDANT;
} else if(triCourantDateObservation == ModeTri.TRI_DESCENDANT) {
triCourantDateObservation = ModeTri.TRI_ASCENDANT;
} else {
triCourantDateObservation = ModeTri.TRI_DESCENDANT;
}
triCourantDatePublication = ModeTri.PAS_DE_TRI;
triCourantNbCommentaires = ModeTri.PAS_DE_TRI;
 
vue.setModeTriObservation(triCourantDateObservation);
}
/**
* Inverser le mode de tri en fonction du précédent
* */
public void toggleModeTriNbCommentaires() {
if (triCourantNbCommentaires == ModeTri.TRI_ASCENDANT) {
triCourantNbCommentaires = ModeTri.TRI_DESCENDANT;
} else if(triCourantNbCommentaires == ModeTri.TRI_DESCENDANT) {
triCourantNbCommentaires = ModeTri.TRI_ASCENDANT;
} else {
triCourantNbCommentaires = ModeTri.TRI_DESCENDANT;
}
triCourantDateObservation = ModeTri.PAS_DE_TRI;
triCourantDatePublication = ModeTri.PAS_DE_TRI;
 
vue.setModeTriNbCommentaires(triCourantNbCommentaires);
}
 
/**
* Initialiser les variable de début et fin et lancer le chargement des
* observations
* */
public void chercherEtAfficherObservationsPageEnCours() {
int debut = (cache.getPageCouranteRechercheObservations() - 1) * cache.getPasPagination();
int fin = (cache.getPageCouranteRechercheObservations()) * cache.getPasPagination();
chargerEtAfficherObservations(debut, fin);
}
 
/**
* Lancer le service pour charger les observations entre debut et fin et les
* afficher
*
* @param int debut l'entier de départ de la requete
* @param int fin l'entier de limite de la requete
* */
public void chargerEtAfficherObservations(int debut, int fin) {
vue.startChargement();
vue.nettoyer();
 
ObservationsCallback surReceptionObservation = new ObservationsCallback() {
 
@Override
public void surRetour(ObservationServiceResultat observationsRecues) {
afficherObservations(observationsRecues);
 
}
 
@Override
public void surErreur(String messageErreur) {
Window.alert(messageErreur);
 
}
};
serviceObs.getObservations(cache.getInformationsRechercheObservation(), debut, fin, statut, surReceptionObservation);
}
 
/**
* Parcrourir les résultats de la recherche pour initier l'affichage de
* chaque observation
*
* @param ObservationServiceResultat
* resultats les résultats issus de la requête
* */
private void afficherObservations(ObservationServiceResultat resultats) {
vue.nettoyer();
 
if (resultats.getObservations() == null || resultats.getObservations().size() == 0) {
vue.afficherElementsAucunResultatTrouve();
} else {
vue.afficherElementsResultatsTrouves();
// Si on consulte l'onglet mon activité, on cache le tri qui n'a pas de sens ici car c'est une timeline
vue.afficherCacherZoneTri(!cache.getFiltreStatut().equals(ConstantesNavigation.PARAM_TYPE_MONACTIVITE));
// S'il y a de nouveau évènements sur l'obs, elle doit être mise en valeur
// les x premieres obs sont affichées un peu différemment (où x est le nombre de nouveaux évènements)
int i = 0;
int nbEvents = CacheClient.getInstance().getUtilisateur().getActivite().getNbEvenementsInt();
for (Observation observation : resultats.getObservations()) {
List<Image> listeImagesObs = observation.getImages();
Image imagePrincipale = null;
if(listeImagesObs != null && listeImagesObs.size() > 0) {
imagePrincipale = listeImagesObs.get(0);
}
ObservationPresenteur presenteur = new ObservationPresenteur(new ObservationVue(), observation, imagePrincipale);
presenteur.go(vue.getZoneObservations());
// La taille de la page s'étant adaptée au nombre de nouveaux évènements, on applique
// uniquement la mise en valeur sur la premiere
if(nbEvents != 0 && i < nbEvents && cache.getPageCouranteRechercheObservations() == 1) {
presenteur.mettreEnValeurEvenementsObs();
}
i++;
}
}
CacheClient.getInstance().mettreAjourUrlCourante();
vue.stopChargement();
}
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/vues/identiplante/resultats/ResultatsIdentiplanteVue.java
New file
0,0 → 1,195
package org.tela_botanica.del.client.vues.identiplante.resultats;
 
import org.tela_botanica.del.client.modeles.ModeTri;
 
import com.google.gwt.core.client.GWT;
import com.google.gwt.event.dom.client.HasClickHandlers;
import com.google.gwt.uibinder.client.UiBinder;
import com.google.gwt.uibinder.client.UiField;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.HasWidgets;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.Panel;
import com.google.gwt.user.client.ui.Widget;
 
public class ResultatsIdentiplanteVue extends Composite implements ResultatsIdentiplantePresenteur.Vue {
 
@UiField
Panel panneauChargement;
 
// Gestion d'UiBinder
interface Binder extends UiBinder<Widget, ResultatsIdentiplanteVue> {
}
 
private static Binder binder = GWT.create(Binder.class);
 
@UiField
Panel zoneObservations, zonePaginationHaut, zonePaginationBas, zoneTri;
 
@UiField
Button triParDateObservationAscendant, triParDateObservationDescendant,
triParDatePublicationAscendant, triParDatePublicationDescendant,
triParNbCommentairesAscendant, triParNbCommentairesDescendant;
 
@UiField
Label aucunResultat, labelDateObservation, labelDatePublication, labelNbCommentaires;
 
// Constructeur de la vue
public ResultatsIdentiplanteVue() {
initWidget(binder.createAndBindUi(this));
}
@Override
public HasWidgets getZoneObservations() {
return zoneObservations;
}
 
@Override
public HasWidgets getZonePaginationHaut() {
return zonePaginationHaut;
}
 
@Override
public HasWidgets getZonePaginationBas() {
return zonePaginationBas;
}
 
/**
* Nettoie et remet à zéro les composants du panneau qui doivent l'être
* */
@Override
public void nettoyer() {
zoneObservations.clear();
}
 
@Override
public void startChargement() {
panneauChargement.setHeight(zoneObservations.getOffsetHeight() + "px");
panneauChargement.setVisible(true);
}
 
@Override
public void stopChargement() {
panneauChargement.setVisible(false);
}
 
public void afficherElementsAucunResultatTrouve() {
nettoyer();
aucunResultat.setVisible(true);
zonePaginationHaut.setVisible(false);
zonePaginationBas.setVisible(false);
zoneTri.setVisible(false);
}
 
public void afficherElementsResultatsTrouves() {
aucunResultat.setVisible(false);
zonePaginationHaut.setVisible(true);
zonePaginationBas.setVisible(true);
zoneTri.setVisible(true);
}
public void afficherCacherZoneTri(boolean afficher) {
zoneTri.setVisible(afficher);
}
 
public Button getTriParDateObservationAscendant() {
return triParDateObservationAscendant;
}
 
public Button getTriParDateObservationDescendant() {
return triParDateObservationDescendant;
}
public Button getTriParDatePublicationAscendant() {
return triParDatePublicationAscendant;
}
 
public Button getTriParDatePublicationDescendant() {
return triParDatePublicationDescendant;
}
@Override
public Label getLabelDateObservation() {
return labelDateObservation;
}
@Override
public Label getLabelDatePublication() {
return labelDatePublication;
}
@Override
public Label getLabelNbCommentaires() {
return labelNbCommentaires;
}
@Override
public HasClickHandlers getTriParNbCommentairesAscendant() {
return triParNbCommentairesAscendant;
}
 
@Override
public HasClickHandlers getTriParNbCommentairesDescendant() {
return triParNbCommentairesDescendant;
}
private void cacherTris() {
triParDateObservationAscendant.setVisible(false);
triParDateObservationDescendant.setVisible(false);
triParDatePublicationDescendant.setVisible(false);
triParDatePublicationAscendant.setVisible(false);
triParNbCommentairesAscendant.setVisible(false);
triParNbCommentairesDescendant.setVisible(false);
}
/**
* En fonction du sens du tri (ascendant ou descendant), on change l'affichage des
* boutons de tri pour masquer que celui qui doit être cliquable.
* @param ModeTri le mode Ascendant ou Descendant
* */
@Override
public void setModeTriPublication(ModeTri mode) {
cacherTris();
if (mode == ModeTri.TRI_ASCENDANT) {
triParDatePublicationAscendant.setVisible(true);
triParDatePublicationDescendant.setVisible(false);
} else {
triParDatePublicationDescendant.setVisible(true);
triParDatePublicationAscendant.setVisible(false);
}
}
/**
* En fonction du sens du tri (ascendant ou descendant), on change l'affichage des
* boutons de tri pour masquer que celui qui doit être cliquable.
* @param ModeTri le mode Ascendant ou Descendant
* */
@Override
public void setModeTriObservation(ModeTri mode) {
cacherTris();
if (mode == ModeTri.TRI_ASCENDANT) {
triParDateObservationAscendant.setVisible(true);
triParDateObservationDescendant.setVisible(false);
} else {
triParDateObservationDescendant.setVisible(true);
triParDateObservationAscendant.setVisible(false);
}
}
 
@Override
public void setModeTriNbCommentaires(ModeTri mode) {
cacherTris();
if (mode == ModeTri.TRI_ASCENDANT) {
triParNbCommentairesAscendant.setVisible(true);
triParNbCommentairesDescendant.setVisible(false);
} else {
triParNbCommentairesDescendant.setVisible(true);
triParNbCommentairesAscendant.setVisible(false);
}
}
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/vues/pictoflora/plateformedetermination/determinationVue.css
New file
0,0 → 1,120
.pageDetermination {
}
.metadonnees {
margin-bottom:10px;
margin-top:10px;
display:inline-block;
}
.zoneVote {
margin-left: 5px;
height: 100%;
display:inline-block;
vertical-align:top;
border-left: solid 1px #DDD;
border-right: solid 1px #DDD;
padding-left: 10px;
padding-right:10px;
text-align:left;
}
 
.taxonPlusProbable {
float: left;
}
 
.zoneBarreRepartition {
border: solid 1px #DDD;
padding: 15px;
}
 
.zoneDetailImage {
height: 100%;
width: 255px;
display:inline-block;
vertical-align:top;
text-align:left;
clear: left;
}
 
.zoneImage {
margin-bottom: 10px;
margin-right: 15px
}
 
.zoneImage div {
clear: left;
padding-top: 5px;
}
 
.zoneImage div img {
float: left;
padding: 0 5px 0 0;
}
 
.boutonProposer {
float: left;
padding: 5px;
cursor: pointer;
background:#8EB533;
border:none;
margin-right:10px;
margin-top:10px;
}
 
.zoneOutils {
width: 15%;
padding-left:10px;
display:inline-block;
vertical-align:top;
text-align:left;
}
 
.boutons {
margin-bottom:15px;
}
 
.lienProposerObservation {
margin-left: 575px;
}
 
.nomTaxonProbable{
padding-left:3px;
}
 
.taxonProbable {
background: none repeat scroll 0 0 #F8F8C3;
clear: left;
font-size: 15px;
margin-bottom: 5px;
padding: 13px 9px;
}
 
.voteProtocole div {
margin-bottom:10px;
}
 
.voteProtocole div div {
margin-bottom:0px;
border:solid 0px red
}
.autreOutils {
margin-top:15px;
}
 
.zonerss {
margin-top:5px;
}
 
.lienProposerImage {
margin-top:20px;
margin-left:70px;
margin-bottom:10px;
}
 
.lienAide {
margin-right:70px;
padding:4px 15px;
margin-top:19px;
float:right;
color:white;
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/vues/pictoflora/plateformedetermination/PictofloraDeterminationVue.ui.xml
New file
0,0 → 1,55
<!DOCTYPE ui:UiBinder SYSTEM "http://dl.google.com/gwt/DTD/xhtml.ent">
<ui:UiBinder
xmlns:ui='urn:ui:com.google.gwt.uibinder'
xmlns:g='urn:import:com.google.gwt.user.client.ui'
xmlns:forum="urn:import:org.tela_botanica.del.client.composants.forum">
 
<ui:with field="constants" type="org.tela_botanica.del.client.i18n.Vocabulary"/>
<ui:style src="determinationVue.css" />
 
<g:HTMLPanel styleName="{style.pageDetermination}">
<g:HTMLPanel styleName="limiteMax">
<g:Hyperlink ui:field="lienRetour" styleName="lien">Retour</g:Hyperlink>
<g:HTMLPanel ui:field="metadonnees" styleName="{style.metadonnees}"/>
</g:HTMLPanel>
<g:HTMLPanel styleName="contenuCentre">
<g:HTMLPanel styleName="{style.zoneDetailImage}">
<g:VerticalPanel ui:field="detailImageObservation" styleName="{style.zoneImage}"/>
<g:Label text="Votes associés à l'image" styleName="titre"></g:Label>
<g:HTMLPanel ui:field="voteProtocole" styleName="{style.voteProtocole}"/>
</g:HTMLPanel>
<g:HTMLPanel styleName="{style.zoneVote}">
<g:Label styleName="titre" text="{constants.titreDetermination}" />
<g:HTMLPanel styleName="nettoyage {style.boutons}">
<g:Button text="{constants.proposerSaDetermination}" ui:field="boutonAjoutProposition" styleName="bouton" />
<g:Button text="{constants.ajouterCommentaire}" ui:field="boutonAjoutCommentaire" styleName="bouton" />
<g:HTMLPanel ui:field="zoneRss" styleName="droite {style.zonerss}"></g:HTMLPanel>
</g:HTMLPanel>
<g:HTMLPanel styleName="{style.taxonProbable}">
<g:Label styleName="gauche" text="{constants.determinationPlusProbable}" />
<g:Label ui:field="nomTaxonProbable" styleName="gauche gras {style.nomTaxonProbable}"/>
<g:HTML><br /></g:HTML>
</g:HTMLPanel>
<g:VerticalPanel ui:field="forum" />
<g:HTMLPanel styleName="nettoyage {style.boutons}">
<g:Button text="{constants.proposerSaDetermination}" ui:field="boutonAjoutPropositionBas" styleName="bouton" />
<g:Button text="{constants.ajouterCommentaire}" ui:field="boutonAjoutCommentaireBas" styleName="bouton" />
</g:HTMLPanel>
</g:HTMLPanel>
<g:HTMLPanel styleName="{style.zoneOutils}">
<g:Label text="Pour vous aider : " styleName="titre3"></g:Label>
<g:VerticalPanel ui:field="formulaireRechercheEflore"/>
<g:Label styleName="{style.autreOutils} sousTitre">Vérifier sa détermination</g:Label>
<g:Label styleName="lienListe labelLien" ui:field="lienEflore">eFlore</g:Label>
<g:Label styleName="{style.autreOutils} sousTitre">Autres outils en ligne</g:Label>
<g:Label styleName="lienListe labelLien" ui:field="lienOuvrages">Flores numérisées</g:Label>
<g:Label styleName="lienListe labelLien" ui:field="lienBonnier">Flore Bonnier interactive</g:Label>
<g:Label styleName="lienListe labelLien" ui:field="lienCles">Clés de détermination</g:Label>
</g:HTMLPanel>
</g:HTMLPanel>
</g:HTMLPanel>
</ui:UiBinder>
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/vues/pictoflora/plateformedetermination/PictofloraDeterminationPresenteur.java
New file
0,0 → 1,294
package org.tela_botanica.del.client.vues.pictoflora.plateformedetermination;
 
import java.util.Iterator;
import java.util.List;
 
import org.tela_botanica.del.client.cache.CacheClient;
import org.tela_botanica.del.client.composants.fenetreoverlay.FenetreOverlayDefilanteVue;
import org.tela_botanica.del.client.composants.fenetreoverlay.FenetreOverlaySimplePresenteur;
import org.tela_botanica.del.client.composants.formulairerechercheeflore.FormulaireRechercheEflorePresenteur;
import org.tela_botanica.del.client.composants.formulaires.formulairecommentaire.FormulaireCommentairePresenteur;
import org.tela_botanica.del.client.composants.formulaires.formulairecommentaire.FormulaireCommentaireVue;
import org.tela_botanica.del.client.composants.formulaires.formulaireproposition.FormulairePropositionPresenteur;
import org.tela_botanica.del.client.composants.formulaires.formulaireproposition.FormulairePropositionVue;
import org.tela_botanica.del.client.composants.forum.ForumPresenteur;
import org.tela_botanica.del.client.composants.forum.ForumVue;
import org.tela_botanica.del.client.composants.metadonnees.MetadonneesEnLigneVue;
import org.tela_botanica.del.client.composants.metadonnees.MetadonneesPresenteur;
import org.tela_botanica.del.client.composants.observations.ObservationImagesPresenteur;
import org.tela_botanica.del.client.composants.observations.ObservationImagesVue;
import org.tela_botanica.del.client.composants.partageurl.PartageUrlPresenteur;
import org.tela_botanica.del.client.composants.partageurl.PartageUrlVue;
import org.tela_botanica.del.client.composants.presenteur.Presenteur;
import org.tela_botanica.del.client.composants.rss.RssPresenteur;
import org.tela_botanica.del.client.composants.rss.RssVue;
import org.tela_botanica.del.client.config.Config;
import org.tela_botanica.del.client.gestionhistorique.ConstantesNavigation;
import org.tela_botanica.del.client.modeles.Image;
import org.tela_botanica.del.client.modeles.ModeRecherche;
import org.tela_botanica.del.client.modeles.MoyenneVote;
import org.tela_botanica.del.client.modeles.Observation;
import org.tela_botanica.del.client.modeles.ObservationServiceResultat;
import org.tela_botanica.del.client.modeles.Protocole;
import org.tela_botanica.del.client.modeles.ProtocoleServiceResultat;
import org.tela_botanica.del.client.modeles.VoteDetermination;
import org.tela_botanica.del.client.navigation.evenement.BusEvenementiel;
import org.tela_botanica.del.client.navigation.evenement.ajoutcommentaire.EvenementAjoutCommentaire;
import org.tela_botanica.del.client.navigation.evenement.ajoutcommentaire.GestionnaireEvenementAjoutCommentaire;
import org.tela_botanica.del.client.navigation.evenement.ajoutdetermination.EvenementAjoutDetermination;
import org.tela_botanica.del.client.navigation.evenement.ajoutdetermination.GestionnaireEvenementAjoutDetermination;
import org.tela_botanica.del.client.navigation.evenement.changementimagevalidation.EvenementChangementImageValidation;
import org.tela_botanica.del.client.navigation.evenement.changementimagevalidation.GestionnaireEvenementChangementImageValidation;
import org.tela_botanica.del.client.navigation.evenement.voteDetermination.EvenementVoteDetermination;
import org.tela_botanica.del.client.navigation.evenement.voteDetermination.GestionnaireEvenementVoteDetermination;
import org.tela_botanica.del.client.services.CalculVoteDeterminationService;
import org.tela_botanica.del.client.services.rest.CommentaireServiceConcret;
import org.tela_botanica.del.client.services.rest.ObservationService;
import org.tela_botanica.del.client.services.rest.PropositionDeterminationServiceConcret;
import org.tela_botanica.del.client.services.rest.ProtocoleService;
import org.tela_botanica.del.client.services.rest.async.ObservationsCallback;
import org.tela_botanica.del.client.services.rest.async.ProtocolesCallback;
import org.tela_botanica.del.client.utils.URLUtils;
import org.tela_botanica.del.client.vues.pictoflora.plateformedetermination.ligneProtocole.LigneProtocolePresenteur;
import org.tela_botanica.del.client.vues.pictoflora.plateformedetermination.ligneProtocole.LigneProtocoleVue;
 
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.event.dom.client.HasClickHandlers;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.HasWidgets;
import com.google.gwt.user.client.ui.IsWidget;
import com.google.gwt.user.client.ui.Panel;
 
public class PictofloraDeterminationPresenteur extends Presenteur {
 
/**
* Vue de l'interface de détermination
* */
public interface Vue extends IsWidget {
public Panel getForum();
 
public Panel getDetailImageObservation();
 
public Panel getFormulaireRechercheEflore();
 
public Panel getVoteProtocole();
 
public Button getBoutonAjoutProposition();
 
public Button getBoutonAjoutCommentaire();
 
public Button getBoutonAjoutPropositionBas();
 
public Button getBoutonAjoutCommentaireBas();
 
public HasWidgets getMetadonnees();
 
public HasWidgets getNouvelleLigneProtocole();
 
public void afficherNomTaxonProbable(String nomTaxon);
public HasClickHandlers getLienOuvrages();
public HasClickHandlers getLienBonnier();
public HasClickHandlers getLienCles();
public HasClickHandlers getLienEflore();
public HasWidgets getZoneRss();
}
 
private Vue vue;
private FenetreOverlaySimplePresenteur fenetreOverlaySimplePresenteur;
 
// Déclaration des services à utiliser
private ProtocoleService protocoleService;
private ObservationService observationService;
 
private CacheClient cache = CacheClient.getInstance();
 
public PictofloraDeterminationPresenteur(Vue vue, ObservationService observationService, ProtocoleService protocoleService) {
this.vue = vue;
this.protocoleService = protocoleService;
this.observationService = observationService;
}
 
public void go(final HasWidgets composite) {
 
// TODO afficher une icone de chargement si le chargement devient trop
// long
// car tout l'écran est asynchrone ici
String observationId = URLUtils.getURLSpecialParameterValue();
 
observationService.getObservation(observationId, new ObservationsCallback() {
 
@Override
public void surRetour(ObservationServiceResultat objetRetour) {
afficherRss(cache.getObservationCourante());
// trouve l'image courante si elle n'est pas deja en cache
List<Image> listeImages = cache.getObservationCourante().getImages();
if (listeImages.size() > 0) {
CacheClient.getInstance().setImageCourante(listeImages.get(0));
} else {
CacheClient.getInstance().setImageCourante(null);
}
 
new MetadonneesPresenteur(new MetadonneesEnLigneVue(), cache.getObservationCourante(), ModeRecherche.MODE_OBSERVATION, false).go(vue.getMetadonnees());
new ObservationImagesPresenteur(new ObservationImagesVue(), cache.getObservationCourante(), CacheClient.getInstance().getImageCourante()).go(vue.getDetailImageObservation());
chargerEtAjouterLignesVotesProtocole();
new ForumPresenteur(new ForumVue()).go(vue.getForum());
new FormulaireRechercheEflorePresenteur().go(vue.getFormulaireRechercheEflore());
 
calculerEtAfficherVoteDeterminationPlusPopulaire();
composite.add(vue.asWidget());
 
}
 
@Override
public void surErreur(String messageErreur) {
Window.alert(messageErreur);
}
});
gererEvenements();
}
 
public void afficherRss(Observation observation) {
new RssPresenteur(new RssVue(), observation, "Suivre cette observation").go(vue.getZoneRss());
}
private void chargerEtAjouterLignesVotesProtocole() {
if (cache.getListeProtocoles() == null) {
protocoleService.getProtocoles(new ProtocolesCallback() {
 
@Override
public void surRetour(ProtocoleServiceResultat protocolesRecus) {
List<Protocole> listeProtocoles = protocolesRecus.getProtocoles();
ajouterLignesVotesProtocole(listeProtocoles);
}
});
} else {
List<Protocole> listeProtocoles = cache.getListeProtocoles();
ajouterLignesVotesProtocole(listeProtocoles);
}
}
 
private void ajouterLignesVotesProtocole(List<Protocole> listeProtocoles) {
for (Iterator<Protocole> iterator = listeProtocoles.iterator(); iterator.hasNext();) {
Protocole protocole = iterator.next();
LigneProtocolePresenteur presenteurLigneProtocole = new LigneProtocolePresenteur(protocole, new LigneProtocoleVue());
presenteurLigneProtocole.go(vue.getNouvelleLigneProtocole());
}
}
 
private void calculerEtAfficherVoteDeterminationPlusPopulaire() {
 
Observation observation = cache.getObservationCourante();
String nomTaxon = observation.getNomRetenu();
 
List<MoyenneVote> votesOrdonnes = CalculVoteDeterminationService.calculerVoteDeterminationPlusPopulaire(cache.getObservationCourante().getPropositionDeterminations());
if (votesOrdonnes.size() > 0) {
nomTaxon = votesOrdonnes.get(0).getIntituleAssocie();
}
 
vue.afficherNomTaxonProbable(nomTaxon);
}
 
public void gererEvenements() {
BusEvenementiel.getInstance().addHandler(EvenementVoteDetermination.TYPE, new GestionnaireEvenementVoteDetermination() {
@Override
public void onVoteDetermination(VoteDetermination event) {
calculerEtAfficherVoteDeterminationPlusPopulaire();
}
});
 
ClickHandler clicAjoutProposition = new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
fenetreOverlaySimplePresenteur = new FenetreOverlaySimplePresenteur(new FenetreOverlayDefilanteVue());
fenetreOverlaySimplePresenteur.ouvrirFenetreModale(new FormulairePropositionPresenteur(new FormulairePropositionVue(), new PropositionDeterminationServiceConcret()));
}
};
vue.getBoutonAjoutProposition().addClickHandler(clicAjoutProposition);
vue.getBoutonAjoutPropositionBas().addClickHandler(clicAjoutProposition);
 
ClickHandler clicAjoutCommentaire = new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
FormulaireCommentairePresenteur commentairePresenteur = new FormulaireCommentairePresenteur(cache.getObservationCourante(), new CommentaireServiceConcret(), new FormulaireCommentaireVue());
fenetreOverlaySimplePresenteur = new FenetreOverlaySimplePresenteur(new FenetreOverlayDefilanteVue());
fenetreOverlaySimplePresenteur.ouvrirFenetreModale(commentairePresenteur);
}
};
vue.getBoutonAjoutCommentaire().addClickHandler(clicAjoutCommentaire);
vue.getBoutonAjoutCommentaireBas().addClickHandler(clicAjoutCommentaire);
 
BusEvenementiel.getInstance().addHandler(EvenementAjoutDetermination.TYPE, new GestionnaireEvenementAjoutDetermination() {
@Override
public void onAjoutDetermination(EvenementAjoutDetermination event) {
if (fenetreOverlaySimplePresenteur != null && fenetreOverlaySimplePresenteur.fenetreModaleEstOuverte()) {
fenetreOverlaySimplePresenteur.fermerFenetreModale();
}
}
});
 
BusEvenementiel.getInstance().addHandler(EvenementAjoutCommentaire.TYPE, new GestionnaireEvenementAjoutCommentaire() {
 
@Override
public void onAjoutCommentaire(EvenementAjoutCommentaire event) {
if (fenetreOverlaySimplePresenteur != null && fenetreOverlaySimplePresenteur.fenetreModaleEstOuverte()) {
fenetreOverlaySimplePresenteur.fermerFenetreModale();
}
}
});
 
BusEvenementiel.getInstance().addHandler(EvenementChangementImageValidation.TYPE, new GestionnaireEvenementChangementImageValidation() {
 
@Override
public void onChangementImage(EvenementChangementImageValidation event) {
vue.getDetailImageObservation().clear();
vue.getVoteProtocole().clear();
new ObservationImagesPresenteur(new ObservationImagesVue(), cache.getObservationCourante(), CacheClient.getInstance().getImageCourante()).go(vue.getDetailImageObservation());
chargerEtAjouterLignesVotesProtocole();
}
});
vue.getLienOuvrages().addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
Config config = new Config();
Window.open(config.getUrl("ouvragesFlore"), "Flores numérisées", config.getInfo("popupOptions"));
}
});
 
vue.getLienBonnier().addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
Config config = new Config();
Window.open(config.getUrl("bonnierPda"), "Flore Bonnier PDA", config.getInfo("popupOptions"));
}
});
vue.getLienCles().addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
Config config = new Config();
Window.open(config.getUrl("clesDetermination"), "Clés de determination", config.getInfo("popupOptions"));
}
});
vue.getLienEflore().addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
Config config = new Config();
Window.open(config.getUrl("eflore"), "eFlore", config.getInfo("popupOptions"));
}
});
}
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/vues/pictoflora/plateformedetermination/detail/DetailImageObservationVue.ui.xml
New file
0,0 → 1,36
<!DOCTYPE ui:UiBinder SYSTEM "http://dl.google.com/gwt/DTD/xhtml.ent">
<ui:UiBinder
xmlns:ui='urn:ui:com.google.gwt.uibinder'
xmlns:g='urn:import:com.google.gwt.user.client.ui'>
 
<ui:with field="constants" type="org.tela_botanica.del.client.i18n.Vocabulary"/>
<ui:style src="detailObservation.css" />
<g:VerticalPanel>
<g:Image ui:field="imageObservation"/>
<g:VerticalPanel ui:field="detailObservation" styleName="{style.detailObservation}">
<g:HorizontalPanel styleName="{style.observateur}">
<!-- g:Label text="{constants.observateur} : "/ -->
<g:Label ui:field="nomObservateur" /><g:HTML>&nbsp;-&nbsp;</g:HTML><g:Label ui:field="localite" /><g:HTML>&nbsp;-&nbsp;</g:HTML><g:Label ui:field="dateObservation" />
</g:HorizontalPanel>
<g:HorizontalPanel>
<!-- <g:Label text="{constants.nom_retenu} : "/> -->
<g:Label ui:field="nomRetenu" styleName="{style.nomRetenu}"/>
</g:HorizontalPanel>
<g:HorizontalPanel styleName="{style.date}">
<!-- <g:Label text="{constants.date_observation} : "/> -->
</g:HorizontalPanel>
<g:HorizontalPanel>
<!-- <g:Label text="{constants.famille} : "/> -->
<g:HorizontalPanel><g:Label ui:field="famille" /></g:HorizontalPanel>
</g:HorizontalPanel>
<g:HorizontalPanel>
<!-- <g:Label text="{constants.localite} : "/> -->
</g:HorizontalPanel>
</g:VerticalPanel>
</g:VerticalPanel>
 
</ui:UiBinder>
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/vues/pictoflora/plateformedetermination/detail/DetailImageObservationPresenteur.java
New file
0,0 → 1,24
package org.tela_botanica.del.client.vues.pictoflora.plateformedetermination.detail;
 
import org.tela_botanica.del.client.cache.CacheClient;
 
import com.google.gwt.user.client.ui.HasWidgets;
import com.google.gwt.user.client.ui.IsWidget;
 
public class DetailImageObservationPresenteur {
public interface Vue extends IsWidget {
public void chargerInformationsObservation(org.tela_botanica.del.client.modeles.Image image);
}
 
private Vue vue;
public DetailImageObservationPresenteur(Vue vue) {
this.vue = vue;
}
 
public void go(HasWidgets composite) {
vue.chargerInformationsObservation(CacheClient.getInstance().getImageCourante());
composite.add(vue.asWidget());
}
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/vues/pictoflora/plateformedetermination/detail/DetailImageObservationVue.java
New file
0,0 → 1,38
package org.tela_botanica.del.client.vues.pictoflora.plateformedetermination.detail;
 
 
 
import com.google.gwt.core.client.GWT;
import com.google.gwt.uibinder.client.UiBinder;
import com.google.gwt.uibinder.client.UiField;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.Image;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.Widget;
 
public class DetailImageObservationVue extends Composite implements DetailImageObservationPresenteur.Vue {
 
@UiField
protected Image imageObservation;
 
@UiField
protected Label nomObservateur, nomRetenu, dateObservation, famille, localite;
 
private static DetailImageObservationUIiBinder uiBinder = GWT.create(DetailImageObservationUIiBinder.class);
 
interface DetailImageObservationUIiBinder extends UiBinder<Widget, DetailImageObservationVue> {
};
 
public DetailImageObservationVue() {
initWidget(uiBinder.createAndBindUi(this));
}
 
public void chargerInformationsObservation(org.tela_botanica.del.client.modeles.Image image) {
imageObservation.setUrl(image.getUrl());
nomObservateur.setText(image.getObservation().getAuteur());
nomRetenu.setText(image.getObservation().getNomRetenuFormateReferentiel());
famille.setText(image.getObservation().getFamille());
localite.setText(image.getObservation().getLocalite());
dateObservation.setText(image.getObservation().getDateReleve());
}
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/vues/pictoflora/plateformedetermination/detail/detailObservation.css
New file
0,0 → 1,27
.detailObservation {
font-size: 11px;
position: absolute;
padding: 5px;
color: white;
background: #333;
opacity: 0.8;
margin-top: -80px;
width: 230px;
}
 
.observateur td {
font-size: 11px;
white-space: nowrap
}
 
.date {
}
 
.nomRetenu {
font-weight: bold
}
 
.dateObservation {
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/vues/pictoflora/plateformedetermination/PictofloraDeterminationVue.java
New file
0,0 → 1,117
package org.tela_botanica.del.client.vues.pictoflora.plateformedetermination;
 
import org.tela_botanica.del.client.gestionhistorique.ConstantesNavigation;
 
import com.google.gwt.core.client.GWT;
import com.google.gwt.event.dom.client.HasClickHandlers;
import com.google.gwt.uibinder.client.UiBinder;
import com.google.gwt.uibinder.client.UiField;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.HTMLPanel;
import com.google.gwt.user.client.ui.HasWidgets;
import com.google.gwt.user.client.ui.Hyperlink;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.Panel;
import com.google.gwt.user.client.ui.Widget;
 
public class PictofloraDeterminationVue extends Composite implements PictofloraDeterminationPresenteur.Vue {
 
@UiField
Panel forum, detailImageObservation, formulaireRechercheEflore, voteProtocole, zoneRss;
@UiField
Label nomTaxonProbable, lienOuvrages, lienEflore, lienBonnier, lienCles;
@UiField
Hyperlink lienRetour;
@UiField
Button boutonAjoutProposition, boutonAjoutPropositionBas, boutonAjoutCommentaire, boutonAjoutCommentaireBas;
@UiField
Panel metadonnees;
 
interface DeterminationUIiBinder extends UiBinder<Widget, PictofloraDeterminationVue> {
};
 
private static DeterminationUIiBinder uiBinder = GWT.create(DeterminationUIiBinder.class);
 
public PictofloraDeterminationVue() {
initWidget(uiBinder.createAndBindUi(this));
lienRetour.setTargetHistoryToken(ConstantesNavigation.HOME);
}
 
public Panel getForum() {
return forum;
}
 
public Panel getDetailImageObservation() {
return detailImageObservation;
}
 
public Panel getFormulaireRechercheEflore() {
return formulaireRechercheEflore;
}
 
public Panel getVoteProtocole() {
return voteProtocole;
}
public Button getBoutonAjoutProposition() {
return boutonAjoutProposition;
}
public Button getBoutonAjoutPropositionBas() {
return boutonAjoutPropositionBas;
}
public Panel getMetadonnees() {
return metadonnees;
}
 
@Override
public void afficherNomTaxonProbable(String nomTaxon) {
this.nomTaxonProbable.setText(nomTaxon);
}
 
@Override
public HasWidgets getNouvelleLigneProtocole() {
HTMLPanel nouvelleLigne = new HTMLPanel("");
this.voteProtocole.add(nouvelleLigne);
return nouvelleLigne;
}
 
public Button getBoutonAjoutCommentaire() {
return boutonAjoutCommentaire;
}
public Button getBoutonAjoutCommentaireBas() {
return boutonAjoutCommentaireBas;
}
 
@Override
public HasClickHandlers getLienOuvrages() {
return lienOuvrages;
}
 
@Override
public HasClickHandlers getLienBonnier() {
return lienBonnier;
}
 
@Override
public HasClickHandlers getLienCles() {
return lienCles;
}
 
@Override
public HasClickHandlers getLienEflore() {
return lienEflore;
}
public HasWidgets getZoneRss() {
return zoneRss;
}
}
 
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/vues/pictoflora/plateformedetermination/ligneProtocole/LigneProtocolePresenteur.java
New file
0,0 → 1,59
package org.tela_botanica.del.client.vues.pictoflora.plateformedetermination.ligneProtocole;
 
import org.tela_botanica.del.client.cache.CacheClient;
import org.tela_botanica.del.client.composants.presenteur.Presenteur;
import org.tela_botanica.del.client.composants.votes.moyennevotes.MoyenneVotePresenteur;
import org.tela_botanica.del.client.composants.votes.moyennevotes.MoyenneVoteVue;
import org.tela_botanica.del.client.modeles.Image;
import org.tela_botanica.del.client.modeles.Protocole;
import org.tela_botanica.del.client.navigation.evenement.BusEvenementiel;
import org.tela_botanica.del.client.navigation.evenement.changementimagevalidation.EvenementChangementImageValidation;
import org.tela_botanica.del.client.navigation.evenement.changementimagevalidation.GestionnaireEvenementChangementImageValidation;
import org.tela_botanica.del.client.services.rest.VoteProtocoleServiceConcret;
 
import com.google.gwt.user.client.ui.HasWidgets;
import com.google.gwt.user.client.ui.IsWidget;
 
public class LigneProtocolePresenteur extends Presenteur {
 
public interface Vue extends IsWidget {
 
HasWidgets getZoneVote();
}
 
private Vue vue;
private Protocole protocole;
 
public LigneProtocolePresenteur(Protocole protocole, Vue vue) {
this.vue = vue;
this.protocole = protocole;
chargerValeursProtocolePourImageCourante();
}
public void chargerValeursProtocolePourImageCourante(){
vue.getZoneVote().clear();
Image imageCourante = CacheClient.getInstance().getImageCourante();
MoyenneVotePresenteur votePresenteur = new MoyenneVotePresenteur(imageCourante, protocole, new MoyenneVoteVue(), new VoteProtocoleServiceConcret());
votePresenteur.go(vue.getZoneVote());
}
 
public Vue getVue() {
return vue;
}
 
public void go(HasWidgets composite) {
composite.add(vue.asWidget());
gererEvenements();
}
 
@Override
protected void gererEvenements() {
BusEvenementiel.getInstance().addHandler(EvenementChangementImageValidation.TYPE, new GestionnaireEvenementChangementImageValidation() {
 
@Override
public void onChangementImage(EvenementChangementImageValidation event) {
chargerValeursProtocolePourImageCourante();
}
});
}
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/vues/pictoflora/plateformedetermination/ligneProtocole/LigneProtocoleVue.java
New file
0,0 → 1,30
package org.tela_botanica.del.client.vues.pictoflora.plateformedetermination.ligneProtocole;
 
import com.google.gwt.core.client.GWT;
import com.google.gwt.uibinder.client.UiBinder;
import com.google.gwt.uibinder.client.UiField;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.HasWidgets;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.Panel;
import com.google.gwt.user.client.ui.Widget;
 
public class LigneProtocoleVue extends Composite implements LigneProtocolePresenteur.Vue {
@UiField
Panel zoneVote;
interface LigneProtocoleUIiBinder extends UiBinder<Widget, LigneProtocoleVue> {
};
 
private static LigneProtocoleUIiBinder uiBinder = GWT.create(LigneProtocoleUIiBinder.class);
 
public LigneProtocoleVue() {
initWidget(uiBinder.createAndBindUi(this));
}
 
@Override
public HasWidgets getZoneVote() {
return this.zoneVote;
}
 
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/vues/pictoflora/plateformedetermination/ligneProtocole/ligneProtocole.css
New file
0,0 → 1,7
.nomProtocole {
font-size: 11px;
overflow: hidden;
text-overflow: ellipsis;
width: 87px;
margin-bottom:15px;
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/vues/pictoflora/plateformedetermination/ligneProtocole/LigneProtocoleVue.ui.xml
New file
0,0 → 1,10
<!DOCTYPE ui:UiBinder SYSTEM "http://dl.google.com/gwt/DTD/xhtml.ent">
<ui:UiBinder
xmlns:ui='urn:ui:com.google.gwt.uibinder'
xmlns:g='urn:import:com.google.gwt.user.client.ui'
xmlns:forum="urn:import:org.tela_botanica.del.client.composants.forum">
<ui:style src="ligneProtocole.css" />
<g:HorizontalPanel styleName="vote">
<g:HTMLPanel ui:field="zoneVote" />
</g:HorizontalPanel>
</ui:UiBinder>
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/vues/pictoflora/resultats/ResultatPictofloraVue.ui.xml
New file
0,0 → 1,48
<ui:UiBinder xmlns:ui='urn:ui:com.google.gwt.uibinder'
xmlns:g='urn:import:com.google.gwt.user.client.ui' ui:generateFormat='com.google.gwt.i18n.rebind.format.PropertiesFormat'
ui:generateKeys="com.google.gwt.i18n.rebind.keygen.MD5KeyGenerator"
ui:generateLocales="default">
 
<ui:style src="ResultatPictoflora.css" />
<ui:with field="constants" type="org.tela_botanica.del.client.i18n.Vocabulary" />
 
<g:HTMLPanel styleName="{style.contenuResultat}">
<g:HTMLPanel styleName="{style.barreNavigation} limiteMax limiteMin">
<g:VerticalPanel ui:field="panneauPaginationHaut" styleName="gauche {style.paginationHaut}" />
<g:HTMLPanel ui:field="zoneTri" styleName="gauche {style.zoneTri} petit">
<g:Label text="{constants.tri}" styleName="gauche {style.labeltri}"/>
<g:HTMLPanel ui:field="triParDate" styleName="gauche">
<g:Label text="{constants.triParDatePubli}" title="{constants.triParDatePubliTooltip}" styleName="gauche {style.date}" ui:field="labelDate"/>
<g:Button title="{constants.triParDatePubliAscendant}" ui:field="triParDateAscendant" styleName="{style.boutonTriAsc} gauche" />
<g:Button title="{constants.triParDatePubliDescendant}" ui:field="triParDateDescendant" styleName="{style.boutonTriDesc} gauche" />
</g:HTMLPanel>
<g:HTMLPanel ui:field="triParMoyenneArithmetique" styleName="gauche">
<g:Label text="{constants.triParMoyenneArithmetique}" title="{constants.triParMoyenneArithmetiqueTooltip}" styleName="gauche {style.moyenneArithmetique}" ui:field="labelMoyenneArithmetique"/>
<g:Button title="{constants.triParMoyenneArithmetiqueAscendant}" ui:field="triParMoyenneArithmetiqueAscendant" styleName="{style.boutonTriAsc} gauche" />
<g:Button title="{constants.triParMoyenneArithmetiqueDescendant}" ui:field="triParMoyenneArithmetiqueDescendant" styleName="{style.boutonTriDesc} gauche" />
</g:HTMLPanel>
<g:HTMLPanel ui:field="triParPoints" styleName="gauche">
<g:Label text="{constants.triParNbPoints}" title="{constants.triParNbPointsTooltip}" styleName="gauche {style.points}" ui:field="labelPoints"/>
<g:Button title="{constants.triParNbPointsAscendant}" ui:field="triParPointsAscendant" styleName="{style.boutonTriAsc} gauche" />
<g:Button title="{constants.triParNbPointsDescendant}" ui:field="triParPointsDescendant" styleName="{style.boutonTriDesc} gauche" />
</g:HTMLPanel>
<g:HTMLPanel ui:field="triParNbTags" styleName="gauche">
<g:Label text="{constants.triParNbTags}" title="{constants.triParNbTagsTooltip}" styleName="gauche {style.tag}" ui:field="labelTag"/>
<g:Button title="{constants.triParNbTagsAscendant}" ui:field="triParNbTagsAscendant" styleName="{style.boutonTriAsc} gauche" />
<g:Button title="{constants.triParNbTagsDescendant}" ui:field="triParNbTagsDescendant" styleName="{style.boutonTriDesc} gauche" />
</g:HTMLPanel>
</g:HTMLPanel>
</g:HTMLPanel>
<g:VerticalPanel ui:field="panneauChargement">
<g:Image url="./img/wait.gif"></g:Image>
</g:VerticalPanel>
<g:Label ui:field="aucunResultat" styleName="{style.aucunResultat}" text="{constants.aucunResultat}" visible="false" />
<g:HTMLPanel ui:field="imageTable" styleName="{style.images}" />
<g:HTMLPanel styleName="nettoyage"></g:HTMLPanel>
<g:VerticalPanel ui:field="panneauPagination" styleName="limiteMax limiteMin"/>
</g:HTMLPanel>
</ui:UiBinder>
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/vues/pictoflora/resultats/ResultatPictofloraPresenteur.java
New file
0,0 → 1,434
package org.tela_botanica.del.client.vues.pictoflora.resultats;
 
import java.util.List;
 
import org.tela_botanica.del.client.cache.CacheClient;
import org.tela_botanica.del.client.composants.pagination.PaginationPresenteur;
import org.tela_botanica.del.client.composants.pagination.PaginationVue;
import org.tela_botanica.del.client.modeles.Image;
import org.tela_botanica.del.client.modeles.ImageServiceResultat;
import org.tela_botanica.del.client.modeles.InformationsRecherche;
import org.tela_botanica.del.client.modeles.ModeTri;
import org.tela_botanica.del.client.modeles.Protocole;
import org.tela_botanica.del.client.modeles.ProtocoleServiceResultat;
import org.tela_botanica.del.client.navigation.evenement.BusEvenementiel;
import org.tela_botanica.del.client.navigation.evenement.changementprotocole.EvenementChangementProtocole;
import org.tela_botanica.del.client.navigation.evenement.changementprotocole.GestionnaireEvenementChangementProtocole;
import org.tela_botanica.del.client.services.rest.ImageService;
import org.tela_botanica.del.client.services.rest.ProtocoleService;
import org.tela_botanica.del.client.services.rest.async.ImagesParTaxonCallback;
import org.tela_botanica.del.client.services.rest.async.ProtocolesCallback;
import org.tela_botanica.del.client.vues.pictoflora.resultats.images.ImagePresenteur;
import org.tela_botanica.del.client.vues.pictoflora.resultats.images.ImageVue;
 
import com.google.gwt.core.shared.GWT;
import com.google.gwt.dom.client.NodeList;
import com.google.gwt.dom.client.OptionElement;
import com.google.gwt.dom.client.SelectElement;
import com.google.gwt.event.dom.client.ChangeEvent;
import com.google.gwt.event.dom.client.ChangeHandler;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.event.dom.client.HasChangeHandlers;
import com.google.gwt.event.dom.client.HasClickHandlers;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.ui.HTMLPanel;
import com.google.gwt.user.client.ui.HasWidgets;
import com.google.gwt.user.client.ui.IsWidget;
import com.google.gwt.user.client.ui.ListBox;
 
public class ResultatPictofloraPresenteur {
public interface Vue extends IsWidget {
public void startChargement();
 
public void nettoyer();
 
public void creerPanneauxObservations(int size);
 
public void stopChargement();
 
public List<HasWidgets> getPanneauxImages();
 
public HasWidgets getPanneauPagination();
 
public HasWidgets getPanneauPaginationHaut();
 
public HasClickHandlers getTriParMoyenneArithmetiqueAscendant();
 
public HasClickHandlers getTriParMoyenneArithmetiqueDescendant();
 
public HasClickHandlers getTriParPointsAscendant();
 
public HasClickHandlers getTriParPointsDescendant();
 
public HasClickHandlers getTriParDateAscendant();
 
public HasClickHandlers getTriParDateDescendant();
public HasClickHandlers getTriParNbTagsAscendant();
 
public HasClickHandlers getTriParNbTagsDescendant();
 
public void afficherElementsAucunResultatTrouve();
 
public void afficherElementsResultatsTrouve();
 
public HTMLPanel getImageTable();
 
public HasClickHandlers getLabelMoyenneArithmetique();
 
public void masquerMoyenneArithmetiqueAscendant();
 
public void masquerMoyenneArithmetiqueDescendant();
 
public void afficherMoyenneArithmetiqueAscendant();
 
public void afficherMoyenneArithmetiqueDescendant();
 
public HasClickHandlers getLabelDate();
 
public void masquerDateAscendant();
 
public void masquerDateDescendant();
 
public void afficherDateAscendant();
 
public void afficherDateDescendant();
public HasClickHandlers getLabelTag();
 
public void masquerTagAscendant();
 
public void afficherTagDescendant();
 
public void masquerTagDescendant();
 
public void afficherTagAscendant();
 
public HasClickHandlers getLabelPoints();
 
public void afficherPointsAscendant();
 
public void afficherPointsDescendant();
 
public void masquerPointsAscendant();
 
public void masquerPointsDescendant();
 
}
 
private Vue vue;
private ImageService imageService;
private ModeTri triCourantMoyenneArithmetique = ModeTri.TRI_ASCENDANT;
private ModeTri triCourantPoints = ModeTri.TRI_ASCENDANT;
private ModeTri triCourantDate = ModeTri.TRI_DESCENDANT;
private ModeTri triCourantTag = ModeTri.TRI_DESCENDANT;
 
public ResultatPictofloraPresenteur(ImageService imageService, ProtocoleService protocoleService, Vue vue) {
this.vue = vue;
this.imageService = imageService;
}
 
public void go(HasWidgets composite) {
composite.add(vue.asWidget());
vue.startChargement();
rechercherImagesEtCreerWidgetPagination();
gererEvenements();
vue.masquerMoyenneArithmetiqueDescendant();
vue.masquerMoyenneArithmetiqueAscendant();
vue.masquerDateDescendant();
vue.masquerDateAscendant();
vue.masquerTagAscendant();
vue.masquerTagDescendant();
vue.masquerPointsAscendant();
vue.masquerPointsDescendant();
initialiserAPartirInfosCache();
}
private void initialiserAPartirInfosCache() {
InformationsRecherche infos = CacheClient.getInstance().getInformationsRechercheImage();
if (infos.getTriParDatePublication() != ModeTri.PAS_DE_TRI) {
triCourantDate = infos.getTriParDatePublication();
mettreAJourAffichageTriDate();
}
if (infos.getTriParMoyenneArithmetique() != ModeTri.PAS_DE_TRI) {
triCourantMoyenneArithmetique = infos.getTriParMoyenneArithmetique();
mettreAJourAffichageTriMoyenneArithmetique();
}
if (infos.getTriParNbPoints() != ModeTri.PAS_DE_TRI) {
triCourantPoints = infos.getTriParNbPoints();
mettreAJourAffichageTriPoints();
}
if (infos.getTriParNbTags() != ModeTri.PAS_DE_TRI) {
triCourantTag = infos.getTriParNbTags();
mettreAjourAffichageTriTag();
}
}
 
public void gererEvenements() {
ClickHandler surClicTriMoyenneArithmetique = new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
surClicTriMoyenneArithmetique();
}
};
 
vue.getLabelMoyenneArithmetique().addClickHandler(surClicTriMoyenneArithmetique);
vue.getTriParMoyenneArithmetiqueAscendant().addClickHandler(surClicTriMoyenneArithmetique);
vue.getTriParMoyenneArithmetiqueDescendant().addClickHandler(surClicTriMoyenneArithmetique);
 
ClickHandler surClicTriPoints = new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
surClicTriPoints();
}
};
 
vue.getLabelPoints().addClickHandler(surClicTriPoints);
vue.getTriParPointsAscendant().addClickHandler(surClicTriPoints);
vue.getTriParPointsDescendant().addClickHandler(surClicTriPoints);
 
ClickHandler surClicTriDate = new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
surClicTriDate();
}
};
 
vue.getLabelDate().addClickHandler(surClicTriDate);
vue.getTriParDateAscendant().addClickHandler(surClicTriDate);
vue.getTriParDateDescendant().addClickHandler(surClicTriDate);
ClickHandler surClicTriTag = new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
surClicTriTag();
}
};
vue.getLabelTag().addClickHandler(surClicTriTag);
vue.getTriParNbTagsAscendant().addClickHandler(surClicTriTag);
vue.getTriParNbTagsDescendant().addClickHandler(surClicTriTag);
 
BusEvenementiel.getInstance().addHandler(EvenementChangementProtocole.TYPE, new GestionnaireEvenementChangementProtocole() {
@Override
public void onChangementProtocole(EvenementChangementProtocole event) {
InformationsRecherche informationsRechercheImages = CacheClient.getInstance().getInformationsRechercheImage();
if (informationsRechercheImages.getTriParMoyenneArithmetique() != ModeTri.PAS_DE_TRI) {
informationsRechercheImages.setIdProtocoleSelectionne(event.getProtocole().getId() + "");
chargerEtAfficherImagesPageEnCours();
}
}
});
}
 
protected void surClicTriTag() {
triCourantTag = (triCourantTag == ModeTri.TRI_ASCENDANT) ? ModeTri.TRI_DESCENDANT : ModeTri.TRI_ASCENDANT;
mettreAjourAffichageTriTag();
InformationsRecherche informationsRechercheImages = CacheClient.getInstance().getInformationsRechercheImage();
informationsRechercheImages.setTriParNbTags(triCourantTag);
informationsRechercheImages.setTriParDatePublication(ModeTri.PAS_DE_TRI);
informationsRechercheImages.setTriParMoyenneArithmetique(ModeTri.PAS_DE_TRI);
informationsRechercheImages.setTriParNbPoints(ModeTri.PAS_DE_TRI);
chargerEtAfficherImagesPageEnCours();
}
private void mettreAjourAffichageTriTag() {
vue.masquerDateDescendant();
vue.masquerDateAscendant();
vue.masquerMoyenneArithmetiqueDescendant();
vue.masquerMoyenneArithmetiqueAscendant();
vue.masquerPointsAscendant();
vue.masquerPointsDescendant();
if (triCourantTag == ModeTri.TRI_ASCENDANT) {
vue.masquerTagDescendant();
vue.afficherTagAscendant();
} else {
vue.masquerTagAscendant();
vue.afficherTagDescendant();
}
}
 
public void surClicTriMoyenneArithmetique() {
triCourantMoyenneArithmetique = (triCourantMoyenneArithmetique == ModeTri.TRI_ASCENDANT) ? ModeTri.TRI_DESCENDANT : ModeTri.TRI_ASCENDANT;
mettreAJourAffichageTriMoyenneArithmetique();
InformationsRecherche informationsRechercheImages = CacheClient.getInstance().getInformationsRechercheImage();
int IdProtocole = CacheClient.getInstance().getProtocoleCourant().getId();
informationsRechercheImages.setTriParMoyenneArithmetique(triCourantMoyenneArithmetique);
informationsRechercheImages.setIdProtocoleSelectionne(IdProtocole + "");
informationsRechercheImages.setTriParDatePublication(ModeTri.PAS_DE_TRI);
informationsRechercheImages.setTriParNbTags(ModeTri.PAS_DE_TRI);
informationsRechercheImages.setTriParNbPoints(ModeTri.PAS_DE_TRI);
chargerEtAfficherImagesPageEnCours();
}
private void mettreAJourAffichageTriMoyenneArithmetique() {
vue.masquerDateDescendant();
vue.masquerDateAscendant();
vue.masquerTagAscendant();
vue.masquerTagDescendant();
vue.masquerPointsAscendant();
vue.masquerPointsDescendant();
if (triCourantMoyenneArithmetique == ModeTri.TRI_ASCENDANT) {
vue.masquerMoyenneArithmetiqueDescendant();
vue.afficherMoyenneArithmetiqueAscendant();
} else {
vue.masquerMoyenneArithmetiqueAscendant();
vue.afficherMoyenneArithmetiqueDescendant();
}
}
 
public void surClicTriPoints() {
triCourantPoints = (triCourantPoints == ModeTri.TRI_ASCENDANT) ? ModeTri.TRI_DESCENDANT : ModeTri.TRI_ASCENDANT;
mettreAJourAffichageTriPoints();
InformationsRecherche informationsRechercheImages = CacheClient.getInstance().getInformationsRechercheImage();
int IdProtocole = CacheClient.getInstance().getProtocoleCourant().getId();
informationsRechercheImages.setTriParNbPoints(triCourantPoints);
informationsRechercheImages.setIdProtocoleSelectionne(IdProtocole + "");
informationsRechercheImages.setTriParDatePublication(ModeTri.PAS_DE_TRI);
informationsRechercheImages.setTriParNbTags(ModeTri.PAS_DE_TRI);
informationsRechercheImages.setTriParMoyenneArithmetique(ModeTri.PAS_DE_TRI);
chargerEtAfficherImagesPageEnCours();
}
private void mettreAJourAffichageTriPoints() {
vue.masquerDateDescendant();
vue.masquerDateAscendant();
vue.masquerTagAscendant();
vue.masquerTagDescendant();
vue.masquerMoyenneArithmetiqueAscendant();
vue.masquerMoyenneArithmetiqueDescendant();
if (triCourantPoints == ModeTri.TRI_ASCENDANT) {
vue.masquerPointsDescendant();
vue.afficherPointsAscendant();
} else {
vue.masquerPointsAscendant();
vue.afficherPointsDescendant();
}
}
 
public void surClicTriDate() {
triCourantDate = (triCourantDate == ModeTri.TRI_ASCENDANT) ? ModeTri.TRI_DESCENDANT : ModeTri.TRI_ASCENDANT;
mettreAJourAffichageTriDate();
InformationsRecherche informationsRechercheImages = CacheClient.getInstance().getInformationsRechercheImage();
informationsRechercheImages.setTriParDatePublication(triCourantDate);
informationsRechercheImages.setTriParMoyenneArithmetique(ModeTri.PAS_DE_TRI);
informationsRechercheImages.setTriParNbTags(ModeTri.PAS_DE_TRI);
informationsRechercheImages.setTriParNbPoints(ModeTri.PAS_DE_TRI);
chargerEtAfficherImagesPageEnCours();
}
private void mettreAJourAffichageTriDate() {
vue.masquerTagAscendant();
vue.masquerTagDescendant();
vue.masquerMoyenneArithmetiqueDescendant();
vue.masquerMoyenneArithmetiqueAscendant();
vue.masquerPointsAscendant();
vue.masquerPointsDescendant();
if (triCourantDate == ModeTri.TRI_ASCENDANT) {
vue.masquerDateDescendant();
vue.afficherDateAscendant();
} else {
vue.masquerDateAscendant();
vue.afficherDateDescendant();
}
}
 
public void rechercherImagesEtCreerWidgetPagination() {
// appel du service d'image pour avoir le nb total d'elements pour la
// pagination
ImagesParTaxonCallback callback = new ImagesParTaxonCallback() {
 
@Override
public void surRetour(ImageServiceResultat imagesRecues) {
creerWidgetPagination(imagesRecues.getNbTotalImagesPourLaRecherche());
afficherImages(imagesRecues);
 
}
 
@Override
public void surErreur(String messageErreur) {
Window.alert(messageErreur);
 
}
};
final int debut = (CacheClient.getInstance().getPageCouranteRechercheImage() - 1) * CacheClient.getInstance().getPasPagination();
final int fin = (CacheClient.getInstance().getPageCouranteRechercheImage()) * CacheClient.getInstance().getPasPagination();
imageService.getImagesParTaxon(CacheClient.getInstance().getInformationsRechercheImage(), debut, fin, callback);
}
 
private void chargerEtAfficherImages(final int premier, final int dernier) {
vue.startChargement();
vue.nettoyer();
ImagesParTaxonCallback callback = new ImagesParTaxonCallback() {
 
@Override
public void surRetour(ImageServiceResultat imagesRecues) {
afficherImages(imagesRecues);
}
 
@Override
public void surErreur(String messageErreur) {
Window.alert(messageErreur);
}
 
};
imageService.getImagesParTaxon(CacheClient.getInstance().getInformationsRechercheImage(), premier, dernier, callback);
}
 
public void afficherImages(ImageServiceResultat imageServiceResult) {
List<Image> images = imageServiceResult.getImages();
if (images == null || images.size() == 0) {
vue.afficherElementsAucunResultatTrouve();
} else {
vue.afficherElementsResultatsTrouve();
for (Image image : images) {
ImagePresenteur imagePresenteur = new ImagePresenteur(image, imageService, CacheClient.getInstance().getProtocoleCourant(), new ImageVue());
imagePresenteur.go(vue.getImageTable());
}
}
CacheClient.getInstance().mettreAjourUrlCourante();
vue.stopChargement();
}
 
private void creerWidgetPagination(int nbImages) {
PaginationPresenteur imagesPaginationPresenteurHaut = creerPresenteurPagination(nbImages);
PaginationPresenteur imagesPaginationPresenteurBas = creerPresenteurPagination(nbImages);
imagesPaginationPresenteurHaut.setGroupePagination("pagination_images");
imagesPaginationPresenteurBas.setGroupePagination("pagination_images");
imagesPaginationPresenteurHaut.go(vue.getPanneauPaginationHaut());
imagesPaginationPresenteurBas.go(vue.getPanneauPagination());
}
 
public PaginationPresenteur creerPresenteurPagination(int nbImages) {
PaginationPresenteur imagesPaginationPresenteur = new PaginationPresenteur(new PaginationVue(), nbImages, CacheClient.getInstance().getPasPagination(), CacheClient.getInstance().getPageCouranteRechercheImage()) {
@Override
public void chargerElements(int debut, int fin) {
chargerEtAfficherImages(debut, fin);
CacheClient.getInstance().setPageCouranteRechercheImages(getPageCourante());
}
 
@Override
public void actualiserPasCache(int pas) {
CacheClient.getInstance().setPasPagination(pas);
}
};
return imagesPaginationPresenteur;
}
 
public void chargerEtAfficherImagesPageEnCours() {
final int debut = (CacheClient.getInstance().getPageCouranteRechercheImage() - 1) * CacheClient.getInstance().getPasPagination();
final int fin = (CacheClient.getInstance().getPageCouranteRechercheImage()) * CacheClient.getInstance().getPasPagination();
chargerEtAfficherImages(debut, fin);
}
 
public Vue getVue() {
return vue;
}
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/vues/pictoflora/resultats/images/image.css
New file
0,0 → 1,144
.observations {
width: 250px;
height: 250px;
margin-bottom: 50px;
}
.observations img {
width: 250px;
padding: 0;
}
.zoneCache {
position: absolute;
padding: 5px;
border: solid 1px #CCC;
background: #333;
opacity: 0.9;
color: white;
width: 238px;
z-index: 1000;
margin-top: 35px;
}
.zoneMotsCles {
position: absolute;
padding: 5px;
border: solid 1px #CCC;
background: #333;
opacity: 0.9;
color: white;
width: 239px;
z-index: 1000;
margin-top: 212px;
}
.zoneActionsImg {
position:absolute;
width:30px;
height:30px;
margin-top:3px;
margin-left:216px;
}
.cadreBtnSupprImg, .cadreBtnVoirTags, .cadreBtnVoirInfoObs {
width:30px;
height:30px;
cursor:pointer;
background-color:rgba(51,51,51, 0.7);
border-radius:5px;
}
.cadreBtnSupprImg:hover, .cadreBtnVoirTags:hover, .cadreBtnVoirInfoObs:hover {
background-color:rgba(0,0,0, 0.7);
border: 1px solid rgba(255,255,255, 0.7);
}
.cadreBtnVoirTags {
position: absolute;
margin-top: 180px;
margin-left: 216px;
}
.cadreBtnVoirInfoObs {
position: absolute;
margin-top: 3px;
margin-left: 3px;
}
.btnSupprImg, .btnVoirTags, .btnVoirInfoObs {
width:30px;
height:30px;
}
.btnSupprImg {
background:url(./img/24x24/delete.png) 3px 3px no-repeat;
}
.btnVoirTags {
background:url(./img/24x24/tagger.png) 3px 3px no-repeat;
}
.btnVoirInfoObs {
background:url(./img/24x24/plus.png) 3px 3px no-repeat;
}
.zoom {
background: url(./img/loupe.png);
width: 30px;
height: 30px;
cursor: pointer;
margin-top: 3px;
position: absolute;
margin-left: 217px;
}
.espece {
font-size: 12px;
font-weight: bold;
color: white;
padding-left: 5px;
padding-right: 1px;
}
.espece p,.auteur p {
padding: 0px;
margin: 0px;
overflow: hidden;
text-overflow: ellipsis;
white-space: pre;
min-height: 13px;
}
.zoneDetail {
position: absolute;
}
.zonePlus {
position: absolute;
width: 246px;
padding: 2px;
margin-top: -88px;
opacity: 0.9;
color: white;
text-align: left;
overflow: hidden;
text-overflow: ellipsis;
background:#333;
}
.zoneImage {
cursor: pointer;
height: 280px;
margin-bottom: 20px;
background: #DDD;
}
.zoneVoter {
margin-top: -48px;
text-align: center;
opacity: 0.9;
width: 240px;
position: absolute;
height: 35px;
padding: 5px;
}
.metadonnees, .motsCles {
text-align: left;
}
.auteur {
padding-left: 5px;
padding-right: 1px;
padding-top: 3px;
}
.boutonFermer {
background: url("./img/close.png") no-repeat scroll 5px 0 transparent;
border: medium none;
height: 30px;
margin-left: 104px;
margin-top: -20px;
position: absolute;
width: 40px;
cursor:pointer;
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/vues/pictoflora/resultats/images/ImageVue.ui.xml
New file
0,0 → 1,45
<ui:UiBinder xmlns:ui="urn:ui:com.google.gwt.uibinder"
xmlns:g="urn:import:com.google.gwt.user.client.ui"
ui:generateFormat="com.google.gwt.i18n.rebind.format.PropertiesFormat"
ui:generateKeys="com.google.gwt.i18n.rebind.keygen.MD5KeyGenerator"
ui:generateLocales="default">
 
<ui:with field="res" type="org.tela_botanica.del.client.resources.Ressources"/>
<ui:with field="constants" type="org.tela_botanica.del.client.i18n.Vocabulary"/>
<ui:style src="image.css" />
<g:HTMLPanel styleName="{style.observations}">
<g:HTMLPanel styleName="{style.zoneDetail}">
<g:HTMLPanel ui:field="cadreBtnVoirInfoObs" styleName="{style.cadreBtnVoirInfoObs}">
<g:PushButton ui:field="btnVoirInfoObs" text=" " styleName="{style.btnVoirInfoObs}"/>
</g:HTMLPanel>
 
<g:HTMLPanel ui:field="cadreBtnVoirTags" styleName="{style.cadreBtnVoirTags}">
<g:PushButton ui:field="btnVoirTags" styleName="{style.btnVoirTags}"/>
</g:HTMLPanel>
<g:HTMLPanel ui:field="zoneActionsImage" styleName="{style.zoneActionsImg}">
<g:HTMLPanel ui:field="cadreBtnSupprImage" styleName="{style.cadreBtnSupprImg}">
<g:PushButton ui:field="btnSupprImg" styleName="{style.btnSupprImg}"/>
</g:HTMLPanel>
</g:HTMLPanel>
 
<g:HTMLPanel styleName="{style.zoneCache}" ui:field="zoneCache">
<g:HTMLPanel ui:field="metadonnees" styleName="{style.metadonnees}"/>
</g:HTMLPanel>
<g:HTMLPanel styleName="{style.zoneMotsCles}" ui:field="zoneMotsCles">
<g:Button ui:field="boutonFermer" styleName="{style.boutonFermer}"/>
<g:HTMLPanel ui:field="motsCles" styleName="{style.motsCles}"/>
</g:HTMLPanel>
</g:HTMLPanel>
<g:HTMLPanel styleName="{style.zoneImage}">
<g:Image ui:field="imagePrincipale" resource="{res.logo}" />
</g:HTMLPanel>
<g:HTMLPanel styleName="{style.zonePlus}" ui:field="zonePlus">
<g:HTML ui:field="nomAuteur" styleName="petit {style.auteur}">Auteur</g:HTML>
<g:HTML ui:field="nomEspece" styleName="{style.espece}"></g:HTML>
</g:HTMLPanel>
<g:HTMLPanel styleName="{style.zoneVoter} arrondi-faible" ui:field="zoneVoter">
<g:HorizontalPanel ui:field="voter"/>
</g:HTMLPanel>
</g:HTMLPanel>
</ui:UiBinder>
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/vues/pictoflora/resultats/images/ImagePresenteur.java
New file
0,0 → 1,334
package org.tela_botanica.del.client.vues.pictoflora.resultats.images;
 
import java.util.HashMap;
 
import org.tela_botanica.del.client.cache.CacheClient;
import org.tela_botanica.del.client.composants.fenetreoverlay.FenetreOverlayDefilanteVue;
import org.tela_botanica.del.client.composants.fenetreoverlay.FenetreOverlaySimplePresenteur;
import org.tela_botanica.del.client.composants.images.DetailImagePresenteur;
import org.tela_botanica.del.client.composants.images.DetailImageVue;
import org.tela_botanica.del.client.composants.metadonnees.MetadonneesPresenteur;
import org.tela_botanica.del.client.composants.metadonnees.MetadonneesVue;
import org.tela_botanica.del.client.composants.motsclesimages.MotsClesImagePresenteur;
import org.tela_botanica.del.client.composants.motsclesimages.MotsClesImageVue;
import org.tela_botanica.del.client.composants.motsclesimages.formulairesaisiemotclesimages.FormulaireSaisieMotsClesImagePresenteur;
import org.tela_botanica.del.client.composants.motsclesimages.formulairesaisiemotclesimages.FormulaireSaisieMotsClesImageVue;
import org.tela_botanica.del.client.composants.presenteur.Presenteur;
import org.tela_botanica.del.client.composants.votes.moyennevotes.MoyenneVotePresenteur;
import org.tela_botanica.del.client.composants.votes.moyennevotes.MoyenneVoteVue;
import org.tela_botanica.del.client.config.Config;
import org.tela_botanica.del.client.i18n.I18n;
import org.tela_botanica.del.client.modeles.Commentaire;
import org.tela_botanica.del.client.modeles.Image;
import org.tela_botanica.del.client.modeles.ModeRecherche;
import org.tela_botanica.del.client.modeles.Observation;
import org.tela_botanica.del.client.modeles.Protocole;
import org.tela_botanica.del.client.modeles.Utilisateur;
import org.tela_botanica.del.client.modeles.VoteProtocole;
import org.tela_botanica.del.client.navigation.evenement.BusEvenementiel;
import org.tela_botanica.del.client.navigation.evenement.changementEtatUtilisateur.EvenementChangementEtatUtilisateur;
import org.tela_botanica.del.client.navigation.evenement.changementEtatUtilisateur.GestionnaireEvenementChangementEtatUtilisateur;
import org.tela_botanica.del.client.navigation.evenement.changementprotocole.EvenementChangementProtocole;
import org.tela_botanica.del.client.navigation.evenement.changementprotocole.GestionnaireEvenementChangementProtocole;
import org.tela_botanica.del.client.navigation.evenement.fermermotcleimage.EvenementFermerMotCleImage;
import org.tela_botanica.del.client.navigation.evenement.fermermotcleimage.GestionnaireEvenementFermerMotCleImage;
import org.tela_botanica.del.client.navigation.evenement.rechercheimage.EvenementVoirDetailsImage;
import org.tela_botanica.del.client.navigation.evenement.rechercheimage.GestionnaireEvenementVoirDetailsImage;
import org.tela_botanica.del.client.navigation.evenement.suppressioncommentaire.EvenementSuppressionCommentaire;
import org.tela_botanica.del.client.navigation.evenement.supprimerImage.EvenementSupprimerImage;
import org.tela_botanica.del.client.navigation.evenement.supprimerImage.GestionnaireEvenementSupprimerImage;
import org.tela_botanica.del.client.navigation.evenement.validationobservationpictoflora.EvenementValidationPictoflora;
import org.tela_botanica.del.client.services.rest.ImageService;
import org.tela_botanica.del.client.services.rest.MotsClesServiceConcret;
import org.tela_botanica.del.client.services.rest.VoteProtocoleServiceConcret;
import org.tela_botanica.del.client.services.rest.async.SuppressionCommentaireCallback;
import org.tela_botanica.del.client.services.rest.async.SuppressionImageCallback;
 
import com.google.gwt.core.shared.GWT;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.event.dom.client.HasClickHandlers;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.ui.HasWidgets;
import com.google.gwt.user.client.ui.IsWidget;
 
public class ImagePresenteur extends Presenteur {
 
public interface Vue extends IsWidget {
public abstract void loadImage(Image image);
 
public abstract HasClickHandlers getImagePrincipale();
 
public IsWidget getImagePrincipaleWidget();
 
public void setUrlImagePrincipale(String url);
 
public void setTitreImagePrincipale(String titre);
 
public void setAltTextImagePrincipale(String altText);
 
public String getUrlImagePrincipale();
 
public String getTitreImagePrincipale();
 
public String getAltTextImagePrincipale();
 
public abstract HasClickHandlers getEnSavoirPlus();
 
public abstract void cacherZoneCache();
 
public abstract void afficherZoneCache();
 
public abstract HasWidgets getZoneVoter();
 
public HasClickHandlers getNomAuteur();
 
public HasClickHandlers getNomEspece();
 
public HasWidgets getMetadonnees();
 
public HasClickHandlers getVoirMotsCles();
public HasWidgets getZoneMotsCles();
 
public void cacherZoneMotsCles();
 
public void afficherZoneMotsCles();
public HasClickHandlers getBoutonFermer();
public void ajouterStyleLienAuteur();
public HasClickHandlers getBoutonSupprimerImage();
public void cacherZoneActionsImage();
public void afficherZoneActionsImage();
}
 
private Vue vue;
 
private final Image image;
private ImageService imageService;
private boolean detailsOuverts = false;
 
private Protocole protocole;
 
private boolean motsClesOuverts = false;
private MotsClesImagePresenteur motsClesImagePresenteur;
 
final FenetreOverlaySimplePresenteur fenetreOverlaySimplePresenteur = new FenetreOverlaySimplePresenteur(new FenetreOverlayDefilanteVue());
public ImagePresenteur(Image image, ImageService imageService, Protocole protocole, Vue vue) {
this.image = image;
this.imageService = imageService;
this.protocole = protocole;
this.vue = vue;
}
 
public void go(HasWidgets composite) {
composite.add(vue.asWidget());
vue.loadImage(image);
try {
// pas de profil pour les non inscrits
Integer.parseInt(image.getObservation().getIdAuteur());
vue.ajouterStyleLienAuteur();
vue.getNomAuteur().addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
Config config = new Config();
Window.open(new Config().getUrl("profil") + image.getObservation().getIdAuteur(), "Profil utilisateur", config.getInfo("popupOptions"));
}
});
} catch(Exception e) {
// pas de bol mon coco
}
new MetadonneesPresenteur(new MetadonneesVue(), image.getObservation(), ModeRecherche.MODE_IMAGE, true).go(vue.getMetadonnees());
chargerDonneesValidation();
afficherZoneActionsImage();
gererEvenements();
}
 
private void chargerDonneesValidation() {
vue.getZoneVoter().clear();
if (protocole != null) {
HashMap<String, VoteProtocole> observationValidationDatas = image.getVotesProtocoles(protocole.getId());
if (observationValidationDatas != null) {
new MoyenneVotePresenteur(image, protocole, new MoyenneVoteVue(), new VoteProtocoleServiceConcret()).go(vue.getZoneVoter());
}
}
}
 
private void lancerEvenementValidation() {
CacheClient.getInstance().setImageCourante(image);
final Observation obs = image.getObservation();
BusEvenementiel.getInstance().fireEvent(new EvenementValidationPictoflora(obs));
}
 
protected void gererEvenements() {
ClickHandler zoomeur = new ClickHandler() {
public void onClick(ClickEvent event) {
FenetreOverlaySimplePresenteur presenteurGalerie = new FenetreOverlaySimplePresenteur(new FenetreOverlayDefilanteVue());
presenteurGalerie.ouvrirFenetreModaleDefilante(0, new DetailImagePresenteur(image, new DetailImageVue()));
presenteurGalerie.afficherBoutonsSuivantsPrecedents(false);
}};
vue.getImagePrincipale().addClickHandler(zoomeur);
 
vue.getEnSavoirPlus().addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
BusEvenementiel.getInstance().fireEvent(new EvenementVoirDetailsImage(image));
}
});
vue.getVoirMotsCles().addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
CacheClient.getInstance().setImageCourante(image);
motsClesImagePresenteur = new MotsClesImagePresenteur(
image,
new MotsClesServiceConcret(),
new FormulaireSaisieMotsClesImagePresenteur(
image.getIdImage(),
new MotsClesServiceConcret(),
new FormulaireSaisieMotsClesImageVue()),
new MotsClesImageVue());
motsClesImagePresenteur.chargerMotsCles();
fenetreOverlaySimplePresenteur.ouvrirFenetreModale(motsClesImagePresenteur);
}
});
vue.getBoutonFermer().addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
cacherPanneauMotsCles();
}
});
BusEvenementiel.getInstance().addHandler(EvenementVoirDetailsImage.TYPE, new GestionnaireEvenementVoirDetailsImage() {
@Override
public void onVoirDetailsImage(EvenementVoirDetailsImage event) {
if (image.getIdImage().equals(event.getImage().getIdImage())) {
if (!detailsOuverts) {
afficherDetails();
} else {
cacherDetails();
}
} else {
cacherDetails();
}
}
});
 
BusEvenementiel.getInstance().addHandler(EvenementChangementProtocole.TYPE, new GestionnaireEvenementChangementProtocole() {
@Override
public void onChangementProtocole(EvenementChangementProtocole event) {
setProtocole(event.getProtocole());
chargerDonneesValidation();
}
});
BusEvenementiel.getInstance().addHandler(EvenementFermerMotCleImage.TYPE, new GestionnaireEvenementFermerMotCleImage() {
@Override
public void onFermerMotCleImage(EvenementFermerMotCleImage evenementFermerMotCleImage) {
if (evenementFermerMotCleImage.getIdImage().equals(image.getIdImage())) {
fenetreOverlaySimplePresenteur.fermerFenetreModale();
}
}
});
BusEvenementiel.getInstance().addHandler(EvenementSupprimerImage.TYPE, new GestionnaireEvenementSupprimerImage() {
@Override
public void onSuppressionImage(EvenementSupprimerImage event) {
GWT.log("Attraper evnt : EvenementSupprimerImage (img:"+image.getIdImage()+")");
if (event.getIdImage().equals(image.getIdImage())) {
supprimerImg();
}
}
});
vue.getBoutonSupprimerImage().addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
GWT.log("Lancer evnt : EvenementSupprimerImage");
if (Window.confirm(I18n.getVocabulary().confirmationSuppressionImg())) {
BusEvenementiel.getInstance().fireEvent(new EvenementSupprimerImage(image.getIdImage()));
}
}
});
BusEvenementiel.getInstance().addHandler(EvenementChangementEtatUtilisateur.TYPE, new GestionnaireEvenementChangementEtatUtilisateur() {
@Override
public void onModificationEtatUtilisateur(EvenementChangementEtatUtilisateur evenementChangementEtatUtilisateur) {
afficherZoneActionsImage();
}
});
}
 
private void supprimerImg() {
if (avoirUtilisateurAdmin()) {
GWT.log("supprimerImg :"+image.getIdImage());
imageService.supprimer(image, new SuppressionImageCallback() {
@Override
public void surRetour(String suppressionOk) {
GWT.log("Suppression image "+image.getIdImage()+" "+suppressionOk);
if (suppressionOk.equals("OK")) {
vue.asWidget().removeFromParent();
}
}
});
}
}
protected void afficherPanneauMotsCles() {
vue.afficherZoneMotsCles();
motsClesOuverts = true;
motsClesImagePresenteur.chargerMotsCles();
motsClesImagePresenteur.focuserChampsSaisie();
}
protected void cacherPanneauMotsCles() {
vue.cacherZoneMotsCles();
motsClesOuverts = false;
}
 
public void cacherDetails() {
vue.cacherZoneCache();
detailsOuverts = false;
}
 
public void afficherDetails() {
vue.afficherZoneCache();
detailsOuverts = true;
}
 
public boolean isDetailsOpen() {
return detailsOuverts;
}
 
public Protocole getProtocole() {
return protocole;
}
 
public void setProtocole(Protocole protocole) {
this.protocole = protocole;
}
private void afficherZoneActionsImage() {
if (avoirUtilisateurAdmin()) {
vue.afficherZoneActionsImage();
} else {
vue.cacherZoneActionsImage();
}
}
private boolean avoirUtilisateurAdmin() {
Utilisateur utilisateur = CacheClient.getInstance().getUtilisateur();
boolean etreAdmin = false;
if (utilisateur != null) {
etreAdmin = utilisateur.estIdentifie() && utilisateur.etreAdmin();
}
return etreAdmin;
}
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/vues/pictoflora/resultats/images/ImageVue.java
New file
0,0 → 1,191
package org.tela_botanica.del.client.vues.pictoflora.resultats.images;
 
import org.tela_botanica.del.client.i18n.I18n;
 
import com.google.gwt.core.client.GWT;
import com.google.gwt.event.dom.client.HasClickHandlers;
import com.google.gwt.uibinder.client.UiBinder;
import com.google.gwt.uibinder.client.UiField;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.HTML;
import com.google.gwt.user.client.ui.HTMLPanel;
import com.google.gwt.user.client.ui.HasWidgets;
import com.google.gwt.user.client.ui.HorizontalPanel;
import com.google.gwt.user.client.ui.Image;
import com.google.gwt.user.client.ui.IsWidget;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.Panel;
import com.google.gwt.user.client.ui.PushButton;
import com.google.gwt.user.client.ui.Widget;
 
public class ImageVue extends Composite implements ImagePresenteur.Vue {
 
// Annotation can be used to change the name of the associated xml file
// @UiTemplate("ObservationVue.ui.xml")
interface MyUiBinder extends UiBinder<Widget, ImageVue> {
}
 
private static MyUiBinder uiBinder = GWT.create(MyUiBinder.class);
@UiField
protected HTML nomEspece, nomAuteur;
@UiField
protected HTMLPanel zoneVoter, zonePlus, zoneActionsImage;
 
@UiField
protected HorizontalPanel voter;
 
@UiField
protected Panel zoneCache, zoneMotsCles;
 
@UiField
Image imagePrincipale;
@UiField
PushButton btnSupprImg, btnVoirTags, btnVoirInfoObs;
@UiField
Button boutonFermer;
@UiField Panel metadonnees;
 
public ImageVue() {
// sets listBox
initWidget(uiBinder.createAndBindUi(this));
}
 
public HasWidgets getZoneVoter() {
return voter;
}
 
public void cacherZoneCache() {
zoneCache.setVisible(false);
}
 
public void afficherZoneCache() {
zoneCache.setVisible(true);
}
 
public void loadImage(org.tela_botanica.del.client.modeles.Image image) {
zoneCache.setVisible(false);
zoneMotsCles.setVisible(false);
nomEspece.setHTML("<p>"+image.getObservation().getNomRetenu()+"</p>");
 
nomAuteur.setHTML("<p>"+image.getObservation().getAuteur()+"</p>");
imagePrincipale.setUrl(image.getUrl());
imagePrincipale.setPixelSize(250, 250);
imagePrincipale.setTitle(I18n.getVocabulary().indicationActionClicImage());
imagePrincipale.setAltText(image.getObservation().getAuteur() + " - " + image.getObservation().getNomRetenu());
btnVoirTags.setTitle(I18n.getVocabulary().voirMotsCles());
btnVoirInfoObs.setTitle(I18n.getVocabulary().voirMetadonnees());
zoneActionsImage.setTitle(I18n.getVocabulary().supprimerImage());
}
 
@Override
public HasClickHandlers getImagePrincipale() {
return imagePrincipale;
}
 
@Override
public IsWidget getImagePrincipaleWidget() {
return imagePrincipale;
}
@Override
public HasClickHandlers getEnSavoirPlus() {
return btnVoirInfoObs;
}
@Override
public HasClickHandlers getVoirMotsCles() {
return btnVoirTags;
}
 
@Override
public void setUrlImagePrincipale(String url) {
imagePrincipale.setUrl(url);
}
 
@Override
public void setTitreImagePrincipale(String titre) {
imagePrincipale.setTitle(titre);
}
 
@Override
public void setAltTextImagePrincipale(String altText) {
imagePrincipale.setAltText(altText);
}
 
@Override
public String getUrlImagePrincipale() {
return imagePrincipale.getUrl();
}
 
@Override
public String getTitreImagePrincipale() {
return imagePrincipale.getTitle();
}
 
@Override
public String getAltTextImagePrincipale() {
return imagePrincipale.getAltText();
}
 
@Override
public HasClickHandlers getNomAuteur() {
return nomAuteur;
}
@Override
public HasClickHandlers getNomEspece() {
return nomEspece;
}
public HasWidgets getMetadonnees() {
return metadonnees;
}
 
@Override
public void cacherZoneMotsCles() {
zoneMotsCles.setVisible(false);
}
 
@Override
public void afficherZoneMotsCles() {
zoneMotsCles.setVisible(true);
}
 
@Override
public HasWidgets getZoneMotsCles() {
return zoneMotsCles;
}
 
@Override
public HasClickHandlers getBoutonFermer() {
return boutonFermer;
}
 
@Override
public void ajouterStyleLienAuteur() {
nomAuteur.addStyleName("lien");
}
@Override
public HasClickHandlers getBoutonSupprimerImage() {
return btnSupprImg;
}
@Override
public void cacherZoneActionsImage() {
zoneActionsImage.setVisible(false);
}
@Override
public void afficherZoneActionsImage() {
zoneActionsImage.setVisible(true);
}
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/vues/pictoflora/resultats/ResultatPictofloraVue.java
New file
0,0 → 1,263
package org.tela_botanica.del.client.vues.pictoflora.resultats;
 
import java.util.ArrayList;
import java.util.List;
 
import com.google.gwt.core.client.GWT;
import com.google.gwt.event.dom.client.HasClickHandlers;
import com.google.gwt.uibinder.client.UiBinder;
import com.google.gwt.uibinder.client.UiField;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.HTMLPanel;
import com.google.gwt.user.client.ui.HasWidgets;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.Panel;
import com.google.gwt.user.client.ui.Widget;
 
public class ResultatPictofloraVue extends Composite implements ResultatPictofloraPresenteur.Vue {
 
@UiField
Panel panneauChargement;
private final List<HasWidgets> panneauxImages = new ArrayList<HasWidgets>();
private final int nbImagesPerPage = 10;
private int numImage = 0;
 
// Annotation can be used to change the name of the associated xml file
// @UiTemplate("ObservationRechercheVue.ui.xml")
interface MyUiBinder extends UiBinder<Widget, ResultatPictofloraVue> {
}
 
private static MyUiBinder uiBinder = GWT.create(MyUiBinder.class);
 
@UiField
Panel panneauPagination, panneauPaginationHaut, zoneTri;
 
@UiField
HTMLPanel imageTable;
 
@UiField
Button triParMoyenneArithmetiqueAscendant, triParMoyenneArithmetiqueDescendant, triParDateAscendant, triParDateDescendant, triParNbTagsAscendant, triParNbTagsDescendant, triParPointsAscendant, triParPointsDescendant;
 
@UiField
Label aucunResultat;
@UiField
Label labelMoyenneArithmetique, labelDate, labelTag, labelPoints;
// Constructeur
public ResultatPictofloraVue() {
initWidget(uiBinder.createAndBindUi(this));
}
 
/**
* Nettoie et remet à zéro les composants du panneau qui doivent l'être
* */
public void nettoyer() {
setNumImage(0);
imageTable.clear();
panneauxImages.clear();
}
 
public void creerPanneauxObservations(int taille) {
panneauxImages.clear();
for (int i = 0; i < taille; i++) {
Panel imagePanel = new HTMLPanel("");
panneauxImages.add(imagePanel);
}
}
 
public void afficherElementsAucunResultatTrouve() {
imageTable.clear();
aucunResultat.setVisible(true);
panneauPaginationHaut.setVisible(false);
panneauPagination.setVisible(false);
zoneTri.setVisible(false);
}
 
public void afficherElementsResultatsTrouve() {
aucunResultat.setVisible(false);
panneauPaginationHaut.setVisible(true);
panneauPagination.setVisible(true);
zoneTri.setVisible(true);
}
 
public void setNumImage(int numImage) {
this.numImage = numImage;
}
 
public void startChargement() {
panneauChargement.setHeight((this.getOffsetHeight() - (panneauPagination.getOffsetHeight() * 2)) + "px");
panneauChargement.setVisible(true);
}
 
public void stopChargement() {
panneauChargement.setVisible(false);
}
 
public HTMLPanel getImageTable() {
return imageTable;
}
 
public int getNumImage() {
return numImage;
}
 
public Panel getPanneauChargement() {
return panneauChargement;
}
 
public Panel getPanneauPagination() {
return panneauPagination;
}
 
public Panel getPanneauPaginationHaut() {
return panneauPaginationHaut;
}
 
public int getNbImagesPerPage() {
return nbImagesPerPage;
}
 
public List<HasWidgets> getPanneauxImages() {
return panneauxImages;
}
 
public Button getTriParMoyenneArithmetiqueAscendant() {
return triParMoyenneArithmetiqueAscendant;
}
 
public Button getTriParMoyenneArithmetiqueDescendant() {
return triParMoyenneArithmetiqueDescendant;
}
 
public Button getTriParDateAscendant() {
return triParDateAscendant;
}
 
public Button getTriParDateDescendant() {
return triParDateDescendant;
}
 
public Button getTriParPointsAscendant() {
return triParPointsAscendant;
}
 
public Button getTriParPointsDescendant() {
return triParPointsDescendant;
}
 
@Override
public Label getLabelMoyenneArithmetique() {
return labelMoyenneArithmetique;
}
 
@Override
public void masquerMoyenneArithmetiqueAscendant() {
triParMoyenneArithmetiqueAscendant.setVisible(false);
}
@Override
public void masquerMoyenneArithmetiqueDescendant() {
triParMoyenneArithmetiqueDescendant.setVisible(false);
}
@Override
public void afficherMoyenneArithmetiqueAscendant() {
triParMoyenneArithmetiqueAscendant.setVisible(true);
}
@Override
public void afficherMoyenneArithmetiqueDescendant() {
triParMoyenneArithmetiqueDescendant.setVisible(true);
}
 
@Override
public Label getLabelPoints() {
return labelPoints;
}
@Override
public void afficherPointsAscendant() {
triParPointsAscendant.setVisible(true);
}
@Override
public void afficherPointsDescendant() {
triParPointsDescendant.setVisible(true);
}
@Override
public void masquerPointsAscendant() {
triParPointsAscendant.setVisible(false);
}
@Override
public void masquerPointsDescendant() {
triParPointsDescendant.setVisible(false);
}
@Override
public Label getLabelDate() {
return labelDate;
}
@Override
public Label getLabelTag() {
return labelTag;
}
@Override
public void masquerDateAscendant() {
triParDateAscendant.setVisible(false);
}
@Override
public void masquerDateDescendant() {
triParDateDescendant.setVisible(false);
}
@Override
public void afficherDateAscendant() {
triParDateAscendant.setVisible(true);
}
@Override
public void afficherDateDescendant() {
triParDateDescendant.setVisible(true);
}
 
@Override
public HasClickHandlers getTriParNbTagsAscendant() {
return triParNbTagsAscendant;
}
 
@Override
public HasClickHandlers getTriParNbTagsDescendant() {
return triParNbTagsDescendant;
}
 
@Override
public void afficherTagAscendant() {
triParNbTagsAscendant.setVisible(true);
}
 
@Override
public void masquerTagAscendant() {
triParNbTagsAscendant.setVisible(false);
}
 
@Override
public void afficherTagDescendant() {
triParNbTagsDescendant.setVisible(true);
}
 
@Override
public void masquerTagDescendant() {
triParNbTagsDescendant.setVisible(false);
}
 
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/vues/pictoflora/resultats/ResultatPictoflora.css
New file
0,0 → 1,68
.contenuResultat {
text-align: center;
}
 
.barreNavigation {
max-width: 810px;
margin-top: -15px;
padding-bottom: 20px
}
 
.moyenneArithmetique, .points, .date, .tag {
padding-left: 10px;
padding-top: 3px;
cursor: pointer;
}
 
.zoneTri {
padding-left: 10px;
float: right;
}
 
.labeltri {
padding-top: 3px;
}
 
.protocoles {
padding-left: 10px;
}
 
.paginationHaut {
}
 
.images {
width: 100%;
clear: left;
margin-top: 10px;
margin-left:15px;
}
 
.images>div {
float: left;
margin: 0 20px 50px 0px
}
 
.boutonTriAsc,.boutonTriDesc {
border: none;
cursor: pointer;
}
 
.boutonTriAsc:hover,.boutonTriDesc:hover {
border:dotted 1px #8EB533;
border-width:0 0 1px 0;
}
 
.boutonTriAsc {
height: 19px;
background: url(./img/fleche-haut.png) no-repeat
}
 
.boutonTriDesc {
height: 19px;
background: url(./img/fleche-bas.png) no-repeat
}
 
.aucunResultat {
text-align: left;
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/vues/pictoflora/moteur/MoteurPictofloraVue.java
New file
0,0 → 1,129
package org.tela_botanica.del.client.vues.pictoflora.moteur;
 
import java.util.List;
 
import org.tela_botanica.del.client.modeles.Protocole;
 
import com.google.gwt.core.client.GWT;
import com.google.gwt.dom.client.NodeList;
import com.google.gwt.dom.client.OptionElement;
import com.google.gwt.dom.client.SelectElement;
import com.google.gwt.event.dom.client.HasChangeHandlers;
import com.google.gwt.event.dom.client.HasClickHandlers;
import com.google.gwt.uibinder.client.UiBinder;
import com.google.gwt.uibinder.client.UiField;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.FlowPanel;
import com.google.gwt.user.client.ui.HasWidgets;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.ListBox;
import com.google.gwt.user.client.ui.Panel;
import com.google.gwt.user.client.ui.Widget;
 
public class MoteurPictofloraVue extends Composite implements MoteurPictofloraPresenteur.Vue {
 
private final Panel panneauChargement = new FlowPanel();
 
interface MyUiBinder extends UiBinder<Widget, MoteurPictofloraVue> {
}
 
private static MyUiBinder uiBinder = GWT.create(MyUiBinder.class);
 
@UiField
Panel panneauResultats, zoneRecherche;
@UiField
ListBox listeProtocoles;
// Constructeur
public MoteurPictofloraVue() {
initWidget(uiBinder.createAndBindUi(this));
}
 
public Panel getPanneauChargement() {
return panneauChargement;
}
 
// Cette méthode est public car appelé dans GestionnaireHistorique
public Panel getZoneResultats() {
return panneauResultats;
}
 
public void setPanneauResultats(Panel panneauResultats) {
this.panneauResultats = panneauResultats;
}
 
public HasWidgets getZoneRecherche() {
return zoneRecherche;
}
 
@Override
public void ajouterVue(HasWidgets composite) {
composite.add(this.asWidget());
}
public void setListeProtocoles(ListBox listeProtocoles) {
this.listeProtocoles = listeProtocoles;
}
public HasChangeHandlers getListeProtocoles() {
return listeProtocoles;
}
public void ajouterProtocole(String NomProtocole, String idProtocole) {
listeProtocoles.addItem(NomProtocole, idProtocole);
}
 
public void selectionnerProtocole(int index) {
listeProtocoles.setSelectedIndex(index);
}
@Override
public String getNomProtocoleSelectionne() {
return listeProtocoles.getItemText((listeProtocoles.getSelectedIndex()));
}
 
@Override
public int getIdProtocoleSelectionne() {
return Integer.parseInt(listeProtocoles.getValue((listeProtocoles.getSelectedIndex())));
}
@Override
public void ajouterProtocoles(List<Protocole> protocoles) {
SelectElement selectElement = SelectElement.as(listeProtocoles.getElement());
NodeList<OptionElement> options = selectElement.getOptions();
// Capitalisation d'images est toujours en premier. Il a l'id 3. Oui mais,
// comme les chiens galeux qui ont codé cette appli ont placé les résultats
// dans un List et non un Map, on a accès aux éléments par leur ordre...
// qui n'est pas garanti puisque le service retourne un Objet et non un
// Tableau... sur qui on tape ?
// Du coup tant pis, on fait comme si l'ordre était garanti, on n'a pas
// le choix : Capitalisation d'Images est le 2e élément (index 1)
listeProtocoles.addItem(protocoles.get(1).getNom(), protocoles.get(1).getId()+"");
// on ajoute les autres meme si on les aime pas :P
for (int i = 0; i < protocoles.size(); i++) {
if (i != 1) { // bouuu l'astuce cracra
listeProtocoles.addItem(protocoles.get(i).getNom(), protocoles.get(i).getId()+"");
options.getItem(i).setTitle(protocoles.get(i).getDescription());
}
}
}
 
@Override
public void mettreAJourDescriptionProtocoleCourant(
Protocole protocoleCourant) {
listeProtocoles.setTitle(protocoleCourant.getDescription());
}
 
@Override
public void selectionnerProtocoleParProtocole(Protocole protocole) {
int index = 0;
for (int i = 0; i < listeProtocoles.getItemCount(); i++) {
int id = Integer.parseInt(listeProtocoles.getValue(i));
if (id == protocole.getId()) {
index = i;
}
}
listeProtocoles.setSelectedIndex(index);
}
 
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/vues/pictoflora/moteur/rechercheImage.css
New file
0,0 → 1,53
.zoneRecherche {
width: 100%
}
 
.protocoles {
margin-top:-61px;
margin-left:68px;
position:absolute;
}
 
.moteurRecherche {
margin-bottom: 10px;
}
 
.moteurRecherche button {
margin-left: 2px;
margin-top: -1px
}
 
.labelProtocole {
padding: 0 5px 0 0;
float: left
}
 
.chapeau {
min-height:70px;
}
 
.labelProtocole:after {
content: " :"
}
 
.entrerMotClef {
margin-bottom: 10px;
}
 
.lienProposerImage {
margin-top:20px;
margin-left:70px;
margin-bottom:10px;
}
 
.lienAide {
margin-right:70px;
padding:4px 15px;
margin-top:19px;
float:right;
color:white;
}
 
.titreRecherche {
margin:0;
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/vues/pictoflora/moteur/MoteurPictofloraVue.ui.xml
New file
0,0 → 1,26
<ui:UiBinder xmlns:ui='urn:ui:com.google.gwt.uibinder'
xmlns:g='urn:import:com.google.gwt.user.client.ui' ui:generateFormat='com.google.gwt.i18n.rebind.format.PropertiesFormat'
ui:generateLocales="default">
 
<ui:with field='res'
type='org.tela_botanica.del.client.resources.Ressources' />
<ui:with field="constants" type="org.tela_botanica.del.client.i18n.Vocabulary" />
<ui:style src="rechercheImage.css" />
<g:HTMLPanel>
<g:HTMLPanel styleName="limiteMax">
<g:HorizontalPanel styleName="gauche {style.protocoles}">
<g:Label>Choisir un protocole : </g:Label>
<g:ListBox ui:field="listeProtocoles" />
</g:HorizontalPanel>
<g:HTMLPanel styleName="importance1">
<g:Label text="{constants.rechercherImage}" styleName="titre {style.titreRecherche}" />
<g:Label text="{constants.entrerMotClef}" styleName="gris {style.entrerMotClef}" />
<g:HTMLPanel ui:field="zoneRecherche" />
</g:HTMLPanel>
</g:HTMLPanel>
<g:HTMLPanel ui:field="panneauResultats" />
</g:HTMLPanel>
</ui:UiBinder>
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/vues/pictoflora/moteur/MoteurPictofloraPresenteur.java
New file
0,0 → 1,196
package org.tela_botanica.del.client.vues.pictoflora.moteur;
 
import java.util.List;
 
import org.tela_botanica.del.client.cache.CacheClient;
import org.tela_botanica.del.client.composants.moteurrecherche.MoteurRecherchePresenteur;
import org.tela_botanica.del.client.composants.moteurrecherche.MoteurRechercheVue;
import org.tela_botanica.del.client.modeles.ModeRecherche;
import org.tela_botanica.del.client.modeles.Protocole;
import org.tela_botanica.del.client.modeles.ProtocoleServiceResultat;
import org.tela_botanica.del.client.navigation.evenement.BusEvenementiel;
import org.tela_botanica.del.client.navigation.evenement.changementprotocole.EvenementChangementProtocole;
import org.tela_botanica.del.client.services.rest.ImageServiceConcret;
import org.tela_botanica.del.client.services.rest.ProtocoleService;
import org.tela_botanica.del.client.services.rest.ProtocoleServiceConcret;
import org.tela_botanica.del.client.services.rest.async.ProtocolesCallback;
import org.tela_botanica.del.client.vues.pictoflora.resultats.ResultatPictofloraPresenteur;
import org.tela_botanica.del.client.vues.pictoflora.resultats.ResultatPictofloraVue;
 
import com.google.gwt.event.dom.client.ChangeEvent;
import com.google.gwt.event.dom.client.ChangeHandler;
import com.google.gwt.event.dom.client.HasChangeHandlers;
import com.google.gwt.user.client.ui.HasWidgets;
import com.google.gwt.user.client.ui.IsWidget;
import com.google.gwt.user.client.ui.ListBox;
 
public class MoteurPictofloraPresenteur {
 
public interface Vue extends IsWidget {
public HasWidgets getZoneResultats();
 
public HasWidgets getZoneRecherche();
 
public void ajouterVue(HasWidgets composite);
 
public void setListeProtocoles(ListBox listeProtocoles);
public HasChangeHandlers getListeProtocoles();
public void ajouterProtocole(String NomProtocole, String idProtocole);
 
public void selectionnerProtocole(int index);
public void selectionnerProtocoleParProtocole(Protocole protocole);
public String getNomProtocoleSelectionne();
 
public int getIdProtocoleSelectionne();
 
public void ajouterProtocoles(List<Protocole> protocoles);
 
public void mettreAJourDescriptionProtocoleCourant(Protocole protocoleCourant);
}
 
private Vue vue;
private ProtocoleService protocoleService;
private List<Protocole> protocoles;
 
/**
* Constructeur
* */
public MoteurPictofloraPresenteur(Vue vue, ProtocoleService protocoleService) {
this.vue = vue;
this.protocoleService = protocoleService;
chargerProtocoles();
// TODO: le code ci dessous sert à ne pas recharger les protocoles
// à chaque fois, voir si on peut le factoriser quelque part
if (CacheClient.getInstance().getProtocoleCourant() == null) {
if (CacheClient.getInstance().getListeProtocoles() == null) {
protocoleService.getProtocoles(new ProtocolesCallback() {
 
@Override
public void surRetour(ProtocoleServiceResultat protocolesRecus) {
CacheClient.getInstance().setListeProtocoles(protocolesRecus.getProtocoles());
if (protocolesRecus.getProtocoles().size() > 0) {
if(protocoles == null) {
protocoles = protocolesRecus.getProtocoles();
}
//Vérifier qu'on n'a pas demandé un protocole particulier en paramètre
String parametre = CacheClient.getInstance().getIdProtocoleEnAttente();
if (parametre != null) {
for (Protocole protocoleCourant : protocoles) {
if (parametre.equals(String.valueOf(protocoleCourant.getId()))) {
CacheClient.getInstance().setProtocoleCourant(protocoleCourant);
}
}
CacheClient.getInstance().setIdProtocoleEnAttente(null);
} else {
CacheClient.getInstance().setProtocoleCourant(protocolesRecus.getProtocoles().get(0));
}
} else {
// TODO afficher message indiquant que la liste des
// protocoles de votes n'est pas fourni
}
}
});
} else {
CacheClient.getInstance().setProtocoleCourant(CacheClient.getInstance().getListeProtocoles().get(0));
}
}
gererEvenements();
}
private void gererEvenements() {
vue.getListeProtocoles().addChangeHandler(new ChangeHandler() {
@Override
public void onChange(ChangeEvent event) {
surChangementProtocole();
}
});
}
private void chargerProtocoles() {
// test pour ne pas charger les protocoles déjà chargés
// TODO: faire un systeme de cache gérés par les web service eux même
if (CacheClient.getInstance().getListeProtocoles() == null) {
protocoleService.getProtocoles(new ProtocolesCallback() {
 
@Override
public void surRetour(ProtocoleServiceResultat protocolesRecus) {
protocoles = protocolesRecus.getProtocoles();
remplirListeProtocole(protocoles);
surChangementProtocole();
}
});
} else {
protocoles = CacheClient.getInstance().getListeProtocoles();
remplirListeProtocole(CacheClient.getInstance().getListeProtocoles());
}
}
public void surChangementProtocole() {
Protocole protocoleCourant = null;
for (Protocole protocole : protocoles) {
if (protocole.getId() == vue.getIdProtocoleSelectionne()) {
protocoleCourant = protocole;
}
}
vue.mettreAJourDescriptionProtocoleCourant(protocoleCourant);
CacheClient.getInstance().setProtocoleCourant(protocoleCourant);
EvenementChangementProtocole evenement = new EvenementChangementProtocole(protocoleCourant);
BusEvenementiel.getInstance().fireEvent(evenement);
CacheClient.getInstance().mettreAjourUrlCourante();
}
private void remplirListeProtocole(List<Protocole> protocoles) {
//si un paramètre est passé dans l'url, on sélectionne un protocole
String parametre = CacheClient.getInstance().getIdProtocoleEnAttente();
if (parametre != null) {
for (Protocole protocoleCourant : protocoles) {
if (parametre.equals(String.valueOf(protocoleCourant.getId()))) {
CacheClient.getInstance().setProtocoleCourant(protocoleCourant);
}
}
}
vue.ajouterProtocoles(protocoles);
if (CacheClient.getInstance().getProtocoleCourant() == null) {
vue.selectionnerProtocole(0);
vue.mettreAJourDescriptionProtocoleCourant(protocoles.get(0));
} else {
vue.selectionnerProtocoleParProtocole(CacheClient.getInstance().getProtocoleCourant());
vue.mettreAJourDescriptionProtocoleCourant(CacheClient.getInstance().getProtocoleCourant());
}
CacheClient.getInstance().mettreAjourUrlCourante();
}
 
public void go(HasWidgets composite) {
vue.ajouterVue(composite);
chargerMoteurRechercheAvancee();
}
 
public void chargerMoteurRechercheAvancee() {
MoteurRecherchePresenteur presenteurRecherche = new MoteurRecherchePresenteur(new MoteurRechercheVue(""), ModeRecherche.MODE_IMAGE) {
public void lancerRecherche() {
chercherImages();
}
};
presenteurRecherche.go(vue.getZoneRecherche());
}
 
public void chercherImages() {
vue.getZoneResultats().clear();
CacheClient.getInstance().mettreAjourUrlCourante();
new ResultatPictofloraPresenteur(new ImageServiceConcret(), new ProtocoleServiceConcret(), new ResultatPictofloraVue()).go(vue.getZoneResultats());
}
 
public HasWidgets getZoneResultats() {
return vue.getZoneResultats();
}
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/vues/entete/liens/LiensVue.ui.xml
New file
0,0 → 1,32
<ui:UiBinder xmlns:ui='urn:ui:com.google.gwt.uibinder' xmlns:g='urn:import:com.google.gwt.user.client.ui'
ui:generateFormat='com.google.gwt.i18n.rebind.format.PropertiesFormat'
ui:generateLocales="default">
<ui:with field='res'
type='org.tela_botanica.del.client.resources.Ressources' />
<ui:with field="constants" type="org.tela_botanica.del.client.i18n.Vocabulary" />
<ui:style src="liens.css" />
<g:HTMLPanel>
<!-- Liens identiplante -->
<g:HTMLPanel styleName="limiteMax">
<!-- picto -->
<g:Anchor target="_blank" href="{constants.lienAidePictoflora}" ui:field="aidePictoflora"
text="{constants.accesAide}" title="{constants.accesAide}" styleName="acceder-aide {style.aide}"/>
<!-- identiplante -->
<g:Anchor ui:field="ajouterObservation" text="{constants.ajouterObservation}"
title="{constants.legendeAjouterObservation}" styleName="acceder-outil"
href="{constants.lienAppliSaisie}" target="_blank"/>
<g:Anchor href="{constants.lienAideIdentiplante}" ui:field="aide"
text="{constants.accesAide}" title="{constants.accesAide}"
styleName="acceder-aide {style.aide}" target="_blank" />
<!-- Commun -->
<g:HTMLPanel ui:field="zonePartageUrl" styleName="{style.zonePartageUrl}"></g:HTMLPanel>
<g:Anchor ui:field="participerProjet" text="Participer au projet"
title="{constants.legendeAjouterObservation}"
styleName="acceder-outil droite {style.boutonParticiper}" target="_blank"/>
</g:HTMLPanel>
</g:HTMLPanel>
</ui:UiBinder>
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/vues/entete/liens/LiensPresenteur.java
New file
0,0 → 1,73
package org.tela_botanica.del.client.vues.entete.liens;
 
import org.tela_botanica.del.client.cache.CacheClient;
import org.tela_botanica.del.client.composants.partageurl.PartageUrlPresenteur;
import org.tela_botanica.del.client.composants.partageurl.PartageUrlVue;
import org.tela_botanica.del.client.composants.presenteur.Presenteur;
import org.tela_botanica.del.client.modeles.ProtocoleServiceResultat;
import org.tela_botanica.del.client.services.rest.ProtocoleServiceConcret;
import org.tela_botanica.del.client.services.rest.async.ProtocolesCallback;
 
import com.google.gwt.user.client.ui.HasWidgets;
import com.google.gwt.user.client.ui.IsWidget;
 
public class LiensPresenteur extends Presenteur {
 
public interface Vue extends IsWidget {
public HasWidgets getZonePartageUrl();
}
private Vue vue;
public LiensPresenteur(Vue vue) {
this.vue = vue;
}
public void go(HasWidgets composite) {
composite.add(vue.asWidget());
 
PartageUrlPresenteur partageUrl = new PartageUrlPresenteur(new PartageUrlVue());
partageUrl.go(vue.getZonePartageUrl());
gererProtocoles();
}
protected void gererProtocoles() {
//FIXME : ne doit pas etre concret ici ?
ProtocoleServiceConcret protocoleService = new ProtocoleServiceConcret();
if (CacheClient.getInstance().getProtocoleCourant() == null) {
if (CacheClient.getInstance().getListeProtocoles() == null || CacheClient.getInstance().getListeProtocoles().size() == 0) {
protocoleService.getProtocoles(new ProtocolesCallback() {
 
@Override
public void surRetour(ProtocoleServiceResultat protocolesRecus) {
CacheClient.getInstance().setListeProtocoles(protocolesRecus.getProtocoles());
if (protocolesRecus.getProtocoles().size() > 0) {
// 1 est censé etre "Capitalisation d'images"
CacheClient.getInstance().setProtocoleCourant(protocolesRecus.getProtocoles().get(1));
} else {
// TODO afficher message indiquant que la liste des
// protocoles de votes n'est pas fourni
}
}
});
} else {
CacheClient.getInstance().setProtocoleCourant(CacheClient.getInstance().getListeProtocoles().get(0));
}
}
}
 
@Override
protected void gererEvenements() {
// TODO Auto-generated method stub
/*
* vue.getLienAjoutObservation().addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
Config config = new Config();
Window.open(config.getUrl("applisaisie"), "Saisie d'une nouvelle observation", null);
}
});
*/
}
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/vues/entete/liens/LiensVue.java
New file
0,0 → 1,79
package org.tela_botanica.del.client.vues.entete.liens;
 
import org.tela_botanica.del.client.cache.CacheClient;
import org.tela_botanica.del.client.config.Config;
import org.tela_botanica.del.client.i18n.I18n;
import org.tela_botanica.del.client.navigation.evenement.BusEvenementiel;
import org.tela_botanica.del.client.navigation.evenement.changementprotocole.EvenementChangementProtocole;
import org.tela_botanica.del.client.navigation.evenement.changementprotocole.GestionnaireEvenementChangementProtocole;
 
import com.google.gwt.core.client.GWT;
import com.google.gwt.uibinder.client.UiBinder;
import com.google.gwt.uibinder.client.UiField;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.ui.Anchor;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.HasWidgets;
import com.google.gwt.user.client.ui.Panel;
import com.google.gwt.user.client.ui.Widget;
 
public class LiensVue extends Composite implements LiensPresenteur.Vue {
// Gestion d'UiBinder
interface Binder extends UiBinder<Widget, LiensVue> {}
 
private static Binder binder = GWT.create(Binder.class);
@UiField Panel zonePartageUrl;
@UiField Anchor ajouterObservation, aidePictoflora, aide, participerProjet;
public LiensVue() {
initWidget(binder.createAndBindUi(this));
gererAffichageEnFonctionDeLaNavigation();
gererEvenements();
}
public HasWidgets getZonePartageUrl() {
return zonePartageUrl;
}
public void gererAffichageEnFonctionDeLaNavigation() {
String urlCourante = Window.Location.getHref();
Config config = new Config();
String urlAppliImg = config.getUrl("pictoflora");
if (urlCourante.contains(urlAppliImg)) {
//SI PICTO
ajouterObservation.setVisible(false);
aide.setVisible(false);
setLienSaisieProjet();
} else {
aidePictoflora.setVisible(false);
participerProjet.setVisible(false);
}
}
private void setLienSaisieProjet() {
participerProjet.setHref(formaterLienSaisieProjetUrl());
participerProjet.setTitle(I18n.getVocabulary().legendeAjouterImage());
}
private String formaterLienSaisieProjetUrl() {
String urlSaisieProjet = I18n.getVocabulary().lienAppliSaisie();
if(CacheClient.getInstance().getProtocoleCourant() != null) {
String tagProtocole = CacheClient.getInstance().getProtocoleCourant().getTag();
urlSaisieProjet = I18n.getVocabulary().lienAppliSaisieProjetUrl();
urlSaisieProjet = urlSaisieProjet.replace("{projet}", tagProtocole);
}
return urlSaisieProjet;
}
private void gererEvenements() {
BusEvenementiel.getInstance().addHandler(EvenementChangementProtocole.TYPE, new GestionnaireEvenementChangementProtocole() {
@Override
public void onChangementProtocole(EvenementChangementProtocole event) {
setLienSaisieProjet();
}
});
}
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/vues/entete/liens/liens.css
New file
0,0 → 1,14
.zonePartageUrl {
display:inline-block;
width:150px;
float:right;
}
 
.aide {
float:right;
margin-left:5px;
}
 
.boutonParticiper {
margin-right:5px;
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/vues/entete/entete.css
New file
0,0 → 1,13
.zoneIdentification {
float: right;
height: 129px;
width: 45%;
background: url("./img/carre_orange.png") no-repeat scroll -0px -8px transparent;
text-align:right;
padding-left:27px;
}
.zoneLiens {
clear: both;
height: 40px;
padding:10px 65px;
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/vues/entete/EnteteVue.ui.xml
New file
0,0 → 1,13
<ui:UiBinder xmlns:ui='urn:ui:com.google.gwt.uibinder' xmlns:g='urn:import:com.google.gwt.user.client.ui'
ui:generateFormat='com.google.gwt.i18n.rebind.format.PropertiesFormat'
ui:generateLocales="default">
<ui:with field='res'
type='org.tela_botanica.del.client.resources.Ressources' />
<ui:with field="constants" type="org.tela_botanica.del.client.i18n.Vocabulary" />
<ui:style src="entete.css" />
<g:HTMLPanel>
<g:HTMLPanel ui:field="zoneIdentification" styleName="{style.zoneIdentification}"></g:HTMLPanel>
<g:HTMLPanel ui:field="zoneLiens" styleName="{style.zoneLiens}"></g:HTMLPanel>
</g:HTMLPanel>
</ui:UiBinder>
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/vues/entete/EntetePresenteur.java
New file
0,0 → 1,53
package org.tela_botanica.del.client.vues.entete;
 
import org.tela_botanica.del.client.composants.formulaires.identification.FormulaireIdentificationPresenteur;
import org.tela_botanica.del.client.composants.formulaires.identification.FormulaireIdentificationVue;
import org.tela_botanica.del.client.composants.presenteur.Presenteur;
import org.tela_botanica.del.client.services.rest.UtilisateurServiceConcret;
import org.tela_botanica.del.client.vues.entete.liens.LiensPresenteur;
import org.tela_botanica.del.client.vues.entete.liens.LiensVue;
 
import com.google.gwt.user.client.ui.HasWidgets;
import com.google.gwt.user.client.ui.IsWidget;
import com.google.gwt.user.client.ui.Widget;
 
/**
* Classe pour le header de l'application affichant le formulaire de connexion, le titre, les logos
* */
public class EntetePresenteur extends Presenteur {
 
/**
* La vue du header
* */
public interface Vue extends IsWidget {
public HasWidgets getZoneIdentification();
public HasWidgets getZoneLiens();
}
private Vue vue;
 
public EntetePresenteur(Vue vue) {
this.vue = vue;
}
 
@Override
public void go(HasWidgets composite) {
composite.add(vue.asWidget());
//Ajout de la zone identification
FormulaireIdentificationPresenteur identification = new FormulaireIdentificationPresenteur(new FormulaireIdentificationVue(), new UtilisateurServiceConcret());
identification.go(vue.getZoneIdentification());
LiensPresenteur liens = new LiensPresenteur(new LiensVue());
liens.go(vue.getZoneLiens());
}
 
@Override
protected void gererEvenements() {
// TODO Auto-generated method stub
}
public void ajouterLien(Widget lien) {
this.vue.getZoneLiens().add(lien);
}
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/vues/entete/EnteteVue.java
New file
0,0 → 1,37
package org.tela_botanica.del.client.vues.entete;
 
import com.google.gwt.core.client.GWT;
import com.google.gwt.uibinder.client.UiBinder;
import com.google.gwt.uibinder.client.UiField;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.HasWidgets;
import com.google.gwt.user.client.ui.Panel;
import com.google.gwt.user.client.ui.Widget;
 
import org.tela_botanica.del.client.vues.entete.EntetePresenteur;
 
public class EnteteVue extends Composite implements EntetePresenteur.Vue {
 
// Gestion d'UiBinder
interface Binder extends UiBinder<Widget, EnteteVue> {
}
 
private static Binder binder = GWT.create(Binder.class);
@UiField
Panel zoneIdentification, zoneLiens;
public EnteteVue() {
initWidget(binder.createAndBindUi(this));
}
 
@Override
public HasWidgets getZoneIdentification() {
return zoneIdentification;
}
 
@Override
public HasWidgets getZoneLiens() {
return zoneLiens;
}
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/vues/comparaisoneflore/ComparaisonEfloreVue.ui.xml
New file
0,0 → 1,77
<!DOCTYPE ui:UiBinder SYSTEM "http://dl.google.com/gwt/DTD/xhtml.ent">
 
<ui:UiBinder xmlns:ui='urn:ui:com.google.gwt.uibinder'
xmlns:g='urn:import:com.google.gwt.user.client.ui'>
 
<ui:with field='res' type='org.tela_botanica.del.client.resources.Ressources' />
<ui:with field="constants" type="org.tela_botanica.del.client.i18n.Vocabulary" />
<ui:style src="comparaisonEflore.css" />
<g:HTMLPanel >
<g:HTMLPanel ui:field="formulaireRecherche" styleName="{style.zoneComparaison}" />
<g:HorizontalPanel styleName="{style.zoneComparaison}" >
<g:VerticalPanel styleName="{style.photoPrincipale} arrondi">
<g:Label text="{constants.taxonADeterminer}" styleName="titre" />
<g:Label text="{constants.taxonADeterminer}" styleName="petit" />
<g:Image ui:field="imagePrincipale" />
 
<g:HTMLPanel styleName="{style.meta}">
<g:Label text="{constants.metadonneesPhoto}" styleName="titre" />
<g:Label ui:field="nomAuteurTitre" text="{constants.observateur}" styleName="petit" />
<g:Label ui:field="nomAuteur" />
<g:Label ui:field="dateObservationTitre" text="{constants.dateObservation}" styleName="petit" />
<g:Label ui:field="dateObservation" />
<g:Label ui:field="familleTitre" text="{constants.famille}" styleName="petit" />
<g:Label ui:field="famille" />
<g:Label ui:field="commentairesTitre" text="{constants.commentaires}" styleName="petit" />
<g:Label ui:field="commentaires" />
<g:Label ui:field="motsClefsTitre" text="{constants.motsClefs}" styleName="petit" />
<g:Label ui:field="motsClefs" />
<g:Label ui:field="nomRetenuTitre" text="{constants.nomRetenu}" styleName="petit" />
<g:Label ui:field="nomRetenu" />
<g:Label ui:field="nomCommunTitre" styleName="petit" text="{constants.nomCommun}" />
<g:Label ui:field="nomCommun" />
<g:Label ui:field="localiteTitre" styleName="petit" text="{constants.lieuDuReleve}" />
<g:Label ui:field="localite" />
<g:Label ui:field="milieuTitre" styleName="petit" text="{constants.milieu}" />
<g:Label ui:field="milieu"/>
</g:HTMLPanel>
</g:VerticalPanel>
<g:VerticalPanel styleName="{style.photoComparee} arrondi">
<g:Label text="{constants.imageEflore}" styleName="titre" />
<g:Label ui:field="texteEflore" text="{constants.imageEflore}" styleName="petit" />
 
<g:Image ui:field="imageEflore" />
<g:VerticalPanel ui:field="panneauChargement" styleName="{style.panneauChargement}" >
<g:Image url="./img/wait.gif" ></g:Image>
</g:VerticalPanel>
<g:HorizontalPanel styleName="{style.fleches}">
<g:Image ui:field="scrollLeftImage" resource='{res.arrowLeft}'
styleName="gauche" visible="false" />
<g:Image ui:field="scrollRightImage" resource='{res.arrowRight}'
styleName="droite" visible="false" />
</g:HorizontalPanel>
 
<g:HTMLPanel ui:field="metadonneesEflore" styleName="{style.meta}">
<g:Label text="{constants.metadonneesPhoto}" styleName="titre" />
 
<g:Label text="{constants.taxon}" styleName="petit" />
<g:Label ui:field="nomEspeceEflore" />
 
<g:Label text="{constants.localite}" styleName="petit" />
<g:Label ui:field="localiteEflore" />
 
<g:Label text="{constants.auteur}" styleName="petit" />
<g:Label ui:field="nomAuteurEflore" />
 
<g:Label text="{constants.publieLe}" styleName="petit" />
<g:Label ui:field="dateObservationEflore" />
</g:HTMLPanel>
</g:VerticalPanel>
</g:HorizontalPanel>
</g:HTMLPanel>
</ui:UiBinder>
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/vues/comparaisoneflore/ComparaisonEflorePresenteur.java
New file
0,0 → 1,183
package org.tela_botanica.del.client.vues.comparaisoneflore;
 
import java.util.ArrayList;
import java.util.List;
 
import org.tela_botanica.del.client.cache.CacheClient;
import org.tela_botanica.del.client.composants.fenetreoverlay.FenetreOverlayDefilanteVue;
import org.tela_botanica.del.client.composants.fenetreoverlay.FenetreOverlaySimplePresenteur;
import org.tela_botanica.del.client.composants.formulairerechercheeflore.FormulaireRechercheEflorePresenteur;
import org.tela_botanica.del.client.composants.images.DetailImagePresenteur;
import org.tela_botanica.del.client.composants.images.DetailImageVue;
import org.tela_botanica.del.client.modeles.Image;
import org.tela_botanica.del.client.modeles.ImageServiceResultat;
import org.tela_botanica.del.client.modeles.InformationsRecherche;
import org.tela_botanica.del.client.navigation.evenement.BusEvenementiel;
import org.tela_botanica.del.client.navigation.evenement.comparaisoneflore.EvenementComparaisonEflore;
import org.tela_botanica.del.client.navigation.evenement.comparaisoneflore.GestionnaireEvenementComparaisonEflore;
import org.tela_botanica.del.client.services.rest.ImageService;
import org.tela_botanica.del.client.services.rest.async.ImagesParTaxonCallback;
 
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.event.dom.client.HasClickHandlers;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.ui.HTMLPanel;
import com.google.gwt.user.client.ui.HasWidgets;
import com.google.gwt.user.client.ui.IsWidget;
 
public class ComparaisonEflorePresenteur {
 
public interface Vue extends IsWidget {
public void chargerImagePrincipale(org.tela_botanica.del.client.modeles.Image image);
 
public void chargerImagesEflore(List<org.tela_botanica.del.client.modeles.Image> observationsEflore, int indexImage);
 
public HasClickHandlers getScrollLeftImage();
 
public HasClickHandlers getScrollRightImage();
 
public int getCurrentIndexImages();
 
public void startChargement();
 
public void stopChargement();
 
public void afficherAucuneImageTrouvee();
 
public HTMLPanel getFormulaireRecherche();
public void setCurrentIndexImages(int index);
public com.google.gwt.user.client.ui.Image getImagePrincipale();
public com.google.gwt.user.client.ui.Image getImageEflore();
}
 
private Vue vue;
private final ImageService imageService;
 
private Image imagePrincipale;
private String nomTaxonComparaison;
private List<org.tela_botanica.del.client.modeles.Image> imagesEflore = new ArrayList<Image>();
private int page = 0;
private int nbImagesPreFetch = 10;
 
public ComparaisonEflorePresenteur(Vue vue, ImageService imageService) {
this.vue = vue;
this.imagePrincipale = CacheClient.getInstance().getImageCourante();
this.nomTaxonComparaison = CacheClient.getInstance().getTaxonPourRechercheEflore();
this.imageService = imageService;
}
 
public void go(HasWidgets composite) {
composite.add(vue.asWidget());
vue.chargerImagePrincipale(imagePrincipale);
chargerObservationsEflore();
gererEvenements();
new FormulaireRechercheEflorePresenteur().go(vue.getFormulaireRecherche());
}
 
public void chargerObservationsEflore() {
 
int debut = (page * nbImagesPreFetch) + 1;
int fin = (page + 1) * nbImagesPreFetch;
 
vue.startChargement();
 
InformationsRecherche informationsRecherche = new InformationsRecherche();
informationsRecherche.setTaxon(nomTaxonComparaison);
 
ImagesParTaxonCallback callback = new ImagesParTaxonCallback() {
 
@Override
public void surRetour(ImageServiceResultat imagesRecues) {
if (imagesRecues == null || imagesRecues.getImages() == null || imagesRecues.getImages().size() == 0) {
vue.afficherAucuneImageTrouvee();
} else {
addImagesEflore(imagesRecues.getImages());
vue.stopChargement();
vue.chargerImagesEflore(imagesEflore, vue.getCurrentIndexImages());
}
}
 
@Override
public void surErreur(String messageErreur) {
vue.afficherAucuneImageTrouvee();
Window.alert(messageErreur);
}
 
};
 
imageService.getImagesParTaxon(informationsRecherche, debut, fin, callback);
 
}
 
private void gererEvenements() {
vue.getScrollLeftImage().addClickHandler(new ClickHandler() {
 
@Override
public void onClick(ClickEvent event) {
vue.chargerImagesEflore(imagesEflore, vue.getCurrentIndexImages() - 1);
}
});
 
vue.getScrollRightImage().addClickHandler(new ClickHandler() {
 
@Override
public void onClick(ClickEvent event) {
 
if (vue.getCurrentIndexImages() == imagesEflore.size() - 1) {
page += 1;
vue.setCurrentIndexImages(vue.getCurrentIndexImages()+1);
chargerObservationsEflore();
} else {
vue.chargerImagesEflore(imagesEflore, vue.getCurrentIndexImages() + 1);
}
}
});
 
BusEvenementiel.getInstance().addHandler(EvenementComparaisonEflore.TYPE, new GestionnaireEvenementComparaisonEflore() {
 
@Override
public void onComparaisonEflore(EvenementComparaisonEflore event) {
nomTaxonComparaison = event.getTaxonDemande();
page=0;
vue.setCurrentIndexImages(0);
getImagesEflore().clear();
chargerObservationsEflore();
}
});
vue.getImagePrincipale().addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent arg0) {
FenetreOverlaySimplePresenteur presenteurGalerie = new FenetreOverlaySimplePresenteur(new FenetreOverlayDefilanteVue());
presenteurGalerie.ouvrirFenetreModaleDefilante(0, new DetailImagePresenteur(imagePrincipale, new DetailImageVue()));
presenteurGalerie.afficherBoutonsSuivantsPrecedents(false);
}
});
vue.getImageEflore().addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent arg0) {
FenetreOverlaySimplePresenteur presenteurGalerie = new FenetreOverlaySimplePresenteur(new FenetreOverlayDefilanteVue());
presenteurGalerie.ouvrirFenetreModaleDefilante(0, new DetailImagePresenteur(imagesEflore.get(vue.getCurrentIndexImages()), new DetailImageVue()));
presenteurGalerie.afficherBoutonsSuivantsPrecedents(false);
}
});
}
 
public List<org.tela_botanica.del.client.modeles.Image> getImagesEflore() {
return imagesEflore;
}
 
public void addImagesEflore(List<org.tela_botanica.del.client.modeles.Image> imagesEflore) {
this.imagesEflore.addAll(imagesEflore);
}
 
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/vues/comparaisoneflore/ComparaisonEfloreVue.java
New file
0,0 → 1,202
package org.tela_botanica.del.client.vues.comparaisoneflore;
 
import java.util.List;
 
import org.tela_botanica.del.client.i18n.I18n;
import org.tela_botanica.del.client.utils.StringUtils;
 
import com.google.gwt.core.client.GWT;
import com.google.gwt.event.dom.client.HasClickHandlers;
import com.google.gwt.uibinder.client.UiBinder;
import com.google.gwt.uibinder.client.UiField;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.HTMLPanel;
import com.google.gwt.user.client.ui.Image;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.Panel;
import com.google.gwt.user.client.ui.Widget;
 
public class ComparaisonEfloreVue extends Composite implements ComparaisonEflorePresenteur.Vue {
 
interface MyUiBinder extends UiBinder<Widget, ComparaisonEfloreVue> {
}
 
private static MyUiBinder uiBinder = GWT.create(MyUiBinder.class);
private int currentIndexImages=0;
 
@UiField
Label nomAuteur, dateObservation, famille, motsClefs, nomRetenu, nomCommun, localite, milieu, commentaires, nomEspeceEflore, nomAuteurEflore, localiteEflore, dateObservationEflore, texteEflore;
 
@UiField
Label nomAuteurTitre, dateObservationTitre, familleTitre, motsClefsTitre, nomRetenuTitre, nomCommunTitre, localiteTitre, milieuTitre, commentairesTitre;
 
@UiField
Image imagePrincipale, imageEflore, scrollLeftImage, scrollRightImage;
 
@UiField
Panel panneauChargement;
 
@UiField
HTMLPanel formulaireRecherche, metadonneesEflore;
 
public ComparaisonEfloreVue() {
initWidget(uiBinder.createAndBindUi(this));
}
 
public void chargerImagePrincipale(org.tela_botanica.del.client.modeles.Image image) {
 
// mots clefs
String motsClefsConcatenes = "";
try {
for (String motClef : image.getObservation().getMotsClefs()) {
motsClefsConcatenes += motClef + ",";
}
motsClefsConcatenes = motsClefsConcatenes.subSequence(0, motsClefsConcatenes.lastIndexOf(",")).toString();
} catch (Exception e) {
// TODO: handle exception
}
 
if (StringUtils.checkStringNotNull(motsClefsConcatenes)) {
motsClefs.setText(motsClefsConcatenes);
} else {
motsClefs.setVisible(false);
motsClefsTitre.setVisible(false);
}
if (StringUtils.checkStringNotNull(image.getObservation().getAuteur())) {
nomAuteur.setText(image.getObservation().getAuteur());
} else {
nomAuteur.setVisible(false);
nomAuteurTitre.setVisible(false);
}
if (StringUtils.checkStringNotNull(image.getUrl())) {
imagePrincipale.setUrl(image.getUrl());
}
if (StringUtils.checkStringNotNull(image.getObservation().getDateReleve())) {
dateObservation.setText(image.getObservation().getDateReleve());
} else {
dateObservation.setVisible(false);
dateObservationTitre.setVisible(false);
}
if (StringUtils.checkStringNotNull(image.getObservation().getFamille())) {
famille.setText(image.getObservation().getFamille());
} else {
famille.setVisible(false);
familleTitre.setVisible(false);
}
if (StringUtils.checkStringNotNull(image.getObservation().getNomRetenu())) {
nomRetenu.setText(image.getObservation().getNomRetenuFormateReferentiel());
} else {
nomRetenu.setVisible(false);
nomRetenuTitre.setVisible(false);
}
if (StringUtils.checkStringNotNull(image.getObservation().getNomCommun())) {
nomCommun.setText(image.getObservation().getNomCommun());
} else {
nomCommun.setVisible(false);
nomCommunTitre.setVisible(false);
}
if (StringUtils.checkStringNotNull(image.getObservation().getLocaliteAvecIdFormatee())) {
localite.setText(image.getObservation().getLocaliteAvecIdFormatee());
} else {
localite.setVisible(false);
localiteTitre.setVisible(false);
}
if (StringUtils.checkStringNotNull(image.getObservation().getMilieu())) {
milieu.setText(image.getObservation().getMilieu());
} else {
milieu.setVisible(false);
milieuTitre.setVisible(false);
}
if (StringUtils.checkStringNotNull(image.getObservation().getCommentaire())) {
commentaires.setText(image.getObservation().getCommentaire());
} else {
commentaires.setVisible(false);
commentairesTitre.setVisible(false);
}
 
}
 
public void chargerImagesEflore(List<org.tela_botanica.del.client.modeles.Image> observationsEflore, int indexImage) {
 
texteEflore.setText(I18n.getVocabulary().imageEflore());
 
if (indexImage >= 0 && indexImage < observationsEflore.size()) {
currentIndexImages = indexImage;
}
 
org.tela_botanica.del.client.modeles.Image observationEflore = observationsEflore.get(currentIndexImages);
 
nomEspeceEflore.setText(observationEflore.getObservation().getNomRetenuFormateReferentiel());
nomAuteurEflore.setText(observationEflore.getObservation().getAuteur());
imageEflore.setUrl(observationEflore.getUrl());
dateObservationEflore.setText(observationEflore.getObservation().getDateReleve());
localiteEflore.setText(observationEflore.getObservation().getLocalite());
metadonneesEflore.setVisible(true);
imageEflore.setVisible(true);
 
if (observationsEflore.size() > 1) {
scrollLeftImage.setVisible(true);
scrollRightImage.setVisible(true);
}
}
 
public void setScrollLeftImage(Image scrollLeftImage) {
this.scrollLeftImage = scrollLeftImage;
}
 
public int getCurrentIndexImages() {
return currentIndexImages;
}
 
@Override
public HasClickHandlers getScrollLeftImage() {
return scrollLeftImage;
}
 
@Override
public HasClickHandlers getScrollRightImage() {
return scrollRightImage;
}
 
public void startChargement() {
texteEflore.setText(I18n.getVocabulary().chargement());
metadonneesEflore.setVisible(false);
imageEflore.setVisible(false);
scrollLeftImage.setVisible(false);
scrollRightImage.setVisible(false);
panneauChargement.setVisible(true);
}
 
public void stopChargement() {
panneauChargement.setVisible(false);
}
 
public void afficherAucuneImageTrouvee() {
texteEflore.setText(I18n.getVocabulary().aucunResultat());
scrollLeftImage.setVisible(false);
scrollRightImage.setVisible(false);
panneauChargement.setVisible(false);
}
 
public Label getNomAuteur() {
return nomAuteur;
}
 
public Image getImagePrincipale() {
return imagePrincipale;
}
 
public HTMLPanel getFormulaireRecherche() {
return formulaireRecherche;
}
 
public void setCurrentIndexImages(int index){
currentIndexImages=index;
}
 
public Image getImageEflore() {
return imageEflore;
}
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/vues/comparaisoneflore/comparaisonEflore.css
New file
0,0 → 1,49
.zoneComparaison {
width: 50%;
margin: 0 auto;
height: 100%
}
 
.photoComparee {
width: 500px;
margin-left: 5px;
padding: 20px;
border: #DDD solid 1px;
}
 
.photoPrincipale img,.photoComparee img {
-moz-box-shadow: 4px 4px 2px #AAA;
cursor: pointer;
}
 
.panneauChargement img{
-moz-box-shadow: none;
}
 
.photoPrincipale {
width: 500px;
border: #DDD solid 1px;
padding: 20px;
height: 100%
}
 
.fleches {
position: absolute;
margin-left: -20px;
padding: 20px;
margin-top: -50px;
width: 500px;
}
 
.fleches img {
cursor: pointer;
-moz-box-shadow: 0px 0px 0px #000
}
 
.meta {
color: white;
background: #333;
padding: 10px;
opacity: 0.8em;
margin-top: 5px
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/cache/CacheClient.java
New file
0,0 → 1,507
package org.tela_botanica.del.client.cache;
 
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
 
import org.tela_botanica.del.client.config.Config;
import org.tela_botanica.del.client.gestionhistorique.ConstantesNavigation;
import org.tela_botanica.del.client.modeles.Image;
import org.tela_botanica.del.client.modeles.InformationsRecherche;
import org.tela_botanica.del.client.modeles.ModeTri;
import org.tela_botanica.del.client.modeles.Observation;
import org.tela_botanica.del.client.modeles.Protocole;
import org.tela_botanica.del.client.modeles.Utilisateur;
import org.tela_botanica.del.client.utils.URLUtils;
import org.tela_botanica.del.client.Del;
 
import com.google.gwt.core.client.GWT;
import com.google.gwt.dom.client.Document;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.Window.Location;
 
public class CacheClient {
 
private List<Protocole> listeProtocoles;
private Observation observationCourante;
private Image imageCourante;
private String taxonPourRechercheEflore;
private String idProtocoleEnAttente = null;
private Protocole protocoleCourant;
private String referentielCourant;
private int numPageRechercheImage = 0;
private int nbTotalImagesRecherchees = 0;
private boolean referentielNonModifiable = false;
 
private int pasPagination = 12;
private int pageCouranteRechercheImage = 1;
private int pageCouranteRechercheObservations = 1;
private InformationsRecherche informationsRechercheImage;
private InformationsRecherche informationsRechercheObservation;
private Utilisateur utilisateur;
private String pageCourante = "";
private String statut;
private String[] statutsPossibles = {
ConstantesNavigation.PARAM_TYPE_TOUS,
ConstantesNavigation.PARAM_TYPE_A_DETERMINER,
ConstantesNavigation.PARAM_TYPE_A_CONFIRMER,
ConstantesNavigation.PARAM_TYPE_VALIDEES,
ConstantesNavigation.PARAM_TYPE_MONACTIVITE
};
private ModeTri modeTri = ModeTri.TRI_ASCENDANT;
private static String titreOngletNavigateur = "";
// Pour plus de simplicité on stocke une liste de pays où
// la clé est le code iso et la valeur le pays
// et une autre ou c'est l'inverse
private Map<String, String> listePays;
private Map<String, String> listePaysInversee;
public void supprimerFiltreStatut() {
this.statut = null;
}
public void setFiltreStatut(String statut) {
this.statut = statut;
}
public String getFiltreStatut() {
return this.statut;
}
public String getPageCourante() {
return pageCourante;
}
 
public void setPageCourante(String pageCourante) {
pageCourante = pageCourante.replaceAll("#", "");
pageCourante = pageCourante.replaceAll("page_validation", ConstantesNavigation.PAGE_DETAIL_OBS);
pageCourante = pageCourante.replaceAll("page_validation_pictoflora", ConstantesNavigation.PAGE_DETAIL_IMG);
this.pageCourante = pageCourante;
}
 
private static CacheClient instance;
 
private CacheClient() {
instance = this;
}
 
public void initialiserAvecParametres() {
String urlCourante = Window.Location.getHref();
Config config = new Config();
String urlAppliImg = config.getUrl("pictoflora");
setPageCourante(Location.getHash());
String rechercheLibre = Location.getParameter("masque");
String famille = Location.getParameter("masque.famille");
String taxon = Location.getParameter("masque.ns");
String genre = Location.getParameter("masque.genre");
String commune = Location.getParameter("masque.commune");
String dept = Location.getParameter("masque.departement");
String auteur = Location.getParameter("masque.auteur");
String date = Location.getParameter("masque.date");
String tag = Location.getParameter("masque.tag");
String tagCel = Location.getParameter("masque.tag_cel");
String tagDel = Location.getParameter("masque.tag_pictoflora");
String referentiel = Location.getParameter("masque.referentiel");
String protocole = Location.getParameter("protocole");
String statutParam = Location.getParameter("masque.type");
String paysParam = Location.getParameter("masque.pays");
 
String pnInscritsSeulement = Location.getParameter("masque.pninscritsseulement");
// filtrage par défaut
boolean pnInscritsSeulementBool = true;
if (pnInscritsSeulement != null) {
// un jour on aura "0" et ça annulera le paramètre par défaut
pnInscritsSeulementBool = pnInscritsSeulement.equals("1");
}
 
String page = Location.getParameter("page");
Integer pageInt = null;
try {
pageInt = Integer.parseInt(page);
} catch (Exception e) {
pageInt = null;
}
String pas = Location.getParameter("pas");
Integer pasInt = null;
if (pas != null) {
try {
pasInt = Integer.parseInt(pas);
} catch (Exception e) {
pasInt = null;
}
}
InformationsRecherche rechercheParArguments = new InformationsRecherche();
rechercheParArguments.setRechercheLibre(rechercheLibre);
rechercheParArguments.setFamille(famille);
rechercheParArguments.setTaxon(taxon);
rechercheParArguments.setGenre(genre);
rechercheParArguments.setCommune(commune);
rechercheParArguments.setDepartement(dept);
rechercheParArguments.setAuteur(auteur);
rechercheParArguments.setDate(date);
rechercheParArguments.setTag(tag);
rechercheParArguments.setPays(paysParam);
rechercheParArguments.setPnInscritsSeulement(pnInscritsSeulementBool);
if (protocole != null && !protocole.equals("")) {
CacheClient.getInstance().setIdProtocoleEnAttente(protocole);
rechercheParArguments.setIdProtocoleSelectionne(protocole);
} else if (URLUtils.getURLSpecialParameterValue() != null) {
CacheClient.getInstance().setIdProtocoleEnAttente(URLUtils.getURLSpecialParameterValue());
rechercheParArguments.setIdProtocoleSelectionne(URLUtils.getURLSpecialParameterValue());
}
if (pasInt != null) {
setPasPagination(pasInt);
}
if (urlCourante.contains(urlAppliImg)) {
rechercheParArguments.setMotClefCel(tagCel);
rechercheParArguments.setMotClefDel(tagDel);
if (pageInt != null) {
setPageCouranteRechercheImages(pageInt);
}
} else {
if (pageInt != null) {
setPageCouranteRechercheObservations(pageInt);
}
}
definirOrdreTriCourantParUrl();
String tri = Location.getParameter("tri");
if (urlCourante.contains(urlAppliImg)) {
if (tri != null) {
// Pour PictoFlora
if (tri.equals("moyenne-arithmetique")) {
rechercheParArguments.setTriParMoyenneArithmetique(modeTri);
} else if (tri.equals("points")) {
rechercheParArguments.setTriParNbPoints(modeTri);
} else if (tri.equals("tags")) {
rechercheParArguments.setTriParNbTags(modeTri);
} else {
rechercheParArguments.setTriParDatePublication(modeTri);
}
} else {
// Tri par défaut pour PictoFlora
rechercheParArguments.setTriParDatePublication(ModeTri.TRI_DESCENDANT);
}
} else {
// Pour IdentiPlante
if (tri != null && tri.equals("date_observation")) {
rechercheParArguments.setTriParDateObservation(modeTri);
} else if(tri != null && tri.equals("nb_commentaires")) {
rechercheParArguments.setTriParNbCommentaires(modeTri);
} else {
// Tri par défaut pour IdentiPlante
rechercheParArguments.setTriParDatePublication(ModeTri.TRI_DESCENDANT);
}
}
rechercheParArguments.setMotClef(tag);
// si le référentiel est passé dans l'url alors il ne doit pas être modifiable
if (referentiel != null && !referentiel.equals("")) {
setReferentielCourant(referentiel);
rechercheParArguments.setReferentiel(referentiel);
referentielNonModifiable = true;
}
if (Location.getParameterMap().size() == 0) {
// par défaut l'application s'ouvre sur l'onglet à déterminer
statut = ConstantesNavigation.PARAM_TYPE_DEFAUT;
} else {
if (Arrays.asList(statutsPossibles).contains(statutParam)) {
statut = statutParam;
} else {
statut = ConstantesNavigation.PARAM_TYPE_DEFAUT;
}
}
informationsRechercheImage = rechercheParArguments;
informationsRechercheObservation = rechercheParArguments;
mettreAjourUrlCourante();
}
private void definirOrdreTriCourantParUrl() {
String ordre = Location.getParameter("ordre");
if (ordre != null) {
if (ordre.equals("asc")) {
this.modeTri = ModeTri.TRI_ASCENDANT;
} else if (ordre.equals("desc")) {
this.modeTri = ModeTri.TRI_DESCENDANT;
}
}
}
 
public void setIdProtocoleEnAttente(String idProtocole) {
idProtocoleEnAttente = idProtocole;
}
 
public String getIdProtocoleEnAttente() {
return idProtocoleEnAttente;
}
 
public Utilisateur getUtilisateur() {
if (this.utilisateur == null) {
this.utilisateur = new Utilisateur(null, null);
}
return this.utilisateur;
}
public void setUtilisateur(Utilisateur utilisateur) {
this.utilisateur = utilisateur;
}
public void setHome(String home) {
setPageCourante(home);
}
public String getHome() {
return "";
}
public Observation getObservationCourante() {
return observationCourante;
}
 
public void setObservationCourante(Observation observationCourante) {
this.observationCourante = observationCourante;
}
 
public static CacheClient getInstance() {
if (instance == null) {
instance = new CacheClient();
}
return instance;
}
 
public String getTaxonPourRechercheEflore() {
return taxonPourRechercheEflore;
}
 
public void setTaxonPourRechercheEflore(String taxonPourRechercheEflore) {
this.taxonPourRechercheEflore = taxonPourRechercheEflore;
}
 
public int getNumPageRechercheImage() {
return numPageRechercheImage;
}
 
// Pour la recherche :
public int getPasPagination() {
return pasPagination;
}
 
public void setPasPagination(int pasPagination) {
this.pasPagination = pasPagination;
}
 
public void setPageCouranteRechercheImages(int pageCouranteRecherche) {
this.pageCouranteRechercheImage = pageCouranteRecherche;
}
 
public int getPageCouranteRechercheImage() {
return this.pageCouranteRechercheImage;
}
 
public void setNbTotalImagesRecherchees(int nbTotalImagesRecherchees) {
this.nbTotalImagesRecherchees = nbTotalImagesRecherchees;
}
 
public int getNbTotalImagesRecherchees() {
return this.nbTotalImagesRecherchees;
}
 
public Image getImageCourante() {
return imageCourante;
}
 
public void setImageCourante(Image imageCourante) {
this.imageCourante = imageCourante;
}
public void setListeProtocoles(List<Protocole> listeProtocole) {
this.listeProtocoles = listeProtocole;
}
public List<Protocole> getListeProtocoles() {
return this.listeProtocoles;
}
 
public Protocole getProtocoleCourant() {
return protocoleCourant;
}
 
public void setProtocoleCourant(Protocole protocoleCourant) {
this.protocoleCourant = protocoleCourant;
}
 
public InformationsRecherche getInformationsRechercheImage() {
if (informationsRechercheImage == null) {
informationsRechercheImage = new InformationsRecherche();
}
return informationsRechercheImage;
}
 
public InformationsRecherche getInformationsRechercheObservation() {
if (informationsRechercheObservation == null) {
informationsRechercheObservation = new InformationsRecherche();
}
return informationsRechercheObservation;
}
 
public void setInformationsRechercheImage(InformationsRecherche informationsRechercheImage) {
this.informationsRechercheImage = informationsRechercheImage;
}
 
public void setInformationsRechercheObservation(InformationsRecherche informationsRechercheObservation) {
this.informationsRechercheObservation = informationsRechercheObservation;
}
 
public int getPageCouranteRechercheObservations() {
return pageCouranteRechercheObservations;
}
 
public void setPageCouranteRechercheObservations(int pageCouranteRechercheObservations) {
this.pageCouranteRechercheObservations = pageCouranteRechercheObservations;
}
public void setReferentielCourant(String referentielCourant) {
this.referentielCourant = referentielCourant;
}
public String getReferentielCourant() {
return referentielCourant;
}
public void setReferentielNonModifiable(boolean referentielNonModifiable) {
this.referentielNonModifiable = referentielNonModifiable;
}
public boolean getReferentielNonModifiable() {
return referentielNonModifiable;
}
public String getUrlPageSignalerMauvaiseId(String id) {
Config config = new Config();
String urlSignalerMauvaiseId = config.getUrl("identiplante");
if (!GWT.isScript()) {
urlSignalerMauvaiseId += "?gwt.codesvr="+Location.getParameter("gwt.codesvr")+"";
}
return urlSignalerMauvaiseId+"#"+ConstantesNavigation.PAGE_DETAIL_OBS+"~"+id;
}
public void setListePays(Map<String, String> listePays) {
this.listePays = listePays;
listePaysInversee = new HashMap<String, String>();
for(Map.Entry<String, String> entry : listePays.entrySet()){
listePaysInversee.put(entry.getValue(), entry.getKey());
}
}
public Map<String, String> getListePays() {
return listePays;
}
public Map<String, String> getListePaysInversee() {
return listePaysInversee;
}
public String genererUrlCourante() {
String urlCourante = Window.Location.getHref();
Config config = new Config();
String urlAppliObs = config.getUrl("identiplante");
String urlAppliImg = config.getUrl("pictoflora");
String url = urlCourante;
String arguments = "";
if (urlCourante.contains(urlAppliImg)) {
InformationsRecherche infoRecherche;
infoRecherche = getInformationsRechercheImage();
if (CacheClient.getInstance().getProtocoleCourant() != null) {
infoRecherche.setIdProtocoleSelectionne("" + CacheClient.getInstance().getProtocoleCourant().getId());
}
arguments = infoRecherche.versChaineRequete();
arguments += (arguments.isEmpty()) ? "" : "&";
arguments += "page="+getPageCouranteRechercheImage()+"&pas="+getPasPagination();
 
url = config.getUrl("pictoflora");
} else if (urlCourante.contains(urlAppliObs)) {
InformationsRecherche infoRecherche;
infoRecherche = getInformationsRechercheObservation();
arguments = "masque.type="+statut;
arguments += "&page="+getPageCouranteRechercheObservations()+"&pas="+getPasPagination();
arguments += "&"+infoRecherche.versChaineRequete();
url = config.getUrl("identiplante");
}
if (!GWT.isScript()) {
arguments += "&gwt.codesvr="+Location.getParameter("gwt.codesvr")+"";
}
arguments = (arguments.isEmpty()) ? "" : "?" + arguments;
String signet = getPageCourante().equals("") ? "" : "#" + getPageCourante();
url += arguments + signet;
// remplacements batards pour corriger l'url
// TODO: factoriser toute la fonction
url = url.replaceAll("&#", "#");
url = url.replaceAll("&&", "&");
url = url.replaceAll("\\?&", "?");
if (url.endsWith("&")) {
url = url.substring(0, url.length()-1);
}
return url;
}
public void mettreAjourUrlCourante() {
mettreAJourUrlCouranteSansRecharger(genererUrlCourante());
}
private static native void mettreAJourUrlCouranteSansRecharger(String nouvelleUrl) /*-{
// javascript double negative trick
// pour plus d'info http://stackoverflow.com/questions/4686583/can-someone-explain-this-double-negative-trick
if (!!($wnd.history && $wnd.history.pushState)) {
var currentState = $wnd.history.state;
if (currentState != nouvelleUrl) {
$wnd.history.pushState(nouvelleUrl, "", nouvelleUrl);
}
}
}-*/;
public static void remplacerTitreOngletNavigateur(String titre) {
if (Document.get() != null) {
titreOngletNavigateur = Document.get().getTitle();
Document.get().setTitle(titre);
}
}
public static void ajouterAuTitreOngletNavigateur(String titreSupplementaire) {
if (Document.get() != null) {
titreOngletNavigateur = titreOngletNavigateur.isEmpty() ? Document.get().getTitle() : titreOngletNavigateur;
Document.get().setTitle(titreOngletNavigateur+titreSupplementaire);
}
}
public static void reinitialiserTitreOngletNavigateur() {
if (Document.get() != null) {
titreOngletNavigateur = titreOngletNavigateur.isEmpty() ? Document.get().getTitle() : titreOngletNavigateur;
Document.get().setTitle(titreOngletNavigateur);
}
}
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/services/RequestBuilderWithCredentials.java
New file
0,0 → 1,28
package org.tela_botanica.del.client.services;
 
import org.tela_botanica.del.client.modeles.Utilisateur;
 
import com.google.gwt.http.client.RequestBuilder;
 
public class RequestBuilderWithCredentials extends RequestBuilder {
 
/**
* Envoie une requête avec les headers "Credentials" (CORS) et "Authorization" (SSO)
*/
public RequestBuilderWithCredentials(Method httpMethod, String url) {
this(httpMethod, url, true);
}
 
/**
* Envoie une requête avec un header "Credentials" pour CORS (ajax.io); si
* authorizationHeader vaut true, envoie aussi le jeton SSO (s'il existe) dans
* le header "Authorization"
*/
public RequestBuilderWithCredentials(Method httpMethod, String url, boolean authorizationHeader) {
super(httpMethod, url);
if(authorizationHeader && Utilisateur.getJeton() != null && ! Utilisateur.getJeton().isEmpty()) {
this.setHeader("Authorization", Utilisateur.getJeton());
}
this.setIncludeCredentials(true);
}
}
/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/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/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/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/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/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/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/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/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/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/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/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/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/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/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/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/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/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);
 
}
/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/CalculVoteDeterminationService.java
New file
0,0 → 1,79
package org.tela_botanica.del.client.services;
 
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
 
import org.tela_botanica.del.client.modeles.MoyenneVote;
import org.tela_botanica.del.client.modeles.PropositionDetermination;
import org.tela_botanica.del.client.modeles.VoteDetermination;
 
 
 
public class CalculVoteDeterminationService {
public static List<MoyenneVote> calculerVoteDeterminationPlusPopulaire(List<PropositionDetermination> propositions) {
List<MoyenneVote> pairesVotes = new ArrayList<MoyenneVote>();
for (PropositionDetermination proposition : propositions) {
pairesVotes.add(calculerVoteDetermination(proposition));
}
java.util.Collections.sort(pairesVotes);
return pairesVotes;
}
public static int getNombreTotalVotants(PropositionDetermination proposition) {
int nbVotants = 0;
List<PropositionDetermination> votes = proposition.getObservation().getPropositionDeterminations();
Iterator<PropositionDetermination> itVotes = votes.iterator();
while (itVotes.hasNext()) {
PropositionDetermination propositionCourante = itVotes.next();
nbVotants += propositionCourante.getVotesDeterminations().size();
}
return nbVotants;
}
public static MoyenneVote calculerVoteDetermination(PropositionDetermination propositionDetermination) {
int nbVotants = getNombreTotalVotants(propositionDetermination);
return calculerProportionVote(propositionDetermination, nbVotants);
}
public static MoyenneVote calculerMoyenneVoteDetermination(PropositionDetermination propositionDetermination, int nbVotants) {
return calculerProportionVote(propositionDetermination, nbVotants);
}
private static MoyenneVote calculerProportionVote(PropositionDetermination propositionDetermination, int nbVotants) {
Map<String,VoteDetermination> votes = propositionDetermination.getVotesDeterminations();
double scoreVote = 0;
if (votes.size() > 0 && nbVotants > 0) {
Set<String> cles = votes.keySet();
 
for (String cle : cles) {
String idAuteur = cle;
boolean voteEstPositif = votes.get(cle).getVote() == 1;
// un votant identifiant compte comme deux votants supplémentaires
// il a donc un vote 3 fois supérieur
int valeurVote = estUnAuteurIdentifie(idAuteur) ? 3 : 1;
scoreVote += voteEstPositif ? valeurVote : -valeurVote;
}
}
return new MoyenneVote((new Double(scoreVote)).intValue(), propositionDetermination);
}
private static boolean estUnAuteurIdentifie(String idAuteur) {
boolean estIdentifie = true;
try {
int intIdAuteur = Integer.parseInt(idAuteur);
} catch (NumberFormatException nfe) {
estIdentifie = false;
}
return estIdentifie;
}
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/services/ReferentielService.java
New file
0,0 → 1,35
package org.tela_botanica.del.client.services;
 
import java.util.LinkedHashMap;
import java.util.Map;
 
import org.tela_botanica.del.client.i18n.I18n;
 
public class ReferentielService {
//TODO: trouver une meilleure manière de gérer les référentiels
// que cette classe statique
private static Map<String, String> referentiels;
public static Map<String, String> getReferentiels() {
// le fonctionnement de l'i18n empeche de mettre les référentiels dans
// des fichiers de config car il est impossible de charger les termes
// de vocabulaires associés avec la réflexivité
if(referentiels == null) {
// attention l'utilisation de LinkedHashmap est importante pour conserver
// l'ordre des référentiels
referentiels = new LinkedHashMap<String, String>();
referentiels.put("tous", I18n.getVocabulary().referentielTous());
referentiels.put("bdtfx", I18n.getVocabulary().referentielBdtfx());
referentiels.put("bdtxa", I18n.getVocabulary().referentielBdtxa());
referentiels.put("bdtre", I18n.getVocabulary().referentielBdtre());
referentiels.put("aublet", I18n.getVocabulary().referentielAublet());
referentiels.put("florical", I18n.getVocabulary().referentielFlorical());
referentiels.put("isfan", I18n.getVocabulary().referentielIsfan());
referentiels.put("apd", I18n.getVocabulary().referentielApd());
referentiels.put("lbf", I18n.getVocabulary().referentielLbf());
}
return referentiels;
}
 
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/Del.java
New file
0,0 → 1,69
package org.tela_botanica.del.client;
 
import org.tela_botanica.del.client.cache.CacheClient;
import org.tela_botanica.del.client.gestionhistorique.GestionnaireHistorique;
import org.tela_botanica.del.client.config.Config;
 
import com.google.gwt.core.client.EntryPoint;
import com.google.gwt.user.client.History;
import com.google.gwt.core.client.*;
 
public class Del implements EntryPoint {
@Override
public void onModuleLoad() {
/*GWT.setUncaughtExceptionHandler(new
GWT.UncaughtExceptionHandler() {
public void onUncaughtException(Throwable e) {
Throwable unwrapped = unwrap(e);
Window.alert(buildStackTrace(unwrapped, ""));
}
public Throwable unwrap(Throwable e) {
if(e instanceof UmbrellaException) {
UmbrellaException ue = (UmbrellaException) e;
if(ue.getCauses().size() == 1) {
return unwrap(ue.getCauses().iterator().next());
}
}
return e;
}
});*/
 
CacheClient.getInstance().initialiserAvecParametres();
History.addValueChangeHandler(new GestionnaireHistorique());
History.fireCurrentHistoryState();
}
/*private String buildStackTrace(Throwable t, String log) {
if (t != null) {
log += t.getClass().toString();
log += t.getMessage();
StackTraceElement[] stackTrace = t.getStackTrace();
if (stackTrace != null) {
StringBuffer trace = new StringBuffer();
 
for (int i = 0; i < stackTrace.length; i++) {
trace.append(stackTrace[i].getClassName() + "." + stackTrace[i].getMethodName() + "("
+ stackTrace[i].getFileName() + ":" + stackTrace[i].getLineNumber());
}
 
log += trace.toString();
}
 
Throwable cause = t.getCause();
if (cause != null && cause != t) {
log += buildStackTrace(cause, "CausedBy:\n");
}
}
return log;
}*/
 
public static native void LogVersFirebug(Object o) /*-{
if (!!($wnd.console && $wnd.console.log)) {
console.log(o);
}
}-*/;
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/config/APropos.java
New file
0,0 → 1,93
package org.tela_botanica.del.client.config;
 
import com.google.gwt.i18n.client.Dictionary;
 
/**
* Classe chargeant certains paramètres de configuration à partir d'un fichier
* javascript (war/config/apropos.js)
*
* @author Jean-Pascal MILCENT
*
*/
public class APropos {
private String appliNom;
private String appliCode;
private String appliVersionNom;
private String appliVersionCode;
private String developpeurs;
private String traducteurs;
private String testeurs;
private String licence;
private String dateHeureCompilation;
private String revisionGlobale;
private String revisionGlobaleServices;
private String versionJavaCompilation;
public APropos() {
// on utilise le dictionnaire d'internationalisation pour lire les variables du fichier javascript
Dictionary apropos = Dictionary.getDictionary("apropos");
appliNom = apropos.get("appliNom");
appliCode = apropos.get("appliCode");
appliVersionNom = apropos.get("appliVersionNom");
appliVersionCode = apropos.get("appliVersionCode");
developpeurs = apropos.get("developpeurs");
testeurs = apropos.get("testeurs");
traducteurs = apropos.get("traducteurs");
licence = apropos.get("licence");
dateHeureCompilation = apropos.get("dateHeureCompilation");
revisionGlobale = apropos.get("revisionGlobale");
revisionGlobaleServices = apropos.get("revisionGlobaleServices");
versionJavaCompilation = apropos.get("versionJavaCompilation");
}
 
public String getAppliNom() {
return appliNom;
}
public String getAppliCode() {
return appliCode;
}
public String getAppliVersionNom() {
return appliVersionNom;
}
public String getAppliVersionCode() {
return appliVersionCode;
}
public String getDeveloppeurs() {
return developpeurs;
}
public String getTraducteurs() {
return traducteurs;
}
public String getLicence() {
return licence;
}
public String getDateHeureCompilation() {
return dateHeureCompilation;
}
public String getRevisionGlobale() {
return revisionGlobale;
}
public String getRevisionGlobaleServices() {
return revisionGlobaleServices;
}
public String getVersionJavaCompilation() {
return versionJavaCompilation;
}
 
public String getTesteurs() {
return testeurs;
}
 
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/config/Config.java
New file
0,0 → 1,88
package org.tela_botanica.del.client.config;
 
import java.util.LinkedHashMap;
import com.google.gwt.i18n.client.Dictionary;
 
/**
* Classe chargeant certains paramètres de configuration à partir d'un fichier
* javascript (config.js)
*
* @author Jean-Pascal MILCENT
*
*/
public class Config {
 
/**
* Tableau associatif contenant les identifiants des urls externes
*/
private LinkedHashMap<String, String> urls = new LinkedHashMap<String, String>();
/**
* Tableau associatif contenant d'autres informations
*/
private LinkedHashMap<String, String> infos = new LinkedHashMap<String, String>();
 
/** true si l'appli est en prod, false si elle est en test */
protected boolean prod;
 
/**
* Constructeur sans argument
*/
public Config() {
// on utilise le dictionnaire d'internationalisation pour lire les variables du fichier javascript
// @WTF quel intérêt de copier un dictionnaire dans un autre ??
Dictionary configuration = Dictionary.getDictionary("configuration");
urls.put("base", configuration.get("serviceBaseUrl"));
urls.put("del", configuration.get("delUrl"));
urls.put("identiplante", configuration.get("identiplanteUrl"));
urls.put("pictoflora", configuration.get("pictofloraUrl"));
urls.put("bogue", configuration.get("bogueUrl"));
urls.put("commentaire", configuration.get("commentaireUrl"));
urls.put("applisaisie", configuration.get("appliSaisieUrl"));
urls.put("eflore", configuration.get("efloreUrl"));
urls.put("efloreTaxon", configuration.get("efloreTaxonUrl"));
urls.put("bonnierPda", configuration.get("bonnierPdaUrl"));
urls.put("ouvragesFlore", configuration.get("ouvragesFloreUrl"));
urls.put("clesDetermination", configuration.get("clesDeterminationUrl"));
urls.put("rss", configuration.get("rssUrl"));
urls.put("iconeBaseUrl", configuration.get("iconeTagBaseUrl"));
urls.put("profil", configuration.get("profilUrl"));
urls.put("images", configuration.get("imagesUrl"));
urls.put("serviceUtilisateursBaseUrl", configuration.get("serviceUtilisateursBaseUrl"));
urls.put("serviceAuthBaseUrl", configuration.get("serviceAuthBaseUrl"));
 
prod = Boolean.parseBoolean(configuration.get("prod"));
 
infos.put("popupOptions", "menubar=yes,location=yes,resizable=yes,scrollbars=yes,status=yes");
}
/**
* Accesseur pour l'url de base du serveur jrest
*
* @return une url de la forme http://emplacement_serveur/jrest
*/
public String getServiceBaseUrl() {
return getUrl("base");
}
 
public String getUrl(String code) {
String url = "";
if (urls.containsKey(code)) {
url = urls.get(code);
}
return url;
}
 
public boolean isProd() {
return prod;
}
public String getInfo(String code) {
String info = "";
if (infos.containsKey(code)) {
info = infos.get(code);
}
return info;
}
 
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/gestionhistorique/ConstantesNavigation.java
New file
0,0 → 1,14
package org.tela_botanica.del.client.gestionhistorique;
public class ConstantesNavigation {
public static final String HOME = "accueil";
public static final String PAGE_DETAIL_OBS = "obs"; //pour identiplante
public static final String PAGE_DETAIL_IMG = "img";
public static final String PAGE_COMPARAISON_EFLORE = "comparateur";
public static final String PARAM_TYPE_TOUS = "tous";
public static final String PARAM_TYPE_A_DETERMINER = "adeterminer";
public static final String PARAM_TYPE_A_CONFIRMER = "aconfirmer";
public static final String PARAM_TYPE_VALIDEES = "validees";
public static final String PARAM_TYPE_DEFAUT = PARAM_TYPE_A_DETERMINER;
public static final String PARAM_TYPE_MONACTIVITE = "monactivite";
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/gestionhistorique/GestionnaireHistorique.java
New file
0,0 → 1,114
package org.tela_botanica.del.client.gestionhistorique;
 
import org.tela_botanica.del.client.cache.CacheClient;
import org.tela_botanica.del.client.config.Config;
import org.tela_botanica.del.client.services.rest.ImageServiceConcret;
import org.tela_botanica.del.client.services.rest.ObservationServiceConcret;
import org.tela_botanica.del.client.services.rest.ProtocoleServiceConcret;
import org.tela_botanica.del.client.vues.comparaisoneflore.ComparaisonEflorePresenteur;
import org.tela_botanica.del.client.vues.comparaisoneflore.ComparaisonEfloreVue;
import org.tela_botanica.del.client.vues.entete.EntetePresenteur;
import org.tela_botanica.del.client.vues.entete.EnteteVue;
import org.tela_botanica.del.client.vues.identiplante.moteur.MoteurIdentiplantePresenteur;
import org.tela_botanica.del.client.vues.identiplante.moteur.MoteurIdentiplanteVue;
import org.tela_botanica.del.client.vues.identiplante.plateformedetermination.IdentiplanteDeterminationPresenteur;
import org.tela_botanica.del.client.vues.identiplante.plateformedetermination.IdentiplanteDeterminationVue;
import org.tela_botanica.del.client.vues.pictoflora.moteur.MoteurPictofloraPresenteur;
import org.tela_botanica.del.client.vues.pictoflora.moteur.MoteurPictofloraVue;
import org.tela_botanica.del.client.vues.pictoflora.plateformedetermination.PictofloraDeterminationPresenteur;
import org.tela_botanica.del.client.vues.pictoflora.plateformedetermination.PictofloraDeterminationVue;
 
import com.google.gwt.core.shared.GWT;
import com.google.gwt.event.logical.shared.ValueChangeEvent;
import com.google.gwt.event.logical.shared.ValueChangeHandler;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.ui.HTML;
import com.google.gwt.user.client.ui.Panel;
import com.google.gwt.user.client.ui.RootPanel;
 
/**
* @author Benjamin
*
*/
public class GestionnaireHistorique implements ValueChangeHandler<String> {
 
/**
* Évènement lorsque l'historique change. L'action par défaut affiche la
* page d'accueil.
* */
public void onValueChange(ValueChangeEvent<String> event) {
//1. définition des variables
String eventValue = event.getValue();
GWT.log("Historique -> eventValue:"+eventValue);
Panel contenu = RootPanel.get("contenu");
Panel zoneEntete = RootPanel.get("zoneEnteteContenu");
CacheClient cache = CacheClient.getInstance();
cache.setPageCourante(eventValue);
//2. nettoyer le contenu
contenu.clear();
zoneEntete.clear();
//3. gérer l'entete
EntetePresenteur entetePresenteur = new EntetePresenteur(new EnteteVue());
entetePresenteur.go(zoneEntete);
//Actions en fonction de la valeur de l'évènement et de l'url
String urlCourante = Window.Location.getHref();
Config config = new Config();
String urlAppliObs = config.getUrl("identiplante");
String urlAppliImg = config.getUrl("pictoflora");
if (urlCourante.contains(urlAppliImg)) {
if (eventValue.startsWith(ConstantesNavigation.PAGE_DETAIL_IMG)) {
PictofloraDeterminationPresenteur presenteur = new PictofloraDeterminationPresenteur(
new PictofloraDeterminationVue(),
new ObservationServiceConcret(),
new ProtocoleServiceConcret()
);
presenteur.go(contenu);
} else {
lancerMoteurRechercheImages(contenu);
}
} else if (urlCourante.contains(urlAppliObs)) {
if (eventValue.startsWith(ConstantesNavigation.PAGE_DETAIL_OBS)) {
IdentiplanteDeterminationPresenteur presenteur = new IdentiplanteDeterminationPresenteur(
new IdentiplanteDeterminationVue(),
new ObservationServiceConcret()
);
presenteur.go(contenu);
} else if (eventValue.startsWith(ConstantesNavigation.PAGE_COMPARAISON_EFLORE)) {
ComparaisonEflorePresenteur presenteur = new ComparaisonEflorePresenteur(
new ComparaisonEfloreVue(),
new ImageServiceConcret()
);
presenteur.go(contenu);
} else {
lancerMoteurRechercheObservation(contenu);
}
} else {
lancerMoteurRechercheObservation(contenu);
}
 
// Mise à jour de l'url courante (re-écriture)
CacheClient.getInstance().mettreAjourUrlCourante();
}
/**
* Générer la page de recherche observation et l'afficher dans panneau
* @param Panel panneau le panneau pour afficher le résultat
* */
public void lancerMoteurRechercheObservation(Panel panneau) {
MoteurIdentiplantePresenteur presenteur = new MoteurIdentiplantePresenteur(new ObservationServiceConcret(), new MoteurIdentiplanteVue());
presenteur.go(panneau);
}
/**
* Générer la page de recherche images et l'afficher dans panneau
* @param Panel panneau le panneau pour afficher le résultat
* */
public void lancerMoteurRechercheImages(Panel panneau) {
MoteurPictofloraPresenteur presenteur = new MoteurPictofloraPresenteur(new MoteurPictofloraVue(), new ProtocoleServiceConcret());
presenteur.go(panneau);
}
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/composants/votefleur/voteFleur.css
New file
0,0 → 1,23
.fleur {
width:28px;
height:27px;
}
 
.ZeroPetales {
background:url(./img/fleurs/fleur0.png);
}
.UnPetale {
background:url(./img/fleurs/fleur1.png);
}
.DeuxPetales {
background:url(./img/fleurs/fleur2.png);
}
.TroisPetales {
background:url(./img/fleurs/fleur3.png);
}
.QuatrePetales {
background:url(./img/fleurs/fleur4.png);
}
.CinqPetales {
background:url(./img/fleurs/fleur5.png);
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/composants/votefleur/VoteFleurVue.ui.xml
New file
0,0 → 1,16
<ui:UiBinder xmlns:ui='urn:ui:com.google.gwt.uibinder' xmlns:g='urn:import:com.google.gwt.user.client.ui' ui:generateFormat='com.google.gwt.i18n.rebind.format.PropertiesFormat'
ui:generateKeys="com.google.gwt.i18n.rebind.keygen.MD5KeyGenerator" ui:generateLocales="default">
 
<ui:with field='res' type='org.tela_botanica.del.client.resources.Ressources'/>
<ui:with field="constants" type="org.tela_botanica.del.client.i18n.Vocabulary"/>
<ui:style src="voteFleur.css" />
 
<g:HTMLPanel>
<g:HTMLPanel ui:field="fleur0" styleName="{style.fleur} {style.ZeroPetales}"></g:HTMLPanel>
<g:HTMLPanel ui:field="fleur1" styleName="{style.fleur} {style.UnPetale}"></g:HTMLPanel>
<g:HTMLPanel ui:field="fleur2" styleName="{style.fleur} {style.DeuxPetales}"></g:HTMLPanel>
<g:HTMLPanel ui:field="fleur3" styleName="{style.fleur} {style.TroisPetales}"></g:HTMLPanel>
<g:HTMLPanel ui:field="fleur4" styleName="{style.fleur} {style.QuatrePetales}"></g:HTMLPanel>
<g:HTMLPanel ui:field="fleur5" styleName="{style.fleur} {style.CinqPetales}"></g:HTMLPanel>
</g:HTMLPanel>
</ui:UiBinder>
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/composants/votefleur/VoteFleurPresenteur.java
New file
0,0 → 1,33
package org.tela_botanica.del.client.composants.votefleur;
 
import org.tela_botanica.del.client.composants.presenteur.Presenteur;
import com.google.gwt.user.client.ui.HasWidgets;
import com.google.gwt.user.client.ui.IsWidget;
 
public class VoteFleurPresenteur extends Presenteur {
 
public interface Vue extends IsWidget {
public void setNote(int note);
}
 
private Vue vue;
 
public VoteFleurPresenteur(Vue vue) {
this.vue = vue;
}
 
public void go(HasWidgets composite) {
composite.clear();
composite.add(vue.asWidget());
}
public void setNote(int note) {
vue.setNote(note);
}
 
@Override
protected void gererEvenements() {
// TODO Auto-generated method stub
}
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/composants/votefleur/VoteFleurVue.java
New file
0,0 → 1,56
package org.tela_botanica.del.client.composants.votefleur;
 
 
import org.tela_botanica.del.client.composants.votefleur.VoteFleurPresenteur.Vue;
 
import com.google.gwt.core.client.GWT;
import com.google.gwt.uibinder.client.UiBinder;
import com.google.gwt.uibinder.client.UiField;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.HTMLPanel;
import com.google.gwt.user.client.ui.Widget;
 
public class VoteFleurVue extends Composite implements Vue {
 
// Annotation can be used to change the name of the associated xml file
// @UiTemplate("ObservationVue.ui.xml")
interface MyUiBinder extends UiBinder<Widget, VoteFleurVue> {
}
 
private static MyUiBinder uiBinder = GWT.create(MyUiBinder.class);
@UiField
protected HTMLPanel fleur0, fleur1, fleur2, fleur3, fleur4, fleur5;
 
public VoteFleurVue() {
// sets listBox
initWidget(uiBinder.createAndBindUi(this));
initialiserVue();
}
public void initialiserVue() {
this.fleur0.setVisible(false);
this.fleur1.setVisible(false);
this.fleur2.setVisible(false);
this.fleur3.setVisible(false);
this.fleur4.setVisible(false);
this.fleur5.setVisible(false);
}
 
public void setNote(int note) {
switch (note) {
case 0 : this.fleur0.setVisible(true);
break;
case 1 : this.fleur1.setVisible(true);
break;
case 2 : this.fleur2.setVisible(true);
break;
case 3 : this.fleur3.setVisible(true);
break;
case 4 : this.fleur4.setVisible(true);
break;
default : this.fleur5.setVisible(true);
break;
}
}
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/composants/formulairerechercheeflore/formulaireRechercheEflore.css
New file
0,0 → 1,4
.propositionTaxon {
width: 150px;
height: 30px;
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/composants/formulairerechercheeflore/FormulaireRechercheEfloreVue.ui.xml
New file
0,0 → 1,18
<!DOCTYPE ui:UiBinder SYSTEM "http://dl.google.com/gwt/DTD/xhtml.ent">
<ui:UiBinder
xmlns:ui='urn:ui:com.google.gwt.uibinder'
xmlns:g='urn:import:com.google.gwt.user.client.ui'>
<ui:with field="constants" type="org.tela_botanica.del.client.i18n.Vocabulary"/>
<ui:style src="formulaireRechercheEflore.css" />
<g:VerticalPanel>
<g:Label text="{constants.comparer}" styleName="sousTitre"/>
<g:Label text="{constants.infoComparer}" styleName="petit"/>
<g:HTML><br /></g:HTML>
<g:HorizontalPanel >
<g:HTMLPanel ui:field="propositionTaxon" styleName="{style.propositionTaxon}" />
<g:Button text="{constants.ok}" ui:field="boutonValidationRechercheObservation" />
</g:HorizontalPanel>
</g:VerticalPanel>
 
</ui:UiBinder>
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/composants/formulairerechercheeflore/FormulaireRechercheEflorePresenteur.java
New file
0,0 → 1,81
package org.tela_botanica.del.client.composants.formulairerechercheeflore;
 
import org.tela_botanica.del.client.cache.CacheClient;
import org.tela_botanica.del.client.composants.formulaires.autocompletion.AutoCompletionComboBoxPresenteur;
import org.tela_botanica.del.client.composants.formulaires.autocompletion.AutoCompletionComboBoxVue;
import org.tela_botanica.del.client.config.Config;
import org.tela_botanica.del.client.i18n.I18n;
import org.tela_botanica.del.client.navigation.evenement.BusEvenementiel;
import org.tela_botanica.del.client.navigation.evenement.comparaisoneflore.EvenementComparaisonEflore;
import org.tela_botanica.del.client.utils.InfosNomPourAutocompletion;
import org.tela_botanica.del.client.utils.UtilitairesAutoCompletionService;
 
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.event.dom.client.KeyCodes;
import com.google.gwt.event.dom.client.KeyPressEvent;
import com.google.gwt.event.dom.client.KeyPressHandler;
import com.google.gwt.http.client.Response;
import com.google.gwt.user.client.ui.HasWidgets;
 
public class FormulaireRechercheEflorePresenteur {
 
private FormulaireRechercheEfloreVue formulaireRechercheEfloreVue = new FormulaireRechercheEfloreVue();
 
private AutoCompletionComboBoxPresenteur autoCompletionNomTaxonsPresenteur;
 
public FormulaireRechercheEflorePresenteur() {
creerCompletionTaxons();
}
public void go(HasWidgets composite) {
autoCompletionNomTaxonsPresenteur.go(formulaireRechercheEfloreVue.getPropositionTaxon());
composite.add(formulaireRechercheEfloreVue);
gererEvenements();
}
 
private void gererEvenements() {
formulaireRechercheEfloreVue.getBoutonValidationRechercheObservation().addClickHandler(new ClickHandler() {
 
@Override
public void onClick(ClickEvent event) {
lancerRechercheEflore();
}
});
autoCompletionNomTaxonsPresenteur.getAutoCompletionComboBoxVue().getSuggestBoxHasKeyPressHandlers().addKeyPressHandler(new KeyPressHandler() {
@Override
public void onKeyPress(KeyPressEvent event) {
if (event.getNativeEvent().getKeyCode() == KeyCodes.KEY_ENTER) {
lancerRechercheEflore();
}
}
});
}
 
private void creerCompletionTaxons() {
String url = new Config().getServiceBaseUrl() + "nomstaxons";
autoCompletionNomTaxonsPresenteur = new AutoCompletionComboBoxPresenteur(new AutoCompletionComboBoxVue(), url) {
protected String effectuerPreTraitementChaineRequete(String requete) {
requete = "?masque.nom=" + requete;
return UtilitairesAutoCompletionService.effectuerPreTraitementChaineRequeteGenreEspeceSlash(requete);
}
 
@Override
protected InfosNomPourAutocompletion[] parserResultatRequete(Response response) {
return UtilitairesAutoCompletionService.parserResultatRetourSimple(response);
}
};
}
 
private void lancerRechercheEflore() {
CacheClient.getInstance().setTaxonPourRechercheEflore(autoCompletionNomTaxonsPresenteur.getValeur());
EvenementComparaisonEflore evenementComparaisonEflore = new EvenementComparaisonEflore(autoCompletionNomTaxonsPresenteur.getValeur());
BusEvenementiel.getInstance().fireEvent(evenementComparaisonEflore);
}
 
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/composants/formulairerechercheeflore/FormulaireRechercheEfloreVue.java
New file
0,0 → 1,38
package org.tela_botanica.del.client.composants.formulairerechercheeflore;
 
import com.google.gwt.core.client.GWT;
import com.google.gwt.uibinder.client.UiBinder;
import com.google.gwt.uibinder.client.UiField;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.HasText;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.Panel;
import com.google.gwt.user.client.ui.Widget;
 
public class FormulaireRechercheEfloreVue extends Composite {
 
@UiField(provided = true)
public Button boutonValidationRechercheObservation = new Button();
 
@UiField
public Panel propositionTaxon;
 
interface FormulaireRechercheEfloreUIiBinder extends UiBinder<Widget, FormulaireRechercheEfloreVue> {
};
 
FormulaireRechercheEfloreUIiBinder uiBinder = GWT.create(FormulaireRechercheEfloreUIiBinder.class);
 
public FormulaireRechercheEfloreVue() {
initWidget(uiBinder.createAndBindUi(this));
}
 
public Button getBoutonValidationRechercheObservation() {
return boutonValidationRechercheObservation;
}
public Panel getPropositionTaxon() {
return propositionTaxon;
}
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/composants/observations/observationimages.css
New file
0,0 → 1,21
.zonePhotos {
}
 
.photoPrincipale {
height: 250px;
float: left;
cursor: pointer
}
 
.photos {
float: left
}
 
.photos img {
display: block;
height: 40px;
width: 40px;
padding: 0 5px 5px 5px;
cursor: pointer
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/composants/observations/ObservationImagesVue.ui.xml
New file
0,0 → 1,13
<ui:UiBinder xmlns:ui='urn:ui:com.google.gwt.uibinder'
xmlns:g='urn:import:com.google.gwt.user.client.ui' ui:generateFormat='com.google.gwt.i18n.rebind.format.PropertiesFormat'
ui:generateKeys="com.google.gwt.i18n.rebind.keygen.MD5KeyGenerator"
ui:generateLocales="default">
<ui:with field='res' type='org.tela_botanica.del.client.resources.Ressources' />
<ui:with field="constants" type="org.tela_botanica.del.client.i18n.Vocabulary" />
<ui:style src="observationimages.css" />
<g:HTMLPanel styleName="{style.zonePhotos}">
<g:Image ui:field="photoPrincipale" styleName="{style.photoPrincipale}"/>
<g:HTMLPanel ui:field="photos" styleName="{style.photos}"></g:HTMLPanel>
</g:HTMLPanel>
</ui:UiBinder>
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/composants/observations/ObservationImagesPresenteur.java
New file
0,0 → 1,151
package org.tela_botanica.del.client.composants.observations;
 
import java.util.List;
 
import org.tela_botanica.del.client.cache.CacheClient;
import org.tela_botanica.del.client.composants.fenetreoverlay.FenetreOverlayDefilantePresenteur;
import org.tela_botanica.del.client.composants.fenetreoverlay.FenetreOverlayDefilanteVue;
import org.tela_botanica.del.client.composants.images.DetailImagePresenteur;
import org.tela_botanica.del.client.composants.images.DetailImageVue;
import org.tela_botanica.del.client.composants.presenteur.Presenteur;
import org.tela_botanica.del.client.config.Config;
import org.tela_botanica.del.client.modeles.Image;
import org.tela_botanica.del.client.modeles.Observation;
import org.tela_botanica.del.client.navigation.evenement.BusEvenementiel;
import org.tela_botanica.del.client.navigation.evenement.changementimagevalidation.EvenementChangementImageValidation;
import org.tela_botanica.del.client.navigation.evenement.changementimagevalidation.GestionnaireEvenementChangementImageValidation;
import org.tela_botanica.del.client.navigation.evenement.validationobservation.EvenementValidation;
 
import com.google.gwt.core.client.GWT;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.event.dom.client.HasClickHandlers;
import com.google.gwt.event.shared.HandlerRegistration;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.ui.HTML;
import com.google.gwt.user.client.ui.HasWidgets;
import com.google.gwt.user.client.ui.IsWidget;
 
public class ObservationImagesPresenteur extends Presenteur {
 
public abstract interface Vue extends IsWidget {
public HasClickHandlers getPhotoPrincipale();
 
public HasWidgets getPhotos();
 
public void chargerImagePrincipale(org.tela_botanica.del.client.modeles.Image image);
 
public void ajouterPhoto(Image image, ClickHandler gestionnaireClic);
 
public void afficherLienPlateformeValidation();
 
public HTML getLienPlateforme();
public HandlerRegistration setImgPrincipaleClicGestionnaire(ClickHandler gestionnaireClic);
}
 
private Vue vue;
 
private Observation observation;
 
private Image imagePrincipale;
 
private List<Image> listeImages;
public ObservationImagesPresenteur(Vue vue, Observation observation, Image imagePrincipale) {
this.observation = observation;
this.vue = vue;
this.imagePrincipale = imagePrincipale;
}
 
public void chargerImagesObservation() {
listeImages = observation.getImages();
if (imagePrincipale != null) {
vue.chargerImagePrincipale(imagePrincipale);
vue.setImgPrincipaleClicGestionnaire(creerGestionnaireClicGalerieImages(0, imagePrincipale));
}
 
String urlCourante = Window.Location.getHref();
Config config = new Config();
String urlAppliObs = config.getUrl("identiplante");
int indexImage = 0;
for (Image imageCourante : listeImages) {
vue.ajouterPhoto(imageCourante, creerGestionnaireClicChangementImagePrincipale(indexImage, imageCourante));
indexImage++;
 
if (urlCourante.contains(urlAppliObs) && indexImage >= 5) {
vue.afficherLienPlateformeValidation();
break;
}
}
}
 
public void go(HasWidgets composite) {
composite.add(vue.asWidget());
chargerImagesObservation();
gererEvenements();
}
 
protected void gererEvenements() {
vue.getLienPlateforme().addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent arg0) {
BusEvenementiel.getInstance().fireEvent(new EvenementValidation(observation));
}
});
 
BusEvenementiel.getInstance().addHandler(EvenementChangementImageValidation.TYPE, new GestionnaireEvenementChangementImageValidation() {
@Override
public void onChangementImage(EvenementChangementImageValidation event) {
if (CacheClient.getInstance().getImageCourante().getObservation().getId().equals(observation.getId())) {
GWT.log("Reception event Chgmt img index :"+event.indexImage);
vue.chargerImagePrincipale(CacheClient.getInstance().getImageCourante());
vue.setImgPrincipaleClicGestionnaire(creerGestionnaireClicGalerieImages(event.indexImage, imagePrincipale));
}
}
});
}
 
protected ClickHandler creerGestionnaireClicGalerieImages(final int indexImage, final Image imageCourante) {
ClickHandler gestionnaireClic = new ClickHandler() {
public void onClick(ClickEvent event) {
FenetreOverlayDefilantePresenteur presenteurGalerie = new FenetreOverlayDefilantePresenteur(indexImage, new FenetreOverlayDefilanteVue()) {
 
@Override
public void surClicBoutonSuivant() {
int index = getIndexElementAffiche() + 1;
if (index >= listeImages.size()) {
index = 0;
}
setContenuFenetreModale(index, new DetailImagePresenteur(listeImages.get(index), new DetailImageVue()));
}
 
@Override
public void surClicBoutonPrecedent() {
int index = getIndexElementAffiche() - 1;
if (index < 0) {
index = listeImages.size() - 1;
}
setContenuFenetreModale(index, new DetailImagePresenteur(listeImages.get(index), new DetailImageVue()));
}
};
presenteurGalerie.ouvrirFenetreModaleDefilante(indexImage, new DetailImagePresenteur(listeImages.get(indexImage), new DetailImageVue()));
presenteurGalerie.afficherBoutonsSuivantsPrecedents((listeImages.size() > 1));
}
};
return gestionnaireClic;
}
 
protected ClickHandler creerGestionnaireClicChangementImagePrincipale(final int indexImage, final Image imageCourante) {
ClickHandler gestionnaireClic = new ClickHandler() {
public void onClick(ClickEvent event) {
CacheClient.getInstance().setImageCourante(imageCourante);
EvenementChangementImageValidation chgmtImgEvent = new EvenementChangementImageValidation();
chgmtImgEvent.indexImage = indexImage;
BusEvenementiel.getInstance().fireEvent(chgmtImgEvent);
}
};
return gestionnaireClic;
}
 
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/composants/observations/ObservationImagesVue.java
New file
0,0 → 1,101
package org.tela_botanica.del.client.composants.observations;
 
import com.google.gwt.core.client.GWT;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.event.shared.HandlerRegistration;
import com.google.gwt.uibinder.client.UiBinder;
import com.google.gwt.uibinder.client.UiField;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.HTML;
import com.google.gwt.user.client.ui.Image;
import com.google.gwt.user.client.ui.Panel;
import com.google.gwt.user.client.ui.Widget;
 
public class ObservationImagesVue extends Composite implements ObservationImagesPresenteur.Vue {
 
// Gestion d'UiBinder
interface Binder extends UiBinder<Widget, ObservationImagesVue> {
}
 
private static Binder binder = GWT.create(Binder.class);
 
@UiField
protected Image photoPrincipale;
 
@UiField
protected Panel photos;
protected HTML lienPlateforme = new HTML(">>>");
 
private HandlerRegistration imgPrincipaleClicGestionnaire;
 
public ObservationImagesVue() {
initWidget(binder.createAndBindUi(this));
}
 
public void chargerImagePrincipale(org.tela_botanica.del.client.modeles.Image image) {
setUrlImagePrincipale(image.getUrlFormat("CRS"));
setTitreImagePrincipale(image.getUrlFormat("L"));
setAltTextImagePrincipale(image.getObservation().getAuteur() + " - " + image.getObservation().getNomRetenu());
}
 
@Override
public void ajouterPhoto(org.tela_botanica.del.client.modeles.Image imageCourante, ClickHandler gestionnaireClic) {
Image photo = new Image();
photo.setUrl(imageCourante.getUrlFormat("CRX2S"));
photo.setTitle(imageCourante.getUrlFormat("L"));
photo.setAltText("");
photo.addClickHandler(gestionnaireClic);
getPhotos().add(photo);
}
public void afficherLienPlateformeValidation(){
getPhotos().add(lienPlateforme);
lienPlateforme.setStyleName("suiteImages");
}
 
public void setUrlImagePrincipale(String url) {
photoPrincipale.setUrl(url);
}
 
public void setTitreImagePrincipale(String titre) {
photoPrincipale.setTitle(titre);
}
 
public void setAltTextImagePrincipale(String altText) {
photoPrincipale.setAltText(altText);
}
 
public String getUrlImagePrincipale() {
return photoPrincipale.getUrl();
}
 
public String getTitreImagePrincipale() {
return photoPrincipale.getTitle();
}
 
public String getAltTextImagePrincipale() {
return photoPrincipale.getAltText();
}
 
public Image getPhotoPrincipale() {
return photoPrincipale;
}
 
public Panel getPhotos() {
return photos;
}
 
public HTML getLienPlateforme() {
return lienPlateforme;
}
public HandlerRegistration setImgPrincipaleClicGestionnaire(ClickHandler gestionnaireClic) {
if (imgPrincipaleClicGestionnaire != null) {
imgPrincipaleClicGestionnaire.removeHandler();
}
imgPrincipaleClicGestionnaire = photoPrincipale.addClickHandler(gestionnaireClic);
return imgPrincipaleClicGestionnaire;
}
 
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/composants/motsclesimages/MotsClesImageVue.ui.xml
New file
0,0 → 1,31
<ui:UiBinder xmlns:ui='urn:ui:com.google.gwt.uibinder' xmlns:g='urn:import:com.google.gwt.user.client.ui'>
<ui:with field='res' type='org.tela_botanica.del.client.resources.Ressources' />
<ui:with field="constants" type="org.tela_botanica.del.client.i18n.Vocabulary" />
 
<ui:style src="MotsClesImage.css" />
<g:HTMLPanel styleName="{style.fenetreMotsCles}">
<g:Label text="Saisir des mots clés" styleName="titre"/>
<g:Image ui:field="image" styleName="gauche" />
<g:HTMLPanel styleName="gauche {style.colonneDroite}">
<g:HTML styleName="{style.titrePanneau}" text="{constants.motsCles}"></g:HTML>
<g:HTMLPanel ui:field="zoneIconesMotsCles" styleName="{style.zoneIconesMotsCles}">
</g:HTMLPanel>
<g:HTMLPanel styleName="nettoyage">
<g:HTMLPanel styleName="{style.panneauSaisieMotsCles}" ui:field="saisieMotsCles"></g:HTMLPanel>
</g:HTMLPanel>
<g:HTMLPanel styleName="{style.listeMotsClesExistants}">
<g:HTMLPanel>
<g:HTMLPanel styleName="gwt-HTML" ui:field="motsClesCel"></g:HTMLPanel>
</g:HTMLPanel>
<g:HTMLPanel>
<g:HTMLPanel styleName="gwt-HTML" ui:field="motsCles"></g:HTMLPanel>
</g:HTMLPanel>
</g:HTMLPanel>
<g:Button ui:field="validerMotsCles">Valider l'ajout des mots clés et fermer la fenetre</g:Button>
</g:HTMLPanel>
<g:HTMLPanel styleName="nettoyage"></g:HTMLPanel>
</g:HTMLPanel>
</ui:UiBinder>
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/composants/motsclesimages/propositions/MotCleProposition.css
New file
0,0 → 1,21
.logoTag {
width:30px;
height:30px;
margin:0 5px;
float:right;
}
 
.motCle {
width:80px;
margin:5px;
cursor:pointer;
}
 
.lienMotCle {
background: none repeat scroll 0 0 #DDDDDD;
border-radius: 9px 9px 9px 9px;
height: 40px;
margin: 2px;
padding: 3px;
width: 160px;
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/composants/motsclesimages/propositions/MotClePropositionVue.ui.xml
New file
0,0 → 1,14
<ui:UiBinder xmlns:ui='urn:ui:com.google.gwt.uibinder'
xmlns:g='urn:import:com.google.gwt.user.client.ui'
ui:generateFormat='com.google.gwt.i18n.rebind.format.PropertiesFormat'
ui:generateLocales="default">
<ui:with field="constants" type="org.tela_botanica.del.client.i18n.Vocabulary" />
 
<ui:style src="MotCleProposition.css" />
<g:FocusPanel styleName="{style.lienMotCle} gauche motclesPicto" ui:field="lienMotCle" title="{constants.aideLiaisonMotCle}">
<g:HTMLPanel>
<g:CheckBox ui:field="ajouterMotCle" text="motcle" styleName=" {style.motCle} texteMotClePicto"></g:CheckBox>
<g:Image styleName="{style.logoTag}" ui:field="iconeTag"/>
</g:HTMLPanel>
</g:FocusPanel>
</ui:UiBinder>
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/composants/motsclesimages/propositions/MotClePropositionPresenteur.java
New file
0,0 → 1,81
package org.tela_botanica.del.client.composants.motsclesimages.propositions;
 
import org.tela_botanica.del.client.composants.presenteur.Presenteur;
 
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.event.dom.client.HasClickHandlers;
import com.google.gwt.user.client.ui.HasWidgets;
import com.google.gwt.user.client.ui.IsWidget;
 
public class MotClePropositionPresenteur extends Presenteur{
 
public interface Vue extends IsWidget {
public void setMotCle(String motcle);
public HasClickHandlers getLienMotCle();
public void toggleCb();
public boolean estAAjouter();
public void setEstAAjouter();
public HasClickHandlers getAjouterMotCle();
}
private Vue vue;
private String motcle;
public MotClePropositionPresenteur(Vue vue, String motCle) {
this.vue = vue;
this.motcle = motCle;
vue.setMotCle(motCle);
}
@Override
public void go(HasWidgets composite) {
composite.add(vue.asWidget());
gererEvenements();
}
 
@Override
protected void gererEvenements() {
/* Attention : dans la gestion des évènements, comme la case à cocher est contenu dans
* le lien Mot Cle, lorsque je clique sur la case directement, l'application :
* - change la valeur de la case suite à l'évènement sur la case
* - rechange la valeur de la case suite à l'évènement sur le lien
* Il est donc impossible de changer la valeur de la case !
*
* La solution consiste à ajouter un changement de valeur lorsqu'on clique sur la case :
*/
vue.getAjouterMotCle().addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
vue.toggleCb();
event.stopPropagation();
}
});
// Ajout du changement de valeur de la case lors du clic sur la case
vue.getLienMotCle().addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
vue.toggleCb();
event.stopPropagation();
}
});
}
 
public boolean estAAjouter() {
return vue.estAAjouter();
}
public void setEstAAjouter() {
vue.setEstAAjouter();
}
public String getTag() {
return this.motcle;
}
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/composants/motsclesimages/propositions/MotClePropositionVue.java
New file
0,0 → 1,68
package org.tela_botanica.del.client.composants.motsclesimages.propositions;
 
import org.tela_botanica.del.client.config.Config;
 
import com.google.gwt.core.client.GWT;
import com.google.gwt.event.dom.client.HasClickHandlers;
import com.google.gwt.uibinder.client.UiBinder;
import com.google.gwt.uibinder.client.UiField;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.ui.CheckBox;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.FocusPanel;
import com.google.gwt.user.client.ui.Image;
import com.google.gwt.user.client.ui.Panel;
import com.google.gwt.user.client.ui.Widget;
 
public class MotClePropositionVue extends Composite implements MotClePropositionPresenteur.Vue {
@UiField
CheckBox ajouterMotCle;
@UiField
Image iconeTag;
@UiField
FocusPanel lienMotCle;
interface MyUiBinder extends UiBinder<Widget, MotClePropositionVue> {}
private static MyUiBinder uiBinder = GWT.create(MyUiBinder.class);
 
public MotClePropositionVue() {
// sets listBox
initWidget(uiBinder.createAndBindUi(this));
}
 
@Override
public void setMotCle(String motcle) {
ajouterMotCle.setText(motcle);
iconeTag.setUrl((new Config()).getUrl("iconeBaseUrl") + motcle + ".png");
}
public HasClickHandlers getLienMotCle() {
return lienMotCle;
}
public void toggleCb() {
boolean val = ajouterMotCle.getValue();
ajouterMotCle.setValue(!ajouterMotCle.getValue());
if(ajouterMotCle.getValue()) {
addStyleName("motClePictoCoche");
} else {
removeStyleName("motClePictoCoche");
}
}
public boolean estAAjouter() {
return ajouterMotCle.getValue();
}
public void setEstAAjouter() {
ajouterMotCle.setValue(true);
addStyleName("motClePictoCoche");
}
public HasClickHandlers getAjouterMotCle() {
return ajouterMotCle;
}
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/composants/motsclesimages/MotsClesImagePresenteur.java
New file
0,0 → 1,255
package org.tela_botanica.del.client.composants.motsclesimages;
 
import java.util.ArrayList;
import java.util.List;
 
import org.tela_botanica.del.client.cache.CacheClient;
import org.tela_botanica.del.client.composants.motsclesimages.formulairesaisiemotclesimages.FormulaireSaisieMotsClesImagePresenteur;
import org.tela_botanica.del.client.composants.motsclesimages.motcle.MotClePresenteur;
import org.tela_botanica.del.client.composants.motsclesimages.motcle.MotCleVue;
import org.tela_botanica.del.client.composants.motsclesimages.propositions.MotClePropositionPresenteur;
import org.tela_botanica.del.client.composants.motsclesimages.propositions.MotClePropositionVue;
import org.tela_botanica.del.client.composants.presenteur.Presenteur;
import org.tela_botanica.del.client.i18n.I18n;
import org.tela_botanica.del.client.modeles.Image;
import org.tela_botanica.del.client.modeles.MotCle;
import org.tela_botanica.del.client.navigation.evenement.BusEvenementiel;
import org.tela_botanica.del.client.navigation.evenement.ajoutmotcleimage.EvenementAjoutMotCleImage;
import org.tela_botanica.del.client.navigation.evenement.ajoutmotcleimage.GestionnaireEvenementAjoutMotCleImage;
import org.tela_botanica.del.client.navigation.evenement.fermermotcleimage.EvenementFermerMotCleImage;
import org.tela_botanica.del.client.navigation.evenement.supressionmotcleimage.EvenementSuppressionMotCleImage;
import org.tela_botanica.del.client.navigation.evenement.supressionmotcleimage.GestionnaireEvenementSuppressionMotCleImage;
import org.tela_botanica.del.client.services.rest.MotsClesService;
import org.tela_botanica.del.client.services.rest.MotsClesServiceConcret;
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;
import org.tela_botanica.del.client.utils.StringUtils;
 
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.event.dom.client.HasClickHandlers;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.ui.HasWidgets;
import com.google.gwt.user.client.ui.IsWidget;
 
public class MotsClesImagePresenteur extends Presenteur {
 
Image image;
List<MotCle> motsCles;
List<String> motClesProtocoleAFiltrer = new ArrayList<String>();
FormulaireSaisieMotsClesImagePresenteur formulaireSaisieMotsClesPresenteur;
final List<MotClePropositionPresenteur> presenteursMotsCles = new ArrayList<MotClePropositionPresenteur>();
MotsClesService motsClesService;
int nbRetours = 0;
int retourCourant = 0;
int nb = 0;
//Déclaration de la vue
public interface Vue extends IsWidget {
public HasWidgets getZoneMotsCles();
 
HasWidgets getZoneSaisieMotsCles();
 
void viderZoneMotsCles();
 
HasWidgets getZoneMotsClesCel();
 
public void afficherMotsClesProtocole(List<String> motsClesCelImages, List<String> motClesCelAFiltrer);
 
public void setImage(String url);
 
public HasWidgets getZoneIconesMotsCles();
 
public HasClickHandlers getValiderMotCles();
}
 
private Vue vue;
 
// Constructeur de l'application
public MotsClesImagePresenteur(Image image, MotsClesService motsClesService, FormulaireSaisieMotsClesImagePresenteur formulaireSaisieMotsClesPresenteur, Vue vue) {
this.formulaireSaisieMotsClesPresenteur = formulaireSaisieMotsClesPresenteur;
this.vue = vue;
this.motsClesService = motsClesService;
this.image = image;
vue.setImage(image.getUrl());
initialiserMotsClesProtocoleAFiltrer();
afficherMotsClesProtocole();
gererEvenements();
}
 
//Afficher la vue
public void go(HasWidgets composite) {
formulaireSaisieMotsClesPresenteur.go(vue.getZoneSaisieMotsCles());
composite.add(vue.asWidget());
}
 
protected boolean cocherMotClePropositionPresenteur(String motcle) {
boolean motCleCoche = false;
for (MotClePropositionPresenteur presenteurCourant : presenteursMotsCles) {
String tagCourant = presenteurCourant.getTag();
if (tagCourant.equals(motcle)) {
presenteurCourant.setEstAAjouter();
motCleCoche = true;
}
}
return motCleCoche;
}
//Charger les mots clés à l'aide du service
public void chargerMotsCles() {
if (motsCles == null) {
vue.viderZoneMotsCles();
MotsClesService motsClesService = new MotsClesServiceConcret();
motsClesService.getMotsClesImage(image.getIdImage(),
new ListeMotsClesImageCallBack() {
@Override
public void surRetour(List<MotCle> objetRetour) {
motsCles = objetRetour;
afficherMotsCles(objetRetour);
}
});
}
}
 
 
protected void afficherMotsCles(List<MotCle> listeMotsCles) {
this.motsCles = listeMotsCles;
nbRetours = listeMotsCles.size();
Object[] tabMotsCles = motsCles.toArray();
for (int i = 0; i < motsCles.toArray().length; i++) {
MotCle motCleEnCours = (MotCle) tabMotsCles[i];
if (!cocherMotClePropositionPresenteur(motCleEnCours.getMotCle())) {
MotClePresenteur mcP = new MotClePresenteur(new MotCleVue(motCleEnCours.getMotCle()), motCleEnCours.getMotCle(), motCleEnCours.getIdMotCle()) {
public void surSuppression(String idMotCle) {
if (Window.confirm(I18n.getVocabulary().indiceSupprimerMotCle() + " ?")) {
motsClesService.supprimerMotCleImage(idMotCle, new SuppressionMotCleImageCallback() {
@Override
public void surRetour(String objetRetour) {
motsCles = null;
chargerMotsCles();
}
});
}
};
};
mcP.go(vue.getZoneMotsCles());
}
}
}
 
protected void afficherMotsClesProtocole() {
List<String> motsClesCelImages = image.getMotsClefs();
vue.afficherMotsClesProtocole(motsClesCelImages, motClesProtocoleAFiltrer);
}
 
// Mettre le focus sur le champ de saisie, appelé par le module pictoflora
public void focuserChampsSaisie() {
formulaireSaisieMotsClesPresenteur.focuserChampSaisie();
}
 
protected void initialiserMotsClesProtocoleAFiltrer() {
//TODO voir si le cache client est bien approprié plutot que passer les infos
// de protocole dans le constructeur
String chaineMotsClesCelAFiltrer = CacheClient.getInstance().getProtocoleCourant().getMotsClesProtocole();
this.motClesProtocoleAFiltrer = new ArrayList<String>();
String[] tabMotsClesCelAFiltrer = chaineMotsClesCelAFiltrer.split(",");
if(tabMotsClesCelAFiltrer.length > 0 && !tabMotsClesCelAFiltrer[0].trim().isEmpty()) {
for (int i = 0; i < tabMotsClesCelAFiltrer.length; i++) {
String motCle = StringUtils.normaliser(tabMotsClesCelAFiltrer[i]);
this.motClesProtocoleAFiltrer.add(motCle);
// ajouter à la vue
MotClePropositionPresenteur presenteurMotCle = new MotClePropositionPresenteur(new MotClePropositionVue(), motCle);
presenteurMotCle.go(vue.getZoneIconesMotsCles());
presenteursMotsCles.add(presenteurMotCle);
}
}
}
/***
* trouver le mot cle dans les mots clés d'origine
* @param String motcle le mot à chercher
* @return MotCle l'objet trouvé
**/
protected MotCle trouverMotCleDorigine(String motCle) {
MotCle motCleRetour = null;
for (MotCle motCleCourant : motsCles) {
String tagCourant = motCleCourant.getMotCle();
if (tagCourant.equals(motCle)) {
motCleRetour = motCleCourant;
}
}
return motCleRetour;
}
//Gérer les évènements
protected void gererEvenements() {
BusEvenementiel.getInstance().addHandler(EvenementAjoutMotCleImage.TYPE, new GestionnaireEvenementAjoutMotCleImage() {
@Override
public void onAjoutMotCleImage(EvenementAjoutMotCleImage event) {
if (image != null && image.getIdImage() != null && image.getIdImage().equals(event.getIdImage())) {
motsCles = null;
chargerMotsCles();
formulaireSaisieMotsClesPresenteur.viderChampSaisie();
}
}
});
 
BusEvenementiel.getInstance().addHandler(EvenementSuppressionMotCleImage.TYPE, new GestionnaireEvenementSuppressionMotCleImage() {
@Override
public void onSuppressionMotCleImage(
EvenementSuppressionMotCleImage event) {
if (image != null && image.getIdImage() != null && image.getIdImage().equals(event.getIdImage())) {
motsCles = null;
chargerMotsCles();
}
}
});
vue.getValiderMotCles().addClickHandler(new ClickHandler() {
 
@Override
public void onClick(ClickEvent event) {
 
MotsClesService motsClesService = new MotsClesServiceConcret();
// récupérer les valeur de toutes les cases à cocher
for (MotClePropositionPresenteur presenteur : presenteursMotsCles) {
if (presenteur.estAAjouter()) {
String tag = presenteur.getTag();
MotCle motcle = trouverMotCleDorigine(tag);
if (motcle == null) {
motsClesService.ajouterMotCleImage(image.getIdImage(), tag, new AjoutMotsClesImageCallback() {
@Override
public void surRetour(Void objetRetour) {
}
});
}
} else {
// il faut vérifier que le mot clé est à supprimer
String tag = presenteur.getTag();
MotCle motcle = trouverMotCleDorigine(tag);
if (motcle != null) {
motsClesService.supprimerMotCleImage(motcle.getIdMotCle(), new SuppressionMotCleImageCallback() {
@Override
public void surRetour(String objetRetour) {
}
});
}
}
}
if (nb == 0) {
BusEvenementiel.getInstance().fireEvent(new EvenementFermerMotCleImage(image.getIdImage()));
nb++;
}
 
}
});
}
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/composants/motsclesimages/MotsClesImageVue.java
New file
0,0 → 1,91
package org.tela_botanica.del.client.composants.motsclesimages;
 
import java.util.Iterator;
import java.util.List;
 
import org.tela_botanica.del.client.utils.StringUtils;
 
import com.google.gwt.core.client.GWT;
import com.google.gwt.event.dom.client.HasClickHandlers;
import com.google.gwt.uibinder.client.UiBinder;
import com.google.gwt.uibinder.client.UiField;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.HTML;
import com.google.gwt.user.client.ui.HasWidgets;
import com.google.gwt.user.client.ui.Image;
import com.google.gwt.user.client.ui.InlineHTML;
import com.google.gwt.user.client.ui.Panel;
import com.google.gwt.user.client.ui.Widget;
 
public class MotsClesImageVue extends Composite implements MotsClesImagePresenteur.Vue {
@UiField
Panel motsCles, motsClesCel, saisieMotsCles, zoneIconesMotsCles;
 
@UiField
Image image;
@UiField
Button validerMotsCles;
interface MyUiBinder extends UiBinder<Widget, MotsClesImageVue> {
}
 
private static MyUiBinder uiBinder = GWT.create(MyUiBinder.class);
 
public MotsClesImageVue() {
// sets listBox
initWidget(uiBinder.createAndBindUi(this));
}
@Override
public void viderZoneMotsCles() {
motsCles.clear();
}
 
@Override
public HasWidgets getZoneMotsCles() {
return motsCles;
}
@Override
public HasWidgets getZoneMotsClesCel() {
return motsClesCel;
}
@Override
public HasWidgets getZoneSaisieMotsCles() {
return saisieMotsCles;
}
 
@Override
public void afficherMotsClesProtocole(List<String> motsClesCelImages, List<String> motsClesCelAFiltrer) {
for (Iterator<String> iterator = motsClesCelImages.iterator(); iterator
.hasNext();) {
String mot = (String) iterator.next();
String motNormalise = StringUtils.normaliser(mot);
if(!mot.trim().isEmpty() && motsClesCelAFiltrer.contains(StringUtils.normaliser(motNormalise))) {
HTML motCle = new InlineHTML(mot);
motCle.setStyleName("motCleCel");
motsClesCel.add(motCle);
}
}
}
 
@Override
public void setImage(String url) {
image.setUrl(url);
}
@Override
public HasWidgets getZoneIconesMotsCles() {
return zoneIconesMotsCles;
}
public HasClickHandlers getValiderMotCles() {
return validerMotsCles;
}
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/composants/motsclesimages/formulairesaisiemotclesimages/FormulaireMotsClesImage.css
New file
0,0 → 1,16
.espece {
font-size: 12px;
font-weight: bold;
color: white;
padding-left: 5px;
padding-right: 1px;
}
 
.aideSaisie p {
padding: 0px;
margin: 0px;
overflow: hidden;
text-overflow: ellipsis;
white-space: pre;
min-height: 13px;
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/composants/motsclesimages/formulairesaisiemotclesimages/FormulaireSaisieMotsClesImageVue.ui.xml
New file
0,0 → 1,15
<ui:UiBinder xmlns:ui='urn:ui:com.google.gwt.uibinder'
xmlns:g='urn:import:com.google.gwt.user.client.ui'
ui:generateFormat='com.google.gwt.i18n.rebind.format.PropertiesFormat'
ui:generateKeys="com.google.gwt.i18n.rebind.keygen.MD5KeyGenerator"
ui:generateLocales="default">
<ui:with field='res' type='org.tela_botanica.del.client.resources.Ressources' />
<ui:with field="constants" type="org.tela_botanica.del.client.i18n.Vocabulary" />
 
<ui:style src="FormulaireMotsClesImage.css" />
<g:HTMLPanel>
<g:HTML styleName="petit {style.aideSaisie}" text="{constants.aideSaisieMotCle}"></g:HTML>
<g:TextBox ui:field="saisieMotsCles"></g:TextBox>
<g:Button text="{constants.ok}" ui:field="valider"></g:Button>
</g:HTMLPanel>
</ui:UiBinder>
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/composants/motsclesimages/formulairesaisiemotclesimages/FormulaireSaisieMotsClesImagePresenteur.java
New file
0,0 → 1,81
package org.tela_botanica.del.client.composants.motsclesimages.formulairesaisiemotclesimages;
 
import org.tela_botanica.del.client.navigation.evenement.BusEvenementiel;
import org.tela_botanica.del.client.navigation.evenement.ajoutmotcleimage.EvenementAjoutMotCleImage;
import org.tela_botanica.del.client.services.rest.MotsClesService;
import org.tela_botanica.del.client.services.rest.async.AjoutMotsClesImageCallback;
 
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.event.dom.client.HasClickHandlers;
import com.google.gwt.event.dom.client.HasKeyPressHandlers;
import com.google.gwt.event.dom.client.KeyCodes;
import com.google.gwt.event.dom.client.KeyPressEvent;
import com.google.gwt.event.dom.client.KeyPressHandler;
import com.google.gwt.user.client.ui.HasText;
import com.google.gwt.user.client.ui.HasWidgets;
import com.google.gwt.user.client.ui.IsWidget;
 
public class FormulaireSaisieMotsClesImagePresenteur {
private MotsClesService motsClesService;
private String idImage;
 
public interface Vue extends IsWidget {
public HasClickHandlers getBoutonValider();
public HasText getSaisieMotsCles();
public HasKeyPressHandlers getSaisieMotsClesHasKeyPressHandlers();
public void focuserChampSaisie();
}
 
private Vue vue;
public FormulaireSaisieMotsClesImagePresenteur(String idImage, MotsClesService motsClesService, Vue vue) {
this.vue = vue;
this.motsClesService = motsClesService;
this.idImage = idImage;
gererEvenements();
}
public void go(HasWidgets composite) {
composite.add(vue.asWidget());
}
private void gererEvenements() {
vue.getBoutonValider().addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
validerSaisie();
}
});
vue.getSaisieMotsClesHasKeyPressHandlers().addKeyPressHandler(new KeyPressHandler() {
public void onKeyPress(KeyPressEvent event) {
if (event.getNativeEvent().getKeyCode() == KeyCodes.KEY_ENTER) {
validerSaisie();
}
}
});
}
private void validerSaisie() {
String texte = vue.getSaisieMotsCles().getText();
if(texte != null && !texte.isEmpty()) {
motsClesService.ajouterMotCleImage(idImage, vue.getSaisieMotsCles().getText(), new AjoutMotsClesImageCallback() {
@Override
public void surRetour(Void objetRetour) {
EvenementAjoutMotCleImage event = new EvenementAjoutMotCleImage(idImage);
BusEvenementiel.getInstance().fireEvent(event);
}
});
}
}
 
public void viderChampSaisie() {
vue.getSaisieMotsCles().setText("");
}
 
public void focuserChampSaisie() {
vue.focuserChampSaisie();
}
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/composants/motsclesimages/formulairesaisiemotclesimages/FormulaireSaisieMotsClesImageVue.java
New file
0,0 → 1,52
package org.tela_botanica.del.client.composants.motsclesimages.formulairesaisiemotclesimages;
 
import com.google.gwt.core.client.GWT;
import com.google.gwt.event.dom.client.HasClickHandlers;
import com.google.gwt.event.dom.client.HasKeyPressHandlers;
import com.google.gwt.uibinder.client.UiBinder;
import com.google.gwt.uibinder.client.UiField;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.HasText;
import com.google.gwt.user.client.ui.TextBox;
import com.google.gwt.user.client.ui.Widget;
 
public class FormulaireSaisieMotsClesImageVue extends Composite implements FormulaireSaisieMotsClesImagePresenteur.Vue {
@UiField
public TextBox saisieMotsCles;
@UiField
public Button valider;
 
interface MyUiBinder extends UiBinder<Widget, FormulaireSaisieMotsClesImageVue> {
}
 
private static MyUiBinder uiBinder = GWT.create(MyUiBinder.class);
 
public FormulaireSaisieMotsClesImageVue() {
// sets listBox
initWidget(uiBinder.createAndBindUi(this));
}
 
@Override
public HasClickHandlers getBoutonValider() {
return valider;
}
@Override
public HasText getSaisieMotsCles() {
return saisieMotsCles;
}
@Override
public HasKeyPressHandlers getSaisieMotsClesHasKeyPressHandlers() {
return saisieMotsCles;
}
 
@Override
public void focuserChampSaisie() {
saisieMotsCles.setFocus(true);
}
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/composants/motsclesimages/MotsClesImage.css
New file
0,0 → 1,43
.titrePanneau p {
padding: 0px;
margin: 0px;
overflow: hidden;
text-overflow: ellipsis;
white-space: pre;
min-height: 13px;
}
 
.titrePanneau {
font-size: 12px;
font-weight: bold;
color: white;
padding-left: 5px;
padding-right: 1px;
}
 
.panneauSaisieMotsCles {
margin-bottom: 3px;
padding-top:30px;
}
 
.fenetreMotsCles {
z-index:1500;
padding: 5px 10px 10px 30px;
width:860px;
background:white;
margin:0 auto;
margin-top:75px;
}
 
.colonneDroite {
margin-left: 14px;
}
 
.zoneIconesMotsCles {
padding:5px;
width:535px;
}
 
.listeMotsClesExistants {
max-width:350px;
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/composants/motsclesimages/motcle/MotCleVue.java
New file
0,0 → 1,69
package org.tela_botanica.del.client.composants.motsclesimages.motcle;
 
import org.tela_botanica.del.client.i18n.I18n;
 
import com.google.gwt.core.client.GWT;
import com.google.gwt.event.dom.client.HasBlurHandlers;
import com.google.gwt.event.dom.client.HasClickHandlers;
import com.google.gwt.event.dom.client.HasFocusHandlers;
import com.google.gwt.event.dom.client.HasMouseOutHandlers;
import com.google.gwt.event.dom.client.HasMouseOverHandlers;
import com.google.gwt.uibinder.client.UiBinder;
import com.google.gwt.uibinder.client.UiField;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.FocusPanel;
import com.google.gwt.user.client.ui.HTML;
import com.google.gwt.user.client.ui.HTMLPanel;
import com.google.gwt.user.client.ui.HasWidgets;
import com.google.gwt.user.client.ui.InlineHTML;
import com.google.gwt.user.client.ui.Panel;
import com.google.gwt.user.client.ui.Widget;
 
public class MotCleVue extends Composite implements MotClePresenteur.Vue {
@UiField
public InlineHTML motCle;
@UiField
public FocusPanel suppressionMotCle;
@UiField
public FocusPanel conteneurMotCle;
 
interface MyUiBinder extends UiBinder<Widget, MotCleVue> {
}
 
private static MyUiBinder uiBinder = GWT.create(MyUiBinder.class);
 
public MotCleVue(String mot) {
initWidget(uiBinder.createAndBindUi(this));
motCle.setText(mot);
suppressionMotCle.setTitle(I18n.getVocabulary().indiceSupprimerMotCle());
}
@Override
public HasClickHandlers getZoneSuppressionMotCle() {
return suppressionMotCle;
}
 
@Override
public void afficherZoneSuppression() {
suppressionMotCle.removeStyleName("invisible");
}
 
@Override
public void cacherZoneSuppression() {
suppressionMotCle.addStyleName("invisible");
}
 
@Override
public HasMouseOverHandlers getZoneMotCleMouseHover() {
return conteneurMotCle;
}
 
@Override
public HasMouseOutHandlers getZoneMotCleMouseOut() {
return conteneurMotCle;
}
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/composants/motsclesimages/motcle/MotCle.css
New file
0,0 → 1,31
.conteneurMotCle {
display: inline-block;
margin-right: 3px;
}
 
.motCle {
border: 1px solid grey;
background-color: #DDD;
padding: 2px;
line-height: 25px;
border-radius:5px;
}
 
.suppressionMotCle {
display: inline;
border: 1px solid grey;
border-left: none;
background-color: #555;
padding: 2px;
padding-left: 4px;
margin-left: -3px;
line-height: 25px;
cursor: pointer;
color: red;
border-top-right-radius: 5px;
border-bottom-right-radius: 5px;
}
 
.suppressionMotCle:hover {
background-color: #888;
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/composants/motsclesimages/motcle/MotCleVue.ui.xml
New file
0,0 → 1,11
<ui:UiBinder xmlns:ui='urn:ui:com.google.gwt.uibinder'
xmlns:g='urn:import:com.google.gwt.user.client.ui'
ui:generateFormat='com.google.gwt.i18n.rebind.format.PropertiesFormat'
ui:generateKeys="com.google.gwt.i18n.rebind.keygen.MD5KeyGenerator"
ui:generateLocales="default">
<ui:with field='res' type='org.tela_botanica.del.client.resources.Ressources' />
<ui:with field="constants" type="org.tela_botanica.del.client.i18n.Vocabulary" />
 
<ui:style src="MotCle.css" />
<g:FocusPanel styleName="{style.conteneurMotCle}" ui:field="conteneurMotCle"><g:HTMLPanel><g:InlineHTML styleName="{style.motCle}" ui:field="motCle" /><g:FocusPanel styleName="invisible {style.suppressionMotCle}" ui:field="suppressionMotCle" ><g:InlineHTML>X</g:InlineHTML></g:FocusPanel></g:HTMLPanel></g:FocusPanel>
</ui:UiBinder>
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/composants/motsclesimages/motcle/MotClePresenteur.java
New file
0,0 → 1,71
package org.tela_botanica.del.client.composants.motsclesimages.motcle;
 
import com.google.gwt.event.dom.client.BlurEvent;
import com.google.gwt.event.dom.client.BlurHandler;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.event.dom.client.FocusEvent;
import com.google.gwt.event.dom.client.FocusHandler;
import com.google.gwt.event.dom.client.HasBlurHandlers;
import com.google.gwt.event.dom.client.HasClickHandlers;
import com.google.gwt.event.dom.client.HasFocusHandlers;
import com.google.gwt.event.dom.client.HasMouseOutHandlers;
import com.google.gwt.event.dom.client.HasMouseOverHandlers;
import com.google.gwt.event.dom.client.MouseOutEvent;
import com.google.gwt.event.dom.client.MouseOutHandler;
import com.google.gwt.event.dom.client.MouseOverEvent;
import com.google.gwt.event.dom.client.MouseOverHandler;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.ui.HasWidgets;
import com.google.gwt.user.client.ui.IsWidget;
 
public abstract class MotClePresenteur {
String motCle;
String idMotCle;
public interface Vue extends IsWidget {
HasClickHandlers getZoneSuppressionMotCle();
void afficherZoneSuppression();
void cacherZoneSuppression();
HasMouseOverHandlers getZoneMotCleMouseHover();
HasMouseOutHandlers getZoneMotCleMouseOut();
}
 
private Vue vue;
public MotClePresenteur(Vue vue, String motCleText, String motCleId) {
this.vue = vue;
this.idMotCle = motCleId;
}
public void go(HasWidgets composite) {
composite.add(vue.asWidget());
gererEvenements();
}
public void gererEvenements() {
vue.getZoneSuppressionMotCle().addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
surSuppression(idMotCle);
}
});
vue.getZoneMotCleMouseHover().addMouseOverHandler(new MouseOverHandler() {
@Override
public void onMouseOver(MouseOverEvent event) {
vue.afficherZoneSuppression();
}
});
vue.getZoneMotCleMouseOut().addMouseOutHandler(new MouseOutHandler() {
@Override
public void onMouseOut(MouseOutEvent event) {
vue.cacherZoneSuppression();
}
});
}
 
public abstract void surSuppression(String idMotCle);
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/composants/moteurrecherche/MoteurRechercheVue.ui.xml
New file
0,0 → 1,105
<ui:UiBinder xmlns:ui='urn:ui:com.google.gwt.uibinder'
xmlns:g='urn:import:com.google.gwt.user.client.ui'
ui:generateFormat='com.google.gwt.i18n.rebind.format.PropertiesFormat'
ui:generateKeys="com.google.gwt.i18n.rebind.keygen.MD5KeyGenerator"
ui:generateLocales="default">
<ui:with field='res' type='org.tela_botanica.del.client.resources.Ressources' />
<ui:with field="constants" type="org.tela_botanica.del.client.i18n.Vocabulary" />
 
<ui:style src="MoteurRecherche.css" />
<g:HTMLPanel styleName="limiteMin {style.zoneRecherche}">
<g:TextBox styleName="{style.recherchePrincipale} arrondi" ui:field="recherchePrincipale" text="{constants.rechercherObservation}"></g:TextBox>
<g:Button styleName="{style.boutonRecherche} arrondi" ui:field="boutonRecherche" text="{constants.rechercher}">
</g:Button>
<g:Label styleName="{style.lienRechercheAvancee}" ui:field="lienRechercheAvancee" text="{constants.rechercheAvancee}"></g:Label>
<g:HTMLPanel styleName="{style.rechercheAvancee} ombre-forte" ui:field="rechercheAvancee">
<g:Button ui:field="boutonFermer" styleName="{style.boutonFermer}" text="Fermer"></g:Button>
<g:Button ui:field="boutonVider" styleName="{style.boutonVider}" text="Vider"></g:Button>
 
<g:HTMLPanel styleName="{style.conteneurDeuxPanneaux}">
<g:HTMLPanel styleName="{style.panneauGauche}">
<g:HTMLPanel styleName="{style.champRecherche}">
<g:Label text="{constants.contientMots}" styleName="petit"/>
<g:TextBox ui:field="contientMots" />
</g:HTMLPanel>
<g:HTMLPanel styleName="{style.champRecherche}">
<g:Label text="{constants.referentiel}" styleName="petit"/>
<g:ListBox ui:field="referentiel" />
</g:HTMLPanel>
<g:HTMLPanel styleName="{style.champRecherche}">
<g:Label text="{constants.famille}" styleName="petit"/>
<g:TextBox ui:field="famille" />
</g:HTMLPanel>
<g:HTMLPanel styleName="{style.champRecherche}">
<g:Label text="{constants.genre}" styleName="petit"/>
<g:TextBox ui:field="genre" />
</g:HTMLPanel>
<g:HTMLPanel styleName="{style.champRecherche}">
<g:Label text="{constants.taxon}" styleName="petit"/>
<g:HTMLPanel ui:field="taxon" />
</g:HTMLPanel>
<g:HTMLPanel styleName="{style.champRecherche}">
<g:Label text="{constants.date} {constants.formatDate}" styleName="petit"/>
<g:TextBox ui:field="date" />
</g:HTMLPanel>
</g:HTMLPanel>
<g:HTMLPanel styleName="{style.panneauDroite}">
<g:HTMLPanel styleName="{style.champRecherche}">
<g:Label text="{constants.pays}" styleName="petit"/>
<g:ListBox ui:field="pays" />
</g:HTMLPanel>
<g:HTMLPanel styleName="{style.champRecherche}">
<g:Label text="{constants.departement}" styleName="petit"/>
<g:TextBox ui:field="departement" />
</g:HTMLPanel>
<g:HTMLPanel styleName="{style.champRecherche}">
<g:Label text="{constants.commune}" styleName="petit"/>
<g:HTMLPanel ui:field="commune" />
</g:HTMLPanel>
<g:HTMLPanel styleName="{style.champRecherche}">
<g:Label text="{constants.auteur}" styleName="petit"/>
<g:TextBox ui:field="auteur" />
</g:HTMLPanel>
<g:HTMLPanel ui:field="conteneurMotCle" styleName="{style.champRecherche}">
<g:Label text="{constants.tag}" styleName="petit"/>
<g:TextBox ui:field="motCle" />
</g:HTMLPanel>
<g:HTMLPanel ui:field="conteneurMotCleCel" styleName="{style.champRecherche}">
<g:Label text="{constants.tagCel}" styleName="petit"/>
<g:TextBox ui:field="motCleCel" />
</g:HTMLPanel>
<g:HTMLPanel ui:field="conteneurMotCleDel" styleName="{style.champRecherche}">
<g:Label text="{constants.tagDel}" styleName="petit"/>
<g:TextBox ui:field="motCleDel" />
</g:HTMLPanel>
</g:HTMLPanel>
</g:HTMLPanel>
 
<g:Button styleName="{style.boutonRecherche} {style.rechercherAvance}" ui:field="boutonRechercheAvancee" text="{constants.rechercher}"></g:Button>
<g:HTMLPanel styleName="nettoyage" />
 
<g:CheckBox ui:field="casePnInscritsSeulement" styleName="{style.casePnInscritsSeulement}"></g:CheckBox>
<g:Label text="{constants.pnInscritsSeulement}" ui:field="labelPnInscritsSeulement" styleName="{style.labelPnInscritsSeulement}" />
</g:HTMLPanel>
<g:HTMLPanel styleName="droite">
<g:HTMLPanel ui:field="zoneRss" styleName="{style.zoneRss}"></g:HTMLPanel>
</g:HTMLPanel>
<g:Label ui:field="recherchePrecedente" styleName="{style.recherchePrecedente}" />
<g:HTMLPanel ui:field="zonePagination" />
</g:HTMLPanel>
</ui:UiBinder>
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/composants/moteurrecherche/MoteurRecherchePresenteur.java
New file
0,0 → 1,443
package org.tela_botanica.del.client.composants.moteurrecherche;
 
import java.util.Map;
 
import org.tela_botanica.del.client.cache.CacheClient;
import org.tela_botanica.del.client.composants.formulaires.autocompletion.AutoCompletionComboBoxPresenteur;
import org.tela_botanica.del.client.composants.formulaires.autocompletion.AutoCompletionComboBoxVue;
import org.tela_botanica.del.client.composants.presenteur.Presenteur;
import org.tela_botanica.del.client.composants.rss.RssPresenteur;
import org.tela_botanica.del.client.composants.rss.RssVue;
import org.tela_botanica.del.client.config.Config;
import org.tela_botanica.del.client.modeles.InformationsRecherche;
import org.tela_botanica.del.client.modeles.ModeRecherche;
import org.tela_botanica.del.client.services.ReferentielService;
import org.tela_botanica.del.client.services.rest.PaysService;
import org.tela_botanica.del.client.services.rest.PaysServiceConcret;
import org.tela_botanica.del.client.services.rest.async.PaysCallback;
import org.tela_botanica.del.client.utils.InfosNomPourAutocompletion;
import org.tela_botanica.del.client.utils.UtilitairesAutoCompletionService;
 
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.event.dom.client.HasClickHandlers;
import com.google.gwt.event.dom.client.HasKeyPressHandlers;
import com.google.gwt.event.dom.client.KeyCodes;
import com.google.gwt.event.dom.client.KeyPressEvent;
import com.google.gwt.event.dom.client.KeyPressHandler;
import com.google.gwt.http.client.Response;
import com.google.gwt.user.client.ui.HasWidgets;
import com.google.gwt.user.client.ui.IsWidget;
 
public abstract class MoteurRecherchePresenteur extends Presenteur {
 
public abstract interface Vue extends IsWidget {
public void ajouterVue(HasWidgets composite);
 
public HasClickHandlers getLienRechercheAvancee();
 
public void basculerAffichageZoneCache();
 
public HasClickHandlers getBoutonRechercheSimple();
 
public HasClickHandlers getBoutonFermer();
 
public HasClickHandlers getBoutonVider();
 
public HasClickHandlers getBoutonRechercheAvancee();
 
public HasKeyPressHandlers getChampSaisie();
 
public HasClickHandlers getChampSaisieCliquable();
 
public String getValeurRechercheSimple();
 
public String getLabelRecherche();
 
public String getContientMots();
 
public boolean getPnInscritsSeulement();
 
public String getDepartement();
 
public HasWidgets getCommune();
 
public HasWidgets getTaxon();
 
public String getFamille();
 
public String getGenre();
 
public String getMotCle();
 
public String getAuteur();
 
public String getDate();
public String getPays();
 
public void setValeurRechercheSimple(String valeurRecherche);
 
public void setContientMots(String mots);
 
public void setPnInscritsSeulement(boolean valeur);
 
public void setValeurDepartement(String dpt);
 
public void chargerValeursRecherchePrecedente(InformationsRecherche informationsRecherche);
 
public void focusSaisie();
 
public void nettoyer();
 
public HasKeyPressHandlers getChampsFamille();
 
public HasKeyPressHandlers getChampsGenre();
 
public HasKeyPressHandlers getChampsMotCle();
public HasKeyPressHandlers getChampsMotCleDel();
public HasKeyPressHandlers getChampsMotCleCel();
 
public HasKeyPressHandlers getChampsAuteur();
 
public HasKeyPressHandlers getChampsDate();
public HasKeyPressHandlers getChampsDepartement();
public HasKeyPressHandlers getChampsContientMots();
public HasWidgets getZoneRss();
 
public String getReferentiel();
public void setReferentielLectureSeule(boolean lectureSeule);
 
void remplirListeReferentiels(Map<String, String> listeReferentiels);
 
public String getMotCleDel();
 
public String getMotCleCel();
public void cacherChampsTagsImage();
public void cacherChampsTagsObs();
 
void remplirListePays(Map<String, String> listePays);
 
}
 
private Vue vue;
private Config config;
private ModeRecherche modeRecherche;
private RssPresenteur presenteurRss;
public enum TypeMoteur {
SIMPLE, AVANCEE
};
 
private TypeMoteur typeMoteur = TypeMoteur.SIMPLE;
 
private AutoCompletionComboBoxPresenteur completionTaxonsPresenteur = null;
private AutoCompletionComboBoxPresenteur completionCommunesPresenteur = null;
 
public MoteurRecherchePresenteur(Vue vue, ModeRecherche mode) {
initialiser(vue, mode, new Config());
}
 
public MoteurRecherchePresenteur(AutoCompletionComboBoxPresenteur presenteurAutoCompletionTaxon, AutoCompletionComboBoxPresenteur presenteurAutoCompletionCommunes, Vue vue, ModeRecherche mode, Config configuration) {
completionTaxonsPresenteur = presenteurAutoCompletionTaxon;
completionCommunesPresenteur = presenteurAutoCompletionCommunes;
initialiser(vue, mode, configuration);
}
 
private void initialiser(Vue vue, ModeRecherche mode, Config configuration) {
//TODO : fixer le flux avant de le mettre en place
//this.presenteurRss = new RssPresenteur(new RssVue(), CacheClient.getInstance().getInformationsRechercheObservation(), "S'abonner au flux rss des résultats de cette recherche");
//presenteurRss.go(vue.getZoneRss());
this.vue = vue;
setMode(mode);
this.config = configuration;
if (completionTaxonsPresenteur == null)
this.creerCompletionTaxons();
if (completionCommunesPresenteur == null)
this.creerCompletionCommunes();
gererEvenements();
vue.remplirListeReferentiels(ReferentielService.getReferentiels());
if(CacheClient.getInstance().getReferentielNonModifiable()) {
vue.setReferentielLectureSeule(true);
}
if(CacheClient.getInstance().getListePays() != null) {
vue.remplirListePays(CacheClient.getInstance().getListePays());
} else {
PaysService paysService = new PaysServiceConcret();
paysService.getPays(new PaysCallback() {
@Override
public void surRetour(Map<String, String> listePays) {
CacheClient.getInstance().setListePays(listePays);
MoteurRecherchePresenteur.this.vue.remplirListePays(listePays);
}
});
}
if(estPourRechercheImages()) {
vue.cacherChampsTagsObs();
} else {
vue.cacherChampsTagsImage();
}
}
 
public ModeRecherche getMode() {
return modeRecherche;
}
 
private void setMode(ModeRecherche mode) {
modeRecherche = mode;
}
public TypeMoteur getTypeMoteur() {
return this.typeMoteur;
}
public void setTypeMoteur(TypeMoteur typeMoteur) {
this.typeMoteur = typeMoteur;
}
 
public boolean estPourRechercheImages() {
return (modeRecherche == ModeRecherche.MODE_IMAGE);
}
 
public boolean estPourRechercheObservations() {
return (modeRecherche == ModeRecherche.MODE_OBSERVATION);
}
 
private void creerCompletionTaxons() {
String url = this.config.getServiceBaseUrl() + "nomstaxons";
completionTaxonsPresenteur = new AutoCompletionComboBoxPresenteur(new AutoCompletionComboBoxVue(), url) {
protected String effectuerPreTraitementChaineRequete(String requete) {
// si aucun référentiel selectionné, pas de requete
if(vue.getReferentiel() != null && !vue.getReferentiel().equals("")) {
requete = "?masque.nom=" + requete + "&masque.referentiel=" + vue.getReferentiel();
return requete;
} else {
return null;
}
// A décommenter lors de l'utilisation des web services eflore
// return
// RetourAutoCompletionService.effectuerPreTraitementChaineRequeteGenreEspeceEflore(requete);
}
 
@Override
protected InfosNomPourAutocompletion[] parserResultatRequete(Response response) {
return UtilitairesAutoCompletionService.parserResultatRetourSimple(response);
// A décommenter lors de l'utilisation des web services eflore
// return RetourAutoCompletionService.parserRetourOss(response);
}
};
}
 
private void creerCompletionCommunes() {
String url = this.config.getServiceBaseUrl() + "communes";
completionCommunesPresenteur = new AutoCompletionComboBoxPresenteur(new AutoCompletionComboBoxVue(), url) {
protected String effectuerPreTraitementChaineRequete(String requete) {
requete = "?masque.nom=" + requete;
return requete;
}
 
@Override
protected void surSelectionSuggestion(String suggestion) {
setValeur(suggestion);
collecterInfosRecherche();
setValeur(getInformationsRechercheEnCache().getCommune());
vue.setValeurDepartement(getInformationsRechercheEnCache().getDepartement());
}
 
@Override
protected InfosNomPourAutocompletion[] parserResultatRequete(Response response) {
return UtilitairesAutoCompletionService.parserResultatRetourSimple(response);
}
};
}
 
@Override
public void go(HasWidgets composite) {
afficherRequeteEtLancerRecherche();
completionTaxonsPresenteur.go(vue.getTaxon());
completionCommunesPresenteur.go(vue.getCommune());
vue.ajouterVue(composite);
vue.focusSaisie();
}
 
@Override
protected void gererEvenements() {
vue.getLienRechercheAvancee().addClickHandler(new ClickHandler() {
public void onClick(ClickEvent event) {
setTypeMoteur(TypeMoteur.AVANCEE);
vue.setContientMots(vue.getValeurRechercheSimple());
vue.basculerAffichageZoneCache();
}
});
 
vue.getBoutonRechercheSimple().addClickHandler(new ClickHandler() {
public void onClick(ClickEvent event) {
setTypeMoteur(TypeMoteur.SIMPLE);
collecterInfosRecherche();
afficherRequeteEtLancerRecherche();
}
});
 
vue.getBoutonFermer().addClickHandler(new ClickHandler() {
public void onClick(ClickEvent event) {
vue.setValeurRechercheSimple(vue.getContientMots());
vue.basculerAffichageZoneCache();
}
});
 
vue.getBoutonVider().addClickHandler(new ClickHandler() {
public void onClick(ClickEvent event) {
nettoyerChamps();
InformationsRecherche infosRecherche = new InformationsRecherche();
if (estPourRechercheImages()) {
CacheClient.getInstance().setInformationsRechercheImage(infosRecherche);
} else if (estPourRechercheObservations()) {
CacheClient.getInstance().setInformationsRechercheObservation(infosRecherche);
}
}
});
 
vue.getBoutonRechercheAvancee().addClickHandler(new ClickHandler() {
public void onClick(ClickEvent event) {
setTypeMoteur(TypeMoteur.AVANCEE);
collecterInfosRecherche();
vue.basculerAffichageZoneCache();
afficherRequeteEtLancerRecherche();
}
});
 
vue.getChampSaisie().addKeyPressHandler(new KeyPressHandler() {
public void onKeyPress(KeyPressEvent event) {
if (event.getNativeEvent().getKeyCode() == KeyCodes.KEY_ENTER) {
setTypeMoteur(TypeMoteur.SIMPLE);
collecterInfosRecherche();
afficherRequeteEtLancerRecherche();
}
}
});
 
vue.getChampSaisieCliquable().addClickHandler(new ClickHandler() {
public void onClick(ClickEvent event) {
if (vue.getValeurRechercheSimple().equals(vue.getLabelRecherche())) {
vue.setValeurRechercheSimple("");
}
}
});
 
vue.getChampsAuteur().addKeyPressHandler(creerGestionnaireEvenementToucheEntree());
vue.getChampsDate().addKeyPressHandler(creerGestionnaireEvenementToucheEntree());
vue.getChampsFamille().addKeyPressHandler(creerGestionnaireEvenementToucheEntree());
vue.getChampsGenre().addKeyPressHandler(creerGestionnaireEvenementToucheEntree());
vue.getChampsMotCle().addKeyPressHandler(creerGestionnaireEvenementToucheEntree());
vue.getChampsMotCleCel().addKeyPressHandler(creerGestionnaireEvenementToucheEntree());
vue.getChampsMotCleDel().addKeyPressHandler(creerGestionnaireEvenementToucheEntree());
vue.getChampsDepartement().addKeyPressHandler(creerGestionnaireEvenementToucheEntree());
vue.getChampsContientMots().addKeyPressHandler(creerGestionnaireEvenementToucheEntree());
 
}
 
public KeyPressHandler creerGestionnaireEvenementToucheEntree() {
return new KeyPressHandler() {
public void onKeyPress(KeyPressEvent event) {
if (event.getNativeEvent().getKeyCode() == KeyCodes.KEY_ENTER) {
vue.basculerAffichageZoneCache();
collecterInfosRecherche();
afficherRequeteEtLancerRecherche();
}
}
};
}
 
private void nettoyerChamps() {
completionCommunesPresenteur.nettoyer();
completionTaxonsPresenteur.nettoyer();
vue.nettoyer();
}
 
public void collecterInfosRecherche() {
InformationsRecherche informationRecherche = new InformationsRecherche();
informationRecherche.setRechercheLibre(this.getRechercheLibre());
if (this.typeMoteur == TypeMoteur.AVANCEE) {
informationRecherche.setTaxon(completionTaxonsPresenteur.getValeur());
informationRecherche.setDepartement(vue.getDepartement());
informationRecherche.setCommune(completionCommunesPresenteur.getValeur());
informationRecherche.setFamille(vue.getFamille());
informationRecherche.setGenre(vue.getGenre());
if(estPourRechercheObservations()) {
informationRecherche.setMotClef(vue.getMotCle());
} else {
informationRecherche.setMotClefDel(vue.getMotCleDel());
informationRecherche.setMotClefCel(vue.getMotCleCel());
}
informationRecherche.setTag(vue.getMotCle());
informationRecherche.setAuteur(vue.getAuteur());
informationRecherche.setDate(vue.getDate());
informationRecherche.setReferentiel(vue.getReferentiel());
informationRecherche.setPays(vue.getPays());
informationRecherche.setPnInscritsSeulement(vue.getPnInscritsSeulement());
}
if(CacheClient.getInstance().getReferentielNonModifiable()) {
informationRecherche.setReferentiel(CacheClient.getInstance().getReferentielCourant());
}
 
if (estPourRechercheImages()) {
CacheClient.getInstance().setPageCouranteRechercheImages(1);
CacheClient.getInstance().setInformationsRechercheImage(informationRecherche);
} else if (estPourRechercheObservations()) {
CacheClient.getInstance().setPageCouranteRechercheObservations(1);
CacheClient.getInstance().setInformationsRechercheObservation(informationRecherche);
}
}
 
private String getRechercheLibre() {
String rechercheLibre = "";
switch (this.typeMoteur) {
case SIMPLE:
rechercheLibre = vue.getValeurRechercheSimple();
break;
case AVANCEE:
rechercheLibre = vue.getContientMots();
break;
default:
// TODO : voir comment gérer les exceptions proprement
// throw new
// Exception("Le type de moteur de recherche indiqué n'est pas disponible");
}
return rechercheLibre;
}
 
private InformationsRecherche getInformationsRechercheEnCache() {
if (estPourRechercheImages()) {
return CacheClient.getInstance().getInformationsRechercheImage();
} else if (estPourRechercheObservations()) {
return CacheClient.getInstance().getInformationsRechercheObservation();
}
return null;
}
 
public void afficherRequeteEtLancerRecherche() {
InformationsRecherche informationsRecherche = getInformationsRechercheEnCache();
if (informationsRecherche != null) {
completionTaxonsPresenteur.setValeur(informationsRecherche.getTaxon());
completionCommunesPresenteur.setValeur(informationsRecherche.getCommune());
vue.chargerValeursRecherchePrecedente(informationsRecherche);
}
lancerRecherche();
//presenteurRss.genererLien(informationsRecherche);
}
 
public abstract void lancerRecherche();
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/composants/moteurrecherche/MoteurRechercheVue.java
New file
0,0 → 1,383
package org.tela_botanica.del.client.composants.moteurrecherche;
 
import java.util.Iterator;
import java.util.Map;
 
import org.tela_botanica.del.client.i18n.I18n;
import org.tela_botanica.del.client.modeles.InformationsRecherche;
 
import com.google.gwt.core.client.GWT;
import com.google.gwt.event.dom.client.HasClickHandlers;
import com.google.gwt.event.dom.client.HasKeyPressHandlers;
import com.google.gwt.uibinder.client.UiBinder;
import com.google.gwt.uibinder.client.UiField;
import com.google.gwt.user.client.DOM;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.CheckBox;
import com.google.gwt.user.client.ui.HasWidgets;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.ListBox;
import com.google.gwt.user.client.ui.Panel;
import com.google.gwt.user.client.ui.TextBox;
import com.google.gwt.user.client.ui.Widget;
 
public class MoteurRechercheVue extends Composite implements MoteurRecherchePresenteur.Vue {
 
interface Binder extends UiBinder<Widget, MoteurRechercheVue> {
}
 
private static Binder uiBinder = GWT.create(Binder.class);
private String labelRecherche = "";
private Map<String,String> listePays;
private InformationsRecherche informationRecherche;
// Si l'on charge une recherche précédente et que la liste des pays n'est
// pas encore arrivée, on stocke le pays pour l'afficher quand la liste arrive
private String paysEnAttente;
 
@UiField
Panel rechercheAvancee, taxon, commune, zoneRss, conteneurMotCle, conteneurMotCleCel, conteneurMotCleDel ;
@UiField
Label lienRechercheAvancee, recherchePrecedente, labelPnInscritsSeulement;
@UiField
Button boutonRecherche, boutonRechercheAvancee, boutonFermer, boutonVider;
@UiField
TextBox recherchePrincipale, contientMots, departement, famille, genre, motCle, motCleCel, motCleDel, auteur, date;
@UiField
ListBox referentiel, pays;
@UiField
CheckBox casePnInscritsSeulement;
 
public MoteurRechercheVue(String labelRecherche) {
initWidget(uiBinder.createAndBindUi(this));
this.labelRecherche = labelRecherche;
recherchePrincipale.setText(labelRecherche);
rechercheAvancee.setVisible(false);
}
@Override
public void remplirListeReferentiels(Map<String, String> listeReferentiels) {
for (Iterator<String> iterator = listeReferentiels.keySet().iterator(); iterator.hasNext();) {
String codeRef = iterator.next();
referentiel.addItem(listeReferentiels.get(codeRef), codeRef);
}
referentiel.setItemSelected(1, true);
}
@Override
public void remplirListePays(Map<String, String> listePays) {
this.listePays = listePays;
pays.clear();
// Pour pouvoir annuler la selection de pays, on ajoute un item vide
pays.addItem("", "");
int index = 1;
for (Iterator<String> iterator = listePays.keySet().iterator(); iterator.hasNext();) {
String codePays = iterator.next();
pays.addItem(listePays.get(codePays), codePays);
if(paysEnAttente != null && codePays.equals(paysEnAttente)) {
pays.setItemSelected(index, true);
}
index++;
}
if(paysEnAttente != null) {
afficherLigneInfoRecherche(informationRecherche);
}
paysEnAttente = null;
}
 
public String getLabelRecherche() {
return labelRecherche;
}
 
public HasClickHandlers getLienRechercheAvancee() {
return lienRechercheAvancee;
}
 
public HasClickHandlers getBoutonRechercheSimple() {
return boutonRecherche;
}
 
public HasClickHandlers getBoutonFermer() {
return boutonFermer;
}
 
public HasClickHandlers getBoutonVider() {
return boutonVider;
}
 
public HasClickHandlers getBoutonRechercheAvancee() {
return boutonRechercheAvancee;
}
 
public HasKeyPressHandlers getChampSaisie() {
return recherchePrincipale;
}
 
public String getValeurRechercheSimple() {
return recherchePrincipale.getText();
}
 
public void setValeurRechercheSimple(String valeurRecherche) {
recherchePrincipale.setText(valeurRecherche);
}
 
public HasClickHandlers getChampSaisieCliquable() {
return recherchePrincipale;
}
 
public String getContientMots() {
return contientMots.getText();
}
 
public void setContientMots(String mots) {
contientMots.setText(mots);
}
 
public boolean getPnInscritsSeulement() {
return casePnInscritsSeulement.getValue();
}
 
public void setPnInscritsSeulement(boolean valeur) {
casePnInscritsSeulement.setValue(valeur);
}
public String getPays() {
return pays.getValue(pays.getSelectedIndex());
}
 
public String getDepartement() {
return departement.getText();
}
 
public void setValeurDepartement(String dpt) {
departement.setValue(dpt);
}
 
public HasWidgets getCommune() {
return commune;
}
 
public HasWidgets getTaxon() {
return taxon;
}
 
public String getFamille() {
return famille.getText();
}
 
public String getGenre() {
return genre.getText();
}
 
public String getMotCle() {
return motCle.getText();
}
 
public String getAuteur() {
return auteur.getText();
}
 
public String getDate() {
return date.getText();
}
public String getReferentiel() {
return referentiel.getValue(referentiel.getSelectedIndex());
}
 
public void focusSaisie() {
this.recherchePrincipale.setFocus(true);
}
 
public void ajouterVue(HasWidgets composite) {
composite.add(this.asWidget());
}
 
public void basculerAffichageZoneCache() {
rechercheAvancee.setVisible(!rechercheAvancee.isVisible());
recherchePrincipale.setVisible(!recherchePrincipale.isVisible());
boutonRecherche.setVisible(!boutonRecherche.isVisible());
}
 
public void nettoyer() {
pays.setSelectedIndex(0);
chargerValeursRecherchePrecedente(new InformationsRecherche());
}
 
public void chargerValeursRecherchePrecedente(InformationsRecherche informationsRecherche) {
recherchePrincipale.setText(informationsRecherche.getRechercheLibre());
contientMots.setText(informationsRecherche.getRechercheLibre());
departement.setText(informationsRecherche.getDepartement());
famille.setText(informationsRecherche.getFamille());
genre.setText(informationsRecherche.getGenre());
motCle.setText(informationsRecherche.getMotClef());
motCleCel.setText(informationsRecherche.getMotClefCel());
motCleDel.setText(informationsRecherche.getMotClefDel());
auteur.setText(informationsRecherche.getAuteur());
date.setText(informationsRecherche.getDate());
casePnInscritsSeulement.setValue(informationsRecherche.getPnInscritsSeulement());
for(int i = 0; i < referentiel.getItemCount(); i++) {
if(referentiel.getValue(i).equals(informationsRecherche.getReferentiel())) {
referentiel.setSelectedIndex(i);
}
}
// la liste des pays du champs de recherche est asynchrone
// donc elle peut ne pas avoir encore été chargée
if(listePays != null) {
for(int i = 0; i < pays.getItemCount(); i++) {
if(pays.getValue(i).equals(paysEnAttente)) {
pays.setSelectedIndex(i);
}
}
} else {
paysEnAttente = informationsRecherche.getPays();
}
 
afficherLigneInfoRecherche(informationsRecherche);
}
 
/**
* Affiche la ligne d'en tête montrant les elements de la requête à
* l'utilisateur
*
* @param informationRecherche
*/
private void afficherLigneInfoRecherche(InformationsRecherche informationRecherche) {
this.informationRecherche = informationRecherche;
// tax dep com fam gen ta mo au date
StringBuffer texteRecherchePrecedente = new StringBuffer();
 
if (informationRecherche.getRechercheLibre() != null && !informationRecherche.getRechercheLibre().equals("")) {
texteRecherchePrecedente.append(I18n.getVocabulary().rechercheLibre() + ":" + informationRecherche.getRechercheLibre() + " ");
}
if (informationRecherche.getTaxon() != null && !informationRecherche.getTaxon().equals("")) {
texteRecherchePrecedente.append(I18n.getVocabulary().taxon() + ":" + informationRecherche.getTaxon() + " ");
}
if (informationRecherche.getDepartement() != null && !informationRecherche.getDepartement().equals("")) {
texteRecherchePrecedente.append(I18n.getVocabulary().departement() + ":" + informationRecherche.getDepartement() + " ");
}
if (listePays != null && informationRecherche.getPays() != null && !informationRecherche.getPays().equals("")) {
texteRecherchePrecedente.append(I18n.getVocabulary().pays() + ":" + listePays.get(informationRecherche.getPays()) + " ");
}
if (informationRecherche.getCommune() != null && !informationRecherche.getCommune().equals("")) {
texteRecherchePrecedente.append(I18n.getVocabulary().commune() + ":" + informationRecherche.getCommune() + " ");
}
if (informationRecherche.getFamille() != null && !informationRecherche.getFamille().equals("")) {
texteRecherchePrecedente.append(I18n.getVocabulary().famille() + ":" + informationRecherche.getFamille() + " ");
}
if (informationRecherche.getGenre() != null && !informationRecherche.getGenre().equals("")) {
texteRecherchePrecedente.append(I18n.getVocabulary().genre() + ":" + informationRecherche.getGenre() + " ");
}
if (informationRecherche.getTag() != null && !informationRecherche.getTag().equals("")) {
texteRecherchePrecedente.append(I18n.getVocabulary().tag() + ":" + informationRecherche.getTag() + " ");
}
if (informationRecherche.getMotClef() != null && !informationRecherche.getMotClef().equals("")) {
texteRecherchePrecedente.append(I18n.getVocabulary().mot_clef() + ":" + informationRecherche.getMotClef() + " ");
}
if (informationRecherche.getMotClefCel() != null && !informationRecherche.getMotClefCel().equals("")) {
texteRecherchePrecedente.append(I18n.getVocabulary().tagCel() + ":" + informationRecherche.getMotClefCel() + " ");
}
if (informationRecherche.getMotClefDel() != null && !informationRecherche.getMotClefDel().equals("")) {
texteRecherchePrecedente.append(I18n.getVocabulary().tagDel() + ":" + informationRecherche.getMotClefDel() + " ");
}
if (informationRecherche.getAuteur() != null && !informationRecherche.getAuteur().equals("")) {
texteRecherchePrecedente.append(I18n.getVocabulary().auteur() + ":" + informationRecherche.getAuteur() + " ");
}
if (informationRecherche.getDate() != null && !informationRecherche.getDate().equals("")) {
texteRecherchePrecedente.append(I18n.getVocabulary().date() + ":" + informationRecherche.getDate() + " ");
}
if (informationRecherche.getReferentiel() != null && !informationRecherche.getReferentiel().equals("")) {
texteRecherchePrecedente.append(I18n.getVocabulary().referentiel() + ":" + informationRecherche.getReferentiel() + " ");
}
if (informationRecherche.getPnInscritsSeulement()) {
texteRecherchePrecedente.append(I18n.getVocabulary().pnISCourt() + ":non");
}
recherchePrecedente.setText(texteRecherchePrecedente.toString());
}
 
@Override
public HasKeyPressHandlers getChampsFamille() {
return famille;
}
 
@Override
public HasKeyPressHandlers getChampsGenre() {
return genre;
}
 
@Override
public HasKeyPressHandlers getChampsMotCle() {
return motCle;
}
 
@Override
public HasKeyPressHandlers getChampsAuteur() {
return auteur;
}
 
@Override
public HasKeyPressHandlers getChampsDate() {
return date;
}
 
@Override
public HasKeyPressHandlers getChampsDepartement() {
return departement;
}
 
@Override
public HasKeyPressHandlers getChampsContientMots() {
return contientMots;
}
public HasWidgets getZoneRss() {
return zoneRss;
}
 
@Override
public void setReferentielLectureSeule(boolean lectureSeule) {
// la listbox ne possède aucun méthode directe pour être désactivée
DOM.setElementProperty(referentiel.getElement(), "disabled", "disabled");
}
 
@Override
public HasKeyPressHandlers getChampsMotCleDel() {
return motCleDel;
}
 
@Override
public HasKeyPressHandlers getChampsMotCleCel() {
return motCleCel;
}
 
@Override
public String getMotCleDel() {
return motCleDel.getText();
}
 
@Override
public String getMotCleCel() {
return motCleCel.getText();
}
 
@Override
public void cacherChampsTagsImage() {
conteneurMotCleCel.setVisible(false);
conteneurMotCleDel.setVisible(false);
}
 
@Override
public void cacherChampsTagsObs() {
conteneurMotCle.setVisible(false);
}
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/composants/moteurrecherche/MoteurRecherche.css
New file
0,0 → 1,117
.recherchePrincipale {
width:550px;
font-size: 18px;
padding: 5px;
border: solid 1px #AAA;
float: left;
}
 
.boutonRecherche {
border: solid 1px #AAA;
padding: 5px;
cursor: pointer;
float: left;
margin: 0 10px 0 10px
}
 
.lienRechercheAvancee {
cursor: pointer;
text-decoration: underline;
color: blue;
float: left;
margin-right: 240px;
margin: 5px
}
 
.rechercheAvancee {
border: solid 1px #333;
padding: 15px;
position: absolute;
width: 750px;
margin-top: 0px;
background: white;
z-index: 2000
}
 
.conteneurDeuxPanneaux {
width: 700px;
}
 
.panneauGauche {
float: left;
width: 300px;
}
 
.panneauDroite {
float: left;
width: 300px;
}
 
.champRecherche {
width: 90%;
padding-bottom: 5px
}
 
.champRecherche input {
width: 90%
}
 
.recherchePrecedente {
color: #555;
padding: 5px 5px 10px;
font-style: italic;
clear: left
}
 
.boutonFermer {
float: right;
background: url("./img/cross.png") no-repeat 0 2px;
border: none;
padding: 0 0 0 16px;
color: blue;
text-decoration: underline;
cursor: pointer;
height: 19px;
}
 
.boutonVider {
float: right;
background: url("./img/cancel.png") no-repeat 0 2px;
border: none;
padding: 0 0 0 16px;
color: blue;
text-decoration: underline;
cursor: pointer;
height: 19px
}
 
.rechercherAvance {
margin-top: 0px;
margin-left:0px;
top: 195px;
position: relative;
left: 25px;
}
 
.casePnInscritsSeulement {
float: left;
}
 
.labelPnInscritsSeulement {
margin-top: 4px;
}
 
.zoneRecherche {
}
.zoneRss {
float:right;
margin-top:5px;
}
.zoneRss a {
border:none;
}
 
.nettoyage {
visibility: hidden;
clear: both;
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/composants/commentaires/ligneCommentaire.css
New file
0,0 → 1,25
.commentaire {
font-size: 11px;
background: #DDD;
padding: 3px;
margin-bottom:5px;
}
 
.auteur {
padding-left:3px;
float: left;
font-size:11px;
color:#AAA;
font-style:italic;
}
 
.date {
float: left;
font-size:11px;
color:#DDD;
font-style:italic;
}
 
.date:before {
content:", ";
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/composants/commentaires/LigneCommentaireVue.ui.xml
New file
0,0 → 1,17
<!DOCTYPE ui:UiBinder SYSTEM "http://dl.google.com/gwt/DTD/xhtml.ent">
<ui:UiBinder xmlns:ui='urn:ui:com.google.gwt.uibinder'
xmlns:g='urn:import:com.google.gwt.user.client.ui'
xmlns:vues="urn:import:org.tela_botanica.del.client.composants.forum">
<ui:with field="constants" type="org.tela_botanica.del.client.i18n.Vocabulary" />
<ui:style src="ligneCommentaire.css" />
<g:HTMLPanel>
<g:HorizontalPanel ui:field="zoneAuteur">
<g:Label ui:field="auteur" styleName="{style.auteur}"/>
<g:Label ui:field="date" styleName="{style.date}"/>
</g:HorizontalPanel>
<g:HTMLPanel>
<g:Label ui:field="commentaire" styleName="commentaire {style.commentaire}"/>
</g:HTMLPanel>
</g:HTMLPanel>
</ui:UiBinder>
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/composants/commentaires/detailCommentaireVue.css
New file
0,0 → 1,41
.conteneurTableauVotes {
z-index: 1500;
padding: 30px;
padding-right: 21px;
padding-top: 20px;
background: white;
width: 370px;
margin: 0 auto;
margin-top: 75px;
padding-bottom:50px;
}
 
.table {
border:solid 1px #DDD;
width: 100%;
}
 
.chargement {
padding-left: 165px;
}
 
.auteur {
color: #6C6865;
font-family: arial;
font-size: 13px;
font-style: italic;
font-weight: bold;
letter-spacing: 0;
line-height: 18px;
text-transform: none;
margin-top: -10px;
}
 
.boutonAjouterCommentaire {
margin:30px 0;
}
 
.zoneCommentaires {
max-height: 400px;
overflow:auto;
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/composants/commentaires/LigneCommentairePresenteur.java
New file
0,0 → 1,70
package org.tela_botanica.del.client.composants.commentaires;
 
import org.tela_botanica.del.client.composants.presenteur.Presenteur;
import org.tela_botanica.del.client.modeles.Commentaire;
import org.tela_botanica.del.client.modeles.PropositionDetermination;
 
import com.google.gwt.i18n.client.DateTimeFormat;
import com.google.gwt.user.client.ui.HasWidgets;
import com.google.gwt.user.client.ui.IsWidget;
 
public class LigneCommentairePresenteur extends Presenteur {
 
public interface Vue extends IsWidget {
public void setCommentaire(String commentaire);
public void setAuteur(String auteur);
public void setDate(String date);
}
 
private Vue vue;
private PropositionDetermination proposition;
private Commentaire commentaire;
public LigneCommentairePresenteur(Vue vue, PropositionDetermination proposition) {
this.vue = vue;
this.proposition = proposition;
afficherCommentaire();
}
public LigneCommentairePresenteur(Vue vue, Commentaire commentaire) {
this.vue = vue;
this.commentaire = commentaire;
afficherCommentaire();
}
 
public void afficherCommentaire() {
if (proposition != null) {
String commentaire = proposition.getCommentaire();
vue.setCommentaire(commentaire);
String date = DateTimeFormat.getFormat("dd/MM/yyyy").format(proposition.getDate());
vue.setDate(date);
String auteur = proposition.getAuteur();
vue.setAuteur(auteur);
} else if (commentaire != null) {
String commentaire = this.commentaire.getCommentaire();
vue.setCommentaire(commentaire);
String date = DateTimeFormat.getFormat("dd/MM/yyyy").format(this.commentaire.getDate());
vue.setDate(date);
String auteur = this.commentaire.getAuteur();
vue.setAuteur(auteur);
}
}
/**
* Declenchement du présenteur
*/
public void go(HasWidgets container) {
container.add(vue.asWidget());
gererEvenements();
}
 
protected void gererEvenements() {
}
 
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/composants/commentaires/DetailCommentaireVue.ui.xml
New file
0,0 → 1,19
<!DOCTYPE ui:UiBinder SYSTEM "http://dl.google.com/gwt/DTD/xhtml.ent">
<ui:UiBinder
xmlns:ui='urn:ui:com.google.gwt.uibinder'
xmlns:g='urn:import:com.google.gwt.user.client.ui'
xmlns:vues="urn:import:org.tela_botanica.del.client.composants.forum">
<ui:with field="constants" type="org.tela_botanica.del.client.i18n.Vocabulary" />
<ui:style src="detailCommentaireVue.css" />
<g:HTMLPanel styleName="{style.conteneurTableauVotes}">
<g:HTMLPanel ui:field='titre' styleName="titre" />
<g:HTMLPanel ui:field='auteur' styleName="{style.auteur}" />
<g:HTMLPanel ui:field="ligneCommentaire" styleName="{style.zoneCommentaires}"></g:HTMLPanel>
<g:HTMLPanel ui:field="panneauChargement" styleName="{style.chargement}">
<g:Image url="./img/wait.gif"></g:Image>
</g:HTMLPanel>
<g:HTMLPanel ui:field="aucuneDonnees" visible="false"><g:Label text="{constants.aucunCommentaireEffectue}"></g:Label></g:HTMLPanel>
<g:Button ui:field="boutonAjoutCommentaire" styleName="bouton {style.boutonAjouterCommentaire}"
text="{constants.ajouterCommentaire}" />
</g:HTMLPanel>
</ui:UiBinder>
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/composants/commentaires/LigneCommentaireVue.java
New file
0,0 → 1,38
package org.tela_botanica.del.client.composants.commentaires;
 
import com.google.gwt.core.client.GWT;
import com.google.gwt.uibinder.client.UiBinder;
import com.google.gwt.uibinder.client.UiField;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.Widget;
 
public class LigneCommentaireVue extends Composite implements LigneCommentairePresenteur.Vue {
 
interface LigneCommentaireVueUiBinder extends UiBinder<Widget, LigneCommentaireVue> {};
private static LigneCommentaireVueUiBinder uiBinder = GWT.create(LigneCommentaireVueUiBinder.class);
//Composants
@UiField
Label commentaire, auteur, date;
public LigneCommentaireVue() {
initWidget(uiBinder.createAndBindUi(this));
}
@Override
public void setCommentaire(String commentaire) {
this.commentaire.setText(commentaire);
}
@Override
public void setAuteur(String auteur) {
this.auteur.setText(auteur);
}
@Override
public void setDate(String date) {
this.date.setText(date);
}
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/composants/commentaires/DetailCommentairePresenteur.java
New file
0,0 → 1,170
package org.tela_botanica.del.client.composants.commentaires;
 
import java.util.List;
 
import org.tela_botanica.del.client.cache.CacheClient;
import org.tela_botanica.del.client.composants.fenetreoverlay.FenetreOverlayDefilanteVue;
import org.tela_botanica.del.client.composants.fenetreoverlay.FenetreOverlaySimplePresenteur;
import org.tela_botanica.del.client.composants.formulaires.formulairecommentaire.FormulaireCommentairePresenteur;
import org.tela_botanica.del.client.composants.formulaires.formulairecommentaire.FormulaireCommentaireVue;
import org.tela_botanica.del.client.composants.presenteur.Presenteur;
import org.tela_botanica.del.client.modeles.Commentaire;
import org.tela_botanica.del.client.modeles.InterventionForum;
import org.tela_botanica.del.client.modeles.PropositionDetermination;
import org.tela_botanica.del.client.navigation.evenement.BusEvenementiel;
import org.tela_botanica.del.client.navigation.evenement.ajoutcommentaire.EvenementAjoutCommentaire;
import org.tela_botanica.del.client.navigation.evenement.ajoutcommentaire.GestionnaireEvenementAjoutCommentaire;
import org.tela_botanica.del.client.services.rest.CommentaireService;
import org.tela_botanica.del.client.services.rest.CommentaireServiceConcret;
import org.tela_botanica.del.client.services.rest.async.ListeCommentairesCallback;
 
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.event.dom.client.HasClickHandlers;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.ui.HasWidgets;
import com.google.gwt.user.client.ui.IsWidget;
 
/**
* Cette classe permet d'afficher une popup avec la liste des commentaires
* associées à une proposition de determination
*
* @author LIENS
*
*/
public class DetailCommentairePresenteur extends Presenteur {
 
/**
* Interface de la vue correspondante
*
* @author LIENS
*
*/
public interface Vue extends IsWidget {
public void afficherCommentairesProposition(PropositionDetermination propositionDetermination);
 
public void afficherAucuneDonnees();
 
public void stopChargement();
 
public void startChargement();
public HasClickHandlers getBoutonAjoutCommentaire();
}
 
// La vue correspondante
private Vue vue;
 
// La proposition de determination
private PropositionDetermination propositionDetermination;
//le servcie de recuperation des commentaires
private CommentaireService commentaireService;
 
/**
* Constructeur
*
* @param vue
* @param propositionDetermination
*/
public DetailCommentairePresenteur(Vue vue, CommentaireService commentaireService, PropositionDetermination propositionDetermination) {
this.vue = vue;
this.propositionDetermination = propositionDetermination;
this.commentaireService = commentaireService;
}
 
/**
* Declenchement du présenteur
*/
public void go(HasWidgets container) {
container.add(vue.asWidget());
gererEvenements();
}
 
/**
* Affichage des commentaires
*/
public void afficherCommentaires() {
 
// affichage de l'icone de chargement
vue.startChargement();
// si l'id de la propostion est égal est nulle alors celle ci est une proposition
// crée par l'interface à partir de l'obs et n'a donc pas de commentaires
if(propositionDetermination.getId() != null) {
 
// Appel du service
commentaireService.chargerCommentaires(propositionDetermination, new ListeCommentairesCallback() {
 
@Override
public void surRetour(List<Commentaire> commentaires) {
 
propositionDetermination.setListeCommentaires(commentaires);
// s'il existe des commentaires ils sont affichés
if (propositionDetermination.getTotalCommentaires() > 0) {
 
// affichage des commentaires associés à la proposition dans
// la vue
vue.afficherCommentairesProposition(propositionDetermination);
 
// supression de l'icone de chargement
vue.stopChargement();
} else {
 
// affichage d'un message precisant qu'il n'y a pas de
// commentaires
vue.afficherAucuneDonnees();
 
// supression de l'icone de chargement
vue.stopChargement();
}
 
}
 
@Override
public void surErreur(String messageErreur) {
Window.alert(messageErreur);
vue.stopChargement();
}
});
} else {
// affichage d'un message precisant qu'il n'y a pas de
// commentaires
vue.afficherAucuneDonnees();
 
// supression de l'icone de chargement
vue.stopChargement();
}
}
 
/**
* Gestion des evenements du presenteur
*/
@Override
protected void gererEvenements() {
final FenetreOverlaySimplePresenteur fenetreOverlaySimplePresenteur = new FenetreOverlaySimplePresenteur(new FenetreOverlayDefilanteVue());
 
vue.getBoutonAjoutCommentaire().addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
// TODO : > mettre proprement l'intervention
// TODO : >actualiser les affichages
CacheClient.getInstance().setObservationCourante(propositionDetermination.getObservation());
FormulaireCommentairePresenteur commentairePresenteur = new FormulaireCommentairePresenteur(propositionDetermination.getObservation().getInterventionsForum().get(propositionDetermination.getObservation().getInterventionsForum().size()-1), new CommentaireServiceConcret(), new FormulaireCommentaireVue());
fenetreOverlaySimplePresenteur.ouvrirFenetreModale(commentairePresenteur);
}
});
BusEvenementiel.getInstance().addHandler(EvenementAjoutCommentaire.TYPE, new GestionnaireEvenementAjoutCommentaire() {
 
@Override
public void onAjoutCommentaire(EvenementAjoutCommentaire event) {
if (fenetreOverlaySimplePresenteur != null && fenetreOverlaySimplePresenteur.fenetreModaleEstOuverte()) {
fenetreOverlaySimplePresenteur.fermerFenetreModale();
}
}
});
}
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/composants/commentaires/DetailCommentaireVue.java
New file
0,0 → 1,118
package org.tela_botanica.del.client.composants.commentaires;
 
import java.util.List;
 
import org.tela_botanica.del.client.i18n.I18n;
import org.tela_botanica.del.client.modeles.Commentaire;
import org.tela_botanica.del.client.modeles.PropositionDetermination;
 
import com.google.gwt.core.client.GWT;
import com.google.gwt.uibinder.client.UiBinder;
import com.google.gwt.uibinder.client.UiField;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.HTML;
import com.google.gwt.user.client.ui.HTMLPanel;
import com.google.gwt.user.client.ui.Panel;
import com.google.gwt.user.client.ui.Widget;
 
/**
* Cette classe permet d'afficher une popup avec la liste des commentaires
* associées à une proposition de determination
*
* @author LIENS
*
*/
public class DetailCommentaireVue extends Composite implements DetailCommentairePresenteur.Vue {
 
private static DetailListeVotesDeterminationVueUIiBinder uiBinder = GWT.create(DetailListeVotesDeterminationVueUIiBinder.class);
 
interface DetailListeVotesDeterminationVueUIiBinder extends UiBinder<Widget, DetailCommentaireVue> {
};
 
@UiField
HTMLPanel titre, auteur, aucuneDonnees;
 
@UiField
Panel panneauChargement, ligneCommentaire;
 
@UiField
Button boutonAjoutCommentaire;
@Override
public Button getBoutonAjoutCommentaire() {
return boutonAjoutCommentaire;
}
 
public DetailCommentaireVue() {
initWidget(uiBinder.createAndBindUi(this));
}
 
/**
* Affiche les commentaires associées à une proposition de determination
*/
@Override
public void afficherCommentairesProposition(PropositionDetermination propositionDetermination) {
HTML htmlTitre = new HTML(propositionDetermination.getEspece());
titre.add(htmlTitre);
HTML htmlAuteur = new HTML(I18n.getVocabulary().proposePar()+propositionDetermination.getAuteur());
auteur.add(htmlAuteur);
 
LigneCommentairePresenteur presenteurCommentaire = new LigneCommentairePresenteur(new LigneCommentaireVue(), propositionDetermination);
presenteurCommentaire.go(ligneCommentaire);
 
creerListeCommentaireRecursive(propositionDetermination.getListeCommentaires());
}
 
/**
* Affiche une liste de commentaires recursivement
* @param commentaires
*/
private void creerListeCommentaireRecursive(List<Commentaire> commentaires) {
 
for (Commentaire commentaire : commentaires) {
chargerCommentaire(commentaire);
if (commentaire.getListeCommentaires().size() > 0) {
creerListeCommentaireRecursive(commentaire.getListeCommentaires());
}
}
}
 
/**
* Affiche un commentaire
* @param commentaire
*/
private void chargerCommentaire(Commentaire commentaire) {
LigneCommentairePresenteur presenteurCommentaire = new LigneCommentairePresenteur(new LigneCommentaireVue(), commentaire);
presenteurCommentaire.go(ligneCommentaire);
}
 
/**
* Affiche un icone de début de chargement
*/
@Override
public void startChargement() {
panneauChargement.setHeight((this.getOffsetHeight() / 2) + "px");
panneauChargement.setWidth((this.getOffsetWidth() / 2) + "px");
panneauChargement.setVisible(true);
}
 
/**
* Cache l'icone de début de chargement
*/
@Override
public void stopChargement() {
panneauChargement.setVisible(false);
}
 
/**
* Affiche un message indiquant qu'il n'y a aucun commentaire à présenter
*/
@Override
public void afficherAucuneDonnees() {
aucuneDonnees.setVisible(true);
}
 
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/composants/formulaires/formulairecommentaire/formulaireCommentaire.css
New file
0,0 → 1,69
.formulaireProposition {
z-index: 1500;
padding: 50px;
background: white;
width: 300px;
margin: 0 auto;
margin-top: 75px;
}
 
.boutonProposer:hover {
background-color: #AAA
}
 
.colonneGauche,.colonneDroite {
width: 250px;
}
 
.colonneGauche {
padding-right: 30px
}
 
.colonneGauche select {
width: 100%
}
 
.colonneGauche input {
width: 95%
}
 
.commentaire {
width: 250px;
height: 100px
}
 
.propositionTaxon {
width: 100%;
height: 30px;
}
 
.boutonProposer {
border: solid 1px #AAA;
cursor: pointer;
float: left;
margin-top: 10px;
margin-bottom: 5px;
margin-right: 30px;
float: right;
background: url(./img/add.png) no-repeat 5px 7px #DDD;
padding: 5px;
padding-left: 25px;
cursor: pointer
}
 
 
.zoneNom {
width:30%;
float:left;
margin-right:5px;
}
 
.zonePrenom {
width:30%;
float:left;
}
 
.zoneEmail {
clear:left;
padding-top:5px;
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/composants/formulaires/formulairecommentaire/FormulaireCommentaireVue.ui.xml
New file
0,0 → 1,36
<!DOCTYPE ui:UiBinder SYSTEM "http://dl.google.com/gwt/DTD/xhtml.ent">
<ui:UiBinder
xmlns:ui='urn:ui:com.google.gwt.uibinder'
xmlns:g='urn:import:com.google.gwt.user.client.ui'>
<ui:with field="constants" type="org.tela_botanica.del.client.i18n.Vocabulary"/>
<ui:style src="formulaireCommentaire.css" />
<g:VerticalPanel styleName="{style.formulaireProposition}">
<g:Label text="{constants.ajouterCommentaire}" styleName="titre"/>
<g:Label text="{constants.infoProposerCommentaire}" styleName="petit"/>
<g:HTML><br /></g:HTML>
<g:HTMLPanel>
<g:HTMLPanel styleName="{style.colonneGauche}">
<g:Label text="{constants.vous}" styleName="sousTitre"/>
<g:Label text="{constants.infoVous}" styleName="petit" />
<g:HTMLPanel styleName="{style.zoneNom}">
<g:Label text="{constants.nom}" styleName="petit" />
<g:TextBox ui:field="nom"/>
</g:HTMLPanel>
<g:HTMLPanel styleName="{style.zonePrenom}">
<g:Label text="{constants.prenom}" styleName="petit" />
<g:TextBox ui:field="prenom"/>
</g:HTMLPanel>
<g:HTMLPanel styleName="{style.zoneEmail}">
<g:Label text="Votre adresse email : " styleName="petit" />
<g:TextBox ui:field="courriel" />
</g:HTMLPanel>
<g:HTML><br /></g:HTML>
<g:Label text="{constants.commentaire}" styleName="sousTitre"/>
<g:TextArea ui:field="commentaire" styleName="{style.commentaire}" />
</g:HTMLPanel>
</g:HTMLPanel>
<g:Button text="{constants.boutonProposer}" ui:field="boutonValidationCommentaire" styleName="{style.boutonProposer} arrondi"/>
</g:VerticalPanel>
</ui:UiBinder>
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/composants/formulaires/formulairecommentaire/FormulaireCommentairePresenteur.java
New file
0,0 → 1,210
package org.tela_botanica.del.client.composants.formulaires.formulairecommentaire;
 
import java.util.Date;
 
import org.tela_botanica.del.client.cache.CacheClient;
import org.tela_botanica.del.client.composants.presenteur.Presenteur;
import org.tela_botanica.del.client.composants.validation.ValidateurChampTexteNonNul;
import org.tela_botanica.del.client.modeles.Commentaire;
import org.tela_botanica.del.client.modeles.Contributeur;
import org.tela_botanica.del.client.modeles.InterventionForum;
import org.tela_botanica.del.client.modeles.Observation;
import org.tela_botanica.del.client.modeles.Utilisateur;
import org.tela_botanica.del.client.navigation.evenement.BusEvenementiel;
import org.tela_botanica.del.client.navigation.evenement.ajoutcommentaire.EvenementAjoutCommentaire;
import org.tela_botanica.del.client.services.rest.CommentaireService;
import org.tela_botanica.del.client.services.rest.async.AjoutCommentaireCallback;
 
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.event.dom.client.HasClickHandlers;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.ui.HasText;
import com.google.gwt.user.client.ui.HasWidgets;
import com.google.gwt.user.client.ui.IsWidget;
 
public class FormulaireCommentairePresenteur extends Presenteur {
 
// le meme presenteur gere les commentaires pour les observations et pour
// les possesseurs de commentaires, mais la logique est differente, d'ou la
// necessité de separer les deux objets metiers
private Observation observation;
 
private InterventionForum possesseurDeCommentaires;
 
public interface Vue extends IsWidget {
 
public HasText getNomObjet();
 
public HasText getPrenomObjet();
 
public String getNom();
 
public String getPrenom();
 
public String getCourriel();
 
public abstract HasText getCommentaire();
 
public abstract HasClickHandlers getBoutonValidationCommentaire();
 
public void afficherStyleErreurNom(String styleErreur);
 
public void supprimerStyleErreurNom(String styleErreur);
 
public void afficherStyleErreurPrenom(String styleErreur);
 
public void supprimerStyleErreurPrenom(String styleErreur);
public void afficherStyleErreurCourriel(String styleErreur);
 
public void supprimerStyleErreurCourriel(String styleErreur);
 
public void afficherStyleErreurCommentaire(String styleErreur);
 
public void supprimerStyleErreurCommentaire(String styleErreur);
 
void afficherNomPrenomEtDesactiver(String nom, String prenom, String courriel);
 
public HasText getCourrielObjet();
}
 
private Vue vue;
private CommentaireService commentaireService;
 
public FormulaireCommentairePresenteur(Observation observation, CommentaireService commentaireService, Vue vue) {
this.observation = observation;
this.vue = vue;
this.commentaireService = commentaireService;
}
 
public FormulaireCommentairePresenteur(InterventionForum possesseurDeCommentaires, CommentaireService commentaireService, Vue vue) {
this.possesseurDeCommentaires = possesseurDeCommentaires;
this.commentaireService = commentaireService;
this.vue = vue;
}
 
public void go(HasWidgets composite) {
remplirAvecInfosUtilisateur();
composite.add(vue.asWidget());
gererEvenements();
}
 
private void remplirAvecInfosUtilisateur() {
Utilisateur utilisateur = CacheClient.getInstance().getUtilisateur();
if (utilisateur.estIdentifie()) {
vue.afficherNomPrenomEtDesactiver(utilisateur.getNom(), utilisateur.getPrenom(), utilisateur.getCourriel());
}
}
 
protected void gererEvenements() {
vue.getBoutonValidationCommentaire().addClickHandler(new ClickHandler() {
 
@Override
public void onClick(ClickEvent event) {
if (!validerSaisie()) {
return;
}
 
surValidationCommentaire();
}
});
}
 
public void surValidationCommentaire() {
String texteCommentaire = vue.getCommentaire().getText();
String idUtilisateur = null;
if (CacheClient.getInstance().getUtilisateur().estIdentifie()) {
idUtilisateur = CacheClient.getInstance().getUtilisateur().getId();
}
 
Contributeur contributeur = new Contributeur(idUtilisateur, vue.getNom(), vue.getPrenom(), vue.getCourriel());
final Commentaire commentaire = new Commentaire(contributeur, new Date(), texteCommentaire);
 
if (observation != null) {
commentaire.setObservation(observation);
commentaire.setParent(null);
} else if (possesseurDeCommentaires != null) {
commentaire.setObservation(CacheClient.getInstance().getObservationCourante());
commentaire.setParent(possesseurDeCommentaires);
}
commentaireService.ajouterCommentaire(commentaire, new AjoutCommentaireCallback() {
 
@Override
public void surRetour(String idNouveauCommentaire) {
commentaire.setId(idNouveauCommentaire);
if (observation != null) {
observation.getInterventionsForum().add(commentaire);
} else if (possesseurDeCommentaires != null) {
possesseurDeCommentaires.getListeCommentaires().add(commentaire);
}
BusEvenementiel.getInstance().fireEvent(new EvenementAjoutCommentaire(commentaire));
}
 
@Override
public void surErreur(String messageErreur) {
Window.alert(messageErreur);
}
});
}
 
private boolean validerSaisie() {
 
ValidateurChampTexteNonNul validateurNom = new ValidateurChampTexteNonNul(vue.getNomObjet()) {
@Override
public void afficherStyleErreur(String styleErreur) {
vue.afficherStyleErreurNom(styleErreur);
}
 
@Override
public void supprimerStyleErreur(String styleErreur) {
vue.supprimerStyleErreurNom(styleErreur);
}
};
ValidateurChampTexteNonNul validateurPrenom = new ValidateurChampTexteNonNul(vue.getPrenomObjet()) {
@Override
public void afficherStyleErreur(String styleErreur) {
vue.afficherStyleErreurPrenom(styleErreur);
}
 
@Override
public void supprimerStyleErreur(String styleErreur) {
vue.supprimerStyleErreurPrenom(styleErreur);
}
};
ValidateurChampTexteNonNul validateurCourriel = new ValidateurChampTexteNonNul(vue.getCourrielObjet()) {
@Override
public void afficherStyleErreur(String styleErreur) {
vue.afficherStyleErreurCourriel(styleErreur);
}
 
@Override
public void supprimerStyleErreur(String styleErreur) {
vue.supprimerStyleErreurCourriel(styleErreur);
}
};
 
ValidateurChampTexteNonNul validateurCommentaire = new ValidateurChampTexteNonNul(vue.getCommentaire()) {
@Override
public void afficherStyleErreur(String styleErreur) {
vue.afficherStyleErreurCommentaire(styleErreur);
}
 
@Override
public void supprimerStyleErreur(String styleErreur) {
vue.supprimerStyleErreurCommentaire(styleErreur);
}
};
boolean nomSaisi = validateurNom.valider();
boolean prenomSaisi = validateurPrenom.valider();
boolean courrielSaisi = validateurCourriel.valider();
boolean commentaireSaisi = validateurCommentaire.valider();
 
return nomSaisi && prenomSaisi && courrielSaisi && commentaireSaisi;
}
 
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/composants/formulaires/formulairecommentaire/FormulaireCommentaireVue.java
New file
0,0 → 1,126
package org.tela_botanica.del.client.composants.formulaires.formulairecommentaire;
 
import com.google.gwt.core.client.GWT;
import com.google.gwt.uibinder.client.UiBinder;
import com.google.gwt.uibinder.client.UiField;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.HasText;
import com.google.gwt.user.client.ui.TextArea;
import com.google.gwt.user.client.ui.TextBox;
import com.google.gwt.user.client.ui.Widget;
 
public class FormulaireCommentaireVue extends Composite implements FormulaireCommentairePresenteur.Vue {
@UiField
public TextBox nom, prenom, courriel;
 
@UiField
public TextArea commentaire;
 
@UiField
public Button boutonValidationCommentaire;
 
interface FormulairePropositionUIiBinder extends UiBinder<Widget, FormulaireCommentaireVue> {
};
 
FormulairePropositionUIiBinder uiBinder = GWT.create(FormulairePropositionUIiBinder.class);
 
public FormulaireCommentaireVue() {
initWidget(uiBinder.createAndBindUi(this));
}
 
@Override
public String getNom() {
return nom.getText();
}
@Override
public String getPrenom() {
return prenom.getText();
}
 
@Override
public TextArea getCommentaire() {
return commentaire;
}
 
@Override
public Button getBoutonValidationCommentaire() {
return boutonValidationCommentaire;
}
@Override
public void afficherStyleErreurCommentaire(String styleErreur) {
commentaire.addStyleName(styleErreur);
}
 
@Override
public void supprimerStyleErreurCommentaire(String styleErreur) {
commentaire.removeStyleName(styleErreur);
}
@Override
public void afficherStyleErreurNom(String styleErreur) {
nom.addStyleName(styleErreur);
}
 
@Override
public void supprimerStyleErreurNom(String styleErreur) {
nom.removeStyleName(styleErreur);
}
@Override
public void afficherStyleErreurPrenom(String styleErreur) {
prenom.addStyleName(styleErreur);
}
 
@Override
public void supprimerStyleErreurPrenom(String styleErreur) {
prenom.removeStyleName(styleErreur);
}
@Override
public void afficherNomPrenomEtDesactiver(String nom, String prenom, String courriel) {
this.nom.setText(nom);
this.nom.setEnabled(false);
this.prenom.setText(prenom);
this.prenom.setEnabled(false);
this.courriel.setText(courriel);
this.courriel.setEnabled(false);
}
 
@Override
public HasText getNomObjet() {
return nom;
}
@Override
public HasText getPrenomObjet() {
return prenom;
}
 
@Override
public String getCourriel() {
return courriel.getText();
}
 
@Override
public void afficherStyleErreurCourriel(String styleErreur) {
courriel.addStyleName(styleErreur);
}
 
@Override
public void supprimerStyleErreurCourriel(String styleErreur) {
courriel.removeStyleName(styleErreur);
}
 
@Override
public HasText getCourrielObjet() {
return courriel;
}
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/composants/formulaires/identification/FormulaireIdentificationVue.java
New file
0,0 → 1,147
package org.tela_botanica.del.client.composants.formulaires.identification;
 
import org.tela_botanica.del.client.i18n.I18n;
import org.tela_botanica.del.client.modeles.Utilisateur;
import com.google.gwt.core.client.GWT;
import com.google.gwt.event.dom.client.HasClickHandlers;
import com.google.gwt.event.dom.client.HasKeyPressHandlers;
import com.google.gwt.uibinder.client.UiBinder;
import com.google.gwt.uibinder.client.UiField;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.HasWidgets;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.Panel;
import com.google.gwt.user.client.ui.TextBox;
import com.google.gwt.user.client.ui.Widget;
 
public class FormulaireIdentificationVue extends Composite implements FormulaireIdentificationPresenteur.Vue {
interface Binder extends UiBinder<Widget, FormulaireIdentificationVue> {
}
private static Binder uiBinder = GWT.create(Binder.class);
@UiField
Label titreSeConnecter, titreEstIdentifie, deconnecter, email, erreurIdentification, preferences;
@UiField Panel zoneFormulaire;
@UiField Button boutonOK;
@UiField TextBox login, motdepasse;
public FormulaireIdentificationVue() {
initWidget(uiBinder.createAndBindUi(this));
titreSeConnecter.setVisible(false);
erreurIdentification.setVisible(false);
}
@Override
public void ajouterVue(HasWidgets composite) {
composite.add(this.asWidget());
}
 
@Override
public HasClickHandlers getSeConnecter() {
return titreSeConnecter;
}
 
@Override
public void basculerAffichageFormulaire(boolean estConnecte) {
zoneFormulaire.setVisible(!estConnecte);
}
 
@Override
public void basculerModeConnecte(Utilisateur utilisateur) {
//Dans le mode non-connecté, on veut :
// - un bandeau vert avec ecrit Identifiez-vous
// - le formulaire courriel/password/texte et btn ok
// dans le mode connecté on veut :
// - un bandeau vert avec écrit Bienvenue
// - l'email de l'utilisateur
// - un btn déconnecter
// - un btn préférences
boolean estConnecte = utilisateur.estIdentifie();
// mode non-connecté
titreSeConnecter.setVisible(!estConnecte);
titreEstIdentifie.setVisible(estConnecte);
deconnecter.setVisible(estConnecte);
preferences.setVisible(estConnecte);
email.setText(utilisateur.getNomPrenomFormate());
email.setVisible(estConnecte);
basculerAffichageFormulaire(estConnecte);
}
 
@Override
public HasClickHandlers getBoutonOK() {
return boutonOK;
}
 
@Override
public TextBox getLogin() {
return login;
}
 
@Override
public TextBox getMotdepasse() {
return motdepasse;
}
 
@Override
public HasClickHandlers getSeDeconnecter() {
return deconnecter;
}
@Override
public void afficherErreur() {
erreurIdentification.setVisible(true);
}
@Override
public void masquerErreur() {
erreurIdentification.setVisible(false);
}
@Override
public void viderFormulaire() {
login.setText("");
motdepasse.setText("");
}
@Override
public void setErreur(String idTexte) {
String texte = "";
if (idTexte.equals("saisirLogin")) {
texte = I18n.getMessages().saisirLogin();
} else {
texte = I18n.getMessages().identificationRefus();
}
erreurIdentification.setText(texte);
}
public String getErreur() {
return erreurIdentification.getText();
}
 
@Override
public HasKeyPressHandlers getLoginHasKeyPressHandler() {
return login;
}
 
@Override
public HasKeyPressHandlers getMotdepasseHasKeyPressHandler() {
return motdepasse;
}
@Override
public HasClickHandlers getZonePreferencesClickHandler() {
return preferences;
}
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/composants/formulaires/identification/identification.css
New file
0,0 → 1,86
.zoneIdentification {
font-size:11px;
padding:30px 15px 22px 15px;
height:70px;
background: none repeat scroll 0 0 white;
border: 1px solid #99C242;
border-radius: 0 10px 10px 10px;
text-align: left;
text-decoration: none;
width: 350px;
}
 
.connecter {
background-color: #99C242;
border-radius: 0 10px 0 0;
color: white;
font-size: 12px;
padding: 5px 5px 5px 9px;
text-align: left;
text-transform: uppercase;
width: 347px;
position:absolute;
margin-left:-15px;
margin-top:-30px;
padding-right:25px
}
 
.deconnecter, .preferences {
text-decoration: underline;
color: blue;
cursor: pointer
}
 
.email, .preferences {
padding-right: 10px
}
 
.zoneFormulaire {
}
 
.login {
width:150px;
font-size:11px;
}
 
.motdepasse {
width:150px;
font-size:11px;
}
 
.erreur {
color: red;
position:absolute;
margin-top:7px;
}
 
.boutonOK {
font-size:11px;
}
 
.colonneGauche {
float:left;
padding-bottom:15px;
margin-right:5px;
width:210px;
}
 
.colonneDroite {
float:left;
margin-right:5px;
padding-bottom:15px;
}
 
.zoneUtilisateur {
text-align:center;
}
 
.infoConnexion {
text-align:center;
font-size:15px;
}
 
.infoConnexion>div:first-child {
margin-top:10px;
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/composants/formulaires/identification/FormulaireIdentificationVueBinderImplGenMessages.properties
New file
0,0 → 1,3
texteConnexion=<a href="http://www.tela-botanica.org/page:inscription">S''inscrire... </a> \
<p class="connect gris">Devenez telabotaniste et partagez votre passion pour le végétal !</p> \
<p> <a href="https://www.tela-botanica.org/wp-login.php?action=lostpassword" id="lien_inscription">Mot de passe perdu ? </a></p>
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/composants/formulaires/identification/FormulaireIdentificationVue.ui.xml
New file
0,0 → 1,34
<ui:UiBinder xmlns:ui='urn:ui:com.google.gwt.uibinder'
xmlns:g='urn:import:com.google.gwt.user.client.ui' ui:generateFormat='com.google.gwt.i18n.rebind.format.PropertiesFormat'
ui:generateLocales="default">
<ui:with field='res' type='org.tela_botanica.del.client.resources.Ressources' />
<ui:with field="constants" type="org.tela_botanica.del.client.i18n.Vocabulary" />
<ui:style src="identification.css" />
<g:HTMLPanel styleName="{style.zoneIdentification} {style.zoneFormulaire}">
<g:Label ui:field="titreSeConnecter" styleName="{style.connecter}" text="{constants.titreSeConnecter}" />
<g:Label ui:field="titreEstIdentifie" styleName="{style.connecter}" text="{constants.titreEstIdentifie}" />
<g:HTMLPanel ui:field="zoneUtilisateur">
<g:HTMLPanel styleName="{style.infoConnexion}">
<g:Label ui:field="email" styleName="{style.email}">Email</g:Label>
<g:Label ui:field="preferences" styleName="{style.preferences}" text="{constants.preferences}"></g:Label>
<g:Label ui:field="deconnecter" styleName="{style.deconnecter}" text="{constants.seDeconnecter}" />
</g:HTMLPanel>
</g:HTMLPanel>
<g:HTMLPanel ui:field="zoneFormulaire">
<g:HTMLPanel styleName="{style.colonneGauche}">
<g:Label text="{constants.login}" />
<g:TextBox ui:field="login" styleName="{style.login}" />
<g:Label text="{constants.motdepasse}" />
<g:PasswordTextBox ui:field="motdepasse" styleName="{style.motdepasse}"></g:PasswordTextBox>
<g:Button ui:field="boutonOK" styleName="{style.boutonOK}">OK</g:Button>
<g:Label ui:field="erreurIdentification" styleName="{style.erreur}"></g:Label>
</g:HTMLPanel>
<g:HTMLPanel styleName="{style.colonneDroite}">
<ui:msg key="texteConnexion">Texte de connexion</ui:msg>
</g:HTMLPanel>
</g:HTMLPanel>
</g:HTMLPanel>
</ui:UiBinder>
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/composants/formulaires/identification/FormulaireIdentificationPresenteur.java
New file
0,0 → 1,198
package org.tela_botanica.del.client.composants.formulaires.identification;
 
import org.tela_botanica.del.client.cache.CacheClient;
import org.tela_botanica.del.client.composants.fenetreoverlay.FenetreOverlayDefilanteVue;
import org.tela_botanica.del.client.composants.fenetreoverlay.FenetreOverlaySimplePresenteur;
import org.tela_botanica.del.client.composants.preferences.PreferencesPresenteur;
import org.tela_botanica.del.client.composants.preferences.PreferencesVue;
import org.tela_botanica.del.client.modeles.Utilisateur;
import org.tela_botanica.del.client.navigation.evenement.BusEvenementiel;
import org.tela_botanica.del.client.navigation.evenement.changementEtatUtilisateur.EvenementChangementEtatUtilisateur;
import org.tela_botanica.del.client.navigation.evenement.changementPreferences.EvenementChangementPreferences;
import org.tela_botanica.del.client.navigation.evenement.changementPreferences.GestionnaireEvenementChangementPreferences;
import org.tela_botanica.del.client.services.rest.PreferencesServiceConcret;
import org.tela_botanica.del.client.services.rest.UtilisateurService;
import org.tela_botanica.del.client.services.rest.async.UtilisateurCallback;
 
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.event.dom.client.HasClickHandlers;
import com.google.gwt.event.dom.client.HasKeyPressHandlers;
import com.google.gwt.event.dom.client.KeyCodes;
import com.google.gwt.event.dom.client.KeyPressEvent;
import com.google.gwt.event.dom.client.KeyPressHandler;
import com.google.gwt.user.client.ui.HasText;
import com.google.gwt.user.client.ui.HasWidgets;
import com.google.gwt.user.client.ui.IsWidget;
 
public class FormulaireIdentificationPresenteur {
FenetreOverlaySimplePresenteur fenetreModalePresenteur = null;
 
public abstract interface Vue extends IsWidget {
public void ajouterVue(HasWidgets composite);
 
public HasClickHandlers getSeConnecter();
 
public HasClickHandlers getSeDeconnecter();
 
public void basculerAffichageFormulaire(boolean estConnecte);
 
public void basculerModeConnecte(Utilisateur utilisateur);
 
public HasClickHandlers getBoutonOK();
 
public HasText getLogin();
 
public HasText getMotdepasse();
 
public void afficherErreur();
 
public void masquerErreur();
 
public void viderFormulaire();
 
public void setErreur(String idTexte);
 
public String getErreur();
 
public HasKeyPressHandlers getLoginHasKeyPressHandler();
 
public HasKeyPressHandlers getMotdepasseHasKeyPressHandler();
 
HasClickHandlers getZonePreferencesClickHandler();
}
 
private Vue vue;
private Utilisateur utilisateur;
private UtilisateurService utilisateurService;
 
public FormulaireIdentificationPresenteur(Vue vue, UtilisateurService utilisateurService) {
this.vue = vue;
this.utilisateurService = utilisateurService;
utilisateurService.obtenirUtilisateur(new UtilisateurCallback() {
@Override
public void surRetour(Utilisateur objetRetour) {
utilisateur = objetRetour;
CacheClient.getInstance().setUtilisateur(utilisateur);
rafraichir();
}
});
gererEvenements();
}
 
public void rafraichir() {
utilisateur = CacheClient.getInstance().getUtilisateur();
vue.basculerModeConnecte(this.utilisateur);
BusEvenementiel.getInstance().fireEvent(new EvenementChangementEtatUtilisateur(utilisateur));
}
 
public void gererEvenements() {
vue.getBoutonOK().addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
surTentativeLogin();
}
});
 
vue.getSeDeconnecter().addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
deconnecterUtilisateur();
}
});
 
vue.getLoginHasKeyPressHandler().addKeyPressHandler(creerGestionnaireEvenementToucheEntree());
vue.getMotdepasseHasKeyPressHandler().addKeyPressHandler(creerGestionnaireEvenementToucheEntree());
vue.getZonePreferencesClickHandler().addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
if(utilisateur.estIdentifie()) {
PreferencesPresenteur preferencesPresenteur = new PreferencesPresenteur(new PreferencesVue(), new PreferencesServiceConcret());
fenetreModalePresenteur = new FenetreOverlaySimplePresenteur(new FenetreOverlayDefilanteVue());
fenetreModalePresenteur.ouvrirFenetreModale(preferencesPresenteur);
}
}
});
BusEvenementiel.getInstance().addHandler(EvenementChangementPreferences.TYPE, new GestionnaireEvenementChangementPreferences() {
@Override
public void onChangementPreferences(EvenementChangementPreferences event) {
if(fenetreModalePresenteur != null && fenetreModalePresenteur.fenetreModaleEstOuverte()) {
fenetreModalePresenteur.fermerFenetreModale();
}
}
});
}
 
private void surTentativeLogin() {
String login = vue.getLogin().getText();
String motdepasse = vue.getMotdepasse().getText();
 
if (login.equals("") || motdepasse.equals("")) {
gererErreur("saisirLogin");
} else {
connecterUtilisateur(login, motdepasse);
}
}
 
public KeyPressHandler creerGestionnaireEvenementToucheEntree() {
return new KeyPressHandler() {
public void onKeyPress(KeyPressEvent event) {
if (event.getNativeEvent().getKeyCode() == KeyCodes.KEY_ENTER) {
surTentativeLogin();
}
}
};
}
 
public void gererErreur(String erreur) {
vue.setErreur(erreur);
vue.afficherErreur();
}
 
public void connecterUtilisateur(String login, final String motdepasse) {
 
utilisateurService.connecterUtilisateur(login, motdepasse, new UtilisateurCallback() {
 
public void surErreur(String message) {
vue.setErreur("identificationRefus");
vue.afficherErreur();
}
 
@Override
public void surRetour(Utilisateur objetRetour) {
utilisateur = objetRetour;
CacheClient.getInstance().setUtilisateur(utilisateur);
if (utilisateur.estIdentifie()) {
vue.masquerErreur();
rafraichir();
vue.viderFormulaire();
}
}
});
}
 
public void deconnecterUtilisateur() {
utilisateurService.deconnecterUtilisateur(new UtilisateurCallback() {
 
public void surErreur(String message) {
vue.setErreur("identificationRefus");
vue.afficherErreur();
}
 
@Override
public void surRetour(Utilisateur objetRetour) {
utilisateur = objetRetour;
CacheClient.getInstance().setUtilisateur(utilisateur);
rafraichir();
}
});
}
 
public void go(HasWidgets composite) {
vue.ajouterVue(composite);
}
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/composants/formulaires/formulaireproposition/formulaireProposition.css
New file
0,0 → 1,71
.formulaireProposition {
z-index: 1500;
padding: 30px;
padding-right: 21px;
padding-top: 20px;
background: white;
width: 370px;
margin: 0 auto;
margin-top: 75px;
padding-bottom:50px;
}
 
.boutonProposer:hover {
background-color: #AAA
}
 
.colonneGauche,.colonneDroite {
width: 300px;
}
 
.colonneGauche {
padding-right: 30px
}
 
.colonneGauche select {
width: 100%
}
 
.colonneGauche input {
width: 95%
}
 
.commentaire {
width: 260px;
height: 100px;
}
 
.propositionTaxon {
width: 100%;
height: 30px;
}
 
.boutonProposer {
border: solid 1px #AAA;
cursor: pointer;
float: left;
margin-top: 10px;
margin-bottom: 5px;
margin-right: 5px;
float: right;
background: url(./img/add.png) no-repeat 5px 7px #DDD;
padding: 5px;
padding-left: 25px;
cursor: pointer
}
 
.zoneNom {
width:30%;
float:left;
margin-right:5px;
}
 
.zonePrenom {
width:30%;
float:left;
}
 
.zoneEmail {
clear:left;
padding-top:5px;
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/composants/formulaires/formulaireproposition/FormulairePropositionVue.ui.xml
New file
0,0 → 1,42
<!DOCTYPE ui:UiBinder SYSTEM "http://dl.google.com/gwt/DTD/xhtml.ent">
<ui:UiBinder
xmlns:ui='urn:ui:com.google.gwt.uibinder'
xmlns:g='urn:import:com.google.gwt.user.client.ui'
xmlns:vues="urn:import:org.tela_botanica.del.client.composants.forum">
<ui:with field="constants" type="org.tela_botanica.del.client.i18n.Vocabulary"/>
<ui:style src="formulaireProposition.css" />
<g:HTMLPanel styleName="{style.formulaireProposition}">
<g:Label text="{constants.proposerSaDetermination}" styleName="titre"/>
<g:HTML><br /></g:HTML>
<g:HTMLPanel styleName="{style.colonneGauche}">
<g:Label ui:field="labelnomPrenom" text="{constants.vous}" styleName="sousTitre"/>
<g:HTMLPanel styleName="{style.zoneNom}">
<g:Label text="{constants.nom}" styleName="petit" />
<g:TextBox ui:field="nom"/>
</g:HTMLPanel>
<g:HTMLPanel styleName="{style.zonePrenom}">
<g:Label text="{constants.prenom}" styleName="petit" />
<g:TextBox ui:field="prenom"/>
</g:HTMLPanel>
<g:HTMLPanel styleName="{style.zoneEmail}">
<g:Label text="Votre adresse email : " styleName="petit" />
<g:TextBox ui:field="courriel" />
</g:HTMLPanel>
<g:HTML><br /></g:HTML>
<g:Label text="{constants.choisirUnTaxon}" styleName="sousTitre"/>
<g:Label text="{constants.referentiel}" styleName="petit"/>
<g:ListBox ui:field="referentiel" />
<g:HTML HTML="{constants.infoTaxon}" styleName="petit"/>
<g:LayoutPanel ui:field="propositionTaxon" styleName="{style.propositionTaxon}" />
<g:HTML><br /></g:HTML>
<g:Label text="{constants.commentaire}" styleName="sousTitre"/>
<g:TextArea ui:field="commentaires" styleName="{style.commentaire}" />
<g:Button text="{constants.boutonProposer}" ui:field="boutonValidationProposition" styleName="{style.boutonProposer} arrondi"/>
</g:HTMLPanel>
</g:HTMLPanel>
 
</ui:UiBinder>
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/composants/formulaires/formulaireproposition/FormulairePropositionPresenteur.java
New file
0,0 → 1,293
package org.tela_botanica.del.client.composants.formulaires.formulaireproposition;
 
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
 
import org.tela_botanica.del.client.cache.CacheClient;
import org.tela_botanica.del.client.composants.formulaires.autocompletion.AutoCompletionComboBoxPresenteur;
import org.tela_botanica.del.client.composants.formulaires.autocompletion.AutoCompletionComboBoxVue;
import org.tela_botanica.del.client.composants.presenteur.Presenteur;
import org.tela_botanica.del.client.composants.validation.ValidateurChampTexteNonNul;
import org.tela_botanica.del.client.config.Config;
import org.tela_botanica.del.client.i18n.I18n;
import org.tela_botanica.del.client.modeles.Contributeur;
import org.tela_botanica.del.client.modeles.InterventionForum;
import org.tela_botanica.del.client.modeles.PropositionDetermination;
import org.tela_botanica.del.client.modeles.Utilisateur;
import org.tela_botanica.del.client.navigation.evenement.BusEvenementiel;
import org.tela_botanica.del.client.navigation.evenement.ajoutdetermination.EvenementAjoutDetermination;
import org.tela_botanica.del.client.services.ReferentielService;
import org.tela_botanica.del.client.services.rest.PropositionDeterminationService;
import org.tela_botanica.del.client.services.rest.async.PropositionDeterminationCallBack;
import org.tela_botanica.del.client.utils.InfosNomPourAutocompletion;
import org.tela_botanica.del.client.utils.UtilitairesAutoCompletionService;
 
import com.google.gwt.core.client.GWT;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.event.dom.client.HasClickHandlers;
import com.google.gwt.http.client.Response;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.ui.HasText;
import com.google.gwt.user.client.ui.HasWidgets;
import com.google.gwt.user.client.ui.IsWidget;
 
public class FormulairePropositionPresenteur extends Presenteur {
 
public interface Vue extends IsWidget {
public HasText getObjetNom();
 
public HasText getObjetPrenom();
 
public HasWidgets getPropositionTaxon();
 
public HasText getCommentaires();
 
public HasClickHandlers getBoutonValidationProposition();
 
public void afficherNomPrenomEtDesactiver(String nom, String prenom);
 
public String getCourriel();
 
public void afficherEmailEtDesactiver(String courriel);
 
public String getNom();
 
public String getPrenom();
 
public void afficherStyleErreurNom(String styleErreur);
 
public void supprimerStyleErreurNom(String styleErreur);
 
public void afficherStyleErreurPrenom(String styleErreur);
 
public void supprimerStyleErreurPrenom(String styleErreur);
public void afficherPropositionDejaEffectuée(String taxon);
 
public HasText getObjetCourriel();
public void setReferentiel(String referentiel);
public String getReferentiel();
 
public void afficherStyleErreurCourriel(String styleErreur);
 
void supprimerStyleErreurCourriel(String styleErreur);
 
void remplirListeReferentiels(Map<String, String> listeReferentiels);
}
 
private Vue vue;
private Config config;
private AutoCompletionComboBoxPresenteur autoCompletionNomTaxonsPresenteur;
private PropositionDeterminationService propositionDeterminationService;
private Map<String, InfosNomPourAutocompletion> cacheTaxons = new HashMap<String, InfosNomPourAutocompletion>();
 
public FormulairePropositionPresenteur(Vue vue, PropositionDeterminationService propositionDeterminationService) {
this.vue = vue;
this.propositionDeterminationService=propositionDeterminationService;
config = new Config();
creerCompletionTaxons();
remplirAvecInfosUtilisateur();
}
 
private void remplirAvecInfosUtilisateur() {
Utilisateur utilisateur = CacheClient.getInstance().getUtilisateur();
if (utilisateur.estIdentifie()) {
vue.afficherNomPrenomEtDesactiver(utilisateur.getNom(), utilisateur.getPrenom());
vue.afficherEmailEtDesactiver(utilisateur.getCourriel());
}
}
 
private void creerCompletionTaxons() {
String url = this.config.getServiceBaseUrl() + "nomstaxons";
vue.remplirListeReferentiels(ReferentielService.getReferentiels());
final String referentiel = CacheClient.getInstance().getObservationCourante().getReferentiel();
 
// découpage pseudo-intelligent du nom de référentiel
String referentielPredefini;
int positionDeuxPoints = referentiel.indexOf(':');
if (positionDeuxPoints == -1) {
referentielPredefini = referentiel;
} else {
referentielPredefini = referentiel.substring(0, positionDeuxPoints);
}
if (referentielPredefini.equals("autre") || referentielPredefini.equals("")) {
referentielPredefini = "bdtfx"; // évite de saisir des noms latins en dur et de perdre le nn
}
vue.setReferentiel(referentielPredefini);
autoCompletionNomTaxonsPresenteur = new AutoCompletionComboBoxPresenteur(new AutoCompletionComboBoxVue(), url) {
protected String effectuerPreTraitementChaineRequete(String requete) {
// si aucun référentiel selectionné, pas de requete
if(vue.getReferentiel() != null && !vue.getReferentiel().equals("") && !vue.getReferentiel().equals("tous")) {
// découpage pseudo-intelligent du nom de référentiel
String refFmt;
int positionDeuxPoints = vue.getReferentiel().indexOf(':');
if (positionDeuxPoints == -1) {
refFmt = vue.getReferentiel();
} else {
refFmt = vue.getReferentiel().substring(0, positionDeuxPoints);
}
requete = "?masque.nom=" + requete + "&masque.referentiel=" + refFmt;
return requete;
} else {
return null;
}
}
 
@Override
protected InfosNomPourAutocompletion[] parserResultatRequete(Response response) {
cacheTaxons = UtilitairesAutoCompletionService.extraireTaxonsNumNomsResultatRetourSimple(response);
return UtilitairesAutoCompletionService.parserResultatRetourSimple(response);
}
};
}
 
public void go(HasWidgets composite) {
autoCompletionNomTaxonsPresenteur.go(vue.getPropositionTaxon());
composite.add(vue.asWidget());
gererEvenements();
}
 
protected void gererEvenements() {
vue.getBoutonValidationProposition().addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
 
if (!validerSaisieProposition()) {
return;
} else {
final PropositionDetermination propositionAjoutee = collecterValeursSaisieProposition();
if(verifierPropositionDejaAjoutee(propositionAjoutee)){
BusEvenementiel.getInstance().fireEvent(new EvenementAjoutDetermination(propositionAjoutee));
vue.afficherPropositionDejaEffectuée(propositionAjoutee.getEspece());
return;
}
 
propositionDeterminationService.ajouterProposition(propositionAjoutee, new PropositionDeterminationCallBack() {
 
@Override
public void surRetour(String idNouvelleProposition) {
propositionAjoutee.setId(idNouvelleProposition);
CacheClient.getInstance().getObservationCourante().ajouterPropositionDetermination(propositionAjoutee);
EvenementAjoutDetermination evenementAjoutDetermination = new EvenementAjoutDetermination(propositionAjoutee);
BusEvenementiel.getInstance().fireEvent(evenementAjoutDetermination);
}
 
});
}
}
});
}
 
private boolean verifierPropositionDejaAjoutee(PropositionDetermination propositionDetermination){
for(InterventionForum interventionForum: CacheClient.getInstance().getObservationCourante().getInterventionsForum()){
if(interventionForum instanceof PropositionDetermination){
if(((PropositionDetermination)interventionForum).getEspece().trim().equals(propositionDetermination.getEspece().trim())){
return true;
}
}
}
return false;
}
private boolean validerSaisieProposition() {
 
ValidateurChampTexteNonNul validateurNom = new ValidateurChampTexteNonNul(vue.getObjetNom()) {
@Override
public void afficherStyleErreur(String styleErreur) {
vue.afficherStyleErreurNom(styleErreur);
}
 
@Override
public void supprimerStyleErreur(String styleErreur) {
vue.supprimerStyleErreurNom(styleErreur);
}
};
 
ValidateurChampTexteNonNul validateurPrenom = new ValidateurChampTexteNonNul(vue.getObjetPrenom()) {
@Override
public void afficherStyleErreur(String styleErreur) {
vue.afficherStyleErreurPrenom(styleErreur);
}
 
@Override
public void supprimerStyleErreur(String styleErreur) {
vue.supprimerStyleErreurPrenom(styleErreur);
}
};
ValidateurChampTexteNonNul validateurCourriel = new ValidateurChampTexteNonNul(vue.getObjetCourriel()) {
@Override
public void afficherStyleErreur(String styleErreur) {
vue.afficherStyleErreurCourriel(styleErreur);
}
 
@Override
public void supprimerStyleErreur(String styleErreur) {
vue.supprimerStyleErreurCourriel(styleErreur);
}
};
 
ValidateurChampTexteNonNul validateurTaxon = new ValidateurChampTexteNonNul(autoCompletionNomTaxonsPresenteur.getAutoCompletionComboBoxVue().getSuggestBox()) {
@Override
public void afficherStyleErreur(String styleErreur) {
autoCompletionNomTaxonsPresenteur.afficherStyleErreur(styleErreur);
}
 
@Override
public void supprimerStyleErreur(String styleErreur) {
autoCompletionNomTaxonsPresenteur.supprimerStyleErreur(styleErreur);
}
};
 
boolean nomSaisi = validateurNom.valider();
boolean prenomSaisi = validateurPrenom.valider();
boolean courrielSaisi = validateurCourriel.valider();
boolean taxonSaisi = validateurTaxon.valider();
String taxonSaisiStr = autoCompletionNomTaxonsPresenteur.getValeur();
boolean utilisateurConfirme = true;
// Si le nom est vide une erreur a déjà été déclenchée plus haut (donc pas la peine de tester cacheTaxons)
if(!taxonSaisiStr.trim().isEmpty() && !cacheTaxons.containsKey(taxonSaisiStr.trim())) {
utilisateurConfirme = Window.confirm(I18n.getVocabulary().attentionPropositionTaxon());
}
 
return nomSaisi && prenomSaisi && courrielSaisi && taxonSaisi && utilisateurConfirme;
}
 
private PropositionDetermination collecterValeursSaisieProposition() {
PropositionDetermination propositionAjoutee = new PropositionDetermination(CacheClient.getInstance().getObservationCourante());
propositionAjoutee.setId(CacheClient.getInstance().getObservationCourante().getId());
 
String idUtilisateur = null;
if (CacheClient.getInstance().getUtilisateur().estIdentifie()) {
idUtilisateur = CacheClient.getInstance().getUtilisateur().getId();
}
 
Contributeur contributeur = new Contributeur(idUtilisateur, vue.getNom(), vue.getPrenom(), vue.getCourriel());
propositionAjoutee.setContributeur(contributeur);
propositionAjoutee.setDate(new Date());
String nomTaxon = autoCompletionNomTaxonsPresenteur.getValeur();
propositionAjoutee.setEspece(nomTaxon);
if(cacheTaxons.containsKey(nomTaxon.trim())) {
propositionAjoutee.setNumNomenclatural("" + cacheTaxons.get(nomTaxon.trim()).getNn());
}
if(vue.getReferentiel() != "tous") {
propositionAjoutee.setReferentiel(vue.getReferentiel());
}
if (vue.getCommentaires().getText() != "") {
String contenuCommentaire = vue.getCommentaires().getText();
propositionAjoutee.setCommentaire(contenuCommentaire);
}
 
return propositionAjoutee;
}
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/composants/formulaires/formulaireproposition/FormulairePropositionVue.java
New file
0,0 → 1,168
package org.tela_botanica.del.client.composants.formulaires.formulaireproposition;
 
import java.util.Iterator;
import java.util.Map;
 
import org.tela_botanica.del.client.i18n.I18n;
 
import com.google.gwt.core.client.GWT;
import com.google.gwt.uibinder.client.UiBinder;
import com.google.gwt.uibinder.client.UiField;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.HasText;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.LayoutPanel;
import com.google.gwt.user.client.ui.ListBox;
import com.google.gwt.user.client.ui.TextArea;
import com.google.gwt.user.client.ui.TextBox;
import com.google.gwt.user.client.ui.Widget;
 
public class FormulairePropositionVue extends Composite implements FormulairePropositionPresenteur.Vue {
 
@UiField
public TextBox nom, prenom, courriel;
 
@UiField
public LayoutPanel propositionTaxon;
 
@UiField
public TextArea commentaires;
 
@UiField
public Button boutonValidationProposition;
@UiField
public Label labelnomPrenom;
@UiField
ListBox referentiel;
 
interface FormulairePropositionUIiBinder extends UiBinder<Widget, FormulairePropositionVue> {
};
 
FormulairePropositionUIiBinder uiBinder = GWT.create(FormulairePropositionUIiBinder.class);
 
public FormulairePropositionVue() {
initWidget(uiBinder.createAndBindUi(this));
}
 
 
@Override
public LayoutPanel getPropositionTaxon() {
return propositionTaxon;
}
 
@Override
public TextArea getCommentaires() {
return commentaires;
}
 
@Override
public Button getBoutonValidationProposition() {
return boutonValidationProposition;
}
 
@Override
public void afficherStyleErreurNom(String styleErreur) {
nom.addStyleName(styleErreur);
}
 
@Override
public void supprimerStyleErreurNom(String styleErreur) {
nom.removeStyleName(styleErreur);
}
@Override
public void afficherStyleErreurPrenom(String styleErreur) {
prenom.addStyleName(styleErreur);
}
 
@Override
public void supprimerStyleErreurPrenom(String styleErreur) {
prenom.removeStyleName(styleErreur);
}
@Override
public void afficherNomPrenomEtDesactiver(String nom, String prenom) {
this.nom.setText(nom);
this.prenom.setText(prenom);
this.nom.setEnabled(false);
this.prenom.setEnabled(false);
}
@Override
public void afficherEmailEtDesactiver(String courriel) {
this.courriel.setText(courriel);
this.courriel.setEnabled(false);
}
public void afficherPropositionDejaEffectuée(String taxon)
{
Window.alert(I18n.getMessages().propositionDejaEffectuee(taxon));
}
 
@Override
public String getCourriel() {
return courriel.getText();
}
 
@Override
public String getNom() {
return nom.getText();
}
 
@Override
public String getPrenom() {
return prenom.getText();
}
 
 
@Override
public HasText getObjetNom() {
return this.nom;
}
@Override
public HasText getObjetPrenom() {
return this.prenom;
}
 
 
@Override
public HasText getObjetCourriel() {
return this.courriel;
}
 
@Override
public void afficherStyleErreurCourriel(String styleErreur) {
courriel.setStyleName(styleErreur);
}
@Override
public void supprimerStyleErreurCourriel(String styleErreur) {
courriel.removeStyleName(styleErreur);
}
 
@Override
public void remplirListeReferentiels(Map<String, String> listeReferentiels) {
for (Iterator<String> iterator = listeReferentiels.keySet().iterator(); iterator.hasNext();) {
String codeRef = iterator.next();
referentiel.addItem(listeReferentiels.get(codeRef), codeRef);
}
}
@Override
public void setReferentiel(String codeReferentiel) {
for(int i = 0; i < referentiel.getItemCount(); i++) {
if(referentiel.getValue(i).equals(codeReferentiel)) {
referentiel.setSelectedIndex(i);
}
}
}
 
@Override
public String getReferentiel() {
return referentiel.getValue(referentiel.getSelectedIndex());
}
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/composants/formulaires/autocompletion/AutoCompletionComboBoxVue.java
New file
0,0 → 1,105
package org.tela_botanica.del.client.composants.formulaires.autocompletion;
 
import org.tela_botanica.del.client.utils.InfosNomPourAutocompletion;
import org.tela_botanica.del.client.utils.TBSuggestOracle;
 
import com.google.gwt.core.client.Callback;
import com.google.gwt.event.dom.client.HasKeyPressHandlers;
import com.google.gwt.event.logical.shared.HasSelectionHandlers;
import com.google.gwt.user.client.Event;
import com.google.gwt.user.client.ui.HasWidgets;
import com.google.gwt.user.client.ui.LayoutPanel;
import com.google.gwt.user.client.ui.SuggestBox;
import com.google.gwt.user.client.ui.SuggestOracle;
import com.google.gwt.user.client.ui.SuggestOracle.Suggestion;
 
public class AutoCompletionComboBoxVue extends LayoutPanel implements AutoCompletionComboBoxPresenteur.Vue {
 
TBSuggestOracle msu = new TBSuggestOracle();
SuggestBox suggestions = new SuggestBox(msu);
Callback<String, String> surCopierColler = null;
 
public AutoCompletionComboBoxVue() {
add(suggestions);
setHeight("25px");
setWidth("100%");
sinkEvents(Event.ONPASTE);
}
@Override
public SuggestBox getSuggestBox() {
return suggestions;
}
public void remplirListe(InfosNomPourAutocompletion[] listePropositions) {
msu.clear();
for (int i = 0; i < listePropositions.length; i++) {
msu.add(listePropositions[i]);
}
}
@Override
public void afficherSuggestions(SuggestOracle.Request requeteOracle, SuggestOracle.Callback callBackOracle) {
msu.requestSuggestions(requeteOracle, callBackOracle);
}
@Override
public void afficherListeDeroulante() {
suggestions.showSuggestionList();
}
public void nettoyer() {
suggestions.setText("");
}
public void setValeur(String taxon) {
suggestions.setValue(taxon);
}
 
@Override
public HasKeyPressHandlers getSuggestBoxHasKeyPressHandlers() {
return suggestions;
}
@Override
public HasSelectionHandlers<Suggestion> getSuggestBoxHasSelectionChangeHandlers() {
return suggestions;
}
 
@Override
public String getValeur() {
return suggestions.getText();
}
 
@Override
public void ajouterVue(HasWidgets composite) {
composite.add(this.asWidget());
}
 
@Override
public void afficherStyleErreur(String styleErreur) {
suggestions.addStyleName(styleErreur);
}
 
@Override
public void supprimerStyleErreur(String styleErreur) {
suggestions.removeStyleName(styleErreur);
}
public void onBrowserEvent(Event event) {
super.onBrowserEvent(event);
switch (event.getTypeInt()) {
case Event.ONPASTE: {
if(surCopierColler != null) {
surCopierColler.onSuccess(suggestions.getValueBox().getValue());
}
}
}
}
 
@Override
public void setHandlerCopierColler(Callback<String, String> cb) {
surCopierColler = cb;
}
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/composants/formulaires/autocompletion/AutoCompletionComboBoxPresenteur.java
New file
0,0 → 1,208
package org.tela_botanica.del.client.composants.formulaires.autocompletion;
 
import org.tela_botanica.del.client.utils.InfosNomPourAutocompletion;
 
import com.google.gwt.core.client.Callback;
import com.google.gwt.event.dom.client.HasKeyPressHandlers;
import com.google.gwt.event.dom.client.KeyPressEvent;
import com.google.gwt.event.dom.client.KeyPressHandler;
import com.google.gwt.event.logical.shared.HasSelectionHandlers;
import com.google.gwt.event.logical.shared.SelectionEvent;
import com.google.gwt.event.logical.shared.SelectionHandler;
import com.google.gwt.http.client.Request;
import com.google.gwt.http.client.RequestBuilder;
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.user.client.Timer;
import com.google.gwt.user.client.ui.HasText;
import com.google.gwt.user.client.ui.HasWidgets;
import com.google.gwt.user.client.ui.IsWidget;
import com.google.gwt.user.client.ui.SuggestOracle;
import com.google.gwt.user.client.ui.SuggestOracle.Suggestion;
 
public abstract class AutoCompletionComboBoxPresenteur {
public interface Vue extends IsWidget {
public void ajouterVue(HasWidgets composite);
public HasKeyPressHandlers getSuggestBoxHasKeyPressHandlers();
public String getValeur();
public void remplirListe(InfosNomPourAutocompletion[] suggestions);
public void afficherSuggestions(SuggestOracle.Request request,SuggestOracle.Callback response);
public void afficherListeDeroulante();
public void nettoyer();
public void setValeur(String valeur);
public HasSelectionHandlers<Suggestion> getSuggestBoxHasSelectionChangeHandlers();
public HasText getSuggestBox();
public void afficherStyleErreur(String styleErreur);
public void supprimerStyleErreur(String styleErreur);
public void setHandlerCopierColler(Callback<String, String> cb);
}
private Vue autoCompletionComboBoxVue;
SuggestOracle.Request requeteOracle;
SuggestOracle.Callback callBackOracle;
Timer suggestionTimer = null;
int tempsAvantRequete = 500;
String urlRequete = "";
public AutoCompletionComboBoxPresenteur(Vue vue, String urlRequete) {
this.autoCompletionComboBoxVue = vue;
this.urlRequete = urlRequete;
gererEvenements();
}
public void go(HasWidgets composite) {
autoCompletionComboBoxVue.ajouterVue(composite);
}
public void gererEvenements() {
autoCompletionComboBoxVue.getSuggestBoxHasKeyPressHandlers().addKeyPressHandler(new KeyPressHandler() {
public void onKeyPress(KeyPressEvent event) {
if(event.getUnicodeCharCode() != 0) {
gererTimer();
}
}
});
requeteOracle = new SuggestOracle.Request();
callBackOracle = new SuggestOracle.Callback() {
 
public void onSuggestionsReady(SuggestOracle.Request request, SuggestOracle.Response response) {
autoCompletionComboBoxVue.afficherListeDeroulante();
}
};
autoCompletionComboBoxVue.getSuggestBoxHasSelectionChangeHandlers().addSelectionHandler(new SelectionHandler<SuggestOracle.Suggestion>(){
@Override
public void onSelection(SelectionEvent<Suggestion> event) {
surSelectionSuggestion(event.getSelectedItem().getReplacementString());
}
});
autoCompletionComboBoxVue.setHandlerCopierColler(new Callback<String, String>() {
@Override
public void onSuccess(String result) {
gererTimer();
}
@Override
public void onFailure(String reason) {
// rien à faire ça n'échoue jamais
}
});
}
public void gererTimer() {
if(suggestionTimer == null) {
suggestionTimer = new Timer() {
public void run() {
requeteSuggestions();
}
};
suggestionTimer.schedule(tempsAvantRequete);
} else {
suggestionTimer.schedule(tempsAvantRequete);
}
}
public void setTempsAvantRequete(int temps) {
tempsAvantRequete = temps;
}
public int getTempsAvantRequete(int temps) {
return tempsAvantRequete;
}
public String getValeur() {
return autoCompletionComboBoxVue.getValeur();
}
public void setValeur(String taxon) {
autoCompletionComboBoxVue.setValeur(taxon);
}
public void nettoyer() {
autoCompletionComboBoxVue.nettoyer();
}
public void requeteSuggestions() {
// Suppression des espaces et caractères inutiles
String valeur = autoCompletionComboBoxVue.getValeur().trim();
final String requete = URL.encodeQueryString(valeur);
String requeteAjax = effectuerPreTraitementChaineRequete(requete);
// ceci permet au composant qui utilise l'autocomplétion
// d'annuler une requete
if(requeteAjax == null) {
return;
}
String urlProxy = urlRequete+requeteAjax;
RequestBuilder rb = new RequestBuilder(RequestBuilder.GET, urlProxy) ;
try {
rb.sendRequest(null, new RequestCallback() {
public void onError(final Request request, final Throwable exception) {
// TODO Auto-generated method stub
}
 
public void onResponseReceived(final Request request,
final Response response) {
surReponseRequete(requete, response);
}
}) ;
 
} catch (RequestException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public void surReponseRequete(String requete, Response response) {
InfosNomPourAutocompletion[] valeurs = parserResultatRequete(response);
autoCompletionComboBoxVue.remplirListe(valeurs);
requeteOracle.setQuery(requete);
autoCompletionComboBoxVue.afficherSuggestions(requeteOracle, callBackOracle);
}
protected void surSelectionSuggestion(String suggestion) {
return;
}
/**
* Permet d'intervenir sur la chaine tapée par l'utilisateur avant que celle-ci ne soit passée
* à la requête asynchrone pour pouvoir la formater (pour mettre en minuscule, séparer des termes)
* par défaut renvoie la chaine telle quelle, à surcharger au besoin
* @param String requete chaine de recherche contenant ce que l'utilisateur à tapé
* @return String une chaine transformée
*/
protected String effectuerPreTraitementChaineRequete(String requete) {
return requete;
}
/**
* Parse les résultats de la requete afin de pouvoir les utiliser à implémenter par le
* composants qui crée la combobox selon le contexte et le web service appelé.
* @param Response la réponse à la requête asynchrone
* @return String[] le tableau des suggestions qui sera affiché dans la combobox
*/
protected abstract InfosNomPourAutocompletion[] parserResultatRequete(Response response);
 
public Vue getAutoCompletionComboBoxVue() {
return autoCompletionComboBoxVue;
}
public void afficherStyleErreur(String styleErreur) {
autoCompletionComboBoxVue.afficherStyleErreur(styleErreur);
}
public void supprimerStyleErreur(String styleErreur) {
autoCompletionComboBoxVue.supprimerStyleErreur(styleErreur);
}
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/composants/forum/interventions/ForumInterventionPresenteur.java
New file
0,0 → 1,362
package org.tela_botanica.del.client.composants.forum.interventions;
 
 
import org.tela_botanica.del.client.cache.CacheClient;
import org.tela_botanica.del.client.composants.fenetreoverlay.FenetreOverlayDefilanteVue;
import org.tela_botanica.del.client.composants.fenetreoverlay.FenetreOverlaySimplePresenteur;
import org.tela_botanica.del.client.composants.formulaires.formulairecommentaire.FormulaireCommentairePresenteur;
import org.tela_botanica.del.client.composants.formulaires.formulairecommentaire.FormulaireCommentaireVue;
import org.tela_botanica.del.client.composants.forum.ArbreCommentairePresenteur;
import org.tela_botanica.del.client.composants.forum.ArbreCommentaireVue;
import org.tela_botanica.del.client.composants.votes.barrerepartition.BarreRepartitionVotePresenteur;
import org.tela_botanica.del.client.composants.votes.barrerepartition.BarreRepartitionVoteVue;
import org.tela_botanica.del.client.composants.votes.details.DetailListeVotesDeterminationPresenteur;
import org.tela_botanica.del.client.composants.votes.details.DetailListeVotesDeterminationVue;
import org.tela_botanica.del.client.config.Config;
import org.tela_botanica.del.client.i18n.I18n;
import org.tela_botanica.del.client.modeles.Commentaire;
import org.tela_botanica.del.client.modeles.InterventionForum;
import org.tela_botanica.del.client.modeles.MoyenneVote;
import org.tela_botanica.del.client.modeles.PropositionDetermination;
import org.tela_botanica.del.client.modeles.Utilisateur;
import org.tela_botanica.del.client.navigation.evenement.BusEvenementiel;
import org.tela_botanica.del.client.navigation.evenement.ajoutcommentaire.EvenementAjoutCommentaire;
import org.tela_botanica.del.client.navigation.evenement.ajoutcommentaire.GestionnaireEvenementAjoutCommentaire;
import org.tela_botanica.del.client.navigation.evenement.ajoutdetermination.EvenementAjoutDetermination;
import org.tela_botanica.del.client.navigation.evenement.ajoutdetermination.GestionnaireEvenementAjoutDetermination;
import org.tela_botanica.del.client.navigation.evenement.changementEtatUtilisateur.EvenementChangementEtatUtilisateur;
import org.tela_botanica.del.client.navigation.evenement.changementEtatUtilisateur.GestionnaireEvenementChangementEtatUtilisateur;
import org.tela_botanica.del.client.navigation.evenement.suppressioncommentaire.EvenementSuppressionCommentaire;
import org.tela_botanica.del.client.navigation.evenement.suppressiondetermination.EvenementSuppressionDetermination;
import org.tela_botanica.del.client.navigation.evenement.validationPropositionDetermination.EvenementValidationPropositionDetermination;
import org.tela_botanica.del.client.services.CalculVoteDeterminationService;
import org.tela_botanica.del.client.services.rest.CommentaireService;
import org.tela_botanica.del.client.services.rest.CommentaireServiceConcret;
import org.tela_botanica.del.client.services.rest.PropositionDeterminationService;
import org.tela_botanica.del.client.services.rest.PropositionDeterminationServiceConcret;
import org.tela_botanica.del.client.services.rest.VoteDeterminationServiceConcret;
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.utils.ModerationUtils;
 
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.event.dom.client.HasClickHandlers;
import com.google.gwt.event.dom.client.HasMouseOutHandlers;
import com.google.gwt.event.dom.client.HasMouseOverHandlers;
import com.google.gwt.event.dom.client.MouseOutEvent;
import com.google.gwt.event.dom.client.MouseOutHandler;
import com.google.gwt.event.dom.client.MouseOverEvent;
import com.google.gwt.event.dom.client.MouseOverHandler;
import com.google.gwt.event.shared.HandlerRegistration;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.ui.HasWidgets;
import com.google.gwt.user.client.ui.IsWidget;
 
public class ForumInterventionPresenteur {
 
public interface Vue extends IsWidget {
void ajouterInterventionDetermination(PropositionDetermination determination, IsWidget barreRepartition, IsWidget arbreCommentaires);
void ajouterInterventionCommentaire(Commentaire commentaire, IsWidget arbreCommentaires);
HasClickHandlers getRepondre();
HasWidgets getEnfants();
HasClickHandlers getLienSuppression();
void afficherLienSuppression();
void cacherLienSuppression();
HasMouseOverHandlers getConteneurInterventionMouseOver();
HasMouseOutHandlers getConteneurInterventionMouseOut();
HasClickHandlers getEspece();
void ajouterLienEspece();
HasClickHandlers getAuteur();
void ajouterLienAuteur();
void cacherDeterminationProposee();
void ajouterLienVotes();
void masquerLienVotes();
void setNbVotes(int votes);
public HasClickHandlers getZoneNbVotes();
public HasClickHandlers getBoutonValidationTaxon();
void cacherBoutonValidationTaxon();
void afficherBoutonValidationTaxon();
}
 
private Vue vue;
 
private InterventionForum interventionForum;
private CommentaireService commentaireService;
private PropositionDeterminationService propositionDeterminationService;
private FenetreOverlaySimplePresenteur overlay;
 
private int nbVotes;
private HandlerRegistration validationTaxonHandler;
public ForumInterventionPresenteur(Vue vue, InterventionForum interventionForum, CommentaireService commentaireService, PropositionDeterminationService propositionDeterminationService) {
this.vue = vue;
this.interventionForum = interventionForum;
this.commentaireService = commentaireService;
this.propositionDeterminationService = propositionDeterminationService;
}
 
public void go(HasWidgets composite) {
chargerIntervention();
composite.add(vue.asWidget());
gererEvenements();
}
public void ajouterEnfant(ForumInterventionPresenteur presenteur) {
presenteur.go(vue.getEnfants());
}
 
private void chargerIntervention() {
if (interventionForum instanceof PropositionDetermination) {
ajouterPropositionDetermination((PropositionDetermination) interventionForum);
} else if (interventionForum instanceof Commentaire) {
ajouterCommentaire((Commentaire) interventionForum);
vue.cacherDeterminationProposee();
}
}
 
private void ajouterPropositionDetermination(PropositionDetermination propositionDetermination) {
final PropositionDetermination cetteProposition = propositionDetermination;
this.nbVotes = propositionDetermination.getVotesDeterminations().size();
BarreRepartitionVotePresenteur barreRepartitionVotePresenteur = new BarreRepartitionVotePresenteur(new BarreRepartitionVoteVue(), new VoteDeterminationServiceConcret());
barreRepartitionVotePresenteur.toggleNomEspece();
calculerEtAfficherVoteDetermination(barreRepartitionVotePresenteur, propositionDetermination);
ArbreCommentairePresenteur arbreCommentairePresenteur = new ArbreCommentairePresenteur(new ArbreCommentaireVue(), propositionDetermination);
vue.ajouterInterventionDetermination(propositionDetermination, barreRepartitionVotePresenteur.getBarreRepartitionVoteVue(), arbreCommentairePresenteur.getArbreCommentaireVue());
final String nn = propositionDetermination.getNumNomenclatural();
final String referentiel = propositionDetermination.getReferentiel();
// @TODO harmoniser les valeurs qui veulent dire "y en n'a pas" plutôt que !equals("kedal") :-/
if (nn != null && !nn.isEmpty() && !nn.equals(0) && !nn.equals("0") && referentiel != null && !referentiel.isEmpty()) {
vue.ajouterLienEspece();
vue.getEspece().addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
Config config = new Config();
String efloreUrlFicheTpl = config.getUrl("efloreTaxon");
// découpage pseudo-intelligent du nom de référentiel
String refFmt;
int positionDeuxPoints = referentiel.indexOf(':');
if (positionDeuxPoints == -1) {
refFmt = referentiel;
} else {
refFmt = referentiel.substring(0, positionDeuxPoints);
}
String efloreUrlFiche = efloreUrlFicheTpl.replaceAll("referentiel-nn-num_nom", refFmt+"-nn-"+nn);
Window.open(efloreUrlFiche, "Fiche eflore", config.getInfo("popupOptions"));
}
});
}
gererAffichageBoutonValidationTaxon(cetteProposition);
final String idContributeur = propositionDetermination.getContributeur().getId();
if (idContributeur != null && !idContributeur.equals("0")) {
vue.ajouterLienAuteur();
vue.getAuteur().addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
Config config = new Config();
Window.open(config.getUrl("profil") + idContributeur, "Consultation de l'annuaire", config.getInfo("popupOptions"));
}
});
}
}
 
private void gererAffichageBoutonValidationTaxon(final PropositionDetermination cetteProposition) {
if (doitAfficherBoutonValidation(cetteProposition)) {
vue.afficherBoutonValidationTaxon();
if(validationTaxonHandler != null) {
validationTaxonHandler.removeHandler();
}
validationTaxonHandler = vue.getBoutonValidationTaxon().addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
if (Window.confirm(I18n.getVocabulary().confirmationValidationDetermination())) {
validerProposition(cetteProposition);
}
}
});
} else {
vue.cacherBoutonValidationTaxon();
}
}
 
private void ajouterCommentaire(Commentaire proposition) {
ArbreCommentairePresenteur arbreCommentairePresenteur = new ArbreCommentairePresenteur(new ArbreCommentaireVue(), proposition);
vue.ajouterInterventionCommentaire(proposition, arbreCommentairePresenteur.getArbreCommentaireVue());
}
 
private void calculerEtAfficherVoteDetermination(BarreRepartitionVotePresenteur barreRepartitionVotePresenteur, PropositionDetermination propositionDetermination) {
MoyenneVote votes = CalculVoteDeterminationService.calculerVoteDetermination(propositionDetermination);
barreRepartitionVotePresenteur.afficherVotes(votes);
}
private void gererEvenements() {
if (this.nbVotes > 0) {
vue.setNbVotes(this.nbVotes);
vue.ajouterLienVotes();
vue.getZoneNbVotes().addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
if (nbVotes > 0) {
FenetreOverlaySimplePresenteur fenetreOverlaySimplePresenteur = new FenetreOverlaySimplePresenteur(
new FenetreOverlayDefilanteVue());
DetailListeVotesDeterminationPresenteur detailListeVotesDeterminationPresenteur = new DetailListeVotesDeterminationPresenteur(
new DetailListeVotesDeterminationVue());
fenetreOverlaySimplePresenteur
.ouvrirFenetreModale(detailListeVotesDeterminationPresenteur);
detailListeVotesDeterminationPresenteur
.afficherVotes((PropositionDetermination) interventionForum);
}
}
});
} else {
vue.masquerLienVotes();
}
vue.getRepondre().addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
FormulaireCommentairePresenteur commentairePresenteur = new FormulaireCommentairePresenteur(interventionForum, new CommentaireServiceConcret(), new FormulaireCommentaireVue());
overlay = new FenetreOverlaySimplePresenteur(new FenetreOverlayDefilanteVue());
overlay.ouvrirFenetreModale(commentairePresenteur);
}
});
vue.getConteneurInterventionMouseOver().addMouseOverHandler(new MouseOverHandler() {
@Override
public void onMouseOver(MouseOverEvent event) {
if(peutSupprimerIntervention()) {
vue.afficherLienSuppression();
}
}
});
vue.getConteneurInterventionMouseOut().addMouseOutHandler(new MouseOutHandler() {
@Override
public void onMouseOut(MouseOutEvent event) {
if(peutSupprimerIntervention()) {
vue.cacherLienSuppression();
}
}
});
 
vue.getLienSuppression().addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
String message = "";
if (interventionForum instanceof PropositionDetermination) {
message = I18n.getVocabulary().confirmationSuppressionDetermination();
} else if (interventionForum instanceof Commentaire) {
message = I18n.getVocabulary().confirmationSuppressionCommentaire();
}
if(Window.confirm(message)) {
supprimerIntervention();
}
}
});
vue.cacherLienSuppression();
BusEvenementiel.getInstance().addHandler(EvenementAjoutDetermination.TYPE, new GestionnaireEvenementAjoutDetermination() {
@Override
public void onAjoutDetermination(EvenementAjoutDetermination event) {
if(overlay != null && overlay.fenetreModaleEstOuverte()) {
overlay.fermerFenetreModale();
}
}
});
 
BusEvenementiel.getInstance().addHandler(EvenementAjoutCommentaire.TYPE, new GestionnaireEvenementAjoutCommentaire() {
@Override
public void onAjoutCommentaire(EvenementAjoutCommentaire event) {
if(overlay != null && overlay.fenetreModaleEstOuverte()) {
overlay.fermerFenetreModale();
}
}
});
BusEvenementiel.getInstance().addHandler(EvenementChangementEtatUtilisateur.TYPE, new GestionnaireEvenementChangementEtatUtilisateur() {
@Override
public void onModificationEtatUtilisateur(EvenementChangementEtatUtilisateur evenementChangementEtatUtilisateur) {
if (interventionForum instanceof PropositionDetermination) {
gererAffichageBoutonValidationTaxon((PropositionDetermination)interventionForum);
}
}
});
}
private boolean peutSupprimerIntervention() {
boolean estPropositionInitiale = false;
boolean estPropositionRetenue = false;
if(interventionForum instanceof PropositionDetermination) {
estPropositionInitiale = ((PropositionDetermination)interventionForum).estPropositionInitiale();
estPropositionRetenue = ((PropositionDetermination)interventionForum).estPropositionRetenue();
}
return (!interventionForum.aDesCommentaires() &&
interventionForum.getContributeur() != null &&
interventionForum.getContributeur().getId().equals(CacheClient.getInstance().getUtilisateur().getId())
&& !estPropositionInitiale
&& !estPropositionRetenue);
}
private void supprimerIntervention() {
if(interventionForum instanceof PropositionDetermination) {
propositionDeterminationService.supprimerProposition((PropositionDetermination)interventionForum, new SuppressionPropositionDeterminationCallback() {
@Override
public void surRetour(String objetRetour) {
CacheClient.getInstance().getObservationCourante().supprimerIntervention(interventionForum);
BusEvenementiel.getInstance().fireEvent(new EvenementSuppressionDetermination((PropositionDetermination)interventionForum));
}
});
}
if(interventionForum instanceof Commentaire) {
commentaireService.supprimerCommentaire((Commentaire)interventionForum, new SuppressionCommentaireCallback() {
@Override
public void surRetour(String objetRetour) {
CacheClient.getInstance().getObservationCourante().supprimerIntervention(interventionForum);
BusEvenementiel.getInstance().fireEvent(new EvenementSuppressionCommentaire((Commentaire)interventionForum));
}
});
}
}
private boolean doitAfficherBoutonValidation(PropositionDetermination propositionDetermination) {
boolean estPropositionRetenue = propositionDetermination.estPropositionRetenue();
String numNomProp = propositionDetermination.getNumNomenclatural();
String referentielProp = propositionDetermination.getReferentiel();
boolean aUnNumNom = (numNomProp != null && !numNomProp.trim().equals("") && !numNomProp.trim().equals("0"));
boolean aUnReferentiel = (referentielProp != null && !referentielProp.trim().equals("") && !referentielProp.trim().equals("0"));
Utilisateur utilisateur = CacheClient.getInstance().getUtilisateur();
boolean estAuteurObservation = false;
if(utilisateur != null) {
estAuteurObservation = utilisateur.estIdentifie() && utilisateur.getId().equals(CacheClient.getInstance().getObservationCourante().getIdAuteur());
}
boolean peutValiderObservation = ModerationUtils.utilisateurPeutValiderObservation(CacheClient.getInstance().getUtilisateur(), CacheClient.getInstance().getObservationCourante());
return (peutValiderObservation || estAuteurObservation) && aUnReferentiel && aUnNumNom && !estPropositionRetenue;
}
private void validerProposition(PropositionDetermination propositionDetermination) {
final PropositionDetermination cetteProposition = propositionDetermination;
PropositionDeterminationServiceConcret propositionService = new PropositionDeterminationServiceConcret();
propositionDetermination.setValideePar(CacheClient.getInstance().getUtilisateur().getId());
propositionService.validerProposition(propositionDetermination, new ValidationPropositionCallback() {
@Override
public void surRetour(String objetRetour) {
BusEvenementiel.getInstance().fireEvent(new EvenementValidationPropositionDetermination(cetteProposition));
}
});
}
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/composants/forum/interventions/ForumInterventionVue.java
New file
0,0 → 1,203
package org.tela_botanica.del.client.composants.forum.interventions;
 
import org.tela_botanica.del.client.composants.forum.interventions.ForumInterventionPresenteur.Vue;
import org.tela_botanica.del.client.i18n.I18n;
import org.tela_botanica.del.client.modeles.Commentaire;
import org.tela_botanica.del.client.modeles.PropositionDetermination;
 
import com.google.gwt.core.client.GWT;
import com.google.gwt.event.dom.client.HasClickHandlers;
import com.google.gwt.event.dom.client.HasMouseOutHandlers;
import com.google.gwt.event.dom.client.HasMouseOverHandlers;
import com.google.gwt.i18n.client.DateTimeFormat;
import com.google.gwt.uibinder.client.UiBinder;
import com.google.gwt.uibinder.client.UiField;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.FocusPanel;
import com.google.gwt.user.client.ui.HTML;
import com.google.gwt.user.client.ui.HTMLPanel;
import com.google.gwt.user.client.ui.HasWidgets;
import com.google.gwt.user.client.ui.Hyperlink;
import com.google.gwt.user.client.ui.IsWidget;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.Panel;
import com.google.gwt.user.client.ui.Widget;
 
public class ForumInterventionVue extends Composite implements Vue {
 
private static ForumUIiBinder uiBinder = GWT.create(ForumUIiBinder.class);
 
interface ForumUIiBinder extends UiBinder<Widget, ForumInterventionVue> {
};
 
@UiField
FocusPanel proposition;
 
@UiField
Label nom, nomTaxon, date, commentaire, repondre, labelDeterminationProposee;
@UiField
HTMLPanel conteneurIntermediaireProposition, voter, zoneVoter, zoneDetermination, zoneEnfants;
@UiField
Button boutonValidationTaxon;
@UiField
FocusPanel conteneurLienSuppression;
@UiField
HTML supprimer, nbVotesHtml;
@UiField
FocusPanel conteneurPanneauVotes;
public ForumInterventionVue() {
initWidget(uiBinder.createAndBindUi(this));
}
@Override
public HasClickHandlers getLienSuppression() {
return conteneurLienSuppression;
}
@Override
public void afficherLienSuppression() {
conteneurLienSuppression.removeStyleName("invisible");
}
@Override
public void cacherLienSuppression() {
conteneurLienSuppression.addStyleName("invisible");
}
 
@Override
public void ajouterInterventionDetermination(PropositionDetermination determination, IsWidget barreRepartition, IsWidget arbreCommentaires) {
 
nom.setText(determination.getAuteur());
nomTaxon.setText(determination.getEspece());
voter.add(barreRepartition);
date.setText(DateTimeFormat.getFormat("dd/MM/yyyy").format(determination.getDate()));
commentaire.setText(determination.getCommentaire());
if (determination.estFils()) {
proposition.setStyleName("enfant");
}
if(determination.estPropositionInitiale()) {
labelDeterminationProposee.setText(I18n.getVocabulary().determinationOriginalePar());
labelDeterminationProposee.addStyleName("indicationPropositionInitiale");
} else {
labelDeterminationProposee.setText(I18n.getVocabulary().determinationProposeePar());
}
if(determination.estPropositionRetenue()) {
proposition.setTitle(I18n.getVocabulary().indicationPropositionValidee());
proposition.setStyleName("propositionRetenue");
}
 
boutonValidationTaxon.setTitle(I18n.getVocabulary().indicationValiderProposition());
conteneurIntermediaireProposition.addStyleName("propositionValidable");
}
 
@Override
public void ajouterInterventionCommentaire(Commentaire nouveauCommentaire, IsWidget arbreCommentaires) {
 
zoneVoter.setVisible(false);
zoneDetermination.setVisible(false);
nom.setText(nouveauCommentaire.getAuteur());
date.setText(DateTimeFormat.getFormat("dd/MM/yyyy").format(nouveauCommentaire.getDate()));
commentaire.setText(nouveauCommentaire.getCommentaire());
if (nouveauCommentaire.estFils()) {
proposition.setStyleName("enfant");
}
 
boutonValidationTaxon.setVisible(false);
}
@Override
public HasClickHandlers getRepondre() {
return repondre;
}
 
@Override
public HasWidgets getEnfants() {
return zoneEnfants;
}
 
@Override
public HasMouseOverHandlers getConteneurInterventionMouseOver() {
return proposition;
}
 
@Override
public HasMouseOutHandlers getConteneurInterventionMouseOut() {
return proposition;
}
public HasClickHandlers getEspece() {
return nomTaxon;
}
public void ajouterLienEspece() {
nomTaxon.addStyleName("labelLien");
}
public HasClickHandlers getAuteur() {
return nom;
}
public void ajouterLienAuteur() {
nom.addStyleName("lien");
nom.setTitle("Voir le profil");
}
public void cacherDeterminationProposee() {
labelDeterminationProposee.setVisible(false);
}
 
@Override
public void ajouterLienVotes() {
conteneurPanneauVotes.addStyleName("nombreVotes");
}
public void masquerLienVotes() {
conteneurPanneauVotes.removeStyleName("nombreVotes");
nbVotesHtml.setVisible(false);
}
 
@Override
public void setNbVotes(int votes) {
nbVotesHtml.setText(String.valueOf(votes));
}
@Override
public HasClickHandlers getZoneNbVotes() {
return this.conteneurPanneauVotes;
}
@Override
public HasClickHandlers getBoutonValidationTaxon() {
return this.boutonValidationTaxon;
}
@Override
public void cacherBoutonValidationTaxon() {
boutonValidationTaxon.setVisible(false);
}
@Override
public void afficherBoutonValidationTaxon() {
boutonValidationTaxon.setVisible(true);
}
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/composants/forum/interventions/forumIntervention.css
New file
0,0 → 1,82
.nombreVotes {
width:15px;
height:16px;
padding-left: 10px;
float:right;
margin-left:10px;
}
 
.infobulle {
background: none repeat scroll 0 0 #1A5AC3;
color: white;
font-size: 11px;
height: 11px;
line-height: 0.9;
margin-left: 2px;
margin-top: 8px;
min-width: 7px;
padding: 1px;
position: absolute;
}
 
.proposition {
width:550px;
padding:10px;
background:#EEE;
margin-bottom:5px;
}
.nom {
margin-right:4px;
margin-top:1px;
}
.le {
margin-top:1px;
}
.date {
margin-left:3px;
margin-top:1px;
}
.determination {
clear:left;
float:left;
margin-top:1px;
margin-right:3px;
}
.nomtaxon {
float:left;
font-size:15px;
}
.voter div{
font-size:18px;
color:#333;
text-align:right;
margin-bottom:-3px;
}
.commentaire {
clear:left
}
.daccord {
clear:left;
margin-right:5px;
}
.repondre {
margin-top:3px;
float:left;
cursor:pointer;
margin-bottom:5px;
font-size:10px;
}
 
.suppression {
width:15px;
height:16px;
background:url('./img/cancel.png') no-repeat;
cursor: pointer;
margin-top:-15px;
margin-left:99%;
position:relative;
}
 
.labelVoter {
padding-left:9px;
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/composants/forum/interventions/ForumInterventionVue.ui.xml
New file
0,0 → 1,39
<!DOCTYPE ui:UiBinder SYSTEM "http://dl.google.com/gwt/DTD/xhtml.ent">
<ui:UiBinder
xmlns:ui='urn:ui:com.google.gwt.uibinder'
xmlns:g='urn:import:com.google.gwt.user.client.ui'
xmlns:vues="urn:import:org.tela_botanica.del.client.composants.forum">
<ui:with field="constants" type="org.tela_botanica.del.client.i18n.Vocabulary" />
<ui:style src="forumIntervention.css" />
<g:FocusPanel ui:field="proposition" styleName="{style.proposition}">
<g:HTMLPanel>
<g:Button ui:field="boutonValidationTaxon" text="&#x2714;" styleName="bouton boutonValiderTaxon" />
<g:HTMLPanel ui:field="conteneurIntermediaireProposition" styleName="conteneurIntermediaireProposition" >
<g:FocusPanel ui:field="conteneurLienSuppression" styleName="{style.suppression}">
<g:HTML ui:field="supprimer" />
</g:FocusPanel>
<g:HTMLPanel styleName="gauche nettoyage" ui:field="zoneDetermination">
<g:Label ui:field="nomTaxon" styleName="{style.nomtaxon} nomTaxonProposition" />
</g:HTMLPanel>
<g:HTMLPanel styleName="droite" ui:field="zoneVoter">
<g:HorizontalPanel>
<g:Label text="Score " styleName="petit" />
<g:Label text="Voter" styleName="{style.labelVoter} petit" />
</g:HorizontalPanel>
<g:HTMLPanel ui:field="voter" styleName="{style.voter} gauche" />
<g:FocusPanel ui:field="conteneurPanneauVotes" styleName="{style.nombreVotes}">
<g:HTML ui:field="nbVotesHtml" styleName="{style.infobulle}"/>
</g:FocusPanel>
</g:HTMLPanel>
<g:Label text="Détermination proposée par " ui:field="labelDeterminationProposee" styleName="{style.determination} petit" />
<g:Label ui:field="nom" styleName="{style.nom} petit gauche" />
<g:Label text="le" styleName="{style.le} gauche petit"/>
<g:Label ui:field="date" styleName="{style.date} gauche petit"/>
<g:Label ui:field="commentaire" styleName="{style.commentaire}"/>
<g:Label text="Répondre" styleName="{style.repondre} labelLien" ui:field="repondre"/>
<g:HTML><br /></g:HTML>
<g:HTMLPanel ui:field="zoneEnfants"></g:HTMLPanel>
</g:HTMLPanel>
</g:HTMLPanel>
</g:FocusPanel>
</ui:UiBinder>
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/composants/forum/ForumVue.java
New file
0,0 → 1,36
package org.tela_botanica.del.client.composants.forum;
 
 
import org.tela_botanica.del.client.composants.forum.ForumPresenteur.Vue;
 
import com.google.gwt.core.client.GWT;
import com.google.gwt.uibinder.client.UiBinder;
import com.google.gwt.uibinder.client.UiField;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.HTMLPanel;
import com.google.gwt.user.client.ui.Widget;
 
public class ForumVue extends Composite implements Vue {
 
private static ForumUIiBinder uiBinder = GWT.create(ForumUIiBinder.class);
 
interface ForumUIiBinder extends UiBinder<Widget, ForumVue> {
};
 
@UiField
HTMLPanel panneauInterventions;
 
public ForumVue() {
initWidget(uiBinder.createAndBindUi(this));
}
 
@Override
public HTMLPanel getPanneauInterventions() {
return panneauInterventions;
}
 
@Override
public void vider() {
panneauInterventions.clear();
}
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/composants/forum/ArbreCommentairePresenteur.java
New file
0,0 → 1,40
package org.tela_botanica.del.client.composants.forum;
 
import org.tela_botanica.del.client.modeles.InterventionForum;
 
import com.google.gwt.user.client.ui.HasWidgets;
import com.google.gwt.user.client.ui.IsWidget;
 
public class ArbreCommentairePresenteur {
private InterventionForum possesseurDeCommentaires;
public interface Vue extends IsWidget {
public void creerArbreCommentaire(InterventionForum possesseurDeCommentaires);
}
private Vue vue;
public ArbreCommentairePresenteur(Vue vue, InterventionForum possesseurDeCommentaires) {
this.vue = vue;
this.possesseurDeCommentaires = possesseurDeCommentaires;
vue.creerArbreCommentaire(this.possesseurDeCommentaires);
}
public void go(HasWidgets composite) {
composite.add(vue.asWidget());
}
public IsWidget getArbreCommentaireVue() {
return vue;
}
public InterventionForum getPossesseurDeCommentaires() {
return possesseurDeCommentaires;
}
public void gererEvenements() {
}
 
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/composants/forum/ArbreCommentaireVue.java
New file
0,0 → 1,50
package org.tela_botanica.del.client.composants.forum;
 
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
 
import org.tela_botanica.del.client.modeles.Commentaire;
import org.tela_botanica.del.client.modeles.InterventionForum;
 
import com.google.gwt.i18n.client.DateTimeFormat;
import com.google.gwt.i18n.client.DateTimeFormat.PredefinedFormat;
import com.google.gwt.user.client.ui.HTML;
import com.google.gwt.user.client.ui.Tree;
import com.google.gwt.user.client.ui.TreeItem;
 
public class ArbreCommentaireVue extends Tree implements ArbreCommentairePresenteur.Vue {
 
public ArbreCommentaireVue() {
super();
}
 
public void creerArbreCommentaire(InterventionForum possesseurDeCommentaires) {
TreeItem racineArbreCommentaires = new TreeItem();
addItem(racineArbreCommentaires);
 
if (possesseurDeCommentaires instanceof Commentaire) {
List<Commentaire> commentaires = new ArrayList<Commentaire>();
commentaires.add((Commentaire) possesseurDeCommentaires);
creerListeCommentaireRecursive(racineArbreCommentaires, commentaires);
} else {
creerListeCommentaireRecursive(racineArbreCommentaires, possesseurDeCommentaires.getListeCommentaires());
}
}
 
private void creerListeCommentaireRecursive(TreeItem parentTreeItem, List<Commentaire> commentaires) {
 
for (Commentaire commentaire : commentaires) {
String commentaireHTML = commentaire.getCommentaire();
HTML commentaireWidget = new HTML(commentaireHTML);
parentTreeItem.setWidget(commentaireWidget);
if (commentaire.getListeCommentaires().size() != 0) {
TreeItem childTreeItem = new TreeItem();
parentTreeItem.addItem(childTreeItem);
creerListeCommentaireRecursive(childTreeItem, commentaire.getListeCommentaires());
}
}
parentTreeItem.setState(true);
 
}
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/composants/forum/forum.css
New file
0,0 → 1,0
.table {}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/composants/forum/ForumVue.ui.xml
New file
0,0 → 1,11
<!DOCTYPE ui:UiBinder SYSTEM "http://dl.google.com/gwt/DTD/xhtml.ent">
<ui:UiBinder
xmlns:ui='urn:ui:com.google.gwt.uibinder'
xmlns:g='urn:import:com.google.gwt.user.client.ui'
xmlns:vues="urn:import:org.tela_botanica.del.client.composants.forum">
<ui:with field="constants" type="org.tela_botanica.del.client.i18n.Vocabulary" />
<ui:style src="forum.css" />
<g:HTMLPanel>
<g:HTMLPanel ui:field='panneauInterventions' styleName="{style.table}" />
</g:HTMLPanel>
</ui:UiBinder>
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/composants/forum/ForumPresenteur.java
New file
0,0 → 1,125
package org.tela_botanica.del.client.composants.forum;
 
import java.util.Collections;
import java.util.List;
 
import org.tela_botanica.del.client.cache.CacheClient;
import org.tela_botanica.del.client.composants.forum.interventions.ForumInterventionPresenteur;
import org.tela_botanica.del.client.composants.forum.interventions.ForumInterventionVue;
import org.tela_botanica.del.client.modeles.Commentaire;
import org.tela_botanica.del.client.modeles.InterventionForum;
import org.tela_botanica.del.client.modeles.PropositionDetermination;
import org.tela_botanica.del.client.modeles.VoteDetermination;
import org.tela_botanica.del.client.navigation.evenement.BusEvenementiel;
import org.tela_botanica.del.client.navigation.evenement.ajoutcommentaire.EvenementAjoutCommentaire;
import org.tela_botanica.del.client.navigation.evenement.ajoutcommentaire.GestionnaireEvenementAjoutCommentaire;
import org.tela_botanica.del.client.navigation.evenement.ajoutdetermination.EvenementAjoutDetermination;
import org.tela_botanica.del.client.navigation.evenement.ajoutdetermination.GestionnaireEvenementAjoutDetermination;
import org.tela_botanica.del.client.navigation.evenement.suppressioncommentaire.EvenementSuppressionCommentaire;
import org.tela_botanica.del.client.navigation.evenement.suppressioncommentaire.GestionnaireEvenementSuppressionCommentaire;
import org.tela_botanica.del.client.navigation.evenement.suppressiondetermination.EvenementSuppressionDetermination;
import org.tela_botanica.del.client.navigation.evenement.suppressiondetermination.GestionnaireEvenementSuppressionDetermination;
import org.tela_botanica.del.client.navigation.evenement.voteDetermination.EvenementVoteDetermination;
import org.tela_botanica.del.client.navigation.evenement.voteDetermination.GestionnaireEvenementVoteDetermination;
import org.tela_botanica.del.client.services.rest.CommentaireServiceConcret;
import org.tela_botanica.del.client.services.rest.PropositionDeterminationServiceConcret;
import org.tela_botanica.del.client.utils.ComparateurPropositionDetermination;
 
import com.google.gwt.user.client.ui.HasWidgets;
import com.google.gwt.user.client.ui.IsWidget;
 
public class ForumPresenteur {
 
public interface Vue extends IsWidget {
 
public abstract HasWidgets getPanneauInterventions();
 
public abstract void vider();
}
 
private Vue vue;
 
public ForumPresenteur(Vue vue) {
this.vue = vue;
}
 
public void go(HasWidgets composite) {
chargerDeterminations();
composite.add(vue.asWidget());
 
gererEvenements();
}
 
private void chargerDeterminations() {
 
vue.vider();
List<PropositionDetermination> interventions = CacheClient.getInstance().getObservationCourante().getPropositionDeterminations();
Collections.sort(interventions, new ComparateurPropositionDetermination());
for (InterventionForum interventionCourante : interventions) {
ForumInterventionPresenteur presenteur = new ForumInterventionPresenteur(new ForumInterventionVue(), interventionCourante, new CommentaireServiceConcret(), new PropositionDeterminationServiceConcret());
presenteur.go(vue.getPanneauInterventions());
ajouterCommentairesRecursivement(interventionCourante, presenteur);
}
List<Commentaire> commentaires = CacheClient.getInstance().getObservationCourante().getCommentairesForum();
for (InterventionForum interventionCourante : commentaires) {
ForumInterventionPresenteur presenteur = new ForumInterventionPresenteur(new ForumInterventionVue(), interventionCourante, new CommentaireServiceConcret(), new PropositionDeterminationServiceConcret());
presenteur.go(vue.getPanneauInterventions());
ajouterCommentairesRecursivement(interventionCourante, presenteur);
}
}
 
private void ajouterCommentairesRecursivement(InterventionForum interventionCourante, ForumInterventionPresenteur presenteur) {
List<Commentaire> fils = interventionCourante.getListeCommentaires();
for (InterventionForum interventionFils : fils) {
ForumInterventionPresenteur presenteurFils = new ForumInterventionPresenteur(new ForumInterventionVue(), interventionFils, new CommentaireServiceConcret(), new PropositionDeterminationServiceConcret());
ajouterCommentairesRecursivement(interventionFils, presenteurFils);
presenteur.ajouterEnfant(presenteurFils);
}
}
 
private void gererEvenements() {
BusEvenementiel.getInstance().addHandler(EvenementAjoutDetermination.TYPE, new GestionnaireEvenementAjoutDetermination() {
 
@Override
public void onAjoutDetermination(EvenementAjoutDetermination event) {
chargerDeterminations();
}
});
 
BusEvenementiel.getInstance().addHandler(EvenementAjoutCommentaire.TYPE, new GestionnaireEvenementAjoutCommentaire() {
 
@Override
public void onAjoutCommentaire(EvenementAjoutCommentaire event) {
chargerDeterminations();
}
});
 
BusEvenementiel.getInstance().addHandler(EvenementSuppressionDetermination.TYPE, new GestionnaireEvenementSuppressionDetermination() {
 
@Override
public void onSuppressionDetermination(EvenementSuppressionDetermination event) {
chargerDeterminations();
}
});
 
BusEvenementiel.getInstance().addHandler(EvenementSuppressionCommentaire.TYPE, new GestionnaireEvenementSuppressionCommentaire() {
 
@Override
public void onSuppressionCommentaire(EvenementSuppressionCommentaire event) {
chargerDeterminations();
}
});
BusEvenementiel.getInstance().addHandler(EvenementVoteDetermination.TYPE, new GestionnaireEvenementVoteDetermination() {
@Override
public void onVoteDetermination(VoteDetermination event) {
// ceci permet d'avoir un classement à jour des déterminations à chaque vote
// à voir si ça ne fait pas trop ramer les petites machines
chargerDeterminations();
}
});
}
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/composants/pagination/PaginationVue.java
New file
0,0 → 1,137
package org.tela_botanica.del.client.composants.pagination;
 
import org.tela_botanica.del.client.i18n.I18n;
 
import com.google.gwt.core.client.GWT;
import com.google.gwt.event.dom.client.HasChangeHandlers;
import com.google.gwt.event.dom.client.HasClickHandlers;
import com.google.gwt.uibinder.client.UiBinder;
import com.google.gwt.uibinder.client.UiField;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.HasText;
import com.google.gwt.user.client.ui.HasWidgets;
import com.google.gwt.user.client.ui.HorizontalPanel;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.ListBox;
import com.google.gwt.user.client.ui.TextBox;
import com.google.gwt.user.client.ui.Widget;
 
public class PaginationVue extends Composite implements PaginationPresenteur.Vue {
 
@UiField
TextBox saisiePageCourante;
 
@UiField
TextBox selecteurPas;
 
@UiField
Button boutonPrecedent, boutonSuivant, boutonPremierePage, boutonDernierePage;
 
@UiField
Label nbTotalPages, nbTotalResultats;
 
interface MyUiBinder extends UiBinder<Widget, PaginationVue> {
}
 
private static MyUiBinder uiBinder = GWT.create(MyUiBinder.class);
 
public PaginationVue() {
initWidget(uiBinder.createAndBindUi(this));
}
 
public void afficherPas(int pas) {
selecteurPas.setText(String.valueOf(pas));
}
 
public void mettreNbTotalPages(int nbPages) {
nbTotalPages.setText((I18n.getMessages().parmi_nb_pages(nbPages)));
}
 
public void mettreNbTotalResultats(int nbResultats) {
nbTotalResultats.setText("" + nbResultats);
}
 
public void masquerBoutonPrecedent() {
boutonPremierePage.setVisible(false);
boutonPrecedent.setVisible(false);
}
 
public void afficherBoutonPrecedent() {
boutonPremierePage.setVisible(true);
boutonPrecedent.setVisible(true);
}
 
public void masquerBoutonSuivant() {
boutonDernierePage.setVisible(false);
boutonSuivant.setVisible(false);
}
 
public void afficherBoutonSuivant() {
boutonDernierePage.setVisible(true);
boutonSuivant.setVisible(true);
}
 
public TextBox getSelecteurPas() {
return selecteurPas;
}
 
@Override
public HasChangeHandlers getSaisiePageCourante() {
return saisiePageCourante;
}
 
@Override
public HasClickHandlers getBoutonSuivant() {
return boutonSuivant;
}
 
@Override
public HasClickHandlers getBoutonPrecedent() {
return boutonPrecedent;
}
 
@Override
public HasClickHandlers getBoutonPremierePage() {
return boutonPremierePage;
}
 
@Override
public HasClickHandlers getBoutonDernierePage() {
return boutonDernierePage;
}
 
@Override
public int getPasSelectionne() throws NumberFormatException {
return Integer.parseInt(selecteurPas.getText());
}
 
@Override
public boolean boutonPrecedentEstAffiche() {
return boutonPrecedent.isVisible() && boutonPremierePage.isVisible();
}
 
@Override
public boolean boutonSuivantEstAffiche() {
return boutonSuivant.isVisible() && boutonDernierePage.isVisible();
}
 
public Label getNbTotalPages() {
return nbTotalPages;
}
 
public Label getNbTotalResultats() {
return nbTotalResultats;
}
 
@Override
public int getPageSaisie() throws NumberFormatException {
return Integer.parseInt(saisiePageCourante.getText());
}
@Override
public void setPageCourante(int pageCourante) {
saisiePageCourante.setText(String.valueOf(pageCourante));
}
 
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/composants/pagination/pagination.css
New file
0,0 → 1,30
.pagination {width:100%;}
.selecteurElements {float:right; width:2em}
.pageCourante {width:2.6em}
.pagination button {border:none; border-right:solid 1px #DDD; cursor:pointer; width:30px}
.zoneLiens {}
.zoneLiens button:hover {background:#8EB533}
select {background:white}
 
.boutonPrecedent {border:solid 1px #8EB533; width:20px; height:20px; background:url(./img/prev.png) no-repeat}
.boutonSuivant {border:solid 1px #8EB533; width:20px; height:20px; background:url(./img/next.png) no-repeat}
.boutonPremierePage {width:20px; height:20px; background:url(./img/first.png) no-repeat}
.boutonDernierePage {width:20px; height:20px; background:url(./img/last.png) no-repeat}
 
.labelResultats {
margin-left:5px;
margin-right:5px;
}
.nombreResultats {
font-weight: bold;
margin-left:5px;
}
.labelPage {
padding-left:5px;
margin-right:5px;
border-left: solid 1px grey;
}
 
.nombreTotal {margin-left:5px;}
.labelSelecteurPas{margin-left:5px;margin-right:5px; margin-top: 3px;}
.labelSelecteurPasAfficher{margin-left:10px;;margin-right:5px; margin-top: 3px;}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/composants/pagination/PaginationVue.ui.xml
New file
0,0 → 1,19
<ui:UiBinder xmlns:ui='urn:ui:com.google.gwt.uibinder' xmlns:g='urn:import:com.google.gwt.user.client.ui' ui:generateFormat='com.google.gwt.i18n.rebind.format.PropertiesFormat' ui:generateKeys="com.google.gwt.i18n.rebind.keygen.MD5KeyGenerator" ui:generateLocales="default">
<ui:with field='res' type='org.tela_botanica.del.client.resources.Ressources'/>
<ui:with field="constants" type="org.tela_botanica.del.client.i18n.Vocabulary"/>
<ui:style src="pagination.css" />
<g:HorizontalPanel styleName="{style.pagination}">
<g:Label styleName="{style.nombreResultats} petit" ui:field="nbTotalResultats" />
<g:Label styleName="{style.labelResultats} petit" text="{constants.resultats}" />
<g:Label styleName="{style.labelPage} petit" text="{constants.page}" />
<g:Button ui:field="boutonPremierePage" styleName="{style.boutonPremierePage}" text=" " />
<g:Button ui:field="boutonPrecedent" styleName="{style.boutonPrecedent}" text=" " />
<g:TextBox styleName="{style.pageCourante} petit" ui:field="saisiePageCourante"/>
<g:Label styleName="{style.nombreTotal} petit" ui:field="nbTotalPages" />
<g:Button ui:field="boutonSuivant" styleName="{style.boutonSuivant}" text=" "/>
<g:Button ui:field="boutonDernierePage" styleName="{style.boutonDernierePage}" text=" " />
<g:Label styleName="{style.labelSelecteurPasAfficher} petit" text="{constants.afficher}" />
<g:TextBox ui:field="selecteurPas" styleName="{style.selecteurElements} petit" text="10"/>
<g:Label styleName="{style.labelSelecteurPas} petit" text="{constants.elements_par_page}" />
</g:HorizontalPanel>
</ui:UiBinder>
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/composants/pagination/PaginationPresenteur.java
New file
0,0 → 1,308
package org.tela_botanica.del.client.composants.pagination;
 
import org.tela_botanica.del.client.navigation.evenement.BusEvenementiel;
import org.tela_botanica.del.client.navigation.evenement.pagination.EvenementChangementPage;
import org.tela_botanica.del.client.navigation.evenement.pagination.EvenementChangementPas;
import org.tela_botanica.del.client.navigation.evenement.pagination.GestionnaireEvenementChangementPage;
import org.tela_botanica.del.client.navigation.evenement.pagination.GestionnaireEvenementChangementPas;
import com.google.gwt.event.dom.client.ChangeEvent;
import com.google.gwt.event.dom.client.ChangeHandler;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.event.dom.client.HasChangeHandlers;
import com.google.gwt.event.dom.client.HasClickHandlers;
import com.google.gwt.user.client.ui.HasWidgets;
import com.google.gwt.user.client.ui.IsWidget;
 
/**
* @author gregoire Pagination GENERIQUE qui permet d'afficher un nombre donné
* d'éléments (pas) La méthode changerPage est abstraite et doit être
* définie lors de l'instanciation de la classe pagination pour
* permettre d'afficher la suite des éléments La méthode
* actualiserPasCache est abstraite car le pas est différent en fonction
* de la page où l'on se trouve
* */
public abstract class PaginationPresenteur {
 
public interface Vue extends IsWidget {
public HasClickHandlers getBoutonSuivant();
public HasClickHandlers getBoutonPrecedent();
public HasClickHandlers getBoutonPremierePage();
public HasClickHandlers getBoutonDernierePage();
public void masquerBoutonPrecedent();
public void afficherBoutonPrecedent();
public void masquerBoutonSuivant();
public void afficherBoutonSuivant();
public boolean boutonPrecedentEstAffiche();
public boolean boutonSuivantEstAffiche();
public HasChangeHandlers getSelecteurPas();
public int getPasSelectionne();
public void afficherPas(int pas);
public void mettreNbTotalPages(int nbPages);
public void mettreNbTotalResultats(int nbResultats);
public HasChangeHandlers getSaisiePageCourante();
public int getPageSaisie();
public void setPageCourante(int pageCourante);
}
 
private Vue vue;
private int nbPage = 1;
//private int nbPage = 1;
private int pageCourante = 1;
private int nbElementsTotal = 0;
private int pas = 10;
 
private String groupePagination = null;
 
/**
* Constructeur de l'application
*
* @param nbElementsTotal
* : le nombre total des éléments à paginer
* @param pas
* : le nombre d'éléments à afficher par page
* */
public PaginationPresenteur(Vue vue, int nbElementsTotal, int pas, int pageCourante) {
this.nbElementsTotal = nbElementsTotal;
this.vue = vue;
this.pas = pas;
this.pageCourante = pageCourante;
vue.setPageCourante(pageCourante);
this.nbPage = calculerNbPage();
}
 
/**
* Methode go du modèle MVP
*
* @param container
* : la vue ou éxécuter l'affichage
*/
public void go(HasWidgets container) {
container.add(vue.asWidget());
gererEvenements();
actualiserPas();
actualiserAffichageBoutons();
vue.mettreNbTotalPages(nbPage);
vue.mettreNbTotalResultats(nbElementsTotal);
}
 
/**
* Gérer les évènements sur les boutons statiques (précédent, suivant et
* selecteur pas)
* */
protected void gererEvenements() {
vue.getSaisiePageCourante().addChangeHandler(new ChangeHandler() {
@Override
public void onChange(ChangeEvent event) {
int pageSaisie;
try {
pageSaisie = vue.getPageSaisie();
if (pageSaisie < 0) {
pageSaisie = 1;
} else if (pageSaisie > nbPage){
pageSaisie = nbPage;
}
} catch (NumberFormatException e) {
pageSaisie = pageCourante;
}
pageCourante = pageSaisie;
chargerElements(pas * (pageCourante - 1), pas * (pageCourante));
vue.setPageCourante(pageCourante);
actualiserAffichageBoutons();
}
});
vue.getSelecteurPas().addChangeHandler(new ChangeHandler() {
@Override
public void onChange(ChangeEvent event) {
int pasSelectionne;
try {
pasSelectionne = vue.getPasSelectionne();
if (pasSelectionne < 0) {
pasSelectionne = 1;
} else if (pasSelectionne > 100){
pasSelectionne = 100;
}
} catch (NumberFormatException e) {
pasSelectionne = pas;
}
changerPas(pasSelectionne);
}
});
 
vue.getBoutonPrecedent().addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
allerALaPagePrecedente();
}
});
 
vue.getBoutonSuivant().addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
allerALapageSuivante();
}
});
 
vue.getBoutonPremierePage().addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
allerALaPremierePage();
}
});
 
vue.getBoutonDernierePage().addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
allerAlaDernierePage();
}
});
 
BusEvenementiel.getInstance().addHandler(EvenementChangementPage.TYPE, new GestionnaireEvenementChangementPage() {
 
@Override
public void onChangementPage(EvenementChangementPage event) {
if (event.getGroupePagination() == groupePagination) {
pageCourante = event.getPageAAfficher();
vue.setPageCourante(pageCourante);
actualiserAffichageBoutons();
vue.mettreNbTotalPages(nbPage);
vue.mettreNbTotalResultats(nbElementsTotal);
}
}
});
 
BusEvenementiel.getInstance().addHandler(EvenementChangementPas.TYPE, new GestionnaireEvenementChangementPas() {
 
@Override
public void onChangementPas(EvenementChangementPas event) {
if (event.getGroupePagination() == groupePagination) {
// modifie le pas et les liens en fonction
pas = event.getPas();
actualiserPas();
}
}
});
}
 
private void gererDecalagePageCourante(int ancienPas, int nouveauPas) {
if (ancienPas != nouveauPas) {
double rapportPas = (double) ancienPas / (double) nouveauPas;
pageCourante = (int) (Math.ceil((double) pageCourante * (double) rapportPas));
}
}
 
public void actualiserPas() {
actualiserPasCache(pas);
vue.afficherPas(pas);
}
 
public int getPageCourante() {
return this.pageCourante;
}
 
public int getPas() {
return this.pas;
}
 
public void setPageCourante(int pageCourante) {
this.pageCourante = pageCourante;
}
 
public void changerPas(int nouveauPas) {
 
// TODO corriger bug qui ne charge pas la bonne page ds certains cas
// gererDecalagePageCourante(pas, nouveauPas);
// pas = nouveauPas;
// chargerElements((pageCourante - 1)*pas, pageCourante*pas);
pas = nouveauPas;
this.nbPage = calculerNbPage();
chargerElements(0, pas);
BusEvenementiel.getInstance().fireEvent(new EvenementChangementPas(nouveauPas, groupePagination));
BusEvenementiel.getInstance().fireEvent(new EvenementChangementPage(1, groupePagination));
}
 
public void allerALaPagePrecedente() {
if (pageCourante > 1) {
int pageAAfficher = pageCourante - 1;
pageCourante = pageAAfficher;
chargerElements(pas * (pageAAfficher - 1), pas * (pageAAfficher));
BusEvenementiel.getInstance().fireEvent(new EvenementChangementPage(pageAAfficher, groupePagination));
}
 
}
 
public void allerALapageSuivante() {
if (pageCourante < nbPage) {
int pageAAfficher = pageCourante + 1;
pageCourante = pageAAfficher;
chargerElements(pas * (pageAAfficher - 1), pas * (pageAAfficher));
BusEvenementiel.getInstance().fireEvent(new EvenementChangementPage(pageAAfficher, groupePagination));
}
}
 
public void allerALaPremierePage() {
int pageAAfficher = 1;
pageCourante = pageAAfficher;
chargerElements(0, pas);
BusEvenementiel.getInstance().fireEvent(new EvenementChangementPage(pageAAfficher, groupePagination));
}
 
public void allerAlaDernierePage() {
int pageAAfficher = nbPage;
pageCourante = pageAAfficher;
chargerElements(pas * (pageAAfficher - 1), pas * (pageAAfficher));
BusEvenementiel.getInstance().fireEvent(new EvenementChangementPage(pageAAfficher, groupePagination));
}
 
/** calcule le nombre de page en fonction du pas */
private int calculerNbPage() {
Double nombrePages = Math.ceil((double) nbElementsTotal / (double) pas);
return nombrePages.intValue();
}
 
public void setNbPages(int nbPages) {
this.nbPage = nbPages;
}
 
public int getNbPages() {
return nbPage;
}
 
public Vue getVue() {
return vue;
}
 
public abstract void chargerElements(int debut, int fin);
 
public abstract void actualiserPasCache(int pas);
 
public void setPas(int pas) {
this.pas = pas;
}
 
public void setGroupePagination(String groupePagination) {
this.groupePagination = groupePagination;
}
 
public String getGroupePagination() {
return groupePagination;
}
 
public void actualiserAffichageBoutons() {
if (nbPage == 1) {
vue.masquerBoutonPrecedent();
vue.masquerBoutonSuivant();
} else if (pageCourante == 1) {
vue.masquerBoutonPrecedent();
vue.afficherBoutonSuivant();
} else {
vue.afficherBoutonPrecedent();
if (pageCourante == nbPage) {
vue.masquerBoutonSuivant();
}
}
}
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/composants/fenetreoverlay/FenetreOverlayDefilanteVue.java
New file
0,0 → 1,232
package org.tela_botanica.del.client.composants.fenetreoverlay;
 
import org.tela_botanica.del.client.composants.fenetreoverlay.FenetreOverlayDefilantePresenteur.Vue;
 
import com.google.gwt.core.client.GWT;
import com.google.gwt.dom.client.Element;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.HasClickHandlers;
import com.google.gwt.event.dom.client.HasKeyDownHandlers;
import com.google.gwt.event.logical.shared.ResizeEvent;
import com.google.gwt.event.logical.shared.ResizeHandler;
import com.google.gwt.uibinder.client.UiBinder;
import com.google.gwt.uibinder.client.UiField;
import com.google.gwt.user.client.DOM;
import com.google.gwt.user.client.Event;
import com.google.gwt.user.client.Timer;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.FocusPanel;
import com.google.gwt.user.client.ui.HasVisibility;
import com.google.gwt.user.client.ui.HasWidgets;
import com.google.gwt.user.client.ui.HorizontalPanel;
import com.google.gwt.user.client.ui.IsWidget;
import com.google.gwt.user.client.ui.UIObject;
import com.google.gwt.user.client.ui.VerticalPanel;
import com.google.gwt.user.client.ui.Widget;
 
public class FenetreOverlayDefilanteVue extends Composite implements Vue {
 
interface MyUiBinder extends UiBinder<Widget, FenetreOverlayDefilanteVue> {}
@UiField
VerticalPanel conteneurGlobal;
 
@UiField
FocusPanel overlay;
@UiField
FocusPanel overlayContenu;
 
@UiField
Button boutonFermer, boutonSuivant, boutonPrecedent;
@UiField
HorizontalPanel conteneurOverlayContenu;
private int hauteurContenu = 0;
private int largeurContenu = 0;
// contiennent les coordonnées actuelles du scroll
// pour le rétablir une fois la fenêtre fermée
private int topFenetre = 0;
private int gaucheFenetre = 0;
private Timer timerPlacement = null;
public FocusPanel getOverlay() {
return overlay;
}
 
public FocusPanel getOverlayContenu() {
return overlayContenu;
}
@Override
public HasClickHandlers getOverlayHasClickHandlers() {
return overlayContenu;
}
 
public Button getBoutonFermer() {
return boutonFermer;
}
 
public Button getBoutonSuivant() {
return boutonSuivant;
}
 
public Button getBoutonPrecedent() {
return boutonPrecedent;
}
 
private static MyUiBinder uiBinder = GWT.create(MyUiBinder.class);
 
public FenetreOverlayDefilanteVue() {
initWidget(uiBinder.createAndBindUi(this));
boutonFermer.setStyleName("fermerOverlay");
boutonPrecedent.setStyleName("precedentOverlay");
boutonSuivant.setStyleName("suivantOverlay");
Window.addResizeHandler(new ResizeHandler() {
@Override
public void onResize(ResizeEvent event) {
gererDimensionsEtPositionnerBoutons();
}
});
}
@Override
public HasKeyDownHandlers getConteneurGlobal() {
return overlayContenu;
}
 
@Override
public HasVisibility getOverlayVisibility() {
return overlay;
}
 
@Override
public HasVisibility getOverlayContenuVisibility() {
return overlayContenu;
}
 
@Override
public HasWidgets getOverlayContenuHasWidgets() {
return overlayContenu;
}
 
@Override
public void setStyleOverlay(String style) {
overlay.setStyleName(style);
}
 
@Override
public void setStyleOverlayContenu(String style) {
overlayContenu.setStyleName(style);
}
 
@Override
public void setOverlayContenu(IsWidget w) {
overlayContenu.clear();
overlayContenu.add(w);
}
 
@Override
public void viderOverlay() {
overlay.clear();
}
 
@Override
public void viderOverlayContenu() {
overlayContenu.clear();
}
private void gererDimensionsEtPositionnerBoutons() {
UIObject overlayContenuUi = overlayContenu.getWidget();
if (overlayContenuUi == null) {
return;
}
int topBoutonFermer = 65;
int topBoutonsSuivantsPrecedent = (topBoutonFermer + overlayContenuUi.getOffsetHeight())/2 + 20;
int left = overlayContenuUi.getAbsoluteLeft() - 20;
int right = overlayContenuUi.getAbsoluteLeft() + overlayContenuUi.getOffsetWidth() - 12;
DOM.setStyleAttribute(boutonPrecedent.getElement(), "left",left+"px");
DOM.setStyleAttribute(boutonPrecedent.getElement(), "top", topBoutonsSuivantsPrecedent+"px");
DOM.setStyleAttribute(boutonSuivant.getElement(), "left",right+"px");
DOM.setStyleAttribute(boutonSuivant.getElement(), "top", topBoutonsSuivantsPrecedent+"px");
DOM.setStyleAttribute(boutonFermer.getElement(), "left",(right - 10)+"px");
DOM.setStyleAttribute(boutonFermer.getElement(), "top", topBoutonFermer+"px");
setDimensionsContenu(overlayContenuUi.getOffsetHeight(), overlayContenuUi.getOffsetWidth());
}
private void setDimensionsContenu(int hauteur, int largeur) {
largeurContenu = largeur;
hauteurContenu = hauteur;
}
 
@Override
public void surOuvertureFenetre() {
// enregistrement des coordonnées des scrool
topFenetre = Window.getScrollTop();
gaucheFenetre = Window.getScrollLeft();
// scroll désactivé pour ne pas fausser le positionnement des boutons
Window.enableScrolling(false);
// Pas trouvé mieux que le timer pour bien redimensionner
// à voir s il existe une meilleure solution qui n'oblige pas
// par avance à connaitre le type d'objet contenu dans l'overlayContenu
// ou bien la taille de la fenetre
timerPlacement = new Timer() {
@Override
public void run() {
if(tailleDuContenuEstModifiee()) {
// On repositionne les boutons
gererDimensionsEtPositionnerBoutons();
}
}
};
timerPlacement.scheduleRepeating(30);
}
private boolean tailleDuContenuEstModifiee() {
UIObject overlayContenuUi = overlayContenu.getWidget();
return overlayContenuUi != null
&& (overlayContenuUi.getOffsetHeight() != hauteurContenu
|| overlayContenuUi.getOffsetWidth() != largeurContenu);
}
 
@Override
public void surFermetureFenetre() {
Window.enableScrolling(true);
// replacement de la fenêtre à la position de scroll d'origine
Window.scrollTo(gaucheFenetre, topFenetre);
timerPlacement.cancel();
}
@Override
public void surSetContenuFenetre() {
// nécessaire pour le défilement avec les touches du clavier
overlayContenu.setFocus(true);
}
 
@Override
public void afficherBoutonsSuivantsPrecedents(boolean afficher) {
boutonPrecedent.setVisible(afficher);
boutonSuivant.setVisible(afficher);
}
 
@Override
public boolean testerFermetureClicExterieur(ClickEvent event) {
Element e = DOM.eventGetTarget(Event.as(event.getNativeEvent()));
return event.getRelativeElement() != null && (e == overlayContenu.getElement());
}
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/composants/fenetreoverlay/FenetreOverlayDefilanteVue.ui.xml
New file
0,0 → 1,16
<ui:UiBinder xmlns:ui='urn:ui:com.google.gwt.uibinder'
xmlns:g='urn:import:com.google.gwt.user.client.ui' ui:generateFormat='com.google.gwt.i18n.rebind.format.PropertiesFormat'
ui:generateKeys="com.google.gwt.i18n.rebind.keygen.MD5KeyGenerator"
ui:generateLocales="default">
 
<ui:with field="constants" type="org.tela_botanica.del.client.i18n.Vocabulary" />
<g:VerticalPanel styleName="fenetreDefilante" ui:field="conteneurGlobal">
<g:FocusPanel ui:field="overlay" />
<g:HorizontalPanel ui:field="conteneurOverlayContenu" styleName="">
<g:Button ui:field="boutonPrecedent" text="" />
<g:FocusPanel ui:field="overlayContenu" />
<g:Button ui:field="boutonSuivant" text="" />
<g:Button ui:field="boutonFermer" />
</g:HorizontalPanel>
</g:VerticalPanel>
</ui:UiBinder>
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/composants/fenetreoverlay/FenetreOverlaySimplePresenteur.java
New file
0,0 → 1,27
package org.tela_botanica.del.client.composants.fenetreoverlay;
 
import org.tela_botanica.del.client.composants.presenteur.Presenteur;
 
/**
* Simple implémentation de la fenetre overlay defilante avec masquage direct des boutons
* suivant et précédent et simplification de la méthode
* @author aurelien
*
*/
public class FenetreOverlaySimplePresenteur extends FenetreOverlayDefilantePresenteur {
 
public FenetreOverlaySimplePresenteur(Vue vue) {
super(0, vue);
afficherBoutonsSuivantsPrecedents(false);
}
public void ouvrirFenetreModale(Presenteur presenteur) {
super.ouvrirFenetreModaleDefilante(0, presenteur);
}
 
@Override
public void surClicBoutonSuivant() {}
 
@Override
public void surClicBoutonPrecedent() {}
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/composants/fenetreoverlay/FenetreOverlayDefilantePresenteur.java
New file
0,0 → 1,148
package org.tela_botanica.del.client.composants.fenetreoverlay;
 
import org.tela_botanica.del.client.composants.presenteur.Presenteur;
 
import com.google.gwt.core.shared.GWT;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.event.dom.client.HasClickHandlers;
import com.google.gwt.event.dom.client.HasKeyDownHandlers;
import com.google.gwt.event.dom.client.KeyCodes;
import com.google.gwt.event.dom.client.KeyDownEvent;
import com.google.gwt.event.dom.client.KeyDownHandler;
import com.google.gwt.user.client.ui.HasVisibility;
import com.google.gwt.user.client.ui.HasWidgets;
import com.google.gwt.user.client.ui.IsWidget;
import com.google.gwt.user.client.ui.RootPanel;
 
public abstract class FenetreOverlayDefilantePresenteur {
 
public interface Vue extends IsWidget {
public HasKeyDownHandlers getConteneurGlobal();
public IsWidget getOverlay();
public void afficherBoutonsSuivantsPrecedents(boolean afficher);
public HasClickHandlers getOverlayHasClickHandlers();
public HasVisibility getOverlayVisibility();
public IsWidget getOverlayContenu();
public HasVisibility getOverlayContenuVisibility();
public HasWidgets getOverlayContenuHasWidgets();
public HasClickHandlers getBoutonFermer();
public HasClickHandlers getBoutonSuivant();
public HasClickHandlers getBoutonPrecedent();
public void setStyleOverlay(String style);
public void setStyleOverlayContenu(String style);
public void setOverlayContenu(IsWidget w);
public void viderOverlay();
public void viderOverlayContenu();
public void surOuvertureFenetre();
public void surFermetureFenetre();
public void surSetContenuFenetre();
public boolean testerFermetureClicExterieur(ClickEvent event);
}
private Vue vue;
private boolean fenetreModaleOuverte = false;
private int indexElementAffiche = 0;
 
// Constructeur
public FenetreOverlayDefilantePresenteur(int indexElementAffiche, Vue vue) {
this.indexElementAffiche = indexElementAffiche;
this.vue = vue;
gererEvenements();
}
// Afficheur
public void go() {
go(null);
}
 
public void go(HasWidgets composite) {
}
 
// Gestion des évènements
protected void gererEvenements() {
vue.getBoutonFermer().addClickHandler(new ClickHandler() {
public void onClick(ClickEvent event) {
fermerFenetreModale();
}
});
vue.getBoutonPrecedent().addClickHandler(new ClickHandler() {
public void onClick(ClickEvent event) {
surClicBoutonPrecedent();
}
});
vue.getBoutonSuivant().addClickHandler(new ClickHandler() {
public void onClick(ClickEvent event) {
surClicBoutonSuivant();
}
});
vue.getConteneurGlobal().addKeyDownHandler(new KeyDownHandler() {
@Override
public void onKeyDown(KeyDownEvent event) {
if(event.getNativeKeyCode() == KeyCodes.KEY_LEFT) {
surClicBoutonPrecedent();
}
if(event.getNativeKeyCode() == KeyCodes.KEY_RIGHT) {
surClicBoutonSuivant();
}
}
});
vue.getOverlayHasClickHandlers().addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
if(vue.testerFermetureClicExterieur(event)) {
fermerFenetreModale();
}
}
});
}
 
public void ouvrirFenetreModaleDefilante(int indexElementAffiche, Presenteur presenteurModal) {
vue.setStyleOverlay("overlay");
vue.setStyleOverlayContenu("overlayContenu");
vue.getOverlayContenuVisibility().setVisible(true);
vue.getOverlayVisibility().setVisible(true);
RootPanel.get().add(vue.asWidget());
fenetreModaleOuverte = true;
GWT.log("Index elemt à afficher :"+indexElementAffiche);
setContenuFenetreModale(indexElementAffiche, presenteurModal);
vue.surOuvertureFenetre();
}
public void setContenuFenetreModale(int indexElementAffiche, Presenteur presenteurModal) {
this.indexElementAffiche = indexElementAffiche;
vue.viderOverlayContenu();
presenteurModal.go(vue.getOverlayContenuHasWidgets());
vue.surSetContenuFenetre();
}
public abstract void surClicBoutonSuivant();
public abstract void surClicBoutonPrecedent();
public boolean fenetreModaleEstOuverte() {
return fenetreModaleOuverte;
}
 
public void fermerFenetreModale() {
vue.viderOverlay();
vue.viderOverlayContenu();
RootPanel.get().remove(vue.asWidget());
fenetreModaleOuverte = false;
vue.surFermetureFenetre();
}
public int getIndexElementAffiche() {
return indexElementAffiche;
}
 
public void afficherBoutonsSuivantsPrecedents(boolean afficher) {
vue.afficherBoutonsSuivantsPrecedents(afficher);
}
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/composants/validation/ValidateurChampTexteAbstrait.java
New file
0,0 → 1,40
package org.tela_botanica.del.client.composants.validation;
 
import com.google.gwt.user.client.ui.HTML;
import com.google.gwt.user.client.ui.HasText;
import com.google.gwt.user.client.ui.TextBox;
 
public abstract class ValidateurChampTexteAbstrait extends ValidateurFormulaireAbstrait {
 
private HasText textBox;
protected String styleErreur = "erreurFormTexte";
 
public ValidateurChampTexteAbstrait(HasText textBox) {
this.textBox = textBox;
}
public ValidateurChampTexteAbstrait(TextBox textBox, String styleErreur) {
this.textBox = textBox;
this.styleErreur = styleErreur;
}
 
public HasText getTextBox() {
return textBox;
}
 
public void setTextBox(TextBox textBox) {
this.textBox = textBox;
}
public String getStyleErreur() {
return styleErreur;
}
 
public void setStyleErreur(String styleErreur) {
this.styleErreur = styleErreur;
}
public void afficherStyleErreur(String styleErreur) {};
public void supprimerStyleErreur(String styleErreur) {};
 
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/composants/validation/ValidateurChampTexteNonNul.java
New file
0,0 → 1,26
package org.tela_botanica.del.client.composants.validation;
 
import org.tela_botanica.del.client.i18n.I18n;
 
import com.google.gwt.user.client.ui.HTML;
import com.google.gwt.user.client.ui.HasText;
import com.google.gwt.user.client.ui.TextBox;
 
public class ValidateurChampTexteNonNul extends ValidateurChampTexteAbstrait {
public ValidateurChampTexteNonNul(HasText textBox) {
super(textBox);
}
 
@Override
public boolean valider() {
if (getTextBox().getText().length() >= 0 && !getTextBox().getText().equals("")) {
supprimerStyleErreur(getStyleErreur());
return true;
} else {
afficherStyleErreur(getStyleErreur());
return false;
}
}
 
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/composants/validation/ValidateurFormulaireAbstrait.java
New file
0,0 → 1,9
package org.tela_botanica.del.client.composants.validation;
 
public abstract class ValidateurFormulaireAbstrait {
 
public abstract boolean valider();
public abstract void afficherStyleErreur(String styleErreur);
public abstract void supprimerStyleErreur(String styleErreur);
 
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/composants/validation/ValidateurChampDouble.java
New file
0,0 → 1,28
package org.tela_botanica.del.client.composants.validation;
 
import org.tela_botanica.del.client.i18n.I18n;
 
import com.google.gwt.user.client.ui.HTML;
import com.google.gwt.user.client.ui.HasText;
import com.google.gwt.user.client.ui.TextBox;
 
 
public class ValidateurChampDouble extends ValidateurChampTexteAbstrait {
 
public ValidateurChampDouble(HasText textBox) {
super(textBox);
}
 
@Override
public boolean valider() {
try {
Double.parseDouble(getTextBox().getText());
supprimerStyleErreur(getStyleErreur());
return true;
} catch (Exception e) {
afficherStyleErreur(getStyleErreur());
return false;
}
}
 
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/composants/validation/ValidateurChampNCaracteres.java
New file
0,0 → 1,32
package org.tela_botanica.del.client.composants.validation;
 
import org.tela_botanica.del.client.i18n.I18n;
 
import com.google.gwt.user.client.ui.HTML;
import com.google.gwt.user.client.ui.TextBox;
 
public class ValidateurChampNCaracteres extends ValidateurChampTexteAbstrait {
 
private int nbCaracteres = 0;
public ValidateurChampNCaracteres(TextBox textBox) {
super(textBox);
// TODO Auto-generated constructor stub
}
public void setNbCaracteres(int nbCaracteresMax) {
nbCaracteres = nbCaracteresMax;
}
 
@Override
public boolean valider() {
if(getTextBox().getText().length()>=nbCaracteres){
supprimerStyleErreur(getStyleErreur());
return true;
} else {
afficherStyleErreur(getStyleErreur());
return false;
}
}
 
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/composants/validation/ValidateurChampNumerique.java
New file
0,0 → 1,29
package org.tela_botanica.del.client.composants.validation;
 
import org.tela_botanica.del.client.i18n.I18n;
 
import com.google.gwt.user.client.ui.HTML;
import com.google.gwt.user.client.ui.HasText;
import com.google.gwt.user.client.ui.TextBox;
 
public class ValidateurChampNumerique extends ValidateurChampTexteAbstrait {
 
public ValidateurChampNumerique(HasText textBox) {
super(textBox);
}
 
@Override
public boolean valider() {
try{
Integer.parseInt(getTextBox().getText());
supprimerStyleErreur(getStyleErreur());
return true;
} catch (Exception e) {
supprimerStyleErreur(getStyleErreur());
return false;
}
}
 
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/composants/validation/ValidateurChampFlottant.java
New file
0,0 → 1,26
package org.tela_botanica.del.client.composants.validation;
 
import org.tela_botanica.del.client.i18n.I18n;
 
import com.google.gwt.user.client.ui.HTML;
import com.google.gwt.user.client.ui.TextBox;
 
public class ValidateurChampFlottant extends ValidateurChampTexteAbstrait {
 
public ValidateurChampFlottant(TextBox textBox) {
super(textBox);
}
 
@Override
public boolean valider() {
try {
Float.parseFloat(getTextBox().getText());
supprimerStyleErreur(getStyleErreur());
return true;
} catch (Exception e) {
afficherStyleErreur(getStyleErreur());
return false;
}
}
 
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/composants/presenteur/Presenteur.java
New file
0,0 → 1,73
package org.tela_botanica.del.client.composants.presenteur;
 
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.HasWidgets;
import com.google.gwt.user.client.ui.Panel;
import com.google.gwt.user.client.ui.RootPanel;
 
public abstract class Presenteur {
 
private Panel overlay;
private Panel overlayContenu;
private PresenteurVue presenteurVue;
private boolean fenetreModaleOuverte = false;
 
// Constructeur
public Presenteur() {
}
 
// Afficheur
public void go() {
go(null);
}
 
public abstract void go(HasWidgets composite);
 
// Gestion des évènements
protected abstract void gererEvenements();
 
public void ouvrirFenetreModale(Presenteur presenteurModal) {
presenteurVue = new PresenteurVue();
overlay = presenteurVue.overlay;
overlay.setStyleName("overlay");
overlay.setVisible(false);
RootPanel.get().add(overlay);
 
overlayContenu = presenteurVue.overlayContenu;
overlayContenu.setStyleName("overlayContenu");
 
Button boutonFermer = presenteurVue.boutonFermer;
boutonFermer.setStyleName("fermerOverlay");
boutonFermer.addClickHandler(new ClickHandler() {
 
public void onClick(ClickEvent event) {
fermerFenetreModale();
}
});
 
presenteurModal.go(overlayContenu);
 
RootPanel.get().add(overlayContenu);
overlayContenu.setVisible(true);
 
overlayContenu.add(boutonFermer);
overlay.setVisible(true);
fenetreModaleOuverte = true;
}
public boolean fenetreModaleEstOuverte() {
return fenetreModaleOuverte;
}
 
public void fermerFenetreModale() {
overlay.clear();
overlayContenu.clear();
RootPanel.get().remove(overlay);
RootPanel.get().remove(overlayContenu);
fenetreModaleOuverte = false;
}
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/composants/presenteur/PresenteurVue.java
New file
0,0 → 1,29
package org.tela_botanica.del.client.composants.presenteur;
 
import com.google.gwt.core.client.GWT;
import com.google.gwt.uibinder.client.UiBinder;
import com.google.gwt.uibinder.client.UiField;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.HTMLPanel;
import com.google.gwt.user.client.ui.Widget;
 
public class PresenteurVue extends Composite {
 
// Annotation can be used to change the name of the associated xml file
// @UiTemplate("ObservationRechercheVue.ui.xml")
interface MyUiBinder extends UiBinder<Widget, PresenteurVue> {
}
 
@UiField
HTMLPanel overlay, overlayContenu;
 
@UiField
Button boutonFermer;
 
private static MyUiBinder uiBinder = GWT.create(MyUiBinder.class);
 
protected PresenteurVue() {
initWidget(uiBinder.createAndBindUi(this));
}
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/composants/presenteur/PresenteurVue.ui.xml
New file
0,0 → 1,13
<ui:UiBinder xmlns:ui='urn:ui:com.google.gwt.uibinder'
xmlns:g='urn:import:com.google.gwt.user.client.ui' ui:generateFormat='com.google.gwt.i18n.rebind.format.PropertiesFormat'
ui:generateKeys="com.google.gwt.i18n.rebind.keygen.MD5KeyGenerator"
ui:generateLocales="default">
 
<ui:with field="constants" type="org.tela_botanica.del.client.i18n.Vocabulary" />
<g:VerticalPanel>
<g:Button ui:field="boutonFermer" text="{constants.fermer}" />
<g:HTMLPanel ui:field="overlay" />
<g:HTMLPanel ui:field="overlayContenu" />
</g:VerticalPanel>
</ui:UiBinder>
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/composants/votes/details/DetailListeVotesDeterminationPresenteur.java
New file
0,0 → 1,70
package org.tela_botanica.del.client.composants.votes.details;
 
import java.util.HashMap;
 
import org.tela_botanica.del.client.composants.presenteur.Presenteur;
import org.tela_botanica.del.client.modeles.PropositionDetermination;
import org.tela_botanica.del.client.modeles.VoteDetermination;
import org.tela_botanica.del.client.services.rest.VoteDeterminationServiceConcret;
import org.tela_botanica.del.client.services.rest.async.ListeVotesDeterminationCallback;
 
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.ui.HasWidgets;
import com.google.gwt.user.client.ui.IsWidget;
 
public class DetailListeVotesDeterminationPresenteur extends Presenteur {
 
public interface Vue extends IsWidget {
public void afficherVotes(PropositionDetermination propositionDetermination);
 
void stopChargement();
 
void startChargement();
 
public void afficherAucuneDonnees();
}
 
private Vue vue;
 
public DetailListeVotesDeterminationPresenteur(Vue vue) {
this.vue = vue;
}
 
public void go(HasWidgets container) {
container.add(vue.asWidget());
}
 
public void afficherVotes(final PropositionDetermination propositionDetermination) {
vue.startChargement();
VoteDeterminationServiceConcret voteService = new VoteDeterminationServiceConcret();
voteService.consulterVotesPourPropositionDetermination(propositionDetermination, new ListeVotesDeterminationCallback() {
 
@Override
public void surErreur(String messageErreur) {
Window.alert(messageErreur);
vue.stopChargement();
}
 
@Override
public void surRetour(HashMap<String, VoteDetermination> votesComplets) {
if (votesComplets != null && votesComplets.size() > 0) {
for (VoteDetermination voteDetermination : votesComplets.values()) {
voteDetermination.setPropositionDetermination(propositionDetermination);
}
 
propositionDetermination.setVotesDeterminations(votesComplets);
vue.afficherVotes(propositionDetermination);
vue.stopChargement();
} else {
vue.afficherAucuneDonnees();
vue.stopChargement();
}
}
});
}
 
@Override
protected void gererEvenements() {
// TODO Auto-generated method stub
}
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/composants/votes/details/DetailListeVotesDeterminationVue.java
New file
0,0 → 1,144
package org.tela_botanica.del.client.composants.votes.details;
 
import java.util.Date;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
 
import org.tela_botanica.del.client.i18n.I18n;
import org.tela_botanica.del.client.modeles.PropositionDetermination;
import org.tela_botanica.del.client.modeles.VoteDetermination;
import org.tela_botanica.del.client.utils.StringUtils;
 
import com.google.gwt.core.client.GWT;
import com.google.gwt.i18n.client.DateTimeFormat;
import com.google.gwt.uibinder.client.UiBinder;
import com.google.gwt.uibinder.client.UiField;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.HTML;
import com.google.gwt.user.client.ui.HTMLPanel;
import com.google.gwt.user.client.ui.HasWidgets;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.Panel;
import com.google.gwt.user.client.ui.Widget;
 
public class DetailListeVotesDeterminationVue extends Composite implements DetailListeVotesDeterminationPresenteur.Vue {
private static DetailListeVotesDeterminationVueUIiBinder uiBinder = GWT.create(DetailListeVotesDeterminationVueUIiBinder.class);
 
interface DetailListeVotesDeterminationVueUIiBinder extends UiBinder<Widget, DetailListeVotesDeterminationVue> {
};
@UiField
HTMLPanel titre, auteur, aucuneDonnees, detailVotePour, detailVoteContre;
@UiField
Label scorePour, scoreContre, date;
@UiField
Panel panneauChargement;
 
public DetailListeVotesDeterminationVue() {
initWidget(uiBinder.createAndBindUi(this));
}
public String formaterDate(String dateNonFormatee) {
try {
DateTimeFormat parseur = DateTimeFormat.getFormat("yyyy-dd-MM HH:mm:ss");
Date date = parseur.parse(dateNonFormatee);
DateTimeFormat formateur = DateTimeFormat.getFormat("dd/MM/yyyy");
return formateur.format(date);
} catch (IllegalArgumentException e) {
return "";
}
}
public String formaterDateQuiEstVraimentUneDateEtPasUnString(Date dateNonFormatee) {
String retour = "";
try {
DateTimeFormat formateur = DateTimeFormat.getFormat("dd/MM/yyyy");
retour = formateur.format(dateNonFormatee);
} catch (IllegalArgumentException e) {
}
return retour;
}
 
@Override
public void afficherVotes(PropositionDetermination propositionDetermination) {
HTML htmlTitre = new HTML(propositionDetermination.getEspece());
titre.add(htmlTitre);
HTML htmlAuteur = new HTML(I18n.getVocabulary().proposePar()+propositionDetermination.getAuteur());
auteur.add(htmlAuteur);
 
Date datePropDet = propositionDetermination.getDate();
String date = formaterDateQuiEstVraimentUneDateEtPasUnString(datePropDet);
this.date.setText(date);
Map<String, VoteDetermination> listeVotes = propositionDetermination.getVotesDeterminations();
int votesAnonymesPour = 0;
int votesAnonymesContre = 0;
float votesPour = 0;
float totalVotes = listeVotes.size();
for (Iterator<String> iterator = listeVotes.keySet().iterator(); iterator.hasNext();) {
VoteDetermination voteDetermination = listeVotes.get(iterator.next());
if (voteDetermination.getVote() == 1) {
//Votes pour
if (voteDetermination.getAuteur() != null) {
ajouterVote(voteDetermination, detailVotePour);
} else {
votesAnonymesPour++;
}
votesPour++;
} else {
//Votes contre
if (voteDetermination.getAuteur() != null) {
ajouterVote(voteDetermination, detailVoteContre);
} else {
votesAnonymesContre++;
}
}
}
float moyennePour = (votesPour/totalVotes*100);
scorePour.setText(StringUtils.formaterNombre(moyennePour, 2)+"%");
scoreContre.setText(StringUtils.formaterNombre(100 - moyennePour, 2)+"%");
if (votesAnonymesPour > 0) {
LigneVotePresenteur presenteurVote= new LigneVotePresenteur(new LigneVoteVue(), votesAnonymesPour);
presenteurVote.go(detailVotePour);
}
if (votesAnonymesContre > 0) {
LigneVotePresenteur presenteurVote= new LigneVotePresenteur(new LigneVoteVue(), votesAnonymesContre);
presenteurVote.go(detailVoteContre);
}
}
public void ajouterVote(VoteDetermination vote, HasWidgets panel) {
LigneVotePresenteur presenteurVote = new LigneVotePresenteur(new LigneVoteVue(), vote);
presenteurVote.go(panel);
}
@Override
public void startChargement() {
panneauChargement.setHeight((this.getOffsetHeight()/2)+"px");
panneauChargement.setWidth((this.getOffsetWidth()/2)+"px");
panneauChargement.setVisible(true);
}
 
@Override
public void stopChargement() {
panneauChargement.setVisible(false);
}
 
@Override
public void afficherAucuneDonnees() {
aucuneDonnees.setVisible(true);
}
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/composants/votes/details/LigneVoteVue.ui.xml
New file
0,0 → 1,12
<!DOCTYPE ui:UiBinder SYSTEM "http://dl.google.com/gwt/DTD/xhtml.ent">
<ui:UiBinder xmlns:ui='urn:ui:com.google.gwt.uibinder'
xmlns:g='urn:import:com.google.gwt.user.client.ui'
xmlns:vues="urn:import:org.tela_botanica.del.client.composants.forum">
<ui:with field="constants" type="org.tela_botanica.del.client.i18n.Vocabulary" />
<ui:style src="ligneVote.css" />
<g:HTMLPanel styleName="nettoyage">
<g:Label ui:field="auteur" styleName="{style.auteur}"></g:Label>
<g:Label ui:field="dateOuNb" styleName="{style.colonne2}"></g:Label>
</g:HTMLPanel>
</ui:UiBinder>
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/composants/votes/details/LigneVotePresenteur.java
New file
0,0 → 1,59
package org.tela_botanica.del.client.composants.votes.details;
 
import org.tela_botanica.del.client.composants.presenteur.Presenteur;
import org.tela_botanica.del.client.i18n.I18n;
import org.tela_botanica.del.client.modeles.VoteDetermination;
 
import com.google.gwt.i18n.client.DateTimeFormat;
import com.google.gwt.user.client.ui.HasWidgets;
import com.google.gwt.user.client.ui.IsWidget;
 
public class LigneVotePresenteur extends Presenteur {
 
public interface Vue extends IsWidget {
public void setAuteur(String auteur);
public void setColonneDateEtNb(String date);
}
private Vue vue;
private VoteDetermination vote;
public LigneVotePresenteur(Vue vue, VoteDetermination vote) {
this.vue = vue;
this.vote = vote;
afficherProposition();
}
//Pour les votes anonymes
public LigneVotePresenteur(Vue vue, int nbVotes) {
this.vue = vue;
vue.setAuteur(I18n.getMessages().etVotesAnonymes(String.valueOf(nbVotes)));
}
public void afficherProposition() {
String nomAuteur = vote.getAuteur().getNomComplet();
if (nomAuteur == null || nomAuteur.equals("")) {
nomAuteur = I18n.getVocabulary().utilisateurAnonyme();
}
vue.setAuteur(nomAuteur);
vue.setColonneDateEtNb(DateTimeFormat.getFormat("dd/MM/yyyy").format(vote.getDate()));
}
/**
* Declenchement du présenteur
*/
public void go(HasWidgets container) {
container.add(vue.asWidget());
gererEvenements();
}
 
protected void gererEvenements() {
}
 
}
 
 
 
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/composants/votes/details/LigneVoteVue.java
New file
0,0 → 1,32
package org.tela_botanica.del.client.composants.votes.details;
 
import com.google.gwt.core.client.GWT;
import com.google.gwt.uibinder.client.UiBinder;
import com.google.gwt.uibinder.client.UiField;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.Widget;
 
public class LigneVoteVue extends Composite implements LigneVotePresenteur.Vue {
 
interface LigneVoteVueUiBinder extends UiBinder<Widget, LigneVoteVue> {};
private static LigneVoteVueUiBinder uiBinder = GWT.create(LigneVoteVueUiBinder.class);
//Composants
@UiField
Label auteur, dateOuNb;
public LigneVoteVue() {
initWidget(uiBinder.createAndBindUi(this));
}
@Override
public void setAuteur(String auteur) {
this.auteur.setText(auteur);
}
@Override
public void setColonneDateEtNb(String date) {
this.dateOuNb.setText(date);
}
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/composants/votes/details/detailListeVotesDeterminationVue.css
New file
0,0 → 1,93
.conteneurTableauVotes {
z-index: 1500;
padding: 30px;
padding-right: 21px;
padding-top: 20px;
background: white;
width: 600px;
margin: 0 auto;
margin-top: 75px;
padding-bottom:25px;
}
 
.chargement {
padding-left: 165px;
}
 
.auteur {
color: #6C6865;
font-family: arial;
font-size: 13px;
letter-spacing: 0;
line-height: 18px;
text-transform: none;
}
 
.date {
color: #6C6865;
font-family: arial;
font-size: 13px;
letter-spacing: 0;
line-height: 18px;
text-transform: none;
margin-left:3px
}
 
.dateLabel {
color: #6C6865;
font-family: arial;
font-size: 13px;
letter-spacing: 0;
line-height: 18px;
text-transform: none;
margin-left:3px;
text-transform:lowercase
}
 
 
.detailVotePour {
width:250px;
float:left;
margin-bottom:15px
}
.detailVoteContre {
width:250px;
float:left;
}
.titreVotes div {
font-size:16px;
color:#8EB533;
margin-bottom:5px;
margin-right:15px;
float:left;
font-weight:bold;
}
.titreVotesContre div {
color:#f06a6a;
}
.detailVotes {
clear:left;
}
.detailVotes div {
float:left;
font-size:12px;
margin-bottom:1px;
}
.espece {
font-size: 15px;
font-weight: bold;
margin-right:3px;
margin-bottom:10px;
}
 
.lignePonderation {
margin-top:4px;
margin-left:20px;
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/composants/votes/details/DetailListeVotesDeterminationVue.ui.xml
New file
0,0 → 1,46
<!DOCTYPE ui:UiBinder SYSTEM "http://dl.google.com/gwt/DTD/xhtml.ent">
<ui:UiBinder
xmlns:ui='urn:ui:com.google.gwt.uibinder'
xmlns:g='urn:import:com.google.gwt.user.client.ui'
xmlns:vues="urn:import:org.tela_botanica.del.client.composants.forum">
<ui:with field="constants" type="org.tela_botanica.del.client.i18n.Vocabulary" />
<ui:style src="detailListeVotesDeterminationVue.css" />
<g:HTMLPanel styleName="{style.conteneurTableauVotes}">
<g:HorizontalPanel> <g:HTMLPanel ui:field='titre' styleName="{style.espece}" />
<g:HTMLPanel ui:field='auteur' styleName="{style.auteur}" />
<g:Label text="{constants.dateReleve}" styleName="{style.dateLabel}"></g:Label>
<g:Label ui:field='date' styleName="{style.date}"></g:Label>
</g:HorizontalPanel>
<g:HTML><hr /></g:HTML>
<g:HTMLPanel styleName="{style.detailVotePour}">
<g:HTMLPanel styleName="{style.titreVotes}">
<g:Label>Votes Pour</g:Label>
<g:Label ui:field="scorePour">%</g:Label>
</g:HTMLPanel>
<g:HTMLPanel ui:field="detailVotePour" styleName="{style.detailVotes}">
</g:HTMLPanel>
</g:HTMLPanel>
<g:HTMLPanel styleName="{style.detailVoteContre}">
<g:HorizontalPanel styleName="{style.titreVotes} {style.titreVotesContre}">
<g:Label>Votes Contre</g:Label>
<g:Label ui:field="scoreContre">%</g:Label>
</g:HorizontalPanel>
<g:HTMLPanel ui:field="detailVoteContre" styleName="{style.detailVotes}">
</g:HTMLPanel>
</g:HTMLPanel>
<g:HTML><hr class="nettoyage"/></g:HTML>
<g:HTMLPanel ui:field="panneauChargement" styleName="{style.chargement}">
<g:Image url="./img/wait.gif"></g:Image>
</g:HTMLPanel>
<g:HTMLPanel ui:field="aucuneDonnees" visible="false"><g:Label text="{constants.aucunVoteEffectue}"></g:Label></g:HTMLPanel>
<g:HTML>
<br class="nettoyage" />
</g:HTML>
<g:HTML styleName="petit aide">Ces votes permettent de confirmer ou non une détermination proposée par un membre du réseau. <br />
Vous pouvez changer à tout moment votre vote à l'aide de <img src="./img/pouce_bas.png" /> ou <img src="./img/pouce_haut.png" />. <br />
</g:HTML>
<g:HTML styleName="{style.lignePonderation} petit">Une pondération s'opère pour le calcul des votes : vote en tant que membre identifié (3 points) / non identifié (1 point).</g:HTML>
</g:HTMLPanel>
</ui:UiBinder>
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/composants/votes/details/ligneVote.css
New file
0,0 → 1,9
.auteur {
padding-right:10px;
width:150px;
}
 
.colonne2:before {
content:(' - ');
}
 
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/composants/votes/moyennevotes/moyenne.css
New file
0,0 → 1,115
.moyenne {
background: none repeat scroll 0 0 #333333;
display: block;
margin-left: -5px;
margin-top: -7px;
padding: 5px;
width: 116px;
}
 
.petit {
font-size: 11px;
color: #AAA
}
 
.petitgauche, .petitgauchecliquable {
font-size: 11px;
color: #AAA;
float: left;
}
 
.petitgauchecliquable, .fermerPanneauDetails {
text-decoration: underline;
cursor: pointer;
}
 
.chiffreDroite {
float: right;
margin-right: 10px;
color: #22ee22;
}
 
.panneauDetailVotes {
position: absolute;
top: -205px;
right: 0;
width : 200px;
height: 192px;
padding: 3px;
color: #dddddd;
background-color: #333333;
border: solid white 1px;
}
 
.fermerPanneauDetails {
position: absolute;
bottom: 3px;
right: 3px;
font-size: 11px;
color: #AAA;
}
 
.barreVote {
padding: 0 5px 0 5px
}
 
.validerVote {
font-size: 11px;
margin-left: 5px;
float:left
}
 
.zoneBoutonsVote {
position:absolute;
}
 
.annuler {
background: url("./img/cancel.png") no-repeat;
border: none;
padding-left: 16px;
padding-top: 16px;
margin-left: 5px;
cursor: pointer;
}
 
.zoneNoteGlobale {
background: none repeat scroll 0 0 #333333;
margin-left: 122px;
margin-top: -5px;
position: absolute;
white-space: nowrap;
width: 113px;
height:29px;
padding:5px;
}
 
.zoneFleur {
position:absolute;
top:5px;
margin-left:86px;
}
 
.protocole {
width:124px;
white-space:nowrap;
text-overflow:ellipsis;
overflow:hidden;
}
 
.zoneVoter {
background: #8eb533 none repeat scroll 0 0;
color: white;
font-size: 15px;
height: 40px;
margin-left: -5px;
margin-top: -18px;
position: absolute;
text-align: center;
width: 126px;
display: table;
}
 
.zoneVoter span {
display: table-cell;
vertical-align: middle;
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/composants/votes/moyennevotes/MoyenneVoteVue.ui.xml
New file
0,0 → 1,98
<ui:UiBinder xmlns:ui='urn:ui:com.google.gwt.uibinder' xmlns:g='urn:import:com.google.gwt.user.client.ui' ui:generateFormat='com.google.gwt.i18n.rebind.format.PropertiesFormat'
ui:generateKeys="com.google.gwt.i18n.rebind.keygen.MD5KeyGenerator" ui:generateLocales="default">
 
<ui:with field="constants" type="org.tela_botanica.del.client.i18n.Vocabulary"/>
<ui:style src="moyenne.css" />
 
<g:HTMLPanel styleName="{style.moyenne}">
<g:HTMLPanel ui:field="panneauDetailVotes" styleName="{style.panneauDetailVotes}">
<g:Label ui:field="lienPanneauFermer" styleName="{style.fermerPanneauDetails}">
Fermer X
</g:Label>
Moyenne pondérée: <span ui:field="pdvMoyennePonderee" class="chiffreDroite"></span>
<br/>
Moyenne arithmétique: <span ui:field="pdvMoyenneArithmetique" class="chiffreDroite"></span>
<br/>
Médiane: <span ui:field="pdvMediane" class="chiffreDroite"></span>
<br/>
Nombre de points: <span ui:field="pdvNbPoints" class="chiffreDroite"></span>
<br/>
<table class="notesVotes">
<tr>
<td class="image">
<img src="./img/etoile_5.png" style="width: 16px;"/>
</td>
<td class="barre">
<div ui:field="barre5" class="avancement"></div>
</td>
<td class="votants">
<span ui:field="votants5"></span>
</td>
</tr>
<tr>
<td>
<img src="./img/etoile_4.png" style="width: 16px;"/>
</td>
<td class="barre">
<div ui:field="barre4" class="avancement"></div>
</td>
<td class="votants">
<span ui:field="votants4"></span>
</td>
</tr>
<tr>
<td>
<img src="./img/etoile_3.png" style="width: 16px;"/>
</td>
<td class="barre">
<div ui:field="barre3" class="avancement"></div>
</td>
<td class="votants">
<span ui:field="votants3"></span>
</td>
</tr>
<tr>
<td>
<img src="./img/etoile_2.png" style="width: 16px;"/>
</td>
<td class="barre">
<div ui:field="barre2" class="avancement"></div>
</td>
<td class="votants">
<span ui:field="votants2"></span>
</td>
</tr>
<tr>
<td>
<img src="./img/etoile_1.png" style="width: 16px;"/>
</td>
<td class="barre">
<div ui:field="barre1" class="avancement"></div>
</td>
<td class="votants">
<span ui:field="votants1"></span>
</td>
</tr>
</table>
</g:HTMLPanel>
<g:HTMLPanel styleName="{style.zoneNoteGlobale}">
<g:Label styleName="petit enligne">Note générale</g:Label><g:Label ui:field="noteGenerale" styleName="petit enligne"/>
<g:Label ui:field="nbVotes" styleName="{style.petitgauchecliquable}"/>
<!-- <g:Label ui:field="nbPoints" styleName="{style.petitgauche}"/> -->
<g:HTMLPanel ui:field="zoneFleur" styleName="{style.zoneFleur}"></g:HTMLPanel>
</g:HTMLPanel>
<g:HorizontalPanel>
<g:Label styleName="{style.petit} {style.protocole}" ui:field="protocole" text="protocole"/>
</g:HorizontalPanel>
<g:Label ui:field="zoneVoter" styleName="{style.zoneVoter}" text="Votez !"></g:Label>
<g:HorizontalPanel ui:field="zoneDeVote">
<g:FocusPanel ui:field="voter" styleName="{style.barreVote}"/>
<g:HTMLPanel ui:field="votePrisEnCompte"><g:Label text="{constants.votePrisEnCompte}"></g:Label></g:HTMLPanel>
<g:HTMLPanel ui:field="voteModifie"><g:Label text="{constants.voteModifie}"></g:Label></g:HTMLPanel>
<g:HTMLPanel ui:field="voteSupprime"><g:Label text="{constants.voteSupprime}"></g:Label></g:HTMLPanel>
<g:HTMLPanel styleName="{style.zoneBoutonsVote}">
<g:Button ui:field="boutonAnnuler" title="{constants.supprimerVote}" styleName="{style.annuler}"></g:Button>
</g:HTMLPanel>
</g:HorizontalPanel>
</g:HTMLPanel>
</ui:UiBinder>
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/composants/votes/moyennevotes/MoyenneVotePresenteur.java
New file
0,0 → 1,414
package org.tela_botanica.del.client.composants.votes.moyennevotes;
 
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
 
import org.tela_botanica.del.client.cache.CacheClient;
import org.tela_botanica.del.client.composants.votefleur.VoteFleurPresenteur;
import org.tela_botanica.del.client.composants.votefleur.VoteFleurVue;
import org.tela_botanica.del.client.modeles.Image;
import org.tela_botanica.del.client.modeles.Protocole;
import org.tela_botanica.del.client.modeles.VoteProtocole;
import org.tela_botanica.del.client.navigation.evenement.BusEvenementiel;
import org.tela_botanica.del.client.navigation.evenement.changementEtatUtilisateur.EvenementChangementEtatUtilisateur;
import org.tela_botanica.del.client.navigation.evenement.changementEtatUtilisateur.GestionnaireEvenementChangementEtatUtilisateur;
import org.tela_botanica.del.client.navigation.evenement.suppressioncommentaire.EvenementSuppressionCommentaire;
import org.tela_botanica.del.client.navigation.evenement.suppressioncommentaire.GestionnaireEvenementSuppressionCommentaire;
import org.tela_botanica.del.client.services.rest.VoteProtocoleService;
import org.tela_botanica.del.client.services.rest.async.AjoutVoteProtocoleCallback;
import org.tela_botanica.del.client.services.rest.async.VoteProtocoleCallback;
 
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.event.dom.client.HasClickHandlers;
import com.google.gwt.event.dom.client.HasMouseMoveHandlers;
import com.google.gwt.event.dom.client.MouseMoveEvent;
import com.google.gwt.event.dom.client.MouseMoveHandler;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.ui.HasText;
import com.google.gwt.user.client.ui.HasWidgets;
import com.google.gwt.user.client.ui.IsWidget;
import com.google.gwt.user.client.ui.Panel;
 
public class MoyenneVotePresenteur {
 
public interface Vue extends IsWidget {
public HasClickHandlers getBoutonAnnuler();
 
public HasClickHandlers getVotes();
 
public int getValeurVote();
 
public void afficherBoutonAnnuler();
 
public void masquerBoutonAnnuler();
 
public void afficherNbVotes();
 
public void masquerNbVotes();
 
//public void afficherNbPoints();
 
//public void masquerNbPoints();
 
public void reinitialiserVotes();
 
public void rafraichir(int moyenneVote, int nbVotes, int nombrePoints, double moyenneArithmetique, double mediane, HashMap<Integer,Integer> occurrencesParNote, double moyennePonderee);
 
public void ajouterAuParent(HasWidgets composite);
 
public void afficherVotePrisEnCompte();
 
public HasWidgets getZoneFleur();
 
public HasText getZoneProtocole();
 
public HasText getNbVotes();
 
//public HasText getNbPoints();
 
public HasClickHandlers getLienNbVotes();
 
public void setNoteGenerale(int note);
 
public void afficherVoteModifie();
 
public HasMouseMoveHandlers getZoneVoter();
public void masquerZoneVoter();
public void afficherMessageVoteIdentifie(boolean doitEtreIdentifiePourVoter);
 
public void setNoteGeneraleToolTip(double valeurVoteTotalPrecise);
 
public void desactiverInteractionVote();
 
public void activerInteractionVote();
 
public void afficherVoteSupprime();
 
public Panel getPanneauDetailVotes();
 
public void afficherPanneauDetailVotes();
 
public void masquerPanneauDetailVotes();
 
public HasClickHandlers getLienPanneauFermer();
}
 
private Vue vue;
private Protocole protocole;
private Image image;
 
private int valeurVoteDefaut = -1;
private int valeurVoteUtilisateur = -1;
private int valeurVoteTotal = 0;
private double moyenneArithmetique = 0;
private double mediane = 0;
private int nombrePoints = 0;
private double valeurVoteTotalPrecise = 0.0;
private HashMap<Integer,Integer> occurrencesParNote;
 
// TODO: on devrait passer un conteneur qui permet d'accéder à ces services
private VoteProtocoleService voteProtocoleService;
 
public MoyenneVotePresenteur(Image image, Protocole protocole, Vue vue,
VoteProtocoleService voteProtocoleService) {
this.vue = vue;
this.protocole = protocole;
this.image = image;
this.voteProtocoleService = voteProtocoleService;
 
String nomProtocole = protocole.getNom();
nomProtocole = nomProtocole.substring(0, 1).toUpperCase()
+ nomProtocole.substring(1).toLowerCase();
vue.getZoneProtocole().setText(nomProtocole);
}
 
public void go(HasWidgets composite) {
vue.ajouterAuParent(composite);
gererEvenements();
rafraichirVue();
}
 
public void gererEvenements() {
vue.afficherMessageVoteIdentifie(utilisateurPeutVoter());
vue.getZoneVoter().addMouseMoveHandler(new MouseMoveHandler() {
@Override
public void onMouseMove(MouseMoveEvent event) {
if(utilisateurPeutVoter()) {
vue.masquerZoneVoter();
}
}
});
vue.getVotes().addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
if(utilisateurPeutVoter()) {
valeurVoteUtilisateur = vue.getValeurVote();
enregistrerVote();
vue.afficherBoutonAnnuler();
} else {
Window.alert("Voter pour ce protocole nécéssite d'être identifié");
}
 
}
});
 
vue.getBoutonAnnuler().addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
valeurVoteUtilisateur = valeurVoteDefaut;
vue.masquerBoutonAnnuler();
supprimerVote();
vue.reinitialiserVotes();
}
});
 
// Affiche un chouette panneau qui montre le détail des votes
vue.getLienNbVotes().addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
if (vue.getPanneauDetailVotes().isVisible()) {
vue.masquerPanneauDetailVotes();
} else {
vue.afficherPanneauDetailVotes();
}
}
});
 
vue.getLienPanneauFermer().addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
vue.masquerPanneauDetailVotes();
}
});
 
BusEvenementiel.getInstance().addHandler(EvenementChangementEtatUtilisateur.TYPE, new GestionnaireEvenementChangementEtatUtilisateur() {
@Override
public void onModificationEtatUtilisateur(EvenementChangementEtatUtilisateur evenementChangementEtatUtilisateur) {
rafraichirVue();
}
});
}
public boolean utilisateurPeutVoter() {
return !protocole.doitEtreIdentifiePourVoter() || CacheClient.getInstance().getUtilisateur().estIdentifie();
}
 
public void setValeurVoteUtilisateur(int valeurVoteUtilisateur) {
this.valeurVoteUtilisateur = valeurVoteUtilisateur;
}
 
public void enregistrerVote() {
vue.desactiverInteractionVote();
final VoteProtocole voteProtocole = new VoteProtocole();
voteProtocole.setProtocole(this.protocole);
voteProtocole.setVote(valeurVoteUtilisateur);
String idContributeur = CacheClient.getInstance().getUtilisateur()
.getId();
voteProtocole.setContributeur(idContributeur);
//TODO: ceci devrait pouvoir être factorisé
if (image.utilisateurAVotePourProtocole(this.protocole.getId() + "",
idContributeur)) {
voteProtocole.setId(image.getVotesProtocoles(this.protocole.getId()+"").get(idContributeur).getId());
VoteProtocoleCallback vpc = new VoteProtocoleCallback() {
@Override
public void surRetour(Void objetRetour) {
image.ajouterVoteProtocole(voteProtocole);
rafraichirVue();
vue.afficherVoteModifie();
vue.activerInteractionVote();
}
};
voteProtocoleService.modifierVote(image.getIdImage(),
voteProtocole, vpc);
} else {
AjoutVoteProtocoleCallback vpc = new AjoutVoteProtocoleCallback() {
@Override
public void surRetour(String idVote) {
voteProtocole.setId(idVote);
image.ajouterVoteProtocole(voteProtocole);
rafraichirVue();
vue.afficherVotePrisEnCompte();
vue.activerInteractionVote();
}
};
voteProtocoleService.ajouterVote(image.getIdImage(), voteProtocole,
vpc);
}
}
public void supprimerVote() {
vue.desactiverInteractionVote();
final String idContributeur = CacheClient.getInstance().getUtilisateur()
.getId();
final VoteProtocole voteProtocole = image.getVotesProtocoles(protocole.getId()).get(idContributeur);
VoteProtocoleCallback vpc = new VoteProtocoleCallback() {
@Override
public void surRetour(Void objetRetour) {
// TODO: voir si l'on affiche un message en cas de succès ?
image.supprimerVoteProtocole(protocole.getId() + "", idContributeur);
rafraichirVue();
vue.afficherVoteSupprime();
vue.activerInteractionVote();
}
 
};
voteProtocoleService.supprimerVote(image.getIdImage(), voteProtocole, vpc);
}
 
public int getValeurVoteTotal() {
return valeurVoteTotal;
}
 
public IsWidget getVue() {
return vue;
}
 
private void rafraichirVue() {
valeurVoteTotal = calculerMoyenneVotesArrondie();
moyenneArithmetique = calculerMoyenneVotes();
mediane = calculerMedianeVotes();
valeurVoteTotalPrecise = calculerMoyennePondereeVotes();
nombrePoints = calculerNombrePointsEchelleArbitraire();
VoteProtocole voteProtocole = image.getVotesProtocoles(
protocole.getId()).get(
CacheClient.getInstance().getUtilisateur().getId());
int voteUtilisateur = 0;
if (voteProtocole != null) {
voteUtilisateur = voteProtocole.getVote();
vue.masquerZoneVoter();
}
if(image.utilisateurAVotePourProtocole(protocole.getId()+"", CacheClient.getInstance().getUtilisateur().getId())) {
vue.afficherBoutonAnnuler();
}
vue.afficherMessageVoteIdentifie(utilisateurPeutVoter());
 
VoteFleurPresenteur presenteurFleur = new VoteFleurPresenteur(
new VoteFleurVue());
presenteurFleur.setNote(valeurVoteTotal);
vue.setNoteGenerale(valeurVoteTotal);
vue.setNoteGeneraleToolTip(valeurVoteTotalPrecise);
presenteurFleur.go(vue.getZoneFleur());
vue.rafraichir(voteUtilisateur, image.getVotesProtocoles(protocole.getId()).size(), nombrePoints,
moyenneArithmetique, mediane, occurrencesParNote, valeurVoteTotalPrecise);
}
 
public double calculerMedianeVotes() {
double med = 0;
// comparateur de votes (le bulldozer Java™ pour écraser une mouche)
class Comparatisateur3000 implements Comparator<VoteProtocole> {
@Override
public int compare(VoteProtocole v1, VoteProtocole v2) {
if (v1.getVote() > v2.getVote()) {
return 1;
} else if (v1.getVote() > v2.getVote()) {
return -1;
} else {
return 0;
}
}
}
// conversion en liste triable
List<VoteProtocole> liste = new ArrayList<VoteProtocole>(image.getVotesProtocoles(protocole.getId()).values());
Collections.sort(liste, new Comparatisateur3000());
int longueur = liste.size();
if (longueur > 0) {
if (longueur % 2 == 0) {
// moyenne des éléments centraux
med = (liste.get(longueur / 2 - 1).getVote() + liste.get(longueur / 2).getVote()) / 2;
} else {
// élément central
med = liste.get((int) (longueur / 2)).getVote();
}
}
return med;
}
 
// calcule la moyenne arithmétique
public double calculerMoyenneVotes() {
double valeurVote = 0;
double nbVote = 0;
for (Iterator<String> iterator = image
.getVotesProtocoles(protocole.getId()).keySet().iterator(); iterator
.hasNext();) {
VoteProtocole imageCelValidationData = image.getVotesProtocoles(
protocole.getId()).get(iterator.next());
valeurVote += (double) imageCelValidationData.getVote() / 5;
nbVote++;
}
 
if (nbVote > 0) {
valeurVote /= nbVote;
valeurVote *= 5;
}
 
return valeurVote;
}
 
// Calcule une moyenne, où chaque note est pondérée par son nombre d'occurrences au carré.
// voir http://www.tela-botanica.org/wikini/DevInformatiques/wakka.php?wiki=AppliDelCalculVotes
public double calculerMoyennePondereeVotes() {
 
double score = 0;
double diviseur = 0;
int nbOccurrences;
// mise à jour des occurrences par note, utile pour le panneau de détails
occurrencesParNote = new HashMap<Integer,Integer>();
 
// rangement par note => occurrences
for (String clef : image.getVotesProtocoles(protocole.getId()).keySet()) {
VoteProtocole imageCelValidationData = image.getVotesProtocoles(protocole.getId()).get(clef);
nbOccurrences = 1;
if (occurrencesParNote.containsKey(imageCelValidationData.getVote())) {
nbOccurrences = occurrencesParNote.get(imageCelValidationData.getVote()) + 1;
}
occurrencesParNote.put(imageCelValidationData.getVote(), nbOccurrences);
}
 
// calcul pondéré
for (Integer clef : occurrencesParNote.keySet()) {
score += clef * occurrencesParNote.get(clef) * occurrencesParNote.get(clef);
diviseur += occurrencesParNote.get(clef) * occurrencesParNote.get(clef);
}
 
if (diviseur > 0) {
score /= diviseur;
}
 
return score;
}
 
// remplace chaque note par un nombre de points noté dans "echelle" afin de favoriser
// les note fortes (5 et 4), pour le défi photo notamment
public int calculerNombrePointsEchelleArbitraire() {
int points = 0;
//int[] echelle = {-1,0,1,4,20};
int[] echelle = {1,10,100,1000,10000};
 
for (String clef : image.getVotesProtocoles(protocole.getId()).keySet()) {
VoteProtocole imageCelValidationData = image.getVotesProtocoles(protocole.getId()).get(clef);
if (imageCelValidationData.getVote() > 0) {
points += echelle[imageCelValidationData.getVote() - 1];
}
}
 
return points;
}
 
public int calculerMoyenneVotesArrondie() {
//double valeurVote = calculerMoyenneVotes();
double valeurVote = calculerMoyennePondereeVotes();
return (int) Math.round(valeurVote);
}
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/composants/votes/moyennevotes/MoyenneVoteVue.java
New file
0,0 → 1,289
package org.tela_botanica.del.client.composants.votes.moyennevotes;
 
import java.util.HashMap;
 
import org.cobogw.gwt.user.client.ui.Rating;
import org.tela_botanica.del.client.composants.votes.barrerepartition.InfoBulleAnim;
import org.tela_botanica.del.client.i18n.I18n;
 
import com.google.gwt.core.client.GWT;
import com.google.gwt.dom.client.DivElement;
import com.google.gwt.dom.client.SpanElement;
import com.google.gwt.event.dom.client.HasClickHandlers;
import com.google.gwt.event.dom.client.HasMouseMoveHandlers;
import com.google.gwt.i18n.client.NumberFormat;
import com.google.gwt.uibinder.client.UiBinder;
import com.google.gwt.uibinder.client.UiField;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.FocusPanel;
import com.google.gwt.user.client.ui.HasText;
import com.google.gwt.user.client.ui.HasWidgets;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.Panel;
import com.google.gwt.user.client.ui.Widget;
 
public class MoyenneVoteVue extends Composite implements MoyenneVotePresenteur.Vue {
 
// Annotation can be used to change the name of the associated xml file
// @UiTemplate("MoyenneVoteVue.ui.xml")
interface MyUiBinder extends UiBinder<Widget, MoyenneVoteVue> {
}
 
private static MyUiBinder uiBinder = GWT.create(MyUiBinder.class);
private Rating votes;
private int valeurOrigine;
private InfoBulleAnim animerVotePrisEnCompte;
private InfoBulleAnim animerVoteModifie;
private InfoBulleAnim animerVoteSupprime;
@UiField
FocusPanel voter;
 
@UiField
Panel votePrisEnCompte, voteModifie, voteSupprime, zoneFleur, panneauDetailVotes;
@UiField
Label nbVotes, protocole, noteGenerale/*, nbPoints*/, zoneVoter, lienPanneauFermer;
 
@UiField
Button boutonAnnuler;
 
@UiField
// pour le panneau de détail des votes
SpanElement pdvMoyenneArithmetique, pdvMoyennePonderee, pdvMediane, pdvNbPoints,
votants5, votants4, votants3, votants2, votants1;
@UiField
DivElement barre5, barre4, barre3, barre2, barre1;
public static final double TAILLE_MAX_BARRE = 135; // si "int", peut faire foirer les divisions
 
public MoyenneVoteVue() {
initWidget(uiBinder.createAndBindUi(this));
votes = new Rating(0, 5);
votes.setReadOnly(false);
voter.add(votes);
masquerBoutonAnnuler();
masquerPanneauDetailVotes();
votePrisEnCompte.setVisible(false);
animerVotePrisEnCompte = new InfoBulleAnim(votePrisEnCompte);
animerVoteModifie = new InfoBulleAnim(voteModifie);
animerVoteSupprime = new InfoBulleAnim(voteSupprime);
}
public HasClickHandlers getBoutonAnnuler() {
return boutonAnnuler;
}
public HasText getNbVotes() {
return nbVotes;
}
public HasClickHandlers getLienNbVotes() {
return nbVotes;
}
/*public HasText getNbPoints() {
return nbPoints;
}*/
public HasClickHandlers getVotes() {
return votes;
}
public int getValeurVote() {
return votes.getValue();
}
 
public void afficherBoutonAnnuler() {
boutonAnnuler.setVisible(true);
}
public void masquerBoutonAnnuler() {
boutonAnnuler.setVisible(false);
}
public void afficherNbVotes() {
nbVotes.setVisible(true);
}
 
public void masquerNbVotes() {
nbVotes.setVisible(false);
}
 
/*public void afficherNbPoints() {
nbPoints.setVisible(true);
}*/
 
/*public void masquerNbPoints() {
nbPoints.setVisible(false);
}*/
public void afficherPanneauDetailVotes() {
panneauDetailVotes.setVisible(true);
}
public void masquerPanneauDetailVotes() {
panneauDetailVotes.setVisible(false);
}
 
public Panel getPanneauDetailVotes() {
return panneauDetailVotes;
}
 
public HasClickHandlers getLienPanneauFermer() {
return lienPanneauFermer;
}
 
public void reinitialiserVotes() {
votes.setValue(valeurOrigine);
}
 
public void rafraichir(int voteUtilisateur, int nombreVotes, int nombrePoints, double moyenneArithmetique, double mediane, HashMap<Integer,Integer> occurrencesParNote, double moyennePonderee) {
valeurOrigine = voteUtilisateur;
String valeurVote = nombreVotes+" "+I18n.getVocabulary().nbVotes();
if (nombreVotes > 1) {
valeurVote += "s";
}
/*String valeurPoints = ", "+Math.max(0, nombrePoints)+" "+I18n.getVocabulary().nbPoints();
if (nombrePoints > 1) {
valeurPoints += "s";
}*/
nbVotes.setText(valeurVote);
//nbPoints.setText(valeurPoints);
pdvNbPoints.setInnerHTML("" + nombrePoints);
votes.setValue(voteUtilisateur);
rafraichirPanneauDetail(moyennePonderee, moyenneArithmetique, mediane, occurrencesParNote, nombreVotes);
}
 
// si la chose est nulle, on retourne 0
private int nullCestZero(Integer chose) {
if (chose == null) {
return 0;
} else {
return chose;
}
}
 
// try {
// codeConcisEtEfficace();
// } catch (ShitLanguageException e) {
// codeCracra();
// }
private void rafraichirPanneauDetail(double moyennePonderee, double moyenneArithmetique, double mediane, HashMap<Integer,Integer> occurrencesParNote, int nombreVotes) {
// stats
NumberFormat df = NumberFormat.getFormat("0.###");
this.pdvMoyennePonderee.setInnerHTML("" + df.format(moyennePonderee));
this.pdvMoyenneArithmetique.setInnerHTML("" + df.format(moyenneArithmetique));
this.pdvMediane.setInnerHTML("" + df.format(mediane));
// détail des votes
double tailleBarre1 = 0,
tailleBarre2 = 0,
tailleBarre3 = 0,
tailleBarre4 = 0,
tailleBarre5 = 0;
// on peut pas mettre des attributs dans une variable ? Quelle idée aussi de faire
// du Web avec un langage statique... du coup codre cracra, ça vous fera les pieds
if (nombreVotes > 0) {
if (occurrencesParNote.get(1) != null) {
tailleBarre1 = (int) (occurrencesParNote.get(1) * TAILLE_MAX_BARRE / nombreVotes);
}
if (occurrencesParNote.get(2) != null) {
tailleBarre2 = (int) (occurrencesParNote.get(2) * TAILLE_MAX_BARRE / nombreVotes);
}
if (occurrencesParNote.get(3) != null) {
tailleBarre3 = (int) (occurrencesParNote.get(3) * TAILLE_MAX_BARRE / nombreVotes);
}
if (occurrencesParNote.get(4) != null) {
tailleBarre4 = (int) (occurrencesParNote.get(4) * TAILLE_MAX_BARRE / nombreVotes);
}
if (occurrencesParNote.get(5) != null) {
tailleBarre5 = (int) (occurrencesParNote.get(5) * TAILLE_MAX_BARRE / nombreVotes);
}
}
this.barre1.setAttribute("style", "width: " + tailleBarre1 + "px;");
this.barre2.setAttribute("style", "width: " + tailleBarre2 + "px;");
this.barre3.setAttribute("style", "width: " + tailleBarre3 + "px;");
this.barre4.setAttribute("style", "width: " + tailleBarre4 + "px;");
this.barre5.setAttribute("style", "width: " + tailleBarre5 + "px;");
this.votants1.setInnerHTML("" + nullCestZero(occurrencesParNote.get(1)));
this.votants2.setInnerHTML("" + nullCestZero(occurrencesParNote.get(2)));
this.votants3.setInnerHTML("" + nullCestZero(occurrencesParNote.get(3)));
this.votants4.setInnerHTML("" + nullCestZero(occurrencesParNote.get(4)));
this.votants5.setInnerHTML("" + nullCestZero(occurrencesParNote.get(5)));
}
 
@Override
public void ajouterAuParent(HasWidgets composite) {
composite.add(this);
}
@Override
public void afficherVotePrisEnCompte() {
votePrisEnCompte.setStyleName("votePrisEnCompteOui");
animerVotePrisEnCompte.run(2000);
}
public HasWidgets getZoneFleur() {
return zoneFleur;
}
public HasText getZoneProtocole() {
return protocole;
}
public void setNoteGenerale(int note) {
noteGenerale.setText(" : " + note);
}
@Override
public void setNoteGeneraleToolTip(double valeurVoteTotalPrecise) {
double valeurArrondie = (double)Math.round(valeurVoteTotalPrecise * 1000) / 1000;
zoneFleur.setTitle(I18n.getVocabulary().votesMoyennePrecise()+valeurArrondie);
}
public void afficherVoteModifie() {
voteModifie.setStyleName("votePrisEnCompteOui");
animerVoteModifie.run(2000);
}
@Override
public void afficherVoteSupprime() {
voteSupprime.setStyleName("voteSupprime");
animerVoteSupprime.run(2000);
}
public HasMouseMoveHandlers getZoneVoter() {
return zoneVoter;
}
public void masquerZoneVoter() {
zoneVoter.setVisible(false);
}
@Override
public void desactiverInteractionVote() {
votes.setReadOnly(true);
boutonAnnuler.setEnabled(false);
boutonAnnuler.addStyleName("elementMasque");
votes.addStyleName("elementMasque");
}
@Override
public void activerInteractionVote() {
votes.setReadOnly(false);
boutonAnnuler.setEnabled(true);
boutonAnnuler.removeStyleName("elementMasque");
votes.removeStyleName("elementMasque");
}
 
@Override
public void afficherMessageVoteIdentifie(boolean peutVoter) {
String message = I18n.getVocabulary().votez();
if(!peutVoter) {
message = I18n.getVocabulary().identifiezVousPourVoter();
}
zoneVoter.getElement().setInnerHTML("<span>"+message+" !</span>");
}
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/composants/votes/barrerepartition/barreRepartition.css
New file
0,0 → 1,93
.conteneurBarre {
width:130px;
display: inline;
}
 
.conteneurBarreOuiNon {
display: inline;
float: right;
}
 
.labelTaxon {
float: left;
margin-right: 5px;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
width: 190px;
margin-bottom: 5px;
text-align:left;
}
 
.barre {
width:50px;
height:15px;
background:#BBB;
float:left;
margin-right:2px;
margin-left:2px;
display: inline;
float:left;
}
 
.pourcentage {
position:absolute;
font-size:10px;
width:48px;
text-align:center;
}
 
.barreOui {
background:#8EB533;
padding-bottom:15px;
}
 
.barreNon {
background:#f06a6a;
padding-bottom:15px;
}
 
.boutonOui, .boutonNon {
text-align:center;
color:white;
line-height:1em;
font-size:15px;
font-weight:bold;
cursor:pointer;
float:left;
background:#AAA;
}
 
.boutonOui {
width:9%;
height:15px;
width:30px;
border-radius:0 2px 2px 0;
background-image: url("img/pouce_haut.png");
}
 
.boutonOui:hover {
background-image: url("img/pouce_haut_hover.png");
}
 
.boutonNon:hover {
background-image: url("img/pouce_bas_hover.png");
}
 
.boutonNon {
width:9%;
height:15px;
width:30px;
border-radius:2px 0 0 2px;
background-image: url("img/pouce_bas.png");
margin-right:5px;
}
 
.score {
font-size:13px;
color:#333;
font-weight:bold;
margin-right:10px;
width:28px;
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/composants/votes/barrerepartition/InfoBulleAnim.java
New file
0,0 → 1,30
package org.tela_botanica.del.client.composants.votes.barrerepartition;
 
import com.google.gwt.animation.client.Animation;
import com.google.gwt.user.client.ui.Widget;
 
public class InfoBulleAnim extends Animation{
 
private Widget widget;
public InfoBulleAnim(Widget widget) {
this.widget = widget;
widget.setVisible(false);
}
@Override
protected void onStart() {
super.onStart();
widget.setVisible(true);
}
@Override
protected void onUpdate(double progress) {
}
@Override
protected void onComplete() {
super.onComplete();
widget.setVisible(false);
}
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/composants/votes/barrerepartition/BarreRepartitionVoteVue.ui.xml
New file
0,0 → 1,16
<!DOCTYPE ui:UiBinder SYSTEM "http://dl.google.com/gwt/DTD/xhtml.ent">
<ui:UiBinder xmlns:ui="urn:ui:com.google.gwt.uibinder"
xmlns:g="urn:import:com.google.gwt.user.client.ui">
<ui:with field="constants" type="org.tela_botanica.del.client.i18n.Vocabulary" />
<ui:style src="barreRepartition.css" />
<g:HTMLPanel styleName="{style.conteneurBarre}">
<g:Label styleName="gauche {style.score}" ui:field="score">--</g:Label>
<g:Label ui:field="nomTaxon" styleName="{style.labelTaxon} labelTaxon" />
<g:HTMLPanel styleName="{style.conteneurBarreOuiNon}">
<g:PushButton ui:field="boutonNon" text=" " styleName="{style.boutonNon}"/>
<g:PushButton ui:field="boutonOui" text=" " styleName="{style.boutonOui}"/>
<g:HTMLPanel ui:field="votePrisEnCompte"><g:Label text="{constants.votePrisEnCompte}"></g:Label></g:HTMLPanel>
<g:HTMLPanel ui:field="voteModifie"><g:Label text="{constants.voteModifie}"></g:Label></g:HTMLPanel>
</g:HTMLPanel>
</g:HTMLPanel>
</ui:UiBinder>
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/composants/votes/barrerepartition/BarreRepartitionVotePresenteur.java
New file
0,0 → 1,171
package org.tela_botanica.del.client.composants.votes.barrerepartition;
 
import java.util.Date;
 
import org.tela_botanica.del.client.cache.CacheClient;
import org.tela_botanica.del.client.modeles.MoyenneVote;
import org.tela_botanica.del.client.modeles.PropositionDetermination;
import org.tela_botanica.del.client.modeles.VoteDetermination;
import org.tela_botanica.del.client.navigation.evenement.BusEvenementiel;
import org.tela_botanica.del.client.navigation.evenement.voteDetermination.EvenementVoteDetermination;
import org.tela_botanica.del.client.services.CalculVoteDeterminationService;
import org.tela_botanica.del.client.services.rest.VoteDeterminationService;
import org.tela_botanica.del.client.services.rest.async.AjoutVoteDeterminationCallback;
 
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.event.dom.client.HasClickHandlers;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.ui.HasText;
import com.google.gwt.user.client.ui.HasWidgets;
import com.google.gwt.user.client.ui.IsWidget;
 
public class BarreRepartitionVotePresenteur {
 
public interface Vue extends IsWidget {
public void afficherVotes(int pourcentage, String NomTaxon, String auteur, boolean estPropositionInitiale);
public HasClickHandlers getBoutonOui();
public HasClickHandlers getBoutonNon();
public void desactiverBoutons();
public void activerBoutons();
public void setVoteOuiEffectue();
public void setVoteNonEffectue();
public void afficherVotePrisEnCompte(boolean b);
public void afficherVoteModifie(boolean b);
public void toggleNomEspece();
public HasText getScore();
}
 
private Vue vue;
private MoyenneVote moyenneVote;
 
// TODO: classe conteneur qui est passé en paramètre au constructeur
private VoteDeterminationService voteDeterminationService;
 
public BarreRepartitionVotePresenteur(Vue vue, VoteDeterminationService voteDeterminationService) {
this.vue = vue;
this.voteDeterminationService = voteDeterminationService;
gererEvenements();
}
 
public void go(HasWidgets container) {
container.add(vue.asWidget());
}
 
public void afficherVotes(MoyenneVote moyenneVote) {
this.moyenneVote = moyenneVote;
int score = moyenneVote.getScore();
 
String intitule = moyenneVote.getIntituleAssocie();
PropositionDetermination proposition = moyenneVote.getPropositionAssociee();
boolean estPropositionInitiale = false;
if (proposition != null) {
estPropositionInitiale = moyenneVote.getPropositionAssociee().estPropositionInitiale();
}
vue.afficherVotes(score, intitule, moyenneVote.getPropositionAssociee().getAuteur(), estPropositionInitiale);
afficherValeurVoteUtilisateur();
}
public void afficherValeurVoteUtilisateur() {
String idUtilisateur = CacheClient.getInstance().getUtilisateur().getId();
if(moyenneVote.getPropositionAssociee().utilisateurAVotePourDetermination(idUtilisateur)) {
boolean valeurVote = (moyenneVote.getPropositionAssociee().getVotesDeterminations().get(idUtilisateur).getVote() == 1) ? true : false;
if(valeurVote) {
vue.setVoteOuiEffectue();
} else {
vue.setVoteNonEffectue();
}
}
}
 
public Vue getBarreRepartitionVoteVue() {
return vue;
}
 
public MoyenneVote getMoyenneVote() {
return moyenneVote;
}
 
public void gererEvenements() {
 
vue.getBoutonOui().addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
voter(true);
}
});
 
vue.getBoutonNon().addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
voter(false);
}
});
}
 
private void surVoteDetermination(final VoteDetermination vd) {
if (vd.getPropositionDetermination().equals(moyenneVote.getPropositionAssociee())) {
AjoutVoteDeterminationCallback vdc = new AjoutVoteDeterminationCallback() {
 
@Override
public void surErreur(String messageErreur) {
Window.alert(messageErreur);
vue.activerBoutons();
}
 
@Override
public void surRetour(Void objetRetour) {
moyenneVote.getPropositionAssociee().ajouterVoteDetermination(vd);
moyenneVote = CalculVoteDeterminationService.calculerVoteDetermination(moyenneVote.getPropositionAssociee());
afficherVotes(moyenneVote);
vue.activerBoutons();
boolean valeurVote = (vd.getVote() == 1) ? true : false;
if(valeurVote) {
vue.setVoteOuiEffectue();
} else {
vue.setVoteNonEffectue();
}
// l'évènement n'est lancé que si le vote est validé
BusEvenementiel.getInstance().fireEvent(new EvenementVoteDetermination(vd));
}
};
 
if (moyenneVote.getPropositionAssociee().utilisateurAVotePourDetermination(vd.getContributeur())) {
voteDeterminationService.modifierVote(vd, vdc);
vue.afficherVoteModifie(vd.getVote()==1);
} else {
voteDeterminationService.ajouterVote(vd, vdc);
vue.afficherVotePrisEnCompte(vd.getVote()==1);
}
}
}
public void toggleNomEspece() {
vue.toggleNomEspece();
}
 
public void voter(boolean oui) {
 
VoteDetermination vd = new VoteDetermination();
vd.setPropositionDetermination(moyenneVote.getPropositionAssociee());
vd.setContributeur(CacheClient.getInstance().getUtilisateur().getId());
vd.setDate(new Date());
 
int valeurVote = oui ? 1 : 0;
vd.setVote(valeurVote);
vd.setId(CacheClient.getInstance().getUtilisateur().getId());
 
if (oui) {
vue.setVoteOuiEffectue();
} else {
vue.setVoteNonEffectue();
}
vue.desactiverBoutons();
surVoteDetermination(vd);
}
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/composants/votes/barrerepartition/BarreRepartitionVoteVue.java
New file
0,0 → 1,126
package org.tela_botanica.del.client.composants.votes.barrerepartition;
 
import org.tela_botanica.del.client.i18n.I18n;
 
import com.google.gwt.core.client.GWT;
import com.google.gwt.event.dom.client.HasClickHandlers;
import com.google.gwt.uibinder.client.UiBinder;
import com.google.gwt.uibinder.client.UiField;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.HasText;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.Panel;
import com.google.gwt.user.client.ui.PushButton;
import com.google.gwt.user.client.ui.Widget;
 
public class BarreRepartitionVoteVue extends Composite implements BarreRepartitionVotePresenteur.Vue {
 
interface MyUiBinder extends UiBinder<Widget, BarreRepartitionVoteVue> {
}
 
private static MyUiBinder uiBinder = GWT.create(MyUiBinder.class);
private InfoBulleAnim animerVotePrisEnCompte;
private InfoBulleAnim animerVoteModifie;
 
@UiField
Label nomTaxon, score;
@UiField
Panel votePrisEnCompte, voteModifie;
@UiField
PushButton boutonOui, boutonNon;
 
public BarreRepartitionVoteVue() {
initWidget(uiBinder.createAndBindUi(this));
votePrisEnCompte.setVisible(false);
voteModifie.setVisible(false);
animerVotePrisEnCompte = new InfoBulleAnim(votePrisEnCompte);
animerVoteModifie = new InfoBulleAnim(voteModifie);
boutonOui.setTitle(I18n.getVocabulary().JeSuisDaccord());
boutonNon.setTitle(I18n.getVocabulary().JeNeSuisPasDaccord());
}
 
@Override
public void afficherVotes(int pourcentage, String nomTaxon, String auteur, boolean estPropositionInitiale) {
this.nomTaxon.setText(nomTaxon);
this.nomTaxon.setTitle(nomTaxon + " - " + auteur);
score.setText(String.valueOf(pourcentage));
if (estPropositionInitiale) {
this.nomTaxon.addStyleName("propositionInitiale");
}
}
 
@Override
public HasClickHandlers getBoutonOui() {
return boutonOui;
}
 
@Override
public HasClickHandlers getBoutonNon() {
return boutonNon;
}
 
@Override
public void setVoteOuiEffectue() {
boutonOui.setEnabled(false);
boutonOui.addStyleName("boutonVoteOuiDesactive");
boutonNon.setEnabled(true);
boutonNon.removeStyleName("boutonVoteNonDesactive");
boutonOui.setTitle("");
boutonNon.setTitle(I18n.getVocabulary().JeNeSuisPasDaccord());
}
 
@Override
public void setVoteNonEffectue() {
boutonOui.setEnabled(true);
boutonOui.removeStyleName("boutonVoteOuiDesactive");
boutonNon.setEnabled(false);
boutonNon.addStyleName("boutonVoteNonDesactive");
boutonOui.setTitle(I18n.getVocabulary().JeSuisDaccord());
boutonNon.setTitle("");
}
 
@Override
public void afficherVotePrisEnCompte(boolean voteOui) {
if (voteOui) {
votePrisEnCompte.removeStyleName("votePrisEnCompteNon");
votePrisEnCompte.setStyleName("votePrisEnCompteOui");
} else {
votePrisEnCompte.removeStyleName("votePrisEnCompteOui");
votePrisEnCompte.setStyleName("votePrisEnCompteNon");
}
animerVotePrisEnCompte.run(2000);
}
 
public void afficherVoteModifie(boolean voteOui) {
if (voteOui) {
voteModifie.removeStyleName("votePrisEnCompteNon");
voteModifie.setStyleName("votePrisEnCompteOui");
} else {
voteModifie.removeStyleName("votePrisEnCompteOui");
voteModifie.setStyleName("votePrisEnCompteNon");
}
animerVoteModifie.run(2000);
}
 
@Override
public void desactiverBoutons() {
boutonNon.setEnabled(false);
boutonOui.setEnabled(false);
}
 
@Override
public void activerBoutons() {
boutonNon.setEnabled(true);
boutonOui.setEnabled(true);
}
 
@Override
public void toggleNomEspece() {
nomTaxon.setVisible(!nomTaxon.isVisible());
}
@Override
public HasText getScore() {
return score;
}
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/composants/preferences/preferences.css
New file
0,0 → 1,58
.conteneurPreferences {
z-index: 1500;
padding: 30px;
padding-right: 21px;
padding-top: 20px;
background: white;
width: 370px;
margin: 0 auto;
margin-top: 75px;
padding-bottom:50px;
}
 
.messageTemporaire {
font-style: italic;
}
 
.boutonSauvegarder:hover {
background-color: #AAA
}
 
.colonneGauche,.colonneDroite {
width: 300px;
}
 
.colonneGauche {
padding-right: 30px
}
 
.colonneGauche select {
width: 100%
}
 
.colonneGauche input {
width: 95%
}
 
.boutonSauvegarder {
border: solid 1px #AAA;
cursor: pointer;
float: left;
margin-top: 10px;
margin-bottom: 5px;
margin-right: 5px;
float: right;
background: url(./img/add.png) no-repeat 5px 7px #DDD;
padding: 5px;
padding-left: 25px;
cursor: pointer
}
 
.zoneMailsMesObs {
margin-bottom: 10px;
}
 
.zoneMailsToutesObs {
margin-bottom: 10px;
margin-top: 20px;
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/composants/preferences/PreferencesVue.ui.xml
New file
0,0 → 1,30
<!DOCTYPE ui:UiBinder SYSTEM "http://dl.google.com/gwt/DTD/xhtml.ent">
<ui:UiBinder
xmlns:ui='urn:ui:com.google.gwt.uibinder'
xmlns:g='urn:import:com.google.gwt.user.client.ui'>
<ui:with field="constants" type="org.tela_botanica.del.client.i18n.Vocabulary"/>
<ui:style src="preferences.css" />
<g:HTMLPanel styleName="{style.conteneurPreferences}">
<g:Label text="{constants.preferences}" styleName="titre"/>
<g:Label styleName="petit {style.messageTemporaire}" text="{constants.messageTemporaireMails}" />
<g:HTML><br /></g:HTML>
<g:VerticalPanel ui:field="panneauChargement">
<g:Image url="./img/wait.gif"></g:Image>
</g:VerticalPanel>
<g:HTMLPanel styleName="{style.colonneGauche}" ui:field="conteneurChamps">
<g:HTMLPanel styleName="{style.zoneMailsMesObs}">
<g:Label text="{constants.recevoirMailComProp}" styleName="petit" />
<g:CheckBox ui:field="recevoirMailsMesObs" styleName="gauche pointeur"/><g:Label text="{constants.comEtPropSurObs}" styleName="petit" />
<g:CheckBox ui:field="recevoirMailsMesCom" styleName="gauche pointeur"/><g:Label text="{constants.comSurComEtProp}" styleName="petit" />
</g:HTMLPanel>
<g:HTMLPanel styleName="{style.zoneMailsToutesObs}">
<g:CheckBox ui:field="recevoirMailsToutesObs" styleName="gauche pointeur" />
<g:Label text="{constants.recevoirMailsToutesObs}" styleName="petit" />
</g:HTMLPanel>
<g:Button text="{constants.sauvegarder}" ui:field="boutonSauvegarderPreferences" styleName="{style.boutonSauvegarder} arrondi"/>
</g:HTMLPanel>
</g:HTMLPanel>
 
</ui:UiBinder>
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/composants/preferences/PreferencesPresenteur.java
New file
0,0 → 1,93
package org.tela_botanica.del.client.composants.preferences;
 
import java.util.HashMap;
 
import org.tela_botanica.del.client.cache.CacheClient;
import org.tela_botanica.del.client.composants.presenteur.Presenteur;
import org.tela_botanica.del.client.navigation.evenement.BusEvenementiel;
import org.tela_botanica.del.client.navigation.evenement.changementPreferences.EvenementChangementPreferences;
import org.tela_botanica.del.client.services.rest.PreferencesService;
import org.tela_botanica.del.client.services.rest.async.ListePreferencesCallback;
import org.tela_botanica.del.client.services.rest.async.ModificationPreferencesCallback;
 
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.event.dom.client.HasClickHandlers;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.ui.HasWidgets;
import com.google.gwt.user.client.ui.IsWidget;
 
public class PreferencesPresenteur extends Presenteur {
private Vue vue;
private PreferencesService preferencesService;
private HashMap<String, String> preferences = null;
public interface Vue extends IsWidget {
public void afficherMessageChargement();
public void cacherMessageChargement();
public String getValeurRecevoirMailsMesObs();
public String getValeurRecevoirMailsMesCom();
public String getValeurRecevoirMailsToutesObs();
public void setValeurRecevoirMailsMesObs(boolean valeur);
public void setValeurRecevoirMailsMesCom(boolean valeur);
public void setValeurRecevoirMailsToutesObs(boolean valeur);
public HasClickHandlers getBoutonSauvegarder();
}
public PreferencesPresenteur(Vue vue, PreferencesService preferencesService) {
this.vue = vue;
this.preferencesService = preferencesService;
gererEvenements();
}
 
@Override
public void go(HasWidgets composite) {
preferences = CacheClient.getInstance().getUtilisateur().getPreferences();
if (preferences == null) {
preferencesService.chargerPreferences(CacheClient.getInstance().getUtilisateur(), new ListePreferencesCallback() {
@Override
public void surRetour(java.util.HashMap<String, String> objetRetour) {
preferences = objetRetour;
CacheClient.getInstance().getUtilisateur().setPreferences(objetRetour);
affecterValeursChamps(preferences);
vue.cacherMessageChargement();
}
});
} else {
vue.cacherMessageChargement();
affecterValeursChamps(preferences);
}
composite.add(vue.asWidget());
}
private void affecterValeursChamps(HashMap<String, String> preferences) {
vue.setValeurRecevoirMailsMesObs(getPreferenceBool(preferences.get("mail_notification_mes_obs")));
vue.setValeurRecevoirMailsMesCom(getPreferenceBool(preferences.get("mail_notification_mes_com")));
vue.setValeurRecevoirMailsToutesObs(getPreferenceBool(preferences.get("mail_notification_toutes_obs")));
}
private boolean getPreferenceBool(String valeur) {
return (valeur.equals("1")) ? true : false;
}
 
@Override
protected void gererEvenements() {
vue.getBoutonSauvegarder().addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
vue.afficherMessageChargement();
preferences.put("mail_notification_mes_obs", vue.getValeurRecevoirMailsMesObs());
preferences.put("mail_notification_mes_com", vue.getValeurRecevoirMailsMesCom());
preferences.put("mail_notification_toutes_obs", vue.getValeurRecevoirMailsToutesObs());
preferencesService.modifierPreferences(CacheClient.getInstance().getUtilisateur(), preferences, new ModificationPreferencesCallback() {
@Override
public void surRetour(String objetRetour) {
vue.cacherMessageChargement();
BusEvenementiel.getInstance().fireEvent(new EvenementChangementPreferences());
}
});
}
});
}
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/composants/preferences/PreferencesVue.java
New file
0,0 → 1,86
package org.tela_botanica.del.client.composants.preferences;
 
import com.google.gwt.core.client.GWT;
import com.google.gwt.event.dom.client.HasClickHandlers;
import com.google.gwt.uibinder.client.UiBinder;
import com.google.gwt.uibinder.client.UiField;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.CheckBox;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.Panel;
import com.google.gwt.user.client.ui.Widget;
 
public class PreferencesVue extends Composite implements PreferencesPresenteur.Vue {
@UiField
Panel panneauChargement, conteneurChamps;
@UiField
public CheckBox recevoirMailsMesObs;
@UiField
public CheckBox recevoirMailsMesCom;
@UiField
public CheckBox recevoirMailsToutesObs;
@UiField
public Button boutonSauvegarderPreferences;
 
interface PreferencesVueUIiBinder extends UiBinder<Widget, PreferencesVue> {
};
 
PreferencesVueUIiBinder uiBinder = GWT.create(PreferencesVueUIiBinder.class);
 
public PreferencesVue() {
initWidget(uiBinder.createAndBindUi(this));
}
@Override
public void afficherMessageChargement() {
panneauChargement.setHeight(this.getOffsetHeight()+"px");
panneauChargement.setVisible(true);
conteneurChamps.setVisible(false);
}
 
@Override
public void cacherMessageChargement() {
panneauChargement.setVisible(false);
conteneurChamps.setVisible(true);
}
@Override
public void setValeurRecevoirMailsMesObs(boolean valeur) {
recevoirMailsMesObs.setValue(valeur);
}
@Override
public void setValeurRecevoirMailsMesCom(boolean valeur) {
recevoirMailsMesCom.setValue(valeur);
}
@Override
public void setValeurRecevoirMailsToutesObs(boolean valeur) {
recevoirMailsToutesObs.setValue(valeur);
}
@Override
public String getValeurRecevoirMailsMesObs() {
return (recevoirMailsMesObs.getValue()) ? "1" : "0";
}
@Override
public String getValeurRecevoirMailsMesCom() {
return (recevoirMailsMesCom.getValue()) ? "1" : "0";
}
@Override
public String getValeurRecevoirMailsToutesObs() {
return (recevoirMailsToutesObs.getValue()) ? "1" : "0";
}
 
@Override
public HasClickHandlers getBoutonSauvegarder() {
return boutonSauvegarderPreferences;
}
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/composants/metadonnees/metadonneesEnLigne.css
New file
0,0 → 1,59
.metadonnees {
width:100%;
}
.metadonnees div {
float:left;
padding:0 3px 0 0;
}
.zoneReferentiel {
margin-top:1em;
}
.famille {
display:none;
}
.nomCommun {
}
.nomCommun:before {
content:"(";
}
.nomCommun:after {
content:")";
}
.metaPart1 {
line-height:20px;
clear:both;
font-size:15px;
}
.metaPart2 {
line-height:20px;
clear:both;
color:#777;
max-width:850px;
}
.metaPart3 {
line-height:20px;
display:none;
max-width:850px;
}
.lieuDit {
}
.zoneLieu {
}
.zoneStation {
padding-left: 5px;
}
.zoneMilieu {
padding-left: 5px;
}
.labelGeo {
font-weight:bold;
}
.espece {
color:#454341;
font-size:18px;
margin-top:-2px;
}
.label {
font-size:12px;
margin-top:3px;
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/composants/metadonnees/MetadonneesVue.ui.xml
New file
0,0 → 1,99
<ui:UiBinder xmlns:ui='urn:ui:com.google.gwt.uibinder'
xmlns:g='urn:import:com.google.gwt.user.client.ui' ui:generateFormat='com.google.gwt.i18n.rebind.format.PropertiesFormat'
ui:generateKeys="com.google.gwt.i18n.rebind.keygen.MD5KeyGenerator"
ui:generateLocales="default">
<ui:with field='res'
type='org.tela_botanica.del.client.resources.Ressources' />
<ui:with field="constants" type="org.tela_botanica.del.client.i18n.Vocabulary" />
 
<ui:style src="metadonnees.css" />
<g:HTMLPanel styleName="{style.metadonnees}">
<!-- Date du relevé -->
<g:HTMLPanel ui:field="zoneDateReleve" styleName="{style.zoneDateReleve}">
<g:InlineLabel styleName="petit gris" text="{constants.observeLe}" />
<g:InlineLabel ui:field="dateReleve" styleName="{style.donnee}"/>
</g:HTMLPanel>
<!-- Nom retenu -->
<g:HTMLPanel ui:field="zoneNomRetenu">
<g:Label styleName="petit gris {style.labelNomRetenu}" text="{constants.nomRetenu}" />
<g:Label ui:field="nomRetenu" styleName="{style.nomRetenu} gras" />
</g:HTMLPanel>
 
<!-- Nom commun -->
<g:HTMLPanel ui:field="zoneNomCommun">
<g:Label styleName="petit gris" text="{constants.nomCommun}" />
<g:Label ui:field="nomCommun" />
</g:HTMLPanel>
<!-- Référentiel -->
<g:HTMLPanel ui:field="zoneReferentiel" styleName="{style.zoneReferentiel}">
<g:Label styleName="petit gris {style.labelReferentiel}" text="{constants.referentiel}" />
<g:Label ui:field="referentiel" styleName="{style.donnee}"/>
</g:HTMLPanel>
 
<!-- Famille -->
<g:HTMLPanel ui:field="zoneFamille" styleName="{style.zoneFamille}">
<g:Label styleName="petit gris" text="{constants.metadonneeFamille}" />
<g:Label ui:field="famille" styleName="{style.donnee}"/>
</g:HTMLPanel>
 
<!-- Pays -->
<g:HTMLPanel ui:field="zonePays" styleName="{style.zonePays}">
<g:Label styleName="petit gris {style.paysDuReleve}" text="{constants.pays}" />
<g:Label ui:field="pays" styleName="{style.donnee}"/>
</g:HTMLPanel>
<!-- Lieu -->
<g:HTMLPanel ui:field="zoneLocalite" styleName="{style.zoneLocalite}">
<g:Label styleName="petit gris {style.lieuDuReleve}" text="{constants.lieuDuReleve}" />
<g:Label ui:field="localite" styleName="{style.donnee}"/>
</g:HTMLPanel>
 
<!-- Lieu-dit -->
<g:HTMLPanel ui:field="zoneLieuDit" styleName="{style.zoneLieuDit}">
<g:HTML ui:field="lieuDit"/>
</g:HTMLPanel>
<!-- Station -->
<g:HTMLPanel ui:field="zoneStation" styleName="{style.zoneStation}">
<g:Label ui:field="station"/>
</g:HTMLPanel>
 
<!-- Milieu -->
<g:HTMLPanel ui:field="zoneMilieu" styleName="{style.zoneMilieu}">
<g:Label ui:field="milieu"/>
</g:HTMLPanel>
 
<!-- Commentaire -->
<g:HTMLPanel ui:field="zoneCommentaire" styleName="{style.zoneCommentaire}">
<g:Label styleName="petit gris" text="{constants.commentaire}" />
<g:Label ui:field="commentaire" styleName="{style.commentaire}"/>
</g:HTMLPanel>
 
<!-- Publié par -->
<g:HTMLPanel ui:field="zoneAuteur" styleName="{style.zoneAuteur}">
<g:Label styleName="petit gris" text="{constants.par}" />
<g:Label ui:field="auteur" styleName="{style.donnee}" title="Voir le profil" />
<g:Anchor ui:field="courrielAuteur" styleName="{style.donnee}"/>
</g:HTMLPanel>
 
<!-- Date de transmission -->
<g:HTMLPanel ui:field="zoneDate" styleName="{style.zoneDate}">
<g:InlineLabel styleName="petit gris" text="{constants.publiee}" />
<g:InlineLabel ui:field="dateTransmission" styleName="{style.donnee}"/>
</g:HTMLPanel>
 
<!-- Mots-clés/Tag -->
<g:HTMLPanel ui:field="zoneMotsClefs">
<g:Label styleName="petit gris" text="{constants.motsClefs}" />
<g:Label ui:field="motsClefs" styleName="{style.donnee}"/>
</g:HTMLPanel>
 
<g:Label ui:field="numNomenclatural" />
<g:Anchor ui:field="lienIdentiplante" text="{constants.signalerIdentification}" styleName="labelLien"/>
</g:HTMLPanel>
</ui:UiBinder>
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/composants/metadonnees/MetadonneesEnLigneVue.ui.xml
New file
0,0 → 1,79
<ui:UiBinder xmlns:ui='urn:ui:com.google.gwt.uibinder'
xmlns:g='urn:import:com.google.gwt.user.client.ui' ui:generateFormat='com.google.gwt.i18n.rebind.format.PropertiesFormat'
ui:generateKeys="com.google.gwt.i18n.rebind.keygen.MD5KeyGenerator"
ui:generateLocales="default">
<ui:with field='res'
type='org.tela_botanica.del.client.resources.Ressources' />
<ui:with field="constants" type="org.tela_botanica.del.client.i18n.Vocabulary" />
 
<ui:style src="metadonneesEnLigne.css" />
 
<g:HTMLPanel styleName="{style.metadonnees}">
 
<g:HTMLPanel styleName="{style.metaPart1}">
<g:HTMLPanel styleName="{style.espece}">
<g:Label ui:field="nomRetenu" title="Voir la fiche eFlore" />
</g:HTMLPanel>
<g:HTMLPanel styleName="{style.nomCommun}">
<g:Label ui:field="nomCommun" />
</g:HTMLPanel>
<g:HTMLPanel>
<g:Label text="référentiel" styleName="{style.label}" />
<g:Label ui:field="referentiel" />
</g:HTMLPanel>
<g:HTMLPanel>
<g:Label text="{constants.pays}" styleName="{style.label}" />
<g:Label ui:field="pays" />
</g:HTMLPanel>
<g:HTMLPanel>
<g:Label text="observée à" styleName="{style.label}" />
<g:Label ui:field="localite" />
</g:HTMLPanel>
<g:HTMLPanel>
<g:Label text="le" styleName="{style.label}" />
<g:InlineLabel ui:field="dateReleve" />
</g:HTMLPanel>
<br/>
<g:HTMLPanel>
<g:Label text="par" styleName="{style.label}" />
<g:Label ui:field="auteur" title="Voir le profil" />
</g:HTMLPanel>
<g:HTMLPanel>
(<g:Anchor ui:field="courrielAuteur" />)
</g:HTMLPanel>
</g:HTMLPanel>
<g:HTMLPanel styleName="{style.metaPart2}">
<g:HTMLPanel styleName="{style.zoneLieu}">
<g:Label text="Lieu :" styleName="{style.labelGeo}"/>
<g:HTML ui:field="lieuDit" styleName="{style.lieuDit}" title="{constants.lieuDit}" />
</g:HTMLPanel>
<g:HTMLPanel styleName="{style.zoneStation}">
<g:Label text="Station :" styleName="{style.labelGeo}"/>
<g:Label ui:field="station" title="{constants.station}" />
</g:HTMLPanel>
<g:HTMLPanel styleName="{style.zoneMilieu}">
<g:Label text="Milieu :" styleName="{style.labelGeo}"/>
<g:Label ui:field="milieu" />
</g:HTMLPanel>
</g:HTMLPanel>
<g:HTMLPanel styleName="{style.metaPart3}">
<g:HTMLPanel styleName="{style.famille}">
<g:Label ui:field="famille" />
</g:HTMLPanel>
<g:HTMLPanel>
<g:Label ui:field="motsClefs" />
</g:HTMLPanel>
<g:HTMLPanel>
<g:Label ui:field="numNomenclatural" />
</g:HTMLPanel>
<g:HTMLPanel>
<g:Label ui:field="commentaire" />
</g:HTMLPanel>
<g:HTMLPanel>
<g:Label text="Publié le" styleName="{style.label}" />
<g:InlineLabel ui:field="dateTransmission" />
</g:HTMLPanel>
</g:HTMLPanel>
 
</g:HTMLPanel>
</ui:UiBinder>
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/composants/metadonnees/MetadonneesPresenteur.java
New file
0,0 → 1,355
package org.tela_botanica.del.client.composants.metadonnees;
 
import org.tela_botanica.del.client.cache.CacheClient;
import org.tela_botanica.del.client.composants.presenteur.Presenteur;
import org.tela_botanica.del.client.config.Config;
import org.tela_botanica.del.client.modeles.InformationsRecherche;
import org.tela_botanica.del.client.modeles.ModeRecherche;
import org.tela_botanica.del.client.modeles.Observation;
import org.tela_botanica.del.client.modeles.Utilisateur;
import org.tela_botanica.del.client.navigation.evenement.BusEvenementiel;
import org.tela_botanica.del.client.navigation.evenement.changementEtatUtilisateur.EvenementChangementEtatUtilisateur;
import org.tela_botanica.del.client.navigation.evenement.changementEtatUtilisateur.GestionnaireEvenementChangementEtatUtilisateur;
import org.tela_botanica.del.client.navigation.evenement.detailsimage.EvenementRechercheImage;
import org.tela_botanica.del.client.navigation.evenement.rechercheobservation.EvenementRechercheObservation;
import org.tela_botanica.del.client.utils.UtilitairesServiceResultat;
 
import com.google.gwt.core.shared.GWT;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.event.dom.client.HasClickHandlers;
import com.google.gwt.i18n.client.DateTimeFormat;
import com.google.gwt.user.client.History;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.ui.HasText;
import com.google.gwt.user.client.ui.HasWidgets;
import com.google.gwt.user.client.ui.IsWidget;
 
public class MetadonneesPresenteur extends Presenteur {
 
public abstract interface Vue extends IsWidget {
public HasText getNomRetenu();
 
public HasClickHandlers getLienNomRetenu();
 
public HasText getNomCommun();
 
public HasText getFamille();
 
public HasText getLocalite();
 
public HasText getLieuDit();
 
public HasText getMilieu();
 
public HasText getCommentaire();
 
public HasText getAuteur();
public HasText getCourrielAuteur();
public void setCourrielAuteurHref(String courriel);
public HasText getDateTransmission();
 
public HasText getMotsClefs();
 
public HasText getNumNomenclatural();
 
public HasText getDateReleve();
public HasText getPays();
 
public HasClickHandlers getLienFamille();
 
public HasClickHandlers getLienAuteur();
public HasClickHandlers getLienCourrielAuteur();
 
public HasClickHandlers getLienDateTransmission();
 
public HasClickHandlers getLienDateReleve();
public HasClickHandlers getLienPays();
public HasClickHandlers getLienLocalite();
 
public HasClickHandlers getLienMotsClefs();
 
public HasClickHandlers getLienNumNomenclatural();
 
public HasClickHandlers getLienNomCommun();
 
public HasClickHandlers getLienMilieu();
 
public HasClickHandlers getLienCommentaire();
public void setStation(String station) ;
public void masquerChampsVides();
public void activerLiens();
public void activerLienAuteur();
public void activerLienNomRetenu();
public void setLienIdentiplante(String id);
 
void desactiverLienAuteur();
 
public HasText getReferentiel();
public void afficherCourrielAuteur();
public void cacherCourrielAuteur();
}
 
private Vue vue;
private Observation observation;
private ModeRecherche modeRecherche;
private boolean avecLiens;
public MetadonneesPresenteur(Vue vue, Observation observation, ModeRecherche modeRecherche, boolean avecLiens) {
this.vue = vue;
this.modeRecherche = modeRecherche;
setObservation(observation);
this.avecLiens = avecLiens;
}
 
public void setObservation(Observation observation) {
this.observation = observation;
}
 
public void chargerMetaDonnees() {
vue.getNomRetenu().setText(observation.getNomRetenu());
vue.getNomCommun().setText(observation.getNomCommun());
vue.getReferentiel().setText(observation.getReferentiel());
vue.getFamille().setText(observation.getFamille());
if(CacheClient.getInstance().getListePays() != null) {
vue.getPays().setText(CacheClient.getInstance().getListePays().get(observation.getPays()));
} else {
vue.getPays().setText(observation.getPays());
}
 
vue.getLocalite().setText(observation.getLocaliteAvecIdFormatee());
vue.getLieuDit().setText(observation.getLieuDit());
vue.setStation(observation.getStation());
vue.getMilieu().setText(observation.getMilieu());
vue.getCommentaire().setText(observation.getCommentaire());
vue.getAuteur().setText(observation.getAuteur());
vue.getDateTransmission().setText(formaterDate(observation.getDateTransmission()));
vue.getDateReleve().setText(formaterDate(observation.getDateReleve()));
gererAffichageCourrielAuteur();
// ATTENTION : Masquer champs vide doit se faire en dernier !
vue.masquerChampsVides();
}
 
public String formaterDate(String dateNonFormatee) {
try {
String dateFormatee = DateTimeFormat.getFormat("dd/MM/yyyy").format(UtilitairesServiceResultat.parserDateObservation(dateNonFormatee));
dateFormatee = (dateFormatee == "01/01/1970") ? "???" : dateFormatee ;
return dateFormatee;
} catch (IllegalArgumentException e) {
return "";
}
}
@Override
public void go(HasWidgets composite) {
composite.add(vue.asWidget());
chargerMetaDonnees();
gererEvenements();
}
 
@Override
protected void gererEvenements() {
if (this.avecLiens) {
if (!observation.getIdAuteur().equals("0")) {
vue.getLienAuteur().addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent arg0) {
InformationsRecherche informationsRecherche = new InformationsRecherche();
informationsRecherche.setAuteur(vue.getAuteur().getText());
setInfosRechercheEnCacheEtLancerEvenement(informationsRecherche);
History.fireCurrentHistoryState();
}
});
}
vue.getLienDateReleve().addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent arg0) {
InformationsRecherche informationsRecherche = new InformationsRecherche();
informationsRecherche.setDate(vue.getDateReleve().getText());
setInfosRechercheEnCacheEtLancerEvenement(informationsRecherche);
History.fireCurrentHistoryState();
}
});
vue.getLienDateTransmission().addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent arg0) {
InformationsRecherche informationsRecherche = new InformationsRecherche();
informationsRecherche.setDate(vue.getDateReleve().getText());
setInfosRechercheEnCacheEtLancerEvenement(informationsRecherche);
History.fireCurrentHistoryState();
}
});
vue.getLienFamille().addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent arg0) {
InformationsRecherche informationsRecherche = new InformationsRecherche();
informationsRecherche.setFamille(vue.getFamille().getText());
setInfosRechercheEnCacheEtLancerEvenement(informationsRecherche);
History.fireCurrentHistoryState();
}
});
vue.getLienLocalite().addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent arg0) {
InformationsRecherche informationsRecherche = new InformationsRecherche();
informationsRecherche.setCommune(vue.getLocalite().getText());
setInfosRechercheEnCacheEtLancerEvenement(informationsRecherche);
History.fireCurrentHistoryState();
}
});
vue.getLienPays().addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent arg0) {
InformationsRecherche informationsRecherche = new InformationsRecherche();
if(CacheClient.getInstance().getListePaysInversee() != null) {
informationsRecherche.setPays(CacheClient.getInstance().getListePaysInversee().get(vue.getPays().getText()));
} else {
informationsRecherche.setPays(vue.getPays().getText());
}
setInfosRechercheEnCacheEtLancerEvenement(informationsRecherche);
History.fireCurrentHistoryState();
}
});
vue.getLienMotsClefs().addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent arg0) {
InformationsRecherche informationsRecherche = new InformationsRecherche();
informationsRecherche.setMotClef(vue.getMotsClefs().getText());
setInfosRechercheEnCacheEtLancerEvenement(informationsRecherche);
History.fireCurrentHistoryState();
}
});
vue.getLienNomCommun().addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent arg0) {
InformationsRecherche informationsRecherche = new InformationsRecherche();
informationsRecherche.setRechercheLibre(vue.getNomCommun().getText());
setInfosRechercheEnCacheEtLancerEvenement(informationsRecherche);
History.fireCurrentHistoryState();
}
});
vue.getLienNomRetenu().addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent arg0) {
InformationsRecherche informationsRecherche = new InformationsRecherche();
informationsRecherche.setRechercheLibre(vue.getNomRetenu().getText());
setInfosRechercheEnCacheEtLancerEvenement(informationsRecherche);
History.fireCurrentHistoryState();
}
});
vue.getLienMilieu().addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent arg0) {
InformationsRecherche informationsRecherche = new InformationsRecherche();
informationsRecherche.setRechercheLibre(vue.getMilieu().getText());
setInfosRechercheEnCacheEtLancerEvenement(informationsRecherche);
History.fireCurrentHistoryState();
}
});
vue.getLienCommentaire().addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent arg0) {
InformationsRecherche informationsRecherche = new InformationsRecherche();
informationsRecherche.setRechercheLibre(vue.getCommentaire().getText());
setInfosRechercheEnCacheEtLancerEvenement(informationsRecherche);
History.fireCurrentHistoryState();
}
});
 
vue.setLienIdentiplante(this.observation.getId());
vue.activerLiens();
if (observation.getIdAuteur().equals("0")) {
vue.desactiverLienAuteur();
}
} else {
if (! observation.getIdAuteur().equals("0")) {
vue.getLienAuteur().addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
Config config = new Config();
Window.open(config.getUrl("profil") + observation.getIdAuteur(), "Consultation de l'annuaire", config.getInfo("popupOptions"));
}
});
vue.activerLienAuteur();
}
 
if (observation.getNumNomenclatural() != null && ! observation.getNumNomenclatural().equals("0") && ! observation.getNumNomenclatural().equals("")) {
vue.activerLienNomRetenu();
vue.getLienNomRetenu().addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent arg0) {
Config config = new Config();
String efloreUrlFicheTpl = config.getUrl("efloreTaxon");
String efloreUrlFiche = efloreUrlFicheTpl.replaceAll("referentiel-nn-num_nom", observation.getReferentiel()+"-nn-"+observation.getNumNomenclatural());
Window.open(efloreUrlFiche, "Fiche eflore", config.getInfo("popupOptions"));
}
});
}
}
BusEvenementiel.getInstance().addHandler(EvenementChangementEtatUtilisateur.TYPE, new GestionnaireEvenementChangementEtatUtilisateur() {
@Override
public void onModificationEtatUtilisateur(EvenementChangementEtatUtilisateur evenementChangementEtatUtilisateur) {
gererAffichageCourrielAuteur();
}
});
}
public void gererAffichageCourrielAuteur() {
GWT.log("Auteur courrriel :"+observation.getCourrielAuteur());
Utilisateur utilisateur = CacheClient.getInstance().getUtilisateur();
if (utilisateur.etreAdmin()) {
vue.getCourrielAuteur().setText(observation.getCourrielAuteur());
vue.setCourrielAuteurHref(observation.getCourrielAuteur());
vue.afficherCourrielAuteur();
} else {
vue.getCourrielAuteur().setText("");
vue.setCourrielAuteurHref("");
vue.cacherCourrielAuteur();
}
}
 
public void setInfosRechercheEnCacheEtLancerEvenement(InformationsRecherche informationsRecherche) {
switch (modeRecherche) {
case MODE_IMAGE:
CacheClient.getInstance().setPageCouranteRechercheImages(1);
CacheClient.getInstance().setInformationsRechercheImage(informationsRecherche);
BusEvenementiel.getInstance().fireEvent(new EvenementRechercheImage());
break;
case MODE_OBSERVATION:
CacheClient.getInstance().setPageCouranteRechercheObservations(1);
CacheClient.getInstance().setInformationsRechercheObservation(informationsRecherche);
BusEvenementiel.getInstance().fireEvent(new EvenementRechercheObservation());
default:
break;
}
}
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/composants/metadonnees/MetadonneesVue.java
New file
0,0 → 1,236
package org.tela_botanica.del.client.composants.metadonnees;
 
import org.tela_botanica.del.client.cache.CacheClient;
import org.tela_botanica.del.client.config.Config;
import org.tela_botanica.del.client.gestionhistorique.ConstantesNavigation;
 
import com.google.gwt.core.client.GWT;
import com.google.gwt.event.dom.client.HasClickHandlers;
import com.google.gwt.uibinder.client.UiBinder;
import com.google.gwt.uibinder.client.UiField;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.ui.Anchor;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.HTML;
import com.google.gwt.user.client.ui.HasText;
import com.google.gwt.user.client.ui.Hyperlink;
import com.google.gwt.user.client.ui.InlineLabel;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.Panel;
import com.google.gwt.user.client.ui.Widget;
 
public class MetadonneesVue extends Composite implements MetadonneesPresenteur.Vue {
// Gestion d'UiBinder
interface Binder extends UiBinder<Widget, MetadonneesVue> {
}
 
private static Binder binder = GWT.create(Binder.class);
 
@UiField
Label nomRetenu, famille, auteur, pays, localite, motsClefs, numNomenclatural, nomCommun, commentaire, milieu, station, referentiel;
@UiField
Anchor courrielAuteur;
@UiField
HTML lieuDit;
 
@UiField
Panel zoneStation;
@UiField
InlineLabel dateReleve, dateTransmission;
 
@UiField
Anchor lienIdentiplante;
public MetadonneesVue() {
initWidget(binder.createAndBindUi(this));
// Le lien ne doit être affiché que sur pictoflora
String urlCourante = Window.Location.getHref();
Config config = new Config();
String urlAppliImg = config.getUrl("pictoflora");
if (!urlCourante.contains(urlAppliImg)) {
lienIdentiplante.setVisible(false);
}
}
 
public HasText getNomRetenu() {
return this.nomRetenu;
}
 
public HasText getFamille() {
return this.famille;
}
 
public HasText getAuteur() {
return this.auteur;
}
 
public HasText getCourrielAuteur() {
return this.courrielAuteur;
}
public void setCourrielAuteurHref(String courriel) {
this.courrielAuteur.setHref("mailto:"+courriel);
}
public HasText getDateTransmission() {
return this.dateTransmission;
}
 
public HasText getDateReleve() {
return this.dateReleve;
}
 
public HasText getLocalite() {
return this.localite;
}
 
public HasText getMotsClefs() {
return this.motsClefs;
}
 
public HasText getNumNomenclatural() {
return this.numNomenclatural;
}
 
public HasText getNomCommun() {
return nomCommun;
}
 
public HasText getLieuDit() {
return lieuDit;
}
 
public HasText getMilieu() {
return milieu;
}
 
public HasText getCommentaire() {
return commentaire;
}
public HasText getPays() {
return this.pays;
}
 
@Override
public HasClickHandlers getLienNomRetenu() {
return nomRetenu;
}
public HasClickHandlers getLienPays() {
return this.pays;
}
 
public HasClickHandlers getLienFamille() {
return this.famille;
}
 
public HasClickHandlers getLienAuteur() {
return this.auteur;
}
public HasClickHandlers getLienCourrielAuteur() {
return this.courrielAuteur;
}
 
public HasClickHandlers getLienDateTransmission() {
return this.dateTransmission;
}
 
public HasClickHandlers getLienDateReleve() {
return this.dateReleve;
}
 
public HasClickHandlers getLienLocalite() {
return this.localite;
}
 
public HasClickHandlers getLienMotsClefs() {
return this.motsClefs;
}
 
public HasClickHandlers getLienNumNomenclatural() {
return this.numNomenclatural;
}
 
public HasClickHandlers getLienNomCommun() {
return nomCommun;
}
 
public HasClickHandlers getLienMilieu() {
return milieu;
}
 
public HasClickHandlers getLienCommentaire() {
return commentaire;
}
 
@Override
public void masquerChampsVides() {
HasText[] champs = {nomRetenu, nomCommun, famille, localite, auteur, motsClefs, commentaire, milieu, lieuDit, dateReleve, dateTransmission};
for (int i = 0; i < champs.length; i ++) {
HasText champ = champs[i];
if (champ.getText() == null || champ.getText().isEmpty()) {
Widget widget = (Widget) champ;
widget.getParent().setVisible(false);
}
}
}
 
@Override
public void setStation(String station) {
if (station.equals("")) {
this.zoneStation.setVisible(false);
} else {
this.station.setText(station);
}
}
public void activerLiens() {
dateReleve.addStyleName("labelLien");
nomRetenu.addStyleName("labelLien");
famille.addStyleName("labelLien");
auteur.addStyleName("labelLien");
localite.addStyleName("labelLien");
motsClefs.addStyleName("labelLien");
nomCommun.addStyleName("labelLien");
commentaire.addStyleName("labelLien");
milieu.addStyleName("labelLien");
pays.addStyleName("labelLien");
}
 
@Override
public void activerLienAuteur() {
auteur.addStyleName("labelLien");
}
@Override
public void desactiverLienAuteur() {
auteur.removeStyleName("labelLien");
}
 
public void setLienIdentiplante(String id) {
lienIdentiplante.setHref(CacheClient.getInstance().getUrlPageSignalerMauvaiseId(id));
lienIdentiplante.setTarget("_blank");
}
 
@Override
public HasText getReferentiel() {
return referentiel;
}
 
@Override
public void activerLienNomRetenu() {
// TODO Auto-generated method stub
}
public void afficherCourrielAuteur() {
courrielAuteur.setVisible(true);
}
public void cacherCourrielAuteur() {
courrielAuteur.setVisible(false);
}
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/composants/metadonnees/MetadonneesEnLigneVue.java
New file
0,0 → 1,210
package org.tela_botanica.del.client.composants.metadonnees;
 
import com.google.gwt.core.client.GWT;
import com.google.gwt.event.dom.client.HasClickHandlers;
import com.google.gwt.uibinder.client.UiBinder;
import com.google.gwt.uibinder.client.UiField;
import com.google.gwt.user.client.ui.Anchor;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.HTML;
import com.google.gwt.user.client.ui.HasText;
import com.google.gwt.user.client.ui.Hyperlink;
import com.google.gwt.user.client.ui.InlineLabel;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.Panel;
import com.google.gwt.user.client.ui.Widget;
 
public class MetadonneesEnLigneVue extends Composite implements MetadonneesPresenteur.Vue {
// Gestion d'UiBinder
interface Binder extends UiBinder<Widget, MetadonneesEnLigneVue> {
}
 
private static Binder binder = GWT.create(Binder.class);
 
@UiField
Label nomRetenu, famille, auteur, pays, localite, motsClefs, numNomenclatural, nomCommun, commentaire, milieu, station, referentiel;
@UiField
Anchor courrielAuteur;
@UiField
HTML lieuDit;
@UiField
InlineLabel dateReleve, dateTransmission;
 
 
public MetadonneesEnLigneVue() {
initWidget(binder.createAndBindUi(this));
}
 
public HasText getNomRetenu() {
return this.nomRetenu;
}
 
public HasText getFamille() {
return this.famille;
}
 
public HasText getAuteur() {
return this.auteur;
}
public HasText getCourrielAuteur() {
return courrielAuteur;
}
 
public void setCourrielAuteurHref(String courriel) {
this.courrielAuteur.setHref("mailto:"+courriel);
}
 
public HasText getDateTransmission() {
return this.dateTransmission;
}
 
public HasText getDateReleve() {
return this.dateReleve;
}
 
public HasText getLocalite() {
return this.localite;
}
 
public HasText getMotsClefs() {
return this.motsClefs;
}
 
public HasText getNumNomenclatural() {
return this.numNomenclatural;
}
 
public HasText getNomCommun() {
return nomCommun;
}
 
public HasText getLieuDit() {
return lieuDit;
}
 
public HasText getMilieu() {
return milieu;
}
 
public HasText getCommentaire() {
return commentaire;
}
public HasText getPays() {
return pays;
}
 
@Override
public HasClickHandlers getLienNomRetenu() {
return nomRetenu;
}
public HasClickHandlers getLienPays() {
return this.pays;
}
 
public HasClickHandlers getLienFamille() {
return this.famille;
}
 
public HasClickHandlers getLienAuteur() {
return this.auteur;
}
public HasClickHandlers getLienCourrielAuteur() {
return this.courrielAuteur;
}
 
public HasClickHandlers getLienDateTransmission() {
return this.dateTransmission;
}
 
public HasClickHandlers getLienDateReleve() {
return this.dateReleve;
}
 
public HasClickHandlers getLienLocalite() {
return this.localite;
}
 
public HasClickHandlers getLienMotsClefs() {
return this.motsClefs;
}
 
public HasClickHandlers getLienNumNomenclatural() {
return this.numNomenclatural;
}
 
public HasClickHandlers getLienNomCommun() {
return nomCommun;
}
 
public HasClickHandlers getLienMilieu() {
return milieu;
}
 
public HasClickHandlers getLienCommentaire() {
return commentaire;
}
 
@Override
public void masquerChampsVides() {
HasText[] champs = {nomRetenu, referentiel, nomCommun, famille, localite, auteur, courrielAuteur, motsClefs, commentaire, lieuDit, station, milieu, dateReleve, dateTransmission};
for (int i = 0; i < champs.length; i ++) {
HasText champ = champs[i];
if ("".equals(champ.getText().trim())) {
Widget widget = (Widget) champ;
widget.getParent().setVisible(false);
}
}
}
 
@Override
public void setStation(String station) {
if (station.equals("")) {
this.station.setVisible(false);
} else {
this.station.setText(station);
}
}
@Override
public void activerLiens() {
}
 
@Override
public void activerLienAuteur() {
auteur.addStyleName("labelLien");
}
 
@Override
public void activerLienNomRetenu() {
nomRetenu.addStyleName("labelLien");
}
 
@Override
public void desactiverLienAuteur() {
auteur.removeStyleName("labelLien");
}
 
public void setLienIdentiplante(String id) {}
 
@Override
public HasText getReferentiel() {
return referentiel;
}
public void afficherCourrielAuteur() {
courrielAuteur.getParent().setVisible(true);
courrielAuteur.setVisible(true);
}
public void cacherCourrielAuteur() {
courrielAuteur.getParent().setVisible(false);
courrielAuteur.setVisible(false);
}
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/composants/metadonnees/metadonnees.css
New file
0,0 → 1,83
.metadonnees {
width:100%;
overflow:hidden;
}
.metadonnees .donnee {
display: inline-block;
}
.labelNomRetenu {
display: none
}
.nomRetenu {
display: none;
font-size: 15px;
color: #598000;
width: 170px;
overflow: auto;
white-space: nowrap;
text-overflow: ellipsis;
}
.lieuDuReleve {
display: block;
}
.paysDuReleve {
display: inline;
}
.zoneFamille {
display: none;
margin-top: 1em;
}
.zoneReferentiel {
margin-top: 1em;
}
.labelReferentiel {
display: inline;
}
.zoneFamille div {
display: inline;
}
.zoneLocalite {
margin-top:5px;
}
.zonePays {
}
.zoneLocalite div {
}
.zoneLieuDit {
display: inline;
}
.zoneStation {
display: inline;
}
.zoneMilieu {
display: inline;
}
.zoneMilieu div {
display: inline
}
.zoneCommentaire {
margin-top:5px;
}
.zoneCommentaire div {
}
.commentaire {
display: block;
height: 94px;
overflow: auto;
text-overflow: ellipsis
}
.zoneDateReleve {
}
 
.zoneAuteur {
}
.zoneAuteur div {
display: inline
}
.zoneDate {
display: inline;
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/composants/images/DetailImageVue.ui.xml
New file
0,0 → 1,13
<ui:UiBinder xmlns:ui='urn:ui:com.google.gwt.uibinder' xmlns:g='urn:import:com.google.gwt.user.client.ui'
ui:generateFormat='com.google.gwt.i18n.rebind.format.PropertiesFormat' ui:generateKeys="com.google.gwt.i18n.rebind.keygen.MD5KeyGenerator" ui:generateLocales="default">
<ui:with field='res' type='org.tela_botanica.del.client.resources.Ressources'/>
<ui:with field="constants" type="org.tela_botanica.del.client.i18n.Vocabulary"/>
 
<ui:style src="detailImage.css" />
<g:HTMLPanel styleName="{style.detailImage}">
<g:HTML ui:field="superpositionImage" styleName="{style.superpositionImage}">
</g:HTML>
<g:Image ui:field="photoPrincipale" />
<g:HTML ui:field="texteAlternatif"/>
</g:HTMLPanel>
</ui:UiBinder>
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/composants/images/DetailImagePresenteur.java
New file
0,0 → 1,31
package org.tela_botanica.del.client.composants.images;
 
import org.tela_botanica.del.client.composants.presenteur.Presenteur;
import org.tela_botanica.del.client.modeles.Image;
 
import com.google.gwt.user.client.ui.HasWidgets;
import com.google.gwt.user.client.ui.IsWidget;
 
public class DetailImagePresenteur extends Presenteur {
 
public abstract interface Vue extends IsWidget {
public abstract void chargerImage(Image image);
}
public Vue vue;
public DetailImagePresenteur(Image image, Vue vue) {
this.vue = vue;
this.vue.chargerImage(image);
}
 
@Override
public void go(HasWidgets composite) {
composite.add(vue.asWidget());
}
 
@Override
protected void gererEvenements() {
// TODO Auto-generated method stub
}
 
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/composants/images/DetailImageVue.java
New file
0,0 → 1,127
package org.tela_botanica.del.client.composants.images;
 
import org.tela_botanica.del.client.i18n.I18n;
 
import com.google.gwt.core.client.GWT;
import com.google.gwt.dom.client.DivElement;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.event.dom.client.LoadEvent;
import com.google.gwt.event.dom.client.LoadHandler;
import com.google.gwt.event.dom.client.MouseOutEvent;
import com.google.gwt.event.dom.client.MouseOutHandler;
import com.google.gwt.event.dom.client.MouseOverEvent;
import com.google.gwt.event.dom.client.MouseOverHandler;
import com.google.gwt.event.logical.shared.ResizeEvent;
import com.google.gwt.event.logical.shared.ResizeHandler;
import com.google.gwt.uibinder.client.UiBinder;
import com.google.gwt.uibinder.client.UiField;
import com.google.gwt.user.client.Timer;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.HTML;
import com.google.gwt.user.client.ui.Image;
import com.google.gwt.user.client.ui.Widget;
 
public class DetailImageVue extends Composite implements DetailImagePresenteur.Vue {
 
// Gestion d'UiBinder
interface Binder extends UiBinder<Widget, DetailImageVue> {
}
 
private static Binder binder = GWT.create(Binder.class);
 
@UiField
protected Image photoPrincipale;
 
@UiField
protected HTML superpositionImage;
 
@UiField
protected HTML texteAlternatif;
 
public DetailImageVue() {
initWidget(binder.createAndBindUi(this));
photoPrincipale.addLoadHandler(new LoadHandler() {
@Override
public void onLoad(LoadEvent event) {
setTailleOptimale();
}
});
Window.addResizeHandler(new ResizeHandler() {
Timer resizeTimer = new Timer() {
@Override
public void run() {
setTailleOptimale();
}
};
@Override
public void onResize(ResizeEvent event) {
resizeTimer.cancel();
resizeTimer.schedule(250);
}
});
}
 
public void chargerImage(org.tela_botanica.del.client.modeles.Image imageCourante) {
setUrlImage(imageCourante.getUrlFormat("L"));
setAltImage(imageCourante.getObservation().getAuteur() + " - " + imageCourante.getObservation().getNomRetenu());
setTitle("Cliquer pour ouvrir l'image originale dans un nouvel onglet");
setTexteAlternatif("<strong> "+I18n.getVocabulary().imageNumero()+""+ imageCourante.getIdImage() +" - "+ imageCourante.getObservation().getNomRetenuFormateReferentiel() + " " + I18n.getVocabulary().par() + " " + imageCourante.getObservation().getAuteur() + "</strong><br />"
+ I18n.getVocabulary().publiee() + " "+ imageCourante.getObservation().getDateReleve() + " - " + imageCourante.getObservation().getLocaliteAvecIdFormatee());
final String urlImageOriginale = imageCourante.getUrlFormat("O");
 
// ouvre l'image originale dans un nouvel onglet, en attendant un futur outil de zoom
superpositionImage.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
Window.open(urlImageOriginale, "_blank", "");
}
});
}
 
public void setUrlImage(String urlImage) {
photoPrincipale.setUrl(urlImage);
}
 
// définit le "alt" sur l'image (ajouté pour l'intégration aux réseaux sociaux)
public void setAltImage(String altImage) {
photoPrincipale.setAltText(altImage);
}
 
public void setTexteAlternatif(String texteAlternatif) {
this.texteAlternatif.setHTML(texteAlternatif);
}
public void setTailleOptimale() {
double fenetreH = Window.getClientHeight();
double fenetreW = Window.getClientWidth();
double photoH = photoPrincipale.getHeight();
double photoW = photoPrincipale.getWidth();
double rapport = 0;
double reduction = 150;
if(photoH > (fenetreH - reduction) || photoW > (fenetreW - reduction)) {
if(photoH >= (fenetreH - reduction)) {
rapport = photoW/photoH;
photoH = fenetreH-reduction;
photoW = photoH*rapport;
}
if(photoW >= (fenetreW - reduction)) {
rapport = photoH/photoW;
photoW = fenetreW-reduction;
photoH = photoW*rapport;
}
}
setWidth(photoW+"px");
setHeight(photoH+"px");
}
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/composants/images/detailImage.css
New file
0,0 → 1,23
.detailImage {
z-index:1500;
padding: 5px 5px 50px;
width:600px;
background:white;
margin:0 auto;
margin-top:75px;
}
 
.detailImage > *{
width: inherit;
height: inherit;
}
 
.superpositionImage {
position: absolute;
}
 
.superpositionImage:hover {
background-image: url("img/plein_ecran.png");
background-position: bottom 10px left 10px;
background-repeat: no-repeat;
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/composants/partageurl/PartageUrlVue.java
New file
0,0 → 1,55
package org.tela_botanica.del.client.composants.partageurl;
 
import com.google.gwt.core.client.GWT;
import com.google.gwt.event.dom.client.HasClickHandlers;
import com.google.gwt.uibinder.client.UiBinder;
import com.google.gwt.uibinder.client.UiField;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.HasWidgets;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.Panel;
import com.google.gwt.user.client.ui.TextBox;
import com.google.gwt.user.client.ui.Widget;
 
public class PartageUrlVue extends Composite implements PartageUrlPresenteur.Vue{
 
@UiField Panel zonePartage;
@UiField Label fermer, partage;
@UiField TextBox url;
interface Binder extends UiBinder<Widget, PartageUrlVue> {}
private static Binder uiBinder = GWT.create(Binder.class);
public PartageUrlVue() {
initWidget(uiBinder.createAndBindUi(this));
}
 
@Override
public void ajouterVue(HasWidgets composite) {
composite.add(this.asWidget());
}
 
@Override
public void masquerFormulaire() {
zonePartage.setVisible(false);
}
 
@Override
public void afficherFormulaire() {
zonePartage.setVisible(true);
}
public HasClickHandlers getFermer() {
return fermer;
}
 
@Override
public HasClickHandlers getBoutonPartage() {
return partage;
}
public void setUrl(String url) {
this.url.setText(url);
}
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/composants/partageurl/partagerUrl.css
New file
0,0 → 1,39
.zonePartageUrl {
display:inline-block;
}
.zonePartage {
background:none repeat scroll 0 0 white;
border:2px solid #8EB533;
padding:10px 50px 10px 10px;
position:absolute;
}
.titre {
margin-top:0;
}
.partage {
background:none repeat scroll 0 0 #87A4F9;
border:medium none;
border-radius:10px 10px 10px 10px;
color:white;
cursor:pointer;
font-size:14px;
padding:4px 10px;
text-decoration:none;
width:130px;
}
.url {
width:90%;
margin-top:5px;
}
.fermer {
background:url("./img/close.png") no-repeat scroll 39px -2px transparent;
cursor:pointer;
font-size:11px;
margin-left:411px;
margin-top:-99px;
padding-bottom:8px;
padding-right:53px;
padding-top:5px;
position:absolute;
width:16px;
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/composants/partageurl/PartageUrlVue.ui.xml
New file
0,0 → 1,22
<ui:UiBinder xmlns:ui="urn:ui:com.google.gwt.uibinder"
xmlns:g="urn:import:com.google.gwt.user.client.ui"
ui:generateFormat="com.google.gwt.i18n.rebind.format.PropertiesFormat"
ui:generateKeys="com.google.gwt.i18n.rebind.keygen.MD5KeyGenerator"
ui:generateLocales="default">
<ui:with field="res" type="org.tela_botanica.del.client.resources.Ressources" />
<ui:with field="constants" type="org.tela_botanica.del.client.i18n.Vocabulary" />
 
<ui:style src="partagerUrl.css" />
<g:HTMLPanel>
<g:HTMLPanel>
<g:Label ui:field="partage" styleName="{style.partage}">Partager cette page</g:Label>
</g:HTMLPanel>
<g:HTMLPanel styleName="{style.zonePartage} ombre-faible" ui:field="zonePartage">
<g:Label styleName="titre {style.titre}">Partager cette page</g:Label>
<g:Label>Partager le résultat de votre recherche en copiant l'adresse ci-dessous :</g:Label>
<g:TextBox styleName="{style.url}" ui:field="url"></g:TextBox>
<g:Label ui:field="fermer" styleName="{style.fermer}">Fermer</g:Label>
</g:HTMLPanel>
</g:HTMLPanel>
</ui:UiBinder>
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/composants/partageurl/PartageUrlPresenteur.java
New file
0,0 → 1,55
package org.tela_botanica.del.client.composants.partageurl;
 
import org.tela_botanica.del.client.cache.CacheClient;
 
import com.google.gwt.core.shared.GWT;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.event.dom.client.HasClickHandlers;
import com.google.gwt.user.client.ui.HasWidgets;
import com.google.gwt.user.client.ui.IsWidget;
 
public class PartageUrlPresenteur {
 
public abstract interface Vue extends IsWidget {
public void ajouterVue(HasWidgets composite);
public void masquerFormulaire();
public void afficherFormulaire();
public HasClickHandlers getBoutonPartage();
public HasClickHandlers getFermer();
public void setUrl(String url);
}
 
private Vue vue;
 
public PartageUrlPresenteur(Vue vue) {
this.vue = vue;
vue.masquerFormulaire();
gererEvenements();
}
 
public void gererEvenements() {
vue.getFermer().addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
vue.masquerFormulaire();
}
});
vue.getBoutonPartage().addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
String url = CacheClient.getInstance().genererUrlCourante();
GWT.log("URL partagée :"+url);
vue.setUrl(url);
vue.afficherFormulaire();
}
});
}
public void go(HasWidgets composite) {
vue.ajouterVue(composite);
}
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/composants/rss/RssVue.ui.xml
New file
0,0 → 1,11
<ui:UiBinder xmlns:ui='urn:ui:com.google.gwt.uibinder'
xmlns:g='urn:import:com.google.gwt.user.client.ui'
ui:generateFormat='com.google.gwt.i18n.rebind.format.PropertiesFormat'
ui:generateKeys="com.google.gwt.i18n.rebind.keygen.MD5KeyGenerator"
ui:generateLocales="default">
<ui:with field="constants" type="org.tela_botanica.del.client.i18n.Vocabulary" />
 
<g:HTMLPanel>
<g:HTML ui:field="lien" styleName="lienRss"> LIEN RSS ></g:HTML>
</g:HTMLPanel>
</ui:UiBinder>
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/composants/rss/RssPresenteur.java
New file
0,0 → 1,63
package org.tela_botanica.del.client.composants.rss;
 
import org.tela_botanica.del.client.composants.presenteur.Presenteur;
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 com.google.gwt.user.client.Window;
import com.google.gwt.user.client.ui.HasWidgets;
import com.google.gwt.user.client.ui.IsWidget;
 
public class RssPresenteur extends Presenteur {
 
// Définition de la vue
public abstract interface Vue extends IsWidget {
void setLien(String lien);
void setLabelLien(String label);
}
// Variables
private Vue vue;
private String lien = "";
private Config config = new Config();
//Constructeur
public RssPresenteur(Vue vue) {
this.vue = vue;
}
public RssPresenteur(Vue vue, InformationsRecherche recherche, String label) {
this.vue = vue;
vue.setLabelLien(label);
genererLien(recherche);
}
public RssPresenteur(Vue vue, Observation observation, String label) {
this.vue = vue;
vue.setLabelLien(label);
genererLien(observation);
}
public void genererLien(InformationsRecherche recherche) {
this.lien = config.getUrl("rss") + recherche.versChaineRequete();
gererEvenements();
}
public void genererLien(Observation observation) {
String idObs = observation.getId();
this.lien = config.getUrl("rss") + "&masque.observation=" + idObs;
}
@Override
public void go(HasWidgets composite) {
composite.add(vue.asWidget());
gererEvenements();
}
 
@Override
protected void gererEvenements() {
vue.setLien(this.lien);
}
 
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/composants/rss/RssVue.java
New file
0,0 → 1,41
package org.tela_botanica.del.client.composants.rss;
 
import org.tela_botanica.del.client.composants.rss.RssPresenteur.Vue;
 
import com.google.gwt.core.client.GWT;
import com.google.gwt.uibinder.client.UiBinder;
import com.google.gwt.uibinder.client.UiField;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.HTML;
import com.google.gwt.user.client.ui.Widget;
 
public class RssVue extends Composite implements Vue {
 
// Composants
@UiField
HTML lien;
// Variables
String label = "";
// Interface pour l'association au XML
interface Binder extends UiBinder<Widget, RssVue> {
}
 
private static Binder uiBinder = GWT.create(Binder.class);
// Constructeur de la vue
public RssVue() {
initWidget(uiBinder.createAndBindUi(this));
}
public void setLien(String lien) {
String lienHtml = "<a href=\"" + lien + "\" target=\"_blank\">" + label + "</a>";
this.lien.setHTML(lienHtml);
}
public void setLabelLien(String label) {
this.label = label;
}
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/test/DelTestSuite.java
New file
0,0 → 1,26
package org.tela_botanica.del.test;
 
import org.junit.runner.RunWith;
import org.junit.runners.Suite;
import org.junit.runners.Suite.SuiteClasses;
import org.tela_botanica.del.test.composants.pagination.PaginationPresenteurTest;
import org.tela_botanica.del.test.composants.votes.BarreRepartitionVotePresenteurTest;
import org.tela_botanica.del.test.modeles.MoyenneVoteTest;
import org.tela_botanica.del.test.modeles.PropositionDeterminationTest;
import org.tela_botanica.del.test.services.CalculVoteDeterminationServiceTest;
import org.tela_botanica.del.test.vues.identiplante.MoteurIdentiplantePresenteurTest;
import org.tela_botanica.del.test.vues.identiplante.ResultatIdentiplanteTest;
 
@RunWith(Suite.class)
@SuiteClasses({
MoteurIdentiplantePresenteurTest.class,
PaginationPresenteurTest.class,
MoyenneVoteTest.class,
PropositionDeterminationTest.class,
CalculVoteDeterminationServiceTest.class,
BarreRepartitionVotePresenteurTest.class,
ResultatIdentiplanteTest.class
})
public class DelTestSuite {
 
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/test/vues/identiplante/ResultatIdentiplanteTest.java
New file
0,0 → 1,35
package org.tela_botanica.del.test.vues.identiplante;
 
import static org.mockito.Mockito.mock;
 
import org.junit.Before;
import org.junit.Test;
import static org.junit.Assert.*;
import org.mockito.Mockito;
import org.tela_botanica.del.client.cache.CacheClient;
import org.tela_botanica.del.client.services.rest.ImageService;
import org.tela_botanica.del.client.services.rest.ObservationService;
import org.tela_botanica.del.client.vues.identiplante.resultats.ResultatsIdentiplantePresenteur;
 
public class ResultatIdentiplanteTest {
 
private ResultatsIdentiplantePresenteur resultatPresenteur;
private ResultatsIdentiplantePresenteur.Vue vueResultat;
private ImageService serviceImage;
 
@Before
public void setUp() throws Exception {
 
vueResultat = mock( ResultatsIdentiplantePresenteur.Vue.class, Mockito.RETURNS_MOCKS);
serviceImage = mock(ImageService.class);
ObservationService obsService = Mockito.mock(ObservationService.class);
resultatPresenteur = new ResultatsIdentiplantePresenteur(obsService, vueResultat);
}
 
@Test
public void testAfficherImages() {
resultatPresenteur.chercherEtAfficherObservationsPageEnCours();
assertEquals(CacheClient.getInstance().getPageCouranteRechercheImage(), 1);
}
 
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/test/vues/identiplante/MoteurIdentiplantePresenteurTest.java
New file
0,0 → 1,31
package org.tela_botanica.del.test.vues.identiplante;
 
import org.junit.Before;
import org.junit.Test;
import org.mockito.Mockito;
import org.tela_botanica.del.client.services.rest.ObservationService;
import org.tela_botanica.del.client.vues.identiplante.moteur.MoteurIdentiplantePresenteur;
 
import com.google.gwt.user.client.ui.HasWidgets;
 
public class MoteurIdentiplantePresenteurTest {
 
MoteurIdentiplantePresenteur moteurRecherchePresenteur;
MoteurIdentiplantePresenteur.Vue moteurRechercheVue;
HasWidgets container;
 
@Before
public void setUp() {
moteurRechercheVue = Mockito.mock(MoteurIdentiplantePresenteur.Vue.class, Mockito.RETURNS_MOCKS);
ObservationService obsService = Mockito.mock(ObservationService.class);
moteurRecherchePresenteur = new MoteurIdentiplantePresenteur(obsService, moteurRechercheVue);
 
container = Mockito.mock(HasWidgets.class);
}
 
@Test
public void testerMoteurRechercheImage() {
// TODO faire un test GWTTestCase
}
 
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/test/services/CalculVoteDeterminationServiceTest.java
New file
0,0 → 1,108
package org.tela_botanica.del.test.services;
 
import static org.junit.Assert.assertTrue;
 
import java.util.ArrayList;
import java.util.Date;
import java.util.Iterator;
import java.util.List;
 
import org.junit.Test;
import org.tela_botanica.del.client.modeles.Contributeur;
import org.tela_botanica.del.client.modeles.MoyenneVote;
import org.tela_botanica.del.client.modeles.Observation;
import org.tela_botanica.del.client.modeles.PropositionDetermination;
import org.tela_botanica.del.client.modeles.VoteDetermination;
import org.tela_botanica.del.client.services.CalculVoteDeterminationService;
 
public class CalculVoteDeterminationServiceTest {
 
@Test
public void testCalculerVoteDetermination() {
 
Observation obs = new Observation();
VoteDetermination voteDetermination = new VoteDetermination();
voteDetermination.setVote(1);
voteDetermination.setDate(new Date());
voteDetermination.setContributeur("benjamin");
 
PropositionDetermination propositionDetermination = new PropositionDetermination(obs);
propositionDetermination.setEspece("Iris lutescens subsp. lutescens");
propositionDetermination.setContributeur(new Contributeur("1", "contrib", "test", "contrib@test.com"));
propositionDetermination.setId("1");
propositionDetermination.ajouterVoteDetermination(voteDetermination);
obs.ajouterPropositionDetermination(propositionDetermination);
 
MoyenneVote moyenneVote = CalculVoteDeterminationService
.calculerVoteDetermination(propositionDetermination);
 
assertTrue(moyenneVote.getScore() == 100);
 
}
@Test
public void testCalculerVoteDeterminationPlusPopulaire() {
Observation obs = new Observation();
 
Contributeur cIdent1 = new Contributeur("1", "Peronnet", "Aurélien", "aurelien@tela-botanica.org");
Contributeur cIdent2 = new Contributeur("2", "Liens", "Benjamin", "benjamin@tela-botanica.org");
Contributeur cAnon1 = new Contributeur("a1a5f7b8s8c4v2b3g4g5t7t8t94", "", "", "");
VoteDetermination voteDetermination1 = new VoteDetermination();
voteDetermination1.setVote(1);
voteDetermination1.setDate(new Date());
voteDetermination1.setContributeur(cIdent1.getId());
voteDetermination1.setAuteur(cIdent1);
VoteDetermination voteDetermination2 = new VoteDetermination();
voteDetermination2.setVote(1);
voteDetermination2.setDate(new Date());
voteDetermination2.setContributeur(cIdent2.getId());
voteDetermination2.setAuteur(cIdent2);
VoteDetermination voteDetermination3 = new VoteDetermination();
voteDetermination3.setVote(0);
voteDetermination3.setDate(new Date());
voteDetermination3.setContributeur(cAnon1.getId());
voteDetermination3.setAuteur(cAnon1);
 
PropositionDetermination propositionDetermination = new PropositionDetermination(obs);
propositionDetermination.setEspece("Iris lutescens subsp. lutescens");
propositionDetermination.setContributeur(new Contributeur("1", "contrib", "test", "contrib@test.com"));
propositionDetermination.setId("1");
propositionDetermination.ajouterVoteDetermination(voteDetermination2);
propositionDetermination.ajouterVoteDetermination(voteDetermination3);
obs.ajouterPropositionDetermination(propositionDetermination);
PropositionDetermination propositionDetermination2 = new PropositionDetermination(obs);
propositionDetermination2.setEspece("Iris urticans");
propositionDetermination2.setContributeur(new Contributeur("1", "contrib", "test", "contrib@test.com"));
propositionDetermination2.setId("2");
propositionDetermination2.ajouterVoteDetermination(voteDetermination1);
propositionDetermination2.ajouterVoteDetermination(voteDetermination2);
propositionDetermination2.ajouterVoteDetermination(voteDetermination3);
obs.ajouterPropositionDetermination(propositionDetermination2);
List<PropositionDetermination> listePropositions = new ArrayList<PropositionDetermination>();
listePropositions.add(propositionDetermination2);
listePropositions.add(propositionDetermination);
 
List<MoyenneVote> listeMoyenneVote = CalculVoteDeterminationService
.calculerVoteDeterminationPlusPopulaire(listePropositions);
for (Iterator iterator = listeMoyenneVote.iterator(); iterator
.hasNext();) {
MoyenneVote moyenneVote = (MoyenneVote) iterator.next();
System.out.println(moyenneVote.getScore());
}
 
// le premier vote est sensé être celui qui possède le plus gros score
assertTrue(listeMoyenneVote.get(0).getIntituleAssocie().equals("Iris urticans"));
}
 
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/test/MockDatasource.java
New file
0,0 → 1,438
package org.tela_botanica.del.test;
 
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.List;
 
import org.tela_botanica.del.client.modeles.Commentaire;
import org.tela_botanica.del.client.modeles.Contributeur;
import org.tela_botanica.del.client.modeles.Image;
import org.tela_botanica.del.client.modeles.InformationsRecherche;
import org.tela_botanica.del.client.modeles.InterventionForum;
import org.tela_botanica.del.client.modeles.Observation;
import org.tela_botanica.del.client.modeles.PropositionDetermination;
import org.tela_botanica.del.client.modeles.Protocole;
import org.tela_botanica.del.client.modeles.VoteDetermination;
import org.tela_botanica.del.client.modeles.VoteProtocole;
import org.tela_botanica.del.client.services.rest.ImageService;
import org.tela_botanica.del.client.services.rest.ObservationService;
import org.tela_botanica.del.client.services.rest.PropositionDeterminationService;
import org.tela_botanica.del.client.services.rest.ProtocoleService;
import org.tela_botanica.del.client.services.rest.VoteProtocoleService;
import org.tela_botanica.del.client.services.rest.async.AjoutVoteProtocoleCallback;
import org.tela_botanica.del.client.services.rest.async.DepublicationObservationCallBack;
import org.tela_botanica.del.client.services.rest.async.ImagesParTaxonCallback;
import org.tela_botanica.del.client.services.rest.async.ObservationsCallback;
import org.tela_botanica.del.client.services.rest.async.PropositionDeterminationCallBack;
import org.tela_botanica.del.client.services.rest.async.ProtocolesCallback;
import org.tela_botanica.del.client.services.rest.async.SuppressionImageCallback;
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.rest.async.VoteProtocoleCallback;
 
public class MockDatasource implements ObservationService, ImageService, ProtocoleService, VoteProtocoleService, PropositionDeterminationService {
 
static MockDatasource instance;
 
List<Observation> observations = new ArrayList<Observation>();
 
List<InterventionForum> observationValidationDatas = new ArrayList<InterventionForum>();
 
List<String> propositionsTaxonDatas = new ArrayList<String>();
 
List<Protocole> protocoles = new ArrayList<Protocole>();
 
List<Image> images = new ArrayList<Image>();
 
private MockDatasource() {
 
HashMap<String, String> auteurObs = new LinkedHashMap<String, String>();
auteurObs.put("01Juliette 1MOUREAU", "Tragopogon porrifolius subsp. australis (Jord.) Nyman");
auteurObs.put("02Robert 2LERAS", "Iris lutescens subsp. lutescens");
auteurObs.put("03Geneviève 3BOTTI", "Euphorbia dendroides L.");
auteurObs.put("04Robert 4LERAS", "Lonicera japonica Thunb. ex Murray");
auteurObs.put("05Juliette 5MOUREAU", "Lavatera arborea L.");
auteurObs.put("06Robert 6LERAS", "Lavatera arborea L.");
auteurObs.put("07Juliette 7MOUREAU", "Serapias vomeracea (Burm.f.) Briq. ");
auteurObs.put("08Benjamin 8LIENS", "Lonicera etrusca Santi");
auteurObs.put("09Aurélient 9PERONNET", "Ophrys scolopax Cav. ");
auteurObs.put("10Grégoire 10DUCHÉ", "Staehelina dubia L. ");
auteurObs.put("11Juliette 11MOUREAU", "Tragopogon porrifolius subsp. australis (Jord.) Nyman");
auteurObs.put("12Robert 12LERAS", "Iris lutescens subsp. lutescens");
auteurObs.put("13Geneviève 13BOTTI", "Euphorbia dendroides L.");
auteurObs.put("14Robert 14LERAS", "Lonicera japonica Thunb. ex Murray");
auteurObs.put("15Juliette 15MOUREAU", "Lavatera arborea L.");
auteurObs.put("16Robert 16LERAS", "Lavatera arborea L.");
auteurObs.put("17Juliette 17MOUREAU", "Serapias vomeracea (Burm.f.) Briq. ");
auteurObs.put("18Benjamin 18LIENS", "Lonicera etrusca Santi");
auteurObs.put("19Aurélient 19PERONNET", "Ophrys scolopax Cav. ");
auteurObs.put("20Grégoire 20DUCHÉ", "Staehelina dubia L. ");
 
auteurObs.put("21Juliette 1MOUREAU", "Tragopogon porrifolius subsp. australis (Jord.) Nyman");
auteurObs.put("22R2obert 2LERAS", "Iris lutescens subsp. lutescens");
auteurObs.put("23Ge3neviève 3BOTTI", "Euphorbia dendroides L.");
auteurObs.put("24Rob4ert 4LERAS", "Lonicera japonica Thunb. ex Murray");
auteurObs.put("25Jul5iette 5MOUREAU", "Lavatera arborea L.");
auteurObs.put("26Rob6ert 6LERAS", "Lavatera arborea L.");
auteurObs.put("27J6ul7iette 7MOUREAU", "Serapias vomeracea (Burm.f.) Briq. ");
auteurObs.put("28Ben8jamin 8LIENS", "Lonicera etrusca Santi");
auteurObs.put("29Auré9lient 9PERONNET", "Ophrys scolopax Cav. ");
auteurObs.put("30Gég10oire 10DUCHÉ", "Staehelina dubia L. ");
auteurObs.put("31Julie11tte 11MOUREAU", "Tragopogon porrifolius subsp. australis (Jord.) Nyman");
auteurObs.put("32Rober12t 12LERAS", "Iris lutescens subsp. lutescens");
auteurObs.put("33Genev13iève 13BOTTI", "Euphorbia dendroides L.");
auteurObs.put("34Robe14rt 14LERAS", "Lonicera japonica Thunb. ex Murray");
auteurObs.put("35Julie15tte 15MOUREAU", "Lavatera arborea L.");
auteurObs.put("36Robe16rt 16LERAS", "Lavatera arborea L.");
auteurObs.put("37Julie17tte 17MOUREAU", "Serapias vomeracea (Burm.f.) Briq. ");
auteurObs.put("38Benja1m11in 18LIENS", "Lonicera etrusca Santi");
auteurObs.put("39Auré1111lient 19PERONNET", "Ophrys scolopax Cav. ");
auteurObs.put("40Gr545égoire 20DUCHÉ", "Staehelina dubia L. ");
 
ArrayList<String> motsClefs = new ArrayList<String>();
motsClefs.add("plantnet");
motsClefs.add("fleur");
motsClefs.add("fruit");
 
Iterator<String> auteurs = auteurObs.keySet().iterator();
 
Protocole protocol1 = new Protocole();
protocol1.setNom("esthétique");
protocol1.setId(0);
 
Protocole protocol2 = new Protocole();
protocol2.setNom("capitalisation de scan de feuilles");
protocol2.setId(1);
 
protocoles.add(protocol1);
protocoles.add(protocol2);
 
VoteDetermination voteDetermination = new VoteDetermination();
voteDetermination.setVote(1);
voteDetermination.setDate(new Date());
voteDetermination.setContributeur("benjamin");
 
PropositionDetermination observationValidationData = new PropositionDetermination(new Observation());
observationValidationData.setEspece("Iris lutescens subsp. lutescens");
Contributeur contributeur = new Contributeur("1", "contributeur", "test", "contrib@test.com");
observationValidationData.setContributeur(contributeur);
observationValidationData.setId("1");
 
observationValidationData.ajouterVoteDetermination(voteDetermination);
observationValidationData.setDate(new Date());
observationValidationDatas.add(observationValidationData);
 
PropositionDetermination observationValidationData2 = new PropositionDetermination(new Observation());
Contributeur contributeur2 = new Contributeur("2", "contributeur2", "test2", "contrib2@test.com");
observationValidationData2.setContributeur(contributeur2);
observationValidationData2.setEspece("Lavatera arborea L.");
observationValidationData2.setId("2");
observationValidationData2.ajouterVoteDetermination(voteDetermination);
observationValidationData2.setDate(new Date());
observationValidationDatas.add(observationValidationData2);
 
PropositionDetermination observationValidationData3 = new PropositionDetermination(new Observation());
observationValidationData3.setEspece("Acer monsp. L.");
Contributeur contributeur3 = new Contributeur("2", "contributeur3", "test3", "contrib3test.com");
observationValidationData3.setContributeur(contributeur3);
Commentaire commentaire = new Commentaire(new Contributeur("3", "Benjamin", "Liens", "benjamin@liens.com"), new Date(), "Avec le temps...");
Commentaire commentaireBis = new Commentaire(new Contributeur("4", "Greg", "Duche", "greg@duche.com"), new Date(), "Pas d'accord avec Greg!");
commentaire.getListeCommentaires().add(commentaireBis);
observationValidationData3.ajouterCommentaire(commentaire);
observationValidationData3.setId("3");
observationValidationData2.ajouterVoteDetermination(voteDetermination);
observationValidationData3.setDate(new Date());
observationValidationDatas.add(observationValidationData3);
 
PropositionDetermination observationValidationData4 = new PropositionDetermination(new Observation());
observationValidationData4.setEspece("Acer aceras aus.");
Contributeur contributeur4 = new Contributeur("5", "Pierre", "Desproges", "contrib4test.com");
observationValidationData4.setContributeur(contributeur4);
Commentaire commentaire2 = new Commentaire(new Contributeur("6", "Greg","Duche", "gregoire@tela-botanica.org"), new Date(), "Public chéri mon amour...");
observationValidationData4.ajouterCommentaire(commentaire2);
observationValidationData4.setId("4");
observationValidationData4.ajouterVoteDetermination(voteDetermination);
observationValidationData4.setDate(new Date());
observationValidationDatas.add(observationValidationData4);
 
PropositionDetermination observationValidationData5 = new PropositionDetermination(new Observation());
observationValidationData5.setEspece("Acer monsp subsp. monsp.");
Contributeur contributeur5 = new Contributeur("7", "contributeur5", "nom", "contrib@nom.com");
observationValidationData5.setContributeur(contributeur5);
Commentaire commentaire3 = new Commentaire(new Contributeur("8", "tsdt", "emkj", "lkjlkje@teas"), new Date(), "Tout est affaire de décor...");
observationValidationData5.ajouterCommentaire(commentaire3);
observationValidationData5.setId("5");
observationValidationData5.ajouterVoteDetermination(voteDetermination);
observationValidationData5.setDate(new Date());
observationValidationDatas.add(observationValidationData5);
 
int numobs = 44120;
for (int i = 0; i < 40; i++) {
 
Observation observation = new Observation();
String auteur = auteurs.next();
observation.setAuteur(auteur);
observation.setNomRetenu(auteurObs.get(auteur));
 
numobs += i;
observation.setNumNomenclatural("num nomenclatural " + i);
observation.setDateReleve("28/09/2011");
observation.setFamille("famille " + i);
observation.setLocalite("localite " + i);
observation.setNomRetenu(auteurObs.get(auteur));
observation.setMotsClefs(motsClefs);
observation.setInterventionsForum(observationValidationDatas);
 
Image image = new Image();
image.setIdImage("id image " + i);
image.setUrlFormat("http://www.tela-botanica.org/appli:cel-img:0000" + String.valueOf(numobs) + "%s%.jpg");
image.setUrl("http://www.tela-botanica.org/appli:cel-img:0000" + String.valueOf(numobs) + "CRS.jpg");
image.setMiniature("http://www.tela-botanica.org/appli:cel-img:0000" + String.valueOf(numobs) + "XS.jpg");
observation.getImages().add(image);
image.setObservation(observation);
images.add(image);
 
// nombre d'images aléatoires
int nbImagesAssociees = (int) Math.round(Math.random() * 10);
for (int j = 0; j < nbImagesAssociees; j++) {
numobs++;
image = new Image();
image.setIdImage("id image " + i + j);
image.setUrlFormat("http://www.tela-botanica.org/appli:cel-img:0000" + String.valueOf(numobs) + "%s%.jpg");
image.setUrl("http://www.tela-botanica.org/appli:cel-img:0000" + String.valueOf(numobs) + "CRS.jpg");
image.setMiniature("http://www.tela-botanica.org/appli:cel-img:0000" + String.valueOf(numobs) + "XS.jpg");
observation.getImages().add(image);
image.setObservation(observation);
images.add(image);
}
 
VoteProtocole voteProtocole = new VoteProtocole();
voteProtocole.setProtocole(protocol1);
voteProtocole.setVote(3);
voteProtocole.setContributeur("aurelien");
voteProtocole.setDate(new Date());
 
// image.getVoteProtocoles().add(voteProtocole);
 
VoteProtocole voteProtocole2 = new VoteProtocole();
voteProtocole2.setProtocole(protocol2);
voteProtocole2.setVote(2);
voteProtocole2.setContributeur("jpm");
voteProtocole2.setDate(new Date());
 
// image.getVoteProtocoles().add(voteProtocole2);
 
observations.add(observation);
}
 
ajouterVotesAleatoires();
 
}
 
private void ajouterVotesAleatoires() {
for (InterventionForum validation : observationValidationDatas) {
 
if (validation instanceof PropositionDetermination) {
int nbVotesAjoutes = (int) Math.round(Math.random() * 20);
 
for (int i = 0; i < nbVotesAjoutes; i++) {
VoteDetermination vd = new VoteDetermination();
vd.setVote((int) Math.round(Math.random()));
vd.setDate(new Date());
vd.setContributeur("test");
 
((PropositionDetermination) validation).ajouterVoteDetermination(vd);
}
}
}
}
 
/*
* (non-Javadoc)
*
* @see org.tela_botanica.del.client.utils.ObservationService#getImages()
*/
public List<Image> getImages(int debut, int fin) {
List<Image> sousListe = new ArrayList<Image>();
for (int i = debut; i < fin; i++) {
if (images.get(i) != null) {
sousListe.add(images.get(i));
} else {
break;
}
}
return sousListe;
}
 
public List<Observation> getObservations(int debut, int fin) {
List<Observation> sousListe = new ArrayList<Observation>();
for (int i = debut; i < fin; i++) {
if (observations.get(i) != null) {
sousListe.add(observations.get(i));
} else {
break;
}
}
return sousListe;
}
 
/*
* (non-Javadoc)
*
* @see
* org.tela_botanica.del.client.utils.ObservationService#getVote(java.lang
* .String)
*/
@Override
public List<VoteProtocole> getVote(String idImage) {
for (Image image : images) {
if (image.getIdImage().equals(idImage)) {
return null;
// return image.getVoteProtocoles();
}
 
}
return new ArrayList<VoteProtocole>(0);
}
 
/*
* (non-Javadoc)
*
* @see org.tela_botanica.del.client.utils.ObservationService#
* getVoteByImageAndProtocol(java.lang.String, java.lang.String)
*/
@Override
public List<VoteProtocole> getVotePourImageEtProtocole(String idImage, String protocolName) {
 
List<VoteProtocole> voteProtocolesLocal = new ArrayList<VoteProtocole>();
 
int rand = (int) (Math.random() * 5);
for (int i = 0; i < rand; i++) {
VoteProtocole voteProtocole = new VoteProtocole();
voteProtocole.setProtocole(protocoles.get(0));
voteProtocole.setVote((int) (Math.random() * 5));
voteProtocole.setContributeur("aurelien");
voteProtocole.setDate(new Date());
 
VoteProtocole voteProtocole2 = new VoteProtocole();
voteProtocole2.setProtocole(protocoles.get(0));
voteProtocole2.setVote((int) (Math.random() * 5));
voteProtocole2.setContributeur("jpm");
voteProtocole2.setDate(new Date());
 
voteProtocolesLocal.add(voteProtocole);
voteProtocolesLocal.add(voteProtocole2);
}
return voteProtocolesLocal;
}
 
public static MockDatasource getInstance() {
if (instance == null) {
instance = new MockDatasource();
}
return instance;
}
 
@Override
public void getImagesEfloreParTaxon(String nomTaxon, ImagesParTaxonCallback callback) {
// TODO Auto-generated method stub
 
}
 
@Override
public void getImagesParTaxon(InformationsRecherche informationsRecherche, int debut, int fin, ImagesParTaxonCallback callback) {
// TODO Auto-generated method stub
 
}
 
@Override
public void getImagesParObservation(String observationId, ImagesParTaxonCallback callback) {
// TODO Auto-generated method stub
 
}
 
@Override
public void getProtocoles(ProtocolesCallback pc) {
// TODO Auto-generated method stub
}
 
@Override
public void getProtocole(String nomProtocole) {
// TODO Auto-generated method stub
}
 
@Override
public void modifierVote(String idImage, VoteProtocole voteProtocole,
VoteProtocoleCallback vpc) {
// TODO Auto-generated method stub
}
 
@Override
public void getObservation(String idObservation,
ObservationsCallback observationsCallback) {
// TODO Auto-generated method stub
}
 
@Override
public void ajouterProposition(PropositionDetermination proposition,
PropositionDeterminationCallBack callback) {
// TODO Auto-generated method stub
}
 
@Override
public void supprimerProposition(PropositionDetermination proposition,
SuppressionPropositionDeterminationCallback callback) {
// TODO Auto-generated method stub
}
 
@Override
public void getObservations(InformationsRecherche informationsRecherche,
int debut, int fin, String statut, ObservationsCallback callback) {
// TODO Auto-generated method stub
}
 
@Override
public void validerProposition(PropositionDetermination proposition,
ValidationPropositionCallback validationPropositionCallback) {
// TODO Auto-generated method stub
}
 
@Override
public void ajouterVote(String idImage, VoteProtocole voteProtocole,
AjoutVoteProtocoleCallback callback) {
// TODO Auto-generated method stub
}
 
@Override
public void supprimerVote(String idImage, VoteProtocole voteProtocole,
VoteProtocoleCallback vpc) {
// TODO Auto-generated method stub
}
 
@Override
public void supprimer(Image image, SuppressionImageCallback callback) {
// TODO Auto-generated method stub
}
 
@Override
public void depublier(Observation observation,
DepublicationObservationCallBack callback) {
// TODO Auto-generated method stub
}
 
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/test/composants/votes/MoyenneVotePresenteurTest.java
New file
0,0 → 1,104
package org.tela_botanica.del.test.composants.votes;
 
import static org.junit.Assert.assertEquals;
 
import java.util.ArrayList;
import java.util.List;
import org.junit.Before;
import org.junit.Test;
import org.mockito.Mockito;
import org.tela_botanica.del.client.cache.CacheClient;
import org.tela_botanica.del.client.composants.votes.moyennevotes.MoyenneVotePresenteur;
import org.tela_botanica.del.client.modeles.Image;
import org.tela_botanica.del.client.modeles.Protocole;
import org.tela_botanica.del.client.services.rest.VoteProtocoleService;
 
import com.google.gwt.user.client.ui.HasWidgets;
 
public class MoyenneVotePresenteurTest {
 
MoyenneVotePresenteur mvp;
HasWidgets container;
List<Protocole> tousLesProtocoles = new ArrayList<Protocole>();
MoyenneVotePresenteur.Vue vue;
Image imageCourante;
@Before
public void setUp() {
CacheClient.getInstance().getUtilisateur().setId(0+"");
Protocole protocol1 = new Protocole();
protocol1.setNom("esthétique");
protocol1.setId(0);
 
Protocole protocol2 = new Protocole();
protocol2.setNom("capitalisation de scan de feuilles");
protocol2.setId(1);
 
tousLesProtocoles.add(protocol1);
tousLesProtocoles.add(protocol2);
imageCourante = new Image();
Protocole protocole = tousLesProtocoles.get(0);
vue = Mockito.mock(MoyenneVotePresenteur.Vue.class,Mockito.RETURNS_DEEP_STUBS);
VoteProtocoleService voteProtocoleService=Mockito.mock(VoteProtocoleService.class);
mvp = new MoyenneVotePresenteur(imageCourante, protocole, vue, voteProtocoleService);
container = Mockito.mock(HasWidgets.class, Mockito.RETURNS_DEEP_STUBS);
mvp.go(container);
}
@Test
public void testerVoteMemeUtilisateur() {
// Un même utilisateur vote deux fois sur la même image, même protocole, en faisant des votes différents
assertEquals(1, imageCourante.getListeVotesProtocoles().size());
mvp.setValeurVoteUtilisateur(3);
mvp.enregistrerVote();
// la valeur du vote change mais le nombre de vote ne change pas, son vote est remplacé
mvp.setValeurVoteUtilisateur(1);
mvp.enregistrerVote();
assertEquals(1, imageCourante.getVotesProtocoles(0).size());
assertEquals(1, mvp.getValeurVoteTotal());
}
@Test
public void testerTroisVotesUtilisateursDifferents() {
// Trois utilisateur différents votent pour la même image et le même protocole
CacheClient.getInstance().getUtilisateur().setId(0+"");
assertEquals(1, imageCourante.getListeVotesProtocoles().size());
mvp.setValeurVoteUtilisateur(3);
mvp.enregistrerVote();
CacheClient.getInstance().getUtilisateur().setId(1+"");
mvp.setValeurVoteUtilisateur(1);
mvp.enregistrerVote();
assertEquals(2, imageCourante.getVotesProtocoles(0).size());
assertEquals(2, mvp.getValeurVoteTotal());
CacheClient.getInstance().getUtilisateur().setId(2+"");
mvp.setValeurVoteUtilisateur(5);
mvp.enregistrerVote();
assertEquals(3, imageCourante.getVotesProtocoles(0).size());
assertEquals(3, mvp.getValeurVoteTotal());
// Le premier utilisateur change d'avis et modifie son vote
CacheClient.getInstance().getUtilisateur().setId(0+"");
assertEquals(1, imageCourante.getListeVotesProtocoles().size());
mvp.setValeurVoteUtilisateur(5);
mvp.enregistrerVote();
// La moyenne des vote change mais le nombre de vote ne doit pas changer
assertEquals(3, imageCourante.getVotesProtocoles(0).size());
assertEquals(4, mvp.getValeurVoteTotal());
}
@Test
public void testerDeuxVotesMemeUtilisateursProtocolesDifferents() {
// Trois utilisateur différents votent pour la même image et le même protocole
CacheClient.getInstance().getUtilisateur().setId(0+"");
assertEquals(1, imageCourante.getListeVotesProtocoles().size());
mvp.setValeurVoteUtilisateur(3);
mvp.enregistrerVote();
}
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/test/composants/votes/BarreRepartitionVotePresenteurTest.java
New file
0,0 → 1,59
package org.tela_botanica.del.test.composants.votes;
 
import static org.junit.Assert.assertEquals;
import static org.mockito.Mockito.mock;
 
import java.util.Date;
 
import org.junit.Before;
import org.junit.Test;
import org.mockito.Mockito;
import org.tela_botanica.del.client.composants.votes.barrerepartition.BarreRepartitionVotePresenteur;
import org.tela_botanica.del.client.composants.votes.barrerepartition.BarreRepartitionVotePresenteur.Vue;
import org.tela_botanica.del.client.modeles.Contributeur;
import org.tela_botanica.del.client.modeles.MoyenneVote;
import org.tela_botanica.del.client.modeles.Observation;
import org.tela_botanica.del.client.modeles.PropositionDetermination;
import org.tela_botanica.del.client.modeles.VoteDetermination;
import org.tela_botanica.del.client.services.CalculVoteDeterminationService;
import org.tela_botanica.del.client.services.rest.VoteDeterminationService;
 
public class BarreRepartitionVotePresenteurTest {
 
private BarreRepartitionVotePresenteur barreRepartitionVotePresenteur;
private BarreRepartitionVotePresenteur.Vue vue;
 
@Before
public void setUp() {
 
vue = mock(Vue.class, Mockito.RETURNS_DEEP_STUBS);
VoteDeterminationService voteDeterminationService = Mockito.mock(VoteDeterminationService.class);
barreRepartitionVotePresenteur = new BarreRepartitionVotePresenteur(vue, voteDeterminationService);
 
VoteDetermination voteDetermination = new VoteDetermination();
voteDetermination.setVote(1);
voteDetermination.setDate(new Date());
voteDetermination.setContributeur("benjamin");
 
Observation obs = new Observation();
PropositionDetermination propositionDetermination = new PropositionDetermination(obs);
propositionDetermination.setEspece("Iris lutescens subsp. lutescens");
propositionDetermination.setContributeur(new Contributeur("1", "contrib", "test", "contrib@test.com"));
propositionDetermination.setId("1");
propositionDetermination.ajouterVoteDetermination(voteDetermination);
propositionDetermination.setObservation(obs);
obs.ajouterPropositionDetermination(propositionDetermination);
 
MoyenneVote moyenneVote = CalculVoteDeterminationService.calculerVoteDetermination(propositionDetermination);
barreRepartitionVotePresenteur.afficherVotes(moyenneVote);
}
 
@Test
public void testVoter() {
assertEquals("Iris lutescens subsp. lutescens", barreRepartitionVotePresenteur.getMoyenneVote().getIntituleAssocie());
assertEquals(100, barreRepartitionVotePresenteur.getMoyenneVote().getScore());
barreRepartitionVotePresenteur.voter(false);
assertEquals(100, barreRepartitionVotePresenteur.getMoyenneVote().getScore());
}
 
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/test/composants/moteurrecherche/MoteurRecherchePresenteurTest.java
New file
0,0 → 1,494
package org.tela_botanica.del.test.composants.moteurrecherche;
 
import static org.junit.Assert.*;
import org.junit.Before;
import org.junit.Test;
import org.mockito.Mockito;
import org.tela_botanica.del.client.cache.CacheClient;
import org.tela_botanica.del.client.composants.formulaires.autocompletion.AutoCompletionComboBoxPresenteur;
import org.tela_botanica.del.client.composants.moteurrecherche.MoteurRecherchePresenteur;
import org.tela_botanica.del.client.composants.moteurrecherche.MoteurRecherchePresenteur.TypeMoteur;
import org.tela_botanica.del.client.config.Config;
import org.tela_botanica.del.client.modeles.ModeRecherche;
import org.tela_botanica.del.client.utils.UtilitairesAutoCompletionService;
 
 
import com.google.gwt.http.client.Response;
import com.google.gwt.user.client.ui.HasWidgets;
 
public class MoteurRecherchePresenteurTest {
 
MoteurRecherchePresenteur presenteurRechercheObservation;
MoteurRecherchePresenteur.Vue vueRechercheObservation;
AutoCompletionComboBoxPresenteur presenteurAutoCompletionTaxonsObservation;
AutoCompletionComboBoxPresenteur.Vue vueAutoCompletionTaxonsObservation;
HasWidgets container;
MoteurRecherchePresenteur presenteurRechercheImage;
MoteurRecherchePresenteur.Vue vueRechercheImage;
AutoCompletionComboBoxPresenteur presenteurAutoCompletionTaxonsImage;
AutoCompletionComboBoxPresenteur.Vue vueAutoCompletionImage;
AutoCompletionComboBoxPresenteur presenteurAutoCompletionCommunesImage;
AutoCompletionComboBoxPresenteur.Vue vueAutoCompletionCommunesImage;
AutoCompletionComboBoxPresenteur presenteurAutoCompletionCommunesObservation;
AutoCompletionComboBoxPresenteur.Vue vueAutoCompletionCommunesObservation;
Config config;
boolean rechercheObservationEffectuee = false;
boolean rechercheImageEffectuee = false;
private static String NOM_SCI_COMPLETION_SERVICE = "URL_FACTICE";
@Before
public void setUp() {
vueRechercheObservation = Mockito.mock(MoteurRecherchePresenteur.Vue.class, Mockito.RETURNS_MOCKS);
vueAutoCompletionTaxonsObservation = Mockito.mock(AutoCompletionComboBoxPresenteur.Vue.class, Mockito.RETURNS_MOCKS);
container = Mockito.mock(HasWidgets.class, Mockito.RETURNS_MOCKS);
presenteurAutoCompletionTaxonsObservation = new AutoCompletionComboBoxPresenteur(vueAutoCompletionTaxonsObservation, NOM_SCI_COMPLETION_SERVICE) {
@Override
protected String[] parserResultatRequete(Response response) {
// TODO Auto-generated method stub
return null;
}
};
vueAutoCompletionCommunesObservation = Mockito.mock(AutoCompletionComboBoxPresenteur.Vue.class, Mockito.RETURNS_MOCKS);
presenteurAutoCompletionCommunesObservation = new AutoCompletionComboBoxPresenteur(vueAutoCompletionCommunesObservation, NOM_SCI_COMPLETION_SERVICE) {
protected String effectuerPreTraitementChaineRequete(String requete) {
return requete;
}
@Override
protected void surSelectionSuggestion(String suggestion) {
String[] tableauCommuneDpt = suggestion.split(" ");
if (tableauCommuneDpt.length == 2) {
setValeur(tableauCommuneDpt[0]);
}
}
 
@Override
protected String[] parserResultatRequete(Response response) {
return UtilitairesAutoCompletionService.parserRetourSimple(response);
}
};
this.config = Mockito.mock(Config.class, Mockito.RETURNS_MOCKS);
Mockito.when(config.getUrl("nomSciCompletionService")).thenReturn(NOM_SCI_COMPLETION_SERVICE);
presenteurRechercheObservation = new MoteurRecherchePresenteur(
presenteurAutoCompletionTaxonsObservation,
presenteurAutoCompletionCommunesObservation,
vueRechercheObservation,
ModeRecherche.MODE_OBSERVATION,
config) {
public void lancerRecherche() {
chercher();
}
};
vueRechercheImage = Mockito.mock(MoteurRecherchePresenteur.Vue.class, Mockito.RETURNS_MOCKS);
vueAutoCompletionImage = Mockito.mock(AutoCompletionComboBoxPresenteur.Vue.class ,Mockito.RETURNS_MOCKS);
presenteurAutoCompletionTaxonsImage = new AutoCompletionComboBoxPresenteur(vueAutoCompletionImage, NOM_SCI_COMPLETION_SERVICE) {
@Override
protected String[] parserResultatRequete(Response response) {
// TODO Auto-generated method stub
return null;
}
};
vueAutoCompletionCommunesImage = Mockito.mock(AutoCompletionComboBoxPresenteur.Vue.class ,Mockito.RETURNS_MOCKS);
presenteurAutoCompletionCommunesImage = new AutoCompletionComboBoxPresenteur(vueAutoCompletionCommunesImage, NOM_SCI_COMPLETION_SERVICE) {
protected String effectuerPreTraitementChaineRequete(String requete) {
return requete;
}
@Override
protected void surSelectionSuggestion(String suggestion) {
String[] tableauCommuneDpt = suggestion.split(" ");
if(tableauCommuneDpt.length == 2) {
setValeur(tableauCommuneDpt[0]);
}
}
 
@Override
protected String[] parserResultatRequete(Response response) {
return UtilitairesAutoCompletionService.parserRetourSimple(response);
}
};
presenteurRechercheImage = new MoteurRecherchePresenteur(
presenteurAutoCompletionTaxonsImage,
presenteurAutoCompletionCommunesImage,
vueRechercheImage,
ModeRecherche.MODE_IMAGE,
config) {
public void lancerRecherche() {
chercher();
}
};
}
private void chercher() {
rechercheObservationEffectuee = true;
rechercheImageEffectuee = true;
}
//+------------------------------------------------------------------------------------------------------+
// OBSERVATIONS
@Test
public void testTypeMoteurParDefautEstSimpleObs() {
assertEquals(TypeMoteur.SIMPLE, presenteurRechercheObservation.getTypeMoteur());
}
@Test
public void testModeRecherche() {
assertEquals(ModeRecherche.MODE_IMAGE, presenteurRechercheImage.getMode());
assertEquals(ModeRecherche.MODE_OBSERVATION, presenteurRechercheObservation.getMode());
}
@Test
public void testObsRechercheSimpleNeRetournePasLesChampsAvancee() {
presenteurRechercheObservation.go(container);
Mockito.when(vueRechercheObservation.getValeurRechercheSimple()).thenReturn("Essai");
Mockito.when(vueRechercheObservation.getContientMots()).thenReturn("");
Mockito.when(presenteurAutoCompletionTaxonsObservation.getValeur()).thenReturn("Acer monsp.");
Mockito.when(vueRechercheObservation.getDepartement()).thenReturn("34");
Mockito.when(vueRechercheObservation.getGenre()).thenReturn("Acer");
Mockito.when(vueRechercheObservation.getMotCle()).thenReturn("Fruit, fleur, feuille");
Mockito.when(vueRechercheObservation.getDate()).thenReturn("10/02/2004");
Mockito.when(presenteurAutoCompletionCommunesObservation.getValeur()).thenReturn("Montpellier");
Mockito.when(vueRechercheObservation.getFamille()).thenReturn("Asteracae");
Mockito.when(vueRechercheObservation.getMotCle()).thenReturn("fleur, tige, épine");
Mockito.when(vueRechercheObservation.getAuteur()).thenReturn("Hubert de Linné");
presenteurRechercheObservation.setTypeMoteur(TypeMoteur.SIMPLE);
presenteurRechercheObservation.collecterInfosRecherche();
presenteurRechercheObservation.afficherRequeteEtLancerRecherche();
assertTrue(rechercheObservationEffectuee);
assertEquals("Essai", CacheClient.getInstance().getInformationsRechercheObservation().getRechercheLibre());
assertEquals(null, CacheClient.getInstance().getInformationsRechercheObservation().getTaxon());
assertEquals(null, CacheClient.getInstance().getInformationsRechercheObservation().getDepartement());
assertEquals(null, CacheClient.getInstance().getInformationsRechercheObservation().getGenre());
assertEquals(null, CacheClient.getInstance().getInformationsRechercheObservation().getMotClef());
assertEquals(null, CacheClient.getInstance().getInformationsRechercheObservation().getDate());
assertEquals(null, CacheClient.getInstance().getInformationsRechercheObservation().getCommune());
assertEquals(null, CacheClient.getInstance().getInformationsRechercheObservation().getFamille());
assertEquals(null, CacheClient.getInstance().getInformationsRechercheObservation().getMotClef());
assertEquals(null, CacheClient.getInstance().getInformationsRechercheObservation().getAuteur());
}
@Test
public void testObsRechercheAvanceeUtiliseChampContientMots() {
Mockito.when(vueRechercheObservation.getValeurRechercheSimple()).thenReturn("Simple");
Mockito.when(vueRechercheObservation.getContientMots()).thenReturn("Avancee");
Mockito.when(vueRechercheObservation.getGenre()).thenReturn("Acer");
presenteurRechercheObservation.go(container);
presenteurRechercheObservation.setTypeMoteur(TypeMoteur.AVANCEE);
presenteurRechercheObservation.collecterInfosRecherche();
presenteurRechercheObservation.afficherRequeteEtLancerRecherche();
assertTrue(rechercheObservationEffectuee);
assertEquals("Avancee", CacheClient.getInstance().getInformationsRechercheObservation().getRechercheLibre());
assertEquals("Acer", CacheClient.getInstance().getInformationsRechercheObservation().getGenre());
}
@Test
public void testLancerRechercheLibreObs() {
presenteurRechercheObservation.go(container);
Mockito.when(vueRechercheObservation.getValeurRechercheSimple()).thenReturn("Essai");
presenteurRechercheObservation.collecterInfosRecherche();
presenteurRechercheObservation.afficherRequeteEtLancerRecherche();
assertTrue(rechercheObservationEffectuee);
assertEquals("Essai", CacheClient.getInstance().getInformationsRechercheObservation().getRechercheLibre());
}
@Test
public void testLancerRechercheDepartementObs() {
presenteurRechercheObservation.go(container);
Mockito.when(vueRechercheObservation.getDepartement()).thenReturn("34");
presenteurRechercheObservation.setTypeMoteur(TypeMoteur.AVANCEE);
presenteurRechercheObservation.collecterInfosRecherche();
presenteurRechercheObservation.afficherRequeteEtLancerRecherche();
assertTrue(rechercheObservationEffectuee);
assertEquals("34", CacheClient.getInstance().getInformationsRechercheObservation().getDepartement());
}
@Test
public void testLancerRechercheTaxonObs() {
presenteurRechercheObservation.go(container);
Mockito.when(presenteurAutoCompletionTaxonsObservation.getValeur()).thenReturn("Acer monsp.");
presenteurRechercheObservation.setTypeMoteur(TypeMoteur.AVANCEE);
presenteurRechercheObservation.collecterInfosRecherche();
presenteurRechercheObservation.afficherRequeteEtLancerRecherche();
assertTrue(rechercheObservationEffectuee);
assertEquals("Acer monsp.", CacheClient.getInstance().getInformationsRechercheObservation().getTaxon());
}
@Test
public void testLancerRechercheGenreObs() {
presenteurRechercheObservation.go(container);
Mockito.when(vueRechercheObservation.getGenre()).thenReturn("Acer");
presenteurRechercheObservation.setTypeMoteur(TypeMoteur.AVANCEE);
presenteurRechercheObservation.collecterInfosRecherche();
presenteurRechercheObservation.afficherRequeteEtLancerRecherche();
assertTrue(rechercheObservationEffectuee);
assertEquals("Acer", CacheClient.getInstance().getInformationsRechercheObservation().getGenre());
}
@Test
public void testLancerRechercheMotCleObs() {
presenteurRechercheObservation.go(container);
Mockito.when(vueRechercheObservation.getMotCle()).thenReturn("Fruit, fleur, feuille");
presenteurRechercheObservation.setTypeMoteur(TypeMoteur.AVANCEE);
presenteurRechercheObservation.collecterInfosRecherche();
presenteurRechercheObservation.afficherRequeteEtLancerRecherche();
assertTrue(rechercheObservationEffectuee);
assertEquals("Fruit, fleur, feuille", CacheClient.getInstance().getInformationsRechercheObservation().getMotClef());
}
@Test
public void testLancerRechercheDateObs() {
presenteurRechercheObservation.go(container);
Mockito.when(vueRechercheObservation.getDate()).thenReturn("10/02/2004");
presenteurRechercheObservation.setTypeMoteur(TypeMoteur.AVANCEE);
presenteurRechercheObservation.collecterInfosRecherche();
presenteurRechercheObservation.afficherRequeteEtLancerRecherche();
assertTrue(rechercheObservationEffectuee);
assertEquals("10/02/2004", CacheClient.getInstance().getInformationsRechercheObservation().getDate());
}
@Test
public void testLancerRechercheCommuneObs() {
presenteurRechercheObservation.go(container);
Mockito.when(presenteurAutoCompletionCommunesObservation.getValeur()).thenReturn("Montpellier");
presenteurRechercheObservation.setTypeMoteur(TypeMoteur.AVANCEE);
presenteurRechercheObservation.collecterInfosRecherche();
presenteurRechercheObservation.afficherRequeteEtLancerRecherche();
assertTrue(rechercheObservationEffectuee);
assertEquals("Montpellier", CacheClient.getInstance().getInformationsRechercheObservation().getCommune());
}
@Test
public void testLancerRechercheFamilleObs() {
presenteurRechercheObservation.go(container);
Mockito.when(vueRechercheObservation.getFamille()).thenReturn("Asteracae");
presenteurRechercheObservation.setTypeMoteur(TypeMoteur.AVANCEE);
presenteurRechercheObservation.collecterInfosRecherche();
presenteurRechercheObservation.afficherRequeteEtLancerRecherche();
assertTrue(rechercheObservationEffectuee);
assertEquals("Asteracae", CacheClient.getInstance().getInformationsRechercheObservation().getFamille());
}
@Test
public void testLancerRechercheTagObs() {
presenteurRechercheObservation.go(container);
Mockito.when(vueRechercheObservation.getMotCle()).thenReturn("fleur, tige, épine");
presenteurRechercheObservation.setTypeMoteur(TypeMoteur.AVANCEE);
presenteurRechercheObservation.collecterInfosRecherche();
presenteurRechercheObservation.afficherRequeteEtLancerRecherche();
assertTrue(rechercheObservationEffectuee);
assertEquals("fleur, tige, épine", CacheClient.getInstance().getInformationsRechercheObservation().getMotClef());
}
@Test
public void testLancerRechercheAuteurObs() {
presenteurRechercheObservation.go(container);
Mockito.when(vueRechercheObservation.getAuteur()).thenReturn("Hubert de Linné");
presenteurRechercheObservation.setTypeMoteur(TypeMoteur.AVANCEE);
presenteurRechercheObservation.collecterInfosRecherche();
presenteurRechercheObservation.afficherRequeteEtLancerRecherche();
assertTrue(rechercheObservationEffectuee);
assertEquals("Hubert de Linné", CacheClient.getInstance().getInformationsRechercheObservation().getAuteur());
}
//+------------------------------------------------------------------------------------------------------+
// IMAGES
@Test
public void testTypeMoteurParDefautEstSimpleImage() {
assertEquals(TypeMoteur.SIMPLE, presenteurRechercheImage.getTypeMoteur());
}
@Test
public void testLancerRechercheLibreImage() {
presenteurRechercheImage.go(container);
Mockito.when(vueRechercheImage.getValeurRechercheSimple()).thenReturn("Essai");
presenteurRechercheImage.collecterInfosRecherche();
presenteurRechercheImage.afficherRequeteEtLancerRecherche();
assertTrue(rechercheImageEffectuee);
assertEquals("Essai", CacheClient.getInstance().getInformationsRechercheImage().getRechercheLibre());
}
@Test
public void testImageLancerRechercheSimpleNeRetournePasLesChampsAvancee() {
Mockito.when(vueRechercheImage.getValeurRechercheSimple()).thenReturn("Essai");
Mockito.when(presenteurAutoCompletionCommunesImage.getValeur()).thenReturn("Acer monsp.");
Mockito.when(vueRechercheImage.getDepartement()).thenReturn("34");
Mockito.when(vueRechercheImage.getGenre()).thenReturn("Acer");
Mockito.when(vueRechercheImage.getMotCle()).thenReturn("Fruit, fleur, feuille");
Mockito.when(vueRechercheImage.getDate()).thenReturn("10/02/2004");
Mockito.when(presenteurAutoCompletionCommunesImage.getValeur()).thenReturn("Montpellier");
Mockito.when(vueRechercheImage.getFamille()).thenReturn("Asteracae");
Mockito.when(vueRechercheImage.getMotCle()).thenReturn("fleur, tige, épine");
Mockito.when(vueRechercheImage.getAuteur()).thenReturn("Hubert de Linné");
presenteurRechercheImage.go(container);
presenteurRechercheImage.setTypeMoteur(TypeMoteur.SIMPLE);
presenteurRechercheImage.collecterInfosRecherche();
presenteurRechercheImage.afficherRequeteEtLancerRecherche();
assertTrue(rechercheImageEffectuee);
assertEquals("Essai", CacheClient.getInstance().getInformationsRechercheImage().getRechercheLibre());
assertEquals(null, CacheClient.getInstance().getInformationsRechercheImage().getTaxon());
assertEquals(null, CacheClient.getInstance().getInformationsRechercheImage().getDepartement());
assertEquals(null, CacheClient.getInstance().getInformationsRechercheImage().getGenre());
assertEquals(null, CacheClient.getInstance().getInformationsRechercheImage().getMotClef());
assertEquals(null, CacheClient.getInstance().getInformationsRechercheImage().getDate());
assertEquals(null, CacheClient.getInstance().getInformationsRechercheImage().getCommune());
assertEquals(null, CacheClient.getInstance().getInformationsRechercheImage().getFamille());
assertEquals(null, CacheClient.getInstance().getInformationsRechercheImage().getMotClef());
assertEquals(null, CacheClient.getInstance().getInformationsRechercheImage().getAuteur());
}
@Test
public void testImageRechercheAvanceeUtiliseChampContientMots() {
Mockito.when(vueRechercheImage.getValeurRechercheSimple()).thenReturn("Simple");
Mockito.when(vueRechercheImage.getContientMots()).thenReturn("Avancee");
Mockito.when(vueRechercheImage.getGenre()).thenReturn("Acer");
presenteurRechercheImage.go(container);
presenteurRechercheImage.setTypeMoteur(TypeMoteur.AVANCEE);
presenteurRechercheImage.collecterInfosRecherche();
presenteurRechercheImage.afficherRequeteEtLancerRecherche();
assertTrue(rechercheImageEffectuee);
assertEquals("Avancee", CacheClient.getInstance().getInformationsRechercheImage().getRechercheLibre());
assertEquals("Acer", CacheClient.getInstance().getInformationsRechercheImage().getGenre());
}
@Test
public void testLancerRechercheDepartementImage() {
presenteurRechercheImage.go(container);
Mockito.when(vueRechercheImage.getDepartement()).thenReturn("34");
presenteurRechercheImage.setTypeMoteur(TypeMoteur.AVANCEE);
presenteurRechercheImage.collecterInfosRecherche();
presenteurRechercheImage.afficherRequeteEtLancerRecherche();
assertTrue(rechercheImageEffectuee);
assertEquals("34", CacheClient.getInstance().getInformationsRechercheImage().getDepartement());
}
@Test
public void testLancerRechercheTaxonImage() {
presenteurRechercheImage.go(container);
Mockito.when(presenteurAutoCompletionTaxonsImage.getValeur()).thenReturn("Acer monsp.");
presenteurRechercheImage.setTypeMoteur(TypeMoteur.AVANCEE);
presenteurRechercheImage.collecterInfosRecherche();
presenteurRechercheImage.afficherRequeteEtLancerRecherche();
assertTrue(rechercheImageEffectuee);
assertEquals("Acer monsp.", CacheClient.getInstance().getInformationsRechercheImage().getTaxon());
}
@Test
public void testLancerRechercheGenreImage() {
presenteurRechercheImage.go(container);
Mockito.when(vueRechercheImage.getGenre()).thenReturn("Acer");
presenteurRechercheImage.setTypeMoteur(TypeMoteur.AVANCEE);
presenteurRechercheImage.collecterInfosRecherche();
presenteurRechercheImage.afficherRequeteEtLancerRecherche();
assertTrue(rechercheImageEffectuee);
assertEquals("Acer", CacheClient.getInstance().getInformationsRechercheImage().getGenre());
}
@Test
public void testLancerRechercheMotCleImage() {
presenteurRechercheImage.go(container);
Mockito.when(vueRechercheImage.getMotCle()).thenReturn("Fruit, fleur, feuille");
presenteurRechercheImage.setTypeMoteur(TypeMoteur.AVANCEE);
presenteurRechercheImage.collecterInfosRecherche();
presenteurRechercheImage.afficherRequeteEtLancerRecherche();
assertTrue(rechercheImageEffectuee);
assertEquals("Fruit, fleur, feuille", CacheClient.getInstance().getInformationsRechercheImage().getMotClef());
}
@Test
public void testLancerRechercheDateImage() {
presenteurRechercheImage.go(container);
Mockito.when(vueRechercheImage.getDate()).thenReturn("10/02/2004");
presenteurRechercheImage.setTypeMoteur(TypeMoteur.AVANCEE);
presenteurRechercheImage.collecterInfosRecherche();
presenteurRechercheImage.afficherRequeteEtLancerRecherche();
assertTrue(rechercheImageEffectuee);
assertEquals("10/02/2004", CacheClient.getInstance().getInformationsRechercheImage().getDate());
}
@Test
public void testLancerRechercheCommuneImage() {
presenteurRechercheImage.go(container);
Mockito.when(presenteurAutoCompletionCommunesImage.getValeur()).thenReturn("Montpellier");
presenteurRechercheImage.setTypeMoteur(TypeMoteur.AVANCEE);
presenteurRechercheImage.collecterInfosRecherche();
presenteurRechercheImage.afficherRequeteEtLancerRecherche();
assertTrue(rechercheImageEffectuee);
assertEquals("Montpellier", CacheClient.getInstance().getInformationsRechercheImage().getCommune());
}
@Test
public void testLancerRechercheFamilleImage() {
presenteurRechercheImage.go(container);
Mockito.when(vueRechercheImage.getFamille()).thenReturn("Asteracae");
presenteurRechercheImage.setTypeMoteur(TypeMoteur.AVANCEE);
presenteurRechercheImage.collecterInfosRecherche();
presenteurRechercheImage.afficherRequeteEtLancerRecherche();
assertTrue(rechercheImageEffectuee);
assertEquals("Asteracae", CacheClient.getInstance().getInformationsRechercheImage().getFamille());
}
@Test
public void testLancerRechercheTagImage() {
presenteurRechercheImage.go(container);
Mockito.when(vueRechercheImage.getMotCle()).thenReturn("fleur, tige, épine");
presenteurRechercheImage.setTypeMoteur(TypeMoteur.AVANCEE);
presenteurRechercheImage.collecterInfosRecherche();
presenteurRechercheImage.afficherRequeteEtLancerRecherche();
assertTrue(rechercheImageEffectuee);
assertEquals("fleur, tige, épine", CacheClient.getInstance().getInformationsRechercheImage().getMotClef());
}
@Test
public void testLancerRechercheAuteurImage() {
presenteurRechercheImage.go(container);
Mockito.when(vueRechercheImage.getAuteur()).thenReturn("Hubert de Linné");
presenteurRechercheImage.setTypeMoteur(TypeMoteur.AVANCEE);
presenteurRechercheImage.collecterInfosRecherche();
presenteurRechercheImage.afficherRequeteEtLancerRecherche();
assertTrue(rechercheImageEffectuee);
assertEquals("Hubert de Linné", CacheClient.getInstance().getInformationsRechercheImage().getAuteur());
}
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/test/composants/formulaires/FormulaireCommentaireTest.java
New file
0,0 → 1,69
package org.tela_botanica.del.test.composants.formulaires;
 
import static org.junit.Assert.*;
 
import java.util.Date;
 
import org.junit.Before;
import org.junit.Test;
import org.mockito.Mockito;
import org.tela_botanica.del.client.composants.formulaires.formulairecommentaire.FormulaireCommentairePresenteur;
import org.tela_botanica.del.client.composants.formulaires.formulairecommentaire.FormulaireCommentairePresenteur.Vue;
import org.tela_botanica.del.client.modeles.Commentaire;
import org.tela_botanica.del.client.modeles.Contributeur;
import org.tela_botanica.del.client.modeles.Observation;
import org.tela_botanica.del.client.services.rest.CommentaireService;
 
public class FormulaireCommentaireTest {
 
FormulaireCommentairePresenteur presenteurFormulaireCommentairePourObservation;
FormulaireCommentairePresenteur presenteurFormulaireCommentairePourPossesseurCommentaire;
 
Commentaire comm;
 
Observation obs;
 
@Before
public void setUp() {
 
obs = new Observation();
comm = new Commentaire(new Contributeur("1", "Peronnet", "Aurélien", "aurelien@tela-botanica.org"), new Date(), "Ceci est une chaine de charactères");
obs.getInterventionsForum().add(comm);
 
Vue vue1 = Mockito.mock(FormulaireCommentairePresenteur.Vue.class, Mockito.RETURNS_MOCKS);
Mockito.when(vue1.getCommentaire().getText()).thenReturn("Ceci est un commentaire");
Mockito.when(vue1.getPrenom()).thenReturn("Georges");
Mockito.when(vue1.getNom()).thenReturn("Abitbol");
 
CommentaireService commentaireService = Mockito.mock(CommentaireService.class);
presenteurFormulaireCommentairePourObservation = new FormulaireCommentairePresenteur(obs, commentaireService, vue1);
 
Vue vue2 = Mockito.mock(FormulaireCommentairePresenteur.Vue.class, Mockito.RETURNS_MOCKS);
Mockito.when(vue2.getCommentaire().getText()).thenReturn("Ceci est un commentaire");
Mockito.when(vue2.getPrenom()).thenReturn("Georges");
Mockito.when(vue2.getNom()).thenReturn("Abitbol");
 
presenteurFormulaireCommentairePourPossesseurCommentaire = new FormulaireCommentairePresenteur(comm, commentaireService, vue2);
}
 
@Test
public void testAjoutCommentaireSurObservation() {
assertEquals(1, obs.getInterventionsForum().size());
 
presenteurFormulaireCommentairePourObservation.surValidationCommentaire();
assertEquals(1, obs.getInterventionsForum().size());
}
 
@Test
public void testAjoutCommentaireSurPossesseurCOmmentaire() {
// Les deux ligne suivantes désignent normalement le même objet, qui ne
// possède pas de commentaire
// au début
assertEquals(comm.getListeCommentaires().size(), 0);
assertEquals(obs.getInterventionsForum().get(0).getListeCommentaires().size(), 0);
 
presenteurFormulaireCommentairePourPossesseurCommentaire.surValidationCommentaire();
assertEquals(obs.getInterventionsForum().size(), 1);
assertEquals(obs.getInterventionsForum().get(0).getListeCommentaires().size(), 1);
}
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/test/composants/identification/FormulaireIdentificationPresenteurTest.java
New file
0,0 → 1,66
package org.tela_botanica.del.test.composants.identification;
 
import static org.junit.Assert.*;
import org.junit.Before;
import org.junit.Test;
import org.mockito.Mockito;
import org.tela_botanica.del.client.cache.CacheClient;
import org.tela_botanica.del.client.composants.formulaires.identification.FormulaireIdentificationPresenteur;
import org.tela_botanica.del.client.modeles.Utilisateur;
import org.tela_botanica.del.client.services.rest.UtilisateurService;
import org.tela_botanica.del.client.services.rest.async.UtilisateurCallback;
 
public class FormulaireIdentificationPresenteurTest {
FormulaireIdentificationPresenteur.Vue vue;
FormulaireIdentificationPresenteur presenteur;
Utilisateur utilisateurDepart;
@Before
public void setUp() throws Exception {
utilisateurDepart = new Utilisateur("0", "gregoire@tela-botanica.org");
utilisateurDepart.setIdentifie(true);
utilisateurDepart.setCourriel("gregoire@tela-botanica.org");
utilisateurDepart.setNom("Duché");
utilisateurDepart.setPrenom("Grégoire");
vue = Mockito.mock(FormulaireIdentificationPresenteur.Vue.class, Mockito.RETURNS_MOCKS);
presenteur = new FormulaireIdentificationPresenteur(vue, new UtilisateurService() {
@Override
public void obtenirUtilisateur(UtilisateurCallback callback) {
}
@Override
public void connecterUtilisateur(String login, String motDePasse, UtilisateurCallback callback) {
Utilisateur utilisateur = new Utilisateur("0", login);
utilisateur.setCourriel(login);
utilisateur.setIdentifie(true);
CacheClient.getInstance().setUtilisateur(utilisateur);
}
 
@Override
public void deconnecterUtilisateur(UtilisateurCallback callback) {
// TODO Auto-generated method stub
}
});
}
 
@Test
public void loginOk() {
presenteur.connecterUtilisateur(utilisateurDepart.getId(), "test");
Utilisateur utilisateurCache = CacheClient.getInstance().getUtilisateur();
assertEquals(utilisateurDepart.getCourriel(), utilisateurCache.getCourriel());
assertEquals(true, utilisateurCache.estIdentifie());
}
@Test
public void deconnecter() {
presenteur.deconnecterUtilisateur();
Utilisateur utilisateurCache = CacheClient.getInstance().getUtilisateur();
assertEquals(null, utilisateurCache.getId());
assertEquals(false, utilisateurCache.estIdentifie());
}
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/test/composants/pagination/PaginationPresenteurTest.java
New file
0,0 → 1,137
package org.tela_botanica.del.test.composants.pagination;
 
import static org.junit.Assert.assertEquals;
import static org.mockito.Mockito.when;
 
import org.junit.Before;
import org.junit.Test;
import org.mockito.Mockito;
import org.tela_botanica.del.client.composants.pagination.PaginationPresenteur;
 
import com.google.gwt.event.dom.client.HasChangeHandlers;
import com.google.gwt.event.dom.client.HasClickHandlers;
import com.google.gwt.user.client.ui.HasWidgets;
 
public class PaginationPresenteurTest {
 
/**
* Presenteur utilisé pour le test de synchro pagination
*/
PaginationPresenteur paginationHautPresenteur;
/**
* Presenteur utilisé pour le test de synchro pagination
*/
PaginationPresenteur paginationBasPresenteur;
 
/**
* Presenteur utilisé seul qui ne doit pas réagir au évènements lancés par
* les deux autres
*/
PaginationPresenteur paginationPresenteurSeul;
 
@Before
public void setUp() {
PaginationPresenteur.Vue vueBas = creerMockVuePaginationPresenteurBasique();
this.paginationBasPresenteur = new PaginationPresenteur(vueBas, 100, 10, 1) {
 
@Override
public void chargerElements(int debut, int fin) {
// TODO Auto-generated method stub
 
}
 
@Override
public void actualiserPasCache(int pas) {
// TODO Auto-generated method stub
 
}
};
 
PaginationPresenteur.Vue vueHaut = creerMockVuePaginationPresenteurBasique();
this.paginationHautPresenteur = new PaginationPresenteur(vueHaut, 100, 10, 1) {
 
@Override
public void actualiserPasCache(int pas) {
}
 
@Override
public void chargerElements(int debut, int fin) {
// TODO Auto-generated method stub
 
}
};
 
PaginationPresenteur.Vue vueSeule = creerMockVuePaginationPresenteurBasique();
this.paginationPresenteurSeul = new PaginationPresenteur(vueSeule, 100, 10, 1) {
 
@Override
public void actualiserPasCache(int pas) {
}
 
@Override
public void chargerElements(int debut, int fin) {
// TODO Auto-generated method stub
 
}
};
 
HasWidgets containerMock = Mockito.mock(HasWidgets.class);
 
paginationHautPresenteur.setGroupePagination("pagination_synchro");
paginationBasPresenteur.setGroupePagination("pagination_synchro");
 
paginationHautPresenteur.go(containerMock);
paginationBasPresenteur.go(containerMock);
 
paginationPresenteurSeul.go(containerMock);
}
 
@Test
public void testSynchronisationChangementPageCourante() {
 
assertEquals(1, paginationHautPresenteur.getPageCourante());
assertEquals(1, paginationBasPresenteur.getPageCourante());
 
paginationBasPresenteur.allerALapageSuivante();
assertEquals(2, paginationHautPresenteur.getPageCourante());
}
 
@Test
public void testSynchronisationChangementPas() {
paginationBasPresenteur.changerPas(20);
assertEquals(1, paginationBasPresenteur.getPageCourante());
assertEquals(20, paginationHautPresenteur.getPas());
}
 
@Test
public void testGroupePaginationDifferents() {
paginationPresenteurSeul.allerALapageSuivante();
assertEquals(2, paginationPresenteurSeul.getPageCourante());
 
paginationBasPresenteur.allerAlaDernierePage();
assertEquals(10, paginationHautPresenteur.getPageCourante());
assertEquals(10, paginationBasPresenteur.getPageCourante());
 
assertEquals(2, paginationPresenteurSeul.getPageCourante());
}
 
private PaginationPresenteur.Vue creerMockVuePaginationPresenteurBasique() {
 
PaginationPresenteur.Vue vueMock = Mockito.mock(PaginationPresenteur.Vue.class);
HasChangeHandlers saisiePageCourante = Mockito.mock(HasChangeHandlers.class);
HasChangeHandlers selecteurPas = Mockito.mock(HasChangeHandlers.class);
HasClickHandlers boutonPrecedent = Mockito.mock(HasClickHandlers.class);
HasClickHandlers boutonSuivant = Mockito.mock(HasClickHandlers.class);
HasClickHandlers boutonPremierePage = Mockito.mock(HasClickHandlers.class);
HasClickHandlers boutonDernierePage = Mockito.mock(HasClickHandlers.class);
 
when(vueMock.getSaisiePageCourante()).thenReturn(saisiePageCourante);
when(vueMock.getSelecteurPas()).thenReturn(selecteurPas);
when(vueMock.getBoutonPrecedent()).thenReturn(boutonPrecedent);
when(vueMock.getBoutonSuivant()).thenReturn(boutonSuivant);
when(vueMock.getBoutonPremierePage()).thenReturn(boutonPremierePage);
when(vueMock.getBoutonDernierePage()).thenReturn(boutonDernierePage);
 
return vueMock;
}
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/test/composants/motsclesimage/MotsClesImageTest.java
New file
0,0 → 1,81
package org.tela_botanica.del.test.composants.motsclesimage;
 
import static org.junit.Assert.*;
 
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
 
import org.junit.Before;
import org.junit.Test;
import org.tela_botanica.del.client.modeles.MotCle;
import org.tela_botanica.del.client.utils.StringUtils;
 
public class MotsClesImageTest {
List<MotCle> motsCles;
List<String> motClesCelAFiltrer;
 
@Before
public void setUp() {
String chaineMotsClesCelAFiltrer = "fleur,feuille,ecorce,fruit,port,defiphoto";
this.motClesCelAFiltrer = new ArrayList<String>();
String[] tabMotsClesCelAFiltrer = chaineMotsClesCelAFiltrer.split(",");
for (int i = 0; i < tabMotsClesCelAFiltrer.length; i++) {
this.motClesCelAFiltrer.add(StringUtils.normaliser(tabMotsClesCelAFiltrer[i]));
}
motsCles = new ArrayList<MotCle>();
}
 
@Test
public void testFiltreMotClesCelAvecAccents() {
MotCle mc1 = new MotCle("1", "1", "écorce");
MotCle mc2 = new MotCle("2", "1", "pôrt");
MotCle mc3 = new MotCle("3", "1", "ucorce");
MotCle mc4 = new MotCle("4", "1", "Défi Photo");
MotCle mc5 = new MotCle("5", "1", "FeuIlle");
MotCle mc6 = new MotCle("6", "1", "fruIT");
motsCles.add(mc1);
motsCles.add(mc2);
motsCles.add(mc3);
motsCles.add(mc4);
motsCles.add(mc5);
motsCles.add(mc6);
List<String> resultat = afficherMotsClesCel(motsCles, motClesCelAFiltrer);
assertEquals(5, resultat.size());
}
@Test
public void testNormalisation() {
String avecEspaces = "mot cle espaces";
String sansEspaces = "motcleespaces";
 
assertEquals(StringUtils.normaliser(avecEspaces), StringUtils.normaliser(sansEspaces));
String avecAccents = "motcléaccentué";
String sansAccents = "motcleaccentue";
 
assertEquals(StringUtils.normaliser(avecAccents), StringUtils.normaliser(sansAccents));
String avecEspacesAccents = "mot clé èspâces";
String sansEspacesAccents = "motcleespaces";
 
assertEquals(StringUtils.normaliser(avecEspacesAccents), StringUtils.normaliser(sansEspacesAccents));
}
private List<String> afficherMotsClesCel(List<MotCle> motsClesCelImages, List<String> motsClesCelAFiltrer) {
List<String> motsClesCel = new ArrayList<String>();
for (Iterator<MotCle> iterator = motsClesCelImages.iterator(); iterator.hasNext();) {
String mot = iterator.next().getMotCle();
if(!mot.trim().isEmpty() && motsClesCelAFiltrer.contains(StringUtils.normaliser(mot))) {
motsClesCel.add(mot);
}
}
return motsClesCel;
}
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/test/modeles/MoyenneVoteTest.java
New file
0,0 → 1,41
package org.tela_botanica.del.test.modeles;
 
import static org.junit.Assert.*;
 
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
 
import org.junit.Test;
import org.tela_botanica.del.client.modeles.MoyenneVote;
import org.tela_botanica.del.client.modeles.Observation;
import org.tela_botanica.del.client.modeles.PropositionDetermination;
 
public class MoyenneVoteTest {
 
@Test
public void testCompareTo() {
PropositionDetermination propositionDetermination = new PropositionDetermination(new Observation());
MoyenneVote mv1 = new MoyenneVote(100, propositionDetermination);
PropositionDetermination propositionDetermination2 = new PropositionDetermination(new Observation());
MoyenneVote mv2 = new MoyenneVote(75, propositionDetermination2);
PropositionDetermination propositionDetermination3 = new PropositionDetermination(new Observation());
MoyenneVote mv3 = new MoyenneVote(50, propositionDetermination3);
PropositionDetermination propositionDetermination4 = new PropositionDetermination(new Observation());
MoyenneVote mv4 = new MoyenneVote(50, propositionDetermination4);
int mv1SuperieurMv2 = mv1.compareTo(mv2);
assertEquals(-1, mv1SuperieurMv2);
int mv3InferieurMv2 = mv3.compareTo(mv2);
assertEquals(1, mv3InferieurMv2);
int mv4EgalMv3 = mv4.compareTo(mv3);
assertEquals(0, mv4EgalMv3);
}
 
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/test/modeles/PropositionDeterminationTest.java
New file
0,0 → 1,156
package org.tela_botanica.del.test.modeles;
 
import static org.junit.Assert.*;
 
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
 
import org.junit.Before;
import org.junit.Test;
import org.tela_botanica.del.client.modeles.Commentaire;
import org.tela_botanica.del.client.modeles.Contributeur;
import org.tela_botanica.del.client.modeles.Observation;
import org.tela_botanica.del.client.modeles.PropositionDetermination;
import org.tela_botanica.del.client.modeles.VoteDetermination;
 
 
public class PropositionDeterminationTest {
PropositionDetermination propositionDetermination;
VoteDetermination voteDetermination1;
Commentaire commentaireInitial;
Date dateInitiale;
ArrayList<Commentaire> commentairesInitiaux = new ArrayList<Commentaire>();
Map<String, VoteDetermination> votesDeterminationsInitiaux = new HashMap<String, VoteDetermination>();
@Before
public void setUp() {
propositionDetermination = new PropositionDetermination(new Observation());
Contributeur contributeur = new Contributeur("1", "peronnet", "Aurélien", "aurelien@tela-botanica.org");
propositionDetermination.setContributeur(contributeur);
propositionDetermination.setId("5");
dateInitiale = new Date();
propositionDetermination.setDate(dateInitiale);
commentaireInitial = new Commentaire(contributeur, new Date(), "Oui c'est interessant");
commentairesInitiaux.add(commentaireInitial);
propositionDetermination.setListeCommentaires(commentairesInitiaux);
propositionDetermination.setEspece("Acer monsp. L.");
voteDetermination1 = new VoteDetermination();
voteDetermination1.setVote(1);
voteDetermination1.setDate(new Date());
voteDetermination1.setContributeur("benjamin");
votesDeterminationsInitiaux.put("benjamin", voteDetermination1);
propositionDetermination.setVotesDeterminations(votesDeterminationsInitiaux);
}
@Test
public void testAjouterVoteDetermination() {
assertEquals(1, propositionDetermination.getVotesDeterminations().size());
VoteDetermination voteDeterminationTest = new VoteDetermination();
voteDeterminationTest.setVote(1);
voteDeterminationTest.setDate(new Date());
voteDeterminationTest.setContributeur("gregoire");
propositionDetermination.ajouterVoteDetermination(voteDeterminationTest);
assertEquals(2, propositionDetermination.getVotesDeterminations().size());
VoteDetermination voteDeterminationTest2 = new VoteDetermination();
voteDeterminationTest2.setVote(0);
voteDeterminationTest2.setDate(new Date());
voteDeterminationTest2.setContributeur("gregoire");
propositionDetermination.ajouterVoteDetermination(voteDeterminationTest2);
// la taille ne doit pas avoir changé après l'ajout du vote de Grégoire car le contributeur
// est la clé la map (i.e. 1 vote par personne pour une determination)
assertEquals(2, propositionDetermination.getVotesDeterminations().size());
assertEquals(0, propositionDetermination.getVotesDeterminations().get("gregoire").getVote());
}
 
@Test
public void testGetContributeur() {
assertEquals("Aurélien", propositionDetermination.getContributeur().getPrenom());
}
 
@Test
public void testSetContributeur() {
Contributeur contributeurTest = new Contributeur("1", "duche", "gregoire", "gregoire@tela-botanica.org");
propositionDetermination.setContributeur(contributeurTest);
assertEquals("gregoire", propositionDetermination.getContributeur().getPrenom());
}
 
@Test
public void testGetId() {
assertEquals("5", propositionDetermination.getId());
}
 
@Test
public void testSetId() {
propositionDetermination.setId("325");
assertEquals("325", propositionDetermination.getId());
}
 
@Test
public void testGetDate() {
assertEquals(dateInitiale, propositionDetermination.getDate());
}
 
@Test
public void testSetDate() {
Date dateTest = new Date();
propositionDetermination.setDate(dateTest);
assertEquals(dateTest, propositionDetermination.getDate());
}
 
@Test
public void testGetCommentaires() {
assertEquals(1, propositionDetermination.getListeCommentaires().size());
assertEquals("Aurélien", propositionDetermination.getListeCommentaires().get(0).getContributeur().getPrenom());
}
 
@Test
public void testSetCommentaires() {
ArrayList<Commentaire> listeVide = new ArrayList<Commentaire>();
propositionDetermination.setListeCommentaires(listeVide);
assertEquals(0, propositionDetermination.getListeCommentaires().size());
}
 
@Test
public void testAjouterCommentaire() {
propositionDetermination.setListeCommentaires(commentairesInitiaux);
assertEquals(1, propositionDetermination.getListeCommentaires().size());
Contributeur contributeur = new Contributeur("1", "Peronnet", "Aurélien", "aurelien@tela-botanica.org");
Commentaire nouveauCommentaire = new Commentaire(contributeur, new Date(), "Tout est beau, tout est joyeux, je suis une fleur");
propositionDetermination.ajouterCommentaire(nouveauCommentaire);
assertEquals(2, propositionDetermination.getListeCommentaires().size());
assertEquals("Aurélien", propositionDetermination.getListeCommentaires().get(1).getContributeur().getPrenom());
}
 
@Test
public void testGetEspece() {
assertEquals("Acer monsp. L.", propositionDetermination.getEspece());
}
 
@Test
public void testSetEspece() {
propositionDetermination.setEspece("Acer monsp. subsp. monsp.");
assertEquals("Acer monsp. subsp. monsp.", propositionDetermination.getEspece());
}
 
@Test
public void testGetVotesDeterminations() {
assertEquals(1, propositionDetermination.getVotesDeterminations().size());
assertEquals(voteDetermination1, propositionDetermination.getVotesDeterminations().get("benjamin"));
}
 
@Test
public void testSetVotesDeterminations() {
HashMap<String, VoteDetermination> votesDeterminationVides = new HashMap<String, VoteDetermination>();
propositionDetermination.setVotesDeterminations(votesDeterminationVides);
assertEquals(0,propositionDetermination.getVotesDeterminations().size());
}
 
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/test/modeles/ImageTest.java
New file
0,0 → 1,40
package org.tela_botanica.del.test.modeles;
 
import static org.junit.Assert.*;
 
import org.junit.Before;
import org.junit.Test;
import org.tela_botanica.del.client.modeles.Image;
import org.tela_botanica.del.client.modeles.Observation;
 
public class ImageTest {
Image testImage;
Observation testObservation;
@Before
public void setUp() {
testImage = new Image();
testObservation = new Observation();
testImage.setObservation(testObservation);
}
@Test
public void testEstADeterminerCarNomRetenuVide() {
testObservation.setNomRetenu("");
assertEquals(testImage.estADeterminer(), true);
}
@Test
public void testEstADeterminerCarTagImageADeterminer() {
testImage.ajouterMotsClef("aDeterminer");
assertEquals(testImage.estADeterminer(), true);
}
@Test
public void testEstADeterminerTagObservationADeterminer() {
testObservation.ajouterMotsClef("aDeterminer");
assertEquals(testImage.estADeterminer(), true);
}
 
}
/branches/v1.11-magnesium/src/org/tela_botanica/del/Del-test.gwt.xml
New file
0,0 → 1,6
<?xml version="1.0" encoding="UTF-8"?>
<module rename-to="del">
<inherits name="org.tela_botanica.del.Del" />
<set-property name="user.agent" value="gecko1_8" />
<set-property name="locale" value="default" />
</module>
/branches/v1.11-magnesium/src/org/tela_botanica/del/Del.gwt.xml
New file
0,0 → 1,39
<?xml version="1.0" encoding="UTF-8"?>
<module rename-to="del">
<!-- Inherit the core Web Toolkit stuff. -->
<inherits name="com.google.gwt.user.User" />
<inherits name="org.cobogw.gwt.user.User" />
 
 
<!--Defines all possible locales we'll use-->
<extend-property name="locale" values="fr,en"/>
<!--Defines default locale-->
<set-property-fallback name="locale" value="fr"/>
<!-- Inherit the default GWT style sheet. You can change -->
<!-- the theme of your GWT application by uncommenting -->
<!-- any one of the following lines. -->
<inherits name="com.google.gwt.user.theme.standard.Standard" />
<!-- <inherits name='com.google.gwt.user.theme.chrome.Chrome'/> -->
<!-- <inherits name='com.google.gwt.user.theme.dark.Dark'/> -->
 
<!-- Other module inherits -->
<inherits name="com.google.gwt.activity.Activity" />
<inherits name="com.google.gwt.place.Place" />
<!-- Permet d'accélérer le temps de compilation en compilant que pour Firefox > à 1.5 -->
<!-- Bien mettre gecko1_8 (et pas gecko) sinon ne marche pas dans Firefox > à 1.5 -->
<!-- <set-property name="user.agent" value="gecko1_8"/> -->
 
<!-- Specify the app entry point class. -->
<entry-point class='org.tela_botanica.del.client.Del' />
 
<!-- UIBinder allows to design GWT UI's declarative via XML. -->
<inherits name="com.google.gwt.uibinder.UiBinder" />
<!-- Specify the paths for translatable code -->
<source path='client' />
<source path='shared' />
 
</module>