Subversion Repositories eFlore/Applications.cel

Rev

Rev 1292 | Blame | Last modification | View Log | RSS feed

package org.tela_botanica.client.vues.image.filtres;

import org.tela_botanica.client.i18n.Msg;
import org.tela_botanica.client.image.ImageMediateur;
import org.tela_botanica.client.vues.ArbreMotsClesFiltreVue;
import com.gwtext.client.core.Ext;
import com.gwtext.client.widgets.Button;
import com.gwtext.client.widgets.Component;
import com.gwtext.client.widgets.Panel;
import com.gwtext.client.widgets.event.ContainerListenerAdapter;
import com.gwtext.client.widgets.layout.RowLayout;
import com.gwtext.client.widgets.layout.RowLayoutData;

/**
 * Panneau contenant les filtres qu'on peut appliquer aux images
 * 
 * @author aurelien
 * 
 */
public class PanneauFiltresImagesVues extends Panel {

        /**
         * Le médiateur associé
         */
        private ImageMediateur iMediateur = null;

        /**
         * L'arbre pour la recherche par mots clés
         */
        private ArbreMotsClesFiltreVue motsClesFiltres = null;
        
        /**
         * L'arbre pour la recherche par mots clés
         */
        private ArbreDateImageFiltreVue arbreDateImageFiltreVue = null;
        
        /**
         * La barre de recherche libre
         */
        private BarreRechercheFiltreVue rechercheLibreFiltreVue = null;

        /**
         * Recherche par contenu du tampon
         */
        private SelectionFiltreVue selectionFiltreVue = null;

        /**
         * Bouton de validation
         */
        private Button valider = null;
        
        /**
         * Construcuteur sans argument (privé car on ne doit pas l'utiliser)
         */
        @SuppressWarnings("unused")
        private PanneauFiltresImagesVues() {
                super();
        }

        /**
         * Constructeur avec arguments
         * 
         * @param im
         *            le médiateur à associer
         */
        public PanneauFiltresImagesVues(ImageMediateur im) {
                // on utilise pas l'instance de msg car java nous l'interdit dans la premiere ligne
                // du constructeur
                super(Msg.get("filtres"));
                iMediateur = im;
                
                this.setCollapsible(true);
                setLayout(new RowLayout());

                rechercheLibreFiltreVue = new BarreRechercheFiltreVue(im);
                rechercheLibreFiltreVue.setTitle(Msg.get("recherche-libre"));
                rechercheLibreFiltreVue.setCollapsible(true);
                add(rechercheLibreFiltreVue, new RowLayoutData());
                
                if(Ext.isIE()) {
                        add(rechercheLibreFiltreVue);
                        rechercheLibreFiltreVue.setHeight(110);
                } else {
                        add(rechercheLibreFiltreVue,new RowLayoutData(100));
                }

                arbreDateImageFiltreVue = new ArbreDateImageFiltreVue(im) ;
                arbreDateImageFiltreVue.setWidth("100%") ;
                arbreDateImageFiltreVue.setBorder(false);
                add(arbreDateImageFiltreVue, new RowLayoutData());

                motsClesFiltres = new ArbreMotsClesFiltreVue(im);
                motsClesFiltres.setTitle(Msg.get("mots-cles"));
                motsClesFiltres.setAutoScroll(true);
                add(motsClesFiltres, new RowLayoutData());

                selectionFiltreVue = new SelectionFiltreVue(im);
                
                addListener(new ContainerListenerAdapter() {

                        @Override
                        public void onRender(Component component) {
                                // TODO Auto-generated method stub

                                rechercheLibreFiltreVue.ajouterListeners();
                                arbreDateImageFiltreVue.ajouterListeners();
                        }
                });
        }

        /**
         * Accesseur pour le filtre des mots clés
         * 
         * @return le filtre des mots clés
         */
        public ArbreMotsClesFiltreVue getMotsClesFiltre() {
                return motsClesFiltres;
        }

        /**
         * Accesseur pour le filtre général
         * 
         * @return le filtre général
         */
        public BarreRechercheFiltreVue getBarreRecherche() {
                return rechercheLibreFiltreVue;
        }
        
        /**
         * Accesseur pour le filtre des dates
         * 
         * @return le filtre des dates
         */
        public ArbreDateImageFiltreVue getArbreDateRecherche() {
                return arbreDateImageFiltreVue;
        }

        /**
         * Renvoie un booléen indiquant si un des filtres a été modifié
         * 
         * @return true sur un des filtres est modifié, false sinon
         */
        public boolean renvoyerEtatFiltre() {

                return (motsClesFiltres.renvoyerEtatFiltre()
                                || rechercheLibreFiltreVue.renvoyerEtatFiltre()
                                || arbreDateImageFiltreVue.renvoyerEtatFiltre() 
                                || selectionFiltreVue.renvoyerEtatFiltre());
        }

        /**
         * Renvoie un tableau à 2 niveaux contenant des paires "nom_de_filtre",
         * "valeur"
         * 
         * @return un tableau contenant les noms et les valeurs à filtrer
         */
        public String[][] renvoyerValeursAFiltrer() {
                
                String[] filtresDates = arbreDateImageFiltreVue.renvoyerValeursAFiltrer();
                
                int lgSup = 0;
                
                if(filtresDates.length > 0) {
                        String[] nomFiltresDates = filtresDates[0].split(",");
                        String[] valFiltresDates = filtresDates[1].split(",");
                        lgSup = Math.max(nomFiltresDates.length, valFiltresDates.length);
                }
                
                String[][] filtres = new String[3 + lgSup][2];
                
                for(int i=3; i < filtres.length; i++) {
                        filtres[i][0] = filtresDates[0].split(",")[i - 3];
                        filtres[i][1] = filtresDates[1].split(",")[i -3];
                }
                
                filtres[0] = motsClesFiltres.renvoyerValeursAFiltrer();
                filtres[1] = rechercheLibreFiltreVue.renvoyerValeursAFiltrer();
                filtres[2] = selectionFiltreVue.renvoyerValeursAFiltrer();
                
                return filtres;
        }

        public void viderFiltres() {
                motsClesFiltres.viderFiltre();
                rechercheLibreFiltreVue.viderFiltre();
                arbreDateImageFiltreVue.viderFiltre();
                selectionFiltreVue.viderFiltre();
        }

        public void viderFiltre(String nom) {
                
                if(nom.equals("id_mots_cles")) {
                        motsClesFiltres.viderFiltre();
                }
                
                if(nom.equals("recherche")) {
                        rechercheLibreFiltreVue.viderFiltre();
                }
                
                if(nom.equals("annee") || nom.equals("mois") || nom.equals("jour")) {
                        arbreDateImageFiltreVue.viderFiltre(nom);
                }
                
                if(nom.equals("ci_id_tampon")) {
                        selectionFiltreVue.viderFiltre();
                }
                
        }

}