package org.ovirt.engine.api.restapi.types; import org.apache.commons.lang.StringUtils; import org.ovirt.engine.api.model.Boot; import org.ovirt.engine.api.model.OperatingSystem; import org.ovirt.engine.api.model.Template; import org.ovirt.engine.api.model.TemplateStatus; import org.ovirt.engine.api.model.TemplateVersion; import org.ovirt.engine.core.common.action.UpdateVmTemplateParameters; import org.ovirt.engine.core.common.businessentities.VmInit; import org.ovirt.engine.core.common.businessentities.VmStatic; import org.ovirt.engine.core.common.businessentities.VmTemplate; import org.ovirt.engine.core.common.businessentities.VmTemplateStatus; import org.ovirt.engine.core.common.osinfo.OsRepository; import org.ovirt.engine.core.common.utils.SimpleDependencyInjector; import org.ovirt.engine.core.compat.Guid; public class TemplateMapper extends VmBaseMapper { @Mapping(from = Template.class, to = VmTemplate.class) public static VmTemplate map(Template model, VmTemplate incoming) { VmTemplate entity = incoming != null ? incoming : new VmTemplate(); mapVmBaseModelToEntity(entity, model); if (model.isSetInitialization()) { entity.setVmInit(InitializationMapper.map(model.getInitialization(), entity.getVmInit())); } if (model.isSetCpu() && model.getCpu().isSetArchitecture()) { entity.setClusterArch(CPUMapper.map(model.getCpu().getArchitecture(), null)); } if (model.isSetDomain() && model.getDomain().isSetName()) { if (entity.getVmInit() == null) { entity.setVmInit(new VmInit()); } entity.getVmInit().setDomain(model.getDomain().getName()); } if (model.getVersion() != null) { if (model.getVersion().getBaseTemplate() != null && StringUtils.isNotEmpty(model.getVersion().getBaseTemplate().getId())) { entity.setBaseTemplateId(Guid.createGuidFromString(model.getVersion().getBaseTemplate().getId())); } if (model.getVersion().isSetVersionName()) { entity.setTemplateVersionName(model.getVersion().getVersionName()); } // numbering is generated in the backend, hence even if user specified version number, we ignore it. } return entity; } @Mapping(from = Template.class, to = VmStatic.class) public static VmStatic map(Template model, VmStatic incoming) { VmStatic staticVm = incoming != null ? incoming : new VmStatic(); mapVmBaseModelToEntity(staticVm, model); if (model.isSetInitialization()) { staticVm.setVmInit(InitializationMapper.map(model.getInitialization(), staticVm.getVmInit())); } if (model.isSetDomain() && model.getDomain().isSetName()) { if (staticVm.getVmInit() == null) { staticVm.setVmInit(new VmInit()); } staticVm.getVmInit().setDomain(model.getDomain().getName()); } return staticVm; } @Mapping(from = VmTemplate.class, to = Template.class) public static Template map(VmTemplate entity, Template incoming) { Template model = incoming != null ? incoming : new Template(); mapVmBaseEntityToModel(model, entity); if (entity.getVmInit() != null) { model.setInitialization(InitializationMapper.map(entity.getVmInit(), null)); } if (entity.getStatus() != null) { model.setStatus(mapTemplateStatus(entity.getStatus())); } if (entity.getDefaultBootSequence() != null || entity.getKernelUrl() != null || entity.getInitrdUrl() != null || entity.getKernelParams() != null) { OperatingSystem os = new OperatingSystem(); os.setType(SimpleDependencyInjector.getInstance().get(OsRepository.class).getUniqueOsNames().get(entity.getOsId())); if (entity.getDefaultBootSequence() != null) { Boot boot = VmMapper.map(entity.getDefaultBootSequence(), null); os.setBoot(boot); } os.setKernel(entity.getKernelUrl()); os.setInitrd(entity.getInitrdUrl()); os.setCmdline(entity.getKernelParams()); model.setOs(os); } if (entity.getClusterArch() != null) { model.getCpu().setArchitecture(CPUMapper.map(entity.getClusterArch(), null)); } model.setDisplay(DisplayMapper.map(entity, null)); model.getDisplay().setDisconnectAction(map(entity.getConsoleDisconnectAction(), null).toString()); TemplateVersion version = new TemplateVersion(); version.setVersionName(entity.getTemplateVersionName()); version.setVersionNumber(entity.getTemplateVersionNumber()); Template baseTemplate = new Template(); baseTemplate.setId(entity.getBaseTemplateId().toString()); version.setBaseTemplate(baseTemplate); model.setVersion(version); return model; } @Mapping(from = Template.class, to = UpdateVmTemplateParameters.class) public static UpdateVmTemplateParameters map(Template template, UpdateVmTemplateParameters paramsTemplate) { UpdateVmTemplateParameters params = paramsTemplate != null ? paramsTemplate : new UpdateVmTemplateParameters(); if (template.isSetConsole() && template.getConsole().isSetEnabled()) { params.setConsoleEnabled(template.getConsole().isEnabled()); } return params; } private static TemplateStatus mapTemplateStatus(VmTemplateStatus status) { switch (status) { case OK: return TemplateStatus.OK; case Locked: return TemplateStatus.LOCKED; case Illegal: return TemplateStatus.ILLEGAL; default: return null; } } }