Subversion Repositories eFlore/Applications.cel

Rev

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