Subversion Repositories eFlore/Applications.del

Rev

Details | Last modification | View Log | RSS feed

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