package org.ovirt.engine.api.restapi.resource; import javax.ws.rs.core.Response; import org.ovirt.engine.api.model.BaseResource; import org.ovirt.engine.api.model.BaseResources; import org.ovirt.engine.api.restapi.resource.AbstractBackendSubResource.ParametersProvider; 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.compat.Guid; public abstract class BackendPolicyUnitsResource<M extends BaseResources, N extends BaseResource> extends AbstractBackendCollectionResource<N, ClusterPolicy> { protected final Guid schedulingPolicyId; protected BackendPolicyUnitsResource(Guid schedulingPolicyId, Class<N> baseResourcesClass) { super(baseResourcesClass, ClusterPolicy.class); this.schedulingPolicyId = schedulingPolicyId; } protected abstract ParametersProvider<N, ClusterPolicy> getAddParametersProvider(); protected abstract void updateIncomingId(N incoming); // need to revisit: update should be in a separate hierarchy protected Response performAdd(N incoming) { ClusterPolicy entity = getClusterPolicy(); performAction(VdcActionType.EditClusterPolicy, getAddParametersProvider().getParameters(incoming, entity)); entity = getClusterPolicy(); updateIncomingId(incoming); N model = map(entity, incoming); model = addLinks(doPopulate(model, entity)); return Response.ok(model).build(); } protected ClusterPolicy getClusterPolicy() { return getEntity(ClusterPolicy.class, VdcQueryType.GetClusterPolicyById, new IdQueryParameters(schedulingPolicyId), schedulingPolicyId.toString()); } }