Subversion Repositories eFlore/Applications.cel

Rev

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