Subversion Repositories eFlore/Applications.cel

Rev

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