Subversion Repositories eFlore/Applications.cel

Rev

Rev 290 | Details | Compare with Previous | Last modification | View Log | RSS feed

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