/branches/v1.11-magnesium/src/org/tela_botanica/del/client/composants/formulaires/autocompletion/AutoCompletionComboBoxPresenteur.java |
---|
New file |
0,0 → 1,208 |
package org.tela_botanica.del.client.composants.formulaires.autocompletion; |
import org.tela_botanica.del.client.utils.InfosNomPourAutocompletion; |
import com.google.gwt.core.client.Callback; |
import com.google.gwt.event.dom.client.HasKeyPressHandlers; |
import com.google.gwt.event.dom.client.KeyPressEvent; |
import com.google.gwt.event.dom.client.KeyPressHandler; |
import com.google.gwt.event.logical.shared.HasSelectionHandlers; |
import com.google.gwt.event.logical.shared.SelectionEvent; |
import com.google.gwt.event.logical.shared.SelectionHandler; |
import com.google.gwt.http.client.Request; |
import com.google.gwt.http.client.RequestBuilder; |
import com.google.gwt.http.client.RequestCallback; |
import com.google.gwt.http.client.RequestException; |
import com.google.gwt.http.client.Response; |
import com.google.gwt.http.client.URL; |
import com.google.gwt.user.client.Timer; |
import com.google.gwt.user.client.ui.HasText; |
import com.google.gwt.user.client.ui.HasWidgets; |
import com.google.gwt.user.client.ui.IsWidget; |
import com.google.gwt.user.client.ui.SuggestOracle; |
import com.google.gwt.user.client.ui.SuggestOracle.Suggestion; |
public abstract class AutoCompletionComboBoxPresenteur { |
public interface Vue extends IsWidget { |
public void ajouterVue(HasWidgets composite); |
public HasKeyPressHandlers getSuggestBoxHasKeyPressHandlers(); |
public String getValeur(); |
public void remplirListe(InfosNomPourAutocompletion[] suggestions); |
public void afficherSuggestions(SuggestOracle.Request request,SuggestOracle.Callback response); |
public void afficherListeDeroulante(); |
public void nettoyer(); |
public void setValeur(String valeur); |
public HasSelectionHandlers<Suggestion> getSuggestBoxHasSelectionChangeHandlers(); |
public HasText getSuggestBox(); |
public void afficherStyleErreur(String styleErreur); |
public void supprimerStyleErreur(String styleErreur); |
public void setHandlerCopierColler(Callback<String, String> cb); |
} |
private Vue autoCompletionComboBoxVue; |
SuggestOracle.Request requeteOracle; |
SuggestOracle.Callback callBackOracle; |
Timer suggestionTimer = null; |
int tempsAvantRequete = 500; |
String urlRequete = ""; |
public AutoCompletionComboBoxPresenteur(Vue vue, String urlRequete) { |
this.autoCompletionComboBoxVue = vue; |
this.urlRequete = urlRequete; |
gererEvenements(); |
} |
public void go(HasWidgets composite) { |
autoCompletionComboBoxVue.ajouterVue(composite); |
} |
public void gererEvenements() { |
autoCompletionComboBoxVue.getSuggestBoxHasKeyPressHandlers().addKeyPressHandler(new KeyPressHandler() { |
public void onKeyPress(KeyPressEvent event) { |
if(event.getUnicodeCharCode() != 0) { |
gererTimer(); |
} |
} |
}); |
requeteOracle = new SuggestOracle.Request(); |
callBackOracle = new SuggestOracle.Callback() { |
public void onSuggestionsReady(SuggestOracle.Request request, SuggestOracle.Response response) { |
autoCompletionComboBoxVue.afficherListeDeroulante(); |
} |
}; |
autoCompletionComboBoxVue.getSuggestBoxHasSelectionChangeHandlers().addSelectionHandler(new SelectionHandler<SuggestOracle.Suggestion>(){ |
@Override |
public void onSelection(SelectionEvent<Suggestion> event) { |
surSelectionSuggestion(event.getSelectedItem().getReplacementString()); |
} |
}); |
autoCompletionComboBoxVue.setHandlerCopierColler(new Callback<String, String>() { |
@Override |
public void onSuccess(String result) { |
gererTimer(); |
} |
@Override |
public void onFailure(String reason) { |
// rien à faire ça n'échoue jamais |
} |
}); |
} |
public void gererTimer() { |
if(suggestionTimer == null) { |
suggestionTimer = new Timer() { |
public void run() { |
requeteSuggestions(); |
} |
}; |
suggestionTimer.schedule(tempsAvantRequete); |
} else { |
suggestionTimer.schedule(tempsAvantRequete); |
} |
} |
public void setTempsAvantRequete(int temps) { |
tempsAvantRequete = temps; |
} |
public int getTempsAvantRequete(int temps) { |
return tempsAvantRequete; |
} |
public String getValeur() { |
return autoCompletionComboBoxVue.getValeur(); |
} |
public void setValeur(String taxon) { |
autoCompletionComboBoxVue.setValeur(taxon); |
} |
public void nettoyer() { |
autoCompletionComboBoxVue.nettoyer(); |
} |
public void requeteSuggestions() { |
// Suppression des espaces et caractères inutiles |
String valeur = autoCompletionComboBoxVue.getValeur().trim(); |
final String requete = URL.encodeQueryString(valeur); |
String requeteAjax = effectuerPreTraitementChaineRequete(requete); |
// ceci permet au composant qui utilise l'autocomplétion |
// d'annuler une requete |
if(requeteAjax == null) { |
return; |
} |
String urlProxy = urlRequete+requeteAjax; |
RequestBuilder rb = new RequestBuilder(RequestBuilder.GET, urlProxy) ; |
try { |
rb.sendRequest(null, new RequestCallback() { |
public void onError(final Request request, final Throwable exception) { |
// TODO Auto-generated method stub |
} |
public void onResponseReceived(final Request request, |
final Response response) { |
surReponseRequete(requete, response); |
} |
}) ; |
} catch (RequestException e) { |
// TODO Auto-generated catch block |
e.printStackTrace(); |
} |
} |
public void surReponseRequete(String requete, Response response) { |
InfosNomPourAutocompletion[] valeurs = parserResultatRequete(response); |
autoCompletionComboBoxVue.remplirListe(valeurs); |
requeteOracle.setQuery(requete); |
autoCompletionComboBoxVue.afficherSuggestions(requeteOracle, callBackOracle); |
} |
protected void surSelectionSuggestion(String suggestion) { |
return; |
} |
/** |
* Permet d'intervenir sur la chaine tapée par l'utilisateur avant que celle-ci ne soit passée |
* à la requête asynchrone pour pouvoir la formater (pour mettre en minuscule, séparer des termes) |
* par défaut renvoie la chaine telle quelle, à surcharger au besoin |
* @param String requete chaine de recherche contenant ce que l'utilisateur à tapé |
* @return String une chaine transformée |
*/ |
protected String effectuerPreTraitementChaineRequete(String requete) { |
return requete; |
} |
/** |
* Parse les résultats de la requete afin de pouvoir les utiliser à implémenter par le |
* composants qui crée la combobox selon le contexte et le web service appelé. |
* @param Response la réponse à la requête asynchrone |
* @return String[] le tableau des suggestions qui sera affiché dans la combobox |
*/ |
protected abstract InfosNomPourAutocompletion[] parserResultatRequete(Response response); |
public Vue getAutoCompletionComboBoxVue() { |
return autoCompletionComboBoxVue; |
} |
public void afficherStyleErreur(String styleErreur) { |
autoCompletionComboBoxVue.afficherStyleErreur(styleErreur); |
} |
public void supprimerStyleErreur(String styleErreur) { |
autoCompletionComboBoxVue.supprimerStyleErreur(styleErreur); |
} |
} |
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/composants/formulaires/autocompletion/AutoCompletionComboBoxVue.java |
---|
New file |
0,0 → 1,105 |
package org.tela_botanica.del.client.composants.formulaires.autocompletion; |
import org.tela_botanica.del.client.utils.InfosNomPourAutocompletion; |
import org.tela_botanica.del.client.utils.TBSuggestOracle; |
import com.google.gwt.core.client.Callback; |
import com.google.gwt.event.dom.client.HasKeyPressHandlers; |
import com.google.gwt.event.logical.shared.HasSelectionHandlers; |
import com.google.gwt.user.client.Event; |
import com.google.gwt.user.client.ui.HasWidgets; |
import com.google.gwt.user.client.ui.LayoutPanel; |
import com.google.gwt.user.client.ui.SuggestBox; |
import com.google.gwt.user.client.ui.SuggestOracle; |
import com.google.gwt.user.client.ui.SuggestOracle.Suggestion; |
public class AutoCompletionComboBoxVue extends LayoutPanel implements AutoCompletionComboBoxPresenteur.Vue { |
TBSuggestOracle msu = new TBSuggestOracle(); |
SuggestBox suggestions = new SuggestBox(msu); |
Callback<String, String> surCopierColler = null; |
public AutoCompletionComboBoxVue() { |
add(suggestions); |
setHeight("25px"); |
setWidth("100%"); |
sinkEvents(Event.ONPASTE); |
} |
@Override |
public SuggestBox getSuggestBox() { |
return suggestions; |
} |
public void remplirListe(InfosNomPourAutocompletion[] listePropositions) { |
msu.clear(); |
for (int i = 0; i < listePropositions.length; i++) { |
msu.add(listePropositions[i]); |
} |
} |
@Override |
public void afficherSuggestions(SuggestOracle.Request requeteOracle, SuggestOracle.Callback callBackOracle) { |
msu.requestSuggestions(requeteOracle, callBackOracle); |
} |
@Override |
public void afficherListeDeroulante() { |
suggestions.showSuggestionList(); |
} |
public void nettoyer() { |
suggestions.setText(""); |
} |
public void setValeur(String taxon) { |
suggestions.setValue(taxon); |
} |
@Override |
public HasKeyPressHandlers getSuggestBoxHasKeyPressHandlers() { |
return suggestions; |
} |
@Override |
public HasSelectionHandlers<Suggestion> getSuggestBoxHasSelectionChangeHandlers() { |
return suggestions; |
} |
@Override |
public String getValeur() { |
return suggestions.getText(); |
} |
@Override |
public void ajouterVue(HasWidgets composite) { |
composite.add(this.asWidget()); |
} |
@Override |
public void afficherStyleErreur(String styleErreur) { |
suggestions.addStyleName(styleErreur); |
} |
@Override |
public void supprimerStyleErreur(String styleErreur) { |
suggestions.removeStyleName(styleErreur); |
} |
public void onBrowserEvent(Event event) { |
super.onBrowserEvent(event); |
switch (event.getTypeInt()) { |
case Event.ONPASTE: { |
if(surCopierColler != null) { |
surCopierColler.onSuccess(suggestions.getValueBox().getValue()); |
} |
} |
} |
} |
@Override |
public void setHandlerCopierColler(Callback<String, String> cb) { |
surCopierColler = cb; |
} |
} |
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/composants/formulaires/formulairecommentaire/FormulaireCommentairePresenteur.java |
---|
New file |
0,0 → 1,210 |
package org.tela_botanica.del.client.composants.formulaires.formulairecommentaire; |
import java.util.Date; |
import org.tela_botanica.del.client.cache.CacheClient; |
import org.tela_botanica.del.client.composants.presenteur.Presenteur; |
import org.tela_botanica.del.client.composants.validation.ValidateurChampTexteNonNul; |
import org.tela_botanica.del.client.modeles.Commentaire; |
import org.tela_botanica.del.client.modeles.Contributeur; |
import org.tela_botanica.del.client.modeles.InterventionForum; |
import org.tela_botanica.del.client.modeles.Observation; |
import org.tela_botanica.del.client.modeles.Utilisateur; |
import org.tela_botanica.del.client.navigation.evenement.BusEvenementiel; |
import org.tela_botanica.del.client.navigation.evenement.ajoutcommentaire.EvenementAjoutCommentaire; |
import org.tela_botanica.del.client.services.rest.CommentaireService; |
import org.tela_botanica.del.client.services.rest.async.AjoutCommentaireCallback; |
import com.google.gwt.event.dom.client.ClickEvent; |
import com.google.gwt.event.dom.client.ClickHandler; |
import com.google.gwt.event.dom.client.HasClickHandlers; |
import com.google.gwt.user.client.Window; |
import com.google.gwt.user.client.ui.HasText; |
import com.google.gwt.user.client.ui.HasWidgets; |
import com.google.gwt.user.client.ui.IsWidget; |
public class FormulaireCommentairePresenteur extends Presenteur { |
// le meme presenteur gere les commentaires pour les observations et pour |
// les possesseurs de commentaires, mais la logique est differente, d'ou la |
// necessité de separer les deux objets metiers |
private Observation observation; |
private InterventionForum possesseurDeCommentaires; |
public interface Vue extends IsWidget { |
public HasText getNomObjet(); |
public HasText getPrenomObjet(); |
public String getNom(); |
public String getPrenom(); |
public String getCourriel(); |
public abstract HasText getCommentaire(); |
public abstract HasClickHandlers getBoutonValidationCommentaire(); |
public void afficherStyleErreurNom(String styleErreur); |
public void supprimerStyleErreurNom(String styleErreur); |
public void afficherStyleErreurPrenom(String styleErreur); |
public void supprimerStyleErreurPrenom(String styleErreur); |
public void afficherStyleErreurCourriel(String styleErreur); |
public void supprimerStyleErreurCourriel(String styleErreur); |
public void afficherStyleErreurCommentaire(String styleErreur); |
public void supprimerStyleErreurCommentaire(String styleErreur); |
void afficherNomPrenomEtDesactiver(String nom, String prenom, String courriel); |
public HasText getCourrielObjet(); |
} |
private Vue vue; |
private CommentaireService commentaireService; |
public FormulaireCommentairePresenteur(Observation observation, CommentaireService commentaireService, Vue vue) { |
this.observation = observation; |
this.vue = vue; |
this.commentaireService = commentaireService; |
} |
public FormulaireCommentairePresenteur(InterventionForum possesseurDeCommentaires, CommentaireService commentaireService, Vue vue) { |
this.possesseurDeCommentaires = possesseurDeCommentaires; |
this.commentaireService = commentaireService; |
this.vue = vue; |
} |
public void go(HasWidgets composite) { |
remplirAvecInfosUtilisateur(); |
composite.add(vue.asWidget()); |
gererEvenements(); |
} |
private void remplirAvecInfosUtilisateur() { |
Utilisateur utilisateur = CacheClient.getInstance().getUtilisateur(); |
if (utilisateur.estIdentifie()) { |
vue.afficherNomPrenomEtDesactiver(utilisateur.getNom(), utilisateur.getPrenom(), utilisateur.getCourriel()); |
} |
} |
protected void gererEvenements() { |
vue.getBoutonValidationCommentaire().addClickHandler(new ClickHandler() { |
@Override |
public void onClick(ClickEvent event) { |
if (!validerSaisie()) { |
return; |
} |
surValidationCommentaire(); |
} |
}); |
} |
public void surValidationCommentaire() { |
String texteCommentaire = vue.getCommentaire().getText(); |
String idUtilisateur = null; |
if (CacheClient.getInstance().getUtilisateur().estIdentifie()) { |
idUtilisateur = CacheClient.getInstance().getUtilisateur().getId(); |
} |
Contributeur contributeur = new Contributeur(idUtilisateur, vue.getNom(), vue.getPrenom(), vue.getCourriel()); |
final Commentaire commentaire = new Commentaire(contributeur, new Date(), texteCommentaire); |
if (observation != null) { |
commentaire.setObservation(observation); |
commentaire.setParent(null); |
} else if (possesseurDeCommentaires != null) { |
commentaire.setObservation(CacheClient.getInstance().getObservationCourante()); |
commentaire.setParent(possesseurDeCommentaires); |
} |
commentaireService.ajouterCommentaire(commentaire, new AjoutCommentaireCallback() { |
@Override |
public void surRetour(String idNouveauCommentaire) { |
commentaire.setId(idNouveauCommentaire); |
if (observation != null) { |
observation.getInterventionsForum().add(commentaire); |
} else if (possesseurDeCommentaires != null) { |
possesseurDeCommentaires.getListeCommentaires().add(commentaire); |
} |
BusEvenementiel.getInstance().fireEvent(new EvenementAjoutCommentaire(commentaire)); |
} |
@Override |
public void surErreur(String messageErreur) { |
Window.alert(messageErreur); |
} |
}); |
} |
private boolean validerSaisie() { |
ValidateurChampTexteNonNul validateurNom = new ValidateurChampTexteNonNul(vue.getNomObjet()) { |
@Override |
public void afficherStyleErreur(String styleErreur) { |
vue.afficherStyleErreurNom(styleErreur); |
} |
@Override |
public void supprimerStyleErreur(String styleErreur) { |
vue.supprimerStyleErreurNom(styleErreur); |
} |
}; |
ValidateurChampTexteNonNul validateurPrenom = new ValidateurChampTexteNonNul(vue.getPrenomObjet()) { |
@Override |
public void afficherStyleErreur(String styleErreur) { |
vue.afficherStyleErreurPrenom(styleErreur); |
} |
@Override |
public void supprimerStyleErreur(String styleErreur) { |
vue.supprimerStyleErreurPrenom(styleErreur); |
} |
}; |
ValidateurChampTexteNonNul validateurCourriel = new ValidateurChampTexteNonNul(vue.getCourrielObjet()) { |
@Override |
public void afficherStyleErreur(String styleErreur) { |
vue.afficherStyleErreurCourriel(styleErreur); |
} |
@Override |
public void supprimerStyleErreur(String styleErreur) { |
vue.supprimerStyleErreurCourriel(styleErreur); |
} |
}; |
ValidateurChampTexteNonNul validateurCommentaire = new ValidateurChampTexteNonNul(vue.getCommentaire()) { |
@Override |
public void afficherStyleErreur(String styleErreur) { |
vue.afficherStyleErreurCommentaire(styleErreur); |
} |
@Override |
public void supprimerStyleErreur(String styleErreur) { |
vue.supprimerStyleErreurCommentaire(styleErreur); |
} |
}; |
boolean nomSaisi = validateurNom.valider(); |
boolean prenomSaisi = validateurPrenom.valider(); |
boolean courrielSaisi = validateurCourriel.valider(); |
boolean commentaireSaisi = validateurCommentaire.valider(); |
return nomSaisi && prenomSaisi && courrielSaisi && commentaireSaisi; |
} |
} |
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/composants/formulaires/formulairecommentaire/FormulaireCommentaireVue.java |
---|
New file |
0,0 → 1,126 |
package org.tela_botanica.del.client.composants.formulaires.formulairecommentaire; |
import com.google.gwt.core.client.GWT; |
import com.google.gwt.uibinder.client.UiBinder; |
import com.google.gwt.uibinder.client.UiField; |
import com.google.gwt.user.client.ui.Button; |
import com.google.gwt.user.client.ui.Composite; |
import com.google.gwt.user.client.ui.HasText; |
import com.google.gwt.user.client.ui.TextArea; |
import com.google.gwt.user.client.ui.TextBox; |
import com.google.gwt.user.client.ui.Widget; |
public class FormulaireCommentaireVue extends Composite implements FormulaireCommentairePresenteur.Vue { |
@UiField |
public TextBox nom, prenom, courriel; |
@UiField |
public TextArea commentaire; |
@UiField |
public Button boutonValidationCommentaire; |
interface FormulairePropositionUIiBinder extends UiBinder<Widget, FormulaireCommentaireVue> { |
}; |
FormulairePropositionUIiBinder uiBinder = GWT.create(FormulairePropositionUIiBinder.class); |
public FormulaireCommentaireVue() { |
initWidget(uiBinder.createAndBindUi(this)); |
} |
@Override |
public String getNom() { |
return nom.getText(); |
} |
@Override |
public String getPrenom() { |
return prenom.getText(); |
} |
@Override |
public TextArea getCommentaire() { |
return commentaire; |
} |
@Override |
public Button getBoutonValidationCommentaire() { |
return boutonValidationCommentaire; |
} |
@Override |
public void afficherStyleErreurCommentaire(String styleErreur) { |
commentaire.addStyleName(styleErreur); |
} |
@Override |
public void supprimerStyleErreurCommentaire(String styleErreur) { |
commentaire.removeStyleName(styleErreur); |
} |
@Override |
public void afficherStyleErreurNom(String styleErreur) { |
nom.addStyleName(styleErreur); |
} |
@Override |
public void supprimerStyleErreurNom(String styleErreur) { |
nom.removeStyleName(styleErreur); |
} |
@Override |
public void afficherStyleErreurPrenom(String styleErreur) { |
prenom.addStyleName(styleErreur); |
} |
@Override |
public void supprimerStyleErreurPrenom(String styleErreur) { |
prenom.removeStyleName(styleErreur); |
} |
@Override |
public void afficherNomPrenomEtDesactiver(String nom, String prenom, String courriel) { |
this.nom.setText(nom); |
this.nom.setEnabled(false); |
this.prenom.setText(prenom); |
this.prenom.setEnabled(false); |
this.courriel.setText(courriel); |
this.courriel.setEnabled(false); |
} |
@Override |
public HasText getNomObjet() { |
return nom; |
} |
@Override |
public HasText getPrenomObjet() { |
return prenom; |
} |
@Override |
public String getCourriel() { |
return courriel.getText(); |
} |
@Override |
public void afficherStyleErreurCourriel(String styleErreur) { |
courriel.addStyleName(styleErreur); |
} |
@Override |
public void supprimerStyleErreurCourriel(String styleErreur) { |
courriel.removeStyleName(styleErreur); |
} |
@Override |
public HasText getCourrielObjet() { |
return courriel; |
} |
} |
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/composants/formulaires/formulairecommentaire/formulaireCommentaire.css |
---|
New file |
0,0 → 1,69 |
.formulaireProposition { |
z-index: 1500; |
padding: 50px; |
background: white; |
width: 300px; |
margin: 0 auto; |
margin-top: 75px; |
} |
.boutonProposer:hover { |
background-color: #AAA |
} |
.colonneGauche,.colonneDroite { |
width: 250px; |
} |
.colonneGauche { |
padding-right: 30px |
} |
.colonneGauche select { |
width: 100% |
} |
.colonneGauche input { |
width: 95% |
} |
.commentaire { |
width: 250px; |
height: 100px |
} |
.propositionTaxon { |
width: 100%; |
height: 30px; |
} |
.boutonProposer { |
border: solid 1px #AAA; |
cursor: pointer; |
float: left; |
margin-top: 10px; |
margin-bottom: 5px; |
margin-right: 30px; |
float: right; |
background: url(./img/add.png) no-repeat 5px 7px #DDD; |
padding: 5px; |
padding-left: 25px; |
cursor: pointer |
} |
.zoneNom { |
width:30%; |
float:left; |
margin-right:5px; |
} |
.zonePrenom { |
width:30%; |
float:left; |
} |
.zoneEmail { |
clear:left; |
padding-top:5px; |
} |
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/composants/formulaires/formulairecommentaire/FormulaireCommentaireVue.ui.xml |
---|
New file |
0,0 → 1,36 |
<!DOCTYPE ui:UiBinder SYSTEM "http://dl.google.com/gwt/DTD/xhtml.ent"> |
<ui:UiBinder |
xmlns:ui='urn:ui:com.google.gwt.uibinder' |
xmlns:g='urn:import:com.google.gwt.user.client.ui'> |
<ui:with field="constants" type="org.tela_botanica.del.client.i18n.Vocabulary"/> |
<ui:style src="formulaireCommentaire.css" /> |
<g:VerticalPanel styleName="{style.formulaireProposition}"> |
<g:Label text="{constants.ajouterCommentaire}" styleName="titre"/> |
<g:Label text="{constants.infoProposerCommentaire}" styleName="petit"/> |
<g:HTML><br /></g:HTML> |
<g:HTMLPanel> |
<g:HTMLPanel styleName="{style.colonneGauche}"> |
<g:Label text="{constants.vous}" styleName="sousTitre"/> |
<g:Label text="{constants.infoVous}" styleName="petit" /> |
<g:HTMLPanel styleName="{style.zoneNom}"> |
<g:Label text="{constants.nom}" styleName="petit" /> |
<g:TextBox ui:field="nom"/> |
</g:HTMLPanel> |
<g:HTMLPanel styleName="{style.zonePrenom}"> |
<g:Label text="{constants.prenom}" styleName="petit" /> |
<g:TextBox ui:field="prenom"/> |
</g:HTMLPanel> |
<g:HTMLPanel styleName="{style.zoneEmail}"> |
<g:Label text="Votre adresse email : " styleName="petit" /> |
<g:TextBox ui:field="courriel" /> |
</g:HTMLPanel> |
<g:HTML><br /></g:HTML> |
<g:Label text="{constants.commentaire}" styleName="sousTitre"/> |
<g:TextArea ui:field="commentaire" styleName="{style.commentaire}" /> |
</g:HTMLPanel> |
</g:HTMLPanel> |
<g:Button text="{constants.boutonProposer}" ui:field="boutonValidationCommentaire" styleName="{style.boutonProposer} arrondi"/> |
</g:VerticalPanel> |
</ui:UiBinder> |
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/composants/formulaires/identification/FormulaireIdentificationPresenteur.java |
---|
New file |
0,0 → 1,198 |
package org.tela_botanica.del.client.composants.formulaires.identification; |
import org.tela_botanica.del.client.cache.CacheClient; |
import org.tela_botanica.del.client.composants.fenetreoverlay.FenetreOverlayDefilanteVue; |
import org.tela_botanica.del.client.composants.fenetreoverlay.FenetreOverlaySimplePresenteur; |
import org.tela_botanica.del.client.composants.preferences.PreferencesPresenteur; |
import org.tela_botanica.del.client.composants.preferences.PreferencesVue; |
import org.tela_botanica.del.client.modeles.Utilisateur; |
import org.tela_botanica.del.client.navigation.evenement.BusEvenementiel; |
import org.tela_botanica.del.client.navigation.evenement.changementEtatUtilisateur.EvenementChangementEtatUtilisateur; |
import org.tela_botanica.del.client.navigation.evenement.changementPreferences.EvenementChangementPreferences; |
import org.tela_botanica.del.client.navigation.evenement.changementPreferences.GestionnaireEvenementChangementPreferences; |
import org.tela_botanica.del.client.services.rest.PreferencesServiceConcret; |
import org.tela_botanica.del.client.services.rest.UtilisateurService; |
import org.tela_botanica.del.client.services.rest.async.UtilisateurCallback; |
import com.google.gwt.event.dom.client.ClickEvent; |
import com.google.gwt.event.dom.client.ClickHandler; |
import com.google.gwt.event.dom.client.HasClickHandlers; |
import com.google.gwt.event.dom.client.HasKeyPressHandlers; |
import com.google.gwt.event.dom.client.KeyCodes; |
import com.google.gwt.event.dom.client.KeyPressEvent; |
import com.google.gwt.event.dom.client.KeyPressHandler; |
import com.google.gwt.user.client.ui.HasText; |
import com.google.gwt.user.client.ui.HasWidgets; |
import com.google.gwt.user.client.ui.IsWidget; |
public class FormulaireIdentificationPresenteur { |
FenetreOverlaySimplePresenteur fenetreModalePresenteur = null; |
public abstract interface Vue extends IsWidget { |
public void ajouterVue(HasWidgets composite); |
public HasClickHandlers getSeConnecter(); |
public HasClickHandlers getSeDeconnecter(); |
public void basculerAffichageFormulaire(boolean estConnecte); |
public void basculerModeConnecte(Utilisateur utilisateur); |
public HasClickHandlers getBoutonOK(); |
public HasText getLogin(); |
public HasText getMotdepasse(); |
public void afficherErreur(); |
public void masquerErreur(); |
public void viderFormulaire(); |
public void setErreur(String idTexte); |
public String getErreur(); |
public HasKeyPressHandlers getLoginHasKeyPressHandler(); |
public HasKeyPressHandlers getMotdepasseHasKeyPressHandler(); |
HasClickHandlers getZonePreferencesClickHandler(); |
} |
private Vue vue; |
private Utilisateur utilisateur; |
private UtilisateurService utilisateurService; |
public FormulaireIdentificationPresenteur(Vue vue, UtilisateurService utilisateurService) { |
this.vue = vue; |
this.utilisateurService = utilisateurService; |
utilisateurService.obtenirUtilisateur(new UtilisateurCallback() { |
@Override |
public void surRetour(Utilisateur objetRetour) { |
utilisateur = objetRetour; |
CacheClient.getInstance().setUtilisateur(utilisateur); |
rafraichir(); |
} |
}); |
gererEvenements(); |
} |
public void rafraichir() { |
utilisateur = CacheClient.getInstance().getUtilisateur(); |
vue.basculerModeConnecte(this.utilisateur); |
BusEvenementiel.getInstance().fireEvent(new EvenementChangementEtatUtilisateur(utilisateur)); |
} |
public void gererEvenements() { |
vue.getBoutonOK().addClickHandler(new ClickHandler() { |
@Override |
public void onClick(ClickEvent event) { |
surTentativeLogin(); |
} |
}); |
vue.getSeDeconnecter().addClickHandler(new ClickHandler() { |
@Override |
public void onClick(ClickEvent event) { |
deconnecterUtilisateur(); |
} |
}); |
vue.getLoginHasKeyPressHandler().addKeyPressHandler(creerGestionnaireEvenementToucheEntree()); |
vue.getMotdepasseHasKeyPressHandler().addKeyPressHandler(creerGestionnaireEvenementToucheEntree()); |
vue.getZonePreferencesClickHandler().addClickHandler(new ClickHandler() { |
@Override |
public void onClick(ClickEvent event) { |
if(utilisateur.estIdentifie()) { |
PreferencesPresenteur preferencesPresenteur = new PreferencesPresenteur(new PreferencesVue(), new PreferencesServiceConcret()); |
fenetreModalePresenteur = new FenetreOverlaySimplePresenteur(new FenetreOverlayDefilanteVue()); |
fenetreModalePresenteur.ouvrirFenetreModale(preferencesPresenteur); |
} |
} |
}); |
BusEvenementiel.getInstance().addHandler(EvenementChangementPreferences.TYPE, new GestionnaireEvenementChangementPreferences() { |
@Override |
public void onChangementPreferences(EvenementChangementPreferences event) { |
if(fenetreModalePresenteur != null && fenetreModalePresenteur.fenetreModaleEstOuverte()) { |
fenetreModalePresenteur.fermerFenetreModale(); |
} |
} |
}); |
} |
private void surTentativeLogin() { |
String login = vue.getLogin().getText(); |
String motdepasse = vue.getMotdepasse().getText(); |
if (login.equals("") || motdepasse.equals("")) { |
gererErreur("saisirLogin"); |
} else { |
connecterUtilisateur(login, motdepasse); |
} |
} |
public KeyPressHandler creerGestionnaireEvenementToucheEntree() { |
return new KeyPressHandler() { |
public void onKeyPress(KeyPressEvent event) { |
if (event.getNativeEvent().getKeyCode() == KeyCodes.KEY_ENTER) { |
surTentativeLogin(); |
} |
} |
}; |
} |
public void gererErreur(String erreur) { |
vue.setErreur(erreur); |
vue.afficherErreur(); |
} |
public void connecterUtilisateur(String login, final String motdepasse) { |
utilisateurService.connecterUtilisateur(login, motdepasse, new UtilisateurCallback() { |
public void surErreur(String message) { |
vue.setErreur("identificationRefus"); |
vue.afficherErreur(); |
} |
@Override |
public void surRetour(Utilisateur objetRetour) { |
utilisateur = objetRetour; |
CacheClient.getInstance().setUtilisateur(utilisateur); |
if (utilisateur.estIdentifie()) { |
vue.masquerErreur(); |
rafraichir(); |
vue.viderFormulaire(); |
} |
} |
}); |
} |
public void deconnecterUtilisateur() { |
utilisateurService.deconnecterUtilisateur(new UtilisateurCallback() { |
public void surErreur(String message) { |
vue.setErreur("identificationRefus"); |
vue.afficherErreur(); |
} |
@Override |
public void surRetour(Utilisateur objetRetour) { |
utilisateur = objetRetour; |
CacheClient.getInstance().setUtilisateur(utilisateur); |
rafraichir(); |
} |
}); |
} |
public void go(HasWidgets composite) { |
vue.ajouterVue(composite); |
} |
} |
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/composants/formulaires/identification/FormulaireIdentificationVue.java |
---|
New file |
0,0 → 1,147 |
package org.tela_botanica.del.client.composants.formulaires.identification; |
import org.tela_botanica.del.client.i18n.I18n; |
import org.tela_botanica.del.client.modeles.Utilisateur; |
import com.google.gwt.core.client.GWT; |
import com.google.gwt.event.dom.client.HasClickHandlers; |
import com.google.gwt.event.dom.client.HasKeyPressHandlers; |
import com.google.gwt.uibinder.client.UiBinder; |
import com.google.gwt.uibinder.client.UiField; |
import com.google.gwt.user.client.ui.Button; |
import com.google.gwt.user.client.ui.Composite; |
import com.google.gwt.user.client.ui.HasWidgets; |
import com.google.gwt.user.client.ui.Label; |
import com.google.gwt.user.client.ui.Panel; |
import com.google.gwt.user.client.ui.TextBox; |
import com.google.gwt.user.client.ui.Widget; |
public class FormulaireIdentificationVue extends Composite implements FormulaireIdentificationPresenteur.Vue { |
interface Binder extends UiBinder<Widget, FormulaireIdentificationVue> { |
} |
private static Binder uiBinder = GWT.create(Binder.class); |
@UiField |
Label titreSeConnecter, titreEstIdentifie, deconnecter, email, erreurIdentification, preferences; |
@UiField Panel zoneFormulaire; |
@UiField Button boutonOK; |
@UiField TextBox login, motdepasse; |
public FormulaireIdentificationVue() { |
initWidget(uiBinder.createAndBindUi(this)); |
titreSeConnecter.setVisible(false); |
erreurIdentification.setVisible(false); |
} |
@Override |
public void ajouterVue(HasWidgets composite) { |
composite.add(this.asWidget()); |
} |
@Override |
public HasClickHandlers getSeConnecter() { |
return titreSeConnecter; |
} |
@Override |
public void basculerAffichageFormulaire(boolean estConnecte) { |
zoneFormulaire.setVisible(!estConnecte); |
} |
@Override |
public void basculerModeConnecte(Utilisateur utilisateur) { |
//Dans le mode non-connecté, on veut : |
// - un bandeau vert avec ecrit Identifiez-vous |
// - le formulaire courriel/password/texte et btn ok |
// dans le mode connecté on veut : |
// - un bandeau vert avec écrit Bienvenue |
// - l'email de l'utilisateur |
// - un btn déconnecter |
// - un btn préférences |
boolean estConnecte = utilisateur.estIdentifie(); |
// mode non-connecté |
titreSeConnecter.setVisible(!estConnecte); |
titreEstIdentifie.setVisible(estConnecte); |
deconnecter.setVisible(estConnecte); |
preferences.setVisible(estConnecte); |
email.setText(utilisateur.getNomPrenomFormate()); |
email.setVisible(estConnecte); |
basculerAffichageFormulaire(estConnecte); |
} |
@Override |
public HasClickHandlers getBoutonOK() { |
return boutonOK; |
} |
@Override |
public TextBox getLogin() { |
return login; |
} |
@Override |
public TextBox getMotdepasse() { |
return motdepasse; |
} |
@Override |
public HasClickHandlers getSeDeconnecter() { |
return deconnecter; |
} |
@Override |
public void afficherErreur() { |
erreurIdentification.setVisible(true); |
} |
@Override |
public void masquerErreur() { |
erreurIdentification.setVisible(false); |
} |
@Override |
public void viderFormulaire() { |
login.setText(""); |
motdepasse.setText(""); |
} |
@Override |
public void setErreur(String idTexte) { |
String texte = ""; |
if (idTexte.equals("saisirLogin")) { |
texte = I18n.getMessages().saisirLogin(); |
} else { |
texte = I18n.getMessages().identificationRefus(); |
} |
erreurIdentification.setText(texte); |
} |
public String getErreur() { |
return erreurIdentification.getText(); |
} |
@Override |
public HasKeyPressHandlers getLoginHasKeyPressHandler() { |
return login; |
} |
@Override |
public HasKeyPressHandlers getMotdepasseHasKeyPressHandler() { |
return motdepasse; |
} |
@Override |
public HasClickHandlers getZonePreferencesClickHandler() { |
return preferences; |
} |
} |
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/composants/formulaires/identification/identification.css |
---|
New file |
0,0 → 1,86 |
.zoneIdentification { |
font-size:11px; |
padding:30px 15px 22px 15px; |
height:70px; |
background: none repeat scroll 0 0 white; |
border: 1px solid #99C242; |
border-radius: 0 10px 10px 10px; |
text-align: left; |
text-decoration: none; |
width: 350px; |
} |
.connecter { |
background-color: #99C242; |
border-radius: 0 10px 0 0; |
color: white; |
font-size: 12px; |
padding: 5px 5px 5px 9px; |
text-align: left; |
text-transform: uppercase; |
width: 347px; |
position:absolute; |
margin-left:-15px; |
margin-top:-30px; |
padding-right:25px |
} |
.deconnecter, .preferences { |
text-decoration: underline; |
color: blue; |
cursor: pointer |
} |
.email, .preferences { |
padding-right: 10px |
} |
.zoneFormulaire { |
} |
.login { |
width:150px; |
font-size:11px; |
} |
.motdepasse { |
width:150px; |
font-size:11px; |
} |
.erreur { |
color: red; |
position:absolute; |
margin-top:7px; |
} |
.boutonOK { |
font-size:11px; |
} |
.colonneGauche { |
float:left; |
padding-bottom:15px; |
margin-right:5px; |
width:210px; |
} |
.colonneDroite { |
float:left; |
margin-right:5px; |
padding-bottom:15px; |
} |
.zoneUtilisateur { |
text-align:center; |
} |
.infoConnexion { |
text-align:center; |
font-size:15px; |
} |
.infoConnexion>div:first-child { |
margin-top:10px; |
} |
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/composants/formulaires/identification/FormulaireIdentificationVueBinderImplGenMessages.properties |
---|
New file |
0,0 → 1,3 |
texteConnexion=<a href="http://www.tela-botanica.org/page:inscription">S''inscrire... </a> \ |
<p class="connect gris">Devenez telabotaniste et partagez votre passion pour le végétal !</p> \ |
<p> <a href="https://www.tela-botanica.org/wp-login.php?action=lostpassword" id="lien_inscription">Mot de passe perdu ? </a></p> |
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/composants/formulaires/identification/FormulaireIdentificationVue.ui.xml |
---|
New file |
0,0 → 1,34 |
<ui:UiBinder xmlns:ui='urn:ui:com.google.gwt.uibinder' |
xmlns:g='urn:import:com.google.gwt.user.client.ui' ui:generateFormat='com.google.gwt.i18n.rebind.format.PropertiesFormat' |
ui:generateLocales="default"> |
<ui:with field='res' type='org.tela_botanica.del.client.resources.Ressources' /> |
<ui:with field="constants" type="org.tela_botanica.del.client.i18n.Vocabulary" /> |
<ui:style src="identification.css" /> |
<g:HTMLPanel styleName="{style.zoneIdentification} {style.zoneFormulaire}"> |
<g:Label ui:field="titreSeConnecter" styleName="{style.connecter}" text="{constants.titreSeConnecter}" /> |
<g:Label ui:field="titreEstIdentifie" styleName="{style.connecter}" text="{constants.titreEstIdentifie}" /> |
<g:HTMLPanel ui:field="zoneUtilisateur"> |
<g:HTMLPanel styleName="{style.infoConnexion}"> |
<g:Label ui:field="email" styleName="{style.email}">Email</g:Label> |
<g:Label ui:field="preferences" styleName="{style.preferences}" text="{constants.preferences}"></g:Label> |
<g:Label ui:field="deconnecter" styleName="{style.deconnecter}" text="{constants.seDeconnecter}" /> |
</g:HTMLPanel> |
</g:HTMLPanel> |
<g:HTMLPanel ui:field="zoneFormulaire"> |
<g:HTMLPanel styleName="{style.colonneGauche}"> |
<g:Label text="{constants.login}" /> |
<g:TextBox ui:field="login" styleName="{style.login}" /> |
<g:Label text="{constants.motdepasse}" /> |
<g:PasswordTextBox ui:field="motdepasse" styleName="{style.motdepasse}"></g:PasswordTextBox> |
<g:Button ui:field="boutonOK" styleName="{style.boutonOK}">OK</g:Button> |
<g:Label ui:field="erreurIdentification" styleName="{style.erreur}"></g:Label> |
</g:HTMLPanel> |
<g:HTMLPanel styleName="{style.colonneDroite}"> |
<ui:msg key="texteConnexion">Texte de connexion</ui:msg> |
</g:HTMLPanel> |
</g:HTMLPanel> |
</g:HTMLPanel> |
</ui:UiBinder> |
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/composants/formulaires/formulaireproposition/FormulairePropositionVue.ui.xml |
---|
New file |
0,0 → 1,42 |
<!DOCTYPE ui:UiBinder SYSTEM "http://dl.google.com/gwt/DTD/xhtml.ent"> |
<ui:UiBinder |
xmlns:ui='urn:ui:com.google.gwt.uibinder' |
xmlns:g='urn:import:com.google.gwt.user.client.ui' |
xmlns:vues="urn:import:org.tela_botanica.del.client.composants.forum"> |
<ui:with field="constants" type="org.tela_botanica.del.client.i18n.Vocabulary"/> |
<ui:style src="formulaireProposition.css" /> |
<g:HTMLPanel styleName="{style.formulaireProposition}"> |
<g:Label text="{constants.proposerSaDetermination}" styleName="titre"/> |
<g:HTML><br /></g:HTML> |
<g:HTMLPanel styleName="{style.colonneGauche}"> |
<g:Label ui:field="labelnomPrenom" text="{constants.vous}" styleName="sousTitre"/> |
<g:HTMLPanel styleName="{style.zoneNom}"> |
<g:Label text="{constants.nom}" styleName="petit" /> |
<g:TextBox ui:field="nom"/> |
</g:HTMLPanel> |
<g:HTMLPanel styleName="{style.zonePrenom}"> |
<g:Label text="{constants.prenom}" styleName="petit" /> |
<g:TextBox ui:field="prenom"/> |
</g:HTMLPanel> |
<g:HTMLPanel styleName="{style.zoneEmail}"> |
<g:Label text="Votre adresse email : " styleName="petit" /> |
<g:TextBox ui:field="courriel" /> |
</g:HTMLPanel> |
<g:HTML><br /></g:HTML> |
<g:Label text="{constants.choisirUnTaxon}" styleName="sousTitre"/> |
<g:Label text="{constants.referentiel}" styleName="petit"/> |
<g:ListBox ui:field="referentiel" /> |
<g:HTML HTML="{constants.infoTaxon}" styleName="petit"/> |
<g:LayoutPanel ui:field="propositionTaxon" styleName="{style.propositionTaxon}" /> |
<g:HTML><br /></g:HTML> |
<g:Label text="{constants.commentaire}" styleName="sousTitre"/> |
<g:TextArea ui:field="commentaires" styleName="{style.commentaire}" /> |
<g:Button text="{constants.boutonProposer}" ui:field="boutonValidationProposition" styleName="{style.boutonProposer} arrondi"/> |
</g:HTMLPanel> |
</g:HTMLPanel> |
</ui:UiBinder> |
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/composants/formulaires/formulaireproposition/FormulairePropositionPresenteur.java |
---|
New file |
0,0 → 1,293 |
package org.tela_botanica.del.client.composants.formulaires.formulaireproposition; |
import java.util.Date; |
import java.util.HashMap; |
import java.util.Map; |
import org.tela_botanica.del.client.cache.CacheClient; |
import org.tela_botanica.del.client.composants.formulaires.autocompletion.AutoCompletionComboBoxPresenteur; |
import org.tela_botanica.del.client.composants.formulaires.autocompletion.AutoCompletionComboBoxVue; |
import org.tela_botanica.del.client.composants.presenteur.Presenteur; |
import org.tela_botanica.del.client.composants.validation.ValidateurChampTexteNonNul; |
import org.tela_botanica.del.client.config.Config; |
import org.tela_botanica.del.client.i18n.I18n; |
import org.tela_botanica.del.client.modeles.Contributeur; |
import org.tela_botanica.del.client.modeles.InterventionForum; |
import org.tela_botanica.del.client.modeles.PropositionDetermination; |
import org.tela_botanica.del.client.modeles.Utilisateur; |
import org.tela_botanica.del.client.navigation.evenement.BusEvenementiel; |
import org.tela_botanica.del.client.navigation.evenement.ajoutdetermination.EvenementAjoutDetermination; |
import org.tela_botanica.del.client.services.ReferentielService; |
import org.tela_botanica.del.client.services.rest.PropositionDeterminationService; |
import org.tela_botanica.del.client.services.rest.async.PropositionDeterminationCallBack; |
import org.tela_botanica.del.client.utils.InfosNomPourAutocompletion; |
import org.tela_botanica.del.client.utils.UtilitairesAutoCompletionService; |
import com.google.gwt.core.client.GWT; |
import com.google.gwt.event.dom.client.ClickEvent; |
import com.google.gwt.event.dom.client.ClickHandler; |
import com.google.gwt.event.dom.client.HasClickHandlers; |
import com.google.gwt.http.client.Response; |
import com.google.gwt.user.client.Window; |
import com.google.gwt.user.client.ui.HasText; |
import com.google.gwt.user.client.ui.HasWidgets; |
import com.google.gwt.user.client.ui.IsWidget; |
public class FormulairePropositionPresenteur extends Presenteur { |
public interface Vue extends IsWidget { |
public HasText getObjetNom(); |
public HasText getObjetPrenom(); |
public HasWidgets getPropositionTaxon(); |
public HasText getCommentaires(); |
public HasClickHandlers getBoutonValidationProposition(); |
public void afficherNomPrenomEtDesactiver(String nom, String prenom); |
public String getCourriel(); |
public void afficherEmailEtDesactiver(String courriel); |
public String getNom(); |
public String getPrenom(); |
public void afficherStyleErreurNom(String styleErreur); |
public void supprimerStyleErreurNom(String styleErreur); |
public void afficherStyleErreurPrenom(String styleErreur); |
public void supprimerStyleErreurPrenom(String styleErreur); |
public void afficherPropositionDejaEffectuée(String taxon); |
public HasText getObjetCourriel(); |
public void setReferentiel(String referentiel); |
public String getReferentiel(); |
public void afficherStyleErreurCourriel(String styleErreur); |
void supprimerStyleErreurCourriel(String styleErreur); |
void remplirListeReferentiels(Map<String, String> listeReferentiels); |
} |
private Vue vue; |
private Config config; |
private AutoCompletionComboBoxPresenteur autoCompletionNomTaxonsPresenteur; |
private PropositionDeterminationService propositionDeterminationService; |
private Map<String, InfosNomPourAutocompletion> cacheTaxons = new HashMap<String, InfosNomPourAutocompletion>(); |
public FormulairePropositionPresenteur(Vue vue, PropositionDeterminationService propositionDeterminationService) { |
this.vue = vue; |
this.propositionDeterminationService=propositionDeterminationService; |
config = new Config(); |
creerCompletionTaxons(); |
remplirAvecInfosUtilisateur(); |
} |
private void remplirAvecInfosUtilisateur() { |
Utilisateur utilisateur = CacheClient.getInstance().getUtilisateur(); |
if (utilisateur.estIdentifie()) { |
vue.afficherNomPrenomEtDesactiver(utilisateur.getNom(), utilisateur.getPrenom()); |
vue.afficherEmailEtDesactiver(utilisateur.getCourriel()); |
} |
} |
private void creerCompletionTaxons() { |
String url = this.config.getServiceBaseUrl() + "nomstaxons"; |
vue.remplirListeReferentiels(ReferentielService.getReferentiels()); |
final String referentiel = CacheClient.getInstance().getObservationCourante().getReferentiel(); |
// découpage pseudo-intelligent du nom de référentiel |
String referentielPredefini; |
int positionDeuxPoints = referentiel.indexOf(':'); |
if (positionDeuxPoints == -1) { |
referentielPredefini = referentiel; |
} else { |
referentielPredefini = referentiel.substring(0, positionDeuxPoints); |
} |
if (referentielPredefini.equals("autre") || referentielPredefini.equals("")) { |
referentielPredefini = "bdtfx"; // évite de saisir des noms latins en dur et de perdre le nn |
} |
vue.setReferentiel(referentielPredefini); |
autoCompletionNomTaxonsPresenteur = new AutoCompletionComboBoxPresenteur(new AutoCompletionComboBoxVue(), url) { |
protected String effectuerPreTraitementChaineRequete(String requete) { |
// si aucun référentiel selectionné, pas de requete |
if(vue.getReferentiel() != null && !vue.getReferentiel().equals("") && !vue.getReferentiel().equals("tous")) { |
// découpage pseudo-intelligent du nom de référentiel |
String refFmt; |
int positionDeuxPoints = vue.getReferentiel().indexOf(':'); |
if (positionDeuxPoints == -1) { |
refFmt = vue.getReferentiel(); |
} else { |
refFmt = vue.getReferentiel().substring(0, positionDeuxPoints); |
} |
requete = "?masque.nom=" + requete + "&masque.referentiel=" + refFmt; |
return requete; |
} else { |
return null; |
} |
} |
@Override |
protected InfosNomPourAutocompletion[] parserResultatRequete(Response response) { |
cacheTaxons = UtilitairesAutoCompletionService.extraireTaxonsNumNomsResultatRetourSimple(response); |
return UtilitairesAutoCompletionService.parserResultatRetourSimple(response); |
} |
}; |
} |
public void go(HasWidgets composite) { |
autoCompletionNomTaxonsPresenteur.go(vue.getPropositionTaxon()); |
composite.add(vue.asWidget()); |
gererEvenements(); |
} |
protected void gererEvenements() { |
vue.getBoutonValidationProposition().addClickHandler(new ClickHandler() { |
@Override |
public void onClick(ClickEvent event) { |
if (!validerSaisieProposition()) { |
return; |
} else { |
final PropositionDetermination propositionAjoutee = collecterValeursSaisieProposition(); |
if(verifierPropositionDejaAjoutee(propositionAjoutee)){ |
BusEvenementiel.getInstance().fireEvent(new EvenementAjoutDetermination(propositionAjoutee)); |
vue.afficherPropositionDejaEffectuée(propositionAjoutee.getEspece()); |
return; |
} |
propositionDeterminationService.ajouterProposition(propositionAjoutee, new PropositionDeterminationCallBack() { |
@Override |
public void surRetour(String idNouvelleProposition) { |
propositionAjoutee.setId(idNouvelleProposition); |
CacheClient.getInstance().getObservationCourante().ajouterPropositionDetermination(propositionAjoutee); |
EvenementAjoutDetermination evenementAjoutDetermination = new EvenementAjoutDetermination(propositionAjoutee); |
BusEvenementiel.getInstance().fireEvent(evenementAjoutDetermination); |
} |
}); |
} |
} |
}); |
} |
private boolean verifierPropositionDejaAjoutee(PropositionDetermination propositionDetermination){ |
for(InterventionForum interventionForum: CacheClient.getInstance().getObservationCourante().getInterventionsForum()){ |
if(interventionForum instanceof PropositionDetermination){ |
if(((PropositionDetermination)interventionForum).getEspece().trim().equals(propositionDetermination.getEspece().trim())){ |
return true; |
} |
} |
} |
return false; |
} |
private boolean validerSaisieProposition() { |
ValidateurChampTexteNonNul validateurNom = new ValidateurChampTexteNonNul(vue.getObjetNom()) { |
@Override |
public void afficherStyleErreur(String styleErreur) { |
vue.afficherStyleErreurNom(styleErreur); |
} |
@Override |
public void supprimerStyleErreur(String styleErreur) { |
vue.supprimerStyleErreurNom(styleErreur); |
} |
}; |
ValidateurChampTexteNonNul validateurPrenom = new ValidateurChampTexteNonNul(vue.getObjetPrenom()) { |
@Override |
public void afficherStyleErreur(String styleErreur) { |
vue.afficherStyleErreurPrenom(styleErreur); |
} |
@Override |
public void supprimerStyleErreur(String styleErreur) { |
vue.supprimerStyleErreurPrenom(styleErreur); |
} |
}; |
ValidateurChampTexteNonNul validateurCourriel = new ValidateurChampTexteNonNul(vue.getObjetCourriel()) { |
@Override |
public void afficherStyleErreur(String styleErreur) { |
vue.afficherStyleErreurCourriel(styleErreur); |
} |
@Override |
public void supprimerStyleErreur(String styleErreur) { |
vue.supprimerStyleErreurCourriel(styleErreur); |
} |
}; |
ValidateurChampTexteNonNul validateurTaxon = new ValidateurChampTexteNonNul(autoCompletionNomTaxonsPresenteur.getAutoCompletionComboBoxVue().getSuggestBox()) { |
@Override |
public void afficherStyleErreur(String styleErreur) { |
autoCompletionNomTaxonsPresenteur.afficherStyleErreur(styleErreur); |
} |
@Override |
public void supprimerStyleErreur(String styleErreur) { |
autoCompletionNomTaxonsPresenteur.supprimerStyleErreur(styleErreur); |
} |
}; |
boolean nomSaisi = validateurNom.valider(); |
boolean prenomSaisi = validateurPrenom.valider(); |
boolean courrielSaisi = validateurCourriel.valider(); |
boolean taxonSaisi = validateurTaxon.valider(); |
String taxonSaisiStr = autoCompletionNomTaxonsPresenteur.getValeur(); |
boolean utilisateurConfirme = true; |
// Si le nom est vide une erreur a déjà été déclenchée plus haut (donc pas la peine de tester cacheTaxons) |
if(!taxonSaisiStr.trim().isEmpty() && !cacheTaxons.containsKey(taxonSaisiStr.trim())) { |
utilisateurConfirme = Window.confirm(I18n.getVocabulary().attentionPropositionTaxon()); |
} |
return nomSaisi && prenomSaisi && courrielSaisi && taxonSaisi && utilisateurConfirme; |
} |
private PropositionDetermination collecterValeursSaisieProposition() { |
PropositionDetermination propositionAjoutee = new PropositionDetermination(CacheClient.getInstance().getObservationCourante()); |
propositionAjoutee.setId(CacheClient.getInstance().getObservationCourante().getId()); |
String idUtilisateur = null; |
if (CacheClient.getInstance().getUtilisateur().estIdentifie()) { |
idUtilisateur = CacheClient.getInstance().getUtilisateur().getId(); |
} |
Contributeur contributeur = new Contributeur(idUtilisateur, vue.getNom(), vue.getPrenom(), vue.getCourriel()); |
propositionAjoutee.setContributeur(contributeur); |
propositionAjoutee.setDate(new Date()); |
String nomTaxon = autoCompletionNomTaxonsPresenteur.getValeur(); |
propositionAjoutee.setEspece(nomTaxon); |
if(cacheTaxons.containsKey(nomTaxon.trim())) { |
propositionAjoutee.setNumNomenclatural("" + cacheTaxons.get(nomTaxon.trim()).getNn()); |
} |
if(vue.getReferentiel() != "tous") { |
propositionAjoutee.setReferentiel(vue.getReferentiel()); |
} |
if (vue.getCommentaires().getText() != "") { |
String contenuCommentaire = vue.getCommentaires().getText(); |
propositionAjoutee.setCommentaire(contenuCommentaire); |
} |
return propositionAjoutee; |
} |
} |
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/composants/formulaires/formulaireproposition/FormulairePropositionVue.java |
---|
New file |
0,0 → 1,168 |
package org.tela_botanica.del.client.composants.formulaires.formulaireproposition; |
import java.util.Iterator; |
import java.util.Map; |
import org.tela_botanica.del.client.i18n.I18n; |
import com.google.gwt.core.client.GWT; |
import com.google.gwt.uibinder.client.UiBinder; |
import com.google.gwt.uibinder.client.UiField; |
import com.google.gwt.user.client.Window; |
import com.google.gwt.user.client.ui.Button; |
import com.google.gwt.user.client.ui.Composite; |
import com.google.gwt.user.client.ui.HasText; |
import com.google.gwt.user.client.ui.Label; |
import com.google.gwt.user.client.ui.LayoutPanel; |
import com.google.gwt.user.client.ui.ListBox; |
import com.google.gwt.user.client.ui.TextArea; |
import com.google.gwt.user.client.ui.TextBox; |
import com.google.gwt.user.client.ui.Widget; |
public class FormulairePropositionVue extends Composite implements FormulairePropositionPresenteur.Vue { |
@UiField |
public TextBox nom, prenom, courriel; |
@UiField |
public LayoutPanel propositionTaxon; |
@UiField |
public TextArea commentaires; |
@UiField |
public Button boutonValidationProposition; |
@UiField |
public Label labelnomPrenom; |
@UiField |
ListBox referentiel; |
interface FormulairePropositionUIiBinder extends UiBinder<Widget, FormulairePropositionVue> { |
}; |
FormulairePropositionUIiBinder uiBinder = GWT.create(FormulairePropositionUIiBinder.class); |
public FormulairePropositionVue() { |
initWidget(uiBinder.createAndBindUi(this)); |
} |
@Override |
public LayoutPanel getPropositionTaxon() { |
return propositionTaxon; |
} |
@Override |
public TextArea getCommentaires() { |
return commentaires; |
} |
@Override |
public Button getBoutonValidationProposition() { |
return boutonValidationProposition; |
} |
@Override |
public void afficherStyleErreurNom(String styleErreur) { |
nom.addStyleName(styleErreur); |
} |
@Override |
public void supprimerStyleErreurNom(String styleErreur) { |
nom.removeStyleName(styleErreur); |
} |
@Override |
public void afficherStyleErreurPrenom(String styleErreur) { |
prenom.addStyleName(styleErreur); |
} |
@Override |
public void supprimerStyleErreurPrenom(String styleErreur) { |
prenom.removeStyleName(styleErreur); |
} |
@Override |
public void afficherNomPrenomEtDesactiver(String nom, String prenom) { |
this.nom.setText(nom); |
this.prenom.setText(prenom); |
this.nom.setEnabled(false); |
this.prenom.setEnabled(false); |
} |
@Override |
public void afficherEmailEtDesactiver(String courriel) { |
this.courriel.setText(courriel); |
this.courriel.setEnabled(false); |
} |
public void afficherPropositionDejaEffectuée(String taxon) |
{ |
Window.alert(I18n.getMessages().propositionDejaEffectuee(taxon)); |
} |
@Override |
public String getCourriel() { |
return courriel.getText(); |
} |
@Override |
public String getNom() { |
return nom.getText(); |
} |
@Override |
public String getPrenom() { |
return prenom.getText(); |
} |
@Override |
public HasText getObjetNom() { |
return this.nom; |
} |
@Override |
public HasText getObjetPrenom() { |
return this.prenom; |
} |
@Override |
public HasText getObjetCourriel() { |
return this.courriel; |
} |
@Override |
public void afficherStyleErreurCourriel(String styleErreur) { |
courriel.setStyleName(styleErreur); |
} |
@Override |
public void supprimerStyleErreurCourriel(String styleErreur) { |
courriel.removeStyleName(styleErreur); |
} |
@Override |
public void remplirListeReferentiels(Map<String, String> listeReferentiels) { |
for (Iterator<String> iterator = listeReferentiels.keySet().iterator(); iterator.hasNext();) { |
String codeRef = iterator.next(); |
referentiel.addItem(listeReferentiels.get(codeRef), codeRef); |
} |
} |
@Override |
public void setReferentiel(String codeReferentiel) { |
for(int i = 0; i < referentiel.getItemCount(); i++) { |
if(referentiel.getValue(i).equals(codeReferentiel)) { |
referentiel.setSelectedIndex(i); |
} |
} |
} |
@Override |
public String getReferentiel() { |
return referentiel.getValue(referentiel.getSelectedIndex()); |
} |
} |
/branches/v1.11-magnesium/src/org/tela_botanica/del/client/composants/formulaires/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; |
} |