package org.ovirt.engine.core.bll.storage.pool; import javax.inject.Inject; import org.ovirt.engine.core.bll.QueriesCommandBase; import org.ovirt.engine.core.common.businessentities.StoragePool; import org.ovirt.engine.core.common.queries.VdcQueryParametersBase; import org.ovirt.engine.core.compat.Guid; import org.ovirt.engine.core.dao.StoragePoolDao; /** * Class which encapsulates logic of figuring out macPoolId for data center based on pools used by data centers * clusters. */ public abstract class StoragePoolQueryBase<P extends VdcQueryParametersBase> extends QueriesCommandBase<P> { @Inject protected StoragePoolDao storagePoolDao; @Inject private DcSingleMacPoolFinder dcSingleMacPoolFinder; public StoragePoolQueryBase(P parameters) { super(parameters); } @Override protected final void executeQueryCommand() { Object dataCenterQueryResult = queryDataCenter(); setMacPoolReference(dataCenterQueryResult); getQueryReturnValue().setReturnValue(dataCenterQueryResult); } private void setMacPoolReference(Object dataCenterQueryResult) { if (dataCenterQueryResult == null) { return; } if (dataCenterQueryResult instanceof StoragePool) { dataCenterQueryResult((StoragePool)dataCenterQueryResult); return; } if (dataCenterQueryResult instanceof Iterable) { //noinspection unchecked for (StoragePool storagePool : (Iterable<StoragePool>) dataCenterQueryResult) { dataCenterQueryResult(storagePool); } return; } throw new IllegalArgumentException("Unsupported query result"); } private void dataCenterQueryResult(StoragePool storagePool) { final Guid macPoolId = dcSingleMacPoolFinder.find(storagePool.getId()); storagePool.setMacPoolId(macPoolId); } /** * @return either StoragePool or collection of StoragePool instances. */ protected abstract Object queryDataCenter(); }