Subversion Repositories eFlore/Applications.coel

Rev

Rev 703 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed

package org.tela_botanica.client.vues;

import java.util.List;

import org.tela_botanica.client.Mediateur;
import org.tela_botanica.client.composants.ChampMultiValeurs;
import org.tela_botanica.client.interfaces.Rafraichissable;
import org.tela_botanica.client.modeles.Collection;
import org.tela_botanica.client.modeles.CollectionListe;
import org.tela_botanica.client.modeles.Projet;
import org.tela_botanica.client.modeles.ProjetListe;
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 org.tela_botanica.client.modeles.aDonnee;
import org.tela_botanica.client.modeles.aDonneeListe;

import com.extjs.gxt.ui.client.Style.SortDir;
import com.extjs.gxt.ui.client.store.ListStore;
import com.extjs.gxt.ui.client.widget.form.ComboBox;
import com.extjs.gxt.ui.client.widget.form.Field;
import com.extjs.gxt.ui.client.widget.form.FieldSet;
import com.extjs.gxt.ui.client.widget.form.HiddenField;
import com.extjs.gxt.ui.client.widget.form.NumberField;
import com.extjs.gxt.ui.client.widget.form.TextArea;
import com.extjs.gxt.ui.client.widget.form.TextField;
import com.extjs.gxt.ui.client.widget.form.Validator;
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.layout.FormData;
import com.google.gwt.core.client.GWT;
import com.google.gwt.i18n.client.NumberFormat;

public class CollectionFormGeneral extends FormulaireOnglet implements Rafraichissable {
        
        private HiddenField<String> idCollectionChp;
        
        private FieldSet descriptionFieldSet;
        private ListStore<Valeur> typesCollectionStore;
        private ListStore<Valeur> typeCollectionBotaStore;
        private ListStore<Valeur> typeDepotStore;
        private ComboBox<Valeur> typeDepotCombo;
        private ComboBox<Valeur> typesCollectionBotaCombo;
        private ComboBox<Valeur> typesCollectionCombo;
        
        private ListStore<Projet> projetsStore;
        private ComboBox<Projet> projetsCombo;

        private ComboBox<Structure> structuresCombo;

        private ListStore<Structure> structuresStore;

        private ComboBox<Collection> collectionsCombo;

        private ListStore<Collection> collectionsStore;

        public CollectionFormGeneral(Formulaire formulaireCourrant) {
                initialiserOnglet(formulaireCourrant);
                setId("general");
                setText(Mediateur.i18nC.collectionGeneral());
                
                creerChampsCache();
                creerFieldsetLiaison();
                creerFieldsetAdministratif();
                creerFieldsetDescription();
        }

        private void creerChampsCache() {
                // Champs cachés
                idCollectionChp = new HiddenField<String>();
                this.add(idCollectionChp);
        }
        
        private void creerFieldsetLiaison() {
                // Fieldset LIAISON
                FieldSet liaisonFieldSet = new FieldSet();
                liaisonFieldSet.setHeading(i18nC.liaisonTitreCollection());
                liaisonFieldSet.setCollapsible(true);
                liaisonFieldSet.setLayout(Formulaire.creerFormLayout(150, LabelAlign.LEFT));
                
                projetsStore = new ListStore<Projet>();
                projetsCombo = new ComboBox<Projet>();
                projetsCombo.setTabIndex(tabIndex++);
                projetsCombo.setFieldLabel(i18nC.projetChamp());
                projetsCombo.setDisplayField("nom");
                projetsCombo.setForceSelection(true);
                projetsCombo.setValidator(new Validator() {
                        @Override
                        public String validate(Field<?> field, String value) {
                                String retour = null;
                                if (field.getRawValue().equals("")) {
                                        field.setValue(null);
                                } else if (projetsStore.findModel("nom", field.getRawValue()) == null) {
                                        String contenuBrut = field.getRawValue();
                                        field.setValue(null);
                                        field.setRawValue(contenuBrut);
                                        retour = "Veuillez sélectionner une valeur ou laisser le champ vide";
                                }
                                return retour;
                        }
                });
                projetsCombo.setTriggerAction(TriggerAction.ALL);
                projetsCombo.setStore(projetsStore);
                liaisonFieldSet.add(projetsCombo, new FormData(450, 0));
                mediateur.selectionnerProjets(this);
                
                structuresStore = new ListStore<Structure>();
                structuresCombo = new ComboBox<Structure>();
                structuresCombo.setTabIndex(tabIndex++);
                structuresCombo.setFieldLabel(i18nC.lienStructureCollection());
                structuresCombo.setDisplayField("nom");
                structuresCombo.setForceSelection(true);
                structuresCombo.setValidator(new Validator() {
                        @Override
                        public String validate(Field<?> field, String value) {
                                String retour = null;
                                if (field.getRawValue().equals("")) {
                                        field.setValue(null);
                                } else if (structuresStore.findModel("nom", field.getRawValue()) == null) {
                                        String contenuBrut = field.getRawValue();
                                        field.setValue(null);
                                        field.setRawValue(contenuBrut);
                                        retour = "Veuillez sélectionner une valeur ou laisser le champ vide";
                                }
                                return retour;
                        }
                });
                structuresCombo.setTriggerAction(TriggerAction.ALL);
                structuresCombo.setStore(structuresStore);
                liaisonFieldSet.add(structuresCombo, new FormData(450, 0));
                mediateur.selectionnerStructure(this, null);
                
                collectionsStore = new ListStore<Collection>();
                collectionsCombo = new ComboBox<Collection>();
                collectionsCombo.setTabIndex(tabIndex++);
                collectionsCombo.setFieldLabel(i18nC.lienMereCollection());
                collectionsCombo.setDisplayField("nom");
                collectionsCombo.setForceSelection(true);
                collectionsCombo.setValidator(new Validator() {
                        @Override
                        public String validate(Field<?> field, String value) {
                                String retour = null;
                                if (field.getRawValue().equals("")) {
                                        field.setValue(null);
                                } else if (collectionsStore.findModel("nom", field.getRawValue()) == null) {
                                        String contenuBrut = field.getRawValue();
                                        field.setValue(null);
                                        field.setRawValue(contenuBrut);
                                        retour = "Veuillez sélectionner une valeur ou laisser le champ vide";
                                }
                                GWT.log("Validation : "+field.getRawValue()+"-"+field.getValue(), null);
                                return retour;
                        }
                });
                collectionsCombo.setTriggerAction(TriggerAction.ALL);
                collectionsCombo.setStore(collectionsStore);
                liaisonFieldSet.add(collectionsCombo, new FormData(450, 0));
                mediateur.selectionnerCollection(this, null);
                
                this.add(liaisonFieldSet);
        }
        
        private void creerFieldsetAdministratif() {
                // Fieldset ADMINISTRATIF
                FieldSet administratifFieldSet = new FieldSet();
                administratifFieldSet.setHeading(i18nC.collectionGeneralTitre());
                administratifFieldSet.setCollapsible(true);
                administratifFieldSet.setLayout(Formulaire.creerFormLayout(150, LabelAlign.LEFT));
                
                typesCollectionStore = new ListStore<Valeur>();
                typesCollectionCombo = new ComboBox<Valeur>();
                typesCollectionCombo.setTabIndex(tabIndex++);
                typesCollectionCombo.setFieldLabel(i18nC.typeCollectionNcd());
                typesCollectionCombo.setDisplayField("nom");
                typesCollectionCombo.setForceSelection(true);
                typesCollectionCombo.setValidator(new Validator() {
                        @Override
                        public String validate(Field<?> field, String value) {
                                String retour = null;
                                if (field.getRawValue().equals("")) {
                                        field.setValue(null);
                                } else if (typesCollectionStore.findModel("nom", field.getRawValue()) == null) {
                                        String contenuBrut = field.getRawValue();
                                        field.setValue(null);
                                        field.setRawValue(contenuBrut);
                                        retour = "Veuillez sélectionner une valeur ou laisser le champ vide";
                                }
                                return retour;
                        }
                });
                typesCollectionCombo.setTriggerAction(TriggerAction.ALL);
                typesCollectionCombo.setStore(typesCollectionStore);
                administratifFieldSet.add(typesCollectionCombo, new FormData(250, 0));
                mediateur.obtenirListeValeurEtRafraichir(this, "typeCollectionNcd");
                
                typeCollectionBotaStore = new ListStore<Valeur>();
                typesCollectionBotaCombo = new ComboBox<Valeur>();
                typesCollectionBotaCombo.setTabIndex(tabIndex++);
                typesCollectionBotaCombo.setFieldLabel(i18nC.typeCollectionBotanique());
                typesCollectionBotaCombo.setDisplayField("nom");
                typesCollectionBotaCombo.setForceSelection(true);
                typesCollectionBotaCombo.setValidator(new Validator() {
                        @Override
                        public String validate(Field<?> field, String value) {
                                String retour = null;
                                if (field.getRawValue().equals("")) {
                                        field.setValue(null);
                                } else if (typeCollectionBotaStore.findModel("nom", field.getRawValue()) == null) {
                                        String contenuBrut = field.getRawValue();
                                        field.setValue(null);
                                        field.setRawValue(contenuBrut);
                                        retour = "Veuillez sélectionner une valeur ou laisser le champ vide";
                                }
                                return retour;
                        }
                });
                typesCollectionBotaCombo.setTriggerAction(TriggerAction.ALL);
                typesCollectionBotaCombo.setStore(typeCollectionBotaStore);
                administratifFieldSet.add(typesCollectionBotaCombo, new FormData(250, 0));
                mediateur.obtenirListeValeurEtRafraichir(this, "typeCollectionBota");
                
                typeDepotStore = new ListStore<Valeur>();
                typeDepotCombo = new ComboBox<Valeur>();
                typeDepotCombo.setTabIndex(tabIndex++);
                typeDepotCombo.setFieldLabel(i18nC.typeDepot());
                typeDepotCombo.setDisplayField("nom");
                typeDepotCombo.setForceSelection(true);
                typeDepotCombo.setValidator(new Validator() {
                        @Override
                        public String validate(Field<?> field, String value) {
                                String retour = null;
                                if (field.getRawValue().equals("")) {
                                        field.setValue(null);
                                } else if (typeDepotStore.findModel("nom", field.getRawValue()) == null) {
                                        String contenuBrut = field.getRawValue();
                                        field.setValue(null);
                                        field.setRawValue(contenuBrut);
                                        retour = "Veuillez sélectionner une valeur ou laisser le champ vide";
                                }
                                return retour;
                        }
                });
                typeDepotCombo.setTriggerAction(TriggerAction.ALL);
                typeDepotCombo.setStore(typeCollectionBotaStore);
                administratifFieldSet.add(typeDepotCombo, new FormData(250, 0));
                mediateur.obtenirListeValeurEtRafraichir(this, "typeDepot");
                
                TextField<String> coteChp = new TextField<String>();
                coteChp.setTabIndex(tabIndex++);
                coteChp.setFieldLabel(i18nC.cote());
                administratifFieldSet.add(coteChp, new FormData(450, 0));
                
                NumberField nbreEchantillonChp = new NumberField(); 
                nbreEchantillonChp.setFieldLabel(i18nC.nbreEchantillon());
                nbreEchantillonChp.setToolTip(i18nC.nbreEchantillonInfo());
                nbreEchantillonChp.setFormat(NumberFormat.getFormat("#"));
                nbreEchantillonChp.setToolTip(i18nC.champNumerique());
                administratifFieldSet.add(nbreEchantillonChp);
                
                TextField<String> nomChp = new TextField<String>();
                nomChp.setTabIndex(tabIndex++);
                nomChp.setFieldLabel(i18nC.nomCollection());
                nomChp.setAllowBlank(false);
                nomChp.getMessages().setBlankText(i18nC.champObligatoire());
                administratifFieldSet.add(nomChp, new FormData(450, 0));
                
                ChampMultiValeurs nomsAlternatifsChp = new ChampMultiValeurs(i18nC.intituleAlternatifCollection());
                administratifFieldSet.add(nomsAlternatifsChp);
                                
                ChampMultiValeurs codesAlternatifsChp = new ChampMultiValeurs(i18nC.codeAlternatifCollection());
                administratifFieldSet.add(codesAlternatifsChp);
                
                this.add(administratifFieldSet);
        }
        
        private void creerFieldsetDescription() {
                // Fieldset DESCRIPTION
                descriptionFieldSet = new FieldSet();
                descriptionFieldSet.setHeading(i18nC.collectionDescriptionTitre());
                descriptionFieldSet.setCollapsible(true);
                descriptionFieldSet.setLayout(Formulaire.creerFormLayout(150, LabelAlign.LEFT));

                TextArea descriptionChp = new TextArea();
                descriptionChp.setFieldLabel(i18nC.description());
                descriptionFieldSet.add(descriptionChp, new FormData(550, 0));
                
                TextArea descriptionSpecialisteChp = new TextArea();
                descriptionSpecialisteChp.setFieldLabel(i18nC.descriptionSpecialiste());
                descriptionFieldSet.add(descriptionSpecialisteChp, new FormData(550, 0));
                
                TextArea historiqueChp = new TextArea();
                historiqueChp.setFieldLabel(i18nC.historique());
                descriptionFieldSet.add(historiqueChp, new FormData(550, 0));
                
                ChampMultiValeurs urlsChp = new ChampMultiValeurs(i18nC.urlsCollection());
                descriptionFieldSet.add(urlsChp);

                this.add(descriptionFieldSet);
        }
        
        public void rafraichir(Object nouvellesDonnees) {
                if (nouvellesDonnees instanceof ValeurListe) {
                        ValeurListe listeValeurs = (ValeurListe) nouvellesDonnees;
                        rafraichirValeurListe(listeValeurs);
                } else if (nouvellesDonnees instanceof ProjetListe) {
                        ProjetListe projets = (ProjetListe) nouvellesDonnees;
                        rafraichirComboBox(projets, projetsStore, projetsCombo);
                } else if (nouvellesDonnees instanceof StructureListe) {
                        StructureListe structures = (StructureListe) nouvellesDonnees;
                        rafraichirComboBox(structures, structuresStore, structuresCombo);
                } else if (nouvellesDonnees instanceof CollectionListe) {
                        CollectionListe collections = (CollectionListe) nouvellesDonnees;
                        rafraichirComboBox(collections, collectionsStore, collectionsCombo);
                } else {
                        GWT.log(Mediateur.i18nM.erreurRafraichir(nouvellesDonnees.getClass(), this.getClass()), null);
                }
        }
        
        private void rafraichirValeurListe(ValeurListe listeValeurs) {
                if (listeValeurs.getId().equals(config.getListeId("typeCollectionNcd"))) {
                        rafraichirComboBox(listeValeurs, typesCollectionStore, typesCollectionCombo);
                } else if (listeValeurs.getId().equals(config.getListeId("typeCollectionBota"))) {
                        rafraichirComboBox(listeValeurs, typeCollectionBotaStore, typesCollectionBotaCombo);
                } else if (listeValeurs.getId().equals(config.getListeId("typeDepot"))) {
                        rafraichirComboBox(listeValeurs, typeDepotStore, typeDepotCombo);
                } else {
                        GWT.log("Gestion de la liste "+listeValeurs.getId()+" non implémenté!", null);
                }
        }
        
        @SuppressWarnings({"unchecked"})
        private void rafraichirComboBox(aDonneeListe<?> listeValeurs, ListStore store, ComboBox combo) {
                List<?> liste = listeValeurs.toList();
                if (liste.size() > 0) {
                        store.removeAll();
                        store.add(liste);
                        store.sort("nom", SortDir.ASC);
                        combo.setStore(store);
                }
        }

}