Subversion Repositories eFlore/Applications.del

Rev

Rev 1672 | Rev 1689 | 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.pictoflora.resultats.images;
2
 
3
import java.util.HashMap;
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.images.DetailImagePresenteur;
9
import org.tela_botanica.del.client.composants.images.DetailImageVue;
10
import org.tela_botanica.del.client.composants.metadonnees.MetadonneesPresenteur;
11
import org.tela_botanica.del.client.composants.metadonnees.MetadonneesVue;
12
import org.tela_botanica.del.client.composants.motsclesimages.MotsClesImagePresenteur;
13
import org.tela_botanica.del.client.composants.motsclesimages.MotsClesImageVue;
14
import org.tela_botanica.del.client.composants.motsclesimages.formulairesaisiemotclesimages.FormulaireSaisieMotsClesImagePresenteur;
15
import org.tela_botanica.del.client.composants.motsclesimages.formulairesaisiemotclesimages.FormulaireSaisieMotsClesImageVue;
16
import org.tela_botanica.del.client.composants.presenteur.Presenteur;
17
import org.tela_botanica.del.client.composants.votes.moyennevotes.MoyenneVotePresenteur;
18
import org.tela_botanica.del.client.composants.votes.moyennevotes.MoyenneVoteVue;
1323 gduche 19
import org.tela_botanica.del.client.config.Config;
1672 jpm 20
import org.tela_botanica.del.client.modeles.Commentaire;
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.Observation;
24
import org.tela_botanica.del.client.modeles.Protocole;
1667 jpm 25
import org.tela_botanica.del.client.modeles.Utilisateur;
1196 gduche 26
import org.tela_botanica.del.client.modeles.VoteProtocole;
27
import org.tela_botanica.del.client.navigation.evenement.BusEvenementiel;
1667 jpm 28
import org.tela_botanica.del.client.navigation.evenement.changementEtatUtilisateur.EvenementChangementEtatUtilisateur;
29
import org.tela_botanica.del.client.navigation.evenement.changementEtatUtilisateur.GestionnaireEvenementChangementEtatUtilisateur;
1196 gduche 30
import org.tela_botanica.del.client.navigation.evenement.changementprotocole.EvenementChangementProtocole;
31
import org.tela_botanica.del.client.navigation.evenement.changementprotocole.GestionnaireEvenementChangementProtocole;
1241 gduche 32
import org.tela_botanica.del.client.navigation.evenement.fermermotcleimage.EvenementFermerMotCleImage;
33
import org.tela_botanica.del.client.navigation.evenement.fermermotcleimage.GestionnaireEvenementFermerMotCleImage;
1196 gduche 34
import org.tela_botanica.del.client.navigation.evenement.rechercheimage.EvenementVoirDetailsImage;
35
import org.tela_botanica.del.client.navigation.evenement.rechercheimage.GestionnaireEvenementVoirDetailsImage;
1672 jpm 36
import org.tela_botanica.del.client.navigation.evenement.suppressioncommentaire.EvenementSuppressionCommentaire;
1667 jpm 37
import org.tela_botanica.del.client.navigation.evenement.supprimerImage.EvenementSupprimerImage;
38
import org.tela_botanica.del.client.navigation.evenement.supprimerImage.GestionnaireEvenementSupprimerImage;
1196 gduche 39
import org.tela_botanica.del.client.navigation.evenement.validationobservationpictoflora.EvenementValidationPictoflora;
1672 jpm 40
import org.tela_botanica.del.client.services.rest.ImageService;
1196 gduche 41
import org.tela_botanica.del.client.services.rest.MotsClesServiceConcret;
42
import org.tela_botanica.del.client.services.rest.VoteProtocoleServiceConcret;
1672 jpm 43
import org.tela_botanica.del.client.services.rest.async.SuppressionCommentaireCallback;
44
import org.tela_botanica.del.client.services.rest.async.SuppressionImageCallback;
1196 gduche 45
 
1667 jpm 46
import com.google.gwt.core.shared.GWT;
1196 gduche 47
import com.google.gwt.event.dom.client.ClickEvent;
48
import com.google.gwt.event.dom.client.ClickHandler;
49
import com.google.gwt.event.dom.client.HasClickHandlers;
50
import com.google.gwt.user.client.Window;
51
import com.google.gwt.user.client.ui.HasWidgets;
52
import com.google.gwt.user.client.ui.IsWidget;
53
 
54
public class ImagePresenteur extends Presenteur {
55
 
56
	public interface Vue extends IsWidget {
57
		public abstract void loadImage(Image image);
58
 
59
		public abstract HasClickHandlers getImagePrincipale();
60
 
61
		public IsWidget getImagePrincipaleWidget();
62
 
63
		public void setUrlImagePrincipale(String url);
64
 
65
		public void setTitreImagePrincipale(String titre);
66
 
67
		public void setAltTextImagePrincipale(String altText);
68
 
69
		public String getUrlImagePrincipale();
70
 
71
		public String getTitreImagePrincipale();
72
 
73
		public String getAltTextImagePrincipale();
74
 
75
		public abstract HasClickHandlers getEnSavoirPlus();
76
 
77
		public abstract void cacherZoneCache();
78
 
79
		public abstract void afficherZoneCache();
80
 
81
		public abstract HasWidgets getZoneVoter();
82
 
83
		public HasClickHandlers getNomAuteur();
84
 
85
		public HasClickHandlers getNomEspece();
86
 
87
		public HasWidgets getMetadonnees();
88
 
89
		public HasClickHandlers getVoirMotsCles();
90
 
91
		public HasWidgets getZoneMotsCles();
92
 
93
		public void cacherZoneMotsCles();
94
 
95
		public void afficherZoneMotsCles();
1236 gduche 96
 
97
		public HasClickHandlers getBoutonFermer();
1540 mathias 98
 
99
		public void ajouterStyleLienAuteur();
1667 jpm 100
 
101
		public HasClickHandlers getBoutonSupprimerImage();
102
		public void cacherZoneActionsImage();
103
		public void afficherZoneActionsImage();
1196 gduche 104
	}
105
 
106
	private Vue vue;
107
 
108
	private final Image image;
1672 jpm 109
	private ImageService imageService;
1196 gduche 110
	private boolean detailsOuverts = false;
111
 
112
	private Protocole protocole;
113
 
114
	private boolean motsClesOuverts = false;
115
 
116
	private MotsClesImagePresenteur motsClesImagePresenteur;
117
 
1241 gduche 118
	final FenetreOverlaySimplePresenteur fenetreOverlaySimplePresenteur = new FenetreOverlaySimplePresenteur(new FenetreOverlayDefilanteVue());
119
 
1672 jpm 120
	public ImagePresenteur(Image image, ImageService imageService, Protocole protocole, Vue vue) {
1196 gduche 121
		this.image = image;
1672 jpm 122
		this.imageService = imageService;
1196 gduche 123
		this.protocole = protocole;
124
		this.vue = vue;
125
	}
126
 
127
	public void go(HasWidgets composite) {
128
		composite.add(vue.asWidget());
129
		vue.loadImage(image);
1540 mathias 130
		try {
131
			// pas de profil pour les non inscrits
132
			Integer.parseInt(image.getObservation().getIdAuteur());
133
			vue.ajouterStyleLienAuteur();
134
			vue.getNomAuteur().addClickHandler(new ClickHandler() {
135
 
136
				@Override
137
				public void onClick(ClickEvent event) {
1687 mathias 138
					Config config = new Config();
139
					Window.open(new Config().getUrl("profil") + image.getObservation().getIdAuteur(), "Profil utilisateur", config.getInfo("popupOptions"));
1540 mathias 140
				}
141
			});
142
		} catch(Exception e) {
143
			// pas de bol mon coco
144
		}
1196 gduche 145
		new MetadonneesPresenteur(new MetadonneesVue(), image.getObservation(), ModeRecherche.MODE_IMAGE, true).go(vue.getMetadonnees());
146
		chargerDonneesValidation();
1667 jpm 147
		afficherZoneActionsImage();
1196 gduche 148
		gererEvenements();
149
	}
150
 
151
	private void chargerDonneesValidation() {
152
		vue.getZoneVoter().clear();
153
		if (protocole != null) {
154
			HashMap<String, VoteProtocole> observationValidationDatas = image.getVotesProtocoles(protocole.getId());
155
			if (observationValidationDatas != null) {
156
				new MoyenneVotePresenteur(image, protocole, new MoyenneVoteVue(), new VoteProtocoleServiceConcret()).go(vue.getZoneVoter());
157
			}
158
		}
159
	}
160
 
161
	private void lancerEvenementValidation() {
162
		CacheClient.getInstance().setImageCourante(image);
163
		final Observation obs = image.getObservation();
164
		BusEvenementiel.getInstance().fireEvent(new EvenementValidationPictoflora(obs));
165
	}
166
 
167
	protected void gererEvenements() {
168
		ClickHandler zoomeur = new ClickHandler() {
169
			public void onClick(ClickEvent event) {
170
				FenetreOverlaySimplePresenteur presenteurGalerie = new FenetreOverlaySimplePresenteur(new FenetreOverlayDefilanteVue());
171
				presenteurGalerie.ouvrirFenetreModaleDefilante(0, new DetailImagePresenteur(image, new DetailImageVue()));
172
				presenteurGalerie.afficherBoutonsSuivantsPrecedents(false);
173
			}};
174
 
175
		vue.getImagePrincipale().addClickHandler(zoomeur);
176
 
177
		vue.getEnSavoirPlus().addClickHandler(new ClickHandler() {
178
			@Override
179
			public void onClick(ClickEvent event) {
180
				BusEvenementiel.getInstance().fireEvent(new EvenementVoirDetailsImage(image));
181
			}
182
		});
183
 
184
		vue.getVoirMotsCles().addClickHandler(new ClickHandler() {
185
			@Override
186
			public void onClick(ClickEvent event) {
1239 gduche 187
				CacheClient.getInstance().setImageCourante(image);
1667 jpm 188
				motsClesImagePresenteur = new MotsClesImagePresenteur(
189
					image,
190
					new MotsClesServiceConcret(),
191
					new FormulaireSaisieMotsClesImagePresenteur(
192
						image.getIdImage(),
193
						new MotsClesServiceConcret(),
194
						new FormulaireSaisieMotsClesImageVue()),
195
					new MotsClesImageVue());
1239 gduche 196
				motsClesImagePresenteur.chargerMotsCles();
197
				fenetreOverlaySimplePresenteur.ouvrirFenetreModale(motsClesImagePresenteur);
1196 gduche 198
			}
199
		});
1236 gduche 200
 
201
		vue.getBoutonFermer().addClickHandler(new ClickHandler() {
202
			@Override
203
			public void onClick(ClickEvent event) {
1667 jpm 204
				cacherPanneauMotsCles();
1236 gduche 205
			}
206
		});
1196 gduche 207
		BusEvenementiel.getInstance().addHandler(EvenementVoirDetailsImage.TYPE, new GestionnaireEvenementVoirDetailsImage() {
208
			@Override
209
			public void onVoirDetailsImage(EvenementVoirDetailsImage event) {
210
				if (image.getIdImage().equals(event.getImage().getIdImage())) {
211
					if (!detailsOuverts) {
212
						afficherDetails();
213
					} else {
214
						cacherDetails();
215
					}
216
				} else {
217
					cacherDetails();
218
				}
219
			}
220
		});
221
 
222
		BusEvenementiel.getInstance().addHandler(EvenementChangementProtocole.TYPE, new GestionnaireEvenementChangementProtocole() {
223
			@Override
224
			public void onChangementProtocole(EvenementChangementProtocole event) {
225
				setProtocole(event.getProtocole());
226
				chargerDonneesValidation();
227
			}
228
		});
1239 gduche 229
 
1241 gduche 230
		BusEvenementiel.getInstance().addHandler(EvenementFermerMotCleImage.TYPE, new GestionnaireEvenementFermerMotCleImage() {
1239 gduche 231
			@Override
1672 jpm 232
			public void onFermerMotCleImage(EvenementFermerMotCleImage evenementFermerMotCleImage) {
1241 gduche 233
				if (evenementFermerMotCleImage.getIdImage().equals(image.getIdImage())) {
1239 gduche 234
					fenetreOverlaySimplePresenteur.fermerFenetreModale();
1241 gduche 235
				}
1239 gduche 236
			}
237
		});
1667 jpm 238
 
239
 
240
		BusEvenementiel.getInstance().addHandler(EvenementSupprimerImage.TYPE, new GestionnaireEvenementSupprimerImage() {
241
			@Override
242
			public void onSuppressionImage(EvenementSupprimerImage event) {
243
				GWT.log("Attraper evnt : EvenementSupprimerImage (img:"+image.getIdImage()+")");
244
				if (event.getIdImage().equals(image.getIdImage())) {
245
					supprimerImg();
246
				}
247
			}
248
		});
249
		vue.getBoutonSupprimerImage().addClickHandler(new ClickHandler() {
250
			@Override
251
			public void onClick(ClickEvent event) {
252
				GWT.log("Lancer evnt : EvenementSupprimerImage");
253
				BusEvenementiel.getInstance().fireEvent(new EvenementSupprimerImage(image.getIdImage()));
254
			}
255
		});
256
 
257
		BusEvenementiel.getInstance().addHandler(EvenementChangementEtatUtilisateur.TYPE, new GestionnaireEvenementChangementEtatUtilisateur() {
258
			@Override
259
			public void onModificationEtatUtilisateur(EvenementChangementEtatUtilisateur evenementChangementEtatUtilisateur) {
260
				afficherZoneActionsImage();
261
			}
262
		});
263
 
1196 gduche 264
	}
265
 
1667 jpm 266
	private void supprimerImg() {
267
		GWT.log("supprimerImg :"+image.getIdImage());
1672 jpm 268
		imageService.supprimer(image, new SuppressionImageCallback() {
269
			@Override
270
			public void surRetour(String suppressionOk) {
271
				GWT.log("Suppression image "+image.getIdImage()+" "+suppressionOk);
272
				if (suppressionOk.equals("OK")) {
273
					vue.asWidget().removeFromParent();
274
				}
275
			}
276
		});
1667 jpm 277
	}
278
 
1196 gduche 279
	protected void afficherPanneauMotsCles() {
280
		vue.afficherZoneMotsCles();
281
		motsClesOuverts = true;
282
		motsClesImagePresenteur.chargerMotsCles();
283
		motsClesImagePresenteur.focuserChampsSaisie();
284
	}
285
 
286
	protected void cacherPanneauMotsCles() {
287
		vue.cacherZoneMotsCles();
288
		motsClesOuverts = false;
289
	}
290
 
291
	public void cacherDetails() {
292
		vue.cacherZoneCache();
293
		detailsOuverts = false;
294
	}
295
 
296
	public void afficherDetails() {
297
		vue.afficherZoneCache();
298
		detailsOuverts = true;
299
	}
300
 
301
	public boolean isDetailsOpen() {
302
		return detailsOuverts;
303
	}
304
 
305
	public Protocole getProtocole() {
306
		return protocole;
307
	}
308
 
309
	public void setProtocole(Protocole protocole) {
310
		this.protocole = protocole;
311
	}
1667 jpm 312
 
313
	private void afficherZoneActionsImage() {
314
		if (devoirAfficherZoneActionsImage()) {
315
			vue.afficherZoneActionsImage();
316
		} else {
317
			vue.cacherZoneActionsImage();
318
		}
319
	}
320
 
321
	private boolean devoirAfficherZoneActionsImage() {
322
		Utilisateur utilisateur = CacheClient.getInstance().getUtilisateur();
323
		boolean etreAdmin = false;
324
		if (utilisateur != null) {
325
			etreAdmin = utilisateur.estIdentifie() && utilisateur.etreAdmin();
326
		}
327
		return etreAdmin;
328
	}
1196 gduche 329
}