Subversion Repositories eFlore/Applications.cel

Rev

Details | 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
2 aperonnet 6
import org.tela_botanica.client.CarnetEnLigneMediateur;
12 david 7
import org.tela_botanica.client.interfaces.Rafraichissable;
989 aurelien 8
import org.tela_botanica.client.modeles.objets.EntiteGeographiqueObservation;
9
import org.tela_botanica.client.modeles.objets.ListeObservation;
10
import org.tela_botanica.client.modeles.objets.Observation;
11
import org.tela_botanica.client.modeles.objets.Utilisateur;
12
import org.tela_botanica.client.modeles.objets.ListeReferentielPerso.TypesReferentiels;
251 aurelien 13
import org.tela_botanica.client.vues.observation.CartographieObservationVue;
437 aurelien 14
import org.tela_botanica.client.vues.observation.FormulaireImportObservationVue;
195 david 15
import org.tela_botanica.client.vues.observation.FormulaireSaisieObservationVue;
16
import org.tela_botanica.client.vues.observation.ListeObservationVue;
17
import org.tela_botanica.client.vues.observation.MenuObservationVue;
18
import org.tela_botanica.client.vues.observation.PanneauFiltresObservationVues;
196 david 19
import org.tela_botanica.client.vues.observation.indicateurs.ImageGeneriqueVue;
20
import org.tela_botanica.client.vues.observation.indicateurs.InformationRepartitionVue;
318 aurelien 21
import org.tela_botanica.client.vues.observation.indicateurs.LienExterneVue;
196 david 22
import org.tela_botanica.client.vues.observation.indicateurs.MiniZoomImageVue;
115 aurelien 23
 
53 david 24
import com.google.gwt.core.client.GWT;
251 aurelien 25
import com.google.gwt.maps.client.geom.LatLng;
140 aurelien 26
import com.google.gwt.user.client.History;
77 jpm 27
import com.google.gwt.user.client.Window;
41 jpm 28
import com.gwtext.client.core.EventObject;
86 jpm 29
import com.gwtext.client.core.Ext;
30
import com.gwtext.client.core.ExtElement;
53 david 31
import com.gwtext.client.core.RegionPosition;
217 aurelien 32
import com.gwtext.client.data.Record;
156 aurelien 33
import com.gwtext.client.data.Tree;
342 aurelien 34
import com.gwtext.client.dd.DragData;
251 aurelien 35
import com.gwtext.client.widgets.BoxComponent;
86 jpm 36
import com.gwtext.client.widgets.Component;
251 aurelien 37
import com.gwtext.client.widgets.Container;
12 david 38
import com.gwtext.client.widgets.Panel;
86 jpm 39
import com.gwtext.client.widgets.event.ContainerListenerAdapter;
202 david 40
import com.gwtext.client.widgets.event.PanelListenerAdapter;
342 aurelien 41
import com.gwtext.client.widgets.grid.GridDragData;
53 david 42
import com.gwtext.client.widgets.layout.BorderLayout;
43
import com.gwtext.client.widgets.layout.BorderLayoutData;
156 aurelien 44
import com.gwtext.client.widgets.layout.FitLayout;
53 david 45
import com.gwtext.client.widgets.layout.RowLayout;
80 jpm 46
import com.gwtext.client.widgets.layout.RowLayoutData;
156 aurelien 47
import com.gwtext.client.widgets.tree.TreeNode;
2 aperonnet 48
 
48 david 49
 
12 david 50
/**
51
 * Mediateur gérant les interactions entre vues et les echanges de données
52
 * C'est un singleton.
53
 * @author aurelien
54
 *
55
 */
47 david 56
public class ObservationMediateur {
12 david 57
 
58
	/**
59
	 * booleen qui verifie l'unicite de l'instance (donc static)
60
	 */
31 jpm 61
	private static boolean estInstancie = false ;
62
 
63
	/**
64
	 * pointeur sur le médiateur (pour le pattern singleton)
65
	 */
66
	private static ObservationMediateur thisMediateur = null ;
12 david 67
 
68
	/** Mediateur general de l'application carnet en ligne
69
	 *
70
	 *
71
	 */
72
	private CarnetEnLigneMediateur carnetEnLigneMediateur = null ;
73
 
74
 
75
	/**
76
	 * modele de données
77
	 */
78
	private ObservationModele observationModele = null ;
79
 
80
 
81
	/**
82
	 * panneau principal des Observation (onglet "observation")
83
	 */
209 aurelien 84
	private final Panel panneauPrincipalObservation = new Panel("Observations");
12 david 85
 
86
 
87
	/**
88
	 * liste détaillée des Observations
89
	 */
318 aurelien 90
	public ListeObservationVue listeObservation = null ;
12 david 91
 
92
	/**
93
	 * Saisie des Observations
94
	 */
95
 
96
	private FormulaireSaisieObservationVue formulaireSaisieObservationVue=null;
97
 
482 david 98
 
251 aurelien 99
	/**
482 david 100
	 *
101
	 * Import des observations depuis un fichier
102
	 *
103
	 */
104
 
105
	private FormulaireImportObservationVue formImportObs=null;
106
 
107
 
108
	/**
251 aurelien 109
	 * Cartographie
110
	 */
111
	private CartographieObservationVue cartoObservationVue = null;
48 david 112
 
251 aurelien 113
 
48 david 114
 
12 david 115
	/**
116
	 * booleen explicitant s'il y a une selection en cours
117
	 */
156 aurelien 118
	private boolean selection = false ;
12 david 119
	/**
53 david 120
	 * panneau conteneur pour le panneau  des informations lies à l'observation
121
	 */
12 david 122
 
318 aurelien 123
  	private Panel details = new Panel("Details");
53 david 124
 
318 aurelien 125
  	private LienExterneVue liExtVue = null;
53 david 126
 
12 david 127
	/**
53 david 128
	 * panneau conteneur pour le panneau des filtres
129
	 */
130
 
54 david 131
  	private PanneauFiltresObservationVues filtres = null;
53 david 132
 
133
 
54 david 134
 
135
  	/**
136
  	 * panneau d'information de repartition sur le nom selectionné
137
  	 *
138
  	 */
139
 
140
  	private InformationRepartitionVue informationRepartitionVue=null;
141
 
142
 
143
  	/**
144
  	 * panneau d'affichage d'une image generique associe au nom selectionne
145
  	 *
146
  	 */
147
 
148
  	private ImageGeneriqueVue imageGeneriqueVue=null;
149
 
94 jpm 150
  	private MiniZoomImageVue mvz = null ;
54 david 151
 
140 aurelien 152
  	private boolean importerObservations = false ;
251 aurelien 153
 
677 aurelien 154
	private com.gwtext.client.widgets.Window fenetreCarto;
658 aurelien 155
	public boolean changementTabProg = false;
251 aurelien 156
 
157
	private Panel centre;
140 aurelien 158
 
53 david 159
	/**
12 david 160
	 * constructeur privé (on accède a la classe par la méthode getInstance
161
	 */
162
 
163
 
164
	private ObservationMediateur(CarnetEnLigneMediateur carnetEnLigneMediateur )
165
	{
166
		this.carnetEnLigneMediateur=carnetEnLigneMediateur;
251 aurelien 167
 
12 david 168
		// on crée un modèle
169
		observationModele = ObservationModele.Instance(this);
170
 
48 david 171
 
12 david 172
		listeObservation = new ListeObservationVue(this);
53 david 173
		listeObservation.setTitle("Observations");
12 david 174
 
53 david 175
		// quelques variables de position pour les borderlayouts
176
		final BorderLayoutData regionNord = new BorderLayoutData(
177
				RegionPosition.NORTH);
178
 
179
		final BorderLayoutData regionCentre = new BorderLayoutData(
180
				RegionPosition.CENTER);
342 aurelien 181
		regionCentre.setSplit(true);
53 david 182
 
183
 
184
		final BorderLayoutData regionEst = new BorderLayoutData(
185
				RegionPosition.EAST);
342 aurelien 186
		regionEst.setSplit(true);
53 david 187
 
188
 
189
		final BorderLayoutData regionOuest = new BorderLayoutData(
190
				RegionPosition.WEST);
342 aurelien 191
		regionOuest.setSplit(true);
12 david 192
 
53 david 193
 
194
		panneauPrincipalObservation.setLayout(new BorderLayout()) ;
251 aurelien 195
		cartoObservationVue = new CartographieObservationVue(this);
196
		cartoObservationVue.setLayout(new FitLayout());
53 david 197
 
12 david 198
		// Le formulaire de saisie / modification d'observation
199
		formulaireSaisieObservationVue = new FormulaireSaisieObservationVue(this);
677 aurelien 200
		formulaireSaisieObservationVue.setTitle("Saisie");
201
		formulaireSaisieObservationVue.setTitleCollapse(true);
202
		formulaireSaisieObservationVue.setCollapsible(true) ;
203
		formulaireSaisieObservationVue.setAutoScroll(true) ;
251 aurelien 204
 
677 aurelien 205
		fenetreCarto = new com.gwtext.client.widgets.Window();
206
		fenetreCarto.setConstrain(true);
207
		fenetreCarto.setModal(true);
251 aurelien 208
 
677 aurelien 209
		fenetreCarto.add(cartoObservationVue);
251 aurelien 210
 
677 aurelien 211
		formulaireSaisieObservationVue.addListener(
202 david 212
		new PanelListenerAdapter() {
1291 aurelien 213
			@Override
251 aurelien 214
			public void onCollapse(Panel panel)  {
318 aurelien 215
				CarnetEnLigneMediateur.fireResize();
251 aurelien 216
			}
1291 aurelien 217
		    @Override
218
			public void onExpand(Panel panel) {
318 aurelien 219
		    	CarnetEnLigneMediateur.fireResize();
251 aurelien 220
		    }
221
		});
222
 
223
		centre = new Panel();
224
		centre.setLayout(new BorderLayout());
202 david 225
		centre.setAutoScroll(true);
226
		centre.setBorder(false);
201 david 227
 
251 aurelien 228
		centre.addListener(
229
			new PanelListenerAdapter() {
1291 aurelien 230
				@Override
251 aurelien 231
				public void onCollapse(Panel panel)  {
318 aurelien 232
					CarnetEnLigneMediateur.fireResize();
251 aurelien 233
				}
1291 aurelien 234
			    @Override
235
				public void onExpand(Panel panel) {
318 aurelien 236
			    	CarnetEnLigneMediateur.fireResize();
251 aurelien 237
			    }
238
 
1291 aurelien 239
				@Override
251 aurelien 240
				public void onResize(BoxComponent component, int adjWidth,
241
						int adjHeight, int rawWidth, int rawHeight) {
677 aurelien 242
					formulaireSaisieObservationVue.redimensionnerFormulaire();
318 aurelien 243
					listeObservation.doLayout();
251 aurelien 244
				}
245
 
1291 aurelien 246
				@Override
251 aurelien 247
				public void onAfterLayout(Container self) {
363 aurelien 248
 
251 aurelien 249
				}
250
		});
251
 
115 aurelien 252
		formulaireSaisieObservationVue.setBorder(false);
12 david 253
 
251 aurelien 254
		BorderLayoutData listeLayoutData = new BorderLayoutData(RegionPosition.SOUTH);
255
		listeLayoutData.setSplit(true);
256
 
257
		BorderLayoutData formLayoutData = new BorderLayoutData(RegionPosition.CENTER);
677 aurelien 258
		formLayoutData.setSplit(true);
251 aurelien 259
 
260
		centre.add(listeObservation, listeLayoutData);
677 aurelien 261
		centre.add(formulaireSaisieObservationVue, formLayoutData);
202 david 262
 
263
		// Redimensionnement global sur collapse/expand
318 aurelien 264
		details.addListener(
677 aurelien 265
			new PanelListenerAdapter() {
1291 aurelien 266
				@Override
677 aurelien 267
				public void onCollapse(Panel panel)  {
268
					CarnetEnLigneMediateur.fireResize();
269
				}
1291 aurelien 270
			    @Override
271
				public void onExpand(Panel panel) {
677 aurelien 272
 
273
			    	String[] selectionListe = listeObservation.getIdSelectionnees();
274
			    	if(selectionListe.length > 0) {
275
			    		Observation obs = listeObservation.getCacheListeObservation().get(selectionListe[0]);
276
			    		obtenirImageInformationExternes(obs.getNumeroNomenclaturalSaisi());
277
			    	}
278
			    	CarnetEnLigneMediateur.fireResize();
279
			    }
202 david 280
		});
251 aurelien 281
 
53 david 282
		// on initialise le volet qui contient les details
318 aurelien 283
		details.setWidth("10%");
284
		details.setTitleCollapse(true);
285
		details.setCollapsible(true);
156 aurelien 286
 
287
		details.setAutoScroll(true);
54 david 288
		details.setLayout(new RowLayout());
53 david 289
 
318 aurelien 290
		// Lien vers eflore
291
		liExtVue = new LienExterneVue(this);
292
		liExtVue.setHeight("20px");
293
		details.add(liExtVue);
156 aurelien 294
 
54 david 295
		// Information de repartition
296
		informationRepartitionVue=new InformationRepartitionVue(this);
318 aurelien 297
		details.add(informationRepartitionVue, new RowLayoutData("30%"));
54 david 298
 
299
		// Image generique
300
		imageGeneriqueVue=new ImageGeneriqueVue(this);
318 aurelien 301
		details.add(imageGeneriqueVue, new RowLayoutData("30%"));
54 david 302
 
94 jpm 303
		mvz = new MiniZoomImageVue(this) ;
54 david 304
 
136 aurelien 305
		details.add(mvz, new RowLayoutData("34%")) ;
94 jpm 306
 
54 david 307
		// on crée le panneau des filtres
308
		filtres = new PanneauFiltresObservationVues(this);
309
 
310
		// on initialise le volet qui contient les filtres
136 aurelien 311
		filtres.setWidth("10%");
53 david 312
		filtres.setTitleCollapse(true);
313
		filtres.setCollapsible(true);
54 david 314
 
202 david 315
 
316
		filtres.addListener(
251 aurelien 317
			new PanelListenerAdapter() {
1291 aurelien 318
				@Override
251 aurelien 319
				public void onCollapse(Panel panel)  {
318 aurelien 320
					CarnetEnLigneMediateur.fireResize();
251 aurelien 321
				}
1291 aurelien 322
			    @Override
323
				public void onExpand(Panel panel) {
318 aurelien 324
			    	CarnetEnLigneMediateur.fireResize();
251 aurelien 325
			    }
202 david 326
		});
327
 
318 aurelien 328
		panneauPrincipalObservation.add(details,regionEst);
156 aurelien 329
 
53 david 330
		panneauPrincipalObservation.add(filtres,regionOuest);
331
		panneauPrincipalObservation.add(centre,regionCentre);
332
 
12 david 333
	}
410 aurelien 334
 
12 david 335
	/**
336
	 * Retourne une instance de manière unique
337
	 * @return l'instance unique du médiateur
338
	 */
339
	public static ObservationMediateur Instance(CarnetEnLigneMediateur carnetEnLigneMediateur)
340
	{
31 jpm 341
			if(!estInstancie || thisMediateur == null)
12 david 342
			{
343
				estInstancie = true ;
31 jpm 344
				thisMediateur = new ObservationMediateur(carnetEnLigneMediateur) ;
12 david 345
			}
31 jpm 346
 
347
			return thisMediateur ;
12 david 348
	}
140 aurelien 349
 
350
 
351
	public void connecterUtilisateur() {
352
 
353
		if(importerObservations) {
354
			observationModele.importerObservations();
355
		}
356
 
357
		if(panneauPrincipalObservation == null || !panneauPrincipalObservation.isCreated())
358
		{
359
			panneauPrincipalObservation.addListener(new ContainerListenerAdapter()
360
			{
1291 aurelien 361
				@Override
140 aurelien 362
				public void onRender(Component c)
363
				{
364
					panneauPrincipalObservation.purgeListeners() ;
261 aurelien 365
					initialiserArbres();
366
					filtres.getRechercheLibreVue().raz();
140 aurelien 367
					obtenirNombreObservation();
368
					analyserHistorique();
369
				}
370
			}) ;
371
		}
372
		else
373
		{
261 aurelien 374
			initialiserArbres();
375
			filtres.getRechercheLibreVue().raz();
140 aurelien 376
			obtenirNombreObservation();
377
			analyserHistorique();
378
		}
379
	}
380
 
381
	private void initialiserArbres() {
382
		getPanneauFiltres().getArbreDateObservationFiltreVue().initialiser();
261 aurelien 383
		getPanneauFiltres().getArbreEntiteGeographiqueObservationFiltreVue().initialiser();
342 aurelien 384
		getPanneauFiltres().getArbreMotsClesObservationVue().initialiser();
140 aurelien 385
	}
82 david 386
 
12 david 387
 
388
 
82 david 389
	// ACTIONS  a entreprendre lors d'un evenement particulier
12 david 390
	/**
82 david 391
	 * Lors du raffraichissement de la liste d'observation
392
	 */
393
	public void onRafraichissementListeObservations() {
394
 
173 aurelien 395
		carnetEnLigneMediateur.donneesObsVersImages(listeObservation.getCacheListeObservation());
156 aurelien 396
		observationModele.rafraichirCacheObservation(listeObservation.getCacheListeObservation());
342 aurelien 397
 
398
		filtres.getArbreMotsClesObservationVue().cocherMotsCles(new String[0]);
82 david 399
	}
400
 
401
	/**
402
	 *
403
	 * TODO : fonction plus generique, appelle sur un clic ou une selection de ligne, a appeller : SelectionnerObservation
404
	 * est appelé lors d'un clic de souris sur un enregistrement de la liste le
405
	 * médiateur gère alors les conséquences
406
	 *
407
	 * @param rowIndex
408
	 *            le numéro de ligne selectionné
409
	 */
410
 
411
	public void onClicListeObservation(int rowIndex, String ordreObservation) {
412
 
156 aurelien 413
		Observation obs = obtenirCacheObservation().get(ordreObservation) ;
82 david 414
 
105 aurelien 415
		if(GWT.isScript()) {
416
			masquerChargementInfosObservations() ;
417
		}
86 jpm 418
 
217 aurelien 419
		if(formulaireSaisieObservationVue.getModification()) {
420
			String[] ids = listeObservation.getIdSelectionnees();
421
			if(ids.length > 1) {
422
				formulaireSaisieObservationVue.setMasseModification(true);
423
				ListeObservation listeObs = new ListeObservation();
424
				for(int i=0; i < ids.length;i++) {
425
					Observation obsAjout = observationModele.getCacheObservation().get(ids[i]);
426
					listeObs.ajouterObservation(obsAjout);
427
				}
428
				formulaireSaisieObservationVue.rafraichir(listeObs, false);
429
			} else {
430
				formulaireSaisieObservationVue.setMasseModification(false);
431
				// affichage des détails dans le formulaire d'observation
432
				formulaireSaisieObservationVue.rafraichir(obs, false) ;
433
			}
434
		} else {
435
			formulaireSaisieObservationVue.rafraichir(obs, false) ;
436
		}
658 aurelien 437
 
82 david 438
		// Affichage de l'image correspondante
677 aurelien 439
		if(details.isVisible()) {
440
			// Affichage de la carte de repartition correspondante
1454 aurelien 441
			String numeroNomenclaturalSaisiObservation = obs.getNumeroNomenclaturalRetenu() ;
1488 aurelien 442
			if(numeroNomenclaturalSaisiObservation != null && !numeroNomenclaturalSaisiObservation.isEmpty()) {
443
				observationModele.obtenirImageInformationRepartition(informationRepartitionVue,numeroNomenclaturalSaisiObservation) ;
444
				liExtVue.rafraichir(numeroNomenclaturalSaisiObservation, false);
445
				observationModele.obtenirImageGenerique(imageGeneriqueVue,numeroNomenclaturalSaisiObservation) ;
446
				observationModele.obtenirLiaisonImage(mvz, obs.getId()) ;
447
 
448
			}
677 aurelien 449
		}
342 aurelien 450
		filtres.getArbreMotsClesObservationVue().rafraichir(obs.getMotsCles(), false);
82 david 451
	}
452
 
128 aurelien 453
	public void obtenirImageInformationExternes(String numeroNomenclaturalSaisiObservation) {
677 aurelien 454
 
455
		if(details.isVisible()) {
456
			if(GWT.isScript()) {
457
				masquerChargementInfosObservations() ;
458
			}
459
			liExtVue.rafraichir(numeroNomenclaturalSaisiObservation, false);
460
			observationModele.obtenirImageInformationRepartition(informationRepartitionVue,numeroNomenclaturalSaisiObservation) ;
461
			observationModele.obtenirImageGenerique(imageGeneriqueVue,numeroNomenclaturalSaisiObservation) ;
128 aurelien 462
		}
463
	}
82 david 464
 
217 aurelien 465
	public int getTaillePage() {
466
		return listeObservation.getTaillePage();
467
	}
128 aurelien 468
 
217 aurelien 469
	public int getPageEnCours() {
470
		return listeObservation.getPageEncours();
471
	}
472
 
473
 
82 david 474
	// ACCES au Modèle
475
 
476
 
477
	// C du CRUD
478
 
479
 
480
 
481
	/**
482
	 * TODO : afficher un message du type "observation ajouté".
483
	 * Lance la creation d'une observation
484
	 * @param obs : l'observation saisie
104 jpm 485
	 */
82 david 486
	public void ajouterObservation(Observation obs) {
104 jpm 487
 
937 aurelien 488
	  // On rafraichit la liste d'observation
82 david 489
	  observationModele.ajouterObservation(listeObservation, obs) ;
91 jpm 490
	  filtres.getArbreEntiteGeographiqueObservationFiltreVue().rafraichir(obs,true) ;
94 jpm 491
	  filtres.getArbreDateObservationFiltreVue().rafraichir(obs,true) ;
82 david 492
 
493
	}
494
 
495
 
496
 
497
	// R du CRUD
498
 
499
	/**
54 david 500
	 * Demande au modele le nombre d'Observation à afficher
501
	 * TODO : grouper cette demande avec la demande d'affichage de liste ?
12 david 502
	 */
2 aperonnet 503
 
12 david 504
	public void obtenirNombreObservation() {
505
 
125 aurelien 506
		listeObservation.masquerChargement() ;
104 jpm 507
		mvz.raz() ;
508
		imageGeneriqueVue.raz() ;
509
		informationRepartitionVue.raz() ;
325 aurelien 510
 
104 jpm 511
		observationModele.obtenirNombreObservation(listeObservation) ;
12 david 512
 
2 aperonnet 513
	}
446 aurelien 514
 
515
	/**
516
	 * Demande au modele le nombre d'Observation à afficher
517
	 * TODO : grouper cette demande avec la demande d'affichage de liste ?
518
	 */
54 david 519
 
446 aurelien 520
	public void obtenirDernierePageObservation() {
521
 
522
		listeObservation.rafraichir(new Observation(),false) ;
523
 
524
	}
525
 
12 david 526
 
82 david 527
 
528
	public void obtenirListeObservation() {
529
		obtenirListeObservation(listeObservation);
530
	}
531
 
2 aperonnet 532
	/**
82 david 533
	 * Demande au modele le detail  des Observations à afficher
54 david 534
	 * TODO : grouper cette demande avec la demande d'affichage de liste ?
2 aperonnet 535
	 */
7 aperonnet 536
 
12 david 537
 
61 jpm 538
	public void obtenirListeObservation(Rafraichissable r) {
539
 
77 jpm 540
		listeObservation.masquerChargement() ;
61 jpm 541
		observationModele.obtenirListeObservation(r,listeObservation.getTaillePage(),listeObservation.getPageEncours()) ;
542
	}
543
 
86 jpm 544
	public void obtenirCacheObservation(Rafraichissable r) {
545
 
156 aurelien 546
		r.rafraichir(observationModele.getCacheObservation(), false) ;
86 jpm 547
	}
548
 
82 david 549
 
2 aperonnet 550
	/**
82 david 551
	 * Envoie au modèle une demande pour obtenir l'arbre des localites
552
	 *
553
	 * @param r
554
	 *            le raffraichissable qui a demandé la mise à jour
2 aperonnet 555
	 */
82 david 556
	public void obtenirListeEntiteGeographique() {
12 david 557
 
91 jpm 558
		observationModele.obtenirListeEntiteGeographique(filtres.getArbreEntiteGeographiqueObservationFiltreVue());
12 david 559
 
560
	}
82 david 561
 
562
 
563
	// U du CRUD
564
	public void modifierObservation(Observation obs) {
12 david 565
 
342 aurelien 566
		// On prend soin de récupérer les mots clés de l'observation
567
		Observation obsMod = obtenirCacheObservation().get(obs.getNumeroOrdre());
568
		obs.setMotsCles(obsMod.getMotsCles());
82 david 569
 
342 aurelien 570
		// On rafraichit la liste d'observation
571
		observationModele.modifierObservation(listeObservation, obs) ;
572
		filtres.getArbreEntiteGeographiqueObservationFiltreVue().rafraichir(obs,true) ;
573
		filtres.getArbreDateObservationFiltreVue().rafraichir(obs,true) ;
574
 
82 david 575
	}
12 david 576
 
217 aurelien 577
	public void modifierObservationEnMasse(Observation obs) {
578
		// On rafraichit la liste d'observation
220 aurelien 579
		listeObservation.masquerChargement();
217 aurelien 580
		observationModele.modifierObservationEnMasse(listeObservation, obs) ;
581
	}
82 david 582
 
583
	// D du CRUD
54 david 584
	/**
82 david 585
	 * TODO : afficher un message du type "observation modifie".
586
	 * Lance la modification d'une observation
587
	 * @param obs : l'observation a modifier
54 david 588
	 */
589
 
82 david 590
 
591
 
592
	public void supprimerObservation(Rafraichissable r, String numeroOrdre) {
593
 
594
		if(listeObservation.getSelectionModel().getCount() > 0)
595
		{
596
			if(Window.confirm("Êtes vous sur de vouloir supprimer cette observation ?")) {
597
			observationModele.supprimerObservation(r,numeroOrdre) ;
598
			}
599
		}
600
 
2 aperonnet 601
	}
12 david 602
 
658 aurelien 603
	public boolean listeAvoirObservations() {
604
		return listeObservation.getStore().getCount() > 0;
605
	}
606
 
82 david 607
	// Assistants de saisie
2 aperonnet 608
	/**
13 david 609
	 *
610
	 * Lance un appel de recherche d'une liste de commune correspondant aux criteres de selectionne
611
	 * @param r : la vue demandeuse de donnee
612
	 * @param critere : les criteres de selection
613
	 */
12 david 614
 
13 david 615
	public void obtenirListeReferentielCommune(Rafraichissable r, String critere) {
12 david 616
 
13 david 617
		observationModele.obtenirListeReferentielCommune(r,critere) ;
2 aperonnet 618
	}
20 david 619
 
733 aurelien 620
	// Assistants de saisie
621
	/**
622
	 *
623
	 * Lance un appel de recherche d'une liste de résultats
624
	 * correspondant aux criteres de selections pour un référentiel donné
625
	 * @param r : la vue demandeuse de donnee
626
	 * @param referentiel : le référentiel demandé
627
	 * @param critere : les criteres de selection
628
	 */
629
	public void obtenirListeReferentielPerso(Rafraichissable r, TypesReferentiels referentiel, String critere) {
630
		observationModele.obtenirListeReferentielPerso(r, referentiel, critere) ;
631
	}
82 david 632
 
20 david 633
	/**
634
	 *
635
	 * Lance un appel de recherche d'une liste de nom scientifique correspondant aux criteres de selectionne
636
	 * @param r : la vue demandeuse de donnee
637
	 * @param critere : les criteres de selection
638
	 */
639
 
640
	public void obtenirListeReferentielNom(Rafraichissable r, String critere) {
2 aperonnet 641
 
94 jpm 642
		observationModele.obtenirListeReferentielNom(r,critere) ;
20 david 643
	}
82 david 644
 
645
	// Etat du syteme
646
 
20 david 647
	/**
82 david 648
	 * C'est dans cette fonction que doivent être renvoyé les valeurs des filtres
649
	 * sous forme de tableau [nom, valeur]
650
	 * @return Les noms et valeurs des filtres
20 david 651
	 */
82 david 652
	public String[][] renvoyerFiltres()
115 aurelien 653
	{
325 aurelien 654
		int longueur = 0;
115 aurelien 655
 
325 aurelien 656
		String[] filtresEntitesGeo = filtres.getArbreEntiteGeographiqueObservationFiltreVue().renvoyerValeursAFiltrer() ;
657
		String chaineNomsFiltresGeo = filtresEntitesGeo[0] ;
658
		String chaineValFiltresGeo = filtresEntitesGeo[1] ;
659
 
660
		String[] filtresDate = filtres.getArbreDateObservationFiltreVue().renvoyerValeursAFiltrer() ;
661
		String chaineNomsFiltresDate = filtresDate[0] ;
662
		String chaineValFiltresDate = filtresDate[1] ;
663
 
664
		String[] filtresTaxon = filtres.getRechercheLibreVue().renvoyerValeursAFiltrer();
665
 
342 aurelien 666
		String[] filtresMotsCles = filtres.getArbreMotsClesObservationVue().renvoyerValeursAFiltrer();
667
 
325 aurelien 668
		String chaineNomsFiltres = "" ;
669
		String chaineValFiltres = "" ;
670
 
671
		if(!chaineNomsFiltresGeo.trim().equals("") && !chaineValFiltresGeo.trim().equals("")) {
672
			chaineNomsFiltres += chaineNomsFiltresGeo+",";
673
			chaineValFiltres += chaineValFiltresGeo+",";
674
		}
675
 
676
		if(!chaineNomsFiltresDate.trim().equals("") && !chaineValFiltresDate.trim().equals("")) {
677
			chaineNomsFiltres += chaineNomsFiltresDate+",";
678
			chaineValFiltres += chaineValFiltresDate+",";
679
		}
680
 
681
		if(!filtresTaxon[0].trim().equals("") && !filtresTaxon[1].trim().equals("")) {
976 aurelien 682
			chaineNomsFiltres += filtresTaxon[0]+",";
683
			chaineValFiltres += filtresTaxon[1]+",";
325 aurelien 684
		}
685
 
342 aurelien 686
		if(!filtresMotsCles[0].trim().equals("") && !filtresMotsCles[1].trim().equals("")) {
687
			chaineNomsFiltres += filtresMotsCles[0];
688
			chaineValFiltres += filtresMotsCles[1];
689
		}
690
 
325 aurelien 691
		String[] nomsFiltres = chaineNomsFiltres.split(",") ;
692
		String[] valsFiltres = chaineValFiltres.split(",") ;
693
 
694
		longueur += nomsFiltres.length;
695
 
696
		String [][] valeursFiltres = new String[longueur][2] ;
697
 
698
		int i = 0;
699
 
700
		if(valsFiltres.length > 0)
701
		{
702
			for(i = 0 ; i < nomsFiltres.length ; i++)
87 jpm 703
			{
325 aurelien 704
				valeursFiltres[i][0] = nomsFiltres[i] ;
705
				if(valsFiltres[i].equals("Inconnue"))
87 jpm 706
				{
1332 aurelien 707
					valeursFiltres[i][1] = "NULL" ;
87 jpm 708
				}
325 aurelien 709
				else
710
				{
711
					valeursFiltres[i][1] = valsFiltres[i] ;
712
				}
87 jpm 713
			}
325 aurelien 714
		}
715
 
677 aurelien 716
		listeObservation.afficherFiltres(valeursFiltres) ;
717
 
325 aurelien 718
		return valeursFiltres ;
20 david 719
	}
82 david 720
 
54 david 721
	/**
722
	 *
82 david 723
	 * @return
54 david 724
	 *
725
	 */
726
 
82 david 727
	public Panel getPanneauPrincipalObservation() {
728
		return panneauPrincipalObservation;
729
	}
54 david 730
 
731
 
41 jpm 732
	public void montrerContextMenu(EventObject e) {
733
 
107 aurelien 734
		MenuObservationVue mvo = new MenuObservationVue(this) ;
735
		mvo.showAt(e.getXY()) ;
41 jpm 736
 
737
	}
738
 
739
	public void doubleClicListeObservation(int rowIndex) {
740
 
741
 
742
	}
82 david 743
 
744
	// Getters
745
 
54 david 746
	public PanneauFiltresObservationVues getPanneauFiltres() {
747
 
748
		return filtres;
749
 
750
	}
86 jpm 751
 
752
	public void masquerChargementInfosObservations()
753
	{
318 aurelien 754
		ExtElement masked = Ext.get(details.getId());
54 david 755
 
342 aurelien 756
		if (details.isVisible() && masked != null) {
86 jpm 757
			informationRepartitionVue.raz() ;
758
			imageGeneriqueVue.raz() ;
759
			masked.mask("Chargement", true);
760
		}
251 aurelien 761
 
762
		cartoObservationVue.masquerChargement(true);
86 jpm 763
	}
82 david 764
 
86 jpm 765
	public void deMasquerChargementInfosObservations()
766
	{
318 aurelien 767
		ExtElement masked = Ext.get(details.getId());
63 jpm 768
 
342 aurelien 769
		if (details.isVisible() && masked != null) {
86 jpm 770
			masked.unmask() ;
771
		}
772
	}
91 jpm 773
 
774
 
775
	public void obtenirDatesObservation() {
776
 
777
		observationModele.obtenirDatesObservation(filtres.getArbreDateObservationFiltreVue()) ;
778
	}
101 jpm 779
 
780
 
781
	public void exporterObservations() {
782
 
128 aurelien 783
			observationModele.exporterObservations() ;
101 jpm 784
	}
104 jpm 785
 
786
 
787
	public void deconnecterUtilisateur() {
788
 
140 aurelien 789
		if(panneauPrincipalObservation == null || panneauPrincipalObservation.isCreated() || !panneauPrincipalObservation.isVisible())
790
		{
791
			panneauPrincipalObservation.addListener(new ContainerListenerAdapter()
792
			{
1291 aurelien 793
				@Override
140 aurelien 794
				public void onShow(Component component)
795
				{
796
					deconnecterUtilisateur();
797
					panneauPrincipalObservation.purgeListeners();
798
				}
799
			});
800
		}
801
		else
802
		{
803
			listeObservation.raz() ;
804
			formulaireSaisieObservationVue.raz() ;
261 aurelien 805
			razFiltres();
140 aurelien 806
			informationRepartitionVue.raz() ;
807
			imageGeneriqueVue.raz() ;
808
			mvz.raz() ;
809
		}
104 jpm 810
	}
811
 
812
 
813
	public void supprimerLiaisonObsImage() {
814
 
1314 aurelien 815
		String ordreObs = listeObservation.getIdSelectionnees()[0];
816
		String idObs = observationModele.getIdPourOrdreObs(ordreObs);
104 jpm 817
		String idImg = mvz.getIdImage() ;
818
 
819
		if(Window.confirm("Supprimer le lien entre l'image "+idImg+" et l'observations "+idObs+" ?"))
820
		{
821
			mvz.supprimerLiaisonImage() ;
822
			observationModele.supprimerLiaisonImages(idImg,idObs) ;
823
		}
824
 
825
	}
107 aurelien 826
 
827
	public void supprimerObservations() {
828
 
128 aurelien 829
		if(listeObservation.getIdSelectionnees().length > 0) {
830
			if(Window.confirm("Êtes vous sur de vouloir supprimer les observations sélectionnées ?")) {
831
					String[] numObs = listeObservation.getIdSelectionnees();
832
					String numObsapl = "" ;
833
					for(int i = 0 ; i < numObs.length ; i++) {
834
						numObsapl += numObs[i]+"," ;
835
					}
836
 
837
					observationModele.supprimerListeObservation(listeObservation,numObsapl) ;
107 aurelien 838
			}
128 aurelien 839
		}
840
		else
841
		{
842
			Window.alert("Aucune observation sélectionnée");
843
		}
107 aurelien 844
	}
108 aurelien 845
 
846
 
145 aurelien 847
	public void transmettreObservations(boolean publier) {
108 aurelien 848
 
937 aurelien 849
		if(Utilisateur.getInstance().isIdentifie()) {
140 aurelien 850
			if(listeObservation.getIdSelectionnees().length > 0) {
145 aurelien 851
 
852
				String action = "" ;
853
 
854
				if(publier) {
855
					action = "rendre publiques" ;
856
				}
857
				else {
858
					action = "rendre privées" ;
859
				}
860
 
861
				if(Window.confirm("Êtes vous sur de vouloir "+action+" les observations sélectionnées ?")) {
140 aurelien 862
					String[] numObs = listeObservation.getIdSelectionnees();
863
					String numObsApl = "" ;
864
					for(int i = 0 ; i < numObs.length ; i++) {
865
						numObsApl += numObs[i] ;
866
						if(i != numObs.length - 1) {
867
							numObsApl +="," ;
868
						}
128 aurelien 869
					}
140 aurelien 870
 
145 aurelien 871
					observationModele.transmettreListeObservation(listeObservation,numObsApl, publier) ;
108 aurelien 872
				}
873
			}
140 aurelien 874
			else
875
			{
876
				Window.alert("Aucune observation sélectionnée");
877
			}
108 aurelien 878
		}
128 aurelien 879
		else
880
		{
145 aurelien 881
			if(publier) {
882
				if(Window.confirm("La publication des observations nécessite d'être identifié, voulez-vous vous identifier ? (toutes vos observations saisies seront conservées)")) {
883
					importerObservations = true ;
884
					carnetEnLigneMediateur.afficherDialogueConnexion();
885
				}
140 aurelien 886
			}
128 aurelien 887
		}
108 aurelien 888
 
889
	}
140 aurelien 890
 
891
	public void analyserHistorique() {
892
 
893
		if (History.getToken().length()>0) {
115 aurelien 894
 
140 aurelien 895
	        final String anum=History.getToken();
896
	        observationModele.analyserHistorique(formulaireSaisieObservationVue,anum);
897
		}
898
	}
115 aurelien 899
 
156 aurelien 900
	/**
901
	 * Appelle le modèle pour mettre à jour la paire mot-clé / identifiant du
902
	 * mot clé
903
	 *
904
	 * @param text
905
	 *            le texte du mot clé
906
	 * @param id
907
	 *            l'identifiant du mot clé
908
	 */
909
	public void mettreAjourMotsClesId(String text, String id) {
910
 
911
		observationModele.mettreAjourMotsClesId(text, id);
912
 
115 aurelien 913
	}
342 aurelien 914
 
915
	public boolean gererDDObsSurMotCle(TreeNode NoeudMotCle, DragData dragData) {
916
 
917
		if(dragData instanceof GridDragData) {
359 aurelien 918
 
342 aurelien 919
			GridDragData gdd = ((GridDragData)dragData);
920
 
921
			String idMotCle = ((String[])NoeudMotCle.getUserObject())[1];
922
 
923
			Record[] obsALier = gdd.getSelections();
924
 
925
			String idObsALier[] = new String[obsALier.length];
926
			String idObsALierString = "";
927
 
928
			for(int i = 0; i < obsALier.length; i++) {
929
				if(i != 0) {
930
					idObsALierString += ", ";
931
				}
932
				idObsALierString += obsALier[i].getAsString("ordre_observation");
933
 
359 aurelien 934
				if(!observationAvoirMotCle(idMotCle, obsALier[i].getAsString("ordre_observation"))) {
935
					idObsALier[i] = obsALier[i].getAsString("ordre_observation");
936
				} else {
937
					idObsALier[i] = "";
938
				}
342 aurelien 939
			}
940
 
941
			String message = "Lier les observations ";
942
 
943
			if(idObsALier.length == 1) {
944
				message = "Lier l'observation ";
945
			}
946
 
947
			if(Window.confirm(message+idObsALierString+" au projet "+NoeudMotCle.getText()+" ?")) {
948
				mettreAjourMotsCles(idMotCle, idObsALier);
949
 
950
				return true;
951
			} else {
952
				return false;
953
			}
954
		} else {
955
			return false;
956
		}
957
	}
958
 
385 aurelien 959
	public void gererDDMotCleSurObs(String idObs, String idMC) {
342 aurelien 960
 
961
		Observation obs = obtenirCacheObservation().get(idObs);
962
 
963
		if(obs == null) {
964
			return;
965
		}
966
 
385 aurelien 967
		if(observationAvoirMotCle(idMC, idObs)) {
342 aurelien 968
			if(Window.confirm("Voulez vous supprimer la liaison entre l'observation et le mot clé ?")) {
385 aurelien 969
				String nouveauMotsCles = obs.getMotsCles().replace(idMC, "");
342 aurelien 970
				nouveauMotsCles = nouveauMotsCles.replace(";;", ";");
971
 
972
				obs.setMotsCles(nouveauMotsCles);
973
 
1314 aurelien 974
				observationModele.supprimerLiaisonMotCleObservations(listeObservation, obs.getId(), idMC);
342 aurelien 975
			}
976
		}
977
	}
115 aurelien 978
 
342 aurelien 979
	public String gererOverDDMotCleSurObs(String idObs, String IdMC) {
980
 
981
		if(observationAvoirMotCle(IdMC, idObs)) {
982
		    return "x-dd-drop-unlink";
983
		} else {
984
			return "x-dd-drop-nodrop";
985
		}
986
	}
156 aurelien 987
	/**
342 aurelien 988
	 * Récupère les identifiants des obs selectionnézs et appelle le modèle
989
	 * pour qu'il mette à jour les associations mots clés/obs
156 aurelien 990
	 *
991
	 * @param motsClesEnCours
992
	 *            les mots clés à associer aux images selectionnés séparés par
342 aurelien 993
	 *            un ';'
156 aurelien 994
	 * @param arbreMC
995
	 *            l'arbre des mots clés à mettre à jour
996
	 */
318 aurelien 997
	public void mettreAjourMotsCles(String motsClesEnCours, String[] idsObsALier) {
998
 
156 aurelien 999
		String[] ids = listeObservation.getIdSelectionnees();
318 aurelien 1000
		observationModele.mettreAjourMotsCles(motsClesEnCours, idsObsALier);
156 aurelien 1001
 
115 aurelien 1002
	}
1003
 
156 aurelien 1004
	/**
1005
	 * Appelle le médiateur pour qu'il ajoute un mot clé dans l'arbre des mots
1006
	 * clés
1007
	 *
1008
	 * @param n
1009
	 *            le noeud à ajouter à l'arbre
1010
	 * @param arbreMC
1011
	 *            le nouvel arbre de mots clés à mettre à jour
1012
	 */
1013
	public void ajouterMotCleDansArbre(TreeNode n, Tree arbreMC) {
1014
		observationModele.ajouterMotCleDansArbre(n, arbreMC);
318 aurelien 1015
		getPanneauFiltres().getArbreMotsClesObservationVue().rafraichir(n, false);
115 aurelien 1016
 
156 aurelien 1017
	}
1018
 
1019
	/**
1020
	 * Appelle le médiateur pour qu'il supprime un mot clé et son sous arbre
1021
	 * dans l'arbre des mots clés
1022
	 *
1023
	 * @param n
1024
	 *            le noeud à supprimer
1025
	 * @param arbreMC
1026
	 *            le nouvel arbre de mots clés à mettre à jour
1027
	 */
1028
	public void supprimerMotCleDansArbre(TreeNode n, Tree arbreMC) {
1029
 
1030
		observationModele.supprimerMotCleDansArbre(n, arbreMC);
318 aurelien 1031
		getPanneauFiltres().getArbreMotsClesObservationVue().rafraichir(n.getId(), false);
156 aurelien 1032
 
1033
	}
1034
 
1035
	/**
1036
	 * Appelle le médiateur pour qu'il modifie un mot clé dans l'arbre des mots
1037
	 * clés
1038
	 *
1039
	 * @param n
1040
	 *            le noeud à modifier
1041
	 * @param arbreMC
1042
	 *            le nouvel arbre de mots clés à mettre à jour
1043
	 */
1044
	public void modifierMotCleDansArbre(TreeNode n, Tree arbreMC) {
1045
 
1046
		observationModele.modifierMotCleDansArbre(n, arbreMC);
318 aurelien 1047
		getPanneauFiltres().getArbreMotsClesObservationVue().rafraichir(n, false);
156 aurelien 1048
 
1049
	}
1050
 
1051
	/**
1052
	 * Appelle le médiateur pour qu'il déplace un mot clé et son sous arbre dans
1053
	 * l'arbre des mots clés
1054
	 *
1055
	 * @param n
1056
	 *            le noeud à déplacer
1057
	 * @param arbreMC
1058
	 *            le nouvel arbre de mots clés à mettre à jour
1059
	 */
1060
	public void deplacerMotCleDansArbre(TreeNode n, Tree arbreMC) {
1061
 
1062
		observationModele.deplacerMotCleDansArbre(n, arbreMC);
1063
	}
1064
 
1065
 
1066
	public void rafraichirArbreMotsCles(Tree arbreMotsCles) {
115 aurelien 1067
 
318 aurelien 1068
		getPanneauFiltres().getArbreMotsClesObservationVue().rafraichir(arbreMotsCles, false);
115 aurelien 1069
 
1070
	}
342 aurelien 1071
 
1072
	public boolean observationAvoirMotCle(String idMotCle, String idObs) {
1073
		Observation obs = obtenirCacheObservation().get(idObs);
1074
		if(obs == null) {
1075
			return false;
1076
		}
1077
 
1078
		if(obs.getMotsCles().contains(idMotCle)) {
1079
			return true;
1080
		}
1081
 
1082
		return false;
1083
	}
115 aurelien 1084
 
1085
 
156 aurelien 1086
	public void obtenirArbreMotsCles(Rafraichissable r) {
115 aurelien 1087
 
156 aurelien 1088
		observationModele.obtenirArbreMotsCles(r);
1089
	}
12 david 1090
 
677 aurelien 1091
	public String[] obtenirTexteMotsCles(String[] idsMotsCles) {
1092
 
1093
		String[] tableauMotsClesTexte = new String[idsMotsCles.length];
1094
 
1095
		for(int i=0; i< idsMotsCles.length; i++) {
1096
			tableauMotsClesTexte[i] = observationModele.obtenirTexteMotCle(idsMotsCles[i]);
1097
		}
1098
 
1099
		return tableauMotsClesTexte;
1100
	}
1101
 
156 aurelien 1102
	public ListeObservation obtenirCacheObservation() {
1103
		return observationModele.getCacheObservation();
1104
	}
1105
 
1106
	public void donneesExterieures(Object nouvelleDonnees) {
1107
		if(nouvelleDonnees instanceof Tree) {
1108
 
1109
			Tree arbreMotsCles = (Tree)nouvelleDonnees ;
1110
			observationModele.rafraichirArbreMotsCles(nouvelleDonnees);
1111
			rafraichirArbreMotsCles(arbreMotsCles);
1112
		}
1113
	}
1114
 
1115
	public void transmettreDonnees(Object o) {
1116
		carnetEnLigneMediateur.donneesObsVersImages(o);
1117
	}
217 aurelien 1118
 
1119
	public void onModeModification() {
1120
 
1121
		String[] ids = listeObservation.getIdSelectionnees();
359 aurelien 1122
		Observation obs = listeObservation.getCacheListeObservation().get(ids[ids.length - 1]);
1123
 
217 aurelien 1124
		if(ids.length > 1) {
1125
			formulaireSaisieObservationVue.setMasseModification(true);
1126
			ListeObservation listeObs = new ListeObservation();
1127
			for(int i=0; i < ids.length;i++) {
1128
				Observation obsAjout = observationModele.getCacheObservation().get(ids[i]);
1129
				listeObs.ajouterObservation(obsAjout);
1130
			}
1131
			formulaireSaisieObservationVue.rafraichir(listeObs, false);
1132
		} else {
1133
			formulaireSaisieObservationVue.setMasseModification(false);
1134
			// affichage des détails dans le formulaire d'observation
1135
			formulaireSaisieObservationVue.rafraichir(obs, false) ;
1136
		}
251 aurelien 1137
 
677 aurelien 1138
		formulaireSaisieObservationVue.setTitle("Modification");
217 aurelien 1139
	}
251 aurelien 1140
 
1141
	public void onModeCreation() {
359 aurelien 1142
 
677 aurelien 1143
		formulaireSaisieObservationVue.setTitle("Création");
359 aurelien 1144
		String[] ids = listeObservation.getIdSelectionnees();
1145
 
1146
		if(ids.length > 1) {
1147
			Observation obs = listeObservation.getCacheListeObservation().get(ids[ids.length - 1]);
1148
			// affichage des détails dans le formulaire d'observation
1149
			formulaireSaisieObservationVue.rafraichir(obs, false) ;
1150
		}
251 aurelien 1151
	}
1152
 
1153
	public void obtenirInformationCoord(Rafraichissable r, LatLng coord) {
1154
		observationModele.obtenirInformationCoord(r,coord);
1155
	}
1156
 
1157
	public void obtenirInformationCommune(Rafraichissable r, String nomCommune, String codePostal) {
1158
		observationModele.obtenirInformationCommune(r,nomCommune, codePostal);
1159
	}
1160
 
1161
	public void obtenirInformationCoord(LatLng coord) {
1162
		observationModele.obtenirInformationCoord(cartoObservationVue,coord);
1163
	}
1164
 
1165
	public void obtenirInformationCommune(String nomCommune,
1166
			String codePostal) {
658 aurelien 1167
		observationModele.obtenirInformationCommune(cartoObservationVue,nomCommune, codePostal);
251 aurelien 1168
	}
1169
 
1170
	public void rafraichirSaisieCommuneObservation(EntiteGeographiqueObservation infosCommune) {
1171
		formulaireSaisieObservationVue.rafraichir(infosCommune, false);
677 aurelien 1172
		cacherFenetreCarto();
251 aurelien 1173
	}
261 aurelien 1174
 
1175
	private void razFiltres() {
1176
 
1177
		filtres.getArbreDateObservationFiltreVue().raz() ;
1178
		filtres.getArbreEntiteGeographiqueObservationFiltreVue().raz() ;
318 aurelien 1179
		filtres.getArbreMotsClesObservationVue().raz();
261 aurelien 1180
		filtres.getRechercheLibreVue().raz();
1181
	}
677 aurelien 1182
 
318 aurelien 1183
 
677 aurelien 1184
	public void viderFiltre(String nom) {
1185
		filtres.viderFiltres(nom);
1186
		obtenirNombreObservation();
1187
	}
1188
 
318 aurelien 1189
	public Component getListeObservation() {
1190
 
1191
		return listeObservation;
1192
	}
1193
 
1324 aurelien 1194
	public void redimensionnerPanneaux(int adjHeight, int adjWidth) {
342 aurelien 1195
		formulaireSaisieObservationVue.setHeight(300);
1324 aurelien 1196
		listeObservation.setHeight(adjHeight/2);
318 aurelien 1197
		centre.doLayout();
1198
	}
1199
 
437 aurelien 1200
	public void afficherFormulaireImportObservation() {
482 david 1201
		if (formImportObs==null) { // lazy inst.
1202
			formImportObs = new FormulaireImportObservationVue(this);
1203
		}
1204
		formImportObs.afficher();
1205
 
1206
 
437 aurelien 1207
	}
1208
 
658 aurelien 1209
	public void setImporterObservationsAnonymes(boolean importerObservations) {
1210
		this.importerObservations = importerObservations;
1211
	}
1212
 
1213
 
1214
	private void localiserSurCommuneSelectionnee() {
1215
 
1216
		cartoObservationVue.masquerChargement(true);
1217
 
1218
		double[] coordsTab = formulaireSaisieObservationVue.coordonneesValides();
1219
 
1220
		if(formulaireSaisieObservationVue.coordonneesValides() != null && !formulaireSaisieObservationVue.getCommune().equals("")) {
1221
 
1222
			String nomCommune = formulaireSaisieObservationVue.getCommuneSansDepartement();
1223
			String dptCommune = formulaireSaisieObservationVue.getDepartement();
1224
			EntiteGeographiqueObservation egeo = new EntiteGeographiqueObservation(dptCommune, nomCommune, "","");
1225
			egeo.setLat(coordsTab[0]+"");
1226
			egeo.setLon(coordsTab[1]+"");
1227
 
1228
			cartoObservationVue.rafraichir(egeo, false);
1229
 
1230
		} else {
1231
			if(formulaireSaisieObservationVue.coordonneesValides() != null) {
1232
				LatLng coords = LatLng.newInstance(coordsTab[0],coordsTab[1]);
1233
				obtenirInformationCoord(coords);
1234
			} else if (formulaireSaisieObservationVue.communeInitialisee()) {
1235
				String nomCommune = formulaireSaisieObservationVue.getCommune();
1236
				String dptCommune = formulaireSaisieObservationVue.getDepartement();
1237
				obtenirInformationCommune(nomCommune, dptCommune);
1238
			} else {
1239
				obtenirInformationCoord(cartoObservationVue.getCentreFrance());
1240
			}
1241
		}
1242
	}
1243
 
677 aurelien 1244
	public void afficherFenetreCarto() {
1245
		int hauteur = (int)Math.round(Window.getClientHeight()*0.75);
1246
		int largeur = (int)Math.round(Window.getClientWidth()*0.75);
1247
		fenetreCarto.setSize(largeur, hauteur);
1248
		if(!fenetreCarto.isVisible()) {
1249
			fenetreCarto.show();
1250
		}
1251
		cartoObservationVue.setTailleCarte(hauteur - 20, largeur - 20);
1252
		cartoObservationVue.recentrerCarte();
658 aurelien 1253
	}
677 aurelien 1254
 
1255
 
1256
 
1257
	private void cacherFenetreCarto() {
1258
		if(fenetreCarto.isVisible()) {
1259
			fenetreCarto.hide();
1260
		}
1261
	}
2 aperonnet 1262
}