Subversion Repositories eFlore/Applications.del

Rev

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

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