Subversion Repositories eFlore/Applications.coel

Rev

Rev 1784 | Blame | Compare with Previous | Last modification | View Log | RSS feed

package org.tela_botanica.client.vues.structure;

import java.util.ArrayList;
import java.util.List;

import org.tela_botanica.client.Mediateur;
import org.tela_botanica.client.interfaces.Rafraichissable;
import org.tela_botanica.client.modeles.Information;
import org.tela_botanica.client.modeles.Valeur;
import org.tela_botanica.client.modeles.ValeurListe;
import org.tela_botanica.client.modeles.structure.StructureValorisation;
import org.tela_botanica.client.synchronisation.Sequenceur;
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.ComponentEvent;
import com.extjs.gxt.ui.client.event.Events;
import com.extjs.gxt.ui.client.event.Listener;
import com.extjs.gxt.ui.client.widget.Component;
import com.extjs.gxt.ui.client.widget.ContentPanel;
import com.extjs.gxt.ui.client.widget.LayoutContainer;
import com.extjs.gxt.ui.client.widget.form.CheckBox;
import com.extjs.gxt.ui.client.widget.form.CheckBoxGroup;
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.TextArea;
import com.extjs.gxt.ui.client.widget.form.TextField;
import com.extjs.gxt.ui.client.widget.form.FormPanel.LabelAlign;
import com.extjs.gxt.ui.client.widget.layout.FormData;

public class StructureFormValorisation extends FormulaireOnglet implements Rafraichissable {

        private StructureValorisation valorisation = null;
        
        private LayoutContainer autreCollectionTrukCp = null;
        private TextField<String> typeRechercheAutreChp = null;
        private CheckBoxGroup autreCollectionTrukCacGrpChp = null;
        private LayoutContainer provenanceRechercheTrukCp = null;
        private CheckBoxGroup provenanceRechercheTrukCacGrpChp = null;
        private CheckBoxGroup typeRechercheTrukCacGrpChp = null;
        private LayoutContainer typeRechercheTrukCp = null;
        private TextField<String> futureActionChp = null;
        private TextField<String> sansMotifAccesChp = null;
        private TextField<String> avecMotifAccesChp = null;
        private TextField<String> autreCollectionAutreChp = null;
        private TextField<String> actionAutreChp = null;
        private TextField<String> provenanceRechercheAutreChp = null;
        
        private RadioGroup actionMarkRGrpChp = null;
        private LayoutContainer actionTrukCp = null;
        private CheckBoxGroup actionTrukCacGrpChp = null;
        private RadioGroup futureActionMarkRGrpChp = null;
        private RadioGroup rechercheMarkRGrpChp = null;
        private RadioGroup sansMotifAccesMarkRGrpChp = null;
        private RadioGroup avecMotifAccesMarkRGrpChp = null;
        private TextField<String> publicationChp = null;
        
        private String ID = "valorisation";
        private Mediateur mediateur = null;
        private Formulaire formulaireCourant = null;
        private Sequenceur sequenceur = null;
        
        public StructureFormValorisation(Mediateur mediateur, Formulaire formulaireCourant, Sequenceur sequenceur) {            
                this.mediateur = mediateur;
                this.formulaireCourant = formulaireCourant;
                this.sequenceur = sequenceur;
                
                initialiserOnglet(formulaireCourant);
                
                setId(ID);
                setText(Mediateur.i18nC.structureInfoValorisation());
                FormulaireOnglet.parametrer(this);
                
                this.setLayout(Formulaire.creerFormLayout(650, LabelAlign.TOP));
                Listener<ComponentEvent> ecouteurSelection = new Listener<ComponentEvent>() {  
                        public void handleEvent(ComponentEvent be) {  
                                peupler();
                                layout();
                        }  
                };
                this.addListener(Events.Select, ecouteurSelection);
                
                actionMarkRGrpChp = formulaireCourant.creerChoixUniqueRadioGroupe("action_mark", "ouiNon");
                actionMarkRGrpChp.setFieldLabel("Avez-vous réalisé des actions de valorisation de vos collections botaniques ou avez-vous été sollicités pour la valorisation de ces collections ?");
                this.add(actionMarkRGrpChp);
                
                
                actionTrukCp = Formulaire.creerChoixMultipleCp();
                actionTrukCp.hide();
                actionTrukCacGrpChp = new CheckBoxGroup();
                actionTrukCacGrpChp.setFieldLabel("Si oui, lesquelles ?");
                this.add(actionTrukCp);
                mediateur.obtenirListeValeurEtRafraichir(this, "actionValorisation", sequenceur);
                mediateur.obtenirListeValeurEtRafraichir(this, "statut", sequenceur);
                
                publicationChp = new TextArea();
                publicationChp.setFieldLabel("Quelques titres des ouvrages, articles scientifiques, ...");
                this.add(publicationChp, new FormData(550, 0));
                
                autreCollectionTrukCp = Formulaire.creerChoixMultipleCp();
                autreCollectionTrukCacGrpChp = new CheckBoxGroup();
                autreCollectionTrukCacGrpChp.setFieldLabel("L'organisme dispose-t-il d'autres collections (permettant une valorisation pluridisciplinaire) ?");
                this.add(autreCollectionTrukCp);
                mediateur.obtenirListeValeurEtRafraichir(this, "autreCollection", sequenceur);
                
                futureActionMarkRGrpChp = formulaireCourant.creerChoixUniqueRadioGroupe("future_action_mark", "ouiNon");
                futureActionMarkRGrpChp.setFieldLabel("Envisagez vous des actions de valorisation dans le cadre de votre politique culturelle ?");
                this.add(futureActionMarkRGrpChp);
                
                futureActionChp = new TextArea();
                futureActionChp.setFieldLabel("Si oui, lesquelles ?");
                futureActionChp.hide();
                futureActionChp.addListener(Events.Hide, new Listener<BaseEvent>() {

                        public void handleEvent(BaseEvent be) {
                                ((TextArea) be.getSource()).setValue("");
                        }
                        
                });
                this.add(futureActionChp, new FormData(550, 0));
                
                rechercheMarkRGrpChp = formulaireCourant.creerChoixUniqueRadioGroupe("recherche_mark", "ouiNon");
                rechercheMarkRGrpChp.setFieldLabel("Vos collections botaniques sont-elles utilisées pour des recherches scientifiques ?");
                this.add(rechercheMarkRGrpChp);
                
                provenanceRechercheTrukCp = Formulaire.creerChoixMultipleCp();
                provenanceRechercheTrukCp.hide();
                provenanceRechercheTrukCacGrpChp = new CheckBoxGroup();
                provenanceRechercheTrukCacGrpChp.setFieldLabel("Si oui, par des chercheurs (professionnels ou amateurs) de quelle provenance ?");
                this.add(provenanceRechercheTrukCp);
                mediateur.obtenirListeValeurEtRafraichir(this, "continentEtFr", sequenceur);
                
                typeRechercheTrukCp = Formulaire.creerChoixMultipleCp();
                typeRechercheTrukCp.hide();
                typeRechercheTrukCacGrpChp = new CheckBoxGroup();
                typeRechercheTrukCacGrpChp.setFieldLabel("Et pour quelles recherches ?");
                this.add(typeRechercheTrukCp);
                mediateur.obtenirListeValeurEtRafraichir(this, "typeRecherche", sequenceur);
                
                sansMotifAccesMarkRGrpChp = formulaireCourant.creerChoixUniqueRadioGroupe("sans_motif_acces_mark", "ouiNon");
                sansMotifAccesMarkRGrpChp.setFieldLabel("Peut-on consulter vos collections botaniques sans motif de recherches scientifiques ?");
                this.add(sansMotifAccesMarkRGrpChp);
                
                this.add(sansMotifAccesChp = new TextArea(), new FormData(550, 0));
                sansMotifAccesChp.hide();
                sansMotifAccesChp.addListener(Events.Hide, new Listener<BaseEvent>() {

                        public void handleEvent(BaseEvent be) {
                                ((TextArea) be.getSource()).setValue("");
                        }
                        
                });
                sansMotifAccesChp.setFieldLabel("Si oui, quelles démarches doit-on faire pour les consulter ?");
                
                avecMotifAccesMarkRGrpChp = formulaireCourant.creerChoixUniqueRadioGroupe("avec_motif_acces_mark", "ouiNon");
                avecMotifAccesMarkRGrpChp.setFieldLabel("Peut-on visiter vos collections botaniques avec des objectifs de recherches scientifiques ?");
                this.add(avecMotifAccesMarkRGrpChp);
                
                this.add(avecMotifAccesChp = new TextArea(), new FormData(550, 0));
                avecMotifAccesChp.hide();
                avecMotifAccesChp.addListener(Events.Hide, new Listener<BaseEvent>() {

                        public void handleEvent(BaseEvent be) {
                                ((TextArea) be.getSource()).setValue("");
                        }
                        
                });
                avecMotifAccesChp.setFieldLabel("Si oui, quelles démarches doit-on faire pour les visiter ?");
                
        }
        
    public void peupler() {
                if(valorisation == null) {
                    initialiserValorisation();
                }
                if (formulaireCourant.mode.equals(Formulaire.MODE_AJOUTER)) {
                    // Indique que l'onglet a pu être modifié pour la méthode collecter...
                    setData("acces", true);
                    // Initialisation de l'objet Structure
                    valorisation = new StructureValorisation();
                }
                if (formulaireCourant.mode.equals(Formulaire.MODE_MODIFIER) && valorisation != null) {
                    // ACTION : 
                    //TODO : check below:
                    if(valorisation.getAction() != null) {
                        ((Radio) actionMarkRGrpChp.get(valorisation.getAction() ^ 1)).setValue(true);
                    }
                                
                    // ACTION INFO
                    peuplerCasesACocher(valorisation.getActionInfo(), actionTrukCacGrpChp, actionAutreChp);
                                
                    // PUBLICATION
                    publicationChp.setValue(valorisation.getPublication());
                                
                    // COLLECTION AUTRE
                    peuplerCasesACocher(valorisation.getCollectionAutre(), autreCollectionTrukCacGrpChp, autreCollectionAutreChp);
                                
                    // ACTION FUTURE
                    if(valorisation.getActionFuture() != null) {
                        ((Radio) futureActionMarkRGrpChp.get(valorisation.getActionFuture() ^ 1)).setValue(true);
                    }
                                
                    // ACTION FUTURE INFO
                    futureActionChp.setValue(valorisation.getActionFutureInfo());
                                
                    // RECHERCHE
                    if(valorisation.getRecherche() != null) {
                        ((Radio) rechercheMarkRGrpChp.get(valorisation.getRecherche() ^ 1)).setValue(true);
                    }
                    // RECHERCHE PROVENANCE
                    peuplerCasesACocher(valorisation.getRechercheProvenance(), provenanceRechercheTrukCacGrpChp, provenanceRechercheAutreChp);
                    // RECHERCHE TYPE
                    peuplerCasesACocher(valorisation.getRechercheType(), typeRechercheTrukCacGrpChp, typeRechercheAutreChp);
        
                    // ACCÈS SANS MOTIF
                    if(valorisation.getAccesSansMotif() != null) {
                        ((Radio) sansMotifAccesMarkRGrpChp.get(valorisation.getAccesSansMotif() ^ 1)).setValue(true);
                    }
                    // ACCÈS SANS MOTIF INFO
                    sansMotifAccesChp.setValue(valorisation.getAccesSansMotifInfo());
                                
                    // VISITE AVEC MOTIF
                    if(valorisation.getVisiteAvecMotif() != null) {
                        ((Radio) avecMotifAccesMarkRGrpChp.get(valorisation.getVisiteAvecMotif() ^ 1)).setValue(true);
                    }
                    // VISITE AVEC MOTIF INFO
                    avecMotifAccesChp.setValue(valorisation.getVisiteAvecMotifInfo());
                                
                    // Indique que l'onglet a été rempli et a pu être modifié pour la méthode collecter... 
                    this.setData("acces", true);
                }
    }
        
        private String creerChaineDenormalisee(List<CheckBox> liste) {
                return ((StructureForm)formulaireCourant).creerChaineDenormalisee(liste);
        }
        
        private void peuplerCasesACocher(String donnees, CheckBoxGroup groupeCac, TextField<String> champAutre) {
                ((StructureForm)formulaireCourant).peuplerCasesACocher(donnees, groupeCac, champAutre);
        }
        
        private void initialiserValorisation() {
                valorisation = ((StructureForm)formulaireCourant).valorisation;
        }

        public StructureValorisation collecter() {
                
                if(valorisation == null) {
                        initialiserValorisation();
                }
                
                StructureValorisation valorisationARetourner = null;
                if (getData("acces").equals(true)) {
                        // Création de l'objet
                        StructureValorisation valorisationCollectee = (StructureValorisation) valorisation.cloner(new StructureValorisation());
                        
                        // ACTION
                        if (actionMarkRGrpChp.getValue() != null) {
                                valorisationCollectee.setAction(actionMarkRGrpChp.getValue().getValueAttribute());
                        }
                        
                        // ACTION INFO
                        valorisationCollectee.setActionInfo(creerChaineDenormalisee(actionTrukCacGrpChp.getValues()));
                        valorisationCollectee.setActionInfo("AUTRE", actionAutreChp.getValue());
                        
                        // PUBLICATION
                        valorisationCollectee.setPublication(publicationChp.getValue());
                        
                        // COLLECTION AUTRE
                        valorisationCollectee.setCollectionAutre(creerChaineDenormalisee(autreCollectionTrukCacGrpChp.getValues()));
                        valorisationCollectee.setCollectionAutre("AUTRE", autreCollectionAutreChp.getValue());
                        
                        // ACTION FUTURE
                        if (futureActionMarkRGrpChp.getValue() != null) {
                                valorisationCollectee.setActionFuture(futureActionMarkRGrpChp.getValue().getValueAttribute());
                        }
                        // ACTION FUTURE INFO
                        valorisationCollectee.setActionFutureInfo(futureActionChp.getValue());
                        
                        // RECHERCHE
                        if (rechercheMarkRGrpChp.getValue() != null) {
                                valorisationCollectee.setRecherche(rechercheMarkRGrpChp.getValue().getValueAttribute());

                                // RECHERCHE PROVENANCE
                                valorisationCollectee.setRechercheProvenance(creerChaineDenormalisee(provenanceRechercheTrukCacGrpChp.getValues()));
                                valorisationCollectee.setRechercheProvenance("AUTRE", provenanceRechercheAutreChp.getValue());
                                
                                // RECHERCHE TYPE
                                valorisationCollectee.setRechercheType(creerChaineDenormalisee(typeRechercheTrukCacGrpChp.getValues()));
                                valorisationCollectee.setRechercheType("AUTRE", typeRechercheAutreChp.getValue());
                        }
                        
                        // ACCÈS SANS MOTIF
                        if (sansMotifAccesMarkRGrpChp.getValue() != null) {
                                valorisationCollectee.setAccesSansMotif(sansMotifAccesMarkRGrpChp.getValue().getValueAttribute());
                        }
                        // ACCÈS SANS MOTIF INFO
                        valorisationCollectee.setAccesSansMotifInfo(sansMotifAccesChp.getValue());
                        
                        // VISITE AVEC MOTIF
                        if (avecMotifAccesMarkRGrpChp.getValue() != null) {
                                valorisationCollectee.setVisiteAvecMotif(avecMotifAccesMarkRGrpChp.getValue().getValueAttribute());
                        }
                        // VISITE AVEC MOTIF INFO
                        valorisationCollectee.setVisiteAvecMotifInfo(avecMotifAccesChp.getValue());
                        
                        // Retour de l'objet
                        if (!valorisationCollectee.comparer(valorisation)) {
                                valorisationARetourner = valorisation = valorisationCollectee;
                        }
                }
                return valorisationARetourner;
        }

        @Override
        public void rafraichir(Object nouvellesDonnees) {
                if (nouvellesDonnees instanceof ValeurListe) {
                        ValeurListe listeValeurs = (ValeurListe) nouvellesDonnees;
                        rafraichirValeurListe(listeValeurs);
                } else if (nouvellesDonnees instanceof Information) {
                        Information info = (Information) nouvellesDonnees;
                        rafraichirInformation(info);
                }
        }
        
        public void rafraichirInformation(Information info) {
                if (info.getDonnee(2) != null) {
                        valorisation = (StructureValorisation) info.getDonnee(2);
                        if (valorisation != null) {
                                peupler();
                        }
                }
        }
        
        private void rafraichirValeurListe(ValeurListe listeValeurs) {
                List<Valeur> liste = listeValeurs.toList();
                if (listeValeurs.getId().equals(config.getListeId("autreCollection"))) {
                        if (autreCollectionTrukCp != null && autreCollectionTrukCp.getItemByItemId("autreCollectionTrukCacGrpChp") == null) {
                                autreCollectionTrukCacGrpChp.setId("autreCollectionTrukCacGrpChp");
                                autreCollectionAutreChp = new TextField<String>();
                                Formulaire.creerChoixMultipleCac(autreCollectionTrukCp, autreCollectionTrukCacGrpChp, listeValeurs, autreCollectionAutreChp);
                        }
                }
                if (listeValeurs.getId().equals(config.getListeId("actionValorisation"))) {
                        actionAutreChp = new TextField<String>();
                        Formulaire.creerChoixMultipleCac(actionTrukCp, actionTrukCacGrpChp, listeValeurs, actionAutreChp);
                }
                if (listeValeurs.getId().equals(config.getListeId("continentEtFr"))) {
                        provenanceRechercheAutreChp = new TextField<String>();
                        Formulaire.creerChoixMultipleCac(provenanceRechercheTrukCp, provenanceRechercheTrukCacGrpChp, listeValeurs, provenanceRechercheAutreChp);
                }
                if (listeValeurs.getId().equals(config.getListeId("typeRecherche"))) {
                        typeRechercheAutreChp = new TextField<String>();
                        Formulaire.creerChoixMultipleCac(typeRechercheTrukCp, typeRechercheTrukCacGrpChp, listeValeurs, typeRechercheAutreChp);
                }
        }

        public void afficherChampSupplementaire(Radio radioBtn) {
                //GWT.log("Nom btn : "+radioBtn.getName()+" - Nom group : "+radioBtn.getGroup().getName(), null);
                // Valeur du bouton radio déclenchant l'affichage des composants cachés
                String valeurPourAfficher = "oui";
                
                // Construction de la liste des composants à afficher/cacher
                String radioGroupeNom = radioBtn.getGroup().getName();
                ArrayList<Object> composants = new ArrayList<Object>();         
                if (radioGroupeNom.equals("action_mark_grp")) {
                        composants.add(actionTrukCp);
                } else if (radioGroupeNom.equals("future_action_mark_grp")) {
                        composants.add(futureActionChp);
                } else if (radioGroupeNom.equals("sans_motif_acces_mark_grp")) {
                        composants.add(sansMotifAccesChp);
                } else if (radioGroupeNom.equals("avec_motif_acces_mark_grp")) {
                        composants.add(avecMotifAccesChp);
                } else if (radioGroupeNom.equals("recherche_mark_grp")) {
                        composants.add(provenanceRechercheTrukCp);
                        composants.add(typeRechercheTrukCp);
                }
                
                // Nous affichons/cachons les composant de la liste
                final int nbreComposants = composants.size();
                //GWT.log("Id : "+radioBtn.getId()+" - Class : "+radioBtn.getClass().toString()+"- Taille : "+tailleMax, null);
                //Window.alert("Radio grp nom : "+radioGroupeNom+" - Id btn : "+radioBtn.getId()+" - Class : "+radioBtn.getClass().toString()+"- Taille : "+tailleMax);
                for (int i = 0; i < nbreComposants; i++) {
                        // En fonction du type de bouton cliquer, on affiche ou cache les champs
                        String type = radioBtn.getBoxLabel().toLowerCase();
                        //GWT.log(type, null);
                        if (radioBtn.getValue() == true) {
                                if (type.equals(valeurPourAfficher)) {
                                        ((Component) composants.get(i)).show();
                                } else {
                                        ((Component) composants.get(i)).hide();
                                }
                        }
                        // Si on a à faire à un ContentPanel, on l'actualise pour déclencher l'affichage
                        if (composants.get(i) instanceof ContentPanel) {
                                ((ContentPanel) composants.get(i)).layout();
                        }
                }               
        }
}