blob: 5271794a57ec73637d901c34c714c974a7ed3b8a [file] [log] [blame]
package net.onrc.onos.core.linkdiscovery.web;
import java.io.IOException;
import net.onrc.onos.core.linkdiscovery.ILinkDiscovery.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.openflow.util.HexString;
/**
* This class is both the datastructure and the serializer
* for a link with the corresponding type of link.
*
* @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;
}
}