Rev 67 | Blame | 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");// DispositionpanneauPrincipalCarnetEnLigne.setLayout(new RowLayout());// On crée un modèle d'acces aux donnnescarnetEnLigneModele=CarnetEnLigneModele.Instance();// La vue affichant le statut de la connexionetatConnexionVue=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(20));// on ajoute le panneau a onglet au panneau principalpanneauPrincipalCarnetEnLigne.add(ongletsObservationsImages);panneauPrincipalCarnetEnLigne.addListener(new PanelListenerAdapter() {public void onResize(BoxComponent component, int adjWidth, int adjHeight, int rawWidth, int rawHeight){}}) ;// On ajoute les applicationsobservationMediateur = ObservationMediateur.Instance(this);imageMediateur= ImageMediateur.Instance(this);//temp dd viewport desactive ajout de cette lignegetPanneauPrincipalCarnetEnLigne().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 à 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() {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 rafraichissementpublic 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 observationsobservationMediateur.obtenirNombreObservation();}}public void obtenirListeObservations(Rafraichissable r) {observationMediateur.obtenirListeObservation(r) ;}public void donneesRafraichies(Object nouvelleDonnees) {imageMediateur.donneesExterieures(nouvelleDonnees) ;}}