Subversion Repositories eFlore/Applications.cel

Rev

Rev 61 | Rev 71 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

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