Subversion Repositories eFlore/Applications.del

Rev

Rev 1540 | Rev 1667 | 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;
1196 gduche 20
import org.tela_botanica.del.client.modeles.Image;
21
import org.tela_botanica.del.client.modeles.ModeRecherche;
22
import org.tela_botanica.del.client.modeles.Observation;
23
import org.tela_botanica.del.client.modeles.Protocole;
24
import org.tela_botanica.del.client.modeles.VoteProtocole;
25
import org.tela_botanica.del.client.navigation.evenement.BusEvenementiel;
26
import org.tela_botanica.del.client.navigation.evenement.changementprotocole.EvenementChangementProtocole;
27
import org.tela_botanica.del.client.navigation.evenement.changementprotocole.GestionnaireEvenementChangementProtocole;
1241 gduche 28
import org.tela_botanica.del.client.navigation.evenement.fermermotcleimage.EvenementFermerMotCleImage;
29
import org.tela_botanica.del.client.navigation.evenement.fermermotcleimage.GestionnaireEvenementFermerMotCleImage;
1196 gduche 30
import org.tela_botanica.del.client.navigation.evenement.rechercheimage.EvenementVoirDetailsImage;
31
import org.tela_botanica.del.client.navigation.evenement.rechercheimage.GestionnaireEvenementVoirDetailsImage;
32
import org.tela_botanica.del.client.navigation.evenement.validationobservationpictoflora.EvenementValidationPictoflora;
33
import org.tela_botanica.del.client.services.rest.MotsClesServiceConcret;
34
import org.tela_botanica.del.client.services.rest.VoteProtocoleServiceConcret;
35
 
36
import com.google.gwt.event.dom.client.ClickEvent;
37
import com.google.gwt.event.dom.client.ClickHandler;
38
import com.google.gwt.event.dom.client.HasClickHandlers;
39
import com.google.gwt.user.client.Window;
40
import com.google.gwt.user.client.ui.HasWidgets;
41
import com.google.gwt.user.client.ui.IsWidget;
42
 
43
public class ImagePresenteur extends Presenteur {
44
 
45
	public interface Vue extends IsWidget {
46
		public abstract void loadImage(Image image);
47
 
48
		public abstract HasClickHandlers getImagePrincipale();
49
 
50
		public IsWidget getImagePrincipaleWidget();
51
 
52
		public void setUrlImagePrincipale(String url);
53
 
54
		public void setTitreImagePrincipale(String titre);
55
 
56
		public void setAltTextImagePrincipale(String altText);
57
 
58
		public String getUrlImagePrincipale();
59
 
60
		public String getTitreImagePrincipale();
61
 
62
		public String getAltTextImagePrincipale();
63
 
64
		public abstract HasClickHandlers getEnSavoirPlus();
65
 
66
		public abstract void cacherZoneCache();
67
 
68
		public abstract void afficherZoneCache();
69
 
70
		public abstract HasWidgets getZoneVoter();
71
 
72
		public HasClickHandlers getNomAuteur();
73
 
74
		public HasClickHandlers getNomEspece();
75
 
76
		public HasWidgets getMetadonnees();
77
 
78
		public HasClickHandlers getVoirMotsCles();
79
 
80
		public HasWidgets getZoneMotsCles();
81
 
82
		public void cacherZoneMotsCles();
83
 
84
		public void afficherZoneMotsCles();
1236 gduche 85
 
86
		public HasClickHandlers getBoutonFermer();
1540 mathias 87
 
88
		public void ajouterStyleLienAuteur();
1196 gduche 89
	}
90
 
91
	private Vue vue;
92
 
93
	private final Image image;
94
	private boolean detailsOuverts = false;
95
 
96
	private Protocole protocole;
97
 
98
	private boolean motsClesOuverts = false;
99
 
100
	private MotsClesImagePresenteur motsClesImagePresenteur;
101
 
1241 gduche 102
	final FenetreOverlaySimplePresenteur fenetreOverlaySimplePresenteur = new FenetreOverlaySimplePresenteur(new FenetreOverlayDefilanteVue());
103
 
1196 gduche 104
	public ImagePresenteur(Image image, Protocole protocole, Vue vue) {
105
		this.image = image;
106
		this.protocole = protocole;
107
		this.vue = vue;
108
	}
109
 
110
	public void go(HasWidgets composite) {
111
		composite.add(vue.asWidget());
112
		vue.loadImage(image);
1540 mathias 113
		try {
114
			// pas de profil pour les non inscrits
115
			Integer.parseInt(image.getObservation().getIdAuteur());
116
			vue.ajouterStyleLienAuteur();
117
			vue.getNomAuteur().addClickHandler(new ClickHandler() {
118
 
119
				@Override
120
				public void onClick(ClickEvent event) {
1543 jpm 121
					Window.open(new Config().getUrl("profil") + image.getObservation().getIdAuteur(), "Profil utilisateur", null);
1540 mathias 122
				}
123
			});
124
		} catch(Exception e) {
125
			// pas de bol mon coco
126
		}
1196 gduche 127
		new MetadonneesPresenteur(new MetadonneesVue(), image.getObservation(), ModeRecherche.MODE_IMAGE, true).go(vue.getMetadonnees());
128
		chargerDonneesValidation();
129
		gererEvenements();
130
	}
131
 
132
	private void chargerDonneesValidation() {
133
		vue.getZoneVoter().clear();
134
		if (protocole != null) {
135
			HashMap<String, VoteProtocole> observationValidationDatas = image.getVotesProtocoles(protocole.getId());
136
			if (observationValidationDatas != null) {
137
				new MoyenneVotePresenteur(image, protocole, new MoyenneVoteVue(), new VoteProtocoleServiceConcret()).go(vue.getZoneVoter());
138
			}
139
		}
140
	}
141
 
142
	private void lancerEvenementValidation() {
143
		CacheClient.getInstance().setImageCourante(image);
144
		final Observation obs = image.getObservation();
145
		BusEvenementiel.getInstance().fireEvent(new EvenementValidationPictoflora(obs));
146
	}
147
 
148
	protected void gererEvenements() {
149
 
150
		ClickHandler zoomeur = new ClickHandler() {
151
			public void onClick(ClickEvent event) {
152
				FenetreOverlaySimplePresenteur presenteurGalerie = new FenetreOverlaySimplePresenteur(new FenetreOverlayDefilanteVue());
153
				presenteurGalerie.ouvrirFenetreModaleDefilante(0, new DetailImagePresenteur(image, new DetailImageVue()));
154
				presenteurGalerie.afficherBoutonsSuivantsPrecedents(false);
155
			}};
156
 
157
		vue.getImagePrincipale().addClickHandler(zoomeur);
158
 
159
		vue.getEnSavoirPlus().addClickHandler(new ClickHandler() {
160
 
161
			@Override
162
			public void onClick(ClickEvent event) {
163
				BusEvenementiel.getInstance().fireEvent(new EvenementVoirDetailsImage(image));
164
			}
165
		});
166
 
167
		vue.getVoirMotsCles().addClickHandler(new ClickHandler() {
168
			@Override
169
			public void onClick(ClickEvent event) {
1239 gduche 170
				CacheClient.getInstance().setImageCourante(image);
171
				motsClesImagePresenteur = new MotsClesImagePresenteur(image, new MotsClesServiceConcret(), new FormulaireSaisieMotsClesImagePresenteur(image.getIdImage(),
172
																										new MotsClesServiceConcret(), new FormulaireSaisieMotsClesImageVue()), new MotsClesImageVue());
173
				motsClesImagePresenteur.chargerMotsCles();
174
				fenetreOverlaySimplePresenteur.ouvrirFenetreModale(motsClesImagePresenteur);
1196 gduche 175
			}
176
		});
1236 gduche 177
 
178
		vue.getBoutonFermer().addClickHandler(new ClickHandler() {
179
			@Override
180
			public void onClick(ClickEvent event) {
181
					cacherPanneauMotsCles();
182
			}
183
		});
1196 gduche 184
		BusEvenementiel.getInstance().addHandler(EvenementVoirDetailsImage.TYPE, new GestionnaireEvenementVoirDetailsImage() {
185
			@Override
186
			public void onVoirDetailsImage(EvenementVoirDetailsImage event) {
187
				if (image.getIdImage().equals(event.getImage().getIdImage())) {
188
					if (!detailsOuverts) {
189
						afficherDetails();
190
					} else {
191
						cacherDetails();
192
					}
193
				} else {
194
					cacherDetails();
195
				}
196
			}
197
		});
198
 
199
		BusEvenementiel.getInstance().addHandler(EvenementChangementProtocole.TYPE, new GestionnaireEvenementChangementProtocole() {
200
			@Override
201
			public void onChangementProtocole(EvenementChangementProtocole event) {
202
				setProtocole(event.getProtocole());
203
				chargerDonneesValidation();
204
			}
205
		});
1239 gduche 206
 
1241 gduche 207
		BusEvenementiel.getInstance().addHandler(EvenementFermerMotCleImage.TYPE, new GestionnaireEvenementFermerMotCleImage() {
1239 gduche 208
 
209
			@Override
1241 gduche 210
			public void onFermerMotCleImage(
211
					EvenementFermerMotCleImage evenementFermerMotCleImage) {
212
				if (evenementFermerMotCleImage.getIdImage().equals(image.getIdImage())) {
1239 gduche 213
					fenetreOverlaySimplePresenteur.fermerFenetreModale();
1241 gduche 214
				}
1239 gduche 215
			}
216
		});
1196 gduche 217
	}
218
 
219
	protected void afficherPanneauMotsCles() {
220
		vue.afficherZoneMotsCles();
221
		motsClesOuverts = true;
222
		motsClesImagePresenteur.chargerMotsCles();
223
		motsClesImagePresenteur.focuserChampsSaisie();
224
	}
225
 
226
	protected void cacherPanneauMotsCles() {
227
		vue.cacherZoneMotsCles();
228
		motsClesOuverts = false;
229
	}
230
 
231
	public void cacherDetails() {
232
		vue.cacherZoneCache();
233
		detailsOuverts = false;
234
	}
235
 
236
	public void afficherDetails() {
237
		vue.afficherZoneCache();
238
		detailsOuverts = true;
239
	}
240
 
241
	public boolean isDetailsOpen() {
242
		return detailsOuverts;
243
	}
244
 
245
	public Protocole getProtocole() {
246
		return protocole;
247
	}
248
 
249
	public void setProtocole(Protocole protocole) {
250
		this.protocole = protocole;
251
	}
252
}