Subversion Repositories eFlore/Applications.cel

Rev

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

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