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

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

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

/**
 * Topology link up/down event history related classes and members
 *
 * @author subrata
 */
public class EventHistoryTopologyLink {
    // 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 srcSwDpid;
    public long dstSwDpid;
    public int srcPortState;
    public int dstPortState;
    public int srcSwport;
    public int dstSwport;
    public String linkType;
    public String reason;

    @JsonProperty("Source-Switch")
    @JsonSerialize(using = DPIDSerializer.class)
    public long getSrcSwDpid() {
        return srcSwDpid;
    }

    @JsonProperty("Dest-Switch")
    @JsonSerialize(using = DPIDSerializer.class)
    public long getDstSwDpid() {
        return dstSwDpid;
    }

    @JsonProperty("SrcPortState")
    public int getSrcPortState() {
        return srcPortState;
    }

    @JsonProperty("DstPortState")
    public int getDstPortState() {
        return dstPortState;
    }

    @JsonProperty("SrcPort")
    public int getSrcSwport() {
        return srcSwport;
    }

    @JsonProperty("DstPort")
    public int getDstSwport() {
        return dstSwport;
    }

    @JsonProperty("LinkType")
    public String getLinkType() {
        return linkType;
    }

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


}
