Subversion Repositories eFlore/Applications.cel

Rev

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

package org.tela_botanica.client;

import org.tela_botanica.client.image.ImageMediateur;
import org.tela_botanica.client.interfaces.Rafraichissable;
import org.tela_botanica.client.modeles.Utilisateur;

import org.tela_botanica.client.observation.ObservationMediateur;
import org.tela_botanica.client.vues.EtatConnexionVue;
import org.tela_botanica.client.vues.FormulaireDeConnexionVue;

import com.google.gwt.user.client.Window;
import com.gwtext.client.widgets.BoxComponent;
import com.gwtext.client.widgets.Panel;
import com.gwtext.client.widgets.TabPanel;
import com.gwtext.client.widgets.event.PanelListenerAdapter;
import com.gwtext.client.widgets.layout.FitLayout;
import com.gwtext.client.widgets.layout.RowLayout;
import com.gwtext.client.widgets.layout.RowLayoutData;

/**
 * Mediateur gérant les interactions entre vues et les echanges de données
 * C'est un singleton. 
 * @author david delon 
 *
 */

public class CarnetEnLigneMediateur implements Rafraichissable {
        
        
        /**
         * booleen qui verifie l'unicite de l'instance
         */
        private static boolean estInstancie = false ;

        /**
         * pointeur vers le médiateur lui même (pour le pattern singleton)
         */
        private static CarnetEnLigneMediateur thisMediateur = null ;  
                
        /**
         * modele de données
         */
        
        private  CarnetEnLigneModele carnetEnLigneModele=null;

        
        /**
         * panneau principal de l'application "Carnet en ligne"
         */

        private Panel panneauPrincipalCarnetEnLigne= null ;
        
        
        
        /**
         * panneau a onglet pour les observation et les images
         */ 
        
        
        private com.gwtext.client.widgets.TabPanel ongletsObservationsImages=null;
        
        
        /**
         * Indicateur d'etat de la connexion utilisateur
         */
        
        private EtatConnexionVue etatConnexionVue=null;
        
        
        /**
         * Texte d'invite connexion  
         */
        private final String texteDeconnexion="Utilisez ce carnet en ligne pour saisir vos observations, <u>identifiez-vous</u> pour les transmettre à Tela Botanica"; 

        /**
         * Boolean indiquant un essai de connexion
         */
        
        private boolean tentativeConnection=false;
        

        /**
         *  Formulaire de connexion (lazy instantiation)
         *  
         */
        
        private FormulaireDeConnexionVue formulaireDeConnexionVue=null;

        
        
        /**
         * Mediateur Gestion des images
         */
        
        private ImageMediateur imageMediateur=null;
        
        /**
         * Mediateur Gestion des observations
         */
        
        private ObservationMediateur observationMediateur=null;
        


        /**
         * Utilisateur en cours
         */

                
        private Utilisateur utilisateur=null; 
        

        
        public static CarnetEnLigneMediateur Instance()
        {
                        if(!estInstancie || thisMediateur==null)
                        {
                                estInstancie = true ;
                                thisMediateur = new CarnetEnLigneMediateur() ;
                        }
                        
                        return thisMediateur ;
                        
        }
        
        
        /**
         * constructeur privé (on accède a la classe par la méthode getInstance
         */
        
        private CarnetEnLigneMediateur() {
        
                
                panneauPrincipalCarnetEnLigne = new Panel("Carnet en ligne");
                
//              Disposition 
                
                panneauPrincipalCarnetEnLigne.setLayout(new RowLayout());

                
//              On crée un modèle d'acces aux donnnes 
                
                carnetEnLigneModele=CarnetEnLigneModele.Instance();
                
                        
                // La vue affichant le statut de la connexion 

                etatConnexionVue=new EtatConnexionVue(this);
                etatConnexionVue.setLayout(new FitLayout()) ;
                
                // Le panneau à onglet qui contient les 2 applications Observation et Images 
                
                ongletsObservationsImages = new TabPanel();
                
                panneauPrincipalCarnetEnLigne.add(etatConnexionVue,new RowLayoutData(20));
                
                //      on ajoute le panneau a onglet au panneau principal
                
                panneauPrincipalCarnetEnLigne.add(ongletsObservationsImages);
                
                panneauPrincipalCarnetEnLigne.addListener(new PanelListenerAdapter() {
                        
                        public void onResize(BoxComponent component, int adjWidth, int adjHeight, int rawWidth, int rawHeight)
                        {
                                
                        }
                        
                }) ;
        
                // On ajoute les applications           
                observationMediateur = ObservationMediateur.Instance(this);
                imageMediateur= ImageMediateur.Instance(this);
                
                //temp dd viewport desactive ajout de cette  ligne
                getPanneauPrincipalCarnetEnLigne().setHeight(Window.getClientHeight()) ;
                // 
                
                //panneauPrincipalCarnetEnLigne.setSize(Window.getClientWidth(), Window.getClientHeight() - etatConnexionVue.getHeight()) ;
                observationMediateur.getPanneauPrincipalObservation().setSize(panneauPrincipalCarnetEnLigne.getWidth(),panneauPrincipalCarnetEnLigne.getHeight() - 20) ;
                imageMediateur.getPanneauPrincipalImage().setSize(panneauPrincipalCarnetEnLigne.getWidth(),panneauPrincipalCarnetEnLigne.getHeight() - 20) ;
                
                //      on ajoute les panneaux  principaux des applications au panneau à onglets
                ongletsObservationsImages.add(observationMediateur.getPanneauPrincipalObservation());
                ongletsObservationsImages.add(imageMediateur.getPanneauPrincipalImage());       
                
        }
        
        
        public void getEtatUtilisateur() { 
                
                        
                carnetEnLigneModele.getEtatUtilisateur(this); 
                                
                
        }


        // Methode publiques
        
        
        
        /**
         * Recherche Identifiant utilisateur en cours et etat de connection
         * @return Utilisateur
         */
        
        
        public Utilisateur getUtilisateur() {
                return utilisateur;
        }

        /**
         * Deconnecte l'utilisateur passe en parametre
         */
    public void deconnecterUtilisateur() {

                        
                carnetEnLigneModele.deconnecterUtilisateur(this, utilisateur.getIdentifiant());
                
        }

        public void connecterUtilisateur(String login, String password) {
        
                tentativeConnection=true;
                carnetEnLigneModele.connecterUtilisateur(this, login, password); 
                
        }


        
        /**
         *  Affichage etat de la connexion
         */
        
        
        private void afficheEtatConnexion() {
                 
                
                if (!utilisateur.isIdentifie()) {
                           etatConnexionVue.setEtat(texteDeconnexion,false);
                }
                else {
                      etatConnexionVue.setEtat(utilisateur.getIdentifiant()+ " (deconnexion)",true);
                }
                
        }

        
        /**
         * 
         * Affichage boite de connexion
         *
         */
        
        
        public void afficherDialogueConnexion() {
                
                  if (formulaireDeConnexionVue==null) { 
                          formulaireDeConnexionVue= new FormulaireDeConnexionVue(this);
                  }
                  
                  // Position it roughly in the middle of the screen.
                  int left = (Window.getClientWidth() - 512) / 2;
                  int top = (Window.getClientHeight() - 256) / 2;
                  
                  
                  formulaireDeConnexionVue.setPopupPosition(left, top);
                  formulaireDeConnexionVue.show();
                
        }


        

        public Panel getPanneauPrincipalCarnetEnLigne() {
                return panneauPrincipalCarnetEnLigne;
        }

        
//       TODO : repandre rafraichissement

        public void rafraichir(Object nouvelleDonnees, boolean repandreRaffraichissement) {

                        if (nouvelleDonnees instanceof Utilisateur) {
                                                              
                                utilisateur = (Utilisateur) nouvelleDonnees;
                                
                                imageMediateur.connecterUtilisateur() ;
                                                                
                                afficheEtatConnexion();
                                
                                if ((tentativeConnection) && !utilisateur.isIdentifie()) {
                        
                                        //formulaireDeConnexionVue.afficherMessageAlerte();
                                }
                                else {
                                        if ((tentativeConnection) && utilisateur.isIdentifie()) {                                               
                                                formulaireDeConnexionVue.hide();
                                        }
                                }

                                
                        // On lance l'affichage des observations
                                observationMediateur.obtenirNombreObservation();

                        }

        }


        public void obtenirListeObservations(Rafraichissable r) {
                
                observationMediateur.obtenirListeObservation(r) ;
                
        }



        public void donneesRafraichies(Object nouvelleDonnees) {
                
                imageMediateur.donneesExterieures(nouvelleDonnees) ;
                
        }

                

}