ingo@1406: package de.intevation.flys.client.client.ui.map; ingo@1406: ingo@1408: import com.google.gwt.core.client.GWT; ingo@1408: import com.google.gwt.user.client.rpc.AsyncCallback; ingo@1406: import com.google.gwt.user.client.ui.TextBox; ingo@1406: ingo@1406: import com.smartgwt.client.util.SC; ingo@1406: import com.smartgwt.client.widgets.Button; ingo@1406: import com.smartgwt.client.widgets.Canvas; ingo@1406: import com.smartgwt.client.widgets.Window; ingo@1406: import com.smartgwt.client.widgets.events.ClickEvent; ingo@1406: import com.smartgwt.client.widgets.events.ClickHandler; ingo@1406: import com.smartgwt.client.widgets.layout.HLayout; ingo@1406: import com.smartgwt.client.widgets.layout.Layout; ingo@1406: import com.smartgwt.client.widgets.layout.VLayout; ingo@1406: ingo@1408: import de.intevation.flys.client.shared.model.Capabilities; ingo@1408: import de.intevation.flys.client.client.FLYSConstants; ingo@1408: import de.intevation.flys.client.client.services.GCService; ingo@1408: import de.intevation.flys.client.client.services.GCServiceAsync; ingo@1408: ingo@1406: ingo@1406: public class ExternalWMSWindow extends Window { ingo@1406: ingo@1408: protected GCServiceAsync gcService = GWT.create(GCService.class); ingo@1408: protected FLYSConstants MSG = GWT.create(FLYSConstants.class); ingo@1408: ingo@1406: protected Layout inputPanel; ingo@1406: protected Layout infoPanel; ingo@1406: protected Layout layersPanel; ingo@1406: ingo@1408: protected Capabilities capabilites; ingo@1408: ingo@1406: protected String url; ingo@1406: ingo@1406: ingo@1406: public ExternalWMSWindow() { ingo@1406: super(); ingo@1406: } ingo@1406: ingo@1406: ingo@1406: protected void setUrl(String url) { ingo@1406: this.url = url; ingo@1406: } ingo@1406: ingo@1406: ingo@1406: protected String getUrl() { ingo@1406: return url; ingo@1406: } ingo@1406: ingo@1406: ingo@1408: protected String getCapabilitiesUrl() { ingo@1408: String cUrl = url; ingo@1408: ingo@1408: if (url.indexOf("?") >= 0) { ingo@1408: cUrl += "&SERVICE=WMS&REQUEST=GetCapabilities"; ingo@1408: } ingo@1408: else { ingo@1408: cUrl += "?SERVICE=WMS&REQUEST=GetCapabilities"; ingo@1408: } ingo@1408: ingo@1408: return cUrl; ingo@1408: } ingo@1408: ingo@1408: ingo@1408: protected void setCapabilites(Capabilities capabilites) { ingo@1408: this.capabilites = capabilites; ingo@1408: } ingo@1408: ingo@1408: ingo@1406: public void start() { ingo@1406: show(); ingo@1406: centerInPage(); ingo@1406: ingo@1406: goToInputPanel(); ingo@1406: } ingo@1406: ingo@1406: ingo@1406: protected void goToInputPanel() { ingo@1406: clearItems(); ingo@1406: ingo@1406: inputPanel = createInputPanel(); ingo@1406: ingo@1406: addItem(inputPanel); ingo@1406: ingo@1406: setWidth(380); ingo@1406: setHeight(140); ingo@1406: } ingo@1406: ingo@1406: ingo@1406: protected void goToInfoPanel() { ingo@1406: clearItems(); ingo@1406: ingo@1406: infoPanel = createInfoPanel(); ingo@1406: ingo@1406: addItem(infoPanel); ingo@1406: ingo@1406: setWidth(500); ingo@1406: setHeight(500); ingo@1409: ingo@1409: centerInPage(); ingo@1406: } ingo@1406: ingo@1406: ingo@1406: protected void goToLayersPanel() { ingo@1406: clearItems(); ingo@1406: ingo@1406: layersPanel = createLayersPanel(); ingo@1406: ingo@1406: addItem(layersPanel); ingo@1406: ingo@1406: setWidth(500); ingo@1406: setHeight(500); ingo@1406: } ingo@1406: ingo@1406: ingo@1406: protected void clearItems() { ingo@1406: Canvas[] items = getItems(); ingo@1406: ingo@1406: if (items != null) { ingo@1406: for (Canvas item: items) { ingo@1406: removeItem(item); ingo@1406: } ingo@1406: } ingo@1406: } ingo@1406: ingo@1406: ingo@1406: protected Layout createInputPanel() { ingo@1410: setTitle(MSG.addwmsInputTitle()); ingo@1406: ingo@1406: final TextBox url = new TextBox(); ingo@1406: url.setHeight("25px"); ingo@1406: url.setWidth("326px"); ingo@1406: ingo@1406: String oldUrl = getUrl(); ingo@1406: if (oldUrl != null && oldUrl.length() > 0) { ingo@1406: url.setValue(oldUrl); ingo@1406: } ingo@1406: ingo@1406: ClickHandler goHandler = new ClickHandler() { ingo@1406: @Override ingo@1406: public void onClick(ClickEvent e) { ingo@1406: String newUrl = url.getValue(); ingo@1406: ingo@1406: if (!isUrlValid(newUrl)) { ingo@1410: SC.warn(MSG.addwmsInvalidURL()); ingo@1406: return; ingo@1406: } ingo@1406: ingo@1406: setUrl(url.getValue()); ingo@1408: ingo@1408: doCapabilitesRequest(); ingo@1406: } ingo@1406: }; ingo@1406: ingo@1406: ClickHandler cancelHandler = new ClickHandler() { ingo@1406: @Override ingo@1406: public void onClick(ClickEvent e) { ingo@1406: quit(); ingo@1406: } ingo@1406: }; ingo@1406: ingo@1406: VLayout root = new VLayout(); ingo@1406: root.setHeight(75); ingo@1406: root.setMargin(10); ingo@1406: root.setLayoutMargin(10); ingo@1406: ingo@1406: root.addMember(url); ingo@1406: root.addMember(createButtonPanel(null, goHandler, cancelHandler)); ingo@1406: ingo@1406: return root; ingo@1406: } ingo@1406: ingo@1406: ingo@1406: protected Layout createInfoPanel() { ingo@1410: setTitle(MSG.addwmsInfoTitle()); ingo@1406: ingo@1406: ClickHandler backHandler = new ClickHandler() { ingo@1406: @Override ingo@1406: public void onClick(ClickEvent e) { ingo@1406: goToInputPanel(); ingo@1406: } ingo@1406: }; ingo@1406: ingo@1406: ClickHandler goHandler = new ClickHandler() { ingo@1406: @Override ingo@1406: public void onClick(ClickEvent e) { ingo@1406: goToLayersPanel(); ingo@1406: } ingo@1406: }; ingo@1406: ingo@1406: ClickHandler cancelHandler = new ClickHandler() { ingo@1406: @Override ingo@1406: public void onClick(ClickEvent e) { ingo@1406: quit(); ingo@1406: } ingo@1406: }; ingo@1406: ingo@1408: VLayout root = new VLayout(); ingo@1408: VLayout panel = new CapabilitiesPanel(capabilites); ingo@1406: ingo@1408: root.setLayoutMargin(10); ingo@1408: panel.setHeight(420); ingo@1406: ingo@1408: root.addMember(panel); ingo@1406: root.addMember(createButtonPanel(backHandler, goHandler, cancelHandler)); ingo@1406: ingo@1406: return root; ingo@1406: } ingo@1406: ingo@1406: ingo@1406: protected Layout createLayersPanel() { ingo@1410: setTitle(MSG.addwmsLayerTitle()); ingo@1406: ingo@1406: ClickHandler backHandler = new ClickHandler() { ingo@1406: @Override ingo@1406: public void onClick(ClickEvent e) { ingo@1406: goToInfoPanel(); ingo@1406: } ingo@1406: }; ingo@1406: ingo@1406: ClickHandler goHandler = new ClickHandler() { ingo@1406: @Override ingo@1406: public void onClick(ClickEvent e) { ingo@1406: goToLayersPanel(); ingo@1406: } ingo@1406: }; ingo@1406: ingo@1406: ClickHandler cancelHandler = new ClickHandler() { ingo@1406: @Override ingo@1406: public void onClick(ClickEvent e) { ingo@1406: quit(); ingo@1406: } ingo@1406: }; ingo@1406: ingo@1411: VLayout root = new VLayout(); ingo@1411: WMSLayersTree tree = new WMSLayersTree(capabilites); ingo@1406: ingo@1411: root.setLayoutMargin(10); ingo@1411: tree.setHeight(420); ingo@1406: ingo@1411: root.addMember(tree); ingo@1406: root.addMember(createButtonPanel(backHandler, goHandler, cancelHandler)); ingo@1406: ingo@1406: return root; ingo@1406: } ingo@1406: ingo@1406: ingo@1406: /** ingo@1406: * @param back ingo@1406: * @param ok ingo@1406: * @param cancel ingo@1406: * ingo@1406: * @return ingo@1406: */ ingo@1406: protected Layout createButtonPanel( ingo@1406: ClickHandler backHandler, ingo@1406: ClickHandler goHandler, ingo@1406: ClickHandler cancelHandler ingo@1406: ) { ingo@1406: Button back = new Button("Back"); ingo@1406: Button go = new Button("Go on"); ingo@1406: Button cancel = new Button("Cancel"); ingo@1406: ingo@1406: if (backHandler != null) { ingo@1406: back.addClickHandler(backHandler); ingo@1406: } ingo@1406: else { ingo@1406: back.setDisabled(true); ingo@1406: } ingo@1406: ingo@1406: if (goHandler != null) { ingo@1406: go.addClickHandler(goHandler); ingo@1406: } ingo@1406: else { ingo@1406: go.setDisabled(true); ingo@1406: } ingo@1406: ingo@1406: if (cancelHandler != null) { ingo@1406: cancel.addClickHandler(cancelHandler); ingo@1406: } ingo@1406: else { ingo@1406: cancel.setDisabled(true); ingo@1406: } ingo@1406: ingo@1406: HLayout buttonPanel = new HLayout(); ingo@1406: buttonPanel.setHeight(25); ingo@1406: buttonPanel.setMembersMargin(15); ingo@1406: buttonPanel.setLayoutTopMargin(10); ingo@1406: buttonPanel.addMember(back); ingo@1406: buttonPanel.addMember(go); ingo@1406: buttonPanel.addMember(cancel); ingo@1406: ingo@1406: return buttonPanel; ingo@1406: } ingo@1406: ingo@1406: ingo@1406: protected boolean isUrlValid(String url) { ingo@1406: // TODO Improve URL validation ingo@1406: return !(url == null || url.length() == 0); ingo@1406: } ingo@1406: ingo@1406: ingo@1406: protected void quit() { ingo@1406: destroy(); ingo@1406: } ingo@1408: ingo@1408: ingo@1408: protected void doCapabilitesRequest() { ingo@1408: gcService.query(getCapabilitiesUrl(),new AsyncCallback() { ingo@1408: public void onFailure(Throwable e) { ingo@1408: SC.warn(MSG.getString(e.getMessage())); ingo@1408: } ingo@1408: ingo@1408: public void onSuccess(Capabilities capabilites) { ingo@1408: setCapabilites(capabilites); ingo@1408: goToInfoPanel(); ingo@1408: } ingo@1408: }); ingo@1408: } ingo@1406: } ingo@1406: // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :