Subversion Repositories eFlore/Applications.del

Rev

Rev 1621 | 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) {
1686 mathias 121
					Config config = new Config();
122
					Window.open(new Config().getUrl("profil") + image.getObservation().getIdAuteur(), "Profil utilisateur", config.getInfo("popupOptions"));
1540 mathias 123
				}
124
			});
125
		} catch(Exception e) {
126
			// pas de bol mon coco
127
		}
1196 gduche 128
		new MetadonneesPresenteur(new MetadonneesVue(), image.getObservation(), ModeRecherche.MODE_IMAGE, true).go(vue.getMetadonnees());
129
		chargerDonneesValidation();
130
		gererEvenements();
131
	}
132
 
133
	private void chargerDonneesValidation() {
134
		vue.getZoneVoter().clear();
135
		if (protocole != null) {
136
			HashMap<String, VoteProtocole> observationValidationDatas = image.getVotesProtocoles(protocole.getId());
137
			if (observationValidationDatas != null) {
138
				new MoyenneVotePresenteur(image, protocole, new MoyenneVoteVue(), new VoteProtocoleServiceConcret()).go(vue.getZoneVoter());
139
			}
140
		}
141
	}
142
 
143
	private void lancerEvenementValidation() {
144
		CacheClient.getInstance().setImageCourante(image);
145
		final Observation obs = image.getObservation();
146
		BusEvenementiel.getInstance().fireEvent(new EvenementValidationPictoflora(obs));
147
	}
148
 
149
	protected void gererEvenements() {
150
 
151
		ClickHandler zoomeur = new ClickHandler() {
152
			public void onClick(ClickEvent event) {
153
				FenetreOverlaySimplePresenteur presenteurGalerie = new FenetreOverlaySimplePresenteur(new FenetreOverlayDefilanteVue());
154
				presenteurGalerie.ouvrirFenetreModaleDefilante(0, new DetailImagePresenteur(image, new DetailImageVue()));
155
				presenteurGalerie.afficherBoutonsSuivantsPrecedents(false);
156
			}};
157
 
158
		vue.getImagePrincipale().addClickHandler(zoomeur);
159
 
160
		vue.getEnSavoirPlus().addClickHandler(new ClickHandler() {
161
 
162
			@Override
163
			public void onClick(ClickEvent event) {
164
				BusEvenementiel.getInstance().fireEvent(new EvenementVoirDetailsImage(image));
165
			}
166
		});
167
 
168
		vue.getVoirMotsCles().addClickHandler(new ClickHandler() {
169
			@Override
170
			public void onClick(ClickEvent event) {
1239 gduche 171
				CacheClient.getInstance().setImageCourante(image);
172
				motsClesImagePresenteur = new MotsClesImagePresenteur(image, new MotsClesServiceConcret(), new FormulaireSaisieMotsClesImagePresenteur(image.getIdImage(),
173
																										new MotsClesServiceConcret(), new FormulaireSaisieMotsClesImageVue()), new MotsClesImageVue());
174
				motsClesImagePresenteur.chargerMotsCles();
175
				fenetreOverlaySimplePresenteur.ouvrirFenetreModale(motsClesImagePresenteur);
1196 gduche 176
			}
177
		});
1236 gduche 178
 
179
		vue.getBoutonFermer().addClickHandler(new ClickHandler() {
180
			@Override
181
			public void onClick(ClickEvent event) {
182
					cacherPanneauMotsCles();
183
			}
184
		});
1196 gduche 185
		BusEvenementiel.getInstance().addHandler(EvenementVoirDetailsImage.TYPE, new GestionnaireEvenementVoirDetailsImage() {
186
			@Override
187
			public void onVoirDetailsImage(EvenementVoirDetailsImage event) {
188
				if (image.getIdImage().equals(event.getImage().getIdImage())) {
189
					if (!detailsOuverts) {
190
						afficherDetails();
191
					} else {
192
						cacherDetails();
193
					}
194
				} else {
195
					cacherDetails();
196
				}
197
			}
198
		});
199
 
200
		BusEvenementiel.getInstance().addHandler(EvenementChangementProtocole.TYPE, new GestionnaireEvenementChangementProtocole() {
201
			@Override
202
			public void onChangementProtocole(EvenementChangementProtocole event) {
203
				setProtocole(event.getProtocole());
204
				chargerDonneesValidation();
205
			}
206
		});
1239 gduche 207
 
1241 gduche 208
		BusEvenementiel.getInstance().addHandler(EvenementFermerMotCleImage.TYPE, new GestionnaireEvenementFermerMotCleImage() {
1239 gduche 209
 
210
			@Override
1241 gduche 211
			public void onFermerMotCleImage(
212
					EvenementFermerMotCleImage evenementFermerMotCleImage) {
213
				if (evenementFermerMotCleImage.getIdImage().equals(image.getIdImage())) {
1239 gduche 214
					fenetreOverlaySimplePresenteur.fermerFenetreModale();
1241 gduche 215
				}
1239 gduche 216
			}
217
		});
1196 gduche 218
	}
219
 
220
	protected void afficherPanneauMotsCles() {
221
		vue.afficherZoneMotsCles();
222
		motsClesOuverts = true;
223
		motsClesImagePresenteur.chargerMotsCles();
224
		motsClesImagePresenteur.focuserChampsSaisie();
225
	}
226
 
227
	protected void cacherPanneauMotsCles() {
228
		vue.cacherZoneMotsCles();
229
		motsClesOuverts = false;
230
	}
231
 
232
	public void cacherDetails() {
233
		vue.cacherZoneCache();
234
		detailsOuverts = false;
235
	}
236
 
237
	public void afficherDetails() {
238
		vue.afficherZoneCache();
239
		detailsOuverts = true;
240
	}
241
 
242
	public boolean isDetailsOpen() {
243
		return detailsOuverts;
244
	}
245
 
246
	public Protocole getProtocole() {
247
		return protocole;
248
	}
249
 
250
	public void setProtocole(Protocole protocole) {
251
		this.protocole = protocole;
252
	}
253
}