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.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;
23
import org.tela_botanica.del.client.modeles.Image;
24
import org.tela_botanica.del.client.modeles.ModeRecherche;
25
import org.tela_botanica.del.client.modeles.MoyenneVote;
26
import org.tela_botanica.del.client.modeles.Observation;
27
import org.tela_botanica.del.client.modeles.ObservationServiceResultat;
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;
34
import org.tela_botanica.del.client.navigation.evenement.changementimagevalidation.EvenementChangementImageValidation;
35
import org.tela_botanica.del.client.navigation.evenement.changementimagevalidation.GestionnaireEvenementChangementImageValidation;
36
import org.tela_botanica.del.client.navigation.evenement.voteDetermination.EvenementVoteDetermination;
37
import org.tela_botanica.del.client.navigation.evenement.voteDetermination.GestionnaireEvenementVoteDetermination;
38
import org.tela_botanica.del.client.services.CalculVoteDeterminationService;
39
import org.tela_botanica.del.client.services.rest.CommentaireServiceConcret;
40
import org.tela_botanica.del.client.services.rest.ObservationService;
41
import org.tela_botanica.del.client.services.rest.PropositionDeterminationServiceConcret;
42
import org.tela_botanica.del.client.services.rest.async.ObservationsCallback;
43
import org.tela_botanica.del.client.utils.URLUtils;
44
import org.tela_botanica.del.client.composants.formulairerechercheeflore.FormulaireRechercheEflorePresenteur;
45
import org.tela_botanica.del.client.composants.forum.ForumPresenteur;
46
import org.tela_botanica.del.client.composants.forum.ForumVue;
47
 
48
import com.google.gwt.event.dom.client.ClickEvent;
49
import com.google.gwt.event.dom.client.ClickHandler;
50
import com.google.gwt.event.dom.client.HasClickHandlers;
51
import com.google.gwt.user.client.Window;
52
import com.google.gwt.user.client.ui.Button;
53
import com.google.gwt.user.client.ui.HasWidgets;
54
import com.google.gwt.user.client.ui.IsWidget;
55
import com.google.gwt.user.client.ui.Panel;
56
 
57
public class IdentiplanteDeterminationPresenteur extends Presenteur {
58
 
59
	/**
60
	 * Vue de l'interface de détermination
61
	 * */
62
	public interface Vue extends IsWidget {
63
		public Panel getForum();
64
 
65
		public Panel getDetailImageObservation();
66
 
67
		public Panel getFormulaireRechercheEflore();
68
 
69
		public Button getBoutonAjoutProposition();
70
 
71
		public Button getBoutonAjoutCommentaire();
72
 
73
		public Button getBoutonAjoutPropositionBas();
74
 
75
		public Button getBoutonAjoutCommentaireBas();
76
 
77
		public HasWidgets getMetadonnees();
78
 
79
		public void afficherNomTaxonProbable(String nomTaxon);
80
 
81
		public HasClickHandlers getLienOuvrages();
82
 
83
		public HasClickHandlers getLienBonnier();
84
 
85
		public HasClickHandlers getLienCles();
86
 
87
		public HasClickHandlers getLienEflore();
88
 
89
		public HasWidgets getZoneRss();
1199 gduche 90
 
91
		public HasWidgets getZonePartageUrl();
1196 gduche 92
	}
93
 
94
	private Vue vue;
95
	private FenetreOverlaySimplePresenteur fenetreOverlaySimplePresenteur;
96
 
97
	// Déclaration des services à utiliser
98
	private ObservationService observationService;
99
 
100
	private CacheClient cache = CacheClient.getInstance();
101
 
102
	public IdentiplanteDeterminationPresenteur(Vue vue, ObservationService observationService) {
103
		this.vue = vue;
104
		this.observationService = observationService;
1199 gduche 105
		PartageUrlPresenteur presenteurPartage = new PartageUrlPresenteur(new PartageUrlVue());
106
		presenteurPartage.go(vue.getZonePartageUrl());
1196 gduche 107
	}
108
 
109
	public void go(final HasWidgets composite) {
110
 
111
		// TODO afficher une icone de chargement si le chargement devient trop
112
		// long
113
		// car tout l'écran est asynchrone ici
114
		String observationId = URLUtils.getURLSpecialParameterValue();
115
 
116
		observationService.getObservation(observationId, new ObservationsCallback() {
117
 
118
			@Override
119
			public void surRetour(ObservationServiceResultat objetRetour) {
120
				afficherRss(cache.getObservationCourante());
121
				// trouve l'image courante si elle n'est pas deja en cache
122
				List<Image> listeImages = cache.getObservationCourante().getImages();
123
				if (listeImages.size() > 0) {
124
					CacheClient.getInstance().setImageCourante(listeImages.get(0));
125
				} else {
126
					CacheClient.getInstance().setImageCourante(null);
127
				}
128
 
129
				new MetadonneesPresenteur(new MetadonneesEnLigneVue(), cache.getObservationCourante(), ModeRecherche.MODE_OBSERVATION, false).go(vue.getMetadonnees());
130
				new ObservationImagesPresenteur(new ObservationImagesVue(), cache.getObservationCourante(), CacheClient.getInstance().getImageCourante(), ConstantesNavigation.PAGE_VALIDATION_PICTOFLORA).go(vue.getDetailImageObservation());
131
				new ForumPresenteur(new ForumVue()).go(vue.getForum());
132
				new FormulaireRechercheEflorePresenteur().go(vue.getFormulaireRechercheEflore());
133
 
134
				calculerEtAfficherVoteDeterminationPlusPopulaire();
135
				composite.add(vue.asWidget());
136
 
137
			}
138
 
139
			@Override
140
			public void surErreur(String messageErreur) {
141
				Window.alert(messageErreur);
142
			}
143
		});
144
		gererEvenements();
145
	}
146
 
147
	public void afficherRss(Observation observation) {
148
		new RssPresenteur(new RssVue(), observation, "Suivre cette observation").go(vue.getZoneRss());
149
	}
150
 
151
 
152
	private void calculerEtAfficherVoteDeterminationPlusPopulaire() {
153
 
154
		Observation observation = cache.getObservationCourante();
155
		String nomTaxon = observation.getNomRetenu();
156
 
157
		List<MoyenneVote> votesOrdonnes = CalculVoteDeterminationService.calculerVoteDeterminationPlusPopulaire(cache.getObservationCourante().getPropositionDeterminations());
158
		if (votesOrdonnes.size() > 0) {
159
			nomTaxon = votesOrdonnes.get(0).getIntituleAssocie();
160
		}
161
 
162
		vue.afficherNomTaxonProbable(nomTaxon);
163
	}
164
 
165
	public void gererEvenements() {
166
 
167
		BusEvenementiel.getInstance().addHandler(EvenementVoteDetermination.TYPE, new GestionnaireEvenementVoteDetermination() {
168
			@Override
169
			public void onVoteDetermination(VoteDetermination event) {
170
				calculerEtAfficherVoteDeterminationPlusPopulaire();
171
			}
172
		});
173
 
174
		ClickHandler clicAjoutProposition = new ClickHandler() {
175
			@Override
176
			public void onClick(ClickEvent event) {
177
				fenetreOverlaySimplePresenteur = new FenetreOverlaySimplePresenteur(new FenetreOverlayDefilanteVue());
178
				fenetreOverlaySimplePresenteur.ouvrirFenetreModale(new FormulairePropositionPresenteur(new FormulairePropositionVue(), new PropositionDeterminationServiceConcret()));
179
			}
180
		};
181
		vue.getBoutonAjoutProposition().addClickHandler(clicAjoutProposition);
182
		vue.getBoutonAjoutPropositionBas().addClickHandler(clicAjoutProposition);
183
 
184
		ClickHandler clicAjoutCommentaire = new ClickHandler() {
185
			@Override
186
			public void onClick(ClickEvent event) {
187
				FormulaireCommentairePresenteur commentairePresenteur = new FormulaireCommentairePresenteur(cache.getObservationCourante(), new CommentaireServiceConcret(), new FormulaireCommentaireVue());
188
				fenetreOverlaySimplePresenteur = new FenetreOverlaySimplePresenteur(new FenetreOverlayDefilanteVue());
189
				fenetreOverlaySimplePresenteur.ouvrirFenetreModale(commentairePresenteur);
190
			}
191
		};
192
		vue.getBoutonAjoutCommentaire().addClickHandler(clicAjoutCommentaire);
193
		vue.getBoutonAjoutCommentaireBas().addClickHandler(clicAjoutCommentaire);
194
 
195
		BusEvenementiel.getInstance().addHandler(EvenementAjoutDetermination.TYPE, new GestionnaireEvenementAjoutDetermination() {
196
			@Override
197
			public void onAjoutDetermination(EvenementAjoutDetermination event) {
198
				if (fenetreOverlaySimplePresenteur != null && fenetreOverlaySimplePresenteur.fenetreModaleEstOuverte()) {
199
					fenetreOverlaySimplePresenteur.fermerFenetreModale();
200
				}
201
			}
202
		});
203
 
204
		BusEvenementiel.getInstance().addHandler(EvenementAjoutCommentaire.TYPE, new GestionnaireEvenementAjoutCommentaire() {
205
 
206
			@Override
207
			public void onAjoutCommentaire(EvenementAjoutCommentaire event) {
208
				if (fenetreOverlaySimplePresenteur != null && fenetreOverlaySimplePresenteur.fenetreModaleEstOuverte()) {
209
					fenetreOverlaySimplePresenteur.fermerFenetreModale();
210
				}
211
			}
212
		});
213
 
214
		BusEvenementiel.getInstance().addHandler(EvenementChangementImageValidation.TYPE, new GestionnaireEvenementChangementImageValidation() {
215
 
216
			@Override
217
			public void onChangementImage(EvenementChangementImageValidation event) {
218
				vue.getDetailImageObservation().clear();
219
				new ObservationImagesPresenteur(new ObservationImagesVue(), cache.getObservationCourante(), CacheClient.getInstance().getImageCourante(), ConstantesNavigation.PAGE_VALIDATION_PICTOFLORA).go(vue.getDetailImageObservation());
220
			}
221
		});
222
 
223
 
224
		vue.getLienOuvrages().addClickHandler(new ClickHandler() {
225
 
226
			@Override
227
			public void onClick(ClickEvent event) {
228
				Config config = new Config();
229
				Window.open(config.getUrl("ouvragesFlore"), "Flores numérisées", null);
230
			}
231
		});
232
 
233
		vue.getLienBonnier().addClickHandler(new ClickHandler() {
234
 
235
			@Override
236
			public void onClick(ClickEvent event) {
237
				Config config = new Config();
238
				Window.open(config.getUrl("bonnierPda"), "Flore Bonnier PDA", null);
239
			}
240
		});
241
 
242
		vue.getLienCles().addClickHandler(new ClickHandler() {
243
 
244
			@Override
245
			public void onClick(ClickEvent event) {
246
				Config config = new Config();
247
				Window.open(config.getUrl("clesDetermination"), "Clés de determination", null);
248
			}
249
		});
250
 
251
		vue.getLienEflore().addClickHandler(new ClickHandler() {
252
 
253
			@Override
254
			public void onClick(ClickEvent event) {
255
				Config config = new Config();
256
				Window.open(config.getUrl("eflore"), "eFlore", null);
257
			}
258
		});
259
	}
260
}