package org.ovirt.engine.api.restapi.resource;
import javax.ws.rs.core.Response;
import org.ovirt.engine.api.model.Qos;
import org.ovirt.engine.api.resource.QosResource;
import org.ovirt.engine.api.restapi.utils.GuidUtils;
import org.ovirt.engine.core.common.action.QosParametersBase;
import org.ovirt.engine.core.common.action.VdcActionParametersBase;
import org.ovirt.engine.core.common.action.VdcActionType;
import org.ovirt.engine.core.common.businessentities.qos.QosBase;
import org.ovirt.engine.core.common.businessentities.qos.QosType;
import org.ovirt.engine.core.common.queries.IdQueryParameters;
import org.ovirt.engine.core.common.queries.VdcQueryType;
import org.ovirt.engine.core.compat.Guid;
public class BackendQosResource extends AbstractBackendSubResource<Qos, QosBase> implements QosResource {
protected BackendQossResource parent;
public BackendQossResource getParent() {
return parent;
}
public BackendQosResource(String id, BackendQossResource parent) {
super(id, Qos.class, QosBase.class);
this.parent = parent;
}
@Override
public Qos get() {
IdQueryParameters params = new IdQueryParameters(guid);
Qos qos = performGet(VdcQueryType.GetQosById, params);
return qos;
}
@Override
public Qos update(final Qos incoming) {
QueryIdResolver<Guid> entityResolver =
new QueryIdResolver<>(VdcQueryType.GetQosById, IdQueryParameters.class);
final QosBase qosBase =
getEntity(new QueryIdResolver<>(VdcQueryType.GetQosById, IdQueryParameters.class), true);
return performUpdate(incoming,
entityResolver,
updateActionTypeForQosType(qosBase.getQosType()),
(model, entity) -> {
QosParametersBase<QosBase> parameters = new QosParametersBase<>();
parameters.setQosId(guid);
parameters.setQos(map(incoming, entity));
return parameters;
});
}
private VdcActionType updateActionTypeForQosType(QosType qosType) {
switch (qosType) {
case STORAGE:
return VdcActionType.UpdateStorageQos;
case CPU:
return VdcActionType.UpdateCpuQos;
case NETWORK:
return VdcActionType.UpdateNetworkQoS;
case HOSTNETWORK:
return VdcActionType.UpdateHostNetworkQos;
default:
throw new IllegalArgumentException("Unsupported QoS type \"" + qosType + "\"");
}
}
protected class UpdateParametersProvider implements ParametersProvider<Qos, QosBase> {
@Override
public VdcActionParametersBase getParameters(Qos incoming,
QosBase entity) {
QosParametersBase<QosBase> parameters = new QosParametersBase<>();
parameters.setQosId(guid);
parameters.setQos(map(incoming, entity));
return parameters;
}
}
@Override
public Response remove() {
get();
QosParametersBase<?> params = new QosParametersBase<>();
params.setQosId(GuidUtils.asGuid(id));
return performAction(VdcActionType.RemoveStorageQos, params);
}
}