Subversion Repositories eFlore/Applications.coel

Rev

Rev 109 | Rev 111 | Go to most recent revision | Blame | Compare with Previous | 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.Style.Scroll;
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.Radio;
import com.extjs.gxt.ui.client.widget.form.RadioGroup;
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.tips.ToolTipConfig;
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;
        private CheckBoxGroup trukParametreStockageCacGrpChp = null;
        private ContentPanel trukParametreStockageCp = null;
        private ContentPanel trukCollectionAutreCp = null;
        private CheckBoxGroup trukCollectionAutreCacGrpChp = null;
        private CheckBoxGroup trukOpRestauCacGrpChp = null;
        private ContentPanel trukOpRestauCp = null;
        private ContentPanel ceMaterielConservationCp = null;
        private CheckBoxGroup ceMaterielConservationCacGrpChp = null;
        private CheckBoxGroup trukAutreMaterielCacGrpChp = null;
        private ContentPanel trukAutreMaterielCp = null;
        private ContentPanel trukTraitementCp = null;
        private CheckBoxGroup trukTraitementCacGrpChp = null;
        private ContentPanel trukPoisonTraitementCp;
        private ContentPanel trukInsecteTraitementCp;
        private CheckBoxGroup trukInsecteTraitementCacGrpChp;
        private CheckBoxGroup trukPoisonTraitementCacGrpChp;
        
        public FormStructureVue() {
                //+-----------------------------------------------------------------------------------------------------------+         
                // Initialisation de variables
                setLayout(new FitLayout());
                coelModele = Registry.get(RegistreId.MODELE);
                
                //+-----------------------------------------------------------------------------------------------------------+
                // Création du panneau du FORMULAIRE GÉNÉRAL
                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();
                // NOTE : pour faire apparaître les scrollBar il faut définir la hauteur du panneau d'onglets à 100% (autoHeight ne semble pas fonctionner) 
                onglets.setHeight("100%");
                
                //+-----------------------------------------------------------------------------------------------------------+
                // Onlget formulaire IDENTIFICATION
                onglets.add(creerOngletIdentification());

                //+-----------------------------------------------------------------------------------------------------------+
                // 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.setScrollMode(Scroll.AUTO);
                conservationOnglet.setLayout(creerFormLayout(650, LabelAlign.TOP, null));
                
                RadioGroup markFormationRGrpChp = new RadioGroup("mark_formation_grp");
                markFormationRGrpChp.setFieldLabel("Le personnel s'occupant des collections a-t-il suivi des formations en conservations ?");
                creerChoixUniqueBr(markFormationRGrpChp, "mark_formation");
                conservationOnglet.add(markFormationRGrpChp);
                
                TextField<String> formationChp = new TextField<String>();
                formationChp.setFieldLabel("Lesquelles ?");
                conservationOnglet.add(formationChp);
                
                RadioGroup markInteretFormationRGrpChp = new RadioGroup("mark_interet_formation_grp");
                markInteretFormationRGrpChp.setFieldLabel("Seriez vous intéressé par une formation à la conservation et à la restauration d'herbier ?");
                creerChoixUniqueBr(markInteretFormationRGrpChp, "mark_interet_formation_grp");
                conservationOnglet.add(markInteretFormationRGrpChp);
                
                trukLocalStockageCp = creerChoixMultipleCp("localStockage");
                conservationOnglet.add(trukLocalStockageCp);
                
                trukMeubleStockageCp = creerChoixMultipleCp("meubleStockage");
                conservationOnglet.add(trukMeubleStockageCp);
                
                trukParametreStockageCp = creerChoixMultipleCp("parametreStockage");
                conservationOnglet.add(trukParametreStockageCp);
                
                RadioGroup markCollectionCommuneRGrpChp = new RadioGroup("mark_collection_commune_grp");
                markCollectionCommuneRGrpChp.setFieldLabel("Les collections botaniques sont-elles conservées avec d'autres collections  dans les mêmes locaux (problème de conservation en commun) ?");
                creerChoixUniqueBr(markCollectionCommuneRGrpChp, "mark_collection_commune");
                conservationOnglet.add(markCollectionCommuneRGrpChp);
                
                trukCollectionAutreCp = creerChoixMultipleCp("autreCollection");
                conservationOnglet.add(trukCollectionAutreCp);
                
                RadioGroup markAccesControleRGrpChp = new RadioGroup("mark_acces_controle_grp");
                markAccesControleRGrpChp.setFieldLabel("L'accès à vos collections botanique est-il contrôlé (ex. : manipulation réservées à des personnes compétentes) ?");
                creerChoixUniqueBr(markAccesControleRGrpChp, "mark_acces_controle");
                conservationOnglet.add(markAccesControleRGrpChp);
                
                RadioGroup markRestaurationRGrpChp = new RadioGroup("restauration_grp");
                markRestaurationRGrpChp.setFieldLabel("Effectuez vous des opérations de restauration ou de remise en état de vos collections botaniques ?");
                creerChoixUniqueBr(markRestaurationRGrpChp, "mark_restauration");
                conservationOnglet.add(markRestaurationRGrpChp);
                
                trukOpRestauCp = creerChoixMultipleCp("opRestau");
                conservationOnglet.add(trukOpRestauCp);
                
                ceMaterielConservationCp = creerChoixMultipleCp("onep");
                conservationOnglet.add(ceMaterielConservationCp);
                
                trukAutreMaterielCp = creerChoixMultipleCp("autreMateriel");
                conservationOnglet.add(trukAutreMaterielCp);
                
                RadioGroup markTraitementRGrpChp = new RadioGroup("traitement_grp");
                markTraitementRGrpChp.setFieldLabel("Réalisez vous actuellement des traitements globaux contre les insectes ?");
                creerChoixUniqueBr(markTraitementRGrpChp, "mark_traitement");
                conservationOnglet.add(markTraitementRGrpChp);
                
                trukTraitementCp = creerChoixMultipleCp("insecteTraitement");
                conservationOnglet.add(trukTraitementCp);
                
                RadioGroup markCollectionAcquisitionRGrpChp = new RadioGroup("collection_acquisition_grp");
                markCollectionAcquisitionRGrpChp.setFieldLabel("Actuellement, vos collections botaniques s'accroissent-elles de nouvelles acquisitions ?");
                creerChoixUniqueBr(markCollectionAcquisitionRGrpChp, "mark_collection_acquisition");
                conservationOnglet.add(markCollectionAcquisitionRGrpChp);
                
                RadioGroup markEchantillonAcquisitionRGrpChp = new RadioGroup("echantillon_acquisition_grp");
                markEchantillonAcquisitionRGrpChp.setFieldLabel("Actuellement, mettez vous en herbier de nouveaux échantillons ?");
                creerChoixUniqueBr(markEchantillonAcquisitionRGrpChp, "mark_echantillon_acquisition");
                conservationOnglet.add(markEchantillonAcquisitionRGrpChp);

                RadioGroup markTraitementAcquisitionRGrpChp = new RadioGroup("traitement_acquisition_grp");
                markTraitementAcquisitionRGrpChp.setFieldLabel("Si oui, faites-vous un traitement contre les insectes avant l'intégration dans vos collections ?");
                creerChoixUniqueBr(markTraitementAcquisitionRGrpChp, "mark_traitement_acquisition");
                conservationOnglet.add(markTraitementAcquisitionRGrpChp);
                
                LabelField question = new LabelField();
                question.setFieldLabel("Si oui, lesquels ?");
                conservationOnglet.add(question);
                
                trukPoisonTraitementCp = creerChoixMultipleCp("poisonTraitement");
                conservationOnglet.add(trukPoisonTraitementCp);
                
                trukInsecteTraitementCp = creerChoixMultipleCp("insecteTraitement");
                conservationOnglet.add(trukInsecteTraitementCp);
                
                return conservationOnglet;
        }
        
        
        private TabItem creerOngletPersonnel() {
                personnelOnglet = new TabItem();
                personnelOnglet.setText("Personnel");
                personnelOnglet.setScrollMode(Scroll.AUTO);
                personnelOnglet.setLayout(creerFormLayout(400, LabelAlign.LEFT, null));
                
                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.setScrollMode(Scroll.AUTO);
                cp.setLayout(new FitLayout());
                cp.setSize(1100, 200);
                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.setAutoExpandColumn("specialites");
                
                cp.add(grillePersonnel);
                return cp;  
        }  
        
        private TabItem creerOngletIdentification() {
                //+-----------------------------------------------------------------------------------------------------------+
                // 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(creerFormLayout(200, LabelAlign.LEFT, 4));
                
                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();
                gauche.setLayout(creerFormLayout(200, LabelAlign.LEFT, 0));
                LayoutContainer droite = new LayoutContainer();
                droite.setLayout(creerFormLayout(0, null, 0));
                
                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();
                gaucheTs.setLayout(creerFormLayout(200, LabelAlign.LEFT, 0));
                
                LayoutContainer droiteTs = new LayoutContainer();
                droiteTs.setLayout(creerFormLayout(0, null, 0));
                
                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();
                gaucheFdAdresse.setLayout(creerFormLayout(100, LabelAlign.LEFT, 0));
                
                LayoutContainer droiteFdAdresse = new LayoutContainer();
                droiteFdAdresse.setLayout(creerFormLayout(100, LabelAlign.LEFT, 0));
                
                FieldSet fieldSetAdresse = new FieldSet();
                fieldSetAdresse.setHeading("Adresse");
                fieldSetAdresse.setCollapsible(true);
                
                fieldSetAdresse.setLayout(creerFormLayout(100, LabelAlign.LEFT, 4));
                
                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);
                
                return identificationOnglet;
        }
        
        /** Méthode simplifiant la création de FormLayout.
         * Chacun des paramètres peut prendre la valeur null pour utiliser la valeur par défaut.
         * 
         * @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();
                if (labelWidth != null) {
                        formLayout.setLabelWidth(labelWidth);
                }
                if (labelAlign != null) {
                        formLayout.setLabelAlign(labelAlign);
                }
                if (padding != null) {
                        formLayout.setPadding(padding);
                }
                return formLayout;
        }
        
        /** Méthode simplifiant la création de bouton radio oui/non
         * 
         * @param listeNom nom de la liste de valeur
         * @return
         */
        private void creerChoixUniqueBr(RadioGroup radioGroup, String attributNom ) {
                Radio ouiRadio = new Radio();
                ouiRadio.setName(attributNom);
                ouiRadio.setBoxLabel("Oui");  
                //ouiRadio.setValue(true);  
                
                Radio nonRadio = new Radio();  
                nonRadio.setName(attributNom);  
                nonRadio.setBoxLabel("Non");  
                
                radioGroup.add(ouiRadio);  
                radioGroup.add(nonRadio);  
        }
        
        /** Méthode simplifiant la création de choix multiple sous forme de case à cocher.
         * Apelle un service retournant la liste des valeurs représentant les cases à cocher.
         * Ajoute ou pas un champ "Autre".
         * 
         * @param listeNom nom de la liste de valeur
         * @return
         */
        private ContentPanel creerChoixMultipleCp(String listeNom) {
                coelModele.obtenirListeValeurs(((Configuration) Registry.get(RegistreId.CONFIG)).getListeId(listeNom));
                ContentPanel cp = new ContentPanel();
                cp.setLayout(creerFormLayout(650, LabelAlign.TOP, 0));
                cp.setHeaderVisible(false);
                return cp;
        }
        
        /** Méthode simplifiant la création de choix multiple sous forme de case à cocher.
         * Apelle un service retournant la liste des valeurs représentant les cases à cocher.
         * Ajoute ou pas un champ "Autre".
         * 
         * @param cp panneau conteant le groupe de case à cocher
         * @param cacGroup le groupe de case à cocher
         * @param labelTxt le texte du champ
         * @param listeValeurs la liste de valeurs à transformer en case à cocher
         * @param boolAutreChp booléen indiquant si oui ou non le champ autre doit apparaître 
         * @return
         */
        private void creerChoixMultipleCac(ContentPanel cp, CheckBoxGroup cacGroupe, String labelTxt, ValeurListe listeValeurs, Boolean boolAutreChp) {
                cacGroupe.setFieldLabel(labelTxt);
                cacGroupe.setAutoWidth(true);
                for (Iterator<String> it = listeValeurs.keySet().iterator(); it.hasNext();) {
                        String nom =  listeValeurs.get(it.next()).get("nom");
                        CheckBox cac = new CheckBox();
                        // TODO : supprimer le code ci-dessous si inutile
                        /*
                        //GWT.log("Taille '"+nom+"' : "+nom.length(), null);
                        // Calcul de la largeur de la checkbox en fonction de la taille du label
                        int largeur = nom.length()*10;
                        if (nom.length() > 15) {
                                largeur = 170;
                        }
                        if (nom.length() > 25) {
                                largeur = 250;
                        }
                        cac.setWidth(largeur);
                        */
                        cac.setBoxLabel(nom);
                        cacGroupe.add(cac);
                }
                cp.add(cacGroupe);
                
                if (boolAutreChp == true) {
                        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);
                        cp.add(autreCp);
                }
                
                cp.layout();
        }
        
        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();
                                        String labelTxt = "Avez vous des locaux spécifiques de stockage des collections botaniques ?";
                                        creerChoixMultipleCac(trukLocalStockageCp, trukLocalStockageCacGrpChp, labelTxt, listeValeurs, true);
                                }
                                if (listeValeurs.getId().equals(config.getListeId("meubleStockage"))) {
                                        trukMeubleStockageCp.setToolTip(new ToolTipConfig("Rayonnages mobiles", "rayonnages sur rails pouvant être déplacés, manuellement ou automatiquement, de façon à utiliser l'espace ordinairement occupé par les allées de desserte entre travées."));
                                        trukMeubleStockageCacGrpChp = new CheckBoxGroup();
                                        String labelTxt = "Avez vous des meubles spécifiques au stockage des collections botaniques ?";
                                        creerChoixMultipleCac(trukMeubleStockageCp, trukMeubleStockageCacGrpChp, labelTxt, listeValeurs, true);
                                }
                                if (listeValeurs.getId().equals(config.getListeId("parametreStockage"))) {
                                        trukParametreStockageCacGrpChp = new CheckBoxGroup();
                                        String labelTxt = "Quels paramètres maîtrisez vous ?";
                                        creerChoixMultipleCac(trukParametreStockageCp, trukParametreStockageCacGrpChp, labelTxt, listeValeurs, true);
                                }
                                if (listeValeurs.getId().equals(config.getListeId("autreCollection"))) {
                                        trukCollectionAutreCacGrpChp = new CheckBoxGroup();
                                        String labelTxt = "Si oui, lesquelles ?";
                                        creerChoixMultipleCac(trukCollectionAutreCp, trukCollectionAutreCacGrpChp, labelTxt, listeValeurs, true);
                                }
                                if (listeValeurs.getId().equals(config.getListeId("opRestau"))) {
                                        trukOpRestauCacGrpChp = new CheckBoxGroup();
                                        String labelTxt = "Si oui, lesquelles ?";
                                        creerChoixMultipleCac(trukOpRestauCp, trukOpRestauCacGrpChp, labelTxt, listeValeurs, true);
                                }
                                if (listeValeurs.getId().equals(config.getListeId("onep"))) {
                                        ceMaterielConservationCacGrpChp = new CheckBoxGroup();
                                        String labelTxt = "Utilisez vous du matériel de conservation ?";
                                        ceMaterielConservationCp.setToolTip(new ToolTipConfig("Matériel de conservation", "matériel spécialisé pour la conservation des archives ou du patrimoine fragile. Ce matériel possède des propriétés mécaniques et chimiques qui font qu'il résiste dans le temps et que sa dégradation n'entraîne pas de dommages sur le matériel qu'il aide à conserver. Exemples : papier neutre, papier gommé, etc..."));
                                        creerChoixMultipleCac(ceMaterielConservationCp, ceMaterielConservationCacGrpChp, labelTxt, listeValeurs, true);
                                }
                                if (listeValeurs.getId().equals(config.getListeId("autreMateriel"))) {
                                        trukAutreMaterielCacGrpChp = new CheckBoxGroup();
                                        String labelTxt = "Si non, qu'utilisez vous comme matériel ?";
                                        creerChoixMultipleCac(trukAutreMaterielCp, trukAutreMaterielCacGrpChp, labelTxt, listeValeurs, true);
                                }
                                if (listeValeurs.getId().equals(config.getListeId("poisonTraitement"))) {
                                        trukPoisonTraitementCacGrpChp = new CheckBoxGroup();
                                        String labelTxt = "Empoisonnement";
                                        trukPoisonTraitementCacGrpChp.setLabelStyle("font-weight:normal;text-decoration:underline;");
                                        trukPoisonTraitementCacGrpChp.setLabelSeparator("");
                                        creerChoixMultipleCac(trukPoisonTraitementCp, trukPoisonTraitementCacGrpChp, labelTxt, listeValeurs, true);
                                }
                                if (listeValeurs.getId().equals(config.getListeId("insecteTraitement"))) {
                                        if (trukTraitementCp.isRendered() && trukTraitementCp.getItemByItemId("trukTraitementCacGrpChp") == null) {
                                                trukTraitementCacGrpChp = new CheckBoxGroup();
                                                trukTraitementCacGrpChp.setId("trukTraitementCacGrpChp");
                                                creerChoixMultipleCac(trukTraitementCp, trukTraitementCacGrpChp, "Si oui, lesquels ?", listeValeurs, true);
                                        }
                                        if (trukInsecteTraitementCp.isRendered() && trukInsecteTraitementCp.getItemByItemId("trukInsecteTraitementCacGrpChp") == null) {
                                                trukInsecteTraitementCacGrpChp = new CheckBoxGroup();
                                                trukInsecteTraitementCacGrpChp.setId("trukInsecteTraitementCacGrpChp");
                                                trukInsecteTraitementCacGrpChp.setLabelStyle("font-weight:normal;text-decoration:underline;");
                                                trukInsecteTraitementCacGrpChp.setLabelSeparator("");
                                                creerChoixMultipleCac(trukInsecteTraitementCp, trukInsecteTraitementCacGrpChp, "Désinsectisation", listeValeurs, true);
                                        }
                                }
                                //GWT.log("La liste #"+listeValeurs.getId()+" a été reçue!", null);
                        } else {
                                GWT.log("La liste #"+listeValeurs.getId()+" ne contient aucune valeurs!", null);
                        }
                }
        }
         
}