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.DataCenter;
import org.ovirt.engine.api.model.StorageDomain;
import org.ovirt.engine.api.model.StorageType;
import org.ovirt.engine.api.resource.ActionResource;
import org.ovirt.engine.api.resource.AttachedStorageDomainDisksResource;
import org.ovirt.engine.api.resource.AttachedStorageDomainResource;
import org.ovirt.engine.api.restapi.util.StorageDomainHelper;
import org.ovirt.engine.core.common.action.DetachStorageDomainFromPoolParameters;
import org.ovirt.engine.core.common.action.RemoveStorageDomainParameters;
import org.ovirt.engine.core.common.action.StorageDomainPoolParametersBase;
import org.ovirt.engine.core.common.action.VdcActionType;
import org.ovirt.engine.core.common.queries.StorageDomainAndPoolQueryParameters;
import org.ovirt.engine.core.common.queries.VdcQueryType;
import org.ovirt.engine.core.compat.Guid;
public class BackendAttachedStorageDomainResource
extends AbstractBackendActionableResource<StorageDomain, org.ovirt.engine.core.common.businessentities.StorageDomain>
implements AttachedStorageDomainResource {
protected Guid dataCenterId;
public BackendAttachedStorageDomainResource(String id, Guid dataCenterId) {
super(id, StorageDomain.class, org.ovirt.engine.core.common.businessentities.StorageDomain.class);
this.dataCenterId = dataCenterId;
}
@Override
public StorageDomain get() {
return performGet(VdcQueryType.GetStorageDomainByIdAndStoragePoolId,
new StorageDomainAndPoolQueryParameters(guid, dataCenterId));
}
@Override
public Response activate(Action action) {
return doAction(VdcActionType.ActivateStorageDomain,
new StorageDomainPoolParametersBase(guid, dataCenterId),
action);
}
@Override
public Response deactivate(Action action) {
return doAction(VdcActionType.DeactivateStorageDomainWithOvfUpdate,
new StorageDomainPoolParametersBase(guid, dataCenterId),
action);
}
@Override
public ActionResource getActionResource(String action, String ids) {
return inject(new BackendActionResource(action, ids));
}
@Override
protected StorageDomain addParents(StorageDomain storageDomain) {
// This is for backwards compatibility and will be removed in the future:
storageDomain.setDataCenter(new DataCenter());
storageDomain.getDataCenter().setId(dataCenterId.toString());
// Find all the data centers that this storage domain is attached to and add references to them:
StorageDomainHelper.addAttachedDataCenterReferences(this, storageDomain);
return storageDomain;
}
@Override
protected StorageDomain map(org.ovirt.engine.core.common.businessentities.StorageDomain entity, StorageDomain template) {
BackendStorageDomainsResource resource = new BackendStorageDomainsResource();
inject(resource);
return resource.map(entity, template);
}
@Override
public AttachedStorageDomainDisksResource getDisksResource() {
return inject(new BackendAttachedStorageDomainDisksResource(guid));
}
@Override
public Response remove() {
StorageDomain storageDomain = get();
if (storageDomain.getStorage().getType().equals(StorageType.LOCALFS)) {
RemoveStorageDomainParameters params = new RemoveStorageDomainParameters(guid);
params.setDoFormat(true);
return performAction(VdcActionType.RemoveStorageDomain, params);
}
else {
DetachStorageDomainFromPoolParameters params = new DetachStorageDomainFromPoolParameters(guid, dataCenterId);
return performAction(VdcActionType.DetachStorageDomainFromPool, params);
}
}
}