New file |
0,0 → 1,297 |
package org.tela_botanica.del.client.vues.rechercheimages.resultats; |
|
import java.util.List; |
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.modeles.Image; |
import org.tela_botanica.del.client.modeles.ImageServiceResultat; |
import org.tela_botanica.del.client.modeles.InformationsRecherche; |
import org.tela_botanica.del.client.modeles.ModeTri; |
import org.tela_botanica.del.client.modeles.Protocole; |
import org.tela_botanica.del.client.navigation.evenement.BusEvenementiel; |
import org.tela_botanica.del.client.navigation.evenement.changementprotocole.EvenementChangementProtocole; |
import org.tela_botanica.del.client.navigation.evenement.changementprotocole.GestionnaireEvenementChangementProtocole; |
import org.tela_botanica.del.client.services.rest.ImageService; |
import org.tela_botanica.del.client.services.rest.ProtocoleService; |
import org.tela_botanica.del.client.services.rest.async.ImagesParTaxonCallback; |
import org.tela_botanica.del.client.utils.MockDatasource; |
import org.tela_botanica.del.client.vues.rechercheimages.resultats.images.ImagePresenteur; |
import org.tela_botanica.del.client.vues.rechercheimages.resultats.images.ImageVue; |
import com.google.gwt.event.dom.client.ChangeEvent; |
import com.google.gwt.event.dom.client.ChangeHandler; |
import com.google.gwt.event.dom.client.ClickEvent; |
import com.google.gwt.event.dom.client.ClickHandler; |
import com.google.gwt.event.dom.client.HasChangeHandlers; |
import com.google.gwt.event.dom.client.HasClickHandlers; |
import com.google.gwt.user.client.ui.HTMLPanel; |
import com.google.gwt.user.client.ui.HasWidgets; |
import com.google.gwt.user.client.ui.IsWidget; |
import com.google.gwt.user.client.ui.ListBox; |
public class ResultatRechercheImagePresenteur { |
public interface Vue extends IsWidget { |
public void startChargement(); |
|
public void nettoyer(); |
|
public void creerPanneauxObservations(int size); |
|
public void stopChargement(); |
|
public List<HasWidgets> getPanneauxImages(); |
|
public HasWidgets getPanneauPagination(); |
|
public HasWidgets getPanneauPaginationHaut(); |
|
public HasClickHandlers getTriParNbVotesAscendant(); |
|
public HasClickHandlers getTriParNbVotesDescendant(); |
|
public HasClickHandlers getTriParDateAscendant(); |
|
public HasClickHandlers getTriParDateDescendant(); |
|
public void afficherElementsAucunResultatTrouve(); |
|
public void afficherElementsResultatsTrouve(); |
|
public HTMLPanel getImageTable(); |
|
public String getNomProtocolSelectionne(); |
|
public int getIdProtocoleSelectionne(); |
|
public void setListeProtocoles(ListBox listeProtocoles); |
|
public HasChangeHandlers getListeProtocoles(); |
|
public void ajouterProtocole(String protocole); |
|
public void selectionnerProtocole(int index); |
|
public HasClickHandlers getLabelVote(); |
|
public void masquerVoteAscendant(); |
|
public void masquerVoteDescendant(); |
|
public void afficherVoteAscendant(); |
|
public void afficherVoteDescendant(); |
|
public HasClickHandlers getLabelDate(); |
|
public void masquerDateAscendant(); |
|
public void masquerDateDescendant(); |
|
public void afficherDateAscendant(); |
|
public void afficherDateDescendant(); |
} |
private Vue vue; |
private ImageService imageService; |
private final ProtocoleService protocoleService = MockDatasource.getInstance(); |
private List<Protocole> protocoles; |
private String protocoleParDefaut = Protocole.ESTHETISME; |
private ModeTri triCourantVote = ModeTri.TRI_ASCENDANT; |
private ModeTri triCourantDate = ModeTri.TRI_DESCENDANT; |
|
public ResultatRechercheImagePresenteur(ImageService imageService, Vue vue) { |
this.vue = vue; |
this.imageService = imageService; |
} |
|
public void go(HasWidgets composite) { |
composite.add(vue.asWidget()); |
vue.startChargement(); |
rechercherImagesEtCreerWidgetPagination(); |
gererEvenements(); |
chargerProtocoles(); |
vue.masquerVoteDescendant(); |
vue.masquerVoteAscendant(); |
//vue.masquerDateDescendant(); |
vue.masquerDateAscendant(); |
} |
|
public void gererEvenements() { |
vue.getListeProtocoles().addChangeHandler(new ChangeHandler() { |
@Override |
public void onChange(ChangeEvent event) { |
surChangementProtocole(); |
} |
}); |
|
ClickHandler surClicTriVote = new ClickHandler() { |
@Override |
public void onClick(ClickEvent event) { |
surClicTriVote(); |
} |
}; |
|
vue.getLabelVote().addClickHandler(surClicTriVote); |
vue.getTriParNbVotesAscendant().addClickHandler(surClicTriVote); |
vue.getTriParNbVotesDescendant().addClickHandler(surClicTriVote); |
|
ClickHandler surClicTriDate = new ClickHandler() { |
@Override |
public void onClick(ClickEvent event) { |
surClicTriDate(); |
} |
}; |
|
vue.getLabelDate().addClickHandler(surClicTriDate); |
vue.getTriParDateAscendant().addClickHandler(surClicTriDate); |
vue.getTriParDateDescendant().addClickHandler(surClicTriDate); |
|
BusEvenementiel.getInstance().addHandler(EvenementChangementProtocole.TYPE, new GestionnaireEvenementChangementProtocole() { |
@Override |
public void onChangementProtocole(EvenementChangementProtocole event) { |
InformationsRecherche informationsRechercheImages = CacheClient.getInstance().getInformationsRechercheImage(); |
if (informationsRechercheImages.getTriParNbVotes() != ModeTri.PAS_DE_TRI) { |
informationsRechercheImages.setIdProtocoleSelectionne(event.getProtocole().getId() + ""); |
chargerEtAfficherImagesPageEnCours(); |
} |
} |
}); |
} |
|
public void surClicTriVote() { |
vue.masquerDateDescendant(); |
vue.masquerDateAscendant(); |
if (triCourantVote == ModeTri.TRI_ASCENDANT) { |
triCourantVote = ModeTri.TRI_DESCENDANT; |
vue.masquerVoteAscendant(); |
vue.afficherVoteDescendant(); |
} else { |
triCourantVote = ModeTri.TRI_ASCENDANT; |
vue.masquerVoteDescendant(); |
vue.afficherVoteAscendant(); |
} |
InformationsRecherche informationsRechercheImages = CacheClient.getInstance().getInformationsRechercheImage(); |
int IdProtocole = CacheClient.getInstance().getProtocoleCourant().getId(); |
informationsRechercheImages.setTriParNbVotes(triCourantVote); |
informationsRechercheImages.setIdProtocoleSelectionne(IdProtocole + ""); |
informationsRechercheImages.setTriParDate(ModeTri.PAS_DE_TRI); |
chargerEtAfficherImagesPageEnCours(); |
} |
|
public void surClicTriDate() { |
vue.masquerVoteDescendant(); |
vue.masquerVoteAscendant(); |
if (triCourantDate == ModeTri.TRI_ASCENDANT) { |
triCourantDate = ModeTri.TRI_DESCENDANT; |
vue.masquerDateAscendant(); |
vue.afficherDateDescendant(); |
} else { |
triCourantDate = ModeTri.TRI_ASCENDANT; |
vue.masquerDateDescendant(); |
vue.afficherDateAscendant(); |
} |
InformationsRecherche informationsRechercheImages = CacheClient.getInstance().getInformationsRechercheImage(); |
informationsRechercheImages.setTriParDate(triCourantDate); |
informationsRechercheImages.setTriParNbVotes(ModeTri.PAS_DE_TRI); |
chargerEtAfficherImagesPageEnCours(); |
} |
|
public void surChangementProtocole() { |
Protocole protocoleCourant = null; |
for (Protocole protocole : protocoles) { |
if (protocole.getId() == vue.getIdProtocoleSelectionne()) { |
protocoleCourant = protocole; |
} |
} |
CacheClient.getInstance().setProtocoleCourant(protocoleCourant); |
EvenementChangementProtocole evenement = new EvenementChangementProtocole(protocoleCourant); |
BusEvenementiel.getInstance().fireEvent(evenement); |
} |
|
private void chargerProtocoles() { |
|
// TODO: appeler un véritable service web qui nous permette de charger les protocoles |
// à partir de la base de données (prévoir un cache pour ne pas les charger à chaque fois) |
protocoles = protocoleService.getProtocoles(); |
for (Protocole protocole : protocoles) { |
vue.ajouterProtocole(protocole.getNom()); |
} |
vue.selectionnerProtocole(protocoles.indexOf(CacheClient.getInstance().getProtocoleCourant())); |
} |
|
public void rechercherImagesEtCreerWidgetPagination() { |
// appel du service d'image pour avoir le nb total d'elements pour la |
// pagination |
ImagesParTaxonCallback callback = new ImagesParTaxonCallback() { |
@Override |
public void surImagesRecues(ImageServiceResultat imagesRecues) { |
creerWidgetPagination(imagesRecues.getNbTotalImagesPourLaRecherche()); |
afficherImages(imagesRecues); |
} |
}; |
final int debut = (CacheClient.getInstance().getPageCouranteRechercheImage() - 1) * CacheClient.getInstance().getPasPagination(); |
final int fin = (CacheClient.getInstance().getPageCouranteRechercheImage()) * CacheClient.getInstance().getPasPagination(); |
imageService.getImagesParTaxon(CacheClient.getInstance().getInformationsRechercheImage(), debut, fin, callback); |
} |
|
private void chargerEtAfficherImages(final int premier, final int dernier) { |
vue.startChargement(); |
vue.nettoyer(); |
ImagesParTaxonCallback callback = new ImagesParTaxonCallback() { |
@Override |
public void surImagesRecues(ImageServiceResultat imagesRecues) { |
afficherImages(imagesRecues); |
} |
}; |
imageService.getImagesParTaxon(CacheClient.getInstance().getInformationsRechercheImage(), premier, dernier, callback); |
} |
|
public void afficherImages(ImageServiceResultat imageServiceResult) { |
List<Image> images = imageServiceResult.getImages(); |
if (images == null || images.size() == 0) { |
vue.afficherElementsAucunResultatTrouve(); |
} else { |
vue.afficherElementsResultatsTrouve(); |
for (Image image : images) { |
ImagePresenteur imagePresenteur = new ImagePresenteur(image, CacheClient.getInstance().getProtocoleCourant(), new ImageVue()); |
imagePresenteur.go(vue.getImageTable()); |
} |
} |
vue.stopChargement(); |
} |
|
private void creerWidgetPagination(int nbImages) { |
PaginationPresenteur imagesPaginationPresenteurHaut = creerPresenteurPagination(nbImages); |
PaginationPresenteur imagesPaginationPresenteurBas = creerPresenteurPagination(nbImages); |
imagesPaginationPresenteurHaut.setGroupePagination("pagination_images"); |
imagesPaginationPresenteurBas.setGroupePagination("pagination_images"); |
imagesPaginationPresenteurHaut.go(vue.getPanneauPaginationHaut()); |
imagesPaginationPresenteurBas.go(vue.getPanneauPagination()); |
} |
|
public PaginationPresenteur creerPresenteurPagination(int nbImages) { |
PaginationPresenteur imagesPaginationPresenteur = new PaginationPresenteur(new PaginationVue(), nbImages, CacheClient.getInstance().getPasPagination(), CacheClient.getInstance() |
.getPageCouranteRechercheImage()) { |
@Override |
public void chargerElements(int debut, int fin) { |
chargerEtAfficherImages(debut, fin); |
CacheClient.getInstance().setPageCouranteRechercheImages(getPageCourante()); |
} |
|
@Override |
public void actualiserPasCache(int pas) { |
CacheClient.getInstance().setPasPagination(pas); |
} |
}; |
return imagesPaginationPresenteur; |
} |
|
public void chargerEtAfficherImagesPageEnCours() { |
final int debut = (CacheClient.getInstance().getPageCouranteRechercheImage() - 1) * CacheClient.getInstance().getPasPagination(); |
final int fin = (CacheClient.getInstance().getPageCouranteRechercheImage()) * CacheClient.getInstance().getPasPagination(); |
chargerEtAfficherImages(debut, fin); |
} |
|
public Vue getVue() { |
return vue; |
} |
} |