Subversion Repositories eFlore/Applications.cel

Rev

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