Subversion Repositories eFlore/Applications.del

Rev

Rev 1777 | Rev 1834 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
1196 gduche 1
package org.tela_botanica.del.client.vues.identiplante.plateformedetermination;
2
 
3
import java.util.List;
4
 
5
import org.tela_botanica.del.client.cache.CacheClient;
6
import org.tela_botanica.del.client.composants.fenetreoverlay.FenetreOverlayDefilanteVue;
7
import org.tela_botanica.del.client.composants.fenetreoverlay.FenetreOverlaySimplePresenteur;
8
import org.tela_botanica.del.client.composants.formulaires.formulairecommentaire.FormulaireCommentairePresenteur;
9
import org.tela_botanica.del.client.composants.formulaires.formulairecommentaire.FormulaireCommentaireVue;
10
import org.tela_botanica.del.client.composants.formulaires.formulaireproposition.FormulairePropositionPresenteur;
11
import org.tela_botanica.del.client.composants.formulaires.formulaireproposition.FormulairePropositionVue;
12
import org.tela_botanica.del.client.composants.metadonnees.MetadonneesEnLigneVue;
13
import org.tela_botanica.del.client.composants.metadonnees.MetadonneesPresenteur;
14
import org.tela_botanica.del.client.composants.observations.ObservationImagesPresenteur;
15
import org.tela_botanica.del.client.composants.observations.ObservationImagesVue;
16
import org.tela_botanica.del.client.composants.presenteur.Presenteur;
17
import org.tela_botanica.del.client.composants.rss.RssPresenteur;
18
import org.tela_botanica.del.client.composants.rss.RssVue;
19
import org.tela_botanica.del.client.config.Config;
1257 aurelien 20
import org.tela_botanica.del.client.i18n.I18n;
1196 gduche 21
import org.tela_botanica.del.client.modeles.Image;
22
import org.tela_botanica.del.client.modeles.ModeRecherche;
23
import org.tela_botanica.del.client.modeles.MoyenneVote;
24
import org.tela_botanica.del.client.modeles.Observation;
25
import org.tela_botanica.del.client.modeles.ObservationServiceResultat;
1257 aurelien 26
import org.tela_botanica.del.client.modeles.PropositionDetermination;
27
import org.tela_botanica.del.client.modeles.Utilisateur;
1196 gduche 28
import org.tela_botanica.del.client.modeles.VoteDetermination;
29
import org.tela_botanica.del.client.navigation.evenement.BusEvenementiel;
30
import org.tela_botanica.del.client.navigation.evenement.ajoutcommentaire.EvenementAjoutCommentaire;
31
import org.tela_botanica.del.client.navigation.evenement.ajoutcommentaire.GestionnaireEvenementAjoutCommentaire;
32
import org.tela_botanica.del.client.navigation.evenement.ajoutdetermination.EvenementAjoutDetermination;
33
import org.tela_botanica.del.client.navigation.evenement.ajoutdetermination.GestionnaireEvenementAjoutDetermination;
1314 aurelien 34
import org.tela_botanica.del.client.navigation.evenement.changementEtatUtilisateur.EvenementChangementEtatUtilisateur;
35
import org.tela_botanica.del.client.navigation.evenement.changementEtatUtilisateur.GestionnaireEvenementChangementEtatUtilisateur;
1196 gduche 36
import org.tela_botanica.del.client.navigation.evenement.changementimagevalidation.EvenementChangementImageValidation;
37
import org.tela_botanica.del.client.navigation.evenement.changementimagevalidation.GestionnaireEvenementChangementImageValidation;
1689 jpm 38
import org.tela_botanica.del.client.navigation.evenement.depublierObs.EvenementDepublierObs;
39
import org.tela_botanica.del.client.navigation.evenement.depublierObs.GestionnaireEvenementDepublierObs;
1830 aurelien 40
import org.tela_botanica.del.client.navigation.evenement.validationPropositionDetermination.EvenementValidationPropositionDetermination;
41
import org.tela_botanica.del.client.navigation.evenement.validationPropositionDetermination.GestionnaireEvenementValidationPropositionDetermination;
1196 gduche 42
import org.tela_botanica.del.client.navigation.evenement.voteDetermination.EvenementVoteDetermination;
43
import org.tela_botanica.del.client.navigation.evenement.voteDetermination.GestionnaireEvenementVoteDetermination;
44
import org.tela_botanica.del.client.services.CalculVoteDeterminationService;
45
import org.tela_botanica.del.client.services.rest.CommentaireServiceConcret;
46
import org.tela_botanica.del.client.services.rest.ObservationService;
47
import org.tela_botanica.del.client.services.rest.PropositionDeterminationServiceConcret;
1689 jpm 48
import org.tela_botanica.del.client.services.rest.async.DepublicationObservationCallBack;
1196 gduche 49
import org.tela_botanica.del.client.services.rest.async.ObservationsCallback;
1257 aurelien 50
import org.tela_botanica.del.client.services.rest.async.ValidationPropositionCallback;
1775 aurelien 51
import org.tela_botanica.del.client.utils.ModerationUtils;
1196 gduche 52
import org.tela_botanica.del.client.utils.URLUtils;
1689 jpm 53
import org.tela_botanica.del.client.navigation.evenement.rechercheobservation.EvenementRechercheObservation;
1196 gduche 54
import org.tela_botanica.del.client.composants.formulairerechercheeflore.FormulaireRechercheEflorePresenteur;
55
import org.tela_botanica.del.client.composants.forum.ForumPresenteur;
56
import org.tela_botanica.del.client.composants.forum.ForumVue;
57
 
1689 jpm 58
import com.google.gwt.core.shared.GWT;
1196 gduche 59
import com.google.gwt.event.dom.client.ClickEvent;
60
import com.google.gwt.event.dom.client.ClickHandler;
61
import com.google.gwt.event.dom.client.HasClickHandlers;
62
import com.google.gwt.user.client.Window;
63
import com.google.gwt.user.client.ui.Button;
64
import com.google.gwt.user.client.ui.HasWidgets;
65
import com.google.gwt.user.client.ui.IsWidget;
66
import com.google.gwt.user.client.ui.Panel;
67
 
68
public class IdentiplanteDeterminationPresenteur extends Presenteur {
69
 
70
	/**
71
	 * Vue de l'interface de détermination
72
	 * */
73
	public interface Vue extends IsWidget {
1830 aurelien 74
		public HasWidgets getForum();
1196 gduche 75
 
1830 aurelien 76
		public HasWidgets getDetailImageObservation();
1196 gduche 77
 
1830 aurelien 78
		public HasWidgets getFormulaireRechercheEflore();
1196 gduche 79
 
1830 aurelien 80
		public HasClickHandlers getBoutonAjoutProposition();
1196 gduche 81
 
1830 aurelien 82
		public HasClickHandlers getBoutonAjoutCommentaire();
1196 gduche 83
 
1830 aurelien 84
		public HasClickHandlers getBoutonAjoutPropositionBas();
1196 gduche 85
 
1830 aurelien 86
		public HasClickHandlers getBoutonAjoutCommentaireBas();
1689 jpm 87
 
88
		public HasClickHandlers getBoutonDepublierObs();
1196 gduche 89
 
90
		public HasWidgets getMetadonnees();
91
 
92
		public void afficherNomTaxonProbable(String nomTaxon);
93
 
94
		public HasClickHandlers getLienOuvrages();
95
 
96
		public HasClickHandlers getLienBonnier();
97
 
98
		public HasClickHandlers getLienCles();
99
 
100
		public HasClickHandlers getLienEflore();
101
 
102
		public HasWidgets getZoneRss();
1257 aurelien 103
 
104
		public void viderMetadonnees();
1690 jpm 105
 
1830 aurelien 106
		public void viderForum();
107
 
1690 jpm 108
		void afficherZoneActionsObs();
109
 
110
		void cacherZoneActionsObs();
1196 gduche 111
	}
112
 
1689 jpm 113
	private Observation observation;
1196 gduche 114
	private Vue vue;
115
	private FenetreOverlaySimplePresenteur fenetreOverlaySimplePresenteur;
116
 
117
	// Déclaration des services à utiliser
118
	private ObservationService observationService;
119
 
120
	private CacheClient cache = CacheClient.getInstance();
1257 aurelien 121
 
122
	private PropositionDetermination propositionPlusPopulaire;
1196 gduche 123
 
124
	public IdentiplanteDeterminationPresenteur(Vue vue, ObservationService observationService) {
125
		this.vue = vue;
126
		this.observationService = observationService;
127
	}
128
 
129
	public void go(final HasWidgets composite) {
130
		// TODO afficher une icone de chargement si le chargement devient trop
131
		// long
132
		// car tout l'écran est asynchrone ici
133
		String observationId = URLUtils.getURLSpecialParameterValue();
134
		observationService.getObservation(observationId, new ObservationsCallback() {
135
			@Override
136
			public void surRetour(ObservationServiceResultat objetRetour) {
1689 jpm 137
				observation = cache.getObservationCourante();
1196 gduche 138
				afficherRss(cache.getObservationCourante());
139
				// trouve l'image courante si elle n'est pas deja en cache
140
				List<Image> listeImages = cache.getObservationCourante().getImages();
141
				if (listeImages.size() > 0) {
142
					CacheClient.getInstance().setImageCourante(listeImages.get(0));
143
				} else {
144
					CacheClient.getInstance().setImageCourante(null);
145
				}
1314 aurelien 146
 
1196 gduche 147
				new MetadonneesPresenteur(new MetadonneesEnLigneVue(), cache.getObservationCourante(), ModeRecherche.MODE_OBSERVATION, false).go(vue.getMetadonnees());
1553 jpm 148
				new ObservationImagesPresenteur(new ObservationImagesVue(), cache.getObservationCourante(), CacheClient.getInstance().getImageCourante()).go(vue.getDetailImageObservation());
1196 gduche 149
				new ForumPresenteur(new ForumVue()).go(vue.getForum());
150
				new FormulaireRechercheEflorePresenteur().go(vue.getFormulaireRechercheEflore());
151
 
1314 aurelien 152
				composite.add(vue.asWidget());
1196 gduche 153
				calculerEtAfficherVoteDeterminationPlusPopulaire();
154
			}
155
 
156
			@Override
157
			public void surErreur(String messageErreur) {
1542 mathias 158
				Window.alert(messageErreur + " - l'identifiant d'observation est incorrect; l'observation a peut-être été supprimée");
1196 gduche 159
			}
160
		});
1690 jpm 161
		afficherZoneActionsObs();
1196 gduche 162
		gererEvenements();
163
	}
164
 
165
	public void afficherRss(Observation observation) {
166
		new RssPresenteur(new RssVue(), observation, "Suivre cette observation").go(vue.getZoneRss());
167
	}
168
 
169
	private void calculerEtAfficherVoteDeterminationPlusPopulaire() {
1689 jpm 170
		if (cache.getObservationCourante() != null) {
1393 aurelien 171
			Observation observation = cache.getObservationCourante();
172
			String nomTaxon = observation.getNomRetenuFormateReferentiel();
173
			List<MoyenneVote> votesOrdonnes = CalculVoteDeterminationService.calculerVoteDeterminationPlusPopulaire(cache.getObservationCourante().getPropositionDeterminations());
174
			if (votesOrdonnes.size() > 0) {
175
				nomTaxon = votesOrdonnes.get(0).getIntituleAssocie();
176
				propositionPlusPopulaire = votesOrdonnes.get(0).getPropositionAssociee();
1689 jpm 177
			}
1393 aurelien 178
			vue.afficherNomTaxonProbable(nomTaxon);
1196 gduche 179
		}
180
	}
181
 
182
	public void gererEvenements() {
1314 aurelien 183
 
1196 gduche 184
		BusEvenementiel.getInstance().addHandler(EvenementVoteDetermination.TYPE, new GestionnaireEvenementVoteDetermination() {
185
			@Override
186
			public void onVoteDetermination(VoteDetermination event) {
187
				calculerEtAfficherVoteDeterminationPlusPopulaire();
188
			}
189
		});
1689 jpm 190
 
1196 gduche 191
		BusEvenementiel.getInstance().addHandler(EvenementAjoutDetermination.TYPE, new GestionnaireEvenementAjoutDetermination() {
192
			@Override
193
			public void onAjoutDetermination(EvenementAjoutDetermination event) {
194
				if (fenetreOverlaySimplePresenteur != null && fenetreOverlaySimplePresenteur.fenetreModaleEstOuverte()) {
195
					fenetreOverlaySimplePresenteur.fermerFenetreModale();
196
				}
197
			}
198
		});
199
 
200
		BusEvenementiel.getInstance().addHandler(EvenementAjoutCommentaire.TYPE, new GestionnaireEvenementAjoutCommentaire() {
201
			@Override
202
			public void onAjoutCommentaire(EvenementAjoutCommentaire event) {
203
				if (fenetreOverlaySimplePresenteur != null && fenetreOverlaySimplePresenteur.fenetreModaleEstOuverte()) {
204
					fenetreOverlaySimplePresenteur.fermerFenetreModale();
205
				}
206
			}
207
		});
208
 
209
		BusEvenementiel.getInstance().addHandler(EvenementChangementImageValidation.TYPE, new GestionnaireEvenementChangementImageValidation() {
210
			@Override
211
			public void onChangementImage(EvenementChangementImageValidation event) {
212
				vue.getDetailImageObservation().clear();
1553 jpm 213
				new ObservationImagesPresenteur(
214
					new ObservationImagesVue(),
215
					cache.getObservationCourante(),
216
					CacheClient.getInstance().getImageCourante()).go(vue.getDetailImageObservation());
1196 gduche 217
			}
218
		});
1689 jpm 219
 
220
		ClickHandler clicAjoutProposition = new ClickHandler() {
221
			@Override
222
			public void onClick(ClickEvent event) {
223
				fenetreOverlaySimplePresenteur = new FenetreOverlaySimplePresenteur(new FenetreOverlayDefilanteVue());
224
				fenetreOverlaySimplePresenteur.ouvrirFenetreModale(new FormulairePropositionPresenteur(new FormulairePropositionVue(), new PropositionDeterminationServiceConcret()));
225
			}
226
		};
227
		vue.getBoutonAjoutProposition().addClickHandler(clicAjoutProposition);
228
		vue.getBoutonAjoutPropositionBas().addClickHandler(clicAjoutProposition);
229
 
230
		ClickHandler clicAjoutCommentaire = new ClickHandler() {
231
			@Override
232
			public void onClick(ClickEvent event) {
233
				FormulaireCommentairePresenteur commentairePresenteur = new FormulaireCommentairePresenteur(cache.getObservationCourante(), new CommentaireServiceConcret(), new FormulaireCommentaireVue());
234
				fenetreOverlaySimplePresenteur = new FenetreOverlaySimplePresenteur(new FenetreOverlayDefilanteVue());
235
				fenetreOverlaySimplePresenteur.ouvrirFenetreModale(commentairePresenteur);
236
			}
237
		};
238
		vue.getBoutonAjoutCommentaire().addClickHandler(clicAjoutCommentaire);
239
		vue.getBoutonAjoutCommentaireBas().addClickHandler(clicAjoutCommentaire);
240
 
1196 gduche 241
		vue.getLienOuvrages().addClickHandler(new ClickHandler() {
242
			@Override
243
			public void onClick(ClickEvent event) {
244
				Config config = new Config();
1687 mathias 245
				Window.open(config.getUrl("ouvragesFlore"), "Flores numérisées", config.getInfo("popupOptions"));
1196 gduche 246
			}
247
		});
248
 
249
		vue.getLienBonnier().addClickHandler(new ClickHandler() {
250
			@Override
251
			public void onClick(ClickEvent event) {
252
				Config config = new Config();
1687 mathias 253
				Window.open(config.getUrl("bonnierPda"), "Flore Bonnier PDA", config.getInfo("popupOptions"));
1196 gduche 254
			}
255
		});
256
 
257
		vue.getLienCles().addClickHandler(new ClickHandler() {
258
			@Override
259
			public void onClick(ClickEvent event) {
260
				Config config = new Config();
1687 mathias 261
				Window.open(config.getUrl("clesDetermination"), "Clés de determination", config.getInfo("popupOptions"));
1196 gduche 262
			}
263
		});
264
 
265
		vue.getLienEflore().addClickHandler(new ClickHandler() {
266
			@Override
267
			public void onClick(ClickEvent event) {
268
				Config config = new Config();
1687 mathias 269
				Window.open(config.getUrl("eflore"), "eFlore", config.getInfo("popupOptions"));
1196 gduche 270
			}
271
		});
1257 aurelien 272
 
1689 jpm 273
		vue.getBoutonDepublierObs().addClickHandler(new ClickHandler() {
274
			@Override
275
			public void onClick(ClickEvent event) {
276
				GWT.log("Lancer evnt : EvenementDepublierObs");
1690 jpm 277
				if (Window.confirm(I18n.getVocabulary().confirmationDepublicationObs())) {
278
					BusEvenementiel.getInstance().fireEvent(new EvenementDepublierObs(observation.getId()));
279
				}
1689 jpm 280
			}
281
		});
282
 
283
		BusEvenementiel.getInstance().addHandler(EvenementDepublierObs.TYPE, new GestionnaireEvenementDepublierObs() {
284
			@Override
285
			public void onDepublicationObs(EvenementDepublierObs event) {
286
				GWT.log("Attraper evnt : EvenementDepublierObs (obs:"+event.getIdObs()+")");
287
				if (event.getIdObs().equals(observation.getId())) {
1690 jpm 288
					depublierObs();
1689 jpm 289
				}
290
			}
291
		});
1690 jpm 292
 
293
		BusEvenementiel.getInstance().addHandler(EvenementChangementEtatUtilisateur.TYPE, new GestionnaireEvenementChangementEtatUtilisateur() {
294
			@Override
295
			public void onModificationEtatUtilisateur(EvenementChangementEtatUtilisateur evenementChangementEtatUtilisateur) {
296
				afficherZoneActionsObs();
1830 aurelien 297
				//rechargerForum();
1690 jpm 298
			}
299
		});
1830 aurelien 300
 
301
		BusEvenementiel.getInstance().addHandler(EvenementValidationPropositionDetermination.TYPE, new GestionnaireEvenementValidationPropositionDetermination() {
302
 
1257 aurelien 303
			@Override
1830 aurelien 304
			public void onValidationPropositionDetermination(EvenementValidationPropositionDetermination event) {
1257 aurelien 305
				String observationId = URLUtils.getURLSpecialParameterValue();
306
				observationService.getObservation(observationId, new ObservationsCallback() {
307
 
308
					@Override
309
					public void surRetour(ObservationServiceResultat objetRetour) {
310
						vue.viderMetadonnees();
311
						new MetadonneesPresenteur(new MetadonneesEnLigneVue(), cache.getObservationCourante(), ModeRecherche.MODE_OBSERVATION, false).go(vue.getMetadonnees());
1830 aurelien 312
						rechargerForum();
1257 aurelien 313
					}
314
 
315
					@Override
316
					public void surErreur(String messageErreur) {
317
						Window.alert(messageErreur);
318
					}
1830 aurelien 319
				});
1257 aurelien 320
			}
321
		});
322
	}
1689 jpm 323
 
1830 aurelien 324
	private void rechargerForum() {
325
		vue.viderForum();
326
		new ForumPresenteur(new ForumVue()).go(vue.getForum());
327
	}
328
 
1689 jpm 329
	private void depublierObs() {
1830 aurelien 330
		if (ModerationUtils.utilisateurPeutDepublierObs(CacheClient.getInstance().getUtilisateur())) {
1690 jpm 331
			GWT.log("depublierObs :"+observation.getId());
332
			observationService.depublier(observation, new DepublicationObservationCallBack() {
333
 
334
				@Override
335
				public void surRetour(String depublicationOk) {
336
					GWT.log("Dépublication obs "+observation.getId()+" "+depublicationOk);
337
					if (depublicationOk.equals("OK")) {
338
						BusEvenementiel.getInstance().fireEvent(new EvenementRechercheObservation());
339
					}
1689 jpm 340
				}
1690 jpm 341
			});
342
		}
1689 jpm 343
	}
1690 jpm 344
 
345
	private void afficherZoneActionsObs() {
1830 aurelien 346
		if (ModerationUtils.utilisateurPeutDepublierObs(CacheClient.getInstance().getUtilisateur())) {
1690 jpm 347
			vue.afficherZoneActionsObs();
348
		} else {
349
			vue.cacherZoneActionsObs();
350
		}
351
	}
1196 gduche 352
}