Subversion Repositories eFlore/Applications.cel

Rev

Details | Last modification | View Log | RSS feed

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