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: I262282d00bbb16a65f36a2463d3ffe8dbf6594c6 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 A frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/UiAction.java A frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/UiVdcAction.java A frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/UiVdcMultipleAction.java M frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/hosts/HostSetupNetworksModel.java M frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/hosts/NicLabelModel.java M frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/hosts/PfNicLabelModel.java A frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/hosts/VfsConfigAction.java 8 files changed, 382 insertions(+), 31 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/48/36848/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..f483607 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,25 @@ 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()); + + 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/UiAction.java b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/UiAction.java new file mode 100644 index 0000000..a375bd2 --- /dev/null +++ b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/UiAction.java @@ -0,0 +1,89 @@ +package org.ovirt.engine.ui.uicommonweb; + +import org.ovirt.engine.ui.uicommonweb.models.Model; + +public class UiAction { + + private UiAction nextAction; + private Model model; + private UiAction parallelAction; + private int numOfParallelExecutions = 0; + private boolean stopProgressIfNoNextAction; + + public UiAction(Model model) { + this(model, true); + } + + public UiAction(Model model, boolean stopProgressIfNoNextAction) { + this.model = model; + this.stopProgressIfNoNextAction = stopProgressIfNoNextAction; + } + + public final void runAction() { + if (model.getProgress() == null) { + model.startProgress(null); + } + + if (shouldExecute()) { + internalRunAction(); + } else { + runNextAction(); + } + + parallelAction.runAction(numOfParallelExecutions); + } + + private final void runAction(int numOfParallelExecutions) { + this.numOfParallelExecutions = numOfParallelExecutions; + parallelAction.runAction(); + } + + void internalRunAction() { + onActionExecuted(); + runNextAction(); + } + + protected void onActionExecuted() { + --numOfParallelExecutions; + } + + public UiAction then(UiAction nextAction) { + this.nextAction = nextAction; + return nextAction; + } + + public UiAction and(UiAction parallelAction) { + this.parallelAction = parallelAction; + return parallelAction; + } + + protected boolean shouldExecute() { + return true; + } + + private UiAction getNextAction() { + return nextAction; + } + + protected void runNextAction() { + if (getNextAction() != null) { + getNextAction().runAction(); + } else if (isStopProgressIfNoNextAction()) { + stopPropgress(); + } + } + + protected boolean isStopProgressIfNoNextAction() { + return stopProgressIfNoNextAction; + } + + public Model getModel() { + return model; + } + + void stopPropgress() { + if (numOfParallelExecutions == 0) { + model.stopProgress(); + } + } +} diff --git a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/UiVdcAction.java b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/UiVdcAction.java new file mode 100644 index 0000000..1e582d8 --- /dev/null +++ b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/UiVdcAction.java @@ -0,0 +1,54 @@ +package org.ovirt.engine.ui.uicommonweb; + +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.ui.frontend.Frontend; +import org.ovirt.engine.ui.uicommonweb.models.Model; +import org.ovirt.engine.ui.uicompat.FrontendActionAsyncResult; +import org.ovirt.engine.ui.uicompat.IFrontendActionAsyncCallback; + +public class UiVdcAction extends UiAction { + + private VdcActionType actionType; + private VdcActionParametersBase parameters; + + public UiVdcAction(VdcActionType actionType, VdcActionParametersBase parameters, Model model) { + super(model); + this.actionType = actionType; + this.parameters = parameters; + } + + @Override + void internalRunAction() { + Frontend.getInstance().runAction(actionType, parameters, + createCallback()); + } + + private IFrontendActionAsyncCallback createCallback() { + return new IFrontendActionAsyncCallback() { + @Override + public void executed(FrontendActionAsyncResult result) { + onActionExecuted(); + VdcReturnValueBase returnValueBase = result.getReturnValue(); + if (returnValueBase != null && returnValueBase.getSucceeded()) { + onSuccess(); + } else { + onFailure(); + } + } + }; + } + + protected void onSuccess() { + runNextAction(); + } + + protected void onFailure() { + stopPropgress(); + } + + public UiAction then(VdcActionType actionType, VdcActionParametersBase parameters) { + return then(new UiVdcAction(actionType, parameters, getModel())); + } +} diff --git a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/UiVdcMultipleAction.java b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/UiVdcMultipleAction.java new file mode 100644 index 0000000..85409fd --- /dev/null +++ b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/UiVdcMultipleAction.java @@ -0,0 +1,49 @@ +package org.ovirt.engine.ui.uicommonweb; + +import java.util.ArrayList; +import java.util.Collection; + +import org.ovirt.engine.core.common.action.VdcActionParametersBase; +import org.ovirt.engine.core.common.action.VdcActionType; +import org.ovirt.engine.ui.frontend.Frontend; +import org.ovirt.engine.ui.uicommonweb.models.Model; +import org.ovirt.engine.ui.uicompat.FrontendMultipleActionAsyncResult; +import org.ovirt.engine.ui.uicompat.IFrontendMultipleActionAsyncCallback; + +public class UiVdcMultipleAction extends UiAction { + + private VdcActionType actionType; + private Collection<? extends VdcActionParametersBase> parametersList; + + public UiVdcMultipleAction(VdcActionType actionType, + Collection<? extends VdcActionParametersBase> parametersList, + Model + model) { + this(actionType, parametersList, model, true); + } + + public UiVdcMultipleAction(VdcActionType actionType, + Collection<? extends VdcActionParametersBase> parametersList, + Model + model, + boolean stopProgressIfNoNextAction) { + super(model, stopProgressIfNoNextAction); + this.actionType = actionType; + this.parametersList = parametersList; + } + + @Override + void internalRunAction() { + Frontend.getInstance().runMultipleAction(actionType, new ArrayList<>(parametersList), + createCallback()); + } + + private IFrontendMultipleActionAsyncCallback createCallback() { + return new IFrontendMultipleActionAsyncCallback() { + @Override + public void executed(FrontendMultipleActionAsyncResult result) { + UiVdcMultipleAction.super.internalRunAction(); + } + }; + } +} 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..2f1affd 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,39 @@ 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); + setupNetworks.then(getCommitNetworkChangesAction()).then(getVfsConfigCommand()).then(closeAction); + + setupNetworks.runAction(); + } + + public UiAction getCommitNetworkChangesAction() { + return new UiVdcAction(VdcActionType.CommitNetworkChanges, + new VdsActionParameters(getEntity().getId()), + getSetupNetworksModel()) { @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 getVfsConfigCommand() { + return new VfsConfigAction(getSetupNetworksModel(), originalVfsConfigs, nicToVfsConfig, false); + } + + public UiAction getCloseAction() { + return new UiAction(getSetupNetworksModel()) { + @Override + protected void onActionExecuted() { + super.onActionExecuted(); + sourceListModel.setWindow(null); + sourceListModel.search(); + } + }; } @Override @@ -1109,4 +1118,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/NicLabelModel.java b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/hosts/NicLabelModel.java index b618b79..425e78a 100644 --- a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/hosts/NicLabelModel.java +++ b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/hosts/NicLabelModel.java @@ -70,6 +70,6 @@ res &= labelModel.getIsValid(); } - setIsValid(res);; + setIsValid(res); } } diff --git a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/hosts/PfNicLabelModel.java b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/hosts/PfNicLabelModel.java index d4c6ae2..15111ea 100644 --- a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/hosts/PfNicLabelModel.java +++ b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/hosts/PfNicLabelModel.java @@ -69,7 +69,7 @@ res &= labelModel.getIsValid(); } - setIsValid(res);; + setIsValid(res); } /** @@ -103,7 +103,7 @@ /** * Clears the labels from the original interfaces composing this interface, and committing the actual labels (after * removal/addition by the user). - * + * * @param the * interface to which the actual labels will be committed. */ 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..bf48652 --- /dev/null +++ b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/hosts/VfsConfigAction.java @@ -0,0 +1,124 @@ +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 { + + Collection<HostNicVfsConfig> originalVfsConfigs; + Map<Guid, HostNicVfsConfig> updatedNicToVfsConfig; + + Set<UpdateHostNicVfsConfigParameters> updatedVfsConfigsParams = new HashSet<>(); + Set<VfsConfigNetworkParameters> addedNetworksParams = new HashSet<>(); + Set<VfsConfigNetworkParameters> removedNetworksParams = new HashSet<>(); + Set<VfsConfigLabelParameters> addedLabelsParams = new HashSet<>(); + Set<VfsConfigLabelParameters> removedLabelsParams = new HashSet<>(); + + public VfsConfigAction(Model model, + Collection<HostNicVfsConfig> originalVfsConfigs, + Map<Guid, HostNicVfsConfig> updatedNicToVfsConfig, + boolean stopProgressIfNoNextAction) { + super(model, stopProgressIfNoNextAction); + this.originalVfsConfigs = originalVfsConfigs; + this.updatedNicToVfsConfig = updatedNicToVfsConfig; + } + + @Override + protected void onActionExecuted() { + super.onActionExecuted(); + + for (HostNicVfsConfig originalVfsConfig : originalVfsConfigs) { + HostNicVfsConfig updateVfsConfig = updatedNicToVfsConfig.get(originalVfsConfig.getNicId()); + + initUpdateVfsConfigParams(originalVfsConfig, updateVfsConfig); + + if (!updateVfsConfig.isAllNetworksAllowed()) { + initAddedNetworksParams(originalVfsConfig, updateVfsConfig); + initRemovedNetworksParams(originalVfsConfig, updateVfsConfig); + initAddedLabelsParams(originalVfsConfig, updateVfsConfig); + initRemovedLabelsParams(originalVfsConfig, updateVfsConfig); + } + } + + new UiVdcMultipleAction(VdcActionType.UpdateHostNicVfsConfig, + updatedVfsConfigsParams, + getModel(), + isStopProgressIfNoNextAction()). + then(new UiVdcMultipleAction(VdcActionType.AddVfsConfigNetwork, + addedNetworksParams, + getModel(), + isStopProgressIfNoNextAction())). + and(new UiVdcMultipleAction(VdcActionType.RemoveVfsConfigNetwork, + removedNetworksParams, + getModel(), + isStopProgressIfNoNextAction())). + and(new UiVdcMultipleAction(VdcActionType.AddVfsConfigLabel, + addedLabelsParams, + getModel(), + isStopProgressIfNoNextAction())). + and(new UiVdcMultipleAction(VdcActionType.RemoveVfsConfigLabel, + removedLabelsParams, + getModel(), + isStopProgressIfNoNextAction())); + } + + private void initUpdateVfsConfigParams(HostNicVfsConfig originalVfsConfig, HostNicVfsConfig updateVfsConfig) { + if (shouldUpdateVfsConfig(originalVfsConfig, updateVfsConfig)) { + UpdateHostNicVfsConfigParameters param = + new UpdateHostNicVfsConfigParameters(updateVfsConfig.getNicId(), + updateVfsConfig.getNumOfVfs(), + updateVfsConfig.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)) { + removedLabelsParams.add(new VfsConfigLabelParameters(originalVfsConfig.getNicId(), label)); + } + } + } + + private void initRemovedLabelsParams(HostNicVfsConfig originalVfsConfig, HostNicVfsConfig updateVfsConfig) { + for (String label : originalVfsConfig.getLabels()) { + if (!updateVfsConfig.getNetworks().contains(label)) { + addedLabelsParams.add(new VfsConfigLabelParameters(originalVfsConfig.getNicId(), label)); + } + } + } + +} -- To view, visit http://gerrit.ovirt.org/36848 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I262282d00bbb16a65f36a2463d3ffe8dbf6594c6 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