package org.ovirt.engine.api.restapi.resource;
import javax.ws.rs.core.Response;
import org.ovirt.engine.api.model.QuotaStorageLimit;
import org.ovirt.engine.api.model.QuotaStorageLimits;
import org.ovirt.engine.api.resource.QuotaStorageLimitResource;
import org.ovirt.engine.api.resource.QuotaStorageLimitsResource;
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.QuotaStorage;
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 BackendQuotaStorageLimitsResource
extends AbstractBackendCollectionResource<QuotaStorageLimit, Quota>
implements QuotaStorageLimitsResource {
private Guid quotaId;
protected BackendQuotaStorageLimitsResource(Guid quotaId) {
super(QuotaStorageLimit.class, Quota.class);
this.quotaId = quotaId;
}
@Override
public QuotaStorageLimits list() {
Quota quota = getQuota();
QuotaStorageLimits limits = new QuotaStorageLimits();
if (quota.getGlobalQuotaStorage() != null) {
addLimit(quotaId.toString(), limits, quota);
} else if (quota.getQuotaStorages() != null) {
for (QuotaStorage quotaStorage : quota.getQuotaStorages()) {
addLimit(quotaStorage.getStorageId().toString(), limits, quota);
}
}
return limits;
}
private void addLimit(String id, QuotaStorageLimits limits, Quota quota) {
QuotaStorageLimit limit = new QuotaStorageLimit();
limit.setId(id);
limits.getQuotaStorageLimits().add(addLinks(map(quota, limit)));
}
public Response add(QuotaStorageLimit incoming) {
Quota entity = getQuota();
QuotaCRUDParameters parameters = new QuotaCRUDParameters(map(incoming, entity));
performAction(VdcActionType.UpdateQuota, parameters);
entity = getQuota();
updateIncomingId(incoming, entity);
QuotaStorageLimit model = map(entity, incoming);
model = addLinks(doPopulate(model, entity));
return Response.ok(model).build();
}
private void updateIncomingId(QuotaStorageLimit incoming, Quota entity) {
if (incoming.isSetStorageDomain() && incoming.getStorageDomain().isSetId()) {
incoming.setId(incoming.getStorageDomain().getId());
} else {
incoming.setId(entity.getId().toString());
}
}
private Quota getQuota() {
return getEntity(
Quota.class,
VdcQueryType.GetQuotaByQuotaId,
new IdQueryParameters(quotaId),
quotaId.toString()
);
}
@Override
public QuotaStorageLimitResource getLimitResource(String id) {
return inject(new BackendQuotaStorageLimitResource(id, quotaId));
}
}