Subversion Repositories eFlore/Applications.del

Rev

Rev 651 | Go to most recent revision | Only display areas with differences | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 651 Rev 679
1
package org.tela_botanica.del.client.composants.pagination;
1
package org.tela_botanica.del.client.composants.pagination;
2
 
2
 
3
import org.tela_botanica.del.client.navigation.evenement.BusEvenementiel;
3
import org.tela_botanica.del.client.navigation.evenement.BusEvenementiel;
4
import org.tela_botanica.del.client.navigation.evenement.pagination.EvenementChangementPage;
4
import org.tela_botanica.del.client.navigation.evenement.pagination.EvenementChangementPage;
5
import org.tela_botanica.del.client.navigation.evenement.pagination.EvenementChangementPas;
5
import org.tela_botanica.del.client.navigation.evenement.pagination.EvenementChangementPas;
6
import org.tela_botanica.del.client.navigation.evenement.pagination.GestionnaireEvenementChangementPage;
6
import org.tela_botanica.del.client.navigation.evenement.pagination.GestionnaireEvenementChangementPage;
7
import org.tela_botanica.del.client.navigation.evenement.pagination.GestionnaireEvenementChangementPas;
7
import org.tela_botanica.del.client.navigation.evenement.pagination.GestionnaireEvenementChangementPas;
8
import com.google.gwt.event.dom.client.ChangeEvent;
8
import com.google.gwt.event.dom.client.ChangeEvent;
9
import com.google.gwt.event.dom.client.ChangeHandler;
9
import com.google.gwt.event.dom.client.ChangeHandler;
10
import com.google.gwt.event.dom.client.ClickEvent;
10
import com.google.gwt.event.dom.client.ClickEvent;
11
import com.google.gwt.event.dom.client.ClickHandler;
11
import com.google.gwt.event.dom.client.ClickHandler;
12
import com.google.gwt.event.dom.client.HasChangeHandlers;
12
import com.google.gwt.event.dom.client.HasChangeHandlers;
13
import com.google.gwt.event.dom.client.HasClickHandlers;
13
import com.google.gwt.event.dom.client.HasClickHandlers;
14
import com.google.gwt.user.client.ui.HasWidgets;
14
import com.google.gwt.user.client.ui.HasWidgets;
15
import com.google.gwt.user.client.ui.IsWidget;
15
import com.google.gwt.user.client.ui.IsWidget;
16
 
16
 
17
/**
17
/**
18
 * @author gregoire Pagination GENERIQUE qui permet d'afficher un nombre donné
18
 * @author gregoire Pagination GENERIQUE qui permet d'afficher un nombre donné
19
 *         d'éléments (pas) La méthode changerPage est abstraite et doit être
19
 *         d'éléments (pas) La méthode changerPage est abstraite et doit être
20
 *         définie lors de l'instanciation de la classe pagination pour
20
 *         définie lors de l'instanciation de la classe pagination pour
21
 *         permettre d'afficher la suite des éléments La méthode
21
 *         permettre d'afficher la suite des éléments La méthode
22
 *         actualiserPasCache est abstraite car le pas est différent en fonction
22
 *         actualiserPasCache est abstraite car le pas est différent en fonction
23
 *         de la page où l'on se trouve
23
 *         de la page où l'on se trouve
24
 * */
24
 * */
25
public abstract class PaginationPresenteur {
25
public abstract class PaginationPresenteur {
26
 
26
 
27
	public interface Vue extends IsWidget {
27
	public interface Vue extends IsWidget {
28
		public HasClickHandlers getBoutonSuivant();
28
		public HasClickHandlers getBoutonSuivant();
29
		public HasClickHandlers getBoutonPrecedent();
29
		public HasClickHandlers getBoutonPrecedent();
30
		public HasClickHandlers getBoutonPremierePage();
30
		public HasClickHandlers getBoutonPremierePage();
31
		public HasClickHandlers getBoutonDernierePage();
31
		public HasClickHandlers getBoutonDernierePage();
32
		public void masquerBoutonPrecedent();
32
		public void masquerBoutonPrecedent();
33
		public void afficherBoutonPrecedent();
33
		public void afficherBoutonPrecedent();
34
		public void masquerBoutonSuivant();
34
		public void masquerBoutonSuivant();
35
		public void afficherBoutonSuivant();
35
		public void afficherBoutonSuivant();
36
		public boolean boutonPrecedentEstAffiche();
36
		public boolean boutonPrecedentEstAffiche();
37
		public boolean boutonSuivantEstAffiche();
37
		public boolean boutonSuivantEstAffiche();
38
		public HasChangeHandlers getSelecteurPas();
38
		public HasChangeHandlers getSelecteurPas();
39
		public int getPasSelectionne();
39
		public int getPasSelectionne();
40
		public void afficherPas(int pas);
40
		public void afficherPas(int pas);
41
		public void mettreNbTotalPages(int nbPages);
41
		public void mettreNbTotalPages(int nbPages);
42
		public HasChangeHandlers getSaisiePageCourante();
42
		public HasChangeHandlers getSaisiePageCourante();
43
		public int getPageSaisie();
43
		public int getPageSaisie();
44
		public void setPageCourante(int pageCourante);
44
		public void setPageCourante(int pageCourante);
45
	}
45
	}
46
 
46
 
47
	private Vue vue;
47
	private Vue vue;
48
	private int nbPage = 1;
48
	private int nbPage = 1;
49
	private int pageCourante = 1;
49
	private int pageCourante = 1;
50
	private int nbElementsTotal = 0;
50
	private int nbElementsTotal = 0;
51
	private int pas = 10;
51
	private int pas = 10;
52
 
52
 
53
	private String groupePagination = null;
53
	private String groupePagination = null;
54
 
54
 
55
	/**
55
	/**
56
	 * Constructeur de l'application
56
	 * Constructeur de l'application
57
	 * 
57
	 * 
58
	 * @param nbElementsTotal
58
	 * @param nbElementsTotal
59
	 *            : le nombre total des éléments à paginer
59
	 *            : le nombre total des éléments à paginer
60
	 * @param pas
60
	 * @param pas
61
	 *            : le nombre d'éléments à afficher par page
61
	 *            : le nombre d'éléments à afficher par page
62
	 * */
62
	 * */
63
	public PaginationPresenteur(Vue vue, int nbElementsTotal, int pas, int pageCourante) {
63
	public PaginationPresenteur(Vue vue, int nbElementsTotal, int pas, int pageCourante) {
64
		this.nbElementsTotal = nbElementsTotal;
64
		this.nbElementsTotal = nbElementsTotal;
65
		this.vue = vue;
65
		this.vue = vue;
66
		this.pas = pas;
66
		this.pas = pas;
67
		this.pageCourante = pageCourante;
67
		this.pageCourante = pageCourante;
68
		vue.setPageCourante(pageCourante);
68
		vue.setPageCourante(pageCourante);
69
		this.nbPage = calculerNbPage();
69
		this.nbPage = calculerNbPage();
70
	}
70
	}
71
 
71
 
72
	/**
72
	/**
73
	 * Methode go du modèle MVP
73
	 * Methode go du modèle MVP
74
	 * 
74
	 * 
75
	 * @param container
75
	 * @param container
76
	 *            : la vue ou éxécuter l'affichage
76
	 *            : la vue ou éxécuter l'affichage
77
	 */
77
	 */
78
	public void go(HasWidgets container) {
78
	public void go(HasWidgets container) {
79
		container.add(vue.asWidget());
79
		container.add(vue.asWidget());
80
		gererEvenements();
80
		gererEvenements();
81
		actualiserPas();
81
		actualiserPas();
82
		actualiserAffichageBoutons();
82
		actualiserAffichageBoutons();
-
 
83
		vue.mettreNbTotalPages(nbPage);
83
	}
84
	}
84
 
85
 
85
	/**
86
	/**
86
	 * Gérer les évènements sur les boutons statiques (précédent, suivant et
87
	 * Gérer les évènements sur les boutons statiques (précédent, suivant et
87
	 * selecteur pas)
88
	 * selecteur pas)
88
	 * */
89
	 * */
89
	protected void gererEvenements() {
90
	protected void gererEvenements() {
90
		
91
		
91
		vue.getSaisiePageCourante().addChangeHandler(new ChangeHandler() {
92
		vue.getSaisiePageCourante().addChangeHandler(new ChangeHandler() {
92
			@Override
93
			@Override
93
			public void onChange(ChangeEvent event) {
94
			public void onChange(ChangeEvent event) {
94
				int pageSaisie;
95
				int pageSaisie;
95
				try {
96
				try {
96
					pageSaisie = vue.getPageSaisie();
97
					pageSaisie = vue.getPageSaisie();
97
					if (pageSaisie < 0) {
98
					if (pageSaisie < 0) {
98
						pageSaisie = 1;
99
						pageSaisie = 1;
99
					} else if (pageSaisie > nbPage){
100
					} else if (pageSaisie > nbPage){
100
						pageSaisie = nbPage;
101
						pageSaisie = nbPage;
101
					}
102
					}
102
				} catch (NumberFormatException e) {
103
				} catch (NumberFormatException e) {
103
					pageSaisie = pageCourante;
104
					pageSaisie = pageCourante;
104
				}
105
				}
105
				pageCourante = pageSaisie;
106
				pageCourante = pageSaisie;
106
				chargerElements(pas * (pageCourante - 1), pas * (pageCourante));
107
				chargerElements(pas * (pageCourante - 1), pas * (pageCourante));
107
				vue.setPageCourante(pageCourante);
108
				vue.setPageCourante(pageCourante);
108
				actualiserAffichageBoutons();
109
				actualiserAffichageBoutons();
109
			}
110
			}
110
		});
111
		});
111
		
112
		
112
		vue.getSelecteurPas().addChangeHandler(new ChangeHandler() {
113
		vue.getSelecteurPas().addChangeHandler(new ChangeHandler() {
113
			@Override
114
			@Override
114
			public void onChange(ChangeEvent event) {
115
			public void onChange(ChangeEvent event) {
115
				int pasSelectionne;
116
				int pasSelectionne;
116
				try {
117
				try {
117
					pasSelectionne = vue.getPasSelectionne();
118
					pasSelectionne = vue.getPasSelectionne();
118
					if (pasSelectionne < 0) {
119
					if (pasSelectionne < 0) {
119
						pasSelectionne = 1;
120
						pasSelectionne = 1;
120
					} else if (pasSelectionne > 99){
121
					} else if (pasSelectionne > 99){
121
						pasSelectionne = 99;
122
						pasSelectionne = 99;
122
					}
123
					}
123
				} catch (NumberFormatException e) {
124
				} catch (NumberFormatException e) {
124
					pasSelectionne = pas;
125
					pasSelectionne = pas;
125
				}
126
				}
126
				 
127
				 
127
				changerPas(pasSelectionne);
128
				changerPas(pasSelectionne);
128
			}
129
			}
129
		});
130
		});
130
 
131
 
131
		vue.getBoutonPrecedent().addClickHandler(new ClickHandler() {
132
		vue.getBoutonPrecedent().addClickHandler(new ClickHandler() {
132
			@Override
133
			@Override
133
			public void onClick(ClickEvent event) {
134
			public void onClick(ClickEvent event) {
134
				allerALaPagePrecedente();
135
				allerALaPagePrecedente();
135
			}
136
			}
136
		});
137
		});
137
 
138
 
138
		vue.getBoutonSuivant().addClickHandler(new ClickHandler() {
139
		vue.getBoutonSuivant().addClickHandler(new ClickHandler() {
139
			@Override
140
			@Override
140
			public void onClick(ClickEvent event) {
141
			public void onClick(ClickEvent event) {
141
				allerALapageSuivante();
142
				allerALapageSuivante();
142
			}
143
			}
143
		});
144
		});
144
 
145
 
145
		vue.getBoutonPremierePage().addClickHandler(new ClickHandler() {
146
		vue.getBoutonPremierePage().addClickHandler(new ClickHandler() {
146
			@Override
147
			@Override
147
			public void onClick(ClickEvent event) {
148
			public void onClick(ClickEvent event) {
148
				allerALaPremierePage();
149
				allerALaPremierePage();
149
			}
150
			}
150
		});
151
		});
151
 
152
 
152
		vue.getBoutonDernierePage().addClickHandler(new ClickHandler() {
153
		vue.getBoutonDernierePage().addClickHandler(new ClickHandler() {
153
			@Override
154
			@Override
154
			public void onClick(ClickEvent event) {
155
			public void onClick(ClickEvent event) {
155
				allerAlaDernierePage();
156
				allerAlaDernierePage();
156
			}
157
			}
157
		});
158
		});
158
 
159
 
159
		BusEvenementiel.getInstance().addHandler(EvenementChangementPage.TYPE, new GestionnaireEvenementChangementPage() {
160
		BusEvenementiel.getInstance().addHandler(EvenementChangementPage.TYPE, new GestionnaireEvenementChangementPage() {
160
 
161
 
161
			@Override
162
			@Override
162
			public void onChangementPage(EvenementChangementPage event) {
163
			public void onChangementPage(EvenementChangementPage event) {
163
				if (event.getGroupePagination() == groupePagination) {
164
				if (event.getGroupePagination() == groupePagination) {
164
					pageCourante = event.getPageAAfficher();
165
					pageCourante = event.getPageAAfficher();
165
					vue.setPageCourante(pageCourante);
166
					vue.setPageCourante(pageCourante);
166
					actualiserAffichageBoutons();
167
					actualiserAffichageBoutons();
-
 
168
					vue.mettreNbTotalPages(nbPage);
167
				}
169
				}
168
			}
170
			}
169
		});
171
		});
170
 
172
 
171
		BusEvenementiel.getInstance().addHandler(EvenementChangementPas.TYPE, new GestionnaireEvenementChangementPas() {
173
		BusEvenementiel.getInstance().addHandler(EvenementChangementPas.TYPE, new GestionnaireEvenementChangementPas() {
172
 
174
 
173
			@Override
175
			@Override
174
			public void onChangementPas(EvenementChangementPas event) {
176
			public void onChangementPas(EvenementChangementPas event) {
175
				if (event.getGroupePagination() == groupePagination) {
177
				if (event.getGroupePagination() == groupePagination) {
176
					// modifie le pas et les liens en fonction
178
					// modifie le pas et les liens en fonction
177
					pas = event.getPas();
179
					pas = event.getPas();
178
					actualiserPas();
180
					actualiserPas();
179
				}
181
				}
180
			}
182
			}
181
		});
183
		});
182
	}
184
	}
183
 
185
 
184
	private void gererDecalagePageCourante(int ancienPas, int nouveauPas) {
186
	private void gererDecalagePageCourante(int ancienPas, int nouveauPas) {
185
		if (ancienPas != nouveauPas) {
187
		if (ancienPas != nouveauPas) {
186
			double rapportPas = (double) ancienPas / (double) nouveauPas;
188
			double rapportPas = (double) ancienPas / (double) nouveauPas;
187
			pageCourante = (int) (Math.ceil((double) pageCourante * (double) rapportPas));
189
			pageCourante = (int) (Math.ceil((double) pageCourante * (double) rapportPas));
188
		}
190
		}
189
	}
191
	}
190
 
192
 
191
	public void actualiserPas() {
193
	public void actualiserPas() {
192
		actualiserPasCache(pas);
194
		actualiserPasCache(pas);
193
		vue.afficherPas(pas);
195
		vue.afficherPas(pas);
194
	}
196
	}
195
 
197
 
196
		public int getPageCourante() {
198
		public int getPageCourante() {
197
		return this.pageCourante;
199
		return this.pageCourante;
198
	}
200
	}
199
 
201
 
200
	public int getPas() {
202
	public int getPas() {
201
		return this.pas;
203
		return this.pas;
202
	}
204
	}
203
 
205
 
204
	public void setPageCourante(int pageCourante) {
206
	public void setPageCourante(int pageCourante) {
205
		this.pageCourante = pageCourante;
207
		this.pageCourante = pageCourante;
206
	}
208
	}
207
 
209
 
208
	public void changerPas(int nouveauPas) {
210
	public void changerPas(int nouveauPas) {
209
 
211
 
210
		// TODO corriger bug qui ne charge pas la bonne page ds certains cas
212
		// TODO corriger bug qui ne charge pas la bonne page ds certains cas
211
		// gererDecalagePageCourante(pas, nouveauPas);
213
		// gererDecalagePageCourante(pas, nouveauPas);
212
		// pas = nouveauPas;
214
		// pas = nouveauPas;
213
		// chargerElements((pageCourante - 1)*pas, pageCourante*pas);
215
		// chargerElements((pageCourante - 1)*pas, pageCourante*pas);
214
		pas = nouveauPas;
216
		pas = nouveauPas;
-
 
217
		this.nbPage = calculerNbPage();
215
		chargerElements(0, pas);
218
		chargerElements(0, pas);
216
		BusEvenementiel.getInstance().fireEvent(new EvenementChangementPas(nouveauPas, groupePagination));
219
		BusEvenementiel.getInstance().fireEvent(new EvenementChangementPas(nouveauPas, groupePagination));
217
		BusEvenementiel.getInstance().fireEvent(new EvenementChangementPage(1, groupePagination));
220
		BusEvenementiel.getInstance().fireEvent(new EvenementChangementPage(1, groupePagination));
218
	}
221
	}
219
 
222
 
220
	public void allerALaPagePrecedente() {
223
	public void allerALaPagePrecedente() {
221
		if (pageCourante > 1) {
224
		if (pageCourante > 1) {
222
			int pageAAfficher = pageCourante - 1;
225
			int pageAAfficher = pageCourante - 1;
223
			pageCourante = pageAAfficher;
226
			pageCourante = pageAAfficher;
224
			chargerElements(pas * (pageAAfficher - 1), pas * (pageAAfficher));
227
			chargerElements(pas * (pageAAfficher - 1), pas * (pageAAfficher));
225
			BusEvenementiel.getInstance().fireEvent(new EvenementChangementPage(pageAAfficher, groupePagination));
228
			BusEvenementiel.getInstance().fireEvent(new EvenementChangementPage(pageAAfficher, groupePagination));
226
		}
229
		}
227
 
230
 
228
	}
231
	}
229
 
232
 
230
	public void allerALapageSuivante() {
233
	public void allerALapageSuivante() {
231
		if (pageCourante < nbPage) {
234
		if (pageCourante < nbPage) {
232
			int pageAAfficher = pageCourante + 1;
235
			int pageAAfficher = pageCourante + 1;
233
			pageCourante = pageAAfficher;
236
			pageCourante = pageAAfficher;
234
			chargerElements(pas * (pageAAfficher - 1), pas * (pageAAfficher));
237
			chargerElements(pas * (pageAAfficher - 1), pas * (pageAAfficher));
235
			BusEvenementiel.getInstance().fireEvent(new EvenementChangementPage(pageAAfficher, groupePagination));
238
			BusEvenementiel.getInstance().fireEvent(new EvenementChangementPage(pageAAfficher, groupePagination));
236
		}
239
		}
237
	}
240
	}
238
 
241
 
239
	public void allerALaPremierePage() {
242
	public void allerALaPremierePage() {
240
		int pageAAfficher = 1;
243
		int pageAAfficher = 1;
241
		pageCourante = pageAAfficher;
244
		pageCourante = pageAAfficher;
242
		chargerElements(0, pas);
245
		chargerElements(0, pas);
243
		BusEvenementiel.getInstance().fireEvent(new EvenementChangementPage(pageAAfficher, groupePagination));
246
		BusEvenementiel.getInstance().fireEvent(new EvenementChangementPage(pageAAfficher, groupePagination));
244
	}
247
	}
245
 
248
 
246
	public void allerAlaDernierePage() {
249
	public void allerAlaDernierePage() {
247
		int pageAAfficher = nbPage;
250
		int pageAAfficher = nbPage;
248
		pageCourante = pageAAfficher;
251
		pageCourante = pageAAfficher;
249
		chargerElements(pas * (pageAAfficher - 1), pas * (pageAAfficher));
252
		chargerElements(pas * (pageAAfficher - 1), pas * (pageAAfficher));
250
		BusEvenementiel.getInstance().fireEvent(new EvenementChangementPage(pageAAfficher, groupePagination));
253
		BusEvenementiel.getInstance().fireEvent(new EvenementChangementPage(pageAAfficher, groupePagination));
251
	}
254
	}
252
 
255
 
253
	/** calcule le nombre de page en fonction du pas */
256
	/** calcule le nombre de page en fonction du pas */
254
	private int calculerNbPage() {
257
	private int calculerNbPage() {
255
		Double nombrePages = Math.ceil((double) nbElementsTotal / (double) pas);
258
		Double nombrePages = Math.ceil((double) nbElementsTotal / (double) pas);
256
		return nombrePages.intValue();
259
		return nombrePages.intValue();
257
	}
260
	}
258
 
261
 
259
	public void setNbPages(int nbPages) {
262
	public void setNbPages(int nbPages) {
260
		this.nbPage = nbPages;
263
		this.nbPage = nbPages;
261
	}
264
	}
262
 
265
 
263
	public int getNbPages() {
266
	public int getNbPages() {
264
		return nbPage;
267
		return nbPage;
265
	}
268
	}
266
 
269
 
267
	public Vue getVue() {
270
	public Vue getVue() {
268
		return vue;
271
		return vue;
269
	}
272
	}
270
 
273
 
271
	public abstract void chargerElements(int debut, int fin);
274
	public abstract void chargerElements(int debut, int fin);
272
 
275
 
273
	public abstract void actualiserPasCache(int pas);
276
	public abstract void actualiserPasCache(int pas);
274
 
277
 
275
	public void setPas(int pas) {
278
	public void setPas(int pas) {
276
		this.pas = pas;
279
		this.pas = pas;
277
	}
280
	}
278
 
281
 
279
	public void setGroupePagination(String groupePagination) {
282
	public void setGroupePagination(String groupePagination) {
280
		this.groupePagination = groupePagination;
283
		this.groupePagination = groupePagination;
281
	}
284
	}
282
 
285
 
283
	public String getGroupePagination() {
286
	public String getGroupePagination() {
284
		return groupePagination;
287
		return groupePagination;
285
	}
288
	}
286
 
289
 
287
	public void actualiserAffichageBoutons() {
290
	public void actualiserAffichageBoutons() {
288
		if (nbPage == 1) {
291
		if (nbPage == 1) {
289
			vue.masquerBoutonPrecedent();
292
			vue.masquerBoutonPrecedent();
290
			vue.masquerBoutonSuivant();
293
			vue.masquerBoutonSuivant();
291
		} else if (pageCourante == 1) {
294
		} else if (pageCourante == 1) {
292
			vue.masquerBoutonPrecedent();
295
			vue.masquerBoutonPrecedent();
293
			vue.afficherBoutonSuivant();
296
			vue.afficherBoutonSuivant();
294
		} else {
297
		} else {
295
			vue.afficherBoutonPrecedent();
298
			vue.afficherBoutonPrecedent();
296
			if (pageCourante == nbPage) {
299
			if (pageCourante == nbPage) {
297
				vue.masquerBoutonSuivant();
300
				vue.masquerBoutonSuivant();
298
			}
301
			}
299
		} 
302
		} 
300
	}
303
	}
301
}
304
}