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
1984 aurelien 127
		// long car tout l'écran est asynchrone ici
1196 gduche 128
		String observationId = URLUtils.getURLSpecialParameterValue();
129
		observationService.getObservation(observationId, new ObservationsCallback() {
130
			@Override
131
			public void surRetour(ObservationServiceResultat objetRetour) {
1689 jpm 132
				observation = cache.getObservationCourante();
1196 gduche 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
				}
1314 aurelien 141
 
1196 gduche 142
				new MetadonneesPresenteur(new MetadonneesEnLigneVue(), cache.getObservationCourante(), ModeRecherche.MODE_OBSERVATION, false).go(vue.getMetadonnees());
1553 jpm 143
				new ObservationImagesPresenteur(new ObservationImagesVue(), cache.getObservationCourante(), CacheClient.getInstance().getImageCourante()).go(vue.getDetailImageObservation());
1196 gduche 144
				new ForumPresenteur(new ForumVue()).go(vue.getForum());
145
				new FormulaireRechercheEflorePresenteur().go(vue.getFormulaireRechercheEflore());
146
 
1314 aurelien 147
				composite.add(vue.asWidget());
1196 gduche 148
			}
149
 
150
			@Override
151
			public void surErreur(String messageErreur) {
1542 mathias 152
				Window.alert(messageErreur + " - l'identifiant d'observation est incorrect; l'observation a peut-être été supprimée");
1196 gduche 153
			}
154
		});
1690 jpm 155
		afficherZoneActionsObs();
1196 gduche 156
		gererEvenements();
157
	}
158
 
159
	public void afficherRss(Observation observation) {
160
		new RssPresenteur(new RssVue(), observation, "Suivre cette observation").go(vue.getZoneRss());
161
	}
162
 
163
	public void gererEvenements() {
1314 aurelien 164
 
1196 gduche 165
		BusEvenementiel.getInstance().addHandler(EvenementAjoutDetermination.TYPE, new GestionnaireEvenementAjoutDetermination() {
166
			@Override
167
			public void onAjoutDetermination(EvenementAjoutDetermination event) {
168
				if (fenetreOverlaySimplePresenteur != null && fenetreOverlaySimplePresenteur.fenetreModaleEstOuverte()) {
169
					fenetreOverlaySimplePresenteur.fermerFenetreModale();
170
				}
171
			}
172
		});
173
 
174
		BusEvenementiel.getInstance().addHandler(EvenementAjoutCommentaire.TYPE, new GestionnaireEvenementAjoutCommentaire() {
175
			@Override
176
			public void onAjoutCommentaire(EvenementAjoutCommentaire event) {
177
				if (fenetreOverlaySimplePresenteur != null && fenetreOverlaySimplePresenteur.fenetreModaleEstOuverte()) {
178
					fenetreOverlaySimplePresenteur.fermerFenetreModale();
179
				}
180
			}
181
		});
182
 
183
		BusEvenementiel.getInstance().addHandler(EvenementChangementImageValidation.TYPE, new GestionnaireEvenementChangementImageValidation() {
184
			@Override
185
			public void onChangementImage(EvenementChangementImageValidation event) {
186
				vue.getDetailImageObservation().clear();
1553 jpm 187
				new ObservationImagesPresenteur(
188
					new ObservationImagesVue(),
189
					cache.getObservationCourante(),
190
					CacheClient.getInstance().getImageCourante()).go(vue.getDetailImageObservation());
1196 gduche 191
			}
192
		});
1689 jpm 193
 
194
		ClickHandler clicAjoutProposition = new ClickHandler() {
195
			@Override
196
			public void onClick(ClickEvent event) {
197
				fenetreOverlaySimplePresenteur = new FenetreOverlaySimplePresenteur(new FenetreOverlayDefilanteVue());
198
				fenetreOverlaySimplePresenteur.ouvrirFenetreModale(new FormulairePropositionPresenteur(new FormulairePropositionVue(), new PropositionDeterminationServiceConcret()));
199
			}
200
		};
201
		vue.getBoutonAjoutProposition().addClickHandler(clicAjoutProposition);
202
		vue.getBoutonAjoutPropositionBas().addClickHandler(clicAjoutProposition);
203
 
204
		ClickHandler clicAjoutCommentaire = new ClickHandler() {
205
			@Override
206
			public void onClick(ClickEvent event) {
207
				FormulaireCommentairePresenteur commentairePresenteur = new FormulaireCommentairePresenteur(cache.getObservationCourante(), new CommentaireServiceConcret(), new FormulaireCommentaireVue());
208
				fenetreOverlaySimplePresenteur = new FenetreOverlaySimplePresenteur(new FenetreOverlayDefilanteVue());
209
				fenetreOverlaySimplePresenteur.ouvrirFenetreModale(commentairePresenteur);
210
			}
211
		};
212
		vue.getBoutonAjoutCommentaire().addClickHandler(clicAjoutCommentaire);
213
		vue.getBoutonAjoutCommentaireBas().addClickHandler(clicAjoutCommentaire);
214
 
1196 gduche 215
		vue.getLienOuvrages().addClickHandler(new ClickHandler() {
216
			@Override
217
			public void onClick(ClickEvent event) {
218
				Config config = new Config();
1687 mathias 219
				Window.open(config.getUrl("ouvragesFlore"), "Flores numérisées", config.getInfo("popupOptions"));
1196 gduche 220
			}
221
		});
222
 
223
		vue.getLienBonnier().addClickHandler(new ClickHandler() {
224
			@Override
225
			public void onClick(ClickEvent event) {
226
				Config config = new Config();
1687 mathias 227
				Window.open(config.getUrl("bonnierPda"), "Flore Bonnier PDA", config.getInfo("popupOptions"));
1196 gduche 228
			}
229
		});
230
 
231
		vue.getLienCles().addClickHandler(new ClickHandler() {
232
			@Override
233
			public void onClick(ClickEvent event) {
234
				Config config = new Config();
1687 mathias 235
				Window.open(config.getUrl("clesDetermination"), "Clés de determination", config.getInfo("popupOptions"));
1196 gduche 236
			}
237
		});
238
 
239
		vue.getLienEflore().addClickHandler(new ClickHandler() {
240
			@Override
241
			public void onClick(ClickEvent event) {
242
				Config config = new Config();
1687 mathias 243
				Window.open(config.getUrl("eflore"), "eFlore", config.getInfo("popupOptions"));
1196 gduche 244
			}
245
		});
1257 aurelien 246
 
1689 jpm 247
		vue.getBoutonDepublierObs().addClickHandler(new ClickHandler() {
248
			@Override
249
			public void onClick(ClickEvent event) {
250
				GWT.log("Lancer evnt : EvenementDepublierObs");
1690 jpm 251
				if (Window.confirm(I18n.getVocabulary().confirmationDepublicationObs())) {
252
					BusEvenementiel.getInstance().fireEvent(new EvenementDepublierObs(observation.getId()));
253
				}
1689 jpm 254
			}
255
		});
256
 
257
		BusEvenementiel.getInstance().addHandler(EvenementDepublierObs.TYPE, new GestionnaireEvenementDepublierObs() {
258
			@Override
259
			public void onDepublicationObs(EvenementDepublierObs event) {
260
				GWT.log("Attraper evnt : EvenementDepublierObs (obs:"+event.getIdObs()+")");
261
				if (event.getIdObs().equals(observation.getId())) {
1690 jpm 262
					depublierObs();
1689 jpm 263
				}
264
			}
265
		});
1690 jpm 266
 
267
		BusEvenementiel.getInstance().addHandler(EvenementChangementEtatUtilisateur.TYPE, new GestionnaireEvenementChangementEtatUtilisateur() {
268
			@Override
269
			public void onModificationEtatUtilisateur(EvenementChangementEtatUtilisateur evenementChangementEtatUtilisateur) {
270
				afficherZoneActionsObs();
271
			}
272
		});
1830 aurelien 273
 
274
		BusEvenementiel.getInstance().addHandler(EvenementValidationPropositionDetermination.TYPE, new GestionnaireEvenementValidationPropositionDetermination() {
275
 
1257 aurelien 276
			@Override
1830 aurelien 277
			public void onValidationPropositionDetermination(EvenementValidationPropositionDetermination event) {
1257 aurelien 278
				String observationId = URLUtils.getURLSpecialParameterValue();
279
				observationService.getObservation(observationId, new ObservationsCallback() {
280
 
281
					@Override
282
					public void surRetour(ObservationServiceResultat objetRetour) {
283
						vue.viderMetadonnees();
284
						new MetadonneesPresenteur(new MetadonneesEnLigneVue(), cache.getObservationCourante(), ModeRecherche.MODE_OBSERVATION, false).go(vue.getMetadonnees());
1830 aurelien 285
						rechargerForum();
1257 aurelien 286
					}
287
 
288
					@Override
289
					public void surErreur(String messageErreur) {
290
						Window.alert(messageErreur);
291
					}
1830 aurelien 292
				});
1257 aurelien 293
			}
294
		});
295
	}
1689 jpm 296
 
1830 aurelien 297
	private void rechargerForum() {
298
		vue.viderForum();
299
		new ForumPresenteur(new ForumVue()).go(vue.getForum());
300
	}
301
 
1689 jpm 302
	private void depublierObs() {
1830 aurelien 303
		if (ModerationUtils.utilisateurPeutDepublierObs(CacheClient.getInstance().getUtilisateur())) {
1690 jpm 304
			GWT.log("depublierObs :"+observation.getId());
305
			observationService.depublier(observation, new DepublicationObservationCallBack() {
306
 
307
				@Override
308
				public void surRetour(String depublicationOk) {
309
					GWT.log("Dépublication obs "+observation.getId()+" "+depublicationOk);
310
					if (depublicationOk.equals("OK")) {
311
						BusEvenementiel.getInstance().fireEvent(new EvenementRechercheObservation());
312
					}
1689 jpm 313
				}
1690 jpm 314
			});
315
		}
1689 jpm 316
	}
1690 jpm 317
 
318
	private void afficherZoneActionsObs() {
1830 aurelien 319
		if (ModerationUtils.utilisateurPeutDepublierObs(CacheClient.getInstance().getUtilisateur())) {
1690 jpm 320
			vue.afficherZoneActionsObs();
321
		} else {
322
			vue.cacherZoneActionsObs();
323
		}
324
	}
1196 gduche 325
}