Subversion Repositories eFlore/Applications.cel

Rev

Rev 1287 | 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
 
2615 aurelien 3
import org.tela_botanica.client.i18n.Msg;
2 aperonnet 4
import org.tela_botanica.client.image.ImageMediateur;
12 david 5
import org.tela_botanica.client.interfaces.Rafraichissable;
989 aurelien 6
import org.tela_botanica.client.modeles.objets.Utilisateur;
2 aperonnet 7
import org.tela_botanica.client.observation.ObservationMediateur;
12 david 8
import org.tela_botanica.client.vues.EtatConnexionVue;
597 aurelien 9
import org.tela_botanica.client.vues.FenetreLicenceVue;
12 david 10
import org.tela_botanica.client.vues.FormulaireDeConnexionVue;
140 aurelien 11
import org.tela_botanica.client.vues.ListeUtilisateurAdminVue;
2 aperonnet 12
 
303 aurelien 13
import com.google.gwt.core.client.GWT;
405 aurelien 14
import com.google.gwt.user.client.Timer;
12 david 15
import com.google.gwt.user.client.Window;
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;
303 aurelien 20
import com.gwtext.client.widgets.BoxComponent;
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.event.ContainerListenerAdapter;
405 aurelien 26
import com.gwtext.client.widgets.event.TabPanelListenerAdapter;
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
	 */
2615 aurelien 84
	private final String texteDeconnexion= Msg.get("cel-utilisation")+", <u>"+Msg.get("identifiez-vous")+"</u> "+Msg.get("pour-transmettre-tela");
7 aperonnet 85
 
12 david 86
	/**
87
	 * Boolean indiquant un essai de connexion
88
	 */
89
 
90
	private boolean tentativeConnection=false;
91
 
597 aurelien 92
	/**
93
	 * Booleen indique que la licence a été acceptée
94
	 */
95
	private boolean licenceUtilisateurAcceptee = false;
96
 
7 aperonnet 97
 
2 aperonnet 98
	/**
12 david 99
	 *  Formulaire de connexion (lazy instantiation)
100
	 *
2 aperonnet 101
	 */
12 david 102
 
103
	private FormulaireDeConnexionVue formulaireDeConnexionVue=null;
104
 
101 jpm 105
	/**
106
	 *
107
	 */
108
	private Panel bandeau = null ;
12 david 109
 
140 aurelien 110
	private Panel panneauAdmin = null ;
111
 
138 aurelien 112
	Tool cacherPanneau = null ;
101 jpm 113
 
597 aurelien 114
	private FenetreLicenceVue fenetreAcceptationLicence = null;
115
 
12 david 116
	/**
117
	 * Mediateur Gestion des images
118
	 */
119
 
120
	private ImageMediateur imageMediateur=null;
121
 
122
	/**
123
	 * Mediateur Gestion des observations
124
	 */
125
 
126
	private ObservationMediateur observationMediateur=null;
127
 
138 aurelien 128
	/**
12 david 129
	 * Utilisateur en cours
130
	 */
7 aperonnet 131
 
12 david 132
 
133
	private Utilisateur utilisateur=null;
134
 
7 aperonnet 135
 
12 david 136
 
137
	public static CarnetEnLigneMediateur Instance()
138
	{
31 jpm 139
			if(!estInstancie || thisMediateur==null)
12 david 140
			{
141
				estInstancie = true ;
31 jpm 142
				thisMediateur = new CarnetEnLigneMediateur() ;
12 david 143
			}
31 jpm 144
 
145
			return thisMediateur ;
146
 
12 david 147
	}
148
 
149
 
150
	/**
151
	 * constructeur privé (on accède a la classe par la méthode getInstance
152
	 */
153
 
154
	private CarnetEnLigneMediateur() {
155
 
156
 
31 jpm 157
		panneauPrincipalCarnetEnLigne = new Panel("Carnet en ligne");
158
 
12 david 159
//		Disposition
160
 
36 jpm 161
		panneauPrincipalCarnetEnLigne.setLayout(new RowLayout());
7 aperonnet 162
 
12 david 163
 
178 david 164
		// Pourrait etre fait plus loin ...
12 david 165
		carnetEnLigneModele=CarnetEnLigneModele.Instance();
166
 
101 jpm 167
 
138 aurelien 168
		bandeau = new Panel();
159 aurelien 169
		bandeau.setId("x-up-bandeau") ;
12 david 170
		etatConnexionVue=new EtatConnexionVue(this);
36 jpm 171
		etatConnexionVue.setLayout(new FitLayout()) ;
12 david 172
 
173
		// Le panneau à onglet qui contient les 2 applications Observation et Images
174
 
53 david 175
		ongletsObservationsImages = new TabPanel();
12 david 176
 
223 aurelien 177
		panneauPrincipalCarnetEnLigne.add(etatConnexionVue,new RowLayoutData(16));
12 david 178
 
140 aurelien 179
		panneauAdmin = new Panel();
223 aurelien 180
		panneauAdmin.setId("panneau_admin");
181
		panneauPrincipalCarnetEnLigne.add(panneauAdmin, new RowLayoutData(16));
140 aurelien 182
		panneauAdmin.setBorder(false);
183
		panneauAdmin.hide();
138 aurelien 184
 
223 aurelien 185
		panneauPrincipalCarnetEnLigne.add(ongletsObservationsImages,new RowLayoutData());
303 aurelien 186
		//panneauPrincipalCarnetEnLigne.addTool(cacherPanneau) ;
138 aurelien 187
 
201 david 188
 
138 aurelien 189
 
12 david 190
		// On ajoute les applications
191
		observationMediateur = ObservationMediateur.Instance(this);
30 jpm 192
		imageMediateur= ImageMediateur.Instance(this);
12 david 193
 
303 aurelien 194
		if(!GWT.isScript()) {
195
			//temp dd viewport desactive ajout de cette  ligne
196
			getPanneauPrincipalCarnetEnLigne().setHeight(Window.getClientHeight()) ;
197
		}
53 david 198
 
303 aurelien 199
		panneauPrincipalCarnetEnLigne.addListener(new ContainerListenerAdapter() {
200
 
201
			@Override
202
			public void onResize(BoxComponent component, int adjWidth,
203
					int adjHeight, int rawWidth, int rawHeight) {
318 aurelien 204
				CarnetEnLigneMediateur.fireResize();
205
				observationMediateur.redimensionnerPanneaux(adjHeight, adjWidth);
303 aurelien 206
 
207
			}
208
		});
209
 
405 aurelien 210
		ongletsObservationsImages.addListener(new TabPanelListenerAdapter() {
211
 
1287 aurelien 212
			@Override
405 aurelien 213
			public void onTabChange(TabPanel source, Panel tab) {
214
				if(tab.equals(imageMediateur.getPanneauPrincipalImage())) {
215
 
216
					Timer t = new Timer() {
217
 
1287 aurelien 218
						@Override
405 aurelien 219
						public void run() {
220
							imageMediateur.obtenirNombreMiniListeObservations();
221
							imageMediateur.rafraichirToutesVues();
222
						}
223
					};
224
 
225
					t.schedule(150);
226
				}
227
			}
228
		});
229
 
31 jpm 230
		//	on ajoute les panneaux  principaux des applications au panneau à onglets
37 jpm 231
		ongletsObservationsImages.add(observationMediateur.getPanneauPrincipalObservation());
101 jpm 232
		ongletsObservationsImages.add(imageMediateur.getPanneauPrincipalImage());
2 aperonnet 233
	}
12 david 234
 
235
 
236
	public void getEtatUtilisateur() {
178 david 237
 
12 david 238
 
239
		carnetEnLigneModele.getEtatUtilisateur(this);
240
 
241
 
242
	}
2 aperonnet 243
 
7 aperonnet 244
 
2 aperonnet 245
	// Methode publiques
12 david 246
 
247
 
248
 
2 aperonnet 249
	/**
250
	 * Recherche Identifiant utilisateur en cours et etat de connection
251
	 * @return Utilisateur
252
	 */
12 david 253
 
254
 
2 aperonnet 255
	public Utilisateur getUtilisateur() {
256
		return utilisateur;
257
	}
258
 
259
	/**
260
	 * Deconnecte l'utilisateur passe en parametre
261
	 */
12 david 262
    public void deconnecterUtilisateur() {
597 aurelien 263
 
264
    	licenceUtilisateurAcceptee = false;
265
 
138 aurelien 266
    	// TODO: vider proprement toutes les vues (méthode à voir)
937 aurelien 267
		carnetEnLigneModele.deconnecterUtilisateur(this, Utilisateur.getInstance().getIdentifiantUtilisateurConsulte());
12 david 268
 
138 aurelien 269
		observationMediateur.deconnecterUtilisateur() ;
140 aurelien 270
		imageMediateur.deconnecterUtilisateur();
159 aurelien 271
 
272
		panneauAdmin.setVisible(false);
12 david 273
	}
2 aperonnet 274
 
12 david 275
	public void connecterUtilisateur(String login, String password) {
276
 
277
		tentativeConnection=true;
278
		carnetEnLigneModele.connecterUtilisateur(this, login, password);
279
 
2 aperonnet 280
	}
281
 
282
 
12 david 283
 
284
	/**
285
	 *  Affichage etat de la connexion
286
	 */
287
 
288
 
289
	private void afficheEtatConnexion() {
290
 
291
		if (!utilisateur.isIdentifie()) {
140 aurelien 292
			   etatConnexionVue.setEtat("",false);
12 david 293
		}
294
		else {
140 aurelien 295
			if(utilisateur.isAdmin()) {
244 aurelien 296
		    	afficherLienAdmin();
297
				panneauAdmin.setVisible(true);
298
		    } else {
299
		    	cacherLienAdmin();
141 aurelien 300
		    }
301
 
937 aurelien 302
		    etatConnexionVue.setEtat(Utilisateur.getInstance().getLoginUtilisateurConsulte(),true);
140 aurelien 303
 
12 david 304
		}
305
 
306
	}
597 aurelien 307
 
308
	private void afficherFenetreAcceptationLicence()  {
309
 
310
		fenetreAcceptationLicence = new FenetreLicenceVue(this);
311
 
312
		// On le positionne à peu près au milieu de l'écran
313
		int left = (Window.getClientWidth() - 512) / 2;
314
		int top = (Window.getClientHeight() - 256) / 5;
315
 
316
		fenetreAcceptationLicence.setPosition(left, top);
651 aurelien 317
		fenetreAcceptationLicence.setHeight(350);
597 aurelien 318
		fenetreAcceptationLicence.setWidth(550);
319
		fenetreAcceptationLicence.setModal(true);
320
		fenetreAcceptationLicence.show();
321
	}
7 aperonnet 322
 
12 david 323
 
324
	/**
325
	 *
326
	 * Affichage boite de connexion
327
	 *
328
	 */
329
 
330
 
331
	public void afficherDialogueConnexion() {
332
 
333
		  if (formulaireDeConnexionVue==null) {
334
			  formulaireDeConnexionVue= new FormulaireDeConnexionVue(this);
335
		  }
336
 
101 jpm 337
		  // On le positionne à peu près au milieu de l'écran
12 david 338
		  int left = (Window.getClientWidth() - 512) / 2;
339
		  int top = (Window.getClientHeight() - 256) / 2;
340
 
341
		  formulaireDeConnexionVue.setPopupPosition(left, top);
342
		  formulaireDeConnexionVue.show();
343
 
344
	}
7 aperonnet 345
 
12 david 346
	public Panel getPanneauPrincipalCarnetEnLigne() {
347
		return panneauPrincipalCarnetEnLigne;
2 aperonnet 348
	}
349
 
1287 aurelien 350
	@Override
12 david 351
	public void rafraichir(Object nouvelleDonnees, boolean repandreRaffraichissement) {
352
 
353
			if (nouvelleDonnees instanceof Utilisateur) {
354
 
355
				utilisateur = (Utilisateur) nouvelleDonnees;
356
 
357
				if ((tentativeConnection) && !utilisateur.isIdentifie()) {
141 aurelien 358
 
359
					panneauAdmin.setVisible(false);
173 aurelien 360
					formulaireDeConnexionVue.afficherMessageAlerte();
12 david 361
				}
362
				else {
223 aurelien 363
					if ((tentativeConnection) && utilisateur.isIdentifie()) {
244 aurelien 364
						afficherLienAdmin();
173 aurelien 365
						formulaireDeConnexionVue.cacher();
12 david 366
					}
367
				}
597 aurelien 368
 
369
				if(utilisateur.isIdentifie() && !utilisateur.getLicenceAcceptee()) {
370
					afficherFenetreAcceptationLicence();
371
				} else {
651 aurelien 372
 
373
				  if(tentativeConnection && utilisateur.isIdentifie() && observationMediateur.listeAvoirObservations() && !utilisateur.isAdmin()) {
2615 aurelien 374
					  if(Window.confirm(Msg.get("question-import-anonyme-connecte")+" ?")) {
651 aurelien 375
						  observationMediateur.setImporterObservationsAnonymes(true);
376
					  }
377
				  }
597 aurelien 378
 
651 aurelien 379
				  afficheEtatConnexion();
380
				  // On lance l'affichage des observations
381
				  observationMediateur.connecterUtilisateur();
382
				  imageMediateur.connecterUtilisateur();
597 aurelien 383
 
384
				}
385
			}
386
 
387
			if(nouvelleDonnees instanceof String) {
388
 
389
				String evenement = (String)nouvelleDonnees;
390
 
391
				if(evenement.equals("licence_acceptee")) {
392
					licenceUtilisateurAcceptee = true;
393
					accepterLicenceUtilisateur();
394
				} else {
395
					if(utilisateur.isIdentifie()) {
396
						deconnecterUtilisateur();
397
						return;
398
					}
399
				}
400
 
651 aurelien 401
				if(observationMediateur.listeAvoirObservations() && !utilisateur.isAdmin()) {
2615 aurelien 402
					if(Window.confirm(Msg.get("question-import-anonyme-connecte")+" ?")) {
651 aurelien 403
					  observationMediateur.setImporterObservationsAnonymes(true);
404
					}
405
				}
406
 
223 aurelien 407
				afficheEtatConnexion();
140 aurelien 408
				observationMediateur.connecterUtilisateur();
409
				imageMediateur.connecterUtilisateur();
597 aurelien 410
 
411
				fenetreAcceptationLicence.close();
12 david 412
			}
413
	}
597 aurelien 414
 
415
	private void accepterLicenceUtilisateur() {
416
		utilisateur.setLicenceAcceptee(true);
937 aurelien 417
		carnetEnLigneModele.accepterLicenceUtilisateur(Utilisateur.getInstance().getIdentifiantUtilisateurConsulte());
597 aurelien 418
	}
12 david 419
 
140 aurelien 420
	public void afficherListeUtilisateurs() {
67 jpm 421
 
140 aurelien 422
		ListeUtilisateurAdminVue listeUtilisateur = new ListeUtilisateurAdminVue(this) ;
423
		listeUtilisateur.show(Ext.get("LienChangerUtilisateur").getDOM());
256 aurelien 424
		listeUtilisateur.focusChampUtilisateur();
140 aurelien 425
 
426
	}
427
 
428
	public void afficherLienAdmin() {
2615 aurelien 429
		String[] paramsU = {Utilisateur.getInstance().getLoginUtilisateurConsulte()};
430
		String labelAdmin = "<div id=\"lienAdmin\"> "+Msg.get("admin-consulter-donnees", paramsU)+" <a id=\"LienChangerUtilisateur\" href=\"#\">"+Msg.get("changer-utilisateur")+"</a></div>" ;
140 aurelien 431
		panneauAdmin.setHtml(labelAdmin);
432
 
433
		ExtElement lienChangerUt = Ext.get("LienChangerUtilisateur");
434
		if(lienChangerUt != null)
435
		{
141 aurelien 436
			lienChangerUt.removeAllListeners();
140 aurelien 437
			lienChangerUt.addListener("click", new EventCallback() {
438
 
1287 aurelien 439
				@Override
140 aurelien 440
				public void execute(EventObject e) {
441
					afficherListeUtilisateurs();
1287 aurelien 442
				}
140 aurelien 443
			});
444
		}
445
		else
446
		{
447
			panneauAdmin.addListener(new ContainerListenerAdapter()
448
			{
1287 aurelien 449
				@Override
140 aurelien 450
				public void onAfterLayout(Container c)
451
				{
452
					ExtElement lienChangerUt = Ext.get("LienChangerUtilisateur");
141 aurelien 453
					lienChangerUt.removeAllListeners();
140 aurelien 454
					lienChangerUt.addListener("click", new EventCallback() {
455
 
1287 aurelien 456
						@Override
140 aurelien 457
						public void execute(EventObject e) {
458
							afficherListeUtilisateurs();
459
						}
460
 
461
					});
462
				}
463
			});
464
		}
465
	}
466
 
244 aurelien 467
	public void cacherLienAdmin() {
468
		panneauAdmin.hide();
469
	}
470
 
937 aurelien 471
	public void changerIdentite(String idNouvelleIdentite, String loginNouvelleIdentite) {
472
		Utilisateur.getInstance().setUtilisateurConsulte(idNouvelleIdentite, loginNouvelleIdentite);
140 aurelien 473
		afficherLienAdmin();
474
		observationMediateur.connecterUtilisateur();
475
		imageMediateur.connecterUtilisateur();
476
	}
477
 
141 aurelien 478
	public void obtenirListeUtilisateurs(String rech, Rafraichissable r) {
937 aurelien 479
		carnetEnLigneModele.obtenirListeUtilisateur(r,rech,Utilisateur.getInstance().getIdentifiantUtilisateurConnecte());
141 aurelien 480
	}
481
 
159 aurelien 482
	public void donneesImagesVersObs(Object o) {
483
		observationMediateur.donneesExterieures(o);
484
	}
485
 
486
	public void donneesObsVersImages(Object o) {
487
		imageMediateur.donneesExterieures(o);
488
	}
489
 
490
	public void obtenirListeObservations(Rafraichissable r) {
491
		observationMediateur.obtenirCacheObservation(r) ;
492
	}
493
 
318 aurelien 494
 
495
	public static native void fireResize() /*-{
496
		 $wnd.Ext.EventManager.fireResize();
497
	}-*/;
498
 
12 david 499
}