| package net.onrc.onos.core.linkdiscovery.web; |
| |
| import java.io.IOException; |
| |
| import net.onrc.onos.core.linkdiscovery.ILinkDiscoveryService.LinkType; |
| import net.onrc.onos.core.linkdiscovery.Link; |
| |
| import org.codehaus.jackson.JsonGenerator; |
| import org.codehaus.jackson.JsonProcessingException; |
| import org.codehaus.jackson.map.JsonSerializer; |
| import org.codehaus.jackson.map.SerializerProvider; |
| import org.codehaus.jackson.map.annotate.JsonSerialize; |
| import org.projectfloodlight.openflow.util.HexString; |
| |
| /** |
| * This class is both the datastructure and the serializer |
| * for a link with the corresponding type of link. |
| * <!-- CHECKSTYLE IGNORE WriteTag FOR NEXT 1 LINES --> |
| * @author alexreimers |
| */ |
| @JsonSerialize(using = LinkWithType.class) |
| public class LinkWithType extends JsonSerializer<LinkWithType> { |
| public long srcSwDpid; |
| public short srcPort; |
| public int srcPortState; |
| public long dstSwDpid; |
| public short dstPort; |
| public int dstPortState; |
| public LinkType type; |
| |
| // Do NOT delete this, it's required for the serializer |
| public LinkWithType() { |
| } |
| |
| public LinkWithType(Link link, |
| int srcPortState, |
| int dstPortState, |
| LinkType type) { |
| this.srcSwDpid = link.getSrc(); |
| this.srcPort = link.getSrcPort(); |
| this.srcPortState = srcPortState; |
| this.dstSwDpid = link.getDst(); |
| this.dstPort = link.getDstPort(); |
| this.dstPortState = dstPortState; |
| this.type = type; |
| } |
| |
| @Override |
| public void serialize(LinkWithType lwt, JsonGenerator jgen, SerializerProvider arg2) |
| throws IOException, JsonProcessingException { |
| // You ****MUST*** use lwt for the fields as it's actually a different object. |
| jgen.writeStartObject(); |
| jgen.writeStringField("src-switch", HexString.toHexString(lwt.srcSwDpid)); |
| jgen.writeNumberField("src-port", lwt.srcPort); |
| jgen.writeNumberField("src-port-state", lwt.srcPortState); |
| jgen.writeStringField("dst-switch", HexString.toHexString(lwt.dstSwDpid)); |
| jgen.writeNumberField("dst-port", lwt.dstPort); |
| jgen.writeNumberField("dst-port-state", lwt.dstPortState); |
| jgen.writeStringField("type", lwt.type.toString()); |
| jgen.writeEndObject(); |
| } |
| |
| @Override |
| public Class<LinkWithType> handledType() { |
| return LinkWithType.class; |
| } |
| } |