Subversion Repositories eFlore/Applications.del

Rev

Go to most recent revision | Details | 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() {
162
 
163
		Observation observation = cache.getObservationCourante();
164
		String nomTaxon = observation.getNomRetenu();
165
 
166
		List<MoyenneVote> votesOrdonnes = CalculVoteDeterminationService.calculerVoteDeterminationPlusPopulaire(cache.getObservationCourante().getPropositionDeterminations());
167
		if (votesOrdonnes.size() > 0) {
168
			nomTaxon = votesOrdonnes.get(0).getIntituleAssocie();
1316 aurelien 169
			propositionPlusPopulaire = votesOrdonnes.get(0).getPropositionAssociee();
170
 
171
			if(doitAfficherBoutonValidation(votesOrdonnes)) {
172
				vue.afficherBoutonValidationTaxon();
173
			} else {
174
				vue.cacherBoutonValidationTaxon();
175
			}
1196 gduche 176
		}
1257 aurelien 177
 
1196 gduche 178
		vue.afficherNomTaxonProbable(nomTaxon);
179
	}
1314 aurelien 180
 
181
	private boolean doitAfficherBoutonValidation(List<MoyenneVote> votesOrdonnes) {
182
		boolean estPropositionRetenue = votesOrdonnes.get(0).getPropositionAssociee().estPropositionRetenue();
183
 
184
		Utilisateur utilisateur = CacheClient.getInstance().getUtilisateur();
1316 aurelien 185
		boolean estAuteurObservation = false;
186
		if(utilisateur != null) {
187
			estAuteurObservation = utilisateur.estIdentifie() && utilisateur.getId().equals(cache.getObservationCourante().getIdAuteur());
188
		}
1314 aurelien 189
		return estAuteurObservation && !estPropositionRetenue;
190
	}
1196 gduche 191
 
192
	public void gererEvenements() {
193
 
1314 aurelien 194
		BusEvenementiel.getInstance().addHandler(EvenementChangementEtatUtilisateur.TYPE, new GestionnaireEvenementChangementEtatUtilisateur() {
195
			@Override
196
			public void onModificationEtatUtilisateur(EvenementChangementEtatUtilisateur evenementChangementEtatUtilisateur) {
197
				calculerEtAfficherVoteDeterminationPlusPopulaire();
198
			};
199
		});
200
 
1196 gduche 201
		BusEvenementiel.getInstance().addHandler(EvenementVoteDetermination.TYPE, new GestionnaireEvenementVoteDetermination() {
202
			@Override
203
			public void onVoteDetermination(VoteDetermination event) {
204
				calculerEtAfficherVoteDeterminationPlusPopulaire();
205
			}
206
		});
207
 
208
		ClickHandler clicAjoutProposition = new ClickHandler() {
209
			@Override
210
			public void onClick(ClickEvent event) {
211
				fenetreOverlaySimplePresenteur = new FenetreOverlaySimplePresenteur(new FenetreOverlayDefilanteVue());
212
				fenetreOverlaySimplePresenteur.ouvrirFenetreModale(new FormulairePropositionPresenteur(new FormulairePropositionVue(), new PropositionDeterminationServiceConcret()));
213
			}
214
		};
215
		vue.getBoutonAjoutProposition().addClickHandler(clicAjoutProposition);
216
		vue.getBoutonAjoutPropositionBas().addClickHandler(clicAjoutProposition);
217
 
218
		ClickHandler clicAjoutCommentaire = new ClickHandler() {
219
			@Override
220
			public void onClick(ClickEvent event) {
221
				FormulaireCommentairePresenteur commentairePresenteur = new FormulaireCommentairePresenteur(cache.getObservationCourante(), new CommentaireServiceConcret(), new FormulaireCommentaireVue());
222
				fenetreOverlaySimplePresenteur = new FenetreOverlaySimplePresenteur(new FenetreOverlayDefilanteVue());
223
				fenetreOverlaySimplePresenteur.ouvrirFenetreModale(commentairePresenteur);
224
			}
225
		};
226
		vue.getBoutonAjoutCommentaire().addClickHandler(clicAjoutCommentaire);
227
		vue.getBoutonAjoutCommentaireBas().addClickHandler(clicAjoutCommentaire);
228
 
229
		BusEvenementiel.getInstance().addHandler(EvenementAjoutDetermination.TYPE, new GestionnaireEvenementAjoutDetermination() {
230
			@Override
231
			public void onAjoutDetermination(EvenementAjoutDetermination event) {
232
				if (fenetreOverlaySimplePresenteur != null && fenetreOverlaySimplePresenteur.fenetreModaleEstOuverte()) {
233
					fenetreOverlaySimplePresenteur.fermerFenetreModale();
234
				}
235
			}
236
		});
237
 
238
		BusEvenementiel.getInstance().addHandler(EvenementAjoutCommentaire.TYPE, new GestionnaireEvenementAjoutCommentaire() {
239
 
240
			@Override
241
			public void onAjoutCommentaire(EvenementAjoutCommentaire event) {
242
				if (fenetreOverlaySimplePresenteur != null && fenetreOverlaySimplePresenteur.fenetreModaleEstOuverte()) {
243
					fenetreOverlaySimplePresenteur.fermerFenetreModale();
244
				}
245
			}
246
		});
247
 
248
		BusEvenementiel.getInstance().addHandler(EvenementChangementImageValidation.TYPE, new GestionnaireEvenementChangementImageValidation() {
249
 
250
			@Override
251
			public void onChangementImage(EvenementChangementImageValidation event) {
252
				vue.getDetailImageObservation().clear();
253
				new ObservationImagesPresenteur(new ObservationImagesVue(), cache.getObservationCourante(), CacheClient.getInstance().getImageCourante(), ConstantesNavigation.PAGE_VALIDATION_PICTOFLORA).go(vue.getDetailImageObservation());
254
			}
255
		});
256
 
257
 
258
		vue.getLienOuvrages().addClickHandler(new ClickHandler() {
259
 
260
			@Override
261
			public void onClick(ClickEvent event) {
262
				Config config = new Config();
263
				Window.open(config.getUrl("ouvragesFlore"), "Flores numérisées", null);
264
			}
265
		});
266
 
267
		vue.getLienBonnier().addClickHandler(new ClickHandler() {
268
 
269
			@Override
270
			public void onClick(ClickEvent event) {
271
				Config config = new Config();
272
				Window.open(config.getUrl("bonnierPda"), "Flore Bonnier PDA", null);
273
			}
274
		});
275
 
276
		vue.getLienCles().addClickHandler(new ClickHandler() {
277
 
278
			@Override
279
			public void onClick(ClickEvent event) {
280
				Config config = new Config();
281
				Window.open(config.getUrl("clesDetermination"), "Clés de determination", null);
282
			}
283
		});
284
 
285
		vue.getLienEflore().addClickHandler(new ClickHandler() {
286
 
287
			@Override
288
			public void onClick(ClickEvent event) {
289
				Config config = new Config();
290
				Window.open(config.getUrl("eflore"), "eFlore", null);
291
			}
292
		});
1257 aurelien 293
 
294
		vue.getBoutonValidationTaxon().addClickHandler(new ClickHandler() {
295
 
296
			@Override
297
			public void onClick(ClickEvent event) {
298
				if(Window.confirm(I18n.getVocabulary().confirmationValidationDetermination())) {
299
					validerPropositionPlusPopulaire();
300
				}
301
			}
302
		});
1196 gduche 303
	}
1257 aurelien 304
 
305
	private void validerPropositionPlusPopulaire() {
306
		PropositionDeterminationServiceConcret propositionService = new PropositionDeterminationServiceConcret();
307
		propositionService.validerProposition(propositionPlusPopulaire, new ValidationPropositionCallback() {
308
			@Override
309
			public void surRetour(String objetRetour) {
310
				String observationId = URLUtils.getURLSpecialParameterValue();
311
				observationService.getObservation(observationId, new ObservationsCallback() {
312
 
313
					@Override
314
					public void surRetour(ObservationServiceResultat objetRetour) {
315
						vue.viderMetadonnees();
316
						new MetadonneesPresenteur(new MetadonneesEnLigneVue(), cache.getObservationCourante(), ModeRecherche.MODE_OBSERVATION, false).go(vue.getMetadonnees());
317
						calculerEtAfficherVoteDeterminationPlusPopulaire();
318
					}
319
 
320
					@Override
321
					public void surErreur(String messageErreur) {
322
						Window.alert(messageErreur);
323
					}
324
				});
325
			}
326
		});
327
	}
1196 gduche 328
}