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 :

http://dive4elements.wald.intevation.org