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