Subversion Repositories eFlore/Applications.coel

Rev

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

package org.tela_botanica.client.vues.collection;

import java.util.ArrayList;

import org.tela_botanica.client.ComposantClass;
import org.tela_botanica.client.Mediateur;
import org.tela_botanica.client.composants.ChampCaseACocher;
import org.tela_botanica.client.composants.ChampComboBoxListeValeurs;
import org.tela_botanica.client.composants.ChampComboBoxRechercheTempsReelPaginable;
import org.tela_botanica.client.composants.ChampMultiValeurs;
import org.tela_botanica.client.composants.ChampMultiValeursMultiTypesPaginable;
import org.tela_botanica.client.composants.ConteneurMultiChamps;
import org.tela_botanica.client.composants.pagination.ProxyCollections;
import org.tela_botanica.client.composants.pagination.ProxyProjets;
import org.tela_botanica.client.composants.pagination.ProxyStructures;
import org.tela_botanica.client.composants.pagination.ProxyValeur;
import org.tela_botanica.client.interfaces.Rafraichissable;
import org.tela_botanica.client.modeles.ValeurListe;
import org.tela_botanica.client.modeles.collection.Collection;
import org.tela_botanica.client.modeles.collection.CollectionListe;
import org.tela_botanica.client.modeles.projet.Projet;
import org.tela_botanica.client.modeles.projet.ProjetListe;
import org.tela_botanica.client.modeles.structure.Structure;
import org.tela_botanica.client.modeles.structure.StructureListe;
import org.tela_botanica.client.synchronisation.Sequenceur;
import org.tela_botanica.client.util.Debug;
import org.tela_botanica.client.util.UtilString;
import org.tela_botanica.client.vues.Formulaire;
import org.tela_botanica.client.vues.FormulaireOnglet;

import com.extjs.gxt.ui.client.data.ModelData;
import com.extjs.gxt.ui.client.data.ModelType;
import com.extjs.gxt.ui.client.event.BaseEvent;
import com.extjs.gxt.ui.client.event.Events;
import com.extjs.gxt.ui.client.event.Listener;
import com.extjs.gxt.ui.client.store.ListStore;
import com.extjs.gxt.ui.client.util.Margins;
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.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.layout.FormData;
import com.extjs.gxt.ui.client.widget.layout.HBoxLayoutData;
import com.google.gwt.i18n.client.NumberFormat;

public class CollectionFormGeneral extends FormulaireOnglet implements Rafraichissable {
        
        public static final String ID = "general";
        private Collection collection = null;
        private Collection collectionCollectee = null;

        private HiddenField<String> idCollectionChp = null;
        
        private ChampComboBoxRechercheTempsReelPaginable projetsCombo = null;
        private ChampComboBoxRechercheTempsReelPaginable structuresCombo = null;
        private ChampComboBoxRechercheTempsReelPaginable collectionsCombo = null;
        
        private ChampCaseACocher periodeConstitutionChp = null;
        private ChampComboBoxListeValeurs groupementPrincipeCombo = null;
        private ChampMultiValeurs lieuCouvertureChp = null;

        private ChampComboBoxListeValeurs specimenTypeCombo = null;
        private ChampComboBoxListeValeurs precisionTypeNbreCombo = null;
        private NumberField nbreTypeChp = null;
        private ChampComboBoxListeValeurs classementSpecimenTypeCombo = null;
        
        private ChampComboBoxListeValeurs typeDepotCombo = null;
        private TextField<String> coteChp = null;
        private ChampMultiValeurs idAlternatifsChp = null;
        private ChampMultiValeurs nomsAlternatifsChp = null;
        private ChampMultiValeurs codesAlternatifsChp = null;
        
        private TextArea descriptionSpecialisteChp = null;
        private TextArea descriptionChp = null;
        private TextArea historiqueChp = null;
        private ChampMultiValeurs urlsChp = null;

        private ChampComboBoxListeValeurs butRealisationCombo = null;
        
        private Sequenceur sequenceur = new Sequenceur();
        
        public CollectionFormGeneral(Formulaire formulaireCourrant) {
                initialiserOnglet(formulaireCourrant);
                setId(ID);
                setText(Mediateur.i18nC.collectionGeneral());
                
                creerChampsCache();
                creerFieldsetLiaison();
                creerFieldsetAdministratif();
                creerFieldsetDescription();
                creerFieldsetCouverture();
                creerFieldsetType();
        }

        private void initialiserCollection() {
                collection = ((CollectionForm) formulaire).collection;
                collectionCollectee = ((CollectionForm) formulaire).collectionCollectee;
        }
        
        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));
                
                
                /*********************************/
                /**                     Champ Projets           **/
                /*********************************/
                
                ModelType modelTypeProjets = new ModelType();
                modelTypeProjets.setRoot("projets");
                modelTypeProjets.setTotalName("nbElements");
                modelTypeProjets.addField("cpr_nom");
                modelTypeProjets.addField("cpr_id_projet");
                
                String displayNameProjets = "cpr_nom";
                ProxyProjets<ModelData> proxyProjets = new ProxyProjets<ModelData>(sequenceur);
                
                projetsCombo = new ChampComboBoxRechercheTempsReelPaginable(proxyProjets, modelTypeProjets, displayNameProjets);
                projetsCombo.setWidth(250, 600);
                projetsCombo.getCombo().setTabIndex(tabIndex++);
                projetsCombo.getCombo().setFieldLabel(i18nC.projetChamp());
                projetsCombo.getCombo().setForceSelection(true);
                projetsCombo.getCombo().addStyleName(ComposantClass.OBLIGATOIRE);
                projetsCombo.getCombo().addListener(Events.Valid, Formulaire.creerEcouteurChampObligatoire());
                
                projetsCombo.getCombo().setValidator(new Validator() {
                        public String validate(Field<?> field, String value) {
                                String retour = null;
                                if (field.getRawValue().equals("")) {
                                        field.setValue(null);
                                } else if (projetsCombo.getStore().findModel("cpr_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;
                        }
                });

                liaisonFieldSet.add(projetsCombo, new FormData(600, 0));
                
                
                /*************************************/
                /**                     Champ Structures                **/
                /*************************************/

                ModelType modelTypeStructures = new ModelType();
                modelTypeStructures.setRoot("structures");
                modelTypeStructures.setTotalName("nbElements");
                modelTypeStructures.addField("cs_nom");
                modelTypeStructures.addField("cs_id_structure");
                
                String displayNameStructures = "cs_nom";
                ProxyStructures<ModelData> proxyStructures = new ProxyStructures<ModelData>(sequenceur);
                
                structuresCombo = new ChampComboBoxRechercheTempsReelPaginable(proxyStructures, modelTypeStructures, displayNameStructures);
                structuresCombo.setWidth(250, 600);
                structuresCombo.getCombo().setTabIndex(tabIndex++);
                structuresCombo.getCombo().setFieldLabel(i18nC.lienStructureCollection());
                structuresCombo.getCombo().setForceSelection(true);
                
                structuresCombo.getCombo().setValidator(new Validator() {
                        public String validate(Field<?> field, String value) {
                                String retour = null;
                                if (field.getRawValue().equals("")) {
                                        field.setValue(null);
                                } else if (structuresCombo.getStore().findModel("cs_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;
                        }
                });

                liaisonFieldSet.add(structuresCombo, new FormData(600, 0));
                
                
                /*************************************/
                /**                     Champ Collections               **/
                /*************************************/
                
                ModelType modelTypeCollections = new ModelType();
                modelTypeCollections.setRoot("collections");
                modelTypeCollections.setTotalName("nbElements");
                modelTypeCollections.addField("cc_nom");
                modelTypeCollections.addField("cc_id_collection");
                modelTypeCollections.addField("cc_ce_mere");
                
                String displayNameCollections = "cc_nom";
                ProxyCollections<ModelData> proxyCollections = new ProxyCollections<ModelData>(sequenceur);
                
                collectionsCombo = new ChampComboBoxRechercheTempsReelPaginable(proxyCollections, modelTypeCollections, displayNameCollections);
                collectionsCombo.setWidth(250, 600);
                collectionsCombo.getCombo().setTabIndex(tabIndex++);
                collectionsCombo.getCombo().setFieldLabel(i18nC.lienMereCollection());
                collectionsCombo.getCombo().setForceSelection(true);
                
                collectionsCombo.getCombo().setValidator(new Validator() {
                        public String validate(Field<?> field, String value) {
                                String retour = null;
                                if (field.getRawValue().equals("")) {
                                        field.setValue(null);
                                } else if (collectionsCombo.getStore().findModel("cc_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;
                        }
                });

                liaisonFieldSet.add(collectionsCombo, new FormData(600, 0));
                
                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);
                
                coteChp = new TextField<String>();
                coteChp.setTabIndex(tabIndex++);
                coteChp.setFieldLabel(i18nC.cote());
                administratifFieldSet.add(coteChp, new FormData(450, 0));
                
                idAlternatifsChp = new ChampMultiValeurs(i18nC.idAlternatifCollection());
                administratifFieldSet.add(idAlternatifsChp);
                
                nomsAlternatifsChp = new ChampMultiValeurs(i18nC.intituleAlternatifCollection());
                administratifFieldSet.add(nomsAlternatifsChp);
                                
                codesAlternatifsChp = new ChampMultiValeurs(i18nC.codeAlternatifCollection());
                administratifFieldSet.add(codesAlternatifsChp);
                
                this.add(administratifFieldSet);
        }
        
        private void creerFieldsetDescription() {
                // Fieldset DESCRIPTION
                FieldSet descriptionFieldSet = new FieldSet();
                descriptionFieldSet.setHeading(i18nC.collectionDescriptionTitre());
                descriptionFieldSet.setCollapsible(true);
                descriptionFieldSet.setLayout(Formulaire.creerFormLayout(largeurLabelDefaut, alignementLabelDefaut));

                descriptionChp = new TextArea();
                descriptionChp.setFieldLabel(i18nC.description());
                descriptionFieldSet.add(descriptionChp, new FormData(550, 0));
                
                descriptionSpecialisteChp = new TextArea();
                descriptionSpecialisteChp.setFieldLabel(i18nC.descriptionSpecialiste());
                descriptionFieldSet.add(descriptionSpecialisteChp, new FormData(550, 0));
                
                historiqueChp = new TextArea();
                historiqueChp.setFieldLabel(i18nC.historique());
                descriptionFieldSet.add(historiqueChp, new FormData(550, 0));
                
                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));
                
                periodeConstitutionChp = new ChampCaseACocher(i18nC.periodeConstitution(), "siecleNaturaliste", false);
                couvertureFieldSet.add(periodeConstitutionChp);
                
                groupementPrincipeCombo = new ChampComboBoxListeValeurs(i18nC.groupementPrincipeCollection(), "groupementPrincipe", tabIndex++);
                groupementPrincipeCombo.setToolTip(i18nC.groupementPrincipeCollectionInfo());
                couvertureFieldSet.add(groupementPrincipeCombo);
                
                butRealisationCombo = new ChampComboBoxListeValeurs(i18nC.butCollection(), "realisationBut", tabIndex++);
                couvertureFieldSet.add(butRealisationCombo);
                
                lieuCouvertureChp = new ChampMultiValeurs(i18nC.lieuCouvertureCollection());
                couvertureFieldSet.add(lieuCouvertureChp);
                
                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 peupler() {
                initialiserCollection();
                if (collection != null) {
                        idCollectionChp.setValue(collection.getId());
                        setValeurComboProjets();
                        setValeurComboStructures();
                        setValeurComboCollections();
                        
                        typeDepotCombo.peupler(collection.getTypeDepot());
                        coteChp.setValue(collection.getCote());
                        idAlternatifsChp.peupler(collection.getIdAlternatif());
                        nomsAlternatifsChp.peupler(collection.getNomAlternatif());
                        codesAlternatifsChp.peupler(collection.getCode());
                        
                        descriptionChp.setValue(collection.getDescription());
                        descriptionSpecialisteChp.setValue(collection.getDescriptionSpecialiste());
                        historiqueChp.setValue(collection.getHistorique());
                        urlsChp.peupler(collection.getUrls());
                        
                        periodeConstitutionChp.peupler(collection.getPeriodeConstitution());                    
                        groupementPrincipeCombo.peupler(collection.getGroupementPrincipe());
                        butRealisationCombo.peupler(collection.getGroupementBut());
                        lieuCouvertureChp.peupler(collection.getCouvertureLieu());
                        
                        specimenTypeCombo.peupler(collection.getSpecimenType());
                        nbreTypeChp.setValue((collection.getSpecimenTypeNbre().equals("") ? 0 : Integer.parseInt(collection.getSpecimenTypeNbre())));
                        precisionTypeNbreCombo.peupler(collection.getSpecimenTypeNbrePrecision());
                        classementSpecimenTypeCombo.peupler(collection.getSpecimenTypeClassement());
                }
        }
        
        public ArrayList<String> verifier() {
                ArrayList<String> messages = new ArrayList<String>();
                if (projetsCombo.getCombo().getValue() == null || !projetsCombo.getCombo().isValid()) {
                        messages.add(i18nM.selectionObligatoire(i18nC.articleUn()+" "+i18nC.projetSingulier(), i18nC.articleLa()+" "+i18nC.collectionSingulier()));
                }
                return messages;
        }
        
        public void collecter() {
                initialiserCollection();
                if (etreAccede()) {
                        collectionCollectee.setId(idCollectionChp.getValue());
                        collectionCollectee.setIdProjet(getValeurComboProjets());
                        collectionCollectee.setIdStructure(getValeurComboStructures());
                        collectionCollectee.setCollectionMereId(getValeurComboCollections());
                        
                        collectionCollectee.setTypeDepot(typeDepotCombo.getValeur());
                        collectionCollectee.setCote(coteChp.getValue());
                        collectionCollectee.setIdAlternatif(idAlternatifsChp.getValeurs());
                        collectionCollectee.setNomAlternatif(nomsAlternatifsChp.getValeurs());
                        collectionCollectee.setCode(codesAlternatifsChp.getValeurs());
                        
                        collectionCollectee.setDescription(descriptionChp.getValue());
                        collectionCollectee.setDescriptionSpecialiste(descriptionSpecialisteChp.getValue());
                        collectionCollectee.setHistorique(historiqueChp.getValue());
                        collectionCollectee.setUrls(urlsChp.getValeurs());
                        
                        collectionCollectee.setPeriodeConstitution(periodeConstitutionChp.getValeur());
                        collectionCollectee.setGroupementPrincipe(groupementPrincipeCombo.getValeur());
                        collectionCollectee.setGroupementBut(butRealisationCombo.getValeur());
                        collectionCollectee.setCouvertureLieu(lieuCouvertureChp.getValeurs());
                        
                        collectionCollectee.setSpecimenType(specimenTypeCombo.getValeur());
                        if (nbreTypeChp.getValue() != null) {
                                collectionCollectee.setSpecimenTypeNbre(nbreTypeChp.getValue().toString());
                        }
                        collectionCollectee.setSpecimenTypeNbrePrecision(precisionTypeNbreCombo.getValeur());
                        collectionCollectee.setSpecimenTypeClassement(classementSpecimenTypeCombo.getValeur());
                }
        }
        
        private String getValeurComboProjets() {
                String valeur = "";
                if (projetsCombo.getCombo().getValue() != null) {
                        Projet projet = new Projet(projetsCombo.getValeur());
                        valeur = projet.getId();
                }
                return valeur;
        }
        private void setValeurComboProjets() {
                if (projetsCombo.getStore() != null && collection != null) {
                        projetsCombo.getCombo().setValue(projetsCombo.getStore().findModel("cpr_id_projet", collection.getIdProjet()));
                }
        }
        
        private String getValeurComboStructures() {
                String valeur = "";
                if (structuresCombo.getCombo().getValue() != null) {
                        Structure structure = new Structure(structuresCombo.getValeur());
                        valeur = structure.getId();
                }
                return valeur;
        }
        private void setValeurComboStructures() {
                /*if (structuresCombo.getStore() != null && collection != null) {
                        structuresCombo.getCombo().setValue(structuresCombo.getStore().findModel("cs_id_structure", collection.getIdStructure()));
                }*/
                if (structuresCombo.getCombo().getStore() != null
                                && collection != null
                                && collection.getStructureNom() != null
                                && !UtilString.isEmpty(collection.getStructureNom())) {
                        structuresCombo.chargerValeurInitiale(collection.getStructureNom(), "cs_nom");
                } else {
                        structuresCombo.getCombo().setValue(null);
                }
        }
        
        private String getValeurComboCollections() {
                String valeur = "";
                if (collectionsCombo.getCombo().getValue() != null) {
                        Collection collection = new Collection(collectionsCombo.getValeur());
                        valeur = collection.getId();
                }
                return valeur;
        }
        private void setValeurComboCollections() {              
                if (collectionsCombo.getCombo().getStore() != null
                                && collection != null
                                && collection.getCollectionMereNom() != null
                                && !UtilString.isEmpty(collection.getCollectionMereNom())) {
                        
                        collectionsCombo.chargerValeurInitiale(collection.getCollectionMereNom(), "cc_nom");
                }
        }
        
        public void rafraichir(Object nouvellesDonnees) {
                if (nouvellesDonnees instanceof ValeurListe) {
                        ValeurListe listeValeurs = (ValeurListe) nouvellesDonnees;
                        rafraichirValeurListe(listeValeurs);
                } else {
                        Debug.log(Mediateur.i18nM.erreurRafraichir(nouvellesDonnees.getClass(), this.getClass()));
                }
        }
        
        private void rafraichirValeurListe(ValeurListe listeValeurs) {
                if (listeValeurs.getId().equals(config.getListeId("typeDepot"))) {
                        Formulaire.rafraichirComboBox(listeValeurs, typeDepotCombo);
                } else {
                        Debug.log("Gestion de la liste "+listeValeurs.getId()+" non implémenté!");
                }
        }
        
        

}