Subversion Repositories eFlore/Applications.cel

Rev

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