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(); |
|
|
} |
|
} |
|
|
|
} |
|
} |