Subversion Repositories eFlore/Applications.cel

Rev

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