Subversion Repositories eFlore/Applications.del

Rev

Rev 1415 | 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
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
 
173
		vue.getVoirMotsCles().addClickHandler(new ClickHandler() {
174
			@Override
175
			public void onClick(ClickEvent event) {
1239 gduche 176
				CacheClient.getInstance().setImageCourante(image);
177
				motsClesImagePresenteur = new MotsClesImagePresenteur(image, new MotsClesServiceConcret(), new FormulaireSaisieMotsClesImagePresenteur(image.getIdImage(),
178
																										new MotsClesServiceConcret(), new FormulaireSaisieMotsClesImageVue()), new MotsClesImageVue());
179
				motsClesImagePresenteur.chargerMotsCles();
180
				fenetreOverlaySimplePresenteur.ouvrirFenetreModale(motsClesImagePresenteur);
1196 gduche 181
			}
182
		});
1236 gduche 183
 
184
		vue.getBoutonFermer().addClickHandler(new ClickHandler() {
185
			@Override
186
			public void onClick(ClickEvent event) {
187
					cacherPanneauMotsCles();
188
			}
189
		});
1196 gduche 190
		BusEvenementiel.getInstance().addHandler(EvenementVoirDetailsImage.TYPE, new GestionnaireEvenementVoirDetailsImage() {
191
			@Override
192
			public void onVoirDetailsImage(EvenementVoirDetailsImage event) {
193
				if (image.getIdImage().equals(event.getImage().getIdImage())) {
194
					if (!detailsOuverts) {
195
						afficherDetails();
196
					} else {
197
						cacherDetails();
198
					}
199
				} else {
200
					cacherDetails();
201
				}
202
			}
203
		});
204
 
205
		BusEvenementiel.getInstance().addHandler(EvenementChangementProtocole.TYPE, new GestionnaireEvenementChangementProtocole() {
206
			@Override
207
			public void onChangementProtocole(EvenementChangementProtocole event) {
208
				setProtocole(event.getProtocole());
209
				chargerDonneesValidation();
210
			}
211
		});
1239 gduche 212
 
1241 gduche 213
		BusEvenementiel.getInstance().addHandler(EvenementFermerMotCleImage.TYPE, new GestionnaireEvenementFermerMotCleImage() {
1239 gduche 214
 
215
			@Override
1241 gduche 216
			public void onFermerMotCleImage(
217
					EvenementFermerMotCleImage evenementFermerMotCleImage) {
218
				if (evenementFermerMotCleImage.getIdImage().equals(image.getIdImage())) {
1239 gduche 219
					fenetreOverlaySimplePresenteur.fermerFenetreModale();
1241 gduche 220
				}
1239 gduche 221
			}
222
		});
1196 gduche 223
	}
224
 
225
	protected void afficherPanneauMotsCles() {
226
		vue.afficherZoneMotsCles();
227
		motsClesOuverts = true;
228
		motsClesImagePresenteur.chargerMotsCles();
229
		motsClesImagePresenteur.focuserChampsSaisie();
230
	}
231
 
232
	protected void cacherPanneauMotsCles() {
233
		vue.cacherZoneMotsCles();
234
		motsClesOuverts = false;
235
	}
236
 
237
	public void cacherDetails() {
238
		vue.cacherZoneCache();
239
		detailsOuverts = false;
240
	}
241
 
242
	public void afficherDetails() {
243
		vue.afficherZoneCache();
244
		detailsOuverts = true;
245
	}
246
 
247
	public boolean isDetailsOpen() {
248
		return detailsOuverts;
249
	}
250
 
251
	public Protocole getProtocole() {
252
		return protocole;
253
	}
254
 
255
	public void setProtocole(Protocole protocole) {
256
		this.protocole = protocole;
257
	}
258
}