Subversion Repositories eFlore/Applications.del

Rev

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

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