Implementation of REST POST API for creating intents
- codec for constraint decode
- codec for intent decode
- POST method for intents
- unit tests for codecs and POST method

Change-Id: Ibc0ef8f99a0c0664710a733985424c77010c49b5
diff --git a/core/common/src/main/java/org/onosproject/codec/impl/HostToHostIntentCodec.java b/core/common/src/main/java/org/onosproject/codec/impl/HostToHostIntentCodec.java
index 59ceb2b..597ab55 100644
--- a/core/common/src/main/java/org/onosproject/codec/impl/HostToHostIntentCodec.java
+++ b/core/common/src/main/java/org/onosproject/codec/impl/HostToHostIntentCodec.java
@@ -17,18 +17,23 @@
 
 import org.onosproject.codec.CodecContext;
 import org.onosproject.codec.JsonCodec;
+import org.onosproject.net.HostId;
 import org.onosproject.net.intent.ConnectivityIntent;
 import org.onosproject.net.intent.HostToHostIntent;
 
 import com.fasterxml.jackson.databind.node.ObjectNode;
 
 import static com.google.common.base.Preconditions.checkNotNull;
+import static org.onlab.util.Tools.nullIsIllegal;
 
 /**
  * Host to host intent codec.
  */
 public final class HostToHostIntentCodec extends JsonCodec<HostToHostIntent> {
 
+    private static final String ONE = "one";
+    private static final String TWO = "two";
+
     @Override
     public ObjectNode encode(HostToHostIntent intent, CodecContext context) {
         checkNotNull(intent, "Host to host intent cannot be null");
@@ -39,9 +44,27 @@
 
         final String one = intent.one().toString();
         final String two = intent.two().toString();
-        result.put("one", one);
-        result.put("two", two);
+        result.put(ONE, one);
+        result.put(TWO, two);
 
         return result;
     }
+
+    @Override
+    public HostToHostIntent decode(ObjectNode json, CodecContext context) {
+        HostToHostIntent.Builder builder = HostToHostIntent.builder();
+
+        IntentCodec.intentAttributes(json, context, builder);
+        ConnectivityIntentCodec.intentAttributes(json, context, builder);
+
+        String one = nullIsIllegal(json.get(ONE),
+                ONE + IntentCodec.MISSING_MEMBER_MESSAGE).asText();
+        builder.one(HostId.hostId(one));
+
+        String two = nullIsIllegal(json.get(TWO),
+                TWO + IntentCodec.MISSING_MEMBER_MESSAGE).asText();
+        builder.two(HostId.hostId(two));
+
+        return builder.build();
+    }
 }