Rev 2656 | Blame | Compare with Previous | Last modification | View Log | RSS feed
package org.tela_botanica.client;import org.tela_botanica.client.i18n.Msg;import org.tela_botanica.client.image.ImageMediateur;import org.tela_botanica.client.interfaces.Rafraichissable;import org.tela_botanica.client.modeles.objets.Utilisateur;import org.tela_botanica.client.observation.ObservationMediateur;import org.tela_botanica.client.vues.EtatConnexionVue;import org.tela_botanica.client.vues.FenetreLicenceVue;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.user.client.Timer;import com.google.gwt.user.client.Window;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.BoxComponent;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.event.ContainerListenerAdapter;import com.gwtext.client.widgets.event.TabPanelListenerAdapter;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= Msg.get("cel-utilisation")+", <u>"+Msg.get("identifiez-vous")+"</u> "+Msg.get("pour-transmettre-tela");/*** Boolean indiquant un essai de connexion*/private boolean tentativeConnection=false;/*** Booleen indique que la licence a été acceptée*/private boolean licenceUtilisateurAcceptee = false;/*** Formulaire de connexion (lazy instantiation)**/private FormulaireDeConnexionVue formulaireDeConnexionVue=null;/****/private Panel bandeau = null ;private Panel panneauAdmin = null ;Tool cacherPanneau = null ;private FenetreLicenceVue fenetreAcceptationLicence = 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);// 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);}});ongletsObservationsImages.addListener(new TabPanelListenerAdapter() {@Overridepublic void onTabChange(TabPanel source, Panel tab) {if(tab.equals(imageMediateur.getPanneauPrincipalImage())) {Timer t = new Timer() {@Overridepublic void run() {imageMediateur.obtenirNombreMiniListeObservations();imageMediateur.rafraichirToutesVues();}};t.schedule(150);}}});// 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() {licenceUtilisateurAcceptee = false;// TODO: vider proprement toutes les vues (méthode à voir)carnetEnLigneModele.deconnecterUtilisateur(this, Utilisateur.getInstance().getIdentifiantUtilisateurConsulte());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.getInstance().getLoginUtilisateurConsulte(),true);}}private void afficherFenetreAcceptationLicence() {fenetreAcceptationLicence = new FenetreLicenceVue(this);// On le positionne à peu près au milieu de l'écranint left = (Window.getClientWidth() - 512) / 2;int top = (Window.getClientHeight() - 256) / 5;fenetreAcceptationLicence.setPosition(left, top);fenetreAcceptationLicence.setHeight(350);fenetreAcceptationLicence.setWidth(550);fenetreAcceptationLicence.setModal(true);fenetreAcceptationLicence.show();}/**** 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;}@Overridepublic 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();}}if(utilisateur.isIdentifie() && !utilisateur.getLicenceAcceptee()) {afficherFenetreAcceptationLicence();} else {if(tentativeConnection && utilisateur.isIdentifie() && observationMediateur.listeAvoirObservations() && !utilisateur.isAdmin()) {if(Window.confirm(Msg.get("question-import-anonyme-connecte")+" ?")) {observationMediateur.setImporterObservationsAnonymes(true);}}afficheEtatConnexion();// On lance l'affichage des observationsobservationMediateur.connecterUtilisateur();imageMediateur.connecterUtilisateur();}}if(nouvelleDonnees instanceof String) {String evenement = (String)nouvelleDonnees;if(evenement.equals("licence_acceptee")) {licenceUtilisateurAcceptee = true;accepterLicenceUtilisateur();} else {if(utilisateur.isIdentifie()) {deconnecterUtilisateur();return;}}if(observationMediateur.listeAvoirObservations() && !utilisateur.isAdmin()) {if(Window.confirm(Msg.get("question-import-anonyme-connecte")+" ?")) {observationMediateur.setImporterObservationsAnonymes(true);}}afficheEtatConnexion();observationMediateur.connecterUtilisateur();imageMediateur.connecterUtilisateur();fenetreAcceptationLicence.close();}}private void accepterLicenceUtilisateur() {utilisateur.setLicenceAcceptee(true);carnetEnLigneModele.accepterLicenceUtilisateur(Utilisateur.getInstance().getIdentifiantUtilisateurConsulte());}public void afficherListeUtilisateurs() {ListeUtilisateurAdminVue listeUtilisateur = new ListeUtilisateurAdminVue(this) ;listeUtilisateur.show(Ext.get("LienChangerUtilisateur").getDOM());listeUtilisateur.focusChampUtilisateur();}public void afficherLienAdmin() {String[] paramsU = {Utilisateur.getInstance().getLoginUtilisateurConsulte()};String labelAdmin = "<div id=\"lienAdmin\"> "+Msg.get("admin-consulter-donnees", paramsU)+" <a id=\"LienChangerUtilisateur\" href=\"#\">"+Msg.get("changer-utilisateur")+"</a></div>" ;panneauAdmin.setHtml(labelAdmin);ExtElement lienChangerUt = Ext.get("LienChangerUtilisateur");if(lienChangerUt != null){lienChangerUt.removeAllListeners();lienChangerUt.addListener("click", new EventCallback() {@Overridepublic void execute(EventObject e) {afficherListeUtilisateurs();}});}else{panneauAdmin.addListener(new ContainerListenerAdapter(){@Overridepublic void onAfterLayout(Container c){ExtElement lienChangerUt = Ext.get("LienChangerUtilisateur");lienChangerUt.removeAllListeners();lienChangerUt.addListener("click", new EventCallback() {@Overridepublic void execute(EventObject e) {afficherListeUtilisateurs();}});}});}}public void cacherLienAdmin() {panneauAdmin.hide();}public void changerIdentite(String idNouvelleIdentite, String loginNouvelleIdentite) {Utilisateur.getInstance().setUtilisateurConsulte(idNouvelleIdentite, loginNouvelleIdentite);afficherLienAdmin();observationMediateur.connecterUtilisateur();imageMediateur.connecterUtilisateur();}public void obtenirListeUtilisateurs(String rech, Rafraichissable r) {carnetEnLigneModele.obtenirListeUtilisateur(r,rech,Utilisateur.getInstance().getIdentifiantUtilisateurConnecte());}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();}-*/;}