package org.ovirt.engine.api.restapi.resource; import java.util.List; import javax.ws.rs.core.Response; import org.ovirt.engine.api.model.Console; import org.ovirt.engine.api.model.InstanceType; import org.ovirt.engine.api.model.InstanceTypes; import org.ovirt.engine.api.model.Template; import org.ovirt.engine.api.model.VirtioScsi; import org.ovirt.engine.api.resource.InstanceTypeResource; import org.ovirt.engine.api.resource.InstanceTypesResource; import org.ovirt.engine.api.restapi.types.RngDeviceMapper; import org.ovirt.engine.api.restapi.util.DisplayHelper; import org.ovirt.engine.api.restapi.util.VmHelper; import org.ovirt.engine.core.common.action.AddVmTemplateParameters; import org.ovirt.engine.core.common.action.VdcActionType; import org.ovirt.engine.core.common.businessentities.VM; import org.ovirt.engine.core.common.businessentities.VmEntityType; import org.ovirt.engine.core.common.businessentities.VmRngDevice; import org.ovirt.engine.core.common.businessentities.VmStatic; import org.ovirt.engine.core.common.interfaces.SearchType; import org.ovirt.engine.core.common.queries.GetVmTemplateParameters; import org.ovirt.engine.core.common.queries.IdQueryParameters; import org.ovirt.engine.core.common.queries.VdcQueryParametersBase; import org.ovirt.engine.core.common.queries.VdcQueryType; import org.ovirt.engine.core.compat.Guid; public class BackendInstanceTypesResource extends AbstractBackendCollectionResource<InstanceType, org.ovirt.engine.core.common.businessentities.InstanceType> implements InstanceTypesResource { public BackendInstanceTypesResource() { super(InstanceType.class, org.ovirt.engine.core.common.businessentities.InstanceType.class); } @Override public InstanceTypes list() { if (isFiltered()) { return mapCollection(getBackendCollection(VdcQueryType.GetAllInstanceTypes, new VdcQueryParametersBase())); } else { return mapCollection(getBackendCollection(SearchType.InstanceType)); } } @Override public Response add(InstanceType instanceType) { validateParameters(instanceType, "name"); VmStatic vmStatic = getMapper(InstanceType.class, VmStatic.class).map(instanceType, new VmStatic()); VM vm = new VM(); vm.setStaticData(vmStatic); String name = instanceType.getName(); String description = ""; if (instanceType.isSetDescription()) { description = instanceType.getDescription(); } vm.setVmDescription(description); AddVmTemplateParameters addInstanceTypeParameters = new AddVmTemplateParameters(vm, name, description); addInstanceTypeParameters.setTemplateType(VmEntityType.INSTANCE_TYPE); addInstanceTypeParameters.setVmTemplateId(null); addInstanceTypeParameters.setPublicUse(true); addInstanceTypeParameters.setConsoleEnabled(instanceType.getConsole() != null && instanceType.getConsole().isSetEnabled() ? instanceType.getConsole().isEnabled() : false); addInstanceTypeParameters.setVirtioScsiEnabled(instanceType.isSetVirtioScsi() && instanceType.getVirtioScsi().isSetEnabled() ? instanceType.getVirtioScsi().isEnabled() : null); if(instanceType.isSetSoundcardEnabled()) { addInstanceTypeParameters.setSoundDeviceEnabled(instanceType.isSoundcardEnabled()); } DisplayHelper.setGraphicsToParams(instanceType.getDisplay(), addInstanceTypeParameters); Response response = performCreate(VdcActionType.AddVmTemplate, addInstanceTypeParameters, new QueryIdResolver<Guid>(VdcQueryType.GetInstanceType, GetVmTemplateParameters.class)); Template result = (Template) response.getEntity(); if (result != null) { DisplayHelper.adjustDisplayData(this, result); } return response; } @Override public InstanceTypeResource getInstanceTypeResource(String id) { return inject(new BackendInstanceTypeResource(id)); } protected InstanceTypes mapCollection(List<org.ovirt.engine.core.common.businessentities.InstanceType> entities) { InstanceTypes collection = new InstanceTypes(); for (org.ovirt.engine.core.common.businessentities.InstanceType entity : entities) { InstanceType instanceType = map(entity); DisplayHelper.adjustDisplayData(this, instanceType); collection.getInstanceTypes().add(addLinks(populate(instanceType, entity))); } return collection; } @Override protected InstanceType doPopulate(InstanceType model, org.ovirt.engine.core.common.businessentities.InstanceType entity) { if (!model.isSetConsole()) { model.setConsole(new Console()); } model.getConsole().setEnabled(!getConsoleDevicesForEntity(entity.getId()).isEmpty()); if (!model.isSetVirtioScsi()) { model.setVirtioScsi(new VirtioScsi()); } model.getVirtioScsi().setEnabled(!VmHelper.getVirtioScsiControllersForEntity(this, entity.getId()).isEmpty()); model.setSoundcardEnabled(!VmHelper.getSoundDevicesForEntity(this, entity.getId()).isEmpty()); List<VmRngDevice> rngDevices = getRngDevices(entity.getId()); if (rngDevices != null && !rngDevices.isEmpty()) { model.setRngDevice(RngDeviceMapper.map(rngDevices.get(0), null)); } MemoryPolicyHelper.setupMemoryBalloon(model, this); return model; } private List<VmRngDevice> getRngDevices(Guid id) { return getEntity(List.class, VdcQueryType.GetRngDevice, new IdQueryParameters(id), "GetRngDevice", true); } private List<String> getConsoleDevicesForEntity(Guid id) { return getEntity(List.class, VdcQueryType.GetConsoleDevices, new IdQueryParameters(id), "GetConsoleDevices", true); } }