package org.ovirt.engine.api.restapi.resource; import java.util.ArrayList; import java.util.List; 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.DataCenters; import org.ovirt.engine.api.model.StorageType; import org.ovirt.engine.api.model.SupportedVersions; import org.ovirt.engine.api.resource.DataCenterResource; import org.ovirt.engine.api.resource.DataCentersResource; import org.ovirt.engine.core.common.action.StoragePoolManagementParameter; import org.ovirt.engine.core.common.action.StoragePoolParametersBase; 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.GetAvailableStoragePoolVersionsParameters; import org.ovirt.engine.core.common.queries.StoragePoolQueryParametersBase; import org.ovirt.engine.core.common.queries.VdcQueryType; import org.ovirt.engine.core.compat.Guid; public class BackendDataCentersResource extends AbstractBackendCollectionResource<DataCenter, storage_pool> implements DataCentersResource { static final String[] SUB_COLLECTIONS = {/*"storagedomains",*/ "permissions" }; public BackendDataCentersResource() { super(DataCenter.class, storage_pool.class, SUB_COLLECTIONS); } @Override public DataCenters list() { return mapCollection(getBackendCollection(SearchType.StoragePool)); } @Override @SingleEntityResource public DataCenterResource getDataCenterSubResource(String id) { return inject(new BackendDataCenterResource(id, this)); } @Override public Response add(DataCenter dataCenter) { validateParameters(dataCenter, "name", "storageType"); validateEnum(StorageType.class, dataCenter.getStorageType().toUpperCase()); storage_pool entity = map(dataCenter); return performCreation(VdcActionType.AddEmptyStoragePool, new StoragePoolManagementParameter(entity), new QueryIdResolver(VdcQueryType.GetStoragePoolById, StoragePoolQueryParametersBase.class)); } @Override public Response performRemove(String id) { return performAction(VdcActionType.RemoveStoragePool, new StoragePoolParametersBase(asGuid(id))); } @Override public Response remove(String id, Action action) { getEntity(id); StoragePoolParametersBase params = new StoragePoolParametersBase(asGuid(id)); if (action != null && action.isSetForce()) { params.setForceDelete(action.isForce()); } return performAction(VdcActionType.RemoveStoragePool, params); } private DataCenters mapCollection(List<storage_pool> entities) { DataCenters collection = new DataCenters(); for (storage_pool entity : entities) { collection.getDataCenters().add(addLinks(populate(map(entity), entity))); } return collection; } @Override protected DataCenter populate(DataCenter model, storage_pool entity) { GetAvailableStoragePoolVersionsParameters parameters = new GetAvailableStoragePoolVersionsParameters(); parameters.setStoragePoolId(new Guid(model.getId())); model.setSupportedVersions(getMapper(List.class, SupportedVersions.class).map(getEntity(ArrayList.class, VdcQueryType.GetAvailableStoragePoolVersions, parameters, model.getId()), null)); return model; } }