Subversion Repositories eFlore/Applications.cel

Rev

Rev 430 | Rev 610 | Go to most recent revision | Only display areas with differences | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 430 Rev 459
1
package org.tela_botanica.client.vues.observation;
1
package org.tela_botanica.client.vues.observation;
2
 
2
 
3
import org.tela_botanica.client.interfaces.Rafraichissable;
3
import org.tela_botanica.client.interfaces.Rafraichissable;
4
import org.tela_botanica.client.modeles.Configuration;
4
import org.tela_botanica.client.modeles.Configuration;
5
import org.tela_botanica.client.modeles.EntiteGeographiqueObservation;
5
import org.tela_botanica.client.modeles.EntiteGeographiqueObservation;
6
import org.tela_botanica.client.observation.ObservationMediateur;
6
import org.tela_botanica.client.observation.ObservationMediateur;
7
 
7
 
8
import com.google.gwt.maps.client.InfoWindow;
8
import com.google.gwt.maps.client.InfoWindow;
9
import com.google.gwt.maps.client.InfoWindowContent;
9
import com.google.gwt.maps.client.InfoWindowContent;
10
import com.google.gwt.maps.client.MapType;
10
import com.google.gwt.maps.client.MapType;
11
import com.google.gwt.maps.client.MapWidget;
11
import com.google.gwt.maps.client.MapWidget;
12
import com.google.gwt.maps.client.Maps;
12
import com.google.gwt.maps.client.Maps;
13
import com.google.gwt.maps.client.control.LargeMapControl;
13
import com.google.gwt.maps.client.control.LargeMapControl;
14
import com.google.gwt.maps.client.event.MapClickHandler;
14
import com.google.gwt.maps.client.event.MapClickHandler;
15
import com.google.gwt.maps.client.event.MapZoomEndHandler;
15
import com.google.gwt.maps.client.event.MapZoomEndHandler;
16
import com.google.gwt.maps.client.event.MarkerClickHandler;
16
import com.google.gwt.maps.client.event.MarkerClickHandler;
17
import com.google.gwt.maps.client.event.MarkerDragEndHandler;
17
import com.google.gwt.maps.client.event.MarkerDragEndHandler;
18
import com.google.gwt.maps.client.event.MarkerDragStartHandler;
18
import com.google.gwt.maps.client.event.MarkerDragStartHandler;
19
import com.google.gwt.maps.client.geom.LatLng;
19
import com.google.gwt.maps.client.geom.LatLng;
20
import com.google.gwt.maps.client.overlay.Marker;
20
import com.google.gwt.maps.client.overlay.Marker;
21
import com.google.gwt.maps.client.overlay.MarkerOptions;
21
import com.google.gwt.maps.client.overlay.MarkerOptions;
22
import com.google.gwt.user.client.Timer;
22
import com.google.gwt.user.client.Timer;
23
import com.google.gwt.user.client.Window;
23
import com.google.gwt.user.client.Window;
24
import com.gwtext.client.core.EventCallback;
24
import com.gwtext.client.core.EventCallback;
25
import com.gwtext.client.core.EventObject;
25
import com.gwtext.client.core.EventObject;
26
import com.gwtext.client.core.Ext;
26
import com.gwtext.client.core.Ext;
27
import com.gwtext.client.core.ExtElement;
27
import com.gwtext.client.core.ExtElement;
28
import com.gwtext.client.widgets.Container;
28
import com.gwtext.client.widgets.Container;
29
import com.gwtext.client.widgets.Panel;
29
import com.gwtext.client.widgets.Panel;
30
import com.gwtext.client.widgets.event.ContainerListenerAdapter;
30
import com.gwtext.client.widgets.event.ContainerListenerAdapter;
31
import com.gwtext.client.widgets.form.Label;
31
import com.gwtext.client.widgets.form.Label;
32
import com.gwtext.client.widgets.layout.FitLayout;
32
import com.gwtext.client.widgets.layout.FitLayout;
33
import com.gwtext.client.widgets.layout.RowLayout;
33
import com.gwtext.client.widgets.layout.RowLayout;
34
import com.gwtext.client.widgets.layout.RowLayoutData;
34
import com.gwtext.client.widgets.layout.RowLayoutData;
35
 
35
 
36
public class CartographieObservationVue extends Panel implements Rafraichissable {
36
public class CartographieObservationVue extends Panel implements Rafraichissable {
37
 
37
 
38
	private String id = "cartographie_observation";
38
	private String id = "cartographie_observation";
39
	
39
	
40
	private ObservationMediateur oMediateur = null;
40
	private ObservationMediateur oMediateur = null;
41
	
41
	
42
	Panel panneauCarto = null;
42
	Panel panneauCarto = null;
43
	private MapWidget map;
43
	private MapWidget map;
44
	
44
	
45
	private boolean carteAjoutee = false;
45
	private boolean carteAjoutee = false;
46
	private boolean requeteEnCours = false;
46
	private boolean requeteEnCours = false;
47
	
47
	
48
	String valeurCommune = "Bourges";
48
	String valeurCommune = "Bourges";
49
	LatLng centreFrance = null;
49
	LatLng centreFrance = null;
50
	LatLng pointCommune = null;
50
	LatLng pointCommune = null;
51
	String codeCommune = "";
51
	String codeCommune = "";
52
	
52
	
53
	int niveauZoom = 13;
53
	int niveauZoom = 13;
54
 
54
 
55
	Label panneauExplication = new Label(
55
	Label panneauExplication = new Label(
56
			"Précisez le lieu de votre observation et cliquez sur OK. Les coordonnées sont données en degrés décimaux, comptés positivement vers le Nord pour la latitude, et vers l'Est pour la longitude");
56
			"Précisez le lieu de votre observation et cliquez sur OK. Les coordonnées sont données en degrés décimaux, comptés positivement vers le Nord pour la latitude, et vers l'Est pour la longitude");
57
 
57
 
58
	private InfoWindow info;
58
	private InfoWindow info;
59
 
59
 
60
	private boolean listenerInitialise = false;
60
	private boolean listenerInitialise = false;
61
 
61
 
62
	public CartographieObservationVue(ObservationMediateur om) {
62
	public CartographieObservationVue(ObservationMediateur om) {
63
		
63
		
64
		oMediateur = om;
64
		oMediateur = om;
65
		
65
		
66
		setTitle("Carto");
66
		setTitle("Carto");
67
		setAutoWidth(true);
67
		setAutoWidth(true);
68
		setPaddings(10);
68
		setPaddings(10);
69
 
69
 
70
		panneauCarto = new Panel();
70
		panneauCarto = new Panel();
71
		panneauCarto.setLayout(new FitLayout());
71
		panneauCarto.setLayout(new FitLayout());
72
 
72
 
73
		setLayout(new RowLayout());
73
		setLayout(new RowLayout());
74
		
74
		
75
 
75
 
76
		add(panneauExplication, new RowLayoutData(12));
76
		add(panneauExplication, new RowLayoutData(12));
77
		add(panneauCarto, new RowLayoutData());
77
		add(panneauCarto, new RowLayoutData());
78
		
-
 
79
 
-
 
80
				
78
		
81
		if(!carteAjoutee) {
79
		if(!carteAjoutee) {
82
			Maps.loadMapsApi(Configuration.getCleGoogleMaps(), "2", false, new Runnable() {
80
			Maps.loadMapsApi(Configuration.getCleGoogleMaps(), "2", false, new Runnable() {
83
				public void run() {
81
				public void run() {
84
					initialiserCarte(false);
82
					initialiserCarte(false);
85
					recentrerCarte();
83
					recentrerCarte();
86
				}
84
				}
87
			});
85
			});
88
		}
86
		}
89
		
87
				
90
		addListener(new ContainerListenerAdapter() {
88
		addListener(new ContainerListenerAdapter() {
91
			
89
			
92
			public void onAfterLayout(Container c) {
90
			public void onAfterLayout(Container c) {
93
				
91
				
94
				if(carteAjoutee) {
92
				if(carteAjoutee) {
95
					
93
					
96
					if((panneauCarto.getHeight() - 20) > map.getSize().getHeight()) {
94
					if((panneauCarto.getHeight() - 20) > map.getSize().getHeight()) {
97
						map.setSize(map.getSize().getWidth()+"px", (panneauCarto.getHeight() - 20)+"px");
95
						map.setSize(map.getSize().getWidth()+"px", (panneauCarto.getHeight() - 20)+"px");
98
					}
96
					}
99
					panneauCarto.setHeight("100%");
97
					panneauCarto.setHeight("100%");
100
					panneauCarto.doLayout();
98
					panneauCarto.doLayout();
101
				}
99
				}
102
			}
100
			}
103
		});
101
		});
104
		
102
		
105
		panneauCarto.setAutoHeight(true);
103
		panneauCarto.setAutoHeight(true);
106
	}
104
	}
107
	
105
	
108
	public void masquerChargement(boolean masquer) {
106
	public void masquerChargement(boolean masquer) {
109
		if (masquer) {
107
		if (masquer) {
110
			ExtElement masked = Ext.get(id);
108
			ExtElement masked = Ext.get(id);
111
 
109
 
112
			if (masked != null) {
110
			if (masked != null) {
113
				masked.mask("Chargement");
111
				masked.mask("Chargement");
114
			}
112
			}
115
		} else {
113
		} else {
116
			ExtElement masked = Ext.get(id);
114
			ExtElement masked = Ext.get(id);
117
 
115
 
118
			if (masked != null) {
116
			if (masked != null) {
119
				masked.unmask();
117
				masked.unmask();
120
			}
118
			}
121
		}
119
		}
122
	}
120
	}
123
	
121
	
124
	public void obtenirInfosCommunes(LatLng coord) {
122
	public void obtenirInfosCommunes(LatLng coord) {
125
		oMediateur.obtenirInformationCoord(this, coord);
123
		oMediateur.obtenirInformationCoord(this, coord);
126
	}
124
	}
127
 
125
 
128
	public void mettreAJourInfos(final LatLng pointNouvelleCommune, String infosComplementaires, int zoom) {
126
	public void mettreAJourInfos(final LatLng pointNouvelleCommune, String infosComplementaires, int zoom) {
129
 
127
 
130
		if (!carteAjoutee) {
128
		if (!carteAjoutee) {
131
			initialiserCarte(true);
129
			initialiserCarte(true);
132
		}
130
		}
133
 
131
 
134
		pointCommune = pointNouvelleCommune;
132
		pointCommune = pointNouvelleCommune;
135
		map.clearOverlays();
133
		map.clearOverlays();
136
		Marker nmk = fabriquerMarqueur(pointCommune, infosComplementaires);
134
		Marker nmk = fabriquerMarqueur(pointCommune, infosComplementaires);
137
		map.addOverlay(nmk);
135
		map.addOverlay(nmk);
138
		afficherInfoMarker(nmk);
136
		afficherInfoMarker(nmk);
139
		recentrerCarte();
137
		recentrerCarte();
140
	}
138
	}
141
 
139
 
142
	public void initialiserCarte(boolean commune) {
140
	public void initialiserCarte(boolean commune) {
143
		
141
		
144
		centreFrance = LatLng.newInstance(47.0504, 2.2347);
142
		centreFrance = LatLng.newInstance(47.0504, 2.2347);
145
		pointCommune = centreFrance;
143
		pointCommune = centreFrance;
146
		
144
		
147
		map = new MapWidget(pointCommune, niveauZoom);
145
		map = new MapWidget(pointCommune, niveauZoom);
148
		panneauCarto.add(map);
146
		panneauCarto.add(map);
149
		panneauCarto.doLayout();
147
		panneauCarto.doLayout();
150
		info = map.getInfoWindow();
148
		info = map.getInfoWindow();
151
		if(!commune) {
149
		if(!commune) {
152
			fabriquerMarqueurIndication();
150
			fabriquerMarqueurIndication();
153
		}
151
		}
154
		map.checkResizeAndCenter();
152
		map.checkResizeAndCenter();
155
		map.setUIToDefault();
153
		map.setUIToDefault();
156
		map.addControl(new LargeMapControl());
154
		map.addControl(new LargeMapControl());
157
		map.setCurrentMapType(MapType.getHybridMap());
155
		map.setCurrentMapType(MapType.getHybridMap());
158
		carteAjoutee = true;
156
		carteAjoutee = true;
159
		panneauCarto.doLayout();
157
		panneauCarto.doLayout();
160
		
158
		
161
		map.addMapClickHandler(new MapClickHandler() {
159
		map.addMapClickHandler(new MapClickHandler() {
162
 
160
 
163
			public void onClick(MapClickEvent event) {
161
			public void onClick(MapClickEvent event) {
164
				//TODO : quoi faire du double clic ?
162
				//TODO : quoi faire du double clic ?
165
				obtenirInfosCommunes(event.getLatLng());
163
				obtenirInfosCommunes(event.getLatLng());
166
			}
164
			}
167
			
165
			
168
		});
166
		});
169
		
167
		
170
		map.addMapZoomEndHandler(new MapZoomEndHandler() {
168
		map.addMapZoomEndHandler(new MapZoomEndHandler() {
171
 
169
 
172
			public void onZoomEnd(MapZoomEndEvent event) {
170
			public void onZoomEnd(MapZoomEndEvent event) {
173
				niveauZoom = event.getNewZoomLevel();
171
				niveauZoom = event.getNewZoomLevel();
174
			}
172
			}
175
			
173
			
176
		});
174
		});
177
	}
175
	}
178
	
176
	
179
	public void fabriquerMarqueurIndication() {
177
	public void fabriquerMarqueurIndication() {
180
		Marker marker = fabriquerMarqueur(pointCommune,"");
178
		Marker marker = fabriquerMarqueur(pointCommune,"");
181
		map.addOverlay(marker);		
179
		map.addOverlay(marker);		
182
		info.open(marker, new InfoWindowContent("<div id=\"info_contenu\">"+
180
		info.open(marker, new InfoWindowContent("<div id=\"info_contenu\">"+
183
				"Déplacez ce marqueur pour localiser votre observation (commune et coordonnées)<br />"
181
				"Déplacez ce marqueur pour localiser votre observation (commune et coordonnées)<br />"
184
				+"longitude="
182
				+"longitude="
185
				+ marker.getLatLng().getLongitude() + "<br />latitude="
183
				+ marker.getLatLng().getLongitude() + "<br />latitude="
186
				+ marker.getLatLng().getLatitude() + "</div>"));
184
				+ marker.getLatLng().getLatitude() + "</div>"));
187
		map.setZoomLevel(3);
185
		map.setZoomLevel(3);
188
	}
186
	}
189
 
187
 
190
	public void AfficherMessageAucuneInfos() {
188
	public void AfficherMessageAucuneInfos() {
191
		mettreAJourInfos(centreFrance,"", niveauZoom);
189
		mettreAJourInfos(centreFrance,"", niveauZoom);
192
		Window.alert("Aucune information pour le nom donné");
190
		Window.alert("Aucune information pour le nom donné");
193
	}
191
	}
194
 
192
 
195
	public int getNiveauZoom() {
193
	public int getNiveauZoom() {
196
		return niveauZoom;
194
		return niveauZoom;
197
	}
195
	}
198
	
196
	
199
	private void ajouterListenerBouton(final String idBouton) {
197
	private void ajouterListenerBouton(final String idBouton) {
200
		
198
		
201
		final ExtElement bouton = Ext.get(idBouton);
199
		final ExtElement bouton = Ext.get(idBouton);
202
		
200
		
203
		if(bouton == null) {
201
		if(bouton == null) {
204
			Timer t = new Timer() {
202
			Timer t = new Timer() {
205
				public void run() {
203
				public void run() {
206
					ajouterListenerBouton(idBouton);
204
					ajouterListenerBouton(idBouton);
207
				}
205
				}
208
				
206
				
209
			};
207
			};
210
			t.schedule(500);
208
			t.schedule(500);
211
			return;
209
			return;
212
		}
210
		}
213
		
211
		
214
		bouton.addListener("click", new EventCallback() {
212
		bouton.addListener("click", new EventCallback() {
215
			public void execute(EventObject e) {
213
			public void execute(EventObject e) {
216
				EntiteGeographiqueObservation infosCommune = new EntiteGeographiqueObservation(codeCommune,valeurCommune,null,null);
214
				EntiteGeographiqueObservation infosCommune = new EntiteGeographiqueObservation(codeCommune,valeurCommune,null,null);
217
				infosCommune.setLat(pointCommune.getLatitude()+"");
215
				infosCommune.setLat(pointCommune.getLatitude()+"");
218
				infosCommune.setLon(pointCommune.getLongitude()+"");
216
				infosCommune.setLon(pointCommune.getLongitude()+"");
219
				oMediateur.rafraichirSaisieCommuneObservation(infosCommune);
217
				oMediateur.rafraichirSaisieCommuneObservation(infosCommune);
220
			}
218
			}
221
		});	
219
		});	
222
		
220
		
223
		bouton.focus();
221
		bouton.focus();
224
	}
222
	}
225
 
223
 
226
	public void rafraichir(Object nouvelleDonnees,
224
	public void rafraichir(Object nouvelleDonnees,
227
			boolean repandreRaffraichissement) {
225
			boolean repandreRaffraichissement) {
228
		if (nouvelleDonnees instanceof String) {
226
		if (nouvelleDonnees instanceof String) {
229
			
227
			
230
			if(isVisible()) {
228
			if(isVisible()) {
231
				Window.alert((String)nouvelleDonnees);
229
				Window.alert((String)nouvelleDonnees);
232
			}
230
			}
233
		}
231
		}
234
 
232
 
235
		if (nouvelleDonnees instanceof EntiteGeographiqueObservation) {
233
		if (nouvelleDonnees instanceof EntiteGeographiqueObservation) {
236
			
234
			
237
			EntiteGeographiqueObservation infos = (EntiteGeographiqueObservation) nouvelleDonnees;
235
			EntiteGeographiqueObservation infos = (EntiteGeographiqueObservation) nouvelleDonnees;
238
			LatLng coord = LatLng.newInstance(Double.parseDouble(infos.getLat()),
236
			LatLng coord = LatLng.newInstance(Double.parseDouble(infos.getLat()),
239
					Double.parseDouble(infos.getLon()));
237
					Double.parseDouble(infos.getLon()));
240
			
238
			
241
			valeurCommune = infos.getCommune();
239
			valeurCommune = infos.getCommune();
242
			codeCommune = infos.getIdLocalite();
240
			codeCommune = infos.getIdLocalite();
243
			pointCommune = coord;
241
			pointCommune = coord;
244
			
242
			
245
			mettreAJourInfos(coord, "", niveauZoom);
243
			mettreAJourInfos(coord, "", niveauZoom);
246
		}
244
		}
247
		
245
		
248
		masquerChargement(false);
246
		masquerChargement(false);
249
	}
247
	}
250
	
248
	
251
	public Marker fabriquerMarqueur(LatLng pointMarqueur, final String texte) {
249
	public Marker fabriquerMarqueur(LatLng pointMarqueur, final String texte) {
252
		// ajout de marqueurs déplacables, qui affichent une bulle d'information
250
		// ajout de marqueurs déplacables, qui affichent une bulle d'information
253
		MarkerOptions options = MarkerOptions.newInstance();
251
		MarkerOptions options = MarkerOptions.newInstance();
254
		options.setDraggable(true);
252
		options.setDraggable(true);
255
		final Marker marker = new Marker(pointMarqueur, options);
253
		final Marker marker = new Marker(pointMarqueur, options);
256
		
254
		
257
		marker.addMarkerDragEndHandler(new MarkerDragEndHandler() {
255
		marker.addMarkerDragEndHandler(new MarkerDragEndHandler() {
258
			public void onDragEnd(MarkerDragEndEvent event) {
256
			public void onDragEnd(MarkerDragEndEvent event) {
259
				obtenirInfosCommunes(marker.getLatLng());
257
				obtenirInfosCommunes(marker.getLatLng());
260
			}
258
			}
261
 
259
 
262
		});
260
		});
263
 
261
 
264
		marker.addMarkerDragStartHandler(new MarkerDragStartHandler() {
262
		marker.addMarkerDragStartHandler(new MarkerDragStartHandler() {
265
			public void onDragStart(MarkerDragStartEvent event) {
263
			public void onDragStart(MarkerDragStartEvent event) {
266
				info.setVisible(false);
264
				info.setVisible(false);
267
			}
265
			}
268
		});
266
		});
269
		
267
		
270
		marker.addMarkerClickHandler(new MarkerClickHandler() {
268
		marker.addMarkerClickHandler(new MarkerClickHandler() {
271
 
269
 
272
			public void onClick(MarkerClickEvent event) {
270
			public void onClick(MarkerClickEvent event) {
273
				if(info.isVisible()) {
271
				if(info.isVisible()) {
274
					info.close();
272
					info.close();
275
				} else {
273
				} else {
276
					afficherInfoMarker(marker);
274
					afficherInfoMarker(marker);
277
				}
275
				}
278
			}	
276
			}	
279
		});
277
		});
280
		
278
		
281
		return marker;
279
		return marker;
282
	}
280
	}
283
 
281
 
284
	public void recentrerCarte() {
282
	public void recentrerCarte() {
285
		
283
		
286
		if(this.getWidth() > 12 && this.getHeight() > 24) {
284
		if(this.getWidth() > 12 && this.getHeight() > 24) {
287
			map.setSize((this.getWidth() - 12)+"px" , (this.getHeight() - 24)+"px");
285
			map.setSize((this.getWidth() - 12)+"px" , (this.getHeight() - 24)+"px");
288
			panneauCarto.setSize((this.getWidth() - 12)+"px" , (this.getHeight() - 12)+"px");
286
			panneauCarto.setSize((this.getWidth() - 12)+"px" , (this.getHeight() - 12)+"px");
289
		}
287
		}
290
		map.setCenter(pointCommune, niveauZoom);
288
		map.setCenter(pointCommune, niveauZoom);
291
		map.checkResizeAndCenter();
289
		map.checkResizeAndCenter();
292
	}
290
	}
293
 
291
 
294
	public boolean isCarteAjoutee() {
292
	public boolean isCarteAjoutee() {
295
		return carteAjoutee;
293
		return carteAjoutee;
296
	}
294
	}
297
	
295
	
298
	public void afficherInfoMarker(Marker marker) {
296
	public void afficherInfoMarker(Marker marker) {
299
		
297
		
300
		final String htmlBoutonOk = "<br /><button id=\"okMap\" class=\"x-btn-text\" type=\"button\">OK</button>";
298
		final String htmlBoutonOk = "<br /><button id=\"okMap\" class=\"x-btn-text\" type=\"button\">OK</button>";
301
 
299
 
302
		String contenuMarker = "";
300
		String contenuMarker = "";
303
		
301
		
304
		if(valeurCommune == null || valeurCommune.trim().equals("")) {
302
		if(valeurCommune == null || valeurCommune.trim().equals("")) {
305
			contenuMarker = "<div id=\"info_contenu\">"+
303
			contenuMarker = "<div id=\"info_contenu\">"+
306
			"Aucune commune française trouvée à cet emplacement <br />"
304
			"Aucune commune française trouvée à cet emplacement <br />"
307
			+"Déplacez ce marqueur pour localiser votre observation (commune et coordonnées)<br />"
305
			+"Déplacez ce marqueur pour localiser votre observation (commune et coordonnées)<br />"
308
			+"longitude="
306
			+"longitude="
309
			+ marker.getLatLng().getLongitude() + "<br />latitude="
307
			+ marker.getLatLng().getLongitude() + "<br />latitude="
310
			+ marker.getLatLng().getLatitude() + "</div>";
308
			+ marker.getLatLng().getLatitude() + "</div>";
311
		} else {
309
		} else {
312
			contenuMarker = ""
310
			contenuMarker = ""
313
			+valeurCommune+" ("+codeCommune+")<br />"
311
			+valeurCommune+" ("+codeCommune+")<br />"
314
			+"longitude="
312
			+"longitude="
315
			+ marker.getLatLng().getLongitude() + "<br />latitude="
313
			+ marker.getLatLng().getLongitude() + "<br />latitude="
316
			+ marker.getLatLng().getLatitude() ;
314
			+ marker.getLatLng().getLatitude() ;
317
		}
315
		}
318
		
316
		
319
		info.open(marker, new InfoWindowContent(""
317
		info.open(marker, new InfoWindowContent(""
320
				+ contenuMarker
318
				+ contenuMarker
321
				+ htmlBoutonOk));
319
				+ htmlBoutonOk));
322
		
320
		
323
		recentrerCarte();
321
		recentrerCarte();
324
		ajouterListenerBouton("okMap");
322
		ajouterListenerBouton("okMap");
325
	}
323
	}
326
 
324
 
327
}
325
}