Subversion Repositories eFlore/Applications.cel

Rev

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

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