package org.ovirt.engine.core.bll.storage.pool; import java.util.List; import java.util.Objects; import java.util.Set; import java.util.stream.Collectors; import javax.inject.Inject; import javax.inject.Singleton; import org.ovirt.engine.core.common.businessentities.Cluster; import org.ovirt.engine.core.compat.Guid; import org.ovirt.engine.core.dao.ClusterDao; @Singleton public class DcSingleMacPoolFinder { private final ClusterDao clusterDao; @Inject DcSingleMacPoolFinder(ClusterDao clusterDao) { this.clusterDao = Objects.requireNonNull(clusterDao); } /** * @param dcId * the DC ID to be scanned. * @return The mac-pool ID if a single one is present in the given DC, otherwise <code>null</code>. */ public Guid find(Guid dcId) { final List<Cluster> clusters = clusterDao.getAllForStoragePool(dcId); final Set<Guid> macPoolIds = clusters.stream().map(Cluster::getMacPoolId).collect(Collectors.toSet()); // each cluster, due to db constraint, must have not null reference to pool, thus collection cannot be empty. return macPoolIds.size() != 1 ? null : macPoolIds.iterator().next(); } }