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