Subversion Repositories eFlore/Applications.coel

Rev

Rev 1083 | Rev 1172 | 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.ChampMultiValeurs;
import org.tela_botanica.client.composants.ConteneurMultiChamps;
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.util.Debug;
import org.tela_botanica.client.vues.Formulaire;
import org.tela_botanica.client.vues.FormulaireOnglet;

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 ComboBox<Projet> projetsCombo = null;
        private ComboBox<Structure> structuresCombo = null;
        private ComboBox<Collection> 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;
        
        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));
                
                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>());
                projetsCombo.addStyleName(ComposantClass.OBLIGATOIRE);
                projetsCombo.addListener(Events.Valid, Formulaire.creerEcouteurChampObligatoire());
                liaisonFieldSet.add(projetsCombo, new FormData(450, 0));
                mediateur.selectionnerProjet(this, null);
                
                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";
                                }
                                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);
                
                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.getValue() == null || !projetsCombo.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.getValue() != null) {
                        valeur = projetsCombo.getValue().getId();
                }
                return valeur;
        }
        private void setValeurComboProjets() {
                if (projetsCombo.getStore() != null && collection != null) {
                        projetsCombo.setValue(projetsCombo.getStore().findModel("id_projet", collection.getIdProjet()));
                }
        }
        
        private String getValeurComboStructures() {
                String valeur = "";
                if (structuresCombo.getValue() != null) {
                        valeur = structuresCombo.getValue().getId();
                }
                return valeur;
        }
        private void setValeurComboStructures() {
                if (structuresCombo.getStore() != null && collection != null) {
                        structuresCombo.setValue(structuresCombo.getStore().findModel("id_structure", collection.getIdStructure()));
                }
        }
        
        private String getValeurComboCollections() {
                String valeur = "";
                if (collectionsCombo.getValue() != null) {
                        valeur = collectionsCombo.getValue().getId();
                }
                return valeur;
        }
        private void setValeurComboCollections() {
                if (collectionsCombo.getStore() != null && collection != null) {
                        collectionsCombo.setValue(collectionsCombo.getStore().findModel("id_collection", collection.getCollectionMereId()));
                }
        }
        
        public void rafraichir(Object nouvellesDonnees) {
                if (nouvellesDonnees instanceof ProjetListe) {
                        ProjetListe projets = (ProjetListe) nouvellesDonnees;
                        Formulaire.rafraichirComboBox(projets, projetsCombo);
                        setValeurComboProjets();
                } else if (nouvellesDonnees instanceof StructureListe) {
                        StructureListe structures = (StructureListe) nouvellesDonnees;
                        Formulaire.rafraichirComboBox(structures, structuresCombo);
                        setValeurComboStructures();
                } else if (nouvellesDonnees instanceof CollectionListe) {
                        CollectionListe collections = (CollectionListe) nouvellesDonnees;
                        Formulaire.rafraichirComboBox(collections, collectionsCombo);
                        setValeurComboCollections();
                } else 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é!");
                }
        }
        
        

}