Subversion Repositories eFlore/Applications.del

Rev

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