Add support Cisco N7K Switch at rest Cisco driver

Change-Id: Iac4ccd28763be0e4591f8b782fa9a60775d8c2a3
diff --git a/drivers/cisco/rest/src/main/java/org/onosproject/drivers/cisco/rest/ControllerConfigCiscoImpl.java b/drivers/cisco/rest/src/main/java/org/onosproject/drivers/cisco/rest/ControllerConfigCiscoImpl.java
index 43dbe09..f62000e 100644
--- a/drivers/cisco/rest/src/main/java/org/onosproject/drivers/cisco/rest/ControllerConfigCiscoImpl.java
+++ b/drivers/cisco/rest/src/main/java/org/onosproject/drivers/cisco/rest/ControllerConfigCiscoImpl.java
@@ -48,9 +48,11 @@
     private static final String SW1_CMD = "switch 1";
     private static final String DELETE_OF_CONFIG = "no switch 1";
     private static final String PROTO_VER_CMD = "protocol-version 1.3";
-    private static final String PIPELINE_CMD = "pipeline 201";
+    private static final String N9K_PIPELINE_CMD = "pipeline 201";
+    private static final String N7K_PIPELINE_CMD = "pipeline 301";
     private static final String OF_CONTROLLER_CONF_CMD = "controller ipv4 %s port %d vrf %s security none";
     private static final String NO_SHUTDOWN_CMD = "no shutdown";
+    private static final String SHOW_VERSION = "show version";
     private static final String COPY_RUNNING_CONFIG = "copy running-config startup-config";
 
     @Override
@@ -97,7 +99,12 @@
         cmds.add(DELETE_OF_CONFIG);
         cmds.add(SW1_CMD);
         cmds.add(PROTO_VER_CMD);
-        cmds.add(PIPELINE_CMD);
+        if (checkSwitchN7K(handler)) {
+            cmds.add(N7K_PIPELINE_CMD);
+            log.info("This is N7K Switch");
+        }
+        cmds.add(N9K_PIPELINE_CMD);
+        log.info("This is N9K Switch");
 
         // can configure up to eight controllers
         controllers.stream().limit(8).forEach(c -> cmds
@@ -168,4 +175,25 @@
     }
 
 
+    public boolean checkSwitchN7K(DriverHandler handler) {
+
+        String response = NxApiRequest.postClis(handler, SHOW_VERSION);
+
+        String msg = "";
+
+        try {
+            ObjectMapper om = new ObjectMapper();
+            JsonNode json = om.readTree(response);
+            JsonNode res = json.get("result");
+            msg = res.findValue("msg").asText();
+        } catch (IOException e) {
+            log.error("Exception thrown", e);
+            return false;
+        }
+
+        if (msg.contains("Nexus7700")) {
+            return true;
+        }
+        return false;
+    }
 }
diff --git a/drivers/cisco/rest/src/main/java/org/onosproject/drivers/cisco/rest/NxApiRequest.java b/drivers/cisco/rest/src/main/java/org/onosproject/drivers/cisco/rest/NxApiRequest.java
index 07509c9..201ff02 100644
--- a/drivers/cisco/rest/src/main/java/org/onosproject/drivers/cisco/rest/NxApiRequest.java
+++ b/drivers/cisco/rest/src/main/java/org/onosproject/drivers/cisco/rest/NxApiRequest.java
@@ -139,6 +139,20 @@
         String request = generate(command, type);
         return post(controller, deviceId, request);
     }
+    /**
+     * Sends NX-API request message to the device.
+     * @param handler device's driver handler
+     * @param cmd NX-API command string
+     * @return the response string
+     */
+    static String postClis(DriverHandler handler, String cmd) {
+        RestSBController controller = checkNotNull(handler.get(RestSBController.class));
+        DeviceId deviceId = handler.data().deviceId();
+
+        String request = generate(cmd, CommandType.CLI);
+        InputStream stream = new ByteArrayInputStream(request.getBytes(StandardCharsets.UTF_8));
+        return controller.post(deviceId, API_URI, stream, MediaType.valueOf(APP_JSON_RPC), String.class);
+    }
 
     /**
      * Sends NX-API request message to the device.