Subversion Repositories eFlore/Applications.del

Rev

Rev 1234 | Go to most recent revision | Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
1196 gduche 1
package org.tela_botanica.del.client.vues.identiplante.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;
7
import org.tela_botanica.del.client.modeles.InformationsRecherche;
8
import org.tela_botanica.del.client.modeles.ModeTri;
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;
13
import org.tela_botanica.del.client.vues.identiplante.resultats.observations.ObservationPresenteur;
14
import org.tela_botanica.del.client.vues.identiplante.resultats.observations.ObservationVue;
15
 
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;
19
import com.google.gwt.user.client.Window;
20
import com.google.gwt.user.client.ui.HasWidgets;
21
import com.google.gwt.user.client.ui.IsWidget;
22
 
23
public class ResultatsIdentiplantePresenteur extends Presenteur {
24
 
25
	/**
26
	 * Interface vue : création des composants graphiques
27
	 * */
28
	public abstract interface Vue extends IsWidget {
29
		public HasWidgets getZoneObservations();
30
 
31
		public HasWidgets getZonePaginationHaut();
32
 
33
		public HasWidgets getZonePaginationBas();
34
 
35
		public void startChargement();
36
 
37
		public void stopChargement();
38
 
39
		public void nettoyer();
40
 
41
		public HasClickHandlers getTriParDateAscendant();
42
 
43
		public HasClickHandlers getTriParDateDescendant();
44
 
45
		public void afficherElementsAucunResultatTrouve();
46
 
47
		public void afficherElementsResultatsTrouves();
48
 
49
		public HasClickHandlers getLabelDate();
50
 
51
		public void setModeTri(ModeTri mode);
52
	}
53
 
54
	private Vue vue;
55
	private ObservationService serviceObs;
56
	private ModeTri triCourantDate = ModeTri.TRI_DESCENDANT;
57
	private CacheClient cache = CacheClient.getInstance();
58
	private String statut;
59
 
60
	/**
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
66
	 * */
67
	public ResultatsIdentiplantePresenteur(ObservationService serviceObs, Vue vue, String statut) {
68
		this.vue = vue;
69
		vue.setModeTri(triCourantDate);
70
		this.serviceObs = serviceObs;
71
		this.statut = statut;
72
	}
73
 
74
	/**
75
	 * Lancer l'affichage de la recherche dans le composant passé en paramètre
76
	 *
77
	 * @param HasWidgets
78
	 *            composite le conteneur de widgets dans lequel ajouter la vue
79
	 * */
80
	public void go(HasWidgets composite) {
81
		composite.add(vue.asWidget());
82
		lancerRechercheEtCreerWidgetPagination();
83
		gererEvenements();
84
	}
85
 
86
	/**
87
	 * Initier un callback pour créer le widget de pagination et afficher les
88
	 * observations recues et lancer la recherche avec le service
89
	 * */
90
	public void lancerRechercheEtCreerWidgetPagination() {
91
 
92
		int debut = (cache.getPageCouranteRechercheObservations() - 1) * cache.getPasPagination();
93
		int fin = cache.getPageCouranteRechercheObservations() * cache.getPasPagination();
94
 
95
		ObservationsCallback callback = new ObservationsCallback() {
96
 
97
			@Override
98
			public void surRetour(ObservationServiceResultat observationsRecues) {
99
				creerWidgetPagination(observationsRecues.getNbTotalObservationsPourLaRecherche());
100
				afficherObservations(observationsRecues);
101
 
102
			}
103
 
104
			@Override
105
			public void surErreur(String messageErreur) {
106
				Window.alert(messageErreur);
107
 
108
			}
109
		};
110
 
111
		serviceObs.getObservations(cache.getInformationsRechercheObservation(), debut, fin, statut, callback);
112
	}
113
 
114
	/**
115
	 * Créer les widgets de pagination en fonction du nombre d'observation
116
	 *
117
	 * @param int nbObservations le nombre d'observations à afficher
118
	 * */
119
	private void creerWidgetPagination(int nbObservations) {
120
		vue.getZonePaginationHaut().clear();
121
		PaginationPresenteur paginationPresenteurHaut = creerPresenteurPagination(nbObservations);
122
		paginationPresenteurHaut.setGroupePagination("pagination_observations");
123
		paginationPresenteurHaut.go(vue.getZonePaginationHaut());
124
 
125
		vue.getZonePaginationBas().clear();
126
		PaginationPresenteur paginationPresenteurBas = creerPresenteurPagination(nbObservations);
127
		paginationPresenteurBas.setGroupePagination("pagination_observations");
128
		paginationPresenteurBas.go(vue.getZonePaginationBas());
129
	}
130
 
131
	/**
132
	 * Créer un présenteur du widget pagination
133
	 *
134
	 * @param int nbObservations le nombre total d'observation à afficher
135
	 * */
136
	private PaginationPresenteur creerPresenteurPagination(int nbObservations) {
137
		PaginationPresenteur presenteur = new PaginationPresenteur(new PaginationVue(), nbObservations, cache.getPasPagination(), cache.getPageCouranteRechercheObservations()) {
138
 
139
			@Override
140
			public void chargerElements(int debut, int fin) {
141
				chargerEtAfficherObservations(debut, fin);
142
				cache.setPageCouranteRechercheObservations(getPageCourante());
143
			}
144
 
145
			@Override
146
			public void actualiserPasCache(int pas) {
147
				cache.setPasPagination(pas);
148
			}
149
 
150
		};
151
		return presenteur;
152
	}
153
 
154
	/**
155
	 * Gestion des évènements de la vue recherche Observation
156
	 * */
157
	protected void gererEvenements() {
158
 
159
		ClickHandler surClicDate = new ClickHandler() {
160
			/**
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
163
			 * */
164
			public void onClick(ClickEvent event) {
165
				toggleModeTri();
166
 
167
				InformationsRecherche informationsRechercheObservations = cache.getInformationsRechercheObservation();
168
				informationsRechercheObservations.setTriParDate(triCourantDate);
169
				chercherEtAfficherObservationsPageEnCours();
170
			}
171
		};
172
 
173
		vue.getLabelDate().addClickHandler(surClicDate);
174
		vue.getTriParDateAscendant().addClickHandler(surClicDate);
175
		vue.getTriParDateDescendant().addClickHandler(surClicDate);
176
	}
177
 
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
		}
187
 
188
		vue.setModeTri(triCourantDate);
189
	}
190
 
191
	/**
192
	 * Initialiser les variable de début et fin et lancer le chargement des
193
	 * observations
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
	}
200
 
201
	/**
202
	 * Lancer le service pour charger les observations entre debut et fin et les
203
	 * afficher
204
	 *
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();
211
 
212
		ObservationsCallback surReceptionObservation = new ObservationsCallback() {
213
 
214
			@Override
215
			public void surRetour(ObservationServiceResultat observationsRecues) {
216
				afficherObservations(observationsRecues);
217
 
218
			}
219
 
220
			@Override
221
			public void surErreur(String messageErreur) {
222
				Window.alert(messageErreur);
223
 
224
			}
225
		};
226
		serviceObs.getObservations(cache.getInformationsRechercheObservation(), debut, fin, statut, surReceptionObservation);
227
	}
228
 
229
	/**
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
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()) {
244
				ObservationPresenteur presenteur = new ObservationPresenteur(new ObservationVue(), observation, observation.getImages().get(0));
245
				presenteur.go(vue.getZoneObservations());
246
			}
247
		}
248
		vue.stopChargement();
249
	}
250
}