Mike Kolesnik has uploaded a new change for review.

Change subject: webadmin: Ability to add external subnet
......................................................................

webadmin: Ability to add external subnet

It is now possible to add a subnet on an external network provider.

Change-Id: I7315f9ffe29f72d06deb56dcd637c53fba47b116
Signed-off-by: Mike Kolesnik <mkole...@redhat.com>
---
M 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/dataprovider/AsyncDataProvider.java
M 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/networks/NetworkExternalSubnetListModel.java
A 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/providers/NewExternalSubnetModel.java
M 
frontend/webadmin/modules/uicompat/src/main/java/org/ovirt/engine/ui/uicompat/LocalizedEnums.java
M 
frontend/webadmin/modules/uicompat/src/main/java/org/ovirt/engine/ui/uicompat/UIConstants.java
M 
frontend/webadmin/modules/uicompat/src/main/resources/org/ovirt/engine/ui/uicompat/LocalizedEnums.properties
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/gin/PresenterModule.java
M 
frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/gin/uicommon/NetworkModule.java
A 
frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/presenter/popup/provider/ExternalSubnetPopupPresenterWidget.java
A 
frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/provider/ExternalSubnetPopupView.java
A 
frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/provider/ExternalSubnetPopupView.ui.xml
M 
frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/tab/network/SubTabNetworkExternalSubnetView.java
13 files changed, 387 insertions(+), 1 deletion(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/89/22689/1

diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/dataprovider/AsyncDataProvider.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/dataprovider/AsyncDataProvider.java
index e3b87db..a31e5c2 100644
--- 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/dataprovider/AsyncDataProvider.java
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/dataprovider/AsyncDataProvider.java
@@ -72,6 +72,7 @@
 import 
org.ovirt.engine.core.common.businessentities.network.VmNetworkInterface;
 import org.ovirt.engine.core.common.businessentities.network.VnicProfile;
 import org.ovirt.engine.core.common.businessentities.network.VnicProfileView;
+import 
org.ovirt.engine.core.common.businessentities.network.ExternalSubnet.IpVersion;
 import org.ovirt.engine.core.common.interfaces.SearchType;
 import org.ovirt.engine.core.common.mode.ApplicationMode;
 import org.ovirt.engine.core.common.queries.CommandVersionsInfo;
@@ -3444,6 +3445,10 @@
         
Frontend.getInstance().runQuery(VdcQueryType.GetExternalSubnetsOnProviderByNetwork,
 new IdQueryParameters(networkId), aQuery);
     }
 
+    public static List<IpVersion> getExternalSubnetIpVerionList() {
+        return Arrays.asList(IpVersion.values());
+    }
+
     public static void getNumberOfActiveVmsInCluster(AsyncQuery aQuery, Guid 
clusterId) {
         // do not replace a converter = just add if none provided
         if (aQuery.converterCallback == null) {
diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/networks/NetworkExternalSubnetListModel.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/networks/NetworkExternalSubnetListModel.java
index c81e98b..2fb63c3 100644
--- 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/networks/NetworkExternalSubnetListModel.java
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/networks/NetworkExternalSubnetListModel.java
@@ -1,5 +1,6 @@
 package org.ovirt.engine.ui.uicommonweb.models.networks;
 
+import java.util.Arrays;
 import java.util.Collections;
 import java.util.List;
 
@@ -11,6 +12,7 @@
 import org.ovirt.engine.ui.uicommonweb.UICommand;
 import org.ovirt.engine.ui.uicommonweb.dataprovider.AsyncDataProvider;
 import org.ovirt.engine.ui.uicommonweb.models.SearchableListModel;
+import org.ovirt.engine.ui.uicommonweb.models.providers.NewExternalSubnetModel;
 import org.ovirt.engine.ui.uicommonweb.models.vms.RemoveExternalSubnetModel;
 import org.ovirt.engine.ui.uicompat.ConstantsManager;
 import org.ovirt.engine.ui.uicompat.PropertyChangedEventArgs;
@@ -19,15 +21,25 @@
 public class NetworkExternalSubnetListModel extends SearchableListModel
 {
 
+    private UICommand newCommand;
     private UICommand removeCommand;
 
     public NetworkExternalSubnetListModel() {
         
setTitle(ConstantsManager.getInstance().getConstants().externalSubnetsTitle());
         setHashName("external_subnets"); //$NON-NLS-1$
 
+        setNewCommand(new UICommand("New", this)); //$NON-NLS-1$
         setRemoveCommand(new UICommand("Remove", this)); //$NON-NLS-1$
 
         updateActionAvailability();
+    }
+
+    public UICommand getNewCommand() {
+        return newCommand;
+    }
+
+    private void setNewCommand(UICommand newCommand) {
+        this.newCommand = newCommand;
     }
 
     public UICommand getRemoveCommand() {
@@ -36,6 +48,22 @@
 
     private void setRemoveCommand(UICommand value) {
         removeCommand = value;
+    }
+
+    public void newSubnet() {
+        if (getWindow() != null) {
+            return;
+        }
+
+        NewExternalSubnetModel model = new NewExternalSubnetModel(this);
+        setWindow(model);
+        initNetworkInModel(model);
+    }
+
+    private void initNetworkInModel(NewExternalSubnetModel model) {
+        model.getNetwork().setItems(Arrays.asList(getEntity()));
+        model.getNetwork().setSelectedItem(getEntity());
+        model.getNetwork().setIsChangable(false);
     }
 
     @SuppressWarnings("unchecked")
@@ -106,6 +134,9 @@
     }
 
     private void updateActionAvailability() {
+        NetworkView network = getEntity();
+
+        getNewCommand().setIsExecutionAllowed(network != null && 
network.isExternal());
         getRemoveCommand().setIsExecutionAllowed((getSelectedItems() != null 
&& getSelectedItems().size() > 0));
     }
 
@@ -134,7 +165,10 @@
     public void executeCommand(UICommand command) {
         super.executeCommand(command);
 
-        if (command == getRemoveCommand()) {
+        if (command == getNewCommand()) {
+            newSubnet();
+        }
+        else if (command == getRemoveCommand()) {
             remove();
         }
         else if ("Cancel".equals(command.getName())) { //$NON-NLS-1$
diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/providers/NewExternalSubnetModel.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/providers/NewExternalSubnetModel.java
new file mode 100644
index 0000000..a8a26f6
--- /dev/null
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/providers/NewExternalSubnetModel.java
@@ -0,0 +1,167 @@
+package org.ovirt.engine.ui.uicommonweb.models.providers;
+
+import org.ovirt.engine.core.common.action.AddExternalSubnetParameters;
+import org.ovirt.engine.core.common.action.VdcActionType;
+import org.ovirt.engine.core.common.action.VdcReturnValueBase;
+import org.ovirt.engine.core.common.businessentities.network.ExternalSubnet;
+import 
org.ovirt.engine.core.common.businessentities.network.ExternalSubnet.IpVersion;
+import org.ovirt.engine.core.common.businessentities.network.Network;
+import org.ovirt.engine.core.common.businessentities.network.NetworkView;
+import org.ovirt.engine.ui.frontend.Frontend;
+import org.ovirt.engine.ui.uicommonweb.UICommand;
+import org.ovirt.engine.ui.uicommonweb.dataprovider.AsyncDataProvider;
+import org.ovirt.engine.ui.uicommonweb.models.EntityModel;
+import org.ovirt.engine.ui.uicommonweb.models.ListModel;
+import org.ovirt.engine.ui.uicommonweb.models.Model;
+import org.ovirt.engine.ui.uicommonweb.validation.AsciiNameValidation;
+import org.ovirt.engine.ui.uicommonweb.validation.IValidation;
+import org.ovirt.engine.ui.uicommonweb.validation.NotEmptyValidation;
+import org.ovirt.engine.ui.uicompat.ConstantsManager;
+import org.ovirt.engine.ui.uicompat.FrontendActionAsyncResult;
+import org.ovirt.engine.ui.uicompat.IFrontendActionAsyncCallback;
+
+@SuppressWarnings("rawtypes")
+public class NewExternalSubnetModel extends Model {
+
+    private EntityModel<String> name;
+    private EntityModel<String> cidr;
+    private ListModel<NetworkView> network;
+    private ListModel<IpVersion> ipVersion;
+    private final EntityModel sourceModel;
+    private ExternalSubnet subnet = null;
+
+    public NewExternalSubnetModel(EntityModel sourceModel) {
+        this.sourceModel = sourceModel;
+
+        setName(new EntityModel<String>());
+        setCidr(new EntityModel<String>());
+        setNetwork(new ListModel<NetworkView>());
+        setIpVersion(new ListModel<IpVersion>());
+        
getIpVersion().setItems(AsyncDataProvider.getExternalSubnetIpVerionList());
+
+        
setTitle(ConstantsManager.getInstance().getConstants().externalSubnetTitle());
+        setHashName("new_external_subnet"); //$NON-NLS-1$
+
+        initCommands();
+    }
+
+    protected void initCommands() {
+        UICommand okCommand = new UICommand("OnSave", this); //$NON-NLS-1$
+        okCommand.setTitle(ConstantsManager.getInstance().getConstants().ok());
+        okCommand.setIsDefault(true);
+        getCommands().add(okCommand);
+        UICommand cancelCommand = new UICommand("Cancel", this); //$NON-NLS-1$
+        
cancelCommand.setTitle(ConstantsManager.getInstance().getConstants().cancel());
+        cancelCommand.setIsCancel(true);
+        getCommands().add(cancelCommand);
+    }
+
+
+    public EntityModel<String> getName() {
+        return name;
+    }
+
+    public void setName(EntityModel<String> name) {
+        this.name = name;
+    }
+
+    public EntityModel<String> getCidr() {
+        return cidr;
+    }
+
+    public void setCidr(EntityModel<String> cidr) {
+        this.cidr = cidr;
+    }
+
+    public ListModel<NetworkView> getNetwork() {
+        return network;
+    }
+
+    public void setNetwork(ListModel<NetworkView> network) {
+        this.network = network;
+    }
+
+    public ListModel<IpVersion> getIpVersion() {
+        return ipVersion;
+    }
+
+    public void setIpVersion(ListModel<IpVersion> ipVersion) {
+        this.ipVersion = ipVersion;
+    }
+
+    private void onSave()
+    {
+        if (getProgress() != null)
+        {
+            return;
+        }
+
+        if (!validate())
+        {
+            return;
+        }
+
+        // Save changes.
+        flush();
+
+        startProgress(null);
+
+        Frontend.getInstance().runAction(VdcActionType.AddSubnetToProvider,
+                new AddExternalSubnetParameters(subnet, 
getNetwork().getSelectedItem().getId()),
+                new IFrontendActionAsyncCallback() {
+                    @Override
+                    public void executed(FrontendActionAsyncResult result) {
+                        VdcReturnValueBase returnValue = 
result.getReturnValue();
+                        stopProgress();
+
+                        if (returnValue != null && returnValue.getSucceeded())
+                        {
+                            cancel();
+                        }
+                    }
+                },
+                this,
+                true);
+    }
+
+    public void flush() {
+        if (subnet == null) {
+            subnet = new ExternalSubnet();
+        }
+        subnet.setName(getName().getEntity());
+        Network network = getNetwork().getSelectedItem();
+        subnet.setExternalNetwork(network != null ? network.getProvidedBy() : 
null);
+        subnet.setCidr(getCidr().getEntity());
+        subnet.setIpVersion(getIpVersion().getSelectedItem());
+    }
+
+    private void cancel()
+    {
+        sourceModel.setWindow(null);
+    }
+
+    @Override
+    public void executeCommand(UICommand command)
+    {
+        super.executeCommand(command);
+
+        if ("OnSave".equals(command.getName())) //$NON-NLS-1$
+        {
+            onSave();
+        }
+        else if ("Cancel".equals(command.getName())) //$NON-NLS-1$
+        {
+            cancel();
+        }
+    }
+
+
+    public boolean validate()
+    {
+        getName().validateEntity(new IValidation[] { new NotEmptyValidation(), 
new AsciiNameValidation() });
+        getCidr().validateEntity(new IValidation[] { new NotEmptyValidation() 
});
+        getIpVersion().validateSelectedItem(new IValidation[] { new 
NotEmptyValidation() });
+
+        return getName().getIsValid() && getCidr().getIsValid() && 
getIpVersion().getIsValid();
+    }
+}
diff --git 
a/frontend/webadmin/modules/uicompat/src/main/java/org/ovirt/engine/ui/uicompat/LocalizedEnums.java
 
b/frontend/webadmin/modules/uicompat/src/main/java/org/ovirt/engine/ui/uicompat/LocalizedEnums.java
index d853f42..1f7125b 100644
--- 
a/frontend/webadmin/modules/uicompat/src/main/java/org/ovirt/engine/ui/uicompat/LocalizedEnums.java
+++ 
b/frontend/webadmin/modules/uicompat/src/main/java/org/ovirt/engine/ui/uicompat/LocalizedEnums.java
@@ -687,6 +687,8 @@
 
     String VdcActionType___RemoveVnicProfile();
 
+    String VdcActionType___AddSubnetToProvider();
+
     String VdcActionType___RemoveSubnetFromProvider();
 
     String VdcObjectType___AdElements();
diff --git 
a/frontend/webadmin/modules/uicompat/src/main/java/org/ovirt/engine/ui/uicompat/UIConstants.java
 
b/frontend/webadmin/modules/uicompat/src/main/java/org/ovirt/engine/ui/uicompat/UIConstants.java
index 842c665..5837391 100644
--- 
a/frontend/webadmin/modules/uicompat/src/main/java/org/ovirt/engine/ui/uicompat/UIConstants.java
+++ 
b/frontend/webadmin/modules/uicompat/src/main/java/org/ovirt/engine/ui/uicompat/UIConstants.java
@@ -463,6 +463,9 @@
     @DefaultStringValue("VNIC Profiles")
     String vnicProfilesTitle();
 
+    @DefaultStringValue("External Subnet")
+    String externalSubnetTitle();
+
     @DefaultStringValue("External Subnets")
     String externalSubnetsTitle();
 
diff --git 
a/frontend/webadmin/modules/uicompat/src/main/resources/org/ovirt/engine/ui/uicompat/LocalizedEnums.properties
 
b/frontend/webadmin/modules/uicompat/src/main/resources/org/ovirt/engine/ui/uicompat/LocalizedEnums.properties
index 4d25bae..c7f5c81 100644
--- 
a/frontend/webadmin/modules/uicompat/src/main/resources/org/ovirt/engine/ui/uicompat/LocalizedEnums.properties
+++ 
b/frontend/webadmin/modules/uicompat/src/main/resources/org/ovirt/engine/ui/uicompat/LocalizedEnums.properties
@@ -341,6 +341,7 @@
 VdcActionType___AddVnicProfile=Add Vnic Profile
 VdcActionType___UpdateProfile=Update Vnic Profile
 VdcActionType___RemoveVnicProfile=Remove Vnic Profile
+VdcActionType___AddSubnetToProvider=Add Subnet to Provider
 VdcActionType___RemoveSubnetFromProvider=Remove Subnet from Provider
 VdcObjectType___AdElements=Active Directory Users and Groups
 VdcObjectType___System=System
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 a6a5b68..6126f69 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
@@ -1167,6 +1167,9 @@
     @DefaultStringValue("External ID")
     String externalIdExternalSubnet();
 
+    @DefaultStringValue("Network")
+    String networkExternalSubnet();
+
     @DefaultStringValue("Name")
     String nameExternalSubnet();
 
@@ -1899,6 +1902,9 @@
     @DefaultStringValue("Remove")
     String removeNetworkProfile();
 
+    @DefaultStringValue("New")
+    String newNetworkExternalSubnet();
+
     @DefaultStringValue("Remove")
     String removeNetworkExternalSubnet();
 
diff --git 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/gin/PresenterModule.java
 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/gin/PresenterModule.java
index 703d291..90608fd 100644
--- 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/gin/PresenterModule.java
+++ 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/gin/PresenterModule.java
@@ -63,6 +63,7 @@
 import 
org.ovirt.engine.ui.webadmin.section.main.presenter.popup.pool.PoolEditPopupPresenterWidget;
 import 
org.ovirt.engine.ui.webadmin.section.main.presenter.popup.pool.PoolNewPopupPresenterWidget;
 import 
org.ovirt.engine.ui.webadmin.section.main.presenter.popup.profile.VnicProfilePopupPresenterWidget;
+import 
org.ovirt.engine.ui.webadmin.section.main.presenter.popup.provider.ExternalSubnetPopupPresenterWidget;
 import 
org.ovirt.engine.ui.webadmin.section.main.presenter.popup.provider.ImportNetworksPopupPresenterWidget;
 import 
org.ovirt.engine.ui.webadmin.section.main.presenter.popup.provider.ProviderPopupPresenterWidget;
 import 
org.ovirt.engine.ui.webadmin.section.main.presenter.popup.quota.ChangeQuotaPopupPresenterWidget;
@@ -274,6 +275,7 @@
 import 
org.ovirt.engine.ui.webadmin.section.main.view.popup.pool.PoolEditPopupView;
 import 
org.ovirt.engine.ui.webadmin.section.main.view.popup.pool.PoolNewPopupView;
 import 
org.ovirt.engine.ui.webadmin.section.main.view.popup.profile.VnicProfilePopupView;
+import 
org.ovirt.engine.ui.webadmin.section.main.view.popup.provider.ExternalSubnetPopupView;
 import 
org.ovirt.engine.ui.webadmin.section.main.view.popup.provider.ImportNetworksPopupView;
 import 
org.ovirt.engine.ui.webadmin.section.main.view.popup.provider.ProviderPopupView;
 import 
org.ovirt.engine.ui.webadmin.section.main.view.popup.quota.ChangeQuotaPopupView;
@@ -1331,5 +1333,10 @@
         bindPresenterWidget(VnicProfilePopupPresenterWidget.class,
                 VnicProfilePopupPresenterWidget.ViewDef.class,
                 VnicProfilePopupView.class);
+
+        // External Subnet
+        bindPresenterWidget(ExternalSubnetPopupPresenterWidget.class,
+                ExternalSubnetPopupPresenterWidget.ViewDef.class,
+                ExternalSubnetPopupView.class);
     }
 }
diff --git 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/gin/uicommon/NetworkModule.java
 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/gin/uicommon/NetworkModule.java
index 8c957ce..5a6d681 100644
--- 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/gin/uicommon/NetworkModule.java
+++ 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/gin/uicommon/NetworkModule.java
@@ -46,6 +46,7 @@
 import 
org.ovirt.engine.ui.webadmin.section.main.presenter.popup.host.SetupNetworksInterfacePopupPresenterWidget;
 import 
org.ovirt.engine.ui.webadmin.section.main.presenter.popup.host.SetupNetworksManagementPopupPresenterWidget;
 import 
org.ovirt.engine.ui.webadmin.section.main.presenter.popup.profile.VnicProfilePopupPresenterWidget;
+import 
org.ovirt.engine.ui.webadmin.section.main.presenter.popup.provider.ExternalSubnetPopupPresenterWidget;
 import 
org.ovirt.engine.ui.webadmin.section.main.presenter.popup.provider.ImportNetworksPopupPresenterWidget;
 
 import com.google.gwt.event.shared.EventBus;
@@ -151,6 +152,7 @@
     @Singleton
     public SearchableDetailModelProvider<ExternalSubnet, NetworkListModel, 
NetworkExternalSubnetListModel> getExternalSubnetListProvider(EventBus eventBus,
             Provider<DefaultConfirmationPopupPresenterWidget> 
defaultConfirmPopupProvider,
+            final Provider<ExternalSubnetPopupPresenterWidget> 
newExternalSubnetPopupProvider,
             final Provider<RemoveConfirmationPopupPresenterWidget> 
removeConfirmPopupProvider) {
         return new SearchableDetailTabModelProvider<ExternalSubnet, 
NetworkListModel, NetworkExternalSubnetListModel>(eventBus,
                 defaultConfirmPopupProvider,
@@ -158,6 +160,17 @@
                 NetworkExternalSubnetListModel.class) {
 
             @Override
+            public AbstractModelBoundPopupPresenterWidget<? extends Model, ?> 
getModelPopup(NetworkExternalSubnetListModel source,
+                    UICommand lastExecutedCommand,
+                    Model windowModel) {
+                if (lastExecutedCommand == getModel().getNewCommand()) {
+                    return newExternalSubnetPopupProvider.get();
+                }
+
+                return super.getModelPopup(source, lastExecutedCommand, 
windowModel);
+            }
+
+            @Override
             public AbstractModelBoundPopupPresenterWidget<? extends 
ConfirmationModel, ?> getConfirmModelPopup(NetworkExternalSubnetListModel 
source,
                     UICommand lastExecutedCommand) {
                 if (lastExecutedCommand == getModel().getRemoveCommand()) { 
//$NON-NLS-1$
diff --git 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/presenter/popup/provider/ExternalSubnetPopupPresenterWidget.java
 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/presenter/popup/provider/ExternalSubnetPopupPresenterWidget.java
new file mode 100644
index 0000000..b0e15ea
--- /dev/null
+++ 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/presenter/popup/provider/ExternalSubnetPopupPresenterWidget.java
@@ -0,0 +1,23 @@
+package org.ovirt.engine.ui.webadmin.section.main.presenter.popup.provider;
+
+import 
org.ovirt.engine.ui.common.presenter.AbstractModelBoundPopupPresenterWidget;
+import org.ovirt.engine.ui.uicommonweb.models.providers.NewExternalSubnetModel;
+
+import com.google.gwt.event.shared.EventBus;
+import com.google.inject.Inject;
+
+public class ExternalSubnetPopupPresenterWidget extends 
AbstractModelBoundPopupPresenterWidget<NewExternalSubnetModel, 
ExternalSubnetPopupPresenterWidget.ViewDef> {
+
+    public interface ViewDef extends 
AbstractModelBoundPopupPresenterWidget.ViewDef<NewExternalSubnetModel> {
+    }
+
+    @Inject
+    public ExternalSubnetPopupPresenterWidget(EventBus eventBus, ViewDef view) 
{
+        super(eventBus, view);
+    }
+
+    @Override
+    public void init(NewExternalSubnetModel model) {
+        super.init(model);
+    }
+}
diff --git 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/provider/ExternalSubnetPopupView.java
 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/provider/ExternalSubnetPopupView.java
new file mode 100644
index 0000000..d0c5b3a
--- /dev/null
+++ 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/provider/ExternalSubnetPopupView.java
@@ -0,0 +1,96 @@
+package org.ovirt.engine.ui.webadmin.section.main.view.popup.provider;
+
+import 
org.ovirt.engine.core.common.businessentities.network.ExternalSubnet.IpVersion;
+import org.ovirt.engine.core.common.businessentities.network.Network;
+import org.ovirt.engine.ui.common.idhandler.ElementIdHandler;
+import org.ovirt.engine.ui.common.idhandler.WithElementId;
+import org.ovirt.engine.ui.common.view.popup.AbstractModelBoundPopupView;
+import org.ovirt.engine.ui.common.widget.dialog.SimpleDialogPanel;
+import org.ovirt.engine.ui.common.widget.editor.ListModelListBoxEditor;
+import 
org.ovirt.engine.ui.common.widget.editor.generic.StringEntityModelTextBoxEditor;
+import org.ovirt.engine.ui.common.widget.renderer.EnumRenderer;
+import org.ovirt.engine.ui.common.widget.renderer.NullSafeRenderer;
+import org.ovirt.engine.ui.uicommonweb.models.providers.NewExternalSubnetModel;
+import org.ovirt.engine.ui.webadmin.ApplicationConstants;
+import org.ovirt.engine.ui.webadmin.ApplicationResources;
+import 
org.ovirt.engine.ui.webadmin.section.main.presenter.popup.provider.ExternalSubnetPopupPresenterWidget;
+
+import com.google.gwt.core.client.GWT;
+import com.google.gwt.editor.client.SimpleBeanEditorDriver;
+import com.google.gwt.event.shared.EventBus;
+import com.google.gwt.uibinder.client.UiBinder;
+import com.google.gwt.uibinder.client.UiField;
+import com.google.inject.Inject;
+
+public class ExternalSubnetPopupView extends 
AbstractModelBoundPopupView<NewExternalSubnetModel> implements 
ExternalSubnetPopupPresenterWidget.ViewDef {
+
+    interface Driver extends SimpleBeanEditorDriver<NewExternalSubnetModel, 
ExternalSubnetPopupView> {
+    }
+
+    interface ViewUiBinder extends UiBinder<SimpleDialogPanel, 
ExternalSubnetPopupView> {
+        ViewUiBinder uiBinder = GWT.create(ViewUiBinder.class);
+    }
+
+    interface ViewIdHandler extends ElementIdHandler<ExternalSubnetPopupView> {
+        ViewIdHandler idHandler = GWT.create(ViewIdHandler.class);
+    }
+
+    @UiField
+    @Path("name.entity")
+    @WithElementId("name")
+    StringEntityModelTextBoxEditor nameEditor;
+
+    @UiField
+    @Path("cidr.entity")
+    @WithElementId("cidr")
+    StringEntityModelTextBoxEditor cidrEditor;
+
+    @UiField(provided = true)
+    @Path("ipVersion.selectedItem")
+    @WithElementId("ipVersion")
+    protected ListModelListBoxEditor<IpVersion> ipVersionEditor;
+
+    @UiField(provided = true)
+    @Path("network.selectedItem")
+    ListModelListBoxEditor<Object> networkEditor;
+
+    private final Driver driver = GWT.create(Driver.class);
+
+    @Inject
+    public ExternalSubnetPopupView(EventBus eventBus, ApplicationResources 
resources, ApplicationConstants constants) {
+        super(eventBus, resources);
+        networkEditor = new ListModelListBoxEditor<Object>(new 
NullSafeRenderer<Object>() {
+            @Override
+            public String renderNullSafe(Object object) {
+                return ((Network) object).getName();
+            }
+        });
+        ipVersionEditor = new ListModelListBoxEditor<IpVersion>(new 
EnumRenderer<IpVersion>());
+        initWidget(ViewUiBinder.uiBinder.createAndBindUi(this));
+        localize(constants);
+        ViewIdHandler.idHandler.generateAndSetIds(this);
+        driver.initialize(this);
+    }
+
+    private void localize(ApplicationConstants constants) {
+        networkEditor.setLabel(constants.networkExternalSubnet());
+        nameEditor.setLabel(constants.nameExternalSubnet());
+        cidrEditor.setLabel(constants.cidrExternalSubnet());
+        ipVersionEditor.setLabel(constants.ipVersionExternalSubnet());
+    }
+
+    @Override
+    public void focusInput() {
+        nameEditor.setFocus(true);
+    }
+
+    @Override
+    public void edit(final NewExternalSubnetModel subnet) {
+        driver.edit(subnet);
+    }
+
+    @Override
+    public NewExternalSubnetModel flush() {
+        return driver.flush();
+    }
+}
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
new file mode 100644
index 0000000..67e8f75
--- /dev/null
+++ 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/provider/ExternalSubnetPopupView.ui.xml
@@ -0,0 +1,23 @@
+<?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" 
xmlns:d="urn:import:org.ovirt.engine.ui.common.widget.dialog"
+       xmlns:e="urn:import:org.ovirt.engine.ui.common.widget.editor"
+    xmlns:ge="urn:import:org.ovirt.engine.ui.common.widget.editor.generic"
+       xmlns:k="urn:import:org.ovirt.engine.ui.common.widget.form.key_value" >
+
+       <ui:with field='constants' 
type='org.ovirt.engine.ui.webadmin.ApplicationConstants' />
+
+       <d:SimpleDialogPanel width="350px" height="220px">
+               <d:content>
+                       <g:FlowPanel>
+                               <e:ListModelListBoxEditor 
ui:field="networkEditor" />
+                               <ge:StringEntityModelTextBoxEditor 
ui:field="nameEditor" />
+                               <ge:StringEntityModelTextBoxEditor 
ui:field="cidrEditor" />
+                               <e:ListModelListBoxEditor 
ui:field="ipVersionEditor"/>
+                       </g:FlowPanel>
+               </d:content>
+       </d:SimpleDialogPanel>
+
+</ui:UiBinder>
+
diff --git 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/tab/network/SubTabNetworkExternalSubnetView.java
 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/tab/network/SubTabNetworkExternalSubnetView.java
index 1c781c4..01eff55 100644
--- 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/tab/network/SubTabNetworkExternalSubnetView.java
+++ 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/tab/network/SubTabNetworkExternalSubnetView.java
@@ -67,6 +67,12 @@
 
         getTable().addColumn(externalIdColumn, 
constants.externalIdExternalSubnet(), "300px"); //$NON-NLS-1$
 
+        getTable().addActionButton(new 
WebAdminButtonDefinition<ExternalSubnet>(constants.newNetworkExternalSubnet()) {
+            @Override
+            protected UICommand resolveCommand() {
+                return getDetailModel().getNewCommand();
+            }
+        });
         getTable().addActionButton(new 
WebAdminButtonDefinition<ExternalSubnet>(constants.removeNetworkExternalSubnet())
 {
             @Override
             protected UICommand resolveCommand() {


-- 
To view, visit http://gerrit.ovirt.org/22689
To unsubscribe, visit http://gerrit.ovirt.org/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I7315f9ffe29f72d06deb56dcd637c53fba47b116
Gerrit-PatchSet: 1
Gerrit-Project: ovirt-engine
Gerrit-Branch: master
Gerrit-Owner: Mike Kolesnik <mkole...@redhat.com>
_______________________________________________
Engine-patches mailing list
Engine-patches@ovirt.org
http://lists.ovirt.org/mailman/listinfo/engine-patches

Reply via email to