package org.ovirt.engine.api.restapi.resource;
import javax.ws.rs.core.Response;
import org.ovirt.engine.api.model.Action;
import org.ovirt.engine.api.model.Disk;
import org.ovirt.engine.api.model.StorageDomain;
import org.ovirt.engine.api.model.StorageDomains;
import org.ovirt.engine.api.resource.AssignedPermissionsResource;
import org.ovirt.engine.api.resource.DiskResource;
import org.ovirt.engine.api.resource.StatisticsResource;
import org.ovirt.engine.api.restapi.util.ParametersHelper;
import org.ovirt.engine.core.common.queries.GetUnregisteredDiskQueryParameters;
import org.ovirt.engine.core.common.queries.IdQueryParameters;
import org.ovirt.engine.core.common.queries.VdcQueryReturnValue;
import org.ovirt.engine.core.common.queries.VdcQueryType;
import org.ovirt.engine.core.compat.Guid;
public class AbstractBackendStorageDomainDiskResource
extends AbstractBackendActionableResource<Disk, org.ovirt.engine.core.common.businessentities.storage.Disk> {
private static final String UNREGISTERED = "unregistered";
protected final Guid storageDomainId;
public AbstractBackendStorageDomainDiskResource(Guid storageDomainId, String diskId) {
super(diskId, Disk.class, org.ovirt.engine.core.common.businessentities.storage.Disk.class);
this.storageDomainId = storageDomainId;
}
public Disk get() {
Disk disk;
boolean unregistered = ParametersHelper.getBooleanParameter(httpHeaders, uriInfo, UNREGISTERED, true, false);
if (unregistered) {
VdcQueryReturnValue result = runQuery(VdcQueryType.GetDiskByDiskId, new IdQueryParameters(guid));
if (!result.getSucceeded() || result.getReturnValue() == null) {
Guid dataCenterId = BackendDataCenterHelper.lookupByStorageDomainId(this, storageDomainId);
disk = performGet(
VdcQueryType.GetUnregisteredDisk,
new GetUnregisteredDiskQueryParameters(guid, storageDomainId, dataCenterId)
);
}
else {
// The disk was found in the first get which means it is already registered. We must return nothing
// since the unregistered parameter was passed.
return notFound();
}
}
else {
disk = getDelegate().get();
}
if (disk.isSetStorageDomains() && !disk.getStorageDomains().getStorageDomains().isEmpty()) {
for (StorageDomain sd : disk.getStorageDomains().getStorageDomains()) {
if (sd.isSetId() && sd.getId().equals(storageDomainId.toString())) {
return disk;
}
}
}
return notFound();
}
@Override
protected Disk addParents(Disk disk) {
StorageDomain storageDomain = new StorageDomain();
storageDomain.setId(storageDomainId.toString());
StorageDomains storageDomains = new StorageDomains();
storageDomains.getStorageDomains().add(storageDomain);
disk.setStorageDomain(storageDomain);
disk.setStorageDomains(storageDomains);
return disk;
}
public Disk update(Disk disk) {
return getDelegate().update(disk);
}
public Response remove() {
return getDelegate().remove();
}
public StatisticsResource getStatisticsResource() {
return getDelegate().getStatisticsResource();
}
public AssignedPermissionsResource getPermissionsResource() {
return getDelegate().getPermissionsResource();
}
public Response copy(Action action) {
return getDelegate().copy(action);
}
public Response export(Action action) {
return getDelegate().export(action);
}
public Response move(Action action) {
return getDelegate().move(action);
}
public Response sparsify(Action action) {
return getDelegate().sparsify(action);
}
private DiskResource getDelegate() {
return BackendApiResource.getInstance().getDisksResource().getDiskResource(id);
}
}