Subversion Repositories eFlore/Applications.del

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
445 benjamin 1
package org.tela_botanica.del.client.vues.rechercheobservations.resultats;
2
 
3
import org.tela_botanica.del.client.cache.CacheClient;
4
import org.tela_botanica.del.client.composants.pagination.PaginationPresenteur;
5
import org.tela_botanica.del.client.composants.pagination.PaginationVue;
6
import org.tela_botanica.del.client.composants.presenteur.Presenteur;
459 benjamin 7
import org.tela_botanica.del.client.modeles.InformationsRecherche;
8
import org.tela_botanica.del.client.modeles.ModeTri;
445 benjamin 9
import org.tela_botanica.del.client.modeles.Observation;
10
import org.tela_botanica.del.client.modeles.ObservationServiceResultat;
11
import org.tela_botanica.del.client.services.rest.ObservationService;
12
import org.tela_botanica.del.client.services.rest.async.ObservationsCallback;
480 benjamin 13
import org.tela_botanica.del.client.vues.rechercheobservations.resultats.observations.ObservationPresenteur;
14
import org.tela_botanica.del.client.vues.rechercheobservations.resultats.observations.ObservationVue;
445 benjamin 15
 
459 benjamin 16
import com.google.gwt.event.dom.client.ClickEvent;
17
import com.google.gwt.event.dom.client.ClickHandler;
18
import com.google.gwt.event.dom.client.HasClickHandlers;
939 benjamin 19
import com.google.gwt.user.client.Window;
445 benjamin 20
import com.google.gwt.user.client.ui.HasWidgets;
21
import com.google.gwt.user.client.ui.IsWidget;
22
 
23
public class ResultatsRechercheObservationsPresenteur extends Presenteur {
24
 
903 gduche 25
	/**
26
	 * Interface vue : création des composants graphiques
27
	 * */
445 benjamin 28
	public abstract interface Vue extends IsWidget {
29
		public HasWidgets getZoneObservations();
939 benjamin 30
 
445 benjamin 31
		public HasWidgets getZonePaginationHaut();
939 benjamin 32
 
445 benjamin 33
		public HasWidgets getZonePaginationBas();
939 benjamin 34
 
445 benjamin 35
		public void startChargement();
939 benjamin 36
 
445 benjamin 37
		public void stopChargement();
939 benjamin 38
 
445 benjamin 39
		public void nettoyer();
939 benjamin 40
 
459 benjamin 41
		public HasClickHandlers getTriParDateAscendant();
939 benjamin 42
 
459 benjamin 43
		public HasClickHandlers getTriParDateDescendant();
939 benjamin 44
 
564 benjamin 45
		public void afficherElementsAucunResultatTrouve();
939 benjamin 46
 
47
		public void afficherElementsResultatsTrouves();
48
 
677 gduche 49
		public HasClickHandlers getLabelDate();
939 benjamin 50
 
903 gduche 51
		public void setModeTri(ModeTri mode);
445 benjamin 52
	}
53
 
54
	private Vue vue;
903 gduche 55
	private ObservationService serviceObs;
677 gduche 56
	private ModeTri triCourantDate = ModeTri.TRI_DESCENDANT;
903 gduche 57
	private CacheClient cache = CacheClient.getInstance();
1101 gduche 58
	private String statut;
939 benjamin 59
 
903 gduche 60
	/**
939 benjamin 61
	 * Constructeur de la classe
62
	 *
63
	 * @param ObservationService
64
	 *            serviceObs le service pour récupérer les observations
65
	 * @Vue Vue l'objet implémentant l'interface
903 gduche 66
	 * */
1101 gduche 67
	public ResultatsRechercheObservationsPresenteur(ObservationService serviceObs, Vue vue, String statut) {
445 benjamin 68
		this.vue = vue;
903 gduche 69
		vue.setModeTri(triCourantDate);
445 benjamin 70
		this.serviceObs = serviceObs;
1101 gduche 71
		this.statut = statut;
445 benjamin 72
	}
73
 
903 gduche 74
	/**
75
	 * Lancer l'affichage de la recherche dans le composant passé en paramètre
939 benjamin 76
	 *
77
	 * @param HasWidgets
78
	 *            composite le conteneur de widgets dans lequel ajouter la vue
903 gduche 79
	 * */
445 benjamin 80
	public void go(HasWidgets composite) {
81
		composite.add(vue.asWidget());
82
		lancerRechercheEtCreerWidgetPagination();
459 benjamin 83
		gererEvenements();
445 benjamin 84
	}
85
 
903 gduche 86
	/**
939 benjamin 87
	 * Initier un callback pour créer le widget de pagination et afficher les
88
	 * observations recues et lancer la recherche avec le service
903 gduche 89
	 * */
90
	public void lancerRechercheEtCreerWidgetPagination() {
939 benjamin 91
 
903 gduche 92
		int debut = (cache.getPageCouranteRechercheObservations() - 1) * cache.getPasPagination();
93
		int fin = cache.getPageCouranteRechercheObservations() * cache.getPasPagination();
939 benjamin 94
 
445 benjamin 95
		ObservationsCallback callback = new ObservationsCallback() {
939 benjamin 96
 
97
			@Override
98
			public void surRetour(ObservationServiceResultat observationsRecues) {
903 gduche 99
				creerWidgetPagination(observationsRecues.getNbTotalObservationsPourLaRecherche());
445 benjamin 100
				afficherObservations(observationsRecues);
939 benjamin 101
 
445 benjamin 102
			}
939 benjamin 103
 
104
			@Override
105
			public void surErreur(String messageErreur) {
106
				Window.alert(messageErreur);
107
 
108
			}
445 benjamin 109
		};
939 benjamin 110
 
1101 gduche 111
		serviceObs.getObservations(cache.getInformationsRechercheObservation(), debut, fin, statut, callback);
445 benjamin 112
	}
939 benjamin 113
 
903 gduche 114
	/**
115
	 * Créer les widgets de pagination en fonction du nombre d'observation
939 benjamin 116
	 *
903 gduche 117
	 * @param int nbObservations le nombre d'observations à afficher
118
	 * */
445 benjamin 119
	private void creerWidgetPagination(int nbObservations) {
120
		vue.getZonePaginationHaut().clear();
903 gduche 121
		PaginationPresenteur paginationPresenteurHaut = creerPresenteurPagination(nbObservations);
122
		paginationPresenteurHaut.setGroupePagination("pagination_observations");
123
		paginationPresenteurHaut.go(vue.getZonePaginationHaut());
939 benjamin 124
 
445 benjamin 125
		vue.getZonePaginationBas().clear();
126
		PaginationPresenteur paginationPresenteurBas = creerPresenteurPagination(nbObservations);
446 aurelien 127
		paginationPresenteurBas.setGroupePagination("pagination_observations");
445 benjamin 128
		paginationPresenteurBas.go(vue.getZonePaginationBas());
129
	}
939 benjamin 130
 
903 gduche 131
	/**
132
	 * Créer un présenteur du widget pagination
939 benjamin 133
	 *
903 gduche 134
	 * @param int nbObservations le nombre total d'observation à afficher
135
	 * */
445 benjamin 136
	private PaginationPresenteur creerPresenteurPagination(int nbObservations) {
903 gduche 137
		PaginationPresenteur presenteur = new PaginationPresenteur(new PaginationVue(), nbObservations, cache.getPasPagination(), cache.getPageCouranteRechercheObservations()) {
445 benjamin 138
 
139
			@Override
140
			public void chargerElements(int debut, int fin) {
141
				chargerEtAfficherObservations(debut, fin);
903 gduche 142
				cache.setPageCouranteRechercheObservations(getPageCourante());
445 benjamin 143
			}
144
 
145
			@Override
146
			public void actualiserPasCache(int pas) {
903 gduche 147
				cache.setPasPagination(pas);
445 benjamin 148
			}
149
 
150
		};
903 gduche 151
		return presenteur;
445 benjamin 152
	}
939 benjamin 153
 
903 gduche 154
	/**
155
	 * Gestion des évènements de la vue recherche Observation
156
	 * */
157
	protected void gererEvenements() {
939 benjamin 158
 
903 gduche 159
		ClickHandler surClicDate = new ClickHandler() {
160
			/**
939 benjamin 161
			 * Gestion du clic sur l'option de tri par date d'observation Masque
162
			 * les éléments de tri qui sont en cours et affiche les autres
903 gduche 163
			 * */
164
			public void onClick(ClickEvent event) {
165
				toggleModeTri();
939 benjamin 166
 
903 gduche 167
				InformationsRecherche informationsRechercheObservations = cache.getInformationsRechercheObservation();
168
				informationsRechercheObservations.setTriParDate(triCourantDate);
169
				chercherEtAfficherObservationsPageEnCours();
170
			}
171
		};
939 benjamin 172
 
903 gduche 173
		vue.getLabelDate().addClickHandler(surClicDate);
174
		vue.getTriParDateAscendant().addClickHandler(surClicDate);
175
		vue.getTriParDateDescendant().addClickHandler(surClicDate);
176
	}
445 benjamin 177
 
903 gduche 178
	/**
179
	 * Inverser le mode de tri en fonction du précédent
180
	 * */
181
	public void toggleModeTri() {
182
		if (triCourantDate == ModeTri.TRI_ASCENDANT) {
183
			triCourantDate = ModeTri.TRI_DESCENDANT;
184
		} else {
185
			triCourantDate = ModeTri.TRI_ASCENDANT;
186
		}
939 benjamin 187
 
903 gduche 188
		vue.setModeTri(triCourantDate);
189
	}
939 benjamin 190
 
903 gduche 191
	/**
939 benjamin 192
	 * Initialiser les variable de début et fin et lancer le chargement des
193
	 * observations
903 gduche 194
	 * */
195
	public void chercherEtAfficherObservationsPageEnCours() {
196
		int debut = (cache.getPageCouranteRechercheObservations() - 1) * cache.getPasPagination();
197
		int fin = (cache.getPageCouranteRechercheObservations()) * cache.getPasPagination();
198
		chargerEtAfficherObservations(debut, fin);
199
	}
939 benjamin 200
 
903 gduche 201
	/**
939 benjamin 202
	 * Lancer le service pour charger les observations entre debut et fin et les
203
	 * afficher
204
	 *
903 gduche 205
	 * @param int debut l'entier de départ de la requete
206
	 * @param int fin l'entier de limite de la requete
207
	 * */
208
	public void chargerEtAfficherObservations(int debut, int fin) {
209
		vue.startChargement();
210
		vue.nettoyer();
939 benjamin 211
 
903 gduche 212
		ObservationsCallback surReceptionObservation = new ObservationsCallback() {
213
 
445 benjamin 214
			@Override
939 benjamin 215
			public void surRetour(ObservationServiceResultat observationsRecues) {
445 benjamin 216
				afficherObservations(observationsRecues);
939 benjamin 217
 
445 benjamin 218
			}
939 benjamin 219
 
220
			@Override
221
			public void surErreur(String messageErreur) {
222
				Window.alert(messageErreur);
223
 
224
			}
445 benjamin 225
		};
1101 gduche 226
		serviceObs.getObservations(cache.getInformationsRechercheObservation(), debut, fin, statut, surReceptionObservation);
445 benjamin 227
	}
228
 
903 gduche 229
	/**
939 benjamin 230
	 * Parcrourir les résultats de la recherche pour initier l'affichage de
231
	 * chaque observation
232
	 *
233
	 * @param ObservationServiceResultat
234
	 *            resultats les résultats issus de la requête
903 gduche 235
	 * */
236
	private void afficherObservations(ObservationServiceResultat resultats) {
237
		vue.nettoyer();
238
 
239
		if (resultats.getObservations() == null || resultats.getObservations().size() == 0) {
240
			vue.afficherElementsAucunResultatTrouve();
241
		} else {
242
			vue.afficherElementsResultatsTrouves();
243
			for (Observation observation : resultats.getObservations()) {
1006 benjamin 244
				ObservationPresenteur presenteur = new ObservationPresenteur(new ObservationVue(), observation, observation.getImages().get(0));
903 gduche 245
				presenteur.go(vue.getZoneObservations());
246
			}
247
		}
248
		vue.stopChargement();
459 benjamin 249
	}
445 benjamin 250
}