Merge "Fixed augment schema path resolving."
[controller.git] / opendaylight / web / devices / src / main / java / org / opendaylight / controller / devices / web / Devices.java
index ece5959dc0256e6bdef294075161cf99d57c30cd..ec59ab740b76e14ca69b6e39643b4a20761fc1ae 100644 (file)
@@ -16,11 +16,13 @@ import java.util.Map.Entry;
 import java.util.Set;
 import java.util.TreeMap;
 import java.util.concurrent.ConcurrentMap;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
 
 import org.codehaus.jackson.map.ObjectMapper;
 import org.opendaylight.controller.usermanager.IUserManager;
+import org.opendaylight.controller.web.DaylightWebUtil;
 import org.opendaylight.controller.web.IDaylightWeb;
-import org.springframework.security.core.context.SecurityContextHolder;
 import org.springframework.stereotype.Controller;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestMethod;
@@ -29,6 +31,7 @@ import org.springframework.web.bind.annotation.ResponseBody;
 import org.opendaylight.controller.forwarding.staticrouting.IForwardingStaticRouting;
 import org.opendaylight.controller.forwarding.staticrouting.StaticRouteConfig;
 import org.opendaylight.controller.sal.authorization.UserLevel;
+import org.opendaylight.controller.sal.core.Config;
 import org.opendaylight.controller.sal.core.Name;
 import org.opendaylight.controller.sal.core.Node;
 import org.opendaylight.controller.sal.core.NodeConnector;
@@ -53,7 +56,6 @@ public class Devices implements IDaylightWeb {
     private final String WEB_NAME = "Devices";
     private final String WEB_ID = "devices";
     private final short WEB_ORDER = 1;
-    private final String containerName = GlobalConstants.DEFAULT.toString();
 
     public Devices() {
         ServiceHelper.registerGlobalService(IDaylightWeb.class, this, null);
@@ -81,8 +83,9 @@ public class Devices implements IDaylightWeb {
 
     @RequestMapping(value = "/nodesLearnt", method = RequestMethod.GET)
     @ResponseBody
-    public DevicesJsonBean getNodesLearnt() {
+    public DevicesJsonBean getNodesLearnt(HttpServletRequest request, @RequestParam(required = false) String container) {
         Gson gson = new Gson();
+        String containerName = DaylightWebUtil.getAuthorizedContainer(request, container, this);
         ISwitchManager switchManager = (ISwitchManager) ServiceHelper
                 .getInstance(ISwitchManager.class, containerName, this);
         List<Map<String, String>> nodeData = new ArrayList<Map<String, String>>();
@@ -94,14 +97,14 @@ public class Devices implements IDaylightWeb {
 
             nodeDatum.put("containerName", containerName);
             nodeDatum.put("nodeName", switchManager.getNodeDescription(node));
-            nodeDatum.put("nodeId", node.getNodeIDString());
+            nodeDatum.put("nodeId", node.toString());
             int tierNumber = (tier == null) ? TierHelper.unknownTierNumber
                     : tier.getValue();
             nodeDatum.put("tierName", TierHelper.getTierName(tierNumber)
                     + " (Tier-" + tierNumber + ")");
             nodeDatum.put("tier", tierNumber + "");
             SwitchConfig sc = switchManager.getSwitchConfig(device.getNode()
-                    .getNodeIDString());
+                    .toString());
             String modeStr = (sc != null) ? sc.getMode() : "0";
             nodeDatum.put("mode", modeStr);
 
@@ -110,23 +113,36 @@ public class Devices implements IDaylightWeb {
                     HexEncode.bytesToHexString(device.getDataLayerAddress()));
             StringBuffer sb1 = new StringBuffer();
             Set<NodeConnector> nodeConnectorSet = device.getNodeConnectors();
-            String nodeConnectorName;
-            String nodeConnectorNumberToStr;
             if (nodeConnectorSet != null && nodeConnectorSet.size() > 0) {
                 Map<Short, String> portList = new HashMap<Short, String>();
                 for (NodeConnector nodeConnector : nodeConnectorSet) {
-                    nodeConnectorNumberToStr = nodeConnector.getID().toString();
-                    Name ncName = ((Name) switchManager
+                    String nodeConnectorNumberToStr = nodeConnector.getID().toString();
+                    Name ncName = ((Name) switchManager.getNodeConnectorProp(
+                            nodeConnector, Name.NamePropName));
+                    Config portStatus = ((Config) switchManager
                             .getNodeConnectorProp(nodeConnector,
-                                    Name.NamePropName));
-                    nodeConnectorName = (ncName != null) ? ncName.getValue() : "";
+                                    Config.ConfigPropName));
+                    
+                    String nodeConnectorName = (ncName != null) ? ncName.getValue()
+                            : "";
+                    nodeConnectorName += " ("+nodeConnector.getID()+")";
+                    
+                    if (portStatus != null) {
+                        if (portStatus.getValue() == Config.ADMIN_UP) {
+                            nodeConnectorName = "<span style='color:green;'>"+nodeConnectorName+"</span>";
+                        } else if (portStatus.getValue() == Config.ADMIN_DOWN) {
+                            nodeConnectorName = "<span style='color:red;'>"+nodeConnectorName+"</span>";
+                        }
+                    }
+                    
                     portList.put(Short.parseShort(nodeConnectorNumberToStr),
                             nodeConnectorName);
                 }
-                Map<Short, String> sortedPortList = new TreeMap<Short, String>(
-                        portList);
+
+                Map<Short, String> sortedPortList = new TreeMap<Short, String>(portList);
+
                 for (Entry<Short, String> e : sortedPortList.entrySet()) {
-                    sb1.append(e.getValue() + "(" + e.getKey() + ")");
+                    sb1.append(e.getValue());
                     sb1.append("<br>");
                 }
             }
@@ -141,7 +157,8 @@ public class Devices implements IDaylightWeb {
         columnNames.add("Tier");
         columnNames.add("Mac Address");
         columnNames.add("Ports");
-        
+        columnNames.add("Port Status");
+
         result.setColumnNames(columnNames);
         return result;
     }
@@ -151,19 +168,21 @@ public class Devices implements IDaylightWeb {
     public List<String> getTiers() {
         return TierHelper.getTiers();
     }
-    
+
     @RequestMapping(value = "/nodesLearnt/update", method = RequestMethod.GET)
     @ResponseBody
     public StatusJsonBean updateLearntNode(
             @RequestParam("nodeName") String nodeName,
             @RequestParam("nodeId") String nodeId,
             @RequestParam("tier") String tier,
-            @RequestParam("operationMode") String operationMode) {
-       if (!authorize(UserLevel.NETWORKADMIN)) {
-               return unauthorizedMessage();
-       }
-       
-       StatusJsonBean resultBean = new StatusJsonBean();
+            @RequestParam("operationMode") String operationMode,
+            HttpServletRequest request, @RequestParam(required = false) String container) {
+        if (!authorize(UserLevel.NETWORKADMIN, request)) {
+            return unauthorizedMessage();
+        }
+
+        StatusJsonBean resultBean = new StatusJsonBean();
+        String containerName = DaylightWebUtil.getAuthorizedContainer(request, container, this);
         try {
             ISwitchManager switchManager = (ISwitchManager) ServiceHelper
                     .getInstance(ISwitchManager.class, containerName, this);
@@ -182,10 +201,15 @@ public class Devices implements IDaylightWeb {
 
     @RequestMapping(value = "/staticRoutes", method = RequestMethod.GET)
     @ResponseBody
-    public DevicesJsonBean getStaticRoutes() {
+    public DevicesJsonBean getStaticRoutes(HttpServletRequest request, @RequestParam(required = false) String container) {
         Gson gson = new Gson();
+        String containerName = DaylightWebUtil.getAuthorizedContainer(request, container, this);
         IForwardingStaticRouting staticRouting = (IForwardingStaticRouting) ServiceHelper
-                .getInstance(IForwardingStaticRouting.class, containerName, this);
+                .getInstance(IForwardingStaticRouting.class, containerName,
+                        this);
+        if (staticRouting == null) {
+            return null;
+        }
         List<Map<String, String>> staticRoutes = new ArrayList<Map<String, String>>();
         ConcurrentMap<String, StaticRouteConfig> routeConfigs = staticRouting
                 .getStaticRouteConfigs();
@@ -212,12 +236,14 @@ public class Devices implements IDaylightWeb {
     public StatusJsonBean addStaticRoute(
             @RequestParam("routeName") String routeName,
             @RequestParam("staticRoute") String staticRoute,
-            @RequestParam("nextHop") String nextHop) {
-       if (!authorize(UserLevel.NETWORKADMIN)) {
-               return unauthorizedMessage();
-       }
-       
+            @RequestParam("nextHop") String nextHop,
+            HttpServletRequest request, @RequestParam(required = false) String container) {
+        if (!authorize(UserLevel.NETWORKADMIN, request)) {
+            return unauthorizedMessage();
+        }
+
         StatusJsonBean result = new StatusJsonBean();
+        String containerName = DaylightWebUtil.getAuthorizedContainer(request, container, this);
         try {
             IForwardingStaticRouting staticRouting = (IForwardingStaticRouting) ServiceHelper
                     .getInstance(IForwardingStaticRouting.class, containerName,
@@ -244,12 +270,14 @@ public class Devices implements IDaylightWeb {
     @RequestMapping(value = "/staticRoute/delete", method = RequestMethod.GET)
     @ResponseBody
     public StatusJsonBean deleteStaticRoute(
-            @RequestParam("routesToDelete") String routesToDelete) {
-       if (!authorize(UserLevel.NETWORKADMIN)) {
-               return unauthorizedMessage();
-       }
-       
+            @RequestParam("routesToDelete") String routesToDelete,
+            HttpServletRequest request, @RequestParam(required = false) String container) {
+        if (!authorize(UserLevel.NETWORKADMIN, request)) {
+            return unauthorizedMessage();
+        }
+
         StatusJsonBean resultBean = new StatusJsonBean();
+        String containerName = DaylightWebUtil.getAuthorizedContainer(request, container, this);
         try {
             IForwardingStaticRouting staticRouting = (IForwardingStaticRouting) ServiceHelper
                     .getInstance(IForwardingStaticRouting.class, containerName,
@@ -278,9 +306,10 @@ public class Devices implements IDaylightWeb {
 
     @RequestMapping(value = "/subnets", method = RequestMethod.GET)
     @ResponseBody
-    public DevicesJsonBean getSubnetGateways() {
+    public DevicesJsonBean getSubnetGateways(HttpServletRequest request, @RequestParam(required = false) String container) {
         Gson gson = new Gson();
         List<Map<String, String>> subnets = new ArrayList<Map<String, String>>();
+        String containerName = DaylightWebUtil.getAuthorizedContainer(request, container, this);
         ISwitchManager switchManager = (ISwitchManager) ServiceHelper
                 .getInstance(ISwitchManager.class, containerName, this);
         for (SubnetConfig conf : switchManager.getSubnetsConfigList()) {
@@ -295,17 +324,19 @@ public class Devices implements IDaylightWeb {
         result.setNodeData(subnets);
         return result;
     }
-    
+
     @RequestMapping(value = "/subnetGateway/add", method = RequestMethod.GET)
     @ResponseBody
     public StatusJsonBean addSubnetGateways(
             @RequestParam("gatewayName") String gatewayName,
-            @RequestParam("gatewayIPAddress") String gatewayIPAddress) {
-       if (!authorize(UserLevel.NETWORKADMIN)) {
-               return unauthorizedMessage();
-       }
+            @RequestParam("gatewayIPAddress") String gatewayIPAddress,
+            HttpServletRequest request, @RequestParam(required = false) String container) {
+        if (!authorize(UserLevel.NETWORKADMIN, request)) {
+            return unauthorizedMessage();
+        }
 
         StatusJsonBean resultBean = new StatusJsonBean();
+        String containerName = DaylightWebUtil.getAuthorizedContainer(request, container, this);
         try {
             ISwitchManager switchManager = (ISwitchManager) ServiceHelper
                     .getInstance(ISwitchManager.class, containerName, this);
@@ -329,12 +360,14 @@ public class Devices implements IDaylightWeb {
     @RequestMapping(value = "/subnetGateway/delete", method = RequestMethod.GET)
     @ResponseBody
     public StatusJsonBean deleteSubnetGateways(
-            @RequestParam("gatewaysToDelete") String gatewaysToDelete) {
-       if (!authorize(UserLevel.NETWORKADMIN)) {
-               return unauthorizedMessage();
-       }
-       
+            @RequestParam("gatewaysToDelete") String gatewaysToDelete,
+            HttpServletRequest request, @RequestParam(required = false) String container) {
+        if (!authorize(UserLevel.NETWORKADMIN, request)) {
+            return unauthorizedMessage();
+        }
+
         StatusJsonBean resultBean = new StatusJsonBean();
+        String containerName = DaylightWebUtil.getAuthorizedContainer(request, container, this);
         try {
             ISwitchManager switchManager = (ISwitchManager) ServiceHelper
                     .getInstance(ISwitchManager.class, containerName, this);
@@ -361,12 +394,14 @@ public class Devices implements IDaylightWeb {
     public StatusJsonBean addSubnetGatewayPort(
             @RequestParam("portsName") String portsName,
             @RequestParam("ports") String ports,
-            @RequestParam("nodeId") String nodeId) {
-       if (!authorize(UserLevel.NETWORKADMIN)) {
-               return unauthorizedMessage();
-       }
-       
+            @RequestParam("nodeId") String nodeId,
+            HttpServletRequest request, @RequestParam(required = false) String container) {
+        if (!authorize(UserLevel.NETWORKADMIN, request)) {
+            return unauthorizedMessage();
+        }
+
         StatusJsonBean resultBean = new StatusJsonBean();
+        String containerName = DaylightWebUtil.getAuthorizedContainer(request, container, this);
         try {
             ISwitchManager switchManager = (ISwitchManager) ServiceHelper
                     .getInstance(ISwitchManager.class, containerName, this);
@@ -392,12 +427,14 @@ public class Devices implements IDaylightWeb {
     @ResponseBody
     public StatusJsonBean deleteSubnetGatewayPort(
             @RequestParam("gatewayName") String gatewayName,
-            @RequestParam("nodePort") String nodePort) {
-       if (!authorize(UserLevel.NETWORKADMIN)) {
-               return unauthorizedMessage();
-       }
-       
+            @RequestParam("nodePort") String nodePort,
+            HttpServletRequest request, @RequestParam(required = false) String container) {
+        if (!authorize(UserLevel.NETWORKADMIN, request)) {
+            return unauthorizedMessage();
+        }
+
         StatusJsonBean resultBean = new StatusJsonBean();
+        String containerName = DaylightWebUtil.getAuthorizedContainer(request, container, this);
         try {
             ISwitchManager switchManager = (ISwitchManager) ServiceHelper
                     .getInstance(ISwitchManager.class, containerName, this);
@@ -421,9 +458,10 @@ public class Devices implements IDaylightWeb {
 
     @RequestMapping(value = "/spanPorts", method = RequestMethod.GET)
     @ResponseBody
-    public DevicesJsonBean getSpanPorts() {
+    public DevicesJsonBean getSpanPorts(HttpServletRequest request, @RequestParam(required = false) String container) {
         Gson gson = new Gson();
         List<String> spanConfigs_json = new ArrayList<String>();
+        String containerName = DaylightWebUtil.getAuthorizedContainer(request, container, this);
         ISwitchManager switchManager = (ISwitchManager) ServiceHelper
                 .getInstance(ISwitchManager.class, containerName, this);
         for (SpanConfig conf : switchManager.getSpanConfigList()) {
@@ -441,7 +479,7 @@ public class Devices implements IDaylightWeb {
                     config.put(name, config_data.get(name));
                     // Add switch name value (non-configuration field)
                     config.put("nodeName",
-                            getNodeDesc(config_data.get("nodeId")));
+                            getNodeDesc(config_data.get("nodeId"), containerName));
                 }
                 config.put("json", config_json);
                 spanConfigs.add(config);
@@ -457,7 +495,8 @@ public class Devices implements IDaylightWeb {
 
     @RequestMapping(value = "/nodeports")
     @ResponseBody
-    public Map<String, Object> getNodePorts() {
+    public Map<String, Object> getNodePorts(HttpServletRequest request, @RequestParam(required = false) String container) {
+        String containerName = DaylightWebUtil.getAuthorizedContainer(request, container, this);
         ISwitchManager switchManager = (ISwitchManager) ServiceHelper
                 .getInstance(ISwitchManager.class, containerName, this);
         if (switchManager == null)
@@ -487,14 +526,17 @@ public class Devices implements IDaylightWeb {
 
     @RequestMapping(value = "/spanPorts/add", method = RequestMethod.GET)
     @ResponseBody
-    public StatusJsonBean addSpanPort(@RequestParam("jsonData") String jsonData) {
-       if (!authorize(UserLevel.NETWORKADMIN)) {
-               return unauthorizedMessage();
-       }
-       
+    public StatusJsonBean addSpanPort(
+            @RequestParam("jsonData") String jsonData,
+            HttpServletRequest request, @RequestParam(required = false) String container) {
+        if (!authorize(UserLevel.NETWORKADMIN, request)) {
+            return unauthorizedMessage();
+        }
+
         StatusJsonBean resultBean = new StatusJsonBean();
         try {
             Gson gson = new Gson();
+            String containerName = DaylightWebUtil.getAuthorizedContainer(request, container, this);
             ISwitchManager switchManager = (ISwitchManager) ServiceHelper
                     .getInstance(ISwitchManager.class, containerName, this);
             SpanConfig cfgObject = gson.fromJson(jsonData, SpanConfig.class);
@@ -517,14 +559,16 @@ public class Devices implements IDaylightWeb {
     @RequestMapping(value = "/spanPorts/delete", method = RequestMethod.GET)
     @ResponseBody
     public StatusJsonBean deleteSpanPorts(
-            @RequestParam("spanPortsToDelete") String spanPortsToDelete) {
-       if (!authorize(UserLevel.NETWORKADMIN)) {
-               return unauthorizedMessage();
-       }
-       
+            @RequestParam("spanPortsToDelete") String spanPortsToDelete,
+            HttpServletRequest request, @RequestParam(required = false) String container) {
+        if (!authorize(UserLevel.NETWORKADMIN, request)) {
+            return unauthorizedMessage();
+        }
+
         StatusJsonBean resultBean = new StatusJsonBean();
         try {
             Gson gson = new Gson();
+            String containerName = DaylightWebUtil.getAuthorizedContainer(request, container, this);
             ISwitchManager switchManager = (ISwitchManager) ServiceHelper
                     .getInstance(ISwitchManager.class, containerName, this);
             String[] spans = spanPortsToDelete.split("###");
@@ -550,44 +594,61 @@ public class Devices implements IDaylightWeb {
         return resultBean;
     }
 
-    private String getNodeDesc(String nodeId) {
+    private String getNodeDesc(String nodeId, String containerName) {
         ISwitchManager switchManager = (ISwitchManager) ServiceHelper
                 .getInstance(ISwitchManager.class, containerName, this);
         String description = "";
         if (switchManager != null) {
-               description = switchManager
-                               .getNodeDescription(Node.fromString(nodeId));
+            description = switchManager.getNodeDescription(Node
+                    .fromString(nodeId));
         }
-        return (description.isEmpty() || description.equalsIgnoreCase("none"))?
-                       nodeId : description;
+        return (description.isEmpty() || description.equalsIgnoreCase("none")) ? nodeId
+                : description;
     }
 
-    
     /**
      * Is the operation permitted for the given level
      * 
      * @param level
      */
-    private boolean authorize(UserLevel level) {
-       IUserManager userManager = (IUserManager) ServiceHelper
+    private boolean authorize(UserLevel level, HttpServletRequest request) {
+        IUserManager userManager = (IUserManager) ServiceHelper
                 .getGlobalInstance(IUserManager.class, this);
         if (userManager == null) {
-               return false;
+            return false;
         }
-        
-        String username = SecurityContextHolder.getContext().getAuthentication().getName();
+
+        String username = request.getUserPrincipal().getName();
         UserLevel userLevel = userManager.getUserLevel(username);
         if (userLevel.toNumber() <= level.toNumber()) {
-               return true;
+            return true;
         }
         return false;
     }
-    
+
     private StatusJsonBean unauthorizedMessage() {
-       StatusJsonBean message = new StatusJsonBean();
-       message.setStatus(false);
-       message.setMessage("Operation not authorized");
-       return message;
+        StatusJsonBean message = new StatusJsonBean();
+        message.setStatus(false);
+        message.setMessage("Operation not authorized");
+        return message;
+    }
+
+    @RequestMapping(value = "login")
+    public String login(final HttpServletRequest request,
+            final HttpServletResponse response) {
+        // response.setHeader("X-Page-Location", "/login");
+        /*
+         * IUserManager userManager = (IUserManager) ServiceHelper
+         * .getGlobalInstance(IUserManager.class, this); if (userManager ==
+         * null) { return "User Manager is not available"; }
+         * 
+         * String username = request.getUserPrincipal().getName();
+         * 
+         * 
+         * model.addAttribute("username", username); model.addAttribute("role",
+         * userManager.getUserLevel(username).toNumber());
+         */
+        return "forward:" + "/";
     }
 
 }