Adding emptyTreatment() and emptySelector()

Note: There was a change that adds a DROP action to
a traffic treatment if there are no other actions present.
To get a traffic treatment without the drop rule, use
emptyTreatment()

Change-Id: I1f23ed5e1fa7519eb94fcafa85facbad815d5e9c
diff --git a/core/api/src/main/java/org/onosproject/net/flow/DefaultTrafficSelector.java b/core/api/src/main/java/org/onosproject/net/flow/DefaultTrafficSelector.java
index d67e63a..5675d2e 100644
--- a/core/api/src/main/java/org/onosproject/net/flow/DefaultTrafficSelector.java
+++ b/core/api/src/main/java/org/onosproject/net/flow/DefaultTrafficSelector.java
@@ -15,23 +15,23 @@
  */
 package org.onosproject.net.flow;
 
+import com.google.common.base.MoreObjects;
+import com.google.common.collect.ImmutableSet;
+import org.onlab.packet.Ip6Address;
+import org.onlab.packet.IpPrefix;
+import org.onlab.packet.MacAddress;
+import org.onlab.packet.MplsLabel;
+import org.onlab.packet.VlanId;
+import org.onosproject.net.PortNumber;
+import org.onosproject.net.flow.criteria.Criteria;
+import org.onosproject.net.flow.criteria.Criterion;
+
+import java.util.Collections;
 import java.util.HashMap;
 import java.util.Map;
 import java.util.Objects;
 import java.util.Set;
 
-import org.onosproject.net.PortNumber;
-import org.onosproject.net.flow.criteria.Criteria;
-import org.onosproject.net.flow.criteria.Criterion;
-import org.onlab.packet.IpPrefix;
-import org.onlab.packet.Ip6Address;
-import org.onlab.packet.MacAddress;
-import org.onlab.packet.MplsLabel;
-import org.onlab.packet.VlanId;
-
-import com.google.common.base.MoreObjects;
-import com.google.common.collect.ImmutableSet;
-
 /**
  * Default traffic selector implementation.
  */
@@ -39,6 +39,9 @@
 
     private final Set<Criterion> criteria;
 
+    private static final TrafficSelector EMPTY
+            = new DefaultTrafficSelector(Collections.emptySet());
+
     /**
      * Creates a new traffic selector with the specified criteria.
      *
@@ -98,6 +101,15 @@
     }
 
     /**
+     * Returns an empty traffic selector.
+     *
+     * @return empty traffic selector
+     */
+    public static TrafficSelector emptySelector() {
+        return EMPTY;
+    }
+
+    /**
      * Returns a new traffic selector builder primed to produce entities
      * patterned after the supplied selector.
      *
diff --git a/core/api/src/main/java/org/onosproject/net/flow/DefaultTrafficTreatment.java b/core/api/src/main/java/org/onosproject/net/flow/DefaultTrafficTreatment.java
index 499e9e7..7249ac0 100644
--- a/core/api/src/main/java/org/onosproject/net/flow/DefaultTrafficTreatment.java
+++ b/core/api/src/main/java/org/onosproject/net/flow/DefaultTrafficTreatment.java
@@ -27,6 +27,7 @@
 import org.onosproject.net.flow.instructions.Instruction;
 import org.onosproject.net.flow.instructions.Instructions;
 
+import java.util.Collections;
 import java.util.List;
 import java.util.Objects;
 
@@ -41,6 +42,9 @@
 
     private final boolean hasClear;
 
+    private static final DefaultTrafficTreatment EMPTY
+            = new DefaultTrafficTreatment(Collections.emptyList());
+
     /**
      * Creates a new traffic treatment from the specified list of instructions.
      *
@@ -99,6 +103,15 @@
     }
 
     /**
+     * Returns an empty traffic treatment.
+     *
+     * @return empty traffic treatment
+     */
+    public static TrafficTreatment emptyTreatment() {
+        return EMPTY;
+    }
+
+    /**
      * Returns a new traffic treatment builder primed to produce entities
      * patterned after the supplied treatment.
      *
diff --git a/core/api/src/main/java/org/onosproject/net/flow/TrafficTreatment.java b/core/api/src/main/java/org/onosproject/net/flow/TrafficTreatment.java
index db634ff..5f62442 100644
--- a/core/api/src/main/java/org/onosproject/net/flow/TrafficTreatment.java
+++ b/core/api/src/main/java/org/onosproject/net/flow/TrafficTreatment.java
@@ -273,12 +273,14 @@
 
         /**
          * Builds an immutable traffic treatment descriptor.
+         * <p>
+         * If the treatment is empty when build() is called, it will add a default
+         * drop rule automatically. For a treatment that is actually empty, use
+         * {@link org.onosproject.net.flow.DefaultTrafficTreatment#emptyTreatment}.
+         * </p>
          *
          * @return traffic treatment
          */
         TrafficTreatment build();
-
-
     }
-
 }
diff --git a/core/api/src/main/java/org/onosproject/net/intent/HostToHostIntent.java b/core/api/src/main/java/org/onosproject/net/intent/HostToHostIntent.java
index 8add596..d47594a 100644
--- a/core/api/src/main/java/org/onosproject/net/intent/HostToHostIntent.java
+++ b/core/api/src/main/java/org/onosproject/net/intent/HostToHostIntent.java
@@ -50,8 +50,8 @@
      */
     public HostToHostIntent(ApplicationId appId, HostId one, HostId two) {
         this(appId, one, two,
-             DefaultTrafficSelector.builder().build(),
-             DefaultTrafficTreatment.builder().build(),
+             DefaultTrafficSelector.emptySelector(),
+             DefaultTrafficTreatment.emptyTreatment(),
              ImmutableList.of(new LinkTypeConstraint(false, Link.Type.OPTICAL)));
     }
 
diff --git a/core/api/src/main/java/org/onosproject/net/intent/TwoWayP2PIntent.java b/core/api/src/main/java/org/onosproject/net/intent/TwoWayP2PIntent.java
index 707ee6c..b6d0246 100644
--- a/core/api/src/main/java/org/onosproject/net/intent/TwoWayP2PIntent.java
+++ b/core/api/src/main/java/org/onosproject/net/intent/TwoWayP2PIntent.java
@@ -51,8 +51,8 @@
      */
     public TwoWayP2PIntent(ApplicationId appId, ConnectPoint one, ConnectPoint two) {
         this(appId, one, two,
-             DefaultTrafficSelector.builder().build(),
-             DefaultTrafficTreatment.builder().build(),
+             DefaultTrafficSelector.emptySelector(),
+             DefaultTrafficTreatment.emptyTreatment(),
              ImmutableList.of(new LinkTypeConstraint(false, Link.Type.OPTICAL)));
     }