Subversion Repositories eFlore/Applications.del

Compare Revisions

No changes between revisions

Ignore whitespace Rev 2211 → Rev 2212

/branches/v1.12-aluminium/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.12-aluminium/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.12-aluminium/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.12-aluminium/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.12-aluminium/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.12-aluminium/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.12-aluminium/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.12-aluminium/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.12-aluminium/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.12-aluminium/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.12-aluminium/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.12-aluminium/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.12-aluminium/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.12-aluminium/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.12-aluminium/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.12-aluminium/src/org/tela_botanica/del/client/composants/formulairerechercheeflore/formulaireRechercheEflore.css
New file
0,0 → 1,4
.propositionTaxon {
width: 150px;
height: 30px;
}
/branches/v1.12-aluminium/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.12-aluminium/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.12-aluminium/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.12-aluminium/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.12-aluminium/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.12-aluminium/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.12-aluminium/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.12-aluminium/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.12-aluminium/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.12-aluminium/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.12-aluminium/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.12-aluminium/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.12-aluminium/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.12-aluminium/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.12-aluminium/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.12-aluminium/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.12-aluminium/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.12-aluminium/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.12-aluminium/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.12-aluminium/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.12-aluminium/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.12-aluminium/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.12-aluminium/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.12-aluminium/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.12-aluminium/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.12-aluminium/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(0, 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.12-aluminium/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.12-aluminium/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.12-aluminium/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.12-aluminium/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.12-aluminium/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.12-aluminium/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.12-aluminium/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.12-aluminium/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.12-aluminium/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.12-aluminium/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.12-aluminium/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.12-aluminium/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.12-aluminium/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.12-aluminium/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.12-aluminium/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.12-aluminium/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.12-aluminium/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.12-aluminium/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.12-aluminium/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.12-aluminium/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.12-aluminium/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.12-aluminium/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.12-aluminium/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.12-aluminium/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.12-aluminium/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.12-aluminium/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.12-aluminium/src/org/tela_botanica/del/client/composants/forum/forum.css
New file
0,0 → 1,0
.table {}
/branches/v1.12-aluminium/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.12-aluminium/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.12-aluminium/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.12-aluminium/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.12-aluminium/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.12-aluminium/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.12-aluminium/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.12-aluminium/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.12-aluminium/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.12-aluminium/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.12-aluminium/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.12-aluminium/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.12-aluminium/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.12-aluminium/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.12-aluminium/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.12-aluminium/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.12-aluminium/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.12-aluminium/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.12-aluminium/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.12-aluminium/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.12-aluminium/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.12-aluminium/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.12-aluminium/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.12-aluminium/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.12-aluminium/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.12-aluminium/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.12-aluminium/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.12-aluminium/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.12-aluminium/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.12-aluminium/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.12-aluminium/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.12-aluminium/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.12-aluminium/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.12-aluminium/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.12-aluminium/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.12-aluminium/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.12-aluminium/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.12-aluminium/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.12-aluminium/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.12-aluminium/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.12-aluminium/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.12-aluminium/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.12-aluminium/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.12-aluminium/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.12-aluminium/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.12-aluminium/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.12-aluminium/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.12-aluminium/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.12-aluminium/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.12-aluminium/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.12-aluminium/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.12-aluminium/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.12-aluminium/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.12-aluminium/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.12-aluminium/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.12-aluminium/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.12-aluminium/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.12-aluminium/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.12-aluminium/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.12-aluminium/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.12-aluminium/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.12-aluminium/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.12-aluminium/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.12-aluminium/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.12-aluminium/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.12-aluminium/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.12-aluminium/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.12-aluminium/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.12-aluminium/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.12-aluminium/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.12-aluminium/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.12-aluminium/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.12-aluminium/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.12-aluminium/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.12-aluminium/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.12-aluminium/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.12-aluminium/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.12-aluminium/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.12-aluminium/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.12-aluminium/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.12-aluminium/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.12-aluminium/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.12-aluminium/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.12-aluminium/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.12-aluminium/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.12-aluminium/src/org/tela_botanica/del/client/i18n/Vocabulary.properties
New file
0,0 → 1,271
###########################################################################################
# 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)
referentielTaxreflich = Lichens (TaxRef)
referentielTaxref = France (TaxRef)
 
# 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.12-aluminium/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.12-aluminium/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.12-aluminium/src/org/tela_botanica/del/client/i18n/Messages_en.properties
--- tela_botanica/del/client/i18n/Vocabulary_en.properties (revision 0)
+++ tela_botanica/del/client/i18n/Vocabulary_en.properties (revision 2212)
@@ -0,0 +1,3 @@
+#sample constant property to be translated in language specific versions of this property file
+
+
/branches/v1.12-aluminium/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.12-aluminium/src/org/tela_botanica/del/client/i18n/Vocabulary.java
New file
0,0 → 1,2016
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 "Référentiel des Lichens".
*
* @return translated "Référentiel des lichens"
*/
@DefaultStringValue("Lichens (TaxRef)")
@Key("referentielTaxreflich")
String referentielTaxreflich();
/**
* Translated "Référentiel de France".
*
* @return translated "Référentiel de France"
*/
@DefaultStringValue("France (TaxRef)")
@Key("referentielTaxref")
String referentielTaxref();
 
/**
* 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.12-aluminium/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.12-aluminium/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.12-aluminium/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.12-aluminium/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.12-aluminium/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.12-aluminium/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.12-aluminium/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.12-aluminium/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.12-aluminium/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.12-aluminium/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.12-aluminium/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.12-aluminium/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.12-aluminium/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.12-aluminium/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.12-aluminium/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.12-aluminium/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.12-aluminium/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.12-aluminium/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.12-aluminium/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.12-aluminium/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.12-aluminium/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.12-aluminium/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.12-aluminium/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.12-aluminium/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.12-aluminium/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.12-aluminium/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.12-aluminium/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.12-aluminium/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.12-aluminium/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.12-aluminium/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.12-aluminium/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.12-aluminium/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.12-aluminium/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.12-aluminium/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.12-aluminium/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.12-aluminium/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.12-aluminium/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.12-aluminium/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.12-aluminium/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.12-aluminium/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.12-aluminium/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.12-aluminium/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.12-aluminium/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.12-aluminium/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.12-aluminium/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.12-aluminium/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.12-aluminium/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.12-aluminium/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.12-aluminium/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.12-aluminium/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.12-aluminium/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.12-aluminium/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.12-aluminium/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.12-aluminium/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.12-aluminium/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.12-aluminium/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.12-aluminium/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.12-aluminium/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.12-aluminium/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.12-aluminium/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.12-aluminium/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.12-aluminium/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.12-aluminium/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.12-aluminium/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.12-aluminium/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.12-aluminium/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.12-aluminium/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.12-aluminium/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.12-aluminium/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.12-aluminium/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.12-aluminium/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.12-aluminium/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.12-aluminium/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.12-aluminium/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.12-aluminium/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.12-aluminium/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.12-aluminium/src/org/tela_botanica/del/client/services/ReferentielService.java
New file
0,0 → 1,37
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());
referentiels.put("taxreflich", I18n.getVocabulary().referentielTaxreflich());
referentiels.put("taxref", I18n.getVocabulary().referentielTaxref());
}
return referentiels;
}
 
}
/branches/v1.12-aluminium/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.12-aluminium/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.12-aluminium/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.12-aluminium/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.12-aluminium/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.12-aluminium/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.12-aluminium/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>