package org.ovirt.engine.core.bll.network.dc;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
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.network.Network;
import org.ovirt.engine.core.common.businessentities.network.NetworkCluster;
import org.ovirt.engine.core.common.businessentities.network.VdsNetworkInterface;
import org.ovirt.engine.core.common.queries.IdQueryParameters;
import org.ovirt.engine.core.common.utils.NetworkCommonUtils;
import org.ovirt.engine.core.dao.network.InterfaceDao;
import org.ovirt.engine.core.dao.network.NetworkClusterDao;
import org.ovirt.engine.core.dao.network.NetworkDao;
public class GetInterfacesByLabelForNetworkQuery<P extends IdQueryParameters> extends QueriesCommandBase<P> {
@Inject
private NetworkDao networkDao;
@Inject
private NetworkClusterDao networkClusterDao;
@Inject
private InterfaceDao interfaceDao;
public GetInterfacesByLabelForNetworkQuery(P parameters) {
super(parameters);
}
@Override
protected void executeQueryCommand() {
Network network = networkDao.get(getParameters().getId());
Set<VdsNetworkInterface> interfacesByLabelForNetwork = new HashSet<>();
if (network == null) {
getQueryReturnValue().setReturnValue(interfacesByLabelForNetwork);
return;
}
List<NetworkCluster> clusters = networkClusterDao.getAllForNetwork(network.getId());
if (clusters.isEmpty()) {
getQueryReturnValue().setReturnValue(interfacesByLabelForNetwork);
return;
}
List<VdsNetworkInterface> labeledNics = new ArrayList<>();
for (NetworkCluster networkCluster : clusters) {
labeledNics.addAll(
interfaceDao.getAllInterfacesByLabelForCluster(networkCluster.getClusterId(), network.getLabel()));
}
if (labeledNics.isEmpty()) {
getQueryReturnValue().setReturnValue(interfacesByLabelForNetwork);
return;
}
List<VdsNetworkInterface> networkNics = interfaceDao.getVdsInterfacesByNetworkId(network.getId());
Map<String, VdsNetworkInterface> labeledNicsByName = Entities.entitiesByName(labeledNics);
for (VdsNetworkInterface networkNic : networkNics) {
if (labeledNicsByName.containsKey(NetworkCommonUtils.stripVlan(networkNic))) {
interfacesByLabelForNetwork.add(networkNic);
}
}
getQueryReturnValue().setReturnValue(interfacesByLabelForNetwork);
}
}