Subversion Repositories eFlore/Applications.del

Rev

Rev 1834 | 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;
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;
1257 aurelien 20
import org.tela_botanica.del.client.i18n.I18n;
1196 gduche 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;
1257 aurelien 26
import org.tela_botanica.del.client.modeles.PropositionDetermination;
27
import org.tela_botanica.del.client.modeles.Utilisateur;
1196 gduche 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;
1314 aurelien 34
import org.tela_botanica.del.client.navigation.evenement.changementEtatUtilisateur.EvenementChangementEtatUtilisateur;
35
import org.tela_botanica.del.client.navigation.evenement.changementEtatUtilisateur.GestionnaireEvenementChangementEtatUtilisateur;
1196 gduche 36
import org.tela_botanica.del.client.navigation.evenement.changementimagevalidation.EvenementChangementImageValidation;
37
import org.tela_botanica.del.client.navigation.evenement.changementimagevalidation.GestionnaireEvenementChangementImageValidation;
1689 jpm 38
import org.tela_botanica.del.client.navigation.evenement.depublierObs.EvenementDepublierObs;
39
import org.tela_botanica.del.client.navigation.evenement.depublierObs.GestionnaireEvenementDepublierObs;
1830 aurelien 40
import org.tela_botanica.del.client.navigation.evenement.validationPropositionDetermination.EvenementValidationPropositionDetermination;
41
import org.tela_botanica.del.client.navigation.evenement.validationPropositionDetermination.GestionnaireEvenementValidationPropositionDetermination;
1196 gduche 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;
1689 jpm 48
import org.tela_botanica.del.client.services.rest.async.DepublicationObservationCallBack;
1196 gduche 49
import org.tela_botanica.del.client.services.rest.async.ObservationsCallback;
1257 aurelien 50
import org.tela_botanica.del.client.services.rest.async.ValidationPropositionCallback;
1775 aurelien 51
import org.tela_botanica.del.client.utils.ModerationUtils;
1196 gduche 52
import org.tela_botanica.del.client.utils.URLUtils;
1689 jpm 53
import org.tela_botanica.del.client.navigation.evenement.rechercheobservation.EvenementRechercheObservation;
1196 gduche 54
import org.tela_botanica.del.client.composants.formulairerechercheeflore.FormulaireRechercheEflorePresenteur;
55
import org.tela_botanica.del.client.composants.forum.ForumPresenteur;
56
import org.tela_botanica.del.client.composants.forum.ForumVue;
57
 
1689 jpm 58
import com.google.gwt.core.shared.GWT;
1196 gduche 59
import com.google.gwt.event.dom.client.ClickEvent;
60
import com.google.gwt.event.dom.client.ClickHandler;
61
import com.google.gwt.event.dom.client.HasClickHandlers;
62
import com.google.gwt.user.client.Window;
63
import com.google.gwt.user.client.ui.Button;
64
import com.google.gwt.user.client.ui.HasWidgets;
65
import com.google.gwt.user.client.ui.IsWidget;
66
import com.google.gwt.user.client.ui.Panel;
67
 
68
public class IdentiplanteDeterminationPresenteur extends Presenteur {
69
 
70
	/**
71
	 * Vue de l'interface de détermination
72
	 * */
73
	public interface Vue extends IsWidget {
1830 aurelien 74
		public HasWidgets getForum();
1196 gduche 75
 
1830 aurelien 76
		public HasWidgets getDetailImageObservation();
1196 gduche 77
 
1830 aurelien 78
		public HasWidgets getFormulaireRechercheEflore();
1196 gduche 79
 
1830 aurelien 80
		public HasClickHandlers getBoutonAjoutProposition();
1196 gduche 81
 
1830 aurelien 82
		public HasClickHandlers getBoutonAjoutCommentaire();
1196 gduche 83
 
1830 aurelien 84
		public HasClickHandlers getBoutonAjoutPropositionBas();
1196 gduche 85
 
1830 aurelien 86
		public HasClickHandlers getBoutonAjoutCommentaireBas();
1689 jpm 87
 
88
		public HasClickHandlers getBoutonDepublierObs();
1196 gduche 89
 
90
		public HasWidgets getMetadonnees();
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();
1257 aurelien 101
 
102
		public void viderMetadonnees();
1690 jpm 103
 
1830 aurelien 104
		public void viderForum();
105
 
1690 jpm 106
		void afficherZoneActionsObs();
107
 
108
		void cacherZoneActionsObs();
1196 gduche 109
	}
110
 
1689 jpm 111
	private Observation observation;
1196 gduche 112
	private Vue vue;
113
	private FenetreOverlaySimplePresenteur fenetreOverlaySimplePresenteur;
114
 
115
	// Déclaration des services à utiliser
116
	private ObservationService observationService;
117
 
118
	private CacheClient cache = CacheClient.getInstance();
119
 
120
	public IdentiplanteDeterminationPresenteur(Vue vue, ObservationService observationService) {
121
		this.vue = vue;
122
		this.observationService = observationService;
123
	}
124
 
125
	public void go(final HasWidgets composite) {
126
		// TODO afficher une icone de chargement si le chargement devient trop
127
		// long
128
		// car tout l'écran est asynchrone ici
129
		String observationId = URLUtils.getURLSpecialParameterValue();
130
		observationService.getObservation(observationId, new ObservationsCallback() {
131
			@Override
132
			public void surRetour(ObservationServiceResultat objetRetour) {
1689 jpm 133
				observation = cache.getObservationCourante();
1196 gduche 134
				afficherRss(cache.getObservationCourante());
135
				// trouve l'image courante si elle n'est pas deja en cache
136
				List<Image> listeImages = cache.getObservationCourante().getImages();
137
				if (listeImages.size() > 0) {
138
					CacheClient.getInstance().setImageCourante(listeImages.get(0));
139
				} else {
140
					CacheClient.getInstance().setImageCourante(null);
141
				}
1314 aurelien 142
 
1196 gduche 143
				new MetadonneesPresenteur(new MetadonneesEnLigneVue(), cache.getObservationCourante(), ModeRecherche.MODE_OBSERVATION, false).go(vue.getMetadonnees());
1553 jpm 144
				new ObservationImagesPresenteur(new ObservationImagesVue(), cache.getObservationCourante(), CacheClient.getInstance().getImageCourante()).go(vue.getDetailImageObservation());
1196 gduche 145
				new ForumPresenteur(new ForumVue()).go(vue.getForum());
146
				new FormulaireRechercheEflorePresenteur().go(vue.getFormulaireRechercheEflore());
147
 
1314 aurelien 148
				composite.add(vue.asWidget());
1196 gduche 149
			}
150
 
151
			@Override
152
			public void surErreur(String messageErreur) {
1542 mathias 153
				Window.alert(messageErreur + " - l'identifiant d'observation est incorrect; l'observation a peut-être été supprimée");
1196 gduche 154
			}
155
		});
1690 jpm 156
		afficherZoneActionsObs();
1196 gduche 157
		gererEvenements();
158
	}
159
 
160
	public void afficherRss(Observation observation) {
161
		new RssPresenteur(new RssVue(), observation, "Suivre cette observation").go(vue.getZoneRss());
162
	}
163
 
164
	public void gererEvenements() {
1314 aurelien 165
 
1196 gduche 166
		BusEvenementiel.getInstance().addHandler(EvenementAjoutDetermination.TYPE, new GestionnaireEvenementAjoutDetermination() {
167
			@Override
168
			public void onAjoutDetermination(EvenementAjoutDetermination event) {
169
				if (fenetreOverlaySimplePresenteur != null && fenetreOverlaySimplePresenteur.fenetreModaleEstOuverte()) {
170
					fenetreOverlaySimplePresenteur.fermerFenetreModale();
171
				}
172
			}
173
		});
174
 
175
		BusEvenementiel.getInstance().addHandler(EvenementAjoutCommentaire.TYPE, new GestionnaireEvenementAjoutCommentaire() {
176
			@Override
177
			public void onAjoutCommentaire(EvenementAjoutCommentaire event) {
178
				if (fenetreOverlaySimplePresenteur != null && fenetreOverlaySimplePresenteur.fenetreModaleEstOuverte()) {
179
					fenetreOverlaySimplePresenteur.fermerFenetreModale();
180
				}
181
			}
182
		});
183
 
184
		BusEvenementiel.getInstance().addHandler(EvenementChangementImageValidation.TYPE, new GestionnaireEvenementChangementImageValidation() {
185
			@Override
186
			public void onChangementImage(EvenementChangementImageValidation event) {
187
				vue.getDetailImageObservation().clear();
1553 jpm 188
				new ObservationImagesPresenteur(
189
					new ObservationImagesVue(),
190
					cache.getObservationCourante(),
191
					CacheClient.getInstance().getImageCourante()).go(vue.getDetailImageObservation());
1196 gduche 192
			}
193
		});
1689 jpm 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
 
1196 gduche 216
		vue.getLienOuvrages().addClickHandler(new ClickHandler() {
217
			@Override
218
			public void onClick(ClickEvent event) {
219
				Config config = new Config();
1687 mathias 220
				Window.open(config.getUrl("ouvragesFlore"), "Flores numérisées", config.getInfo("popupOptions"));
1196 gduche 221
			}
222
		});
223
 
224
		vue.getLienBonnier().addClickHandler(new ClickHandler() {
225
			@Override
226
			public void onClick(ClickEvent event) {
227
				Config config = new Config();
1687 mathias 228
				Window.open(config.getUrl("bonnierPda"), "Flore Bonnier PDA", config.getInfo("popupOptions"));
1196 gduche 229
			}
230
		});
231
 
232
		vue.getLienCles().addClickHandler(new ClickHandler() {
233
			@Override
234
			public void onClick(ClickEvent event) {
235
				Config config = new Config();
1687 mathias 236
				Window.open(config.getUrl("clesDetermination"), "Clés de determination", config.getInfo("popupOptions"));
1196 gduche 237
			}
238
		});
239
 
240
		vue.getLienEflore().addClickHandler(new ClickHandler() {
241
			@Override
242
			public void onClick(ClickEvent event) {
243
				Config config = new Config();
1687 mathias 244
				Window.open(config.getUrl("eflore"), "eFlore", config.getInfo("popupOptions"));
1196 gduche 245
			}
246
		});
1257 aurelien 247
 
1689 jpm 248
		vue.getBoutonDepublierObs().addClickHandler(new ClickHandler() {
249
			@Override
250
			public void onClick(ClickEvent event) {
251
				GWT.log("Lancer evnt : EvenementDepublierObs");
1690 jpm 252
				if (Window.confirm(I18n.getVocabulary().confirmationDepublicationObs())) {
253
					BusEvenementiel.getInstance().fireEvent(new EvenementDepublierObs(observation.getId()));
254
				}
1689 jpm 255
			}
256
		});
257
 
258
		BusEvenementiel.getInstance().addHandler(EvenementDepublierObs.TYPE, new GestionnaireEvenementDepublierObs() {
259
			@Override
260
			public void onDepublicationObs(EvenementDepublierObs event) {
261
				GWT.log("Attraper evnt : EvenementDepublierObs (obs:"+event.getIdObs()+")");
262
				if (event.getIdObs().equals(observation.getId())) {
1690 jpm 263
					depublierObs();
1689 jpm 264
				}
265
			}
266
		});
1690 jpm 267
 
268
		BusEvenementiel.getInstance().addHandler(EvenementChangementEtatUtilisateur.TYPE, new GestionnaireEvenementChangementEtatUtilisateur() {
269
			@Override
270
			public void onModificationEtatUtilisateur(EvenementChangementEtatUtilisateur evenementChangementEtatUtilisateur) {
271
				afficherZoneActionsObs();
272
			}
273
		});
1830 aurelien 274
 
275
		BusEvenementiel.getInstance().addHandler(EvenementValidationPropositionDetermination.TYPE, new GestionnaireEvenementValidationPropositionDetermination() {
276
 
1257 aurelien 277
			@Override
1830 aurelien 278
			public void onValidationPropositionDetermination(EvenementValidationPropositionDetermination event) {
1257 aurelien 279
				String observationId = URLUtils.getURLSpecialParameterValue();
280
				observationService.getObservation(observationId, new ObservationsCallback() {
281
 
282
					@Override
283
					public void surRetour(ObservationServiceResultat objetRetour) {
284
						vue.viderMetadonnees();
285
						new MetadonneesPresenteur(new MetadonneesEnLigneVue(), cache.getObservationCourante(), ModeRecherche.MODE_OBSERVATION, false).go(vue.getMetadonnees());
1830 aurelien 286
						rechargerForum();
1257 aurelien 287
					}
288
 
289
					@Override
290
					public void surErreur(String messageErreur) {
291
						Window.alert(messageErreur);
292
					}
1830 aurelien 293
				});
1257 aurelien 294
			}
295
		});
296
	}
1689 jpm 297
 
1830 aurelien 298
	private void rechargerForum() {
299
		vue.viderForum();
300
		new ForumPresenteur(new ForumVue()).go(vue.getForum());
301
	}
302
 
1689 jpm 303
	private void depublierObs() {
1830 aurelien 304
		if (ModerationUtils.utilisateurPeutDepublierObs(CacheClient.getInstance().getUtilisateur())) {
1690 jpm 305
			GWT.log("depublierObs :"+observation.getId());
306
			observationService.depublier(observation, new DepublicationObservationCallBack() {
307
 
308
				@Override
309
				public void surRetour(String depublicationOk) {
310
					GWT.log("Dépublication obs "+observation.getId()+" "+depublicationOk);
311
					if (depublicationOk.equals("OK")) {
312
						BusEvenementiel.getInstance().fireEvent(new EvenementRechercheObservation());
313
					}
1689 jpm 314
				}
1690 jpm 315
			});
316
		}
1689 jpm 317
	}
1690 jpm 318
 
319
	private void afficherZoneActionsObs() {
1830 aurelien 320
		if (ModerationUtils.utilisateurPeutDepublierObs(CacheClient.getInstance().getUtilisateur())) {
1690 jpm 321
			vue.afficherZoneActionsObs();
322
		} else {
323
			vue.cacherZoneActionsObs();
324
		}
325
	}
1196 gduche 326
}