package org.ovirt.engine.api.restapi.resource;
import java.util.List;
import org.ovirt.engine.api.model.Cluster;
import org.ovirt.engine.api.model.DataCenter;
import org.ovirt.engine.api.resource.AssignedPermissionsResource;
//import org.ovirt.engine.api.resource.AttachedStorageDomainsResource;
import org.ovirt.engine.api.resource.DataCenterResource;
import org.ovirt.engine.core.common.VdcObjectType;
import org.ovirt.engine.core.common.action.StoragePoolManagementParameter;
import org.ovirt.engine.core.common.action.VdcActionParametersBase;
import org.ovirt.engine.core.common.action.VdcActionType;
import org.ovirt.engine.core.common.businessentities.storage_pool;
import org.ovirt.engine.core.common.interfaces.SearchType;
import org.ovirt.engine.core.common.queries.GetPermissionsForObjectParameters;
import org.ovirt.engine.core.common.queries.StorageDomainQueryParametersBase;
import org.ovirt.engine.core.common.queries.StoragePoolQueryParametersBase;
import org.ovirt.engine.core.common.queries.VdcQueryType;
import org.ovirt.engine.core.compat.Guid;
import static org.ovirt.engine.api.restapi.resource.BackendDataCentersResource.SUB_COLLECTIONS;
public class BackendDataCenterResource extends AbstractBackendSubResource<DataCenter, storage_pool>
implements DataCenterResource {
private BackendDataCentersResource parent;
public BackendDataCenterResource(String id, BackendDataCentersResource parent) {
super(id, DataCenter.class, storage_pool.class, SUB_COLLECTIONS);
this.parent = parent;
}
@Override
public DataCenter get() {
return performGet(VdcQueryType.GetStoragePoolById, new StoragePoolQueryParametersBase(guid));
}
@Override
public DataCenter update(DataCenter incoming) {
return performUpdate(incoming,
new QueryIdResolver(VdcQueryType.GetStoragePoolById, StoragePoolQueryParametersBase.class),
VdcActionType.UpdateStoragePool,
new UpdateParametersProvider());
}
@Override
public AssignedPermissionsResource getPermissionsResource() {
return inject(new BackendAssignedPermissionsResource(guid,
VdcQueryType.GetPermissionsForObject,
new GetPermissionsForObjectParameters(guid),
DataCenter.class,
VdcObjectType.StoragePool));
}
// @Override
// public AttachedStorageDomainsResource getAttachedStorageDomainsResource() {
// return inject(new BackendAttachedStorageDomainsResource(id));
// }
public BackendDataCentersResource getParent() {
return parent;
}
@Override
protected DataCenter populate(DataCenter model, storage_pool entity) {
return parent.populate(model, entity);
}
protected class UpdateParametersProvider implements
ParametersProvider<DataCenter, storage_pool> {
@Override
public VdcActionParametersBase getParameters(DataCenter incoming, storage_pool entity) {
return new StoragePoolManagementParameter(map(incoming, entity));
}
}
/**
* Get the storage pool (i.e. datacenter entity) associated with the given
* cluster.
*/
@SuppressWarnings("unchecked")
public static storage_pool getStoragePool(Cluster cluster, AbstractBackendResource parent) {
storage_pool pool = null;
if (cluster.getDataCenter().isSetId()) {
String id = cluster.getDataCenter().getId();
pool = (storage_pool)parent.getEntity(storage_pool.class, VdcQueryType.GetStoragePoolById,
new StoragePoolQueryParametersBase(new Guid(id)), "Datacenter: id=" + id);
} else {
pool = (storage_pool)parent.getEntity(storage_pool.class, SearchType.StoragePool, "Datacenter: name="
+ cluster.getDataCenter().getName());
cluster.getDataCenter().setId(pool.getId().toString());
}
return pool;
}
/**
* Get the storage pools (i.e. datacenter entity) associated with the given
* storagedomain.
*/
@SuppressWarnings("unchecked")
public static List<storage_pool> getStoragePools(Guid storageDomainId, AbstractBackendResource parent) {
return (List<storage_pool>)parent.getEntity(List.class,
VdcQueryType.GetStoragePoolsByStorageDomainId,
new StorageDomainQueryParametersBase(storageDomainId),
"Datacenters",
true);
}
}