package org.ovirt.engine.core.bll.network.cluster; import java.util.ArrayList; import java.util.List; import java.util.Map; import javax.inject.Inject; import org.ovirt.engine.core.bll.QueriesCommandBase; import org.ovirt.engine.core.common.businessentities.Cluster; import org.ovirt.engine.core.common.businessentities.Entities; import org.ovirt.engine.core.common.businessentities.network.Network; import org.ovirt.engine.core.common.businessentities.network.NetworkCluster; import org.ovirt.engine.core.common.businessentities.network.NetworkClusterId; import org.ovirt.engine.core.common.queries.IdQueryParameters; import org.ovirt.engine.core.common.utils.PairQueryable; import org.ovirt.engine.core.dao.ClusterDao; import org.ovirt.engine.core.dao.network.NetworkClusterDao; import org.ovirt.engine.core.dao.network.NetworkDao; /** * A query to retrieve all Cluster-NetworkCluster pairs in the Storage Pool of the given Network. In case the Network * is not assigned to a Cluster, the Cluster is paired with null. */ public class GetClustersAndNetworksByNetworkIdQuery<P extends IdQueryParameters> extends QueriesCommandBase<P> { @Inject private NetworkDao networkDao; @Inject private ClusterDao clusterDao; @Inject private NetworkClusterDao networkClusterDao; public GetClustersAndNetworksByNetworkIdQuery(P parameters) { super(parameters); } @Override protected void executeQueryCommand() { List<PairQueryable<Cluster, NetworkCluster>> networkClusterPairs = new ArrayList<>(); Network network = networkDao.get(getParameters().getId()); if (network != null && network.getDataCenterId() != null) { List<Cluster> clusters = clusterDao.getAllForStoragePool(network.getDataCenterId()); List<NetworkCluster> networkClusters = networkClusterDao.getAllForNetwork(getParameters().getId()); final Map<NetworkClusterId, NetworkCluster> networkClustersById = Entities.businessEntitiesById(networkClusters); for (Cluster cluster : clusters) { networkClusterPairs.add(new PairQueryable<>(cluster, networkClustersById.get(new NetworkClusterId(cluster.getId(), getParameters().getId())))); } } getQueryReturnValue().setReturnValue(networkClusterPairs); } }