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