Subversion Repositories eFlore/Applications.del

Rev

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