Mike Kolesnik has uploaded a new change for review. Change subject: webadmin: Add gateway & DNS servers fields ......................................................................
webadmin: Add gateway & DNS servers fields Added the fields to external subnet creation flows to allow users to specify these values when creating a subnet. Change-Id: I8c958328e769badebe2d95359d3ae81e657205c2 Bug-Url: https://bugzilla.redhat.com/1064749 Signed-off-by: Mike Kolesnik <[email protected]> (cherry picked from commit 1b76e9d71abdb057205ebc534defe97e376fd119) --- M frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/providers/ExternalSubnetModel.java M frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/ApplicationConstants.java M frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/provider/ExternalSubnetPopupView.ui.xml A frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/widget/provider/DnsServerEditor.java A frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/widget/provider/DnsServersWidget.java A frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/widget/provider/DnsServersWidget.ui.xml M frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/widget/provider/ExternalSubnetWidget.java M frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/widget/provider/ExternalSubnetWidget.ui.xml 8 files changed, 229 insertions(+), 4 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/65/27365/1 diff --git a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/providers/ExternalSubnetModel.java b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/providers/ExternalSubnetModel.java index 6506967..93846ed 100644 --- a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/providers/ExternalSubnetModel.java +++ b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/providers/ExternalSubnetModel.java @@ -1,6 +1,8 @@ package org.ovirt.engine.ui.uicommonweb.models.providers; +import java.util.ArrayList; import java.util.Arrays; +import java.util.List; import org.ovirt.engine.core.common.businessentities.network.ExternalSubnet; import org.ovirt.engine.core.common.businessentities.network.ExternalSubnet.IpVersion; @@ -11,13 +13,18 @@ import org.ovirt.engine.ui.uicommonweb.validation.AsciiNameValidation; import org.ovirt.engine.ui.uicommonweb.validation.CidrValidation; import org.ovirt.engine.ui.uicommonweb.validation.IValidation; +import org.ovirt.engine.ui.uicommonweb.validation.IpAddressValidation; import org.ovirt.engine.ui.uicommonweb.validation.NotEmptyValidation; +import org.ovirt.engine.ui.uicompat.external.StringUtils; public class ExternalSubnetModel extends Model { private EntityModel<String> name; private EntityModel<String> cidr; private ListModel<IpVersion> ipVersion; + private EntityModel<String> gateway; + private ListModel<EntityModel<String>> dnsServers; + private ExternalSubnet subnet; private ProviderNetwork externalNetwork; @@ -26,6 +33,8 @@ setCidr(new EntityModel<String>()); setIpVersion(new ListModel<IpVersion>()); getIpVersion().setItems(Arrays.asList(IpVersion.values())); + setGateway(new EntityModel<String>()); + setDnsServers(new ListModel<EntityModel<String>>()); } public EntityModel<String> getName() { @@ -52,6 +61,22 @@ this.ipVersion = ipVersion; } + public EntityModel<String> getGateway() { + return gateway; + } + + private void setGateway(EntityModel<String> gateway) { + this.gateway = gateway; + } + + public ListModel<EntityModel<String>> getDnsServers() { + return dnsServers; + } + + private void setDnsServers(ListModel<EntityModel<String>> dnsServers) { + this.dnsServers = dnsServers; + } + public ExternalSubnet getSubnet() { return subnet; } @@ -68,6 +93,8 @@ getName().setIsChangable(value); getCidr().setIsChangable(value); getIpVersion().setIsChangable(value); + getGateway().setIsChangable(value); + getDnsServers().setIsChangable(value); } public void flush() { @@ -76,15 +103,42 @@ subnet.setExternalNetwork(getExternalNetwork()); subnet.setCidr(getCidr().getEntity()); subnet.setIpVersion(getIpVersion().getSelectedItem()); + subnet.setGateway(getGateway().getEntity()); + + List<String> dnsServers = new ArrayList<String>(); + for (EntityModel<String> dnsServer : getDnsServers().getItems()) { + if (StringUtils.isNotEmpty(dnsServer.getEntity())) { + dnsServers.add(dnsServer.getEntity()); + } + } + subnet.setDnsServers(dnsServers); } public boolean validate() { getName().validateEntity(new IValidation[] { new NotEmptyValidation(), new AsciiNameValidation() }); - getCidr().validateEntity(new IValidation[] { getIpVersion().getSelectedItem() == IpVersion.IPV4 + boolean ipv4 = getIpVersion().getSelectedItem() == IpVersion.IPV4; + getCidr().validateEntity(new IValidation[] { ipv4 ? new CidrValidation() : new NotEmptyValidation() }); getIpVersion().validateSelectedItem(new IValidation[] { new NotEmptyValidation() }); + getGateway().setIsValid(true); + if (StringUtils.isNotEmpty(getGateway().getEntity()) && ipv4) { + getGateway().validateEntity(new IValidation[] { new IpAddressValidation() }); + } - return getName().getIsValid() && getCidr().getIsValid() && getIpVersion().getIsValid(); + boolean dnsServersValid = true; + for (EntityModel<String> dnsServer : getDnsServers().getItems()) { + dnsServer.setIsValid(true); + if (StringUtils.isNotEmpty(dnsServer.getEntity()) && ipv4) { + dnsServer.validateEntity(new IValidation[] { new IpAddressValidation() }); + } + dnsServersValid &= dnsServer.getIsValid(); + } + + return getName().getIsValid() + && getCidr().getIsValid() + && getIpVersion().getIsValid() + && getGateway().getIsValid() + && dnsServersValid; } } diff --git a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/ApplicationConstants.java b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/ApplicationConstants.java index d0fee15..88f894f 100644 --- a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/ApplicationConstants.java +++ b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/ApplicationConstants.java @@ -1209,6 +1209,12 @@ @DefaultStringValue("IP Version") String ipVersionExternalSubnet(); + @DefaultStringValue("Gateway") + String gatewayExternalSubnet(); + + @DefaultStringValue("DNS Servers") + String dnsServersExternalSubnet(); + // Cluster @DefaultStringValue("Name") String nameCluster(); diff --git a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/provider/ExternalSubnetPopupView.ui.xml b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/provider/ExternalSubnetPopupView.ui.xml index aef7913..b6491e0 100644 --- a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/provider/ExternalSubnetPopupView.ui.xml +++ b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/provider/ExternalSubnetPopupView.ui.xml @@ -6,7 +6,7 @@ xmlns:ge="urn:import:org.ovirt.engine.ui.common.widget.editor.generic" xmlns:p="urn:import:org.ovirt.engine.ui.webadmin.widget.provider" > - <d:SimpleDialogPanel width="350px" height="220px"> + <d:SimpleDialogPanel width="400px" height="350px"> <d:content> <g:FlowPanel> <ge:StringEntityModelLabelEditor ui:field="networkEditor" /> diff --git a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/widget/provider/DnsServerEditor.java b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/widget/provider/DnsServerEditor.java new file mode 100644 index 0000000..ddcad6f --- /dev/null +++ b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/widget/provider/DnsServerEditor.java @@ -0,0 +1,68 @@ +package org.ovirt.engine.ui.webadmin.widget.provider; + +import org.ovirt.engine.ui.common.widget.editor.generic.StringEntityModelTextBoxEditor; +import org.ovirt.engine.ui.common.widget.uicommon.popup.AbstractModelBoundPopupWidget; +import org.ovirt.engine.ui.uicommonweb.models.EntityModel; + +import com.google.gwt.core.client.Scheduler; +import com.google.gwt.core.client.Scheduler.ScheduledCommand; +import com.google.gwt.core.shared.GWT; +import com.google.gwt.dom.client.Style.Unit; +import com.google.gwt.editor.client.SimpleBeanEditorDriver; +import com.google.gwt.event.dom.client.KeyPressEvent; +import com.google.gwt.event.dom.client.KeyPressHandler; +import com.google.gwt.event.logical.shared.HasValueChangeHandlers; +import com.google.gwt.event.logical.shared.ValueChangeEvent; +import com.google.gwt.event.logical.shared.ValueChangeHandler; +import com.google.gwt.event.shared.HandlerRegistration; + +public class DnsServerEditor extends AbstractModelBoundPopupWidget<EntityModel<String>> implements HasValueChangeHandlers<EntityModel<String>> { + + public interface Driver extends SimpleBeanEditorDriver<EntityModel<String>, DnsServerEditor> { + } + + + private final Driver driver = GWT.create(Driver.class); + + @Path("entity") + protected StringEntityModelTextBoxEditor stringEditor; + + public DnsServerEditor() { + stringEditor = new StringEntityModelTextBoxEditor(); + initWidget(stringEditor); + getElement().getStyle().setMarginTop(10, Unit.PX); + driver.initialize(this); + } + + @Override + public void edit(final EntityModel<String> model) { + driver.edit(model); + stringEditor.addKeyPressHandler(new KeyPressHandler() { + @Override + public void onKeyPress(KeyPressEvent event) { + Scheduler.get().scheduleDeferred(new ScheduledCommand() { + @Override + public void execute() { + ValueChangeEvent.fire(stringEditor.asValueBox(), stringEditor.asValueBox().getValue()); + } + }); + } + }); + stringEditor.asValueBox().addValueChangeHandler(new ValueChangeHandler<String>() { + @Override + public void onValueChange(ValueChangeEvent<String> event) { + ValueChangeEvent.fire(DnsServerEditor.this, model); + } + }); + } + + @Override + public EntityModel<String> flush() { + return driver.flush(); + } + + @Override + public HandlerRegistration addValueChangeHandler(ValueChangeHandler<EntityModel<String>> handler) { + return addHandler(handler, ValueChangeEvent.getType()); + } +} diff --git a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/widget/provider/DnsServersWidget.java b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/widget/provider/DnsServersWidget.java new file mode 100644 index 0000000..bcc6b76 --- /dev/null +++ b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/widget/provider/DnsServersWidget.java @@ -0,0 +1,45 @@ +package org.ovirt.engine.ui.webadmin.widget.provider; + +import org.ovirt.engine.ui.common.widget.AddRemoveRowWidget; +import org.ovirt.engine.ui.uicommonweb.models.EntityModel; +import org.ovirt.engine.ui.uicommonweb.models.ListModel; +import org.ovirt.engine.ui.uicompat.external.StringUtils; + +import com.google.gwt.core.shared.GWT; +import com.google.gwt.uibinder.client.UiBinder; +import com.google.gwt.user.client.ui.Widget; + +public class DnsServersWidget extends AddRemoveRowWidget<ListModel<EntityModel<String>>, EntityModel<String>, DnsServerEditor> { + + public interface WidgetUiBinder extends UiBinder<Widget, DnsServersWidget> { + WidgetUiBinder uiBinder = GWT.create(WidgetUiBinder.class); + } + + public DnsServersWidget() { + initWidget(WidgetUiBinder.uiBinder.createAndBindUi(this)); + } + + @Override + protected DnsServerEditor createWidget(EntityModel<String> value) { + DnsServerEditor widget = new DnsServerEditor(); + widget.edit(value); + return widget; + } + + @Override + protected EntityModel<String> createGhostValue() { + EntityModel<String> value = new EntityModel<String>(); + value.setEntity(""); //$NON-NLS-1$ + return value; + } + + @Override + protected boolean isGhost(EntityModel<String> value) { + return StringUtils.isEmpty(value.getEntity()); + } + + @Override + protected void toggleGhost(EntityModel<String> value, DnsServerEditor widget, boolean becomingGhost) { + // do nothing, widgets look the same as ghost widgets (only one UI field) + } +} diff --git a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/widget/provider/DnsServersWidget.ui.xml b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/widget/provider/DnsServersWidget.ui.xml new file mode 100644 index 0000000..a7e8ace --- /dev/null +++ b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/widget/provider/DnsServersWidget.ui.xml @@ -0,0 +1,37 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE ui:UiBinder SYSTEM "http://dl.google.com/gwt/DTD/xhtml.ent"> +<ui:UiBinder xmlns:ui="urn:ui:com.google.gwt.uibinder" xmlns:g="urn:import:com.google.gwt.user.client.ui"> + + <ui:with field='constants' type='org.ovirt.engine.ui.webadmin.ApplicationConstants' /> + + <ui:style type="org.ovirt.engine.ui.common.widget.AddRemoveRowWidget.WidgetStyle"> + .mainPanel { + height: 100%; + width: 100%; + } + + .buttonStyle { + margin-right: 7px; + width: 9px; + height: 10px; + padding-left: 2px; + padding-top: 2px; + margin-top: 16px; + margin-left: 20px; + } + + .labelStyle { + margin-top: 5px; + margin-left: 5px; + font-weight: bold; + } + </ui:style> + + <g:FlowPanel addStyleNames="{style.mainPanel}" > + <g:Label text="{constants.dnsServersExternalSubnet}" addStyleNames="{style.labelStyle}" /> + <g:ScrollPanel> + <g:FlowPanel ui:field="contentPanel" /> + </g:ScrollPanel> + </g:FlowPanel> + +</ui:UiBinder> diff --git a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/widget/provider/ExternalSubnetWidget.java b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/widget/provider/ExternalSubnetWidget.java index e93f9fd..8a0c5a4 100644 --- a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/widget/provider/ExternalSubnetWidget.java +++ b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/widget/provider/ExternalSubnetWidget.java @@ -47,6 +47,15 @@ @WithElementId("ipVersion") ListModelListBoxEditor<IpVersion> ipVersionEditor; + @UiField + @Path("gateway.entity") + @WithElementId("gateway") + StringEntityModelTextBoxEditor gatewayEditor; + + @UiField + @Ignore + public DnsServersWidget dnsServersEditor; + private final Driver driver = GWT.create(Driver.class); @Inject @@ -62,6 +71,7 @@ nameEditor.setLabel(constants.nameExternalSubnet()); cidrEditor.setLabel(constants.cidrExternalSubnet()); ipVersionEditor.setLabel(constants.ipVersionExternalSubnet()); + gatewayEditor.setLabel(constants.gatewayExternalSubnet()); } @Override @@ -72,10 +82,12 @@ @Override public void edit(final ExternalSubnetModel subnet) { driver.edit(subnet); + dnsServersEditor.edit(subnet.getDnsServers()); } @Override public ExternalSubnetModel flush() { + dnsServersEditor.flush(); return driver.flush(); } } diff --git a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/widget/provider/ExternalSubnetWidget.ui.xml b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/widget/provider/ExternalSubnetWidget.ui.xml index cbd0372..0a15427 100644 --- a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/widget/provider/ExternalSubnetWidget.ui.xml +++ b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/widget/provider/ExternalSubnetWidget.ui.xml @@ -3,12 +3,15 @@ <ui:UiBinder xmlns:ui="urn:ui:com.google.gwt.uibinder" xmlns:g="urn:import:com.google.gwt.user.client.ui" xmlns:e="urn:import:org.ovirt.engine.ui.common.widget.editor" - xmlns:ge="urn:import:org.ovirt.engine.ui.common.widget.editor.generic" > + xmlns:ge="urn:import:org.ovirt.engine.ui.common.widget.editor.generic" + xmlns:p="urn:import:org.ovirt.engine.ui.webadmin.widget.provider" > <g:FlowPanel> <ge:StringEntityModelTextBoxEditor ui:field="nameEditor" /> <ge:StringEntityModelTextBoxEditor ui:field="cidrEditor" /> <e:ListModelListBoxEditor ui:field="ipVersionEditor"/> + <ge:StringEntityModelTextBoxEditor ui:field="gatewayEditor" /> + <p:DnsServersWidget ui:field="dnsServersEditor" /> </g:FlowPanel> </ui:UiBinder> -- To view, visit http://gerrit.ovirt.org/27365 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I8c958328e769badebe2d95359d3ae81e657205c2 Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: ovirt-engine-3.4 Gerrit-Owner: Mike Kolesnik <[email protected]> _______________________________________________ Engine-patches mailing list [email protected] http://lists.ovirt.org/mailman/listinfo/engine-patches
