Subversion Repositories eFlore/Applications.coel

Rev

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

package org.tela_botanica.client.vues;

import org.tela_botanica.client.Mediateur;
import org.tela_botanica.client.composants.ChampComboBoxListeValeurs;
import org.tela_botanica.client.composants.ChampMultiValeurs;
import org.tela_botanica.client.composants.ConteneurMultiChamps;
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 com.extjs.gxt.ui.client.store.ListStore;
import com.extjs.gxt.ui.client.util.Margins;
import com.extjs.gxt.ui.client.util.Padding;
import com.extjs.gxt.ui.client.widget.ContentPanel;
import com.extjs.gxt.ui.client.widget.LayoutContainer;
import com.extjs.gxt.ui.client.widget.Text;
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.LabelField;
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.Validator;
import com.extjs.gxt.ui.client.widget.form.ComboBox.TriggerAction;
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.HBoxLayout;
import com.extjs.gxt.ui.client.widget.layout.HBoxLayoutData;
import com.extjs.gxt.ui.client.widget.layout.RowLayout;
import com.extjs.gxt.ui.client.widget.layout.HBoxLayout.HBoxLayoutAlign;
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 ComboBox<Projet> projetsCombo = null;
        private ComboBox<Structure> structuresCombo = null;
        private ComboBox<Collection> collectionsCombo = null;
        
        private FieldSet descriptionFieldSet = null;
        private ComboBox<Valeur> typeDepotCombo = null;

        private TextArea lieuCouvertureChp = null;

        private ChampComboBoxListeValeurs specimenTypeCombo = null;
        private ChampComboBoxListeValeurs precisionTypeNbreCombo = null;
        private NumberField nbreTypeChp = null;

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

        private void creerChampsCache() {
                // Champs cachés
                idCollectionChp = new HiddenField<String>();
                this.add(idCollectionChp);
        }
        
        private void creerFieldsetLiaison() {
                FieldSet liaisonFieldSet = new FieldSet();
                liaisonFieldSet.setHeading(i18nC.liaisonTitreCollection());
                liaisonFieldSet.setCollapsible(true);
                liaisonFieldSet.setLayout(Formulaire.creerFormLayout(largeurLabelDefaut, alignementLabelDefaut));
                
                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 (projetsCombo.getStore().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(new ListStore<Projet>());
                liaisonFieldSet.add(projetsCombo, new FormData(450, 0));
                mediateur.selectionnerProjets(this);
                
                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 (structuresCombo.getStore().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(new ListStore<Structure>());
                liaisonFieldSet.add(structuresCombo, new FormData(450, 0));
                mediateur.selectionnerStructureParProjet(this, null);
                
                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 (collectionsCombo.getStore().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(new ListStore<Collection>());
                liaisonFieldSet.add(collectionsCombo, new FormData(450, 0));
                mediateur.selectionnerCollectionParProjet(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(largeurLabelDefaut, alignementLabelDefaut));
                
                typeDepotCombo = new ChampComboBoxListeValeurs(i18nC.typeDepot(), "typeDepot", tabIndex++);
                administratifFieldSet.add(typeDepotCombo);
                                
                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(largeurLabelDefaut, alignementLabelDefaut));

                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);
        }
        
        private void creerFieldsetCouverture() {
                FieldSet couvertureFieldSet = new FieldSet();
                couvertureFieldSet.setHeading("Couvertures");
                couvertureFieldSet.setCollapsible(true);
                couvertureFieldSet.setLayout(Formulaire.creerFormLayout(largeurLabelDefaut, alignementLabelDefaut));
                
                lieuCouvertureChp = new TextArea();
                lieuCouvertureChp.setFieldLabel(i18nC.lieuCouvertureCollection());
                couvertureFieldSet.add(lieuCouvertureChp, new FormData(550, 0));
                
                this.add(couvertureFieldSet);
        }
        
        private void creerFieldsetType() {
                FieldSet typeFieldSet = new FieldSet();
                typeFieldSet.setHeading("Spécimens «types»");
                typeFieldSet.setCollapsible(true);
                typeFieldSet.setLayout(Formulaire.creerFormLayout(largeurLabelDefaut, alignementLabelDefaut));
                
                specimenTypeCombo = new ChampComboBoxListeValeurs(i18nC.specimenTypeCollection(), "onpi", tabIndex++);
                typeFieldSet.add(specimenTypeCombo);
                
                ConteneurMultiChamps nbreTypeConteneur = new ConteneurMultiChamps(i18nC.nbreSpecimenTypeCollection());
                
                nbreTypeChp = new NumberField();
                nbreTypeChp.setFormat(NumberFormat.getFormat("#"));
                nbreTypeConteneur.ajouterChamp(nbreTypeChp, new HBoxLayoutData(new Margins(0, 20, 0, 0)));
                
                precisionTypeNbreCombo = new ChampComboBoxListeValeurs(null, "ea");
                precisionTypeNbreCombo.setTrie("id_valeur");
                precisionTypeNbreCombo.setEmptyText(i18nC.precisionNbreSpecimenTypeCollectionChpVide());
                nbreTypeConteneur.ajouterChamp(precisionTypeNbreCombo);
                
                typeFieldSet.add(nbreTypeConteneur);
                                
                classementSpecimenTypeCombo = new ChampComboBoxListeValeurs(i18nC.classementSpecimenTypeCollection(), "typeClassement", tabIndex++);
                typeFieldSet.add(classementSpecimenTypeCombo);
                
                Text infoType = new Text(i18nC.specimenTypeCollectionInfo());
                typeFieldSet.add(infoType);
                
                this.add(typeFieldSet);
        }
        
        public void rafraichir(Object nouvellesDonnees) {
                 if (nouvellesDonnees instanceof ProjetListe) {
                        ProjetListe projets = (ProjetListe) nouvellesDonnees;
                        Formulaire.rafraichirComboBox(projets, projetsCombo);
                } else if (nouvellesDonnees instanceof StructureListe) {
                        StructureListe structures = (StructureListe) nouvellesDonnees;
                        Formulaire.rafraichirComboBox(structures, structuresCombo);
                } else if (nouvellesDonnees instanceof CollectionListe) {
                        CollectionListe collections = (CollectionListe) nouvellesDonnees;
                        Formulaire.rafraichirComboBox(collections, collectionsCombo);
                } else if (nouvellesDonnees instanceof ValeurListe) {
                        ValeurListe listeValeurs = (ValeurListe) nouvellesDonnees;
                        rafraichirValeurListe(listeValeurs);
                } else {
                        GWT.log(Mediateur.i18nM.erreurRafraichir(nouvellesDonnees.getClass(), this.getClass()), null);
                }
        }
        
        private void rafraichirValeurListe(ValeurListe listeValeurs) {
                if (listeValeurs.getId().equals(config.getListeId("typeDepot"))) {
                        Formulaire.rafraichirComboBox(listeValeurs, typeDepotCombo);
                } else {
                        GWT.log("Gestion de la liste "+listeValeurs.getId()+" non implémenté!", null);
                }
        }
        
        

}