Subversion Repositories eFlore/Applications.del

Rev

Rev 1199 | Rev 1257 | 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();
90
	}
91
 
92
	private Vue vue;
93
	private FenetreOverlaySimplePresenteur fenetreOverlaySimplePresenteur;
94
 
95
	// Déclaration des services à utiliser
96
	private ObservationService observationService;
97
 
98
	private CacheClient cache = CacheClient.getInstance();
99
 
100
	public IdentiplanteDeterminationPresenteur(Vue vue, ObservationService observationService) {
101
		this.vue = vue;
102
		this.observationService = observationService;
103
	}
104
 
105
	public void go(final HasWidgets composite) {
106
 
107
		// TODO afficher une icone de chargement si le chargement devient trop
108
		// long
109
		// car tout l'écran est asynchrone ici
110
		String observationId = URLUtils.getURLSpecialParameterValue();
111
 
112
		observationService.getObservation(observationId, new ObservationsCallback() {
113
 
114
			@Override
115
			public void surRetour(ObservationServiceResultat objetRetour) {
116
				afficherRss(cache.getObservationCourante());
117
				// trouve l'image courante si elle n'est pas deja en cache
118
				List<Image> listeImages = cache.getObservationCourante().getImages();
119
				if (listeImages.size() > 0) {
120
					CacheClient.getInstance().setImageCourante(listeImages.get(0));
121
				} else {
122
					CacheClient.getInstance().setImageCourante(null);
123
				}
124
 
125
				new MetadonneesPresenteur(new MetadonneesEnLigneVue(), cache.getObservationCourante(), ModeRecherche.MODE_OBSERVATION, false).go(vue.getMetadonnees());
126
				new ObservationImagesPresenteur(new ObservationImagesVue(), cache.getObservationCourante(), CacheClient.getInstance().getImageCourante(), ConstantesNavigation.PAGE_VALIDATION_PICTOFLORA).go(vue.getDetailImageObservation());
127
				new ForumPresenteur(new ForumVue()).go(vue.getForum());
128
				new FormulaireRechercheEflorePresenteur().go(vue.getFormulaireRechercheEflore());
129
 
130
				calculerEtAfficherVoteDeterminationPlusPopulaire();
131
				composite.add(vue.asWidget());
132
 
133
			}
134
 
135
			@Override
136
			public void surErreur(String messageErreur) {
137
				Window.alert(messageErreur);
138
			}
139
		});
140
		gererEvenements();
141
	}
142
 
143
	public void afficherRss(Observation observation) {
144
		new RssPresenteur(new RssVue(), observation, "Suivre cette observation").go(vue.getZoneRss());
145
	}
146
 
147
 
148
	private void calculerEtAfficherVoteDeterminationPlusPopulaire() {
149
 
150
		Observation observation = cache.getObservationCourante();
151
		String nomTaxon = observation.getNomRetenu();
152
 
153
		List<MoyenneVote> votesOrdonnes = CalculVoteDeterminationService.calculerVoteDeterminationPlusPopulaire(cache.getObservationCourante().getPropositionDeterminations());
154
		if (votesOrdonnes.size() > 0) {
155
			nomTaxon = votesOrdonnes.get(0).getIntituleAssocie();
156
		}
157
 
158
		vue.afficherNomTaxonProbable(nomTaxon);
159
	}
160
 
161
	public void gererEvenements() {
162
 
163
		BusEvenementiel.getInstance().addHandler(EvenementVoteDetermination.TYPE, new GestionnaireEvenementVoteDetermination() {
164
			@Override
165
			public void onVoteDetermination(VoteDetermination event) {
166
				calculerEtAfficherVoteDeterminationPlusPopulaire();
167
			}
168
		});
169
 
170
		ClickHandler clicAjoutProposition = new ClickHandler() {
171
			@Override
172
			public void onClick(ClickEvent event) {
173
				fenetreOverlaySimplePresenteur = new FenetreOverlaySimplePresenteur(new FenetreOverlayDefilanteVue());
174
				fenetreOverlaySimplePresenteur.ouvrirFenetreModale(new FormulairePropositionPresenteur(new FormulairePropositionVue(), new PropositionDeterminationServiceConcret()));
175
			}
176
		};
177
		vue.getBoutonAjoutProposition().addClickHandler(clicAjoutProposition);
178
		vue.getBoutonAjoutPropositionBas().addClickHandler(clicAjoutProposition);
179
 
180
		ClickHandler clicAjoutCommentaire = new ClickHandler() {
181
			@Override
182
			public void onClick(ClickEvent event) {
183
				FormulaireCommentairePresenteur commentairePresenteur = new FormulaireCommentairePresenteur(cache.getObservationCourante(), new CommentaireServiceConcret(), new FormulaireCommentaireVue());
184
				fenetreOverlaySimplePresenteur = new FenetreOverlaySimplePresenteur(new FenetreOverlayDefilanteVue());
185
				fenetreOverlaySimplePresenteur.ouvrirFenetreModale(commentairePresenteur);
186
			}
187
		};
188
		vue.getBoutonAjoutCommentaire().addClickHandler(clicAjoutCommentaire);
189
		vue.getBoutonAjoutCommentaireBas().addClickHandler(clicAjoutCommentaire);
190
 
191
		BusEvenementiel.getInstance().addHandler(EvenementAjoutDetermination.TYPE, new GestionnaireEvenementAjoutDetermination() {
192
			@Override
193
			public void onAjoutDetermination(EvenementAjoutDetermination event) {
194
				if (fenetreOverlaySimplePresenteur != null && fenetreOverlaySimplePresenteur.fenetreModaleEstOuverte()) {
195
					fenetreOverlaySimplePresenteur.fermerFenetreModale();
196
				}
197
			}
198
		});
199
 
200
		BusEvenementiel.getInstance().addHandler(EvenementAjoutCommentaire.TYPE, new GestionnaireEvenementAjoutCommentaire() {
201
 
202
			@Override
203
			public void onAjoutCommentaire(EvenementAjoutCommentaire event) {
204
				if (fenetreOverlaySimplePresenteur != null && fenetreOverlaySimplePresenteur.fenetreModaleEstOuverte()) {
205
					fenetreOverlaySimplePresenteur.fermerFenetreModale();
206
				}
207
			}
208
		});
209
 
210
		BusEvenementiel.getInstance().addHandler(EvenementChangementImageValidation.TYPE, new GestionnaireEvenementChangementImageValidation() {
211
 
212
			@Override
213
			public void onChangementImage(EvenementChangementImageValidation event) {
214
				vue.getDetailImageObservation().clear();
215
				new ObservationImagesPresenteur(new ObservationImagesVue(), cache.getObservationCourante(), CacheClient.getInstance().getImageCourante(), ConstantesNavigation.PAGE_VALIDATION_PICTOFLORA).go(vue.getDetailImageObservation());
216
			}
217
		});
218
 
219
 
220
		vue.getLienOuvrages().addClickHandler(new ClickHandler() {
221
 
222
			@Override
223
			public void onClick(ClickEvent event) {
224
				Config config = new Config();
225
				Window.open(config.getUrl("ouvragesFlore"), "Flores numérisées", null);
226
			}
227
		});
228
 
229
		vue.getLienBonnier().addClickHandler(new ClickHandler() {
230
 
231
			@Override
232
			public void onClick(ClickEvent event) {
233
				Config config = new Config();
234
				Window.open(config.getUrl("bonnierPda"), "Flore Bonnier PDA", null);
235
			}
236
		});
237
 
238
		vue.getLienCles().addClickHandler(new ClickHandler() {
239
 
240
			@Override
241
			public void onClick(ClickEvent event) {
242
				Config config = new Config();
243
				Window.open(config.getUrl("clesDetermination"), "Clés de determination", null);
244
			}
245
		});
246
 
247
		vue.getLienEflore().addClickHandler(new ClickHandler() {
248
 
249
			@Override
250
			public void onClick(ClickEvent event) {
251
				Config config = new Config();
252
				Window.open(config.getUrl("eflore"), "eFlore", null);
253
			}
254
		});
255
	}
256
}