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