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

Reply via email to