Subversion Repositories eFlore/Applications.del

Rev

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

Rev 679 Rev 1245
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
		vue.mettreNbTotalPages(nbPage);
84
	}
84
	}
85
 
85
 
86
	/**
86
	/**
87
	 * 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
88
	 * selecteur pas)
88
	 * selecteur pas)
89
	 * */
89
	 * */
90
	protected void gererEvenements() {
90
	protected void gererEvenements() {
91
		
91
		
92
		vue.getSaisiePageCourante().addChangeHandler(new ChangeHandler() {
92
		vue.getSaisiePageCourante().addChangeHandler(new ChangeHandler() {
93
			@Override
93
			@Override
94
			public void onChange(ChangeEvent event) {
94
			public void onChange(ChangeEvent event) {
95
				int pageSaisie;
95
				int pageSaisie;
96
				try {
96
				try {
97
					pageSaisie = vue.getPageSaisie();
97
					pageSaisie = vue.getPageSaisie();
98
					if (pageSaisie < 0) {
98
					if (pageSaisie < 0) {
99
						pageSaisie = 1;
99
						pageSaisie = 1;
100
					} else if (pageSaisie > nbPage){
100
					} else if (pageSaisie > nbPage){
101
						pageSaisie = nbPage;
101
						pageSaisie = nbPage;
102
					}
102
					}
103
				} catch (NumberFormatException e) {
103
				} catch (NumberFormatException e) {
104
					pageSaisie = pageCourante;
104
					pageSaisie = pageCourante;
105
				}
105
				}
106
				pageCourante = pageSaisie;
106
				pageCourante = pageSaisie;
107
				chargerElements(pas * (pageCourante - 1), pas * (pageCourante));
107
				chargerElements(pas * (pageCourante - 1), pas * (pageCourante));
108
				vue.setPageCourante(pageCourante);
108
				vue.setPageCourante(pageCourante);
109
				actualiserAffichageBoutons();
109
				actualiserAffichageBoutons();
110
			}
110
			}
111
		});
111
		});
112
		
112
		
113
		vue.getSelecteurPas().addChangeHandler(new ChangeHandler() {
113
		vue.getSelecteurPas().addChangeHandler(new ChangeHandler() {
114
			@Override
114
			@Override
115
			public void onChange(ChangeEvent event) {
115
			public void onChange(ChangeEvent event) {
116
				int pasSelectionne;
116
				int pasSelectionne;
117
				try {
117
				try {
118
					pasSelectionne = vue.getPasSelectionne();
118
					pasSelectionne = vue.getPasSelectionne();
119
					if (pasSelectionne < 0) {
119
					if (pasSelectionne < 0) {
120
						pasSelectionne = 1;
120
						pasSelectionne = 1;
121
					} else if (pasSelectionne > 99){
121
					} else if (pasSelectionne > 100){
122
						pasSelectionne = 99;
122
						pasSelectionne = 100;
123
					}
123
					}
124
				} catch (NumberFormatException e) {
124
				} catch (NumberFormatException e) {
125
					pasSelectionne = pas;
125
					pasSelectionne = pas;
126
				}
126
				}
127
				 
127
				 
128
				changerPas(pasSelectionne);
128
				changerPas(pasSelectionne);
129
			}
129
			}
130
		});
130
		});
131
 
131
 
132
		vue.getBoutonPrecedent().addClickHandler(new ClickHandler() {
132
		vue.getBoutonPrecedent().addClickHandler(new ClickHandler() {
133
			@Override
133
			@Override
134
			public void onClick(ClickEvent event) {
134
			public void onClick(ClickEvent event) {
135
				allerALaPagePrecedente();
135
				allerALaPagePrecedente();
136
			}
136
			}
137
		});
137
		});
138
 
138
 
139
		vue.getBoutonSuivant().addClickHandler(new ClickHandler() {
139
		vue.getBoutonSuivant().addClickHandler(new ClickHandler() {
140
			@Override
140
			@Override
141
			public void onClick(ClickEvent event) {
141
			public void onClick(ClickEvent event) {
142
				allerALapageSuivante();
142
				allerALapageSuivante();
143
			}
143
			}
144
		});
144
		});
145
 
145
 
146
		vue.getBoutonPremierePage().addClickHandler(new ClickHandler() {
146
		vue.getBoutonPremierePage().addClickHandler(new ClickHandler() {
147
			@Override
147
			@Override
148
			public void onClick(ClickEvent event) {
148
			public void onClick(ClickEvent event) {
149
				allerALaPremierePage();
149
				allerALaPremierePage();
150
			}
150
			}
151
		});
151
		});
152
 
152
 
153
		vue.getBoutonDernierePage().addClickHandler(new ClickHandler() {
153
		vue.getBoutonDernierePage().addClickHandler(new ClickHandler() {
154
			@Override
154
			@Override
155
			public void onClick(ClickEvent event) {
155
			public void onClick(ClickEvent event) {
156
				allerAlaDernierePage();
156
				allerAlaDernierePage();
157
			}
157
			}
158
		});
158
		});
159
 
159
 
160
		BusEvenementiel.getInstance().addHandler(EvenementChangementPage.TYPE, new GestionnaireEvenementChangementPage() {
160
		BusEvenementiel.getInstance().addHandler(EvenementChangementPage.TYPE, new GestionnaireEvenementChangementPage() {
161
 
161
 
162
			@Override
162
			@Override
163
			public void onChangementPage(EvenementChangementPage event) {
163
			public void onChangementPage(EvenementChangementPage event) {
164
				if (event.getGroupePagination() == groupePagination) {
164
				if (event.getGroupePagination() == groupePagination) {
165
					pageCourante = event.getPageAAfficher();
165
					pageCourante = event.getPageAAfficher();
166
					vue.setPageCourante(pageCourante);
166
					vue.setPageCourante(pageCourante);
167
					actualiserAffichageBoutons();
167
					actualiserAffichageBoutons();
168
					vue.mettreNbTotalPages(nbPage);
168
					vue.mettreNbTotalPages(nbPage);
169
				}
169
				}
170
			}
170
			}
171
		});
171
		});
172
 
172
 
173
		BusEvenementiel.getInstance().addHandler(EvenementChangementPas.TYPE, new GestionnaireEvenementChangementPas() {
173
		BusEvenementiel.getInstance().addHandler(EvenementChangementPas.TYPE, new GestionnaireEvenementChangementPas() {
174
 
174
 
175
			@Override
175
			@Override
176
			public void onChangementPas(EvenementChangementPas event) {
176
			public void onChangementPas(EvenementChangementPas event) {
177
				if (event.getGroupePagination() == groupePagination) {
177
				if (event.getGroupePagination() == groupePagination) {
178
					// modifie le pas et les liens en fonction
178
					// modifie le pas et les liens en fonction
179
					pas = event.getPas();
179
					pas = event.getPas();
180
					actualiserPas();
180
					actualiserPas();
181
				}
181
				}
182
			}
182
			}
183
		});
183
		});
184
	}
184
	}
185
 
185
 
186
	private void gererDecalagePageCourante(int ancienPas, int nouveauPas) {
186
	private void gererDecalagePageCourante(int ancienPas, int nouveauPas) {
187
		if (ancienPas != nouveauPas) {
187
		if (ancienPas != nouveauPas) {
188
			double rapportPas = (double) ancienPas / (double) nouveauPas;
188
			double rapportPas = (double) ancienPas / (double) nouveauPas;
189
			pageCourante = (int) (Math.ceil((double) pageCourante * (double) rapportPas));
189
			pageCourante = (int) (Math.ceil((double) pageCourante * (double) rapportPas));
190
		}
190
		}
191
	}
191
	}
192
 
192
 
193
	public void actualiserPas() {
193
	public void actualiserPas() {
194
		actualiserPasCache(pas);
194
		actualiserPasCache(pas);
195
		vue.afficherPas(pas);
195
		vue.afficherPas(pas);
196
	}
196
	}
197
 
197
 
198
		public int getPageCourante() {
198
		public int getPageCourante() {
199
		return this.pageCourante;
199
		return this.pageCourante;
200
	}
200
	}
201
 
201
 
202
	public int getPas() {
202
	public int getPas() {
203
		return this.pas;
203
		return this.pas;
204
	}
204
	}
205
 
205
 
206
	public void setPageCourante(int pageCourante) {
206
	public void setPageCourante(int pageCourante) {
207
		this.pageCourante = pageCourante;
207
		this.pageCourante = pageCourante;
208
	}
208
	}
209
 
209
 
210
	public void changerPas(int nouveauPas) {
210
	public void changerPas(int nouveauPas) {
211
 
211
 
212
		// 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
213
		// gererDecalagePageCourante(pas, nouveauPas);
213
		// gererDecalagePageCourante(pas, nouveauPas);
214
		// pas = nouveauPas;
214
		// pas = nouveauPas;
215
		// chargerElements((pageCourante - 1)*pas, pageCourante*pas);
215
		// chargerElements((pageCourante - 1)*pas, pageCourante*pas);
216
		pas = nouveauPas;
216
		pas = nouveauPas;
217
		this.nbPage = calculerNbPage();
217
		this.nbPage = calculerNbPage();
218
		chargerElements(0, pas);
218
		chargerElements(0, pas);
219
		BusEvenementiel.getInstance().fireEvent(new EvenementChangementPas(nouveauPas, groupePagination));
219
		BusEvenementiel.getInstance().fireEvent(new EvenementChangementPas(nouveauPas, groupePagination));
220
		BusEvenementiel.getInstance().fireEvent(new EvenementChangementPage(1, groupePagination));
220
		BusEvenementiel.getInstance().fireEvent(new EvenementChangementPage(1, groupePagination));
221
	}
221
	}
222
 
222
 
223
	public void allerALaPagePrecedente() {
223
	public void allerALaPagePrecedente() {
224
		if (pageCourante > 1) {
224
		if (pageCourante > 1) {
225
			int pageAAfficher = pageCourante - 1;
225
			int pageAAfficher = pageCourante - 1;
226
			pageCourante = pageAAfficher;
226
			pageCourante = pageAAfficher;
227
			chargerElements(pas * (pageAAfficher - 1), pas * (pageAAfficher));
227
			chargerElements(pas * (pageAAfficher - 1), pas * (pageAAfficher));
228
			BusEvenementiel.getInstance().fireEvent(new EvenementChangementPage(pageAAfficher, groupePagination));
228
			BusEvenementiel.getInstance().fireEvent(new EvenementChangementPage(pageAAfficher, groupePagination));
229
		}
229
		}
230
 
230
 
231
	}
231
	}
232
 
232
 
233
	public void allerALapageSuivante() {
233
	public void allerALapageSuivante() {
234
		if (pageCourante < nbPage) {
234
		if (pageCourante < nbPage) {
235
			int pageAAfficher = pageCourante + 1;
235
			int pageAAfficher = pageCourante + 1;
236
			pageCourante = pageAAfficher;
236
			pageCourante = pageAAfficher;
237
			chargerElements(pas * (pageAAfficher - 1), pas * (pageAAfficher));
237
			chargerElements(pas * (pageAAfficher - 1), pas * (pageAAfficher));
238
			BusEvenementiel.getInstance().fireEvent(new EvenementChangementPage(pageAAfficher, groupePagination));
238
			BusEvenementiel.getInstance().fireEvent(new EvenementChangementPage(pageAAfficher, groupePagination));
239
		}
239
		}
240
	}
240
	}
241
 
241
 
242
	public void allerALaPremierePage() {
242
	public void allerALaPremierePage() {
243
		int pageAAfficher = 1;
243
		int pageAAfficher = 1;
244
		pageCourante = pageAAfficher;
244
		pageCourante = pageAAfficher;
245
		chargerElements(0, pas);
245
		chargerElements(0, pas);
246
		BusEvenementiel.getInstance().fireEvent(new EvenementChangementPage(pageAAfficher, groupePagination));
246
		BusEvenementiel.getInstance().fireEvent(new EvenementChangementPage(pageAAfficher, groupePagination));
247
	}
247
	}
248
 
248
 
249
	public void allerAlaDernierePage() {
249
	public void allerAlaDernierePage() {
250
		int pageAAfficher = nbPage;
250
		int pageAAfficher = nbPage;
251
		pageCourante = pageAAfficher;
251
		pageCourante = pageAAfficher;
252
		chargerElements(pas * (pageAAfficher - 1), pas * (pageAAfficher));
252
		chargerElements(pas * (pageAAfficher - 1), pas * (pageAAfficher));
253
		BusEvenementiel.getInstance().fireEvent(new EvenementChangementPage(pageAAfficher, groupePagination));
253
		BusEvenementiel.getInstance().fireEvent(new EvenementChangementPage(pageAAfficher, groupePagination));
254
	}
254
	}
255
 
255
 
256
	/** calcule le nombre de page en fonction du pas */
256
	/** calcule le nombre de page en fonction du pas */
257
	private int calculerNbPage() {
257
	private int calculerNbPage() {
258
		Double nombrePages = Math.ceil((double) nbElementsTotal / (double) pas);
258
		Double nombrePages = Math.ceil((double) nbElementsTotal / (double) pas);
259
		return nombrePages.intValue();
259
		return nombrePages.intValue();
260
	}
260
	}
261
 
261
 
262
	public void setNbPages(int nbPages) {
262
	public void setNbPages(int nbPages) {
263
		this.nbPage = nbPages;
263
		this.nbPage = nbPages;
264
	}
264
	}
265
 
265
 
266
	public int getNbPages() {
266
	public int getNbPages() {
267
		return nbPage;
267
		return nbPage;
268
	}
268
	}
269
 
269
 
270
	public Vue getVue() {
270
	public Vue getVue() {
271
		return vue;
271
		return vue;
272
	}
272
	}
273
 
273
 
274
	public abstract void chargerElements(int debut, int fin);
274
	public abstract void chargerElements(int debut, int fin);
275
 
275
 
276
	public abstract void actualiserPasCache(int pas);
276
	public abstract void actualiserPasCache(int pas);
277
 
277
 
278
	public void setPas(int pas) {
278
	public void setPas(int pas) {
279
		this.pas = pas;
279
		this.pas = pas;
280
	}
280
	}
281
 
281
 
282
	public void setGroupePagination(String groupePagination) {
282
	public void setGroupePagination(String groupePagination) {
283
		this.groupePagination = groupePagination;
283
		this.groupePagination = groupePagination;
284
	}
284
	}
285
 
285
 
286
	public String getGroupePagination() {
286
	public String getGroupePagination() {
287
		return groupePagination;
287
		return groupePagination;
288
	}
288
	}
289
 
289
 
290
	public void actualiserAffichageBoutons() {
290
	public void actualiserAffichageBoutons() {
291
		if (nbPage == 1) {
291
		if (nbPage == 1) {
292
			vue.masquerBoutonPrecedent();
292
			vue.masquerBoutonPrecedent();
293
			vue.masquerBoutonSuivant();
293
			vue.masquerBoutonSuivant();
294
		} else if (pageCourante == 1) {
294
		} else if (pageCourante == 1) {
295
			vue.masquerBoutonPrecedent();
295
			vue.masquerBoutonPrecedent();
296
			vue.afficherBoutonSuivant();
296
			vue.afficherBoutonSuivant();
297
		} else {
297
		} else {
298
			vue.afficherBoutonPrecedent();
298
			vue.afficherBoutonPrecedent();
299
			if (pageCourante == nbPage) {
299
			if (pageCourante == nbPage) {
300
				vue.masquerBoutonSuivant();
300
				vue.masquerBoutonSuivant();
301
			}
301
			}
302
		} 
302
		} 
303
	}
303
	}
304
}
304
}