blob: b1381e0c1720f2802633e49859ba9b334f8993e4 [file] [log] [blame]
package net.onrc.onos.core.flowmanager.web;
import java.io.IOException;
import java.util.Collection;
import net.floodlightcontroller.restserver.CustomSerializerHelper;
import net.onrc.onos.api.flowmanager.Flow;
import net.onrc.onos.api.flowmanager.FlowId;
import net.onrc.onos.api.flowmanager.FlowManagerFloodlightService;
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.restlet.ext.jackson.JacksonRepresentation;
import org.restlet.representation.Representation;
import org.restlet.resource.Get;
import org.restlet.resource.ServerResource;
/**
* Handles REST requests for flow resources.
*/
public class FlowResource extends ServerResource {
private CustomSerializerHelper flowSerializers;
/**
* Constructs a FlowResource.
* <p/>
* A custom serializer for {@link FlowId} is automatically registered,
* because FlowId can't be serialized by default.
*/
public FlowResource() {
flowSerializers = new CustomSerializerHelper();
flowSerializers.addSerializer(FlowId.class, new SerializerBase<FlowId>(FlowId.class) {
@Override
public void serialize(FlowId flowId, JsonGenerator jgen,
SerializerProvider provider) throws IOException,
JsonGenerationException {
jgen.writeString(flowId.toString());
}
});
}
/**
* Handles REST requests for all flow resources.
*
* @return JSON-serializable Representation of all flow resources
*/
@Get("json")
public Representation retrieve() {
FlowManagerFloodlightService flowService =
(FlowManagerFloodlightService) getContext().getAttributes()
.get(FlowManagerFloodlightService.class.getCanonicalName());
Collection<Flow> flows = flowService.getFlows();
return flowSerializers.applySerializers(
(JacksonRepresentation<?>) toRepresentation(flows, null));
}
}