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.action.SyncUiAction; import org.ovirt.engine.ui.uicommonweb.action.UiAction; import org.ovirt.engine.ui.uicommonweb.action.UiVdcMultipleAction; import org.ovirt.engine.ui.uicommonweb.models.Model; public class VfsConfigAction extends SyncUiAction { 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 onActionExecute() { 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(), true, false); 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())). then(getNextAction()); then(null); updateAction.runParallelAction(getActionFlowState()); } 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.getNetworkLabels()) { if (!originalVfsConfig.getNetworkLabels().contains(label)) { addedLabelsParams.add(new VfsConfigLabelParameters(originalVfsConfig.getNicId(), label)); } } } private void initRemovedLabelsParams(HostNicVfsConfig originalVfsConfig, HostNicVfsConfig updateVfsConfig) { for (String label : originalVfsConfig.getNetworkLabels()) { if (!updateVfsConfig.getNetworkLabels().contains(label)) { removedLabelsParams.add(new VfsConfigLabelParameters(originalVfsConfig.getNicId(), label)); } } } }