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;
2 aperonnet 10
 
12 david 11
import com.google.gwt.user.client.Window;
67 jpm 12
import com.gwtext.client.widgets.BoxComponent;
12 david 13
import com.gwtext.client.widgets.Panel;
53 david 14
import com.gwtext.client.widgets.TabPanel;
67 jpm 15
import com.gwtext.client.widgets.event.PanelListenerAdapter;
27 jpm 16
import com.gwtext.client.widgets.layout.FitLayout;
36 jpm 17
import com.gwtext.client.widgets.layout.RowLayout;
18
import com.gwtext.client.widgets.layout.RowLayoutData;
2 aperonnet 19
 
12 david 20
/**
21
 * Mediateur gérant les interactions entre vues et les echanges de données
22
 * C'est un singleton.
23
 * @author david delon
24
 *
25
 */
7 aperonnet 26
 
12 david 27
public class CarnetEnLigneMediateur implements Rafraichissable {
28
 
29
 
30
	/**
31
	 * booleen qui verifie l'unicite de l'instance
32
	 */
31 jpm 33
	private static boolean estInstancie = false ;
34
 
12 david 35
	/**
31 jpm 36
	 * pointeur vers le médiateur lui même (pour le pattern singleton)
37
	 */
38
	private static CarnetEnLigneMediateur thisMediateur = null ;
39
 
40
	/**
12 david 41
	 * modele de données
42
	 */
43
 
44
	private  CarnetEnLigneModele carnetEnLigneModele=null;
7 aperonnet 45
 
12 david 46
 
47
	/**
48
	 * panneau principal de l'application "Carnet en ligne"
49
	 */
2 aperonnet 50
 
31 jpm 51
	private Panel panneauPrincipalCarnetEnLigne= null ;
12 david 52
 
53
 
54
 
55
	/**
56
	 * panneau a onglet pour les observation et les images
57
	 */
58
 
59
 
27 jpm 60
	private com.gwtext.client.widgets.TabPanel ongletsObservationsImages=null;
12 david 61
 
62
 
63
	/**
64
	 * Indicateur d'etat de la connexion utilisateur
65
	 */
66
 
67
	private EtatConnexionVue etatConnexionVue=null;
68
 
27 jpm 69
 
12 david 70
	/**
71
	 * Texte d'invite connexion
72
	 */
73
	private final String texteDeconnexion="Utilisez ce carnet en ligne pour saisir vos observations, <u>identifiez-vous</u> pour les transmettre à Tela Botanica";
7 aperonnet 74
 
12 david 75
	/**
76
	 * Boolean indiquant un essai de connexion
77
	 */
78
 
79
	private boolean tentativeConnection=false;
80
 
7 aperonnet 81
 
2 aperonnet 82
	/**
12 david 83
	 *  Formulaire de connexion (lazy instantiation)
84
	 *
2 aperonnet 85
	 */
12 david 86
 
87
	private FormulaireDeConnexionVue formulaireDeConnexionVue=null;
7 aperonnet 88
 
12 david 89
 
90
 
91
	/**
92
	 * Mediateur Gestion des images
93
	 */
94
 
95
	private ImageMediateur imageMediateur=null;
96
 
97
	/**
98
	 * Mediateur Gestion des observations
99
	 */
100
 
101
	private ObservationMediateur observationMediateur=null;
102
 
2 aperonnet 103
 
7 aperonnet 104
 
12 david 105
	/**
106
	 * Utilisateur en cours
107
	 */
7 aperonnet 108
 
12 david 109
 
110
	private Utilisateur utilisateur=null;
111
 
7 aperonnet 112
 
12 david 113
 
114
	public static CarnetEnLigneMediateur Instance()
115
	{
31 jpm 116
			if(!estInstancie || thisMediateur==null)
12 david 117
			{
118
				estInstancie = true ;
31 jpm 119
				thisMediateur = new CarnetEnLigneMediateur() ;
12 david 120
			}
31 jpm 121
 
122
			return thisMediateur ;
123
 
12 david 124
	}
125
 
126
 
127
	/**
128
	 * constructeur privé (on accède a la classe par la méthode getInstance
129
	 */
130
 
131
	private CarnetEnLigneMediateur() {
132
 
133
 
31 jpm 134
		panneauPrincipalCarnetEnLigne = new Panel("Carnet en ligne");
135
 
12 david 136
//		Disposition
137
 
36 jpm 138
		panneauPrincipalCarnetEnLigne.setLayout(new RowLayout());
7 aperonnet 139
 
12 david 140
 
141
//		On crée un modèle d'acces aux donnnes
142
 
143
		carnetEnLigneModele=CarnetEnLigneModele.Instance();
144
 
145
 
146
		// La vue affichant le statut de la connexion
7 aperonnet 147
 
12 david 148
		etatConnexionVue=new EtatConnexionVue(this);
36 jpm 149
		etatConnexionVue.setLayout(new FitLayout()) ;
12 david 150
 
151
		// Le panneau à onglet qui contient les 2 applications Observation et Images
152
 
53 david 153
		ongletsObservationsImages = new TabPanel();
12 david 154
 
36 jpm 155
		panneauPrincipalCarnetEnLigne.add(etatConnexionVue,new RowLayoutData(20));
12 david 156
 
157
		//	on ajoute le panneau a onglet au panneau principal
158
 
67 jpm 159
		panneauPrincipalCarnetEnLigne.add(ongletsObservationsImages);
160
 
161
		panneauPrincipalCarnetEnLigne.addListener(new PanelListenerAdapter() {
162
 
163
			public void onResize(BoxComponent component, int adjWidth, int adjHeight, int rawWidth, int rawHeight)
164
			{
165
 
166
			}
167
 
168
		}) ;
12 david 169
 
170
		// On ajoute les applications
171
		observationMediateur = ObservationMediateur.Instance(this);
30 jpm 172
		imageMediateur= ImageMediateur.Instance(this);
12 david 173
 
53 david 174
		//temp dd viewport desactive ajout de cette  ligne
67 jpm 175
		getPanneauPrincipalCarnetEnLigne().setHeight(Window.getClientHeight()) ;
53 david 176
		//
177
 
36 jpm 178
		//panneauPrincipalCarnetEnLigne.setSize(Window.getClientWidth(), Window.getClientHeight() - etatConnexionVue.getHeight()) ;
42 jpm 179
		observationMediateur.getPanneauPrincipalObservation().setSize(panneauPrincipalCarnetEnLigne.getWidth(),panneauPrincipalCarnetEnLigne.getHeight() - 20) ;
31 jpm 180
		imageMediateur.getPanneauPrincipalImage().setSize(panneauPrincipalCarnetEnLigne.getWidth(),panneauPrincipalCarnetEnLigne.getHeight() - 20) ;
12 david 181
 
31 jpm 182
		//	on ajoute les panneaux  principaux des applications au panneau à onglets
37 jpm 183
		ongletsObservationsImages.add(observationMediateur.getPanneauPrincipalObservation());
184
		ongletsObservationsImages.add(imageMediateur.getPanneauPrincipalImage());
31 jpm 185
 
2 aperonnet 186
	}
12 david 187
 
188
 
189
	public void getEtatUtilisateur() {
190
 
191
 
192
		carnetEnLigneModele.getEtatUtilisateur(this);
193
 
194
 
195
	}
2 aperonnet 196
 
7 aperonnet 197
 
2 aperonnet 198
	// Methode publiques
12 david 199
 
200
 
201
 
2 aperonnet 202
	/**
203
	 * Recherche Identifiant utilisateur en cours et etat de connection
204
	 * @return Utilisateur
205
	 */
12 david 206
 
207
 
2 aperonnet 208
	public Utilisateur getUtilisateur() {
209
		return utilisateur;
210
	}
211
 
212
	/**
213
	 * Deconnecte l'utilisateur passe en parametre
214
	 */
12 david 215
    public void deconnecterUtilisateur() {
2 aperonnet 216
 
12 david 217
 
218
		carnetEnLigneModele.deconnecterUtilisateur(this, utilisateur.getIdentifiant());
219
 
220
	}
2 aperonnet 221
 
12 david 222
	public void connecterUtilisateur(String login, String password) {
223
 
224
		tentativeConnection=true;
225
		carnetEnLigneModele.connecterUtilisateur(this, login, password);
226
 
2 aperonnet 227
	}
228
 
229
 
12 david 230
 
231
	/**
232
	 *  Affichage etat de la connexion
233
	 */
234
 
235
 
236
	private void afficheEtatConnexion() {
237
 
238
 
239
		if (!utilisateur.isIdentifie()) {
240
			   etatConnexionVue.setEtat(texteDeconnexion,false);
241
		}
242
		else {
243
		      etatConnexionVue.setEtat(utilisateur.getIdentifiant()+ " (deconnexion)",true);
244
		}
245
 
246
	}
7 aperonnet 247
 
12 david 248
 
249
	/**
250
	 *
251
	 * Affichage boite de connexion
252
	 *
253
	 */
254
 
255
 
256
	public void afficherDialogueConnexion() {
257
 
258
		  if (formulaireDeConnexionVue==null) {
259
			  formulaireDeConnexionVue= new FormulaireDeConnexionVue(this);
260
		  }
261
 
262
		  // Position it roughly in the middle of the screen.
263
		  int left = (Window.getClientWidth() - 512) / 2;
264
		  int top = (Window.getClientHeight() - 256) / 2;
265
 
266
 
267
		  formulaireDeConnexionVue.setPopupPosition(left, top);
268
		  formulaireDeConnexionVue.show();
269
 
270
	}
7 aperonnet 271
 
2 aperonnet 272
 
12 david 273
 
274
 
275
	public Panel getPanneauPrincipalCarnetEnLigne() {
276
		return panneauPrincipalCarnetEnLigne;
2 aperonnet 277
	}
278
 
12 david 279
 
280
//	 TODO : repandre rafraichissement
281
 
282
	public void rafraichir(Object nouvelleDonnees, boolean repandreRaffraichissement) {
283
 
284
			if (nouvelleDonnees instanceof Utilisateur) {
285
 
286
				utilisateur = (Utilisateur) nouvelleDonnees;
38 jpm 287
 
288
				imageMediateur.connecterUtilisateur() ;
12 david 289
 
290
				afficheEtatConnexion();
291
 
292
				if ((tentativeConnection) && !utilisateur.isIdentifie()) {
293
 
38 jpm 294
					//formulaireDeConnexionVue.afficherMessageAlerte();
12 david 295
				}
296
				else {
297
					if ((tentativeConnection) && utilisateur.isIdentifie()) {
298
						formulaireDeConnexionVue.hide();
299
					}
300
				}
301
 
302
 
303
			// On lance l'affichage des observations
304
				observationMediateur.obtenirNombreObservation();
305
 
306
			}
307
 
308
	}
309
 
61 jpm 310
 
311
	public void obtenirListeObservations(Rafraichissable r) {
12 david 312
 
61 jpm 313
		observationMediateur.obtenirListeObservation(r) ;
314
 
315
	}
12 david 316
 
67 jpm 317
 
318
 
319
	public void donneesRafraichies(Object nouvelleDonnees) {
61 jpm 320
 
67 jpm 321
		imageMediateur.donneesExterieures(nouvelleDonnees) ;
322
 
323
	}
61 jpm 324
 
67 jpm 325
 
326
 
12 david 327
}