package org.ovirt.engine.ui.uicommonweb.models.hosts.numa; import java.util.List; import java.util.Set; import org.ovirt.engine.core.common.businessentities.VDS; import org.ovirt.engine.core.common.businessentities.VM; import org.ovirt.engine.core.compat.Guid; import org.ovirt.engine.ui.uicommonweb.models.Model; import org.ovirt.engine.ui.uicommonweb.models.vms.UnitVmModel; public class VmNumaSupportModel extends NumaSupportModel { private final VM vm; public VmNumaSupportModel(List<VDS> hosts, VDS host, Model parentModel, VM vm) { super(hosts, host, parentModel); this.vm = vm; } @Override public void setVmsWithvNumaNodeList(List<VM> vmsWithvNumaNodeList) { super.setVmsWithvNumaNodeList(vmsWithvNumaNodeList); if (Guid.isNullOrEmpty(vm.getId())) { if (getParentModel() instanceof UnitVmModel) { UnitVmModel model = (UnitVmModel) getParentModel(); if (model.getVmNumaNodes() != null) { // maintains NUMA pinning settings in UI prior to save // for new VMs this.getVm().setvNumaNodeList(model.getVmNumaNodes()); } } vmsWithvNumaNodeList.add(vm); } else { for (VM vmFromDb : vmsWithvNumaNodeList) { if (vmFromDb.getId().equals(vm.getId())) { // maintains NUMA pinning settings in UI prior to save // for existing VMs vmFromDb.setvNumaNodeList(vm.getvNumaNodeList()); break; } } } } @Override protected void initVNumaNodes() { super.initVNumaNodes(); lockOtherVmNodes(); } private void lockOtherVmNodes() { for (VNodeModel nodeModel : getUnassignedNumaNodes()) { if (!nodeModel.getVm().getId().equals(vm.getId())) { nodeModel.setLocked(true); } } for (Set<VNodeModel> nodeModelSet : assignedNumaNodes.values()) { for (VNodeModel nodeModel : nodeModelSet) { if (!nodeModel.getVm().getId().equals(vm.getId())) { nodeModel.setLocked(true); } } } } public VM getVm() { return vm; } }