package org.ovirt.engine.ui.uicommonweb.models.hosts.numa;
import static java.util.Objects.requireNonNull;
import java.util.Arrays;
import org.ovirt.engine.core.common.businessentities.VM;
import org.ovirt.engine.core.common.businessentities.VmNumaNode;
import org.ovirt.engine.ui.uicommonweb.models.Model;
/**
* Model of a virtual numa node used for drag and drop in the numa pinning dialog. It is backed by a real virtual
* numa node entity. The numa node entity supplied to construct the numa node model will never be manipulated by the
* model.
*/
public class VNodeModel extends Model {
private final VM vm;
private final VmNumaNode vmNumaNode;
private boolean pinned;
private boolean locked;
private Integer hostNodeIndex;
public VNodeModel(VM vm, VmNumaNode vmNumaNode) {
this.vm = vm;
this.vmNumaNode = vmNumaNode;
if (vmNumaNode.getVdsNumaNodeList() != null && !vmNumaNode.getVdsNumaNodeList().isEmpty()){
hostNodeIndex = vmNumaNode.getVdsNumaNodeList().get(0);
pinned = true;
}
}
public VM getVm() {
return vm;
}
public Integer getIndex() {
return vmNumaNode.getIndex();
}
public Integer getHostNodeIndex() {
return hostNodeIndex;
}
public boolean isPinned() {
return pinned;
}
public void pinTo(Integer hostNodeIndex) {
requireNonNull(hostNodeIndex);
pinned = true;
this.hostNodeIndex = hostNodeIndex;
}
public void unpin(){
pinned = false;
hostNodeIndex = null;
}
public boolean isSplitted() {
return vmNumaNode.getVdsNumaNodeList() != null && vmNumaNode.getVdsNumaNodeList().size() > 1;
}
/**
* Convert the model representation of a virtual numa node to a real virtual numa node
* @return the numa node
*/
public VmNumaNode toVmNumaNode(){
final VmNumaNode newNode = new VmNumaNode();
newNode.setIndex(vmNumaNode.getIndex());
newNode.setId(vmNumaNode.getId());
newNode.setMemTotal(vmNumaNode.getMemTotal());
newNode.setCpuIds(vmNumaNode.getCpuIds());
if (isPinned()) {
newNode.setVdsNumaNodeList(Arrays.asList(hostNodeIndex));
}
return newNode;
}
public void setLocked(boolean locked) {
this.locked = locked;
}
public boolean isLocked() {
return locked;
}
}