Subversion Repositories eFlore/Applications.del

Rev

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