Subversion Repositories eFlore/Applications.coel

Rev

Rev 91 | Rev 102 | 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.Collections;
import java.util.Comparator;
import java.util.Iterator;
import java.util.List;

import org.tela_botanica.client.Mediateur;
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.Structure;
import org.tela_botanica.client.modeles.StructureListe;
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.data.BasePagingLoadResult;
import com.extjs.gxt.ui.client.data.BasePagingLoader;
import com.extjs.gxt.ui.client.data.JsonReader;
import com.extjs.gxt.ui.client.data.ListLoadResult;
import com.extjs.gxt.ui.client.data.ModelData;
import com.extjs.gxt.ui.client.data.ModelType;
import com.extjs.gxt.ui.client.data.PagingLoadConfig;
import com.extjs.gxt.ui.client.data.PagingLoadResult;
import com.extjs.gxt.ui.client.data.PagingLoader;
import com.extjs.gxt.ui.client.data.ScriptTagProxy;
import com.extjs.gxt.ui.client.event.SelectionChangedEvent;
import com.extjs.gxt.ui.client.event.SelectionChangedListener;
import com.extjs.gxt.ui.client.store.ListStore;
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.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.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.DateField.DateFieldMessages;
import com.extjs.gxt.ui.client.widget.form.FormPanel.LabelAlign;
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.google.gwt.core.client.GWT;
import com.google.gwt.i18n.client.DateTimeFormat;

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 ComboBox<InterneValeur> comboAcronyme = null;
        private TextField<String> ihChp = null;
        private TextField<String> mnhnChp = null;
        private ComboBox<InterneValeur> comboTypeStructure = 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();  
                //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>() {
                        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>() {
                        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();
                layoutGauche = new FormLayout();
                layoutGauche.setLabelAlign(LabelAlign.LEFT);
                layoutGauche.setLabelWidth(100);
                layoutGauche.setPadding(0);
                gaucheFdTelMail.setLayout(layoutGauche);
                
                LayoutContainer droiteFdTelMail = new LayoutContainer();
                layoutDroite = new FormLayout();
                layoutDroite.setLabelAlign(LabelAlign.LEFT);
                layoutDroite.setLabelWidth(100);
                layoutDroite.setPadding(0);
                droiteFdTelMail.setLayout(layoutDroite);
                
                FieldSet fieldSetTelMail = new FieldSet();
                fieldSetTelMail.setHeading("Communication");
                fieldSetTelMail.setCollapsible(true);
                
                layoutFieldset = new FormLayout();  
                layoutFieldset.setLabelWidth(200);  
                layoutFieldset.setPadding(4);  
                fieldSetTelMail.setLayout(layoutFieldset);
                                
                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
                TabItem personnelOnglet = new TabItem();  
                personnelOnglet.setText("Personnel");  
                personnelOnglet.setLayout(new FormLayout());

                
                onglets.add(personnelOnglet);
                
                //+-----------------------------------------------------------------------------------------------------------+
                // Onlget formulaire CONSERVATION
                TabItem conservationOnglet = new TabItem();  
                conservationOnglet.setText("Conservation");  
                conservationOnglet.setLayout(new FormLayout());

                
                onglets.add(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 du type
                LayoutContainer typeConteneur = new LayoutContainer();
                layoutDroite = new FormLayout();
                layoutDroite.setLabelWidth(50);
                layoutDroite.setPadding(5);
                typeConteneur.setLayout(layoutDroite);
                
                RadioGroup group = new RadioGroup();  
                group.setFieldLabel("Type");
                Radio structureRadio = new Radio();  
                structureRadio.setBoxLabel("Structure");
                structureRadio.setValue(true);
                group.add(structureRadio);
                Radio particulierRadio = new Radio();
                particulierRadio.setBoxLabel("Particulier");
                group.add(particulierRadio);
                typeConteneur.add(group);
                panel.add(typeConteneur);
                
                // 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);               
        }

        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"))) {
                                        GWT.log("La liste #"+listeValeurs.getId()+" a été reçue!", null);
                                        magazinLstpr.removeAll();
                                        magazinLstpr.add(liste);
                                        comboLstpr.setStore(magazinLstpr);
                                }
                                if (listeValeurs.getId().equals(config.getListeId("stpu"))) {
                                        GWT.log("La liste #"+listeValeurs.getId()+" a été reçue!", null);
                                        magazinLstpu.removeAll();
                                        magazinLstpu.add(liste);
                                        comboLstpu.setStore(magazinLstpu);
                                }
                        } else {
                                GWT.log("La liste #"+listeValeurs.getId()+" ne contient aucune valeurs!", null);
                        }
                }
        }
         
}