Rev 1689 | Blame | Compare with Previous | Last modification | View Log | RSS feed
package org.tela_botanica.del.client.vues.pictoflora.resultats.images;import java.util.HashMap;import org.tela_botanica.del.client.cache.CacheClient;import org.tela_botanica.del.client.composants.fenetreoverlay.FenetreOverlayDefilanteVue;import org.tela_botanica.del.client.composants.fenetreoverlay.FenetreOverlaySimplePresenteur;import org.tela_botanica.del.client.composants.images.DetailImagePresenteur;import org.tela_botanica.del.client.composants.images.DetailImageVue;import org.tela_botanica.del.client.composants.metadonnees.MetadonneesPresenteur;import org.tela_botanica.del.client.composants.metadonnees.MetadonneesVue;import org.tela_botanica.del.client.composants.motsclesimages.MotsClesImagePresenteur;import org.tela_botanica.del.client.composants.motsclesimages.MotsClesImageVue;import org.tela_botanica.del.client.composants.motsclesimages.formulairesaisiemotclesimages.FormulaireSaisieMotsClesImagePresenteur;import org.tela_botanica.del.client.composants.motsclesimages.formulairesaisiemotclesimages.FormulaireSaisieMotsClesImageVue;import org.tela_botanica.del.client.composants.presenteur.Presenteur;import org.tela_botanica.del.client.composants.votes.moyennevotes.MoyenneVotePresenteur;import org.tela_botanica.del.client.composants.votes.moyennevotes.MoyenneVoteVue;import org.tela_botanica.del.client.config.Config;import org.tela_botanica.del.client.i18n.I18n;import org.tela_botanica.del.client.modeles.Commentaire;import org.tela_botanica.del.client.modeles.Image;import org.tela_botanica.del.client.modeles.ModeRecherche;import org.tela_botanica.del.client.modeles.Observation;import org.tela_botanica.del.client.modeles.Protocole;import org.tela_botanica.del.client.modeles.Utilisateur;import org.tela_botanica.del.client.modeles.VoteProtocole;import org.tela_botanica.del.client.navigation.evenement.BusEvenementiel;import org.tela_botanica.del.client.navigation.evenement.changementEtatUtilisateur.EvenementChangementEtatUtilisateur;import org.tela_botanica.del.client.navigation.evenement.changementEtatUtilisateur.GestionnaireEvenementChangementEtatUtilisateur;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.navigation.evenement.fermermotcleimage.EvenementFermerMotCleImage;import org.tela_botanica.del.client.navigation.evenement.fermermotcleimage.GestionnaireEvenementFermerMotCleImage;import org.tela_botanica.del.client.navigation.evenement.rechercheimage.EvenementVoirDetailsImage;import org.tela_botanica.del.client.navigation.evenement.rechercheimage.GestionnaireEvenementVoirDetailsImage;import org.tela_botanica.del.client.navigation.evenement.suppressioncommentaire.EvenementSuppressionCommentaire;import org.tela_botanica.del.client.navigation.evenement.supprimerImage.EvenementSupprimerImage;import org.tela_botanica.del.client.navigation.evenement.supprimerImage.GestionnaireEvenementSupprimerImage;import org.tela_botanica.del.client.navigation.evenement.validationobservationpictoflora.EvenementValidationPictoflora;import org.tela_botanica.del.client.services.rest.ImageService;import org.tela_botanica.del.client.services.rest.MotsClesServiceConcret;import org.tela_botanica.del.client.services.rest.VoteProtocoleServiceConcret;import org.tela_botanica.del.client.services.rest.async.SuppressionCommentaireCallback;import org.tela_botanica.del.client.services.rest.async.SuppressionImageCallback;import com.google.gwt.core.shared.GWT;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.Window;import com.google.gwt.user.client.ui.HasWidgets;import com.google.gwt.user.client.ui.IsWidget;public class ImagePresenteur extends Presenteur {public interface Vue extends IsWidget {public abstract void loadImage(Image image);public abstract HasClickHandlers getImagePrincipale();public IsWidget getImagePrincipaleWidget();public void setUrlImagePrincipale(String url);public void setTitreImagePrincipale(String titre);public void setAltTextImagePrincipale(String altText);public String getUrlImagePrincipale();public String getTitreImagePrincipale();public String getAltTextImagePrincipale();public abstract HasClickHandlers getEnSavoirPlus();public abstract void cacherZoneCache();public abstract void afficherZoneCache();public abstract HasWidgets getZoneVoter();public HasClickHandlers getNomAuteur();public HasClickHandlers getNomEspece();public HasWidgets getMetadonnees();public HasClickHandlers getVoirMotsCles();public HasWidgets getZoneMotsCles();public void cacherZoneMotsCles();public void afficherZoneMotsCles();public HasClickHandlers getBoutonFermer();public void ajouterStyleLienAuteur();public HasClickHandlers getBoutonSupprimerImage();public void cacherZoneActionsImage();public void afficherZoneActionsImage();}private Vue vue;private final Image image;private ImageService imageService;private boolean detailsOuverts = false;private Protocole protocole;private boolean motsClesOuverts = false;private MotsClesImagePresenteur motsClesImagePresenteur;final FenetreOverlaySimplePresenteur fenetreOverlaySimplePresenteur = new FenetreOverlaySimplePresenteur(new FenetreOverlayDefilanteVue());public ImagePresenteur(Image image, ImageService imageService, Protocole protocole, Vue vue) {this.image = image;this.imageService = imageService;this.protocole = protocole;this.vue = vue;}public void go(HasWidgets composite) {composite.add(vue.asWidget());vue.loadImage(image);try {// pas de profil pour les non inscritsInteger.parseInt(image.getObservation().getIdAuteur());vue.ajouterStyleLienAuteur();vue.getNomAuteur().addClickHandler(new ClickHandler() {@Overridepublic void onClick(ClickEvent event) {Config config = new Config();Window.open(new Config().getUrl("profil") + image.getObservation().getIdAuteur(), "Profil utilisateur", config.getInfo("popupOptions"));}});} catch(Exception e) {// pas de bol mon coco}new MetadonneesPresenteur(new MetadonneesVue(), image.getObservation(), ModeRecherche.MODE_IMAGE, true).go(vue.getMetadonnees());chargerDonneesValidation();afficherZoneActionsImage();gererEvenements();}private void chargerDonneesValidation() {vue.getZoneVoter().clear();if (protocole != null) {HashMap<String, VoteProtocole> observationValidationDatas = image.getVotesProtocoles(protocole.getId());if (observationValidationDatas != null) {new MoyenneVotePresenteur(image, protocole, new MoyenneVoteVue(), new VoteProtocoleServiceConcret()).go(vue.getZoneVoter());}}}private void lancerEvenementValidation() {CacheClient.getInstance().setImageCourante(image);final Observation obs = image.getObservation();BusEvenementiel.getInstance().fireEvent(new EvenementValidationPictoflora(obs));}protected void gererEvenements() {ClickHandler zoomeur = new ClickHandler() {public void onClick(ClickEvent event) {FenetreOverlaySimplePresenteur presenteurGalerie = new FenetreOverlaySimplePresenteur(new FenetreOverlayDefilanteVue());presenteurGalerie.ouvrirFenetreModaleDefilante(0, new DetailImagePresenteur(image, new DetailImageVue()));presenteurGalerie.afficherBoutonsSuivantsPrecedents(false);}};vue.getImagePrincipale().addClickHandler(zoomeur);vue.getEnSavoirPlus().addClickHandler(new ClickHandler() {@Overridepublic void onClick(ClickEvent event) {BusEvenementiel.getInstance().fireEvent(new EvenementVoirDetailsImage(image));}});vue.getVoirMotsCles().addClickHandler(new ClickHandler() {@Overridepublic void onClick(ClickEvent event) {CacheClient.getInstance().setImageCourante(image);motsClesImagePresenteur = new MotsClesImagePresenteur(image,new MotsClesServiceConcret(),new FormulaireSaisieMotsClesImagePresenteur(image.getIdImage(),new MotsClesServiceConcret(),new FormulaireSaisieMotsClesImageVue()),new MotsClesImageVue());motsClesImagePresenteur.chargerMotsCles();fenetreOverlaySimplePresenteur.ouvrirFenetreModale(motsClesImagePresenteur);}});vue.getBoutonFermer().addClickHandler(new ClickHandler() {@Overridepublic void onClick(ClickEvent event) {cacherPanneauMotsCles();}});BusEvenementiel.getInstance().addHandler(EvenementVoirDetailsImage.TYPE, new GestionnaireEvenementVoirDetailsImage() {@Overridepublic void onVoirDetailsImage(EvenementVoirDetailsImage event) {if (image.getIdImage().equals(event.getImage().getIdImage())) {if (!detailsOuverts) {afficherDetails();} else {cacherDetails();}} else {cacherDetails();}}});BusEvenementiel.getInstance().addHandler(EvenementChangementProtocole.TYPE, new GestionnaireEvenementChangementProtocole() {@Overridepublic void onChangementProtocole(EvenementChangementProtocole event) {setProtocole(event.getProtocole());chargerDonneesValidation();}});BusEvenementiel.getInstance().addHandler(EvenementFermerMotCleImage.TYPE, new GestionnaireEvenementFermerMotCleImage() {@Overridepublic void onFermerMotCleImage(EvenementFermerMotCleImage evenementFermerMotCleImage) {if (evenementFermerMotCleImage.getIdImage().equals(image.getIdImage())) {fenetreOverlaySimplePresenteur.fermerFenetreModale();}}});BusEvenementiel.getInstance().addHandler(EvenementSupprimerImage.TYPE, new GestionnaireEvenementSupprimerImage() {@Overridepublic void onSuppressionImage(EvenementSupprimerImage event) {GWT.log("Attraper evnt : EvenementSupprimerImage (img:"+image.getIdImage()+")");if (event.getIdImage().equals(image.getIdImage())) {supprimerImg();}}});vue.getBoutonSupprimerImage().addClickHandler(new ClickHandler() {@Overridepublic void onClick(ClickEvent event) {GWT.log("Lancer evnt : EvenementSupprimerImage");if (Window.confirm(I18n.getVocabulary().confirmationSuppressionImg())) {BusEvenementiel.getInstance().fireEvent(new EvenementSupprimerImage(image.getIdImage()));}}});BusEvenementiel.getInstance().addHandler(EvenementChangementEtatUtilisateur.TYPE, new GestionnaireEvenementChangementEtatUtilisateur() {@Overridepublic void onModificationEtatUtilisateur(EvenementChangementEtatUtilisateur evenementChangementEtatUtilisateur) {afficherZoneActionsImage();}});}private void supprimerImg() {if (avoirUtilisateurAdmin()) {GWT.log("supprimerImg :"+image.getIdImage());imageService.supprimer(image, new SuppressionImageCallback() {@Overridepublic void surRetour(String suppressionOk) {GWT.log("Suppression image "+image.getIdImage()+" "+suppressionOk);if (suppressionOk.equals("OK")) {vue.asWidget().removeFromParent();}}});}}protected void afficherPanneauMotsCles() {vue.afficherZoneMotsCles();motsClesOuverts = true;motsClesImagePresenteur.chargerMotsCles();motsClesImagePresenteur.focuserChampsSaisie();}protected void cacherPanneauMotsCles() {vue.cacherZoneMotsCles();motsClesOuverts = false;}public void cacherDetails() {vue.cacherZoneCache();detailsOuverts = false;}public void afficherDetails() {vue.afficherZoneCache();detailsOuverts = true;}public boolean isDetailsOpen() {return detailsOuverts;}public Protocole getProtocole() {return protocole;}public void setProtocole(Protocole protocole) {this.protocole = protocole;}private void afficherZoneActionsImage() {if (avoirUtilisateurAdmin()) {vue.afficherZoneActionsImage();} else {vue.cacherZoneActionsImage();}}private boolean avoirUtilisateurAdmin() {Utilisateur utilisateur = CacheClient.getInstance().getUtilisateur();boolean etreAdmin = false;if (utilisateur != null) {etreAdmin = utilisateur.estIdentifie() && utilisateur.etreAdmin();}return etreAdmin;}}