Rev 256 | 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 org.tela_botanica.client.vues.ListeUtilisateurAdminVue;import com.google.gwt.user.client.DOM;import com.google.gwt.user.client.Event;import com.google.gwt.user.client.Window;import com.google.gwt.user.client.ui.Image;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.core.Function;import com.gwtext.client.widgets.Container;import com.gwtext.client.widgets.Panel;import com.gwtext.client.widgets.TabPanel;import com.gwtext.client.widgets.Tool;import com.gwtext.client.widgets.ToolTip;import com.gwtext.client.widgets.event.ContainerListenerAdapter;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;/****/private Panel bandeau = null ;private Panel panneauAdmin = null ;Tool cacherPanneau = null ;/*** Mediateur Gestion des images*/private ImageMediateur imageMediateur=null;/*** Mediateur Gestion des observations*/private ObservationMediateur observationMediateur=null;/*** Un tooltip pour l'aide*/private ToolTip tp = new ToolTip() ;/*** 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");// DispositionpanneauPrincipalCarnetEnLigne.setLayout(new RowLayout());// Pourrait etre fait plus loin ...carnetEnLigneModele=CarnetEnLigneModele.Instance();bandeau = new Panel();bandeau.setId("x-up-bandeau") ;Image logoND = new Image("logo_n_d.gif") ;logoND.setStylePrimaryName("x-img-logo_nd") ;final Image img = new Image("bandeau-haut.png") {public void onBrowserEvent(Event e) {if(DOM.eventGetType(e) == Event.ONCLICK){bandeau.toggleCollapse(true);}if(DOM.eventGetType(e) == Event.ONMOUSEOVER && bandeau.isRendered()) {tp.setHtml("<div class=\"x-tooltip-help\"> Cliquez sur l'image ou sur la flèche en haut à droite pour replier le panneau </div>");tp.showBy(bandeau.getId());}if(DOM.eventGetType(e) == Event.ONMOUSEOUT) {if(tp.isVisible()) {tp.hide();}}}};tp.setHtml("<div class=\"x-tooltip-help\"> Cliquez sur l'image ou sur la flèche en haut à droite pour replier le panneau </div>");bandeau.add(img) ;//img.setSize("50%", "100%");bandeau.add(logoND) ;//logoND.setSize("10%", "100%");bandeau.setBorder(false) ;// La vue affichant le statut de la connexion//bandeau.setSize("60%","80%") ;etatConnexionVue=new EtatConnexionVue(this);etatConnexionVue.setLayout(new FitLayout()) ;// Le panneau à onglet qui contient les 2 applications Observation et ImagesongletsObservationsImages = new TabPanel();panneauPrincipalCarnetEnLigne.add(etatConnexionVue,new RowLayoutData(16));panneauPrincipalCarnetEnLigne.add(bandeau, new RowLayoutData(100)) ;img.sinkEvents(Event.ONCLICK);img.sinkEvents(Event.ONMOUSEOVER);img.sinkEvents(Event.ONMOUSEOUT);// on ajoute le panneau a onglet au panneau principalcacherPanneau = new Tool(Tool.TOGGLE, new Function() {public void execute() {if(!bandeau.isCollapsed()) {bandeau.toggleCollapse(true) ;}else {bandeau.toggleCollapse(true) ;}}}) ;panneauAdmin = new Panel();panneauAdmin.setId("panneau_admin");panneauPrincipalCarnetEnLigne.add(panneauAdmin, new RowLayoutData(16));panneauAdmin.setBorder(false);panneauAdmin.hide();panneauPrincipalCarnetEnLigne.add(ongletsObservationsImages,new RowLayoutData());panneauPrincipalCarnetEnLigne.addTool(cacherPanneau) ;// On ajoute les applicationsobservationMediateur = ObservationMediateur.Instance(this);imageMediateur= ImageMediateur.Instance(this);//temp dd viewport desactive ajout de cette ligne//getPanneauPrincipalCarnetEnLigne().setHeight(Window.getClientHeight()) ;// on ajoute les panneaux principaux des applications au panneau à ongletsongletsObservationsImages.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() {// TODO: vider proprement toutes les vues (méthode à voir)carnetEnLigneModele.deconnecterUtilisateur(this, utilisateur.getIdentifiant());observationMediateur.deconnecterUtilisateur() ;imageMediateur.deconnecterUtilisateur();panneauAdmin.setVisible(false);}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("",false);}else {if(utilisateur.isAdmin()) {afficherLienAdmin();panneauAdmin.setVisible(true);} else {cacherLienAdmin();}etatConnexionVue.setEtat(utilisateur.getIdentifiant(),true);}}/**** Affichage boite de connexion**/public void afficherDialogueConnexion() {if (formulaireDeConnexionVue==null) {formulaireDeConnexionVue= new FormulaireDeConnexionVue(this);}// On le positionne à peu près au milieu de l'écranint left = (Window.getClientWidth() - 512) / 2;int top = (Window.getClientHeight() - 256) / 2;formulaireDeConnexionVue.setPopupPosition(left, top);formulaireDeConnexionVue.show();}public Panel getPanneauPrincipalCarnetEnLigne() {return panneauPrincipalCarnetEnLigne;}// TODO : repandre rafraichissementpublic void rafraichir(Object nouvelleDonnees, boolean repandreRaffraichissement) {if (nouvelleDonnees instanceof Utilisateur) {utilisateur = (Utilisateur) nouvelleDonnees;if ((tentativeConnection) && !utilisateur.isIdentifie()) {panneauAdmin.setVisible(false);formulaireDeConnexionVue.afficherMessageAlerte();}else {if ((tentativeConnection) && utilisateur.isIdentifie()) {afficherLienAdmin();formulaireDeConnexionVue.cacher();}}afficheEtatConnexion();// On lance l'affichage des observationsobservationMediateur.connecterUtilisateur();imageMediateur.connecterUtilisateur();}}public void afficherListeUtilisateurs() {ListeUtilisateurAdminVue listeUtilisateur = new ListeUtilisateurAdminVue(this) ;listeUtilisateur.show(Ext.get("LienChangerUtilisateur").getDOM());listeUtilisateur.focusChampUtilisateur();}public void afficherLienAdmin() {String labelAdmin = "<div id=\"lienAdmin\">Vous consultez les données de "+utilisateur.getIdentite()+" <a id=\"LienChangerUtilisateur\" href=\"#\">Changer d'utilisateur</a></div>" ;panneauAdmin.setHtml(labelAdmin);ExtElement lienChangerUt = Ext.get("LienChangerUtilisateur");if(lienChangerUt != null){lienChangerUt.removeAllListeners();lienChangerUt.addListener("click", new EventCallback() {public void execute(EventObject e) {afficherListeUtilisateurs();}});}else{panneauAdmin.addListener(new ContainerListenerAdapter(){public void onAfterLayout(Container c){ExtElement lienChangerUt = Ext.get("LienChangerUtilisateur");lienChangerUt.removeAllListeners();lienChangerUt.addListener("click", new EventCallback() {public void execute(EventObject e) {afficherListeUtilisateurs();}});}});}}public void cacherLienAdmin() {panneauAdmin.hide();}public void changerIdentite(String nouvelleIdentite) {utilisateur.setIdentite(nouvelleIdentite);afficherLienAdmin();observationMediateur.connecterUtilisateur();imageMediateur.connecterUtilisateur();}public void obtenirListeUtilisateurs(String rech, Rafraichissable r) {carnetEnLigneModele.obtenirListeUtilisateur(r,rech,utilisateur.getIdentifiant());}public void donneesImagesVersObs(Object o) {observationMediateur.donneesExterieures(o);}public void donneesObsVersImages(Object o) {imageMediateur.donneesExterieures(o);}public void obtenirListeObservations(Rafraichissable r) {observationMediateur.obtenirCacheObservation(r) ;}}