Subversion Repositories eFlore/Applications.cel

Rev

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