package net.floodlightcontroller.core.web.serializers;

import java.io.IOException;

import net.floodlightcontroller.core.IOFSwitch;
import net.floodlightcontroller.core.internal.OFSwitchImplBase;
import net.floodlightcontroller.core.web.OFPortStatsEntryMod;

import org.codehaus.jackson.JsonGenerationException;
import org.codehaus.jackson.JsonGenerator;
import org.codehaus.jackson.map.SerializerProvider;
import org.codehaus.jackson.map.ser.std.SerializerBase;
import org.projectfloodlight.openflow.protocol.OFPortStatsEntry;

public class OFPortStatsEntrySerializer extends SerializerBase<OFPortStatsEntryMod> {

    protected OFPortStatsEntrySerializer() {
        super(OFPortStatsEntryMod.class);
    }

    @Override
    public void serialize(OFPortStatsEntryMod portStatModEntry, JsonGenerator jGen,
            SerializerProvider sp) throws IOException, JsonGenerationException {

        IOFSwitch sw = portStatModEntry.getSwitch();
        OFPortStatsEntry portStatEntry = portStatModEntry.getPortStatsEntry();
        jGen.writeStartObject();
        jGen.writeNumberField("portNumber", portStatEntry.getPortNo().getPortNumber());
        jGen.writeStringField("portStatus", ((OFSwitchImplBase) sw).portEnabled(
                portStatEntry.getPortNo().getPortNumber()) ? "up" : "down");
        jGen.writeNumberField("receivePackets", portStatEntry.getRxPackets().getValue());
        jGen.writeNumberField("transmitPackets", portStatEntry.getTxPackets().getValue());
        jGen.writeNumberField("receiveBytes", portStatEntry.getRxBytes().getValue());
        jGen.writeNumberField("transmitBytes", portStatEntry.getTxBytes().getValue());
        jGen.writeNumberField("receiveDropped", portStatEntry.getRxDropped().getValue());
        jGen.writeNumberField("transmitDropped", portStatEntry.getTxDropped().getValue());
        jGen.writeNumberField("receiveErrors", portStatEntry.getRxErrors().getValue());
        jGen.writeNumberField("transmitErrors", portStatEntry.getTxErrors().getValue());
        jGen.writeNumberField("receiveFrameErrors", portStatEntry.getRxFrameErr()
                .getValue());
        jGen.writeNumberField("receiveOverrunErrors", portStatEntry.getRxOverErr()
                .getValue());
        jGen.writeNumberField("receiveCRCErrors", portStatEntry.getRxCrcErr().getValue());
        jGen.writeNumberField("collisions", portStatEntry.getCollisions().getValue());

        jGen.writeEndObject();
    }

}
