Subversion Repositories eFlore/Applications.cel

Rev

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