package org.ovirt.engine.api.restapi.resource;
import javax.ws.rs.core.Response;
import org.ovirt.engine.api.model.QuotaClusterLimit;
import org.ovirt.engine.api.model.QuotaClusterLimits;
import org.ovirt.engine.api.resource.QuotaClusterLimitResource;
import org.ovirt.engine.api.resource.QuotaClusterLimitsResource;
import org.ovirt.engine.core.common.action.QuotaCRUDParameters;
import org.ovirt.engine.core.common.action.VdcActionType;
import org.ovirt.engine.core.common.businessentities.Quota;
import org.ovirt.engine.core.common.businessentities.QuotaCluster;
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 BackendQuotaClusterLimitsResource
extends AbstractBackendCollectionResource<QuotaClusterLimit, Quota>
implements QuotaClusterLimitsResource {
private Guid quotaId;
protected BackendQuotaClusterLimitsResource(Guid quotaId) {
super(QuotaClusterLimit.class, Quota.class);
this.quotaId = quotaId;
}
@Override
public QuotaClusterLimits list() {
Quota quota = getQuota();
QuotaClusterLimits limits = new QuotaClusterLimits();
if (quota.getGlobalQuotaCluster() != null) {
addLimit(quotaId.toString(), limits, quota);
} else if (quota.getQuotaClusters() != null) {
for (QuotaCluster quotaCluster : quota.getQuotaClusters()) {
addLimit(quotaCluster.getClusterId().toString(), limits, quota);
}
}
return limits;
}
private void addLimit(String id, QuotaClusterLimits limits, Quota quota) {
QuotaClusterLimit limit = new QuotaClusterLimit();
limit.setId(id);
limits.getQuotaClusterLimits().add(addLinks(map(quota, limit)));
}
@Override
public Response add(QuotaClusterLimit incoming) {
Quota entity = getQuota();
QuotaCRUDParameters parameters = new QuotaCRUDParameters(map(incoming, entity));
performAction(VdcActionType.UpdateQuota, parameters);
entity = getQuota();
updateIncomingId(incoming, entity);
QuotaClusterLimit model = map(entity, incoming);
model = addLinks(doPopulate(model, entity));
return Response.ok(model).build();
}
@Override
public QuotaClusterLimitResource getLimitResource(String id) {
return inject(new BackendQuotaClusterLimitResource(id, quotaId));
}
private void updateIncomingId(QuotaClusterLimit incoming, Quota entity) {
if (incoming.isSetCluster() && incoming.getCluster().isSetId()) {
incoming.setId(incoming.getCluster().getId());
} else {
incoming.setId(entity.getId().toString());
}
}
private Quota getQuota() {
return getEntity(
Quota.class,
VdcQueryType.GetQuotaByQuotaId,
new IdQueryParameters(quotaId),
quotaId.toString()
);
}
}