Tomas Jelinek has uploaded a new change for review.

Change subject: webadmin: instance types: added support for NIC editing in 
instance type dialog
......................................................................

webadmin: instance types: added support for NIC editing in instance type dialog

- Created a common parent BaseInterfaceCreatingManager for the VM and
  InstanceType interface creating managers.

- Implemented the corresponding logic to the new/edit behavior classes

The only profile which is available for an instance type is the Empty one
and it is available all the time, since the instance type is not cluster
dependent and at the creation of the instance type it is not known which
network profiles will be available when creating a VM from the instance
type.

Change-Id: I65346da29c16629f0fa1f17a37218334e5e06c2f
Signed-off-by: Tomas Jelinek <tjeli...@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/configure/instancetypes/InstanceTypeListModel.java
A 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/BaseInterfaceCreatingManager.java
M 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/ExistingInstanceTypeModelBehavior.java
A 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/InstanceTypeInterfaceCreatingManager.java
M 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/NewInstanceTypeModelBehavior.java
M 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/UnitVmModelNetworkAsyncCallback.java
M 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/VmInterfaceCreatingManager.java
8 files changed, 301 insertions(+), 122 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/62/24562/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 1843b8a..c359669 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
@@ -2325,6 +2325,19 @@
         Frontend.getInstance().runQuery(VdcQueryType.GetVmInterfacesByVmId, 
new IdQueryParameters(id), aQuery);
     }
 
+    public static void getTemplateNicList(AsyncQuery aQuery, Guid id) {
+        aQuery.converterCallback = new IAsyncConverter() {
+            @Override
+            public Object Convert(Object source, AsyncQuery _asyncQuery)
+            {
+                return source != null ? new 
ArrayList<VmNetworkInterface>((ArrayList<VmNetworkInterface>) source)
+                        : new ArrayList<VmNetworkInterface>();
+            }
+        };
+
+        
Frontend.getInstance().runQuery(VdcQueryType.GetTemplateInterfacesByTemplateId, 
new IdQueryParameters(id), aQuery);
+    }
+
     public static void getVmSnapshotList(AsyncQuery aQuery, Guid id) {
         aQuery.converterCallback = new IAsyncConverter() {
             @Override
diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/configure/instancetypes/InstanceTypeListModel.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/configure/instancetypes/InstanceTypeListModel.java
index 000dd87..604a07c 100644
--- 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/configure/instancetypes/InstanceTypeListModel.java
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/configure/instancetypes/InstanceTypeListModel.java
@@ -4,7 +4,6 @@
 import org.ovirt.engine.core.common.action.UpdateVmTemplateParameters;
 import org.ovirt.engine.core.common.action.VdcActionParametersBase;
 import org.ovirt.engine.core.common.action.VdcActionType;
-import org.ovirt.engine.core.common.action.VdcReturnValueBase;
 import org.ovirt.engine.core.common.action.VmTemplateParametersBase;
 import org.ovirt.engine.core.common.businessentities.InstanceType;
 import org.ovirt.engine.core.common.businessentities.VM;
@@ -14,6 +13,7 @@
 import org.ovirt.engine.core.common.interfaces.SearchType;
 import org.ovirt.engine.core.common.queries.SearchParameters;
 import org.ovirt.engine.core.common.queries.VdcQueryType;
+import org.ovirt.engine.core.compat.Guid;
 import org.ovirt.engine.core.compat.StringHelper;
 import org.ovirt.engine.ui.frontend.AsyncQuery;
 import org.ovirt.engine.ui.frontend.Frontend;
@@ -29,15 +29,16 @@
 import org.ovirt.engine.ui.uicommonweb.models.ConfirmationModel;
 import org.ovirt.engine.ui.uicommonweb.models.EntityModel;
 import org.ovirt.engine.ui.uicommonweb.models.ListWithDetailsModel;
+import org.ovirt.engine.ui.uicommonweb.models.vms.BaseInterfaceCreatingManager;
 import 
org.ovirt.engine.ui.uicommonweb.models.vms.ExistingInstanceTypeModelBehavior;
+import 
org.ovirt.engine.ui.uicommonweb.models.vms.InstanceTypeInterfaceCreatingManager;
 import org.ovirt.engine.ui.uicommonweb.models.vms.NewInstanceTypeModelBehavior;
 import org.ovirt.engine.ui.uicommonweb.models.vms.UnitVmModel;
+import 
org.ovirt.engine.ui.uicommonweb.models.vms.UnitVmModelNetworkAsyncCallback;
 import 
org.ovirt.engine.ui.uicommonweb.models.vms.VmBasedWidgetSwitchModeCommand;
 import org.ovirt.engine.ui.uicommonweb.models.vms.VmModelBehaviorBase;
 import org.ovirt.engine.ui.uicompat.ConstantsManager;
-import org.ovirt.engine.ui.uicompat.FrontendActionAsyncResult;
 import org.ovirt.engine.ui.uicompat.FrontendMultipleActionAsyncResult;
-import org.ovirt.engine.ui.uicompat.IFrontendActionAsyncCallback;
 import org.ovirt.engine.ui.uicompat.IFrontendMultipleActionAsyncCallback;
 import org.ovirt.engine.ui.uicompat.ObservableCollection;
 
@@ -51,6 +52,22 @@
     private UICommand editInstanceTypeCommand;
 
     private UICommand deleteInstanceTypeCommand;
+
+    private InstanceTypeInterfaceCreatingManager addInstanceTypeNetworkManager 
=
+            new InstanceTypeInterfaceCreatingManager(new 
BaseInterfaceCreatingManager.PostVnicCreatedCallback() {
+                @Override
+                public void vnicCreated(Guid vmId) {
+                    getWindow().stopProgress();
+                    cancel();
+                    updateActionAvailability();
+                }
+
+                @Override
+                public void queryFailed() {
+                    getWindow().stopProgress();
+                    cancel();
+                }
+            });
 
     public InstanceTypeListModel() {
         setDefaultSearchString("Instancetypes:"); //$NON-NLS-1$
@@ -175,17 +192,12 @@
 
         getWindow().startProgress(null);
 
-        Frontend.getInstance().runAction(VdcActionType.AddVmTemplate, 
addInstanceTypeParameters,
-                new IFrontendActionAsyncCallback() {
-                    @Override
-                    public void executed(FrontendActionAsyncResult result) {
-                        getWindow().stopProgress();
-                        VdcReturnValueBase returnValueBase = 
result.getReturnValue();
-                        if (returnValueBase != null && 
returnValueBase.getSucceeded()) {
-                            cancel();
-                        }
-                    }
-                }, this);
+        Frontend.getInstance().runAction(
+                VdcActionType.AddVmTemplate,
+                addInstanceTypeParameters,
+                new UnitVmModelNetworkAsyncCallback(model, 
addInstanceTypeNetworkManager),
+                this
+        );
     }
 
     private void onEditInstanceType() {
@@ -205,23 +217,17 @@
         
updateInstanceTypeParameters.setSoundDeviceEnabled(model.getIsSoundcardEnabled().getEntity());
         
updateInstanceTypeParameters.setConsoleEnabled(model.getIsConsoleDeviceEnabled().getEntity());
 
-        // todo a co balloon?
+        // todo and what about balloon?
 
         getWindow().startProgress(null);
 
-        Frontend.getInstance().runAction(VdcActionType.UpdateVmTemplate, 
updateInstanceTypeParameters,
-                new IFrontendActionAsyncCallback() {
-                    @Override
-                    public void executed(FrontendActionAsyncResult result) {
-                        getWindow().stopProgress();
-                        VdcReturnValueBase returnValueBase = 
result.getReturnValue();
-                        if (returnValueBase != null && 
returnValueBase.getSucceeded()) {
-                            cancel();
-                        }
-                    }
-                }, this);
+        Frontend.getInstance().runAction(
+                VdcActionType.UpdateVmTemplate,
+                updateInstanceTypeParameters,
+                new UnitVmModelNetworkAsyncCallback(model, 
addInstanceTypeNetworkManager, instanceType.getId()),
+                this
+        );
     }
-
 
     private void onDeleteInstanceType() {
         final ConfirmationModel model = (ConfirmationModel) getWindow();
diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/BaseInterfaceCreatingManager.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/BaseInterfaceCreatingManager.java
new file mode 100644
index 0000000..f0076f1
--- /dev/null
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/BaseInterfaceCreatingManager.java
@@ -0,0 +1,103 @@
+package org.ovirt.engine.ui.uicommonweb.models.vms;
+
+import org.ovirt.engine.core.common.action.VdcActionParametersBase;
+import 
org.ovirt.engine.core.common.businessentities.network.VmNetworkInterface;
+import org.ovirt.engine.core.compat.Guid;
+import org.ovirt.engine.ui.frontend.AsyncQuery;
+import org.ovirt.engine.ui.frontend.INewAsyncCallback;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Map;
+import java.util.Set;
+
+public abstract class BaseInterfaceCreatingManager {
+
+    private PostVnicCreatedCallback callback;
+
+    public BaseInterfaceCreatingManager(PostVnicCreatedCallback callback) {
+        this.callback = callback;
+    }
+
+    public PostVnicCreatedCallback getCallback() {
+        return callback;
+    }
+
+    public static interface PostVnicCreatedCallback {
+        void vnicCreated(Guid vmId);
+
+        void queryFailed();
+    }
+
+    public void updateVnics(final Guid id, final Iterable<VnicInstanceType> 
vnicsWithProfiles, final boolean isAddingNewVm) {
+        AsyncQuery getNicsQuery = new AsyncQuery();
+        getNicsQuery.asyncCallback = new INewAsyncCallback() {
+            @Override
+            public void onSuccess(Object model, Object result) {
+                Iterable<VmNetworkInterface> existingVnics = 
(Iterable<VmNetworkInterface>) result;
+                if (existingVnics == null) {
+                    existingVnics = new ArrayList<VmNetworkInterface>();
+                }
+
+                Map<String, VmNetworkInterface> existingVnicForName = new 
HashMap<String, VmNetworkInterface>();
+                for (VmNetworkInterface vnic : existingVnics) {
+                    existingVnicForName.put(vnic.getName(), vnic);
+                }
+
+                final ArrayList<VdcActionParametersBase> createVnicParameters =
+                        new ArrayList<VdcActionParametersBase>();
+                final ArrayList<VdcActionParametersBase> updateVnicParameters =
+                        new ArrayList<VdcActionParametersBase>();
+                final ArrayList<VdcActionParametersBase> removeVnicParameters =
+                        new ArrayList<VdcActionParametersBase>();
+                final Set<String> vnicsEncountered = new HashSet<String>();
+
+                // iterate over edited VNICs, see if any need to be added or 
have been assigned a different profile
+                for (VnicInstanceType vnicWithProfile : vnicsWithProfiles) {
+                    VmNetworkInterface editedVnic = 
vnicWithProfile.getNetworkInterface();
+                    String vnicName = editedVnic.getName();
+                    VmNetworkInterface existingVnic = 
existingVnicForName.get(vnicName);
+                    if (existingVnic == null) {
+                        
createVnicParameters.add(createAddInterfaceParameter(id, editedVnic));
+                    } else {
+                        vnicsEncountered.add(vnicName);
+                        Guid existingProfileId = 
existingVnic.getVnicProfileId();
+                        Guid editedProfileId = editedVnic.getVnicProfileId();
+                        if ((editedProfileId == null && existingProfileId != 
null)
+                                || (editedProfileId != null && 
!editedProfileId.equals(existingProfileId))) {
+                            existingVnic.setVnicProfileId(editedProfileId);
+                            
existingVnic.setNetworkName(editedVnic.getNetworkName());
+                            
updateVnicParameters.add(createAddInterfaceParameter(id, existingVnic));
+                        }
+                    }
+                }
+
+                // iterate over existing VNICs, see if any have not been 
encountered and thus removed in editing
+                for (VmNetworkInterface existingVnic : existingVnics) {
+                    if (!vnicsEncountered.contains(existingVnic.getName())) {
+                        
removeVnicParameters.add(createRemoveInterfaceParameter(id, 
existingVnic.getId()));
+                    }
+                }
+
+                doNicManipulation(createVnicParameters, updateVnicParameters, 
removeVnicParameters, isAddingNewVm, id);
+            }
+
+        };
+
+        getNics(getNicsQuery, id);
+    }
+
+    protected abstract VdcActionParametersBase 
createAddInterfaceParameter(Guid id, VmNetworkInterface editedVnic);
+
+    protected abstract VdcActionParametersBase 
createRemoveInterfaceParameter(Guid id, Guid nicId);
+
+    protected abstract void getNics(AsyncQuery getNicsQuery, Guid id);
+
+    protected abstract void doNicManipulation(
+            ArrayList<VdcActionParametersBase> createVnicParameters,
+            final ArrayList<VdcActionParametersBase> updateVnicParameters,
+            final ArrayList<VdcActionParametersBase> removeVnicParameters,
+            final boolean isAddingNewVm,
+            final Guid id);
+}
diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/ExistingInstanceTypeModelBehavior.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/ExistingInstanceTypeModelBehavior.java
index 928e1b2..cf928ec 100644
--- 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/ExistingInstanceTypeModelBehavior.java
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/ExistingInstanceTypeModelBehavior.java
@@ -3,19 +3,25 @@
 import org.ovirt.engine.core.common.businessentities.DisplayType;
 import org.ovirt.engine.core.common.businessentities.InstanceType;
 import org.ovirt.engine.core.common.businessentities.UsbPolicy;
+import 
org.ovirt.engine.core.common.businessentities.network.VmNetworkInterface;
+import org.ovirt.engine.core.common.businessentities.network.VnicProfileView;
 import org.ovirt.engine.core.common.queries.IdQueryParameters;
 import org.ovirt.engine.core.common.queries.VdcQueryReturnValue;
 import org.ovirt.engine.core.common.queries.VdcQueryType;
 import org.ovirt.engine.ui.frontend.AsyncQuery;
 import org.ovirt.engine.ui.frontend.Frontend;
 import org.ovirt.engine.ui.frontend.INewAsyncCallback;
+import org.ovirt.engine.ui.uicommonweb.Linq;
+import org.ovirt.engine.ui.uicommonweb.dataprovider.AsyncDataProvider;
 import org.ovirt.engine.ui.uicommonweb.models.EntityModel;
 import org.ovirt.engine.ui.uicommonweb.models.SystemTreeItemModel;
 import org.ovirt.engine.ui.uicompat.Event;
 import org.ovirt.engine.ui.uicompat.EventArgs;
 import org.ovirt.engine.ui.uicompat.IEventListener;
 
+import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.List;
 
 public class ExistingInstanceTypeModelBehavior extends 
InstanceTypeModelBehaviorBase {
 
@@ -79,6 +85,27 @@
 
         getModel().getUsbPolicy().setItems(Arrays.asList(UsbPolicy.values()));
         getModel().getUsbPolicy().setSelectedItem(instanceType.getUsbPolicy());
+
+        AsyncQuery getVmNicsQuery = new AsyncQuery();
+        getVmNicsQuery.asyncCallback = new INewAsyncCallback() {
+            @Override
+            public void onSuccess(Object model, Object result) {
+                List<VnicProfileView> profiles = new 
ArrayList<VnicProfileView>(Arrays.asList(VnicProfileView.EMPTY));
+                List<VnicInstanceType> vnicInstanceTypes = new 
ArrayList<VnicInstanceType>();
+
+                for (VmNetworkInterface nic : (List<VmNetworkInterface>) 
result) {
+                    final VnicInstanceType vnicInstanceType = new 
VnicInstanceType(nic);
+                    vnicInstanceType.setItems(profiles);
+                    vnicInstanceType.setSelectedItem(VnicProfileView.EMPTY);
+                    vnicInstanceTypes.add(vnicInstanceType);
+                }
+
+                
getModel().getNicsWithLogicalNetworks().getVnicProfiles().setItems(profiles);
+                
getModel().getNicsWithLogicalNetworks().setItems(vnicInstanceTypes);
+                
getModel().getNicsWithLogicalNetworks().setSelectedItem(Linq.firstOrDefault(vnicInstanceTypes));
+            }
+        };
+        AsyncDataProvider.getTemplateNicList(getVmNicsQuery, 
instanceType.getId());
     }
 
 }
diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/InstanceTypeInterfaceCreatingManager.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/InstanceTypeInterfaceCreatingManager.java
new file mode 100644
index 0000000..7e7f661
--- /dev/null
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/InstanceTypeInterfaceCreatingManager.java
@@ -0,0 +1,73 @@
+package org.ovirt.engine.ui.uicommonweb.models.vms;
+
+import org.ovirt.engine.core.common.action.AddVmTemplateInterfaceParameters;
+import org.ovirt.engine.core.common.action.RemoveVmTemplateInterfaceParameters;
+import org.ovirt.engine.core.common.action.VdcActionParametersBase;
+import org.ovirt.engine.core.common.action.VdcActionType;
+import 
org.ovirt.engine.core.common.businessentities.network.VmNetworkInterface;
+import org.ovirt.engine.core.compat.Guid;
+import org.ovirt.engine.ui.frontend.AsyncQuery;
+import org.ovirt.engine.ui.frontend.Frontend;
+import org.ovirt.engine.ui.uicommonweb.dataprovider.AsyncDataProvider;
+import org.ovirt.engine.ui.uicompat.FrontendActionAsyncResult;
+import org.ovirt.engine.ui.uicompat.IFrontendActionAsyncCallback;
+
+import java.util.ArrayList;
+
+public class InstanceTypeInterfaceCreatingManager extends 
BaseInterfaceCreatingManager {
+
+    public InstanceTypeInterfaceCreatingManager(PostVnicCreatedCallback 
callback) {
+        super(callback);
+    }
+
+    @Override
+    protected VdcActionParametersBase createAddInterfaceParameter(Guid id, 
VmNetworkInterface editedVnic) {
+        return new AddVmTemplateInterfaceParameters(id, editedVnic);
+    }
+
+    @Override
+    protected VdcActionParametersBase createRemoveInterfaceParameter(Guid id, 
Guid nicId) {
+        return new RemoveVmTemplateInterfaceParameters(id, nicId);
+    }
+
+    @Override
+    protected void getNics(AsyncQuery getNicsQuery, Guid id) {
+        AsyncDataProvider.getTemplateNicList(getNicsQuery, id);
+    }
+
+    @Override
+    protected void doNicManipulation(
+            final ArrayList<VdcActionParametersBase> createVnicParameters,
+            final ArrayList<VdcActionParametersBase> updateVnicParameters,
+            final ArrayList<VdcActionParametersBase> removeVnicParameters,
+            final boolean isAddingNewVm,
+            final Guid id) {
+        
Frontend.getInstance().runMultipleActions(VdcActionType.AddVmTemplateInterface,
+                createVnicParameters,
+                new IFrontendActionAsyncCallback() {
+
+                    @Override
+                    public void executed(FrontendActionAsyncResult result) {
+                        
Frontend.getInstance().runMultipleActions(VdcActionType.UpdateVmTemplateInterface,
+                                updateVnicParameters,
+                                new IFrontendActionAsyncCallback() {
+
+                                    @Override
+                                    public void 
executed(FrontendActionAsyncResult result) {
+                                        
Frontend.getInstance().runMultipleActions(VdcActionType.RemoveVmTemplateInterface,
+                                                removeVnicParameters,
+                                                new 
IFrontendActionAsyncCallback() {
+
+                                                    @Override
+                                                    public void 
executed(FrontendActionAsyncResult result) {
+                                                        // no need to reorder 
- it will be done for the VMs when creating from instance type
+                                                        
getCallback().vnicCreated(id);
+                                                    }
+                                                }, this);
+                                    }
+                                }, this);
+                    }
+                }, this);
+    }
+
+}
diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/NewInstanceTypeModelBehavior.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/NewInstanceTypeModelBehavior.java
index e12a2db..300f1ec 100644
--- 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/NewInstanceTypeModelBehavior.java
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/NewInstanceTypeModelBehavior.java
@@ -2,12 +2,14 @@
 
 import org.ovirt.engine.core.common.businessentities.DisplayType;
 import org.ovirt.engine.core.common.businessentities.UsbPolicy;
+import org.ovirt.engine.core.common.businessentities.network.VnicProfileView;
 import org.ovirt.engine.ui.uicommonweb.models.EntityModel;
 import org.ovirt.engine.ui.uicommonweb.models.SystemTreeItemModel;
 import org.ovirt.engine.ui.uicompat.Event;
 import org.ovirt.engine.ui.uicompat.EventArgs;
 import org.ovirt.engine.ui.uicompat.IEventListener;
 
+import java.util.ArrayList;
 import java.util.Arrays;
 
 public class NewInstanceTypeModelBehavior extends 
InstanceTypeModelBehaviorBase {
@@ -35,6 +37,9 @@
         updateMemoryBalloon(latestCluster());
         initPriority(0);
         getModel().getTotalCPUCores().setEntity("1"); //$NON-NLS-1$
+
+        getModel().getNicsWithLogicalNetworks().getVnicProfiles().setItems(new 
ArrayList<VnicProfileView>(Arrays.asList(VnicProfileView.EMPTY)));
+        getModel().getNicsWithLogicalNetworks().setItems(new 
ArrayList<VnicInstanceType>());
     }
 
 }
diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/UnitVmModelNetworkAsyncCallback.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/UnitVmModelNetworkAsyncCallback.java
index c07c5a9..bcfad17 100644
--- 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/UnitVmModelNetworkAsyncCallback.java
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/UnitVmModelNetworkAsyncCallback.java
@@ -8,17 +8,17 @@
 public class UnitVmModelNetworkAsyncCallback implements 
IFrontendActionAsyncCallback {
 
     private final UnitVmModel unitVmModel;
-    private final VmInterfaceCreatingManager networkCreatingManager;
+    private final BaseInterfaceCreatingManager networkCreatingManager;
     private final Guid idToUpdate;
 
     public UnitVmModelNetworkAsyncCallback(final UnitVmModel unitVmModel,
-            final VmInterfaceCreatingManager networkCreatingManager) {
+            final BaseInterfaceCreatingManager networkCreatingManager) {
 
         this(unitVmModel, networkCreatingManager, null);
     }
 
     public UnitVmModelNetworkAsyncCallback(final UnitVmModel unitVmModel,
-            final VmInterfaceCreatingManager networkCreatingManager,
+            final BaseInterfaceCreatingManager networkCreatingManager,
             final Guid idToUpdate) {
 
         this.unitVmModel = unitVmModel;
diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/VmInterfaceCreatingManager.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/VmInterfaceCreatingManager.java
index 33a89c1..fc39f98 100644
--- 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/VmInterfaceCreatingManager.java
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/VmInterfaceCreatingManager.java
@@ -1,11 +1,5 @@
 package org.ovirt.engine.ui.uicommonweb.models.vms;
 
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Map;
-import java.util.Set;
-
 import org.ovirt.engine.core.common.action.AddVmInterfaceParameters;
 import org.ovirt.engine.core.common.action.RemoveVmInterfaceParameters;
 import org.ovirt.engine.core.common.action.VdcActionParametersBase;
@@ -15,116 +9,74 @@
 import org.ovirt.engine.core.compat.Guid;
 import org.ovirt.engine.ui.frontend.AsyncQuery;
 import org.ovirt.engine.ui.frontend.Frontend;
-import org.ovirt.engine.ui.frontend.INewAsyncCallback;
 import org.ovirt.engine.ui.uicommonweb.dataprovider.AsyncDataProvider;
 import org.ovirt.engine.ui.uicompat.FrontendActionAsyncResult;
 import org.ovirt.engine.ui.uicompat.IFrontendActionAsyncCallback;
 
-public class VmInterfaceCreatingManager {
+import java.util.ArrayList;
 
-    private PostVnicCreatedCallback callback;
+public class VmInterfaceCreatingManager extends BaseInterfaceCreatingManager {
 
     public VmInterfaceCreatingManager(PostVnicCreatedCallback callback) {
-        this.callback = callback;
+        super(callback);
     }
 
-    public PostVnicCreatedCallback getCallback() {
-        return callback;
+    @Override
+    protected VdcActionParametersBase createAddInterfaceParameter(Guid id, 
VmNetworkInterface editedVnic) {
+        return new AddVmInterfaceParameters(id, editedVnic);
     }
 
-    public static interface PostVnicCreatedCallback {
-        void vnicCreated(Guid vmId);
-
-        void queryFailed();
+    @Override
+    protected VdcActionParametersBase createRemoveInterfaceParameter(Guid id, 
Guid nicId) {
+        return new RemoveVmInterfaceParameters(id, nicId);
     }
 
-    public void updateVnics(final Guid vmId, final Iterable<VnicInstanceType> 
vnicsWithProfiles, final boolean isAddingNewVm) {
-        AsyncQuery getVmNicsQuery = new AsyncQuery();
-        getVmNicsQuery.asyncCallback = new INewAsyncCallback() {
-            @Override
-            public void onSuccess(Object model, Object result) {
-                Iterable<VmNetworkInterface> existingVnics = 
(Iterable<VmNetworkInterface>) result;
-                if (existingVnics == null) {
-                    existingVnics = new ArrayList<VmNetworkInterface>();
-                }
+    @Override
+    protected void getNics(AsyncQuery getNicsQuery, Guid id) {
+        AsyncDataProvider.getVmNicList(getNicsQuery, id);
+    }
 
-                Map<String, VmNetworkInterface> existingVnicForName = new 
HashMap<String, VmNetworkInterface>();
-                for (VmNetworkInterface vnic : existingVnics) {
-                    existingVnicForName.put(vnic.getName(), vnic);
-                }
-
-                final ArrayList<VdcActionParametersBase> createVnicParameters =
-                        new ArrayList<VdcActionParametersBase>();
-                final ArrayList<VdcActionParametersBase> updateVnicParameters =
-                        new ArrayList<VdcActionParametersBase>();
-                final ArrayList<VdcActionParametersBase> removeVnicParameters =
-                        new ArrayList<VdcActionParametersBase>();
-                final Set<String> vnicsEncountered = new HashSet<String>();
-
-                // iterate over edited VNICs, see if any need to be added or 
have been assigned a different profile
-                for (VnicInstanceType vnicWithProfile : vnicsWithProfiles) {
-                    VmNetworkInterface editedVnic = 
vnicWithProfile.getNetworkInterface();
-                    String vnicName = editedVnic.getName();
-                    VmNetworkInterface existingVnic = 
existingVnicForName.get(vnicName);
-                    if (existingVnic == null) {
-                        createVnicParameters.add(new 
AddVmInterfaceParameters(vmId, editedVnic));
-                    } else {
-                        vnicsEncountered.add(vnicName);
-                        Guid existingProfileId = 
existingVnic.getVnicProfileId();
-                        Guid editedProfileId = editedVnic.getVnicProfileId();
-                        if ((editedProfileId == null && existingProfileId != 
null)
-                                || (editedProfileId != null && 
!editedProfileId.equals(existingProfileId))) {
-                            existingVnic.setVnicProfileId(editedProfileId);
-                            
existingVnic.setNetworkName(editedVnic.getNetworkName());
-                            updateVnicParameters.add(new 
AddVmInterfaceParameters(vmId, existingVnic));
-                        }
-                    }
-                }
-
-                // iterate over existing VNICs, see if any have not been 
encountered and thus removed in editing
-                for (VmNetworkInterface existingVnic : existingVnics) {
-                    if (!vnicsEncountered.contains(existingVnic.getName())) {
-                        removeVnicParameters.add(new 
RemoveVmInterfaceParameters(vmId, existingVnic.getId()));
-                    }
-                }
-
-                
Frontend.getInstance().runMultipleActions(VdcActionType.AddVmInterface,
-                        createVnicParameters,
-                        new IFrontendActionAsyncCallback() {
+    @Override
+    protected void doNicManipulation(
+            final ArrayList<VdcActionParametersBase> createVnicParameters,
+            final ArrayList<VdcActionParametersBase> updateVnicParameters,
+            final ArrayList<VdcActionParametersBase> removeVnicParameters,
+            final boolean isAddingNewVm,
+            final Guid id) {
+        Frontend.getInstance().runMultipleActions(VdcActionType.AddVmInterface,
+                createVnicParameters,
+                new IFrontendActionAsyncCallback() {
 
                     @Override
                     public void executed(FrontendActionAsyncResult result) {
-                                
Frontend.getInstance().runMultipleActions(VdcActionType.UpdateVmInterface,
-                                        updateVnicParameters,
-                                        new IFrontendActionAsyncCallback() {
-
-                            @Override
-                            public void executed(FrontendActionAsyncResult 
result) {
-                                                
Frontend.getInstance().runMultipleActions(VdcActionType.RemoveVmInterface,
-                                                        removeVnicParameters,
-                                                        new 
IFrontendActionAsyncCallback() {
+                        
Frontend.getInstance().runMultipleActions(VdcActionType.UpdateVmInterface,
+                                updateVnicParameters,
+                                new IFrontendActionAsyncCallback() {
 
                                     @Override
                                     public void 
executed(FrontendActionAsyncResult result) {
-                                        if (isAddingNewVm) {
-                                            VmOperationParameterBase 
reorderParams = new VmOperationParameterBase(vmId);
-                                            
Frontend.getInstance().runAction(VdcActionType.ReorderVmNics, reorderParams, 
new IFrontendActionAsyncCallback() {
-                                                public void 
executed(FrontendActionAsyncResult result) {
-                                                    callback.vnicCreated(vmId);
-                                                }
-                                            });
-                                        } else {
-                                            callback.vnicCreated(vmId);
-                                        }
+                                        
Frontend.getInstance().runMultipleActions(VdcActionType.RemoveVmInterface,
+                                                removeVnicParameters,
+                                                new 
IFrontendActionAsyncCallback() {
+
+                                                    @Override
+                                                    public void 
executed(FrontendActionAsyncResult result) {
+                                                        if (isAddingNewVm) {
+                                                            
VmOperationParameterBase reorderParams = new VmOperationParameterBase(id);
+                                                            
Frontend.getInstance().runAction(VdcActionType.ReorderVmNics, reorderParams, 
new IFrontendActionAsyncCallback() {
+                                                                public void 
executed(FrontendActionAsyncResult result) {
+                                                                    
getCallback().vnicCreated(id);
+                                                                }
+                                                            });
+                                                        } else {
+                                                            
getCallback().vnicCreated(id);
+                                                        }
+                                                    }
+                                                }, this);
                                     }
                                 }, this);
-                            }
-                        }, this);
                     }
                 }, this);
-            }
-        };
-        AsyncDataProvider.getVmNicList(getVmNicsQuery, vmId);
     }
 
 }


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

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

Reply via email to