Subversion Repositories eFlore/Applications.cel

Rev

Rev 89 | 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.observation;
2
 
12 david 3
 
86 jpm 4
import java.io.Console;
5
 
82 david 6
// TODO : systematiser les onQuelquechose, appelle depuis les vues
7
 
2 aperonnet 8
import org.tela_botanica.client.CarnetEnLigneMediateur;
12 david 9
import org.tela_botanica.client.interfaces.Rafraichissable;
10
import org.tela_botanica.client.modeles.ListeObservation;
2 aperonnet 11
import org.tela_botanica.client.modeles.Observation;
66 david 12
import org.tela_botanica.client.vues.ArbreEntiteGeographiqueObservationFiltreVue;
12 david 13
import org.tela_botanica.client.vues.FormulaireSaisieObservationVue;
54 david 14
import org.tela_botanica.client.vues.ImageGeneriqueVue;
15
import org.tela_botanica.client.vues.InformationRepartitionVue;
12 david 16
import org.tela_botanica.client.vues.ListeObservationVue;
54 david 17
import org.tela_botanica.client.vues.PanneauFiltresObservationVues;
53 david 18
 
19
import com.google.gwt.core.client.GWT;
77 jpm 20
import com.google.gwt.user.client.Window;
41 jpm 21
import com.gwtext.client.core.EventObject;
86 jpm 22
import com.gwtext.client.core.Ext;
23
import com.gwtext.client.core.ExtElement;
53 david 24
import com.gwtext.client.core.RegionPosition;
86 jpm 25
import com.gwtext.client.widgets.Component;
12 david 26
import com.gwtext.client.widgets.Panel;
86 jpm 27
import com.gwtext.client.widgets.event.ContainerListener;
28
import com.gwtext.client.widgets.event.ContainerListenerAdapter;
53 david 29
import com.gwtext.client.widgets.layout.BorderLayout;
30
import com.gwtext.client.widgets.layout.BorderLayoutData;
31
import com.gwtext.client.widgets.layout.RowLayout;
80 jpm 32
import com.gwtext.client.widgets.layout.RowLayoutData;
2 aperonnet 33
 
48 david 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 aurelien
39
 *
40
 */
47 david 41
public class ObservationMediateur {
12 david 42
 
43
	/**
44
	 * booleen qui verifie l'unicite de l'instance (donc static)
45
	 */
31 jpm 46
	private static boolean estInstancie = false ;
47
 
48
	/**
49
	 * pointeur sur le médiateur (pour le pattern singleton)
50
	 */
51
	private static ObservationMediateur thisMediateur = null ;
12 david 52
 
53
	/** Mediateur general de l'application carnet en ligne
54
	 *
55
	 *
56
	 */
57
 
58
	private CarnetEnLigneMediateur carnetEnLigneMediateur = null ;
59
 
60
 
61
	/**
62
	 * modele de données
63
	 */
64
	private ObservationModele observationModele = null ;
65
 
66
 
67
	/**
68
	 * panneau principal des Observation (onglet "observation")
69
	 */
70
	private final Panel panneauPrincipalObservation = new Panel("Observation");
71
 
72
 
73
	/**
74
	 * liste détaillée des Observations
75
	 */
76
	private ListeObservationVue listeObservation = null ;
77
 
78
	/**
79
	 * Saisie des Observations
80
	 */
81
 
82
	private FormulaireSaisieObservationVue formulaireSaisieObservationVue=null;
83
 
48 david 84
 
85
 
12 david 86
	/**
87
	 * booleen explicitant s'il y a une selection en cours
88
	 */
89
	private boolean selection = false ;
47 david 90
 
12 david 91
 
92
 
93
	/**
94
	 * La liste des observations affichées en cours (verifier utilité)
95
	 */
96
 
97
	private ListeObservation cacheObservation = new ListeObservation(0) ;
98
	/**
99
 
100
 
53 david 101
	/**
102
	 * panneau conteneur pour le panneau  des informations lies à l'observation
103
	 */
12 david 104
 
53 david 105
  	private Panel details = new Panel("Détails");
106
 
107
 
108
 
12 david 109
	/**
53 david 110
	 * panneau conteneur pour le panneau des filtres
111
	 */
112
 
54 david 113
  	private PanneauFiltresObservationVues filtres = null;
53 david 114
 
115
 
54 david 116
 
117
  	/**
118
  	 * panneau d'information de repartition sur le nom selectionné
119
  	 *
120
  	 */
121
 
122
  	private InformationRepartitionVue informationRepartitionVue=null;
123
 
124
 
125
  	/**
126
  	 * panneau d'affichage d'une image generique associe au nom selectionne
127
  	 *
128
  	 */
129
 
130
  	private ImageGeneriqueVue imageGeneriqueVue=null;
131
 
132
 
53 david 133
	/**
12 david 134
	 * constructeur privé (on accède a la classe par la méthode getInstance
135
	 */
136
 
137
 
138
	private ObservationMediateur(CarnetEnLigneMediateur carnetEnLigneMediateur )
139
	{
140
		this.carnetEnLigneMediateur=carnetEnLigneMediateur;
141
 
53 david 142
 
12 david 143
		// on crée un modèle
144
		observationModele = ObservationModele.Instance(this);
145
 
146
 
48 david 147
 
12 david 148
		listeObservation = new ListeObservationVue(this);
53 david 149
		listeObservation.setTitle("Observations");
12 david 150
 
53 david 151
		// quelques variables de position pour les borderlayouts
152
		final BorderLayoutData regionNord = new BorderLayoutData(
153
				RegionPosition.NORTH);
154
 
155
		final BorderLayoutData regionCentre = new BorderLayoutData(
156
				RegionPosition.CENTER);
157
 
158
 
159
		final BorderLayoutData regionEst = new BorderLayoutData(
160
				RegionPosition.EAST);
161
 
162
 
163
		if (GWT.isScript()) {  // FIXME : ne fonctionne pas en mode hosted
164
			regionEst.setSplit(true);
165
		}
166
 
167
		final BorderLayoutData regionOuest = new BorderLayoutData(
168
				RegionPosition.WEST);
12 david 169
 
53 david 170
		if (GWT.isScript()) {  // FIXME : ne fonctionne pas en mode hosted
171
			regionOuest.setSplit(true);
172
		}
173
 
174
		panneauPrincipalObservation.setLayout(new BorderLayout()) ;
175
 
176
 
12 david 177
		// Le formulaire de saisie / modification d'observation
178
 
179
		formulaireSaisieObservationVue = new FormulaireSaisieObservationVue(this);
53 david 180
		formulaireSaisieObservationVue.setTitle("Saisie");
181
		formulaireSaisieObservationVue.setTitleCollapse(true);
182
	 	formulaireSaisieObservationVue.setCollapsible(true) ;
183
 
2 aperonnet 184
 
53 david 185
		Panel centre = new Panel();
55 jpm 186
		centre.setLayout(new RowLayout()) ;
80 jpm 187
 
188
		centre.setHeight(panneauPrincipalObservation.getHeight()) ;
12 david 189
 
80 jpm 190
		centre.add(formulaireSaisieObservationVue, new RowLayoutData("30%")) ;
191
		centre.add(listeObservation, new RowLayoutData("70%"));
2 aperonnet 192
 
53 david 193
		// on initialise le volet qui contient les details
194
		details.setWidth("15%");
195
		details.setTitleCollapse(true);
196
		details.setCollapsible(true);
54 david 197
		details.setLayout(new RowLayout());
53 david 198
 
54 david 199
 
200
 
201
		// Information de repartition
202
		informationRepartitionVue=new InformationRepartitionVue(this);
203
		// TODO : calcul de la hauteur automatique par le panel ?
204
		informationRepartitionVue.setHeight(160);
205
		details.add(informationRepartitionVue);
206
 
207
 
208
		// Image generique
209
		imageGeneriqueVue=new ImageGeneriqueVue(this);
210
		// TODO : calcul de la hauteur automatique par le panel ?
211
 
212
		imageGeneriqueVue.setHeight(160);
213
		details.add(imageGeneriqueVue);
214
 
215
 
216
		// on crée le panneau des filtres
217
		filtres = new PanneauFiltresObservationVues(this);
218
 
219
		// on initialise le volet qui contient les filtres
60 jpm 220
		filtres.setWidth("15%");
53 david 221
		filtres.setTitleCollapse(true);
222
		filtres.setCollapsible(true);
54 david 223
 
53 david 224
		panneauPrincipalObservation.add(details,regionEst);
225
		panneauPrincipalObservation.add(filtres,regionOuest);
226
		panneauPrincipalObservation.add(centre,regionCentre);
227
 
12 david 228
	}
2 aperonnet 229
 
7 aperonnet 230
 
12 david 231
	/**
232
	 * Retourne une instance de manière unique
233
	 * @return l'instance unique du médiateur
234
	 */
235
	public static ObservationMediateur Instance(CarnetEnLigneMediateur carnetEnLigneMediateur)
236
	{
31 jpm 237
			if(!estInstancie || thisMediateur == null)
12 david 238
			{
239
				estInstancie = true ;
31 jpm 240
				thisMediateur = new ObservationMediateur(carnetEnLigneMediateur) ;
12 david 241
			}
31 jpm 242
 
82 david 243
 
31 jpm 244
			return thisMediateur ;
12 david 245
	}
82 david 246
 
12 david 247
 
248
 
82 david 249
	// ACTIONS  a entreprendre lors d'un evenement particulier
12 david 250
 
82 david 251
 
12 david 252
	/**
82 david 253
	 * Lors du raffraichissement de la liste d'observation
254
	 */
255
 
256
 
257
	public void onRafraichissementListeObservations() {
258
 
259
		cacheObservation = listeObservation.getCacheListeObservation() ;
260
		if(cacheObservation.size() == 0)
261
		{
262
			formulaireSaisieObservationVue.viderChampsObservation() ;
263
		}
264
		carnetEnLigneMediateur.donneesRafraichies(cacheObservation) ;
265
 
266
 
267
	}
268
 
269
	/**
270
	 *
271
	 * TODO : fonction plus generique, appelle sur un clic ou une selection de ligne, a appeller : SelectionnerObservation
272
	 * est appelé lors d'un clic de souris sur un enregistrement de la liste le
273
	 * médiateur gère alors les conséquences
274
	 *
275
	 * @param rowIndex
276
	 *            le numéro de ligne selectionné
277
	 */
278
 
279
	public void onClicListeObservation(int rowIndex, String ordreObservation) {
280
 
281
 
282
		Observation obs = cacheObservation.get(ordreObservation) ;
283
 
86 jpm 284
		masquerChargementInfosObservations() ;
285
 
82 david 286
		// Affichage de la carte de repartition correspondante
287
		String numeroNomenclaturalSaisiObservation = obs.getNumeroNomenclaturalSaisi() ;
288
 
289
		observationModele.obtenirImageInformationRepartition(informationRepartitionVue,numeroNomenclaturalSaisiObservation) ;
290
 
291
		// affichage des détails dans le formulaire d'observation
292
		formulaireSaisieObservationVue.rafraichir(obs, false) ;
293
 
294
		// Affichage de l'image correspondante
295
 
296
		observationModele.obtenirImageGenerique(imageGeneriqueVue,numeroNomenclaturalSaisiObservation) ;
297
 
298
 
299
	}
300
 
301
 
87 jpm 302
 
82 david 303
 
304
 
305
 
306
	// ACCES au Modèle
307
 
308
 
309
	// C du CRUD
310
 
311
 
312
 
313
	/**
314
	 * TODO : afficher un message du type "observation ajouté".
315
	 * Lance la creation d'une observation
316
	 * @param obs : l'observation saisie
317
	 */
318
 
319
 
320
 
321
	public void ajouterObservation(Observation obs) {
322
 
323
 
324
	  // On raffraichi la liste d'observation
325
	  observationModele.ajouterObservation(listeObservation, obs) ;
91 jpm 326
	  filtres.getArbreEntiteGeographiqueObservationFiltreVue().rafraichir(obs,true) ;
82 david 327
 
328
	}
329
 
330
 
331
 
332
	// R du CRUD
333
 
334
	/**
54 david 335
	 * Demande au modele le nombre d'Observation à afficher
336
	 * TODO : grouper cette demande avec la demande d'affichage de liste ?
12 david 337
	 */
2 aperonnet 338
 
12 david 339
	public void obtenirNombreObservation() {
340
 
341
 
54 david 342
		  observationModele.obtenirNombreObservation(listeObservation) ;
12 david 343
 
2 aperonnet 344
	}
54 david 345
 
12 david 346
 
82 david 347
 
348
	public void obtenirListeObservation() {
349
		obtenirListeObservation(listeObservation);
350
	}
351
 
2 aperonnet 352
	/**
82 david 353
	 * Demande au modele le detail  des Observations à afficher
54 david 354
	 * TODO : grouper cette demande avec la demande d'affichage de liste ?
2 aperonnet 355
	 */
7 aperonnet 356
 
12 david 357
 
61 jpm 358
	public void obtenirListeObservation(Rafraichissable r) {
359
 
77 jpm 360
		listeObservation.masquerChargement() ;
361
		formulaireSaisieObservationVue.viderChampsObservation() ;
61 jpm 362
		observationModele.obtenirListeObservation(r,listeObservation.getTaillePage(),listeObservation.getPageEncours()) ;
363
	}
364
 
86 jpm 365
	public void obtenirCacheObservation(Rafraichissable r) {
366
 
367
		r.rafraichir(cacheObservation, false) ;
368
	}
369
 
82 david 370
 
2 aperonnet 371
	/**
82 david 372
	 * Envoie au modèle une demande pour obtenir l'arbre des localites
373
	 *
374
	 * @param r
375
	 *            le raffraichissable qui a demandé la mise à jour
2 aperonnet 376
	 */
82 david 377
	public void obtenirListeEntiteGeographique() {
12 david 378
 
91 jpm 379
		observationModele.obtenirListeEntiteGeographique(filtres.getArbreEntiteGeographiqueObservationFiltreVue());
12 david 380
 
381
	}
82 david 382
 
383
 
384
	// U du CRUD
385
 
386
 
2 aperonnet 387
 
54 david 388
 
82 david 389
	public void modifierObservation(Observation obs) {
390
 
12 david 391
 
82 david 392
	  // On raffraichi la liste d'observation
393
	  observationModele.modifierObservation(listeObservation, obs) ;
91 jpm 394
	  filtres.getArbreEntiteGeographiqueObservationFiltreVue().rafraichir(obs,true) ;
82 david 395
 
396
	}
12 david 397
 
82 david 398
 
399
 
400
	// D du CRUD
401
 
402
 
54 david 403
	/**
82 david 404
	 * TODO : afficher un message du type "observation modifie".
405
	 * Lance la modification d'une observation
406
	 * @param obs : l'observation a modifier
54 david 407
	 */
408
 
82 david 409
 
410
 
411
	public void supprimerObservation(Rafraichissable r, String numeroOrdre) {
412
 
413
		if(listeObservation.getSelectionModel().getCount() > 0)
414
		{
415
			if(Window.confirm("Êtes vous sur de vouloir supprimer cette observation ?")) {
416
			observationModele.supprimerObservation(r,numeroOrdre) ;
417
			}
418
		}
419
 
2 aperonnet 420
	}
12 david 421
 
82 david 422
 
423
 
424
 
2 aperonnet 425
 
82 david 426
	// Assistants de saisie
427
 
2 aperonnet 428
	/**
13 david 429
	 *
430
	 * Lance un appel de recherche d'une liste de commune correspondant aux criteres de selectionne
431
	 * @param r : la vue demandeuse de donnee
432
	 * @param critere : les criteres de selection
433
	 */
12 david 434
 
13 david 435
	public void obtenirListeReferentielCommune(Rafraichissable r, String critere) {
12 david 436
 
13 david 437
		observationModele.obtenirListeReferentielCommune(r,critere) ;
2 aperonnet 438
 
12 david 439
 
2 aperonnet 440
	}
20 david 441
 
82 david 442
 
443
 
20 david 444
	/**
445
	 *
446
	 * Lance un appel de recherche d'une liste de nom scientifique correspondant aux criteres de selectionne
447
	 * @param r : la vue demandeuse de donnee
448
	 * @param critere : les criteres de selection
449
	 */
450
 
451
	public void obtenirListeReferentielNom(Rafraichissable r, String critere) {
452
 
453
		observationModele.obtenirListeReferentielNom(r,critere) ;
2 aperonnet 454
 
20 david 455
 
456
	}
82 david 457
 
458
	// Etat du syteme
459
 
20 david 460
	/**
82 david 461
	 * C'est dans cette fonction que doivent être renvoyé les valeurs des filtres
462
	 * sous forme de tableau [nom, valeur]
463
	 * @return Les noms et valeurs des filtres
20 david 464
	 */
82 david 465
	public String[][] renvoyerFiltres()
466
	{
91 jpm 467
			String[] filtresEntitesGeo = filtres.getArbreEntiteGeographiqueObservationFiltreVue().renvoyerValeursAFiltrer() ;
468
			String chaineNomsFiltresGeo = filtresEntitesGeo[0] ;
469
			String chaineValFiltresGeo = filtresEntitesGeo[1] ;
87 jpm 470
 
91 jpm 471
			String[] filtresDate = filtres.getArbreDateObservationFiltreVue().renvoyerValeursAFiltrer() ;
472
			String chaineNomsFiltresDate = filtresDate[0] ;
473
			String chaineValFiltresDate = filtresDate[1] ;
474
 
475
			String chaineNomsFiltres = chaineNomsFiltresGeo+","+chaineNomsFiltresDate ;
476
			String chaineValFiltres = chaineValFiltresGeo+","+chaineValFiltresDate ;
477
 
87 jpm 478
			String[] nomsFiltres = chaineNomsFiltres.split(",") ;
479
			String[] valsFiltres = chaineValFiltres.split(",") ;
91 jpm 480
 
481
			String [][] valeursFiltres = new String[nomsFiltres.length][2] ;
482
 
483
 
87 jpm 484
			if(nomsFiltres.length > 0)
485
			{
486
 
89 jpm 487
				for(int i = 0 ; i < nomsFiltres.length ; i++)
87 jpm 488
				{
489
					valeursFiltres[i][0] = nomsFiltres[i] ;
490
					if(valsFiltres[i].equals("Inconnue"))
491
					{
492
						valeursFiltres[i][1] = "000null" ;
493
					}
494
					else
495
					{
496
						valeursFiltres[i][1] = valsFiltres[i] ;
497
					}
498
				}
499
 
500
				return valeursFiltres ;
501
			}
502
			else
503
			{
504
				return valeursFiltres ;
505
			}
20 david 506
	}
82 david 507
 
41 jpm 508
 
54 david 509
	/**
82 david 510
	 * Retourne l'identifiant de l'utilisateur connecte
511
	 * @return : identifiant de l'utilisateur connecte
74 david 512
	 */
82 david 513
	public String getIdentifiant() {
74 david 514
 
82 david 515
		return carnetEnLigneMediateur.getUtilisateur().getIdentifiant();
74 david 516
 
77 jpm 517
	}
82 david 518
 
519
 
74 david 520
	/**
54 david 521
	 *
82 david 522
	 * @return
54 david 523
	 *
524
	 */
525
 
82 david 526
	public Panel getPanneauPrincipalObservation() {
527
		return panneauPrincipalObservation;
528
	}
54 david 529
 
530
 
41 jpm 531
	public void montrerContextMenu(EventObject e) {
532
 
533
 
534
 
535
	}
536
 
537
	public void doubleClicListeObservation(int rowIndex) {
538
 
539
 
540
	}
541
 
54 david 542
 
82 david 543
 
544
	// Getters
545
 
54 david 546
	public PanneauFiltresObservationVues getPanneauFiltres() {
547
 
548
		return filtres;
549
 
550
	}
86 jpm 551
 
552
	public void masquerChargementInfosObservations()
553
	{
554
		ExtElement masked = Ext.get(details.getId());
54 david 555
 
86 jpm 556
		if (masked != null && !masked.isMasked()) {
557
			informationRepartitionVue.raz() ;
558
			imageGeneriqueVue.raz() ;
559
			masked.mask("Chargement", true);
560
		}
561
	}
82 david 562
 
86 jpm 563
	public void deMasquerChargementInfosObservations()
564
	{
565
		ExtElement masked = Ext.get(details.getId());
63 jpm 566
 
86 jpm 567
		if (masked != null && masked.isMasked()) {
568
			masked.unmask() ;
569
		}
570
	}
91 jpm 571
 
572
 
573
	public void obtenirDatesObservation() {
574
 
575
		observationModele.obtenirDatesObservation(filtres.getArbreDateObservationFiltreVue()) ;
576
 
577
	}
12 david 578
 
2 aperonnet 579
}