package org.ovirt.engine.core.bll.storage; import java.util.List; import org.ovirt.engine.core.bll.Backend; import org.ovirt.engine.core.bll.QueriesCommandBase; import org.ovirt.engine.core.common.businessentities.SANState; import org.ovirt.engine.core.common.businessentities.storage_domain_static; import org.ovirt.engine.core.common.businessentities.storage_domains; import org.ovirt.engine.core.common.queries.GetExistingStorageDomainListParameters; import org.ovirt.engine.core.common.vdscommands.HSMGetStorageDomainInfoVDSCommandParameters; import org.ovirt.engine.core.common.vdscommands.HSMGetStorageDomainsListVDSCommandParameters; import org.ovirt.engine.core.common.vdscommands.VDSCommandType; import org.ovirt.engine.core.common.vdscommands.VDSReturnValue; import org.ovirt.engine.core.compat.Guid; import org.ovirt.engine.core.dal.dbbroker.DbFacade; import org.ovirt.engine.core.utils.Pair; import org.ovirt.engine.core.utils.log.Logged; import org.ovirt.engine.core.utils.log.Logged.LogLevel; @Logged(executionLevel = LogLevel.INFO) public class GetExistingStorageDomainListQuery<P extends GetExistingStorageDomainListParameters> extends QueriesCommandBase<P> { public GetExistingStorageDomainListQuery(P parameters) { super(parameters); } @Override protected void executeQueryCommand() { java.util.ArrayList<storage_domains> returnValue = new java.util.ArrayList<storage_domains>(); VDSReturnValue vdsReturnValue = Backend .getInstance() .getResourceManager() .RunVdsCommand( VDSCommandType.HSMGetStorageDomainsList, new HSMGetStorageDomainsListVDSCommandParameters(getParameters() .getVdsId(), Guid.Empty, getParameters() .getStorageType(), getParameters() .getStorageDomainType(), getParameters().getPath())); if (vdsReturnValue.getSucceeded()) { java.util.ArrayList<Guid> guidsFromIrs = (java.util.ArrayList<Guid>) vdsReturnValue.getReturnValue(); java.util.HashSet<Guid> guidsFromDb = new java.util.HashSet<Guid>(); if (guidsFromIrs.size() > 0) { List<storage_domains> domainsInDb = DbFacade.getInstance().getStorageDomainDAO().getAll(); for (storage_domains domain : domainsInDb) { guidsFromDb.add(domain.getid()); } for (Guid domainId : guidsFromIrs) { if (!guidsFromDb.contains(domainId)) { Pair<storage_domain_static, SANState> domainFromIrs = (Pair<storage_domain_static, SANState>) Backend .getInstance() .getResourceManager() .RunVdsCommand( VDSCommandType.HSMGetStorageDomainInfo, new HSMGetStorageDomainInfoVDSCommandParameters( getParameters().getVdsId(), domainId)) .getReturnValue(); storage_domains domain = new storage_domains(); domain.setStorageStaticData(domainFromIrs.getFirst()); if (getParameters().getStorageFormatType() == null || getParameters().getStorageFormatType() == domain.getStorageFormat()) { returnValue.add(domain); } } } } getQueryReturnValue().setReturnValue(returnValue); } } }