package org.ovirt.engine.api.restapi.resource;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.ws.rs.core.Response;
import org.ovirt.engine.api.model.CpuProfile;
import org.ovirt.engine.api.model.CpuProfiles;
import org.ovirt.engine.api.model.DataCenter;
import org.ovirt.engine.api.model.Qos;
import org.ovirt.engine.core.common.action.CpuProfileParameters;
import org.ovirt.engine.core.common.action.VdcActionType;
import org.ovirt.engine.core.common.businessentities.qos.CpuQos;
import org.ovirt.engine.core.common.businessentities.qos.QosType;
import org.ovirt.engine.core.common.queries.IdQueryParameters;
import org.ovirt.engine.core.common.queries.QosQueryParameterBase;
import org.ovirt.engine.core.common.queries.VdcQueryType;
import org.ovirt.engine.core.compat.Guid;
public abstract class AbstractBackendCpuProfilesResource
extends AbstractBackendCollectionResource<CpuProfile, org.ovirt.engine.core.common.businessentities.profiles.CpuProfile> {
public AbstractBackendCpuProfilesResource() {
super(CpuProfile.class, org.ovirt.engine.core.common.businessentities.profiles.CpuProfile.class);
}
protected CpuProfiles mapCollection(List<org.ovirt.engine.core.common.businessentities.profiles.CpuProfile> entities) {
CpuProfiles collection = new CpuProfiles();
Map<Guid, Qos> qosMap = new HashMap<>();
for (org.ovirt.engine.core.common.businessentities.profiles.CpuProfile entity : entities) {
CpuProfile profile = populate(map(entity), entity);
collection.getCpuProfiles().add(profile);
if (entity.getQosId() != null) {
qosMap.put(entity.getQosId(), profile.getQos());
}
}
handleQosDataCenterLinks(qosMap);
for (CpuProfile cpuProfile : collection.getCpuProfiles()) {
addLinks(cpuProfile);
}
return collection;
}
/**
* used to set qos's href (requires dc id).
*/
private void handleQosDataCenterLinks(Map<Guid, Qos> qosMap) {
if (!qosMap.isEmpty()) {
List<CpuQos> list = getBackendCollection(
CpuQos.class,
VdcQueryType.GetAllQosByType,
new QosQueryParameterBase(null, QosType.CPU));
for (CpuQos cpuQos : list) {
Qos qos = qosMap.get(cpuQos.getId());
if (qos != null) {
qos.setDataCenter(new DataCenter());
qos.getDataCenter().setId(cpuQos.getStoragePoolId().toString());
}
}
}
}
protected Response add(CpuProfile cpuProfile) {
validateParameters(cpuProfile);
CpuProfileParameters parameters =
new CpuProfileParameters();
org.ovirt.engine.core.common.businessentities.profiles.CpuProfile map = map(cpuProfile);
parameters.setProfile(map);
parameters.setAddPermissions(true);
return performCreate(VdcActionType.AddCpuProfile,
parameters,
new QueryIdResolver<Guid>(VdcQueryType.GetCpuProfileById, IdQueryParameters.class));
}
protected abstract void validateParameters(CpuProfile cpuProfile);
protected abstract List<org.ovirt.engine.core.common.businessentities.profiles.CpuProfile> getCpuProfilesCollection();
protected CpuProfiles performList() {
return mapCollection(getCpuProfilesCollection());
}
}