Subversion Repositories eFlore/Applications.del

Rev

Go to most recent revision | Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
602 aurelien 1
package org.tela_botanica.del.client.composants.formulaires.formulaireproposition;
2
 
3
import java.util.Date;
4
 
5
import org.tela_botanica.del.client.cache.CacheClient;
6
import org.tela_botanica.del.client.composants.formulaires.autocompletion.AutoCompletionComboBoxPresenteur;
7
import org.tela_botanica.del.client.composants.formulaires.autocompletion.AutoCompletionComboBoxVue;
8
import org.tela_botanica.del.client.composants.presenteur.Presenteur;
9
import org.tela_botanica.del.client.composants.validation.ValidateurChampTexteNonNul;
10
import org.tela_botanica.del.client.config.Config;
690 gduche 11
import org.tela_botanica.del.client.modeles.Contributeur;
1037 benjamin 12
import org.tela_botanica.del.client.modeles.InterventionForum;
602 aurelien 13
import org.tela_botanica.del.client.modeles.PropositionDetermination;
690 gduche 14
import org.tela_botanica.del.client.modeles.Utilisateur;
602 aurelien 15
import org.tela_botanica.del.client.navigation.evenement.BusEvenementiel;
16
import org.tela_botanica.del.client.navigation.evenement.ajoutdetermination.EvenementAjoutDetermination;
887 aurelien 17
import org.tela_botanica.del.client.services.rest.PropositionDeterminationService;
18
import org.tela_botanica.del.client.services.rest.async.PropositionDeterminationCallBack;
602 aurelien 19
import org.tela_botanica.del.client.utils.UtilitairesAutoCompletionService;
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;
24
import com.google.gwt.http.client.Response;
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
 
29
public class FormulairePropositionPresenteur extends Presenteur {
939 benjamin 30
 
602 aurelien 31
	public interface Vue extends IsWidget {
690 gduche 32
		public HasText getObjetNom();
939 benjamin 33
 
690 gduche 34
		public HasText getObjetPrenom();
939 benjamin 35
 
602 aurelien 36
		public HasWidgets getPropositionTaxon();
939 benjamin 37
 
602 aurelien 38
		public HasText getCommentaires();
939 benjamin 39
 
602 aurelien 40
		public HasClickHandlers getBoutonValidationProposition();
939 benjamin 41
 
690 gduche 42
		public void afficherNomPrenomEtDesactiver(String nom, String prenom);
939 benjamin 43
 
690 gduche 44
		public String getCourriel();
939 benjamin 45
 
683 gduche 46
		public void afficherEmailEtDesactiver(String courriel);
939 benjamin 47
 
690 gduche 48
		public String getNom();
939 benjamin 49
 
690 gduche 50
		public String getPrenom();
939 benjamin 51
 
690 gduche 52
		public void afficherStyleErreurNom(String styleErreur);
939 benjamin 53
 
690 gduche 54
		public void supprimerStyleErreurNom(String styleErreur);
939 benjamin 55
 
690 gduche 56
		public void afficherStyleErreurPrenom(String styleErreur);
939 benjamin 57
 
690 gduche 58
		public void supprimerStyleErreurPrenom(String styleErreur);
1037 benjamin 59
 
60
		public void afficherPropositionDejaEffectuée(String taxon);
602 aurelien 61
	}
939 benjamin 62
 
602 aurelien 63
	private Vue vue;
64
	private Config config;
65
	private AutoCompletionComboBoxPresenteur autoCompletionNomTaxonsPresenteur;
958 benjamin 66
	private PropositionDeterminationService propositionDeterminationService;
939 benjamin 67
 
958 benjamin 68
	public FormulairePropositionPresenteur(Vue vue, PropositionDeterminationService propositionDeterminationService) {
602 aurelien 69
		this.vue = vue;
958 benjamin 70
		this.propositionDeterminationService=propositionDeterminationService;
602 aurelien 71
		config = new Config();
72
		creerCompletionTaxons();
73
		remplirAvecInfosUtilisateur();
74
	}
939 benjamin 75
 
602 aurelien 76
	private void remplirAvecInfosUtilisateur() {
939 benjamin 77
		Utilisateur utilisateur = CacheClient.getInstance().getUtilisateur();
78
		if (utilisateur.estIdentifie()) {
690 gduche 79
			vue.afficherNomPrenomEtDesactiver(utilisateur.getNom(), utilisateur.getPrenom());
80
			vue.afficherEmailEtDesactiver(utilisateur.getCourriel());
602 aurelien 81
		}
82
	}
939 benjamin 83
 
602 aurelien 84
	private void creerCompletionTaxons() {
944 gduche 85
		String url = this.config.getServiceBaseUrl() + "nomstaxons";
939 benjamin 86
		autoCompletionNomTaxonsPresenteur = new AutoCompletionComboBoxPresenteur(new AutoCompletionComboBoxVue(), url) {
602 aurelien 87
			protected String effectuerPreTraitementChaineRequete(String requete) {
944 gduche 88
				requete = "?masque.nom=" + requete;
602 aurelien 89
				return UtilitairesAutoCompletionService.effectuerPreTraitementChaineRequeteGenreEspeceSlash(requete);
90
			}
939 benjamin 91
 
602 aurelien 92
			@Override
93
			protected String[] parserResultatRequete(Response response) {
944 gduche 94
				return UtilitairesAutoCompletionService.parserResultatRetourSimple(response);
602 aurelien 95
			}
96
		};
97
	}
98
 
99
	public void go(HasWidgets composite) {
100
		autoCompletionNomTaxonsPresenteur.go(vue.getPropositionTaxon());
101
		composite.add(vue.asWidget());
102
		gererEvenements();
103
	}
104
 
105
	protected void gererEvenements() {
106
		vue.getBoutonValidationProposition().addClickHandler(new ClickHandler() {
107
			@Override
108
			public void onClick(ClickEvent event) {
109
 
110
				if (!validerSaisieProposition()) {
111
					return;
112
				} else {
887 aurelien 113
					final PropositionDetermination propositionAjoutee = collecterValeursSaisieProposition();
1037 benjamin 114
					if(verifierPropositionDejaAjoutee(propositionAjoutee)){
115
						BusEvenementiel.getInstance().fireEvent(new EvenementAjoutDetermination(propositionAjoutee));
116
						vue.afficherPropositionDejaEffectuée(propositionAjoutee.getEspece());
117
						return;
118
					}
119
 
939 benjamin 120
					propositionDeterminationService.ajouterProposition(propositionAjoutee, new PropositionDeterminationCallBack() {
121
 
887 aurelien 122
						@Override
970 aurelien 123
						public void surRetour(String idNouvelleProposition) {
124
							propositionAjoutee.setId(idNouvelleProposition);
887 aurelien 125
							CacheClient.getInstance().getObservationCourante().ajouterPropositionDetermination(propositionAjoutee);
126
							EvenementAjoutDetermination evenementAjoutDetermination = new EvenementAjoutDetermination(propositionAjoutee);
127
							BusEvenementiel.getInstance().fireEvent(evenementAjoutDetermination);
128
						}
939 benjamin 129
 
887 aurelien 130
					});
602 aurelien 131
				}
132
			}
133
		});
134
	}
135
 
1037 benjamin 136
	private boolean verifierPropositionDejaAjoutee(PropositionDetermination propositionDetermination){
137
		for(InterventionForum interventionForum: CacheClient.getInstance().getObservationCourante().getInterventionsForum()){
138
			if(interventionForum instanceof PropositionDetermination){
139
				if(((PropositionDetermination)interventionForum).getEspece().equals(propositionDetermination.getEspece())){
140
					return true;
141
				}
142
			}
143
		}
144
		return false;
145
	}
146
 
602 aurelien 147
	private boolean validerSaisieProposition() {
148
 
690 gduche 149
		ValidateurChampTexteNonNul validateurNom = new ValidateurChampTexteNonNul(vue.getObjetNom()) {
602 aurelien 150
			@Override
151
			public void afficherStyleErreur(String styleErreur) {
690 gduche 152
				vue.afficherStyleErreurNom(styleErreur);
602 aurelien 153
			}
939 benjamin 154
 
602 aurelien 155
			@Override
156
			public void supprimerStyleErreur(String styleErreur) {
690 gduche 157
				vue.supprimerStyleErreurNom(styleErreur);
602 aurelien 158
			}
159
		};
939 benjamin 160
 
690 gduche 161
		ValidateurChampTexteNonNul validateurPrenom = new ValidateurChampTexteNonNul(vue.getObjetPrenom()) {
162
			@Override
163
			public void afficherStyleErreur(String styleErreur) {
164
				vue.afficherStyleErreurPrenom(styleErreur);
165
			}
939 benjamin 166
 
690 gduche 167
			@Override
168
			public void supprimerStyleErreur(String styleErreur) {
169
				vue.supprimerStyleErreurPrenom(styleErreur);
170
			}
171
		};
939 benjamin 172
 
690 gduche 173
		boolean nomSaisi = validateurNom.valider();
174
		boolean prenomSaisi = validateurPrenom.valider();
602 aurelien 175
 
690 gduche 176
		return nomSaisi && prenomSaisi;
602 aurelien 177
	}
178
 
179
	private PropositionDetermination collecterValeursSaisieProposition() {
851 aurelien 180
		PropositionDetermination propositionAjoutee = new PropositionDetermination(CacheClient.getInstance().getObservationCourante());
181
		propositionAjoutee.setId(CacheClient.getInstance().getObservationCourante().getId());
939 benjamin 182
 
882 aurelien 183
		String idUtilisateur = null;
939 benjamin 184
		if (CacheClient.getInstance().getUtilisateur().estIdentifie()) {
882 aurelien 185
			idUtilisateur = CacheClient.getInstance().getUtilisateur().getId();
186
		}
602 aurelien 187
 
882 aurelien 188
		Contributeur contributeur = new Contributeur(idUtilisateur, vue.getNom(), vue.getPrenom(), vue.getCourriel());
690 gduche 189
		propositionAjoutee.setContributeur(contributeur);
190
		propositionAjoutee.setDate(new Date());
191
		propositionAjoutee.setEspece(autoCompletionNomTaxonsPresenteur.getValeur());
939 benjamin 192
 
602 aurelien 193
		if (vue.getCommentaires().getText() != "") {
194
			String contenuCommentaire = vue.getCommentaires().getText();
896 aurelien 195
			propositionAjoutee.setCommentaire(contenuCommentaire);
602 aurelien 196
		}
197
 
198
		return propositionAjoutee;
199
	}
200
}