package org.ovirt.engine.core.bll.validator.network; import java.util.List; import java.util.Objects; import java.util.function.Predicate; import javax.inject.Inject; import javax.inject.Named; import javax.inject.Singleton; import org.ovirt.engine.core.common.errors.EngineMessage; @Singleton @Named final class VlanUntaggedNetworkExclusivenessValidator implements NetworkExclusivenessValidator { private final Predicate<NetworkType> untaggedNetworkPredicate; @Inject VlanUntaggedNetworkExclusivenessValidator(@Named("untaggedNetworkPredicate") Predicate<NetworkType> untaggedNetworkPredicate) { Objects.requireNonNull(untaggedNetworkPredicate, "untaggedNetworkPredicate cannot be null"); this.untaggedNetworkPredicate = untaggedNetworkPredicate; } /** * Make sure that at most one vlan-untagged network is attached to a given interface. * * @return true for a valid configuration, otherwise false. */ @Override public boolean isNetworkExclusive(List<NetworkType> networksOnIface) { return networksOnIface.stream().filter(untaggedNetworkPredicate).count() <= 1; } @Override public EngineMessage getViolationMessage() { return EngineMessage.NETWORK_INTERFACES_NOT_EXCLUSIVELY_USED_BY_UNTAGGED_NETWORK; } }