Subversion Repositories eFlore/Applications.del

Rev

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