package org.ovirt.engine.core.bll.network;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import java.util.stream.Stream;
import javax.inject.Inject;
import org.ovirt.engine.core.common.action.PersistentHostSetupNetworksParameters;
import org.ovirt.engine.core.common.businessentities.network.Network;
import org.ovirt.engine.core.common.businessentities.network.VdsNetworkInterface;
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;
final class ManageLabeledNetworksParametersBuilderImpl extends HostSetupNetworksParametersBuilder
implements ManageLabeledNetworksParametersBuilder {
@Inject
private AddNetworksByLabelParametersBuilder addNetworksByLabelParametersBuilder;
@Inject
private RemoveNetworksByLabelParametersBuilder removeNetworksByLabelParametersBuilder;
@Inject
ManageLabeledNetworksParametersBuilderImpl(InterfaceDao interfaceDao,
VdsStaticDao vdsStaticDao,
NetworkClusterDao networkClusterDao,
NetworkAttachmentDao networkAttachmentDao) {
super(interfaceDao, vdsStaticDao, networkClusterDao, networkAttachmentDao);
}
@Override
public PersistentHostSetupNetworksParameters buildParameters(Guid vdsId,
List<Network> labeledNetworksToBeAdded,
List<Network> labeledNetworksToBeRemoved,
Map<String, VdsNetworkInterface> nicsByLabel) {
final PersistentHostSetupNetworksParameters addSetupNetworksParameters =
addNetworksByLabelParametersBuilder.buildParameters(vdsId, labeledNetworksToBeAdded, nicsByLabel);
final PersistentHostSetupNetworksParameters removeSetupNetworksParameters =
removeNetworksByLabelParametersBuilder.buildParameters(vdsId,
labeledNetworksToBeRemoved);
final PersistentHostSetupNetworksParameters combinedParams =
combine(addSetupNetworksParameters, removeSetupNetworksParameters);
final Collection<Network> affectedNetworks =
Stream.concat(labeledNetworksToBeAdded.stream(), labeledNetworksToBeRemoved.stream())
.collect(Collectors.toList());
combinedParams.setNetworkNames
(affectedNetworks.stream().map(Network::getName).collect(Collectors.joining(", ")));
return combinedParams;
}
private PersistentHostSetupNetworksParameters combine(PersistentHostSetupNetworksParameters addSetupNetworksParameters,
PersistentHostSetupNetworksParameters removeSetupNetworksParameters) {
Guid hostId = addSetupNetworksParameters.getVdsId();
final PersistentHostSetupNetworksParameters resultParam = createHostSetupNetworksParameters(hostId);
extendParameters(resultParam, addSetupNetworksParameters);
extendParameters(resultParam, removeSetupNetworksParameters);
return resultParam;
}
private void extendParameters(PersistentHostSetupNetworksParameters resultParam,
PersistentHostSetupNetworksParameters setupNetworksParameters) {
resultParam.getNetworkAttachments().addAll(setupNetworksParameters.getNetworkAttachments());
resultParam.getRemovedNetworkAttachments().addAll(setupNetworksParameters.getRemovedNetworkAttachments());
resultParam.getRemovedUnmanagedNetworks().addAll(setupNetworksParameters.getRemovedUnmanagedNetworks());
}
}