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