blob: 7e73d40b630d6f5d40f9720c1381c2f897b3f5a9 [file] [log] [blame]
Pavlin Radoslavovb9fe6b42013-03-27 16:25:05 -07001package net.floodlightcontroller.flowcache.web;
2
3import java.io.IOException;
4
Pavlin Radoslavovb9fe6b42013-03-27 16:25:05 -07005import net.floodlightcontroller.util.FlowId;
6import net.floodlightcontroller.util.FlowPath;
HIGUCHI Yutaedf81d72013-06-12 12:06:57 -07007import net.onrc.onos.ofcontroller.flowcache.IFlowService;
Pavlin Radoslavovb9fe6b42013-03-27 16:25:05 -07008
9import org.codehaus.jackson.JsonGenerationException;
10import org.codehaus.jackson.map.ObjectMapper;
11import org.codehaus.jackson.map.JsonMappingException;
12import org.codehaus.jackson.map.ObjectMapper;
13import org.restlet.resource.Post;
14import org.restlet.resource.ServerResource;
15import org.slf4j.Logger;
16import org.slf4j.LoggerFactory;
17
18public class AddShortestPathFlowResource extends ServerResource {
19
20 protected static Logger log = LoggerFactory.getLogger(AddShortestPathFlowResource.class);
21
22 @Post("json")
23 public FlowId store(String flowJson) {
24 FlowId result = new FlowId();
25
26 IFlowService flowService =
27 (IFlowService)getContext().getAttributes().
28 get(IFlowService.class.getCanonicalName());
29
30 if (flowService == null) {
31 log.debug("ONOS Flow Service not found");
32 return result;
33 }
34
35 //
36 // Extract the arguments
37 // NOTE: The "flow" is specified in JSON format.
38 //
39 ObjectMapper mapper = new ObjectMapper();
40 String flowPathStr = flowJson;
41 FlowPath flowPath = null;
42 log.debug("Add Shortest Path Flow Path: " + flowPathStr);
43 try {
44 flowPath = mapper.readValue(flowPathStr, FlowPath.class);
45 } catch (JsonGenerationException e) {
46 e.printStackTrace();
47 } catch (JsonMappingException e) {
48 e.printStackTrace();
49 } catch (IOException e) {
50 e.printStackTrace();
51 }
52
53 // Process the request
54 if (flowPath != null) {
Pavlin Radoslavove0575292013-03-28 05:35:25 -070055 FlowPath addedFlowPath =
56 flowService.addAndMaintainShortestPathFlow(flowPath);
57 if (addedFlowPath == null)
Pavlin Radoslavovb9fe6b42013-03-27 16:25:05 -070058 result = new FlowId(); // Error: Return empty Flow Id
Pavlin Radoslavove0575292013-03-28 05:35:25 -070059 else
60 result = addedFlowPath.flowId();
Pavlin Radoslavovb9fe6b42013-03-27 16:25:05 -070061 }
62
63 return result;
64 }
65}