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;
    }


}
