package org.ovirt.engine.api.restapi.types;
import org.apache.commons.lang.StringUtils;
import org.ovirt.engine.api.model.Cluster;
import org.ovirt.engine.api.model.Display;
import org.ovirt.engine.api.model.VmPool;
import org.ovirt.engine.api.model.VmPoolType;
import org.ovirt.engine.api.restapi.utils.GuidUtils;
import org.ovirt.engine.core.common.businessentities.VM;
import org.ovirt.engine.core.common.businessentities.VmStatic;
public class VmPoolMapper {
@Mapping(from = VmPool.class, to = org.ovirt.engine.core.common.businessentities.VmPool.class)
public static org.ovirt.engine.core.common.businessentities.VmPool map(VmPool model,
org.ovirt.engine.core.common.businessentities.VmPool template) {
org.ovirt.engine.core.common.businessentities.VmPool entity =
template != null ? template : new org.ovirt.engine.core.common.businessentities.VmPool();
if (model.isSetId()) {
entity.setVmPoolId(GuidUtils.asGuid(model.getId()));
}
if (model.isSetName()) {
entity.setName(model.getName());
}
if (model.isSetDescription()) {
entity.setVmPoolDescription(model.getDescription());
}
if (model.isSetComment()) {
entity.setComment(model.getComment());
}
if (model.isSetSize()) {
entity.setAssignedVmsCount(model.getSize());
}
if (model.isSetCluster()) {
if (model.getCluster().isSetId()) {
entity.setClusterId(GuidUtils.asGuid(model.getCluster().getId()));
} else if (model.getCluster().isSetName()) {
entity.setClusterName(model.getCluster().getName());
}
}
if (model.isSetPrestartedVms()) {
entity.setPrestartedVms(model.getPrestartedVms());
}
if (model.isSetMaxUserVms()) {
entity.setMaxAssignedVmsPerUser(model.getMaxUserVms());
}
if (model.isSetDisplay() && model.getDisplay().isSetProxy()) {
entity.setSpiceProxy("".equals(model.getDisplay().getProxy()) ? null : model.getDisplay().getProxy());
}
if (model.isSetType()) {
entity.setVmPoolType(map(model.getType(), null));
}
if (model.isSetStateful()) {
entity.setStateful(model.isStateful());
}
if (model.isSetAutoStorageSelect()) {
entity.setAutoStorageSelect(model.isAutoStorageSelect());
}
return entity;
}
@Mapping(from = VmPool.class, to = VM.class)
public static VM map(VmPool model, VM template) {
VM entity = template != null ? template : new VM();
entity.setStaticData(map(model, entity.getStaticData()));
return entity;
}
@Mapping(from = VmPool.class, to = VmStatic.class)
public static VmStatic map(VmPool model, VmStatic template) {
VmStatic entity = template != null ? template : new VmStatic();
if (model.getVm() != null) {
entity = VmMapper.map(model.getVm(), entity);
}
entity.setName(model.getName());
entity.setDescription(model.getDescription());
if (model.isSetTemplate() &&
model.getTemplate().isSetId()) {
entity.setVmtGuid(GuidUtils.asGuid(model.getTemplate().getId()));
}
if (model.isSetCluster() &&
model.getCluster().isSetId()) {
entity.setClusterId(GuidUtils.asGuid(model.getCluster().getId()));
}
if (model.isSetUseLatestTemplateVersion()) {
entity.setUseLatestVersion(model.isUseLatestTemplateVersion());
}
return entity;
}
@Mapping(from = org.ovirt.engine.core.common.businessentities.VmPool.class, to = VmPool.class)
public static VmPool map(org.ovirt.engine.core.common.businessentities.VmPool entity, VmPool template) {
VmPool model = template != null ? template : new VmPool();
model.setId(entity.getVmPoolId().toString());
model.setName(entity.getName());
model.setDescription(entity.getVmPoolDescription());
model.setComment(entity.getComment());
model.setSize(entity.getAssignedVmsCount());
model.setPrestartedVms(entity.getPrestartedVms());
if (entity.getClusterId() != null ||
entity.getClusterName() != null) {
model.setCluster(new Cluster());
model.getCluster().setId(entity.getClusterId().toString());
}
model.setMaxUserVms(entity.getMaxAssignedVmsPerUser());
if (StringUtils.isNotBlank(entity.getSpiceProxy())) {
Display display = new Display();
display.setProxy(entity.getSpiceProxy());
model.setDisplay(display);
}
model.setType(map(entity.getVmPoolType(), null));
model.setStateful(entity.isStateful());
model.setAutoStorageSelect(entity.isAutoStorageSelect());
return model;
}
@Mapping(from = VM.class, to = VmPool.class)
public static VmPool map(VM vm, VmPool template) {
VmPool model = template != null ? template : new VmPool();
org.ovirt.engine.api.model.Vm vmModel = VmMapper.map(vm, (org.ovirt.engine.api.model.Vm) null);
vmModel.setCluster(null);
vmModel.setTemplate(null);
vmModel.setVmPool(null);
model.setVm(vmModel);
model.setUseLatestTemplateVersion(vm.isUseLatestVersion());
return model;
}
@Mapping(from = VmPoolType.class, to = org.ovirt.engine.core.common.businessentities.VmPoolType.class)
public static org.ovirt.engine.core.common.businessentities.VmPoolType map(
VmPoolType vmPoolType, org.ovirt.engine.core.common.businessentities.VmPoolType incoming) {
switch (vmPoolType) {
case AUTOMATIC:
return org.ovirt.engine.core.common.businessentities.VmPoolType.AUTOMATIC;
case MANUAL:
return org.ovirt.engine.core.common.businessentities.VmPoolType.MANUAL;
default:
return null;
}
}
@Mapping(from = org.ovirt.engine.core.common.businessentities.VmPoolType.class, to = VmPoolType.class)
public static VmPoolType map(org.ovirt.engine.core.common.businessentities.VmPoolType vmPoolType, VmPoolType incoming) {
if (vmPoolType == null) {
return null;
}
switch (vmPoolType) {
case AUTOMATIC:
return VmPoolType.AUTOMATIC;
case MANUAL:
return VmPoolType.MANUAL;
default:
return null;
}
}
}