Subversion Repositories eFlore/Applications.cel

Rev

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