Subversion Repositories eFlore/Applications.cel

Rev

Rev 41 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 41 Rev 47
Line 8... Line 8...
8
import org.tela_botanica.client.modeles.ListeObservation;
8
import org.tela_botanica.client.modeles.ListeObservation;
9
import org.tela_botanica.client.modeles.Observation;
9
import org.tela_botanica.client.modeles.Observation;
10
import org.tela_botanica.client.vues.FormulaireSaisieObservationVue;
10
import org.tela_botanica.client.vues.FormulaireSaisieObservationVue;
11
import org.tela_botanica.client.vues.ListeObservationVue;
11
import org.tela_botanica.client.vues.ListeObservationVue;
Line -... Line 12...
-
 
12
 
12
 
13
import com.google.gwt.user.client.Window;
13
import com.gwtext.client.core.EventObject;
14
import com.gwtext.client.core.EventObject;
14
import com.gwtext.client.data.ArrayReader;
15
import com.gwtext.client.data.ArrayReader;
15
import com.gwtext.client.data.FieldDef;
16
import com.gwtext.client.data.FieldDef;
16
import com.gwtext.client.data.MemoryProxy;
17
import com.gwtext.client.data.MemoryProxy;
Line 24... Line 25...
24
 * Mediateur gérant les interactions entre vues et les echanges de données
25
 * Mediateur gérant les interactions entre vues et les echanges de données
25
 * C'est un singleton. 
26
 * C'est un singleton. 
26
 * @author aurelien
27
 * @author aurelien
27
 *
28
 *
28
 */
29
 */
29
public class ObservationMediateur implements Rafraichissable {
30
public class ObservationMediateur {
Line 30... Line 31...
30
	
31
	
31
	/**
32
	/**
32
	 * booleen qui verifie l'unicite de l'instance (donc static)
33
	 * booleen qui verifie l'unicite de l'instance (donc static)
33
	 */
34
	 */
Line 84... Line 85...
84
	
85
	
85
	/**
86
	/**
86
	 * booleen explicitant s'il y a une selection en cours
87
	 * booleen explicitant s'il y a une selection en cours
87
	 */
88
	 */
88
	private boolean selection = false ;
89
	private boolean selection = false ;
89
	
-
 
90
	/**
-
 
91
	 * Numéro de page en cours
-
 
92
	 */
-
 
93
	private int pageEncours = 0 ;
-
 
94
	/**
-
 
95
	 * Nombre de pages totales
-
 
96
	 */
-
 
97
	private int pageMax = 1 ;
-
 
98
	/**
-
 
99
	 * Taille de page (par défaut 20)
-
 
100
	 */
-
 
101
	private int taillePage = 20 ;
-
 
102
	/**
-
 
103
	 * Nombre d'éléments total correspondant à la requete
-
 
104
	 */
-
 
Line 105... Line 90...
105
	private int nbElements = 0 ;
90
 
106
	
91
	
107
	
92
	
Line 207... Line 192...
207
 
192
 
Line 208... Line 193...
208
	public void obtenirNombreObservation() {
193
	public void obtenirNombreObservation() {
209
		
194
		
Line 210... Line 195...
210
	
195
	
Line 211... Line 196...
211
			listeObservation.masquerChargement();
196
			listeObservation.masquerChargement();
212
		    observationModele.obtenirNombreObservation(this) ;
197
		    observationModele.obtenirNombreObservation(listeObservation) ;
Line 219... Line 204...
219
 
204
 
Line 220... Line 205...
220
 
205
 
221
	public void obtenirListeObservation() {
206
	public void obtenirListeObservation() {
-
 
207
		
222
		
208
 
Line 223... Line 209...
223
 
209
			observationModele.obtenirListeObservation(listeObservation,listeObservation.getTaillePage(),listeObservation.getPageEncours()) ;
224
			observationModele.obtenirListeObservation(this, taillePage, pageEncours) ;
210
			
225
		
211
			
Line 250... Line 236...
250
		return panneauPrincipalObservation;
236
		return panneauPrincipalObservation;
251
	}
237
	}
Line 252... Line -...
252
	
-
 
253
	
-
 
254
	
-
 
255
	// FIXME TODO : plutot dans la listevu non ?
-
 
256
 
-
 
257
	public void rafraichir(Object nouvelleDonnees, boolean repandreRafraichissement) {
-
 
258
	
-
 
259
		
-
 
260
		
-
 
261
//		 si l'on a reçu une liste d'observation
-
 
262
		if(nouvelleDonnees instanceof ListeObservation)
-
 
263
		{
-
 
264
			
-
 
265
				ListeObservation data = (ListeObservation) nouvelleDonnees ;
-
 
266
				Object[][] observationData = new Object[data.size()][8];
-
 
267
				int i = 0 ;
-
 
268
				
-
 
269
				if(data.size() == 0)
-
 
270
				{
-
 
271
					pageEncours = 0 ;
-
 
272
				}
-
 
273
				
-
 
274
				// on la parse et on récupère les informations quiç nous interessent
-
 
275
				for (Iterator it = data.keySet().iterator(); it.hasNext();) 
-
 
276
				{
-
 
277
					
-
 
278
					Observation obs=(Observation) data.get(it.next());
-
 
279
					
-
 
280
					observationData[i][0]= obs.getTransmis();
-
 
281
					observationData[i][1]= obs.getNomSaisi();
-
 
282
					observationData[i][2]= obs.getNomRetenu();
-
 
283
					observationData[i][3]= obs.getLieudit();
-
 
284
					observationData[i][4]= obs.getDate();
-
 
285
					observationData[i][5]= obs.getNumeroOrdre();		
-
 
286
										
-
 
287
					i++ ;
-
 
288
				}
-
 
289
		
-
 
290
				// creation du store qui les contient
-
 
291
				
-
 
292
				FieldDef defEtatObservation = new StringFieldDef("etat_observation");
-
 
293
				FieldDef defNomSaisiObservation = new StringFieldDef("nomSaisi_observation");
-
 
294
				FieldDef defNomRetenuObservation = new StringFieldDef("nomRetenu_observation");
-
 
295
				FieldDef defLieuObservation = new StringFieldDef("lieu_observation");
-
 
296
				FieldDef defDateObservation = new StringFieldDef("date_observation");
-
 
297
				FieldDef defOrdreObservation = new StringFieldDef("ordre_observation");
-
 
298
				
-
 
299
				// on associe le store
-
 
300
 
-
 
301
				FieldDef[] defTab = { defEtatObservation, defNomSaisiObservation, defNomRetenuObservation,
-
 
302
						defLieuObservation, defDateObservation, defOrdreObservation };
-
 
303
				
-
 
304
				RecordDef rd = new RecordDef(defTab);
-
 
305
				
-
 
306
				final MemoryProxy dataProxy = new MemoryProxy(observationData);
-
 
307
				final ArrayReader reader = new ArrayReader(rd);
-
 
308
		
-
 
309
				final Store observationStore = new Store(dataProxy, reader);
-
 
310
				
-
 
311
				
-
 
312
				st = observationStore ;
-
 
313
				st.load() ;
-
 
314
				
-
 
315
				// par défaut le store est trié sur l'ordre d'observations
-
 
316
				st.sort("ordre_observation") ;
-
 
317
 
-
 
318
			
-
 
319
				// si on doit répandre les données, on notifie le médiateur qui les distribuera à son tour
-
 
320
				if(repandreRafraichissement)
-
 
321
				{
-
 
322
					listeObservation.rafraichir(st, false) ;					
-
 
323
				}
-
 
324
				
-
 
325
		}
-
 
326
		
-
 
327
		
-
 
328
		// Si on reçoit un tableau d'entiers
-
 
329
		// c'est un tableau d'un seul entier qui est le nombre d'observation correspondant aux critères
-
 
330
		if(nouvelleDonnees instanceof int[])
-
 
331
		{
-
 
332
			int[] pages = (int[])nouvelleDonnees ;
-
 
333
			
-
 
334
			// on calcule le nombre de pages nécessaires et on les met à jour dans le modèle
-
 
335
			pageMax  = calculerNbPages(pages[0]) ;
-
 
336
			nbElements = pages[0] ;
-
 
337
			
-
 
338
			// et on notifie de le mediateur du changement des valeurs
-
 
339
			changerPageMaxEtCourante(pageMax,pageEncours,taillePage,pages[0]) ;
-
 
340
			
-
 
Line 341... Line 238...
341
			obtenirListeObservation();
238
	
342
		}
239
	
343
	}
240
	
Line 357... Line 254...
357
		listeObservation.getToolBarVue().rafraichir(pages, false) ;
254
		listeObservation.getToolBarVue().rafraichir(pages, false) ;
Line 358... Line 255...
358
		
255
		
Line 359... Line -...
359
	}
-
 
360
	
-
 
361
	
-
 
362
	
-
 
363
	/**
-
 
364
	 * Calcule le nombre de pages nécessaires pour afficher un nombre d'élements donnés en fonction de la taille de page
-
 
365
	 * en cours
-
 
366
	 * @param nbElements le nombre d'élements total
-
 
367
	 * @return le nombre de pages 
-
 
368
	 */
-
 
369
	public int calculerNbPages(int nbElements)
-
 
370
	{
-
 
371
		// A cause de la betise de java pour les conversion implicite on fait quelques conversions manuellement
-
 
372
		// pour eviter qu'il arrondisse mal la division
-
 
373
		// nombre de pages = (nombre d'element / taille de la page) arrondie à l'entier superieur
-
 
374
		
-
 
375
		double nPage = (1.0*nbElements)/(1.0*taillePage) ; 
-
 
376
		double nPageRound = Math.ceil(nPage) ;
-
 
377
		Double nPageInt = new Double(nPageRound) ;
-
 
378
		
-
 
379
		// on convertit en entier
-
 
380
		return nPageInt.intValue() ; 
-
 
381
	}
-
 
382
 
-
 
383
	
-
 
384
	/**
-
 
385
	 * Recalcule la page en cours lors du changement du nombre d'élements
-
 
386
	 * @param nbElements le nombre d'élements total
-
 
387
	 * @return la nouvelle page encours
-
 
388
	 */
-
 
389
	public int calculerPageCourante(int nbElements)
-
 
390
	{
-
 
391
		// on calcule le nombre de page
-
 
392
		int nouvelNbPages = calculerNbPages(nbElements) ;
-
 
393
		// la nouvelle page en cours
-
 
394
		double nPageCourante = (1.0*pageEncours)/(1.0*pageMax) * (1.0*nouvelNbPages) ;
-
 
395
		
-
 
396
		// on arrondit au supérieur
-
 
397
		double nPageRound = Math.ceil(nPageCourante) ;
-
 
398
		Double nPageInt = new Double(nPageRound) ;
-
 
399
		
-
 
400
		// on convertit en entier
-
 
401
		return Math.abs(nPageInt.intValue()) ; 
-
 
402
	}
-
 
403
	
-
 
404
 
-
 
405
	/**
-
 
406
	 * Appelle le modèle pour lui demander les données d'une page à afficher
-
 
407
	 * @param pageCourante le numéro de page à affciher
-
 
408
	 */
-
 
409
	public void changerNumeroPage(int pageCourante) {
-
 
410
		
-
 
411
		
-
 
412
		
-
 
413
		pageEncours = pageCourante ;
-
 
414
		
-
 
415
		// On lance le chargerment des observations
-
 
416
		obtenirNombreObservation();
-
 
417
		
-
 
418
		listeObservation.getToolBarVue().changerPageCourante(pageCourante);
-
 
419
		
-
 
420
	}
-
 
421
	
-
 
422
	
-
 
423
	/**
-
 
424
	 * Appelle le modèle pour qu'il change la taille de page utilisée
-
 
425
	 * @param nouvelleTaillePage la nouvelle taille de page
-
 
426
	 */
-
 
427
	
-
 
428
	public void changerTaillePage(int nouvelleTaillePage)
-
 
429
	{
-
 
430
	
-
 
431
		taillePage = nouvelleTaillePage ;
-
 
432
		pageEncours = calculerPageCourante(nbElements) ;
-
 
433
 
-
 
434
		// 	On lance le chargerment des observations
-
 
435
		obtenirNombreObservation();
-
 
436
		
-
 
437
		
-
 
438
		// et on met à jour la taille de page dans les barres d'outils
-
 
439
		listeObservation.getToolBarVue().selectionnerTaillePage(nouvelleTaillePage);
-
 
Line 440... Line 256...
440
		
256
	}
441
		
257
	
442
	}
258
	
Line 476... Line 292...
476
	 * Lance la creation d'une observation  
292
	 * Lance la creation d'une observation  
477
	 * @param r : la vue demandeuse de donnee
293
	 * @param r : la vue demandeuse de donnee
478
	 * @param critere : les criteres de selection
294
	 * @param critere : les criteres de selection
479
	 */
295
	 */
Line 480... Line 296...
480
	
296
	
Line 481... Line 297...
481
	public void ajouterObservation(Rafraichissable r, Observation obs) {
297
	public void ajouterObservation(Observation obs) {
Line 482... Line 298...
482
		
298
		
Line 483... Line 299...
483
		observationModele.ajouterObservation(r, obs) ;
299
	//	observationModele.ajouterObservation(this, obs) ;