Refactor connectivity intent creation to use builders

- Each connectivity intent now has only one constructor
- Intent constructors are now private for leaf classes and
  protected for classes that can be derived from
- Each intent class has a Builder class that accumulates
  parameters for intent creation
- Each intent class has a public static builder() method
  to create a builder
- Each Builder class has a build() method to create the
  intent from the accumulated parameters
- Added keys to a few intent types that were missing them
- Tightened up usage of checkNotNull(), taking advantage of
  the return value to save some lines of code
- Modified callers to use the builders instead of directly
  calling the constructors

Change-Id: I713185d5ecbadbf51f87ef7f68fec41102106c78
diff --git a/cli/src/main/java/org/onosproject/cli/net/AddHostToHostIntentCommand.java b/cli/src/main/java/org/onosproject/cli/net/AddHostToHostIntentCommand.java
index a4a3a7c..f1554b6 100644
--- a/cli/src/main/java/org/onosproject/cli/net/AddHostToHostIntentCommand.java
+++ b/cli/src/main/java/org/onosproject/cli/net/AddHostToHostIntentCommand.java
@@ -15,19 +15,15 @@
  */
 package org.onosproject.cli.net;
 
+import java.util.List;
+
 import org.apache.karaf.shell.commands.Argument;
 import org.apache.karaf.shell.commands.Command;
 import org.onosproject.net.HostId;
-import org.onosproject.net.flow.DefaultTrafficSelector;
-import org.onosproject.net.flow.DefaultTrafficTreatment;
-import org.onosproject.net.flow.TrafficSelector;
-import org.onosproject.net.flow.TrafficTreatment;
 import org.onosproject.net.intent.Constraint;
 import org.onosproject.net.intent.HostToHostIntent;
 import org.onosproject.net.intent.IntentService;
 
-import java.util.List;
-
 /**
  * Installs host-to-host connectivity intent.
  */
@@ -50,14 +46,16 @@
         HostId oneId = HostId.hostId(one);
         HostId twoId = HostId.hostId(two);
 
-        TrafficSelector selector = DefaultTrafficSelector.emptySelector();
-        TrafficTreatment treatment = DefaultTrafficTreatment.emptyTreatment();
         List<Constraint> constraints = buildConstraints();
 
-        HostToHostIntent intent = new HostToHostIntent(appId(), key(),
-                                                       oneId, twoId,
-                                                       selector, treatment,
-                                                       constraints, priority());
+        HostToHostIntent intent = HostToHostIntent.builder()
+                .appId(appId())
+                .key(key())
+                .one(oneId)
+                .two(twoId)
+                .constraints(constraints)
+                .priority(priority())
+                .build();
         service.submit(intent);
         print("Host to Host intent submitted:\n%s", intent.toString());
     }
diff --git a/cli/src/main/java/org/onosproject/cli/net/AddMplsIntent.java b/cli/src/main/java/org/onosproject/cli/net/AddMplsIntent.java
index 7de49c9..ebaf89b 100644
--- a/cli/src/main/java/org/onosproject/cli/net/AddMplsIntent.java
+++ b/cli/src/main/java/org/onosproject/cli/net/AddMplsIntent.java
@@ -75,10 +75,17 @@
 
         List<Constraint> constraints = buildConstraints();
 
-        MplsIntent intent = new MplsIntent(appId(), selector, treatment,
-                                           ingress, ingressLabel, egress,
-                                           egressLabel, constraints,
-                                           priority());
+        MplsIntent intent = MplsIntent.builder()
+                .appId(appId())
+                .selector(selector)
+                .treatment(treatment)
+                .ingressPoint(ingress)
+                .ingressLabel(ingressLabel)
+                .egressPoint(egress)
+                .egressLabel(egressLabel)
+                .constraints(constraints)
+                .priority(priority())
+                .build();
         service.submit(intent);
     }
 
diff --git a/cli/src/main/java/org/onosproject/cli/net/AddMultiPointToSinglePointIntentCommand.java b/cli/src/main/java/org/onosproject/cli/net/AddMultiPointToSinglePointIntentCommand.java
index abc0c4b..892f819 100644
--- a/cli/src/main/java/org/onosproject/cli/net/AddMultiPointToSinglePointIntentCommand.java
+++ b/cli/src/main/java/org/onosproject/cli/net/AddMultiPointToSinglePointIntentCommand.java
@@ -72,11 +72,16 @@
         TrafficTreatment treatment = buildTrafficTreatment();
         List<Constraint> constraints = buildConstraints();
 
-        Intent intent = new MultiPointToSinglePointIntent(appId(), key(),
-                                                          selector, treatment,
-                                                          ingressPoints, egress,
-                                                          constraints,
-                                                          priority());
+        Intent intent = MultiPointToSinglePointIntent.builder()
+                .appId(appId())
+                .key(key())
+                .selector(selector)
+                .treatment(treatment)
+                .ingressPoints(ingressPoints)
+                .egressPoint(egress)
+                .constraints(constraints)
+                .priority(priority())
+                .build();
         service.submit(intent);
         print("Multipoint to single point intent submitted:\n%s", intent.toString());
     }
diff --git a/cli/src/main/java/org/onosproject/cli/net/AddSinglePointToMultiPointIntentCommand.java b/cli/src/main/java/org/onosproject/cli/net/AddSinglePointToMultiPointIntentCommand.java
index b6193fa..83ef66f 100644
--- a/cli/src/main/java/org/onosproject/cli/net/AddSinglePointToMultiPointIntentCommand.java
+++ b/cli/src/main/java/org/onosproject/cli/net/AddSinglePointToMultiPointIntentCommand.java
@@ -72,15 +72,16 @@
         List<Constraint> constraints = buildConstraints();
 
         SinglePointToMultiPointIntent intent =
-                new SinglePointToMultiPointIntent(
-                        appId(),
-                        key(),
-                        selector,
-                        treatment,
-                        ingressPoint,
-                        egressPoints,
-                        constraints,
-                        priority());
+                SinglePointToMultiPointIntent.builder()
+                        .appId(appId())
+                        .key(key())
+                        .selector(selector)
+                        .treatment(treatment)
+                        .ingressPoint(ingressPoint)
+                        .egressPoints(egressPoints)
+                        .constraints(constraints)
+                        .priority(priority())
+                        .build();
         service.submit(intent);
         print("Single point to multipoint intent submitted:\n%s", intent.toString());
     }
diff --git a/cli/src/main/java/org/onosproject/cli/net/RandomIntentCommand.java b/cli/src/main/java/org/onosproject/cli/net/RandomIntentCommand.java
index 5eb592a..152e659 100644
--- a/cli/src/main/java/org/onosproject/cli/net/RandomIntentCommand.java
+++ b/cli/src/main/java/org/onosproject/cli/net/RandomIntentCommand.java
@@ -15,25 +15,22 @@
  */
 package org.onosproject.cli.net;
 
-import com.google.common.collect.Lists;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.List;
+
 import org.apache.karaf.shell.commands.Argument;
 import org.apache.karaf.shell.commands.Command;
 import org.onosproject.cli.AbstractShellCommand;
 import org.onosproject.core.ApplicationId;
 import org.onosproject.core.CoreService;
 import org.onosproject.net.Host;
-import org.onosproject.net.flow.DefaultTrafficSelector;
-import org.onosproject.net.flow.DefaultTrafficTreatment;
-import org.onosproject.net.flow.TrafficSelector;
-import org.onosproject.net.flow.TrafficTreatment;
 import org.onosproject.net.host.HostService;
 import org.onosproject.net.intent.HostToHostIntent;
 import org.onosproject.net.intent.Intent;
 import org.onosproject.net.intent.IntentService;
 
-import java.util.Collection;
-import java.util.Collections;
-import java.util.List;
+import com.google.common.collect.Lists;
 
 /**
  * Installs point-to-point connectivity intents.
@@ -67,17 +64,16 @@
     }
 
     private Collection<Intent> generateIntents() {
-        TrafficSelector selector = DefaultTrafficSelector.emptySelector();
-        TrafficTreatment treatment = DefaultTrafficTreatment.emptyTreatment();
-
         List<Host> hosts = Lists.newArrayList(hostService.getHosts());
         List<Intent> fullMesh = Lists.newArrayList();
         for (int i = 0; i < hosts.size(); i++) {
             for (int j = i + 1; j < hosts.size(); j++) {
-                fullMesh.add(new HostToHostIntent(appId(),
-                                                  hosts.get(i).id(),
-                                                  hosts.get(j).id(),
-                                                  selector, treatment));
+                fullMesh.add(HostToHostIntent.builder()
+                        .appId(appId())
+                        .one(hosts.get(i).id())
+                        .two(hosts.get(j).id())
+                        .build());
+
             }
         }
         Collections.shuffle(fullMesh);