Subversion Repositories eFlore/Applications.cel

Rev

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

Rev Author Line No. Line
195 david 1
package org.tela_botanica.client.vues.observation;
12 david 2
 
201 david 3
// TODO Detecter redim et supprimer ajuster
12 david 4
 
221 aurelien 5
import java.util.Date;
13 david 6
import java.util.Iterator;
7
 
318 aurelien 8
import org.tela_botanica.client.CarnetEnLigneMediateur;
13 david 9
import org.tela_botanica.client.interfaces.Rafraichissable;
989 aurelien 10
import org.tela_botanica.client.modeles.objets.Configuration;
11
import org.tela_botanica.client.modeles.objets.EntiteGeographiqueObservation;
12
import org.tela_botanica.client.modeles.objets.ListeObservation;
13
import org.tela_botanica.client.modeles.objets.ListeReferentielCommune;
14
import org.tela_botanica.client.modeles.objets.ListeReferentielNom;
15
import org.tela_botanica.client.modeles.objets.Observation;
1489 aurelien 16
import org.tela_botanica.client.modeles.objets.Ontologies;
989 aurelien 17
import org.tela_botanica.client.modeles.objets.ReferentielCommune;
18
import org.tela_botanica.client.modeles.objets.ReferentielNom;
19
import org.tela_botanica.client.modeles.objets.ListeReferentielPerso.TypesReferentiels;
12 david 20
import org.tela_botanica.client.observation.ObservationMediateur;
728 aurelien 21
import org.tela_botanica.client.util.AutoCompletionRefComboBox;
708 aurelien 22
import org.tela_botanica.client.util.Util;
132 aurelien 23
 
248 aurelien 24
import com.google.gwt.maps.client.geom.LatLng;
268 aurelien 25
import com.google.gwt.user.client.Timer;
216 aurelien 26
import com.google.gwt.user.client.Window;
248 aurelien 27
import com.google.gwt.user.client.ui.HTML;
13 david 28
import com.gwtext.client.core.EventCallback;
29
import com.gwtext.client.core.EventObject;
218 david 30
import com.gwtext.client.core.Ext;
248 aurelien 31
import com.gwtext.client.core.ExtElement;
13 david 32
import com.gwtext.client.core.ListenerConfig;
12 david 33
import com.gwtext.client.core.Position;
13 david 34
import com.gwtext.client.data.ArrayReader;
35
import com.gwtext.client.data.FieldDef;
36
import com.gwtext.client.data.MemoryProxy;
37
import com.gwtext.client.data.RecordDef;
71 jpm 38
import com.gwtext.client.data.SimpleStore;
13 david 39
import com.gwtext.client.data.Store;
40
import com.gwtext.client.data.StringFieldDef;
132 aurelien 41
import com.gwtext.client.widgets.BoxComponent;
12 david 42
import com.gwtext.client.widgets.Button;
132 aurelien 43
import com.gwtext.client.widgets.Container;
221 aurelien 44
import com.gwtext.client.widgets.DatePicker;
12 david 45
import com.gwtext.client.widgets.Panel;
248 aurelien 46
import com.gwtext.client.widgets.ToolTip;
71 jpm 47
import com.gwtext.client.widgets.Toolbar;
20 david 48
import com.gwtext.client.widgets.event.ButtonListenerAdapter;
132 aurelien 49
import com.gwtext.client.widgets.event.ContainerListenerAdapter;
221 aurelien 50
import com.gwtext.client.widgets.event.DatePickerListenerAdapter;
201 david 51
import com.gwtext.client.widgets.event.PanelListenerAdapter;
13 david 52
import com.gwtext.client.widgets.form.ComboBox;
12 david 53
import com.gwtext.client.widgets.form.DateField;
216 aurelien 54
import com.gwtext.client.widgets.form.Field;
12 david 55
import com.gwtext.client.widgets.form.FormPanel;
268 aurelien 56
import com.gwtext.client.widgets.form.Label;
248 aurelien 57
import com.gwtext.client.widgets.form.MultiFieldPanel;
128 aurelien 58
import com.gwtext.client.widgets.form.TextArea;
12 david 59
import com.gwtext.client.widgets.form.TextField;
13 david 60
import com.gwtext.client.widgets.form.event.ComboBoxListenerAdapter;
248 aurelien 61
import com.gwtext.client.widgets.form.event.TextFieldListenerAdapter;
201 david 62
import com.gwtext.client.widgets.layout.AnchorLayoutData;
12 david 63
import com.gwtext.client.widgets.layout.ColumnLayout;
64
import com.gwtext.client.widgets.layout.ColumnLayoutData;
65
import com.gwtext.client.widgets.layout.FormLayout;
230 david 66
import com.gwtext.client.widgets.layout.RowLayout;
13 david 67
import com.gwtext.client.data.Record;
12 david 68
 
69
/**
70
 * Panneau contenant les infos, les métadonnées et l'arbre des mots clés, il implémente l'interface rafraichissable
71
 * @author aurelien
72
 *
73
 */
13 david 74
public class FormulaireSaisieObservationVue extends Panel implements Rafraichissable  {
12 david 75
 
76
 
77
	/**
78
	 * Le médiateur associé à la vue
79
	 */
80
	private ObservationMediateur	observationMediateur		= null;
81
 
205 aurelien 82
	FormPanel panneauFormulaire = null;
20 david 83
 
13 david 84
	private DateField date = null;
708 aurelien 85
	private ComboBox lieudit = null;
86
	private ComboBox station = null;
87
	private ComboBox milieu = null;
12 david 88
	private TextField comment = null;
13 david 89
	private ComboBox  commune = null;
39 david 90
	private String departement = null;
20 david 91
	private ComboBox  espece = null;
39 david 92
	private String numeroNom = null;
74 david 93
	private String numeroOrdre = null;
962 aurelien 94
	private String codeInseeCommune = null;
95
 
264 aurelien 96
	private String referentielGeo = null;
20 david 97
 
118 david 98
	// Pour remise a zero partielle lors d'une validation
99
 
100
	private  enum Champs {
1488 aurelien 101
	    DATE, LIEUDIT, STATION, MILIEU, COMMENT, COMMUNE, ESPECE, TOUT, LATITUDE, LONGITUDE, ABONDANCE, CERTITUDE;
216 aurelien 102
 
1292 aurelien 103
	    @Override
104
		public String toString() {
216 aurelien 105
 
106
	    	switch(this) {
107
	    	case DATE:
108
	    		return "date";
109
 
110
	    	case COMMUNE:
111
	    		return "commune";
112
 
113
    		case LIEUDIT:
114
    			return "lieu dit";
115
 
116
    		case STATION:
117
    			return "station";
118
 
119
    		case MILIEU:
120
    			return "milieu";
121
 
122
    		case COMMENT:
123
    			return "commentaire";
124
 
125
	    	case ESPECE:
126
	    		return "espèce";
264 aurelien 127
 
128
	    	case LATITUDE:
129
	    		return "latitude";
130
 
131
	    	case LONGITUDE:
132
	    		return "longitude";
1488 aurelien 133
 
134
	    	case ABONDANCE:
135
	    		return "abondance";
136
 
137
	    	case CERTITUDE:
1489 aurelien 138
	    		return "identification";
216 aurelien 139
 
140
	    	case TOUT:
1489 aurelien 141
	    		return "date, commune, lieu dit, station, milieu, espèce, commentaire, latitude, longitude, abondance, identification";
216 aurelien 142
	    	}
143
			return TOUT.toString();
144
	    }
118 david 145
	};
146
 
110 aurelien 147
	private String formatDate = null ;
71 jpm 148
	private Button boutonOK = new Button("Créer");
77 jpm 149
	private Button boutonAnnuler = new Button("Réinitialiser");
20 david 150
 
13 david 151
	private boolean selectionCommune=false;
20 david 152
	private boolean selectionEspece=false;
1488 aurelien 153
	private boolean selectionAbondance = false;
154
	private boolean selectionCertitude = false;
12 david 155
 
71 jpm 156
	private boolean modification = false ;
157
	private Toolbar bt = null ;
13 david 158
 
216 aurelien 159
	private final String VALEURS_MULTIPLES = "(Valeurs multiples)";
1489 aurelien 160
	private final String modeleMessageModif = "commune:lieu-dit:station:milieu:latitude:longitude:date:espece:commentaire:abondance:identification";
216 aurelien 161
	private boolean communeModifiee = false;
221 aurelien 162
	private boolean lieuDitModifie = false;
163
	private boolean stationModifiee = false;
216 aurelien 164
	private boolean milieuModifie = false;
165
	private boolean dateModifiee = false;
166
	private boolean especeModifiee = false;
167
	private boolean commModifie = false;
1488 aurelien 168
	private boolean abondanceModifiee = false;
169
	private boolean certitudeModifiee = false;
216 aurelien 170
 
20 david 171
	private final int KEY_ALT = 18;
172
	private final int KEY_BACKSPACE = 8;
173
	private final int KEY_CTRL = 17;
174
	private final int KEY_DELETE = 46;
175
	private final int KEY_DOWN = 40;
176
	private final int KEY_END = 35;
177
	private final int KEY_ENTER = 13;
178
	private final int KEY_ESCAPE = 27;
179
	private final int KEY_HOME = 36;
180
	private final int KEY_LEFT = 37;
181
	private final int KEY_PAGEDOWN = 34;
182
	private final int KEY_PAGEUP = 33;
183
	private final int KEY_RIGHT = 39;
184
	private final int KEY_SHIFT = 16;
185
	private final int KEY_TAB = 9;
186
	private final int KEY_UP = 38;
13 david 187
 
128 aurelien 188
 
71 jpm 189
	/**
190
	 * Combobox permettant de selectionner le mode
191
	 * modification ou bien création
192
	 */
193
	private ComboBox selecteurMode = new ComboBox();
13 david 194
 
71 jpm 195
	Store storeMode = null ;
13 david 196
 
12 david 197
	/**
198
	 * Booleen d'instanciation
199
	 */
200
	boolean estInstancie = false ;
205 aurelien 201
 
202
	private Panel panneauIntermediaire;
203
 
204
	private Panel panneauPremierColonne;
205
 
206
	private Panel panneauSecondeColonne;
216 aurelien 207
 
208
	private boolean masseModification =false ;
248 aurelien 209
 
210
	private TextField longitude;
211
 
212
	private TextField latitude;
681 aurelien 213
 
214
	private MultiFieldPanel htmlCommunePanel = null;
248 aurelien 215
 
216
	private MultiFieldPanel coordPanel;
217
 
218
	private TextField coordonnees;
268 aurelien 219
 
220
	private Label lienSelectionCommune = null;
248 aurelien 221
 
681 aurelien 222
	private HTML afficherFormulaireLatLon;
248 aurelien 223
 
224
	private HTML basculerverscarto;
12 david 225
 
248 aurelien 226
	private boolean longlatAjoutee;
264 aurelien 227
 
228
	private boolean latModifiee;
229
 
230
	private boolean longModifiee;
268 aurelien 231
 
232
	protected boolean rechercheCommuneEnCours = false;
233
 
234
	private Timer tCoord;
248 aurelien 235
 
1488 aurelien 236
	final String resultTplRefPerso = "<div class=\"search-item-commune\">{element_referentiel}</div>";
708 aurelien 237
 
1488 aurelien 238
	private ComboBox selecteurAbondance = null;
239
 
240
	private ComboBox selecteurCertitude = null;
241
 
12 david 242
	/**
243
	 * Constructeur sans argument (privé car ne doit pas être utilisé)
244
	 */
71 jpm 245
	@SuppressWarnings("unused")
12 david 246
	private FormulaireSaisieObservationVue()
247
	{
248
		super() ;
249
	}
250
 
251
	/**
252
	 * Constructeur avec argument
253
	 * @param im
254
	 */
255
	public FormulaireSaisieObservationVue(ObservationMediateur obs)
256
	{
246 aurelien 257
 
258
		super("Saisie");
12 david 259
		// on associe le médiateur
260
		observationMediateur = obs ;
261
 
201 david 262
 
205 aurelien 263
		panneauFormulaire = new FormPanel(Position.RIGHT);
12 david 264
		panneauFormulaire.setBorder(false);
265
 
266
		// Panneau intermediaire qui contient deux colonnes de formulaire
205 aurelien 267
		panneauIntermediaire = new Panel();
230 david 268
 
269
		if (Window.getClientWidth()> Window.getClientHeight()) {
270
			panneauIntermediaire.setLayout(new ColumnLayout());
271
		}
272
		else {
273
			panneauIntermediaire.setLayout(new RowLayout());
274
		}
275
 
12 david 276
		panneauIntermediaire.setBorder(false);
218 david 277
 
282 aurelien 278
		//création du panneau formulaire de gauche auquels on ajoute les champs
205 aurelien 279
		panneauPremierColonne = new Panel();
12 david 280
		panneauPremierColonne.setLayout(new FormLayout());
281
		panneauPremierColonne.setBorder(false);
282
 
282 aurelien 283
		//création du panneau formulaire de droite
205 aurelien 284
	    panneauSecondeColonne = new Panel();
12 david 285
		panneauSecondeColonne.setLayout(new FormLayout());
286
		panneauSecondeColonne.setBorder(false);
276 aurelien 287
 
42 jpm 288
		this.setPaddings(5) ;
12 david 289
 
195 david 290
		// Accesskey pour debugging
201 david 291
		commune=new ComboBox("Commune","commune\" accesskey=\"1");
195 david 292
 
20 david 293
		final String resultTplCommune = "<div class=\"search-item-commune\">{commune}</div>";
294
		commune.setTpl(resultTplCommune);
13 david 295
		commune.setMode(ComboBox.REMOTE);
20 david 296
		commune.setItemSelector("div.search-item-commune");
13 david 297
		commune.setTypeAhead(true);
298
		commune.setLoadingText("Recherche...");
299
		commune.setHideTrigger(true);
300
 
268 aurelien 301
		  //création du lien "Accès carto" dans le formulaire
681 aurelien 302
		basculerverscarto = new HTML(" <a id=\"lien_carto\" href=\"#\" tabindex=\"2\">Localiser la commune</a>");
268 aurelien 303
		basculerverscarto.addStyleName("lien_actif");
304
 
305
		//création info bulle sur le lien "accès carto"
306
		ToolTip tip2 = new ToolTip();
432 aurelien 307
		tip2.setHtml("Via une carte, obtenez les coordonnées (latitude/longitude) de votre observation ");
268 aurelien 308
		tip2.applyTo(basculerverscarto.getElement());
309
 
310
		//Sur une meme ligne, ajout de plusieurs champs
681 aurelien 311
		htmlCommunePanel = new MultiFieldPanel();
276 aurelien 312
 
708 aurelien 313
		int largeurCommune = Window.getClientWidth()/4;
314
		htmlCommunePanel.addToRow(commune, largeurCommune);
681 aurelien 315
		htmlCommunePanel.addToRow(basculerverscarto, 160);
276 aurelien 316
 
268 aurelien 317
		htmlCommunePanel.setBorder(false);
318
		htmlCommunePanel.setId("x-commune-panel");
13 david 319
 
268 aurelien 320
		panneauPremierColonne.add(htmlCommunePanel);
321
 
728 aurelien 322
	    station = new AutoCompletionRefComboBox("Station", "station", observationMediateur, TypesReferentiels.REFERENTIEL_STATION) {
268 aurelien 323
 
1292 aurelien 324
			@Override
728 aurelien 325
			public void onModificationValeur() {
326
				stationModifiee = true;
327
			}
328
 
1292 aurelien 329
			@Override
728 aurelien 330
			public void onValidationSaisie() {
331
				validerSaisie(Champs.STATION);
332
			}
333
	    };
201 david 334
	    panneauPremierColonne.add(station, new AnchorLayoutData("95%"));
12 david 335
 
781 aurelien 336
		latitude = new TextField("Lat", "lat");
282 aurelien 337
		latitude.setGrowMax(70);
264 aurelien 338
		latitude.setAllowBlank(true);
339
 
781 aurelien 340
	    longitude = new TextField("Lon", "lon");
282 aurelien 341
	    longitude.setGrowMax(70);
248 aurelien 342
		longitude.setAllowBlank(true);
276 aurelien 343
 
344
		lienSelectionCommune = new Label("");
268 aurelien 345
 
276 aurelien 346
 
268 aurelien 347
		lienSelectionCommune.setId("conteneur_selection_commune");
348
		lienSelectionCommune.setStyleName("conteneur_selection_commune");
276 aurelien 349
		lienSelectionCommune.addStyleName("lien_actif");
264 aurelien 350
 
783 aurelien 351
		// Panneau de type plusieurs champs de formulaire sur une meme ligne, où seront renseignés Lat/Lon
248 aurelien 352
		coordPanel = new MultiFieldPanel();
282 aurelien 353
		coordPanel.setPaddings(0, 0, 0, 10);
248 aurelien 354
		coordPanel.setVisible(false);
276 aurelien 355
 
356
		final double largeur ;
282 aurelien 357
		largeur = 120;
276 aurelien 358
 
359
		coordPanel.addToRow(latitude, new ColumnLayoutData(largeur));
360
		coordPanel.addToRow(longitude, new ColumnLayoutData(largeur));
282 aurelien 361
		coordPanel.addToRow(lienSelectionCommune, new ColumnLayoutData(largeur));
362
		lienSelectionCommune.addClass("lien_decale");
248 aurelien 363
		coordPanel.setBorder(false);
364
 
264 aurelien 365
		  //création du champs coordonnées
366
		referentielGeo = Configuration.getReferentielGeo();
248 aurelien 367
 
268 aurelien 368
		coordonnees = new TextField("Coordonnées", "", 0);
248 aurelien 369
		coordonnees.setMaxLength(0);
370
		coordonnees.setReadOnly(true);
371
		coordonnees.setCls("fieldname");
372
 
276 aurelien 373
		//création du lien "saisie X/Y" dans le formulaire
681 aurelien 374
		afficherFormulaireLatLon = new HTML("<span style=\"padding-left:30px;\" class=\"conteneur_lien_afficher_lat_lon\">" +
375
				"<a title=\"Lat / Lon sont les latitudes / longitudes, à remplir en degrés décimaux\" class=\"lien_actif\" id=\"lien_coord\" href=\"#\" tabindex=\"6\">Saisie Lat/Lon ("+referentielGeo+")</a>" +
376
				"<span><span style=\"padding-left:20px\" class=\"conteneur_lien_localiser_lat_lon\">"+
377
				"<a title=\"Cliquez pour obtenir les coordonnées de votre observation à partir de la carte\" class=\"lien_actif\" id=\"lien_carto_coord\" href=\"#\" tabindex=\"7\">Localiser sur la carte</a>"+
378
				"</span>");
379
 
1332 aurelien 380
			//ajout d'un listener sur le lien "saisie X/Y"
248 aurelien 381
			coordPanel.addListener(new PanelListenerAdapter() {
382
 
1292 aurelien 383
				@Override
248 aurelien 384
				public void onAfterLayout(Container c) {
681 aurelien 385
 
248 aurelien 386
					ExtElement lienCoord = Ext.get("lien_coord");
387
					lienCoord.removeAllListeners();
388
					lienCoord.addListener("click", new EventCallback() {
1292 aurelien 389
						@Override
248 aurelien 390
						public void execute(EventObject e) {
276 aurelien 391
 
248 aurelien 392
							coordPanel.setVisible(!coordPanel.isVisible());
276 aurelien 393
 
394
							if(Ext.isIE()) {
395
								latitude.focus();
396
							}
282 aurelien 397
 
318 aurelien 398
							CarnetEnLigneMediateur.fireResize();
248 aurelien 399
						}
400
					}) ;
681 aurelien 401
 
402
					ExtElement lienCartoCoord = Ext.get("lien_carto_coord");
403
					lienCartoCoord.removeAllListeners();
404
					lienCartoCoord.addListener("click", new EventCallback() {
1292 aurelien 405
						@Override
681 aurelien 406
						public void execute(EventObject e) {
407
							obtenirInformationCoord();
408
						}
409
					}) ;
248 aurelien 410
 
411
					ExtElement lienCarto = Ext.get("lien_carto");
412
					lienCarto.removeAllListeners();
413
					lienCarto.addListener("click", new EventCallback() {
414
 
1292 aurelien 415
						@Override
248 aurelien 416
						public void execute(EventObject e) {
417
 
656 aurelien 418
							if(commune.getValue() != null && !commune.getValue().equals("") && !getDepartement().equals("")) {
419
								obtenirInformationCommune();
420
								longlatAjoutee = true;
421
 
248 aurelien 422
							} else {
656 aurelien 423
								Window.alert("Veuillez renseigner une commune et un numéro de département sous la forme : Commune (departement)");
248 aurelien 424
							}
425
						}
426
					});
282 aurelien 427
 
428
					if(!Ext.isIE() && Window.getClientWidth() < 1200) {
429
 
297 aurelien 430
						int largeurN = (int)largeur;
282 aurelien 431
 
297 aurelien 432
						latitude.setWidth(largeurN+"px");
433
						longitude.setWidth(largeurN+"px");
681 aurelien 434
						lienSelectionCommune.setWidth(largeurN+"px");
282 aurelien 435
					}
248 aurelien 436
				}
437
			});
268 aurelien 438
 
276 aurelien 439
		//Sur une meme ligne, ajout de plusieurs champs
440
		final MultiFieldPanel htmlPanel = new MultiFieldPanel();
441
 
442
		htmlPanel.addToRow(coordonnees, 100);
681 aurelien 443
		htmlPanel.addToRow(afficherFormulaireLatLon, new ColumnLayoutData(0.9));
276 aurelien 444
		htmlPanel.setBorder(false);
445
		htmlPanel.setId("x-coord-panel");
248 aurelien 446
 
447
		panneauPremierColonne.add(htmlPanel);
448
		panneauPremierColonne.add(coordPanel);
449
 
681 aurelien 450
	    date = new DateField("Date", "date", 200);
12 david 451
	    date.setAllowBlank(true);
110 aurelien 452
	    formatDate = "d/m/Y";
453
	    date.setFormat(formatDate) ;
681 aurelien 454
	    date.setTitle("Date de l'observation au format jj/mm/aaaa");
248 aurelien 455
	    //date.setTabIndex(5);
681 aurelien 456
	    panneauPremierColonne.add(date, new AnchorLayoutData("55%"));
282 aurelien 457
 
201 david 458
		espece=new ComboBox("Espèce","nom");
282 aurelien 459
 
389 david 460
		final String resultTplEspece = "<div class=\"search-item-espece {indicateurNomRetenu}\">{nom}</div>";
20 david 461
 
462
 
463
		espece.setTpl(resultTplEspece);
464
		espece.setMode(ComboBox.REMOTE);
389 david 465
		// espece.setPageSize(10); // Ne fonctionne pas
20 david 466
		espece.setItemSelector("div.search-item-espece");
467
		espece.setTypeAhead(true);
468
		espece.setLoadingText("Recherche...");
469
 
470
		espece.setHideTrigger(true);
248 aurelien 471
		//espece.setTabIndex(6);
20 david 472
 
1489 aurelien 473
	    Panel panelSeparationPp = new Panel();
474
	    panelSeparationPp.setHeight(15);
475
	    panelSeparationPp.setBorder(false);
476
 
477
	    panneauPremierColonne.add(panelSeparationPp);
478
 
201 david 479
	    panneauPremierColonne.add(espece, new AnchorLayoutData("95%"));
20 david 480
 
1488 aurelien 481
	    selecteurAbondance = new ComboBox();
1489 aurelien 482
	    selecteurAbondance.setCls("champ-separation");
1488 aurelien 483
	    selecteurAbondance.setLabel("Abondance");
1489 aurelien 484
	    selecteurAbondance.setStore(Ontologies.getValeursAbondance());
1488 aurelien 485
	    selecteurAbondance.setDisplayField("label") ;
486
	    selecteurAbondance.setValueField("valeur");
487
	    selecteurAbondance.setEditable(true);
488
	    selecteurAbondance.setHideTrigger(false);
489
	    selecteurAbondance.setForceSelection(false);
490
	    panneauPremierColonne.add(selecteurAbondance, new AnchorLayoutData("50%"));
1489 aurelien 491
 
728 aurelien 492
	    lieudit = new AutoCompletionRefComboBox("Lieu-dit", "lieudit",observationMediateur,TypesReferentiels.REFERENTIEL_LIEU_DIT) {
493
 
1292 aurelien 494
			@Override
728 aurelien 495
			public void onModificationValeur() {
496
				lieuDitModifie = true;
497
			}
498
 
1292 aurelien 499
			@Override
728 aurelien 500
			public void onValidationSaisie() {
501
				validerSaisie(Champs.LIEUDIT);
502
			}
503
	    };
201 david 504
	    panneauSecondeColonne.add(lieudit,  new AnchorLayoutData("95%"));
728 aurelien 505
 
506
	    milieu = new AutoCompletionRefComboBox("Milieu","milieu",observationMediateur,TypesReferentiels.REFERENTIEL_MILIEU) {
507
 
1292 aurelien 508
			@Override
728 aurelien 509
			public void onModificationValeur() {
510
				milieuModifie = true;
511
			}
512
 
1292 aurelien 513
			@Override
728 aurelien 514
			public void onValidationSaisie() {
515
				validerSaisie(Champs.MILIEU);
516
			}
517
 
518
	    };
201 david 519
	    panneauSecondeColonne.add(milieu,  new AnchorLayoutData("95%"));
128 aurelien 520
 
521
	    comment = new TextArea("Notes", "comment");
522
	    comment.setAllowBlank(true);
523
	    comment.setHeight(50);
391 aurelien 524
 
248 aurelien 525
	    //comment.setTabIndex(7);
201 david 526
	    panneauSecondeColonne.add(comment, new AnchorLayoutData("95%") );
230 david 527
 
1489 aurelien 528
	    Panel panelSeparationPs = new Panel();
529
	    panelSeparationPs.setHeight(15);
530
	    panelSeparationPs.setBorder(false);
531
 
532
	    panneauSecondeColonne.add(panelSeparationPs);
533
 
534
	    selecteurCertitude = new ComboBox();
535
	    selecteurCertitude.setLabel("Identification");
536
	    selecteurCertitude.setStore(Ontologies.getValeursCertitude());
537
	    selecteurCertitude.setDisplayField("label") ;
538
	    selecteurCertitude.setValueField("valeur");
539
	    selecteurCertitude.setEditable(true);
540
	    selecteurCertitude.setHideTrigger(false);
541
	    selecteurCertitude.setForceSelection(false);
542
	    panneauSecondeColonne.add(selecteurCertitude, new AnchorLayoutData("50%"));
543
 
276 aurelien 544
	    if (Window.getClientWidth() > Window.getClientHeight() || Window.getClientWidth() < 800) {
230 david 545
			panneauIntermediaire.add(panneauPremierColonne, new ColumnLayoutData(.5));
546
			panneauIntermediaire.add(panneauSecondeColonne, new ColumnLayoutData(.5));
547
	    }
548
	    else {
549
			panneauIntermediaire.add(panneauPremierColonne);
550
			panneauIntermediaire.add(panneauSecondeColonne);
551
 
552
	    }
553
 
12 david 554
		panneauFormulaire.add(panneauIntermediaire);
555
 
71 jpm 556
		Object[][] mode = {{"création",false} , {"modification", true} };
557
		storeMode = new SimpleStore(new String[] { "nom_mode", "mode" },
558
				mode);
559
		storeMode.load();
560
		selecteurMode.setStore(storeMode);
561
		selecteurMode.setDisplayField("nom_mode") ;
562
		selecteurMode.setLabel("mode ") ;
563
		selecteurMode.setForceSelection(true) ;
564
		selecteurMode.setValue("création") ;
565
		selecteurMode.setEditable(false) ;
97 jpm 566
		selecteurMode.setCls("x-selec-crea") ;
71 jpm 567
 
568
		bt = new Toolbar() ;
569
		bt.addSpacer() ;
570
		bt.addText("Mode de saisie ") ;
571
		bt.addField(selecteurMode) ;
572
 
74 david 573
 
276 aurelien 574
		if (Ext.isIE()) {
218 david 575
			panneauPremierColonne.setButtonAlign(Position.RIGHT);
576
			panneauPremierColonne.addButton(boutonOK);
577
			panneauSecondeColonne.setButtonAlign(Position.LEFT);
276 aurelien 578
			panneauPremierColonne.addButton(boutonAnnuler);
218 david 579
		}
580
		else {
581
 
582
			panneauFormulaire.addButton(boutonOK);
583
			panneauFormulaire.addButton(boutonAnnuler);
584
		}
585
 
586
 
71 jpm 587
		selecteurMode.addListener(new ComboBoxListenerAdapter() {
588
 
1292 aurelien 589
			@Override
71 jpm 590
			public void onSelect(ComboBox comboBox, Record record, int index) {
591
 
592
				// et on met la valeur à jour dans la combobox
593
				comboBox.setValue(record.getAsString("nom_mode"));
594
				setModification(record.getAsString("mode")) ;
595
			}
596
 
597
		});
12 david 598
 
599
		this.add(panneauFormulaire) ;
80 jpm 600
		this.setTopToolbar(bt) ;
12 david 601
 
120 aurelien 602
		this.setAutoScroll(true);
12 david 603
 
201 david 604
 
605
		panneauFormulaire.addListener(new PanelListenerAdapter() {
1292 aurelien 606
	        @Override
607
			public void onResize(BoxComponent component, int adjWidth, int adjHeight, int rawWidth, int rawHeight) {
201 david 608
	        	panneauIntermediaire.setWidth(rawWidth);
609
	        	panneauIntermediaire.setHeight(rawHeight);
276 aurelien 610
 
611
	        	panneauPremierColonne.doLayout();
612
	        	panneauSecondeColonne.doLayout();
681 aurelien 613
 
276 aurelien 614
	        	htmlCommunePanel.doLayout();
615
	        	htmlPanel.doLayout();
318 aurelien 616
 
617
	        	doLayout();
201 david 618
	     }});
619
 
12 david 620
		// on ajoute les listeners
621
		ajouterListeners() ;
248 aurelien 622
		saisieTabindex();
12 david 623
	}
1489 aurelien 624
 
12 david 625
	private void ajouterListeners()
94 jpm 626
	{
20 david 627
		// Listener completion communne
268 aurelien 628
		final Rafraichissable r = this;
20 david 629
 
630
		   commune.addListener(new ComboBoxListenerAdapter() {
1292 aurelien 631
	             @Override
632
				public void onSelect(ComboBox comboBox, Record record, int index) {
20 david 633
	                 commune.setValue(record.getAsString("commune"));
39 david 634
	                 departement=record.getAsString("departement");
1332 aurelien 635
	                 codeInseeCommune=record.getAsString("codeInsee");
20 david 636
	                 selectionCommune=true;
656 aurelien 637
	                 commune.collapse();
20 david 638
	             }
656 aurelien 639
 
1292 aurelien 640
	             @Override
641
				public void onExpand(ComboBox comboBox) {
656 aurelien 642
	            	 comboBox.focus();
643
	             }
20 david 644
	         });
645
 
646
 
647
			ListenerConfig listenerConfigCommune=new ListenerConfig();
656 aurelien 648
			listenerConfigCommune.setDelay(200);
20 david 649
			listenerConfigCommune.setStopPropagation(false);
650
			listenerConfigCommune.setStopEvent(false);
651
 
652
		    commune.addKeyPressListener(new EventCallback()	{
653
 
1292 aurelien 654
	    	    @Override
655
				public void execute(EventObject e) {
120 aurelien 656
 
657
 
658
	    	    		switch(e.getKey()) {
659
 
132 aurelien 660
    	    				case KEY_ALT:
661
	    	    	        case KEY_CTRL:
662
	    	    	        case KEY_DOWN:
663
	    	    	        case KEY_END:
664
	    	    	        case KEY_ESCAPE:
665
	    	    	        case KEY_HOME:
666
	    	    	        case KEY_LEFT:
667
	    	    	        case KEY_PAGEDOWN:
668
	    	    	        case KEY_PAGEUP:
669
	    	    	        case KEY_RIGHT:
670
	    	    	        case KEY_SHIFT:
671
	    	    	        case KEY_TAB:
672
	    	    	        case KEY_UP:
673
 
674
	    	    	        break;
675
 
120 aurelien 676
	    	    	    	case KEY_ENTER:
677
 
20 david 678
		    	    	    	 if (selectionCommune) {
216 aurelien 679
		    	    	    		 communeModifiee= true;
20 david 680
		    	    	    		 selectionCommune=false;
681
		    	    	    	 }
120 aurelien 682
		    	    	    	else {
683
 
118 david 684
		    	    	    		validerSaisie(Champs.COMMUNE);
20 david 685
		    	    	    		// lancer mise a jour
686
		    	    	    	 }
120 aurelien 687
		    	    	    break;
688
 
689
		    	    	    default:
83 david 690
		    	    	    	  departement="";
656 aurelien 691
		    	    	    	  commune.collapse();
20 david 692
		    	    	    	  obtenirListeReferentielCommune();
216 aurelien 693
		    	    	    	  communeModifiee= true;
20 david 694
 
120 aurelien 695
		    	    	    break;
696
	    	    	    }
697
	     			}
698
	    		},    listenerConfigCommune
20 david 699
			);
700
 
120 aurelien 701
		    date.addKeyPressListener(new EventCallback() {
20 david 702
 
1292 aurelien 703
				@Override
120 aurelien 704
				public void execute(EventObject e) {
705
					// TODO Auto-generated method stub
706
					switch(e.getKey()) {
221 aurelien 707
 
708
						case KEY_ALT:
709
		    	        case KEY_CTRL:
710
		    	        case KEY_DOWN:
711
		    	        case KEY_END:
712
		    	        case KEY_ESCAPE:
713
		    	        case KEY_HOME:
714
		    	        case KEY_LEFT:
715
		    	        case KEY_PAGEDOWN:
716
		    	        case KEY_PAGEUP:
717
		    	        case KEY_RIGHT:
718
		    	        case KEY_SHIFT:
719
		    	        case KEY_TAB:
720
		    	        	if(date.getRawValue().equals(VALEURS_MULTIPLES)) {
721
		    	        		date.clearInvalid();
722
		    	        	}
723
		    	        case KEY_UP:
724
 
725
		    	        break;
120 aurelien 726
 
221 aurelien 727
	  	    	      case KEY_ENTER:
728
	  	    	    		validerSaisie(Champs.DATE);
120 aurelien 729
	  	    	    	  break;
730
 
731
	  	    	      default:
221 aurelien 732
	  					dateModifiee = true;
120 aurelien 733
					}
734
				}
735
		    });
736
 
221 aurelien 737
		    date.addListener(new DatePickerListenerAdapter() {
738
 
1292 aurelien 739
				@Override
221 aurelien 740
				public void onSelect(DatePicker dataPicker, Date date) {
741
					dateModifiee = true;
742
				}
743
		    });
744
 
708 aurelien 745
		    ListenerConfig listenerConfigAutocompletion=new ListenerConfig();
746
		    listenerConfigAutocompletion.setDelay(200);
747
		    listenerConfigAutocompletion.setStopPropagation(false);
748
		    listenerConfigAutocompletion.setStopEvent(false);
120 aurelien 749
 
728 aurelien 750
 
120 aurelien 751
			// Listener completion espece
20 david 752
			espece.addListener(new ComboBoxListenerAdapter() {
1292 aurelien 753
	             @Override
754
				public void onSelect(ComboBox comboBox, Record record, int index) {
20 david 755
	            	 espece.setValue(record.getAsString("nom"));
39 david 756
	            	 numeroNom=record.getAsString("numeroNom");
20 david 757
	                 selectionEspece=true;
128 aurelien 758
	                 observationMediateur.obtenirImageInformationExternes(numeroNom);
20 david 759
	             }
760
	         });
761
 
762
 
763
			ListenerConfig listenerConfigEspece=new ListenerConfig();
764
			listenerConfigEspece.setDelay(10);
765
			listenerConfigEspece.setStopPropagation(false);
766
			listenerConfigEspece.setStopEvent(false);
767
 
768
 
769
			espece.addKeyPressListener(new EventCallback()	{
770
 
1292 aurelien 771
		    	    @Override
772
					public void execute(EventObject e) {
20 david 773
 
774
 
775
		    	    		  switch(e.getKey()) {
776
 
777
 
778
		    	    		  case KEY_ALT:
779
		    	    	      case KEY_CTRL:
780
		    	    	      case KEY_DOWN:
781
		    	    	      case KEY_END:
782
		    	    	      case KEY_ESCAPE:
783
		    	    	      case KEY_HOME:
784
		    	    	      case KEY_LEFT:
785
		    	    	      case KEY_PAGEDOWN:
786
		    	    	      case KEY_PAGEUP:
787
		    	    	      case KEY_RIGHT:
788
		    	    	      case KEY_SHIFT:
789
		    	    	      case KEY_TAB:
790
		    	    	      case KEY_UP:
791
 
792
		    	    	        break;
793
 
794
		    	    	      case KEY_ENTER:
795
 
140 aurelien 796
			    	    	    	if(selectionEspece) {
216 aurelien 797
			    	    	    		especeModifiee = true;
798
			    	    	    		selectionEspece=false;
140 aurelien 799
			    	    	    	}
800
			    	    	    	else {
801
			    	    	    		validerSaisie(Champs.ESPECE);
802
			    	    	    	}
20 david 803
 
804
		    	    	    	  break;
805
 
806
		    	    	      default:
807
 
83 david 808
		    	    	    	  numeroNom="";
20 david 809
		    	    	    	  obtenirListeReferentielNom();
216 aurelien 810
		    	    	    	  especeModifiee = true;
20 david 811
 
812
		    	    	        break;
813
		    	    	    }
814
 
815
 
816
 
817
		     		}
818
 
819
		    		},    listenerConfigEspece
820
 
821
			);
708 aurelien 822
 
216 aurelien 823
			comment.addKeyPressListener(new EventCallback() {
120 aurelien 824
 
1292 aurelien 825
				@Override
120 aurelien 826
				public void execute(EventObject e) {
221 aurelien 827
					switch(e.getKey()) {
828
						case KEY_ALT:
829
			    	      case KEY_CTRL:
830
			    	      case KEY_DOWN:
831
			    	      case KEY_END:
832
			    	      case KEY_ESCAPE:
833
			    	      case KEY_HOME:
834
			    	      case KEY_LEFT:
835
			    	      case KEY_PAGEDOWN:
836
			    	      case KEY_PAGEUP:
837
			    	      case KEY_RIGHT:
838
			    	      case KEY_SHIFT:
839
			    	      case KEY_TAB:
840
			    	      case KEY_UP:
841
 
842
		    	        break;
843
 
844
		    	        default:
845
						commModifie = true;
846
					}
120 aurelien 847
				}
216 aurelien 848
		    });
264 aurelien 849
 
268 aurelien 850
			tCoord = new Timer() {
851
 
1292 aurelien 852
				@Override
268 aurelien 853
				public void run() {
854
    	        	double[] coord = coordonneesValides();
855
    	        	if(!rechercheCommuneEnCours && coord != null && (longModifiee || latModifiee)) {
856
    	        		rechercheCommuneEnCours = true;
857
    	        		Ext.get(lienSelectionCommune.getElement()).mask("recherche");
858
    	        		observationMediateur.obtenirInformationCoord(r,LatLng.newInstance(coord[0], coord[1]));
859
    	        	}
860
				}
861
 
862
			};
863
 
264 aurelien 864
			latitude.addKeyPressListener(new EventCallback() {
120 aurelien 865
 
1292 aurelien 866
				@Override
264 aurelien 867
				public void execute(EventObject e) {
868
					switch(e.getKey()) {
869
						case KEY_ALT:
870
			    	      case KEY_CTRL:
871
			    	      case KEY_DOWN:
872
			    	      case KEY_END:
873
			    	      case KEY_ESCAPE:
874
			    	      case KEY_HOME:
875
			    	      case KEY_LEFT:
876
			    	      case KEY_PAGEDOWN:
877
			    	      case KEY_PAGEUP:
878
			    	      case KEY_RIGHT:
879
			    	      case KEY_SHIFT:
880
			    	      case KEY_TAB:
881
			    	      case KEY_UP:
882
 
883
		    	        break;
884
 
885
			    	      case KEY_ENTER:
886
	  	    	    		validerSaisie(Champs.LATITUDE);
887
	  	    	    	  break;
888
 
889
		    	        default:
890
						latModifiee = true;
268 aurelien 891
	    	        	tCoord.cancel();
892
	    	        	tCoord.schedule(250);
264 aurelien 893
					}
894
				}
895
		    });
896
 
897
			longitude.addKeyPressListener(new EventCallback() {
898
 
1292 aurelien 899
				@Override
264 aurelien 900
				public void execute(EventObject e) {
901
					switch(e.getKey()) {
268 aurelien 902
 
264 aurelien 903
						case KEY_ALT:
904
			    	      case KEY_CTRL:
905
			    	      case KEY_DOWN:
906
			    	      case KEY_END:
907
			    	      case KEY_ESCAPE:
908
			    	      case KEY_HOME:
909
			    	      case KEY_LEFT:
910
			    	      case KEY_PAGEDOWN:
911
			    	      case KEY_PAGEUP:
912
			    	      case KEY_RIGHT:
913
			    	      case KEY_SHIFT:
268 aurelien 914
			    	      case KEY_UP:
264 aurelien 915
			    	      case KEY_TAB:
268 aurelien 916
			    	      break;
917
 
264 aurelien 918
			    	      case KEY_ENTER:
919
		  	    	    		validerSaisie(Champs.LONGITUDE);
268 aurelien 920
		  	    	    	break;
264 aurelien 921
 
922
		    	        default:
268 aurelien 923
							longModifiee = true;
924
		    	        	tCoord.cancel();
925
		    	        	tCoord.schedule(250);
264 aurelien 926
					}
927
				}
928
		    });
1488 aurelien 929
 
930
			selecteurAbondance.addListener(new ComboBoxListenerAdapter() {
264 aurelien 931
 
1488 aurelien 932
				@Override
933
				public void onSelect(ComboBox comboBox, Record record, int index) {
934
	                 selectionAbondance=true;
935
	                 abondanceModifiee = true;
936
	             }
937
	         });
938
 
939
			selecteurAbondance.addKeyPressListener(new EventCallback() {
940
 
941
				@Override
942
				public void execute(EventObject e) {
943
					switch(e.getKey()) {
944
						case KEY_ALT:
945
			    	      case KEY_CTRL:
946
			    	      case KEY_DOWN:
947
			    	      case KEY_END:
948
			    	      case KEY_ESCAPE:
949
			    	      case KEY_HOME:
950
			    	      case KEY_LEFT:
951
			    	      case KEY_PAGEDOWN:
952
			    	      case KEY_PAGEUP:
953
			    	      case KEY_RIGHT:
954
			    	      case KEY_SHIFT:
955
			    	      case KEY_TAB:
956
			    	      case KEY_UP:
957
		    	        break;
958
 
959
			    	    case KEY_ENTER:
960
			    	    	if(!selectionAbondance) {
961
		  	    	    		validerSaisie(Champs.ABONDANCE);
962
			    	    	} else {
963
			    	    		selectionAbondance = false;
964
			    	    	}
965
	  	    	    	break;
966
 
967
		    	        default:
968
		    	        	selecteurAbondance.setRawValue(selecteurAbondance.getRawValue());
969
		    	        	selecteurAbondance.setValue(selecteurAbondance.getRawValue());
970
		    	        	abondanceModifiee = true;
971
		    	        	selectionAbondance = false;
972
		    	        break;
973
					}
974
				}
975
		    });
976
 
977
			selecteurCertitude.addListener(new ComboBoxListenerAdapter() {
978
 
979
				@Override
980
				public void onSelect(ComboBox comboBox, Record record, int index) {
981
	                 selectionCertitude=true;
982
	                 certitudeModifiee = true;
983
	             }
984
	         });
985
 
986
			selecteurCertitude.addKeyPressListener(new EventCallback() {
987
 
988
				@Override
989
				public void execute(EventObject e) {
990
					switch(e.getKey()) {
991
						case KEY_ALT:
992
			    	      case KEY_CTRL:
993
			    	      case KEY_DOWN:
994
			    	      case KEY_END:
995
			    	      case KEY_ESCAPE:
996
			    	      case KEY_HOME:
997
			    	      case KEY_LEFT:
998
			    	      case KEY_PAGEDOWN:
999
			    	      case KEY_PAGEUP:
1000
			    	      case KEY_RIGHT:
1001
			    	      case KEY_SHIFT:
1002
			    	      case KEY_TAB:
1003
			    	      case KEY_UP:
1004
		    	        break;
1005
 
1006
			    	    case KEY_ENTER:
1007
			    	    	if(!selectionCertitude) {
1008
		  	    	    		validerSaisie(Champs.CERTITUDE);
1009
			    	    	} else {
1010
			    	    		selectionCertitude = false;
1011
			    	    	}
1012
	  	    	    	break;
1013
 
1014
		    	        default:
1015
		    	        	selecteurCertitude.setRawValue(selecteurCertitude.getRawValue());
1016
		    	        	selecteurCertitude.setValue(selecteurCertitude.getRawValue());
1017
		    	        	certitudeModifiee = true;
1018
		    	        	selectionCertitude = false;
1019
		    	        break;
1020
					}
1021
				}
1022
		    });
1023
 
20 david 1024
		boutonOK.addListener(new ButtonListenerAdapter() {
39 david 1025
 
1292 aurelien 1026
			@Override
20 david 1027
			public void onClick(Button button, EventObject e) {
118 david 1028
 
1029
				if(modification) {
216 aurelien 1030
					if(masseModification) {
1031
							modifierObservationEnMasse(null);
1032
					} else {
1033
						modifierObservation() ;
1034
					}
71 jpm 1035
				}
118 david 1036
				else {
71 jpm 1037
					ajouterObservation();
1038
				}
39 david 1039
 
71 jpm 1040
 
20 david 1041
			}
1042
 
1043
		});
77 jpm 1044
 
1045
		boutonAnnuler.addListener(new ButtonListenerAdapter() {
12 david 1046
 
1292 aurelien 1047
			@Override
12 david 1048
			public void onClick(Button button, EventObject e) {
1049
 
77 jpm 1050
				if(modification)
1051
				{
1052
					supprimerObservation() ;
1053
				}
1054
				else
1055
				{
104 jpm 1056
					raz();
77 jpm 1057
				}
1058
			}
1059
 
12 david 1060
		});
132 aurelien 1061
 
1062
		this.addListener(new ContainerListenerAdapter() {
1292 aurelien 1063
			@Override
132 aurelien 1064
			public void onAfterLayout(Container self) {
1065
				commune.focus();
1066
			}
1067
		});
276 aurelien 1068
 
12 david 1069
	}
708 aurelien 1070
 
12 david 1071
	/**
118 david 1072
	 * Validation de la saisie
1073
	 */
1074
 
1075
	private void validerSaisie(Champs champs) {
1076
 
1077
		if(modification) {
216 aurelien 1078
			if(masseModification) {
1079
					modifierObservationEnMasse(champs);
1080
			} else {
1081
				modifierObservation();
1082
			}
1083
 
1084
			raz(champs);
118 david 1085
		}
1086
		else {
1087
			ajouterObservation();
1088
			raz(champs);
1089
		}
1090
	}
1091
 
1092
	/**
12 david 1093
	 * Desactive visuellement ce panneau
1094
	 */
1095
	public void desactiverPanneau()
1096
	{
1097
		this.setDisabled(true) ;
1098
	}
1099
 
1100
	/**
1101
	 * Active visuellement ce panneau
1102
	 */
1103
	public void activerPanneau()
1104
	{
1105
		this.setDisabled(false) ;
1106
	}
13 david 1107
 
1292 aurelien 1108
	@Override
13 david 1109
	public void rafraichir(Object nouvelleDonnees, boolean repandreRaffraichissement) {
1110
 
49 david 1111
		// si l'on a reçu une liste du referentiel commune (completion referentiel commune)
13 david 1112
			if(nouvelleDonnees instanceof ListeReferentielCommune)
1113
			{
282 aurelien 1114
				ListeReferentielCommune data = (ListeReferentielCommune) nouvelleDonnees ;
1332 aurelien 1115
				Object[][] communeData = new Object[data.size()][3];
282 aurelien 1116
				int i = 0 ;
1117
 
1118
				// on la parse et on récupère les informations quiç nous interessent
1119
				for (Iterator it = data.keySet().iterator(); it.hasNext();)
1332 aurelien 1120
				{
1292 aurelien 1121
					ReferentielCommune ref=data.get(it.next());
13 david 1122
 
282 aurelien 1123
					communeData[i][0]= ref.getCommune();
1124
					communeData[i][1]= ref.getDepartement();
1332 aurelien 1125
					communeData[i][2]= ref.getCodeInsee();
282 aurelien 1126
					i++ ;
1127
				}
1128
 
1332 aurelien 1129
				// creation du store
282 aurelien 1130
				FieldDef defCommune = new StringFieldDef("commune");
1131
				FieldDef defDepartement = new StringFieldDef("departement");
1332 aurelien 1132
				FieldDef defCodeInsee = new StringFieldDef("codeInsee");
1133
 
1134
				FieldDef[] defTab = { defCommune, defDepartement, defCodeInsee};
282 aurelien 1135
 
1136
				RecordDef rd = new RecordDef(defTab);
1137
 
1138
				final MemoryProxy dataProxy = new MemoryProxy(communeData);
1139
				final ArrayReader reader = new ArrayReader(rd);
656 aurelien 1140
 
1141
				Store store=new Store(dataProxy,reader);
1142
				commune.setStore(store);
1143
				store.load();
282 aurelien 1144
 
13 david 1145
			}
20 david 1146
 
94 jpm 1147
			//			 si l'on a reçu une liste du référentiel nom (complétion referentiel nom)
20 david 1148
 
1149
			if(nouvelleDonnees instanceof ListeReferentielNom)
1150
			{
1151
 
282 aurelien 1152
				ListeReferentielNom data = (ListeReferentielNom) nouvelleDonnees ;
389 david 1153
				Object[][] nomData = new Object[data.size()][3];
282 aurelien 1154
				int i = 0 ;
1292 aurelien 1155
 
282 aurelien 1156
				// on la parse et on récupère les informations quiç nous interessent
1157
				for (Iterator it = data.keySet().iterator(); it.hasNext();)
1158
				{
20 david 1159
 
1292 aurelien 1160
					ReferentielNom ref=data.get(it.next());
20 david 1161
 
282 aurelien 1162
					nomData[i][0]= ref.getNom();
1163
					nomData[i][1]= ref.getNumeroNom();
389 david 1164
					if (ref.getStatut().equals("3")) {
1165
						nomData[i][2]="nom_retenu";
1166
					}
1167
					else {
1168
						nomData[i][2]="";
1332 aurelien 1169
					}
282 aurelien 1170
					i++ ;
1171
				}
1292 aurelien 1172
 
282 aurelien 1173
				FieldDef defNom = new StringFieldDef("nom");
1174
				FieldDef defNumeroNom = new StringFieldDef("numeroNom");
389 david 1175
				FieldDef indicateurNomRetenu = new StringFieldDef("indicateurNomRetenu");
1292 aurelien 1176
 
389 david 1177
				FieldDef[] defTab = { defNom, defNumeroNom, indicateurNomRetenu};
282 aurelien 1178
 
1179
				RecordDef rd = new RecordDef(defTab);
1180
 
1181
				final MemoryProxy dataProxy = new MemoryProxy(nomData);
1182
				final ArrayReader reader = new ArrayReader(rd);
1183
 
1292 aurelien 1184
				Store store=new Store(dataProxy,reader);
1185
				espece.setStore(store);
282 aurelien 1186
				store.load() ;
20 david 1187
			}
1188
 
82 david 1189
			// On recoit une observation dont on veut afficher le detail
1190
 
71 jpm 1191
			if(nouvelleDonnees instanceof Observation)
1192
			{
1193
				Observation obs = (Observation)nouvelleDonnees ;
1194
				afficherDetailsObservation(obs) ;
1195
			}
77 jpm 1196
 
216 aurelien 1197
			if(nouvelleDonnees instanceof ListeObservation) {
357 aurelien 1198
 
216 aurelien 1199
				ListeObservation listeObs = (ListeObservation)nouvelleDonnees;
1200
				calculerAfficherDifferences(listeObs);
1201
			}
1202
 
82 david 1203
			// Sur Mise à jour ou suppression d'une suppression ?
1204
 
77 jpm 1205
			if(nouvelleDonnees instanceof String)
1206
			{
1207
				String str = (String)nouvelleDonnees ;
107 aurelien 1208
				observationMediateur.obtenirNombreObservation() ;
77 jpm 1209
			}
140 aurelien 1210
 
1211
			if(nouvelleDonnees instanceof String[]) {
1212
				String[] anumNom = (String[])nouvelleDonnees ;
1213
				numeroNom = anumNom[1];
1214
				espece.setValue(anumNom[0]);
1215
				setModification("false");
1216
			}
248 aurelien 1217
 
1218
			if(nouvelleDonnees instanceof EntiteGeographiqueObservation)
1219
			{
1220
				EntiteGeographiqueObservation infosComm = (EntiteGeographiqueObservation)nouvelleDonnees ;
268 aurelien 1221
				if(rechercheCommuneEnCours) {
1222
					afficherIndicationCommune(infosComm);
1223
				} else {
1224
					rafraichirCommuneEtCoord(infosComm);
1225
				}
248 aurelien 1226
			}
20 david 1227
 
13 david 1228
	}
248 aurelien 1229
 
1230
 
268 aurelien 1231
	private void afficherIndicationCommune(
1232
			final EntiteGeographiqueObservation infosCom) {
248 aurelien 1233
 
1234
		String nCommune = "";
962 aurelien 1235
		if(infosCom != null && !infosCom.getZoneGeo().trim().equals("")){
1236
			nCommune += infosCom.getZoneGeo();
1237
			if(!infosCom.getIdZoneGeo().trim().equals(""))
1332 aurelien 1238
			nCommune += " ("+Util.convertirChaineZoneGeoVersDepartement(infosCom.getIdZoneGeo())+")";
681 aurelien 1239
 
1240
			lienSelectionCommune.setHtml("<a id=\"lien_selection_commune\" tabindex=\"9\">"+nCommune+"</a>");
1241
			lienSelectionCommune.setStyleName("img-curseur-depl");
1242
 
1243
			Ext.get("lien_selection_commune").addListener("click",new EventCallback() {
1292 aurelien 1244
				@Override
681 aurelien 1245
				public void execute(EventObject e) {
1246
					rafraichirCommune(infosCom);
1247
				}
1248
			});
1249
 
1250
			Ext.get("lien_selection_commune").addListener("keypress",new EventCallback() {
1292 aurelien 1251
				@Override
681 aurelien 1252
				public void execute(EventObject e) {
1253
					if(e.getCharCode() == KEY_ENTER) {
1254
						rafraichirCommune(infosCom);
1255
					}
1256
				}
1257
			});
1258
 
1259
			Ext.get("lien_selection_commune").addListener("focus",new EventCallback() {
1292 aurelien 1260
				@Override
681 aurelien 1261
				public void execute(EventObject e) {
1262
					Ext.get("lien_selection_commune").toggleClass("lien_sel");
1263
				}
1264
			});
1265
 
1266
			Ext.get("lien_selection_commune").addListener("blur",new EventCallback() {
1292 aurelien 1267
				@Override
681 aurelien 1268
				public void execute(EventObject e) {
1269
					Ext.get("lien_selection_commune").toggleClass("lien_sel");
1270
				}
1271
			});
1272
 
1273
		} else {
1274
			if(rechercheCommuneEnCours) {
1275
				lienSelectionCommune.setHtml("<span id=\"aucune_selection_commune\"> Erreur de localisation </span>");
1276
			} else {
1277
				lienSelectionCommune.setHtml("<span id=\"aucune_selection_commune\"> </span>");
1278
			}
268 aurelien 1279
		}
248 aurelien 1280
 
268 aurelien 1281
		Ext.get(lienSelectionCommune.getElement()).unmask();
1282
		rechercheCommuneEnCours = false;
1283
	}
1284
 
1285
	private void rafraichirCommune(EntiteGeographiqueObservation infosCom) {
1286
		String nCommune = "";
1332 aurelien 1287
 
962 aurelien 1288
		if(infosCom.getZoneGeo() != null && !infosCom.getZoneGeo().equals("")) {
1289
			nCommune += infosCom.getZoneGeo();
248 aurelien 1290
		}
1291
 
962 aurelien 1292
		if(infosCom.getIdZoneGeo() != null && !infosCom.getIdZoneGeo().equals("")) {
1332 aurelien 1293
			String codeGeoFormate = Util.convertirChaineZoneGeoVersDepartement(infosCom.getIdZoneGeo());
962 aurelien 1294
			nCommune += " ("+codeGeoFormate+")";
1332 aurelien 1295
			departement = Util.convertirChaineZoneGeoVersDepartement(infosCom.getIdZoneGeo());
248 aurelien 1296
		}
1297
		commune.setValue(nCommune);
357 aurelien 1298
		communeModifiee = true;
268 aurelien 1299
	}
248 aurelien 1300
 
268 aurelien 1301
	private void rafraichirCommuneEtCoord(EntiteGeographiqueObservation infosCom) {
391 aurelien 1302
		;
1303
		// on ne remplace la commune que si le champ était vide
1304
		if(commune.getRawValue() == null || commune.getRawValue().equals("")) {
1305
			rafraichirCommune(infosCom);
1306
		}
268 aurelien 1307
 
248 aurelien 1308
		if(infosCom.getLat() != null && !infosCom.getLat().equals("")) {
1309
			latitude.setValue(infosCom.getLat());
1310
		}
1311
 
1312
		if(infosCom.getLon() != null && !infosCom.getLon().equals("")) {
1313
			longitude.setValue(infosCom.getLon());
1314
		}
264 aurelien 1315
 
357 aurelien 1316
		latModifiee = true;
1317
		longModifiee = true;
1318
 
264 aurelien 1319
		coordPanel.setVisible(true);
248 aurelien 1320
	}
1321
 
13 david 1322
	public void obtenirListeReferentielCommune() {
94 jpm 1323
 
268 aurelien 1324
	 String com=commune.getText();
20 david 1325
	 com=com.replaceAll("%","");
1326
 
1327
	 observationMediateur.obtenirListeReferentielCommune(this,com);
13 david 1328
 
1329
	}
20 david 1330
 
1331
 
1332 aurelien 1332
	public void obtenirListeReferentielNom() {
389 david 1333
	 // FIXME : trouver un autre moyen que le hack "/*" pour rechercher les taxons lors de la saisie d'un espace apres le genre
248 aurelien 1334
	  String esp=espece.getText().replaceAll(" ","/*");
20 david 1335
	  esp=esp.replaceAll("%","");
1336
 
1332 aurelien 1337
	  observationMediateur.obtenirListeReferentielNom(this,esp);
20 david 1338
	}
1332 aurelien 1339
 
708 aurelien 1340
	protected void obtenirReferentielStation() {
1341
		observationMediateur.obtenirListeReferentielPerso(this,TypesReferentiels.REFERENTIEL_STATION,station.getText());
1342
	}
1343
 
1344
	protected void obtenirListeReferentielMilieu() {
1345
		observationMediateur.obtenirListeReferentielPerso(this,TypesReferentiels.REFERENTIEL_MILIEU,milieu.getText());
1346
	}
1347
 
1348
	protected void obtenirReferentielLieuDit() {
1349
		observationMediateur.obtenirListeReferentielPerso(this,TypesReferentiels.REFERENTIEL_LIEU_DIT,lieudit.getText());
1350
	}
20 david 1351
 
39 david 1352
	public void ajouterObservation() {
140 aurelien 1353
 
681 aurelien 1354
		if(!Util.verifierDateFormatCel(date.getRawValue()) && !date.getRawValue().equals("")) {
1355
			Window.alert("Attention la date saisie est invalide, la date doit être au format jj/mm/aaaa");
1356
			date.setInvalidText("Date invalide");
1357
			return;
1358
		}
1359
 
389 david 1360
		if(departement != null) {
1361
		// TODO : regler le probleme a la base plutot que ce patch
1362
 
1363
			if(departement.equals("000null") || departement.equals("")) {
1364
				String[] depCom = commune.getText().split(" ");
1365
				if(depCom.length > 1) {
1366
					String dep = depCom[1].replace('(', ' ');
1367
					dep =dep.replace(')', ' ');
1368
					dep = dep.trim();
1369
					dep = dep.replace('\\',' ');
1370
					dep = dep.trim();
1371
 
1372
					try
1373
					{
1374
						int nDep = Integer.parseInt(dep);
1375
						if(nDep > 0 && nDep < 110) {
1376
							departement = dep ;
1377
						}
140 aurelien 1378
					}
389 david 1379
					catch(NumberFormatException e)
1380
					{
1381
						departement = "" ;
1382
					}
140 aurelien 1383
				}
1384
			}
1385
		}
681 aurelien 1386
 
1387
		String dateObs = Util.remplacerSeparateursDateFormatCel(date.getRawValue());
39 david 1388
 
681 aurelien 1389
		Observation obs=new Observation(espece.getText(),numeroNom,commune.getText(),departement,lieudit.getText(),station.getText(),milieu.getText(), comment.getText(),dateObs);
264 aurelien 1390
 
1391
		String[] coords = getValeurCoordonnees();
1392
 
971 aurelien 1393
		obs.setLatitude(coords[0]);
1394
		obs.setLongitude(coords[1]);
264 aurelien 1395
 
1488 aurelien 1396
		obs.setAbondance(getAbondance());
1397
		obs.setCertitude(getCertitude());
1398
 
46 david 1399
		observationMediateur.ajouterObservation(obs);
39 david 1400
	}
12 david 1401
 
71 jpm 1402
	private void modifierObservation() {
229 aurelien 1403
 
681 aurelien 1404
		if(!Util.verifierDateFormatCel(date.getRawValue()) && !date.getRawValue().equals("")) {
1405
			Window.alert("Attention la date saisie est invalide, la date doit être au format jj/mm/aaaa");
1406
			date.setInvalidText("Date invalide");
1407
			return;
1408
		}
1409
 
229 aurelien 1410
		if(departement.equals("000null") || departement.equals("")) {
1411
			String[] depCom = commune.getText().split(" ");
1412
			if(depCom.length > 1) {
1413
				String dep = depCom[1].replace('(', ' ');
1414
				dep =dep.replace(')', ' ');
1415
				dep = dep.trim();
1416
				dep = dep.replace('\\',' ');
1417
				dep = dep.trim();
1418
 
1419
				try
1420
				{
1421
					int nDep = Integer.parseInt(dep);
1422
					if(nDep > 0 && nDep < 110) {
1423
						departement = dep ;
1424
					}
1425
				}
1426
				catch(NumberFormatException e)
1427
				{
1428
					departement = "" ;
1429
				}
1430
			}
1431
		}
1432
 
681 aurelien 1433
		String dateObs = Util.remplacerSeparateursDateFormatCel(date.getRawValue());
1434
 
1435
		Observation obs=new Observation(espece.getText(),numeroNom,commune.getText(),departement,lieudit.getText(),station.getText(),milieu.getText(), comment.getText(),dateObs);
79 david 1436
		obs.setNumeroOrdre(numeroOrdre);
216 aurelien 1437
 
264 aurelien 1438
		String[] coords = getValeurCoordonnees();
1439
 
971 aurelien 1440
		obs.setLatitude(coords[0]);
1441
		obs.setLongitude(coords[1]);
264 aurelien 1442
 
1488 aurelien 1443
		obs.setAbondance(getAbondance());
1444
		obs.setCertitude(getCertitude());
1445
 
79 david 1446
		observationMediateur.modifierObservation(obs);
216 aurelien 1447
 
205 aurelien 1448
		selecteurMode.setValue("création");
1449
		setModification("false");
1450
 
71 jpm 1451
	}
77 jpm 1452
 
216 aurelien 1453
	private void modifierObservationEnMasse(Champs champModifie) {
1454
		String communeM = null;
1455
		String departementM = null;
221 aurelien 1456
		String numNomSelM = null;
216 aurelien 1457
		String lieuDitM = null;
1458
		String stationM = null;
1459
		String milieuM = null;
1460
		String dateM = null;
1461
		String especeM = null;
1462
		String commM = null;
264 aurelien 1463
		String latM = null;
1464
		String longM = null;
1488 aurelien 1465
		String abondanceM = null;
1466
		String certitudeM = null;
216 aurelien 1467
 
1468
		String champs = modeleMessageModif;
1469
 
1470
		if(communeModifiee) {
1471
			communeM = commune.getText();
221 aurelien 1472
 
1473
			if(departement.equals("000null") || departement.equals("")) {
1474
				String[] depCom = commune.getText().split(" ");
1475
				if(depCom.length > 1) {
1476
					String dep = depCom[1].replace('(', ' ');
1477
					dep =dep.replace(')', ' ');
1478
					dep = dep.trim();
1479
					dep = dep.replace('\\',' ');
1480
					dep = dep.trim();
1481
 
1482
					try
1483
					{
1484
						int nDep = Integer.parseInt(dep);
1485
						if(nDep > 0 && nDep < 110) {
1486
							departement = dep ;
1487
						}
1488
					}
1489
					catch(NumberFormatException e)
1490
					{
1491
						departement = "" ;
1492
					}
1493
				}
1494
			}
1495
 
1496
			departementM = departement;
216 aurelien 1497
		} else {
221 aurelien 1498
			champs = champs.replaceAll("commune", "");
216 aurelien 1499
		}
1500
 
221 aurelien 1501
		if(lieuDitModifie) {
216 aurelien 1502
			lieuDitM = lieudit.getText();
1503
		}else {
221 aurelien 1504
			champs = champs.replaceAll(":lieu-dit", "");
216 aurelien 1505
		}
1506
 
221 aurelien 1507
		if(stationModifiee) {
216 aurelien 1508
			stationM = station.getText();
1509
		}else {
221 aurelien 1510
			champs = champs.replaceAll(":station", "");
216 aurelien 1511
		}
1512
 
1513
		if(milieuModifie) {
1514
			milieuM = milieu.getText();
1515
		}else {
221 aurelien 1516
			champs = champs.replaceAll(":milieu", "");
216 aurelien 1517
		}
1518
 
221 aurelien 1519
		if(dateModifiee && !date.getRawValue().equals(VALEURS_MULTIPLES)) {
216 aurelien 1520
			dateM = date.getRawValue();
681 aurelien 1521
			dateM = Util.remplacerSeparateursDateFormatCel(dateM);
216 aurelien 1522
		}else {
221 aurelien 1523
			champs = champs.replaceAll(":date", "");
216 aurelien 1524
		}
1525
 
1526
		if(especeModifiee) {
1527
			especeM = espece.getText();
221 aurelien 1528
			numNomSelM = numeroNom;
216 aurelien 1529
		}else {
221 aurelien 1530
			champs = champs.replaceAll(":espece", "");
216 aurelien 1531
		}
1532
 
1533
		if(commModifie) {
1534
			commM = comment.getText();
1535
		}else {
221 aurelien 1536
			champs = champs.replaceAll(":commentaire", "");
216 aurelien 1537
		}
1538
 
264 aurelien 1539
		if(latModifiee) {
1540
			latM = latitude.getText();
1541
		}else {
1542
			champs = champs.replaceAll(":latitude", "");
1543
		}
1544
 
1545
		if(longModifiee) {
1546
			longM = longitude.getText();
1547
		}else {
1548
			champs = champs.replaceAll(":longitude", "");
1549
		}
1550
 
1488 aurelien 1551
		if(abondanceModifiee && !selecteurAbondance.getRawValue().equals(VALEURS_MULTIPLES)) {
1552
			abondanceM = getAbondance();
1553
		} else {
1554
			champs = champs.replaceAll(":abondance", "");
1555
		}
1556
 
1557
		if(certitudeModifiee && !selecteurCertitude.getRawValue().equals(VALEURS_MULTIPLES)) {
1558
			certitudeM = getCertitude();
1559
		} else {
1489 aurelien 1560
			champs = champs.replaceAll(":identification", "");
1488 aurelien 1561
		}
1562
 
221 aurelien 1563
		champs = champs.replaceAll(":",", ");
1564
		if(champs.startsWith(",")) {
1565
			champs = champs.replaceFirst(",", "");
1566
		}
216 aurelien 1567
 
221 aurelien 1568
		String message = "Voulez vous modifier le(s) champ(s) suivant(s) : "+champs+"   pour les observations selectionnées ?" ;
1569
 
216 aurelien 1570
		if(champs.trim().equals("")) {
1571
			Window.alert("Aucun champ n'a été modifié");
1572
		} else {
221 aurelien 1573
			Observation obs = new Observation(especeM,numNomSelM,communeM,departementM,lieuDitM,stationM,milieuM, commM,dateM);
216 aurelien 1574
			obs.setNumeroOrdre(numeroOrdre);
971 aurelien 1575
			obs.setLatitude(latM);
1576
			obs.setLongitude(longM);
1488 aurelien 1577
			obs.setAbondance(abondanceM);
1578
			obs.setCertitude(certitudeM);
216 aurelien 1579
			if(Window.confirm(message)) {
1580
				observationMediateur.modifierObservationEnMasse(obs);
221 aurelien 1581
				reinitialiserValeurModifiees();
216 aurelien 1582
			}
1583
		}
1584
	}
1585
 
77 jpm 1586
	private void supprimerObservation() {
1587
 
216 aurelien 1588
		observationMediateur.supprimerObservation(this, numeroOrdre);
77 jpm 1589
	}
71 jpm 1590
 
1591
	public void afficherDetailsObservation(Observation obs)
1592
	{
104 jpm 1593
		raz() ;
216 aurelien 1594
		String idLoc ;
1595
		if(obs.getIdentifiantLocalite() != VALEURS_MULTIPLES) {
1332 aurelien 1596
			idLoc = obs.getIdentifiantLocalite().replaceAll(" ","/");
216 aurelien 1597
			idLoc = idLoc.replaceAll("%","");
1598
			idLoc = idLoc.replaceAll("\"","");
1599
			idLoc = idLoc.replace('\\',' ');
1600
			idLoc = idLoc.trim();
1332 aurelien 1601
			if(idLoc.length() == 5) {
1602
				idLoc = idLoc.substring(0,2);
1603
			}
216 aurelien 1604
		} else {
1605
			idLoc = obs.getIdentifiantLocalite();
1332 aurelien 1606
			if(idLoc.length() == 5) {
1607
				idLoc = idLoc.substring(0,2);
1608
			}
216 aurelien 1609
		}
71 jpm 1610
 
221 aurelien 1611
		if(!obs.getDate().equals("null") && !obs.getDate().equals("000null") && !obs.getDate().equals(VALEURS_MULTIPLES)) {
71 jpm 1612
			String[] dateEtHeure = obs.getDate().split(" ", 2);
110 aurelien 1613
			if(verifierFormatDate(dateEtHeure[0])) {
1614
				date.setValue(dateEtHeure[0]) ;
1615
			}
1616
			else
1617
			{
1618
				date.setRawValue("");
1619
			}
221 aurelien 1620
		} else {
1621
			date.setRawValue(VALEURS_MULTIPLES);
1622
			date.clearInvalid();
71 jpm 1623
		}
1624
		if(!obs.getLieudit().equals("null") && !obs.getLieudit().equals("000null")) {
1625
			lieudit.setValue(obs.getLieudit()) ;
1626
		}
1627
		if(!obs.getStation().equals("null") && !obs.getStation().equals("000null")) {
1628
			station.setValue(obs.getStation()) ;
1629
		}
1630
		if(!obs.getMilieu().equals("null") && !obs.getMilieu().equals("000null")) {
1631
			milieu.setValue(obs.getMilieu()) ;
1632
		}
1633
		if(!obs.getCommentaire().equals("null") && !obs.getCommentaire().equals("000null")) {
461 aurelien 1634
 
681 aurelien 1635
			comment.setRawValue(Util.remplacerSautsDeligneMalEncodes(obs.getCommentaire()));
461 aurelien 1636
 
71 jpm 1637
		}
1638
		if(!obs.getLocalite().equals("null") && !obs.getLocalite().equals("000null")) {
962 aurelien 1639
			if(!idLoc.equals("000null") && !idLoc.equals("")) {
221 aurelien 1640
				if(!idLoc.equals(VALEURS_MULTIPLES)) {
1641
					commune.setValue(obs.getLocalite()+" ("+idLoc+")") ;
1642
				} else {
1643
					commune.setValue(VALEURS_MULTIPLES);
1644
				}
140 aurelien 1645
			}
1646
			else
1647
			{
1648
				commune.setValue(obs.getLocalite());
1649
			}
71 jpm 1650
		}
1651
		if(!obs.getIdentifiantLocalite().equals("null") && !obs.getIdentifiantLocalite().equals("000null")) {
140 aurelien 1652
			departement = idLoc;
71 jpm 1653
		}
1654
		if(!obs.getNomSaisi().equals("null") && !obs.getNomSaisi().equals("000null")) {
1655
			espece.setValue(obs.getNomSaisi()) ;
1656
		}
1657
		if(!obs.getNumeroNomenclaturalSaisi().equals("null") && !obs.getNumeroNomenclaturalSaisi().equals("000null")) {
1658
			numeroNom = obs.getNumeroNomenclaturalSaisi() ;
1659
		}
1332 aurelien 1660
		if(!obs.getNumeroOrdre().equals("null") && !obs.getNumeroOrdre().equals("000null")) {
74 david 1661
			numeroOrdre = obs.getNumeroOrdre() ;
1662
		}
1663
 
962 aurelien 1664
		if(!obs.getLatitude().equals("null") && !obs.getLatitude().equals("000null")
1665
				&& !obs.getLongitude().equals("null") && !obs.getLongitude().equals("000null")) {
1666
			latitude.setValue(obs.getLatitude()) ;
1667
			longitude.setValue(obs.getLongitude()) ;
391 aurelien 1668
		}
1488 aurelien 1669
 
1670
		selecteurAbondance.getStore().load();
1671
		selecteurAbondance.setValue(obs.getAbondance());
1672
 
1673
		selecteurCertitude.getStore().load();
1674
		selecteurCertitude.setValue(obs.getCertitude());
71 jpm 1675
	}
1676
 
118 david 1677
 
104 jpm 1678
	public void raz()
71 jpm 1679
	{
118 david 1680
		raz(Champs.TOUT);
1681
 
1682
	}
1683
	public void raz(Champs champs)
1684
	{
1685
		switch (champs) {
1686
 
1687
 
1688
			case DATE:
1689
				date.reset() ;
1690
				break;
1691
 
1692
			case LIEUDIT:
1693
				lieudit.reset() ;
1694
				break;
1695
 
1696
			case STATION:
1697
				station.reset() ;
1698
				break;
1699
 
1700
			case MILIEU:
1701
				milieu.reset() ;
1702
				break;
1703
 
1704
			case COMMENT:
1705
				comment.reset() ;
1706
				break;
1707
 
1708
 
1709
			case COMMUNE:
172 aurelien 1710
				commune.reset() ;
118 david 1711
				departement ="";
268 aurelien 1712
				latitude.reset();
1713
				longitude.reset();
118 david 1714
				break;
1715
 
1716
			case ESPECE:
1717
				espece.reset();
1718
				numeroNom = "" ;
1719
				numeroOrdre = "";
1720
				break;
1721
 
264 aurelien 1722
			case LATITUDE:
1723
				latitude.reset();
268 aurelien 1724
				afficherIndicationCommune(null);
264 aurelien 1725
				break;
1726
 
1727
			case LONGITUDE:
1728
				longitude.reset();
268 aurelien 1729
				afficherIndicationCommune(null);
264 aurelien 1730
				break;
1731
 
1488 aurelien 1732
			case ABONDANCE:
1733
				selecteurAbondance.setValue("");
1734
				break;
1735
 
1736
			case CERTITUDE:
1737
				selecteurCertitude.setValue("");
1738
				break;
1739
 
118 david 1740
			case TOUT:
132 aurelien 1741
				commune.reset();
118 david 1742
				date.reset() ;
1743
				lieudit.reset() ;
1744
				station.reset() ;
1745
				milieu.reset() ;
1746
				comment.reset() ;
1747
				milieu.reset() ;
248 aurelien 1748
				latitude.reset();
1749
				longitude.reset();
118 david 1750
				departement ="";
1751
				espece.reset();
1488 aurelien 1752
				selecteurAbondance.clearValue();
1753
				selecteurCertitude.clearValue();
118 david 1754
				numeroNom = "" ;
1755
				numeroOrdre = "";
268 aurelien 1756
				afficherIndicationCommune(null);
118 david 1757
				break;
1758
 
1759
		}
71 jpm 1760
 
1761
	}
1762
 
1763
	private void setModification(String mode)
1764
	{
1765
		if(mode.equals("true")) {
1766
 
1767
			boutonOK.setText("Modifier") ;
1768
			setTitle("Modification") ;
77 jpm 1769
			boutonAnnuler.setText("Supprimer") ;
71 jpm 1770
			modification = true ;
97 jpm 1771
			selecteurMode.removeClass("x-selec-crea") ;
1772
			selecteurMode.setCls("x-selec-modif") ;
216 aurelien 1773
			observationMediateur.onModeModification();
71 jpm 1774
		}
1775
		else
1776
		{
264 aurelien 1777
			boutonOK.setText("Créer") ;
71 jpm 1778
			setTitle("Saisir") ;
77 jpm 1779
			boutonAnnuler.setText("Réinitialiser") ;
71 jpm 1780
			modification = false ;
97 jpm 1781
			selecteurMode.removeClass("x-selec-modif") ;
1782
			selecteurMode.setCls("x-selec-crea") ;
246 aurelien 1783
			observationMediateur.onModeCreation();
132 aurelien 1784
		}
71 jpm 1785
	}
1786
 
1787
	/**
1788
	 * renvoie vrai si on est en mode modification, faux si on est en mode création
1789
	 * @return
1790
	 */
1791
	public boolean getModification()
1792
	{
1793
		return modification ;
1794
	}
110 aurelien 1795
 
216 aurelien 1796
	/**
1797
	 * renvoie vrai si on est en mode modification de masse, faux sinon
1798
	 * @return
1799
	 */
1800
	public boolean getMasseModification()
1801
	{
1802
		return masseModification ;
1803
	}
1804
 
110 aurelien 1805
	public boolean verifierFormatDate(String date) {
1806
 
132 aurelien 1807
		String regex = "[1-9][0-9]{3}-[0-9]{2}-[0-9]{2}" ;
110 aurelien 1808
		if(date.matches(regex) && !date.equals("0000-00-00")) {
1809
			return true ;
1810
		}
1811
		else {
1812
			return false;
1813
		}
1814
	}
216 aurelien 1815
 
1816
	public void setMasseModification(boolean masseModification) {
1817
		this.masseModification = masseModification;
1818
		if(masseModification) {
1819
			reinitialiserValeurModifiees();
1820
		}
1821
	}
132 aurelien 1822
 
216 aurelien 1823
	private void calculerAfficherDifferences(ListeObservation listeObs) {
1824
 
1825
		String departement = null;
1826
		String commune = null;
1827
		String lieuDit = null;
1828
		String station = null;
1829
		String milieu = null;
1830
		String espece = null;
1831
		String date = null;
1832
		String notes = null;
264 aurelien 1833
		String lat = null;
1834
		String lon = null;
1488 aurelien 1835
		String abondance = null;
1836
		String certitude = null;
216 aurelien 1837
 
1838
		String ordreObs = "";
1839
 
1840
		for(Iterator<String> it = listeObs.keySet().iterator();it.hasNext();) {
1841
			Observation obsEnCours = listeObs.get(it.next());
1842
			departement = comparerDifferencesChamps(departement, obsEnCours.getIdentifiantLocalite());
1843
			commune = comparerDifferencesChamps(commune, obsEnCours.getLocalite());
1844
			lieuDit = comparerDifferencesChamps(lieuDit, obsEnCours.getLieudit());
1845
			station = comparerDifferencesChamps(station, obsEnCours.getStation());
1846
			milieu = comparerDifferencesChamps(milieu, obsEnCours.getMilieu());
1847
			espece = comparerDifferencesChamps(espece, obsEnCours.getNomSaisi());
1848
			date = comparerDifferencesChamps(date, obsEnCours.getDate());
1849
			notes = comparerDifferencesChamps(notes, obsEnCours.getCommentaire());
962 aurelien 1850
			lat = comparerDifferencesChamps(lat, obsEnCours.getLatitude());
1851
			lon = comparerDifferencesChamps(lon, obsEnCours.getLongitude());
1488 aurelien 1852
			abondance = comparerDifferencesChamps(abondance, obsEnCours.getAbondance());
1853
			certitude = comparerDifferencesChamps(certitude, obsEnCours.getCertitude());
216 aurelien 1854
 
1855
			ordreObs += obsEnCours.getNumeroOrdre()+",";
1856
		}
1857
 
1858
		Observation obs=new Observation(espece,numeroNom,commune,departement,lieuDit,station,milieu, notes,date);
1859
		obs.setNumeroOrdre(ordreObs);
971 aurelien 1860
		obs.setLatitude(lat);
1861
		obs.setLongitude(lon);
1488 aurelien 1862
		obs.setAbondance(abondance);
1863
		obs.setCertitude(certitude);
1864
		rafraichir(obs, false);
216 aurelien 1865
	}
1866
 
1867
	private String comparerDifferencesChamps(String valeurActuelle, String nouvelleValeur) {
1868
 
1869
		String retour = "000null";
1870
 
1871
			if(valeurActuelle == null) {
1872
				retour = nouvelleValeur;
1873
			} else {
1874
				if(valeurActuelle.equals(nouvelleValeur)) {
1875
					retour = valeurActuelle;
1876
				} else {
1877
					retour = VALEURS_MULTIPLES;
1878
				}
1879
			}
1880
		return retour;
1881
	}
1882
 
1488 aurelien 1883
	private void reinitialiserValeurModifiees() {
216 aurelien 1884
		communeModifiee = false;
221 aurelien 1885
		lieuDitModifie = false;
1886
		stationModifiee = false;
216 aurelien 1887
		milieuModifie = false;
1888
		dateModifiee = false;
1889
		especeModifiee = false;
1890
		commModifie = false;
264 aurelien 1891
		latModifiee = false;
1892
		longModifiee = false;
1488 aurelien 1893
		abondanceModifiee = false;
1894
		certitudeModifiee = false;
216 aurelien 1895
	}
1896
 
248 aurelien 1897
	public void saisieTabindex()
1898
	{
1899
 
1900
		selecteurMode.setTabIndex(0);
1901
		commune.setTabIndex(1);
268 aurelien 1902
		lieudit.setTabIndex(3);
1903
		station.setTabIndex(4);
1904
		milieu.setTabIndex(5);
248 aurelien 1905
		coordonnees.setTabIndex(-1);
1906
		coordonnees.addListener(new TextFieldListenerAdapter() {
1907
 
1292 aurelien 1908
			@Override
248 aurelien 1909
			public void onFocus(Field field) {
1910
				if(coordPanel.isVisible()) {
264 aurelien 1911
					latitude.focus();
248 aurelien 1912
				} else {
1913
					Ext.get("lien_carto").focus();
1914
				}
1915
			}
1916
		});
1917
 
681 aurelien 1918
		latitude.setTabIndex(8);
1919
		longitude.setTabIndex(9);
248 aurelien 1920
		comment.setTabIndex(10);
1921
		date.setTabIndex(11);
1922
		espece.setTabIndex(12);
1489 aurelien 1923
		selecteurCertitude.setTabIndex(13);
1924
		selecteurAbondance.setTabIndex(14);
1488 aurelien 1925
		boutonOK.setTabIndex(15);
1926
		boutonAnnuler.setTabIndex(16);
248 aurelien 1927
 
1928
	}
1929
 
1930
	private void obtenirInformationCoord() {
1931
		if(coordonneesValides() != null) {
1932
			observationMediateur.obtenirInformationCoord(LatLng.newInstance(coordonneesValides()[0],coordonneesValides()[1]));
1933
		} else {
681 aurelien 1934
			observationMediateur.afficherFenetreCarto();
248 aurelien 1935
		}
1936
 
1937
	}
1938
 
1939
	private void obtenirInformationCommune() {
962 aurelien 1940
		observationMediateur.obtenirInformationCommune(getCommuneSansDepartement(), obtenirDepartementAPartirChampCommune());
248 aurelien 1941
	}
1942
 
391 aurelien 1943
	public double[] coordonneesValides() {
248 aurelien 1944
 
1945
		try {
1946
 
1947
			double lat = Double.parseDouble(latitude.getValueAsString().replaceAll(",", "."));
1948
			double lon = Double.parseDouble(longitude.getValueAsString().replaceAll(",", "."));
1949
 
1950
			double[] coord = {lat, lon};
1951
			return coord;
1952
 
1953
		} catch (NumberFormatException ne) {
1954
			return null;
1955
		}
1956
	}
1957
 
264 aurelien 1958
	private String[] getValeurCoordonnees() {
1959
		double[] coDouble = coordonneesValides();
1960
 
1961
		if(coDouble != null) {
1962
			String[] coord = {coDouble[0]+"",coDouble[1]+""};
1963
			return coord;
1964
		} else {
1965
			String[] coord = {"000null","000null" };
1966
			return coord;
1967
		}
1968
	}
1969
 
248 aurelien 1970
	private String obtenirDepartementAPartirChampCommune() {
264 aurelien 1971
 
1972
		String dep = "";
1973
 
656 aurelien 1974
		if(departement == null) {
1975
			departement = "";
1976
		}
1977
 
248 aurelien 1978
		if(departement.equals("000null") || departement.equals("")) {
264 aurelien 1979
 
248 aurelien 1980
			String[] depCom = commune.getText().split(" ");
1981
			if(depCom.length > 1) {
264 aurelien 1982
				dep = depCom[1].replace('(', ' ');
1983
			} else {
1984
				dep = "";
248 aurelien 1985
			}
264 aurelien 1986
		} else {
1987
			dep = departement;
248 aurelien 1988
		}
1989
 
264 aurelien 1990
		dep = dep.replace(')', ' ');
1991
		dep = dep.trim();
1992
		dep = dep.replace('\\',' ');
1993
		dep = dep.trim();
1994
 
1995
		try
1996
		{
1997
			int nDep = Integer.parseInt(dep);
1998
			if(nDep > 0 && nDep < 110) {
1999
				departement = dep ;
2000
			}
2001
 
962 aurelien 2002
			if(departement.length() == 4) {
264 aurelien 2003
				departement = "0"+departement;
2004
			}
962 aurelien 2005
 
2006
			departement = departement.substring(0,2);
264 aurelien 2007
		}
2008
		catch(NumberFormatException e)
2009
		{
2010
			departement = "" ;
2011
		}
2012
 
248 aurelien 2013
		return departement;
2014
	}
2015
 
268 aurelien 2016
	public String getCommune() {
656 aurelien 2017
 
2018
		String valeurCommune = "";
2019
 
2020
		if(commune.getValue() != null) {
2021
			valeurCommune = commune.getValue();
2022
		}
2023
		return valeurCommune;
268 aurelien 2024
	}
2025
 
2026
	public String getDepartement() {
2027
		return obtenirDepartementAPartirChampCommune();
2028
	}
681 aurelien 2029
 
656 aurelien 2030
	public String getCommuneSansDepartement() {
2031
		return Util.supprimerNumDepartementChaineLocalite(getCommune());
2032
	}
1488 aurelien 2033
 
2034
	//TODO fusionner les deux fonctions et les objets qu'elles utilisent
2035
	// car leur code est à 99% identique
2036
	public String getAbondance() {
2037
		String valeurAbondance = selecteurAbondance.getValue();
2038
		String valeurAbondanceBrute = selecteurAbondance.getRawValue();
2039
 
2040
		// Test idiot qui permet de savoir si l'on utilise la valeur saisie directement ou bien la valeur
2041
		// selectionnee car lors du setValue sur le keypress, gwtext ne prends pas en compte le dernier
2042
		// caractère
2043
		if(valeurAbondance.equals(valeurAbondanceBrute.substring(0, valeurAbondanceBrute.length() -1))) {
2044
			valeurAbondance = selecteurAbondance.getRawValue();
2045
		}
2046
 
2047
		return valeurAbondance;
2048
	}
2049
 
2050
	public String getCertitude() {
2051
		String valeurCertitude = selecteurCertitude.getValue();
2052
		String valeurCertitudeBrute = selecteurCertitude.getRawValue();
2053
 
2054
		// Test idiot qui permet de savoir si l'on utilise la valeur saisie directement ou bien la valeur
2055
		// selectionnee car lors du setValue sur le keypress, gwtext ne prends pas en compte le dernier
2056
		// caractère
2057
		if(valeurCertitude.equals(valeurCertitudeBrute.substring(0, valeurCertitudeBrute.length() -1))) {
2058
			valeurCertitude = selecteurCertitude.getRawValue();
2059
		}
2060
 
2061
		return valeurCertitude;
2062
	}
268 aurelien 2063
 
2064
	public boolean communeInitialisee() {
2065
		return communeModifiee;
2066
	}
318 aurelien 2067
 
2068
	public void redimensionnerFormulaire() {
681 aurelien 2069
		afficherFormulaireLatLon.setWidth(panneauIntermediaire.getWidth()+"px");
2070
		panneauPremierColonne.doLayout();
2071
		panneauSecondeColonne.doLayout();
2072
		panneauIntermediaire.doLayout();
708 aurelien 2073
 
2074
		doLayout();
318 aurelien 2075
	}
12 david 2076
}