| package org.onosproject.vpls.cli; |
| |
| import com.google.common.collect.SetMultimap; |
| import com.google.common.collect.Sets; |
| import org.onosproject.incubator.net.intf.Interface; |
| import org.onosproject.incubator.net.intf.InterfaceService; |
| import org.onosproject.vpls.config.VplsConfigurationService; |
| |
| import java.util.Map; |
| import java.util.Optional; |
| import java.util.Set; |
| |
| import static org.onlab.osgi.DefaultServiceDirectory.getService; |
| |
| /** |
| * Util class for VPLS Commands. |
| */ |
| public final class VplsCommandUtils { |
| |
| protected static final String VPLS_NAME = "VPLS name %s: "; |
| protected static final String VPLS_DISPLAY = "VPLS name: %s, associated " + |
| "interfaces: %s, encapsulation: %s"; |
| protected static final String VPLS_NOT_FOUND = "VPLS %s not found."; |
| protected static final String IFACE_NOT_FOUND = "Interface %s not found."; |
| protected static final String VPLS_ALREADY_EXISTS = "VPLS %s already exists."; |
| protected static final String IFACE_ALREADY_ASSOCIATED = |
| "Interface %s already associated to VPLS %s."; |
| protected static final String IFACE_NOT_ASSOCIATED = |
| "Interface %s is associated to VPLS %s."; |
| |
| private static VplsConfigurationService vplsConfigService = |
| getService(VplsConfigurationService.class); |
| private static InterfaceService interfaceService = |
| getService(InterfaceService.class); |
| |
| private VplsCommandUtils() {} |
| |
| /** |
| * States if a VPLS exists or not. |
| * |
| * @param vplsName the name of the VPLS |
| * @return true if the VPLS exists; false otherwise |
| */ |
| protected static boolean vplsExists(String vplsName) { |
| return vplsConfigService.vplsNames().contains(vplsName); |
| } |
| |
| /** |
| * States if an interface is defined or not in the system. |
| * |
| * @param ifaceName the name of the interface |
| * @return true if the interface is defined; false otherwise |
| */ |
| protected static boolean ifaceExists(String ifaceName) { |
| return interfaceService.getInterfaces() |
| .stream() |
| .anyMatch(iface -> iface.name().equals(ifaceName)); |
| } |
| |
| /** |
| * States if an interface is already associated or not to a VPLS. |
| * |
| * @param ifaceName the name of the interface |
| * @return true if the interface is already associated to a VPLS; false |
| * otherwise |
| */ |
| protected static boolean ifaceAlreadyAssociated(String ifaceName) { |
| return vplsConfigService.allIfaces() |
| .stream() |
| .anyMatch(iface -> iface.name().equals(ifaceName)); |
| } |
| |
| /** |
| * Returns the name of a VPLS, given the name of an interface associated to |
| * it. |
| * |
| * @param ifaceName the name of the interface |
| * @return the name of the VPLS that has the interface configured; null if |
| * the interface does not exist or is not associated to any VPLS |
| */ |
| protected static String vplsNameFromIfaceName(String ifaceName) { |
| String vplsName = null; |
| |
| Optional<String> optVplsName = vplsConfigService.ifacesByVplsName() |
| .entries() |
| .stream() |
| .filter(iface -> iface.getValue().name().equals(ifaceName)) |
| .map(Map.Entry::getKey) |
| .findFirst(); |
| |
| if (optVplsName.isPresent()) { |
| vplsName = optVplsName.get(); |
| } |
| |
| return vplsName; |
| } |
| |
| /** |
| * Returns a list of interfaces associated to a VPLS, given a VPLS name. |
| * |
| * @param vplsName the name of the VPLS |
| * @return the set of interfaces associated to the given VPLS; null if the |
| * VPLS is not found |
| */ |
| protected static Set<String> ifacesFromVplsName(String vplsName) { |
| if (!vplsExists(vplsName)) { |
| return null; |
| } |
| |
| SetMultimap<String, Interface> ifacesByVplsName = |
| vplsConfigService.ifacesByVplsName(); |
| Set<String> ifaceNames = Sets.newHashSet(); |
| |
| ifacesByVplsName.get(vplsName).forEach(iface -> ifaceNames.add(iface.name())); |
| |
| return ifaceNames; |
| } |
| } |