Refactor VPLS IntentInstaller

Change-Id: Ia729849fd0c939b6399abad5f15658b48fbb62b4
diff --git a/apps/vpls/src/main/java/org/onosproject/vpls/IntentInstaller.java b/apps/vpls/src/main/java/org/onosproject/vpls/IntentInstaller.java
index 156936c..013461e 100644
--- a/apps/vpls/src/main/java/org/onosproject/vpls/IntentInstaller.java
+++ b/apps/vpls/src/main/java/org/onosproject/vpls/IntentInstaller.java
@@ -37,7 +37,6 @@
 
 import java.util.ArrayList;
 import java.util.Collection;
-import java.util.HashSet;
 import java.util.List;
 import java.util.Set;
 import java.util.stream.Collectors;
@@ -87,42 +86,38 @@
                     MacAddress>> confHostPresentCPoint) {
         List<Intent> intents = new ArrayList<>();
 
-        confHostPresentCPoint.asMap().keySet()
+        confHostPresentCPoint.keySet()
+                .stream()
+                .filter(vlanId -> confHostPresentCPoint.get(vlanId) != null)
                 .forEach(vlanId -> {
-                    List<Pair<ConnectPoint, MacAddress>> cPoints =
-                            confHostPresentCPoint.get(vlanId).stream().collect(Collectors.toList());
-
-                    if (cPoints != null && !cPoints.isEmpty()) {
-                        for (int i = 0; i < cPoints.size(); i++) {
-                            ConnectPoint src = cPoints.get(i).getKey();
-                            Set<ConnectPoint> dsts = new HashSet<>();
-                            MacAddress mac = cPoints.get(i).getValue();
-                            for (int j = 0; j < cPoints.size(); j++) {
-                                ConnectPoint dst = cPoints.get(j).getKey();
-                                if (!dst.equals(src)) {
-                                    dsts.add(dst);
-                                }
-                            }
-                            Key brcKey = buildKey(PREFIX_BROADCAST, src, vlanId);
-                            if (intentService.getIntent(brcKey) == null) {
-                                SinglePointToMultiPointIntent brcIntent =
-                                        buildBrcIntent(brcKey, src, dsts, vlanId);
-                                intents.add(brcIntent);
-                            }
-                            if (mac != null && countMacInCPoints(cPoints) > 1) {
-                                Key uniKey = buildKey(PREFIX_UNICAST, src, vlanId);
-                                if (intentService.getIntent(uniKey) == null) {
-                                    MultiPointToSinglePointIntent uniIntent =
-                                            buildUniIntent(uniKey,
-                                                           dsts,
-                                                           src,
-                                                           vlanId,
-                                                           mac);
-                                    intents.add(uniIntent);
-                                }
+                    Set<Pair<ConnectPoint, MacAddress>> cPoints =
+                            confHostPresentCPoint.get(vlanId);
+                    cPoints.forEach(cPoint -> {
+                        MacAddress mac = cPoint.getValue();
+                        ConnectPoint src = cPoint.getKey();
+                        Set<ConnectPoint> dsts = cPoints.stream()
+                                .map(Pair::getKey)
+                                .filter(cp -> !cp.equals(src))
+                                .collect(Collectors.toSet());
+                        Key brcKey = buildKey(PREFIX_BROADCAST, src, vlanId);
+                        if (intentService.getIntent(brcKey) == null) {
+                            SinglePointToMultiPointIntent brcIntent =
+                                    buildBrcIntent(brcKey, src, dsts, vlanId);
+                            intents.add(brcIntent);
+                        }
+                        if (mac != null && countMacInCPoints(cPoints) > 1) {
+                            Key uniKey = buildKey(PREFIX_UNICAST, src, vlanId);
+                            if (intentService.getIntent(uniKey) == null) {
+                                MultiPointToSinglePointIntent uniIntent =
+                                        buildUniIntent(uniKey,
+                                                       dsts,
+                                                       src,
+                                                       vlanId,
+                                                       mac);
+                                intents.add(uniIntent);
                             }
                         }
-                    }
+                    });
                 });
         submitIntents(intents);
     }
@@ -133,11 +128,10 @@
      * @param intents intents to be submitted
      */
     private void submitIntents(Collection<Intent> intents) {
-        log.debug("Submitting intents to the IntentSynchronizer");
-
-        for (Intent intent : intents) {
+        log.debug("Submitting intents to the Intent Synchronizer");
+        intents.forEach(intent -> {
             intentSynchronizer.submit(intent);
-        }
+        });
     }
 
     /**
@@ -240,18 +234,12 @@
      * Counts the number of mac addresses associated to a specific list of
      * ConnectPoint.
      *
-     * @param cPoints List of ConnectPoints, eventually binded to the MAC of the
+     * @param cPoints Set of ConnectPoints, eventually bound to the MAC of the
      *                host attached
      * @return number of mac addresses found.
      */
-    private int countMacInCPoints(List<Pair<ConnectPoint, MacAddress>> cPoints) {
-        int macFound = 0;
-        for (Pair<ConnectPoint, MacAddress> p : cPoints) {
-            if (p.getValue() != null) {
-                macFound++;
-            }
-        }
-        return macFound;
+    private int countMacInCPoints(Set<Pair<ConnectPoint, MacAddress>> cPoints) {
+        return (int) cPoints.stream().filter(p -> p.getValue() != null).count();
     }
 
 }