[ONOS-8140][VOL-4152][SDFAB-94] Adding annotations to flow objectives

Change-Id: I4568b7d3bf4d5322395bbe14683ce48f93bd914e
diff --git a/core/api/src/main/java/org/onosproject/net/flowobjective/DefaultNextObjective.java b/core/api/src/main/java/org/onosproject/net/flowobjective/DefaultNextObjective.java
index 36656c4..32635cb 100644
--- a/core/api/src/main/java/org/onosproject/net/flowobjective/DefaultNextObjective.java
+++ b/core/api/src/main/java/org/onosproject/net/flowobjective/DefaultNextObjective.java
@@ -18,6 +18,8 @@
 import com.google.common.annotations.Beta;
 import com.google.common.collect.ImmutableList;
 import org.onosproject.core.ApplicationId;
+import org.onosproject.net.AbstractAnnotated;
+import org.onosproject.net.Annotations;
 import org.onosproject.net.flow.TrafficSelector;
 import org.onosproject.net.flow.TrafficTreatment;
 
@@ -35,7 +37,8 @@
  * Default implementation of a next objective.
  */
 @Beta
-public final class DefaultNextObjective implements NextObjective {
+public final class DefaultNextObjective extends AbstractAnnotated
+        implements NextObjective {
 
     private final List<NextTreatment> treatments;
     private final ApplicationId appId;
@@ -46,6 +49,7 @@
     private final TrafficSelector meta;
 
     private DefaultNextObjective(Builder builder) {
+        super(builder.annotations);
         this.treatments = builder.treatments;
         this.appId = builder.appId;
         this.type = builder.type;
@@ -147,6 +151,7 @@
                 .add("appId", appId())
                 .add("permanent", permanent())
                 .add("timeout", timeout())
+                .add("annotations", annotations())
                 .toString();
     }
 
@@ -173,6 +178,7 @@
         private Operation op;
         private ObjectiveContext context;
         private TrafficSelector meta;
+        private Annotations annotations;
 
         private final ImmutableList.Builder<NextTreatment> listBuilder
                 = ImmutableList.builder();
@@ -190,6 +196,7 @@
             this.meta = objective.meta();
             this.appId = objective.appId();
             this.op = objective.op();
+            this.annotations = objective.annotations();
         }
 
         @Override
@@ -261,6 +268,12 @@
         }
 
         @Override
+        public Builder withAnnotations(Annotations annotations) {
+            this.annotations = annotations;
+            return this;
+        }
+
+        @Override
         public NextObjective add() {
             return add(null);
         }