Subversion Repositories eFlore/Applications.coel

Rev

Rev 1881 | Blame | Compare with Previous | Last modification | View Log | RSS feed

package org.tela_botanica.client.composants;

import org.tela_botanica.client.Mediateur;
import org.tela_botanica.client.RegistreId;
import org.tela_botanica.client.configuration.Configuration;
import org.tela_botanica.client.interfaces.Rafraichissable;
import org.tela_botanica.client.modeles.Valeur;
import org.tela_botanica.client.modeles.ValeurListe;
import org.tela_botanica.client.vues.Formulaire;

import com.extjs.gxt.ui.client.Registry;
import com.extjs.gxt.ui.client.Style.SortDir;
import com.extjs.gxt.ui.client.store.ListStore;
import com.extjs.gxt.ui.client.widget.form.ComboBox;
import com.extjs.gxt.ui.client.widget.form.Field;
import com.extjs.gxt.ui.client.widget.form.Validator;
import com.google.gwt.core.client.GWT;

public class ChampComboBoxListeValeurs extends ComboBox<Valeur> implements Rafraichissable {
        private Configuration config = null;
        private Mediateur mediateur = null;

        private String listeValeursCode = null;
        private String nomChampATrier = null;
        private String valeurDefautId = null;
        
        public ChampComboBoxListeValeurs(String labelDuChamp, String codeDeLaliste) {
                initialiserChampComboBox(labelDuChamp, codeDeLaliste, 0);
        }
        
        public ChampComboBoxListeValeurs(String labelDuChamp, String codeDeLaliste, int tabIndex) {
                initialiserChampComboBox(labelDuChamp, codeDeLaliste, tabIndex);
        }
        
        public ChampComboBoxListeValeurs(String labelDuChamp, ValeurListe listeDeValeurs, int tabIndex) {
                initialiserChampComboBox(labelDuChamp, null, tabIndex);
                rafraichir(listeDeValeurs);
        }
        
        private void initialiserChampComboBox(String labelDuChamp, String codeDeLaliste, int tabIndex) {
                config = (Configuration) Registry.get(RegistreId.CONFIG);
                mediateur = (Mediateur) Registry.get(RegistreId.MEDIATEUR);
                
                setForceSelection(true);
                setTriggerAction(TriggerAction.ALL);
                setDisplayField("nom");
                setStore(new ListStore<Valeur>());
                setEditable(false);

                setTabIndex(tabIndex);
                
                if (labelDuChamp == null) {
                        setLabelSeparator("");
                } else {
                        setFieldLabel(labelDuChamp);
                }
                
                setValidator(new Validator() {
                        public String validate(Field<?> field, String value) {
                                String retour = null;
                                if (field.getRawValue().equals("")) {
                                        field.setValue(null);
                                } else if (getStore().findModel("nom", field.getRawValue()) == null) {
                                        String contenuBrut = field.getRawValue();
                                        field.setValue(null);
                                        field.setRawValue(contenuBrut);
                                        retour = Mediateur.i18nC.selectionnerValeurOuNull();
                                        
                                }
                                return retour;
                        }
                });
                
                if (codeDeLaliste != null) {
                        setListeCode(codeDeLaliste);
                        mediateur.obtenirListeValeurEtRafraichir(this, getListeCode(), null);
                }
        }
        
        public String getListeCode() {
                return listeValeursCode;
        }
        public void setListeCode(String code) {
                listeValeursCode = code;
        }
        
        public String getValeur() {
                String valeur = "";
                if (getValue() != null) {
                        valeur = getValue().getId(); 
                }
                return valeur;
        }
        
        public void peupler(String valeur) {
                if (valeur.matches("[0-9]+")) {
                        valeurDefautId = valeur;
                        actualiserValeurParDefaut();
                } else {
                        setRawValue(valeur);
                }
        }
        
        public String getTrie() {
                String champATrier = "nom";
                if (nomChampATrier != null) {
                        champATrier = nomChampATrier;
                }
                return champATrier;
        }

        /**
         * Définit le nom du champ selon lequel trier, et si trierJusteApres vaut true, trie
         * @param champATrier
         */
        public void setTrie(String champATrier, boolean trierJusteApres) {
                nomChampATrier = champATrier;
                if (trierJusteApres) {
                        trier();
                }
        }

        /**
         * Définit le nom du champ selon lequel trier, et trie juste après
         * @param champATrier
         */
        public void setTrie(String champATrier) {
                setTrie(champATrier, true);
        }
        
        public void actualiserValeurParDefaut() {
                if (valeurDefautId != null && getStore() != null) {
                        setValue(getStore().findModel("id_valeur", valeurDefautId));
                }
        }

        /**
         * Trie le contenu de la comboboîte selon le nomChampATrier défini. S'il n'y en a aucun, échoue silencieusement (niark niark)
         */
        public void trier() {
                if (! this.nomChampATrier.isEmpty()) {
                        this.getStore().sort(this.nomChampATrier, SortDir.ASC);
                }
        }
        
        public void rafraichir(Object nouvellesDonnees) {
                if (nouvellesDonnees instanceof ValeurListe) {
                        ValeurListe listeValeurs = (ValeurListe) nouvellesDonnees;
                        if (listeValeurs.getId().equals(config.getListeId(getListeCode()))) {
                                Formulaire.rafraichirComboBox(listeValeurs, this, getTrie());
                                actualiserValeurParDefaut();
                        } 
                } else {
                        GWT.log(Mediateur.i18nM.erreurRafraichir(nouvellesDonnees.getClass(), this.getClass()), null);
                }
        }

}