package org.ovirt.engine.api.restapi.resource;
import org.ovirt.engine.api.model.CdRom;
import org.ovirt.engine.api.model.CdRoms;
import org.ovirt.engine.api.resource.DeviceResource;
import org.ovirt.engine.api.resource.DevicesResource;
import org.ovirt.engine.core.common.action.VmManagementParametersBase;
import org.ovirt.engine.core.common.action.VdcActionParametersBase;
import org.ovirt.engine.core.common.action.VdcActionType;
import org.ovirt.engine.core.common.businessentities.VmStatic;
import org.ovirt.engine.core.common.businessentities.VM;
import org.ovirt.engine.core.common.queries.GetVmByVmIdParameters;
import org.ovirt.engine.core.common.queries.VdcQueryParametersBase;
import org.ovirt.engine.core.common.queries.VdcQueryType;
import org.ovirt.engine.core.compat.Guid;
import org.ovirt.engine.api.restapi.resource.AbstractBackendSubResource.ParametersProvider;
import static org.ovirt.engine.api.restapi.types.CdRomMapper.CDROM_ID;
public class BackendCdRomsResource
extends AbstractBackendDevicesResource<CdRom, CdRoms, VM>
implements DevicesResource<CdRom, CdRoms> {
public BackendCdRomsResource(Guid parentId,
VdcQueryType queryType,
VdcQueryParametersBase queryParams) {
super(CdRom.class,
CdRoms.class,
VM.class,
parentId,
queryType,
queryParams,
VdcActionType.UpdateVm,
VdcActionType.UpdateVm,
VdcActionType.UpdateVm);
}
@Override
protected boolean matchEntity(VM entity, Guid id) {
return (id == null || id.equals(CDROM_ID)) && parentId.equals(entity.getQueryableId());
}
@Override
protected boolean matchEntity(VM entity, String name) {
return false;
}
@Override
protected String[] getRequiredAddFields() {
return new String[] { "file.id" };
}
@Override
protected String[] getRequiredUpdateFields() {
return new String[] { "file.id" };
}
@Override
protected VdcActionParametersBase getAddParameters(VM mapped, CdRom cdrom) {
return new VmManagementParametersBase(getUpdatable(mapped.getStaticData().getiso_path()));
}
@Override
protected VdcActionParametersBase getRemoveParameters(String id) {
return new VmManagementParametersBase(getUpdatable(null));
}
protected VmStatic getUpdatable(String isoPath) {
VmStatic updatable = getEntity(VM.class,
VdcQueryType.GetVmByVmId,
new GetVmByVmIdParameters(parentId),
parentId.toString()).getStaticData();
updatable.setiso_path(isoPath);
return updatable;
}
@Override
protected ParametersProvider<CdRom, VM> getUpdateParametersProvider() {
return new UpdateParametersProvider();
}
protected class UpdateParametersProvider implements ParametersProvider<CdRom, VM> {
@Override
public VdcActionParametersBase getParameters(CdRom incoming, VM entity) {
return new VmManagementParametersBase(getUpdatable(incoming.getFile().getId()));
}
}
@Override
@SingleEntityResource
public DeviceResource<CdRom> getDeviceSubResource(String id) {
return inject(new BackendCdRomResource(modelType,
entityType,
asGuidOr404(id),
this,
updateType,
getUpdateParametersProvider(),
getRequiredUpdateFields()));
}
}