Rev 343 | 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.core.client.GWT;import com.google.gwt.core.client.JavaScriptObject;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.BoxComponent;import com.gwtext.client.widgets.Component;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.ContainerListener;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;/*** 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") ;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));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);if(!GWT.isScript()) {//temp dd viewport desactive ajout de cette lignegetPanneauPrincipalCarnetEnLigne().setHeight(Window.getClientHeight()) ;}panneauPrincipalCarnetEnLigne.addListener(new ContainerListenerAdapter() {@Overridepublic void onResize(BoxComponent component, int adjWidth,int adjHeight, int rawWidth, int rawHeight) {CarnetEnLigneMediateur.fireResize();observationMediateur.redimensionnerPanneaux(adjHeight, adjWidth);}});// 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) ;}public static native void fireResize() /*-{$wnd.Ext.EventManager.fireResize();}-*/;}