Alona Kaplan has uploaded a new change for review. Change subject: webadmin: send vfs config update to the backend ......................................................................
webadmin: send vfs config update to the backend When clicking 'ok' on the setup network window the are several commands that should (and in some cases shouldn't) be sent to the backed. SetupNetworks->CommitNetworkChanges-> Vfs config update: UpdateVfsConfig-> Mulitple(AddVfsConfigNetwork)->Mulitple(RemoveVfsConfigNetwork)-> Mulitple(AddVfsConfigLabel)->Mulitple(RomoveVfsConfigLabel) HostSetupNetworks.postOnSetupNetworks() was slightly changed to use fluent command calls in order to make all this command calls more readable. Change-Id: Ide1ff9edbc9d907cbb19034a5789a1c7c7963b3b Signed-off-by: Alona Kaplan <alkap...@redhat.com> --- M backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/network/HostNicVfsConfig.java M frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/hosts/HostSetupNetworksModel.java A frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/hosts/VfsConfigAction.java 3 files changed, 184 insertions(+), 28 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/76/36976/1 diff --git a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/network/HostNicVfsConfig.java b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/network/HostNicVfsConfig.java index 9b756f7..4eec2b0 100644 --- a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/network/HostNicVfsConfig.java +++ b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/network/HostNicVfsConfig.java @@ -29,6 +29,27 @@ private Set<String> labels = new HashSet<>(); + public HostNicVfsConfig() { + } + + public HostNicVfsConfig(HostNicVfsConfig vfsConfig) { + setId(vfsConfig.getId()); + setNicId(vfsConfig.getNicId()); + setMaxNumOfVfs(vfsConfig.getMaxNumOfVfs()); + setNumOfVfs(vfsConfig.getNumOfVfs()); + setNumOfFreeVfs(vfsConfig.getNumOfFreeVfs()); + + setAllNetworksAllowed(vfsConfig.isAllNetworksAllowed()); + + Set<Guid> networks = new HashSet<>(); + networks.addAll(vfsConfig.getNetworks()); + setNetworks(networks); + + Set<String> labels = new HashSet<>(); + labels.addAll(vfsConfig.getLabels()); + setLabels(labels); + } + public Guid getNicId() { return nicId; } diff --git a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/hosts/HostSetupNetworksModel.java b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/hosts/HostSetupNetworksModel.java index 30dcbe8..8460061 100644 --- a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/hosts/HostSetupNetworksModel.java +++ b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/hosts/HostSetupNetworksModel.java @@ -15,7 +15,7 @@ import org.ovirt.engine.core.common.action.SetupNetworksParameters; import org.ovirt.engine.core.common.action.VdcActionType; -import org.ovirt.engine.core.common.action.VdcReturnValueBase; +import org.ovirt.engine.core.common.action.VdsActionParameters; import org.ovirt.engine.core.common.businessentities.BusinessEntitiesDefinitions; import org.ovirt.engine.core.common.businessentities.VDS; import org.ovirt.engine.core.common.businessentities.comparators.LexoNumericComparator; @@ -34,6 +34,8 @@ import org.ovirt.engine.ui.frontend.INewAsyncCallback; import org.ovirt.engine.ui.uicommonweb.BaseCommandTarget; import org.ovirt.engine.ui.uicommonweb.UICommand; +import org.ovirt.engine.ui.uicommonweb.UiAction; +import org.ovirt.engine.ui.uicommonweb.UiVdcAction; import org.ovirt.engine.ui.uicommonweb.dataprovider.AsyncDataProvider; import org.ovirt.engine.ui.uicommonweb.help.HelpTag; import org.ovirt.engine.ui.uicommonweb.models.EntityModel; @@ -55,8 +57,6 @@ import org.ovirt.engine.ui.uicompat.Event; import org.ovirt.engine.ui.uicompat.EventArgs; import org.ovirt.engine.ui.uicompat.EventDefinition; -import org.ovirt.engine.ui.uicompat.FrontendActionAsyncResult; -import org.ovirt.engine.ui.uicompat.IFrontendActionAsyncCallback; import org.ovirt.engine.ui.uicompat.UIMessages; /** @@ -129,6 +129,7 @@ // The purpose of this map is to keep the network parameters while moving the network from one nic to another private final Map<String, NetworkParameters> networkToLastDetachParams; + private Set<HostNicVfsConfig> originalVfsConfigs = new HashSet<>(); private Map<Guid, HostNicVfsConfig> nicToVfsConfig = new HashMap<>(); private NetworkOperationFactory operationFactory; @@ -949,7 +950,8 @@ List<HostNicVfsConfig> allHostVfs = (List<HostNicVfsConfig>) returnValue; for (HostNicVfsConfig vfsConfig : allHostVfs) { - nicToVfsConfig.put(vfsConfig.getNicId(), vfsConfig); + originalVfsConfigs.add(vfsConfig); + nicToVfsConfig.put(vfsConfig.getNicId(), new HostNicVfsConfig(vfsConfig)); } // chain the free bonds query @@ -1052,7 +1054,7 @@ } public void postOnSetupNetworks() { - final HostSetupNetworksModel model = (HostSetupNetworksModel) sourceListModel.getWindow(); + final HostSetupNetworksModel model = getSetupNetworksModel(); SetupNetworksParameters params = new SetupNetworksParameters(); params.setInterfaces(model.getAllNics()); @@ -1061,32 +1063,38 @@ params.setVdsId(getEntity().getId()); params.setNetworksToSync(model.getNetworksToSync()); - model.startProgress(null); - Frontend.getInstance().runAction(VdcActionType.SetupNetworks, params, new IFrontendActionAsyncCallback() { + UiAction closeAction = getCloseAction(); + UiAction setupNetworks = new UiVdcAction(VdcActionType.SetupNetworks, params, model, true); + setupNetworks.then(getCommitNetworkChangesAction()).then(getVfsConfigAction()).onAllExecutionsFinish(closeAction); + + setupNetworks.runAction(); + } + + public UiAction getCommitNetworkChangesAction() { + return new UiVdcAction(VdcActionType.CommitNetworkChanges, + new VdsActionParameters(getEntity().getId()), + getSetupNetworksModel(), true) { @Override - public void executed(FrontendActionAsyncResult result) { - VdcReturnValueBase returnValueBase = result.getReturnValue(); - if (returnValueBase != null && returnValueBase.getSucceeded()) - { - EntityModel<Boolean> commitChanges = model.getCommitChanges(); - if (commitChanges.getEntity()) - { - new SaveNetworkConfigAction(sourceListModel, model, getEntity()).execute(); - } - else - { - model.stopProgress(); - sourceListModel.setWindow(null); - sourceListModel.search(); - } - } - else - { - model.stopProgress(); - } + protected boolean shouldExecute() { + EntityModel<Boolean> commitChanges = getSetupNetworksModel().getCommitChanges(); + return commitChanges.getEntity(); } - }); + }; + } + + public UiAction getVfsConfigAction() { + return new VfsConfigAction(getSetupNetworksModel(), originalVfsConfigs, nicToVfsConfig); + } + + public UiAction getCloseAction() { + return new UiAction(getSetupNetworksModel(), "CloseSetupNetworksDialog") { //$NON-NLS-1$ + @Override + protected void onActionExecuted() { + sourceListModel.setWindow(null); + sourceListModel.search(); + } + }; } @Override @@ -1109,4 +1117,11 @@ } + public SearchableListModel<?> getSourceListModel() { + return sourceListModel; + } + + private HostSetupNetworksModel getSetupNetworksModel() { + return (HostSetupNetworksModel) sourceListModel.getWindow(); + } } diff --git a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/hosts/VfsConfigAction.java b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/hosts/VfsConfigAction.java new file mode 100644 index 0000000..6cbf17c --- /dev/null +++ b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/hosts/VfsConfigAction.java @@ -0,0 +1,120 @@ +package org.ovirt.engine.ui.uicommonweb.models.hosts; + +import java.util.Collection; +import java.util.HashSet; +import java.util.Map; +import java.util.Set; + +import org.ovirt.engine.core.common.action.UpdateHostNicVfsConfigParameters; +import org.ovirt.engine.core.common.action.VdcActionType; +import org.ovirt.engine.core.common.action.VfsConfigLabelParameters; +import org.ovirt.engine.core.common.action.VfsConfigNetworkParameters; +import org.ovirt.engine.core.common.businessentities.network.HostNicVfsConfig; +import org.ovirt.engine.core.compat.Guid; +import org.ovirt.engine.ui.uicommonweb.UiAction; +import org.ovirt.engine.ui.uicommonweb.UiVdcMultipleAction; +import org.ovirt.engine.ui.uicommonweb.models.Model; + +public class VfsConfigAction extends UiAction { + + private Collection<HostNicVfsConfig> originalVfsConfigs; + private Map<Guid, HostNicVfsConfig> updatedNicToVfsConfig; + + private Set<UpdateHostNicVfsConfigParameters> updatedVfsConfigsParams = new HashSet<>(); + private Set<VfsConfigNetworkParameters> addedNetworksParams = new HashSet<>(); + private Set<VfsConfigNetworkParameters> removedNetworksParams = new HashSet<>(); + private Set<VfsConfigLabelParameters> addedLabelsParams = new HashSet<>(); + private Set<VfsConfigLabelParameters> removedLabelsParams = new HashSet<>(); + + public VfsConfigAction(Model model, + Collection<HostNicVfsConfig> originalVfsConfigs, + Map<Guid, HostNicVfsConfig> updatedNicToVfsConfig) { + super(model, "VfsConfigAction"); //$NON-NLS-1$ + this.originalVfsConfigs = originalVfsConfigs; + this.updatedNicToVfsConfig = updatedNicToVfsConfig; + } + + @Override + protected void onActionExecuted() { + for (HostNicVfsConfig originalVfsConfig : originalVfsConfigs) { + HostNicVfsConfig updatedVfsConfig = updatedNicToVfsConfig.get(originalVfsConfig.getNicId()); + + initUpdateVfsConfigParams(originalVfsConfig, updatedVfsConfig); + + if (!updatedVfsConfig.isAllNetworksAllowed()) { + initAddedNetworksParams(originalVfsConfig, updatedVfsConfig); + initRemovedNetworksParams(originalVfsConfig, updatedVfsConfig); + initAddedLabelsParams(originalVfsConfig, updatedVfsConfig); + initRemovedLabelsParams(originalVfsConfig, updatedVfsConfig); + } + } + + UiAction updateAction = new UiVdcMultipleAction(VdcActionType.UpdateHostNicVfsConfig, + updatedVfsConfigsParams, + getModel()); + + updateAction. + then(new UiVdcMultipleAction(VdcActionType.AddVfsConfigNetwork, + addedNetworksParams, + getModel())). + and(new UiVdcMultipleAction(VdcActionType.RemoveVfsConfigNetwork, + removedNetworksParams, + getModel())). + and(new UiVdcMultipleAction(VdcActionType.AddVfsConfigLabel, + addedLabelsParams, + getModel())). + and(new UiVdcMultipleAction(VdcActionType.RemoveVfsConfigLabel, + removedLabelsParams, + getModel())); + + updateAction.runAction(getActionFlowMutex()); + } + + private void initUpdateVfsConfigParams(HostNicVfsConfig originalVfsConfig, HostNicVfsConfig updatedVfsConfig) { + if (shouldUpdateVfsConfig(originalVfsConfig, updatedVfsConfig)) { + UpdateHostNicVfsConfigParameters param = + new UpdateHostNicVfsConfigParameters(updatedVfsConfig.getNicId(), + updatedVfsConfig.getNumOfVfs(), + updatedVfsConfig.isAllNetworksAllowed()); + updatedVfsConfigsParams.add(param); + } + } + + private boolean shouldUpdateVfsConfig(HostNicVfsConfig originalVfsConfig, HostNicVfsConfig updateVfsConfig) { + return updateVfsConfig.getNumOfVfs() != originalVfsConfig.getNumOfVfs() + || updateVfsConfig.isAllNetworksAllowed() != originalVfsConfig.isAllNetworksAllowed(); + } + + private void initAddedNetworksParams(HostNicVfsConfig originalVfsConfig, HostNicVfsConfig updateVfsConfig) { + for (Guid networkId : updateVfsConfig.getNetworks()) { + if (!originalVfsConfig.getNetworks().contains(networkId)) { + addedNetworksParams.add(new VfsConfigNetworkParameters(originalVfsConfig.getNicId(), networkId)); + } + } + } + + private void initRemovedNetworksParams(HostNicVfsConfig originalVfsConfig, HostNicVfsConfig updateVfsConfig) { + for (Guid networkId : originalVfsConfig.getNetworks()) { + if (!updateVfsConfig.getNetworks().contains(networkId)) { + removedNetworksParams.add(new VfsConfigNetworkParameters(originalVfsConfig.getNicId(), networkId)); + } + } + } + + private void initAddedLabelsParams(HostNicVfsConfig originalVfsConfig, HostNicVfsConfig updateVfsConfig) { + for (String label : updateVfsConfig.getLabels()) { + if (!originalVfsConfig.getLabels().contains(label)) { + addedLabelsParams.add(new VfsConfigLabelParameters(originalVfsConfig.getNicId(), label)); + } + } + } + + private void initRemovedLabelsParams(HostNicVfsConfig originalVfsConfig, HostNicVfsConfig updateVfsConfig) { + for (String label : originalVfsConfig.getLabels()) { + if (!updateVfsConfig.getLabels().contains(label)) { + removedLabelsParams.add(new VfsConfigLabelParameters(originalVfsConfig.getNicId(), label)); + } + } + } + +} -- To view, visit http://gerrit.ovirt.org/36976 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: Ide1ff9edbc9d907cbb19034a5789a1c7c7963b3b Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: master Gerrit-Owner: Alona Kaplan <alkap...@redhat.com> _______________________________________________ Engine-patches mailing list Engine-patches@ovirt.org http://lists.ovirt.org/mailman/listinfo/engine-patches