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;
138 aurelien 5
import org.tela_botanica.client.modeles.Configuration;
2 aperonnet 6
import org.tela_botanica.client.modeles.Utilisateur;
12 david 7
 
2 aperonnet 8
import org.tela_botanica.client.observation.ObservationMediateur;
12 david 9
import org.tela_botanica.client.vues.EtatConnexionVue;
10
import org.tela_botanica.client.vues.FormulaireDeConnexionVue;
140 aurelien 11
import org.tela_botanica.client.vues.ListeUtilisateurAdminVue;
2 aperonnet 12
 
138 aurelien 13
import com.google.gwt.core.client.JavaScriptObject;
14
import com.google.gwt.user.client.DOM;
15
import com.google.gwt.user.client.Event;
16
import com.google.gwt.user.client.Timer;
12 david 17
import com.google.gwt.user.client.Window;
101 jpm 18
import com.google.gwt.user.client.ui.Image;
140 aurelien 19
import com.gwtext.client.core.EventCallback;
138 aurelien 20
import com.gwtext.client.core.EventObject;
140 aurelien 21
import com.gwtext.client.core.Ext;
22
import com.gwtext.client.core.ExtElement;
101 jpm 23
import com.gwtext.client.core.Function;
67 jpm 24
import com.gwtext.client.widgets.BoxComponent;
138 aurelien 25
import com.gwtext.client.widgets.Component;
26
import com.gwtext.client.widgets.Container;
12 david 27
import com.gwtext.client.widgets.Panel;
53 david 28
import com.gwtext.client.widgets.TabPanel;
101 jpm 29
import com.gwtext.client.widgets.Tool;
138 aurelien 30
import com.gwtext.client.widgets.ToolTip;
31
import com.gwtext.client.widgets.event.ContainerListener;
32
import com.gwtext.client.widgets.event.ContainerListenerAdapter;
33
import com.gwtext.client.widgets.event.PanelListener;
67 jpm 34
import com.gwtext.client.widgets.event.PanelListenerAdapter;
27 jpm 35
import com.gwtext.client.widgets.layout.FitLayout;
36 jpm 36
import com.gwtext.client.widgets.layout.RowLayout;
37
import com.gwtext.client.widgets.layout.RowLayoutData;
2 aperonnet 38
 
12 david 39
/**
40
 * Mediateur gérant les interactions entre vues et les echanges de données
41
 * C'est un singleton.
42
 * @author david delon
43
 *
44
 */
7 aperonnet 45
 
12 david 46
public class CarnetEnLigneMediateur implements Rafraichissable {
47
 
48
 
49
	/**
50
	 * booleen qui verifie l'unicite de l'instance
51
	 */
31 jpm 52
	private static boolean estInstancie = false ;
53
 
12 david 54
	/**
31 jpm 55
	 * pointeur vers le médiateur lui même (pour le pattern singleton)
56
	 */
57
	private static CarnetEnLigneMediateur thisMediateur = null ;
58
 
59
	/**
12 david 60
	 * modele de données
61
	 */
62
 
63
	private  CarnetEnLigneModele carnetEnLigneModele=null;
7 aperonnet 64
 
12 david 65
 
66
	/**
67
	 * panneau principal de l'application "Carnet en ligne"
68
	 */
2 aperonnet 69
 
31 jpm 70
	private Panel panneauPrincipalCarnetEnLigne= null ;
12 david 71
 
72
 
73
 
74
	/**
75
	 * panneau a onglet pour les observation et les images
76
	 */
77
 
78
 
27 jpm 79
	private com.gwtext.client.widgets.TabPanel ongletsObservationsImages=null;
12 david 80
 
81
 
82
	/**
83
	 * Indicateur d'etat de la connexion utilisateur
84
	 */
85
 
86
	private EtatConnexionVue etatConnexionVue=null;
87
 
27 jpm 88
 
12 david 89
	/**
90
	 * Texte d'invite connexion
91
	 */
92
	private final String texteDeconnexion="Utilisez ce carnet en ligne pour saisir vos observations, <u>identifiez-vous</u> pour les transmettre à Tela Botanica";
7 aperonnet 93
 
12 david 94
	/**
95
	 * Boolean indiquant un essai de connexion
96
	 */
97
 
98
	private boolean tentativeConnection=false;
99
 
7 aperonnet 100
 
2 aperonnet 101
	/**
12 david 102
	 *  Formulaire de connexion (lazy instantiation)
103
	 *
2 aperonnet 104
	 */
12 david 105
 
106
	private FormulaireDeConnexionVue formulaireDeConnexionVue=null;
107
 
101 jpm 108
	/**
109
	 *
110
	 */
111
	private Panel bandeau = null ;
12 david 112
 
140 aurelien 113
	private Panel panneauAdmin = null ;
114
 
138 aurelien 115
	Tool cacherPanneau = null ;
101 jpm 116
 
12 david 117
	/**
118
	 * Mediateur Gestion des images
119
	 */
120
 
121
	private ImageMediateur imageMediateur=null;
122
 
123
	/**
124
	 * Mediateur Gestion des observations
125
	 */
126
 
127
	private ObservationMediateur observationMediateur=null;
128
 
138 aurelien 129
	/**
130
	 * Un tooltip pour l'aide
131
	 */
132
	private ToolTip tp = new ToolTip() ;
2 aperonnet 133
 
7 aperonnet 134
 
12 david 135
	/**
136
	 * Utilisateur en cours
137
	 */
7 aperonnet 138
 
12 david 139
 
140
	private Utilisateur utilisateur=null;
141
 
7 aperonnet 142
 
12 david 143
 
144
	public static CarnetEnLigneMediateur Instance()
145
	{
31 jpm 146
			if(!estInstancie || thisMediateur==null)
12 david 147
			{
148
				estInstancie = true ;
31 jpm 149
				thisMediateur = new CarnetEnLigneMediateur() ;
12 david 150
			}
31 jpm 151
 
152
			return thisMediateur ;
153
 
12 david 154
	}
155
 
156
 
157
	/**
158
	 * constructeur privé (on accède a la classe par la méthode getInstance
159
	 */
160
 
161
	private CarnetEnLigneMediateur() {
162
 
163
 
31 jpm 164
		panneauPrincipalCarnetEnLigne = new Panel("Carnet en ligne");
165
 
12 david 166
//		Disposition
167
 
36 jpm 168
		panneauPrincipalCarnetEnLigne.setLayout(new RowLayout());
7 aperonnet 169
 
12 david 170
 
171
//		On crée un modèle d'acces aux donnnes
172
 
173
		carnetEnLigneModele=CarnetEnLigneModele.Instance();
174
 
101 jpm 175
 
176
		//Image bandeau = new Image("Bandeau-haut.gif") ;
138 aurelien 177
		bandeau = new Panel();
178
		Image logoND = new Image("logo_n_d.gif") ;
179
		logoND.setStylePrimaryName("x-img-logo_nd") ;
180
		final Image img = new Image("bandeau-haut.gif") {
181
			public void onBrowserEvent(Event e) {
182
 
183
				if(DOM.eventGetType(e) == Event.ONCLICK)
184
				{
185
					bandeau.toggleCollapse(true);
186
				}
187
				if(DOM.eventGetType(e) == Event.ONMOUSEOVER) {
188
					tp.setHtml("<div class=\"x-tooltip-help\"> Cliquez sur l'image ou sur la flèche en haut à droite pour replier le panneau </div>");
189
					tp.showAt(0,0);
190
				}
191
 
192
 
193
				if(DOM.eventGetType(e) == Event.ONMOUSEOUT) {
194
					if(tp.isVisible()) {
195
						tp.hide();
196
					}
197
				}
198
			}
199
		};
200
		bandeau.add(img) ;
201
		img.setSize("50%", "100%");
202
		bandeau.add(logoND) ;
203
		logoND.setSize("10%", "100%");
101 jpm 204
		bandeau.setId("x-up-bandeau") ;
205
		bandeau.setBorder(false) ;
12 david 206
		// La vue affichant le statut de la connexion
138 aurelien 207
		bandeau.setSize("60%","80%") ;
12 david 208
		etatConnexionVue=new EtatConnexionVue(this);
36 jpm 209
		etatConnexionVue.setLayout(new FitLayout()) ;
12 david 210
 
211
		// Le panneau à onglet qui contient les 2 applications Observation et Images
212
 
53 david 213
		ongletsObservationsImages = new TabPanel();
12 david 214
 
36 jpm 215
		panneauPrincipalCarnetEnLigne.add(etatConnexionVue,new RowLayoutData(20));
138 aurelien 216
		panneauPrincipalCarnetEnLigne.add(bandeau, new RowLayoutData("10%")) ;
12 david 217
 
138 aurelien 218
		img.sinkEvents(Event.ONCLICK);
219
		img.sinkEvents(Event.ONMOUSEOVER);
220
		img.sinkEvents(Event.ONMOUSEOUT);
221
 
12 david 222
		//	on ajoute le panneau a onglet au panneau principal
138 aurelien 223
		cacherPanneau = new Tool(Tool.TOGGLE, new Function() {
101 jpm 224
 
225
			public void execute() {
67 jpm 226
 
101 jpm 227
				if(!bandeau.isCollapsed()) {
228
					bandeau.toggleCollapse(true) ;
229
				}
230
				else {
231
					bandeau.toggleCollapse(true) ;
232
				}
233
 
67 jpm 234
			}
235
 
138 aurelien 236
		}) ;
101 jpm 237
 
140 aurelien 238
		panneauAdmin = new Panel();
239
		panneauPrincipalCarnetEnLigne.add(panneauAdmin, new RowLayoutData(20));
240
		panneauAdmin.setBorder(false);
241
		panneauAdmin.hide();
138 aurelien 242
 
243
		panneauPrincipalCarnetEnLigne.add(ongletsObservationsImages);
244
		panneauPrincipalCarnetEnLigne.addTool(cacherPanneau) ;
245
 
246
		panneauPrincipalCarnetEnLigne.setAutoScroll(true);
247
 
12 david 248
		// On ajoute les applications
249
		observationMediateur = ObservationMediateur.Instance(this);
30 jpm 250
		imageMediateur= ImageMediateur.Instance(this);
12 david 251
 
53 david 252
		//temp dd viewport desactive ajout de cette  ligne
67 jpm 253
		getPanneauPrincipalCarnetEnLigne().setHeight(Window.getClientHeight()) ;
53 david 254
 
31 jpm 255
		//	on ajoute les panneaux  principaux des applications au panneau à onglets
37 jpm 256
		ongletsObservationsImages.add(observationMediateur.getPanneauPrincipalObservation());
101 jpm 257
		ongletsObservationsImages.add(imageMediateur.getPanneauPrincipalImage());
2 aperonnet 258
	}
12 david 259
 
260
 
261
	public void getEtatUtilisateur() {
262
 
263
 
264
		carnetEnLigneModele.getEtatUtilisateur(this);
265
 
266
 
267
	}
2 aperonnet 268
 
7 aperonnet 269
 
2 aperonnet 270
	// Methode publiques
12 david 271
 
272
 
273
 
2 aperonnet 274
	/**
275
	 * Recherche Identifiant utilisateur en cours et etat de connection
276
	 * @return Utilisateur
277
	 */
12 david 278
 
279
 
2 aperonnet 280
	public Utilisateur getUtilisateur() {
281
		return utilisateur;
282
	}
283
 
284
	/**
285
	 * Deconnecte l'utilisateur passe en parametre
286
	 */
12 david 287
    public void deconnecterUtilisateur() {
2 aperonnet 288
 
138 aurelien 289
    	// TODO: vider proprement toutes les vues (méthode à voir)
12 david 290
		carnetEnLigneModele.deconnecterUtilisateur(this, utilisateur.getIdentifiant());
291
 
138 aurelien 292
		observationMediateur.deconnecterUtilisateur() ;
140 aurelien 293
		imageMediateur.deconnecterUtilisateur();
12 david 294
	}
2 aperonnet 295
 
12 david 296
	public void connecterUtilisateur(String login, String password) {
297
 
298
		tentativeConnection=true;
299
		carnetEnLigneModele.connecterUtilisateur(this, login, password);
300
 
2 aperonnet 301
	}
302
 
303
 
12 david 304
 
305
	/**
306
	 *  Affichage etat de la connexion
307
	 */
308
 
309
 
310
	private void afficheEtatConnexion() {
311
 
312
 
313
		if (!utilisateur.isIdentifie()) {
140 aurelien 314
			   etatConnexionVue.setEtat("",false);
12 david 315
		}
316
		else {
140 aurelien 317
			if(utilisateur.isAdmin()) {
318
		    	  afficherLienAdmin();
141 aurelien 319
		    }
320
 
321
			panneauAdmin.setVisible(utilisateur.isAdmin());
322
		    etatConnexionVue.setEtat(utilisateur.getIdentifiant(),true);
140 aurelien 323
 
12 david 324
		}
325
 
326
	}
7 aperonnet 327
 
12 david 328
 
329
	/**
330
	 *
331
	 * Affichage boite de connexion
332
	 *
333
	 */
334
 
335
 
336
	public void afficherDialogueConnexion() {
337
 
338
		  if (formulaireDeConnexionVue==null) {
339
			  formulaireDeConnexionVue= new FormulaireDeConnexionVue(this);
340
		  }
341
 
101 jpm 342
		  // On le positionne à peu près au milieu de l'écran
12 david 343
		  int left = (Window.getClientWidth() - 512) / 2;
344
		  int top = (Window.getClientHeight() - 256) / 2;
345
 
346
		  formulaireDeConnexionVue.setPopupPosition(left, top);
347
		  formulaireDeConnexionVue.show();
348
 
349
	}
7 aperonnet 350
 
2 aperonnet 351
 
12 david 352
 
353
 
354
	public Panel getPanneauPrincipalCarnetEnLigne() {
355
		return panneauPrincipalCarnetEnLigne;
2 aperonnet 356
	}
357
 
12 david 358
 
359
//	 TODO : repandre rafraichissement
360
 
361
	public void rafraichir(Object nouvelleDonnees, boolean repandreRaffraichissement) {
362
 
363
			if (nouvelleDonnees instanceof Utilisateur) {
364
 
365
				utilisateur = (Utilisateur) nouvelleDonnees;
366
 
367
				afficheEtatConnexion();
368
 
369
				if ((tentativeConnection) && !utilisateur.isIdentifie()) {
141 aurelien 370
 
371
					panneauAdmin.setVisible(false);
38 jpm 372
					//formulaireDeConnexionVue.afficherMessageAlerte();
12 david 373
				}
374
				else {
375
					if ((tentativeConnection) && utilisateur.isIdentifie()) {
376
						formulaireDeConnexionVue.hide();
377
					}
378
				}
379
 
380
			// On lance l'affichage des observations
140 aurelien 381
				observationMediateur.connecterUtilisateur();
382
				imageMediateur.connecterUtilisateur();
12 david 383
 
384
			}
385
 
386
	}
387
 
61 jpm 388
 
389
	public void obtenirListeObservations(Rafraichissable r) {
12 david 390
 
101 jpm 391
		observationMediateur.obtenirCacheObservation(r) ;
61 jpm 392
 
393
	}
12 david 394
 
67 jpm 395
 
396
	public void donneesRafraichies(Object nouvelleDonnees) {
61 jpm 397
 
67 jpm 398
		imageMediateur.donneesExterieures(nouvelleDonnees) ;
399
 
400
	}
61 jpm 401
 
140 aurelien 402
 
403
	public void afficherListeUtilisateurs() {
67 jpm 404
 
140 aurelien 405
		ListeUtilisateurAdminVue listeUtilisateur = new ListeUtilisateurAdminVue(this) ;
406
		listeUtilisateur.show(Ext.get("LienChangerUtilisateur").getDOM());
407
 
408
	}
409
 
410
	public void afficherLienAdmin() {
67 jpm 411
 
141 aurelien 412
		String labelAdmin = "<div id=\"lienAdmin\">Vous consultez les données de "+utilisateur.getIdentite()+"  <a id=\"LienChangerUtilisateur\" href=\"#\">Changer d'utilisateur</a></div>" ;
140 aurelien 413
		panneauAdmin.setHtml(labelAdmin);
414
 
415
		ExtElement lienChangerUt = Ext.get("LienChangerUtilisateur");
416
		if(lienChangerUt != null)
417
		{
141 aurelien 418
			lienChangerUt.removeAllListeners();
140 aurelien 419
			lienChangerUt.addListener("click", new EventCallback() {
420
 
421
				public void execute(EventObject e) {
422
					afficherListeUtilisateurs();
423
				}
424
 
425
			});
426
		}
427
		else
428
		{
429
			panneauAdmin.addListener(new ContainerListenerAdapter()
430
			{
431
				public void onAfterLayout(Container c)
432
				{
433
					ExtElement lienChangerUt = Ext.get("LienChangerUtilisateur");
141 aurelien 434
					lienChangerUt.removeAllListeners();
140 aurelien 435
					lienChangerUt.addListener("click", new EventCallback() {
436
 
437
						public void execute(EventObject e) {
438
							afficherListeUtilisateurs();
439
						}
440
 
441
					});
442
				}
443
			});
444
		}
445
	}
446
 
447
	public void changerIdentite(String nouvelleIdentite) {
448
		utilisateur.setIdentite(nouvelleIdentite);
449
		afficherLienAdmin();
450
		observationMediateur.connecterUtilisateur();
451
		imageMediateur.connecterUtilisateur();
452
	}
453
 
141 aurelien 454
 
455
	public void obtenirListeUtilisateurs(String rech, Rafraichissable r) {
456
		carnetEnLigneModele.obtenirListeUtilisateur(r,rech,utilisateur.getIdentifiant());
457
	}
458
 
12 david 459
}