Subversion Repositories eFlore/Applications.del

Rev

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
	 * */
1234 gduche 67
	public ResultatsIdentiplantePresenteur(ObservationService serviceObs, Vue vue) {
68
		String statut = CacheClient.getInstance().getFiltreStatut();
1196 gduche 69
		this.vue = vue;
70
		vue.setModeTri(triCourantDate);
71
		this.serviceObs = serviceObs;
72
		this.statut = statut;
73
	}
74
 
75
	/**
76
	 * Lancer l'affichage de la recherche dans le composant passé en paramètre
77
	 *
78
	 * @param HasWidgets
79
	 *            composite le conteneur de widgets dans lequel ajouter la vue
80
	 * */
81
	public void go(HasWidgets composite) {
82
		composite.add(vue.asWidget());
83
		lancerRechercheEtCreerWidgetPagination();
84
		gererEvenements();
85
	}
86
 
87
	/**
88
	 * Initier un callback pour créer le widget de pagination et afficher les
89
	 * observations recues et lancer la recherche avec le service
90
	 * */
91
	public void lancerRechercheEtCreerWidgetPagination() {
92
 
93
		int debut = (cache.getPageCouranteRechercheObservations() - 1) * cache.getPasPagination();
94
		int fin = cache.getPageCouranteRechercheObservations() * cache.getPasPagination();
95
 
96
		ObservationsCallback callback = new ObservationsCallback() {
97
 
98
			@Override
99
			public void surRetour(ObservationServiceResultat observationsRecues) {
100
				creerWidgetPagination(observationsRecues.getNbTotalObservationsPourLaRecherche());
101
				afficherObservations(observationsRecues);
102
 
103
			}
104
 
105
			@Override
106
			public void surErreur(String messageErreur) {
107
				Window.alert(messageErreur);
108
 
109
			}
110
		};
111
 
112
		serviceObs.getObservations(cache.getInformationsRechercheObservation(), debut, fin, statut, callback);
113
	}
114
 
115
	/**
116
	 * Créer les widgets de pagination en fonction du nombre d'observation
117
	 *
118
	 * @param int nbObservations le nombre d'observations à afficher
119
	 * */
120
	private void creerWidgetPagination(int nbObservations) {
121
		vue.getZonePaginationHaut().clear();
122
		PaginationPresenteur paginationPresenteurHaut = creerPresenteurPagination(nbObservations);
123
		paginationPresenteurHaut.setGroupePagination("pagination_observations");
124
		paginationPresenteurHaut.go(vue.getZonePaginationHaut());
125
 
126
		vue.getZonePaginationBas().clear();
127
		PaginationPresenteur paginationPresenteurBas = creerPresenteurPagination(nbObservations);
128
		paginationPresenteurBas.setGroupePagination("pagination_observations");
129
		paginationPresenteurBas.go(vue.getZonePaginationBas());
130
	}
131
 
132
	/**
133
	 * Créer un présenteur du widget pagination
134
	 *
135
	 * @param int nbObservations le nombre total d'observation à afficher
136
	 * */
137
	private PaginationPresenteur creerPresenteurPagination(int nbObservations) {
138
		PaginationPresenteur presenteur = new PaginationPresenteur(new PaginationVue(), nbObservations, cache.getPasPagination(), cache.getPageCouranteRechercheObservations()) {
139
 
140
			@Override
141
			public void chargerElements(int debut, int fin) {
142
				chargerEtAfficherObservations(debut, fin);
143
				cache.setPageCouranteRechercheObservations(getPageCourante());
144
			}
145
 
146
			@Override
147
			public void actualiserPasCache(int pas) {
148
				cache.setPasPagination(pas);
149
			}
150
 
151
		};
152
		return presenteur;
153
	}
154
 
155
	/**
156
	 * Gestion des évènements de la vue recherche Observation
157
	 * */
158
	protected void gererEvenements() {
159
 
160
		ClickHandler surClicDate = new ClickHandler() {
161
			/**
162
			 * Gestion du clic sur l'option de tri par date d'observation Masque
163
			 * les éléments de tri qui sont en cours et affiche les autres
164
			 * */
165
			public void onClick(ClickEvent event) {
166
				toggleModeTri();
167
 
168
				InformationsRecherche informationsRechercheObservations = cache.getInformationsRechercheObservation();
169
				informationsRechercheObservations.setTriParDate(triCourantDate);
170
				chercherEtAfficherObservationsPageEnCours();
171
			}
172
		};
173
 
174
		vue.getLabelDate().addClickHandler(surClicDate);
175
		vue.getTriParDateAscendant().addClickHandler(surClicDate);
176
		vue.getTriParDateDescendant().addClickHandler(surClicDate);
177
	}
178
 
179
	/**
180
	 * Inverser le mode de tri en fonction du précédent
181
	 * */
182
	public void toggleModeTri() {
183
		if (triCourantDate == ModeTri.TRI_ASCENDANT) {
184
			triCourantDate = ModeTri.TRI_DESCENDANT;
185
		} else {
186
			triCourantDate = ModeTri.TRI_ASCENDANT;
187
		}
188
 
189
		vue.setModeTri(triCourantDate);
190
	}
191
 
192
	/**
193
	 * Initialiser les variable de début et fin et lancer le chargement des
194
	 * observations
195
	 * */
196
	public void chercherEtAfficherObservationsPageEnCours() {
197
		int debut = (cache.getPageCouranteRechercheObservations() - 1) * cache.getPasPagination();
198
		int fin = (cache.getPageCouranteRechercheObservations()) * cache.getPasPagination();
199
		chargerEtAfficherObservations(debut, fin);
200
	}
201
 
202
	/**
203
	 * Lancer le service pour charger les observations entre debut et fin et les
204
	 * afficher
205
	 *
206
	 * @param int debut l'entier de départ de la requete
207
	 * @param int fin l'entier de limite de la requete
208
	 * */
209
	public void chargerEtAfficherObservations(int debut, int fin) {
210
		vue.startChargement();
211
		vue.nettoyer();
212
 
213
		ObservationsCallback surReceptionObservation = new ObservationsCallback() {
214
 
215
			@Override
216
			public void surRetour(ObservationServiceResultat observationsRecues) {
217
				afficherObservations(observationsRecues);
218
 
219
			}
220
 
221
			@Override
222
			public void surErreur(String messageErreur) {
223
				Window.alert(messageErreur);
224
 
225
			}
226
		};
227
		serviceObs.getObservations(cache.getInformationsRechercheObservation(), debut, fin, statut, surReceptionObservation);
228
	}
229
 
230
	/**
231
	 * Parcrourir les résultats de la recherche pour initier l'affichage de
232
	 * chaque observation
233
	 *
234
	 * @param ObservationServiceResultat
235
	 *            resultats les résultats issus de la requête
236
	 * */
237
	private void afficherObservations(ObservationServiceResultat resultats) {
238
		vue.nettoyer();
239
 
240
		if (resultats.getObservations() == null || resultats.getObservations().size() == 0) {
241
			vue.afficherElementsAucunResultatTrouve();
242
		} else {
243
			vue.afficherElementsResultatsTrouves();
244
			for (Observation observation : resultats.getObservations()) {
245
				ObservationPresenteur presenteur = new ObservationPresenteur(new ObservationVue(), observation, observation.getImages().get(0));
246
				presenteur.go(vue.getZoneObservations());
247
			}
248
		}
249
		vue.stopChargement();
250
	}
251
}