package org.ovirt.engine.api.restapi.resource;
import static org.ovirt.engine.api.restapi.resource.BackendDataCenterResource.getStoragePool;
import java.util.List;
import javax.ws.rs.core.Response;
import org.ovirt.engine.api.model.Cluster;
import org.ovirt.engine.api.model.Clusters;
import org.ovirt.engine.api.resource.ClusterResource;
import org.ovirt.engine.api.resource.ClustersResource;
import org.ovirt.engine.core.common.action.VdcActionType;
import org.ovirt.engine.core.common.action.VdsGroupOperationParameters;
import org.ovirt.engine.core.common.action.VdsGroupParametersBase;
import org.ovirt.engine.core.common.businessentities.VDSGroup;
import org.ovirt.engine.core.common.businessentities.storage_pool;
import org.ovirt.engine.core.common.interfaces.SearchType;
import org.ovirt.engine.core.common.queries.GetVdsGroupByIdParameters;
import org.ovirt.engine.core.common.queries.VdcQueryType;
public class BackendClustersResource extends AbstractBackendCollectionResource<Cluster, VDSGroup>
implements ClustersResource {
static final String[] SUB_COLLECTIONS = { "networks", "permissions", "glustervolumes" };
public BackendClustersResource() {
super(Cluster.class, VDSGroup.class, SUB_COLLECTIONS);
}
@Override
public Clusters list() {
return mapCollection(getBackendCollection(SearchType.Cluster));
}
@Override
@SingleEntityResource
public ClusterResource getClusterSubResource(String id) {
return inject(new BackendClusterResource(id));
}
@Override
public Response add(Cluster cluster) {
validateParameters(cluster, "name", "dataCenter.name|id");
storage_pool pool = getStoragePool(cluster, this);
VDSGroup entity = map(cluster, map(pool));
return performCreation(VdcActionType.AddVdsGroup,
new VdsGroupOperationParameters(entity),
new QueryIdResolver(VdcQueryType.GetVdsGroupById, GetVdsGroupByIdParameters.class));
}
@Override
public Response performRemove(String id) {
return performAction(VdcActionType.RemoveVdsGroup, new VdsGroupParametersBase(asGuid(id)));
}
private Clusters mapCollection(List<VDSGroup> entities) {
Clusters collection = new Clusters();
for (org.ovirt.engine.core.common.businessentities.VDSGroup entity : entities) {
collection.getClusters().add(addLinks(map(entity)));
}
return collection;
}
/**
* Map the storage pool (i.e. datacenter entity) to a VDSGroup instance
* with the same compatibility version
*/
protected VDSGroup map(storage_pool pool) {
return getMapper(storage_pool.class, VDSGroup.class).map(pool, null);
}
}