Subversion Repositories eFlore/Applications.del

Rev

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