Adding Encapsulation in VPLS and correcting bugs.
Change-Id: Idc0c1834ae2bbd0fdaf564fd65360cc0f018d18d
diff --git a/apps/vpls/src/main/java/org/onosproject/vpls/cli/VplsCommandUtils.java b/apps/vpls/src/main/java/org/onosproject/vpls/cli/VplsCommandUtils.java
new file mode 100644
index 0000000..52c74a4
--- /dev/null
+++ b/apps/vpls/src/main/java/org/onosproject/vpls/cli/VplsCommandUtils.java
@@ -0,0 +1,118 @@
+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;
+ }
+}