Add JSON decoders for Host and HostLocation
- HostsWebResource will use the Host codec in parsing JSON for create-host requests
Change-Id: If51bf3433a4ab45889a94a6d11bbd3db6b96d074
(cherry picked from commit 46d2462e4e49855b0d533035250776589fd05d88)
diff --git a/core/common/src/main/java/org/onosproject/codec/impl/HostLocationCodec.java b/core/common/src/main/java/org/onosproject/codec/impl/HostLocationCodec.java
index efcd133..da4405d 100644
--- a/core/common/src/main/java/org/onosproject/codec/impl/HostLocationCodec.java
+++ b/core/common/src/main/java/org/onosproject/codec/impl/HostLocationCodec.java
@@ -17,23 +17,45 @@
import org.onosproject.codec.CodecContext;
import org.onosproject.codec.JsonCodec;
+import org.onosproject.net.DeviceId;
import org.onosproject.net.HostLocation;
import com.fasterxml.jackson.databind.node.ObjectNode;
+import org.onosproject.net.PortNumber;
import static com.google.common.base.Preconditions.checkNotNull;
+import static org.onlab.util.Tools.nullIsIllegal;
/**
- * Host JSON codec.
+ * HostLocation JSON codec.
*/
public final class HostLocationCodec extends JsonCodec<HostLocation> {
+ public static final String ELEMENT_ID = "elementId";
+ public static final String PORT = "port";
+
+ private static final String MISSING_MEMBER_MESSAGE =
+ " member is required in HostLocation";
+
@Override
public ObjectNode encode(HostLocation hostLocation, CodecContext context) {
checkNotNull(hostLocation, "Host location cannot be null");
return context.mapper().createObjectNode()
- .put("elementId", hostLocation.elementId().toString())
- .put("port", hostLocation.port().toString());
+ .put(ELEMENT_ID, hostLocation.elementId().toString())
+ .put(PORT, hostLocation.port().toString());
}
+ @Override
+ public HostLocation decode(ObjectNode json, CodecContext context) {
+ if (json == null || !json.isObject()) {
+ return null;
+ }
+
+ DeviceId deviceId = DeviceId.deviceId(nullIsIllegal(
+ json.get(ELEMENT_ID), ELEMENT_ID + MISSING_MEMBER_MESSAGE).asText());
+ PortNumber portNumber = PortNumber.portNumber(nullIsIllegal(
+ json.get(PORT), PORT + MISSING_MEMBER_MESSAGE).asText());
+
+ return new HostLocation(deviceId, portNumber, 0);
+ }
}