package org.ovirt.engine.api.restapi.resource; import org.ovirt.engine.api.model.Action; import org.ovirt.engine.api.model.BaseResource; import org.ovirt.engine.api.model.BaseResources; import org.ovirt.engine.core.common.businessentities.IVdcQueryable; import org.ovirt.engine.core.common.businessentities.StorageDomainType; import org.ovirt.engine.core.common.businessentities.VDSGroup; import org.ovirt.engine.core.common.interfaces.SearchType; import org.ovirt.engine.core.common.queries.GetVdsGroupByIdParameters; import org.ovirt.engine.core.common.queries.VdcQueryType; import org.ovirt.engine.core.compat.Guid; public abstract class AbstractBackendStorageDomainContentResource<C extends BaseResources, R extends BaseResource, Q extends IVdcQueryable> extends AbstractBackendActionableResource<R, Q> { protected AbstractBackendStorageDomainContentsResource<C, R, Q> parent; public AbstractBackendStorageDomainContentResource(String id, AbstractBackendStorageDomainContentsResource<C, R, Q> parent, Class<R> modelType, Class<Q> entityType) { super(id, modelType, entityType); this.parent = parent; } public AbstractBackendStorageDomainContentsResource<C, R, Q> getParent() { return parent; } public R get() { switch (parent.getStorageDomainType()) { case Data: case Master: return getFromDataDomain(); case ImportExport: return getFromExportDomain(); case ISO: case Unknown: default: return null; } } protected abstract R getFromDataDomain(); protected R getFromExportDomain() { for (R model : parent.getCollection(StorageDomainType.ImportExport)) { if (model.getId().equals(id)) { return model; } } return notFound(); } protected Guid getDestStorageDomainId(Action action) { if (action.getStorageDomain().isSetId()) { return asGuid(action.getStorageDomain().getId()); } else { return parent.lookupStorageDomainIdByName(action.getStorageDomain().getName()); } } protected Guid getClusterId(Action action) { if (action.getCluster().isSetId()) { return asGuid(action.getCluster().getId()); } else { return lookupClusterIdByName(action.getCluster().getName()); } } protected Guid lookupClusterIdByName(String name) { return lookupClusterByName(name).getID(); } protected VDSGroup lookupClusterByName(String name) { return getEntity(VDSGroup.class, SearchType.Cluster, "Cluster: name=" + name); } protected VDSGroup lookupClusterById(String id) { return getEntity(VDSGroup.class, VdcQueryType.GetVdsGroupById, new GetVdsGroupByIdParameters(Guid.createGuidFromString(id)), id); } }