Subversion Repositories eFlore/Applications.cel

Rev

Rev 217 | Rev 251 | 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
220 aurelien 554
		listeObservation.masquerChargement();
217 aurelien 555
		observationModele.modifierObservationEnMasse(listeObservation, obs) ;
556
	}
82 david 557
 
558
	// D du CRUD
559
 
560
 
94 jpm 561
 
54 david 562
	/**
82 david 563
	 * TODO : afficher un message du type "observation modifie".
564
	 * Lance la modification d'une observation
565
	 * @param obs : l'observation a modifier
54 david 566
	 */
567
 
82 david 568
 
569
 
570
	public void supprimerObservation(Rafraichissable r, String numeroOrdre) {
571
 
572
		if(listeObservation.getSelectionModel().getCount() > 0)
573
		{
574
			if(Window.confirm("Êtes vous sur de vouloir supprimer cette observation ?")) {
575
			observationModele.supprimerObservation(r,numeroOrdre) ;
576
			}
577
		}
578
 
2 aperonnet 579
	}
12 david 580
 
82 david 581
	// Assistants de saisie
2 aperonnet 582
	/**
13 david 583
	 *
584
	 * Lance un appel de recherche d'une liste de commune correspondant aux criteres de selectionne
585
	 * @param r : la vue demandeuse de donnee
586
	 * @param critere : les criteres de selection
587
	 */
12 david 588
 
13 david 589
	public void obtenirListeReferentielCommune(Rafraichissable r, String critere) {
12 david 590
 
13 david 591
		observationModele.obtenirListeReferentielCommune(r,critere) ;
2 aperonnet 592
 
12 david 593
 
2 aperonnet 594
	}
20 david 595
 
82 david 596
 
597
 
20 david 598
	/**
599
	 *
600
	 * Lance un appel de recherche d'une liste de nom scientifique correspondant aux criteres de selectionne
601
	 * @param r : la vue demandeuse de donnee
602
	 * @param critere : les criteres de selection
603
	 */
604
 
605
	public void obtenirListeReferentielNom(Rafraichissable r, String critere) {
2 aperonnet 606
 
94 jpm 607
		observationModele.obtenirListeReferentielNom(r,critere) ;
20 david 608
	}
82 david 609
 
610
	// Etat du syteme
611
 
20 david 612
	/**
82 david 613
	 * C'est dans cette fonction que doivent être renvoyé les valeurs des filtres
614
	 * sous forme de tableau [nom, valeur]
615
	 * @return Les noms et valeurs des filtres
20 david 616
	 */
82 david 617
	public String[][] renvoyerFiltres()
115 aurelien 618
	{
619
		int longueur = 0;
156 aurelien 620
			/*String[] filtresMotsCles = filtres.getArbreMotsClesFiltreVue().renvoyerValeursAFiltrer();
115 aurelien 621
			if(filtresMotsCles.length > 0) {
622
				longueur++ ;
125 aurelien 623
			}*/
115 aurelien 624
 
91 jpm 625
			String[] filtresEntitesGeo = filtres.getArbreEntiteGeographiqueObservationFiltreVue().renvoyerValeursAFiltrer() ;
626
			String chaineNomsFiltresGeo = filtresEntitesGeo[0] ;
627
			String chaineValFiltresGeo = filtresEntitesGeo[1] ;
87 jpm 628
 
91 jpm 629
			String[] filtresDate = filtres.getArbreDateObservationFiltreVue().renvoyerValeursAFiltrer() ;
630
			String chaineNomsFiltresDate = filtresDate[0] ;
631
			String chaineValFiltresDate = filtresDate[1] ;
632
 
633
			String chaineNomsFiltres = chaineNomsFiltresGeo+","+chaineNomsFiltresDate ;
634
			String chaineValFiltres = chaineValFiltresGeo+","+chaineValFiltresDate ;
635
 
87 jpm 636
			String[] nomsFiltres = chaineNomsFiltres.split(",") ;
637
			String[] valsFiltres = chaineValFiltres.split(",") ;
91 jpm 638
 
115 aurelien 639
			longueur += nomsFiltres.length;
94 jpm 640
 
115 aurelien 641
			String [][] valeursFiltres = new String[longueur][2] ;
642
 
94 jpm 643
			listeObservation.afficherFiltres(chaineValFiltresGeo, chaineValFiltresDate) ;
91 jpm 644
 
115 aurelien 645
			int i = 0;
91 jpm 646
 
87 jpm 647
			if(nomsFiltres.length > 0)
648
			{
115 aurelien 649
				for(i = 0 ; i < nomsFiltres.length ; i++)
87 jpm 650
				{
651
					valeursFiltres[i][0] = nomsFiltres[i] ;
652
					if(valsFiltres[i].equals("Inconnue"))
653
					{
654
						valeursFiltres[i][1] = "000null" ;
655
					}
656
					else
657
					{
658
						valeursFiltres[i][1] = valsFiltres[i] ;
659
					}
660
				}
661
			}
115 aurelien 662
 
125 aurelien 663
			/*if(filtresMotsCles.length > 0) {
115 aurelien 664
				valeursFiltres[i][0] = filtresMotsCles[0] ;
665
				filtresMotsCles[1] = filtresMotsCles[1].replace("\n", " ");
666
				valeursFiltres[i][1] = filtresMotsCles[1].replace(" ", ";") ;
125 aurelien 667
			}*/
115 aurelien 668
 
669
			return valeursFiltres ;
20 david 670
	}
82 david 671
 
41 jpm 672
 
54 david 673
	/**
82 david 674
	 * Retourne l'identifiant de l'utilisateur connecte
675
	 * @return : identifiant de l'utilisateur connecte
74 david 676
	 */
82 david 677
	public String getIdentifiant() {
74 david 678
 
140 aurelien 679
		return carnetEnLigneMediateur.getUtilisateur().getIdentite();
74 david 680
 
77 jpm 681
	}
82 david 682
 
683
 
74 david 684
	/**
54 david 685
	 *
82 david 686
	 * @return
54 david 687
	 *
688
	 */
689
 
82 david 690
	public Panel getPanneauPrincipalObservation() {
691
		return panneauPrincipalObservation;
692
	}
54 david 693
 
694
 
41 jpm 695
	public void montrerContextMenu(EventObject e) {
696
 
107 aurelien 697
		MenuObservationVue mvo = new MenuObservationVue(this) ;
698
		mvo.showAt(e.getXY()) ;
41 jpm 699
 
700
	}
701
 
702
	public void doubleClicListeObservation(int rowIndex) {
703
 
704
 
705
	}
82 david 706
 
707
	// Getters
708
 
54 david 709
	public PanneauFiltresObservationVues getPanneauFiltres() {
710
 
711
		return filtres;
712
 
713
	}
86 jpm 714
 
715
	public void masquerChargementInfosObservations()
716
	{
156 aurelien 717
		ExtElement masked = Ext.get(detailsEtMotsCles.getId());
54 david 718
 
156 aurelien 719
		if (details.isVisible() && masked != null && !masked.isMasked()) {
86 jpm 720
			informationRepartitionVue.raz() ;
721
			imageGeneriqueVue.raz() ;
722
			masked.mask("Chargement", true);
723
		}
724
	}
82 david 725
 
86 jpm 726
	public void deMasquerChargementInfosObservations()
727
	{
156 aurelien 728
		ExtElement masked = Ext.get(detailsEtMotsCles.getId());
63 jpm 729
 
156 aurelien 730
		if (details.isVisible() && masked != null && masked.isMasked()) {
86 jpm 731
			masked.unmask() ;
732
		}
733
	}
91 jpm 734
 
735
 
736
	public void obtenirDatesObservation() {
737
 
738
		observationModele.obtenirDatesObservation(filtres.getArbreDateObservationFiltreVue()) ;
739
	}
101 jpm 740
 
741
 
742
	public void exporterObservations() {
743
 
128 aurelien 744
			observationModele.exporterObservations() ;
101 jpm 745
	}
104 jpm 746
 
747
 
748
	public void deconnecterUtilisateur() {
749
 
140 aurelien 750
		if(panneauPrincipalObservation == null || panneauPrincipalObservation.isCreated() || !panneauPrincipalObservation.isVisible())
751
		{
752
			panneauPrincipalObservation.addListener(new ContainerListenerAdapter()
753
			{
754
				public void onShow(Component component)
755
				{
756
					deconnecterUtilisateur();
757
					panneauPrincipalObservation.purgeListeners();
758
				}
759
			});
760
		}
761
		else
762
		{
763
			listeObservation.raz() ;
764
			formulaireSaisieObservationVue.raz() ;
765
			filtres.getArbreDateObservationFiltreVue().raz() ;
766
			filtres.getArbreEntiteGeographiqueObservationFiltreVue().raz() ;
156 aurelien 767
			filtres.getArbreMotsClesFiltreVue().raz();
140 aurelien 768
			informationRepartitionVue.raz() ;
769
			imageGeneriqueVue.raz() ;
770
			mvz.raz() ;
771
		}
104 jpm 772
	}
773
 
774
 
775
	public void supprimerLiaisonObsImage() {
776
 
777
		String idObs = listeObservation.getIdSelectionnees()[0] ;
778
		String idImg = mvz.getIdImage() ;
779
 
780
		if(Window.confirm("Supprimer le lien entre l'image "+idImg+" et l'observations "+idObs+" ?"))
781
		{
782
			mvz.supprimerLiaisonImage() ;
783
			observationModele.supprimerLiaisonImages(idImg,idObs) ;
784
		}
785
 
786
	}
107 aurelien 787
 
788
	public void supprimerObservations() {
789
 
128 aurelien 790
		if(listeObservation.getIdSelectionnees().length > 0) {
791
			if(Window.confirm("Êtes vous sur de vouloir supprimer les observations sélectionnées ?")) {
792
					String[] numObs = listeObservation.getIdSelectionnees();
793
					String numObsapl = "" ;
794
					for(int i = 0 ; i < numObs.length ; i++) {
795
						numObsapl += numObs[i]+"," ;
796
					}
797
 
798
					observationModele.supprimerListeObservation(listeObservation,numObsapl) ;
107 aurelien 799
			}
128 aurelien 800
		}
801
		else
802
		{
803
			Window.alert("Aucune observation sélectionnée");
804
		}
107 aurelien 805
	}
108 aurelien 806
 
807
 
145 aurelien 808
	public void transmettreObservations(boolean publier) {
108 aurelien 809
 
140 aurelien 810
		if(carnetEnLigneMediateur.getUtilisateur().isIdentifie()) {
811
			if(listeObservation.getIdSelectionnees().length > 0) {
145 aurelien 812
 
813
				String action = "" ;
814
 
815
				if(publier) {
816
					action = "rendre publiques" ;
817
				}
818
				else {
819
					action = "rendre privées" ;
820
				}
821
 
822
				if(Window.confirm("Êtes vous sur de vouloir "+action+" les observations sélectionnées ?")) {
140 aurelien 823
					String[] numObs = listeObservation.getIdSelectionnees();
824
					String numObsApl = "" ;
825
					for(int i = 0 ; i < numObs.length ; i++) {
826
						numObsApl += numObs[i] ;
827
						if(i != numObs.length - 1) {
828
							numObsApl +="," ;
829
						}
128 aurelien 830
					}
140 aurelien 831
 
145 aurelien 832
					observationModele.transmettreListeObservation(listeObservation,numObsApl, publier) ;
108 aurelien 833
				}
834
			}
140 aurelien 835
			else
836
			{
837
				Window.alert("Aucune observation sélectionnée");
838
			}
108 aurelien 839
		}
128 aurelien 840
		else
841
		{
145 aurelien 842
			if(publier) {
843
				if(Window.confirm("La publication des observations nécessite d'être identifié, voulez-vous vous identifier ? (toutes vos observations saisies seront conservées)")) {
844
					importerObservations = true ;
845
					carnetEnLigneMediateur.afficherDialogueConnexion();
846
				}
140 aurelien 847
			}
128 aurelien 848
		}
108 aurelien 849
 
850
	}
140 aurelien 851
 
852
	public void analyserHistorique() {
853
 
854
		if (History.getToken().length()>0) {
115 aurelien 855
 
140 aurelien 856
	        final String anum=History.getToken();
857
	        observationModele.analyserHistorique(formulaireSaisieObservationVue,anum);
858
		}
859
	}
115 aurelien 860
 
140 aurelien 861
 
156 aurelien 862
	public void montrerContextMenuArbre(final TreeNode n, EventObject e,
863
			TreeEditor te) {
864
			Menu mn = new Menu();
865
			final com.gwtext.client.widgets.menu.Item ajoutN = new Item(
866
					"Ajouter mot cle");
867
			final com.gwtext.client.widgets.menu.Item suppN = new Item(
868
					"Supprimer mot cle");
869
 
870
			mn.addItem(ajoutN);
871
			mn.addItem(suppN);
872
 
873
			mn.addListener(new MenuListenerAdapter() {
874
 
875
				public void onItemClick(BaseItem item, EventObject e) {
876
					if (item.equals(suppN)) {
877
						arbreMotsClesVue
878
								.supprimerNoeud(n);
879
					}
880
					if (item.equals(ajoutN)) {
881
						arbreMotsClesVue.ajouterNoeud(
882
								n);
883
					}
884
				}
885
			});
886
 
887
			mn.showAt(e.getXY());
115 aurelien 888
 
889
	}
890
 
891
 
156 aurelien 892
	/**
893
	 * Appelle le modèle pour mettre à jour la paire mot-clé / identifiant du
894
	 * mot clé
895
	 *
896
	 * @param text
897
	 *            le texte du mot clé
898
	 * @param id
899
	 *            l'identifiant du mot clé
900
	 */
901
	public void mettreAjourMotsClesId(String text, String id) {
902
 
903
		observationModele.mettreAjourMotsClesId(text, id);
904
 
115 aurelien 905
	}
906
 
156 aurelien 907
	/**
908
	 * Récupère les identifiants des images selectionnés et appelle le modèle
909
	 * pour qu'il mette à jour les associations mots clés/images
910
	 *
911
	 * @param motsClesEnCours
912
	 *            les mots clés à associer aux images selectionnés séparés par
913
	 *            une ','
914
	 * @param arbreMC
915
	 *            l'arbre des mots clés à mettre à jour
916
	 */
917
	public void mettreAjourMotsCles(String motsClesEnCours, Tree arbreMC) {
115 aurelien 918
 
156 aurelien 919
		String[] ids = listeObservation.getIdSelectionnees();
920
		observationModele.mettreAjourMotsCles(ids, motsClesEnCours, arbreMC);
921
 
115 aurelien 922
	}
923
 
156 aurelien 924
	/**
925
	 * Appelle le médiateur pour qu'il ajoute un mot clé dans l'arbre des mots
926
	 * clés
927
	 *
928
	 * @param n
929
	 *            le noeud à ajouter à l'arbre
930
	 * @param arbreMC
931
	 *            le nouvel arbre de mots clés à mettre à jour
932
	 */
933
	public void ajouterMotCleDansArbre(TreeNode n, Tree arbreMC) {
934
		observationModele.ajouterMotCleDansArbre(n, arbreMC);
935
		getPanneauFiltres().getArbreMotsClesFiltreVue().rafraichir(n, false);
115 aurelien 936
 
156 aurelien 937
	}
938
 
939
	/**
940
	 * Appelle le médiateur pour qu'il supprime un mot clé et son sous arbre
941
	 * dans l'arbre des mots clés
942
	 *
943
	 * @param n
944
	 *            le noeud à supprimer
945
	 * @param arbreMC
946
	 *            le nouvel arbre de mots clés à mettre à jour
947
	 */
948
	public void supprimerMotCleDansArbre(TreeNode n, Tree arbreMC) {
949
 
950
		observationModele.supprimerMotCleDansArbre(n, arbreMC);
951
		getPanneauFiltres().getArbreMotsClesFiltreVue().rafraichir(n.getId(), false);
952
 
953
	}
954
 
955
	/**
956
	 * Appelle le médiateur pour qu'il modifie un mot clé dans l'arbre des mots
957
	 * clés
958
	 *
959
	 * @param n
960
	 *            le noeud à modifier
961
	 * @param arbreMC
962
	 *            le nouvel arbre de mots clés à mettre à jour
963
	 */
964
	public void modifierMotCleDansArbre(TreeNode n, Tree arbreMC) {
965
 
966
		observationModele.modifierMotCleDansArbre(n, arbreMC);
967
		getPanneauFiltres().getArbreMotsClesFiltreVue().rafraichir(n, false);
968
 
969
	}
970
 
971
	/**
972
	 * Appelle le médiateur pour qu'il déplace un mot clé et son sous arbre dans
973
	 * l'arbre des mots clés
974
	 *
975
	 * @param n
976
	 *            le noeud à déplacer
977
	 * @param arbreMC
978
	 *            le nouvel arbre de mots clés à mettre à jour
979
	 */
980
	public void deplacerMotCleDansArbre(TreeNode n, Tree arbreMC) {
981
 
982
		observationModele.deplacerMotCleDansArbre(n, arbreMC);
983
		getPanneauFiltres().getArbreMotsClesFiltreVue().rafraichir(n, false);
984
	}
985
 
986
 
987
	public void rafraichirArbreMotsCles(Tree arbreMotsCles) {
115 aurelien 988
 
156 aurelien 989
		arbreMotsClesVue.rafraichir(arbreMotsCles, false);
990
		getPanneauFiltres().getArbreMotsClesFiltreVue().rafraichir(arbreMotsCles, false);
115 aurelien 991
 
992
	}
993
 
994
 
156 aurelien 995
	public void obtenirArbreMotsCles(Rafraichissable r) {
115 aurelien 996
 
156 aurelien 997
		observationModele.obtenirArbreMotsCles(r);
998
	}
12 david 999
 
156 aurelien 1000
	public ListeObservation obtenirCacheObservation() {
1001
		return observationModele.getCacheObservation();
1002
	}
1003
 
1004
	public void donneesExterieures(Object nouvelleDonnees) {
1005
		if(nouvelleDonnees instanceof Tree) {
1006
 
1007
			Tree arbreMotsCles = (Tree)nouvelleDonnees ;
1008
			observationModele.rafraichirArbreMotsCles(nouvelleDonnees);
1009
			rafraichirArbreMotsCles(arbreMotsCles);
1010
		}
1011
	}
1012
 
1013
	public void transmettreDonnees(Object o) {
1014
		carnetEnLigneMediateur.donneesObsVersImages(o);
1015
	}
217 aurelien 1016
 
1017
	public void onModeModification() {
1018
 
1019
		String[] ids = listeObservation.getIdSelectionnees();
1020
		Observation obs = listeObservation.getCacheListeObservation().get(ids[ids.length]);
1021
		if(ids.length > 1) {
1022
			formulaireSaisieObservationVue.setMasseModification(true);
1023
			ListeObservation listeObs = new ListeObservation();
1024
			for(int i=0; i < ids.length;i++) {
1025
				Observation obsAjout = observationModele.getCacheObservation().get(ids[i]);
1026
				listeObs.ajouterObservation(obsAjout);
1027
			}
1028
			formulaireSaisieObservationVue.rafraichir(listeObs, false);
1029
		} else {
1030
			formulaireSaisieObservationVue.setMasseModification(false);
1031
			// affichage des détails dans le formulaire d'observation
1032
			formulaireSaisieObservationVue.rafraichir(obs, false) ;
1033
		}
1034
	}
2 aperonnet 1035
}