package net.onrc.onos.core.flowprogrammer.web;

import net.floodlightcontroller.core.IOFSwitch;

import org.openflow.util.HexString;
import org.restlet.resource.Get;

/**
 * FlowProgrammer REST API implementation: Set sending rate to the switch.
 * <p/>
 * GET /wm/fprog/pusher/setrate/{dpid}/{rate}/json"
 */
public class SetPushRateResource extends PusherResource {

    /**
     * Implement the API.
     *
     * @return true if succeeded, false if failed.
     */
    @Get("json")
    public boolean retrieve() {
        if (!init()) {
            return false;
        }

        long dpid;
        long rate;

        try {
            dpid = HexString.toLong((String) getRequestAttributes().get("dpid"));
            rate = Long.valueOf((String) getRequestAttributes().get("rate"));
        } catch (NumberFormatException e) {
            log.error("Invalid number format");
            return false;
        }

        IOFSwitch sw = provider.getSwitches().get(dpid);
        if (sw == null) {
            log.error("Invalid dpid");
            return false;
        }

        pusher.setRate(sw, rate);

        return true;
    }
}
