package org.ovirt.engine.core.bll.network.host;
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.Entities;
import org.ovirt.engine.core.common.businessentities.VDS;
import org.ovirt.engine.core.common.businessentities.network.Network;
import org.ovirt.engine.core.common.businessentities.network.VdsNetworkInterface;
import org.ovirt.engine.core.common.businessentities.network.VdsNetworkInterface.NetworkImplementationDetails;
import org.ovirt.engine.core.common.queries.IdQueryParameters;
import org.ovirt.engine.core.common.utils.PairQueryable;
import org.ovirt.engine.core.compat.Guid;
import org.ovirt.engine.core.dao.VdsDao;
import org.ovirt.engine.core.dao.network.HostNetworkQosDao;
import org.ovirt.engine.core.dao.network.InterfaceDao;
import org.ovirt.engine.core.dao.network.NetworkAttachmentDao;
import org.ovirt.engine.core.dao.network.NetworkDao;
import org.ovirt.engine.core.vdsbroker.NetworkImplementationDetailsUtils;
/**
* A query to retrieve all Host-Network Interface pairs that the given Network is attached to.
*/
public class GetVdsAndNetworkInterfacesByNetworkIdQuery<P extends IdQueryParameters> extends QueriesCommandBase<P> {
@Inject
private VdsDao vdsDao;
@Inject
private InterfaceDao interfaceDao;
@Inject
private NetworkDao networkDao;
@Inject
private HostNetworkQosDao hostNetworkQosDao;
@Inject
private NetworkAttachmentDao networkAttachmentDao;
@Inject
private NetworkImplementationDetailsUtils networkImplementationDetailsUtils;
public GetVdsAndNetworkInterfacesByNetworkIdQuery(P parameters) {
super(parameters);
}
@Override
protected void executeQueryCommand() {
List<VDS> vdsList = vdsDao.getAllForNetwork(getParameters().getId());
List<VdsNetworkInterface> vdsNetworkInterfaceList =
interfaceDao.getVdsInterfacesByNetworkId(getParameters().getId());
final Map<Guid, VDS> vdsById = Entities.businessEntitiesById(vdsList);
List<PairQueryable<VdsNetworkInterface, VDS>> vdsInterfaceVdsPairs =
new ArrayList<>();
Network network = networkDao.get(getParameters().getId());
for (final VdsNetworkInterface vdsNetworkInterface : vdsNetworkInterfaceList) {
vdsInterfaceVdsPairs.add(new PairQueryable<>(vdsNetworkInterface,
vdsById.get(vdsNetworkInterface.getVdsId())));
NetworkImplementationDetails vdsInterfaceNetworkImplementationDetails =
networkImplementationDetailsUtils.calculateNetworkImplementationDetails(vdsNetworkInterface,
network);
vdsNetworkInterface.setNetworkImplementationDetails(vdsInterfaceNetworkImplementationDetails);
}
getQueryReturnValue().setReturnValue(vdsInterfaceVdsPairs);
}
}