Subversion Repositories eFlore/Archives.cel-v2

Compare Revisions

Ignore whitespace Rev 48 → Rev 49

/trunk/src/org/tela_botanica/client/CarnetEnLigneMediateur.java
1,97 → 1,187
package org.tela_botanica.client;
 
import org.tela_botanica.client.image.ImageMediateur;
import org.tela_botanica.client.interfaces.iMediateur;
import org.tela_botanica.client.interfaces.iRetourUtilisateur;
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.Panel;
import com.gwtext.client.widgets.layout.VerticalLayout;
 
public class CarnetEnLigneMediateur {
/**
* 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 {
// Evenenements
final static public int ETAT_CONNEXION=1;
final static public int DECONNEXION=2;
final static public int CONNEXION = 3;
/**
* booleen qui verifie l'unicite de l'instance
*/
private static boolean estInstancie = false ;
private final CarnetEnLigneModele carnetEnLigneModele;
private Utilisateur utilisateur=null;
// Fonctionnement servicecs
private boolean async=true;
/**
* modele de données
*/
private CarnetEnLigneModele carnetEnLigneModele=null;
 
/**
* panneau principal de l'application "Carnet en ligne"
*/
 
private Panel panneauPrincipalCarnetEnLigne=new Panel("Carnet en ligne");
public CarnetEnLigneMediateur() {
carnetEnLigneModele=new CarnetEnLigneModele();
//addListener(ETAT_CONNEXION,this);
getEtatUtilisateur(); // Alimente Objet Utilisateur
}
/**
* Fin construction (est appelle sur reception evenement Applicatif ETAT_CONNEXION)
*
* panneau a onglet pour les observation et les images
*/
private Panel ongletsObservationsImages=null;
/**
* Indicateur d'etat de la connexion utilisateur
*/
private void _CarnetEnLigneMediateur() {
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
*/
 
ImageMediateur.Instance() ;
new ObservationMediateur(this);
private Utilisateur utilisateur=null;
 
public static CarnetEnLigneMediateur Instance()
{
if(!estInstancie)
{
estInstancie = true ;
return new CarnetEnLigneMediateur() ;
}
else
{
return null ;
}
}
private void getEtatUtilisateur() { // Pourrait devenir publique ...
// TODO : utiliser une factory ici : Avec Modele synchrone ou non, ou au niveau methode comme dans cette exemple
/**
* constructeur privé (on accède a la classe par la méthode getInstance
*/
private CarnetEnLigneMediateur() {
// Pas possible de traiter dans Modele car retour asynchrone devant etre traité ici.
// Disposition
// if asynchrone
panneauPrincipalCarnetEnLigne.setLayout(new VerticalLayout());
 
if (async) {
carnetEnLigneModele.getUtilisateurAsynchroneDAO(
new iRetourUtilisateur() {
public void onRetour(Utilisateur uti) {
utilisateur=uti;
// fireEvent(ETAT_CONNEXION);
}
// On crée un modèle d'acces aux donnnes
carnetEnLigneModele=CarnetEnLigneModele.Instance();
// La vue affichant le statut de la connexion
 
}
);
etatConnexionVue=new EtatConnexionVue(this);
}
// else if synchrone
else {
 
utilisateur= carnetEnLigneModele.getUtilisateurSynchroneDAO();
_CarnetEnLigneMediateur();
// Le panneau à onglet qui contient les 2 applications Observation et Images
ongletsObservationsImages = new Panel();
panneauPrincipalCarnetEnLigne.add(etatConnexionVue);
 
}
 
// on ajoute le panneau a onglet au panneau principal
panneauPrincipalCarnetEnLigne.add(ongletsObservationsImages);
 
// On ajoute les applications
observationMediateur = ObservationMediateur.Instance(this);
// imageMediateur= ImageMediateur.Instance();
 
// on ajoute les panneaux principaux des applications au panneau à onglets
// ongletsObservationsImages.add(imageMediateur.getPanneauPrincipalImage());
ongletsObservationsImages.add(observationMediateur.getPanneauPrincipalObservation());
}
public void getEtatUtilisateur() {
carnetEnLigneModele.getEtatUtilisateur(this);
}
 
 
// Evenenements Applicatifs
/*
public void handleEvent(BaseEvent be) {
if (be.type==CarnetEnLigneMediateur.ETAT_CONNEXION) {
_CarnetEnLigneMediateur(); // Fin initialisation
}
}
*/
// Methode publiques
/**
* Recherche Identifiant utilisateur en cours et etat de connection
* @return Utilisateur
108,18 → 198,8
public void deconnecterUtilisateur() {
 
carnetEnLigneModele.deconnecterUtilisateur(
new iRetourUtilisateur() {
public void onRetour(Utilisateur uti) {
utilisateur=uti;
//fireEvent(DECONNEXION);
}
carnetEnLigneModele.deconnecterUtilisateur(this, utilisateur.getIdentifiant());
 
}, utilisateur.getIdentifiant()
);
 
}
126,21 → 206,94
 
public void connecterUtilisateur(String login, String password) {
carnetEnLigneModele.connecterUtilisateur(
new iRetourUtilisateur() {
public void onRetour(Utilisateur uti) {
utilisateur=uti;
//fireEvent(CONNEXION);
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 rafraichissement
 
public void rafraichir(Object nouvelleDonnees, boolean repandreRaffraichissement) {
 
if (nouvelleDonnees instanceof Utilisateur) {
utilisateur = (Utilisateur) nouvelleDonnees;
afficheEtatConnexion();
if ((tentativeConnection) && !utilisateur.isIdentifie()) {
formulaireDeConnexionVue.afficherMessageAlerte();
}
else {
if ((tentativeConnection) && utilisateur.isIdentifie()) {
formulaireDeConnexionVue.hide();
}
}
 
}, login, password
);
// On lance l'affichage des observations
observationMediateur.obtenirNombreObservation();
 
}
 
}
 
 
}
 
}