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.Qos;
import org.ovirt.engine.api.model.VnicProfile;
import org.ovirt.engine.api.model.VnicProfiles;
import org.ovirt.engine.core.common.action.AddVnicProfileParameters;
import org.ovirt.engine.core.common.action.VdcActionType;
import org.ovirt.engine.core.common.businessentities.network.NetworkQoS;
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 AbstractBackendVnicProfilesResource
extends AbstractBackendCollectionResource<VnicProfile, org.ovirt.engine.core.common.businessentities.network.VnicProfile> {
public AbstractBackendVnicProfilesResource() {
super(VnicProfile.class, org.ovirt.engine.core.common.businessentities.network.VnicProfile.class);
}
protected VnicProfiles mapCollection(List<org.ovirt.engine.core.common.businessentities.network.VnicProfile> entities) {
VnicProfiles collection = new VnicProfiles();
Map<Guid, Qos> qosMap = new HashMap<>();
for (org.ovirt.engine.core.common.businessentities.network.VnicProfile entity : entities) {
VnicProfile profile = populate(map(entity), entity);
collection.getVnicProfiles().add(profile);
if (entity.getNetworkQosId() != null) {
qosMap.put(entity.getNetworkQosId(), profile.getQos());
}
}
handleQosDataCenterLinks(qosMap);
for (VnicProfile vnicProfile : collection.getVnicProfiles()) {
addLinks(vnicProfile);
}
return collection;
}
/**
* used to set qos's href (requires dc id).
*/
private void handleQosDataCenterLinks(Map<Guid, Qos> qosMap) {
if (!qosMap.isEmpty()) {
List<NetworkQoS> list = getBackendCollection(
NetworkQoS.class,
VdcQueryType.GetAllQosByType,
new QosQueryParameterBase(null, QosType.NETWORK));
for (NetworkQoS networkQoS : list) {
Qos qos = qosMap.get(networkQoS.getId());
if (qos != null) {
qos.setDataCenter(new DataCenter());
qos.getDataCenter().setId(networkQoS.getStoragePoolId().toString());
}
}
}
}
protected Response add(VnicProfile vnicProfile) {
validateParameters(vnicProfile);
AddVnicProfileParameters addVnicProfileParameters =
new AddVnicProfileParameters(map(vnicProfile), !vnicProfile.isSetNetworkFilter());
return performCreate(VdcActionType.AddVnicProfile,
addVnicProfileParameters,
new QueryIdResolver<Guid>(VdcQueryType.GetVnicProfileById, IdQueryParameters.class));
}
protected abstract void validateParameters(VnicProfile vnicProfile);
protected abstract List<org.ovirt.engine.core.common.businessentities.network.VnicProfile> getVnicProfilesCollection();
protected VnicProfiles performList() {
return mapCollection(getVnicProfilesCollection());
}
}