package org.ovirt.engine.core.bll.network; import java.util.List; import java.util.Map; import javax.inject.Inject; import org.ovirt.engine.core.common.action.PersistentHostSetupNetworksParameters; 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.NetworkAttachment; import org.ovirt.engine.core.common.businessentities.network.VdsNetworkInterface; import org.ovirt.engine.core.common.utils.NetworkCommonUtils; import org.ovirt.engine.core.compat.Guid; import org.ovirt.engine.core.dao.VdsStaticDao; import org.ovirt.engine.core.dao.network.InterfaceDao; import org.ovirt.engine.core.dao.network.NetworkAttachmentDao; import org.ovirt.engine.core.dao.network.NetworkClusterDao; import org.ovirt.engine.core.utils.NetworkUtils; public class RemoveNetworksByLabelParametersBuilder extends HostSetupNetworksParametersBuilder { @Inject public RemoveNetworksByLabelParametersBuilder(InterfaceDao interfaceDao, VdsStaticDao vdsStaticDao, NetworkClusterDao networkClusterDao, NetworkAttachmentDao networkAttachmentDao) { super(interfaceDao, vdsStaticDao, networkClusterDao, networkAttachmentDao); } /** * Removes a given list of labeled networks from a host */ public PersistentHostSetupNetworksParameters buildParameters(Guid hostId, List<Network> networksToRemove) { PersistentHostSetupNetworksParameters parameters = createHostSetupNetworksParameters(hostId); Map<String, VdsNetworkInterface> nicByNetwork = NetworkUtils.hostInterfacesByNetworkName(getNics(hostId)); Map<String, VdsNetworkInterface> nicByName = Entities.entitiesByName(getNics(hostId)); for (Network networkToRemove : networksToRemove) { VdsNetworkInterface nicWithNetwork = nicByNetwork.get(networkToRemove.getName()); if (nicWithNetwork != null) { VdsNetworkInterface baseNicWithNetwork = nicByName.get(NetworkCommonUtils.stripVlan(nicWithNetwork)); if (NetworkUtils.isLabeled(networkToRemove) && NetworkUtils.isLabeled(baseNicWithNetwork) && baseNicWithNetwork.getLabels().contains(networkToRemove.getLabel())) { NetworkAttachment networkAttachment = getNetworkIdToAttachmentMap(hostId).get(networkToRemove.getId()); if (networkAttachment == null) { parameters.getRemovedUnmanagedNetworks().add(networkToRemove.getName()); } else { parameters.getRemovedNetworkAttachments().add(networkAttachment.getId()); } } } } return parameters; } }