Subversion Repositories eFlore/Applications.cel

Rev

Details | 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;
80 jpm 24
import com.gwtext.client.widgets.layout.RowLayoutData;
25
import com.gwtext.client.widgets.layout.VerticalLayout;
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
 
238
			return thisMediateur ;
12 david 239
	}
240
 
241
 
242
 
243
	/**
54 david 244
	 * Demande au modele le nombre d'Observation à afficher
245
	 * TODO : grouper cette demande avec la demande d'affichage de liste ?
12 david 246
	 */
2 aperonnet 247
 
12 david 248
	public void obtenirNombreObservation() {
249
 
250
 
54 david 251
		  observationModele.obtenirNombreObservation(listeObservation) ;
12 david 252
 
2 aperonnet 253
	}
54 david 254
 
12 david 255
 
2 aperonnet 256
	/**
54 david 257
	 * Demande au modele le detail  dess Observations à afficher
258
	 * TODO : grouper cette demande avec la demande d'affichage de liste ?
259
	 * @param r : la vue demandeuse de donnee
2 aperonnet 260
	 */
7 aperonnet 261
 
262
 
12 david 263
	public void obtenirListeObservation() {
264
 
77 jpm 265
		listeObservation.masquerChargement() ;
266
		formulaireSaisieObservationVue.viderChampsObservation() ;
61 jpm 267
		observationModele.obtenirListeObservation(listeObservation,listeObservation.getTaillePage(),listeObservation.getPageEncours()) ;
47 david 268
 
31 jpm 269
	}
12 david 270
 
61 jpm 271
	public void obtenirListeObservation(Rafraichissable r) {
272
 
77 jpm 273
		listeObservation.masquerChargement() ;
274
		formulaireSaisieObservationVue.viderChampsObservation() ;
61 jpm 275
		observationModele.obtenirListeObservation(r,listeObservation.getTaillePage(),listeObservation.getPageEncours()) ;
276
	}
277
 
2 aperonnet 278
	/**
12 david 279
	 * C'est dans cette fonction que doivent être renvoyé les valeurs des filtres
280
	 * sous forme de tableau [nom, valeur]
281
	 * @return Les noms et valeurs des filtres
2 aperonnet 282
	 */
12 david 283
	public String[][] renvoyerFiltres()
284
	{
41 jpm 285
		String[][] valeursFiltres = { {"",""} } ;
12 david 286
 
287
 
288
		return valeursFiltres ;
289
	}
2 aperonnet 290
 
7 aperonnet 291
 
54 david 292
 
293
	/**
294
	 * Retourne l'identifiant de l'utilisateur connecte
295
	 * @return : identifiant de l'utilisateur connecte
296
	 */
12 david 297
	public String getIdentifiant() {
298
 
299
		return carnetEnLigneMediateur.getUtilisateur().getIdentifiant();
300
 
301
	}
2 aperonnet 302
 
303
 
54 david 304
	/**
305
	 *
306
	 * @return
307
	 *
308
	 */
309
 
12 david 310
	public Panel getPanneauPrincipalObservation() {
311
		return panneauPrincipalObservation;
2 aperonnet 312
	}
12 david 313
 
2 aperonnet 314
 
315
 
48 david 316
 
2 aperonnet 317
	/**
13 david 318
	 *
319
	 * Lance un appel de recherche d'une liste de commune correspondant aux criteres de selectionne
320
	 * @param r : la vue demandeuse de donnee
321
	 * @param critere : les criteres de selection
322
	 */
12 david 323
 
13 david 324
	public void obtenirListeReferentielCommune(Rafraichissable r, String critere) {
12 david 325
 
13 david 326
		observationModele.obtenirListeReferentielCommune(r,critere) ;
2 aperonnet 327
 
12 david 328
 
2 aperonnet 329
	}
20 david 330
 
331
	/**
332
	 *
333
	 * Lance un appel de recherche d'une liste de nom scientifique correspondant aux criteres de selectionne
334
	 * @param r : la vue demandeuse de donnee
335
	 * @param critere : les criteres de selection
336
	 */
337
 
338
	public void obtenirListeReferentielNom(Rafraichissable r, String critere) {
339
 
340
		observationModele.obtenirListeReferentielNom(r,critere) ;
2 aperonnet 341
 
20 david 342
 
343
	}
2 aperonnet 344
 
12 david 345
 
20 david 346
	/**
54 david 347
	 * TODO : afficher un message du type "observation ajouté".
348
	 * Lance la creation d'une observation
349
	 * @param obs : l'observation saisie
20 david 350
	 */
351
 
54 david 352
 
353
 
47 david 354
	public void ajouterObservation(Observation obs) {
54 david 355
 
20 david 356
 
54 david 357
	  // On raffraichi la liste d'observation
53 david 358
	  observationModele.ajouterObservation(listeObservation, obs) ;
20 david 359
 
360
	}
41 jpm 361
 
54 david 362
 
363
 
364
	/**
74 david 365
	 * TODO : afficher un message du type "observation modifie".
366
	 * Lance la modification d'une observation
367
	 * @param obs : l'observation a modifier
368
	 */
369
 
370
 
371
 
79 david 372
	public void modifierObservation(Observation obs) {
74 david 373
 
374
 
375
	  // On raffraichi la liste d'observation
79 david 376
	  observationModele.modifierObservation(listeObservation, obs) ;
74 david 377
 
378
	}
379
 
77 jpm 380
	public void supprimerObservation(Rafraichissable r, String numeroOrdre) {
381
 
382
		if(listeObservation.getSelectionModel().getCount() > 0)
383
		{
384
			if(Window.confirm("Êtes vous sur de vouloir supprimer cette observation ?")) {
385
			observationModele.supprimerObservation(r,numeroOrdre) ;
386
			}
387
		}
388
 
389
	}
74 david 390
 
391
 
392
	/**
54 david 393
	 *
394
	 * TODO : fonction plus generique, appelle sur un clic ou une selection de ligne, a appeller : SelectionnerObservation
395
	 * est appelé lors d'un clic de souris sur un enregistrement de la liste le
396
	 * médiateur gère alors les conséquences
397
	 *
398
	 * @param rowIndex
399
	 *            le numéro de ligne selectionné
400
	 */
401
 
71 jpm 402
	public void clicListeObservation(int rowIndex, String ordreObservation) {
54 david 403
 
41 jpm 404
 
71 jpm 405
		Observation obs = cacheObservation.get(ordreObservation) ;
406
 
54 david 407
		// Affichage de la carte de repartition correspondante
71 jpm 408
		String numeroNomenclaturalSaisiObservation = obs.getNumeroNomenclaturalSaisi() ;
54 david 409
 
410
		observationModele.obtenirImageInformationRepartition(informationRepartitionVue,numeroNomenclaturalSaisiObservation) ;
411
 
71 jpm 412
		// affichage des détails dans le formulaire d'observation
413
		formulaireSaisieObservationVue.rafraichir(obs, false) ;
54 david 414
 
415
		// Affichage de l'image correspondante
416
 
417
		observationModele.obtenirImageGenerique(imageGeneriqueVue,numeroNomenclaturalSaisiObservation) ;
418
 
419
 
41 jpm 420
	}
54 david 421
 
422
 
423
 
2 aperonnet 424
 
41 jpm 425
 
426
	public void montrerContextMenu(EventObject e) {
427
 
428
 
429
 
430
	}
431
 
432
	public void doubleClicListeObservation(int rowIndex) {
433
 
434
 
435
	}
436
 
54 david 437
 
438
	public PanneauFiltresObservationVues getPanneauFiltres() {
439
 
440
		return filtres;
441
 
442
	}
443
 
444
 
445
	/**
446
	 * Envoie au modèle une demande pour obtenir l'arbre des localites
447
	 *
448
	 * @param r
449
	 *            le raffraichissable qui a demandé la mise à jour
450
	 */
66 david 451
	public void obtenirListeEntiteGeographique() {
54 david 452
 
66 david 453
		observationModele.obtenirListeEntiteGeographique(filtres.getarbreEntiteGeographiqueObservationFiltreVue());
54 david 454
 
455
	}
456
 
63 jpm 457
 
458
	public void donneesRafraichies(Object nouvelleDonnees) {
459
 
460
		carnetEnLigneMediateur.donneesRafraichies(nouvelleDonnees) ;
461
 
462
	}
463
 
71 jpm 464
 
465
	public void rafraichirCacheObservation(Object nouvelleDonnees) {
466
 
467
		if(nouvelleDonnees instanceof ListeObservation) {
468
			cacheObservation = (ListeObservation)nouvelleDonnees ;
77 jpm 469
			if(cacheObservation.size() == 0)
470
			{
471
				formulaireSaisieObservationVue.viderChampsObservation() ;
472
			}
71 jpm 473
			donneesRafraichies(nouvelleDonnees) ;
474
		}
77 jpm 475
	}
12 david 476
 
2 aperonnet 477
}