Subversion Repositories eFlore/Applications.del

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
161 gduche 1
package org.tela_botanica.del.client.vues.rechercheobservations;
2
 
335 benjamin 3
import org.tela_botanica.del.client.cache.CacheClient;
330 gduche 4
import org.tela_botanica.del.client.composants.moteurrecherche.MoteurRecherchePresenteur;
5
import org.tela_botanica.del.client.composants.moteurrecherche.MoteurRechercheVue;
359 benjamin 6
import org.tela_botanica.del.client.composants.pagination.PaginationPresenteur;
391 aurelien 7
import org.tela_botanica.del.client.composants.pagination.PaginationVue;
161 gduche 8
import org.tela_botanica.del.client.composants.presenteur.Presenteur;
335 benjamin 9
import org.tela_botanica.del.client.i18n.I18n;
166 gduche 10
import org.tela_botanica.del.client.modeles.Observation;
359 benjamin 11
import org.tela_botanica.del.client.modeles.ObservationServiceResultat;
392 aurelien 12
import org.tela_botanica.del.client.services.rest.ObservationService;
13
import org.tela_botanica.del.client.services.rest.async.ObservationsCallback;
161 gduche 14
 
15
import com.google.gwt.user.client.ui.HasWidgets;
309 aurelien 16
import com.google.gwt.user.client.ui.IsWidget;
161 gduche 17
import com.google.gwt.user.client.ui.RootPanel;
18
 
19
public class RechercheObservationsPresenteur extends Presenteur {
392 aurelien 20
 
21
	private ObservationService serviceObs;
161 gduche 22
 
309 aurelien 23
	public abstract interface Vue extends IsWidget {
330 gduche 24
		public HasWidgets getZoneRecherche();
309 aurelien 25
		public HasWidgets getZoneObservations();
378 gduche 26
		public HasWidgets getZonePaginationHaut();
27
		public HasWidgets getZonePaginationBas();
392 aurelien 28
		public void startChargement();
29
		public void stopChargement();
30
		public void nettoyer();
309 aurelien 31
	}
335 benjamin 32
 
309 aurelien 33
	private Vue vue;
378 gduche 34
	private PaginationPresenteur paginationHautPresenteur, paginationBasPresenteur;
35
 
392 aurelien 36
	/**
37
	 * Ceci sert à éviter que les deux présenteurs paginations fassent deux requêtes par changement de page
38
	 * En attendant d'en discuter avec les autres
39
	 */
40
	private boolean requeteEnCours = false;
41
 
42
	public RechercheObservationsPresenteur(ObservationService serviceObs, Vue vue) {
309 aurelien 43
		this.vue = vue;
392 aurelien 44
		this.serviceObs = serviceObs;
161 gduche 45
	}
46
 
47
	public void go(HasWidgets composite) {
48
		if (composite == null) {
49
			composite = RootPanel.get();
50
		}
309 aurelien 51
		composite.add(vue.asWidget());
330 gduche 52
		ajouterMoteurRechercheAvancee();
166 gduche 53
 
392 aurelien 54
		ObservationsCallback callback = new ObservationsCallback() {
55
			@Override
56
			public void surObservationsRecues(
57
					ObservationServiceResultat observationsRecues) {
58
					creerWidgetPagination(observationsRecues.getNbTotalObservationsPourLaRecherche());
59
					afficherObservations(observationsRecues);
60
			}
61
		};
62
 
63
		serviceObs.getObservations(CacheClient.getInstance().getInformationsRechercheObservation(), 0, CacheClient.getInstance().getPasPagination(),callback);
161 gduche 64
	}
335 benjamin 65
 
330 gduche 66
	protected void ajouterMoteurRechercheAvancee() {
406 gduche 67
		MoteurRecherchePresenteur presenteur = new MoteurRecherchePresenteur(new MoteurRechercheVue("") {
335 benjamin 68
		}, false, true) {
69
 
330 gduche 70
			@Override
335 benjamin 71
			public void lancerRecherche() {
359 benjamin 72
				chargerEtAfficherObservations(0, CacheClient.getInstance().getPasPagination());
161 gduche 73
			}
330 gduche 74
		};
75
		presenteur.go(vue.getZoneRecherche());
161 gduche 76
	}
77
 
335 benjamin 78
	protected void gererEvenements() {
166 gduche 79
	}
161 gduche 80
 
359 benjamin 81
	public void chargerEtAfficherObservations(int debut, int fin) {
392 aurelien 82
		vue.startChargement();
83
		vue.nettoyer();
84
		ObservationsCallback callback = new ObservationsCallback() {
85
 
86
			@Override
87
			public void surObservationsRecues(ObservationServiceResultat observationsRecues) {
88
					afficherObservations(observationsRecues);
89
					requeteEnCours = false;
90
			}
91
		};
92
		requeteEnCours = true;
93
		serviceObs.getObservations(CacheClient.getInstance().getInformationsRechercheObservation(), debut, fin, callback);
359 benjamin 94
	}
335 benjamin 95
 
359 benjamin 96
	private void afficherObservations(ObservationServiceResultat observationServiceResultat) {
392 aurelien 97
		vue.nettoyer();
359 benjamin 98
		for (Observation observation : observationServiceResultat.getObservations()) {
309 aurelien 99
			ObservationPresenteur presenteur = new ObservationPresenteur(new ObservationVue(), observation);
100
			presenteur.go(vue.getZoneObservations());
166 gduche 101
		}
392 aurelien 102
		vue.stopChargement();
161 gduche 103
	}
104
 
359 benjamin 105
	private void creerWidgetPagination(int nbObservations) {
391 aurelien 106
		this.paginationHautPresenteur = new PaginationPresenteur(new PaginationVue(), nbObservations, CacheClient.getInstance().getPasPagination()) {
359 benjamin 107
 
108
			@Override
109
			public void changerPage(int debut, int fin) {
110
				chargerEtAfficherObservations(debut, fin);
111
				CacheClient.getInstance().setPageCouranteRechercheObservations(getPageCourante());
112
			}
113
 
114
			@Override
115
			public void actualiserPasCache(int pas) {
116
				CacheClient.getInstance().setPasPagination(pas);
117
			}
378 gduche 118
 
119
			@Override
120
			public void synchroniser() {
391 aurelien 121
				paginationBasPresenteur.setPas(getPas());
378 gduche 122
				paginationBasPresenteur.setPageCourante(getPageCourante());
391 aurelien 123
				paginationBasPresenteur.setNbPages(getNbPages());
378 gduche 124
				paginationBasPresenteur.actualiserLiens();
125
			}
359 benjamin 126
		};
378 gduche 127
		paginationHautPresenteur.go(vue.getZonePaginationHaut());
128
 
391 aurelien 129
		this.paginationBasPresenteur = new PaginationPresenteur(new PaginationVue(), nbObservations, CacheClient.getInstance().getPasPagination()) {
378 gduche 130
 
131
			@Override
132
			public void changerPage(int debut, int fin) {
392 aurelien 133
				if(!requeteEnCours) {
134
					chargerEtAfficherObservations(debut, fin);
135
					CacheClient.getInstance().setPageCouranteRechercheObservations(getPageCourante());
136
				}
378 gduche 137
			}
138
 
139
			@Override
140
			public void actualiserPasCache(int pas) {
141
				CacheClient.getInstance().setPasPagination(pas);
142
			}
143
 
144
			@Override
145
			public void synchroniser() {
391 aurelien 146
				paginationHautPresenteur.setPas(getPas());
378 gduche 147
				paginationHautPresenteur.setPageCourante(getPageCourante());
391 aurelien 148
				paginationHautPresenteur.setNbPages(getNbPages());
378 gduche 149
				paginationHautPresenteur.actualiserLiens();
150
			}
151
		};
152
		paginationBasPresenteur.go(vue.getZonePaginationBas());
359 benjamin 153
	}
154
 
161 gduche 155
}