Subversion Repositories eFlore/Applications.cel

Rev

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