New file |
0,0 → 1,446 |
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"); |
|
// Disposition |
|
panneauPrincipalCarnetEnLigne.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 Images |
|
ongletsObservationsImages = 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 principal |
cacherPanneau = 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 applications |
observationMediateur = 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 à onglets |
ongletsObservationsImages.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); |
} |
|
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'écran |
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 rafraichissement |
|
public 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()) { |
panneauAdmin.setVisible(true); |
formulaireDeConnexionVue.cacher(); |
} |
} |
afficheEtatConnexion(); |
|
// On lance l'affichage des observations |
observationMediateur.connecterUtilisateur(); |
imageMediateur.connecterUtilisateur(); |
|
} |
|
} |
|
public void afficherListeUtilisateurs() { |
|
ListeUtilisateurAdminVue listeUtilisateur = new ListeUtilisateurAdminVue(this) ; |
listeUtilisateur.show(Ext.get("LienChangerUtilisateur").getDOM()); |
|
} |
|
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 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) ; |
} |
|
} |