blob: 28003056a221cfbe34a2c511bdc27b0e744d2f3c [file] [log] [blame]
HIGUCHI Yuta60a10142013-06-14 15:50:10 -07001package net.onrc.onos.ofcontroller.flowmanager.web;
Pavlin Radoslavov5ab68512013-02-18 09:59:33 -08002
Pavlin Radoslavov2013cbb2013-02-26 10:15:18 -08003import java.io.IOException;
4
HIGUCHI Yuta60a10142013-06-14 15:50:10 -07005import net.onrc.onos.ofcontroller.flowmanager.IFlowService;
HIGUCHI Yuta356086e2013-06-12 15:21:19 -07006import net.onrc.onos.ofcontroller.util.FlowId;
7import net.onrc.onos.ofcontroller.util.FlowPath;
Pavlin Radoslavov5ab68512013-02-18 09:59:33 -08008
Pavlin Radoslavov2013cbb2013-02-26 10:15:18 -08009import org.codehaus.jackson.JsonGenerationException;
10import org.codehaus.jackson.map.ObjectMapper;
11import org.codehaus.jackson.map.JsonMappingException;
Pavlin Radoslavov4d4fc4e2013-03-04 13:49:04 -080012import org.restlet.resource.Post;
Pavlin Radoslavov5ab68512013-02-18 09:59:33 -080013import org.restlet.resource.ServerResource;
14import org.slf4j.Logger;
15import org.slf4j.LoggerFactory;
16
17public class AddFlowResource extends ServerResource {
18
19 protected static Logger log = LoggerFactory.getLogger(AddFlowResource.class);
20
Pavlin Radoslavov4d4fc4e2013-03-04 13:49:04 -080021 @Post("json")
22 public FlowId store(String flowJson) {
Pavlin Radoslavova10a9a82013-02-22 11:47:54 -080023 FlowId result = new FlowId();
Pavlin Radoslavov5ab68512013-02-18 09:59:33 -080024
25 IFlowService flowService =
26 (IFlowService)getContext().getAttributes().
27 get(IFlowService.class.getCanonicalName());
28
29 if (flowService == null) {
30 log.debug("ONOS Flow Service not found");
31 return result;
32 }
33
Pavlin Radoslavov2013cbb2013-02-26 10:15:18 -080034 //
Pavlin Radoslavov5ab68512013-02-18 09:59:33 -080035 // Extract the arguments
Pavlin Radoslavov2013cbb2013-02-26 10:15:18 -080036 // NOTE: The "flow" is specified in JSON format.
37 //
38 ObjectMapper mapper = new ObjectMapper();
Pavlin Radoslavov4d4fc4e2013-03-04 13:49:04 -080039 String flowPathStr = flowJson;
Pavlin Radoslavov2013cbb2013-02-26 10:15:18 -080040 FlowPath flowPath = null;
Pavlin Radoslavov5ab68512013-02-18 09:59:33 -080041 log.debug("Add Flow Path: " + flowPathStr);
Pavlin Radoslavov2013cbb2013-02-26 10:15:18 -080042 try {
43 flowPath = mapper.readValue(flowPathStr, FlowPath.class);
44 } catch (JsonGenerationException e) {
45 e.printStackTrace();
46 } catch (JsonMappingException e) {
47 e.printStackTrace();
48 } catch (IOException e) {
49 e.printStackTrace();
50 }
Pavlin Radoslavov5ab68512013-02-18 09:59:33 -080051
Pavlin Radoslavov2013cbb2013-02-26 10:15:18 -080052 // Process the request
53 if (flowPath != null) {
Pavlin Radoslavovdbaaf2e2013-03-29 04:25:55 -070054 if (flowService.addFlow(flowPath, result, null) != true) {
Pavlin Radoslavov2013cbb2013-02-26 10:15:18 -080055 result = new FlowId(); // Error: Return empty Flow Id
56 }
Pavlin Radoslavova10a9a82013-02-22 11:47:54 -080057 }
Pavlin Radoslavov5ab68512013-02-18 09:59:33 -080058
59 return result;
60 }
61}