Subversion Repositories eFlore/Applications.cel

Rev

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