Subversion Repositories eFlore/Applications.del

Rev

Rev 278 | Go to most recent revision | Blame | Last modification | View Log | RSS feed

package org.tela_botanica.del.client.vues.rechercheimages;

import java.util.List;

import org.tela_botanica.del.client.cache.CacheClient;
import org.tela_botanica.del.client.modeles.Image;
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.rechercheimage.EvenementRechercheImage;
import org.tela_botanica.del.client.utils.MockDatasource;

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.event.dom.client.HasKeyPressHandlers;
import com.google.gwt.event.dom.client.KeyCodes;
import com.google.gwt.event.dom.client.KeyPressEvent;
import com.google.gwt.event.dom.client.KeyPressHandler;
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 RechercheImagePresenteur {

        public interface Vue extends IsWidget {
                
                public abstract void ajouterProtocole(String protocole);
                public abstract void selectionnerProtocole(int index);
                public abstract HasClickHandlers getBoutonChercher();
                public abstract HasKeyPressHandlers getChampEspece();
                public abstract HasChangeHandlers getListeProtocoles();
                public abstract HasWidgets getZoneResultats();
        }
        
        private Vue vue;
        
        private final MockDatasource dataSource = MockDatasource.getInstance();
        private String protocoleParDefaut = Protocole.IDENTIFICATION_AUTOMATIQUE;
        private List<Protocole> protocoles;

        /**
         * Constructeur
         * */
        public RechercheImagePresenteur(Vue vue) {
                this.vue = vue;
                
                if (CacheClient.getInstance().getProtocoleCourant() == null) {
                        CacheClient.getInstance().setProtocoleCourant(dataSource.getProtocole(protocoleParDefaut));
                }
        }

        public void go(HasWidgets composite) {
                composite.add(vue.asWidget());
                gererEvenements();
                chargerProtocoles();
        }

        private void chargerProtocoles() {
                protocoles = dataSource.getProtocoles();
                for (Protocole protocole : protocoles) {
                        vue.ajouterProtocole(protocole.getNom());
                }
                vue.selectionnerProtocole(protocoles.indexOf(CacheClient.getInstance().getProtocoleCourant()));
        }

        public void gererEvenements() {

                vue.getBoutonChercher().addClickHandler(new ClickHandler() {

                        @Override
                        public void onClick(ClickEvent event) {
                                chargerImages(0, CacheClient.getInstance().getPaginationPasRechercheImage());
                        }
                });

                vue.getChampEspece().addKeyPressHandler(new KeyPressHandler() {

                        public void onKeyPress(KeyPressEvent event) {
                                if (event.getNativeEvent().getKeyCode() == KeyCodes.KEY_ENTER) {
                                        chargerImages(0, CacheClient.getInstance().getPaginationPasRechercheImage());
                                }
                        }
                });

                vue.getListeProtocoles().addChangeHandler(new ChangeHandler() {

                        @Override
                        public void onChange(ChangeEvent event) {
                                
                                Protocole protocoleCourant = (Protocole) event.getSource();
                                EvenementChangementProtocole evenement = new EvenementChangementProtocole(protocoleCourant);
                                BusEvenementiel.getInstance().fireEvent(evenement);
                        }
                });
        }

        private void chargerImages(int debut, int fin) {
                List<Image> imagesFromDatabase = dataSource.getImages(debut, fin);
                EvenementRechercheImage evenementRechercheImage = new EvenementRechercheImage(imagesFromDatabase);
                BusEvenementiel.getInstance().fireEvent(evenementRechercheImage);
        }
        
        public HasWidgets getZoneResultats() {
                return vue.getZoneResultats();
        }
}