package net.onrc.onos.core.linkdiscovery.internal;

import net.floodlightcontroller.core.web.serializers.DPIDSerializer;
import net.floodlightcontroller.core.web.serializers.IPv4Serializer;

import org.codehaus.jackson.annotate.JsonProperty;
import org.codehaus.jackson.map.annotate.JsonSerialize;

/**
 * Topology Switch event history related classes and members.
 *
 * @author subrata
 */
public class EventHistoryTopologySwitch {
    // The following fields are not stored as String to save memory
    // They should be converted to appropriate human-readable strings by
    // the front end (e.g. in cli in Python)
    public long dpid;
    public int ipv4Addr;
    public int l4Port;
    public String reason;

    @JsonProperty("Switch")
    @JsonSerialize(using = DPIDSerializer.class)
    public long getDpid() {
        return dpid;
    }

    @JsonProperty("IpAddr")
    @JsonSerialize(using = IPv4Serializer.class)
    public int getIpv4Addr() {
        return ipv4Addr;
    }

    @JsonProperty("Port")
    public int getL4Port() {
        return l4Port;
    }

    @JsonProperty("Reason")
    public String getReason() {
        return reason;
    }


}
