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
322 gduche 1
package org.tela_botanica.del.client.composants.moteurrecherche;
2
 
1367 aurelien 3
import java.util.Map;
4
 
335 benjamin 5
import org.tela_botanica.del.client.cache.CacheClient;
602 aurelien 6
import org.tela_botanica.del.client.composants.formulaires.autocompletion.AutoCompletionComboBoxPresenteur;
7
import org.tela_botanica.del.client.composants.formulaires.autocompletion.AutoCompletionComboBoxVue;
322 gduche 8
import org.tela_botanica.del.client.composants.presenteur.Presenteur;
1120 gduche 9
import org.tela_botanica.del.client.composants.rss.RssPresenteur;
10
import org.tela_botanica.del.client.composants.rss.RssVue;
553 jpm 11
import org.tela_botanica.del.client.config.Config;
335 benjamin 12
import org.tela_botanica.del.client.modeles.InformationsRecherche;
451 aurelien 13
import org.tela_botanica.del.client.modeles.ModeRecherche;
1367 aurelien 14
import org.tela_botanica.del.client.services.ReferentielService;
1986 aurelien 15
import org.tela_botanica.del.client.services.rest.PaysService;
16
import org.tela_botanica.del.client.services.rest.PaysServiceConcret;
17
import org.tela_botanica.del.client.services.rest.async.PaysCallback;
1886 mathias 18
import org.tela_botanica.del.client.utils.InfosNomPourAutocompletion;
500 aurelien 19
import org.tela_botanica.del.client.utils.UtilitairesAutoCompletionService;
322 gduche 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.event.dom.client.HasKeyPressHandlers;
25
import com.google.gwt.event.dom.client.KeyCodes;
26
import com.google.gwt.event.dom.client.KeyPressEvent;
27
import com.google.gwt.event.dom.client.KeyPressHandler;
386 aurelien 28
import com.google.gwt.http.client.Response;
322 gduche 29
import com.google.gwt.user.client.ui.HasWidgets;
30
import com.google.gwt.user.client.ui.IsWidget;
31
 
32
public abstract class MoteurRecherchePresenteur extends Presenteur {
335 benjamin 33
 
322 gduche 34
	public abstract interface Vue extends IsWidget {
545 jpm 35
		public void ajouterVue(HasWidgets composite);
560 benjamin 36
 
545 jpm 37
		public HasClickHandlers getLienRechercheAvancee();
560 benjamin 38
 
545 jpm 39
		public void basculerAffichageZoneCache();
560 benjamin 40
 
545 jpm 41
		public HasClickHandlers getBoutonRechercheSimple();
560 benjamin 42
 
545 jpm 43
		public HasClickHandlers getBoutonFermer();
560 benjamin 44
 
545 jpm 45
		public HasClickHandlers getBoutonVider();
560 benjamin 46
 
545 jpm 47
		public HasClickHandlers getBoutonRechercheAvancee();
560 benjamin 48
 
545 jpm 49
		public HasKeyPressHandlers getChampSaisie();
560 benjamin 50
 
545 jpm 51
		public HasClickHandlers getChampSaisieCliquable();
560 benjamin 52
 
545 jpm 53
		public String getValeurRechercheSimple();
560 benjamin 54
 
322 gduche 55
		public String getLabelRecherche();
560 benjamin 56
 
533 jpm 57
		public String getContientMots();
560 benjamin 58
 
451 aurelien 59
		public String getDepartement();
560 benjamin 60
 
457 aurelien 61
		public HasWidgets getCommune();
560 benjamin 62
 
386 aurelien 63
		public HasWidgets getTaxon();
560 benjamin 64
 
451 aurelien 65
		public String getFamille();
560 benjamin 66
 
451 aurelien 67
		public String getGenre();
560 benjamin 68
 
451 aurelien 69
		public String getMotCle();
560 benjamin 70
 
451 aurelien 71
		public String getAuteur();
560 benjamin 72
 
451 aurelien 73
		public String getDate();
1986 aurelien 74
 
75
		public String getPays();
560 benjamin 76
 
533 jpm 77
		public void setValeurRechercheSimple(String valeurRecherche);
560 benjamin 78
 
533 jpm 79
		public void setContientMots(String mots);
560 benjamin 80
 
533 jpm 81
		public void setValeurDepartement(String dpt);
560 benjamin 82
 
335 benjamin 83
		public void chargerValeursRecherchePrecedente(InformationsRecherche informationsRecherche);
560 benjamin 84
 
407 gduche 85
		public void focusSaisie();
560 benjamin 86
 
420 gduche 87
		public void nettoyer();
564 benjamin 88
 
89
		public HasKeyPressHandlers getChampsFamille();
90
 
91
		public HasKeyPressHandlers getChampsGenre();
92
 
93
		public HasKeyPressHandlers getChampsMotCle();
1426 aurelien 94
 
95
		public HasKeyPressHandlers getChampsMotCleDel();
96
 
97
		public HasKeyPressHandlers getChampsMotCleCel();
564 benjamin 98
 
99
		public HasKeyPressHandlers getChampsAuteur();
100
 
101
		public HasKeyPressHandlers getChampsDate();
671 aurelien 102
 
103
		public HasKeyPressHandlers getChampsDepartement();
104
 
105
		public HasKeyPressHandlers getChampsContientMots();
1120 gduche 106
 
107
		public HasWidgets getZoneRss();
564 benjamin 108
 
1367 aurelien 109
		public String getReferentiel();
110
 
111
		public void setReferentielLectureSeule(boolean lectureSeule);
112
 
113
		void remplirListeReferentiels(Map<String, String> listeReferentiels);
114
 
1426 aurelien 115
		public String getMotCleDel();
116
 
117
		public String getMotCleCel();
118
 
119
		public void cacherChampsTagsImage();
120
		public void cacherChampsTagsObs();
121
 
1986 aurelien 122
		void remplirListePays(Map<String, String> listePays);
123
 
322 gduche 124
	}
125
 
553 jpm 126
	private Vue vue;
127
	private Config config;
457 aurelien 128
	private ModeRecherche modeRecherche;
1120 gduche 129
	private RssPresenteur presenteurRss;
130
 
560 benjamin 131
	public enum TypeMoteur {
132
		SIMPLE, AVANCEE
133
	};
134
 
533 jpm 135
	private TypeMoteur typeMoteur = TypeMoteur.SIMPLE;
420 gduche 136
 
553 jpm 137
	private AutoCompletionComboBoxPresenteur completionTaxonsPresenteur = null;
138
	private AutoCompletionComboBoxPresenteur completionCommunesPresenteur = null;
560 benjamin 139
 
451 aurelien 140
	public MoteurRecherchePresenteur(Vue vue, ModeRecherche mode) {
585 jpm 141
		initialiser(vue, mode, new Config());
322 gduche 142
	}
560 benjamin 143
 
585 jpm 144
	public MoteurRecherchePresenteur(AutoCompletionComboBoxPresenteur presenteurAutoCompletionTaxon, AutoCompletionComboBoxPresenteur presenteurAutoCompletionCommunes, Vue vue, ModeRecherche mode, Config configuration) {
553 jpm 145
		completionTaxonsPresenteur = presenteurAutoCompletionTaxon;
146
		completionCommunesPresenteur = presenteurAutoCompletionCommunes;
585 jpm 147
		initialiser(vue, mode, configuration);
553 jpm 148
	}
560 benjamin 149
 
585 jpm 150
	private void initialiser(Vue vue, ModeRecherche mode, Config configuration) {
1120 gduche 151
 
1130 gduche 152
		//TODO : fixer le flux avant de le mettre en place
153
		//this.presenteurRss = new RssPresenteur(new RssVue(), CacheClient.getInstance().getInformationsRechercheObservation(), "S'abonner au flux rss des résultats de cette recherche");
154
		//presenteurRss.go(vue.getZoneRss());
1120 gduche 155
 
451 aurelien 156
		this.vue = vue;
157
		setMode(mode);
585 jpm 158
		this.config = configuration;
560 benjamin 159
		if (completionTaxonsPresenteur == null)
160
			this.creerCompletionTaxons();
161
		if (completionCommunesPresenteur == null)
162
			this.creerCompletionCommunes();
451 aurelien 163
		gererEvenements();
1367 aurelien 164
 
165
		vue.remplirListeReferentiels(ReferentielService.getReferentiels());
166
		if(CacheClient.getInstance().getReferentielNonModifiable()) {
167
			vue.setReferentielLectureSeule(true);
168
		}
1426 aurelien 169
 
1986 aurelien 170
		if(CacheClient.getInstance().getListePays() != null) {
171
			vue.remplirListePays(CacheClient.getInstance().getListePays());
172
		} else {
173
			PaysService paysService = new PaysServiceConcret();
174
			paysService.getPays(new PaysCallback() {
175
				@Override
176
				public void surRetour(Map<String, String> listePays) {
177
					CacheClient.getInstance().setListePays(listePays);
178
					MoteurRecherchePresenteur.this.vue.remplirListePays(listePays);
179
				}
180
			});
181
		}
182
 
1426 aurelien 183
		if(estPourRechercheImages()) {
184
			vue.cacherChampsTagsObs();
185
		} else {
186
			vue.cacherChampsTagsImage();
187
		}
451 aurelien 188
	}
560 benjamin 189
 
533 jpm 190
	public ModeRecherche getMode() {
191
		return modeRecherche;
192
	}
560 benjamin 193
 
533 jpm 194
	private void setMode(ModeRecherche mode) {
195
		modeRecherche = mode;
196
	}
585 jpm 197
 
198
	public TypeMoteur getTypeMoteur() {
199
		return this.typeMoteur;
200
	}
201
 
533 jpm 202
	public void setTypeMoteur(TypeMoteur typeMoteur) {
203
		this.typeMoteur = typeMoteur;
204
	}
335 benjamin 205
 
533 jpm 206
	public boolean estPourRechercheImages() {
207
		return (modeRecherche == ModeRecherche.MODE_IMAGE);
208
	}
209
 
210
	public boolean estPourRechercheObservations() {
211
		return (modeRecherche == ModeRecherche.MODE_OBSERVATION);
560 benjamin 212
	}
533 jpm 213
 
545 jpm 214
	private void creerCompletionTaxons() {
944 gduche 215
		String url = this.config.getServiceBaseUrl() + "nomstaxons";
553 jpm 216
		completionTaxonsPresenteur = new AutoCompletionComboBoxPresenteur(new AutoCompletionComboBoxVue(), url) {
545 jpm 217
			protected String effectuerPreTraitementChaineRequete(String requete) {
1367 aurelien 218
				// si aucun référentiel selectionné, pas de requete
219
				if(vue.getReferentiel() != null && !vue.getReferentiel().equals("")) {
220
					requete = "?masque.nom=" + requete + "&masque.referentiel=" + vue.getReferentiel();
1393 aurelien 221
					return requete;
1367 aurelien 222
				} else {
223
					return null;
224
				}
545 jpm 225
				// A décommenter lors de l'utilisation des web services eflore
226
				// return
227
				// RetourAutoCompletionService.effectuerPreTraitementChaineRequeteGenreEspeceEflore(requete);
228
			}
229
 
230
			@Override
1886 mathias 231
			protected InfosNomPourAutocompletion[] parserResultatRequete(Response response) {
944 gduche 232
				return UtilitairesAutoCompletionService.parserResultatRetourSimple(response);
545 jpm 233
				// A décommenter lors de l'utilisation des web services eflore
234
				// return RetourAutoCompletionService.parserRetourOss(response);
235
			}
236
		};
237
	}
560 benjamin 238
 
545 jpm 239
	private void creerCompletionCommunes() {
938 gduche 240
		String url = this.config.getServiceBaseUrl() + "communes";
553 jpm 241
		completionCommunesPresenteur = new AutoCompletionComboBoxPresenteur(new AutoCompletionComboBoxVue(), url) {
545 jpm 242
			protected String effectuerPreTraitementChaineRequete(String requete) {
938 gduche 243
				requete = "?masque.nom=" + requete;
545 jpm 244
				return requete;
245
			}
560 benjamin 246
 
545 jpm 247
			@Override
248
			protected void surSelectionSuggestion(String suggestion) {
560 benjamin 249
				setValeur(suggestion);
552 benjamin 250
				collecterInfosRecherche();
251
				setValeur(getInformationsRechercheEnCache().getCommune());
252
				vue.setValeurDepartement(getInformationsRechercheEnCache().getDepartement());
545 jpm 253
			}
254
 
255
			@Override
1886 mathias 256
			protected InfosNomPourAutocompletion[] parserResultatRequete(Response response) {
938 gduche 257
				return UtilitairesAutoCompletionService.parserResultatRetourSimple(response);
545 jpm 258
			}
259
		};
260
	}
560 benjamin 261
 
322 gduche 262
	@Override
263
	public void go(HasWidgets composite) {
335 benjamin 264
		afficherRequeteEtLancerRecherche();
545 jpm 265
		completionTaxonsPresenteur.go(vue.getTaxon());
266
		completionCommunesPresenteur.go(vue.getCommune());
451 aurelien 267
		vue.ajouterVue(composite);
407 gduche 268
		vue.focusSaisie();
322 gduche 269
	}
270
 
271
	@Override
272
	protected void gererEvenements() {
273
		vue.getLienRechercheAvancee().addClickHandler(new ClickHandler() {
274
			public void onClick(ClickEvent event) {
560 benjamin 275
				setTypeMoteur(TypeMoteur.AVANCEE);
533 jpm 276
				vue.setContientMots(vue.getValeurRechercheSimple());
322 gduche 277
				vue.basculerAffichageZoneCache();
278
			}
279
		});
335 benjamin 280
 
322 gduche 281
		vue.getBoutonRechercheSimple().addClickHandler(new ClickHandler() {
282
			public void onClick(ClickEvent event) {
533 jpm 283
				setTypeMoteur(TypeMoteur.SIMPLE);
335 benjamin 284
				collecterInfosRecherche();
445 benjamin 285
				afficherRequeteEtLancerRecherche();
322 gduche 286
			}
287
		});
335 benjamin 288
 
408 gduche 289
		vue.getBoutonFermer().addClickHandler(new ClickHandler() {
290
			public void onClick(ClickEvent event) {
533 jpm 291
				vue.setValeurRechercheSimple(vue.getContientMots());
408 gduche 292
				vue.basculerAffichageZoneCache();
293
			}
294
		});
420 gduche 295
 
296
		vue.getBoutonVider().addClickHandler(new ClickHandler() {
297
			public void onClick(ClickEvent event) {
457 aurelien 298
				nettoyerChamps();
420 gduche 299
				InformationsRecherche infosRecherche = new InformationsRecherche();
451 aurelien 300
				if (estPourRechercheImages()) {
420 gduche 301
					CacheClient.getInstance().setInformationsRechercheImage(infosRecherche);
451 aurelien 302
				} else if (estPourRechercheObservations()) {
420 gduche 303
					CacheClient.getInstance().setInformationsRechercheObservation(infosRecherche);
304
				}
305
			}
306
		});
307
 
322 gduche 308
		vue.getBoutonRechercheAvancee().addClickHandler(new ClickHandler() {
309
			public void onClick(ClickEvent event) {
533 jpm 310
				setTypeMoteur(TypeMoteur.AVANCEE);
335 benjamin 311
				collecterInfosRecherche();
312
				vue.basculerAffichageZoneCache();
313
				afficherRequeteEtLancerRecherche();
322 gduche 314
			}
315
		});
335 benjamin 316
 
322 gduche 317
		vue.getChampSaisie().addKeyPressHandler(new KeyPressHandler() {
318
			public void onKeyPress(KeyPressEvent event) {
319
				if (event.getNativeEvent().getKeyCode() == KeyCodes.KEY_ENTER) {
533 jpm 320
					setTypeMoteur(TypeMoteur.SIMPLE);
335 benjamin 321
					collecterInfosRecherche();
445 benjamin 322
					afficherRequeteEtLancerRecherche();
322 gduche 323
				}
324
			}
325
		});
335 benjamin 326
 
322 gduche 327
		vue.getChampSaisieCliquable().addClickHandler(new ClickHandler() {
328
			public void onClick(ClickEvent event) {
445 benjamin 329
				if (vue.getValeurRechercheSimple().equals(vue.getLabelRecherche())) {
322 gduche 330
					vue.setValeurRechercheSimple("");
331
				}
332
			}
333
		});
564 benjamin 334
 
597 aurelien 335
		vue.getChampsAuteur().addKeyPressHandler(creerGestionnaireEvenementToucheEntree());
336
		vue.getChampsDate().addKeyPressHandler(creerGestionnaireEvenementToucheEntree());
337
		vue.getChampsFamille().addKeyPressHandler(creerGestionnaireEvenementToucheEntree());
338
		vue.getChampsGenre().addKeyPressHandler(creerGestionnaireEvenementToucheEntree());
339
		vue.getChampsMotCle().addKeyPressHandler(creerGestionnaireEvenementToucheEntree());
1426 aurelien 340
		vue.getChampsMotCleCel().addKeyPressHandler(creerGestionnaireEvenementToucheEntree());
341
		vue.getChampsMotCleDel().addKeyPressHandler(creerGestionnaireEvenementToucheEntree());
671 aurelien 342
		vue.getChampsDepartement().addKeyPressHandler(creerGestionnaireEvenementToucheEntree());
343
		vue.getChampsContientMots().addKeyPressHandler(creerGestionnaireEvenementToucheEntree());
564 benjamin 344
 
322 gduche 345
	}
560 benjamin 346
 
597 aurelien 347
	public KeyPressHandler creerGestionnaireEvenementToucheEntree() {
564 benjamin 348
		return new KeyPressHandler() {
349
			public void onKeyPress(KeyPressEvent event) {
350
				if (event.getNativeEvent().getKeyCode() == KeyCodes.KEY_ENTER) {
351
					vue.basculerAffichageZoneCache();
352
					collecterInfosRecherche();
353
					afficherRequeteEtLancerRecherche();
354
				}
355
			}
356
		};
357
	}
358
 
457 aurelien 359
	private void nettoyerChamps() {
545 jpm 360
		completionCommunesPresenteur.nettoyer();
361
		completionTaxonsPresenteur.nettoyer();
457 aurelien 362
		vue.nettoyer();
363
	}
335 benjamin 364
 
451 aurelien 365
	public void collecterInfosRecherche() {
335 benjamin 366
		InformationsRecherche informationRecherche = new InformationsRecherche();
533 jpm 367
		informationRecherche.setRechercheLibre(this.getRechercheLibre());
545 jpm 368
		if (this.typeMoteur == TypeMoteur.AVANCEE) {
369
			informationRecherche.setTaxon(completionTaxonsPresenteur.getValeur());
370
			informationRecherche.setDepartement(vue.getDepartement());
371
			informationRecherche.setCommune(completionCommunesPresenteur.getValeur());
372
			informationRecherche.setFamille(vue.getFamille());
373
			informationRecherche.setGenre(vue.getGenre());
1426 aurelien 374
			if(estPourRechercheObservations()) {
375
				informationRecherche.setMotClef(vue.getMotCle());
376
			} else {
377
				informationRecherche.setMotClefDel(vue.getMotCleDel());
378
				informationRecherche.setMotClefCel(vue.getMotCleCel());
379
			}
581 gduche 380
			informationRecherche.setTag(vue.getMotCle());
545 jpm 381
			informationRecherche.setAuteur(vue.getAuteur());
382
			informationRecherche.setDate(vue.getDate());
1367 aurelien 383
			informationRecherche.setReferentiel(vue.getReferentiel());
1986 aurelien 384
			informationRecherche.setPays(vue.getPays());
545 jpm 385
		}
1367 aurelien 386
 
387
		if(CacheClient.getInstance().getReferentielNonModifiable()) {
388
			informationRecherche.setReferentiel(CacheClient.getInstance().getReferentielCourant());
389
		}
445 benjamin 390
 
451 aurelien 391
		if (estPourRechercheImages()) {
488 benjamin 392
			CacheClient.getInstance().setPageCouranteRechercheImages(1);
445 benjamin 393
			CacheClient.getInstance().setInformationsRechercheImage(informationRecherche);
451 aurelien 394
		} else if (estPourRechercheObservations()) {
488 benjamin 395
			CacheClient.getInstance().setPageCouranteRechercheObservations(1);
445 benjamin 396
			CacheClient.getInstance().setInformationsRechercheObservation(informationRecherche);
335 benjamin 397
		}
322 gduche 398
	}
560 benjamin 399
 
533 jpm 400
	private String getRechercheLibre() {
401
		String rechercheLibre = "";
402
		switch (this.typeMoteur) {
560 benjamin 403
		case SIMPLE:
404
			rechercheLibre = vue.getValeurRechercheSimple();
405
			break;
406
		case AVANCEE:
407
			rechercheLibre = vue.getContientMots();
408
			break;
409
		default:
410
			// TODO : voir comment gérer les exceptions proprement
411
			// throw new
1367 aurelien 412
			// Exception("Le type de moteur de recherche indiqué n'est pas disponible");
533 jpm 413
		}
414
		return rechercheLibre;
415
	}
335 benjamin 416
 
417
	private InformationsRecherche getInformationsRechercheEnCache() {
451 aurelien 418
		if (estPourRechercheImages()) {
335 benjamin 419
			return CacheClient.getInstance().getInformationsRechercheImage();
451 aurelien 420
		} else if (estPourRechercheObservations()) {
445 benjamin 421
			return CacheClient.getInstance().getInformationsRechercheObservation();
335 benjamin 422
		}
423
		return null;
424
	}
425
 
426
	public void afficherRequeteEtLancerRecherche() {
427
		InformationsRecherche informationsRecherche = getInformationsRechercheEnCache();
428
		if (informationsRecherche != null) {
545 jpm 429
			completionTaxonsPresenteur.setValeur(informationsRecherche.getTaxon());
552 benjamin 430
			completionCommunesPresenteur.setValeur(informationsRecherche.getCommune());
335 benjamin 431
			vue.chargerValeursRecherchePrecedente(informationsRecherche);
432
		}
433
		lancerRecherche();
1130 gduche 434
		//presenteurRss.genererLien(informationsRecherche);
335 benjamin 435
	}
436
 
445 benjamin 437
	public abstract void lancerRecherche();
322 gduche 438
}