Subversion Repositories eFlore/Applications.del

Rev

Rev 1234 | Rev 1501 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

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