[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/DefaultForwardingObjective.java b/core/api/src/main/java/org/onosproject/net/flowobjective/DefaultForwardingObjective.java
index a44b05b..bea1e96 100644
--- a/core/api/src/main/java/org/onosproject/net/flowobjective/DefaultForwardingObjective.java
+++ b/core/api/src/main/java/org/onosproject/net/flowobjective/DefaultForwardingObjective.java
@@ -18,6 +18,8 @@
 import com.google.common.annotations.Beta;
 
 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;
 
@@ -32,7 +34,8 @@
  * Default implementation of a forwarding objective.
  */
 @Beta
-public final class DefaultForwardingObjective implements ForwardingObjective {
+public final class DefaultForwardingObjective extends AbstractAnnotated
+        implements ForwardingObjective {
 
     private final TrafficSelector selector;
     private final Flag flag;
@@ -49,6 +52,7 @@
     private final int id;
 
     private DefaultForwardingObjective(Builder builder) {
+        super(builder.annotations);
         this.selector = builder.selector;
         this.flag = builder.flag;
         this.permanent = builder.permanent;
@@ -169,6 +173,7 @@
                 .add("appId", appId())
                 .add("permanent", permanent())
                 .add("timeout", timeout())
+                .add("annotations", annotations())
                 .toString();
     }
 
@@ -212,6 +217,8 @@
         private Operation op;
         private ObjectiveContext context;
         private TrafficSelector meta;
+        private Annotations annotations;
+
 
         // Creates an empty builder
         private Builder() {
@@ -229,6 +236,7 @@
             this.treatment = objective.treatment();
             this.op = objective.op();
             this.meta = objective.meta();
+            this.annotations = objective.annotations();
         }
 
         @Override
@@ -287,6 +295,12 @@
         }
 
         @Override
+        public Builder withAnnotations(Annotations annotations) {
+            this.annotations = annotations;
+            return this;
+        }
+
+        @Override
         public ForwardingObjective add() {
             checkNotNull(selector, "Must have a selector");
             checkNotNull(flag, "A flag must be set");