Subversion Repositories eFlore/Applications.del

Rev

Rev 882 | Rev 939 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
685 aurelien 1
package org.tela_botanica.del.client.composants.formulaires.formulairecommentaire;
303 aurelien 2
 
3
import java.util.Date;
4
 
663 benjamin 5
import org.tela_botanica.del.client.cache.CacheClient;
658 benjamin 6
import org.tela_botanica.del.client.composants.presenteur.Presenteur;
7
import org.tela_botanica.del.client.composants.validation.ValidateurChampTexteNonNul;
303 aurelien 8
import org.tela_botanica.del.client.modeles.Commentaire;
690 gduche 9
import org.tela_botanica.del.client.modeles.Contributeur;
882 aurelien 10
import org.tela_botanica.del.client.modeles.InterventionForum;
658 benjamin 11
import org.tela_botanica.del.client.modeles.Observation;
690 gduche 12
import org.tela_botanica.del.client.modeles.Utilisateur;
303 aurelien 13
import org.tela_botanica.del.client.navigation.evenement.BusEvenementiel;
14
import org.tela_botanica.del.client.navigation.evenement.ajoutcommentaire.EvenementAjoutCommentaire;
882 aurelien 15
import org.tela_botanica.del.client.services.rest.CommentaireService;
16
import org.tela_botanica.del.client.services.rest.CommentaireServiceConcret;
17
import org.tela_botanica.del.client.services.rest.async.CommentaireCallback;
18
import org.tela_botanica.del.client.services.rest.async.CommentaireCallback.ModeRequete;
930 aurelien 19
import org.tela_botanica.del.client.utils.UtilitairesServiceResultat;
303 aurelien 20
 
21
import com.google.gwt.event.dom.client.ClickEvent;
22
import com.google.gwt.event.dom.client.ClickHandler;
23
import com.google.gwt.event.dom.client.HasClickHandlers;
882 aurelien 24
import com.google.gwt.user.client.Window;
303 aurelien 25
import com.google.gwt.user.client.ui.HasText;
26
import com.google.gwt.user.client.ui.HasWidgets;
27
import com.google.gwt.user.client.ui.IsWidget;
28
 
663 benjamin 29
public class FormulaireCommentairePresenteur extends Presenteur {
30
 
31
	// le meme presenteur gere les commentaires pour les observations et pour
32
	// les possesseurs de commentaires, mais la logique est differente, d'ou la
33
	// necessité de separer les deux objets metiers
658 benjamin 34
	private Observation observation;
663 benjamin 35
 
882 aurelien 36
	private InterventionForum possesseurDeCommentaires;
663 benjamin 37
 
303 aurelien 38
	public interface Vue extends IsWidget {
663 benjamin 39
 
690 gduche 40
		public HasText getNomObjet();
41
 
42
		public HasText getPrenomObjet();
43
 
44
		public String getNom();
45
 
46
		public String getPrenom();
47
 
48
		public String getCourriel();
49
 
303 aurelien 50
		public abstract HasText getCommentaire();
663 benjamin 51
 
303 aurelien 52
		public abstract HasClickHandlers getBoutonValidationCommentaire();
663 benjamin 53
 
690 gduche 54
		public void afficherStyleErreurNom(String styleErreur);
663 benjamin 55
 
690 gduche 56
		public void supprimerStyleErreurNom(String styleErreur);
57
 
58
		public void afficherStyleErreurPrenom(String styleErreur);
663 benjamin 59
 
690 gduche 60
		public void supprimerStyleErreurPrenom(String styleErreur);
61
 
62
		public void afficherStyleErreurCommentaire(String styleErreur);
63
 
64
		public void supprimerStyleErreurCommentaire(String styleErreur);
65
 
66
		void afficherNomPrenomEtDesactiver(String nom, String prenom, String courriel);
303 aurelien 67
	}
663 benjamin 68
 
303 aurelien 69
	private Vue vue;
882 aurelien 70
	private CommentaireService commentaireService = new CommentaireServiceConcret();
303 aurelien 71
 
658 benjamin 72
	public FormulaireCommentairePresenteur(Observation observation, Vue vue) {
73
		this.observation = observation;
303 aurelien 74
		this.vue = vue;
75
	}
76
 
882 aurelien 77
	public FormulaireCommentairePresenteur(InterventionForum possesseurDeCommentaires, Vue vue) {
663 benjamin 78
		this.possesseurDeCommentaires = possesseurDeCommentaires;
79
		this.vue = vue;
80
	}
81
 
303 aurelien 82
	public void go(HasWidgets composite) {
663 benjamin 83
		remplirAvecInfosUtilisateur();
303 aurelien 84
		composite.add(vue.asWidget());
658 benjamin 85
		gererEvenements();
303 aurelien 86
	}
87
 
663 benjamin 88
	private void remplirAvecInfosUtilisateur() {
690 gduche 89
		Utilisateur utilisateur = CacheClient.getInstance().getUtilisateur();
90
		if (utilisateur.estIdentifie()) {
91
			vue.afficherNomPrenomEtDesactiver(utilisateur.getNom(), utilisateur.getPrenom(), utilisateur.getCourriel());
663 benjamin 92
		}
93
	}
94
 
303 aurelien 95
	protected void gererEvenements() {
96
		vue.getBoutonValidationCommentaire().addClickHandler(new ClickHandler() {
663 benjamin 97
 
303 aurelien 98
			@Override
99
			public void onClick(ClickEvent event) {
663 benjamin 100
 
101
				if (!validerNomPrenom() || !validerCommentaire()) {
658 benjamin 102
					return;
103
				}
663 benjamin 104
 
685 aurelien 105
				surValidationCommentaire();
106
			}
107
		});
108
	}
109
 
110
	public void surValidationCommentaire() {
111
 
112
		String texteCommentaire = vue.getCommentaire().getText();
882 aurelien 113
		String idUtilisateur = null;
114
		if(CacheClient.getInstance().getUtilisateur().estIdentifie()) {
115
			idUtilisateur = CacheClient.getInstance().getUtilisateur().getId();
116
		}
663 benjamin 117
 
882 aurelien 118
		Contributeur contributeur = new Contributeur(idUtilisateur, vue.getNom(), vue.getPrenom(), vue.getCourriel());
119
		final Commentaire commentaire = new Commentaire(contributeur, new Date(), texteCommentaire);
120
 
685 aurelien 121
		if (observation != null) {
882 aurelien 122
			commentaire.setObservation(observation);
123
			commentaire.setParent(null);
685 aurelien 124
		} else if (possesseurDeCommentaires != null) {
882 aurelien 125
			commentaire.setObservation(CacheClient.getInstance().getObservationCourante());
126
			commentaire.setParent(possesseurDeCommentaires);
685 aurelien 127
		}
882 aurelien 128
 
129
		commentaireService.ajouterCommentaire(commentaire, new CommentaireCallback(ModeRequete.AJOUT) {
130
 
131
			@Override
132
			public void surRetour(String messageRetour) {
930 aurelien 133
				commentaire.setId(UtilitairesServiceResultat.convertirEtParserRetourAjoutCommentaire(messageRetour));
882 aurelien 134
				if (observation != null) {
135
					observation.getInterventionsForum().add(commentaire);
136
				} else if (possesseurDeCommentaires != null) {
137
					possesseurDeCommentaires.getListeCommentaires().add(commentaire);
138
				}
139
				BusEvenementiel.getInstance().fireEvent(new EvenementAjoutCommentaire(commentaire));
140
			}
141
 
142
			@Override
143
			public void surErreur(String messageErreur) {
144
				Window.alert(messageErreur);
145
			}
146
		});
303 aurelien 147
	}
663 benjamin 148
 
658 benjamin 149
	private boolean validerNomPrenom() {
303 aurelien 150
 
690 gduche 151
		ValidateurChampTexteNonNul validateurNom = new ValidateurChampTexteNonNul(vue.getNomObjet()) {
658 benjamin 152
			@Override
153
			public void afficherStyleErreur(String styleErreur) {
690 gduche 154
				vue.afficherStyleErreurNom(styleErreur);
658 benjamin 155
			}
663 benjamin 156
 
658 benjamin 157
			@Override
158
			public void supprimerStyleErreur(String styleErreur) {
690 gduche 159
				vue.supprimerStyleErreurNom(styleErreur);
658 benjamin 160
			}
161
		};
690 gduche 162
		return validateurNom.valider();
658 benjamin 163
	}
663 benjamin 164
 
658 benjamin 165
	private boolean validerCommentaire() {
166
 
167
		ValidateurChampTexteNonNul validateurCommentaire = new ValidateurChampTexteNonNul(vue.getCommentaire()) {
168
			@Override
169
			public void afficherStyleErreur(String styleErreur) {
690 gduche 170
				vue.afficherStyleErreurCommentaire(styleErreur);
658 benjamin 171
			}
663 benjamin 172
 
658 benjamin 173
			@Override
174
			public void supprimerStyleErreur(String styleErreur) {
690 gduche 175
				vue.supprimerStyleErreurCommentaire(styleErreur);
658 benjamin 176
			}
177
		};
178
		return validateurCommentaire.valider();
179
	}
180
 
303 aurelien 181
}