Subversion Repositories eFlore/Applications.del

Rev

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