Merge "Partial fix for bug 8. Fixing many generics-related warnings and some typos."
[controller.git] / opendaylight / web / flows / src / main / java / org / opendaylight / controller / flows / web / Flows.java
index 297c99c0b282e02a726f0d3a532b3e70735f116a..d75d14c623da8bb8c4d1331415f6988a2d8c35af 100644 (file)
@@ -21,6 +21,7 @@ import org.opendaylight.controller.sal.authorization.UserLevel;
 import org.opendaylight.controller.sal.core.Name;
 import org.opendaylight.controller.sal.core.Node;
 import org.opendaylight.controller.sal.core.NodeConnector;
+import org.opendaylight.controller.sal.utils.GlobalConstants;
 import org.opendaylight.controller.sal.utils.ServiceHelper;
 import org.opendaylight.controller.sal.utils.Status;
 import org.opendaylight.controller.sal.utils.StatusCode;
@@ -43,9 +44,10 @@ import com.google.gson.Gson;
 @RequestMapping("/")
 public class Flows implements IOneWeb {
        private static final UserLevel AUTH_LEVEL = UserLevel.CONTAINERUSER;
-    private final String WEB_NAME = "Flows";
-    private final String WEB_ID = "flows";
-    private final short WEB_ORDER = 2;
+    private static final String WEB_NAME = "Flows";
+    private static final String WEB_ID = "flows";
+    private static final short WEB_ORDER = 2;
+    private final String containerName = GlobalConstants.DEFAULT.toString();
 
     public Flows() {
         ServiceHelper.registerGlobalService(IOneWeb.class, this, null);
@@ -76,15 +78,13 @@ public class Flows implements IOneWeb {
     public Set<Map<String, Object>> getFlows() {
         // fetch frm
         IForwardingRulesManager frm = (IForwardingRulesManager) ServiceHelper
-                .getInstance(IForwardingRulesManager.class, "default", this);
-        if (frm == null)
-            return null;
+                .getInstance(IForwardingRulesManager.class, containerName, this);
+        if (frm == null) { return null; }
 
         // fetch sm
         ISwitchManager switchManager = (ISwitchManager) ServiceHelper
-                .getInstance(ISwitchManager.class, "default", this);
-        if (switchManager == null)
-            return null;
+                .getInstance(ISwitchManager.class, containerName, this);
+        if (switchManager == null) { return null; }
         
         // get static flow list
         List<FlowConfig> staticFlowList = frm.getStaticFlows();
@@ -93,12 +93,12 @@ public class Flows implements IOneWeb {
                Map<String, Object> entry = new HashMap<String, Object>();
                entry.put("flow", flowConfig);
                entry.put("name", flowConfig.getName());
-               
-               Node node = flowConfig.getNode(); 
-               SwitchConfig switchConfig = switchManager.getSwitchConfig(node.getNodeIDString());
-               String nodeName = node.toString();
-               if (switchConfig != null) { nodeName = switchConfig.getNodeName(); }
-               entry.put("node", nodeName);
+               Node node = flowConfig.getNode();
+               String description = switchManager.getNodeDescription(node);
+               entry.put("node", 
+                               (description.isEmpty() || 
+                                               description.equalsIgnoreCase("none"))? 
+                                                               node.toString() : description);
                entry.put("nodeId", node.toString());
                output.add(entry);
         }
@@ -110,9 +110,8 @@ public class Flows implements IOneWeb {
     @ResponseBody
     public Map<String, Object> getNodePorts() {
         ISwitchManager switchManager = (ISwitchManager) ServiceHelper
-                .getInstance(ISwitchManager.class, "default", this);
-        if (switchManager == null)
-            return null;
+                .getInstance(ISwitchManager.class, containerName, this);
+        if (switchManager == null) { return null; }
 
         Map<String, Object> nodes = new HashMap<String, Object>();
         Map<Short, String> port;
@@ -121,7 +120,7 @@ public class Flows implements IOneWeb {
             port = new HashMap<Short, String>(); // new port
             Set<NodeConnector> nodeConnectorSet = node.getNodeConnectors();
 
-            if (nodeConnectorSet != null)
+            if (nodeConnectorSet != null) {
                 for (NodeConnector nodeConnector : nodeConnectorSet) {
                     String nodeConnectorName = ((Name) switchManager
                             .getNodeConnectorProp(nodeConnector,
@@ -130,18 +129,18 @@ public class Flows implements IOneWeb {
                              nodeConnectorName + "("
                              + nodeConnector.getNodeConnectorIDString() + ")");
                 }
+            }
             
             // add ports
             Map<String, Object> entry = new HashMap<String, Object>();
             entry.put("ports", port);
             
             // add name
-            String nodeName = node.getNode().toString();
-            SwitchConfig config = switchManager.getSwitchConfig(node.getNode().getNodeIDString());
-            if (config != null) {
-               nodeName = config.getNodeName();
-            }
-            entry.put("name", nodeName);
+            String description = switchManager
+                       .getNodeDescription(node.getNode());
+            entry.put("name", (description.isEmpty() || 
+                       description.equalsIgnoreCase("none"))? 
+                       node.getNode().toString() : description);
             
             // add to the node
             nodes.put(node.getNode().toString(), entry);
@@ -154,7 +153,7 @@ public class Flows implements IOneWeb {
     @ResponseBody
     public Map<String, Object> getNodeFlows() {
         ISwitchManager switchManager = (ISwitchManager) ServiceHelper
-                .getInstance(ISwitchManager.class, "default", this);
+                .getInstance(ISwitchManager.class, containerName, this);
         if (switchManager == null) { return null; }
         IForwardingRulesManager frm = (IForwardingRulesManager) ServiceHelper
                 .getInstance(IForwardingRulesManager.class, "default", this);
@@ -167,13 +166,13 @@ public class Flows implements IOneWeb {
             
             List<FlowConfig> flows = frm.getStaticFlows(node);
             
-            String nodeName = node.toString();
+            String nodeDesc = node.toString();
             SwitchConfig config = switchManager.getSwitchConfig(node.getNodeIDString());
             if (config != null) {
-               nodeName = config.getNodeName();
+               nodeDesc = config.getNodeDescription();
             }
             
-            nodes.put(nodeName, flows.size());
+            nodes.put(nodeDesc, flows.size());
         }
 
         return nodes;
@@ -183,71 +182,64 @@ public class Flows implements IOneWeb {
     @ResponseBody
     public String actionFlow(@RequestParam(required = true) String action,
             @RequestParam(required = false) String body, @RequestParam(required = true) String nodeId) {
-       if (!authorize(UserLevel.NETWORKADMIN)) {
+       if (!isUserAuthorized(UserLevel.NETWORKADMIN)) {
                return "Operation not authorized";
        }
        
         IForwardingRulesManager frm = (IForwardingRulesManager) ServiceHelper
-                .getInstance(IForwardingRulesManager.class, "default", this);
+                .getInstance(IForwardingRulesManager.class, containerName, this);
         if (frm == null) { return null; }
 
         Gson gson = new Gson();
         FlowConfig flow = gson.fromJson(body, FlowConfig.class);
         Node node = Node.fromString(nodeId);
         flow.setNode(node);
-        Status result = null;
+        Status result = new Status(StatusCode.BADREQUEST, "Invalid request");
         if (action.equals("add")) {
             result = frm.addStaticFlow(flow, false);
         }
 
-        return result.getDescription();
+        return (result.isSuccess())? StatusCode.SUCCESS.toString(): result.getDescription();
     }
     
     @RequestMapping(value = "/flow/{nodeId}/{name}", method = RequestMethod.POST)
     @ResponseBody
     public String removeFlow(@PathVariable("nodeId") String nodeId, @PathVariable("name") String name,
                @RequestParam(required = true) String action) {
-       if (!authorize(UserLevel.NETWORKADMIN)) { return "Operation not authorized"; }
+       if (!isUserAuthorized(UserLevel.NETWORKADMIN)) { return "Operation not authorized"; }
        
        IForwardingRulesManager frm = (IForwardingRulesManager) ServiceHelper
-                .getInstance(IForwardingRulesManager.class, "default", this);
+                .getInstance(IForwardingRulesManager.class, containerName, this);
         if (frm == null) { return null; }
         
         Status result = null;
         Node node = Node.fromString(nodeId);
-        if (node == null) {
-            return null;
-        }
+        if (node == null) { return null; }
         if (action.equals("remove")) {
                result = frm.removeStaticFlow(name, node);
         } else if (action.equals("toggle")) {
-               FlowConfig config = frm.getStaticFlow(name, node);
-               result = frm.toggleStaticFlowStatus(config);
+               result = frm.toggleStaticFlowStatus(name, node);
         } else {
                result = new Status(StatusCode.BADREQUEST, "Unknown action");
         }
         
-        return result.getDescription();
+        return (result.isSuccess())? StatusCode.SUCCESS.toString(): result.getDescription();
     }
     
     /**
-     * Is the operation permitted for the given level
+     * Returns whether the current user's level is same or above
+     * the required authorization level. 
      * 
-     * @param level
+     * @param requiredLevel the authorization level required
      */
-    private boolean authorize(UserLevel level) {
+    private boolean isUserAuthorized(UserLevel requiredLevel) {
        IUserManager userManager = (IUserManager) ServiceHelper
                 .getGlobalInstance(IUserManager.class, this);
-        if (userManager == null) {
-               return false;
-        }
+        if (userManager == null) { return false; }
         
         String username = SecurityContextHolder.getContext().getAuthentication().getName();
         UserLevel userLevel = userManager.getUserLevel(username);
-        if (userLevel.toNumber() <= level.toNumber()) {
-               return true;
-        }
-        return false;
+        return (userLevel.ordinal() <= requiredLevel.ordinal());
     }
 
 }