Subversion Repositories eFlore/Archives.cel-v2

Rev

Rev 43 | Only display areas with differences | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 43 Rev 49
1
package org.tela_botanica.client;
1
package org.tela_botanica.client;
2
 
2
 
3
import org.tela_botanica.client.image.ImageMediateur;
3
import org.tela_botanica.client.image.ImageMediateur;
4
import org.tela_botanica.client.interfaces.iMediateur;
-
 
5
import org.tela_botanica.client.interfaces.iRetourUtilisateur;
4
import org.tela_botanica.client.interfaces.Rafraichissable;
6
import org.tela_botanica.client.modeles.Utilisateur;
5
import org.tela_botanica.client.modeles.Utilisateur;
-
 
6
 
7
import org.tela_botanica.client.observation.ObservationMediateur;
7
import org.tela_botanica.client.observation.ObservationMediateur;
-
 
8
import org.tela_botanica.client.vues.EtatConnexionVue;
-
 
9
import org.tela_botanica.client.vues.FormulaireDeConnexionVue;
-
 
10
 
-
 
11
import com.google.gwt.user.client.Window;
-
 
12
import com.gwtext.client.widgets.Panel;
-
 
13
import com.gwtext.client.widgets.layout.VerticalLayout;
-
 
14
 
-
 
15
/**
-
 
16
 * Mediateur gérant les interactions entre vues et les echanges de données
-
 
17
 * C'est un singleton. 
-
 
18
 * @author david delon 
-
 
19
 *
8
 
20
 */
9
 
-
 
10
public class CarnetEnLigneMediateur  {
-
 
11
	
-
 
12
	// Evenenements
-
 
-
 
21
 
-
 
22
public class CarnetEnLigneMediateur implements Rafraichissable {
-
 
23
	
-
 
24
	
13
	final static public  int ETAT_CONNEXION=1;
-
 
14
	final static public  int DECONNEXION=2;
-
 
-
 
25
	/**
15
	final static public  int CONNEXION = 3;
26
	 * booleen qui verifie l'unicite de l'instance
-
 
27
	 */
-
 
28
	private static boolean estInstancie = false ;  
16
	
29
	
-
 
30
	
-
 
31
	/**
-
 
32
	 * modele de données
-
 
33
	 */
-
 
34
	
-
 
35
	private  CarnetEnLigneModele carnetEnLigneModele=null;
17
	
-
 
18
	private final CarnetEnLigneModele carnetEnLigneModele;
-
 
19
	private Utilisateur utilisateur=null; 
-
 
20
	
-
 
21
	// Fonctionnement servicecs
-
 
22
	private boolean async=true;
-
 
23
 
-
 
24
	
36
 
25
	
37
	
26
	public CarnetEnLigneMediateur() {
38
	/**
-
 
39
	 * panneau principal de l'application "Carnet en ligne"
-
 
40
	 */
-
 
41
 
-
 
42
	private Panel panneauPrincipalCarnetEnLigne=new Panel("Carnet en ligne");
-
 
43
	
-
 
44
	
-
 
45
	
27
		
46
	/**
-
 
47
	 * panneau a onglet pour les observation et les images
-
 
48
	 */ 
-
 
49
	
-
 
50
	
-
 
51
	private Panel ongletsObservationsImages=null;
-
 
52
	
-
 
53
	
-
 
54
	/**
-
 
55
	 * Indicateur d'etat de la connexion utilisateur
-
 
56
	 */
-
 
57
	
-
 
58
	private EtatConnexionVue etatConnexionVue=null;
-
 
59
	
-
 
60
 
-
 
61
	/**
-
 
62
	 * Texte d'invite connexion  
-
 
63
	 */
-
 
64
	private final String texteDeconnexion="Utilisez ce carnet en ligne pour saisir vos observations, <u>identifiez-vous</u> pour les transmettre à Tela Botanica"; 
-
 
65
 
-
 
66
	/**
-
 
67
	 * Boolean indiquant un essai de connexion
-
 
68
	 */
-
 
69
	
-
 
70
	private boolean tentativeConnection=false;
-
 
71
	
-
 
72
 
-
 
73
	/**
-
 
74
	 *  Formulaire de connexion (lazy instantiation)
28
		carnetEnLigneModele=new CarnetEnLigneModele();
75
	 *  
-
 
76
	 */
-
 
77
	
-
 
78
	private FormulaireDeConnexionVue formulaireDeConnexionVue=null;
-
 
79
 
-
 
80
	
-
 
81
	
-
 
82
	/**
-
 
83
	 * Mediateur Gestion des images
-
 
84
	 */
-
 
85
	
-
 
86
	private ImageMediateur imageMediateur=null;
-
 
87
	
-
 
88
	/**
29
		//addListener(ETAT_CONNEXION,this);
89
	 * Mediateur Gestion des observations
30
		getEtatUtilisateur(); // Alimente Objet Utilisateur 
-
 
-
 
90
	 */
-
 
91
	
-
 
92
	private ObservationMediateur observationMediateur=null;
-
 
93
	
-
 
94
 
-
 
95
 
-
 
96
	/**
-
 
97
	 * Utilisateur en cours
-
 
98
	 */
-
 
99
 
-
 
100
		
-
 
101
	private Utilisateur utilisateur=null; 
-
 
102
	
31
		
103
 
32
	}
104
	
33
	
105
	public static CarnetEnLigneMediateur Instance()
34
	/**
106
	{
35
	 * Fin construction (est appelle sur reception evenement Applicatif ETAT_CONNEXION)
107
			if(!estInstancie)
36
	 *
108
			{
37
	 */
109
				estInstancie = true ;
38
	
110
				return new CarnetEnLigneMediateur() ;
39
	private void _CarnetEnLigneMediateur() {
111
			}
40
		
112
			else
41
		ImageMediateur.Instance() ;  
113
			{
42
		new ObservationMediateur(this); 
114
				return null ;
43
 
115
			}
44
	}
116
	}
45
	
117
	
-
 
118
	
46
	
119
	/**
-
 
120
	 * constructeur privé (on accède a la classe par la méthode getInstance
47
	private void getEtatUtilisateur() {  // Pourrait devenir publique ...
121
	 */
48
		
122
	
49
// TODO : utiliser une factory ici : Avec Modele synchrone ou non, ou au niveau methode comme dans cette exemple
-
 
50
	
-
 
51
		
123
	private CarnetEnLigneMediateur() {
52
// Pas possible de traiter dans Modele car retour asynchrone devant etre traité ici.
-
 
53
		
124
	
54
		// if asynchrone 
-
 
55
		
-
 
56
		if (async) {
-
 
57
		carnetEnLigneModele.getUtilisateurAsynchroneDAO(
-
 
58
				new iRetourUtilisateur() {
-
 
59
					public void onRetour(Utilisateur uti) {
-
 
60
						utilisateur=uti;
-
 
61
					//	fireEvent(ETAT_CONNEXION); 
-
 
62
					}
-
 
63
 
-
 
64
					
125
		
65
				}
-
 
66
				
126
//		Disposition 
67
		);
127
		
-
 
128
		panneauPrincipalCarnetEnLigne.setLayout(new VerticalLayout());
-
 
129
 
68
		
130
		
-
 
131
//		On crée un modèle d'acces aux donnnes 
-
 
132
		
69
		}
133
		carnetEnLigneModele=CarnetEnLigneModele.Instance();
-
 
134
		
-
 
135
			
-
 
136
		// La vue affichant le statut de la connexion 
-
 
137
 
-
 
138
		etatConnexionVue=new EtatConnexionVue(this);
-
 
139
		
-
 
140
		
70
		// else if synchrone 
-
 
-
 
141
 
-
 
142
		// Le panneau à onglet qui contient les 2 applications Observation et Images 
-
 
143
		
-
 
144
		ongletsObservationsImages = new Panel();
-
 
145
		
-
 
146
		panneauPrincipalCarnetEnLigne.add(etatConnexionVue);
71
		else {
147
		
72
 
148
	
73
		utilisateur= carnetEnLigneModele.getUtilisateurSynchroneDAO();
-
 
74
		_CarnetEnLigneMediateur();
149
 
-
 
150
		//	on ajoute le panneau a onglet au panneau principal
75
 
151
		
-
 
152
		panneauPrincipalCarnetEnLigne.add(ongletsObservationsImages);
-
 
153
 
76
		}
154
	
-
 
155
		// On ajoute les applications 		
77
 
156
		observationMediateur = ObservationMediateur.Instance(this);
78
		
-
 
-
 
157
			
-
 
158
//			imageMediateur= ImageMediateur.Instance();
-
 
159
 
-
 
160
			//	on ajoute les panneaux  principaux des applications au panneau à onglets
-
 
161
			
-
 
162
		//	ongletsObservationsImages.add(imageMediateur.getPanneauPrincipalImage());
-
 
163
			
-
 
164
		ongletsObservationsImages.add(observationMediateur.getPanneauPrincipalObservation());
-
 
165
			
-
 
166
		
79
 
167
			
-
 
168
		
-
 
169
	}
80
		
170
	
81
	}
171
	
82
 
172
	public void getEtatUtilisateur() { 
83
 
173
		
84
	// Evenenements Applicatifs
174
			
85
	/*
175
		carnetEnLigneModele.getEtatUtilisateur(this); 
86
	public void handleEvent(BaseEvent be) {
176
				
87
		if (be.type==CarnetEnLigneMediateur.ETAT_CONNEXION) {
177
		
88
		 _CarnetEnLigneMediateur(); // Fin initialisation 
178
	}
89
		}
179
 
90
	}
180
 
91
	*/
181
	// Methode publiques
92
	
182
	
93
	// Methode publiques
183
	
94
	
184
	
95
	/**
185
	/**
96
	 * Recherche Identifiant utilisateur en cours et etat de connection
186
	 * Recherche Identifiant utilisateur en cours et etat de connection
97
	 * @return Utilisateur
187
	 * @return Utilisateur
98
	 */
188
	 */
99
	
189
	
100
	
190
	
101
	public Utilisateur getUtilisateur() {
191
	public Utilisateur getUtilisateur() {
102
		return utilisateur;
192
		return utilisateur;
103
	}
193
	}
104
 
194
 
105
	/**
195
	/**
106
	 * Deconnecte l'utilisateur passe en parametre
196
	 * Deconnecte l'utilisateur passe en parametre
107
	 */
197
	 */
108
    public void deconnecterUtilisateur() {
198
    public void deconnecterUtilisateur() {
109
 
199
 
110
			
200
			
111
			carnetEnLigneModele.deconnecterUtilisateur(
-
 
112
					new iRetourUtilisateur() {
-
 
113
						public void onRetour(Utilisateur uti) {
-
 
114
							utilisateur=uti;
-
 
115
							//fireEvent(DECONNEXION); 
-
 
116
						}
-
 
117
 
-
 
118
						
-
 
119
					}, utilisateur.getIdentifiant()
-
 
120
					
-
 
121
			);
201
		carnetEnLigneModele.deconnecterUtilisateur(this, utilisateur.getIdentifiant());
122
 
202
 
123
		
203
		
124
		
204
		
125
	}
205
	}
126
 
206
 
127
	public void connecterUtilisateur(String login, String password) {
207
	public void connecterUtilisateur(String login, String password) {
128
	
-
 
129
		carnetEnLigneModele.connecterUtilisateur(
208
	
130
				new iRetourUtilisateur() {
209
		tentativeConnection=true;
131
					public void onRetour(Utilisateur uti) {
-
 
132
						utilisateur=uti;
-
 
133
						//fireEvent(CONNEXION); 
-
 
134
					}
-
 
135
 
-
 
136
					
-
 
137
				}, login, password 
-
 
138
				
210
		carnetEnLigneModele.connecterUtilisateur(this, login, password); 
139
		);
211
				
140
 
212
 
141
		
213
		
142
	}
214
	}
143
 
215
 
-
 
216
 
-
 
217
	
-
 
218
	/**
-
 
219
	 *  Affichage etat de la connexion
-
 
220
	 */
-
 
221
	
-
 
222
	
-
 
223
	private void afficheEtatConnexion() {
-
 
224
		 
-
 
225
		
-
 
226
		if (!utilisateur.isIdentifie()) {
-
 
227
			   etatConnexionVue.setEtat(texteDeconnexion,false);
-
 
228
		}
-
 
229
		else {
-
 
230
		      etatConnexionVue.setEtat(utilisateur.getIdentifiant()+ " (deconnexion)",true);
-
 
231
		}
-
 
232
		
-
 
233
	}
-
 
234
 
-
 
235
	
-
 
236
	/**
-
 
237
	 * 
-
 
238
	 * Affichage boite de connexion
-
 
239
	 *
-
 
240
	 */
-
 
241
	
-
 
242
	
-
 
243
	public void afficherDialogueConnexion() {
-
 
244
		
-
 
245
		  if (formulaireDeConnexionVue==null) { 
-
 
246
			  formulaireDeConnexionVue= new FormulaireDeConnexionVue(this);
-
 
247
		  }
-
 
248
		  
-
 
249
		  // Position it roughly in the middle of the screen.
-
 
250
		  int left = (Window.getClientWidth() - 512) / 2;
-
 
251
		  int top = (Window.getClientHeight() - 256) / 2;
-
 
252
		  
-
 
253
		  
-
 
254
		  formulaireDeConnexionVue.setPopupPosition(left, top);
-
 
255
		  formulaireDeConnexionVue.show();
-
 
256
		
-
 
257
	}
-
 
258
 
-
 
259
 
-
 
260
	
-
 
261
 
-
 
262
	public Panel getPanneauPrincipalCarnetEnLigne() {
-
 
263
		return panneauPrincipalCarnetEnLigne;
-
 
264
	}
-
 
265
 
-
 
266
	
-
 
267
//	 TODO : repandre rafraichissement
-
 
268
 
-
 
269
	public void rafraichir(Object nouvelleDonnees, boolean repandreRaffraichissement) {
-
 
270
 
-
 
271
			if (nouvelleDonnees instanceof Utilisateur) {
-
 
272
							      
-
 
273
				utilisateur = (Utilisateur) nouvelleDonnees;
-
 
274
								
-
 
275
				afficheEtatConnexion();
-
 
276
				
-
 
277
				if ((tentativeConnection) && !utilisateur.isIdentifie()) {
-
 
278
			
-
 
279
					formulaireDeConnexionVue.afficherMessageAlerte();
-
 
280
				}
-
 
281
				else {
-
 
282
					if ((tentativeConnection) && utilisateur.isIdentifie()) {						
-
 
283
						formulaireDeConnexionVue.hide();
-
 
284
					}
-
 
285
				}
-
 
286
				
-
 
287
 
-
 
288
				
-
 
289
			// On lance l'affichage des observations
-
 
290
				
-
 
291
				observationMediateur.obtenirNombreObservation();
-
 
292
 
-
 
293
			}
144
 
294
 
-
 
295
	}
-
 
296
 
-
 
297
		
145
}
298
 
146
 
299
}