Subversion Repositories eFlore/Applications.cel

Rev

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