diff --git a/pom.xml b/pom.xml index 64f8f3e..9fdc94b 100644 --- a/pom.xml +++ b/pom.xml @@ -63,6 +63,13 @@ compile + + com.github.gwtbootstrap + gwt-bootstrap + 2.3.2.0 + compile + + diff --git a/src/main/java/org/gcube/portlets/user/gisviewerapp/client/ApplicationController.java b/src/main/java/org/gcube/portlets/user/gisviewerapp/client/ApplicationController.java index af79fca..f8b6883 100644 --- a/src/main/java/org/gcube/portlets/user/gisviewerapp/client/ApplicationController.java +++ b/src/main/java/org/gcube/portlets/user/gisviewerapp/client/ApplicationController.java @@ -22,6 +22,7 @@ import com.google.gwt.core.shared.GWT; import com.google.gwt.user.client.Command; import com.google.gwt.user.client.Timer; import com.google.gwt.user.client.Window; +import com.google.gwt.user.client.ui.DialogBox; import com.google.gwt.user.client.ui.RootPanel; /** @@ -29,7 +30,7 @@ import com.google.gwt.user.client.ui.RootPanel; * @Oct 8, 2014 * */ -public class ApplicationController implements WmsDialogHandler{ +public class ApplicationController { /** * @@ -42,7 +43,9 @@ public class ApplicationController implements WmsDialogHandler{ private BaloonPanel balloonWMS; private LayoutContainer lcWMS = new LayoutContainer(); private WmsRequestConverter wmsRequestConverter; + @SuppressWarnings("unused") private final ApplicationController INSTANCE = this; + @SuppressWarnings("unused") private RootPanel gwtRootPanel; /** * @@ -96,17 +99,13 @@ public class ApplicationController implements WmsDialogHandler{ @Override protected void onExpand() { super.onExpand(); - if (gisViewerPanel!=null) gisViewerPanel.updateOpenLayersSize(); - -// resizeBar.show(); } @Override protected void onCollapse() { super.onCollapse(); -// resizeBar.hide(); } }; @@ -147,16 +146,33 @@ public class ApplicationController implements WmsDialogHandler{ } rootPanel.add(lcWMS); - lcWMS.setId("WMS"); Command cmd = new Command() { @Override public void execute() { - WmsDialog win = new WmsDialog(INSTANCE); - win.show(); + final DialogBox box = new DialogBox(true); + box.setText("Add External WMS Layer"); + box.getElement().getStyle().setZIndex(10000); + WmsForm form = new WmsForm() { + + @Override + public void closeHandler() { + box.hide(); + } + + @Override + public void subtmitHandler(String title, String name, String wmsRequest) { + + gisViewerPanel.addLayerByWms(title, name, wmsRequest, false, false); + box.hide(); + } + }; + box.setWidget(form); +// box.setSize("auto", "auto"); + box.center(); } }; @@ -172,6 +188,7 @@ public class ApplicationController implements WmsDialogHandler{ * @param wmsRequest * @return */ + @SuppressWarnings("unused") private String decodeURLWithParamDelimiter(String wmsRequest, String delimiter){ return wmsRequest.replaceAll(delimiter, "&"); } @@ -203,22 +220,6 @@ public class ApplicationController implements WmsDialogHandler{ return balloonWMS; } - /* (non-Javadoc) - * @see org.gcube.portlets.user.gisviewerapp.client.WmsDialogHandler#addWmsLayer(java.lang.String, java.lang.String, java.lang.String) - */ - @Override - public void addWmsLayer(String displayName, String url) { - try { - wmsRequestConverter.parseRequest(url, displayName); - wmsRequestConverter.addRequestToGisViewer(); - } catch (Exception e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - } - - - /** * Safe function call on a component, which was rendered or not. * diff --git a/src/main/java/org/gcube/portlets/user/gisviewerapp/client/WmsDialog.java b/src/main/java/org/gcube/portlets/user/gisviewerapp/client/WmsDialog.java deleted file mode 100644 index cc7e57f..0000000 --- a/src/main/java/org/gcube/portlets/user/gisviewerapp/client/WmsDialog.java +++ /dev/null @@ -1,130 +0,0 @@ -package org.gcube.portlets.user.gisviewerapp.client; -import com.extjs.gxt.ui.client.Style.Scroll; -import com.extjs.gxt.ui.client.event.BaseEvent; -import com.extjs.gxt.ui.client.event.ButtonEvent; -import com.extjs.gxt.ui.client.event.ComponentEvent; -import com.extjs.gxt.ui.client.event.Events; -import com.extjs.gxt.ui.client.event.KeyListener; -import com.extjs.gxt.ui.client.event.Listener; -import com.extjs.gxt.ui.client.event.SelectionListener; -import com.extjs.gxt.ui.client.widget.Dialog; -import com.extjs.gxt.ui.client.widget.MessageBox; -import com.extjs.gxt.ui.client.widget.VerticalPanel; -import com.extjs.gxt.ui.client.widget.button.Button; -import com.extjs.gxt.ui.client.widget.form.FormPanel; -import com.extjs.gxt.ui.client.widget.form.TextField; -import com.extjs.gxt.ui.client.widget.layout.FormData; -import com.google.gwt.event.dom.client.KeyCodes; - -/** - * - * @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it - * @Dec 2, 2014 - * - */ -public class WmsDialog extends Dialog { - - private static final String WMS_DIALOG_HEADING = "Add WMS Layer"; - private TextField displayName = new TextField(); - private TextField url = new TextField(); - private WmsDialogHandler handler; - private FormData formData; - private FormPanel form; - - /** - * - */ - public WmsDialog(WmsDialogHandler handler) { - super(); - this.handler = handler; - this.setHeading(WMS_DIALOG_HEADING); - this.setButtons(Dialog.OK); - //dialog.setBodyStyleName("pad-text"); -// this.setAutoWidth(true); - this.setModal(true); - this.setWidth(400); - this.setScrollMode(Scroll.AUTO); - this.setClosable(true); - this.setHideOnButtonClick(true); - this.addListener(Events.Close, new Listener() { - public void handleEvent(BaseEvent be) { - hide(); - } - }); - - Button okButton = (Button)(this.getButtonBar().getItemByItemId("ok")); - okButton.removeAllListeners(); - okButton.addSelectionListener(new SelectionListener() { - @Override - public void componentSelected(ButtonEvent ce) { - submit(); - } - }); - -// this.addListener(Events.clos, new Listener() { -// public void handleEvent(BaseEvent be) { -// hide(); -// } -// }); - - KeyListener keyListener = new KeyListener(){ - @Override - public void componentKeyDown(ComponentEvent event) { - super.componentKeyDown(event); - if (event.getKeyCode() == KeyCodes.KEY_ENTER) - submit(); - } - }; - - VerticalPanel vp = new VerticalPanel(); - - // init title field - displayName = new TextField(); - displayName.setWidth(300); - displayName.setAllowBlank(true); - displayName.setFieldLabel("TITLE"); - displayName.setEmptyText("Enter layer display title (optional)..."); - displayName.addKeyListener(keyListener); - - // init title field - url = new TextField(); - url.setWidth(300); - url.setAllowBlank(false); - url.setFieldLabel("Layer WMS URL"); - url.setEmptyText("Enter layer WMS URL..."); - url.addKeyListener(keyListener); - - createForm(); - } - - /** - * - */ - private void createForm() { - formData = new FormData("-20"); - - form = new FormPanel(); -// form.setHeading(WMS_DIALOG_HEADING); - form.setFrame(true); - form.setHeaderVisible(false); - - form.add(displayName, formData); - form.add(url, formData); - - displayName.setAllowBlank(true); - url.setAllowBlank(false); - - this.add(form); - } - - private void submit() { - String name = this.displayName.getValue(); - String url = this.url.getValue(); - if (url==null) - MessageBox.alert("Error", "Insert a valid WMS URL", null); - else { - handler.addWmsLayer(name, url); - this.hide(); - } - } -} \ No newline at end of file diff --git a/src/main/java/org/gcube/portlets/user/gisviewerapp/client/WmsDialogHandler.java b/src/main/java/org/gcube/portlets/user/gisviewerapp/client/WmsDialogHandler.java deleted file mode 100644 index 33c68fe..0000000 --- a/src/main/java/org/gcube/portlets/user/gisviewerapp/client/WmsDialogHandler.java +++ /dev/null @@ -1,18 +0,0 @@ -package org.gcube.portlets.user.gisviewerapp.client; - -/** - * - * @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it - * @Nov 27, 2014 - * - */ -public interface WmsDialogHandler { - - - /** - * @param displayTitle - * @param url - */ - void addWmsLayer(String displayTitle, String url); - -} diff --git a/src/main/java/org/gcube/portlets/user/gisviewerapp/client/WmsForm.java b/src/main/java/org/gcube/portlets/user/gisviewerapp/client/WmsForm.java new file mode 100644 index 0000000..ea74ca6 --- /dev/null +++ b/src/main/java/org/gcube/portlets/user/gisviewerapp/client/WmsForm.java @@ -0,0 +1,277 @@ +/** + * + */ +package org.gcube.portlets.user.gisviewerapp.client; + +import com.github.gwtbootstrap.client.ui.Alert; +import com.github.gwtbootstrap.client.ui.Button; +import com.github.gwtbootstrap.client.ui.ControlGroup; +import com.github.gwtbootstrap.client.ui.FluidRow; +import com.github.gwtbootstrap.client.ui.Form; +import com.github.gwtbootstrap.client.ui.TextBox; +import com.github.gwtbootstrap.client.ui.constants.AlertType; +import com.github.gwtbootstrap.client.ui.constants.ControlGroupType; +import com.google.gwt.core.client.GWT; +import com.google.gwt.event.dom.client.ClickEvent; +import com.google.gwt.event.dom.client.ClickHandler; +import com.google.gwt.event.dom.client.KeyCodes; +import com.google.gwt.event.dom.client.KeyDownEvent; +import com.google.gwt.event.dom.client.KeyDownHandler; +import com.google.gwt.uibinder.client.UiBinder; +import com.google.gwt.uibinder.client.UiField; +import com.google.gwt.user.client.ui.Composite; +import com.google.gwt.user.client.ui.HasHorizontalAlignment; +import com.google.gwt.user.client.ui.HorizontalPanel; +import com.google.gwt.user.client.ui.Widget; + +/** + * The Class AbstractFormRelease. + * + * @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it + * Feb 19, 2015 + */ +public abstract class WmsForm extends Composite { + + @UiField + TextBox input_WMS_URI; + + @UiField + TextBox input_layer_name; + + @UiField + TextBox input_layer_title; + + @UiField + Button submit_add_layer; + + @UiField + Button close_dialog; + + @UiField + Form form_wms_add_layer; + + @UiField + ControlGroup input_WMS_URI_group; + + @UiField + ControlGroup input_layer_title_group; + + @UiField + ControlGroup input_layer_name_group; + + @UiField + FluidRow validator_field; + + @UiField + HorizontalPanel hp_form_actions; + + private Alert alertError = new Alert("Required Field"); + + private Alert alertSubmitResult = new Alert(""); + + private static AbstractFormReleaseUiBinder uiBinder = GWT.create(AbstractFormReleaseUiBinder.class); + + private int width = 300; + + /** + * Subtmit handler. + */ + public abstract void subtmitHandler(String title, String name, String wmsRequest); + + /** + * Close handler. + */ + public abstract void closeHandler(); + + + /** + * The Interface AbstractFormReleaseUiBinder. + * + * @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it + * Feb 19, 2015 + */ + interface AbstractFormReleaseUiBinder extends UiBinder { + } + + /** + * Instantiates a new abstract form release. + */ + public WmsForm() { + initWidget(uiBinder.createAndBindUi(this)); +// setSize(width+"px", "200px"); + input_layer_name.setWidth((width-10)+"px"); + input_layer_title.setWidth((width-10)+"px"); + input_WMS_URI.setWidth((width-10)+"px"); + + close_dialog.addClickHandler(new ClickHandler() { + + @Override + public void onClick(ClickEvent event) { + closeHandler(); + + } + }); + + submit_add_layer.addClickHandler(new ClickHandler() { + + @Override + public void onClick(ClickEvent event) { + + if(validateForm()){ + subtmitHandler(getInputLayerTitle().getValue(), getInputLayerName().getValue(), getInputWMSURI().getValue()); + } + } + }); + + input_WMS_URI.addKeyDownHandler(new KeyDownHandler() { + + @Override + public void onKeyDown(KeyDownEvent event) { +// super.componentKeyDown(event); + if (event.getNativeKeyCode() == KeyCodes.KEY_ENTER){ + if(validateForm()) + subtmitHandler(getInputLayerTitle().getValue(), getInputLayerName().getValue(), getInputWMSURI().getValue()); + } + } + }); + + input_layer_name_group.addStyleName("marginTop10"); + input_layer_title_group.addStyleName("marginTop10"); + input_WMS_URI_group.addStyleName("marginTop10"); + + alertError.addStyleName("marginTop10"); + alertError.setType(AlertType.ERROR); + alertError.setVisible(false); + alertError.setClose(false); + validator_field.add(alertError); + +// alertSubmitResult.addStyleName("marginTop10"); + alertSubmitResult.setType(AlertType.INFO); + alertSubmitResult.setVisible(false); + alertSubmitResult.setClose(false); + + hp_form_actions.setCellHorizontalAlignment(close_dialog, HasHorizontalAlignment.ALIGN_RIGHT); + + showAlertSubmitResult(false, ""); + form_wms_add_layer.add(alertSubmitResult); + } + + /** + * Validate form. + * + * @return true, if successful + */ + public boolean validateForm(){ + + boolean valid = true; +// input_layer_name.setType(ControlGroupType.NONE); + input_layer_name_group.setType(ControlGroupType.NONE); + input_WMS_URI_group.setType(ControlGroupType.NONE); + + if(input_layer_name.getValue()==null || input_layer_name.getValue().isEmpty()){ + input_layer_name.setControlGroup(input_layer_name_group); + input_layer_name_group.setType(ControlGroupType.ERROR); + + valid = false; + } + + if(input_WMS_URI.getValue()==null || input_WMS_URI.getValue().isEmpty()){ + input_WMS_URI.setControlGroup(input_WMS_URI_group); + input_WMS_URI_group.setType(ControlGroupType.ERROR); + + valid = false; + } + +// alertError.setVisible(!valid); + setAlertErrorVisible(!valid); + return valid; + } + + /** + * Show alert submit result. + * + * @param visible the visible + * @param text the text + */ + public void showAlertSubmitResult(boolean visible, String text){ + alertSubmitResult.setText(text); + alertSubmitResult.setVisible(visible); + } + + /** + * Gets the submit_button. + * + * @return the submit_button + */ + public Button getSubmit_button() { + return submit_add_layer; + } + + /** + * Gets the validator_field. + * + * @return the validator_field + */ + public FluidRow getValidator_field() { + return validator_field; + } + + /** + * Gets the alert error. + * + * @return the alert error + */ + public Alert getAlertError() { + return alertError; + } + + /** + * Gets the alert submit result. + * + * @return the alert submit result + */ + public Alert getAlertSubmitResult() { + return alertSubmitResult; + } + + /** + * Sets the alert error visible. + * + * @param bool the new alert error visible + */ + public void setAlertErrorVisible(boolean bool){ + alertError.setVisible(bool); + } + + + /** + * Gets the input wmsuri. + * + * @return the input wmsuri + */ + public TextBox getInputWMSURI() { + return input_WMS_URI; + } + + + /** + * Gets the input layer name. + * + * @return the input layer name + */ + public TextBox getInputLayerName() { + return input_layer_name; + } + + + /** + * Gets the input layer title. + * + * @return the input layer title + */ + public TextBox getInputLayerTitle() { + return input_layer_title; + } + + +} diff --git a/src/main/java/org/gcube/portlets/user/gisviewerapp/client/WmsForm.ui.xml b/src/main/java/org/gcube/portlets/user/gisviewerapp/client/WmsForm.ui.xml new file mode 100644 index 0000000..1d7d306 --- /dev/null +++ b/src/main/java/org/gcube/portlets/user/gisviewerapp/client/WmsForm.ui.xml @@ -0,0 +1,41 @@ + + + + + + + Layer Title + + + + + + + Layer Name + + + + + + + WMS request + + + + + + + + + Add Layer + Close + + + + \ No newline at end of file diff --git a/src/main/resources/org/gcube/portlets/user/gisviewerapp/GisViewerApp.gwt.xml b/src/main/resources/org/gcube/portlets/user/gisviewerapp/GisViewerApp.gwt.xml index 617903a..9263388 100644 --- a/src/main/resources/org/gcube/portlets/user/gisviewerapp/GisViewerApp.gwt.xml +++ b/src/main/resources/org/gcube/portlets/user/gisviewerapp/GisViewerApp.gwt.xml @@ -3,7 +3,7 @@ - + diff --git a/src/main/webapp/GisViewerApp.css b/src/main/webapp/GisViewerApp.css index 4d5e7f3..b422632 100644 --- a/src/main/webapp/GisViewerApp.css +++ b/src/main/webapp/GisViewerApp.css @@ -33,8 +33,7 @@ h1 { .baloonPanel { padding: 5px; -/* border: solid; */ -/* border-width: 1px; */ + /* border: solid; */ /* border-width: 1px; */ border-color: rgb(200, 210, 240); /* border-radius: 15px; */ -webkit-border-top-right-radius: 5px; @@ -45,15 +44,32 @@ h1 { border-bottom-right-radius: 5px; background-color: #4B79B4; color: #D2D2D2; -/* font-family: verdana, arial; */ - font-size: 12px; - margin-left: 2px; - opacity: 0.8; - font-family: sans-serif, arial; - font-weight: bold; + /* font-family: verdana, arial; */ + font-size: 12px; + margin-left: 2px; + opacity: 0.8; + font-family: sans-serif, arial; + font-weight: bold; } .baloonPanel :HOVER { - cursor: pointer; - color: #FFF; + cursor: pointer; + color: #FFF; +} + +.margin10 { + margin: 10px; +} + +.marginTop10 { + margin-top: 10px; +} + +.inputWmsDialog { + margin-top: 10px; + width: 100%; +} + +.noBorder { + border: none !important; } \ No newline at end of file