package org.ovirt.engine.api.restapi.resource;
import javax.ws.rs.core.Response;
import org.ovirt.engine.api.model.Weight;
import org.ovirt.engine.api.model.Weights;
import org.ovirt.engine.api.resource.WeightResource;
import org.ovirt.engine.api.resource.WeightsResource;
import org.ovirt.engine.api.restapi.resource.AbstractBackendSubResource.ParametersProvider;
import org.ovirt.engine.core.common.scheduling.ClusterPolicy;
import org.ovirt.engine.core.common.scheduling.parameters.ClusterPolicyCRUDParameters;
import org.ovirt.engine.core.common.utils.Pair;
import org.ovirt.engine.core.compat.Guid;
public class BackendWeightsResource extends BackendPolicyUnitsResource<Weights, Weight> implements WeightsResource {
protected BackendWeightsResource(Guid schedulingPolicyId) {
super(schedulingPolicyId, Weight.class);
}
@Override
public Weights list() {
ClusterPolicy clusterPolicy = getClusterPolicy();
Weights weights = new Weights();
if (clusterPolicy.getFunctions() != null) {
for (Pair<Guid, Integer> weightPair : clusterPolicy.getFunctions()) {
Weight weight = new Weight();
weight.setId(weightPair.getFirst().toString());
weight.setFactor(weightPair.getSecond());
weights.getWeights().add(addLinks(map(clusterPolicy, weight)));
}
}
return weights;
}
@Override
public WeightResource getWeightResource(String id) {
return inject(new BackendWeightResource(id, this));
}
@Override
public Response add(Weight incoming) {
return performAdd(incoming);
}
@Override
protected ParametersProvider<Weight, ClusterPolicy> getAddParametersProvider() {
return (model, entity) -> new ClusterPolicyCRUDParameters(entity.getId(), map(model, entity));
}
@Override
protected void updateIncomingId(Weight incoming) {
incoming.setId(incoming.getSchedulingPolicyUnit().getId());
}
}