Subversion Repositories eFlore/Applications.coel

Rev

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

package org.tela_botanica.client.vues;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import org.tela_botanica.client.Modele;
import org.tela_botanica.client.RegistreId;
import org.tela_botanica.client.interfaces.Rafraichissable;
import org.tela_botanica.client.modeles.Configuration;
import org.tela_botanica.client.modeles.InterneValeur;
import org.tela_botanica.client.modeles.InterneValeurListe;
import org.tela_botanica.client.modeles.Personne;
import org.tela_botanica.client.modeles.Valeur;
import org.tela_botanica.client.modeles.ValeurListe;

import com.extjs.gxt.ui.client.Registry;
import com.extjs.gxt.ui.client.Style.HorizontalAlignment;
import com.extjs.gxt.ui.client.event.SelectionChangedEvent;
import com.extjs.gxt.ui.client.event.SelectionChangedListener;
import com.extjs.gxt.ui.client.event.SelectionListener;
import com.extjs.gxt.ui.client.event.ToolBarEvent;
import com.extjs.gxt.ui.client.store.ListStore;
import com.extjs.gxt.ui.client.widget.ContentPanel;
import com.extjs.gxt.ui.client.widget.LayoutContainer;
import com.extjs.gxt.ui.client.widget.TabItem;
import com.extjs.gxt.ui.client.widget.TabPanel;
import com.extjs.gxt.ui.client.widget.button.Button;
import com.extjs.gxt.ui.client.widget.form.CheckBox;
import com.extjs.gxt.ui.client.widget.form.CheckBoxGroup;
import com.extjs.gxt.ui.client.widget.form.ComboBox;
import com.extjs.gxt.ui.client.widget.form.DateField;
import com.extjs.gxt.ui.client.widget.form.FieldSet;
import com.extjs.gxt.ui.client.widget.form.FormPanel;
import com.extjs.gxt.ui.client.widget.form.LabelField;
import com.extjs.gxt.ui.client.widget.form.NumberField;
import com.extjs.gxt.ui.client.widget.form.TextField;
import com.extjs.gxt.ui.client.widget.form.ComboBox.TriggerAction;
import com.extjs.gxt.ui.client.widget.form.FormPanel.LabelAlign;
import com.extjs.gxt.ui.client.widget.grid.CellEditor;
import com.extjs.gxt.ui.client.widget.grid.CheckBoxSelectionModel;
import com.extjs.gxt.ui.client.widget.grid.CheckColumnConfig;
import com.extjs.gxt.ui.client.widget.grid.ColumnConfig;
import com.extjs.gxt.ui.client.widget.grid.ColumnModel;
import com.extjs.gxt.ui.client.widget.grid.EditorGrid;
import com.extjs.gxt.ui.client.widget.layout.ColumnData;
import com.extjs.gxt.ui.client.widget.layout.ColumnLayout;
import com.extjs.gxt.ui.client.widget.layout.FitLayout;
import com.extjs.gxt.ui.client.widget.layout.FlowLayout;
import com.extjs.gxt.ui.client.widget.layout.FormData;
import com.extjs.gxt.ui.client.widget.layout.FormLayout;
import com.extjs.gxt.ui.client.widget.layout.LayoutData;
import com.extjs.gxt.ui.client.widget.toolbar.SeparatorToolItem;
import com.extjs.gxt.ui.client.widget.toolbar.TextToolItem;
import com.extjs.gxt.ui.client.widget.toolbar.ToolBar;
import com.google.gwt.core.client.GWT;
import com.google.gwt.i18n.client.DateTimeFormat;
import com.google.gwt.i18n.client.NumberFormat;

public class FormStructureVue extends LayoutContainer implements Rafraichissable {

        private Modele coelModele = null ;
        private ListStore<Valeur> magazinLstpr = null;
        private ComboBox<Valeur> comboLstpr = null;
        private ListStore<Valeur> magazinLstpu = null;
        private ComboBox<Valeur> comboLstpu = null;
        private ListStore<Valeur> magazinLiStatut = null;
        private ComboBox<Valeur> comboLiStatut = null;
        private ListStore<Valeur> magazinLiFonction = null;
        private ComboBox<Valeur> comboLiFonction = null;
        private ComboBox<InterneValeur> comboAcronyme = null;
        private TextField<String> ihChp = null;
        private TextField<String> mnhnChp = null;
        private ComboBox<InterneValeur> comboTypeStructure = null;
        private TabItem personnelOnglet = null;
        private EditorGrid<Personne> grillePersonnel = null;
        private ListStore<Personne> personnelGrilleMagazin = null;
        private LabelField nbreTotalPersonnelChp = null;
        private TabItem conservationOnglet = null;
        private CheckBoxGroup trukLocalStockageCacGrpChp = null;
        private ContentPanel trukLocalStockageCp = null;
        private CheckBoxGroup trukMeubleStockageCacGrpChp = null;
        private ContentPanel trukMeubleStockageCp = null;
        
        public FormStructureVue() {
                //+-----------------------------------------------------------------------------------------------------------+         
                // Initialisation de variables
                setLayout(new FitLayout());
                coelModele = Registry.get(RegistreId.MODELE);
                
                // Création de la disposition : FIELDSET
                FormLayout layoutFieldset = new FormLayout();
                layoutFieldset.setLabelWidth(200);
                layoutFieldset.setPadding(4);

                //+-----------------------------------------------------------------------------------------------------------+
                // Création du panneau Formulaire
                FormPanel panel = new FormPanel();  
                panel.setFrame(true);
                panel.setIconStyle("icone-form-ajouter");  
                panel.setCollapsible(false);  
                panel.setHeading("Ajout d'une institution");  
                panel.setButtonAlign(HorizontalAlignment.CENTER);  
                panel.setLayout(new FlowLayout());

                // Création des onglets
                TabPanel onglets = new TabPanel();
                onglets.setAutoHeight(true);
                //tabs.setDeferredRender(false);  
                
                //+-----------------------------------------------------------------------------------------------------------+
                // Onlget formulaire IDENTIFICATION
                TabItem identificationOnglet = new TabItem();  
                identificationOnglet.setText("Identification");  
                identificationOnglet.setLayout(new FormLayout());

                // Fieldset IDENTITÉ
                FieldSet fieldSetIdentite = new FieldSet();
                fieldSetIdentite.setHeading("Identité");
                fieldSetIdentite.setCollapsible(true);
                fieldSetIdentite.setLayout(layoutFieldset);
                
                TextField<String> nomStructureChp = new TextField<String>();  
                nomStructureChp.setFieldLabel("Nom de la structure");
                nomStructureChp.setAllowBlank(false);
                nomStructureChp.getMessages().setBlankText("Ce champ est obligatoire.");
                fieldSetIdentite.add(nomStructureChp, new FormData(450, 0));
                
                // Création du sous-formulaire : Acronyme
                LayoutContainer ligne = new LayoutContainer();  
                ligne.setLayout(new ColumnLayout());
                LayoutContainer gauche = new LayoutContainer();
                FormLayout layoutGauche = new FormLayout();
                layoutGauche.setLabelAlign(LabelAlign.LEFT);
                layoutGauche.setLabelWidth(200);
                layoutGauche.setPadding(0);
                gauche.setLayout(layoutGauche);
                LayoutContainer droite = new LayoutContainer();
                FormLayout layoutDroite = new FormLayout();
                layoutDroite.setLabelWidth(0);
                layoutDroite.setPadding(0);
                droite.setLayout(layoutDroite);
                
                ListStore<InterneValeur> acronymes = new ListStore<InterneValeur>();  
                acronymes.add(InterneValeurListe.getTypeAcronyme()); 
                
                comboAcronyme = new ComboBox<InterneValeur>();  
                comboAcronyme.setEmptyText("Sélectioner un type d'acronyme...");
                comboAcronyme.setFieldLabel("Acronymes");
                comboAcronyme.setDisplayField("nom");
                comboAcronyme.setStore(acronymes);
                comboAcronyme.setEditable(false);
                comboAcronyme.setTypeAhead(true);  
                comboAcronyme.setTriggerAction(TriggerAction.ALL);
                comboAcronyme.addSelectionChangedListener(new SelectionChangedListener<InterneValeur>() {
                        @Override
                        public void selectionChanged(SelectionChangedEvent<InterneValeur> se) {
                                String acronymeAbr = se.getSelectedItem().getAbr();
                                if (acronymeAbr.equals("IH")) {
                                        mnhnChp.hide();
                                        ihChp.show();
                                } else if (acronymeAbr.equals("MNHN")) {
                                        ihChp.hide();
                                        mnhnChp.show();
                                } else if (acronymeAbr.equals("")) {
                                        ihChp.hide();
                                        mnhnChp.hide();
                                        comboAcronyme.clearSelections();
                                }
                        }
        });
                gauche.add(comboAcronyme);
                
                ihChp = new TextField<String>();  
                //ihChp.setEmptyText("Index Herbariorum");
                ihChp.setLabelSeparator("");
                ihChp.setToolTip("Index Herbariorum : herbier de plus de 5000 échantillons");
                ihChp.hide();
                droite.add(ihChp);
                
                mnhnChp = new TextField<String>();  
                //mnhnChp.setEmptyText("MNHN");
                mnhnChp.setLabelSeparator("");
                mnhnChp.setToolTip("Acronyme MNHN : herbier de moins de 5000 échantillons");
                mnhnChp.hide();
                droite.add(mnhnChp);
                
                ligne.add(gauche, new ColumnData(0.5));  
                ligne.add(droite, new ColumnData(0.5));
                fieldSetIdentite.add(ligne);
                
                // Création du sous-formulaire : Type de Structure
                LayoutContainer ligneTs = new LayoutContainer();  
                ligneTs.setLayout(new ColumnLayout());
                
                LayoutContainer gaucheTs = new LayoutContainer();
                layoutGauche = new FormLayout();
                layoutGauche.setLabelAlign(LabelAlign.LEFT);
                layoutGauche.setLabelWidth(200);
                layoutGauche.setPadding(0);
                gaucheTs.setLayout(layoutGauche);
                
                LayoutContainer droiteTs = new LayoutContainer();
                layoutDroite = new FormLayout();
                layoutDroite.setLabelWidth(0);
                layoutDroite.setPadding(0);
                droiteTs.setLayout(layoutDroite);
                
                ListStore<InterneValeur> typesStructure = new ListStore<InterneValeur>();  
                typesStructure.add(InterneValeurListe.getTypeStructure());
                
                this.comboTypeStructure = new ComboBox<InterneValeur>();  
                comboTypeStructure.setEmptyText("Sélectioner un type de structure...");
                comboTypeStructure.setFieldLabel("Statut des structures");
                comboTypeStructure.setDisplayField("nom");
                comboTypeStructure.setStore(typesStructure);
                comboTypeStructure.setEditable(false);
                comboTypeStructure.setTypeAhead(true);  
                comboTypeStructure.setTriggerAction(TriggerAction.ALL);
                comboTypeStructure.addSelectionChangedListener(new SelectionChangedListener<InterneValeur>() {
                        @Override
                        public void selectionChanged(SelectionChangedEvent<InterneValeur> se) {
                                String typeAbr = se.getSelectedItem().getAbr();
                                if (typeAbr.equals("stpu")) {
                                        comboLstpr.hide();
                                        comboLstpu.show();
                                } else if (typeAbr.equals("stpr")) {
                                        comboLstpu.hide();
                                        comboLstpr.show();
                                } else if (typeAbr.equals("")) {
                                        comboLstpr.hide();
                                        comboLstpu.hide();
                                        comboTypeStructure.clearSelections();
                                }
                        }
        });
                gaucheTs.add(comboTypeStructure);
                
                coelModele.obtenirListeValeurs(((Configuration) Registry.get(RegistreId.CONFIG)).getListeId("stpu"));
                magazinLstpu = new ListStore<Valeur>();
                magazinLstpu.add(new ArrayList<Valeur>());
                comboLstpu = new ComboBox<Valeur>();  
                //comboLstpu.setFieldLabel("Statut des structures publiques");
                comboLstpu.setLabelSeparator("");
                comboLstpu.setDisplayField("nom");
                comboLstpu.setEditable(false);
                comboLstpu.setTriggerAction(TriggerAction.ALL);
                comboLstpu.setStore(magazinLstpu);
                comboLstpu.hide();
                droiteTs.add(comboLstpu);
                
                coelModele.obtenirListeValeurs(((Configuration) Registry.get(RegistreId.CONFIG)).getListeId("stpr"));
                magazinLstpr = new ListStore<Valeur>();
                magazinLstpr.add(new ArrayList<Valeur>());
                comboLstpr = new ComboBox<Valeur>();  
                //comboLstpr.setFieldLabel("Statut des structures privées");
                comboLstpr.setLabelSeparator("");
                comboLstpr.setDisplayField("nom");
                comboLstpr.setEditable(false);
                comboLstpr.setTriggerAction(TriggerAction.ALL);
                comboLstpr.setStore(magazinLstpr);
                comboLstpr.hide();
                droiteTs.add(comboLstpr);
                
                ligneTs.add(gaucheTs, new ColumnData(0.5));  
                ligneTs.add(droiteTs, new ColumnData(0.5));
                fieldSetIdentite.add(ligneTs);
                
                DateField dateFondationChp = new DateField();
                dateFondationChp.setFieldLabel("Date de fondation");
                dateFondationChp.getPropertyEditor().getFormat();
                dateFondationChp.getPropertyEditor().setFormat(DateTimeFormat.getFormat("dd/MM/yyyy"));
                dateFondationChp.getMessages().setInvalidText("La valeur saisie n'est pas une date valide. La date doit être au format «jj/mm/aaaa».");
                fieldSetIdentite.add(dateFondationChp);
                
                identificationOnglet.add(fieldSetIdentite);
                
                // Fieldset ADRESSE
                LayoutContainer principalFdAdresse = new LayoutContainer();  
                principalFdAdresse.setLayout(new ColumnLayout());
                
                LayoutContainer gaucheFdAdresse = new LayoutContainer();
                layoutGauche = new FormLayout();
                layoutGauche.setLabelAlign(LabelAlign.LEFT);
                layoutGauche.setLabelWidth(100);
                layoutGauche.setPadding(0);
                gaucheFdAdresse.setLayout(layoutGauche);
                
                LayoutContainer droiteFdAdresse = new LayoutContainer();
                layoutDroite = new FormLayout();
                layoutDroite.setLabelAlign(LabelAlign.LEFT);
                layoutDroite.setLabelWidth(100);
                layoutDroite.setPadding(0);
                droiteFdAdresse.setLayout(layoutDroite);
                
                FieldSet fieldSetAdresse = new FieldSet();
                fieldSetAdresse.setHeading("Adresse");
                fieldSetAdresse.setCollapsible(true);
                
                layoutFieldset = new FormLayout();  
                layoutFieldset.setLabelWidth(100);  
                layoutFieldset.setPadding(4);
                fieldSetAdresse.setLayout(layoutFieldset);
                
                TextField<String> adrChp = new TextField<String>();  
                adrChp.setFieldLabel("Adresse");
                fieldSetAdresse.add(adrChp, new FormData(550, 0));
                
                TextField<String> cpChp = new TextField<String>();  
                cpChp.setFieldLabel("Code postal");
                gaucheFdAdresse.add(cpChp);
                
                TextField<String> villeChp = new TextField<String>();  
                villeChp.setFieldLabel("Ville");
                droiteFdAdresse.add(villeChp);
                
                TextField<String> regionChp = new TextField<String>();  
                regionChp.setFieldLabel("Région");
                gaucheFdAdresse.add(regionChp);
                
                TextField<String> paysChp = new TextField<String>();  
                paysChp.setFieldLabel("Pays");
                droiteFdAdresse.add(paysChp);
                
                principalFdAdresse.add(gaucheFdAdresse, new ColumnData(.5));
                principalFdAdresse.add(droiteFdAdresse, new ColumnData(.5));
                fieldSetAdresse.add(principalFdAdresse);
                identificationOnglet.add(fieldSetAdresse);
                
                // Fieldset TÉLÉPHONE et EMAIL
                
                LayoutContainer principalFdTelMail = new LayoutContainer();  
                principalFdTelMail.setLayout(new ColumnLayout());
                
                LayoutContainer gaucheFdTelMail = new LayoutContainer();
                gaucheFdTelMail.setLayout(creerFormLayout(100, LabelAlign.LEFT, 0));
                
                LayoutContainer droiteFdTelMail = new LayoutContainer();
                droiteFdTelMail.setLayout(creerFormLayout(100, LabelAlign.LEFT, 0));
                
                FieldSet fieldSetTelMail = new FieldSet();
                fieldSetTelMail.setHeading("Communication");
                fieldSetTelMail.setCollapsible(true);
                
                fieldSetTelMail.setLayout(creerFormLayout(200, LabelAlign.LEFT, 4));
                                
                TextField<String> telChp = new TextField<String>();  
                telChp.setFieldLabel("Téléphone");
                gaucheFdTelMail.add(telChp);
                
                TextField<String> faxChp = new TextField<String>();  
                faxChp.setFieldLabel("Fax");
                droiteFdTelMail.add(faxChp);
                
                TextField<String> emailChp = new TextField<String>();  
                emailChp.setFieldLabel("Courriel");
                emailChp.setToolTip("Saisir le courriel de l'organisation, pas de courriel individuel. Ex. : accueil@organisation.org");
                gaucheFdTelMail.add(emailChp);
                
                TextField<String> urlChp = new TextField<String>();  
                urlChp.setFieldLabel("Site web");
                droiteFdTelMail.add(urlChp);
                
                principalFdTelMail.add(gaucheFdTelMail, new ColumnData(.5));
                principalFdTelMail.add(droiteFdTelMail, new ColumnData(.5));
                fieldSetTelMail.add(principalFdTelMail);
                identificationOnglet.add(fieldSetTelMail);

                onglets.add(identificationOnglet);

                //+-----------------------------------------------------------------------------------------------------------+
                // Onlget formulaire PERSONNEL
                onglets.add(creerOngletPersonnel());
                
                //+-----------------------------------------------------------------------------------------------------------+
                // Onlget formulaire CONSERVATION
                onglets.add(creerOngletConservation());
                onglets.setSelection(conservationOnglet);
                
                //+-----------------------------------------------------------------------------------------------------------+
                // Onlget formulaire VALORISATION
                TabItem valorisationOnglet = new TabItem();  
                valorisationOnglet.setText("Valorisation");  
                valorisationOnglet.setLayout(new FormLayout());

                
                onglets.add(valorisationOnglet);
                
                //+-----------------------------------------------------------------------------------------------------------+
                // Gestion du FORMULAIRE GÉNÉRAL
                
                // Ajout des onglets
                panel.add(onglets);
                
                // Ajout des boutons au panneau formulaire
                Button annulerBtn = new Button("Annuler");
                panel.addButton(annulerBtn);
                Button validerBtn = new Button("Valider");
                panel.addButton(validerBtn);
                
                // Ajout du panneau Formulaire à la disposition générale
                add(panel);               
        }
        
        private TabItem creerOngletConservation() {
                conservationOnglet = new TabItem();
                conservationOnglet.setText("Conservation");
                conservationOnglet.setLayout(creerFormLayout(650, LabelAlign.TOP, null));
                
                CheckBoxGroup markFormationCacGrpChp = new CheckBoxGroup();
                CheckBox ouiMarkFormationCac = new CheckBox();
                ouiMarkFormationCac.setBoxLabel("Oui");
                CheckBox nonMarkFormationCac = new CheckBox();
                nonMarkFormationCac.setBoxLabel("Non");
                markFormationCacGrpChp.setFieldLabel("Le personnel s'occupant des collections a-t-il suivi des formations en conservations ?");
                markFormationCacGrpChp.add(ouiMarkFormationCac);
                markFormationCacGrpChp.add(nonMarkFormationCac);
                conservationOnglet.add(markFormationCacGrpChp);
                
                TextField<String> formationChp = new TextField<String>();
                formationChp.setFieldLabel("Lesquelles ?");
                conservationOnglet.add(formationChp);
                
                CheckBoxGroup markInteretFormationCacGrpChp = new CheckBoxGroup();
                CheckBox ouiMarkInteretFormationCac = new CheckBox();
                ouiMarkInteretFormationCac.setBoxLabel("Oui");
                CheckBox nonMarkInteretFormationCac = new CheckBox();
                nonMarkInteretFormationCac.setBoxLabel("Non");
                markInteretFormationCacGrpChp.setFieldLabel("Seriez vous intéressé par une formation à la conservation et à la restauration d'herbier ?");  
                markInteretFormationCacGrpChp.add(ouiMarkInteretFormationCac);  
                markInteretFormationCacGrpChp.add(nonMarkInteretFormationCac);  
                conservationOnglet.add(markInteretFormationCacGrpChp);
                
                coelModele.obtenirListeValeurs(((Configuration) Registry.get(RegistreId.CONFIG)).getListeId("localStockage"));
                trukLocalStockageCp = new ContentPanel();
                trukLocalStockageCp.setLayout(creerFormLayout(650, LabelAlign.TOP, 0));
                trukLocalStockageCp.setWidth(800);
                trukLocalStockageCp.setHeaderVisible(false);
                conservationOnglet.add(trukLocalStockageCp);
                
                coelModele.obtenirListeValeurs(((Configuration) Registry.get(RegistreId.CONFIG)).getListeId("meubleStockage"));
                trukMeubleStockageCp = new ContentPanel();
                trukMeubleStockageCp.setLayout(creerFormLayout(650, LabelAlign.TOP, 0));
                trukMeubleStockageCp.setWidth(800);
                trukMeubleStockageCp.setHeaderVisible(false);
                conservationOnglet.add(trukMeubleStockageCp);
                
                return conservationOnglet;
        }
        
        
        private TabItem creerOngletPersonnel() {
                personnelOnglet = new TabItem();
                personnelOnglet.setText("Personnel");
                FormLayout personnelOngletLayout = new FormLayout();
                personnelOngletLayout.setLabelWidth(400);
                personnelOnglet.setLayout(personnelOngletLayout);
                
                NumberField nbreTotalPersonneStructureChp = new NumberField();  
                nbreTotalPersonneStructureChp.setFieldLabel("Nombre de personne travaillant dans l'institution");
                nbreTotalPersonneStructureChp.setFormat(NumberFormat.getFormat("#"));
                nbreTotalPersonneStructureChp.setToolTip("Ce champ doit contenir un nombre");
                personnelOnglet.add(nbreTotalPersonneStructureChp);
                
                personnelOnglet.add(this.creerGrillePersonnel());
                
                nbreTotalPersonnelChp = new LabelField();  
                nbreTotalPersonnelChp.setFieldLabel("Nombre de personne travaillant sur les collections");
                nbreTotalPersonnelChp.setLabelSeparator(":");
                nbreTotalPersonnelChp.setValue(""+grillePersonnel.getStore().getCount());
                personnelOnglet.add(nbreTotalPersonnelChp);
                
                return personnelOnglet;
        }
        
        private ContentPanel creerGrillePersonnel() {  
                
                List<Personne> personnes = new ArrayList<Personne>();
                personnes.add(new Personne(Valeur.FONCTION_DIRECTEUR));
                personnes.add(new Personne(Valeur.FONCTION_CONSERVATEUR));
                
                personnelGrilleMagazin = new ListStore<Personne>();  
                personnelGrilleMagazin.add(personnes);  

                List<ColumnConfig> configs = new ArrayList<ColumnConfig>();

                CheckBoxSelectionModel<Personne> sm = new CheckBoxSelectionModel<Personne>();
                configs.add(sm.getColumn());
                
                ColumnConfig column = new ColumnConfig("ce_truk_fonction", "Fonction", 100);
                coelModele.obtenirListeValeurs(((Configuration) Registry.get(RegistreId.CONFIG)).getListeId("fonction"));
                magazinLiFonction = new ListStore<Valeur>();
                magazinLiFonction.add(new ArrayList<Valeur>());
                
                comboLiFonction = new ComboBox<Valeur>();  
                comboLiFonction.setTriggerAction(TriggerAction.ALL);  
                comboLiFonction.setEditable(true);
                comboLiFonction.setDisplayField("nom");
                //comboLiStatut.setEmptyText("Sélectionez une fonction...");
                comboLiFonction.setStore(magazinLiFonction);
                
                CellEditor fonctionEditor = new CellEditor(comboLiFonction) {  
                        @Override  
                        public Object preProcessValue(Object value) {  
                                if (value == null) {  
                                        return value;  
                                }
                                //GWT.log("pre : "+value.toString(), null);
                                return comboLiFonction.getStore().findModel("nom", (String) value);  
                        }  
                        
                        @Override  
                        public Object postProcessValue(Object value) {  
                                if (value == null) {  
                                        return value;  
                                }
                                //GWT.log("post : "+value.toString(), null);
                                return ((Valeur) value).get("nom");  
                        }  
                };
                column.setEditor(fonctionEditor);
                configs.add(column);
                
                column = new ColumnConfig();  
                column.setId("prenom");  
                column.setHeader("Prénom");
                column.setWidth(100);
                TextField<String> prenomChp = new TextField<String>();  
                prenomChp.setAllowBlank(false);
                prenomChp.getMessages().setBlankText("Ce champ est obligatoire.");
                prenomChp.setAutoValidate(true);  
                column.setEditor(new CellEditor(prenomChp));
                configs.add(column);  
                
                column = new ColumnConfig();  
                column.setId("nom");
                column.setHeader("Nom");
                column.setWidth(100);
                TextField<String> nomChp = new TextField<String>();  
                nomChp.setAllowBlank(false);
                nomChp.getMessages().setBlankText("Ce champ est obligatoire.");
                nomChp.setAutoValidate(true);  
                column.setEditor(new CellEditor(nomChp));
                configs.add(column);  

                column = new ColumnConfig("tel", "Téléphone", 100);
                TextField<String> telChp = new TextField<String>();  
                column.setEditor(new CellEditor(telChp));
                configs.add(column);

                column = new ColumnConfig("fax", "Fax", 100);
                TextField<String> faxChp = new TextField<String>();  
                column.setEditor(new CellEditor(faxChp));
                configs.add(column);
                
                column = new ColumnConfig("courriel", "Courriel", 100);
                TextField<String> emailChp = new TextField<String>();  
                column.setEditor(new CellEditor(emailChp));
                configs.add(column);
                
                coelModele.obtenirListeValeurs(((Configuration) Registry.get(RegistreId.CONFIG)).getListeId("statut"));
                magazinLiStatut = new ListStore<Valeur>();
                magazinLiStatut.add(new ArrayList<Valeur>());
                
                comboLiStatut = new ComboBox<Valeur>();  
                comboLiStatut.setTriggerAction(TriggerAction.ALL);  
                comboLiStatut.setEditable(false);
                comboLiStatut.setDisplayField("nom");
                comboLiStatut.setEmptyText("Sélectionez un statut...");
                comboLiStatut.setStore(magazinLiStatut);
                
                CellEditor statutEditor = new CellEditor(comboLiStatut) {  
                        @Override  
                        public Object preProcessValue(Object value) {  
                                if (value == null) {  
                                        return value;  
                                }
                                //GWT.log("pre : "+value.toString(), null);
                                return comboLiStatut.getStore().findModel("nom", (String) value);  
                        }  
                        
                        @Override  
                        public Object postProcessValue(Object value) {  
                                if (value == null) {  
                                        return value;  
                                }
                                //GWT.log("post : "+value.toString(), null);
                                return ((Valeur) value).get("nom");  
                        }  
                };  
                column = new ColumnConfig("statut", "Statut", 100);
                column.setEditor(statutEditor);
                configs.add(column);
                
                column = new ColumnConfig("tps_w", "Temps travail", 100);
                column.setNumberFormat(NumberFormat.getFormat("##"));
                NumberField tpsWChp = new NumberField();
                tpsWChp.setFormat(NumberFormat.getFormat("##"));
                tpsWChp.setToolTip("Ce champ doit contenir un nombre");
                column.setEditor(new CellEditor(tpsWChp));
                configs.add(column);
                
                column = new ColumnConfig("specialites", "Spécialités botaniques", 150);
                TextField<String> speChp = new TextField<String>();  
                column.setEditor(new CellEditor(speChp));
                configs.add(column);
                
                CheckColumnConfig checkColumn = new CheckColumnConfig("mark_contact", "Contact ?", 60);
                configs.add(checkColumn);
                
                ContentPanel cp = new ContentPanel();
                cp.setHeading("Personnes travaillant sur les collections");
                cp.setIconStyle("icone-table");  
                cp.setLayout(new FitLayout());
                cp.setFrame(true);
                
                ToolBar toolBar = new ToolBar();  
                
                TextToolItem ajouterPersonnelBtn = new TextToolItem("Ajouter", "icone-vcard-ajouter");
                ajouterPersonnelBtn.addSelectionListener(new SelectionListener<ToolBarEvent>() {  
                        @Override  
                        public void componentSelected(ToolBarEvent ce) {  
                                Personne personne = new Personne();  
                                grillePersonnel.stopEditing();  
                                personnelGrilleMagazin.insert(personne, 0);  
                                grillePersonnel.startEditing(0, 0);
                                // Mise à jour du nombre de personnel travaillant sur les collections
                                nbreTotalPersonnelChp.setValue(""+grillePersonnel.getStore().getCount());
                                // Activation du bouton supprimer si la grille contient un élément
                                if (grillePersonnel.getStore().getCount() > 0) {  
                                        ce.component.enable();  
                                }
                        }  
                });
                toolBar.add(ajouterPersonnelBtn);
                toolBar.add(new SeparatorToolItem());
                TextToolItem supprimerPersonnelBtn = new TextToolItem("Supprimer", "icone-vcard-supprimer");
                supprimerPersonnelBtn.addSelectionListener(new SelectionListener<ToolBarEvent>() {  
                        @Override
                        public void componentSelected(ToolBarEvent ce) {
                                grillePersonnel.getStore().remove(grillePersonnel.getStore().getAt(0));
                                // Mise à jour du nombre de personnel travaillant sur les collections
                                nbreTotalPersonnelChp.setValue(""+grillePersonnel.getStore().getCount());
                                // Désactivation du bouton supprimer si la grille contient plus d'élément
                                if (grillePersonnel.getStore().getCount() == 0) {  
                                        ce.item.disable();  
                                }  
                        }   
                });
                toolBar.add(supprimerPersonnelBtn);  
                cp.setTopComponent(toolBar);  

                ColumnModel cm = new ColumnModel(configs);
                
                grillePersonnel = new EditorGrid<Personne>(personnelGrilleMagazin, cm);  
                grillePersonnel.setBorders(true);
                grillePersonnel.setSelectionModel(sm);
                grillePersonnel.addPlugin(sm);
                grillePersonnel.addPlugin(checkColumn);
                grillePersonnel.setSize(1010, 400);
                
                cp.add(grillePersonnel);
                return cp;  
        }  
        
        /** Méthode simplifiant la création de FormLayout.
         * 
         * @param labelWidth largeur des labels
         * @param labelAlign alignement des labels
         * @param padding padding du layout
         * @return
         */
        private FormLayout creerFormLayout(Integer labelWidth, LabelAlign labelAlign, Integer padding) {
                FormLayout formLayout = new FormLayout();
                formLayout.setLabelWidth(labelWidth);
                formLayout.setLabelAlign(labelAlign);
                if (padding != null) {
                        formLayout.setPadding(padding);
                }
                return formLayout;
        }
        
        public void rafraichir(Object nouvelleDonnees) {
                if (nouvelleDonnees instanceof ValeurListe) {
                        ValeurListe listeValeurs = (ValeurListe) nouvelleDonnees;
                        
                        List<Valeur> liste = new ArrayList<Valeur>();
                        for (Iterator<String> it = listeValeurs.keySet().iterator(); it.hasNext();) {
                                liste.add(listeValeurs.get(it.next()));
                        }
                        // Test pour savoir si la liste contient des éléments
                        if (liste.size() > 0) {
                                Configuration config = (Configuration) Registry.get(RegistreId.CONFIG);
                                if (listeValeurs.getId().equals(config.getListeId("stpr"))) {
                                        magazinLstpr.removeAll();
                                        magazinLstpr.add(liste);
                                        comboLstpr.setStore(magazinLstpr);
                                }
                                if (listeValeurs.getId().equals(config.getListeId("stpu"))) {
                                        magazinLstpu.removeAll();
                                        magazinLstpu.add(liste);
                                        comboLstpu.setStore(magazinLstpu);
                                }
                                if (listeValeurs.getId().equals(config.getListeId("statut"))) {
                                        magazinLiStatut.removeAll();
                                        magazinLiStatut.add(liste);
                                        comboLiStatut.setStore(magazinLiStatut);
                                }
                                if (listeValeurs.getId().equals(config.getListeId("fonction"))) {
                                        magazinLiFonction.removeAll();
                                        magazinLiFonction.add(liste);
                                        comboLiFonction.setStore(magazinLiFonction);
                                }
                                if (listeValeurs.getId().equals(config.getListeId("localStockage"))) {
                                        trukLocalStockageCacGrpChp = new CheckBoxGroup();
                                        trukLocalStockageCacGrpChp.setFieldLabel("Avez vous des locaux spécifiques de stockage des collections botaniques ?");
                                        for (Iterator<String> it = listeValeurs.keySet().iterator(); it.hasNext();) {
                                                String nom =  listeValeurs.get(it.next()).get("nom");
                                                CheckBox trukLocalStockageCac = new CheckBox();
                                                // Calcul de la largeur de la checkbox en fonction de la taille du label
                                                int largeur = nom.length()*10;
                                                if (nom.length() > 20) {
                                                        largeur = 170;
                                                }
                                                trukLocalStockageCac.setWidth(largeur);
                                                trukLocalStockageCac.setBoxLabel(nom);
                                                trukLocalStockageCacGrpChp.add(trukLocalStockageCac);
                                        }
                                        trukLocalStockageCp.add(trukLocalStockageCacGrpChp);
                                        
                                        ContentPanel autreCp = new ContentPanel();
                                        autreCp.setLayout(creerFormLayout(75, LabelAlign.TOP, 0));
                                        autreCp.setHeaderVisible(false);
                                        TextField<String> autreTrukLocalStockageChp = new TextField<String>();
                                        autreTrukLocalStockageChp.setFieldLabel("Autre");
                                        autreTrukLocalStockageChp.setLabelStyle("font-weight:normal;");
                                        autreTrukLocalStockageChp.setWidth(300);
                                        autreCp.add(autreTrukLocalStockageChp);
                                        trukLocalStockageCp.add(autreCp);
                                        
                                        trukLocalStockageCp.layout();
                                }
                                if (listeValeurs.getId().equals(config.getListeId("meubleStockage"))) {
                                        trukMeubleStockageCacGrpChp = new CheckBoxGroup();
                                        trukMeubleStockageCacGrpChp.setFieldLabel("Avez vous des meubles spécifiques au stockage des collections botaniques ?");
                                        for (Iterator<String> it = listeValeurs.keySet().iterator(); it.hasNext();) {
                                                String nom =  listeValeurs.get(it.next()).get("nom");
                                                CheckBox trukMeubleStockageCac = new CheckBox();
                                                GWT.log("Taille : "+nom.length(), null);
                                                // Calcul de la largeur de la checkbox en fonction de la taille du label
                                                int largeur = nom.length()*8;
                                                if (nom.length() > 20) {
                                                        largeur = 170;
                                                }
                                                trukMeubleStockageCac.setWidth(largeur);
                                                trukMeubleStockageCac.setBoxLabel(nom);
                                                trukMeubleStockageCacGrpChp.add(trukMeubleStockageCac);
                                        }
                                        trukMeubleStockageCp.add(trukMeubleStockageCacGrpChp);
                                        
                                        ContentPanel autreCp = new ContentPanel();
                                        autreCp.setLayout(creerFormLayout(75, LabelAlign.TOP, 0));
                                        autreCp.setHeaderVisible(false);
                                        TextField<String> autreTrukLocalStockageChp = new TextField<String>();
                                        autreTrukLocalStockageChp.setFieldLabel("Autre");
                                        autreTrukLocalStockageChp.setLabelStyle("font-weight:normal;");
                                        autreTrukLocalStockageChp.setWidth(300);
                                        autreCp.add(autreTrukLocalStockageChp);
                                        trukMeubleStockageCp.add(autreCp);
                                        
                                        trukMeubleStockageCp.layout();
                                }
                                GWT.log("La liste #"+listeValeurs.getId()+" a été reçue!", null);
                        } else {
                                GWT.log("La liste #"+listeValeurs.getId()+" ne contient aucune valeurs!", null);
                        }
                }
        }
         
}