Register intent related types to Kryo serialization

- Additionally, define a new type for result of intent compilation

Change-Id: I1ba4b143625138273306576a276d62b6344dce4f
diff --git a/src/main/java/net/onrc/onos/core/newintent/IntentCompilationResult.java b/src/main/java/net/onrc/onos/core/newintent/IntentCompilationResult.java
new file mode 100644
index 0000000..34a5a74
--- /dev/null
+++ b/src/main/java/net/onrc/onos/core/newintent/IntentCompilationResult.java
@@ -0,0 +1,47 @@
+package net.onrc.onos.core.newintent;
+
+import com.google.common.collect.ImmutableList;
+import net.onrc.onos.api.newintent.InstallableIntent;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import static com.google.common.base.Preconditions.checkArgument;
+import static com.google.common.base.Preconditions.checkNotNull;
+
+/**
+ * A class representing a result of intent compilation.
+ */
+public class IntentCompilationResult {
+    private final List<InstallableIntent> result;
+
+    /**
+     * Constructs an instance containing the specified list of installable intents.
+     *
+     * @param result installable intents
+     */
+    public IntentCompilationResult(List<InstallableIntent> result) {
+        checkNotNull(result);
+        checkArgument(result.size() > 0,
+                "result of intent compilation should be " +
+                "more than 1 installable intents or more, but %s", result.size());
+
+        this.result = new ArrayList<>(checkNotNull(result));
+    }
+
+    /**
+     * Constructor for serializer.
+     */
+    protected IntentCompilationResult() {
+        this.result = null;
+    }
+
+    /**
+     * Returns list of installable intents that this object contains.
+     *
+     * @return installable intents
+     */
+    public List<InstallableIntent> getResult() {
+        return ImmutableList.copyOf(result);
+    }
+}
diff --git a/src/main/java/net/onrc/onos/core/util/serializers/KryoFactory.java b/src/main/java/net/onrc/onos/core/util/serializers/KryoFactory.java
index 5253483..dde06f6 100644
--- a/src/main/java/net/onrc/onos/core/util/serializers/KryoFactory.java
+++ b/src/main/java/net/onrc/onos/core/util/serializers/KryoFactory.java
@@ -16,6 +16,7 @@
 import net.onrc.onos.api.newintent.ConnectivityIntent;
 import net.onrc.onos.api.newintent.IntentEvent;
 import net.onrc.onos.api.newintent.IntentId;
+import net.onrc.onos.api.newintent.IntentState;
 import net.onrc.onos.api.newintent.MultiPointToSinglePointIntent;
 import net.onrc.onos.api.newintent.OpticalConnectivityIntent;
 import net.onrc.onos.api.newintent.PacketConnectivityIntent;
@@ -33,6 +34,7 @@
 import net.onrc.onos.core.intent.PathIntent;
 import net.onrc.onos.core.intent.ShortestPathIntent;
 import net.onrc.onos.core.intent.runtime.IntentStateList;
+import net.onrc.onos.core.newintent.IntentCompilationResult;
 import net.onrc.onos.core.newintent.PathFlowIntent;
 import net.onrc.onos.core.newintent.SingleDstTreeFlowIntent;
 import net.onrc.onos.core.newintent.SingleSrcTreeFlowIntent;
@@ -209,6 +211,8 @@
         kryo.register(BatchOperationEntry.class);
         kryo.register(IntentId.class);
         kryo.register(IntentEvent.class);
+        kryo.register(IntentState.class);
+        kryo.register(IntentCompilationResult.class);
         kryo.register(AbstractIntent.class);
         kryo.register(ConnectivityIntent.class);
         kryo.register(PointToPointIntent.class);