Subversion Repositories eFlore/Applications.del

Rev

Rev 1208 | Rev 1314 | 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;
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;
37
import org.tela_botanica.del.client.navigation.evenement.changementimagevalidation.EvenementChangementImageValidation;
38
import org.tela_botanica.del.client.navigation.evenement.changementimagevalidation.GestionnaireEvenementChangementImageValidation;
1257 aurelien 39
import org.tela_botanica.del.client.navigation.evenement.validationobservation.EvenementValidation;
40
import org.tela_botanica.del.client.navigation.evenement.validationobservationpictoflora.EvenementValidationPictoflora;
1196 gduche 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
 
127
		observationService.getObservation(observationId, new ObservationsCallback() {
128
 
129
			@Override
130
			public void surRetour(ObservationServiceResultat objetRetour) {
131
				afficherRss(cache.getObservationCourante());
132
				// trouve l'image courante si elle n'est pas deja en cache
133
				List<Image> listeImages = cache.getObservationCourante().getImages();
134
				if (listeImages.size() > 0) {
135
					CacheClient.getInstance().setImageCourante(listeImages.get(0));
136
				} else {
137
					CacheClient.getInstance().setImageCourante(null);
138
				}
139
 
140
				new MetadonneesPresenteur(new MetadonneesEnLigneVue(), cache.getObservationCourante(), ModeRecherche.MODE_OBSERVATION, false).go(vue.getMetadonnees());
141
				new ObservationImagesPresenteur(new ObservationImagesVue(), cache.getObservationCourante(), CacheClient.getInstance().getImageCourante(), ConstantesNavigation.PAGE_VALIDATION_PICTOFLORA).go(vue.getDetailImageObservation());
142
				new ForumPresenteur(new ForumVue()).go(vue.getForum());
143
				new FormulaireRechercheEflorePresenteur().go(vue.getFormulaireRechercheEflore());
144
 
145
				calculerEtAfficherVoteDeterminationPlusPopulaire();
146
				composite.add(vue.asWidget());
147
 
148
			}
149
 
150
			@Override
151
			public void surErreur(String messageErreur) {
152
				Window.alert(messageErreur);
153
			}
154
		});
155
		gererEvenements();
156
	}
157
 
158
	public void afficherRss(Observation observation) {
159
		new RssPresenteur(new RssVue(), observation, "Suivre cette observation").go(vue.getZoneRss());
160
	}
161
 
162
 
163
	private void calculerEtAfficherVoteDeterminationPlusPopulaire() {
164
 
165
		Observation observation = cache.getObservationCourante();
166
		String nomTaxon = observation.getNomRetenu();
167
 
168
		List<MoyenneVote> votesOrdonnes = CalculVoteDeterminationService.calculerVoteDeterminationPlusPopulaire(cache.getObservationCourante().getPropositionDeterminations());
169
		if (votesOrdonnes.size() > 0) {
170
			nomTaxon = votesOrdonnes.get(0).getIntituleAssocie();
171
		}
1257 aurelien 172
 
173
		propositionPlusPopulaire = votesOrdonnes.get(0).getPropositionAssociee();
174
		boolean estPropositionInitiale = votesOrdonnes.get(0).getPropositionAssociee().estPropositionInitiale();
175
		Utilisateur utilisateur = CacheClient.getInstance().getUtilisateur();
176
		boolean estAuteurObservation = utilisateur.estIdentifie() && utilisateur.getId().equals(cache.getObservationCourante().getIdAuteur());
177
		if(!estAuteurObservation || estPropositionInitiale || nomTaxon.equals(observation.getNomRetenu())) {
178
			vue.cacherBoutonValidationTaxon();
179
		} else {
180
			vue.afficherBoutonValidationTaxon();
181
		}
1196 gduche 182
 
183
		vue.afficherNomTaxonProbable(nomTaxon);
184
	}
185
 
186
	public void gererEvenements() {
187
 
188
		BusEvenementiel.getInstance().addHandler(EvenementVoteDetermination.TYPE, new GestionnaireEvenementVoteDetermination() {
189
			@Override
190
			public void onVoteDetermination(VoteDetermination event) {
191
				calculerEtAfficherVoteDeterminationPlusPopulaire();
192
			}
193
		});
194
 
195
		ClickHandler clicAjoutProposition = new ClickHandler() {
196
			@Override
197
			public void onClick(ClickEvent event) {
198
				fenetreOverlaySimplePresenteur = new FenetreOverlaySimplePresenteur(new FenetreOverlayDefilanteVue());
199
				fenetreOverlaySimplePresenteur.ouvrirFenetreModale(new FormulairePropositionPresenteur(new FormulairePropositionVue(), new PropositionDeterminationServiceConcret()));
200
			}
201
		};
202
		vue.getBoutonAjoutProposition().addClickHandler(clicAjoutProposition);
203
		vue.getBoutonAjoutPropositionBas().addClickHandler(clicAjoutProposition);
204
 
205
		ClickHandler clicAjoutCommentaire = new ClickHandler() {
206
			@Override
207
			public void onClick(ClickEvent event) {
208
				FormulaireCommentairePresenteur commentairePresenteur = new FormulaireCommentairePresenteur(cache.getObservationCourante(), new CommentaireServiceConcret(), new FormulaireCommentaireVue());
209
				fenetreOverlaySimplePresenteur = new FenetreOverlaySimplePresenteur(new FenetreOverlayDefilanteVue());
210
				fenetreOverlaySimplePresenteur.ouvrirFenetreModale(commentairePresenteur);
211
			}
212
		};
213
		vue.getBoutonAjoutCommentaire().addClickHandler(clicAjoutCommentaire);
214
		vue.getBoutonAjoutCommentaireBas().addClickHandler(clicAjoutCommentaire);
215
 
216
		BusEvenementiel.getInstance().addHandler(EvenementAjoutDetermination.TYPE, new GestionnaireEvenementAjoutDetermination() {
217
			@Override
218
			public void onAjoutDetermination(EvenementAjoutDetermination event) {
219
				if (fenetreOverlaySimplePresenteur != null && fenetreOverlaySimplePresenteur.fenetreModaleEstOuverte()) {
220
					fenetreOverlaySimplePresenteur.fermerFenetreModale();
221
				}
222
			}
223
		});
224
 
225
		BusEvenementiel.getInstance().addHandler(EvenementAjoutCommentaire.TYPE, new GestionnaireEvenementAjoutCommentaire() {
226
 
227
			@Override
228
			public void onAjoutCommentaire(EvenementAjoutCommentaire event) {
229
				if (fenetreOverlaySimplePresenteur != null && fenetreOverlaySimplePresenteur.fenetreModaleEstOuverte()) {
230
					fenetreOverlaySimplePresenteur.fermerFenetreModale();
231
				}
232
			}
233
		});
234
 
235
		BusEvenementiel.getInstance().addHandler(EvenementChangementImageValidation.TYPE, new GestionnaireEvenementChangementImageValidation() {
236
 
237
			@Override
238
			public void onChangementImage(EvenementChangementImageValidation event) {
239
				vue.getDetailImageObservation().clear();
240
				new ObservationImagesPresenteur(new ObservationImagesVue(), cache.getObservationCourante(), CacheClient.getInstance().getImageCourante(), ConstantesNavigation.PAGE_VALIDATION_PICTOFLORA).go(vue.getDetailImageObservation());
241
			}
242
		});
243
 
244
 
245
		vue.getLienOuvrages().addClickHandler(new ClickHandler() {
246
 
247
			@Override
248
			public void onClick(ClickEvent event) {
249
				Config config = new Config();
250
				Window.open(config.getUrl("ouvragesFlore"), "Flores numérisées", null);
251
			}
252
		});
253
 
254
		vue.getLienBonnier().addClickHandler(new ClickHandler() {
255
 
256
			@Override
257
			public void onClick(ClickEvent event) {
258
				Config config = new Config();
259
				Window.open(config.getUrl("bonnierPda"), "Flore Bonnier PDA", null);
260
			}
261
		});
262
 
263
		vue.getLienCles().addClickHandler(new ClickHandler() {
264
 
265
			@Override
266
			public void onClick(ClickEvent event) {
267
				Config config = new Config();
268
				Window.open(config.getUrl("clesDetermination"), "Clés de determination", null);
269
			}
270
		});
271
 
272
		vue.getLienEflore().addClickHandler(new ClickHandler() {
273
 
274
			@Override
275
			public void onClick(ClickEvent event) {
276
				Config config = new Config();
277
				Window.open(config.getUrl("eflore"), "eFlore", null);
278
			}
279
		});
1257 aurelien 280
 
281
		vue.getBoutonValidationTaxon().addClickHandler(new ClickHandler() {
282
 
283
			@Override
284
			public void onClick(ClickEvent event) {
285
				if(Window.confirm(I18n.getVocabulary().confirmationValidationDetermination())) {
286
					validerPropositionPlusPopulaire();
287
				}
288
			}
289
		});
1196 gduche 290
	}
1257 aurelien 291
 
292
	private void validerPropositionPlusPopulaire() {
293
		PropositionDeterminationServiceConcret propositionService = new PropositionDeterminationServiceConcret();
294
		propositionService.validerProposition(propositionPlusPopulaire, new ValidationPropositionCallback() {
295
			@Override
296
			public void surRetour(String objetRetour) {
297
				String observationId = URLUtils.getURLSpecialParameterValue();
298
				observationService.getObservation(observationId, new ObservationsCallback() {
299
 
300
					@Override
301
					public void surRetour(ObservationServiceResultat objetRetour) {
302
						vue.viderMetadonnees();
303
						new MetadonneesPresenteur(new MetadonneesEnLigneVue(), cache.getObservationCourante(), ModeRecherche.MODE_OBSERVATION, false).go(vue.getMetadonnees());
304
						calculerEtAfficherVoteDeterminationPlusPopulaire();
305
					}
306
 
307
					@Override
308
					public void surErreur(String messageErreur) {
309
						Window.alert(messageErreur);
310
					}
311
				});
312
			}
313
		});
314
	}
1196 gduche 315
}