Subversion Repositories eFlore/Applications.del

Rev

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