Subversion Repositories eFlore/Applications.del

Rev

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