Merge "Make constraint objects serializable by Kryo"
diff --git a/core/api/src/main/java/org/onlab/onos/net/intent/constraint/AnnotationConstraint.java b/core/api/src/main/java/org/onlab/onos/net/intent/constraint/AnnotationConstraint.java
index a093be9..1767a41 100644
--- a/core/api/src/main/java/org/onlab/onos/net/intent/constraint/AnnotationConstraint.java
+++ b/core/api/src/main/java/org/onlab/onos/net/intent/constraint/AnnotationConstraint.java
@@ -43,6 +43,12 @@
         this.threshold = threshold;
     }
 
+    // Constructor for serialization
+    private AnnotationConstraint() {
+        this.key = "";
+        this.threshold = 0;
+    }
+
     /**
      * Returns the key of link annotation this constraint designates.
      * @return key of link annotation
diff --git a/core/api/src/main/java/org/onlab/onos/net/intent/constraint/LatencyConstraint.java b/core/api/src/main/java/org/onlab/onos/net/intent/constraint/LatencyConstraint.java
index 7b1411a..e4b4432 100644
--- a/core/api/src/main/java/org/onlab/onos/net/intent/constraint/LatencyConstraint.java
+++ b/core/api/src/main/java/org/onlab/onos/net/intent/constraint/LatencyConstraint.java
@@ -43,6 +43,11 @@
         this.latency = latency;
     }
 
+    // Constructor for serialization
+    private LatencyConstraint() {
+        this.latency = Duration.ZERO;
+    }
+
     public Duration latency() {
         return latency;
     }
diff --git a/core/api/src/main/java/org/onlab/onos/net/intent/constraint/ObstacleConstraint.java b/core/api/src/main/java/org/onlab/onos/net/intent/constraint/ObstacleConstraint.java
index 6d73fc2..8472f3c 100644
--- a/core/api/src/main/java/org/onlab/onos/net/intent/constraint/ObstacleConstraint.java
+++ b/core/api/src/main/java/org/onlab/onos/net/intent/constraint/ObstacleConstraint.java
@@ -21,6 +21,7 @@
 import org.onlab.onos.net.Link;
 import org.onlab.onos.net.resource.LinkResourceService;
 
+import java.util.Collections;
 import java.util.Objects;
 import java.util.Set;
 
@@ -39,6 +40,11 @@
         this.obstacles = ImmutableSet.copyOf(obstacles);
     }
 
+    // Constructor for serialization
+    private ObstacleConstraint() {
+        this.obstacles = Collections.emptySet();
+    }
+
     @Override
     public boolean isValid(Link link, LinkResourceService resourceService) {
         DeviceId src = link.src().deviceId();
diff --git a/core/api/src/main/java/org/onlab/onos/net/intent/constraint/WaypointConstraint.java b/core/api/src/main/java/org/onlab/onos/net/intent/constraint/WaypointConstraint.java
index 3a132f0..9e3cc20 100644
--- a/core/api/src/main/java/org/onlab/onos/net/intent/constraint/WaypointConstraint.java
+++ b/core/api/src/main/java/org/onlab/onos/net/intent/constraint/WaypointConstraint.java
@@ -23,6 +23,7 @@
 import org.onlab.onos.net.intent.Constraint;
 import org.onlab.onos.net.resource.LinkResourceService;
 
+import java.util.Collections;
 import java.util.LinkedList;
 import java.util.List;
 import java.util.Objects;
@@ -48,6 +49,11 @@
         this.waypoints = ImmutableList.copyOf(waypoints);
     }
 
+    // Constructor for serialization
+    private WaypointConstraint() {
+        this.waypoints = Collections.emptyList();
+    }
+
     public List<DeviceId> waypoints() {
         return waypoints;
     }
diff --git a/core/store/serializers/src/main/java/org/onlab/onos/store/serializers/KryoNamespaces.java b/core/store/serializers/src/main/java/org/onlab/onos/store/serializers/KryoNamespaces.java
index 4cba9f0..5d689a3 100644
--- a/core/store/serializers/src/main/java/org/onlab/onos/store/serializers/KryoNamespaces.java
+++ b/core/store/serializers/src/main/java/org/onlab/onos/store/serializers/KryoNamespaces.java
@@ -75,10 +75,14 @@
 import org.onlab.onos.net.intent.OpticalPathIntent;
 import org.onlab.onos.net.intent.PathIntent;
 import org.onlab.onos.net.intent.PointToPointIntent;
+import org.onlab.onos.net.intent.constraint.AnnotationConstraint;
 import org.onlab.onos.net.intent.constraint.BandwidthConstraint;
 import org.onlab.onos.net.intent.constraint.BooleanConstraint;
 import org.onlab.onos.net.intent.constraint.LambdaConstraint;
+import org.onlab.onos.net.intent.constraint.LatencyConstraint;
 import org.onlab.onos.net.intent.constraint.LinkTypeConstraint;
+import org.onlab.onos.net.intent.constraint.ObstacleConstraint;
+import org.onlab.onos.net.intent.constraint.WaypointConstraint;
 import org.onlab.onos.net.link.DefaultLinkDescription;
 import org.onlab.onos.net.packet.DefaultOutboundPacket;
 import org.onlab.onos.net.provider.ProviderId;
@@ -208,9 +212,14 @@
                     LinkResourceRequest.class,
                     Lambda.class,
                     Bandwidth.class,
+                    // Constraints
                     LambdaConstraint.class,
                     BandwidthConstraint.class,
                     LinkTypeConstraint.class,
+                    LatencyConstraint.class,
+                    WaypointConstraint.class,
+                    ObstacleConstraint.class,
+                    AnnotationConstraint.class,
                     BooleanConstraint.class
                     )
             .register(DefaultApplicationId.class, new DefaultApplicationIdSerializer())