Subversion Repositories eFlore/Applications.cel

Rev

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