Subversion Repositories eFlore/Applications.cel

Rev

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