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