Subversion Repositories eFlore/Applications.cel

Rev

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