Subversion Repositories eFlore/Applications.cel

Rev

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

/**
 David Delon david.delon@clapas.net 2007
 
 */

/*
 * EtatConnexionVue.java  : affichage information portant sur le statut de la connexion utilisateur
 * 
 * 
 * 1: Le programme affiche le statut connecte si l'utilisateur s'est connecte precedemment, sinon s'affiche le statut deconnecte
 * 2: Le programme arme les actions liees a la connection ou a la deconnection
 *    - Connection : affichage de la boite de connexion
 *    - Deconnexion : appel du service de deconnexion, et appel de la re-initialisation de l'affichage pour le nouvel identifiant utilisateur obtenu (identifiant  de session)
 */

package org.tela_botanica.client.vues;

import java.util.Iterator;
import java.util.List;

import org.tela_botanica.client.CarnetEnLigneMediateur;
import org.tela_botanica.client.i18n.Msg;
import org.tela_botanica.client.modeles.objets.Configuration;

import com.google.gwt.event.dom.client.ChangeEvent;
import com.google.gwt.event.dom.client.ChangeHandler;
import com.google.gwt.http.client.URL;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.ui.HTML;
import com.google.gwt.user.client.ui.ListBox;
import com.gwtext.client.core.EventCallback;
import com.gwtext.client.core.EventObject;
import com.gwtext.client.core.Ext;
import com.gwtext.client.core.ExtElement;
import com.gwtext.client.widgets.Container;
import com.gwtext.client.widgets.Panel;
import com.gwtext.client.widgets.event.ContainerListenerAdapter;

/**
 * Un indicateur d'etat de connexion
 * 
 * @author David Delon
 *
 */

public class EtatConnexionVue  extends Panel  {

        /**
         * Médiateur associé à la vue
         */
        private CarnetEnLigneMediateur carnetEnLigneMediateur = null ;  
        
  /**
   * Texte lié à la connexion.
   * 
   */
  private HTML htmlEtatConnexion = new HTML();
  private String labelEtatConnexion = null;
  
  private ListBox listeLangues = null;

  /**
   * Ouh c'est pas beau, ça ! Mais avec Google Web Toolshit, ça
   * marche toujours mieux que quand on fait des trucs beaux :-)
   */
  private String liens = "<div id=\"liensExt\">"
                  + "<a id=\"lienRemarques\" title=\""+Msg.get("adresser-remarque-probleme")+"\""
                  +     " href=\"" + Configuration.getRemarquesBaseUrl() + "?lang=" + Msg.getLangue() + "&service=" + Configuration.getServiceContact()
                  +     "&pageSource=" + URL.encodeQueryString(Window.Location.getHref()) + "\""
                  + " onClick=\"javascript:window.open(this.getAttribute('href'), 'Tela Botanica - Remarques', config='height=700, width=640, scrollbars=yes, resizable=yes'); return false;\""
                  + " target=\"_blank\""
                  + ">"+Msg.get("remarques")+"</a>"
                  + "<a href=\"#\" id=\"lienAide\">"+Msg.get("aide")+"</a>"
                  + "</div>" ;
  
  /**
   * Booleen indiquant si utilisateur est connecte 
   * 
   */
  public EtatConnexionVue(CarnetEnLigneMediateur cm)  {
          
        carnetEnLigneMediateur=cm;

    this.setBodyBorder(false) ;
    this.setBorder(false) ;
    this.setId("panneau_etat_connexion");
        
        // Pas de word wrap
        labelEtatConnexion="";
        
        initialiserListeLangues();
        
        this.add(listeLangues);
        htmlEtatConnexion.setHTML(labelEtatConnexion+liens);
        this.add(htmlEtatConnexion);
        
        ajouterListeners();     
  }
  
  private void initialiserListeLangues() {
          listeLangues = new ListBox();
          listeLangues.getElement().setId("liste_selection_langue");
          List<String> languesDispos = Msg.getLanguesDisponibles();
          int indexLangue = 0;
          for (Iterator<String> iterator = languesDispos.iterator(); iterator.hasNext();) {
                  String langue = iterator.next();
                  listeLangues.addItem(Msg.get("intitule-langue", langue), langue);
                  if(langue.equals(Msg.getLangue())) {
                          listeLangues.setSelectedIndex(indexLangue);
                  }
                  indexLangue++;
          }
  }
        
  private void ajouterListeners() {
          listeLangues.addChangeHandler(new ChangeHandler() {   
                @Override
                public void onChange(ChangeEvent event) {
                        int indexLangue = listeLangues.getSelectedIndex();
                        String urlCourante = Window.Location.getHref();
                        String urlBase = urlCourante;
                        if(urlCourante.contains("?")) {
                                urlBase = urlCourante.substring(0, urlCourante.indexOf("?"));
                        }
                        String urlLangue = urlBase+"?lang="+listeLangues.getValue(indexLangue);
                        Window.Location.replace(urlLangue);
                        
                        return;
                }
        });

          ExtElement lienAide = Ext.get("lienAide");
          if(lienAide != null) 
          {     
                  lienAide.removeAllListeners();
                  lienAide.addListener("click", new EventCallback() {

                          @Override
                          public void execute(EventObject e) {
                                  String aideUrl = Configuration.getAideBaseUrl() ;
                                  Window.open(aideUrl, "", "") ;                
                          }
                  });
          }
          else
          {
                  addListener(new ContainerListenerAdapter() {
                          @Override
                          public void onAfterLayout(Container c) {

                                  ExtElement lienAide = Ext.get("lienAide");
                                  if(lienAide != null) 
                                  {     
                                          lienAide.removeAllListeners();
                                          lienAide.addListener("click", new EventCallback() {

                                                  @Override
                                                  public void execute(EventObject e) {
                                                          String aideUrl = Configuration.getAideBaseUrl() ;
                                                          Window.open(aideUrl, "", "") ;                
                                                  }
                                          });
                                  }
                          }
                  });
          }
          
          
  }

  /**
   * Affichage de l'etat de connexion
   * @param text
   * @param connecte
   */
  public void setEtat(String identifiant, boolean connecte) {

          if(connecte) {
                  String[] params = {identifiant};
                  labelEtatConnexion = "<div id=\"etatConnexion\">"+Msg.get("connecte-en-tant-que", params)+" <a id=\"lienDeconnexion\" href=\"#\">("+Msg.get("deconnexion")+")</a>" ;
                  labelEtatConnexion += "</div>" ;


                  labelEtatConnexion += liens ;
                  htmlEtatConnexion.setHTML(labelEtatConnexion);

                  ExtElement lienDeco = Ext.get("lienDeconnexion");
                  if(lienDeco != null) 
                  {
                          lienDeco.addListener("click", new EventCallback() {

                                  @Override
                                  public void execute(EventObject e) {
                                          carnetEnLigneMediateur.deconnecterUtilisateur();
                                  }

                          });
                  }
                  else
                  {
                          addListener(new ContainerListenerAdapter() 
                          {
                                  @Override
                                  public void onAfterLayout(Container c) 
                                  {
                                          ExtElement lienDeco = Ext.get("etatConnexion");

                                          lienDeco.addListener("click", new EventCallback() {

                                                  @Override
                                                  public void execute(EventObject e) {
                                                          carnetEnLigneMediateur.deconnecterUtilisateur();
                                                          setEtat(null, false);
                                                  }

                                          });
                                  }
                          });
                  }
          }
          else
          {
                  labelEtatConnexion = "<div id=\"etatConnexion\"> "+Msg.get("cel-utilisation")+", <a id=\"lienConnexion\" href=\"#\">"+Msg.get("identifiez-vous")+"</a> "+Msg.get("pour-transmettre-tela")+"</div>";
                  labelEtatConnexion += liens ;
                  htmlEtatConnexion.setHTML(labelEtatConnexion);
                  ExtElement lienCo = Ext.get("etatConnexion");
                  if(lienCo != null) {
                          lienCo.addListener("click", new EventCallback() {

                                  @Override
                                  public void execute(EventObject e) {

                                          carnetEnLigneMediateur.afficherDialogueConnexion();
                                  }

                          });
                  }
                  else 
                  {
                          addListener(new ContainerListenerAdapter() {
                                  @Override
                                  public void onAfterLayout(Container c) {

                                          ExtElement lienCo = Ext.get("etatConnexion");

                                          lienCo.addListener("click", new EventCallback() {

                                                  @Override
                                                  public void execute(EventObject e) {

                                                          carnetEnLigneMediateur.afficherDialogueConnexion();
                                                  }

                                          });
                                  }
                          });
                  }
          }

          ExtElement lienAide = Ext.get("lienAide");
          if(lienAide != null) 
          {     
                  lienAide.removeAllListeners();
                  lienAide.addListener("click", new EventCallback() {

                          @Override
                          public void execute(EventObject e) {
                                  String aideUrl = Configuration.getAideBaseUrl() ;
                                  Window.open(aideUrl, "", "") ;                
                          }
                  });
          }
          else
          {
                  addListener(new ContainerListenerAdapter() {
                          @Override
                          public void onAfterLayout(Container c) {

                                  ExtElement lienAide = Ext.get("lienAide");
                                  if(lienAide != null) 
                                  {     
                                          lienAide.removeAllListeners();
                                          lienAide.addListener("click", new EventCallback() {

                                                  @Override
                                                  public void execute(EventObject e) {
                                                          String aideUrl = Configuration.getAideBaseUrl() ;
                                                          Window.open(aideUrl, "", "") ;                
                                                  }
                                          });
                                  }
                          }
                  });
          }


  }

}


/* +--Fin du code ---------------------------------------------------------------------------------------+
* $Log$
* Revision 1.1  2008-11-13 11:27:05  ddelon
* Reecriture gwt-ext
*
* Revision 1.1  2008-06-09 14:19:37  ddelon
* Initialisation observation
*
* Revision 1.2  2008-04-28 13:10:44  ddelon
* Integration MyGwt
*
* Revision 1.1  2008-01-02 21:26:04  ddelon
* mise en place mygwt
*
* Revision 1.6  2007-12-22 14:48:53  ddelon
* Documentation et refactorisation
*
* Revision 1.5  2007-09-17 19:25:34  ddelon
* Documentation
*
* 
*/