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