Subversion Repositories eFlore/Applications.cel

Rev

Rev 94 | Blame | Last modification | View Log | RSS feed

package org.tela_botanica.client.vues;



import java.util.Iterator;

import org.tela_botanica.client.interfaces.Rafraichissable;
import org.tela_botanica.client.modeles.ListeReferentielCommune;
import org.tela_botanica.client.modeles.ListeReferentielNom;
import org.tela_botanica.client.modeles.Observation;
import org.tela_botanica.client.modeles.ReferentielCommune;
import org.tela_botanica.client.modeles.ReferentielNom;
import org.tela_botanica.client.observation.ObservationMediateur;


import com.google.gwt.user.client.Window;
import com.gwtext.client.core.EventCallback;
import com.gwtext.client.core.EventObject;
import com.gwtext.client.core.ListenerConfig;
import com.gwtext.client.core.Position;
import com.gwtext.client.core.Template;
import com.gwtext.client.data.ArrayReader;
import com.gwtext.client.data.FieldDef;
import com.gwtext.client.data.MemoryProxy;
import com.gwtext.client.data.RecordDef;
import com.gwtext.client.data.SimpleStore;
import com.gwtext.client.data.Store;
import com.gwtext.client.data.StringFieldDef;
import com.gwtext.client.widgets.Button;
import com.gwtext.client.widgets.Panel;
import com.gwtext.client.widgets.Toolbar;
import com.gwtext.client.widgets.event.ButtonListenerAdapter;
import com.gwtext.client.widgets.form.ComboBox;
import com.gwtext.client.widgets.form.DateField;
import com.gwtext.client.widgets.form.FormPanel;
import com.gwtext.client.widgets.form.Hidden;
import com.gwtext.client.widgets.form.TextField;
import com.gwtext.client.widgets.form.event.ComboBoxListenerAdapter;
import com.gwtext.client.widgets.layout.ColumnLayout;
import com.gwtext.client.widgets.layout.ColumnLayoutData;
import com.gwtext.client.widgets.layout.FormLayout;
import com.gwtext.client.data.Record;

/**
 * Panneau contenant les infos, les métadonnées et l'arbre des mots clés, il implémente l'interface rafraichissable
 * @author aurelien
 *
 */
public class FormulaireSaisieObservationVue extends Panel implements Rafraichissable  {


        /**
         * Le médiateur associé à la vue
         */
        private ObservationMediateur    observationMediateur            = null;
        
        

        private DateField date = null;
        private TextField lieudit = null;
        private TextField station = null;
        private TextField milieu = null;
        private TextField comment = null;
        private ComboBox  commune = null;
        private String departement = null;
        private ComboBox  espece = null;
        private String numeroNom = null;
        private String numeroOrdre = null;


        private Button boutonOK = new Button("Créer");
        private Button boutonAnnuler = new Button("Réinitialiser");

        private boolean selectionCommune=false;
        private boolean selectionEspece=false;
        
        private boolean modification = false ;
        private Toolbar bt = null ;
        
        private final int KEY_ALT = 18;
        private final int KEY_BACKSPACE = 8;
        private final int KEY_CTRL = 17;
        private final int KEY_DELETE = 46;
        private final int KEY_DOWN = 40;
        private final int KEY_END = 35;
        private final int KEY_ENTER = 13;
        private final int KEY_ESCAPE = 27;
        private final int KEY_HOME = 36;
        private final int KEY_LEFT = 37;
        private final int KEY_PAGEDOWN = 34;
        private final int KEY_PAGEUP = 33;
        private final int KEY_RIGHT = 39;
        private final int KEY_SHIFT = 16;
        private final int KEY_TAB = 9;
        private final int KEY_UP = 38;
        
        /**
         * Combobox permettant de selectionner le mode
         * modification ou bien création
         */
        private ComboBox selecteurMode = new ComboBox();
        
        Store storeMode = null ;

        /**
         * Booleen d'instanciation
         */
        boolean estInstancie = false ;
        
        /**
         * Constructeur sans argument (privé car ne doit pas être utilisé)
         */
        @SuppressWarnings("unused")
        private FormulaireSaisieObservationVue()
        {
                super() ;
        }
        
        /**
         * Constructeur avec argument
         * @param im
         */
        public FormulaireSaisieObservationVue(ObservationMediateur obs)
        {

                
                // on associe le médiateur
                observationMediateur = obs ;
                
                
                setHeader(true);
                
                FormPanel panneauFormulaire = new FormPanel(Position.RIGHT);
                panneauFormulaire.setBorder(false);
                
                // Panneau intermediaire qui contient deux colonnes de formulaire
                
                Panel panneauIntermediaire = new Panel();  
                panneauIntermediaire.setLayout(new ColumnLayout());  
                panneauIntermediaire.setBorder(false);
                   
                //create first panel and add fields to it  
                Panel panneauPremierColonne = new Panel();  
                panneauPremierColonne.setLayout(new FormLayout());  
                panneauPremierColonne.setBorder(false);

                //create second panel and add fields to it  
            Panel panneauSecondeColonne = new Panel();  
                panneauSecondeColonne.setLayout(new FormLayout());  
                panneauSecondeColonne.setBorder(false);
                
                this.setPaddings(5) ;
        


                commune=new ComboBox("Commune","commune",275 );  
                
                
                final String resultTplCommune = "<div class=\"search-item-commune\">{commune}</div>";  

                
                commune.setTpl(resultTplCommune);
                commune.setMode(ComboBox.REMOTE);
                // commune.setPageSize(10); // Ne fonctionne pas 
                commune.setItemSelector("div.search-item-commune");
                commune.setTypeAhead(true);  
                commune.setLoadingText("Recherche...");  
                  
                commune.setHideTrigger(true);
                
                
     


            panneauPremierColonne.add(commune);  

                
            
            station = new TextField("Station", "station", 275);  
            station.setAllowBlank(true);  
            panneauPremierColonne.add(station);  
            
            date = new DateField("Date", "date", 100);  
            date.setAllowBlank(true);
            date.setFormat("d/m/Y") ;
            panneauPremierColonne.add(date);  

                
                espece=new ComboBox("Espèce","nom",275 );  
                
                
                final String resultTplEspece = "<div class=\"search-item-espece\">{nom}</div>";  

                
                espece.setTpl(resultTplEspece);
                espece.setMode(ComboBox.REMOTE);
                // commune.setPageSize(10); // Ne fonctionne pas 
                espece.setItemSelector("div.search-item-espece");
                espece.setTypeAhead(true);  
                espece.setLoadingText("Recherche...");  
                  
                espece.setHideTrigger(true);
                


            panneauPremierColonne.add(espece);  
            
            comment = new TextField("Notes", "comment", 275);  
            comment.setAllowBlank(true);  
            panneauPremierColonne.add(comment); 
            
            
            lieudit = new TextField("Lieu-dit", "lieudit", 275);  
            lieudit.setAllowBlank(true);  
            panneauSecondeColonne.add(lieudit);  
               
        
            milieu = new TextField("Milieu", "milieu", 275);  
            milieu.setAllowBlank(true);  
            panneauSecondeColonne.add(milieu);  
           
         
                
                panneauIntermediaire.add(panneauPremierColonne, new ColumnLayoutData(.5));
                panneauIntermediaire.add(panneauSecondeColonne, new ColumnLayoutData(.5));
                
                panneauFormulaire.add(panneauIntermediaire);
                
                Object[][] mode = {{"création",false} , {"modification", true} };
                storeMode = new SimpleStore(new String[] { "nom_mode", "mode" },
                                mode);
                storeMode.load();
                selecteurMode.setStore(storeMode);
                selecteurMode.setDisplayField("nom_mode") ;
                selecteurMode.setLabel("mode ") ;
                selecteurMode.setForceSelection(true) ;
                selecteurMode.setValue("création") ;
                selecteurMode.setEditable(false) ;
                selecteurMode.setCls("x-selec-crea") ;
                
                bt = new Toolbar() ;
                bt.addSpacer() ;
                bt.addText("Mode de saisie ") ;
                bt.addField(selecteurMode) ;
                
                
                
                
                panneauFormulaire.addButton(boutonOK);
                    
                panneauFormulaire.addButton(boutonAnnuler);
                
                selecteurMode.addListener(new ComboBoxListenerAdapter() {

                        public void onSelect(ComboBox comboBox, Record record, int index) {
                                
                                // et on met la valeur à jour dans la combobox
                                comboBox.setValue(record.getAsString("nom_mode"));
                                setModification(record.getAsString("mode")) ;
                        }

                });
        
                this.add(panneauFormulaire) ;
                this.setTopToolbar(bt) ;
                
                
                this.setAutoHeight(true);
        
        
                // on ajoute les listeners
                ajouterListeners() ;
                
                

        }
        
        private void ajouterListeners()
        {       
                // Listener completion communne 
                
                   commune.addListener(new ComboBoxListenerAdapter() {  
                     public void onSelect(ComboBox comboBox, Record record, int index) {  
                         commune.setValue(record.getAsString("commune"));
                         departement=record.getAsString("departement");
                         selectionCommune=true;
                     }  
                 });  
                 
                
                        ListenerConfig listenerConfigCommune=new ListenerConfig();
                        listenerConfigCommune.setDelay(10);
                        listenerConfigCommune.setStopPropagation(false);
                        listenerConfigCommune.setStopEvent(false);
                        

                
                    commune.addKeyPressListener(new EventCallback()     {
                        
                            public void execute(EventObject e) {
                                
                                          
                                          switch(e.getKey()) {
                                                          
                                          
                                          case KEY_ALT:
                                      case KEY_CTRL:
                                      case KEY_DOWN:
                                      case KEY_END:
                                      case KEY_ESCAPE:
                                      case KEY_HOME:
                                      case KEY_LEFT:
                                      case KEY_PAGEDOWN:
                                      case KEY_PAGEUP:
                                      case KEY_RIGHT:
                                      case KEY_SHIFT:
                                      case KEY_TAB:
                                      case KEY_UP:
                                        
                                        break;
                                      
                                      case KEY_ENTER:
                                          
                                         if (selectionCommune) {
                                                 selectionCommune=false;
                                         }
                                         else {
                                                // lancer mise a jour                                    
                                         }
                                        
                                        
                                          break;
                                       
                                      default:
                                          
                                          departement="";
                                          obtenirListeReferentielCommune();
                                                                        
                                        break;
                                    }

                                 
                                
                                }
                         
                                },    listenerConfigCommune
                        
                        );
                    
                        // Listener completion espece 

                        
                        espece.addListener(new ComboBoxListenerAdapter() {  
                     public void onSelect(ComboBox comboBox, Record record, int index) {  
                         espece.setValue(record.getAsString("nom"));
                         numeroNom=record.getAsString("numeroNom");
                         selectionEspece=true;
                     }  
                 });  
                 

                        ListenerConfig listenerConfigEspece=new ListenerConfig();
                        listenerConfigEspece.setDelay(10);
                        listenerConfigEspece.setStopPropagation(false);
                        listenerConfigEspece.setStopEvent(false);                       

                
                        espece.addKeyPressListener(new EventCallback()  {
                        
                            public void execute(EventObject e) {
                                
                                          
                                          switch(e.getKey()) {
                                                          
                                          
                                          case KEY_ALT:
                                      case KEY_CTRL:
                                      case KEY_DOWN:
                                      case KEY_END:
                                      case KEY_ESCAPE:
                                      case KEY_HOME:
                                      case KEY_LEFT:
                                      case KEY_PAGEDOWN:
                                      case KEY_PAGEUP:
                                      case KEY_RIGHT:
                                      case KEY_SHIFT:
                                      case KEY_TAB:
                                      case KEY_UP:
                                        
                                        break;
                                      
                                      case KEY_ENTER:
                                          
                                         if (selectionEspece) {
                                                 selectionEspece=false;
                                         }
                                         else {
                                                // lancer mise a jour                                    
                                         }
                                        
                                        
                                          break;
                                       
                                      default:
                                          
                                          numeroNom="";
                                          obtenirListeReferentielNom();
                                                                        
                                        break;
                                    }

                                 
                                
                                }
                         
                                },    listenerConfigEspece
                        
                        );
                    

                  

                boutonOK.addListener(new ButtonListenerAdapter() {
                        
                        public void onClick(Button button, EventObject e) {
                                
                                if(modification)
                                {
                                        modifierObservation() ;
                                }
                                else
                                {
                                        ajouterObservation();
                                }
                                
                                
                        }
                        
                });
                
                boutonAnnuler.addListener(new ButtonListenerAdapter() {
                        
                        public void onClick(Button button, EventObject e) {
                                
                                if(modification)
                                {
                                        supprimerObservation() ;
                                }
                                else
                                {
                                        viderChampsObservation();
                                }
                                
                                
                        }
                        
                });
        
        
        }
        
        /**
         * Desactive visuellement ce panneau
         */
        public void desactiverPanneau()
        {
                this.setDisabled(true) ;
        }
        
        /**
         * Active visuellement ce panneau
         */
        public void activerPanneau()
        {
                this.setDisabled(false) ;
        }

        public void rafraichir(Object nouvelleDonnees, boolean repandreRaffraichissement) {
                
                // si l'on a reçu une liste du referentiel commune (completion referentiel commune)
                        if(nouvelleDonnees instanceof ListeReferentielCommune)
                        {
                                
                                        ListeReferentielCommune data = (ListeReferentielCommune) nouvelleDonnees ;
                                        Object[][] communeData = new Object[data.size()][2];
                                        int i = 0 ;
                                
                                        // on la parse et on récupère les informations quiç nous interessent
                                        for (Iterator it = data.keySet().iterator(); it.hasNext();) 
                                        {
                                                
                                                ReferentielCommune ref=(ReferentielCommune) data.get(it.next());
                                                
                                                communeData[i][0]= ref.getCommune();
                                                communeData[i][1]= ref.getDepartement();
                                                
                                                                                                                                        
                                                i++ ;
                                        }
                                        
                                           //     creation du store
                                        FieldDef defCommune = new StringFieldDef("commune");
                                        FieldDef defDepartement = new StringFieldDef("departement");
                                        
                                        
                                        FieldDef[] defTab = { defCommune, defDepartement};
                                        
                                        RecordDef rd = new RecordDef(defTab);
                                        
                                        final MemoryProxy dataProxy = new MemoryProxy(communeData);
                                        final ArrayReader reader = new ArrayReader(rd);         
                                        
                                        Store store=new Store(dataProxy,reader);
                                        store.load() ;
                
                                        commune.setStore(store);                                        
                                                        
                        }
                        
                        //                       si l'on a reçu une liste du référentiel nom (complétion referentiel nom)
                        
                        if(nouvelleDonnees instanceof ListeReferentielNom)
                        {
                                
                                        ListeReferentielNom data = (ListeReferentielNom) nouvelleDonnees ;
                                        Object[][] nomData = new Object[data.size()][2];
                                        int i = 0 ;
                                
                                        // on la parse et on récupère les informations quiç nous interessent
                                        for (Iterator it = data.keySet().iterator(); it.hasNext();) 
                                        {
                                                
                                                ReferentielNom ref=(ReferentielNom) data.get(it.next());
                                                
                                                nomData[i][0]= ref.getNom();
                                                nomData[i][1]= ref.getNumeroNom();
                                                
                                                                                                                                        
                                                i++ ;
                                        }
                                        
                                           //     creation du store
                                        FieldDef defNom = new StringFieldDef("nom");
                                        FieldDef defNumeroNom = new StringFieldDef("numeroNom");
                                        
                                        
                                        FieldDef[] defTab = { defNom, defNumeroNom};
                                        
                                        RecordDef rd = new RecordDef(defTab);
                                        
                                        final MemoryProxy dataProxy = new MemoryProxy(nomData);
                                        final ArrayReader reader = new ArrayReader(rd);         
                                        
                                        Store store=new Store(dataProxy,reader);
                                        store.load() ;
                
                                        espece.setStore(store);
                                
                                        
                                                        
                        }
                        
                        // On recoit une observation dont on veut afficher le detail 
                        
                        if(nouvelleDonnees instanceof Observation)
                        {
                                Observation obs = (Observation)nouvelleDonnees ;
                                afficherDetailsObservation(obs) ;
                        }
                        
                        // Sur Mise à jour ou suppression d'une suppression ?
                        
                        if(nouvelleDonnees instanceof String)
                        {
                                String str = (String)nouvelleDonnees ;
                                observationMediateur.obtenirListeObservation() ;
                        }

        }
        

        public void obtenirListeReferentielCommune() {
                
         String com=commune.getText().replaceAll(" ","/");
         com=com.replaceAll("%","");
                  
         observationMediateur.obtenirListeReferentielCommune(this,com);
         
        }
        

        public void obtenirListeReferentielNom() {
         
          String esp=espece.getText().replaceAll(" ","/");
          esp=esp.replaceAll("%","");
                
          observationMediateur.obtenirListeReferentielNom(this,esp);
         
        }
   

        public void ajouterObservation() {

                Observation obs=new Observation(espece.getText(),numeroNom,commune.getText(),departement,lieudit.getText(),station.getText(),milieu.getText(), comment.getText(),date.getRawValue());   
                observationMediateur.ajouterObservation(obs);
        }
        
        private void modifierObservation() {
                
                Observation obs=new Observation(espece.getText(),numeroNom,commune.getText(),departement,lieudit.getText(),station.getText(),milieu.getText(), comment.getText(),date.getText());
                obs.setNumeroOrdre(numeroOrdre);
                observationMediateur.modifierObservation(obs);
                
        }
        
        private void supprimerObservation() {
                
                        observationMediateur.supprimerObservation(this, numeroOrdre);
        }

        
        public void afficherDetailsObservation(Observation obs)
        {
                viderChampsObservation() ;
                
                if(!obs.getDate().equals("null") && !obs.getDate().equals("000null")) {
                        String[] dateEtHeure = obs.getDate().split(" ", 2);
                        date.setValue(dateEtHeure[0]) ;
                }
                if(!obs.getLieudit().equals("null") && !obs.getLieudit().equals("000null")) {
                        lieudit.setValue(obs.getLieudit()) ;
                }
                if(!obs.getStation().equals("null") && !obs.getStation().equals("000null")) {
                        station.setValue(obs.getStation()) ;
                }
                if(!obs.getMilieu().equals("null") && !obs.getMilieu().equals("000null")) {
                        milieu.setValue(obs.getMilieu()) ;
                }
                if(!obs.getCommentaire().equals("null") && !obs.getCommentaire().equals("000null")) {
                        comment.setValue(obs.getCommentaire()) ;
                }
                if(!obs.getLocalite().equals("null") && !obs.getLocalite().equals("000null")) {
                        commune.setValue(obs.getLocalite()) ;
                }
                if(!obs.getIdentifiantLocalite().equals("null") && !obs.getIdentifiantLocalite().equals("000null")) {
                        departement = obs.getIdentifiantLocalite();
                }
                if(!obs.getNomSaisi().equals("null") && !obs.getNomSaisi().equals("000null")) {
                        espece.setValue(obs.getNomSaisi()) ;
                }
                if(!obs.getNumeroNomenclaturalSaisi().equals("null") && !obs.getNumeroNomenclaturalSaisi().equals("000null")) {
                        numeroNom = obs.getNumeroNomenclaturalSaisi() ;
                }
                if(!obs.getNumeroOrdre().equals("null") && !obs.getNumeroOrdre().equals("000nu2ll")) {
                        numeroOrdre = obs.getNumeroOrdre() ;
                }
                
        }
        
        public void viderChampsObservation()
        {

                date.reset() ;
                lieudit.reset() ;
                station.reset() ;
                milieu.reset();
                comment.reset();
                commune.reset();
                departement = "";
                espece.reset();
                numeroNom = "" ;
                numeroOrdre = "";
                
        }
        
        private void setModification(String mode)
        {
                if(mode.equals("true")) {

                        boutonOK.setText("Modifier") ;
                        setTitle("Modification") ;
                        boutonAnnuler.setText("Supprimer") ;
                        modification = true ;
                        selecteurMode.removeClass("x-selec-crea") ;
                        selecteurMode.setCls("x-selec-modif") ;
                        
                }
                else
                {

                        boutonOK.setText("Créer") ;
                        setTitle("Saisir") ;
                        boutonAnnuler.setText("Réinitialiser") ;
                        modification = false ;
                        selecteurMode.removeClass("x-selec-modif") ;
                        selecteurMode.setCls("x-selec-crea") ;
                        
                }
                
        }
        
        
        /**
         * renvoie vrai si on est en mode modification, faux si on est en mode création
         * @return
         */
        public boolean getModification()
        {
                return modification ;
        }
        

}