Subversion Repositories eFlore/Applications.cel

Rev

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