Subversion Repositories eFlore/Applications.del

Rev

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