Subversion Repositories eFlore/Applications.cel

Rev

Rev 7 | Rev 13 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 7 Rev 12
Line 1... Line 1...
1
package org.tela_botanica.client.observation;
1
package org.tela_botanica.client.observation;
Line -... Line 2...
-
 
2
 
-
 
3
 
2
 
4
import java.util.Iterator;
3
import org.tela_botanica.client.CarnetEnLigneMediateur;
5
import org.tela_botanica.client.CarnetEnLigneMediateur;
-
 
6
import org.tela_botanica.client.interfaces.FournisseurListe;
4
import org.tela_botanica.client.interfaces.iMediateur;
7
import org.tela_botanica.client.interfaces.Rafraichissable;
5
import org.tela_botanica.client.interfaces.iRetourObservation;
8
import org.tela_botanica.client.modeles.ListeObservation;
-
 
9
import org.tela_botanica.client.modeles.Observation;
-
 
10
import org.tela_botanica.client.vues.FormulaireSaisieObservationVue;
Line -... Line 11...
-
 
11
import org.tela_botanica.client.vues.ListeObservationVue;
6
import org.tela_botanica.client.modeles.Observation;
12
 
-
 
13
import com.gwtext.client.data.ArrayReader;
7
 
14
import com.gwtext.client.data.FieldDef;
-
 
15
import com.gwtext.client.data.MemoryProxy;
-
 
16
import com.gwtext.client.data.RecordDef;
8
import com.google.gwt.user.client.Window;
17
import com.gwtext.client.data.Store;
9
import com.google.gwt.user.client.ui.RootPanel;
-
 
10
import com.google.gwt.user.client.ui.VerticalPanel;
18
import com.gwtext.client.data.StringFieldDef;
Line -... Line 19...
-
 
19
import com.gwtext.client.widgets.Panel;
-
 
20
import com.gwtext.client.widgets.TabPanel;
11
 
21
 
-
 
22
/**
-
 
23
 * Mediateur gérant les interactions entre vues et les echanges de données
-
 
24
 * C'est un singleton. 
12
public class ObservationMediateur implements iMediateur {
25
 * @author aurelien
Line -... Line 26...
-
 
26
 *
-
 
27
 */
-
 
28
public class ObservationMediateur implements Rafraichissable {
13
 
29
	
Line 14... Line 30...
14
	// Evenenements
30
	/**
-
 
31
	 * booleen qui verifie l'unicite de l'instance (donc static)
-
 
32
	 */
15
	final static public int NOMBRE_OBSERVATION = 1;
33
	private static boolean estInstancie = false ;  
16
 
-
 
Line 17... Line 34...
17
	final static public int LISTE_OBSERVATION = 2;
34
	
Line 18... Line -...
18
 
-
 
19
	private CarnetEnLigneMediateur carnetEnLigneMediateur = null; // Mediateur
-
 
Line -... Line 35...
-
 
35
	/** Mediateur general de l'application carnet en ligne
20
																	// General
36
	 * 
-
 
37
	 * 
-
 
38
	 */
Line 21... Line -...
21
	private final ObservationModele observationModele = new ObservationModele();
-
 
22
 
-
 
23
	private Observation observation = null;
-
 
24
 
-
 
25
	// Variable interne
-
 
26
	private final String texteDeconnexion = "Utilisez ce carnet en ligne pour saisir vos observations, <u>identifiez-vous</u> pour les transmettre à Tela Botanica";
-
 
27
 
-
 
28
	// Composants graphiques
-
 
Line -... Line 39...
-
 
39
	
-
 
40
	private CarnetEnLigneMediateur carnetEnLigneMediateur = null ;
29
 
41
	
-
 
42
	
Line -... Line 43...
-
 
43
	/**
-
 
44
	 * modele de données
-
 
45
	 */
30
	private EtatConnexionVue etatConnexionVue = null; // Vue Etat de la
46
	private ObservationModele observationModele = null ;
Line -... Line 47...
-
 
47
	
-
 
48
	
-
 
49
	/**
31
														// connexion utilisateur
50
	 * panneau principal des Observation (onglet "observation")
Line -... Line 51...
-
 
51
	 */
32
	private FormulaireDeConnexionVue formulaireDeConnexionVue = null; // Formulaire
52
	private final Panel panneauPrincipalObservation = new Panel("Observation");
-
 
53
	
33
																		// de
54
	/**
Line -... Line 55...
-
 
55
	 * panneau a onglet pour la liste
34
																		// connexion
56
	 */ 
-
 
57
	private TabPanel ongletsObservation = null ;
Line -... Line 58...
-
 
58
	
-
 
59
	/**
-
 
60
	 * conteneur du panneau a onglets
-
 
61
	 */
35
																		// utilisateur
62
	private Panel panneauMenuEtOngletsObservation = null ;
Line -... Line 63...
-
 
63
	
-
 
64
	/**
-
 
65
	 * liste détaillée des Observations
36
	private ListeObservationsVue listeObservationsVue = null; // Liste de
66
	 */
Line 37... Line -...
37
																// releves
-
 
Line 38... Line -...
38
 
-
 
Line -... Line 67...
-
 
67
	private ListeObservationVue listeObservation = null ;
39
	// 
68
	
-
 
69
	/**
-
 
70
	 * Saisie des Observations
-
 
71
	 */
-
 
72
	
-
 
73
	private FormulaireSaisieObservationVue formulaireSaisieObservationVue=null;
-
 
74
	/**
-
 
75
	 * l'indice du dernier onglet sélectionné
-
 
76
	 */
-
 
77
	private int dernierIndexOnglet = 0 ; 
-
 
78
	
-
 
79
	/**
-
 
80
	 * booleen explicitant s'il y a une selection en cours
-
 
81
	 */
-
 
82
	private boolean selection = false ;
-
 
83
	
Line 40... Line -...
40
 
-
 
Line 41... Line 84...
41
	public ObservationMediateur(CarnetEnLigneMediateur carnetEnLigneMediateur) {
84
	
42
 
-
 
43
		this.carnetEnLigneMediateur = carnetEnLigneMediateur;
85
 
44
 
-
 
45
		etatConnexionVue = new EtatConnexionVue(this);
86
	/**
-
 
87
	 * 
Line 46... Line -...
46
		listeObservationsVue = new ListeObservationsVue(this);
-
 
Line 47... Line -...
47
 
-
 
48
		VerticalPanel panel = new VerticalPanel();
-
 
Line 49... Line -...
49
 
-
 
Line -... Line 88...
-
 
88
	 * Numéro de page en cours
50
		panel.add(etatConnexionVue);
89
	 */
-
 
90
	private int pageEncours = 0 ;
-
 
91
	/**
-
 
92
	 * Nombre de pages totales
-
 
93
	 */
-
 
94
	private int pageMax = 1 ;
-
 
95
	/**
Line 51... Line 96...
51
 
96
	 * Taille de page (par défaut 20)
52
		panel.add(listeObservationsVue);
97
	 */
53
 
-
 
54
		RootPanel.get().add(panel);
98
	private int taillePage = 20 ;
Line 55... Line -...
55
 
-
 
56
		onInitialisation();
-
 
Line -... Line 99...
-
 
99
	/**
-
 
100
	 * Nombre d'éléments total correspondant à la requete
-
 
101
	 */
-
 
102
	private int nbElements = 0 ;
-
 
103
	
-
 
104
	
-
 
105
	/**
-
 
106
	 * Le store contenant les données à afficher, que le modèle transmet au médiateur quand il le demande
-
 
107
	 */
-
 
108
	private Store st = null ;
-
 
109
	
-
 
110
	
-
 
111
	
-
 
112
	
-
 
113
	/**
-
 
114
	 * La liste des observations affichées en cours (verifier utilité)
-
 
115
	 */
-
 
116
	
-
 
117
	private ListeObservation cacheObservation = new ListeObservation(0) ;
-
 
118
	/**
-
 
119
	
-
 
120
	
-
 
121
	
-
 
122
	/**
-
 
123
	 * constructeur privé (on accède a la classe par la méthode getInstance
57
 
124
	 */
-
 
125
	
-
 
126
	
-
 
127
	private ObservationMediateur(CarnetEnLigneMediateur carnetEnLigneMediateur )
58
	}
128
	{
-
 
129
		this.carnetEnLigneMediateur=carnetEnLigneMediateur;
-
 
130
	
-
 
131
	
-
 
132
		
-
 
133
		// Demande d'identification
-
 
134
//		afficherMenuId() ;
-
 
135
 
59
 
136
		
60
	// / Methodes privees
137
		// on crée un modèle
61
 
138
		observationModele = ObservationModele.Instance(this);
-
 
139
		
-
 
140
		
-
 
141
		// on gère la mise en page du panneau principal
-
 
142
		//panneauPrincipalObservation.setLayout(new BorderLayout());
-
 
143
		
-
 
144
		// on crée le panneau qui contient les differentes onglets ainsi que le menu supérieur
-
 
145
	//	panneauMenuEtOngletsObservation = new Panel("gg") ;
-
 
146
	//	panneauMenuEtOngletsObservation.setLayout(new BorderLayout()) ;
-
 
147
		
-
 
148
		// le panneau à onglet qui contient la vue
-
 
149
		//ongletsObservation = new TabPanel();
-
 
150
		
-
 
151
		
-
 
152
		// la liste des observations
-
 
153
		
-
 
154
		//Panel panneauListeObservation = new Panel("Liste");
-
 
155
		
Line 62... Line -...
62
	/**
-
 
63
	 * 
-
 
Line 64... Line 156...
64
	 * Initialisations
156
		listeObservation = new ListeObservationVue(this);
Line 65... Line -...
65
	 * 
-
 
Line 66... Line 157...
66
	 */
157
		
67
 
158
		
-
 
159
		// Le formulaire de saisie / modification d'observation
68
	private void onInitialisation() {
160
		
-
 
161
		formulaireSaisieObservationVue = new FormulaireSaisieObservationVue(this);
-
 
162
 
-
 
163
		
-
 
164
		//panneauListeObservation.setLayout(new FitLayout());
-
 
165
		//panneauListeObservation.setSize(600,600);
-
 
166
		//panneauListeObservation.add(listeObservation);
-
 
167
		
-
 
168
		
-
 
169
		// on ajoute les panneaux au panneau à onglets
-
 
170
		//ongletsObservation.add(panneauListeObservation);
Line 69... Line -...
69
 
-
 
70
		afficheEtatConnexion();
-
 
71
		onFiltrageListeObservation("all", "all", "all");
-
 
72
 
-
 
73
	}
-
 
74
 
-
 
75
	// Filtre selection lieu
-
 
76
 
171
		
77
	/**
-
 
78
	 * Action sur selection d'un lieu : affichage de la liste des taxons
172
		
Line -... Line 173...
-
 
173
		// les onglets au centre
-
 
174
//		panneauMenuEtOngletsObservation.add(ongletsObservation,regionCentre);
79
	 * correspondants au filtrage
175
		
80
	 */
-
 
81
 
176
		// on ajoute le panneau qui contient le menu et les onglets d'images au centre
82
	public void onFiltrageListeObservation(String id_loc, String loc,
-
 
83
			String lieu) {
177
		//panneauPrincipalObservation.add(panneauMenuEtOngletsObservation,regionCentre);
Line 84... Line -...
84
 
-
 
Line 85... Line -...
85
		// Positionnement Filtre affichage
-
 
86
		listeObservationsVue.setIdLocation(id_loc);
178
		
Line 87... Line -...
87
		listeObservationsVue.setLocalite(loc);
-
 
88
		listeObservationsVue.setLieudit(lieu);
-
 
-
 
179
		panneauPrincipalObservation.add(formulaireSaisieObservationVue);
89
		listeObservationsVue.initialiser();
180
	
90
 
181
		panneauPrincipalObservation.add(listeObservation);
91
		// Affichage des filtres
-
 
Line 92... Line 182...
92
		listeObservationsVue.displayFilter();
182
		
Line 93... Line 183...
93
 
183
	
94
	}
184
	
95
 
185
 
Line 96... Line -...
96
	// / UTILISATEUR
-
 
Line 97... Line 186...
97
 
186
	}
-
 
187
 
-
 
188
 
98
	/**
189
	/**
Line 99... Line 190...
99
	 * Affichage etat de la connexion
190
	 * Retourne une instance de manière unique
Line -... Line 191...
-
 
191
	 * @return l'instance unique du médiateur
-
 
192
	 */
-
 
193
	public static ObservationMediateur Instance(CarnetEnLigneMediateur carnetEnLigneMediateur)
-
 
194
	{
100
	 */
195
			if(!estInstancie)
101
 
196
			{
102
	private void afficheEtatConnexion() {
-
 
103
		if (!carnetEnLigneMediateur.getUtilisateur().isIdentifie()) {
197
				estInstancie = true ;
104
			etatConnexionVue.setEtat(texteDeconnexion, false);
198
				return new ObservationMediateur(carnetEnLigneMediateur) ;
105
		} else {
199
			}
-
 
200
			else
-
 
201
			{
-
 
202
				return null ;
-
 
203
				
-
 
204
			}
-
 
205
	}
-
 
206
	
-
 
207
	
Line 106... Line 208...
106
			etatConnexionVue.setEtat(carnetEnLigneMediateur.getUtilisateur()
208
	
Line 107... Line -...
107
					.getIdentifiant()
-
 
108
					+ " (deconnexion)", true);
209
	/**
Line 109... Line 210...
109
		}
210
	 * envoie au modèle une demande de mise a jour
Line 110... Line -...
110
 
-
 
Line 111... Line -...
111
	}
-
 
112
 
211
	 */
113
	/**
212
 
114
	 * 
213
 
-
 
214
	public void obtenirNombreObservation() {
115
	 * Affichage boite de connexion
215
		
Line 116... Line -...
116
	 * 
-
 
117
	 */
-
 
118
 
216
	
Line -... Line 217...
-
 
217
			listeObservation.masquerChargement();
-
 
218
		    observationModele.obtenirNombreObservation(this) ;
-
 
219
		
-
 
220
	}
-
 
221
	
119
	public void afficherDialogueConnexion() {
222
	/**
-
 
223
	 * envoie au modèle une demande de mise a jour
-
 
224
	 */
120
 
225
 
-
 
226
 
121
		// TODO : singleton ?
227
	public void obtenirListeObservation() {
-
 
228
		
-
 
229
 
-
 
230
			observationModele.obtenirListeObservation(this, taillePage, pageEncours) ;
122
		formulaireDeConnexionVue = new FormulaireDeConnexionVue(this);
231
		
123
 
232
	}
Line 124... Line 233...
124
		// Position it roughly in the middle of the screen.
233
 
125
		int left = (Window.getClientWidth() - 512) / 2;
234
 
126
		int top = (Window.getClientHeight() - 256) / 2;
235
	
-
 
236
		
-
 
237
	
Line -... Line 238...
-
 
238
	/**
-
 
239
	 * C'est dans cette fonction que doivent être renvoyé les valeurs des filtres
-
 
240
	 * sous forme de tableau [nom, valeur]
-
 
241
	 * @return Les noms et valeurs des filtres
127
		formulaireDeConnexionVue.setPopupPosition(left, top);
242
	 */
-
 
243
	public String[][] renvoyerFiltres()
Line -... Line 244...
-
 
244
	{
-
 
245
		String[][] valeursFiltres = { {"location","Saint-Martin-de-Londres"} } ;
-
 
246
		
-
 
247
		
-
 
248
		return valeursFiltres ;
128
		formulaireDeConnexionVue.show();
249
	}
Line -... Line 250...
-
 
250
 
-
 
251
 
-
 
252
	public String getIdentifiant() {
-
 
253
		
-
 
254
		return carnetEnLigneMediateur.getUtilisateur().getIdentifiant();
-
 
255
	
129
 
256
	}
-
 
257
 
-
 
258
 
-
 
259
	public Panel getPanneauPrincipalObservation() {
-
 
260
		return panneauPrincipalObservation;
-
 
261
	}
-
 
262
	
-
 
263
	
-
 
264
	
-
 
265
	// TODO : plutot dans la listevu non ?
130
	}
266
 
-
 
267
	public void rafraichir(Object nouvelleDonnees, boolean repandreRafraichissement) {
-
 
268
	
131
 
269
		
-
 
270
		
-
 
271
//		 si l'on a reçu une liste d'observation
-
 
272
		if(nouvelleDonnees instanceof ListeObservation)
-
 
273
		{
-
 
274
			
-
 
275
				ListeObservation data = (ListeObservation) nouvelleDonnees ;
-
 
276
				Object[][] observationData = new Object[data.size()][8];
-
 
277
				int i = 0 ;
-
 
278
				
-
 
279
				if(data.size() == 0)
-
 
280
				{
-
 
281
					pageEncours = 0 ;
-
 
282
				}
-
 
283
				
Line 132... Line -...
132
	/**
-
 
133
	 * Deconnexion de l'utilisateur en cours
-
 
134
	 */
-
 
135
 
-
 
136
	public void deconnecterUtilisateur() {
284
				// on la parse et on récupère les informations quiç nous interessent
Line 137... Line -...
137
 
-
 
138
		// carnetEnLigneMediateur.addListener(CarnetEnLigneMediateur.DECONNEXION,this);
-
 
139
		carnetEnLigneMediateur.deconnecterUtilisateur();
-
 
Line -... Line 285...
-
 
285
				for (Iterator it = data.keySet().iterator(); it.hasNext();) 
-
 
286
				{
-
 
287
					
140
 
288
					Observation obs=(Observation) data.get(it.next());
-
 
289
					
Line -... Line 290...
-
 
290
					observationData[i][0]= obs.getTransmis();
-
 
291
					observationData[i][1]= obs.getNomSaisi();
-
 
292
					observationData[i][2]= obs.getNomRetenu();
-
 
293
					observationData[i][3]= obs.getLieudit();
-
 
294
					observationData[i][4]= obs.getDate();
-
 
295
					observationData[i][5]= obs.getNumeroOrdre();
-
 
296
					
-
 
297
					
-
 
298
 
141
	}
299
					
Line -... Line 300...
-
 
300
										
-
 
301
					i++ ;
-
 
302
				}
142
 
303
		
143
	/**
304
				// creation du store qui les contient
-
 
305
				
-
 
306
				FieldDef defEtatObservation = new StringFieldDef("etat_observation");
-
 
307
				FieldDef defNomSaisiObservation = new StringFieldDef("nomSaisi_observation");
-
 
308
				FieldDef defNomRetenuObservation = new StringFieldDef("nomRetenu_observation");
-
 
309
				FieldDef defLieuObservation = new StringFieldDef("lieu_observation");
-
 
310
				FieldDef defDateObservation = new StringFieldDef("date_observation");
-
 
311
				FieldDef defOrdreObservation = new StringFieldDef("ordre_observation");
-
 
312
				
-
 
313
				// on associe le store
144
	 * Tentative de connexion utilisateur
314
 
Line 145... Line -...
145
	 * 
-
 
-
 
315
				FieldDef[] defTab = { defEtatObservation, defNomSaisiObservation, defNomRetenuObservation,
Line 146... Line 316...
146
	 * @param login
316
						defLieuObservation, defDateObservation, defOrdreObservation };
-
 
317
				
147
	 * @param password
318
				RecordDef rd = new RecordDef(defTab);
-
 
319
				
148
	 */
320
				final MemoryProxy dataProxy = new MemoryProxy(observationData);
149
 
321
				final ArrayReader reader = new ArrayReader(rd);
-
 
322
		
-
 
323
				final Store observationStore = new Store(dataProxy, reader);
-
 
324
				
-
 
325
				
-
 
326
				st = observationStore ;
-
 
327
				st.load() ;
-
 
328
				
-
 
329
				// par défaut le store est trié sur l'ordre d'observations
-
 
330
				st.sort("ordre_observation") ;
-
 
331
 
-
 
332
			
-
 
333
				// si on doit répandre les données, on notifie le médiateur qui les distribuera à son tour
-
 
334
				if(repandreRafraichissement)
-
 
335
				{
-
 
336
					listeObservation.rafraichir(st, false) ;					
150
	public void connecterUtilisateur(String login, String password) {
337
				}
151
 
338
				
152
		// carnetEnLigneMediateur.addListener(CarnetEnLigneMediateur.CONNEXION,this);
339
		}
153
		carnetEnLigneMediateur.connecterUtilisateur(login, password);
340
		
-
 
341
		
-
 
342
		// Si on reçoit un tableau d'entiers
-
 
343
		// c'est un tableau d'un seul entier qui est le nombre d'observation correspondant aux critères
-
 
344
		if(nouvelleDonnees instanceof int[])
154
 
345
		{
-
 
346
			int[] pages = (int[])nouvelleDonnees ;
155
	}
347
			
-
 
348
			// on calcule le nombre de pages nécessaires et on les met à jour dans le modèle
-
 
349
			pageMax  = calculerNbPages(pages[0]) ;
156
 
350
			nbElements = pages[0] ;
-
 
351
			
-
 
352
			// et on notifie de le mediateur du changement des valeurs
157
	// / OBSERVATION
353
			changerPageMaxEtCourante(pageMax,pageEncours,taillePage,pages[0]) ;
-
 
354
			
-
 
355
			obtenirListeObservation();
-
 
356
		}
-
 
357
	}
158
 
358
	
-
 
359
	
-
 
360
	/**
159
	/**
361
	 * Met à jour les barre d'outils avec des nouvelles valeurs
-
 
362
	 * @param pageMax le nombre de pages
-
 
363
	 * @param pageEncours la page en cours
-
 
364
	 * @param taillePage la taille de page
-
 
365
	 * @param nbElement le nombre d'élements par page
-
 
366
	 */
-
 
367
	public void changerPageMaxEtCourante(int pageMax, int pageEncours, int taillePage, int nbElement) 
-
 
368
	{
-
 
369
				
-
 
370
		int[] pages = {pageMax,pageEncours, taillePage, nbElement} ;
-
 
371
		listeObservation.getToolBarVue().rafraichir(pages, false) ;
-
 
372
		
-
 
373
	}
-
 
374
	
-
 
375
	
-
 
376
	
-
 
377
	/**
-
 
378
	 * Calcule le nombre de pages nécessaires pour afficher un nombre d'élements donnés en fonction de la taille de page
-
 
379
	 * en cours
-
 
380
	 * @param nbElements le nombre d'élements total
-
 
381
	 * @return le nombre de pages 
-
 
382
	 */
-
 
383
	public int calculerNbPages(int nbElements)
-
 
384
	{
-
 
385
		// A cause de la betise de java pour les conversion implicite on fait quelques conversions manuellement
-
 
386
		// pour eviter qu'il arrondisse mal la division
-
 
387
		// nombre de pages = (nombre d'element / taille de la page) arrondie à l'entier superieur
-
 
388
		
-
 
389
		double nPage = (1.0*nbElements)/(1.0*taillePage) ; 
-
 
390
		double nPageRound = Math.ceil(nPage) ;
-
 
391
		Double nPageInt = new Double(nPageRound) ;
-
 
392
		
-
 
393
		// on convertit en entier
-
 
394
		return nPageInt.intValue() ; 
-
 
395
	}
-
 
396
 
-
 
397
	
-
 
398
	/**
-
 
399
	 * Recalcule la page en cours lors du changement du nombre d'élements
-
 
400
	 * @param nbElements le nombre d'élements total
-
 
401
	 * @return la nouvelle page encours
-
 
402
	 */
-
 
403
	public int calculerPageCourante(int nbElements)
-
 
404
	{
-
 
405
		// on calcule le nombre de page
-
 
406
		int nouvelNbPages = calculerNbPages(nbElements) ;
-
 
407
		// la nouvelle page en cours
-
 
408
		double nPageCourante = (1.0*pageEncours)/(1.0*pageMax) * (1.0*nouvelNbPages) ;
-
 
409
		
-
 
410
		// on arrondit au supérieur
Line 160... Line 411...
160
	 * Recherche nombre d'enregistrement pour l'utilisateur et la localite en
411
		double nPageRound = Math.ceil(nPageCourante) ;