package org.ovirt.engine.api.restapi.resource;
import javax.ws.rs.core.Response;
import org.ovirt.engine.api.model.Quota;
import org.ovirt.engine.api.resource.AssignedPermissionsResource;
import org.ovirt.engine.api.resource.QuotaClusterLimitsResource;
import org.ovirt.engine.api.resource.QuotaResource;
import org.ovirt.engine.api.resource.QuotaStorageLimitsResource;
import org.ovirt.engine.core.common.VdcObjectType;
import org.ovirt.engine.core.common.action.IdParameters;
import org.ovirt.engine.core.common.action.QuotaCRUDParameters;
import org.ovirt.engine.core.common.action.VdcActionParametersBase;
import org.ovirt.engine.core.common.action.VdcActionType;
import org.ovirt.engine.core.common.queries.GetPermissionsForObjectParameters;
import org.ovirt.engine.core.common.queries.IdQueryParameters;
import org.ovirt.engine.core.common.queries.VdcQueryType;
public class BackendQuotaResource extends AbstractBackendSubResource<Quota, org.ovirt.engine.core.common.businessentities.Quota> implements QuotaResource {
protected BackendQuotasResource parent;
public BackendQuotasResource getParent() {
return parent;
}
public BackendQuotaResource(String id, BackendQuotasResource parent) {
super(id,
Quota.class,
org.ovirt.engine.core.common.businessentities.Quota.class);
this.parent = parent;
}
@Override
public Quota get() {
return addLinks(performGet(VdcQueryType.GetQuotaByQuotaId, new IdQueryParameters(guid)));
}
protected class UpdateParametersProvider implements ParametersProvider<Quota, org.ovirt.engine.core.common.businessentities.Quota> {
@Override
public VdcActionParametersBase getParameters(Quota incoming,
org.ovirt.engine.core.common.businessentities.Quota entity) {
return new QuotaCRUDParameters(map(incoming, entity));
}
}
@Override
public Quota update(Quota incoming) {
return performUpdate(incoming,
new QueryIdResolver<>(VdcQueryType.GetQuotaByQuotaId, IdQueryParameters.class),
VdcActionType.UpdateQuota,
new UpdateParametersProvider());
}
@Override
public Response remove() {
get();
IdParameters prms = new IdParameters(asGuid(id));
return performAction(VdcActionType.RemoveQuota, prms);
}
@Override
public QuotaStorageLimitsResource getQuotaStorageLimitsResource() {
return inject(new BackendQuotaStorageLimitsResource(guid));
}
@Override
public QuotaClusterLimitsResource getQuotaClusterLimitsResource() {
return inject(new BackendQuotaClusterLimitsResource(guid));
}
@Override
public AssignedPermissionsResource getPermissionsResource() {
return inject(new BackendAssignedPermissionsResource(guid,
VdcQueryType.GetPermissionsForObject,
new GetPermissionsForObjectParameters(guid),
Quota.class,
VdcObjectType.Quota));
}
}