Subversion Repositories eFlore/Applications.cel

Rev

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