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