Subversion Repositories eFlore/Applications.cel

Rev

Rev 196 | Rev 201 | 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
 
86 jpm 4
 
82 david 5
// TODO : systematiser les onQuelquechose, appelle depuis les vues
6
 
156 aurelien 7
 
2 aperonnet 8
import org.tela_botanica.client.CarnetEnLigneMediateur;
12 david 9
import org.tela_botanica.client.interfaces.Rafraichissable;
10
import org.tela_botanica.client.modeles.ListeObservation;
2 aperonnet 11
import org.tela_botanica.client.modeles.Observation;
195 david 12
import org.tela_botanica.client.vues.observation.FormulaireSaisieObservationVue;
13
import org.tela_botanica.client.vues.observation.ListeObservationVue;
14
import org.tela_botanica.client.vues.observation.MenuObservationVue;
15
import org.tela_botanica.client.vues.observation.PanneauFiltresObservationVues;
196 david 16
import org.tela_botanica.client.vues.observation.filtres.ArbreMotsClesObservationVue;
17
import org.tela_botanica.client.vues.observation.indicateurs.ImageGeneriqueVue;
18
import org.tela_botanica.client.vues.observation.indicateurs.InformationRepartitionVue;
19
import org.tela_botanica.client.vues.observation.indicateurs.MiniZoomImageVue;
20
import org.tela_botanica.client.vues.observation.indicateurs.NuageMotsClesVue;
115 aurelien 21
 
53 david 22
import com.google.gwt.core.client.GWT;
140 aurelien 23
import com.google.gwt.user.client.History;
77 jpm 24
import com.google.gwt.user.client.Window;
41 jpm 25
import com.gwtext.client.core.EventObject;
86 jpm 26
import com.gwtext.client.core.Ext;
27
import com.gwtext.client.core.ExtElement;
53 david 28
import com.gwtext.client.core.RegionPosition;
156 aurelien 29
import com.gwtext.client.data.Tree;
86 jpm 30
import com.gwtext.client.widgets.Component;
12 david 31
import com.gwtext.client.widgets.Panel;
156 aurelien 32
import com.gwtext.client.widgets.TabPanel;
86 jpm 33
import com.gwtext.client.widgets.event.ContainerListenerAdapter;
53 david 34
import com.gwtext.client.widgets.layout.BorderLayout;
35
import com.gwtext.client.widgets.layout.BorderLayoutData;
156 aurelien 36
import com.gwtext.client.widgets.layout.FitLayout;
53 david 37
import com.gwtext.client.widgets.layout.RowLayout;
80 jpm 38
import com.gwtext.client.widgets.layout.RowLayoutData;
156 aurelien 39
import com.gwtext.client.widgets.menu.BaseItem;
40
import com.gwtext.client.widgets.menu.Item;
41
import com.gwtext.client.widgets.menu.Menu;
42
import com.gwtext.client.widgets.menu.event.MenuListenerAdapter;
43
import com.gwtext.client.widgets.tree.TreeEditor;
44
import com.gwtext.client.widgets.tree.TreeNode;
2 aperonnet 45
 
48 david 46
 
12 david 47
/**
48
 * Mediateur gérant les interactions entre vues et les echanges de données
49
 * C'est un singleton.
50
 * @author aurelien
51
 *
52
 */
47 david 53
public class ObservationMediateur {
12 david 54
 
55
	/**
56
	 * booleen qui verifie l'unicite de l'instance (donc static)
57
	 */
31 jpm 58
	private static boolean estInstancie = false ;
59
 
60
	/**
61
	 * pointeur sur le médiateur (pour le pattern singleton)
62
	 */
63
	private static ObservationMediateur thisMediateur = null ;
12 david 64
 
65
	/** Mediateur general de l'application carnet en ligne
66
	 *
67
	 *
68
	 */
69
 
70
	private CarnetEnLigneMediateur carnetEnLigneMediateur = null ;
71
 
72
 
73
	/**
74
	 * modele de données
75
	 */
76
	private ObservationModele observationModele = null ;
77
 
78
 
79
	/**
80
	 * panneau principal des Observation (onglet "observation")
81
	 */
82
	private final Panel panneauPrincipalObservation = new Panel("Observation");
83
 
84
 
85
	/**
86
	 * liste détaillée des Observations
87
	 */
88
	private ListeObservationVue listeObservation = null ;
89
 
90
	/**
91
	 * Saisie des Observations
92
	 */
93
 
94
	private FormulaireSaisieObservationVue formulaireSaisieObservationVue=null;
95
 
48 david 96
 
97
 
12 david 98
	/**
99
	 * booleen explicitant s'il y a une selection en cours
100
	 */
156 aurelien 101
	private boolean selection = false ;
12 david 102
	/**
53 david 103
	 * panneau conteneur pour le panneau  des informations lies à l'observation
104
	 */
12 david 105
 
53 david 106
  	private Panel details = new Panel("Détails");
107
 
156 aurelien 108
  	private Panel panelMotsCles = new Panel("Mots Clés");
109
 
195 david 110
  	private ArbreMotsClesObservationVue arbreMotsClesVue = null ;
156 aurelien 111
 
112
  	private TabPanel detailsEtMotsCles = new TabPanel();
53 david 113
 
114
 
12 david 115
	/**
53 david 116
	 * panneau conteneur pour le panneau des filtres
117
	 */
118
 
54 david 119
  	private PanneauFiltresObservationVues filtres = null;
53 david 120
 
121
 
54 david 122
 
123
  	/**
124
  	 * panneau d'information de repartition sur le nom selectionné
125
  	 *
126
  	 */
127
 
128
  	private InformationRepartitionVue informationRepartitionVue=null;
129
 
130
 
131
  	/**
132
  	 * panneau d'affichage d'une image generique associe au nom selectionne
133
  	 *
134
  	 */
135
 
136
  	private ImageGeneriqueVue imageGeneriqueVue=null;
137
 
94 jpm 138
  	private MiniZoomImageVue mvz = null ;
54 david 139
 
115 aurelien 140
  	private NuageMotsClesVue nuaMC = null;
94 jpm 141
 
125 aurelien 142
  	private Panel conteneurFormulaire = null ;
115 aurelien 143
 
140 aurelien 144
  	private boolean importerObservations = false ;
145
 
53 david 146
	/**
12 david 147
	 * constructeur privé (on accède a la classe par la méthode getInstance
148
	 */
149
 
150
 
151
	private ObservationMediateur(CarnetEnLigneMediateur carnetEnLigneMediateur )
152
	{
153
		this.carnetEnLigneMediateur=carnetEnLigneMediateur;
154
 
53 david 155
 
12 david 156
		// on crée un modèle
157
		observationModele = ObservationModele.Instance(this);
158
 
159
 
48 david 160
 
12 david 161
		listeObservation = new ListeObservationVue(this);
53 david 162
		listeObservation.setTitle("Observations");
12 david 163
 
53 david 164
		// quelques variables de position pour les borderlayouts
165
		final BorderLayoutData regionNord = new BorderLayoutData(
166
				RegionPosition.NORTH);
167
 
168
		final BorderLayoutData regionCentre = new BorderLayoutData(
169
				RegionPosition.CENTER);
170
 
171
 
172
		final BorderLayoutData regionEst = new BorderLayoutData(
173
				RegionPosition.EAST);
174
 
175
 
176
		if (GWT.isScript()) {  // FIXME : ne fonctionne pas en mode hosted
177
			regionEst.setSplit(true);
178
		}
179
 
180
		final BorderLayoutData regionOuest = new BorderLayoutData(
181
				RegionPosition.WEST);
12 david 182
 
53 david 183
		if (GWT.isScript()) {  // FIXME : ne fonctionne pas en mode hosted
184
			regionOuest.setSplit(true);
185
		}
186
 
187
		panneauPrincipalObservation.setLayout(new BorderLayout()) ;
188
 
115 aurelien 189
		// on ajoute un panneau supplémentaire pour contenir le formulaire, pour éviter un bug de taille
190
		// des panneaux
125 aurelien 191
		conteneurFormulaire = new Panel();
53 david 192
 
12 david 193
		// Le formulaire de saisie / modification d'observation
194
		formulaireSaisieObservationVue = new FormulaireSaisieObservationVue(this);
115 aurelien 195
		formulaireSaisieObservationVue.setHeader(false);
196
		conteneurFormulaire.setTitle("Saisie");
197
		conteneurFormulaire.setTitleCollapse(true);
198
		conteneurFormulaire.setCollapsible(true) ;
53 david 199
 
196 david 200
 
125 aurelien 201
		final Panel centre = new Panel();
202
		centre.setLayout(new RowLayout());
80 jpm 203
 
125 aurelien 204
		centre.setHeight(panneauPrincipalObservation.getHeight());
115 aurelien 205
 
206
		formulaireSaisieObservationVue.setBorder(false);
207
		conteneurFormulaire.add(formulaireSaisieObservationVue);
12 david 208
 
128 aurelien 209
		centre.add(conteneurFormulaire, new RowLayoutData(210));
125 aurelien 210
		centre.add(listeObservation, new RowLayoutData());
156 aurelien 211
 
177 david 212
		Panel conteneurDetailsMotsCles = new Panel("Détails");
53 david 213
		// on initialise le volet qui contient les details
177 david 214
		conteneurDetailsMotsCles.setWidth("10%");
215
		conteneurDetailsMotsCles.setTitleCollapse(true);
216
		conteneurDetailsMotsCles.setCollapsible(true);
156 aurelien 217
 
177 david 218
		conteneurDetailsMotsCles.add(detailsEtMotsCles);
156 aurelien 219
 
177 david 220
		conteneurDetailsMotsCles.setLayout(new FitLayout());
156 aurelien 221
 
222
		details.setAutoScroll(true);
54 david 223
		details.setLayout(new RowLayout());
156 aurelien 224
		details.setWidth("100%");
53 david 225
 
195 david 226
		arbreMotsClesVue = new ArbreMotsClesObservationVue(this) ;
156 aurelien 227
		panelMotsCles.add(arbreMotsClesVue);
228
 
54 david 229
		// Information de repartition
230
		informationRepartitionVue=new InformationRepartitionVue(this);
231
		// TODO : calcul de la hauteur automatique par le panel ?
232
		informationRepartitionVue.setHeight(160);
136 aurelien 233
		details.add(informationRepartitionVue, new RowLayoutData("33%"));
54 david 234
 
235
 
236
		// Image generique
237
		imageGeneriqueVue=new ImageGeneriqueVue(this);
238
		// TODO : calcul de la hauteur automatique par le panel ?
239
 
240
		imageGeneriqueVue.setHeight(160);
136 aurelien 241
		details.add(imageGeneriqueVue, new RowLayoutData("33%"));
54 david 242
 
94 jpm 243
		mvz = new MiniZoomImageVue(this) ;
54 david 244
 
136 aurelien 245
		details.add(mvz, new RowLayoutData("34%")) ;
94 jpm 246
 
54 david 247
		// on crée le panneau des filtres
248
		filtres = new PanneauFiltresObservationVues(this);
249
 
250
		// on initialise le volet qui contient les filtres
136 aurelien 251
		filtres.setWidth("10%");
99 jpm 252
		filtres.setHeight(700) ;
53 david 253
		filtres.setTitleCollapse(true);
254
		filtres.setCollapsible(true);
54 david 255
 
156 aurelien 256
		detailsEtMotsCles.add(details);
257
		//detailsEtMotsCles.add(panelMotsCles);
258
 
259
		panelMotsCles.hide();
260
 
261
 
177 david 262
		panneauPrincipalObservation.add(conteneurDetailsMotsCles,regionEst);
53 david 263
		panneauPrincipalObservation.add(filtres,regionOuest);
264
		panneauPrincipalObservation.add(centre,regionCentre);
265
 
12 david 266
	}
2 aperonnet 267
 
7 aperonnet 268
 
12 david 269
	/**
270
	 * Retourne une instance de manière unique
271
	 * @return l'instance unique du médiateur
272
	 */
273
	public static ObservationMediateur Instance(CarnetEnLigneMediateur carnetEnLigneMediateur)
274
	{
31 jpm 275
			if(!estInstancie || thisMediateur == null)
12 david 276
			{
277
				estInstancie = true ;
31 jpm 278
				thisMediateur = new ObservationMediateur(carnetEnLigneMediateur) ;
12 david 279
			}
31 jpm 280
 
281
			return thisMediateur ;
12 david 282
	}
140 aurelien 283
 
284
 
285
	public void connecterUtilisateur() {
286
 
287
		if(importerObservations) {
288
 
289
			observationModele.importerObservations();
290
		}
291
 
292
		if(panneauPrincipalObservation == null || !panneauPrincipalObservation.isCreated())
293
		{
294
			panneauPrincipalObservation.addListener(new ContainerListenerAdapter()
295
			{
296
				public void onRender(Component c)
297
				{
298
					panneauPrincipalObservation.purgeListeners() ;
299
					obtenirNombreObservation();
300
					initialiserArbres();
301
					analyserHistorique();
302
				}
303
 
304
			}) ;
305
		}
306
		else
307
		{
308
			obtenirNombreObservation();
309
			initialiserArbres();
310
			analyserHistorique();
311
		}
312
	}
313
 
314
	private void initialiserArbres() {
315
		getPanneauFiltres().getArbreDateObservationFiltreVue().initialiser();
316
		getPanneauFiltres().getArbreEntiteGeographiqueObservationFiltreVue().initialiser();
317
 
318
 
319
	}
82 david 320
 
12 david 321
 
322
 
82 david 323
	// ACTIONS  a entreprendre lors d'un evenement particulier
12 david 324
 
82 david 325
 
12 david 326
	/**
82 david 327
	 * Lors du raffraichissement de la liste d'observation
328
	 */
329
 
330
 
331
	public void onRafraichissementListeObservations() {
332
 
173 aurelien 333
		carnetEnLigneMediateur.donneesObsVersImages(listeObservation.getCacheListeObservation());
156 aurelien 334
		observationModele.rafraichirCacheObservation(listeObservation.getCacheListeObservation());
82 david 335
	}
336
 
337
	/**
338
	 *
339
	 * TODO : fonction plus generique, appelle sur un clic ou une selection de ligne, a appeller : SelectionnerObservation
340
	 * est appelé lors d'un clic de souris sur un enregistrement de la liste le
341
	 * médiateur gère alors les conséquences
342
	 *
343
	 * @param rowIndex
344
	 *            le numéro de ligne selectionné
345
	 */
346
 
347
	public void onClicListeObservation(int rowIndex, String ordreObservation) {
348
 
156 aurelien 349
		Observation obs = obtenirCacheObservation().get(ordreObservation) ;
82 david 350
 
105 aurelien 351
		if(GWT.isScript()) {
352
			masquerChargementInfosObservations() ;
353
		}
86 jpm 354
 
82 david 355
		// Affichage de la carte de repartition correspondante
356
		String numeroNomenclaturalSaisiObservation = obs.getNumeroNomenclaturalSaisi() ;
357
 
358
		observationModele.obtenirImageInformationRepartition(informationRepartitionVue,numeroNomenclaturalSaisiObservation) ;
105 aurelien 359
 
82 david 360
		// affichage des détails dans le formulaire d'observation
361
		formulaireSaisieObservationVue.rafraichir(obs, false) ;
362
		// Affichage de l'image correspondante
363
 
364
		observationModele.obtenirImageGenerique(imageGeneriqueVue,numeroNomenclaturalSaisiObservation) ;
94 jpm 365
 
366
		observationModele.obtenirLiaisonImage(mvz, ordreObservation) ;
156 aurelien 367
 
368
		observationModele.obtenirMotsClesId(arbreMotsClesVue, ordreObservation);
369
		//arbreMotsClesVue.cocherMotsCles(motsClesIds);
82 david 370
 
371
 
372
	}
373
 
128 aurelien 374
	public void obtenirImageInformationExternes(String numeroNomenclaturalSaisiObservation) {
375
		if(GWT.isScript()) {
376
			masquerChargementInfosObservations() ;
377
		}
378
		observationModele.obtenirImageInformationRepartition(informationRepartitionVue,numeroNomenclaturalSaisiObservation) ;
379
		observationModele.obtenirImageGenerique(imageGeneriqueVue,numeroNomenclaturalSaisiObservation) ;
380
	}
82 david 381
 
128 aurelien 382
 
82 david 383
	// ACCES au Modèle
384
 
385
 
386
	// C du CRUD
387
 
388
 
389
 
390
	/**
391
	 * TODO : afficher un message du type "observation ajouté".
392
	 * Lance la creation d'une observation
393
	 * @param obs : l'observation saisie
104 jpm 394
	 */
82 david 395
	public void ajouterObservation(Observation obs) {
104 jpm 396
 
82 david 397
	  // On raffraichi la liste d'observation
398
	  observationModele.ajouterObservation(listeObservation, obs) ;
91 jpm 399
	  filtres.getArbreEntiteGeographiqueObservationFiltreVue().rafraichir(obs,true) ;
94 jpm 400
	  filtres.getArbreDateObservationFiltreVue().rafraichir(obs,true) ;
82 david 401
 
402
	}
403
 
404
 
405
 
406
	// R du CRUD
407
 
408
	/**
54 david 409
	 * Demande au modele le nombre d'Observation à afficher
410
	 * TODO : grouper cette demande avec la demande d'affichage de liste ?
12 david 411
	 */
2 aperonnet 412
 
12 david 413
	public void obtenirNombreObservation() {
414
 
125 aurelien 415
		listeObservation.masquerChargement() ;
104 jpm 416
		mvz.raz() ;
417
		imageGeneriqueVue.raz() ;
418
		informationRepartitionVue.raz() ;
419
		observationModele.obtenirNombreObservation(listeObservation) ;
12 david 420
 
2 aperonnet 421
	}
54 david 422
 
12 david 423
 
82 david 424
 
425
	public void obtenirListeObservation() {
426
		obtenirListeObservation(listeObservation);
427
	}
428
 
2 aperonnet 429
	/**
82 david 430
	 * Demande au modele le detail  des Observations à afficher
54 david 431
	 * TODO : grouper cette demande avec la demande d'affichage de liste ?
2 aperonnet 432
	 */
7 aperonnet 433
 
12 david 434
 
61 jpm 435
	public void obtenirListeObservation(Rafraichissable r) {
436
 
77 jpm 437
		listeObservation.masquerChargement() ;
125 aurelien 438
 
61 jpm 439
		observationModele.obtenirListeObservation(r,listeObservation.getTaillePage(),listeObservation.getPageEncours()) ;
440
	}
441
 
86 jpm 442
	public void obtenirCacheObservation(Rafraichissable r) {
443
 
156 aurelien 444
		r.rafraichir(observationModele.getCacheObservation(), false) ;
86 jpm 445
	}
446
 
82 david 447
 
2 aperonnet 448
	/**
82 david 449
	 * Envoie au modèle une demande pour obtenir l'arbre des localites
450
	 *
451
	 * @param r
452
	 *            le raffraichissable qui a demandé la mise à jour
2 aperonnet 453
	 */
82 david 454
	public void obtenirListeEntiteGeographique() {
12 david 455
 
91 jpm 456
		observationModele.obtenirListeEntiteGeographique(filtres.getArbreEntiteGeographiqueObservationFiltreVue());
12 david 457
 
458
	}
82 david 459
 
460
 
461
	// U du CRUD
462
	public void modifierObservation(Observation obs) {
463
 
12 david 464
 
82 david 465
	  // On raffraichi la liste d'observation
466
	  observationModele.modifierObservation(listeObservation, obs) ;
91 jpm 467
	  filtres.getArbreEntiteGeographiqueObservationFiltreVue().rafraichir(obs,true) ;
82 david 468
 
469
	}
12 david 470
 
82 david 471
 
472
 
473
	// D du CRUD
474
 
475
 
94 jpm 476
 
54 david 477
	/**
82 david 478
	 * TODO : afficher un message du type "observation modifie".
479
	 * Lance la modification d'une observation
480
	 * @param obs : l'observation a modifier
54 david 481
	 */
482
 
82 david 483
 
484
 
485
	public void supprimerObservation(Rafraichissable r, String numeroOrdre) {
486
 
487
		if(listeObservation.getSelectionModel().getCount() > 0)
488
		{
489
			if(Window.confirm("Êtes vous sur de vouloir supprimer cette observation ?")) {
490
			observationModele.supprimerObservation(r,numeroOrdre) ;
491
			}
492
		}
493
 
2 aperonnet 494
	}
12 david 495
 
82 david 496
	// Assistants de saisie
2 aperonnet 497
	/**
13 david 498
	 *
499
	 * Lance un appel de recherche d'une liste de commune correspondant aux criteres de selectionne
500
	 * @param r : la vue demandeuse de donnee
501
	 * @param critere : les criteres de selection
502
	 */
12 david 503
 
13 david 504
	public void obtenirListeReferentielCommune(Rafraichissable r, String critere) {
12 david 505
 
13 david 506
		observationModele.obtenirListeReferentielCommune(r,critere) ;
2 aperonnet 507
 
12 david 508
 
2 aperonnet 509
	}
20 david 510
 
82 david 511
 
512
 
20 david 513
	/**
514
	 *
515
	 * Lance un appel de recherche d'une liste de nom scientifique correspondant aux criteres de selectionne
516
	 * @param r : la vue demandeuse de donnee
517
	 * @param critere : les criteres de selection
518
	 */
519
 
520
	public void obtenirListeReferentielNom(Rafraichissable r, String critere) {
2 aperonnet 521
 
94 jpm 522
		observationModele.obtenirListeReferentielNom(r,critere) ;
20 david 523
	}
82 david 524
 
525
	// Etat du syteme
526
 
20 david 527
	/**
82 david 528
	 * C'est dans cette fonction que doivent être renvoyé les valeurs des filtres
529
	 * sous forme de tableau [nom, valeur]
530
	 * @return Les noms et valeurs des filtres
20 david 531
	 */
82 david 532
	public String[][] renvoyerFiltres()
115 aurelien 533
	{
534
		int longueur = 0;
156 aurelien 535
			/*String[] filtresMotsCles = filtres.getArbreMotsClesFiltreVue().renvoyerValeursAFiltrer();
115 aurelien 536
			if(filtresMotsCles.length > 0) {
537
				longueur++ ;
125 aurelien 538
			}*/
115 aurelien 539
 
91 jpm 540
			String[] filtresEntitesGeo = filtres.getArbreEntiteGeographiqueObservationFiltreVue().renvoyerValeursAFiltrer() ;
541
			String chaineNomsFiltresGeo = filtresEntitesGeo[0] ;
542
			String chaineValFiltresGeo = filtresEntitesGeo[1] ;
87 jpm 543
 
91 jpm 544
			String[] filtresDate = filtres.getArbreDateObservationFiltreVue().renvoyerValeursAFiltrer() ;
545
			String chaineNomsFiltresDate = filtresDate[0] ;
546
			String chaineValFiltresDate = filtresDate[1] ;
547
 
548
			String chaineNomsFiltres = chaineNomsFiltresGeo+","+chaineNomsFiltresDate ;
549
			String chaineValFiltres = chaineValFiltresGeo+","+chaineValFiltresDate ;
550
 
87 jpm 551
			String[] nomsFiltres = chaineNomsFiltres.split(",") ;
552
			String[] valsFiltres = chaineValFiltres.split(",") ;
91 jpm 553
 
115 aurelien 554
			longueur += nomsFiltres.length;
94 jpm 555
 
115 aurelien 556
			String [][] valeursFiltres = new String[longueur][2] ;
557
 
94 jpm 558
			listeObservation.afficherFiltres(chaineValFiltresGeo, chaineValFiltresDate) ;
91 jpm 559
 
115 aurelien 560
			int i = 0;
91 jpm 561
 
87 jpm 562
			if(nomsFiltres.length > 0)
563
			{
115 aurelien 564
				for(i = 0 ; i < nomsFiltres.length ; i++)
87 jpm 565
				{
566
					valeursFiltres[i][0] = nomsFiltres[i] ;
567
					if(valsFiltres[i].equals("Inconnue"))
568
					{
569
						valeursFiltres[i][1] = "000null" ;
570
					}
571
					else
572
					{
573
						valeursFiltres[i][1] = valsFiltres[i] ;
574
					}
575
				}
576
			}
115 aurelien 577
 
125 aurelien 578
			/*if(filtresMotsCles.length > 0) {
115 aurelien 579
				valeursFiltres[i][0] = filtresMotsCles[0] ;
580
				filtresMotsCles[1] = filtresMotsCles[1].replace("\n", " ");
581
				valeursFiltres[i][1] = filtresMotsCles[1].replace(" ", ";") ;
125 aurelien 582
			}*/
115 aurelien 583
 
584
			return valeursFiltres ;
20 david 585
	}
82 david 586
 
41 jpm 587
 
54 david 588
	/**
82 david 589
	 * Retourne l'identifiant de l'utilisateur connecte
590
	 * @return : identifiant de l'utilisateur connecte
74 david 591
	 */
82 david 592
	public String getIdentifiant() {
74 david 593
 
140 aurelien 594
		return carnetEnLigneMediateur.getUtilisateur().getIdentite();
74 david 595
 
77 jpm 596
	}
82 david 597
 
598
 
74 david 599
	/**
54 david 600
	 *
82 david 601
	 * @return
54 david 602
	 *
603
	 */
604
 
82 david 605
	public Panel getPanneauPrincipalObservation() {
606
		return panneauPrincipalObservation;
607
	}
54 david 608
 
609
 
41 jpm 610
	public void montrerContextMenu(EventObject e) {
611
 
107 aurelien 612
		MenuObservationVue mvo = new MenuObservationVue(this) ;
613
		mvo.showAt(e.getXY()) ;
41 jpm 614
 
615
	}
616
 
617
	public void doubleClicListeObservation(int rowIndex) {
618
 
619
 
620
	}
82 david 621
 
622
	// Getters
623
 
54 david 624
	public PanneauFiltresObservationVues getPanneauFiltres() {
625
 
626
		return filtres;
627
 
628
	}
86 jpm 629
 
630
	public void masquerChargementInfosObservations()
631
	{
156 aurelien 632
		ExtElement masked = Ext.get(detailsEtMotsCles.getId());
54 david 633
 
156 aurelien 634
		if (details.isVisible() && masked != null && !masked.isMasked()) {
86 jpm 635
			informationRepartitionVue.raz() ;
636
			imageGeneriqueVue.raz() ;
637
			masked.mask("Chargement", true);
638
		}
639
	}
82 david 640
 
86 jpm 641
	public void deMasquerChargementInfosObservations()
642
	{
156 aurelien 643
		ExtElement masked = Ext.get(detailsEtMotsCles.getId());
63 jpm 644
 
156 aurelien 645
		if (details.isVisible() && masked != null && masked.isMasked()) {
86 jpm 646
			masked.unmask() ;
647
		}
648
	}
91 jpm 649
 
650
 
651
	public void obtenirDatesObservation() {
652
 
653
		observationModele.obtenirDatesObservation(filtres.getArbreDateObservationFiltreVue()) ;
654
	}
101 jpm 655
 
656
 
657
	public void exporterObservations() {
658
 
128 aurelien 659
			observationModele.exporterObservations() ;
101 jpm 660
	}
104 jpm 661
 
662
 
663
	public void deconnecterUtilisateur() {
664
 
140 aurelien 665
		if(panneauPrincipalObservation == null || panneauPrincipalObservation.isCreated() || !panneauPrincipalObservation.isVisible())
666
		{
667
			panneauPrincipalObservation.addListener(new ContainerListenerAdapter()
668
			{
669
				public void onShow(Component component)
670
				{
671
					deconnecterUtilisateur();
672
					panneauPrincipalObservation.purgeListeners();
673
				}
674
			});
675
		}
676
		else
677
		{
678
			listeObservation.raz() ;
679
			formulaireSaisieObservationVue.raz() ;
680
			filtres.getArbreDateObservationFiltreVue().raz() ;
681
			filtres.getArbreEntiteGeographiqueObservationFiltreVue().raz() ;
156 aurelien 682
			filtres.getArbreMotsClesFiltreVue().raz();
140 aurelien 683
			informationRepartitionVue.raz() ;
684
			imageGeneriqueVue.raz() ;
685
			mvz.raz() ;
686
		}
104 jpm 687
	}
688
 
689
 
690
	public void supprimerLiaisonObsImage() {
691
 
692
		String idObs = listeObservation.getIdSelectionnees()[0] ;
693
		String idImg = mvz.getIdImage() ;
694
 
695
		if(Window.confirm("Supprimer le lien entre l'image "+idImg+" et l'observations "+idObs+" ?"))
696
		{
697
			mvz.supprimerLiaisonImage() ;
698
			observationModele.supprimerLiaisonImages(idImg,idObs) ;
699
		}
700
 
701
	}
107 aurelien 702
 
703
	public void supprimerObservations() {
704
 
128 aurelien 705
		if(listeObservation.getIdSelectionnees().length > 0) {
706
			if(Window.confirm("Êtes vous sur de vouloir supprimer les observations sélectionnées ?")) {
707
					String[] numObs = listeObservation.getIdSelectionnees();
708
					String numObsapl = "" ;
709
					for(int i = 0 ; i < numObs.length ; i++) {
710
						numObsapl += numObs[i]+"," ;
711
					}
712
 
713
					observationModele.supprimerListeObservation(listeObservation,numObsapl) ;
107 aurelien 714
			}
128 aurelien 715
		}
716
		else
717
		{
718
			Window.alert("Aucune observation sélectionnée");
719
		}
107 aurelien 720
	}
108 aurelien 721
 
722
 
145 aurelien 723
	public void transmettreObservations(boolean publier) {
108 aurelien 724
 
140 aurelien 725
		if(carnetEnLigneMediateur.getUtilisateur().isIdentifie()) {
726
			if(listeObservation.getIdSelectionnees().length > 0) {
145 aurelien 727
 
728
				String action = "" ;
729
 
730
				if(publier) {
731
					action = "rendre publiques" ;
732
				}
733
				else {
734
					action = "rendre privées" ;
735
				}
736
 
737
				if(Window.confirm("Êtes vous sur de vouloir "+action+" les observations sélectionnées ?")) {
140 aurelien 738
					String[] numObs = listeObservation.getIdSelectionnees();
739
					String numObsApl = "" ;
740
					for(int i = 0 ; i < numObs.length ; i++) {
741
						numObsApl += numObs[i] ;
742
						if(i != numObs.length - 1) {
743
							numObsApl +="," ;
744
						}
128 aurelien 745
					}
140 aurelien 746
 
145 aurelien 747
					observationModele.transmettreListeObservation(listeObservation,numObsApl, publier) ;
108 aurelien 748
				}
749
			}
140 aurelien 750
			else
751
			{
752
				Window.alert("Aucune observation sélectionnée");
753
			}
108 aurelien 754
		}
128 aurelien 755
		else
756
		{
145 aurelien 757
			if(publier) {
758
				if(Window.confirm("La publication des observations nécessite d'être identifié, voulez-vous vous identifier ? (toutes vos observations saisies seront conservées)")) {
759
					importerObservations = true ;
760
					carnetEnLigneMediateur.afficherDialogueConnexion();
761
				}
140 aurelien 762
			}
128 aurelien 763
		}
108 aurelien 764
 
765
	}
140 aurelien 766
 
767
	public void analyserHistorique() {
768
 
769
		if (History.getToken().length()>0) {
115 aurelien 770
 
140 aurelien 771
	        final String anum=History.getToken();
772
	        observationModele.analyserHistorique(formulaireSaisieObservationVue,anum);
773
		}
774
	}
115 aurelien 775
 
140 aurelien 776
 
156 aurelien 777
	public void montrerContextMenuArbre(final TreeNode n, EventObject e,
778
			TreeEditor te) {
779
			Menu mn = new Menu();
780
			final com.gwtext.client.widgets.menu.Item ajoutN = new Item(
781
					"Ajouter mot cle");
782
			final com.gwtext.client.widgets.menu.Item suppN = new Item(
783
					"Supprimer mot cle");
784
 
785
			mn.addItem(ajoutN);
786
			mn.addItem(suppN);
787
 
788
			mn.addListener(new MenuListenerAdapter() {
789
 
790
				public void onItemClick(BaseItem item, EventObject e) {
791
					if (item.equals(suppN)) {
792
						arbreMotsClesVue
793
								.supprimerNoeud(n);
794
					}
795
					if (item.equals(ajoutN)) {
796
						arbreMotsClesVue.ajouterNoeud(
797
								n);
798
					}
799
				}
800
			});
801
 
802
			mn.showAt(e.getXY());
115 aurelien 803
 
804
	}
805
 
806
 
156 aurelien 807
	/**
808
	 * Appelle le modèle pour mettre à jour la paire mot-clé / identifiant du
809
	 * mot clé
810
	 *
811
	 * @param text
812
	 *            le texte du mot clé
813
	 * @param id
814
	 *            l'identifiant du mot clé
815
	 */
816
	public void mettreAjourMotsClesId(String text, String id) {
817
 
818
		observationModele.mettreAjourMotsClesId(text, id);
819
 
115 aurelien 820
	}
821
 
156 aurelien 822
	/**
823
	 * Récupère les identifiants des images selectionnés et appelle le modèle
824
	 * pour qu'il mette à jour les associations mots clés/images
825
	 *
826
	 * @param motsClesEnCours
827
	 *            les mots clés à associer aux images selectionnés séparés par
828
	 *            une ','
829
	 * @param arbreMC
830
	 *            l'arbre des mots clés à mettre à jour
831
	 */
832
	public void mettreAjourMotsCles(String motsClesEnCours, Tree arbreMC) {
115 aurelien 833
 
156 aurelien 834
		String[] ids = listeObservation.getIdSelectionnees();
835
		observationModele.mettreAjourMotsCles(ids, motsClesEnCours, arbreMC);
836
 
115 aurelien 837
	}
838
 
156 aurelien 839
	/**
840
	 * Appelle le médiateur pour qu'il ajoute un mot clé dans l'arbre des mots
841
	 * clés
842
	 *
843
	 * @param n
844
	 *            le noeud à ajouter à l'arbre
845
	 * @param arbreMC
846
	 *            le nouvel arbre de mots clés à mettre à jour
847
	 */
848
	public void ajouterMotCleDansArbre(TreeNode n, Tree arbreMC) {
849
		observationModele.ajouterMotCleDansArbre(n, arbreMC);
850
		getPanneauFiltres().getArbreMotsClesFiltreVue().rafraichir(n, false);
115 aurelien 851
 
156 aurelien 852
	}
853
 
854
	/**
855
	 * Appelle le médiateur pour qu'il supprime un mot clé et son sous arbre
856
	 * dans l'arbre des mots clés
857
	 *
858
	 * @param n
859
	 *            le noeud à supprimer
860
	 * @param arbreMC
861
	 *            le nouvel arbre de mots clés à mettre à jour
862
	 */
863
	public void supprimerMotCleDansArbre(TreeNode n, Tree arbreMC) {
864
 
865
		observationModele.supprimerMotCleDansArbre(n, arbreMC);
866
		getPanneauFiltres().getArbreMotsClesFiltreVue().rafraichir(n.getId(), false);
867
 
868
	}
869
 
870
	/**
871
	 * Appelle le médiateur pour qu'il modifie un mot clé dans l'arbre des mots
872
	 * clés
873
	 *
874
	 * @param n
875
	 *            le noeud à modifier
876
	 * @param arbreMC
877
	 *            le nouvel arbre de mots clés à mettre à jour
878
	 */
879
	public void modifierMotCleDansArbre(TreeNode n, Tree arbreMC) {
880
 
881
		observationModele.modifierMotCleDansArbre(n, arbreMC);
882
		getPanneauFiltres().getArbreMotsClesFiltreVue().rafraichir(n, false);
883
 
884
	}
885
 
886
	/**
887
	 * Appelle le médiateur pour qu'il déplace un mot clé et son sous arbre dans
888
	 * l'arbre des mots clés
889
	 *
890
	 * @param n
891
	 *            le noeud à déplacer
892
	 * @param arbreMC
893
	 *            le nouvel arbre de mots clés à mettre à jour
894
	 */
895
	public void deplacerMotCleDansArbre(TreeNode n, Tree arbreMC) {
896
 
897
		observationModele.deplacerMotCleDansArbre(n, arbreMC);
898
		getPanneauFiltres().getArbreMotsClesFiltreVue().rafraichir(n, false);
899
	}
900
 
901
 
902
	public void rafraichirArbreMotsCles(Tree arbreMotsCles) {
115 aurelien 903
 
156 aurelien 904
		arbreMotsClesVue.rafraichir(arbreMotsCles, false);
905
		getPanneauFiltres().getArbreMotsClesFiltreVue().rafraichir(arbreMotsCles, false);
115 aurelien 906
 
907
	}
908
 
909
 
156 aurelien 910
	public void obtenirArbreMotsCles(Rafraichissable r) {
115 aurelien 911
 
156 aurelien 912
		observationModele.obtenirArbreMotsCles(r);
913
	}
12 david 914
 
156 aurelien 915
	public ListeObservation obtenirCacheObservation() {
916
		return observationModele.getCacheObservation();
917
	}
918
 
919
	public void donneesExterieures(Object nouvelleDonnees) {
920
		if(nouvelleDonnees instanceof Tree) {
921
 
922
			Tree arbreMotsCles = (Tree)nouvelleDonnees ;
923
			observationModele.rafraichirArbreMotsCles(nouvelleDonnees);
924
			rafraichirArbreMotsCles(arbreMotsCles);
925
		}
926
	}
927
 
928
	public void transmettreDonnees(Object o) {
929
		carnetEnLigneMediateur.donneesObsVersImages(o);
930
	}
2 aperonnet 931
}