Subversion Repositories eFlore/Applications.del

Rev

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