Subversion Repositories eFlore/Applications.cel

Rev

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