Subversion Repositories eFlore/Applications.del

Rev

Rev 1667 | Rev 1687 | 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) {
1543 jpm 138
					Window.open(new Config().getUrl("profil") + image.getObservation().getIdAuteur(), "Profil utilisateur", null);
1540 mathias 139
				}
140
			});
141
		} catch(Exception e) {
142
			// pas de bol mon coco
143
		}
1196 gduche 144
		new MetadonneesPresenteur(new MetadonneesVue(), image.getObservation(), ModeRecherche.MODE_IMAGE, true).go(vue.getMetadonnees());
145
		chargerDonneesValidation();
1667 jpm 146
		afficherZoneActionsImage();
1196 gduche 147
		gererEvenements();
148
	}
149
 
150
	private void chargerDonneesValidation() {
151
		vue.getZoneVoter().clear();
152
		if (protocole != null) {
153
			HashMap<String, VoteProtocole> observationValidationDatas = image.getVotesProtocoles(protocole.getId());
154
			if (observationValidationDatas != null) {
155
				new MoyenneVotePresenteur(image, protocole, new MoyenneVoteVue(), new VoteProtocoleServiceConcret()).go(vue.getZoneVoter());
156
			}
157
		}
158
	}
159
 
160
	private void lancerEvenementValidation() {
161
		CacheClient.getInstance().setImageCourante(image);
162
		final Observation obs = image.getObservation();
163
		BusEvenementiel.getInstance().fireEvent(new EvenementValidationPictoflora(obs));
164
	}
165
 
166
	protected void gererEvenements() {
167
		ClickHandler zoomeur = new ClickHandler() {
168
			public void onClick(ClickEvent event) {
169
				FenetreOverlaySimplePresenteur presenteurGalerie = new FenetreOverlaySimplePresenteur(new FenetreOverlayDefilanteVue());
170
				presenteurGalerie.ouvrirFenetreModaleDefilante(0, new DetailImagePresenteur(image, new DetailImageVue()));
171
				presenteurGalerie.afficherBoutonsSuivantsPrecedents(false);
172
			}};
173
 
174
		vue.getImagePrincipale().addClickHandler(zoomeur);
175
 
176
		vue.getEnSavoirPlus().addClickHandler(new ClickHandler() {
177
			@Override
178
			public void onClick(ClickEvent event) {
179
				BusEvenementiel.getInstance().fireEvent(new EvenementVoirDetailsImage(image));
180
			}
181
		});
182
 
183
		vue.getVoirMotsCles().addClickHandler(new ClickHandler() {
184
			@Override
185
			public void onClick(ClickEvent event) {
1239 gduche 186
				CacheClient.getInstance().setImageCourante(image);
1667 jpm 187
				motsClesImagePresenteur = new MotsClesImagePresenteur(
188
					image,
189
					new MotsClesServiceConcret(),
190
					new FormulaireSaisieMotsClesImagePresenteur(
191
						image.getIdImage(),
192
						new MotsClesServiceConcret(),
193
						new FormulaireSaisieMotsClesImageVue()),
194
					new MotsClesImageVue());
1239 gduche 195
				motsClesImagePresenteur.chargerMotsCles();
196
				fenetreOverlaySimplePresenteur.ouvrirFenetreModale(motsClesImagePresenteur);
1196 gduche 197
			}
198
		});
1236 gduche 199
 
200
		vue.getBoutonFermer().addClickHandler(new ClickHandler() {
201
			@Override
202
			public void onClick(ClickEvent event) {
1667 jpm 203
				cacherPanneauMotsCles();
1236 gduche 204
			}
205
		});
1196 gduche 206
		BusEvenementiel.getInstance().addHandler(EvenementVoirDetailsImage.TYPE, new GestionnaireEvenementVoirDetailsImage() {
207
			@Override
208
			public void onVoirDetailsImage(EvenementVoirDetailsImage event) {
209
				if (image.getIdImage().equals(event.getImage().getIdImage())) {
210
					if (!detailsOuverts) {
211
						afficherDetails();
212
					} else {
213
						cacherDetails();
214
					}
215
				} else {
216
					cacherDetails();
217
				}
218
			}
219
		});
220
 
221
		BusEvenementiel.getInstance().addHandler(EvenementChangementProtocole.TYPE, new GestionnaireEvenementChangementProtocole() {
222
			@Override
223
			public void onChangementProtocole(EvenementChangementProtocole event) {
224
				setProtocole(event.getProtocole());
225
				chargerDonneesValidation();
226
			}
227
		});
1239 gduche 228
 
1241 gduche 229
		BusEvenementiel.getInstance().addHandler(EvenementFermerMotCleImage.TYPE, new GestionnaireEvenementFermerMotCleImage() {
1239 gduche 230
			@Override
1672 jpm 231
			public void onFermerMotCleImage(EvenementFermerMotCleImage evenementFermerMotCleImage) {
1241 gduche 232
				if (evenementFermerMotCleImage.getIdImage().equals(image.getIdImage())) {
1239 gduche 233
					fenetreOverlaySimplePresenteur.fermerFenetreModale();
1241 gduche 234
				}
1239 gduche 235
			}
236
		});
1667 jpm 237
 
238
 
239
		BusEvenementiel.getInstance().addHandler(EvenementSupprimerImage.TYPE, new GestionnaireEvenementSupprimerImage() {
240
			@Override
241
			public void onSuppressionImage(EvenementSupprimerImage event) {
242
				GWT.log("Attraper evnt : EvenementSupprimerImage (img:"+image.getIdImage()+")");
243
				if (event.getIdImage().equals(image.getIdImage())) {
244
					supprimerImg();
245
				}
246
			}
247
		});
248
		vue.getBoutonSupprimerImage().addClickHandler(new ClickHandler() {
249
			@Override
250
			public void onClick(ClickEvent event) {
251
				GWT.log("Lancer evnt : EvenementSupprimerImage");
252
				BusEvenementiel.getInstance().fireEvent(new EvenementSupprimerImage(image.getIdImage()));
253
			}
254
		});
255
 
256
		BusEvenementiel.getInstance().addHandler(EvenementChangementEtatUtilisateur.TYPE, new GestionnaireEvenementChangementEtatUtilisateur() {
257
			@Override
258
			public void onModificationEtatUtilisateur(EvenementChangementEtatUtilisateur evenementChangementEtatUtilisateur) {
259
				afficherZoneActionsImage();
260
			}
261
		});
262
 
1196 gduche 263
	}
264
 
1667 jpm 265
	private void supprimerImg() {
266
		GWT.log("supprimerImg :"+image.getIdImage());
1672 jpm 267
		imageService.supprimer(image, new SuppressionImageCallback() {
268
			@Override
269
			public void surRetour(String suppressionOk) {
270
				GWT.log("Suppression image "+image.getIdImage()+" "+suppressionOk);
271
				if (suppressionOk.equals("OK")) {
272
					vue.asWidget().removeFromParent();
273
				}
274
			}
275
		});
1667 jpm 276
	}
277
 
1196 gduche 278
	protected void afficherPanneauMotsCles() {
279
		vue.afficherZoneMotsCles();
280
		motsClesOuverts = true;
281
		motsClesImagePresenteur.chargerMotsCles();
282
		motsClesImagePresenteur.focuserChampsSaisie();
283
	}
284
 
285
	protected void cacherPanneauMotsCles() {
286
		vue.cacherZoneMotsCles();
287
		motsClesOuverts = false;
288
	}
289
 
290
	public void cacherDetails() {
291
		vue.cacherZoneCache();
292
		detailsOuverts = false;
293
	}
294
 
295
	public void afficherDetails() {
296
		vue.afficherZoneCache();
297
		detailsOuverts = true;
298
	}
299
 
300
	public boolean isDetailsOpen() {
301
		return detailsOuverts;
302
	}
303
 
304
	public Protocole getProtocole() {
305
		return protocole;
306
	}
307
 
308
	public void setProtocole(Protocole protocole) {
309
		this.protocole = protocole;
310
	}
1667 jpm 311
 
312
	private void afficherZoneActionsImage() {
313
		if (devoirAfficherZoneActionsImage()) {
314
			vue.afficherZoneActionsImage();
315
		} else {
316
			vue.cacherZoneActionsImage();
317
		}
318
	}
319
 
320
	private boolean devoirAfficherZoneActionsImage() {
321
		Utilisateur utilisateur = CacheClient.getInstance().getUtilisateur();
322
		boolean etreAdmin = false;
323
		if (utilisateur != null) {
324
			etreAdmin = utilisateur.estIdentifie() && utilisateur.etreAdmin();
325
		}
326
		return etreAdmin;
327
	}
1196 gduche 328
}