Subversion Repositories eFlore/Applications.del

Rev

Rev 1196 | Rev 1329 | 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;
2
 
3
import java.util.List;
4
 
5
import org.tela_botanica.del.client.cache.CacheClient;
6
import org.tela_botanica.del.client.composants.pagination.PaginationPresenteur;
7
import org.tela_botanica.del.client.composants.pagination.PaginationVue;
8
import org.tela_botanica.del.client.modeles.Image;
9
import org.tela_botanica.del.client.modeles.ImageServiceResultat;
10
import org.tela_botanica.del.client.modeles.InformationsRecherche;
11
import org.tela_botanica.del.client.modeles.ModeTri;
12
import org.tela_botanica.del.client.modeles.Protocole;
13
import org.tela_botanica.del.client.modeles.ProtocoleServiceResultat;
14
import org.tela_botanica.del.client.navigation.evenement.BusEvenementiel;
15
import org.tela_botanica.del.client.navigation.evenement.changementprotocole.EvenementChangementProtocole;
16
import org.tela_botanica.del.client.navigation.evenement.changementprotocole.GestionnaireEvenementChangementProtocole;
17
import org.tela_botanica.del.client.services.rest.ImageService;
18
import org.tela_botanica.del.client.services.rest.ProtocoleService;
19
import org.tela_botanica.del.client.services.rest.async.ImagesParTaxonCallback;
20
import org.tela_botanica.del.client.services.rest.async.ProtocolesCallback;
21
import org.tela_botanica.del.client.vues.pictoflora.resultats.images.ImagePresenteur;
22
import org.tela_botanica.del.client.vues.pictoflora.resultats.images.ImageVue;
23
 
1203 gduche 24
import com.google.gwt.dom.client.NodeList;
25
import com.google.gwt.dom.client.OptionElement;
26
import com.google.gwt.dom.client.SelectElement;
1196 gduche 27
import com.google.gwt.event.dom.client.ChangeEvent;
28
import com.google.gwt.event.dom.client.ChangeHandler;
29
import com.google.gwt.event.dom.client.ClickEvent;
30
import com.google.gwt.event.dom.client.ClickHandler;
31
import com.google.gwt.event.dom.client.HasChangeHandlers;
32
import com.google.gwt.event.dom.client.HasClickHandlers;
33
import com.google.gwt.user.client.Window;
34
import com.google.gwt.user.client.ui.HTMLPanel;
35
import com.google.gwt.user.client.ui.HasWidgets;
36
import com.google.gwt.user.client.ui.IsWidget;
37
import com.google.gwt.user.client.ui.ListBox;
38
 
39
public class ResultatPictofloraPresenteur {
40
	public interface Vue extends IsWidget {
1203 gduche 41
 
42
 
1196 gduche 43
		public void startChargement();
44
 
45
		public void nettoyer();
46
 
47
		public void creerPanneauxObservations(int size);
48
 
49
		public void stopChargement();
50
 
51
		public List<HasWidgets> getPanneauxImages();
52
 
53
		public HasWidgets getPanneauPagination();
54
 
55
		public HasWidgets getPanneauPaginationHaut();
56
 
57
		public HasClickHandlers getTriParNbVotesAscendant();
58
 
59
		public HasClickHandlers getTriParNbVotesDescendant();
60
 
61
		public HasClickHandlers getTriParDateAscendant();
62
 
63
		public HasClickHandlers getTriParDateDescendant();
64
 
65
		public HasClickHandlers getTriParNbTagsAscendant();
66
 
67
		public HasClickHandlers getTriParNbTagsDescendant();
68
 
69
		public void afficherElementsAucunResultatTrouve();
70
 
71
		public void afficherElementsResultatsTrouve();
72
 
73
		public HTMLPanel getImageTable();
74
 
75
		public HasClickHandlers getLabelVote();
76
 
77
		public void masquerVoteAscendant();
78
 
79
		public void masquerVoteDescendant();
80
 
81
		public void afficherVoteAscendant();
82
 
83
		public void afficherVoteDescendant();
84
 
85
		public HasClickHandlers getLabelDate();
86
 
87
		public HasClickHandlers getLabelTag();
88
 
89
		public void masquerDateAscendant();
90
 
91
		public void masquerDateDescendant();
92
 
93
		public void afficherDateAscendant();
94
 
95
		public void afficherDateDescendant();
96
 
97
		public void masquerTagAscendant();
98
 
99
		public void afficherTagDescendant();
100
 
101
		public void masquerTagDescendant();
102
 
103
		public void afficherTagAscendant();
104
 
105
	}
106
 
107
	private Vue vue;
108
	private ImageService imageService;
109
	private final ProtocoleService protocoleService;
110
	private ModeTri triCourantVote = ModeTri.TRI_ASCENDANT;
111
	private ModeTri triCourantDate = ModeTri.TRI_DESCENDANT;
112
	private ModeTri triCourantTag = ModeTri.TRI_DESCENDANT;
113
 
114
	public ResultatPictofloraPresenteur(ImageService imageService, ProtocoleService protocoleService, Vue vue) {
115
		this.vue = vue;
116
		this.imageService = imageService;
117
		this.protocoleService=protocoleService;
118
	}
119
 
120
	public void go(HasWidgets composite) {
121
		composite.add(vue.asWidget());
122
		vue.startChargement();
123
		rechercherImagesEtCreerWidgetPagination();
124
		gererEvenements();
125
		vue.masquerVoteDescendant();
126
		vue.masquerVoteAscendant();
127
		// vue.masquerDateDescendant();
128
		vue.masquerDateAscendant();
129
		vue.masquerTagAscendant();
130
		vue.masquerTagDescendant();
131
	}
132
 
133
	public void gererEvenements() {
134
		ClickHandler surClicTriVote = new ClickHandler() {
135
			@Override
136
			public void onClick(ClickEvent event) {
137
				surClicTriVote();
138
			}
139
		};
140
 
141
		vue.getLabelVote().addClickHandler(surClicTriVote);
142
		vue.getTriParNbVotesAscendant().addClickHandler(surClicTriVote);
143
		vue.getTriParNbVotesDescendant().addClickHandler(surClicTriVote);
144
 
145
		ClickHandler surClicTriDate = new ClickHandler() {
146
			@Override
147
			public void onClick(ClickEvent event) {
148
				surClicTriDate();
149
			}
150
		};
151
 
152
		vue.getLabelDate().addClickHandler(surClicTriDate);
153
		vue.getTriParDateAscendant().addClickHandler(surClicTriDate);
154
		vue.getTriParDateDescendant().addClickHandler(surClicTriDate);
155
 
156
		ClickHandler surClicTriTag = new ClickHandler() {
157
			@Override
158
			public void onClick(ClickEvent event) {
159
				surClicTriTag();
160
			}
161
		};
162
 
163
		vue.getLabelTag().addClickHandler(surClicTriTag);
164
		vue.getTriParNbTagsAscendant().addClickHandler(surClicTriTag);
165
		vue.getTriParNbTagsDescendant().addClickHandler(surClicTriTag);
166
 
167
		BusEvenementiel.getInstance().addHandler(EvenementChangementProtocole.TYPE, new GestionnaireEvenementChangementProtocole() {
168
			@Override
169
			public void onChangementProtocole(EvenementChangementProtocole event) {
170
				InformationsRecherche informationsRechercheImages = CacheClient.getInstance().getInformationsRechercheImage();
171
				if (informationsRechercheImages.getTriParNbVotes() != ModeTri.PAS_DE_TRI) {
172
					informationsRechercheImages.setIdProtocoleSelectionne(event.getProtocole().getId() + "");
173
					chargerEtAfficherImagesPageEnCours();
174
				}
175
			}
176
		});
177
	}
178
 
179
	protected void surClicTriTag() {
180
		vue.masquerDateDescendant();
181
		vue.masquerDateAscendant();
182
		vue.masquerVoteDescendant();
183
		vue.masquerVoteAscendant();
184
		if (triCourantTag == ModeTri.TRI_ASCENDANT) {
185
			triCourantTag = ModeTri.TRI_DESCENDANT;
186
			vue.masquerTagAscendant();
187
			vue.afficherTagDescendant();
188
		} else {
189
			triCourantTag = ModeTri.TRI_ASCENDANT;
190
			vue.masquerTagDescendant();
191
			vue.afficherTagAscendant();
192
		}
193
		InformationsRecherche informationsRechercheImages = CacheClient.getInstance().getInformationsRechercheImage();
194
		informationsRechercheImages.setTriParNbTags(triCourantTag);
195
		informationsRechercheImages.setTriParDate(ModeTri.PAS_DE_TRI);
196
		informationsRechercheImages.setTriParNbVotes(ModeTri.PAS_DE_TRI);
197
		chargerEtAfficherImagesPageEnCours();
198
	}
199
 
200
	public void surClicTriVote() {
201
		vue.masquerDateDescendant();
202
		vue.masquerDateAscendant();
203
		vue.masquerTagAscendant();
204
		vue.masquerTagDescendant();
205
		if (triCourantVote == ModeTri.TRI_ASCENDANT) {
206
			triCourantVote = ModeTri.TRI_DESCENDANT;
207
			vue.masquerVoteAscendant();
208
			vue.afficherVoteDescendant();
209
		} else {
210
			triCourantVote = ModeTri.TRI_ASCENDANT;
211
			vue.masquerVoteDescendant();
212
			vue.afficherVoteAscendant();
213
		}
214
		InformationsRecherche informationsRechercheImages = CacheClient.getInstance().getInformationsRechercheImage();
215
		int IdProtocole = CacheClient.getInstance().getProtocoleCourant().getId();
216
		informationsRechercheImages.setTriParNbVotes(triCourantVote);
217
		informationsRechercheImages.setIdProtocoleSelectionne(IdProtocole + "");
218
		informationsRechercheImages.setTriParDate(ModeTri.PAS_DE_TRI);
219
		informationsRechercheImages.setTriParNbTags(ModeTri.PAS_DE_TRI);
220
		chargerEtAfficherImagesPageEnCours();
221
	}
222
 
223
	public void surClicTriDate() {
224
		vue.masquerVoteDescendant();
225
		vue.masquerVoteAscendant();
226
		if (triCourantDate == ModeTri.TRI_ASCENDANT) {
227
			triCourantDate = ModeTri.TRI_DESCENDANT;
228
			vue.masquerDateAscendant();
229
			vue.afficherDateDescendant();
230
		} else {
231
			triCourantDate = ModeTri.TRI_ASCENDANT;
232
			vue.masquerDateDescendant();
233
			vue.afficherDateAscendant();
234
		}
235
		InformationsRecherche informationsRechercheImages = CacheClient.getInstance().getInformationsRechercheImage();
236
		informationsRechercheImages.setTriParDate(triCourantDate);
237
		informationsRechercheImages.setTriParNbVotes(ModeTri.PAS_DE_TRI);
238
		informationsRechercheImages.setTriParNbTags(ModeTri.PAS_DE_TRI);
239
		chargerEtAfficherImagesPageEnCours();
240
	}
241
 
242
	public void rechercherImagesEtCreerWidgetPagination() {
243
		// appel du service d'image pour avoir le nb total d'elements pour la
244
		// pagination
245
		ImagesParTaxonCallback callback = new ImagesParTaxonCallback() {
246
 
247
			@Override
248
			public void surRetour(ImageServiceResultat imagesRecues) {
249
				creerWidgetPagination(imagesRecues.getNbTotalImagesPourLaRecherche());
250
				afficherImages(imagesRecues);
251
 
252
			}
253
 
254
			@Override
255
			public void surErreur(String messageErreur) {
256
				Window.alert(messageErreur);
257
 
258
			}
259
		};
260
		final int debut = (CacheClient.getInstance().getPageCouranteRechercheImage() - 1) * CacheClient.getInstance().getPasPagination();
261
		final int fin = (CacheClient.getInstance().getPageCouranteRechercheImage()) * CacheClient.getInstance().getPasPagination();
262
		imageService.getImagesParTaxon(CacheClient.getInstance().getInformationsRechercheImage(), debut, fin, callback);
263
	}
264
 
265
	private void chargerEtAfficherImages(final int premier, final int dernier) {
266
		vue.startChargement();
267
		vue.nettoyer();
268
		ImagesParTaxonCallback callback = new ImagesParTaxonCallback() {
269
 
270
			@Override
271
			public void surRetour(ImageServiceResultat imagesRecues) {
272
				afficherImages(imagesRecues);
273
			}
274
 
275
			@Override
276
			public void surErreur(String messageErreur) {
277
				Window.alert(messageErreur);
278
			}
279
 
280
		};
281
		imageService.getImagesParTaxon(CacheClient.getInstance().getInformationsRechercheImage(), premier, dernier, callback);
282
	}
283
 
284
	public void afficherImages(ImageServiceResultat imageServiceResult) {
285
		List<Image> images = imageServiceResult.getImages();
286
		if (images == null || images.size() == 0) {
287
			vue.afficherElementsAucunResultatTrouve();
288
		} else {
289
			vue.afficherElementsResultatsTrouve();
290
			for (Image image : images) {
291
				ImagePresenteur imagePresenteur = new ImagePresenteur(image, CacheClient.getInstance().getProtocoleCourant(), new ImageVue());
292
				imagePresenteur.go(vue.getImageTable());
293
			}
294
		}
295
		vue.stopChargement();
296
	}
297
 
298
	private void creerWidgetPagination(int nbImages) {
299
		PaginationPresenteur imagesPaginationPresenteurHaut = creerPresenteurPagination(nbImages);
300
		PaginationPresenteur imagesPaginationPresenteurBas = creerPresenteurPagination(nbImages);
301
		imagesPaginationPresenteurHaut.setGroupePagination("pagination_images");
302
		imagesPaginationPresenteurBas.setGroupePagination("pagination_images");
303
		imagesPaginationPresenteurHaut.go(vue.getPanneauPaginationHaut());
304
		imagesPaginationPresenteurBas.go(vue.getPanneauPagination());
305
	}
306
 
307
	public PaginationPresenteur creerPresenteurPagination(int nbImages) {
308
		PaginationPresenteur imagesPaginationPresenteur = new PaginationPresenteur(new PaginationVue(), nbImages, CacheClient.getInstance().getPasPagination(), CacheClient.getInstance().getPageCouranteRechercheImage()) {
309
			@Override
310
			public void chargerElements(int debut, int fin) {
311
				chargerEtAfficherImages(debut, fin);
312
				CacheClient.getInstance().setPageCouranteRechercheImages(getPageCourante());
313
			}
314
 
315
			@Override
316
			public void actualiserPasCache(int pas) {
317
				CacheClient.getInstance().setPasPagination(pas);
318
			}
319
		};
320
		return imagesPaginationPresenteur;
321
	}
322
 
323
	public void chargerEtAfficherImagesPageEnCours() {
324
		final int debut = (CacheClient.getInstance().getPageCouranteRechercheImage() - 1) * CacheClient.getInstance().getPasPagination();
325
		final int fin = (CacheClient.getInstance().getPageCouranteRechercheImage()) * CacheClient.getInstance().getPasPagination();
326
		chargerEtAfficherImages(debut, fin);
327
	}
328
 
329
	public Vue getVue() {
330
		return vue;
331
	}
332
}