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.DataCenter;
import org.ovirt.engine.api.model.DiskProfile;
import org.ovirt.engine.api.model.DiskProfiles;
import org.ovirt.engine.api.model.Qos;
import org.ovirt.engine.core.common.action.DiskProfileParameters;
import org.ovirt.engine.core.common.action.VdcActionType;
import org.ovirt.engine.core.common.businessentities.qos.QosType;
import org.ovirt.engine.core.common.businessentities.qos.StorageQos;
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 AbstractBackendDiskProfilesResource
extends AbstractBackendCollectionResource<DiskProfile, org.ovirt.engine.core.common.businessentities.profiles.DiskProfile> {
public AbstractBackendDiskProfilesResource() {
super(DiskProfile.class,
org.ovirt.engine.core.common.businessentities.profiles.DiskProfile.class);
}
protected DiskProfiles mapCollection(List<org.ovirt.engine.core.common.businessentities.profiles.DiskProfile> entities) {
DiskProfiles collection = new DiskProfiles();
Map<Guid, Qos> qosMap = new HashMap<>();
for (org.ovirt.engine.core.common.businessentities.profiles.DiskProfile entity : entities) {
DiskProfile profile = populate(map(entity), entity);
collection.getDiskProfiles().add(profile);
if (entity.getQosId() != null) {
qosMap.put(entity.getQosId(), profile.getQos());
}
}
handleQosDataCenterLinks(qosMap);
for (DiskProfile diskProfile : collection.getDiskProfiles()) {
addLinks(diskProfile);
}
return collection;
}
/**
* used to set qos's href (requires dc id).
*/
private void handleQosDataCenterLinks(Map<Guid, Qos> qosMap) {
if (!qosMap.isEmpty()) {
List<StorageQos> list = getBackendCollection(
StorageQos.class,
VdcQueryType.GetAllQosByType,
new QosQueryParameterBase(null, QosType.STORAGE));
for (StorageQos storageQos : list) {
Qos qos = qosMap.get(storageQos.getId());
if (qos != null) {
qos.setDataCenter(new DataCenter());
qos.getDataCenter().setId(storageQos.getStoragePoolId().toString());
}
}
}
}
protected Response add(DiskProfile diskProfile) {
validateParameters(diskProfile);
org.ovirt.engine.core.common.businessentities.profiles.DiskProfile map = map(diskProfile);
DiskProfileParameters parameters =
new DiskProfileParameters(map);
return performCreate(VdcActionType.AddDiskProfile,
parameters,
new QueryIdResolver<Guid>(VdcQueryType.GetDiskProfileById, IdQueryParameters.class));
}
protected abstract void validateParameters(DiskProfile diskProfile);
protected abstract List<org.ovirt.engine.core.common.businessentities.profiles.DiskProfile> getDiskProfilesCollection();
protected DiskProfiles performList() {
return mapCollection(getDiskProfilesCollection());
}
}