Subversion Repositories eFlore/Applications.cel

Rev

Rev 283 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

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