Subversion Repositories eFlore/Applications.cel

Rev

Rev 201 | Rev 209 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

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