Subversion Repositories eFlore/Applications.cel

Rev

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