Mercurial > dive4elements > river
comparison gwt-client/src/main/java/org/dive4elements/river/client/client/ui/map/ExternalWMSWindow.java @ 5838:5aa05a7a34b7
Rename modules to more fitting names.
author | Sascha L. Teichmann <teichmann@intevation.de> |
---|---|
date | Thu, 25 Apr 2013 15:23:37 +0200 |
parents | flys-client/src/main/java/org/dive4elements/river/client/client/ui/map/ExternalWMSWindow.java@821a02bbfb4e |
children | 172338b1407f |
comparison
equal
deleted
inserted
replaced
5837:d9901a08d0a6 | 5838:5aa05a7a34b7 |
---|---|
1 package org.dive4elements.river.client.client.ui.map; | |
2 | |
3 import java.util.ArrayList; | |
4 import java.util.List; | |
5 import java.util.Map; | |
6 import java.util.LinkedHashMap; | |
7 | |
8 import com.google.gwt.core.client.GWT; | |
9 import com.google.gwt.user.client.rpc.AsyncCallback; | |
10 | |
11 import com.smartgwt.client.util.SC; | |
12 import com.smartgwt.client.widgets.Button; | |
13 import com.smartgwt.client.widgets.Canvas; | |
14 import com.smartgwt.client.widgets.Window; | |
15 import com.smartgwt.client.widgets.form.DynamicForm; | |
16 import com.smartgwt.client.widgets.form.fields.ComboBoxItem; | |
17 import com.smartgwt.client.widgets.events.ClickEvent; | |
18 import com.smartgwt.client.widgets.events.ClickHandler; | |
19 import com.smartgwt.client.widgets.grid.ListGridRecord; | |
20 import com.smartgwt.client.widgets.layout.HLayout; | |
21 import com.smartgwt.client.widgets.layout.Layout; | |
22 import com.smartgwt.client.widgets.layout.VLayout; | |
23 | |
24 import org.dive4elements.river.client.shared.model.Capabilities; | |
25 import org.dive4elements.river.client.shared.model.WMSLayer; | |
26 import org.dive4elements.river.client.client.FLYSConstants; | |
27 import org.dive4elements.river.client.client.services.GCService; | |
28 import org.dive4elements.river.client.client.services.GCServiceAsync; | |
29 import org.dive4elements.river.client.client.services.MapUrlService; | |
30 import org.dive4elements.river.client.client.services.MapUrlServiceAsync; | |
31 | |
32 | |
33 public class ExternalWMSWindow extends Window { | |
34 | |
35 public interface LayerLoader { | |
36 void load(List<WMSLayer> toLoad); | |
37 } // end of interface WMSLayerLoader | |
38 | |
39 | |
40 protected GCServiceAsync gcService = GWT.create(GCService.class); | |
41 protected MapUrlServiceAsync muService = GWT.create(MapUrlService.class); | |
42 protected FLYSConstants MSG = GWT.create(FLYSConstants.class); | |
43 | |
44 protected Layout inputPanel; | |
45 protected Layout infoPanel; | |
46 protected Layout layersPanel; | |
47 | |
48 protected Capabilities capabilites; | |
49 | |
50 protected String srs; | |
51 | |
52 protected LinkedHashMap<String, String> urls; | |
53 protected String url; | |
54 | |
55 protected LayerLoader loader; | |
56 | |
57 | |
58 public ExternalWMSWindow(LayerLoader loader) { | |
59 super(); | |
60 this.urls = new LinkedHashMap<String, String>(); | |
61 this.loader = loader; | |
62 } | |
63 | |
64 | |
65 public ExternalWMSWindow(LayerLoader loader, String srs) { | |
66 this(loader); | |
67 this.srs = srs; | |
68 } | |
69 | |
70 | |
71 protected void setUrl(String url) { | |
72 this.url = url; | |
73 } | |
74 | |
75 | |
76 protected String getUrl() { | |
77 return url; | |
78 } | |
79 | |
80 | |
81 protected String getCapabilitiesUrl() { | |
82 String cUrl = url; | |
83 | |
84 if (url.indexOf("?") >= 0) { | |
85 cUrl += "&SERVICE=WMS&REQUEST=GetCapabilities"; | |
86 } | |
87 else { | |
88 cUrl += "?SERVICE=WMS&REQUEST=GetCapabilities"; | |
89 } | |
90 | |
91 return cUrl; | |
92 } | |
93 | |
94 | |
95 protected void setCapabilites(Capabilities capabilites) { | |
96 this.capabilites = capabilites; | |
97 } | |
98 | |
99 | |
100 public void start() { | |
101 show(); | |
102 centerInPage(); | |
103 | |
104 goToInputPanel(); | |
105 } | |
106 | |
107 | |
108 protected void goToInputPanel() { | |
109 clearItems(); | |
110 | |
111 inputPanel = createInputPanel(); | |
112 | |
113 addItem(inputPanel); | |
114 | |
115 setWidth(380); | |
116 setHeight(140); | |
117 } | |
118 | |
119 | |
120 protected void goToInfoPanel() { | |
121 clearItems(); | |
122 | |
123 infoPanel = createInfoPanel(); | |
124 | |
125 addItem(infoPanel); | |
126 | |
127 setWidth(500); | |
128 setHeight(500); | |
129 | |
130 centerInPage(); | |
131 } | |
132 | |
133 | |
134 protected void goToLayersPanel() { | |
135 clearItems(); | |
136 | |
137 layersPanel = createLayersPanel(); | |
138 | |
139 addItem(layersPanel); | |
140 | |
141 setWidth(500); | |
142 setHeight(500); | |
143 } | |
144 | |
145 | |
146 protected void clearItems() { | |
147 Canvas[] items = getItems(); | |
148 | |
149 if (items != null) { | |
150 for (Canvas item: items) { | |
151 removeItem(item); | |
152 } | |
153 } | |
154 } | |
155 | |
156 | |
157 protected void setUrls(Map<String, String> urls) { | |
158 this.urls.putAll(urls); | |
159 } | |
160 | |
161 protected void readUrls() { | |
162 } | |
163 | |
164 | |
165 protected Layout createInputPanel() { | |
166 setTitle(MSG.addwmsInputTitle()); | |
167 | |
168 readUrls(); | |
169 | |
170 DynamicForm form = new DynamicForm(); | |
171 final ComboBoxItem url = new ComboBoxItem("Url:"); | |
172 url.setRedrawOnChange(true); | |
173 muService.getUrls(new AsyncCallback<Map<String, String> >() { | |
174 public void onFailure(Throwable caught) { | |
175 GWT.log("Error reading WMS-Services" + caught.getMessage()); | |
176 } | |
177 public void onSuccess(Map<String, String> wms) { | |
178 urls.putAll(wms); | |
179 url.setValueMap(urls); | |
180 | |
181 } | |
182 }); | |
183 | |
184 String oldUrl = getUrl(); | |
185 if (oldUrl != null && oldUrl.length() > 0) { | |
186 url.setValue(oldUrl); | |
187 } | |
188 | |
189 ClickHandler goHandler = new ClickHandler() { | |
190 @Override | |
191 public void onClick(ClickEvent e) { | |
192 String newUrl = url.getValue().toString(); | |
193 | |
194 if (!isUrlValid(newUrl)) { | |
195 SC.warn(MSG.addwmsInvalidURL()); | |
196 return; | |
197 } | |
198 | |
199 setUrl(newUrl); | |
200 | |
201 doCapabilitesRequest(); | |
202 } | |
203 }; | |
204 | |
205 ClickHandler cancelHandler = new ClickHandler() { | |
206 @Override | |
207 public void onClick(ClickEvent e) { | |
208 quit(); | |
209 } | |
210 }; | |
211 | |
212 VLayout root = new VLayout(); | |
213 root.setHeight(75); | |
214 root.setMargin(10); | |
215 root.setLayoutMargin(10); | |
216 | |
217 form.setFields(url); | |
218 root.addMember(form); | |
219 root.addMember(createButtonPanel(null, goHandler, cancelHandler)); | |
220 | |
221 return root; | |
222 } | |
223 | |
224 | |
225 protected Layout createInfoPanel() { | |
226 setTitle(MSG.addwmsInfoTitle()); | |
227 | |
228 ClickHandler backHandler = new ClickHandler() { | |
229 @Override | |
230 public void onClick(ClickEvent e) { | |
231 goToInputPanel(); | |
232 } | |
233 }; | |
234 | |
235 ClickHandler goHandler = new ClickHandler() { | |
236 @Override | |
237 public void onClick(ClickEvent e) { | |
238 goToLayersPanel(); | |
239 } | |
240 }; | |
241 | |
242 ClickHandler cancelHandler = new ClickHandler() { | |
243 @Override | |
244 public void onClick(ClickEvent e) { | |
245 quit(); | |
246 } | |
247 }; | |
248 | |
249 VLayout root = new VLayout(); | |
250 VLayout panel = new CapabilitiesPanel(capabilites); | |
251 | |
252 root.setLayoutMargin(10); | |
253 panel.setHeight(420); | |
254 | |
255 root.addMember(panel); | |
256 root.addMember(createButtonPanel(backHandler, goHandler, cancelHandler)); | |
257 | |
258 return root; | |
259 } | |
260 | |
261 | |
262 protected Layout createLayersPanel() { | |
263 setTitle(MSG.addwmsLayerTitle()); | |
264 | |
265 final WMSLayersTree tree = new WMSLayersTree(capabilites, srs); | |
266 | |
267 ClickHandler backHandler = new ClickHandler() { | |
268 @Override | |
269 public void onClick(ClickEvent e) { | |
270 goToInfoPanel(); | |
271 } | |
272 }; | |
273 | |
274 ClickHandler goHandler = new ClickHandler() { | |
275 @Override | |
276 public void onClick(ClickEvent e) { | |
277 ListGridRecord[] selection = tree.getSelectedRecords(); | |
278 | |
279 if (selection == null || selection.length == 0) { | |
280 return; | |
281 } | |
282 | |
283 List<WMSLayer> toLoad = new ArrayList<WMSLayer>(); | |
284 | |
285 for (ListGridRecord record: selection) { | |
286 toLoad.add( | |
287 ((WMSLayersTree.WMSLayerNode) record).getWMSLayer()); | |
288 | |
289 } | |
290 | |
291 finish(toLoad); | |
292 } | |
293 }; | |
294 | |
295 ClickHandler cancelHandler = new ClickHandler() { | |
296 @Override | |
297 public void onClick(ClickEvent e) { | |
298 quit(); | |
299 } | |
300 }; | |
301 | |
302 VLayout root = new VLayout(); | |
303 | |
304 root.setLayoutMargin(10); | |
305 tree.setHeight(420); | |
306 | |
307 root.addMember(tree); | |
308 root.addMember(createButtonPanel(backHandler, goHandler, cancelHandler)); | |
309 | |
310 return root; | |
311 } | |
312 | |
313 | |
314 /** | |
315 * @param back | |
316 * @param ok | |
317 * @param cancel | |
318 * | |
319 * @return | |
320 */ | |
321 protected Layout createButtonPanel( | |
322 ClickHandler backHandler, | |
323 ClickHandler goHandler, | |
324 ClickHandler cancelHandler | |
325 ) { | |
326 Button back = new Button(MSG.addwmsBack()); | |
327 Button go = new Button(MSG.addwmsContinue()); | |
328 Button cancel = new Button(MSG.addwmsCancel()); | |
329 | |
330 if (backHandler != null) { | |
331 back.addClickHandler(backHandler); | |
332 } | |
333 else { | |
334 back.setDisabled(true); | |
335 } | |
336 | |
337 if (goHandler != null) { | |
338 go.addClickHandler(goHandler); | |
339 } | |
340 else { | |
341 go.setDisabled(true); | |
342 } | |
343 | |
344 if (cancelHandler != null) { | |
345 cancel.addClickHandler(cancelHandler); | |
346 } | |
347 else { | |
348 cancel.setDisabled(true); | |
349 } | |
350 | |
351 HLayout buttonPanel = new HLayout(); | |
352 buttonPanel.setHeight(25); | |
353 buttonPanel.setMembersMargin(15); | |
354 buttonPanel.setLayoutTopMargin(10); | |
355 buttonPanel.addMember(back); | |
356 buttonPanel.addMember(go); | |
357 buttonPanel.addMember(cancel); | |
358 | |
359 return buttonPanel; | |
360 } | |
361 | |
362 | |
363 protected boolean isUrlValid(String url) { | |
364 // TODO Improve URL validation | |
365 return !(url == null || url.length() == 0); | |
366 } | |
367 | |
368 | |
369 protected void finish(List<WMSLayer> toLoad) { | |
370 loader.load(toLoad); | |
371 | |
372 quit(); | |
373 } | |
374 | |
375 | |
376 protected void quit() { | |
377 destroy(); | |
378 } | |
379 | |
380 | |
381 protected void doCapabilitesRequest() { | |
382 gcService.query(getCapabilitiesUrl(),new AsyncCallback<Capabilities>() { | |
383 public void onFailure(Throwable e) { | |
384 SC.warn(MSG.getString(e.getMessage())); | |
385 } | |
386 | |
387 public void onSuccess(Capabilities capabilites) { | |
388 setCapabilites(capabilites); | |
389 goToInfoPanel(); | |
390 } | |
391 }); | |
392 } | |
393 } | |
394 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 : |