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;
989 aurelien 5
import org.tela_botanica.client.modeles.objets.Utilisateur;
2 aperonnet 6
import org.tela_botanica.client.observation.ObservationMediateur;
12 david 7
import org.tela_botanica.client.vues.EtatConnexionVue;
597 aurelien 8
import org.tela_botanica.client.vues.FenetreLicenceVue;
12 david 9
import org.tela_botanica.client.vues.FormulaireDeConnexionVue;
140 aurelien 10
import org.tela_botanica.client.vues.ListeUtilisateurAdminVue;
2 aperonnet 11
 
303 aurelien 12
import com.google.gwt.core.client.GWT;
405 aurelien 13
import com.google.gwt.user.client.Timer;
12 david 14
import com.google.gwt.user.client.Window;
140 aurelien 15
import com.gwtext.client.core.EventCallback;
138 aurelien 16
import com.gwtext.client.core.EventObject;
140 aurelien 17
import com.gwtext.client.core.Ext;
18
import com.gwtext.client.core.ExtElement;
303 aurelien 19
import com.gwtext.client.widgets.BoxComponent;
138 aurelien 20
import com.gwtext.client.widgets.Container;
12 david 21
import com.gwtext.client.widgets.Panel;
53 david 22
import com.gwtext.client.widgets.TabPanel;
101 jpm 23
import com.gwtext.client.widgets.Tool;
138 aurelien 24
import com.gwtext.client.widgets.event.ContainerListenerAdapter;
405 aurelien 25
import com.gwtext.client.widgets.event.TabPanelListenerAdapter;
27 jpm 26
import com.gwtext.client.widgets.layout.FitLayout;
36 jpm 27
import com.gwtext.client.widgets.layout.RowLayout;
28
import com.gwtext.client.widgets.layout.RowLayoutData;
2 aperonnet 29
 
12 david 30
/**
31
 * Mediateur gérant les interactions entre vues et les echanges de données
32
 * C'est un singleton.
33
 * @author david delon
34
 *
35
 */
7 aperonnet 36
 
12 david 37
public class CarnetEnLigneMediateur implements Rafraichissable {
38
 
39
 
40
	/**
41
	 * booleen qui verifie l'unicite de l'instance
42
	 */
31 jpm 43
	private static boolean estInstancie = false ;
44
 
12 david 45
	/**
31 jpm 46
	 * pointeur vers le médiateur lui même (pour le pattern singleton)
47
	 */
48
	private static CarnetEnLigneMediateur thisMediateur = null ;
49
 
50
	/**
12 david 51
	 * modele de données
52
	 */
53
 
54
	private  CarnetEnLigneModele carnetEnLigneModele=null;
7 aperonnet 55
 
12 david 56
 
57
	/**
58
	 * panneau principal de l'application "Carnet en ligne"
59
	 */
2 aperonnet 60
 
31 jpm 61
	private Panel panneauPrincipalCarnetEnLigne= null ;
12 david 62
 
63
 
64
 
65
	/**
66
	 * panneau a onglet pour les observation et les images
67
	 */
68
 
69
 
27 jpm 70
	private com.gwtext.client.widgets.TabPanel ongletsObservationsImages=null;
12 david 71
 
72
 
73
	/**
74
	 * Indicateur d'etat de la connexion utilisateur
75
	 */
76
 
77
	private EtatConnexionVue etatConnexionVue=null;
78
 
27 jpm 79
 
12 david 80
	/**
81
	 * Texte d'invite connexion
82
	 */
83
	private final String texteDeconnexion="Utilisez ce carnet en ligne pour saisir vos observations, <u>identifiez-vous</u> pour les transmettre à Tela Botanica";
7 aperonnet 84
 
12 david 85
	/**
86
	 * Boolean indiquant un essai de connexion
87
	 */
88
 
89
	private boolean tentativeConnection=false;
90
 
597 aurelien 91
	/**
92
	 * Booleen indique que la licence a été acceptée
93
	 */
94
	private boolean licenceUtilisateurAcceptee = false;
95
 
7 aperonnet 96
 
2 aperonnet 97
	/**
12 david 98
	 *  Formulaire de connexion (lazy instantiation)
99
	 *
2 aperonnet 100
	 */
12 david 101
 
102
	private FormulaireDeConnexionVue formulaireDeConnexionVue=null;
103
 
101 jpm 104
	/**
105
	 *
106
	 */
107
	private Panel bandeau = null ;
12 david 108
 
140 aurelien 109
	private Panel panneauAdmin = null ;
110
 
138 aurelien 111
	Tool cacherPanneau = null ;
101 jpm 112
 
597 aurelien 113
	private FenetreLicenceVue fenetreAcceptationLicence = null;
114
 
12 david 115
	/**
116
	 * Mediateur Gestion des images
117
	 */
118
 
119
	private ImageMediateur imageMediateur=null;
120
 
121
	/**
122
	 * Mediateur Gestion des observations
123
	 */
124
 
125
	private ObservationMediateur observationMediateur=null;
126
 
138 aurelien 127
	/**
12 david 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") ;
12 david 169
		etatConnexionVue=new EtatConnexionVue(this);
36 jpm 170
		etatConnexionVue.setLayout(new FitLayout()) ;
12 david 171
 
172
		// Le panneau à onglet qui contient les 2 applications Observation et Images
173
 
53 david 174
		ongletsObservationsImages = new TabPanel();
12 david 175
 
223 aurelien 176
		panneauPrincipalCarnetEnLigne.add(etatConnexionVue,new RowLayoutData(16));
12 david 177
 
140 aurelien 178
		panneauAdmin = new Panel();
223 aurelien 179
		panneauAdmin.setId("panneau_admin");
180
		panneauPrincipalCarnetEnLigne.add(panneauAdmin, new RowLayoutData(16));
140 aurelien 181
		panneauAdmin.setBorder(false);
182
		panneauAdmin.hide();
138 aurelien 183
 
223 aurelien 184
		panneauPrincipalCarnetEnLigne.add(ongletsObservationsImages,new RowLayoutData());
303 aurelien 185
		//panneauPrincipalCarnetEnLigne.addTool(cacherPanneau) ;
138 aurelien 186
 
201 david 187
 
138 aurelien 188
 
12 david 189
		// On ajoute les applications
190
		observationMediateur = ObservationMediateur.Instance(this);
30 jpm 191
		imageMediateur= ImageMediateur.Instance(this);
12 david 192
 
303 aurelien 193
		if(!GWT.isScript()) {
194
			//temp dd viewport desactive ajout de cette  ligne
195
			getPanneauPrincipalCarnetEnLigne().setHeight(Window.getClientHeight()) ;
196
		}
53 david 197
 
303 aurelien 198
		panneauPrincipalCarnetEnLigne.addListener(new ContainerListenerAdapter() {
199
 
200
			@Override
201
			public void onResize(BoxComponent component, int adjWidth,
202
					int adjHeight, int rawWidth, int rawHeight) {
318 aurelien 203
				CarnetEnLigneMediateur.fireResize();
204
				observationMediateur.redimensionnerPanneaux(adjHeight, adjWidth);
303 aurelien 205
 
206
			}
207
		});
208
 
405 aurelien 209
		ongletsObservationsImages.addListener(new TabPanelListenerAdapter() {
210
 
1287 aurelien 211
			@Override
405 aurelien 212
			public void onTabChange(TabPanel source, Panel tab) {
213
				if(tab.equals(imageMediateur.getPanneauPrincipalImage())) {
214
 
215
					Timer t = new Timer() {
216
 
1287 aurelien 217
						@Override
405 aurelien 218
						public void run() {
219
							imageMediateur.obtenirNombreMiniListeObservations();
220
							imageMediateur.rafraichirToutesVues();
221
						}
222
					};
223
 
224
					t.schedule(150);
225
				}
226
			}
227
		});
228
 
31 jpm 229
		//	on ajoute les panneaux  principaux des applications au panneau à onglets
37 jpm 230
		ongletsObservationsImages.add(observationMediateur.getPanneauPrincipalObservation());
101 jpm 231
		ongletsObservationsImages.add(imageMediateur.getPanneauPrincipalImage());
2 aperonnet 232
	}
12 david 233
 
234
 
235
	public void getEtatUtilisateur() {
178 david 236
 
12 david 237
 
238
		carnetEnLigneModele.getEtatUtilisateur(this);
239
 
240
 
241
	}
2 aperonnet 242
 
7 aperonnet 243
 
2 aperonnet 244
	// Methode publiques
12 david 245
 
246
 
247
 
2 aperonnet 248
	/**
249
	 * Recherche Identifiant utilisateur en cours et etat de connection
250
	 * @return Utilisateur
251
	 */
12 david 252
 
253
 
2 aperonnet 254
	public Utilisateur getUtilisateur() {
255
		return utilisateur;
256
	}
257
 
258
	/**
259
	 * Deconnecte l'utilisateur passe en parametre
260
	 */
12 david 261
    public void deconnecterUtilisateur() {
597 aurelien 262
 
263
    	licenceUtilisateurAcceptee = false;
264
 
138 aurelien 265
    	// TODO: vider proprement toutes les vues (méthode à voir)
937 aurelien 266
		carnetEnLigneModele.deconnecterUtilisateur(this, Utilisateur.getInstance().getIdentifiantUtilisateurConsulte());
12 david 267
 
138 aurelien 268
		observationMediateur.deconnecterUtilisateur() ;
140 aurelien 269
		imageMediateur.deconnecterUtilisateur();
159 aurelien 270
 
271
		panneauAdmin.setVisible(false);
12 david 272
	}
2 aperonnet 273
 
12 david 274
	public void connecterUtilisateur(String login, String password) {
275
 
276
		tentativeConnection=true;
277
		carnetEnLigneModele.connecterUtilisateur(this, login, password);
278
 
2 aperonnet 279
	}
280
 
281
 
12 david 282
 
283
	/**
284
	 *  Affichage etat de la connexion
285
	 */
286
 
287
 
288
	private void afficheEtatConnexion() {
289
 
290
		if (!utilisateur.isIdentifie()) {
140 aurelien 291
			   etatConnexionVue.setEtat("",false);
12 david 292
		}
293
		else {
140 aurelien 294
			if(utilisateur.isAdmin()) {
244 aurelien 295
		    	afficherLienAdmin();
296
				panneauAdmin.setVisible(true);
297
		    } else {
298
		    	cacherLienAdmin();
141 aurelien 299
		    }
300
 
937 aurelien 301
		    etatConnexionVue.setEtat(Utilisateur.getInstance().getLoginUtilisateurConsulte(),true);
140 aurelien 302
 
12 david 303
		}
304
 
305
	}
597 aurelien 306
 
307
	private void afficherFenetreAcceptationLicence()  {
308
 
309
		fenetreAcceptationLicence = new FenetreLicenceVue(this);
310
 
311
		// On le positionne à peu près au milieu de l'écran
312
		int left = (Window.getClientWidth() - 512) / 2;
313
		int top = (Window.getClientHeight() - 256) / 5;
314
 
315
		fenetreAcceptationLicence.setPosition(left, top);
651 aurelien 316
		fenetreAcceptationLicence.setHeight(350);
597 aurelien 317
		fenetreAcceptationLicence.setWidth(550);
318
		fenetreAcceptationLicence.setModal(true);
319
		fenetreAcceptationLicence.show();
320
	}
7 aperonnet 321
 
12 david 322
 
323
	/**
324
	 *
325
	 * Affichage boite de connexion
326
	 *
327
	 */
328
 
329
 
330
	public void afficherDialogueConnexion() {
331
 
332
		  if (formulaireDeConnexionVue==null) {
333
			  formulaireDeConnexionVue= new FormulaireDeConnexionVue(this);
334
		  }
335
 
101 jpm 336
		  // On le positionne à peu près au milieu de l'écran
12 david 337
		  int left = (Window.getClientWidth() - 512) / 2;
338
		  int top = (Window.getClientHeight() - 256) / 2;
339
 
340
		  formulaireDeConnexionVue.setPopupPosition(left, top);
341
		  formulaireDeConnexionVue.show();
342
 
343
	}
7 aperonnet 344
 
12 david 345
	public Panel getPanneauPrincipalCarnetEnLigne() {
346
		return panneauPrincipalCarnetEnLigne;
2 aperonnet 347
	}
348
 
1287 aurelien 349
	@Override
12 david 350
	public void rafraichir(Object nouvelleDonnees, boolean repandreRaffraichissement) {
351
 
352
			if (nouvelleDonnees instanceof Utilisateur) {
353
 
354
				utilisateur = (Utilisateur) nouvelleDonnees;
355
 
356
				if ((tentativeConnection) && !utilisateur.isIdentifie()) {
141 aurelien 357
 
358
					panneauAdmin.setVisible(false);
173 aurelien 359
					formulaireDeConnexionVue.afficherMessageAlerte();
12 david 360
				}
361
				else {
223 aurelien 362
					if ((tentativeConnection) && utilisateur.isIdentifie()) {
244 aurelien 363
						afficherLienAdmin();
173 aurelien 364
						formulaireDeConnexionVue.cacher();
12 david 365
					}
366
				}
597 aurelien 367
 
368
				if(utilisateur.isIdentifie() && !utilisateur.getLicenceAcceptee()) {
369
					afficherFenetreAcceptationLicence();
370
				} else {
651 aurelien 371
 
372
				  if(tentativeConnection && utilisateur.isIdentifie() && observationMediateur.listeAvoirObservations() && !utilisateur.isAdmin()) {
373
					  if(Window.confirm("Voulez vous importer vos observations déjà saisies dans votre compte une fois connecté ?")) {
374
						  observationMediateur.setImporterObservationsAnonymes(true);
375
					  }
376
				  }
597 aurelien 377
 
651 aurelien 378
				  afficheEtatConnexion();
379
				  // On lance l'affichage des observations
380
				  observationMediateur.connecterUtilisateur();
381
				  imageMediateur.connecterUtilisateur();
597 aurelien 382
 
383
				}
384
			}
385
 
386
			if(nouvelleDonnees instanceof String) {
387
 
388
				String evenement = (String)nouvelleDonnees;
389
 
390
				if(evenement.equals("licence_acceptee")) {
391
					licenceUtilisateurAcceptee = true;
392
					accepterLicenceUtilisateur();
393
				} else {
394
					if(utilisateur.isIdentifie()) {
395
						deconnecterUtilisateur();
396
						return;
397
					}
398
				}
399
 
651 aurelien 400
				if(observationMediateur.listeAvoirObservations() && !utilisateur.isAdmin()) {
401
					if(Window.confirm("Voulez vous importer vos observations déjà saisies dans votre compte une fois connecté ?")) {
402
					  observationMediateur.setImporterObservationsAnonymes(true);
403
					}
404
				}
405
 
223 aurelien 406
				afficheEtatConnexion();
140 aurelien 407
				observationMediateur.connecterUtilisateur();
408
				imageMediateur.connecterUtilisateur();
597 aurelien 409
 
410
				fenetreAcceptationLicence.close();
12 david 411
			}
412
	}
597 aurelien 413
 
414
	private void accepterLicenceUtilisateur() {
415
		utilisateur.setLicenceAcceptee(true);
937 aurelien 416
		carnetEnLigneModele.accepterLicenceUtilisateur(Utilisateur.getInstance().getIdentifiantUtilisateurConsulte());
597 aurelien 417
	}
12 david 418
 
140 aurelien 419
	public void afficherListeUtilisateurs() {
67 jpm 420
 
140 aurelien 421
		ListeUtilisateurAdminVue listeUtilisateur = new ListeUtilisateurAdminVue(this) ;
422
		listeUtilisateur.show(Ext.get("LienChangerUtilisateur").getDOM());
256 aurelien 423
		listeUtilisateur.focusChampUtilisateur();
140 aurelien 424
 
425
	}
426
 
427
	public void afficherLienAdmin() {
67 jpm 428
 
937 aurelien 429
		String labelAdmin = "<div id=\"lienAdmin\">Vous consultez les données de "+Utilisateur.getInstance().getLoginUtilisateurConsulte()+"  <a id=\"LienChangerUtilisateur\" href=\"#\">Changer d'utilisateur</a></div>" ;
140 aurelien 430
		panneauAdmin.setHtml(labelAdmin);
431
 
432
		ExtElement lienChangerUt = Ext.get("LienChangerUtilisateur");
433
		if(lienChangerUt != null)
434
		{
141 aurelien 435
			lienChangerUt.removeAllListeners();
140 aurelien 436
			lienChangerUt.addListener("click", new EventCallback() {
437
 
1287 aurelien 438
				@Override
140 aurelien 439
				public void execute(EventObject e) {
440
					afficherListeUtilisateurs();
1287 aurelien 441
				}
140 aurelien 442
			});
443
		}
444
		else
445
		{
446
			panneauAdmin.addListener(new ContainerListenerAdapter()
447
			{
1287 aurelien 448
				@Override
140 aurelien 449
				public void onAfterLayout(Container c)
450
				{
451
					ExtElement lienChangerUt = Ext.get("LienChangerUtilisateur");
141 aurelien 452
					lienChangerUt.removeAllListeners();
140 aurelien 453
					lienChangerUt.addListener("click", new EventCallback() {
454
 
1287 aurelien 455
						@Override
140 aurelien 456
						public void execute(EventObject e) {
457
							afficherListeUtilisateurs();
458
						}
459
 
460
					});
461
				}
462
			});
463
		}
464
	}
465
 
244 aurelien 466
	public void cacherLienAdmin() {
467
		panneauAdmin.hide();
468
	}
469
 
937 aurelien 470
	public void changerIdentite(String idNouvelleIdentite, String loginNouvelleIdentite) {
471
		Utilisateur.getInstance().setUtilisateurConsulte(idNouvelleIdentite, loginNouvelleIdentite);
140 aurelien 472
		afficherLienAdmin();
473
		observationMediateur.connecterUtilisateur();
474
		imageMediateur.connecterUtilisateur();
475
	}
476
 
141 aurelien 477
	public void obtenirListeUtilisateurs(String rech, Rafraichissable r) {
937 aurelien 478
		carnetEnLigneModele.obtenirListeUtilisateur(r,rech,Utilisateur.getInstance().getIdentifiantUtilisateurConnecte());
141 aurelien 479
	}
480
 
159 aurelien 481
	public void donneesImagesVersObs(Object o) {
482
		observationMediateur.donneesExterieures(o);
483
	}
484
 
485
	public void donneesObsVersImages(Object o) {
486
		imageMediateur.donneesExterieures(o);
487
	}
488
 
489
	public void obtenirListeObservations(Rafraichissable r) {
490
		observationMediateur.obtenirCacheObservation(r) ;
491
	}
492
 
318 aurelien 493
 
494
	public static native void fireResize() /*-{
495
		 $wnd.Ext.EventManager.fireResize();
496
	}-*/;
497
 
12 david 498
}