Subversion Repositories eFlore/Applications.coel

Rev

Rev 1459 | 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.images.Images;
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.modeles.aDonnee;
import org.tela_botanica.client.synchronisation.Sequenceur;
import org.tela_botanica.client.util.Debug;
import org.tela_botanica.client.vues.Formulaire;

import com.extjs.gxt.ui.client.Registry;
import com.extjs.gxt.ui.client.event.ButtonEvent;
import com.extjs.gxt.ui.client.event.SelectionListener;
import com.extjs.gxt.ui.client.store.ListStore;
import com.extjs.gxt.ui.client.widget.LayoutContainer;
import com.extjs.gxt.ui.client.widget.Text;
import com.extjs.gxt.ui.client.widget.button.Button;
import com.extjs.gxt.ui.client.widget.layout.ColumnData;
import com.extjs.gxt.ui.client.widget.layout.ColumnLayout;

public class ChampMultiValeursMultiTypes extends ChampMultiValeurs implements Rafraichissable {

        private Configuration config = (Configuration) Registry.get(RegistreId.CONFIG);
        private String idListeType = null;
        private String idListeCombo = null;
        
        public ChampMultiValeursMultiTypes() {
                super(false, true, null, 0, 0);
        }
        
        public ChampMultiValeursMultiTypes(String label) {
                super(false, true, label, 0, 0);
        }
        
        public ChampMultiValeursMultiTypes(String label, int largeurTotale, int largeurType) {
                super(false, true, label, largeurTotale, largeurType);
        }
        
        public ChampMultiValeursMultiTypes(String label, int largeurTotale, boolean combobox) {
                super(true, true, label, largeurTotale, largeurTotale);
        }
        
        public ChampMultiValeursMultiTypes(String label, int largeurTotale, int largeurType, boolean combobox) {
                super(true, true, label, largeurTotale, largeurType);
        }
        
        public void initialiserType(String idListe) {
                initialiserType(idListe, null);
        }
        
        public void initialiserType(String idListe, Sequenceur sequenceur) {
                Mediateur mediateur = (Mediateur) Registry.get(RegistreId.MEDIATEUR);
                idListeType = idListe;
                mediateur.obtenirListeValeurEtRafraichir(this, idListeType, sequenceur);
        }
        
        public void initialiserCombobox(String idListe) {
                Mediateur mediateur = (Mediateur) Registry.get(RegistreId.MEDIATEUR);
                this.idListeCombo = idListe;
                mediateur.obtenirListeValeurEtRafraichir(this, idListeCombo, null);
        }
        
        public void rafraichir(Object nouvellesDonnees) {
                if (nouvellesDonnees instanceof ValeurListe)    {
                        ValeurListe listeValeurs = (ValeurListe) nouvellesDonnees;
                        if (listeValeurs.getId().equals(config.getListeId(idListeType)))        {
                                Formulaire.rafraichirComboBox(listeValeurs, types);
                        } else if (listeValeurs.getId().equals(config.getListeId(idListeCombo)))        {
                                Formulaire.rafraichirComboBox(listeValeurs, champValeurCombo, "id_valeur");
                        }
                }       
        }
        
        public void ajouterValeur(final String texte, final String type, final String id) {
                
                LayoutContainer colonneConteneur = new LayoutContainer();
                colonneConteneur.setLayout(new ColumnLayout());
                valeurs.put(id + aDonnee.SEPARATEUR_TYPE_VALEUR + texte, colonneConteneur);
                
                Text champType = new Text();
                champType.setText(type + " : ");
                champType.setWidth(largeurType);
                colonneConteneur.add(champType, new ColumnData(largeurType));
                
                // on recupere le nom de la valeur à partir de son id

                String texteValeur = texte;
                if (estComboBox) {
                        ListStore<Valeur> valeursStore = champValeurCombo.getStore();
                        Valeur objetValeur = valeursStore.findModel("id_valeur", texte);
                        if (objetValeur != null)        {
                                texteValeur = objetValeur.getNom();
                        }
                }
                
                Text champValeur = new Text();
                champValeur.setText(texteValeur);
                champValeur.setWidth(largeurChamp);
                colonneConteneur.add(champValeur, new ColumnData(largeurChamp));
                
                Button supprimerBouton = new Button();
                supprimerBouton.setIcon(Images.ICONES.supprimer());
                supprimerBouton.setText(boutonSupprimerLabel);
                supprimerBouton.setData("valeur", id + aDonnee.SEPARATEUR_TYPE_VALEUR + texte);
                supprimerBouton.addSelectionListener(new SelectionListener<ButtonEvent>() {
                        public void componentSelected(ButtonEvent ce) {
                                String valeur = ce.getComponent().getData("valeur");
                                LayoutContainer valeurLayout = valeurs.get(valeur);
                                principalLayout.remove(valeurLayout);
                                
                                valeurs.remove(valeur);
                                
                                supprimerValeurDuRecapitulatif(valeur);
                                
                                actualiserLayoutGlobal();
                        }
                });
                colonneConteneur.add(supprimerBouton, new ColumnData(largeurBouton));
                
                // Ajout du layout de la valeur au layout principal
                principalLayout.add(colonneConteneur);
                
                // Ajout de la valeur au champ récapitulatif des valeurs ajoutées
                if (estComboBox && champValeurCombo.getValue() != null) {
                        ajouterValeurAuRecapitulatif(champValeurCombo.getValue().getId(), id);
                } else {
                        ajouterValeurAuRecapitulatif(texte, id);
                }
                reinitialiserChamp();
                actualiserLayoutGlobal();
        }
        
        public void ajouterValeurAuRecapitulatif(String texte, String id) {
                String texteRecapitulatif = "";
                if (champRecapitulatif.getValue() != null)      {
                        texteRecapitulatif = champRecapitulatif.getValue();
                }
                texteRecapitulatif += id + aDonnee.SEPARATEUR_TYPE_VALEUR + texte + aDonnee.SEPARATEUR_VALEURS;
                champRecapitulatif.setValue(texteRecapitulatif);
        }
        
        public void peupler(String chaineExistante) {

                if (valeurs.size() > 0) {
                        reinitialiser();
                }
                if (chaineExistante != null && !chaineExistante.trim().equals("")) {
                        String[] valeurs = chaineExistante.split(aDonnee.SEPARATEUR_VALEURS);
                        for (int i = 0; i < valeurs.length; i++) {
                                String[] idEtValeur = valeurs[i].split(aDonnee.SEPARATEUR_TYPE_VALEUR);
                                if (idEtValeur.length == 2) {
                                        String idType = idEtValeur[0];
                                        String idValeur = idEtValeur[1];
                                        
                                        ListStore<Valeur> typeStore = types.getStore();
                                        Valeur objetType = typeStore.findModel("id_valeur", idType);
                                        String texteType = "";
                                        if (objetType != null)  {
                                                texteType = objetType.getNom();
                                        } else {
                                                texteType = idType;
                                        }

                                        ajouterValeur(idValeur, texteType, idType);
                                } else {
                                        InfoLogger.display("ChampMultiValeursMultiTypes > méthode peupler", "Erreur dans le split d'une valeur, chaine="+chaineExistante, true);
                                }
                        }
                }
        }
}