Rev 595 | Blame | Last modification | View Log | RSS feed
package org.tela_botanica.del.client.vues.rechercheobservations.resultats;
import org.tela_botanica.del.client.cache.CacheClient;
import org.tela_botanica.del.client.composants.pagination.PaginationPresenteur;
import org.tela_botanica.del.client.composants.pagination.PaginationVue;
import org.tela_botanica.del.client.composants.presenteur.Presenteur;
import org.tela_botanica.del.client.modeles.InformationsRecherche;
import org.tela_botanica.del.client.modeles.ModeTri;
import org.tela_botanica.del.client.modeles.Observation;
import org.tela_botanica.del.client.modeles.ObservationServiceResultat;
import org.tela_botanica.del.client.services.rest.ObservationService;
import org.tela_botanica.del.client.services.rest.async.ObservationsCallback;
import org.tela_botanica.del.client.vues.rechercheobservations.resultats.observations.ObservationPresenteur;
import org.tela_botanica.del.client.vues.rechercheobservations.resultats.observations.ObservationVue;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.event.dom.client.HasClickHandlers;
import com.google.gwt.user.client.ui.HasWidgets;
import com.google.gwt.user.client.ui.IsWidget;
import com.google.gwt.user.client.ui.Label;
public class ResultatsRechercheObservationsPresenteur extends Presenteur {
private ObservationService serviceObs;
public abstract interface Vue extends IsWidget {
public HasWidgets getZoneObservations();
public HasWidgets getZonePaginationHaut();
public HasWidgets getZonePaginationBas();
public void startChargement();
public void stopChargement();
public void nettoyer();
public HasClickHandlers getTriParDateAscendant();
public HasClickHandlers getTriParDateDescendant();
public void afficherElementsAucunResultatTrouve();
public void afficherElementsResultatsTrouves();
public Label getLabelDate();
public void masquerDateAscendant();
public void masquerDateDescendant();
public void afficherDateAscendant();
public void afficherDateDescendant();
}
private Vue vue;
private ModeTri triCourantDate = ModeTri.TRI_ASCENDANT;
public ResultatsRechercheObservationsPresenteur(ObservationService serviceObs, Vue vue) {
this.vue = vue;
this.serviceObs = serviceObs;
vue.masquerDateAscendant();
vue.masquerDateDescendant();
}
public void go(HasWidgets composite) {
composite.add(vue.asWidget());
lancerRechercheEtCreerWidgetPagination();
gererEvenements();
}
protected void gererEvenements() {
ClickHandler surClicDate = new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
if (triCourantDate == ModeTri.TRI_ASCENDANT) {
triCourantDate = ModeTri.TRI_DESCENDANT;
vue.masquerDateAscendant();
vue.afficherDateDescendant();
} else {
triCourantDate = ModeTri.TRI_ASCENDANT;
vue.masquerDateDescendant();
vue.afficherDateAscendant();
}
InformationsRecherche informationsRechercheObservations = CacheClient.getInstance().getInformationsRechercheObservation();
informationsRechercheObservations.setTriParDate(triCourantDate);
informationsRechercheObservations.setTriParNbVotes(ModeTri.PAS_DE_TRI);
chercherEtAfficherObservationsPageEnCours();
}
};
vue.getLabelDate().addClickHandler(surClicDate);
vue.getTriParDateAscendant().addClickHandler(surClicDate);
vue.getTriParDateDescendant().addClickHandler(surClicDate);
}
public void chargerEtAfficherObservations(int debut, int fin) {
vue.startChargement();
vue.nettoyer();
ObservationsCallback callback = new ObservationsCallback() {
@Override
public void surObservationsRecues(ObservationServiceResultat observationsRecues) {
afficherObservations(observationsRecues);
}
};
serviceObs.getObservations(CacheClient.getInstance().getInformationsRechercheObservation(), debut, fin, callback);
}
private void afficherObservations(ObservationServiceResultat observationServiceResultat) {
vue.nettoyer();
if (observationServiceResultat.getObservations() == null || observationServiceResultat.getObservations().size() == 0) {
vue.afficherElementsAucunResultatTrouve();
}
else {
vue.afficherElementsResultatsTrouves();
for (Observation observation : observationServiceResultat.getObservations()) {
ObservationPresenteur presenteur = new ObservationPresenteur(new ObservationVue(), observation);
presenteur.go(vue.getZoneObservations());
}
}
vue.stopChargement();
}
private void creerWidgetPagination(int nbObservations) {
vue.getZonePaginationHaut().clear();
vue.getZonePaginationBas().clear();
PaginationPresenteur paginationPresenteurHaut = creerPresenteurPagination(nbObservations);
PaginationPresenteur paginationPresenteurBas = creerPresenteurPagination(nbObservations);
paginationPresenteurHaut.setGroupePagination("pagination_observations");
paginationPresenteurBas.setGroupePagination("pagination_observations");
paginationPresenteurHaut.go(vue.getZonePaginationHaut());
paginationPresenteurBas.go(vue.getZonePaginationBas());
}
private PaginationPresenteur creerPresenteurPagination(int nbObservations) {
PaginationPresenteur paginationPresenteurHaut = new PaginationPresenteur(new PaginationVue(), nbObservations, CacheClient.getInstance().getPasPagination(), CacheClient.getInstance().getPageCouranteRechercheObservations()) {
@Override
public void chargerElements(int debut, int fin) {
chargerEtAfficherObservations(debut, fin);
CacheClient.getInstance().setPageCouranteRechercheObservations(getPageCourante());
}
@Override
public void actualiserPasCache(int pas) {
CacheClient.getInstance().setPasPagination(pas);
}
};
return paginationPresenteurHaut;
}
public void lancerRechercheEtCreerWidgetPagination() {
ObservationsCallback callback = new ObservationsCallback() {
@Override
public void surObservationsRecues(ObservationServiceResultat observationsRecues) {
creerWidgetPagination(observationsRecues.getNbTotalObservationsPourLaRecherche());
afficherObservations(observationsRecues);
}
};
int debut = (CacheClient.getInstance().getPageCouranteRechercheObservations() - 1) * CacheClient.getInstance().getPasPagination();
int fin = (CacheClient.getInstance().getPageCouranteRechercheObservations()) * CacheClient.getInstance().getPasPagination();
serviceObs.getObservations(CacheClient.getInstance().getInformationsRechercheObservation(), debut, fin, callback);
}
public void chercherEtAfficherObservationsPageEnCours() {
int debut = (CacheClient.getInstance().getPageCouranteRechercheObservations() - 1) * CacheClient.getInstance().getPasPagination();
int fin = (CacheClient.getInstance().getPageCouranteRechercheObservations()) * CacheClient.getInstance().getPasPagination();
chargerEtAfficherObservations(debut, fin);
}
}