package org.ovirt.engine.api.restapi.resource;
import javax.ws.rs.core.Response;
import org.ovirt.engine.api.model.SchedulingPolicy;
import org.ovirt.engine.api.resource.BalancesResource;
import org.ovirt.engine.api.resource.FiltersResource;
import org.ovirt.engine.api.resource.SchedulingPolicyResource;
import org.ovirt.engine.api.resource.WeightsResource;
import org.ovirt.engine.core.common.action.VdcActionParametersBase;
import org.ovirt.engine.core.common.action.VdcActionType;
import org.ovirt.engine.core.common.queries.IdQueryParameters;
import org.ovirt.engine.core.common.queries.VdcQueryType;
import org.ovirt.engine.core.common.scheduling.ClusterPolicy;
import org.ovirt.engine.core.common.scheduling.parameters.ClusterPolicyCRUDParameters;
import org.ovirt.engine.core.compat.Guid;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class BackendSchedulingPolicyResource extends AbstractBackendSubResource<SchedulingPolicy, ClusterPolicy> implements
SchedulingPolicyResource {
private static final Logger log = LoggerFactory.getLogger(BackendSchedulingPolicyResource.class);
public BackendSchedulingPolicyResource(String id) {
super(id, SchedulingPolicy.class, ClusterPolicy.class);
}
@Override
public SchedulingPolicy get() {
return performGet(VdcQueryType.GetClusterPolicyById, new IdQueryParameters(guid));
}
protected ClusterPolicy getSchedulingPolicy() {
return getEntity(new QueryIdResolver<>(VdcQueryType.GetClusterPolicyById, IdQueryParameters.class), false);
}
@Override
public SchedulingPolicy update(SchedulingPolicy incoming) {
return performUpdate(incoming,
new QueryIdResolver<>(VdcQueryType.GetClusterPolicyById, IdQueryParameters.class),
VdcActionType.EditClusterPolicy,
new UpdateParametersProvider());
}
protected class UpdateParametersProvider implements ParametersProvider<SchedulingPolicy, ClusterPolicy> {
@Override
public VdcActionParametersBase getParameters(SchedulingPolicy incoming, ClusterPolicy entity) {
return new ClusterPolicyCRUDParameters(guid, map(incoming, entity));
}
}
@Override
public FiltersResource getFiltersResource() {
return inject(new BackendFiltersResource(guid));
}
@Override
public WeightsResource getWeightsResource() {
return inject(new BackendWeightsResource(guid));
}
@Override
public BalancesResource getBalancesResource() {
return inject(new BackendBalancesResource(guid));
}
@Override
public Response remove() {
get();
Response performAction = null;
try {
performAction =
performAction(VdcActionType.RemoveClusterPolicy, new ClusterPolicyCRUDParameters(asGuid(id),
new QueryIdResolver<Guid>(VdcQueryType.GetClusterPolicyById,
IdQueryParameters.class).lookupEntity(asGuid(id))));
} catch (BackendFailureException e) {
log.error("Failed performing action", e);
}
return performAction;
}
}