blob: b1381e0c1720f2802633e49859ba9b334f8993e4 [file] [log] [blame]
Jonathan Hart77803d32014-08-19 08:53:00 -07001package net.onrc.onos.core.flowmanager.web;
2
3import java.io.IOException;
4import java.util.Collection;
5
6import net.floodlightcontroller.restserver.CustomSerializerHelper;
7import net.onrc.onos.api.flowmanager.Flow;
8import net.onrc.onos.api.flowmanager.FlowId;
Jonathan Hart68e8dd62014-08-26 18:06:23 -07009import net.onrc.onos.api.flowmanager.FlowManagerFloodlightService;
Jonathan Hart77803d32014-08-19 08:53:00 -070010
11import org.codehaus.jackson.JsonGenerationException;
12import org.codehaus.jackson.JsonGenerator;
13import org.codehaus.jackson.map.SerializerProvider;
14import org.codehaus.jackson.map.ser.std.SerializerBase;
15import org.restlet.ext.jackson.JacksonRepresentation;
16import org.restlet.representation.Representation;
17import org.restlet.resource.Get;
18import org.restlet.resource.ServerResource;
19
20/**
21 * Handles REST requests for flow resources.
22 */
23public class FlowResource extends ServerResource {
24
Jonathan Hart68e8dd62014-08-26 18:06:23 -070025 private CustomSerializerHelper flowSerializers;
Jonathan Hart77803d32014-08-19 08:53:00 -070026
27 /**
28 * Constructs a FlowResource.
29 * <p/>
30 * A custom serializer for {@link FlowId} is automatically registered,
31 * because FlowId can't be serialized by default.
32 */
33 public FlowResource() {
34 flowSerializers = new CustomSerializerHelper();
35 flowSerializers.addSerializer(FlowId.class, new SerializerBase<FlowId>(FlowId.class) {
36 @Override
37 public void serialize(FlowId flowId, JsonGenerator jgen,
38 SerializerProvider provider) throws IOException,
39 JsonGenerationException {
40 jgen.writeString(flowId.toString());
41 }
42 });
43 }
44
45 /**
46 * Handles REST requests for all flow resources.
47 *
48 * @return JSON-serializable Representation of all flow resources
49 */
50 @Get("json")
51 public Representation retrieve() {
Jonathan Hart68e8dd62014-08-26 18:06:23 -070052 FlowManagerFloodlightService flowService =
53 (FlowManagerFloodlightService) getContext().getAttributes()
54 .get(FlowManagerFloodlightService.class.getCanonicalName());
Jonathan Hart77803d32014-08-19 08:53:00 -070055
56 Collection<Flow> flows = flowService.getFlows();
57
58 return flowSerializers.applySerializers(
59 (JacksonRepresentation<?>) toRepresentation(flows, null));
60 }
Jonathan Hart68e8dd62014-08-26 18:06:23 -070061
Jonathan Hart77803d32014-08-19 08:53:00 -070062}