* ============LICENSE_START=======================================================
  * ONAP : APPC
  * ================================================================================
- * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * Copyright (C) 2017-2018 AT&T Intellectual Property. All rights reserved.
  * =============================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
  * See the License for the specific language governing permissions and
  * limitations under the License.
  *
- * ECOMP is a trademark and service mark of AT&T Intellectual Property.
  * ============LICENSE_END=========================================================
  */
 
 
 public class ConfigComponentAdaptor implements SvcLogicAdaptor {
 
-    private static final EELFLogger log = EELFManager.getInstance().getLogger(ConfigComponentAdaptor.class);
-
-    private static final String ACTION_PARAM = "action";
-    private static final String ACTION_PREPARE = "prepare";
-    private static final String ACTION_ACTIVATE = "activate";
-
-    private static final String KEY_PUT = "put";
-    private static final String KEY_GET = "get";
-    private static final String KEY_CLI = "cli";
-    private static final String KEY_ESCAPE_SQL = "escapeSql";
-    private static final String KEY_XML_DOWNLOAD = "xml-download";
-    private static final String KEY_XML_GET_RUNNING_CONF = "xml-getrunningconfig";
-    private static final String KEY_DOWNLOAD_CLI_CONFIG = "DownloadCliConfig";
-    private static final String KEY_GET_CLI_RUNNING_CONFIG = "GetCliRunningConfig";
-
-    private static final String OPERATION_CREATE = "create";
-    private static final String OPERATION_CHANGE = "change";
-    private static final String OPERATION_SCALE = "scale";
-
-    static final String USERNAME_PARAM = "User_name";
-    static final String PASSWORD_PARAM = "Password";
-    static final String HOST_IP_PARAM = "Host_ip_address";
-    static final String PORT_NUMBER_PARAM = "Port_number";
-    static final String GET_CONFIG_TEMPLATE_PARAM = "Get_config_template";
-
-    private static final String CLI_OUTPUT_PARAM = "cliOutput";
-    private static final String REQUEST_ID_PARAM = "request-id";
-    private static final String CALLBACK_URL_PARAM = "callback-url";
-    private static final String EQUIPMENT_NAME_PARAM = "equipment-name";
-
-    private static final String XML_BUILDING_ERR_STR = "Error building the XML request: ";
-    private static final String TEMPLATE_ERR_STR = "Template error: Matching \"}\" not found";
-    private static final String SSH_JCRAFT_WRAPPER_ERR_STR = "Exception occurred while using sshJcraftWrapper";
-    private static final String PROMPT_STR = "]]>]]>";
-    private static final String RESPONSE_STR = "response=\n{}\n";
-
-    private static final String SERVICE_INSTANCE_ID_ATTR = "service-data.service-information.service-instance-id";
-    private static final String SVC_REQUEST_ID_ATTR = "service-data.appc-request-header.svc-request-id";
-
-    private static final String RPC_REPLY_END_TAG = "</rpc-reply>";
-    private static final String BASE_REQUEST = "BASE";
-
-    private String configUrl;
-    private String configUser;
-    private String configPassword;
-    private String auditUrl;
-    private String auditUser;
-    private String auditPassword;
-    private String configCallbackUrl;
-    private String auditCallbackUrl;
-
-    public ConfigComponentAdaptor(Properties props) {
-        if (props != null) {
-            configUrl = props.getProperty("configComponent.url", "");
-            configUser = props.getProperty("configComponent.user", "");
-            configPassword = props.getProperty("configComponent.passwd", "");
-            auditUrl = props.getProperty("auditComponent.url", "");
-            auditUser = props.getProperty("auditComponent.user", "");
-            auditPassword = props.getProperty("auditComponent.passwd", "");
-            configCallbackUrl = props.getProperty("service-configuration-notification-url", "");
-            auditCallbackUrl = props.getProperty("audit-configuration-notification-url", "");
-        }
+private static final EELFLogger log = EELFManager.getInstance().getLogger(ConfigComponentAdaptor.class);
+DebugLog debugLog = new DebugLog();
+private String configUrl = null;
+private String configUser = null;
+private String configPassword = null;
+private String auditUrl = null;
+private String auditUser = null;
+private String auditPassword = null;
+private String configCallbackUrl = null;
+private String auditCallbackUrl = null;
+
+public ConfigComponentAdaptor(Properties props) {
+    if (props != null) {
+        configUrl = props.getProperty("configComponent.url", "");
+        configUser = props.getProperty("configComponent.user", "");
+        configPassword = props.getProperty("configComponent.passwd", "");
+        auditUrl = props.getProperty("auditComponent.url", "");
+        auditUser = props.getProperty("auditComponent.user", "");
+        auditPassword = props.getProperty("auditComponent.passwd", "");
+        configCallbackUrl = props.getProperty("service-configuration-notification-url", "");
+        auditCallbackUrl = props.getProperty("audit-configuration-notification-url", "");
+    } else {
+        configUrl = "";
+        configUser = "";
+        configPassword = "";
+        auditUrl = "";
+        auditUser = "";
+        auditPassword = "";
+        configCallbackUrl = "";
+        auditCallbackUrl = "";
     }
+}
 
-    @Override
-    public ConfigStatus configure(String key, Map<String, String> parameters, SvcLogicContext ctx) {
-        HttpResponse r = new HttpResponse();
-        r.code = 200;
-        log.debug("ConfigComponentAdaptor.configure - key = " + key);
-        log.debug("key = {}", key);
-        log.debug("Parameters:");
-        for (Entry<String, String> paramEntrySet : parameters.entrySet()) {
-            log.debug("    {} = {}", paramEntrySet.getKey(), paramEntrySet.getValue());
-        }
-
-        String parmval = parameters.get("config-component-configUrl");
-        if (!nullOrEmpty(parmval)) {
-            log.debug("Overwriting URL with {}", parmval);
-            configUrl = parmval;
-        }
+@Override
+public ConfigStatus configure(String key, Map<String, String> parameters, SvcLogicContext ctx) {
+    String fnName = "ConfigComponentAdaptor.configure";
+    HttpResponse r = new HttpResponse();
+    r.code = 200;
+    log.debug("ConfigComponentAdaptor.configure - key = " + key);
+    debugLog.printRTAriDebug(fnName, "key = " + key);
+    log.debug("Parameters:");
+    debugLog.printRTAriDebug(fnName, "Parameters:");
+    for (String parmName : parameters.keySet()) {
+        log.debug("        " + parmName + " = " + parameters.get(parmName));
+        debugLog.printRTAriDebug(fnName, "        " + parmName + " = " + parameters.get(parmName));
+    }
 
-        parmval = parameters.get("config-component-configPassword");
-        if (!nullOrEmpty(parmval)) {
-            log.debug("Overwriting configPassword with {}", parmval);
-            configPassword = parmval;
-        }
+    String parmval = parameters.get("config-component-configUrl");
+    if ((parmval != null) && (parmval.length() > 0)) {
+        log.debug("Overwriting URL with " + parmval);
+        configUrl = parmval;
+    }
 
-        parmval = parameters.get("config-component-configUser");
-        if (!nullOrEmpty(parmval)) {
-            log.debug("Overwriting configUser id with {}", parmval);
-            configUser = parmval;
-        }
+    parmval = parameters.get("config-component-configPassword");
+    if ((parmval != null) && (parmval.length() > 0)) {
+        log.debug("Overwriting configPassword with " + parmval);
+        configPassword = parmval;
+    }
 
-        String action = parameters.get(ACTION_PARAM);
+    parmval = parameters.get("config-component-configUser");
+    if ((parmval != null) && (parmval.length() > 0)) {
+        log.debug("Overwriting configUser id with " + parmval);
+        configUser = parmval;
+    }
 
-        String chg = ctx.getAttribute(
-            "service-data.vnf-config-parameters-list.vnf-config-parameters[0].update-configuration[0].block-key-name");
-        if (chg != null && areEqual(action, ACTION_PREPARE)) {
-            return prepare(ctx, "CHANGE", OPERATION_CHANGE);
-        }
-        if (chg != null && areEqual(action, ACTION_ACTIVATE)) {
-            return activate(ctx, true);
-        }
+    String action = parameters.get("action");
 
-        String scale = ctx.getAttribute(
-            "service-data.vnf-config-parameters-list.vnf-config-parameters[0].scale-configuration[0].network-type");
-        if (scale != null && areEqual(action, ACTION_PREPARE)) {
-            return prepare(ctx, "CHANGE", OPERATION_SCALE);
-        }
-        if (scale != null && areEqual(action, ACTION_ACTIVATE)) {
-            return activate(ctx, true);
-        }
-
-        if (areEqual(action, ACTION_PREPARE)) {
-            return prepare(ctx, BASE_REQUEST, OPERATION_CREATE);
-        }
-        if (areEqual(action, ACTION_ACTIVATE)) {
-            return activate(ctx, false);
-        }
+    String chg = ctx.getAttribute(
+        "service-data.vnf-config-parameters-list.vnf-config-parameters[0].update-configuration[0].block-key-name");
+    if (chg != null && "prepare".equalsIgnoreCase(action)) {
+        return prepare(ctx, "CHANGE", "change");
+    }
+    if (chg != null && "activate".equalsIgnoreCase(action)) {
+        return activate(ctx, true);
+    }
 
-        if ("backup".equalsIgnoreCase(action)) {
-            return prepare(ctx, "BACKUP", "backup");
-        }
-        if ("restorebackup".equalsIgnoreCase(action)) {
-            return prepare(ctx, "RESTOREBACKUP", "restorebackup");
-        }
-        if ("deletebackup".equalsIgnoreCase(action)) {
-            return prepare(ctx, "DELETEBACKUP", "deletebackup");
-        }
-        if ("audit".equalsIgnoreCase(action)) {
-            return audit(ctx, "FULL");
-        }
-        if ("getrunningconfig".equalsIgnoreCase(action)) {
-            return audit(ctx, "RUNNING");
-        }
+    String scale = ctx.getAttribute(
+        "service-data.vnf-config-parameters-list.vnf-config-parameters[0].scale-configuration[0].network-type");
+    if (scale != null && "prepare".equalsIgnoreCase(action)) {
+        return prepare(ctx, "CHANGE", "scale");
+    }
+    if (scale != null && "activate".equalsIgnoreCase(action)) {
+        return activate(ctx, true);
+    }
 
-        if ((key.equals(KEY_PUT)) || (key.equals(KEY_GET))) {
-            String loginId = parameters.get("loginId");
-            String host = parameters.get("host");
-            String password = parameters.get("password");
-            password = EncryptionTool.getInstance().decrypt(password);
-            String fullPathFileName = parameters.get("fullPathFileName");
+    if ("prepare".equalsIgnoreCase(action)) {
+        return prepare(ctx, "BASE", "create");
+    }
+    if ("activate".equalsIgnoreCase(action)) {
+        return activate(ctx, false);
+    }
 
-            SshJcraftWrapper sshJcraftWrapper = new SshJcraftWrapper();
-            log.debug("SCP: SshJcraftWrapper has been instantiated");
+    if ("backup".equalsIgnoreCase(action)) {
+        return prepare(ctx, "BACKUP", "backup");
+    }
+    if ("restorebackup".equalsIgnoreCase(action)) {
+        return prepare(ctx, "RESTOREBACKUP", "restorebackup");
+    }
+    if ("deletebackup".equalsIgnoreCase(action)) {
+        return prepare(ctx, "DELETEBACKUP", "deletebackup");
+    }
+    if ("audit".equalsIgnoreCase(action)) {
+        return audit(ctx, "FULL");
+    }
+    if ("getrunningconfig".equalsIgnoreCase(action)) {
+        return audit(ctx, "RUNNING");
+    }
 
-            try {
-                if (key.equals(KEY_PUT)) {
-                    String data = parameters.get("data");
-                    log.debug("Command is for put: Length of data is: {}", data.length());
+    if ((key.equals("put")) || (key.equals("get"))) {
+        String loginId = parameters.get("loginId");
+        String host = parameters.get("host");
+        String password = parameters.get("password");
+        password = EncryptionTool.getInstance().decrypt(password);
+        String fullPathFileName = parameters.get("fullPathFileName");
+        String data = null;
+
+        SshJcraftWrapper sshJcraftWrapper = new SshJcraftWrapper();
+        log.debug("SCP: SshJcraftWrapper has been instantiated");
+        debugLog.printRTAriDebug(fnName, "SCP: SshJcraftWrapper has been instantiated");
+        try {
+            if (key.equals("put")) {
+                data = parameters.get("data");
+                if (data != null) {
+                    debugLog.printRTAriDebug(fnName, "Command is for put: Length of data is: " + data.length());
                     InputStream is = new ByteArrayInputStream(data.getBytes());
-                    log.debug("SCP: Doing a put: fullPathFileName={}", fullPathFileName);
+                    log.debug("SCP: Doing a put: fullPathFileName=" + fullPathFileName);
+                    debugLog.printRTAriDebug(fnName, "SCP: Doing a put: fullPathFileName=" + fullPathFileName);
                     sshJcraftWrapper.put(is, fullPathFileName, host, loginId, password);
-                    trySleepFor(1000L * 180);
-                } else {  // Must be a get
-                    log.debug("SCP: Doing a get: fullPathFileName={}", fullPathFileName);
-                    String response = sshJcraftWrapper.get(fullPathFileName, host, loginId, password);
-                    log.debug("Got the response and putting into the ctx object");
-                    ctx.setAttribute("fileContents", response);
-                    log.debug("SCP: Closing the SFTP connection");
+                    try {
+                        debugLog.printRTAriDebug(fnName, "Sleeping for 180 seconds....");
+                        Thread.sleep(1000 * 180);
+                        debugLog.printRTAriDebug(fnName, "Woke up....");
+                    } catch (java.lang.InterruptedException ee) {
+                        boolean ignore = true;
+                    }
+                } else {
+                    r.code = HttpURLConnection.HTTP_INTERNAL_ERROR;
+                    log.debug(fnName + " Command is for put: data is null");
                 }
-                return setResponseStatus(ctx, r);
-            } catch (IOException e) {
-                log.error(SSH_JCRAFT_WRAPPER_ERR_STR, e);
-                r.code = HttpURLConnection.HTTP_INTERNAL_ERROR;
-                r.message = e.getMessage();
-                return setResponseStatus(ctx, r);
-            }
-        }
-        if (key.equals(KEY_CLI)) {
-            String loginId = parameters.get("loginId");
-            String host = parameters.get("host");
-            String password = parameters.get("password");
-            password = EncryptionTool.getInstance().decrypt(password);
-            String portNumber = parameters.get("portNumber");
-            SshJcraftWrapper sshJcraftWrapper = new SshJcraftWrapper();
-            try {
-                log.debug("CLI: Attempting to login: host={} loginId={} password={} portNumber={}", host, loginId,
-                    password, portNumber);
-                sshJcraftWrapper.connect(host, loginId, password); //what about portNum?
-
-                log.debug("Sending 'sdc'");
-                sshJcraftWrapper.send("sdc", ":");
-                log.debug("Sending 1");
-                sshJcraftWrapper.send("1", ":");
-                log.debug("Sending 1, the second time");
-                sshJcraftWrapper.send("1", "#");
-                log.debug("Sending paging-options disable");
-                sshJcraftWrapper.send("paging-options disable", "#");
-                log.debug("Sending show config");
-                String response = sshJcraftWrapper.send("show config", "#");
-
-                log.debug("response is now:'{}'", response);
-                log.debug("Populating the ctx object with the response");
-                ctx.setAttribute(CLI_OUTPUT_PARAM, response);
-                sshJcraftWrapper.closeConnection();
-                r.code = 200;
-                return setResponseStatus(ctx, r);
-            } catch (IOException e) {
-                log.error(SSH_JCRAFT_WRAPPER_ERR_STR, e);
-                sshJcraftWrapper.closeConnection();
-                r.code = HttpURLConnection.HTTP_INTERNAL_ERROR;
-                r.message = e.getMessage();
-                return setResponseStatus(ctx, r);
+            } else     // Must be a get
+            {
+                log.debug("SCP: Doing a get: fullPathFileName=" + fullPathFileName);
+                debugLog.printRTAriDebug(fnName, "SCP: Doing a get: fullPathFileName=" + fullPathFileName);
+                String response = sshJcraftWrapper.get(fullPathFileName, host, loginId, password);
+                debugLog.printRTAriDebug(fnName, "Got the response and putting into the ctx object");
+                ctx.setAttribute("fileContents", response);
+                log.debug("SCP: Closing the SFTP connection");
             }
+            sshJcraftWrapper = null;
+            return (setResponseStatus(ctx, r));
+        } catch (IOException e) {
+            DebugLog.printAriDebug(fnName, "Caught a IOException e=" + e);
+            log.debug(fnName + " : Caught a IOException e=" + e);
+            r.code = HttpURLConnection.HTTP_INTERNAL_ERROR;
+            r.message = e.getMessage();
+            sshJcraftWrapper = null;
+            return (setResponseStatus(ctx, r));
         }
-        if (key.equals(KEY_ESCAPE_SQL)) {
-            String data = parameters.get("artifactContents");
-            log.debug("ConfigComponentAdaptor.configure - escapeSql");
-            data = escapeMySql(data);
-            ctx.setAttribute("escapedData", data);
-            return setResponseStatus(ctx, r);
+    }
+    if (key.equals("cli")) {
+        String loginId = parameters.get("loginId");
+        String host = parameters.get("host");
+        String password = parameters.get("password");
+        password = EncryptionTool.getInstance().decrypt(password);
+        String cliCommand = parameters.get("cli");
+        String portNumber = parameters.get("portNumber");
+        SshJcraftWrapper sshJcraftWrapper = new SshJcraftWrapper();
+        try {
+            log.debug("CLI: Attempting to login: host=" + host + " loginId=" + loginId +
+                " portNumber=" + portNumber);
+            debugLog.printRTAriDebug(fnName, "CLI: Attempting to login: host=" + host + " loginId=" + loginId +
+                " portNumber=" + portNumber);
+            sshJcraftWrapper.connect(host, loginId, password, Integer.parseInt(portNumber));
+
+            DebugLog.printAriDebug(fnName, "Sending 'sdc'");
+            String response = sshJcraftWrapper.send("sdc", ":");
+            DebugLog.printAriDebug(fnName, "Sending 1");
+            response = sshJcraftWrapper.send("1", ":");
+            DebugLog.printAriDebug(fnName, "Sending 1, the second time");
+            response = sshJcraftWrapper.send("1", "#");
+            DebugLog.printAriDebug(fnName, "Sending paging-options disable");
+            response = sshJcraftWrapper.send("paging-options disable", "#");
+            DebugLog.printAriDebug(fnName, "Sending show config");
+            response = sshJcraftWrapper.send("show config", "#");
+
+            DebugLog.printAriDebug(fnName, "response is now:'" + response + "'");
+            DebugLog.printAriDebug(fnName, "Populating the ctx object with the response");
+            ctx.setAttribute("cliOutput", response);
+            sshJcraftWrapper.closeConnection();
+            r.code = 200;
+            sshJcraftWrapper = null;
+            return (setResponseStatus(ctx, r));
+        } catch (IOException e) {
+            DebugLog.printAriDebug(fnName, "Caught a IOException e=" + e);
+            log.debug(fnName + " : Caught a IOException e=" + e);
+            sshJcraftWrapper.closeConnection();
+            r.code = HttpURLConnection.HTTP_INTERNAL_ERROR;
+            r.message = e.getMessage();
+            sshJcraftWrapper = null;
+            DebugLog.printAriDebug(fnName, "Returning error message");
+            return (setResponseStatus(ctx, r));
         }
-        if (key.equals(KEY_GET_CLI_RUNNING_CONFIG)) {
-            log.debug("key was: " + KEY_GET_CLI_RUNNING_CONFIG);
-            String username = parameters.get(USERNAME_PARAM);
-            String hostIpAddress = parameters.get(HOST_IP_PARAM);
-            String password = parameters.get(PASSWORD_PARAM);
-            password = EncryptionTool.getInstance().decrypt(password);
-            String portNumber = parameters.get(PORT_NUMBER_PARAM);
-            String getConfigTemplate = parameters.get(GET_CONFIG_TEMPLATE_PARAM);
-            SshJcraftWrapper sshJcraftWrapper = new SshJcraftWrapper();
-            log.debug("GetCliRunningConfig: sshJcraftWrapper was instantiated");
+    }
+    if (key.equals("escapeSql")) {
+        String data = parameters.get("artifactContents");
+        log.debug("ConfigComponentAdaptor.configure - escapeSql");
+        data = escapeMySql(data);
+        ctx.setAttribute("escapedData", data);
+        return (setResponseStatus(ctx, r));
+    }
+    if (key.equals("GetCliRunningConfig")) {
+        debugLog.printRTAriDebug(fnName, "key was: GetCliRunningConfig: ");
+        log.debug("key was: GetCliRunningConfig: ");
+        String User_name = parameters.get("User_name");
+        String Host_ip_address = parameters.get("Host_ip_address");
+        String Password = parameters.get("Password");
+        Password = EncryptionTool.getInstance().decrypt(Password);
+        String Port_number = parameters.get("Port_number");
+        String Get_config_template = parameters.get("Get_config_template");
+        SshJcraftWrapper sshJcraftWrapper = new SshJcraftWrapper();
+        log.debug("GetCliRunningConfig: sshJcraftWrapper was instantiated");
+        debugLog.printRTAriDebug(fnName, "GetCliRunningConfig: sshJcraftWrapper was instantiated");
+        try {
+            DebugLog.printAriDebug(fnName, "GetCliRunningConfig: User_name=" + User_name +
+                " Host_ip_address=" + Host_ip_address + " Port_number="
+                + Port_number);
+            log.debug("GetCliRunningConfig: Attempting to login: Host_ip_address=" + Host_ip_address +
+                " User_name=" + User_name + " Port_number=" + Port_number);
+            StringBuffer sb = new StringBuffer();
+            String response = "";
+            String CliResponse = "";
+            boolean showConfigFlag = false;
+            sshJcraftWrapper.connect(Host_ip_address,
+                User_name,
+                Password,
+                "",
+                30000,
+                Integer.parseInt(Port_number));
+            DebugLog.printAriDebug(fnName, "GetCliRunningConfig: On the VNF device");
+            StringTokenizer st = new StringTokenizer(Get_config_template, "\n");
+            String command = null;
             try {
-                log.debug("GetCliRunningConfig: Attempting to login: Host_ip_address=" + hostIpAddress + " User_name="
-                    + username + " Password=" + password + " Port_number=" + portNumber);
-
-                boolean showConfigFlag = false;
-                sshJcraftWrapper
-                    .connect(hostIpAddress, username, password, "", 30000, Integer.parseInt(portNumber));
-                log.debug("GetCliRunningConfig: On the VNF device");
-                StringTokenizer st = new StringTokenizer(getConfigTemplate, "\n");
-                String command = null;
-
-                StringBuilder cliResponse = new StringBuilder();
-
-                // shouldn't this be used somewhere?
-                StringBuilder response = new StringBuilder();
-
-                try {
-                    while (st.hasMoreTokens()) {
-                        String line = st.nextToken();
-                        log.debug("line={}", line);
-                        if (line.contains("Request:")) {
-                            log.debug("Found a Request line: line={}", line);
-                            command = getStringBetweenQuotes(line);
-                            log.debug("Sending command={}", command);
-                            sshJcraftWrapper.send(command);
-                            log.debug("command has been sent");
-                            if (line.contains("show config")) {
-                                showConfigFlag = true;
-                                log.debug("GetCliRunningConfig: GetCliRunningConfig: setting 'showConfigFlag' to true");
-                            }
+                while (st.hasMoreTokens()) {
+                    String line = st.nextToken();
+                    DebugLog.printAriDebug(fnName, "line=" + line);
+                    if (line.indexOf("Request:") != -1) {
+                        DebugLog.printAriDebug(fnName, "Found a Request line: line=" + line);
+                        command = getStringBetweenQuotes(line);
+                        DebugLog.printAriDebug(fnName, "Sending command=" + command);
+                        sshJcraftWrapper.send(command);
+                        DebugLog.printAriDebug(fnName, "command has been sent");
+                        if (line.indexOf("show config") != -1) {
+                            showConfigFlag = true;
+                            DebugLog.printAriDebug(fnName, "GetCliRunningConfig: setting 'showConfigFlag' to true");
+                            log.debug("GetCliRunningConfig: GetCliRunningConfig: setting 'showConfigFlag' to true");
                         }
-                        if (line.contains("Response: Ends_With")) {
-                            log.debug("Found a Response line: line={}", line);
-                            String delemeter = getStringBetweenQuotes(line);
-                            log.debug("The delemeter={}", delemeter);
-                            String tmpResponse = sshJcraftWrapper.receiveUntil(delemeter, 120 * 1000, command);
-                            response.append(tmpResponse);
-                            if (showConfigFlag) {
-                                showConfigFlag = false;
-                                StringTokenizer st2 = new StringTokenizer(tmpResponse, "\n");
-                                while (st2.hasMoreTokens()) {
-                                    String line2 = st2.nextToken();
-                                    if (!line2.contains("#")) {
-                                        cliResponse.append(line2).append('\n');
-                                    }
+                    }
+                    if (line.indexOf("Response: Ends_With") != -1) {
+                        DebugLog.printAriDebug(fnName, "Found a Response line: line=" + line);
+                        String delemeter = getStringBetweenQuotes(line);
+                        DebugLog.printAriDebug(fnName, "The delemeter=" + delemeter);
+                        String tmpResponse = sshJcraftWrapper.receiveUntil(delemeter, 30 * 1000, command);
+                        response += tmpResponse;
+                        if (showConfigFlag) {
+                            showConfigFlag = false;
+                            StringTokenizer st2 = new StringTokenizer(tmpResponse, "\n");
+                            //    Strip off the last line which is the command prompt from the VNF device.
+                            while (st2.hasMoreTokens()) {
+                                String line2 = st2.nextToken();
+                                if (line2.indexOf("#") == -1) {
+                                    CliResponse += line2 + "\n";
                                 }
                             }
                         }
                     }
-                } catch (NoSuchElementException e) {
-                    log.error(e.getMessage(), e);
                 }
-                log.debug("CliResponse=\n{}", cliResponse.toString());
-                ctx.setAttribute(CLI_OUTPUT_PARAM, cliResponse.toString());
-                sshJcraftWrapper.closeConnection();
-                r.code = 200;
-                return setResponseStatus(ctx, r);
-            } catch (IOException e) {
-                log.error(SSH_JCRAFT_WRAPPER_ERR_STR, e);
-                sshJcraftWrapper.closeConnection();
-                r.code = HttpURLConnection.HTTP_INTERNAL_ERROR;
-                r.message = e.getMessage();
-                return setResponseStatus(ctx, r);
+            } catch (NoSuchElementException e) {
+                DebugLog.printAriDebug(fnName, "Caught a NoSuchElementException: e=" + e);
             }
+            DebugLog.printAriDebug(fnName, "CliResponse=\n" + CliResponse);
+            ctx.setAttribute("cliOutput", CliResponse);
+            sshJcraftWrapper.closeConnection();
+            r.code = 200;
+            sshJcraftWrapper = null;
+            return (setResponseStatus(ctx, r));
+        } catch (IOException e) {
+            DebugLog.printAriDebug(fnName, "GetCliRunningConfig: Caught a IOException e=" + e);
+            log.debug(fnName + " : GetCliRunningConfig: Caught a IOException e=" + e);
+            sshJcraftWrapper.closeConnection();
+            r.code = HttpURLConnection.HTTP_INTERNAL_ERROR;
+            r.message = e.getMessage();
+            sshJcraftWrapper = null;
+            DebugLog.printAriDebug(fnName, "GetCliRunningConfig: Returning error message");
+            return (setResponseStatus(ctx, r));
         }
-        if (key.equals(KEY_XML_DOWNLOAD)) {
-            log.debug("key was: " + KEY_XML_DOWNLOAD);
-            String userName = parameters.get(USERNAME_PARAM);
-            String hostIpAddress = parameters.get(HOST_IP_PARAM);
-            String password = parameters.get(PASSWORD_PARAM);
-            password = EncryptionTool.getInstance().decrypt(password);
-            String portNumber = parameters.get(PORT_NUMBER_PARAM);
-            String contents = parameters.get("Contents");
-            String netconfHelloCmd = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n <hello xmlns=\"urn:ietf:params:xml:ns:netconf:base:1.0\">\n  <capabilities>\n   <capability>urn:ietf:params:netconf:base:1.0</capability>\n  <capability>urn:com:ericsson:ebase:1.1.0</capability> </capabilities>\n </hello>";
-            String terminateConnectionCmd = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n  <rpc message-id=\"terminateConnection\" xmlns:netconf=\"urn:ietf:params:xml:ns:netconf:base:1.0\" xmlns=\"urn:ietf:params:xml:ns:netconf:base:1.0\">\n <close-session/> \n </rpc>\n ]]>]]>";
-            String commitCmd = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n <rpc> <commit/> </rpc>\n ]]>]]>";
-
-            log.debug("xml-download: User_name={} Host_ip_address={} Password={} Port_number={}", userName,
-                hostIpAddress, password, portNumber);
-            SshJcraftWrapper sshJcraftWrapper = new SshJcraftWrapper();
-            try {
-                // what about prompt "]]>]]>"?
-                sshJcraftWrapper
-                    .connect(hostIpAddress, userName, password, 30000, Integer.parseInt(portNumber), "netconf");
-
-                netconfHelloCmd += PROMPT_STR;
-                log.debug("Sending the hello command");
-                sshJcraftWrapper.send(netconfHelloCmd);
-                String response;
-                log.debug("Sending xmlCmd cmd");
-                String messageId = "1";
-                messageId = "\"" + messageId + "\"";
-                String loadConfigurationString =
-                    "<?xml version=\"1.0\" encoding=\"UTF-8\"?> <rpc xmlns=\"urn:ietf:params:xml:ns:netconf:base:1.0\" message-id="
-                        + messageId
-                        + "> <edit-config> <target> <candidate /> </target> <default-operation>merge</default-operation> <config xmlns:xc=\"urn:ietf:params:xml:ns:netconf:base:1.0\">"
-                        + contents + "</config> </edit-config> </rpc>";
-                loadConfigurationString = loadConfigurationString + PROMPT_STR;
-                sshJcraftWrapper.send(loadConfigurationString);
-                log.debug("After sending loadConfigurationString");
-                response = sshJcraftWrapper.receiveUntil(RPC_REPLY_END_TAG, 600000, "");
-                if (response.contains("rpc-error")) {
-                    log.debug("Error from device: Response from device had 'rpc-error'");
-                    log.debug(RESPONSE_STR, response);
+    }
+    if (key.equals("xml-download")) {
+        log(fnName, "key was:    xml-download");
+        String User_name = parameters.get("User_name");
+        String Host_ip_address = parameters.get("Host_ip_address");
+        String Password = parameters.get("Password");
+        Password = EncryptionTool.getInstance().decrypt(Password);
+        String Port_number = parameters.get("Port_number");
+        String Contents = parameters.get("Contents");
+        String netconfHelloCmd = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n <hello xmlns=\"urn:ietf:params:xml:ns:netconf:base:1.0\">\n    <capabilities>\n   <capability>urn:ietf:params:netconf:base:1.0</capability>\n  <capability>urn:com:ericsson:ebase:1.1.0</capability> </capabilities>\n </hello>";
+        String terminateConnectionCmd = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n    <rpc message-id=\"terminateConnection\" xmlns:netconf=\"urn:ietf:params:xml:ns:netconf:base:1.0\" xmlns=\"urn:ietf:params:xml:ns:netconf:base:1.0\">\n <close-session/> \n </rpc>\n ]]>]]>";
+        String commitCmd = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n <rpc> <commit/> </rpc>\n ]]>]]>";
+
+        log(fnName,
+            "xml-download: User_name=" + User_name + " Host_ip_address=" + Host_ip_address
+                + " Port_number=" + Port_number);
+        SshJcraftWrapper sshJcraftWrapper = new SshJcraftWrapper();
+        try {
+            sshJcraftWrapper.connect(Host_ip_address,
+                User_name,
+                Password,
+                "]]>]]>",
+                30000,
+                Integer.parseInt(Port_number),
+                "netconf");
+            String NetconfHelloCmd = netconfHelloCmd;
+            NetconfHelloCmd = NetconfHelloCmd + "]]>]]>";
+            log(fnName, "Sending the hello command");
+            sshJcraftWrapper.send(NetconfHelloCmd);
+            String response = sshJcraftWrapper.receiveUntil("]]>]]>", 10000, "");
+            log(fnName, "Sending xmlCmd cmd");
+            String xmlCmd = Contents;
+            String messageId = "1";
+            messageId = "\"" + messageId + "\"";
+            String loadConfigurationString =
+                "<?xml version=\"1.0\" encoding=\"UTF-8\"?> <rpc xmlns=\"urn:ietf:params:xml:ns:netconf:base:1.0\" message-id="
+                    + messageId
+                    + "> <edit-config> <target> <candidate /> </target> <default-operation>merge</default-operation> <config xmlns:xc=\"urn:ietf:params:xml:ns:netconf:base:1.0\">"
+                    + xmlCmd + "</config> </edit-config> </rpc>";
+            loadConfigurationString = loadConfigurationString + "]]>]]>";
+            sshJcraftWrapper.send(loadConfigurationString);
+            DebugLog.printAriDebug(fnName, ":After sending loadConfigurationString");
+            response = sshJcraftWrapper.receiveUntil("</rpc-reply>", 600000, "");
+            if (response.indexOf("rpc-error") != -1) {
+                DebugLog.printAriDebug(fnName, "Error from device: Response from device had 'rpc-error'");
+                DebugLog.printAriDebug(fnName, "response=\n" + response + "\n");
+                r.code = HttpURLConnection.HTTP_INTERNAL_ERROR;
+                r.message = response;
+            } else {
+                DebugLog.printAriDebug(fnName, ":LoadConfiguration was a success, sending commit cmd");
+                sshJcraftWrapper.send(commitCmd);
+                DebugLog.printAriDebug(fnName, ":After sending commitCmd");
+                response = sshJcraftWrapper.receiveUntil("</rpc-reply>", 180000, "");
+                if (response.indexOf("rpc-error") != -1) {
+                    DebugLog.printAriDebug(fnName, "Error from device: Response from device had 'rpc-error'");
+                    DebugLog.printAriDebug(fnName, "response=\n" + response + "\n");
                     r.code = HttpURLConnection.HTTP_INTERNAL_ERROR;
                     r.message = response;
                 } else {
-                    log.debug(":LoadConfiguration was a success, sending commit cmd");
-                    sshJcraftWrapper.send(commitCmd);
-                    log.debug(":After sending commitCmd");
-                    response = sshJcraftWrapper.receiveUntil(RPC_REPLY_END_TAG, 180000, "");
-                    handleRpcError(r, response);
+                    DebugLog.printAriDebug(fnName, ":Looks like a success");
+                    DebugLog.printAriDebug(fnName, "response=\n" + response + "\n");
+                    r.code = 200;
                 }
-                sshJcraftWrapper.send(terminateConnectionCmd);
-                sshJcraftWrapper.closeConnection();
-                return setResponseStatus(ctx, r);
-            } catch (Exception e) {
-                log.error("Caught an Exception", e);
-                sshJcraftWrapper.closeConnection();
-                r.code = HttpURLConnection.HTTP_INTERNAL_ERROR;
-                r.message = e.getMessage();
-                log.debug("Returning error message");
-                return setResponseStatus(ctx, r);
             }
+            sshJcraftWrapper.send(terminateConnectionCmd);
+            sshJcraftWrapper.closeConnection();
+            sshJcraftWrapper = null;
+            return (setResponseStatus(ctx, r));
+        } catch (Exception e) {
+            log(fnName, "Caught an Exception, e=" + e);
+            log(fnName, "StackTrace=" + DebugLog.getStackTraceString(e));
+            sshJcraftWrapper.closeConnection();
+            r.code = HttpURLConnection.HTTP_INTERNAL_ERROR;
+            r.message = e.getMessage();
+            sshJcraftWrapper = null;
+            log(fnName, "Returning error message");
+            return (setResponseStatus(ctx, r));
         }
-        if (key.equals(KEY_XML_GET_RUNNING_CONF)) {
-            log.debug("key was: : xml-getrunningconfig");
-            String xmlGetRunningConfigCmd = "<?xml version=\"1.0\" encoding=\"UTF-8\"?> <rpc xmlns=\"urn:ietf:params:xml:ns:netconf:base:1.0\" message-id=\"1\">  <get-config> <source> <running /> </source> </get-config> </rpc>\n";
-            String hostIpAddress = parameters.get(HOST_IP_PARAM);
-            String username = parameters.get(USERNAME_PARAM);
-            String password = parameters.get(PASSWORD_PARAM);
-            password = EncryptionTool.getInstance().decrypt(password);
-            String portNumber = parameters.get(PORT_NUMBER_PARAM);
-            String netconfHelloCmd = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n <hello xmlns=\"urn:ietf:params:xml:ns:netconf:base:1.0\">\n  <capabilities>\n   <capability>urn:ietf:params:netconf:base:1.0</capability>\n <capability>urn:com:ericsson:ebase:1.1.0</capability> </capabilities>\n </hello>";
-            String terminateConnectionCmd = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n  <rpc message-id=\"terminateConnection\" xmlns:netconf=\"urn:ietf:params:xml:ns:netconf:base:1.0\" xmlns=\"urn:ietf:params:xml:ns:netconf:base:1.0\">\n <close-session/> \n </rpc>\n ]]>]]>";
-            log.debug("xml-getrunningconfig: User_name={} Host_ip_address={} Password={} Port_number={}", username,
-                hostIpAddress, password, portNumber);
-            SshJcraftWrapper sshJcraftWrapper = new SshJcraftWrapper();
-            try {
-
-                sshJcraftWrapper
-                    .connect(hostIpAddress, username, password, 30000, Integer.parseInt(portNumber),
-                        "netconf"); //What about prompt "]]>]]>" here?
-                netconfHelloCmd += PROMPT_STR;
-                log.debug(":Sending the hello command");
-                sshJcraftWrapper.send(netconfHelloCmd);
-                String response;
-                log.debug("Sending get running config command");
-                sshJcraftWrapper.send(xmlGetRunningConfigCmd + "]]>]]>\n");
-                response = sshJcraftWrapper.receiveUntil(RPC_REPLY_END_TAG, 180000, "");
-                log.debug("Response from getRunningconfigCmd={}", response);
-                response = trimResponse(response);
-                ctx.setAttribute("xmlRunningConfigOutput", response);
-                sshJcraftWrapper.send(terminateConnectionCmd);
-                sshJcraftWrapper.closeConnection();
-                r.code = 200;
-                return setResponseStatus(ctx, r);
-            } catch (Exception e) {
-                log.error("Caught an Exception", e);
-                sshJcraftWrapper.closeConnection();
-                r.code = HttpURLConnection.HTTP_INTERNAL_ERROR;
-                r.message = e.getMessage();
-                log.debug("Returning error message");
-                return setResponseStatus(ctx, r);
-            }
+    }
+    if (key.equals("xml-getrunningconfig")) {
+        log(fnName, "key was: : xml-getrunningconfig");
+        String xmlGetRunningConfigCmd = "<?xml version=\"1.0\" encoding=\"UTF-8\"?> <rpc xmlns=\"urn:ietf:params:xml:ns:netconf:base:1.0\" message-id=\"1\">    <get-config> <source> <running /> </source> </get-config> </rpc>\n";
+        String Host_ip_address = parameters.get("Host_ip_address");
+        String User_name = parameters.get("User_name");
+        String Password = parameters.get("Password");
+        Password = EncryptionTool.getInstance().decrypt(Password);
+        String Port_number = parameters.get("Port_number");
+        String Protocol = parameters.get("Protocol");
+        String netconfHelloCmd = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n <hello xmlns=\"urn:ietf:params:xml:ns:netconf:base:1.0\">\n    <capabilities>\n   <capability>urn:ietf:params:netconf:base:1.0</capability>\n <capability>urn:com:ericsson:ebase:1.1.0</capability> </capabilities>\n </hello>";
+        String terminateConnectionCmd = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n    <rpc message-id=\"terminateConnection\" xmlns:netconf=\"urn:ietf:params:xml:ns:netconf:base:1.0\" xmlns=\"urn:ietf:params:xml:ns:netconf:base:1.0\">\n <close-session/> \n </rpc>\n ]]>]]>";
+        log(fnName,
+            "xml-getrunningconfig: User_name=" + User_name + " Host_ip_address=" + Host_ip_address
+                + " Port_number=" + Port_number);
+        SshJcraftWrapper sshJcraftWrapper = new SshJcraftWrapper();
+        try {
+            String NetconfHelloCmd = netconfHelloCmd;
+            sshJcraftWrapper.connect(Host_ip_address,
+                User_name,
+                Password,
+                "]]>]]>",
+                30000,
+                Integer.parseInt(Port_number),
+                "netconf");
+            NetconfHelloCmd = NetconfHelloCmd + "]]>]]>";
+            log(fnName, ":Sending the hello command");
+            sshJcraftWrapper.send(NetconfHelloCmd);
+            String response = sshJcraftWrapper.receiveUntil("]]>]]>", 10000, "");
+            log(fnName, "Sending get running config command");
+            sshJcraftWrapper.send(xmlGetRunningConfigCmd + "]]>]]>\n");
+            response = sshJcraftWrapper.receiveUntil("</rpc-reply>", 180000, "");
+            DebugLog.printAriDebug(fnName, "Response from getRunningconfigCmd=" + response);
+            response = trimResponse(response);
+            ctx.setAttribute("xmlRunningConfigOutput", response);
+            sshJcraftWrapper.send(terminateConnectionCmd);
+            sshJcraftWrapper.closeConnection();
+            r.code = 200;
+            sshJcraftWrapper = null;
+            return (setResponseStatus(ctx, r));
+        } catch (Exception e) {
+            log(fnName, "Caught an Exception, e=" + e);
+            log(fnName, "StackTrace=" + DebugLog.getStackTraceString(e));
+            sshJcraftWrapper.closeConnection();
+            r.code = HttpURLConnection.HTTP_INTERNAL_ERROR;
+            r.message = e.getMessage();
+            sshJcraftWrapper = null;
+            log(fnName, "Returning error message");
+            return (setResponseStatus(ctx, r));
         }
-        if (key.equals(KEY_DOWNLOAD_CLI_CONFIG)) {
-            log.debug("key was: DownloadCliConfig: ");
-            String username = parameters.get(USERNAME_PARAM);
-            String hostIpAddress = parameters.get(HOST_IP_PARAM);
-            String password = parameters.get(PASSWORD_PARAM);
-            password = EncryptionTool.getInstance().decrypt(password);
-            String portNumber = parameters.get(PORT_NUMBER_PARAM);
-            String downloadConfigTemplate = parameters.get("Download_config_template");
-            String configContents = parameters.get("Config_contents");
-            log.debug("Contents of the 'Config_contents' are: {}", configContents);
-            SshJcraftWrapper sshJcraftWrapper = new SshJcraftWrapper();
-            log.debug("DownloadCliConfig: sshJcraftWrapper was instantiated");
-            int timeout = 4 * 60 * 1000;
+    }
+    if (key.equals("DownloadCliConfig")) {
+        debugLog.printRTAriDebug(fnName, "key was: DownloadCliConfig: ");
+        log.debug("key was: DownloadCliConfig: ");
+        String User_name = parameters.get("User_name");
+        String Host_ip_address = parameters.get("Host_ip_address");
+        String Password = parameters.get("Password");
+        Password = EncryptionTool.getInstance().decrypt(Password);
+        String Port_number = parameters.get("Port_number");
+        String Download_config_template = parameters.get("Download_config_template");
+        String Config_contents = parameters.get("Config_contents");
+        DebugLog.printAriDebug(fnName, "Contents of the 'Config_contents' are: " + Config_contents);
+        SshJcraftWrapper sshJcraftWrapper = new SshJcraftWrapper();
+        log.debug("DownloadCliConfig: sshJcraftWrapper was instantiated");
+        debugLog.printRTAriDebug(fnName, "DownloadCliConfig: sshJcraftWrapper was instantiated");
+        int timeout = 4 * 60 * 1000;
+        try {
+            DebugLog.printAriDebug(fnName, "DownloadCliConfig: User_name=" + User_name +
+                " Host_ip_address=" + Host_ip_address + " Port_number="
+                + Port_number);
+            log.debug("DownloadCliConfig: Attempting to login: Host_ip_address=" + Host_ip_address +
+                " User_name=" + User_name + " Port_number=" + Port_number);
+            StringBuffer sb = new StringBuffer();
+            String response = "";
+            String CliResponse = "";
+            sshJcraftWrapper.connect(Host_ip_address,
+                User_name,
+                Password,
+                "",
+                30000,
+                Integer.parseInt(Port_number));
+            DebugLog.printAriDebug(fnName, "DownloadCliConfig: On the VNF device");
+            StringTokenizer st = new StringTokenizer(Download_config_template, "\n");
+            String command = null;
+            String executeConfigContentsDelemeter = null;
             try {
-                log.debug("DownloadCliConfig: Attempting to login: Host_ip_address=" + hostIpAddress + " User_name="
-                    + username + " Password=" + password + " Port_number=" + portNumber);
-
-                StringBuilder cliResponse = new StringBuilder();
-
-                // shouldn't this be used somewhere?
-                StringBuilder response = new StringBuilder();
-
-                sshJcraftWrapper
-                    .connect(hostIpAddress, username, password, "", 30000, Integer.parseInt(portNumber));
-                log.debug("DownloadCliConfig: On the VNF device");
-                StringTokenizer st = new StringTokenizer(downloadConfigTemplate, "\n");
-                String command = null;
-                String executeConfigContentsDelimiter;
-                try {
-                    while (st.hasMoreTokens()) {
-                        String line = st.nextToken();
-                        log.debug("line={}", line);
-                        if (line.contains("Request:")) {
-                            log.debug("Found a Request line: line={}", line);
-                            command = getStringBetweenQuotes(line);
-                            log.debug("Sending command={}", command);
-                            sshJcraftWrapper.send(command);
-                            log.debug("command has been sent");
-                        } else if ((line.contains("Response: Ends_With")) && (
-                            !line.contains("Execute_config_contents Response: Ends_With"))) {
-                            log.debug("Found a Response line: line={}", line);
-                            String delimiter = getStringBetweenQuotes(line);
-                            log.debug("The delimiter={}", delimiter);
-                            String tmpResponse = sshJcraftWrapper.receiveUntil(delimiter, timeout, command);
-                            response.append(tmpResponse);
-                            cliResponse.append(tmpResponse);
-                        } else if (line.contains("Execute_config_contents Response: Ends_With")) {
-                            log.debug("Found a 'Execute_config_contents Response:' line={}", line);
-                            executeConfigContentsDelimiter = getStringBetweenQuotes(line);
-                            log.debug("executeConfigContentsDelemeter={}", executeConfigContentsDelimiter);
-                            StringTokenizer st2 = new StringTokenizer(configContents, "\n");
-                            while (st2.hasMoreTokens()) {
-                                String cmd = st2.nextToken();
-                                log.debug("Config_contents: cmd={}", cmd);
-                                sshJcraftWrapper.send(cmd);
-                                String tmpResponse = sshJcraftWrapper
-                                    .receiveUntil(executeConfigContentsDelimiter, timeout, command);
-                                cliResponse.append(tmpResponse);
-                            }
+                while (st.hasMoreTokens()) {
+                    String line = st.nextToken();
+                    DebugLog.printAriDebug(fnName, "line=" + line);
+                    if (line.indexOf("Request:") != -1) {
+                        DebugLog.printAriDebug(fnName, "Found a Request line: line=" + line);
+                        command = getStringBetweenQuotes(line);
+                        DebugLog.printAriDebug(fnName, "Sending command=" + command);
+                        sshJcraftWrapper.send(command);
+                        DebugLog.printAriDebug(fnName, "command has been sent");
+                    } else if ((line.indexOf("Response: Ends_With") != -1) && (
+                        line.indexOf("Execute_config_contents Response: Ends_With") == -1)) {
+                        DebugLog.printAriDebug(fnName, "Found a Response line: line=" + line);
+                        String delemeter = getStringBetweenQuotes(line);
+                        DebugLog.printAriDebug(fnName, "The delemeter=" + delemeter);
+                        String tmpResponse = sshJcraftWrapper.receiveUntil(delemeter, timeout, command);
+                        response += tmpResponse;
+                        CliResponse += tmpResponse;
+                    } else if (line.indexOf("Execute_config_contents Response: Ends_With") != -1) {
+                        DebugLog.printAriDebug(fnName, "Found a 'Execute_config_contents Response:' line=" + line);
+                        executeConfigContentsDelemeter = getStringBetweenQuotes(line);
+                        DebugLog.printAriDebug(fnName,
+                            "executeConfigContentsDelemeter=" + executeConfigContentsDelemeter);
+                        StringTokenizer st2 = new StringTokenizer(Config_contents, "\n");
+                        while (st2.hasMoreTokens()) {
+                            String cmd = st2.nextToken();
+                            DebugLog.printAriDebug(fnName, "Config_contents: cmd=" + cmd);
+                            sshJcraftWrapper.send(cmd);
+                            String tmpResponse = sshJcraftWrapper.receiveUntil(executeConfigContentsDelemeter,
+                                timeout,
+                                command);
+                            CliResponse += tmpResponse;
                         }
                     }
-                } catch (NoSuchElementException e) {
-                    log.error(e.getMessage(), e);
                 }
-                sshJcraftWrapper.closeConnection();
-                log.debug(":Escaping all the single and double quotes in the response");
-
-                String escapedCliResponse = cliResponse
-                    .toString()
-                    .replaceAll("\"", "\\\\\"")
-                    .replaceAll("\'", "\\\\'");
-
-                log.debug("CliResponse=\n{}" + escapedCliResponse);
-                ctx.setAttribute(CLI_OUTPUT_PARAM, escapedCliResponse);
-                r.code = 200;
-                return setResponseStatus(ctx, r);
-            } catch (IOException e) {
-                log.error(e.getMessage() + e);
-                sshJcraftWrapper.closeConnection();
-                r.code = HttpURLConnection.HTTP_INTERNAL_ERROR;
-                r.message = e.getMessage();
-                log.debug("DownloadCliConfig: Returning error message");
-                return setResponseStatus(ctx, r);
+            } catch (NoSuchElementException e) {
+                DebugLog.printAriDebug(fnName, "Caught a NoSuchElementException: e=" + e);
             }
+            sshJcraftWrapper.closeConnection();
+            sshJcraftWrapper = null;
+            DebugLog.printAriDebug(fnName, ":Escaping all the single and double quotes in the response");
+            CliResponse = CliResponse.replaceAll("\"", "\\\\\"");
+            CliResponse = CliResponse.replaceAll("\'", "\\\\'");
+            DebugLog.printAriDebug(fnName, "CliResponse=\n" + CliResponse);
+            ctx.setAttribute("cliOutput", CliResponse);
+            r.code = 200;
+            return (setResponseStatus(ctx, r));
+        } catch (IOException e) {
+            DebugLog.printAriDebug(fnName, "DownloadCliConfig: Caught a IOException e=" + e);
+            log.debug(fnName + " : DownloadCliConfig: Caught a IOException e=" + e);
+            sshJcraftWrapper.closeConnection();
+            r.code = HttpURLConnection.HTTP_INTERNAL_ERROR;
+            r.message = e.getMessage();
+            sshJcraftWrapper = null;
+            DebugLog.printAriDebug(fnName, "DownloadCliConfig: Returning error message");
+            return (setResponseStatus(ctx, r));
         }
-        log.debug("Unsupported action - {}", action);
-        return ConfigStatus.FAILURE;
     }
 
-    private boolean areEqual(String action, String actionPrepare) {
-        return action != null && action.equalsIgnoreCase(actionPrepare);
-    }
+    debugLog.printRTAriDebug(fnName, "Unsupported action - " + action);
+    log.error("Unsupported action - " + action);
+    return ConfigStatus.FAILURE;
+}
 
-    private boolean nullOrEmpty(String parmval) {
-        return parmval != null && parmval.length() > 0;
-    }
+private void log(String fileName, String messg) {
+    debugLog.printRTAriDebug(fileName, messg);
+    log.debug(fileName + ": " + messg);
+}
 
-    private void handleRpcError(HttpResponse r, String response) {
-        if (response.contains("rpc-error")) {
-            log.debug("Error from device: Response from device had 'rpc-error'");
-            log.debug(RESPONSE_STR, response);
-            r.code = HttpURLConnection.HTTP_INTERNAL_ERROR;
-            r.message = response;
-        } else {
-            log.debug(":Looks like a success");
-            log.debug(RESPONSE_STR, response);
-            r.code = 200;
-        }
+private ConfigStatus prepare(SvcLogicContext ctx, String requestType, String operation) {
+    String templateName = requestType.equals("BASE") ? "/config-base.xml" : "/config-data.xml";
+    String ndTemplate = readFile(templateName);
+    String nd = buildNetworkData2(ctx, ndTemplate, operation);
+
+    String reqTemplate = readFile("/config-request.xml");
+    Map<String, String> param = new HashMap<String, String>();
+    param.put("request-id", ctx.getAttribute("service-data.appc-request-header.svc-request-id"));
+    param.put("request-type", requestType);
+    param.put("callback-url", configCallbackUrl);
+    if (operation.equals("create") || operation.equals("change") || operation.equals("scale")) {
+        param.put("action", "GenerateOnly");
     }
+    param.put("equipment-name", ctx.getAttribute("service-data.service-information.service-instance-id"));
+    param.put("equipment-ip-address", ctx.getAttribute("service-data.vnf-config-information.vnf-host-ip-address"));
+    param.put("vendor", ctx.getAttribute("service-data.vnf-config-information.vendor"));
+    param.put("network-data", nd);
 
-    private void trySleepFor(long length) {
-        try {
-            log.debug("Sleeping for 180 seconds....");
-            Thread.sleep(length);
-            log.debug("Woke up....");
-        } catch (InterruptedException ee) {
-            log.error("Sleep interrupted", ee);
-            Thread.currentThread().interrupt();
-        }
-    }
+    String req = null;
+    try {
+        req = buildXmlRequest(param, reqTemplate);
+    } catch (Exception e) {
+        log.error("Error building the XML request: ", e);
 
-    private ConfigStatus prepare(SvcLogicContext ctx, String requestType, String operation) {
-        String templateName = requestType.equals(BASE_REQUEST) ? "/config-base.xml" : "/config-data.xml";
-        String ndTemplate = expandRepeats(ctx, readFile(templateName), 1);
-        String nd = buildNetworkData2(ctx, ndTemplate, operation);
+        HttpResponse r = new HttpResponse();
+        r.code = HttpURLConnection.HTTP_INTERNAL_ERROR;
+        r.message = e.getMessage();
+        return setResponseStatus(ctx, r);
+    }
 
-        String reqTemplate = readFile("/config-request.xml");
-        Map<String, String> param = new HashMap<>();
-        param.put(REQUEST_ID_PARAM, ctx.getAttribute(SVC_REQUEST_ID_ATTR));
-        param.put("request-type", requestType);
-        param.put(CALLBACK_URL_PARAM, configCallbackUrl);
-        if (operation.equals(OPERATION_CREATE) || operation.equals(OPERATION_CHANGE)
-            || operation.equals(OPERATION_SCALE)) {
-            param.put(ACTION_PARAM, "GenerateOnly");
-        }
-        param.put(EQUIPMENT_NAME_PARAM, ctx.getAttribute(SERVICE_INSTANCE_ID_ATTR));
-        param.put("equipment-ip-address", ctx.getAttribute("service-data.vnf-config-information.vnf-host-ip-address"));
-        param.put("vendor", ctx.getAttribute("service-data.vnf-config-information.vendor"));
-        param.put("network-data", nd);
+    HttpResponse r = sendXmlRequest(req, configUrl, configUser, configPassword);
+    return setResponseStatus(ctx, r);
+}
 
-        String req;
-        try {
-            req = buildXmlRequest(param, reqTemplate);
-        } catch (Exception e) {
-            log.error(XML_BUILDING_ERR_STR, e);
+private ConfigStatus activate(SvcLogicContext ctx, boolean change) {
+    String reqTemplate = readFile("/config-request.xml");
+    Map<String, String> param = new HashMap<String, String>();
+    param.put("request-id", ctx.getAttribute("service-data.appc-request-header.svc-request-id"));
+    param.put("callback-url", configCallbackUrl);
+    param.put("action", change ? "DownloadChange" : "DownloadBase");
+    param.put("equipment-name", ctx.getAttribute("service-data.service-information.service-instance-id"));
 
-            HttpResponse r = new HttpResponse();
-            r.code = HttpURLConnection.HTTP_INTERNAL_ERROR;
-            r.message = e.getMessage();
-            return setResponseStatus(ctx, r);
-        }
+    String req = null;
+    try {
+        req = buildXmlRequest(param, reqTemplate);
+    } catch (Exception e) {
+        log.error("Error building the XML request: ", e);
 
-        HttpResponse r = sendXmlRequest(req, configUrl, configUser, configPassword);
+        HttpResponse r = new HttpResponse();
+        r.code = HttpURLConnection.HTTP_INTERNAL_ERROR;
+        r.message = e.getMessage();
         return setResponseStatus(ctx, r);
     }
 
-    private ConfigStatus activate(SvcLogicContext ctx, boolean change) {
-        String reqTemplate = readFile("/config-request.xml");
-        Map<String, String> param = new HashMap<>();
-        param.put(REQUEST_ID_PARAM, ctx.getAttribute(SVC_REQUEST_ID_ATTR));
-        param.put(CALLBACK_URL_PARAM, configCallbackUrl);
-        param.put(ACTION_PARAM, change ? "DownloadChange" : "DownloadBase");
-        param.put(EQUIPMENT_NAME_PARAM, ctx.getAttribute(SERVICE_INSTANCE_ID_ATTR));
+    HttpResponse r = sendXmlRequest(req, configUrl, configUser, configPassword);
+    return setResponseStatus(ctx, r);
+}
 
-        String req;
-        try {
-            req = buildXmlRequest(param, reqTemplate);
-        } catch (Exception e) {
-            log.error(XML_BUILDING_ERR_STR, e);
+private ConfigStatus audit(SvcLogicContext ctx, String auditLevel) {
+    String reqTemplate = readFile("/audit-request.xml");
+    Map<String, String> param = new HashMap<String, String>();
+    param.put("request-id", ctx.getAttribute("service-data.appc-request-header.svc-request-id"));
+    param.put("callback-url", auditCallbackUrl);
+    param.put("equipment-name", ctx.getAttribute("service-data.service-information.service-instance-id"));
+    param.put("audit-level", auditLevel);
 
-            HttpResponse r = new HttpResponse();
-            r.code = HttpURLConnection.HTTP_INTERNAL_ERROR;
-            r.message = e.getMessage();
-            return setResponseStatus(ctx, r);
-        }
+    String req = null;
+    try {
+        req = buildXmlRequest(param, reqTemplate);
+    } catch (Exception e) {
+        log.error("Error building the XML request: ", e);
 
-        HttpResponse r = sendXmlRequest(req, configUrl, configUser, configPassword);
+        HttpResponse r = new HttpResponse();
+        r.code = HttpURLConnection.HTTP_INTERNAL_ERROR;
+        r.message = e.getMessage();
         return setResponseStatus(ctx, r);
     }
 
-    private ConfigStatus audit(SvcLogicContext ctx, String auditLevel) {
-        String reqTemplate = readFile("/audit-request.xml");
-        Map<String, String> param = new HashMap<>();
-        param.put(REQUEST_ID_PARAM, ctx.getAttribute(SVC_REQUEST_ID_ATTR));
-        param.put(CALLBACK_URL_PARAM, auditCallbackUrl);
-        param.put(EQUIPMENT_NAME_PARAM, ctx.getAttribute(SERVICE_INSTANCE_ID_ATTR));
-        param.put("audit-level", auditLevel);
-        String req;
+    HttpResponse r = sendXmlRequest(req, auditUrl, auditUser, auditPassword);
+    return setResponseStatus(ctx, r);
+}
 
-        try {
-            req = buildXmlRequest(param, reqTemplate);
-        } catch (Exception e) {
-            log.error(XML_BUILDING_ERR_STR, e);
+@Override
+public ConfigStatus activate(String key, SvcLogicContext ctx) {
+    return ConfigStatus.SUCCESS;
+}
 
-            HttpResponse r = new HttpResponse();
-            r.code = HttpURLConnection.HTTP_INTERNAL_ERROR;
-            r.message = e.getMessage();
-            return setResponseStatus(ctx, r);
-        }
+@Override
+public ConfigStatus deactivate(String key, SvcLogicContext ctx) {
+    return ConfigStatus.SUCCESS;
+}
 
-        HttpResponse r = sendXmlRequest(req, auditUrl, auditUser, auditPassword);
-        return setResponseStatus(ctx, r);
+private String escapeMySql(String input) {
+    if (input == null) {
+        return null;
     }
 
-    @Override
-    public ConfigStatus activate(String key, SvcLogicContext ctx) {
-        return ConfigStatus.SUCCESS;
-    }
+    input = input.replace("\\", "\\\\");
+    input = input.replace("\'", "\\'");
+
+    return input;
+}
 
-    @Override
-    public ConfigStatus deactivate(String key, SvcLogicContext ctx) {
-        return ConfigStatus.SUCCESS;
+private String readFile(String fileName) {
+    InputStream is = getClass().getResourceAsStream(fileName);
+    InputStreamReader isr = new InputStreamReader(is);
+    BufferedReader in = new BufferedReader(isr);
+    StringBuilder ss = new StringBuilder();
+    try {
+        String s = in.readLine();
+        while (s != null) {
+            ss.append(s).append('\n');
+            s = in.readLine();
+        }
+    } catch (IOException e) {
+        System.out.println("Error reading " + fileName + ": " + e.getMessage());
+        throw new RuntimeException("Error reading " + fileName + ": " + e.getMessage(), e);
+    } finally {
+        try {
+            in.close();
+        } catch (Exception e) {
+            log.warn("Could not close BufferedReader", e);
+        }
+        try {
+            isr.close();
+        } catch (Exception e) {
+            log.warn("Could not close InputStreamReader", e);
+        }
+        try {
+            is.close();
+        } catch (Exception e) {
+            log.warn("Could not close InputStream", e);
+        }
     }
+    return ss.toString();
+}
 
-    private String escapeMySql(String input) {
-        if (input == null) {
-            return null;
+private String buildXmlRequest(Map<String, String> param, String template) {
+    StringBuilder ss = new StringBuilder();
+    int i = 0;
+    while (i < template.length()) {
+        int i1 = template.indexOf("${", i);
+        if (i1 < 0) {
+            ss.append(template.substring(i));
+            break;
         }
 
-        return input
-            .replace("\\", "\\\\")
-            .replace("\'", "\\'");
-    }
+        int i2 = template.indexOf('}', i1 + 2);
+        if (i2 < 0) {
+            throw new RuntimeException("Template error: Matching } not found");
+        }
 
-    private String readFile(String fileName) {
-        InputStream is = getClass().getResourceAsStream(fileName);
-        InputStreamReader isr = new InputStreamReader(is);
-        BufferedReader in = new BufferedReader(isr);
-        StringBuilder builder = new StringBuilder();
-        try {
-            String s = in.readLine();
-            while (s != null) {
-                builder.append(s).append('\n');
-                s = in.readLine();
-            }
-        } catch (IOException e) {
-            throw new UncheckedIOException("Error reading " + fileName, e);
-        } finally {
-            try {
-                in.close();
-            } catch (Exception e) {
-                log.warn("Could not close BufferedReader", e);
+        String var1 = template.substring(i1 + 2, i2);
+        String value1 = param.get(var1);
+        if (value1 == null || value1.trim().length() == 0) {
+            // delete the whole element (line)
+            int i3 = template.lastIndexOf('\n', i1);
+            if (i3 < 0) {
+                i3 = 0;
             }
-            try {
-                isr.close();
-            } catch (Exception e) {
-                log.warn("Could not close InputStreamReader", e);
+            int i4 = template.indexOf('\n', i1);
+            if (i4 < 0) {
+                i4 = template.length();
             }
-            try {
-                is.close();
-            } catch (Exception e) {
-                log.warn("Could not close InputStream", e);
+
+            if (i < i3) {
+                ss.append(template.substring(i, i3));
             }
+            i = i4;
+        } else {
+            ss.append(template.substring(i, i1)).append(value1);
+            i = i2 + 1;
         }
-        return builder.toString();
     }
 
-    private String buildXmlRequest(Map<String, String> param, String template) {
-        StringBuilder ss = new StringBuilder();
-        int i = 0;
-        while (i < template.length()) {
-            int i1 = template.indexOf("${", i);
-            if (i1 < 0) {
-                ss.append(template.substring(i));
-                break;
-            }
-
-            int i2 = template.indexOf('}', i1 + 2);
-            if (i2 < 0) {
-                throw new TemplateException(TEMPLATE_ERR_STR);
-            }
+    return ss.toString();
+}
 
-            String var1 = template.substring(i1 + 2, i2);
-            String value1 = param.get(var1);
-            if (emptyOrNull(value1)) {
-                // delete the whole element (line)
-                int i3 = template.lastIndexOf('\n', i1);
-                if (i3 < 0) {
-                    i3 = 0;
-                }
-                int i4 = template.indexOf('\n', i1);
-                if (i4 < 0) {
-                    i4 = template.length();
-                }
+private String buildNetworkData2(SvcLogicContext ctx, String template, String operation) {
+    log.info("Building XML started");
+    long t1 = System.currentTimeMillis();
 
-                if (i < i3) {
-                    ss.append(template.substring(i, i3));
-                }
-                i = i4;
-            } else {
-                ss.append(template.substring(i, i1)).append(value1);
-                i = i2 + 1;
-            }
-        }
+    template = expandRepeats(ctx, template, 1);
 
-        return ss.toString();
+    Map<String, String> mm = new HashMap<>();
+    for (String s : ctx.getAttributeKeySet()) {
+        mm.put(s, ctx.getAttribute(s));
     }
+    mm.put("operation", operation);
 
-    private String buildNetworkData2(SvcLogicContext ctx, String template, String operation) {
-        log.info("Building XML started");
-        long t1 = System.currentTimeMillis();
+    StringBuilder ss = new StringBuilder();
+    int i = 0;
+    while (i < template.length()) {
+        int i1 = template.indexOf("${", i);
+        if (i1 < 0) {
+            ss.append(template.substring(i));
+            break;
+        }
 
-        Map<String, String> mm = new HashMap<>();
-        for (String s : ctx.getAttributeKeySet()) {
-            mm.put(s, ctx.getAttribute(s));
+        int i2 = template.indexOf('}', i1 + 2);
+        if (i2 < 0) {
+            throw new RuntimeException("Template error: Matching } not found");
         }
-        mm.put("operation", operation);
-
-        StringBuilder ss = new StringBuilder();
-        int i = 0;
-        while (i < template.length()) {
-            int i1 = template.indexOf("${", i);
-            if (i1 < 0) {
-                ss.append(template.substring(i));
-                break;
-            }
 
-            int i2 = template.indexOf('}', i1 + 2);
-            if (i2 < 0) {
-                throw new TemplateException(TEMPLATE_ERR_STR);
+        String var1 = template.substring(i1 + 2, i2);
+        String value1 = XmlUtil.getXml(mm, var1);
+        if (value1 == null || value1.trim().length() == 0) {
+            // delete the whole element (line)
+            int i3 = template.lastIndexOf('\n', i1);
+            if (i3 < 0) {
+                i3 = 0;
+            }
+            int i4 = template.indexOf('\n', i1);
+            if (i4 < 0) {
+                i4 = template.length();
             }
 
-            String var1 = template.substring(i1 + 2, i2);
-            String value1 = XmlUtil.getXml(mm, var1);
-            if (emptyOrNull(value1)) {
-                int i3 = template.lastIndexOf('\n', i1);
-                if (i3 < 0) {
-                    i3 = 0;
-                }
-                int i4 = template.indexOf('\n', i1);
-                if (i4 < 0) {
-                    i4 = template.length();
-                }
-
-                if (i < i3) {
-                    ss.append(template.substring(i, i3));
-                }
-                i = i4;
-            } else {
-                ss.append(template.substring(i, i1)).append(value1);
-                i = i2 + 1;
+            if (i < i3) {
+                ss.append(template.substring(i, i3));
             }
+            i = i4;
+        } else {
+            ss.append(template.substring(i, i1)).append(value1);
+            i = i2 + 1;
         }
-
-        long t2 = System.currentTimeMillis();
-        log.info("Building XML completed. Time: " + (t2 - t1));
-
-        return ss.toString();
     }
 
-    private boolean emptyOrNull(String value1) {
-        return value1 == null || value1.trim().length() == 0;
-    }
+    long t2 = System.currentTimeMillis();
+    log.info("Building XML completed. Time: " + (t2 - t1));
 
-    private String expandRepeats(SvcLogicContext ctx, String template, int level) {
-        StringBuilder newTemplate = new StringBuilder();
-        int k = 0;
-        while (k < template.length()) {
-            int i1 = template.indexOf("${repeat:", k);
-            if (i1 < 0) {
-                newTemplate.append(template.substring(k));
-                break;
-            }
-
-            int i2 = template.indexOf(':', i1 + 9);
-            if (i2 < 0) {
-                throw new TemplateException(
-                    "Template error: Context variable name followed by \":\" is required after repeat");
-            }
-
-            // Find the closing "}", store in i3
-            int i3 = findLastBracketIndex(template, i2);
-
-            String var1 = template.substring(i1 + 9, i2);
-            String value1 = ctx.getAttribute(var1);
-            log.info("     " + var1 + ": " + value1);
-            int n = tryParseValue(value1);
-
-            newTemplate.append(template.substring(k, i1));
-
-            String rpt = template.substring(i2 + 1, i3);
+    return ss.toString();
+}
 
-            for (int ii = 0; ii < n; ii++) {
-                String ss = rpt.replaceAll("\\[\\$\\{" + level + "\\}\\]", "[" + ii + "]");
-                newTemplate.append(ss);
-            }
-            k = i3 + 1;
+private String expandRepeats(SvcLogicContext ctx, String template, int level) {
+    StringBuilder newTemplate = new StringBuilder();
+    int k = 0;
+    while (k < template.length()) {
+        int i1 = template.indexOf("${repeat:", k);
+        if (i1 < 0) {
+            newTemplate.append(template.substring(k));
+            break;
         }
 
-        if (k == 0) {
-            return newTemplate.toString();
+        int i2 = template.indexOf(':', i1 + 9);
+        if (i2 < 0) {
+            throw new RuntimeException(
+                "Template error: Context variable name followed by : is required after repeat");
         }
-        return expandRepeats(ctx, newTemplate.toString(), level + 1);
-    }
 
-    private int findLastBracketIndex(String template, int i2) {
+        // Find the closing }, store in i3
+        int nn = 1;
         int i3 = -1;
         int i = i2;
-        int nn = 1;
         while (nn > 0 && i < template.length()) {
             i3 = template.indexOf('}', i);
             if (i3 < 0) {
-                throw new TemplateException(TEMPLATE_ERR_STR);
+                throw new RuntimeException("Template error: Matching } not found");
             }
             int i32 = template.indexOf('{', i);
             if (i32 >= 0 && i32 < i3) {
                 i = i3 + 1;
             }
         }
-        return i3;
-    }
 
-    private int tryParseValue(String value1) {
-        int n;
+        String var1 = template.substring(i1 + 9, i2);
+        String value1 = ctx.getAttribute(var1);
+        log.info("         " + var1 + ": " + value1);
+        int n = 0;
         try {
             n = Integer.parseInt(value1);
         } catch (Exception e) {
-            log.error("Failed to parse value. Using default (0).", e);
             n = 0;
         }
-        return n;
+
+        newTemplate.append(template.substring(k, i1));
+
+        String rpt = template.substring(i2 + 1, i3);
+
+        for (int ii = 0; ii < n; ii++) {
+            String ss = rpt.replaceAll("\\[\\$\\{" + level + "\\}\\]", "[" + ii + "]");
+            newTemplate.append(ss);
+        }
+
+        k = i3 + 1;
     }
 
-    private HttpResponse sendXmlRequest(String xmlRequest, String url, String user, String password) {
-        try {
-            Client client = Client.create();
-            client.setConnectTimeout(5000);
-            WebResource webResource = client.resource(url);
+    if (k == 0) {
+        return newTemplate.toString();
+    }
 
-            log.info("SENDING...............");
-            log.info(xmlRequest);
+    return expandRepeats(ctx, newTemplate.toString(), level + 1);
+}
 
-            String authString = user + ":" + password;
-            byte[] authEncBytes = Base64.encode(authString);
-            String authStringEnc = new String(authEncBytes);
-            authString = "Basic " + authStringEnc;
+private HttpResponse sendXmlRequest(String xmlRequest, String url, String user, String password) {
+    try {
+        Client client = Client.create();
+        client.setConnectTimeout(5000);
+        WebResource webResource = client.resource(url);
 
-            ClientResponse response =
-                webResource.header("Authorization", authString).accept("UTF-8").type("application/xml").post(
-                    ClientResponse.class, xmlRequest);
+        log.info("SENDING...............");
+        log.info(xmlRequest);
 
-            int code = response.getStatus();
-            String message = null;
+        String authString = user + ":" + password;
+        byte[] authEncBytes = Base64.encode(authString);
+        String authStringEnc = new String(authEncBytes);
+        authString = "Basic " + authStringEnc;
 
-            log.info("RESPONSE...............");
-            log.info("HTTP response code: " + code);
-            log.info("HTTP response message: " + message);
-            log.info("");
+        ClientResponse response =
+            webResource.header("Authorization", authString).accept("UTF-8").type("application/xml").post(
+                ClientResponse.class, xmlRequest);
 
-            HttpResponse r = new HttpResponse();
-            r.code = code;
-            r.message = message;
-            return r;
+        int code = response.getStatus();
+        String message = null;
 
-        } catch (Exception e) {
-            log.error("Error sending the request: ", e);
+        log.info("RESPONSE...............");
+        log.info("HTTP response code: " + code);
+        log.info("HTTP response message: " + message);
+        log.info("");
 
-            HttpResponse r = new HttpResponse();
-            r.code = HttpURLConnection.HTTP_INTERNAL_ERROR;
-            r.message = e.getMessage();
-            return r;
-        }
-    }
+        HttpResponse r = new HttpResponse();
+        r.code = code;
+        r.message = message;
+        return r;
 
-    private static class HttpResponse {
+    } catch (Exception e) {
+        log.error("Error sending the request: ", e);
 
-        public int code;
-        public String message;
+        HttpResponse r = new HttpResponse();
+        r.code = HttpURLConnection.HTTP_INTERNAL_ERROR;
+        r.message = e.getMessage();
+        return r;
     }
+}
 
-    private ConfigStatus setResponseStatus(SvcLogicContext ctx, HttpResponse r) {
-        ctx.setAttribute("error-code", String.valueOf(r.code));
-        ctx.setAttribute("error-message", r.message);
+private static class HttpResponse {
 
-        return r.code > 299 ? ConfigStatus.FAILURE : ConfigStatus.SUCCESS;
-    }
+    public int code;
 
-    private String getStringBetweenQuotes(String string) {
-        log.debug("string=" + string);
-        String retString;
-        int start = string.indexOf('\"');
-        int end = string.lastIndexOf('\"');
-        retString = string.substring(start + 1, end);
-        log.debug("retString=" + retString);
-        return retString;
-    }
+    public String message;
+}
 
-    public static String _readFile(String fileName) {
-        StringBuilder builder = new StringBuilder();
-        String line;
-        try {
-            BufferedReader in = new BufferedReader(new FileReader(fileName));
-            while ((line = in.readLine()) != null) {
-                builder.append(line).append('\n');
-            }
-            in.close();
-        } catch (IOException e) {
-            log.error("Caught an IOException in method readFile()", e);
+private ConfigStatus setResponseStatus(SvcLogicContext ctx, HttpResponse r) {
+    ctx.setAttribute("error-code", String.valueOf(r.code));
+    ctx.setAttribute("error-message", r.message);
+
+    return r.code > 299 ? ConfigStatus.FAILURE : ConfigStatus.SUCCESS;
+}
+
+private String getStringBetweenQuotes(String string) {
+    String fnName = "ConfigComponentAdaptor.getStringBetweenQuotes";
+    DebugLog.printAriDebug(fnName, "string=" + string);
+    String retString = null;
+    int start = string.indexOf("\"");
+    int end = string.lastIndexOf("\"");
+    retString = string.substring(start + 1, end);
+    DebugLog.printAriDebug(fnName, "retString=" + retString);
+    return (retString);
+}
+
+public static String _readFile(String fileName) {
+    StringBuffer strBuff = new StringBuffer();
+    String line;
+    try (BufferedReader in = new BufferedReader(new FileReader(fileName))) {
+        while ((line = in.readLine()) != null) {
+            strBuff.append(line + "\n");
         }
-        return builder.toString();
+    } catch (IOException e) {
+        System.out.println("Caught an IOException in method readFile(): e=" + e.toString());
     }
+    return (strBuff.toString());
+}
 
-    private String trimResponse(String response) {
-        StringTokenizer line = new StringTokenizer(response, "\n");
-        StringBuilder builder = new StringBuilder();
-        boolean captureText = false;
-        while (line.hasMoreTokens()) {
-            String token = line.nextToken();
-            if (token.contains("<configuration xmlns=")) {
-                captureText = true;
-            }
-            if (captureText) {
-                builder.append(token).append('\n');
-            }
-            if (token.contains("</configuration>")) {
-                captureText = false;
-            }
+private String trimResponse(String response) {
+    StringTokenizer line = new StringTokenizer(response, "\n");
+    StringBuffer sb = new StringBuffer();
+    boolean captureText = false;
+    while (line.hasMoreTokens()) {
+        String token = line.nextToken();
+        if (token.indexOf("<configuration xmlns=") != -1) {
+            captureText = true;
+        }
+        if (captureText) {
+            sb.append(token + "\n");
+        }
+        if (token.indexOf("</configuration>") != -1) {
+            captureText = false;
         }
-        return builder.toString();
-    }
-
-    public static void main(String[] args) throws Exception {
-        Properties props = null;
-        log.info("*************************Hello*****************************");
-        ConfigComponentAdaptor cca = new ConfigComponentAdaptor(props);
-        String getConfigTemplate = _readFile("/home/userID/data/Get_config_template");
-        String key = "GetCliRunningConfig";
-        Map<String, String> parameters = new HashMap<>();
-        parameters.put(HOST_IP_PARAM, "000.00.000.00");
-        parameters.put(USERNAME_PARAM, "root");
-        parameters.put(PASSWORD_PARAM, "!bootstrap");
-        parameters.put(PORT_NUMBER_PARAM, "22");
-        parameters.put(GET_CONFIG_TEMPLATE_PARAM, getConfigTemplate);
-        SvcLogicContext ctx = null;
-        log.info("*************************TRACE 1*****************************");
-        cca.configure(key, parameters, ctx);
     }
+    return (sb.toString());
+}
+
+public static void main(String args[]) throws Exception {
+    Properties props = null;
+    System.out.println("*************************Hello*****************************");
+    ConfigComponentAdaptor cca = new ConfigComponentAdaptor(props);
+    String Get_config_template = _readFile("/home/userID/data/Get_config_template");
+    String Download_config_template = _readFile("/home/userID/data/Download_config_template_2");
+    String key = "GetCliRunningConfig";
+    Map<String, String> parameters = new HashMap();
+    parameters.put("Host_ip_address", "000.00.000.00");
+    parameters.put("User_name", "root");
+    parameters.put("Password", "!bootstrap");
+    parameters.put("Port_number", "22");
+    parameters.put("Get_config_template", Get_config_template);
+
+    SvcLogicContext ctx = null;
+    System.out.println("*************************TRACE 1*****************************");
+    cca.configure(key, parameters, ctx);
+}
 }
 
--- /dev/null
+/*-\r
+ * ============LICENSE_START=======================================================\r
+ * ONAP : APPC\r
+ * ================================================================================\r
+ * Copyright (C) 2017-2018 AT&T Intellectual Property. All rights reserved.\r
+ * ================================================================================\r
+ * Copyright (C) 2017 Amdocs\r
+ * =============================================================================\r
+ * Licensed under the Apache License, Version 2.0 (the "License");\r
+ * you may not use this file except in compliance with the License.\r
+ * You may obtain a copy of the License at\r
+ *\r
+ *      http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * Unless required by applicable law or agreed to in writing, software\r
+ * distributed under the License is distributed on an "AS IS" BASIS,\r
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+ * See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ *\r
+ * ============LICENSE_END=========================================================\r
+ */\r
+\r
+package org.onap.appc.ccadaptor;\r
+\r
+import java.io.BufferedWriter;\r
+import java.io.File;\r
+import java.io.FileWriter;\r
+import java.io.IOException;\r
+import java.io.PrintWriter;\r
+import java.io.StringWriter;\r
+import java.text.DateFormat;\r
+import java.text.SimpleDateFormat;\r
+import java.util.Date;\r
+\r
+\r
+public class DebugLog {\r
+\r
+    private static String fileName = "/tmp/rt.log";\r
+\r
+    public static void main(String args[]) {\r
+        DebugLog debugLog = new DebugLog();\r
+        debugLog.printAriDebug("DebugLog", "The Message");\r
+    }\r
+\r
+    public static void printAriDebug(String fn, String messg) {\r
+        String logMessg = getDateTime() + " " + fn + " " + messg;\r
+        appendToFile(logMessg + "\n");\r
+\r
+    }\r
+\r
+    public static void printRTAriDebug(String fn, String messg) {\r
+        // System.out.println (getDateTime() +" " +fn +" " + messg);\r
+        String logMessg = getDateTime() + " " + fn + " " + messg;\r
+        appendToFile(logMessg + "\n");\r
+    }\r
+\r
+    public static String getDateTime() {\r
+        DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");\r
+        // DateFormat dateFormat = new SimpleDateFormat("HH:mm:ss");\r
+        Date date = new Date();\r
+        return dateFormat.format(date);\r
+    }\r
+\r
+    public static void appendToFile(String dataToWrite) {\r
+        String fn = "DebugLog.appendToFile";\r
+        try {\r
+            // First check to see if a file 'fileName' exist, if it does\r
+            // write to it. If it does not exist, don't write to it.\r
+            File tmpFile = new File(fileName);\r
+            if (tmpFile.exists()) {\r
+                BufferedWriter out = new BufferedWriter(new FileWriter(fileName, true));\r
+                out.write(dataToWrite);\r
+                out.close();\r
+            }\r
+        } catch (IOException e) {\r
+            DebugLog.printRTAriDebug(fn, "writeToFile() exception: " + e);\r
+            //System.err.println("writeToFile() exception: " + e);\r
+            e.printStackTrace();\r
+        }\r
+    }\r
+\r
+    public void outputStackTrace(Exception e) {\r
+        String fn = "DebugLog.outputStackTrace";\r
+        StringWriter sw = new StringWriter();\r
+        e.printStackTrace(new PrintWriter(sw));\r
+        String stackTrace = sw.toString();\r
+        DebugLog.printRTAriDebug(fn, "Stack trace::: " + stackTrace);\r
+    }\r
+\r
+    public static String getStackTraceString(Exception e) {\r
+        String fn = "DebugLog.outputStackTrace";\r
+        StringWriter sw = new StringWriter();\r
+        e.printStackTrace(new PrintWriter(sw));\r
+        String stackTrace = sw.toString();\r
+        return (stackTrace);\r
+    }\r
+\r
+}\r
+\r
 
  * ============LICENSE_START=======================================================
  * ONAP : APPC
  * ================================================================================
- * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * Copyright (C) 2017-2018 AT&T Intellectual Property. All rights reserved.
  * ================================================================================
  * Copyright (C) 2017 Amdocs
  * =============================================================================
  * See the License for the specific language governing permissions and
  * limitations under the License.
  *
- * ECOMP is a trademark and service mark of AT&T Intellectual Property.
  * ============LICENSE_END=========================================================
  */
 
 
 public class SshJcraftWrapper {
 
-    private static final EELFLogger log = EELFManager.getInstance().getLogger(SshJcraftWrapper.class);
-    static final int DEFAULT_PORT = 22;
-    static final String EOL = "\n";
-    static final String CHANNEL_SHELL_TYPE = "shell";
-    static final String CHANNEL_SUBSYSTEM_TYPE = "subsystem";
-    static final String CHANNEL_SFTP_TYPE = "sftp";
-    private static final String TERMINAL_BASIC_MODE = "vt102";
-    static final String STRICT_HOST_CHECK_KEY = "StrictHostKeyChecking";
-    static final String STRICT_HOST_CHECK_VALUE = "no";
-    static final String DELIMITERS_SEPARATOR = "|";
-
+    InputStream inputStream = null;
+    OutputStream outputStream = null;
+    DebugLog debugLog = new DebugLog();
+    private String debugLogFileName = "/tmp/sshJcraftWrapperDebug";
     private TelnetListener listener = null;
     private String routerLogFileName = null;
+    private String host = null;
+    private String RouterName = null;
+    private int BUFFER_SIZE = 512000;
+    char[] charBuffer = new char[BUFFER_SIZE];
+    // private int BUFFER_SIZE = 4000000;
+    private DataInputStream dis = null;
     private BufferedReader reader = null;
     private BufferedWriter out = null;
-    private File tmpFile = null;
+    private File _tmpFile = null;
     private JSch jsch = null;
     private Session session = null;
     private Channel channel = null;
+    private String tId = "";
     private String aggregatedReceivedString = "";
+    private File extraDebugFile = new File("/tmp/sshJcraftWrapperDEBUG");
     private String routerCmdType = "XML";
     private String routerFileName = null;
     private File jcraftReadSwConfigFileFromDisk = new File("/tmp/jcraftReadSwConfigFileFromDisk");
     private String equipNameCode = null;
-    private String routerName = null;
     private String hostName = null;
     private String userName = null;
     private String passWord = null;
-    private int readIntervalMs = 500;
-    private int readBufferSizeBytes = 512_000;
-    private int charsChunkSize = 300_000;
-    private int sessionTimeoutMs = 9_000;
-    private char[] charBuffer;
+    private StringBuffer charactersFromBufferFlush = new StringBuffer();
     private Runtime runtime = Runtime.getRuntime();
+    private DebugLog dbLog = new DebugLog();
 
-    public SshJcraftWrapper() {
-        this.jsch = new JSch();
-        this.charBuffer = new char[readBufferSizeBytes];
-    }
-
-    SshJcraftWrapper(JSch jsch, int readIntervalMs, int readBufferSizeBytes) {
-        this.readIntervalMs = readIntervalMs;
-        this.jsch = jsch;
-        this.readBufferSizeBytes = readBufferSizeBytes;
-        this.charBuffer = new char[readBufferSizeBytes];
+    public void SshJcraftWrapper() {
+        String fn = "SshJcraftWrapper.SshJcraftWrapper";
+        debugLog.printRTAriDebug(fn, "SshJcraftWrapper has been instantated");
+        routerLogFileName = "/tmp/" + host;
+        this.host = host;
     }
 
     public void connect(String hostname, String username, String password, String prompt, int timeOut)
         throws IOException {
-        log.debug("Attempting to connect to {0} username={1} prompt='{2}' timeOut={3}",
-            hostname, username, prompt, timeOut);
-        routerName = hostname;
+        String fn = "SshJcraftWrapper.connect";
+        jsch = new JSch();
+        debugLog.printRTAriDebug(fn,
+            "Attempting to connect to " + hostname + " username=" + username + " prompt='"
+                + prompt + "' timeOut=" + timeOut);
+        debugLog.printRTAriDebug(fn, "Trace A");
+        RouterName = hostname;
         hostName = hostname;
         userName = username;
         passWord = password;
         try {
-            channel = provideSessionChannel(CHANNEL_SHELL_TYPE, DEFAULT_PORT, timeOut);
-            ((ChannelShell) channel).setPtyType(TERMINAL_BASIC_MODE);
-            reader = new BufferedReader(new InputStreamReader(new DataInputStream(channel.getInputStream())),
-                readBufferSizeBytes);
+            session = jsch.getSession(username, hostname, 22);
+            UserInfo ui = new MyUserInfo();
+            session.setPassword(password);
+            session.setUserInfo(ui);
+            session.connect(timeOut);
+            channel = session.openChannel("shell");
+            session.setServerAliveCountMax(
+                0); // If this is not set to '0', then socket timeout on all reads will not work!!!!
+            ((ChannelShell) channel).setPtyType("vt102");
+            inputStream = channel.getInputStream();
+            dis = new DataInputStream(inputStream);
+            reader = new BufferedReader(new InputStreamReader(dis), BUFFER_SIZE);
             channel.connect();
-            log.info("Successfully connected. Flushing input buffer.");
+            debugLog.printRTAriDebug(fn, "Successfully connected.");
+            debugLog.printRTAriDebug(fn, "Flushing input buffer");
             try {
                 receiveUntil(prompt, 3000, "No cmd was sent, just waiting");
-            } catch (IOException e) {
-                log.warn("Caught an Exception: Nothing to flush out.", e);
+            } catch (Exception e) {
+                debugLog.printRTAriDebug(fn, "Caught an Exception: Nothing to flush out.");
             }
-        } catch (JSchException e) {
-            log.error(Msg.CANNOT_ESTABLISH_CONNECTION, hostname, String.valueOf(DEFAULT_PORT), username);
+        } catch (Exception e) {
+            debugLog.printRTAriDebug(fn, "Caught an Exception. e=" + e);
+            // dbLog.storeData("ErrorMsg= Exception trying to connect to "+hostname +" "+e);
             throw new IOException(e.toString());
         }
     }
     // User specifies the port number.
     public void connect(String hostname, String username, String password, String prompt, int timeOut, int portNum)
         throws IOException {
-        log.debug("Attempting to connect to {0} username={1} prompt='{2}' timeOut={3} portNum={4}",
-            hostname, username, prompt, timeOut, portNum);
-        routerName = hostname;
+        String fn = "SshJcraftWrapper.connect";
+        debugLog.printRTAriDebug(fn,
+            ":Attempting to connect to " + hostname + " username=" + username + " prompt='"
+                + prompt + "' timeOut=" + timeOut + " portNum=" + portNum);
+        RouterName = hostname;
         hostName = hostname;
         userName = username;
         passWord = password;
+        RouterName = hostname;
+        jsch = new JSch();
         try {
-            channel = provideSessionChannel(CHANNEL_SHELL_TYPE, portNum, timeOut);
-            ((ChannelShell) channel).setPtyType(TERMINAL_BASIC_MODE);
-            reader = new BufferedReader(new InputStreamReader(new DataInputStream(channel.getInputStream())),
-                readBufferSizeBytes);
+            session = jsch.getSession(username, hostname, portNum);
+            UserInfo ui = new MyUserInfo();
+            session.setPassword(password);
+            session.setUserInfo(ui);
+            session.setConfig("StrictHostKeyChecking", "no");
+            debugLog.printRTAriDebug(fn, ":StrictHostKeyChecking set to 'no'");
+
+            session.connect(timeOut);
+            session.setServerAliveCountMax(
+                0); // If this is not set to '0', then socket timeout on all reads will not work!!!!
+            channel = session.openChannel("shell");
+            ((ChannelShell) channel).setPtyType("vt102");
+            inputStream = channel.getInputStream();
+            dis = new DataInputStream(inputStream);
+            reader = new BufferedReader(new InputStreamReader(dis), BUFFER_SIZE);
             channel.connect();
-            log.info("Successfully connected. Flushing input buffer.");
+            debugLog.printRTAriDebug(fn, ":Successfully connected.");
+            debugLog.printRTAriDebug(fn, ":Flushing input buffer");
             try {
-                if ("]]>]]>".equals(prompt)) {
+                if (prompt.equals("]]>]]>")) {
                     receiveUntil("]]>]]>", 10000, "No cmd was sent, just waiting");
                 } else {
                     receiveUntil(":~#", 5000, "No cmd was sent, just waiting");
                 }
-            } catch (IOException e) {
-                log.warn("Caught an Exception: Nothing to flush out.", e);
+            } catch (Exception e) {
+                debugLog.printRTAriDebug(fn, "Caught an Exception::: Nothing to flush out.");
             }
-        } catch (JSchException e) {
-            log.error(Msg.CANNOT_ESTABLISH_CONNECTION, hostname, String.valueOf(portNum), username);
+        } catch (Exception e) {
+            debugLog.printRTAriDebug(fn, ":Caught an Exception. e=" + e);
+            dbLog.outputStackTrace(e);
+
+            // dbLog.storeData("ErrorMsg= Exception trying to connect to "+hostname +" "+e);
             throw new IOException(e.toString());
         }
     }
 
 
-    public String receiveUntil(String delimeters, int timeout, String cmdThatWasSent) throws IOException {
-        checkConnection();
+    public String receiveUntil(String delimeters, int timeout, String cmdThatWasSent)
+        throws TimedOutException, IOException {
+        String fn = "SshJcraftWrapper.receiveUntil";
         boolean match = false;
         boolean cliPromptCmd = false;
-        StringBuilder sb = new StringBuilder();
-        StringBuilder sbReceive = new StringBuilder();
-        log.debug("delimeters='{0}' timeout={1} cmdThatWasSent='{2}'", delimeters, timeout, cmdThatWasSent);
+        StringBuffer sb2 = new StringBuffer();
+        StringBuffer sbReceive = new StringBuffer();
+        debugLog.printRTAriDebug(fn,
+            "delimeters='" + delimeters + "' timeout=" + timeout + " cmdThatWasSent='" + cmdThatWasSent + "'");
+        appendToFile(debugLogFileName,
+            fn + " delimeters='" + delimeters + "' timeout=" + timeout + " cmdThatWasSent='" + cmdThatWasSent + "'\n");
+        String CmdThatWasSent = removeWhiteSpaceAndNewLineCharactersAroundString(cmdThatWasSent);
         int readCounts = 0;
         aggregatedReceivedString = "";
         FileWriter fileWriter = null;
             session.setTimeout(timeout);  // This is the socket timeout value.
             while (!match) {
                 if (new Date().getTime() > deadline) {
-                    String formattedCmd = removeWhiteSpaceAndNewLineCharactersAroundString(cmdThatWasSent);
-                    log.error(Msg.SSH_CONNECTION_TIMEOUT, routerName, formattedCmd);
-                    throw new TimedOutException("Routine has timed out");
+                    debugLog.printRTAriDebug(fn,
+                        "Throwing a TimedOutException: time in routine has exceed our deadline: RouterName:"
+                            + RouterName + " CmdThatWasSent=" + CmdThatWasSent);
+                    throw new TimedOutException("Timeout: time in routine has exceed our deadline");
                 }
-                sleep(readIntervalMs);
-                int len = reader.read(charBuffer, 0, readBufferSizeBytes);
-                log.trace("After reader. Read command len={0}", len);
+                try {
+                    Thread.sleep(500);
+                } catch (java.lang.InterruptedException ee) {
+                    boolean ignore = true;
+                }
+                int len = reader.read(charBuffer, 0, BUFFER_SIZE);
+                appendToFile(debugLogFileName, fn + " After reader.read cmd: len=" + len + "\n");
                 if (len <= 0) {
-                    log.error(Msg.SSH_CONNECTION_TIMEOUT, routerName, cmdThatWasSent);
-                    throw new TimedOutException("Received a SocketTimeoutException router=" + routerName);
+                    debugLog.printRTAriDebug(fn,
+                        "Reader read " + len + " bytes. Looks like we timed out, router=" + RouterName);
+                    throw new TimedOutException("Received a SocketTimeoutException router=" + RouterName);
                 }
                 if (!cliPromptCmd) {
                     if (cmdThatWasSent.indexOf("IOS_XR_uploadedSwConfigCmd") != -1) {
                             // This is a IOS XR sw config file. We will write it to the disk.
                             timeout = timeout * 2;
                             deadline = new Date().getTime() + timeout;
-                            log.debug("IOS XR upload for software config: timeout={0}", timeout);
+                            debugLog.printRTAriDebug(fn, "IOS XR upload for software config: timeout=" + timeout);
                             StringTokenizer st = new StringTokenizer(cmdThatWasSent);
                             st.nextToken();
                             routerFileName = st.nextToken();
                             fileWriter = new FileWriter(routerFileName);
                             out = new BufferedWriter(fileWriter);
-                            routerLogFileName = "/tmp/" + routerName;
-                            tmpFile = new File(routerLogFileName);
-                            log.debug("Prepared for writing swConfigFile to disk, routerFileName=" + routerFileName);
+                            routerLogFileName = "/tmp/" + RouterName;
+                            _tmpFile = new File(routerLogFileName);
+                            debugLog.printRTAriDebug(fn,
+                                "Will write the swConfigFile to disk, routerFileName=" + routerFileName);
                         }
+                        int c;
                         out.write(charBuffer, 0, len);
                         out.flush();
-                        log.debug("{0} bytes has been written to the disk", len);
-                        if (tmpFile.exists()) {
+                        appendToFile(debugLogFileName, fn + " Wrote " + len + " bytes to the disk\n");
+                        if (_tmpFile.exists()) {
                             appendToRouterFile(routerLogFileName, len);
                         }
                         match = checkIfReceivedStringMatchesDelimeter(len, "\nXML>");
-                        if (match) {
+                        if (match == true) {
                             out.flush();
                             out.close();
                             out = null;
                         }
                     } else {
                         readCounts++;
-                        log.debug("Reader read {0} of data within {1} read iteration", len, readCounts);
+                        appendToFile(debugLogFileName,
+                            fn + " readCounts=" + readCounts + "  Reader read " + len + " of data\n");
                         int c;
-                        sb.setLength(0);
+                        sb2.setLength(0);
                         for (int i = 0; i < len; i++) {
                             c = charBuffer[i];
                             if ((c != 7) && (c != 13) && (c != 0) && (c != 27)) {
-                                sbReceive.append(charBuffer[i]);
-                                sb.append(charBuffer[i]);
+                                sbReceive.append((char) charBuffer[i]);
+                                sb2.append((char) charBuffer[i]);
                             }
                         }
-                        appendToRouterFile("/tmp/" + routerName, len);
+                        appendToRouterFile("/tmp/" + RouterName, len);
                         if (listener != null) {
-                            listener.receivedString(sb.toString());
+                            listener.receivedString(sb2.toString());
                         }
-                        match = checkIfReceivedStringMatchesDelimeter(delimeters, sb.toString(), cmdThatWasSent);
-                        if (match) {
-                            log.trace("Match was true, breaking the loop.");
+
+                        appendToFile(debugLogFileName, fn + " Trace 1\n");
+                        match = checkIfReceivedStringMatchesDelimeter(delimeters, sb2.toString(), cmdThatWasSent);
+                        appendToFile(debugLogFileName, fn + " Trace 2\n");
+                        if (match == true) {
+                            appendToFile(debugLogFileName, fn + " Match was true, breaking...\n");
                             break;
                         }
                     }
                 } else {
-                    log.trace("cliPromptCmd");
-                    sb.setLength(0);
+                    debugLog.printRTAriDebug(fn, "cliPromptCmd, Trace 2");
+                    sb2.setLength(0);
                     for (int i = 0; i < len; i++) {
-                        sbReceive.append(charBuffer[i]);
-                        sb.append(charBuffer[i]);
+                        sbReceive.append((char) charBuffer[i]);
+                        sb2.append((char) charBuffer[i]);
                     }
-                    appendToRouterFile("/tmp/" + routerName, sb);
+                    appendToRouterFile("/tmp/" + RouterName, sb2);
                     if (listener != null) {
-                        listener.receivedString(sb.toString());
+                        listener.receivedString(sb2.toString());
                     }
-                    log.debug("sb2={0}  delimiters={1}", sb.toString(), delimeters);
-                    if (sb.toString().contains("\nariPrompt>")) {
-                        log.debug("Found ari prompt");
+                    debugLog.printRTAriDebug(fn, "sb2='" + sb2.toString() + "'  delimeters='" + delimeters + "'");
+                    if (sb2.toString().indexOf("\nariPrompt>") != -1) {
+                        debugLog.printRTAriDebug(fn, "Found our prompt");
+                        match = true;
                         break;
                     }
                 }
             }
-        } catch (JSchException | IOException e) {
-            log.error(Msg.SSH_DATA_EXCEPTION, e.getMessage());
-            throw new TimedOutException(e.getMessage());
+        } catch (JSchException e) {
+            debugLog.printRTAriDebug(fn, "Caught an JSchException e=" + e.toString());
+            dbLog.outputStackTrace(e);
+            throw new TimedOutException(e.toString());
+        } catch (IOException ee) {
+            debugLog.printRTAriDebug(fn, "Caught an IOException: ee=" + ee.toString());
+            dbLog.outputStackTrace(ee);
+            throw new TimedOutException(ee.toString());
         } finally {
             try {
                 if (fileWriter != null) {
                     fileWriter.close();
                 }
-            } catch (IOException ex) {
-                log.warn("Failed to close fileWriter output stream", ex);
-            }
-        }
-        return stripOffCmdFromRouterResponse(sbReceive.toString());
-    }
-
-    private void sleep(long timeoutMs) {
-        try {
-            TimeUnit.MILLISECONDS.sleep(timeoutMs);
-        } catch (java.lang.InterruptedException ee) {
-            Thread.currentThread().interrupt();
-        }
-    }
-
-    private void checkConnection() {
-        try {
-            if (!isConnected() || !reader.ready()) {
-                throw new IllegalStateException("Connection not established. Cannot perform action.");
+            } catch(IOException ex) {
+                debugLog.printRTAriDebug(fn, "Failed to close fileWriter output stream: ex=" + ex);
             }
-        } catch (IOException e) {
-            throw new IllegalStateException("Reader stream is closed. Cannot perform action.", e);
         }
+        String result = stripOffCmdFromRouterResponse(sbReceive.toString());
+        debugLog.printRTAriDebug(fn, "Leaving method successfully");
+        return result;
     }
 
     public boolean checkIfReceivedStringMatchesDelimeter(String delimeters, String receivedString,
         String cmdThatWasSent) {
         // The delimeters are in a '|' seperated string. Return true on the first match.
-        log.debug("Entered checkIfReceivedStringMatchesDelimeter: delimeters={0} cmdThatWasSent={1} receivedString={2}",
-            delimeters, cmdThatWasSent, receivedString);
-        StringTokenizer st = new StringTokenizer(delimeters, DELIMITERS_SEPARATOR);
+        String fn = "SshJcraftWrapper.checkIfReceivedStringMatchesDelimeter";
+        appendToFile(debugLogFileName,
+            fn + " Entered:  delimeters='" + delimeters + " cmdThatWasSent='" + cmdThatWasSent + "' receivedString='"
+                + receivedString + "'\n");
+        StringTokenizer st = new StringTokenizer(delimeters, "|");
 
-        if ((delimeters.contains("#$")) || ("CLI".equals(routerCmdType)))  // This would be an IOS XR, CLI command.
+        if ((delimeters.indexOf("#$") != -1) || (routerCmdType.equals("CLI")))  // This would be an IOS XR, CLI command.
         {
-            int x = receivedString.lastIndexOf('#');
+            int x = receivedString.lastIndexOf("#");
             int y = receivedString.length() - 1;
-            log.debug("IOS XR, CLI command");
-            if (log.isTraceEnabled()) {
-                log.trace("cmdThatWasSent={0}, lastIndexOf hash delimiter={1}, maxIndexNum={2}", cmdThatWasSent, x, y);
+            appendToFile(debugLogFileName, fn + " IOS XR, CLI command\n");
+            if (extraDebugFile.exists()) {
+                appendToFile(debugLogFileName,
+                    fn + " :::cmdThatWasSent='" + cmdThatWasSent + "'  x=" + x + " y=" + y + "\n");
             }
             return (x != -1) && (y == x);
         }
-        if (cmdThatWasSent.contains("show config")) {
-            log.trace("In the block for 'show config'");
+        if (cmdThatWasSent.indexOf("show config") != -1) {
+            appendToFile(debugLogFileName, fn + "In the block for 'show config'\n");
             while (st.hasMoreTokens()) {
                 String delimeter = st.nextToken();
                 // Make sure we don't get faked out by a response of " #".
                 // LAAR2#
                 int x = receivedString.lastIndexOf(delimeter);
                 if ((receivedString.lastIndexOf(delimeter) != -1) && (receivedString.lastIndexOf(" #") != x - 1)) {
-                    log.debug("receivedString={0}", receivedString);
-                    log.trace("Found ending for 'show config' command, exiting.");
-                    return true;
+                    appendToFile(debugLogFileName, fn + "receivedString=\n'" + receivedString + "'\n");
+                    appendToFile(debugLogFileName,
+                        fn + "Returning true for the 'show config' command. We found our real delmeter. \n\n");
+                    return (true);
                 }
             }
         } else {
             aggregatedReceivedString = aggregatedReceivedString + receivedString;
-            appendToFile("/tmp/aggregatedReceivedString.debug", aggregatedReceivedString);
+            _appendToFile("/tmp/aggregatedReceivedString.debug", aggregatedReceivedString);
 
-            log.debug("receivedString={0}", receivedString);
             while (st.hasMoreTokens()) {
                 String delimeter = st.nextToken();
-                log.debug("Looking for an delimiter of:{0}", delimeter);
+                appendToFile(debugLogFileName, fn + " Looking for an delimeter of:'" + delimeter + "'\n");
+                appendToFile(debugLogFileName, fn + " receivedString='" + receivedString);
                 if (aggregatedReceivedString.indexOf(delimeter) != -1) {
-                    log.debug("Found delimiter={0}, exiting", delimeter);
+                    debugLog.printRTAriDebug(fn, "Found our delimeter, which was: '" + delimeter + "'");
                     aggregatedReceivedString = "";
-                    return true;
+                    return (true);
                 }
             }
         }
-        return false;
+        return (false);
     }
 
     public boolean checkIfReceivedStringMatchesDelimeter(int len, String delimeter) {
+        String fnName = "SshJcraftWrapper.checkIfReceivedStringMatchesDelimeter:::";
         int x;
         int c;
         String str = StringUtils.EMPTY;
 
         if (jcraftReadSwConfigFileFromDisk()) {
-            log.trace("jcraftReadSwConfigFileFromDisk block");
+            DebugLog.printAriDebug(fnName, "jcraftReadSwConfigFileFromDisk block");
             File fileName = new File(routerFileName);
-            log.debug("jcraftReadSwConfigFileFromDisk::: Will read the tail end of the file from the disk");
+            appendToFile(debugLogFileName,
+                fnName + " jcraftReadSwConfigFileFromDisk::: Will read the tail end of the file from the disk");
             try {
                 str = getLastFewLinesOfFile(fileName, 3);
             } catch (IOException e) {
-                log.warn("IOException occurred, while reading file=" + fileName, e);
+                DebugLog.printAriDebug(fnName, "Caught an Exception, e=" + e);
+                dbLog.outputStackTrace(e);
+                e.printStackTrace();
             }
         } else {
+            // DebugLog.printAriDebug(fnName, "TRACE 1: ******************************");
             // When looking at the end of the charBuffer, don't include any linefeeds or spaces. We only want to make the smallest string possible.
             for (x = len - 1; x >= 0; x--) {
                 c = charBuffer[x];
+                if (extraDebugFile.exists()) {
+                    appendToFile(debugLogFileName, fnName + " x=" + x + " c=" + c + "\n");
+                }
                 if ((c != 10) && (c != 32)) // Not a line feed nor a space.
                 {
                     break;
                 }
             }
             if ((x + 1 - 13) >= 0) {
-                str = new String(charBuffer, x + 1 - 13, 13);
-                log.debug("str:{0}", str);
+                str = new String(charBuffer, (x + 1 - 13), 13);
+                appendToFile(debugLogFileName, fnName + " str:'" + str + "'\n");
             } else {
                 File fileName = new File(routerFileName);
-                log.debug("Will read the tail end of the file from the disk, x={0} len={1} str={2} routerFileName={3}",
-                    x, len, str, routerFileName);
+                appendToFile(debugLogFileName,
+                    fnName + " Will read the tail end of the file from the disk, x=" + x + " len=" + len + " str::'"
+                        + str + "' routerFileName='" + routerFileName + "'\n");
+                DebugLog.printAriDebug(fnName,
+                    "Will read the tail end of the file from the disk, x=" + x + " len=" + len + " str::'" + str
+                        + "' routerFileName='" + routerFileName + "'");
                 try {
                     str = getLastFewLinesOfFile(fileName, 3);
                 } catch (IOException e) {
-                    log.warn("IOException occurred, while reading file=" + fileName, e);
+                    DebugLog.printAriDebug(fnName, "Caught an Exception, e=" + e);
+                    dbLog.outputStackTrace(e);
+                    e.printStackTrace();
                 }
             }
         }
 
-        log.debug("Parsed string was str='{0}', searched delimiter was {1}");
-        return str.contains(delimeter);
-    }
-
-    public void closeConnection() {
-        log.info("Closing connection");
-        try {
-            if (reader != null) {
-                reader.close();
-            }
-        } catch (IOException ex) {
-            log.warn("Could not close reader instance", ex);
-        } finally {
-            if (isConnected()) {
-                channel.disconnect();
-                session.disconnect();
-                channel = null;
-                session = null;
-            }
-            reader = null;
+        if (str.indexOf(delimeter) != -1) {
+            DebugLog.printAriDebug(fnName, "str in break is:'" + str + "'" + " delimeter='" + delimeter + "'");
+            appendToFile(debugLogFileName,
+                fnName + " str in break is:'" + str + " delimeter='" + delimeter + "'" + "'\n");
+            return (true);
+        } else {
+            appendToFile(debugLogFileName, fnName + " Returning false");
+            return (false);
         }
+
     }
 
-    boolean isConnected() {
-        return channel != null && session != null;
+    public void closeConnection() {
+        String fn = "SshJcraftWrapper.closeConnection";
+        debugLog.printRTAriDebug(fn, "Executing the closeConnection....");
+        inputStream = null;
+        outputStream = null;
+        dis = null;
+        charBuffer = null;
+        session.disconnect();
+        session = null;
     }
 
     public void send(String cmd) throws IOException {
-        try (OutputStream os = channel.getOutputStream(); DataOutputStream dos = new DataOutputStream(os)) {
-            String command = enhanceCommandWithEOL(cmd);
-            int length = command.length();
-            log.debug("Sending ssh command: length={0}, payload: {1}", command.length(), command);
-            if(isCmdLengthEnoughToSendInChunks(length, charsChunkSize)) {
-                sendSshCommandInChunks(command, dos);
+        String fn = "SshJcraftWrapper.send";
+        OutputStream out = channel.getOutputStream();
+        DataOutputStream dos = new DataOutputStream(out);
+
+        if ((cmd.charAt(cmd.length() - 1) != '\n') && (cmd.charAt(cmd.length() - 1) != '\r')) {
+            cmd += "\n";
+        }
+        int length = cmd.length();
+        int i = -1;
+        int nchars = 300000;
+        int ncharsTotalSent = 0;
+        int ncharsSent = 0;
+
+        appendToFile(debugLogFileName, fn + ": Sending: '" + cmd);
+        // debugLog.printRTAriDebug (fn, "cmd = "+cmd);
+        debugLog.printRTAriDebug(fn, "Length of cmd is:" + length); // 2,937,706
+        try {
+            if (length > 600000) {
+                int timeout = 9000;
+                for (i = 0; i < length; i += nchars) {
+                    String Cmd = cmd.substring(i, Math.min(length, i + nchars));
+                    ncharsSent = Cmd.length();
+                    ncharsTotalSent = ncharsTotalSent + Cmd.length();
+                    debugLog.printRTAriDebug(fn, "i=" + i + " Sending Cmd: ncharsSent=" + ncharsSent);
+                    dos.writeBytes(Cmd);
+                    dos.flush();
+                    try {
+                        debugLog.printRTAriDebug(fn, ":::i=" + i + " length=" + length);
+                        if (ncharsSent < length) {
+                            receiveUntilBufferFlush(ncharsSent, timeout, "buffer flush  i=" + i);
+                        } else {
+                            debugLog.printRTAriDebug(fn, "i=" + i + " No Waiting this time....");
+                            dos.flush();
+                        }
+                    } catch (Exception e) {
+                        debugLog.printRTAriDebug(fn, "Caught an Exception: Nothing to flush out.");
+                    }
+                }
             } else {
-                sendSshCommand(command, dos);
+                debugLog.printRTAriDebug(fn, "Before executing the dos.writeBytes");
+                dos.writeBytes(cmd);
             }
+            dos.flush();
+            debugLog.printRTAriDebug(fn, "Leaving method");
+            appendToFile(debugLogFileName, fn + ": Leaving method\n");
         } catch (IOException e) {
-            log.error(Msg.SSH_DATA_EXCEPTION, e.getMessage());
-            throw e;
+            debugLog.printRTAriDebug(fn, "Caught an IOException. e=" + e);
+            dbLog.outputStackTrace(e);
+            throw new IOException(e.toString());
         }
     }
 
+
     public void sendChar(int v) throws IOException {
-        try (OutputStream os = channel.getOutputStream(); DataOutputStream dos = new DataOutputStream(os)) {
-            if (log.isTraceEnabled()) {
-                log.trace("Sending charCode: {0}", v);
-            }
+        String fn = "SshJcraftWrapper.sendChar";
+        OutputStream out = channel.getOutputStream();
+        DataOutputStream dos = new DataOutputStream(out);
+        try {
+            debugLog.printRTAriDebug(fn, "Sending: '" + v + "'");
             dos.writeChar(v);
             dos.flush();
         } catch (IOException e) {
-            log.error(Msg.SSH_DATA_EXCEPTION, e.getMessage());
-            throw e;
+            debugLog.printRTAriDebug(fn, "Caught an IOException. e=" + e);
+            throw new IOException(e.toString());
         }
     }
 
     public void send(byte[] b, int off, int len) throws IOException {
-        try (OutputStream os = channel.getOutputStream(); DataOutputStream dos = new DataOutputStream(os)) {
+        String fn = "SshJcraftWrapper.send:byte[]";
+        OutputStream out = channel.getOutputStream();
+        DataOutputStream dos = new DataOutputStream(out);
+        try {
             dos.write(b, off, len);
             dos.flush();
         } catch (IOException e) {
-            log.error(Msg.SSH_DATA_EXCEPTION, e.getMessage());
-            throw e;
+            debugLog.printRTAriDebug(fn, "Caught an IOException. e=" + e);
+            throw new IOException(e.toString());
         }
     }
 
     public static class MyUserInfo implements UserInfo, UIKeyboardInteractive {
 
-        @Override
         public String getPassword() {
             return null;
         }
 
-        @Override
         public boolean promptYesNo(String str) {
             return false;
         }
 
-        @Override
         public String getPassphrase() {
             return null;
         }
 
-        @Override
         public boolean promptPassphrase(String message) {
             return false;
         }
 
-        @Override
         public boolean promptPassword(String message) {
             return false;
         }
 
-        @Override
         public void showMessage(String message) {
-            //stub
         }
 
-        @Override
         public String[] promptKeyboardInteractive(String destination,
             String name,
             String instruction,
             String[] prompt,
             boolean[] echo) {
-            return new String[0];
+            return null;
         }
     }
 
         this.listener = listener;
     }
 
-    private void appendToFile(String fileName, String dataToWrite) {
-        File outputFile = new File(fileName);
-        if (outputFile.exists()) {
-            try (FileWriter fw = new FileWriter(fileName, true); BufferedWriter ow = new BufferedWriter(fw)) {
-                ow.write(dataToWrite);
-                ow.close();
-            } catch (IOException e) {
-                log.warn("IOException occurred while writing to file=" + fileName, e);
+    public void appendToFile(String fileName, String dataToWrite) {
+        String fn = "SshJcraftWrapper.appendToFile";
+
+        try {
+            // First check to see if a file 'fileName' exist, if it does
+            // write to it. If it does not exist, don't write to it.
+            File tmpFile = new File(fileName);
+            if (tmpFile.exists()) {
+                BufferedWriter out = new BufferedWriter(new FileWriter(fileName, true));
+                // out.write(dataToWrite);
+                // out.write(getTheDate() +": " +Thread.currentThread().getName() +": "+dataToWrite);
+                out.write(getTheDate() + ": " + tId + ": " + dataToWrite);
+                out.close();
+            }
+        } catch (IOException e) {
+            debugLog.printRTAriDebug(fn, "Caught an IOException: e=" + e);
+        } catch (Exception e) {
+            debugLog.printRTAriDebug(fn, "Caught an Exception: e=" + e);
+        }
+    }
+
+    public void _appendToFile(String fileName, String dataToWrite) {
+        String fn = "SshJcraftWrapper.appendToFile";
+
+        try {
+            // First check to see if a file 'fileName' exist, if it does
+            // write to it. If it does not exist, don't write to it.
+            File tmpFile = new File(fileName);
+            if (tmpFile.exists()) {
+                BufferedWriter out = new BufferedWriter(new FileWriter(fileName, true));
+                out.write(dataToWrite);
+                out.close();
             }
+        } catch (IOException e) {
+            debugLog.printRTAriDebug(fn, "Caught an IOException: e=" + e);
+        } catch (Exception e) {
+            debugLog.printRTAriDebug(fn, "Caught an Exception: e=" + e);
         }
     }
 
+
     public String getTheDate() {
-        DateFormat dateFormat = new SimpleDateFormat("MM/dd/yyyy H:mm:ss  ");
-        return dateFormat.format(Calendar.getInstance().getTime());
+        Calendar cal = Calendar.getInstance();
+        java.util.Date today = cal.getTime();
+        DateFormat df1 = DateFormat.getDateInstance();
+        DateFormat df3 = new SimpleDateFormat("MM/dd/yyyy H:mm:ss  ");
+        return (df3.format(today));
     }
 
 
-    public void appendToRouterFile(String fileName, StringBuilder dataToWrite) {
-        appendToFile(fileName, dataToWrite.toString());
+    public void appendToRouterFile(String fileName, StringBuffer dataToWrite) {
+        String fnName = "SshJcraftWrapper.appendToRouterFile";
+        debugLog.printRTAriDebug(fnName, "Entered.... ");
+        try {
+            // First check to see if a file 'fileName' exist, if it does
+            // write to it. If it does not exist, don't write to it.
+            File tmpFile = new File(fileName);
+            {
+                // if ((tmpFile.exists()) && (tmpFile.setWritable(true, true)))
+                if (tmpFile.exists()) {
+                    BufferedWriter out = new BufferedWriter(new FileWriter(fileName, true));
+                    // out.write("<!--  "+getTheDate() +": " +tId +"  -->\n");
+                    out.write(dataToWrite.toString());
+                    out.close();
+                }
+            }
+        } catch (IOException e) {
+            System.err.println("writeToFile() exception: " + e);
+            e.printStackTrace();
+        }
     }
 
     public void appendToRouterFile(String fileName, int len) {
-        File outputFile = new File(fileName);
-        if (outputFile.exists()) {
-            try (FileWriter fw = new FileWriter(fileName, true); BufferedWriter ow = new BufferedWriter(fw)) {
-                ow.write(charBuffer, 0, len);
-                ow.close();
-            } catch (IOException e) {
-                log.warn("Could not write data to router file:" + fileName, e);
+        String fnName = "SshJcraftWrapper.appendToFile";
+        // debugLog.printRTAriDebug (fnName, "Entered.... len="+len);
+        try {
+            // First check to see if a file 'fileName' exist, if it does
+            // write to it. If it does not exist, don't write to it.
+            File tmpFile = new File(fileName);
+            // if ((tmpFile.exists()) && (tmpFile.setWritable(true, true)))
+            if (tmpFile.exists()) {
+                BufferedWriter out = new BufferedWriter(new FileWriter(fileName, true));
+                // out.write("<!--  "+getTheDate() +": " +tId +"  -->\n");
+                out.write(charBuffer, 0, len);
+                out.close();
             }
+        } catch (IOException e) {
+            System.err.println("writeToFile() exception: " + e);
+            e.printStackTrace();
         }
     }
 
     public String removeWhiteSpaceAndNewLineCharactersAroundString(String str) {
-        if (str != null && !StringUtils.EMPTY.equals(str)) {
-            StringTokenizer strTok = new StringTokenizer(str, EOL);
-            StringBuilder sb = new StringBuilder();
+        if (str != null) {
+            StringTokenizer strTok = new StringTokenizer(str, "\n");
+            StringBuffer sb = new StringBuffer();
 
             while (strTok.hasMoreTokens()) {
                 String line = strTok.nextToken();
                 sb.append(line);
             }
-            return sb.toString().trim();
+            return (sb.toString().trim());
+        } else {
+            return (str);
         }
-        return StringUtils.EMPTY;
     }
 
     public String stripOffCmdFromRouterResponse(String routerResponse) {
+        String fn = "SshJcraftWrapper.stripOffCmdFromRouterResponse";
+        // appendToFile(debugLogFileName, fn+": routerResponse='"+routerResponse +"'\n");
+
         // The session of SSH will echo the command sent to the router, in the router's response.
         // Since all our commands are terminated by a '\n', strip off the first line
         // of the response from the router. This first line contains the orginal command.
 
-        String[] responseTokens = routerResponse.split(EOL, 2);
-        return responseTokens[responseTokens.length - 1];
+        StringTokenizer rr = new StringTokenizer(routerResponse, "\n");
+        StringBuffer sb = new StringBuffer();
+
+        int numTokens = rr.countTokens();
+        // debugLog.printRTAriDebug (fn, "Number of lines in the response from the router is:" +numTokens);
+        if (numTokens > 1) {
+            rr.nextToken(); //Skip the first line.
+            while (rr.hasMoreTokens()) {
+                sb.append(rr.nextToken() + '\n');
+            }
+        }
+        return (sb.toString());
     }
 
     public void setRouterCommandType(String type) {
+        String fn = "SshJcraftWrapper.setRouterCommandType";
         this.routerCmdType = type;
-        log.debug("Router command type is set to: {0}", type);
+        debugLog.printRTAriDebug(fn, "Setting routerCmdType to a value of '" + type + "'");
     }
 
-    public String getLastFewLinesOfFile(File file, int linesToRead) throws IOException {
+    public String getLastFewLinesOfFile(File file, int linesToRead) throws  IOException {
+        String fn = "SshJcraftWrapper.getLastFewLinesOfFile";
+        RandomAccessFile randomAccessFile = new RandomAccessFile(file, "r");
+        int lines = 0;
+        StringBuilder builder = new StringBuilder();
         String tail = "";
-        try(RandomAccessFile randomAccessFile = new RandomAccessFile(file, "r")) {
-            int lines = 0;
-            StringBuilder builder = new StringBuilder();
-            long length = file.length();
-            length--;
-            randomAccessFile.seek(length);
-            for (long seek = length; seek >= 0; --seek) {
-                randomAccessFile.seek(seek);
-                char c = (char) randomAccessFile.read();
-                builder.append(c);
-                if (c == '\n') {
-                    builder = builder.reverse();
-                    tail = builder.append(tail).toString();
-                    lines++;
-                    builder.setLength(0);
-                    if (lines == linesToRead) {
-                        break;
-                    }
+        long length = file.length();
+        length--;
+        randomAccessFile.seek(length);
+        for (long seek = length; seek >= 0; --seek) {
+            randomAccessFile.seek(seek);
+            char c = (char) randomAccessFile.read();
+            builder.append(c);
+            if (c == '\n') {
+                builder = builder.reverse();
+                // System.out.println(builder.toString());
+                tail = builder.toString() + tail;
+                lines++;
+                builder.setLength(0);
+                if (lines == linesToRead) {
+                    break;
                 }
             }
         }
-        if (log.isDebugEnabled()) {
-            log.debug("Content read from file={0} was tail={1}", file.getName(), tail);
+        randomAccessFile.close();
+        if (!jcraftReadSwConfigFileFromDisk()) {
+            debugLog.printRTAriDebug(fn, "tail='" + tail + "'");
         }
+        appendToFile(debugLogFileName, "tail='" + tail + "'\n");
         return tail;
     }
 
     public boolean jcraftReadSwConfigFileFromDisk() {
-        return jcraftReadSwConfigFileFromDisk.exists();
+        if (jcraftReadSwConfigFileFromDisk.exists()) {
+            return (true);
+        } else {
+            return (false);
+        }
     }
 
     public String getEquipNameCode() {
-        return equipNameCode;
+        return (equipNameCode);
+
     }
 
     public void setEquipNameCode(String equipNameCode) {
     }
 
     public String getRouterName() {
-        return routerName;
+        return (RouterName);
     }
 
     // Routine does reads until it has read 'nchars' or times out.
-    public String receiveUntilBufferFlush(int ncharsSent, int timeout, String command) throws IOException {
-        log.debug("ncharsSent={0}, timeout={1}, message={2}", ncharsSent, timeout, command);
+    public void receiveUntilBufferFlush(int ncharsSent, int timeout, String message)
+        throws TimedOutException, IOException {
+        String fn = "SshJcraftWrapper.receiveUntilBufferFlush";
+        StringBuffer sb2 = new StringBuffer();
+        StringBuffer sbReceive = new StringBuffer();
+        debugLog.printRTAriDebug(fn, "ncharsSent=" + ncharsSent + " timeout=" + timeout + " " + message);
         int ncharsTotalReceived = 0;
         int ncharsRead = 0;
-        StringBuilder received = new StringBuilder();
+        boolean flag = false;
+        charactersFromBufferFlush.setLength(0);
 
         long deadline = new Date().getTime() + timeout;
         logMemoryUsage();
             session.setTimeout(timeout);  // This is the socket timeout value.
             while (true) {
                 if (new Date().getTime() > deadline) {
-                    log.error(Msg.SSH_CONNECTION_TIMEOUT, routerName, command);
-                    throw new TimedOutException("Routine has timed out");
-                }
-                ncharsRead = reader.read(charBuffer, 0, readBufferSizeBytes);
-                if(ncharsRead >=0) {
-                    received.append(charBuffer, 0, ncharsRead);
+                    debugLog.printRTAriDebug(fn,
+                        "Throwing a TimedOutException: time in routine has exceed our deadline: ncharsSent="
+                            + ncharsSent + " ncharsTotalReceived=" + ncharsTotalReceived);
+                    flag = true;
+                    throw new TimedOutException("Timeout: time in routine has exceed our deadline");
                 }
+                ncharsRead = reader.read(charBuffer, 0, BUFFER_SIZE);
                 if (listener != null) {
                     listener.receivedString(String.copyValueOf(charBuffer, 0, ncharsRead));
                 }
-                appendToRouterFile("/tmp/" + routerName, ncharsRead);
+                appendToRouterFile("/tmp/" + RouterName, ncharsRead);
                 ncharsTotalReceived = ncharsTotalReceived + ncharsRead;
+                // debugLog.printRTAriDebug (fn, "::ncharsSent="+ncharsSent+" ncharsTotalReceived="+ncharsTotalReceived +" ncharsRead="+ncharsRead);
                 if (ncharsTotalReceived >= ncharsSent) {
-                    log.debug("Received the correct number of characters, ncharsSent={0}, ncharsTotalReceived={1}",
-                        ncharsSent, ncharsTotalReceived);
+                    debugLog.printRTAriDebug(fn,
+                        "Received the correct number of characters, ncharsSent=" + ncharsSent + " ncharsTotalReceived="
+                            + ncharsTotalReceived);
                     logMemoryUsage();
-                    return received.toString();
+                    return;
                 }
             }
         } catch (JSchException e) {
-            log.error(Msg.SSH_SESSION_CONFIG_ERROR, e.getMessage());
-            log.debug("ncharsSent={0}, ncharsTotalReceived={1}, ncharsRead={2} until error occurred",
-                ncharsSent, ncharsTotalReceived, ncharsRead);
-            throw new TimedOutException(e.getMessage());
+            debugLog.printRTAriDebug(fn, "Caught an JSchException e=" + e);
+            debugLog.printRTAriDebug(fn,
+                "ncharsSent=" + ncharsSent + " ncharsTotalReceived=" + ncharsTotalReceived + " ncharsRead="
+                    + ncharsRead);
+            throw new TimedOutException(e.toString());
         }
     }
 
     public String getHostName() {
-        return hostName;
+        return (hostName);
     }
 
     public String getUserName() {
-        return userName;
+        return (userName);
     }
 
     public String getPassWord() {
-        return passWord;
+        return (passWord);
+    }
+
+    public void sftpPut(String sourcePath, String destDirectory) throws IOException {
+        String fn = "SshJcraftWrapper.sftp";
+        try {
+            Session sftpSession = jsch.getSession(userName, hostName, 22);
+            UserInfo ui = new MyUserInfo();
+            sftpSession.setPassword(passWord);
+            sftpSession.setUserInfo(ui);
+            sftpSession.connect(30 * 1000);
+            debugLog.printRTAriDebug(fn, "Opening up an sftp channel....");
+            ChannelSftp sftp = (ChannelSftp) sftpSession.openChannel("sftp");
+            debugLog.printRTAriDebug(fn, "Connecting....");
+            sftp.connect();
+            debugLog.printRTAriDebug(fn, "Sending " + sourcePath + " --> " + destDirectory);
+            sftp.put(sourcePath, destDirectory, ChannelSftp.OVERWRITE);
+            debugLog.printRTAriDebug(fn, "Sent successfully");
+            sftpSession.disconnect();
+        } catch (Exception e) {
+            debugLog.printRTAriDebug(fn, "Caught an Exception, e=" + e);
+            // dbLog.storeData("ErrorMsg= sftp threw an Exception. error is:"+e);
+            throw new IOException(e.toString());
+        }
     }
 
-    public void sftpPutStringData(String stringOfData, String fullPathDest) throws IOException {
-        ChannelSftp sftp = null;
+
+    public void SftpPut(String stringOfData, String fullPathDest) throws IOException {
+        String fn = "SshJcraftWrapper.Sftp";
         try {
+            Session sftpSession = jsch.getSession(userName, hostName, 22);
+            UserInfo ui = new MyUserInfo();
+            sftpSession.setPassword(passWord);
+            sftpSession.setUserInfo(ui);
+            sftpSession.connect(30 * 1000);
+            debugLog.printRTAriDebug(fn, "Opening up an sftp channel....");
+            ChannelSftp sftp = (ChannelSftp) sftpSession.openChannel("sftp");
+            debugLog.printRTAriDebug(fn, "Connecting....");
+            sftp.connect();
             InputStream is = new ByteArrayInputStream(stringOfData.getBytes());
-            sftp = getSftpConnection(hostName, userName, passWord);
-            log.debug("Sending via sftp stringOfData to destination: {0}", fullPathDest);
+            debugLog.printRTAriDebug(fn, "Sending stringOfData --> " + fullPathDest);
             sftp.put(is, fullPathDest, ChannelSftp.OVERWRITE);
-        } catch (JSchException ex) {
-            log.error(Msg.CANNOT_ESTABLISH_CONNECTION, hostName, String.valueOf(DEFAULT_PORT), userName);
-            throw new IOException(ex.getMessage());
-        } catch (SftpException ex) {
-            log.error(Msg.SFTP_TRANSFER_FAILED, hostName, userName, "PUT", ex.getMessage());
-            throw new IOException(ex.getMessage());
-        } finally {
-            disconnectSftp(sftp);
+            debugLog.printRTAriDebug(fn, "Sent successfully");
+            sftpSession.disconnect();
+        } catch (Exception e) {
+            debugLog.printRTAriDebug(fn, "Caught an Exception, e=" + e);
+            // dbLog.storeData("ErrorMsg= sftp threw an Exception. error is:"+e);
+            throw new IOException(e.toString());
         }
     }
 
     public String sftpGet(String fullFilePathName) throws IOException {
-        return get(fullFilePathName, hostName, userName, passWord);
+        String fn = "SshJcraftWrapper.Sftp";
+        try {
+            Session sftpSession = jsch.getSession(userName, hostName, 22);
+            UserInfo ui = new MyUserInfo();
+            sftpSession.setPassword(passWord);
+            sftpSession.setUserInfo(ui);
+            sftpSession.connect(30 * 1000);
+            debugLog.printRTAriDebug(fn, "Opening up an sftp channel....");
+            ChannelSftp sftp = (ChannelSftp) sftpSession.openChannel("sftp");
+            debugLog.printRTAriDebug(fn, "Connecting....");
+            sftp.connect();
+            InputStream in = null;
+            in = sftp.get(fullFilePathName);
+            String sftpFileString = readInputStreamAsString(in);
+            debugLog.printRTAriDebug(fn, "Retreived successfully");
+            // debugLog.printRTAriDebug (fn, "sftpFileString="+sftpFileString);
+            sftpSession.disconnect();
+            return (sftpFileString);
+        } catch (Exception e) {
+            debugLog.printRTAriDebug(fn, "Caught an Exception, e=" + e);
+            // dbLog.storeData("ErrorMsg= sftp threw an Exception. error is:"+e);
+            throw new IOException(e.toString());
+        }
     }
 
     public static String readInputStreamAsString(InputStream in) throws IOException {
         return buf.toString();
     }
 
+
     public void logMemoryUsage() {
+        String fn = "SshJcraftWrapper.logMemoryUsage";
         int mb = 1024 * 1024;
         long usedMemory;
-        long maxMemoryAvailable;
-        long memoryLeftOnHeap;
-        maxMemoryAvailable = runtime.maxMemory() / mb;
-        usedMemory = (runtime.totalMemory() / mb) - (runtime.freeMemory() / mb);
-        memoryLeftOnHeap = maxMemoryAvailable - usedMemory;
-        log.info("Memory usage: maxMemoryAvailable={0}, usedMemory={1}, memoryLeftOnHeap={2}",
-            maxMemoryAvailable, usedMemory, memoryLeftOnHeap);
+        long maxMemoryAdvailable;
+        long memoryLetfOnHeap;
+        maxMemoryAdvailable = (runtime.maxMemory() / mb);
+        usedMemory = ((runtime.totalMemory() / mb) - (runtime.freeMemory() / mb));
+        memoryLetfOnHeap = maxMemoryAdvailable - usedMemory;
+        DebugLog.printAriDebug(fn,
+            "maxMemoryAdvailable=" + maxMemoryAdvailable + " usedMemory=" + usedMemory + " memoryLetfOnHeap="
+                + memoryLetfOnHeap);
     }
 
-    public void connect(String hostname, String username, String password, int timeOut, int portNum,
+    // ----------------------------------------------------------------------------
+    // ----------------------------------------------------------------------------
+    // ----------------------------------------------------------------------------
+    // ----------------------------------------------------------------------------
+
+
+    // User specifies the port number, and the subsystem
+    public void connect(String hostname, String username, String password, String prompt, int timeOut, int portNum,
         String subsystem) throws IOException {
+        String fn = "SshJcraftWrapper.connect";
 
-        if (log.isDebugEnabled()) {
-            log.debug(
-                "Attempting to connect to {0} username={1} timeOut={2} portNum={3} subsystem={4}",
-                hostname, username, timeOut, portNum, subsystem);
-        }
-        this.routerName = hostname;
-        this.hostName = hostname;
-        this.userName = username;
-        this.passWord = password;
+        debugLog.printRTAriDebug(fn,
+            ":::Attempting to connect to " + hostname + " username=" + username + " prompt='"
+                + prompt + "' timeOut=" + timeOut + " portNum=" + portNum + " subsystem=" + subsystem);
+        RouterName = hostname;
+        jsch = new JSch();
         try {
-            channel = provideSessionChannel(CHANNEL_SUBSYSTEM_TYPE, portNum, timeOut);
+            session = jsch.getSession(username, hostname, portNum);
+            UserInfo ui = new MyUserInfo();
+            session.setPassword(password);
+            session.setUserInfo(ui);
+            session.setConfig("StrictHostKeyChecking", "no");
+            session.connect(timeOut);
+            session.setServerAliveCountMax(
+                0); // If this is not set to '0', then socket timeout on all reads will not work!!!!
+            channel = session.openChannel("subsystem");
             ((ChannelSubsystem) channel).setSubsystem(subsystem);
-            ((ChannelSubsystem) channel).setPty(true); //expected ptyType vt102
-            reader = new BufferedReader(new InputStreamReader(new DataInputStream(channel.getInputStream())),
-                readBufferSizeBytes);
-            channel.connect(5000);
-        } catch (JSchException e) {
-            log.error(Msg.CANNOT_ESTABLISH_CONNECTION, hostname, String.valueOf(portNum), username);
-            throw new IOException(e.getMessage());
+            // ((ChannelSubsystem)channel).setPtyType("vt102");
+            ((ChannelSubsystem) channel).setPty(true);
+
+            inputStream = channel.getInputStream();
+            dis = new DataInputStream(inputStream);
+            reader = new BufferedReader(new InputStreamReader(dis), BUFFER_SIZE);
+            channel.connect();
+            debugLog.printRTAriDebug(fn, "Successfully connected.");
+            debugLog.printRTAriDebug(fn, "Five second sleep....");
+            try {
+                Thread.sleep(5000);
+            } catch (java.lang.InterruptedException ee) {
+                boolean ignore = true;
+            }
+        } catch (Exception e) {
+            debugLog.printRTAriDebug(fn, "Caught an Exception. e=" + e);
+            throw new IOException(e.toString());
         }
     }
 
-    public void connect(String hostName, String username, String password) throws IOException {
-        log.debug("Attempting to connect to {0} username={1} portNumber={2}", hostName, username, DEFAULT_PORT);
-        this.routerName = hostName;
+    public void connect(String hostName, String username, String password, int portNumber) throws IOException {
+        String fn = "SshJcraftWrapper.connect";
+        jsch = new JSch();
+        debugLog.printRTAriDebug(fn,
+            "::Attempting to connect to " + hostName + " username=" + username + " portNumber=" + portNumber);
+        debugLog.printRTAriDebug(fn, "Trace C");
+        RouterName = hostName;
         this.hostName = hostName;
-        this.userName = username;
-        this.passWord = password;
+        userName = username;
+        passWord = password;
         try {
-            channel = provideSessionChannel(CHANNEL_SHELL_TYPE, DEFAULT_PORT, 30000);
-            ((ChannelShell) channel).setPtyType(TERMINAL_BASIC_MODE);
-            reader = new BufferedReader(new InputStreamReader(new DataInputStream(channel.getInputStream())),
-                readBufferSizeBytes);
+            java.util.Properties config = new java.util.Properties();
+            config.put("StrictHostKeyChecking", "no");
+            session = jsch.getSession(username, hostName, 22);
+            // session = jsch.getSession(username, hostName, portNumber);
+            UserInfo ui = new MyUserInfo();
+            session.setConfig(config);
+            session.setPassword(password);
+            session.setUserInfo(ui);
+            session.connect(30000);
+            channel = session.openChannel("shell");
+            session.setServerAliveCountMax(
+                0); // If this is not set to '0', then socket timeout on all reads will not work!!!!
+            ((ChannelShell) channel).setPtyType("vt102");
+            inputStream = channel.getInputStream();
+            dis = new DataInputStream(inputStream);
+            reader = new BufferedReader(new InputStreamReader(dis), BUFFER_SIZE);
             channel.connect();
+            debugLog.printRTAriDebug(fn, "::Successfully connected.");
+            debugLog.printRTAriDebug(fn, "::Flushing input buffer");
             try {
                 receiveUntil(":~#", 9000, "No cmd was sent, just waiting, but we can stop on a '~#'");
             } catch (Exception e) {
-                log.warn("Caught an Exception: Nothing to flush out.", e);
+                debugLog.printRTAriDebug(fn, "Caught an Exception::: Nothing to flush out.");
             }
 
-        } catch (JSchException e) {
-            log.error(Msg.CANNOT_ESTABLISH_CONNECTION, hostName, String.valueOf(DEFAULT_PORT), username);
-            throw new IOException(e.getMessage());
+        } catch (Exception e) {
+            debugLog.printRTAriDebug(fn, "Caught an Exception. e=" + e);
+            // dbLog.storeData("ErrorMsg= Exception trying to connect to "+hostName +" "+e);
+            throw new IOException(e.toString());
         }
     }
 
 
     public void put(String sourcePath, String destDirectory) throws IOException {
-        ChannelSftp sftp = null;
+        String fn = "SshJcraftWrapper.sftp";
         try {
-            sftp = getSftpConnection(hostName, userName, passWord);
-            log.debug("Sending via sftp from source: {0} to destination: {1}", sourcePath, destDirectory);
+            Session sftpSession = jsch.getSession(userName, hostName, 22);
+            UserInfo ui = new MyUserInfo();
+            sftpSession.setPassword(passWord);
+            sftpSession.setUserInfo(ui);
+            sftpSession.connect(30 * 1000);
+            debugLog.printRTAriDebug(fn, "Opening up an sftp channel....");
+            ChannelSftp sftp = (ChannelSftp) sftpSession.openChannel("sftp");
+            debugLog.printRTAriDebug(fn, "Connecting....");
+            sftp.connect();
+            debugLog.printRTAriDebug(fn, "Sending " + sourcePath + " --> " + destDirectory);
             sftp.put(sourcePath, destDirectory, ChannelSftp.OVERWRITE);
-        } catch (JSchException ex) {
-            log.error(Msg.CANNOT_ESTABLISH_CONNECTION, hostName, String.valueOf(DEFAULT_PORT), userName);
-            throw new IOException(ex.getMessage());
-        } catch (SftpException ex) {
-            log.error(Msg.SFTP_TRANSFER_FAILED, hostName, userName, "PUT", ex.getMessage());
-            throw new IOException(ex.getMessage());
-        } finally {
-            disconnectSftp(sftp);
+            debugLog.printRTAriDebug(fn, "Sent successfully");
+            sftpSession.disconnect();
+        } catch (Exception e) {
+            debugLog.printRTAriDebug(fn, "Caught an Exception, e=" + e);
+            // dbLog.storeData("ErrorMsg= sftp threw an Exception. error is:"+e);
+            throw new IOException(e.toString());
         }
     }
 
     public void put(InputStream is, String fullPathDest, String hostName, String userName, String passWord)
         throws IOException {
-        ChannelSftp sftp = null;
+        String fn = "SshJcraftWrapper.put";
+        Session sftpSession = null;
         try {
-            log.debug("Sftp put invoked, connection details: username={1} hostname={2}", userName, hostName);
-            sftp = getSftpConnection(hostName, userName, passWord);
+            debugLog.printRTAriDebug(fn, "userName=" + userName + " hostName=" + hostName);
+            jsch = new JSch();
+            java.util.Properties config = new java.util.Properties();
+            config.put("StrictHostKeyChecking", "no");
+            sftpSession = jsch.getSession(userName, hostName, 22);
+            UserInfo ui = new MyUserInfo();
+            sftpSession.setPassword(passWord);
+            sftpSession.setUserInfo(ui);
+            sftpSession.setConfig(config);
+            sftpSession.connect(30 * 1000);
+            debugLog.printRTAriDebug(fn, "Opening up an sftp channel....");
+            ChannelSftp sftp = (ChannelSftp) sftpSession.openChannel("sftp");
+            debugLog.printRTAriDebug(fn, "Connecting....");
+            sftp.connect();
             String oldFiles = fullPathDest + "*";
-            log.debug("Deleting old files: {0}", oldFiles);
-            removeOldFiles(sftp, oldFiles, hostName, userName);
-            log.debug("Sending stringOfData to destination {0}", fullPathDest);
+            debugLog.printRTAriDebug(fn, "Deleting old files --> " + oldFiles);
+            try {
+                sftp.rm(oldFiles);
+                debugLog.printRTAriDebug(fn, "Sending stringOfData --> " + fullPathDest);
+            } catch (SftpException sft) {
+                String exp = "No such file";
+                if (sft.getMessage() != null && sft.getMessage().contains(exp)) {
+                    debugLog.printRTAriDebug(fn, "No files found -- Continue");
+                } else {
+                    debugLog.printRTAriDebug(fn, "Exception while sftp.rm " + sft.getMessage());
+                    sft.printStackTrace();
+                    throw sft;
+                }
+            }
             sftp.put(is, fullPathDest, ChannelSftp.OVERWRITE);
-        } catch (JSchException ex) {
-            log.error(Msg.CANNOT_ESTABLISH_CONNECTION, hostName, String.valueOf(DEFAULT_PORT), userName);
-            throw new IOException(ex.getMessage());
-        } catch (SftpException ex) {
-            log.error(Msg.SFTP_TRANSFER_FAILED, hostName, userName, "PUT", ex.getMessage());
-            throw new IOException(ex.getMessage());
+            debugLog.printRTAriDebug(fn, "Sent successfully");
+        } catch (Exception e) {
+            debugLog.printRTAriDebug(fn, "Caught an Exception, e=" + e);
+            throw new IOException(e.toString());
         } finally {
-            disconnectSftp(sftp);
-        }
-    }
-
-    private void removeOldFiles(ChannelSftp sftp, String oldFiles, String hostname, String username) throws SftpException {
-        try {
-            sftp.rm(oldFiles);
-        } catch (SftpException ex) {
-            if (ChannelSftp.SSH_FX_NO_SUCH_FILE == ex.id) {
-                log.warn("No files found, continue");
-            } else {
-                log.error(Msg.SFTP_TRANSFER_FAILED, hostname, username, "RM", ex.getMessage());
-                throw ex;
+            if(sftpSession != null) {
+                sftpSession.disconnect();
             }
         }
     }
 
+
     public String get(String fullFilePathName, String hostName, String userName, String passWord) throws IOException {
-        ChannelSftp sftp = null;
+        String fn = "SshJcraftWrapper.get";
+        Session sftpSession = null;
         try {
-            log.debug("Sftp get invoked, connection details: username={1} hostname={2}",
-                userName, hostName);
-            sftp = getSftpConnection(hostName, userName, passWord);
+            debugLog.printRTAriDebug(fn, "userName=" + userName + " hostName=" + hostName);
+            jsch = new JSch();
+            sftpSession = jsch.getSession(userName, hostName, 22);
+            java.util.Properties config = new java.util.Properties();
+            config.put("StrictHostKeyChecking", "no");
+            UserInfo ui = new MyUserInfo();
+            sftpSession.setPassword(passWord);
+            sftpSession.setUserInfo(ui);
+            sftpSession.setConfig(config);
+            sftpSession.connect(30 * 1000);
+            debugLog.printRTAriDebug(fn, "Opening up an sftp channel....");
+            ChannelSftp sftp = (ChannelSftp) sftpSession.openChannel("sftp");
+            debugLog.printRTAriDebug(fn, "Connecting....");
+            sftp.connect();
             InputStream in = sftp.get(fullFilePathName);
-            return readInputStreamAsString(in);
-        } catch (JSchException ex) {
-            log.error(Msg.CANNOT_ESTABLISH_CONNECTION, hostName, String.valueOf(DEFAULT_PORT), userName);
-            throw new IOException(ex.getMessage());
-        } catch (SftpException ex) {
-            log.error(Msg.SFTP_TRANSFER_FAILED, hostName, userName, "GET", ex.getMessage());
-            throw new IOException(ex.getMessage());
+            String sftpFileString = readInputStreamAsString(in);
+            debugLog.printRTAriDebug(fn, "Retreived successfully");
+            return sftpFileString;
+        } catch (Exception e) {
+            debugLog.printRTAriDebug(fn, "Caught an Exception, e=" + e);
+            throw new IOException(e.toString());
         } finally {
-            disconnectSftp(sftp);
-        }
-    }
-
-    private void disconnectSftp (ChannelSftp sftp) {
-        if (sftp != null) {
-            sftp.disconnect();
-        }
-        if (session != null) {
-            session.disconnect();
-            session = null;
+            if(sftpSession != null) {
+                sftpSession.disconnect();
+            }
         }
     }
 
-    ChannelSftp getSftpConnection(String hostname, String username, String password) throws JSchException {
-        connectSession(hostname, username, password, DEFAULT_PORT, 30_000);
-        ChannelSftp sftp = openSftpChannel(session);
-        sftp.connect();
-        return sftp;
-    }
-
-    ChannelSftp openSftpChannel(Session sftpSession) throws JSchException {
-        return (ChannelSftp) sftpSession.openChannel(CHANNEL_SFTP_TYPE);
-    }
-
     public String send(String cmd, String delimiter) throws IOException {
-        try (OutputStream os = channel.getOutputStream(); DataOutputStream dos = new DataOutputStream(os)) {
-            String command = enhanceCommandWithEOL(cmd);
-            int length = command.length();
-            log.debug("Sending ssh command: length={0}, payload: {1}", command.length(), command);
-            if(isCmdLengthEnoughToSendInChunks(length, charsChunkSize)) {
-                return sendSshCommandInChunks(command, dos);
-            } else {
-                sendSshCommand(command, dos);
-                return receiveUntil(delimiter, 300000, cmd);
-            }
-        }
-    }
+        String fn = "SshJcraftWrapper.send";
+        OutputStream out = channel.getOutputStream();
+        DataOutputStream dos = new DataOutputStream(out);
 
-    private void sendSshCommand(@Nonnull String command, @Nonnull DataOutputStream channelOutputStream)
-        throws IOException {
-        channelOutputStream.writeBytes(command);
-        channelOutputStream.flush();
-    }
-
-    private String sendSshCommandInChunks(@Nonnull String command, @Nonnull DataOutputStream channelOutputStream) throws IOException {
-        StringBuilder received =  new StringBuilder();
-        int charsTotalSent = 0;
-        int length = command.length();
-        for (int i = 0; i < length; i += charsChunkSize) {
-            String commandChunk = command.substring(i, Math.min(length, i + charsChunkSize));
-            int numCharsSentInChunk = commandChunk.length();
-            charsTotalSent = charsTotalSent + commandChunk.length();
-            log.debug("Iteration nr:{0}, sending command chunk: {1}", i, numCharsSentInChunk);
-            channelOutputStream.writeBytes(commandChunk);
-            channelOutputStream.flush();
-            try {
-                if (numCharsSentInChunk < length) {
-                    received.append(receiveUntilBufferFlush(numCharsSentInChunk, sessionTimeoutMs, command));
-                } else {
-                    log.trace("i={0}, flush immediately", i);
-                    channelOutputStream.flush();
+        if ((cmd.charAt(cmd.length() - 1) != '\n') && (cmd.charAt(cmd.length() - 1) != '\r')) {
+            cmd += "\n";
+        }
+        int length = cmd.length();
+        int i = -1;
+        int nchars = 300000;
+        int ncharsTotalSent = 0;
+        int ncharsSent = 0;
+
+        debugLog.printRTAriDebug(fn, "Length of cmd is:" + length); // 2,937,706
+        debugLog.printRTAriDebug(fn, "Length of cmd is:" + length); // 2,937,706
+        try {
+            if (length > 600000) {
+                int timeout = 9000;
+                for (i = 0; i < length; i += nchars) {
+                    String Cmd = cmd.substring(i, Math.min(length, i + nchars));
+                    ncharsSent = Cmd.length();
+                    ncharsTotalSent = ncharsTotalSent + Cmd.length();
+                    debugLog.printRTAriDebug(fn, "i=" + i + " Sending Cmd: ncharsSent=" + ncharsSent);
+                    dos.writeBytes(Cmd);
+                    dos.flush();
+                    try {
+                        debugLog.printRTAriDebug(fn, ":::i=" + i + " length=" + length);
+                        if (ncharsSent < length) {
+                            receiveUntilBufferFlush(ncharsSent, timeout, "buffer flush  i=" + i);
+                        } else {
+                            debugLog.printRTAriDebug(fn, "i=" + i + " No Waiting this time....");
+                            dos.flush();
+                        }
+                    } catch (Exception e) {
+                        debugLog.printRTAriDebug(fn, "Caught an Exception: Nothing to flush out.");
+                    }
                 }
-            } catch (IOException ex) {
-                log.warn("IOException occurred: nothing to flush out", ex);
+            } else {
+                debugLog.printRTAriDebug(fn, "Before executing the dos.writeBytes");
+                dos.writeBytes(cmd);
             }
+            dos.flush();
+            // Now lets get the response.
+            String response = receiveUntil(delimiter, 300000, cmd);
+            debugLog.printRTAriDebug(fn, "Leaving method");
+            return (response);
+        } catch (IOException e) {
+            debugLog.printRTAriDebug(fn, "Caught an IOException. e=" + e);
+            throw new IOException(e.toString());
         }
-        return received.toString();
-    }
-
-    public void setSessionTimeoutMs(int sessionTimeoutMs) {
-        this.sessionTimeoutMs = sessionTimeoutMs;
-    }
-
-    void setCharsChunkSize(int charsChunkSize) {
-        this.charsChunkSize = charsChunkSize;
-    }
-
-    private boolean isCmdLengthEnoughToSendInChunks(int length, int chunkSize) {
-        return length > 2 * chunkSize;
-    }
-
-    private String enhanceCommandWithEOL(@Nonnull String originalCommand) {
-        char commandEnding = originalCommand.charAt(originalCommand.length() - 1);
-        if (commandEnding != '\n' && commandEnding != '\r') {
-            return originalCommand + EOL;
-        }
-        return originalCommand;
-    }
-
-    private Channel provideSessionChannel(String channelType, int port, int timeout) throws JSchException {
-        connectSession(this.hostName, this.userName, this.passWord, port, timeout);
-        session.setServerAliveCountMax(
-            0); // If this is not set to '0', then socket timeout on all reads will not work!!!!
-        return session.openChannel(channelType);
     }
 
-    private void connectSession(String hostname, String username, String password, int port, int timeout) throws JSchException {
-        session = jsch.getSession(username, hostname, port);
-        session.setPassword(password);
-        session.setUserInfo(new MyUserInfo()); //needed?
-        session.setConfig(STRICT_HOST_CHECK_KEY, STRICT_HOST_CHECK_VALUE);
-        session.connect(timeout);
-    }
 
 }
 
  * ============LICENSE_START=======================================================
  * ONAP : APPC
  * ================================================================================
- * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * Copyright (C) 2017-2018 AT&T Intellectual Property. All rights reserved.
  * ================================================================================
  * Copyright (C) 2017 Amdocs
  * =============================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
  * You may obtain a copy of the License at
- * 
+ *
  *      http://www.apache.org/licenses/LICENSE-2.0
- * 
+ *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS,
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  * See the License for the specific language governing permissions and
  * limitations under the License.
- * 
- * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ *
  * ============LICENSE_END=========================================================
  */
 
 package org.onap.appc.ccadaptor;
 
-import static org.onap.appc.ccadaptor.ConfigComponentAdaptor.GET_CONFIG_TEMPLATE_PARAM;
-import static org.onap.appc.ccadaptor.ConfigComponentAdaptor.HOST_IP_PARAM;
-import static org.onap.appc.ccadaptor.ConfigComponentAdaptor.PASSWORD_PARAM;
-import static org.onap.appc.ccadaptor.ConfigComponentAdaptor.PORT_NUMBER_PARAM;
-import static org.onap.appc.ccadaptor.ConfigComponentAdaptor.USERNAME_PARAM;
-
 import java.util.HashMap;
 import java.util.Map;
 import java.util.Properties;
         String Get_config_template = ("get_config_template");
         String key = "GetCliRunningConfig";
         Map<String, String> parameters = new HashMap<>();
-        parameters.put(HOST_IP_PARAM, "test");
-        parameters.put(USERNAME_PARAM, "test");
-        parameters.put(PASSWORD_PARAM, "password");
-        parameters.put(PORT_NUMBER_PARAM, "22");
-        parameters.put(GET_CONFIG_TEMPLATE_PARAM, Get_config_template);
+        parameters.put("Host_ip_address", "test");
+        parameters.put("User_name", "test");
+        parameters.put("Password", "password");
+        parameters.put("Port_number", "22");
+        parameters.put("Get_config_template", Get_config_template);
 
         SvcLogicContext ctx = new SvcLogicContext();
         ctx.setAttribute(
         String Get_config_template = ("get_config_template");
         String key = "DownloadCliConfig";
         Map<String, String> parameters = new HashMap<>();
-        parameters.put(HOST_IP_PARAM, "test");
-        parameters.put(USERNAME_PARAM, "test");
-        parameters.put(PASSWORD_PARAM, "password");
-        parameters.put(PORT_NUMBER_PARAM, "22");
-        parameters.put(GET_CONFIG_TEMPLATE_PARAM, Get_config_template);
+        parameters.put("Host_ip_address", "test");
+        parameters.put("User_name", "test");
+        parameters.put("Password", "password");
+        parameters.put("Port_number", "22");
+        parameters.put("Get_config_template", Get_config_template);
 
         SvcLogicContext ctx = new SvcLogicContext();
         ctx.setAttribute(
         String Get_config_template = ("get_config_template");
         String key = "xml-download";
         Map<String, String> parameters = new HashMap<>();
-        parameters.put(HOST_IP_PARAM, "test");
-        parameters.put(USERNAME_PARAM, "test");
-        parameters.put(PASSWORD_PARAM, "password");
-        parameters.put(PORT_NUMBER_PARAM, "22");
-        parameters.put(GET_CONFIG_TEMPLATE_PARAM, Get_config_template);
+        parameters.put("Host_ip_address", "test");
+        parameters.put("User_name", "test");
+        parameters.put("Password", "password");
+        parameters.put("Port_number", "22");
+        parameters.put("Get_config_template", Get_config_template);
 
         SvcLogicContext ctx = new SvcLogicContext();
         ctx.setAttribute(
         String Get_config_template = ("get_config_template");
         String key = "xml-getrunningconfig";
         Map<String, String> parameters = new HashMap<>();
-        parameters.put(HOST_IP_PARAM, "test");
-        parameters.put(USERNAME_PARAM, "test");
-        parameters.put(PASSWORD_PARAM, "password");
-        parameters.put(PORT_NUMBER_PARAM, "22");
-        parameters.put(GET_CONFIG_TEMPLATE_PARAM, Get_config_template);
+        parameters.put("Host_ip_address", "test");
+        parameters.put("User_name", "test");
+        parameters.put("Password", "password");
+        parameters.put("Port_number", "22");
+        parameters.put("Get_config_template", Get_config_template);
 
         SvcLogicContext ctx = new SvcLogicContext();
         ctx.setAttribute(
         String Get_config_template = ("get_config_template");
         String key = "escapeSql";
         Map<String, String> parameters = new HashMap<>();
-        parameters.put(HOST_IP_PARAM, "test");
-        parameters.put(USERNAME_PARAM, "test");
-        parameters.put(PASSWORD_PARAM, "password");
-        parameters.put(PORT_NUMBER_PARAM, "22");
-        parameters.put(GET_CONFIG_TEMPLATE_PARAM, Get_config_template);
+        parameters.put("Host_ip_address", "test");
+        parameters.put("User_name", "test");
+        parameters.put("Password", "password");
+        parameters.put("Port_number", "22");
+        parameters.put("Get_config_template", Get_config_template);
 
         SvcLogicContext ctx = new SvcLogicContext();
         ctx.setAttribute(
         String Download_config_template = ("test");
         String key = "GetCliRunningConfig";
         Map<String, String> parameters = new HashMap<>();
-        parameters.put(HOST_IP_PARAM, "test");
-        parameters.put(USERNAME_PARAM, "test");
-        parameters.put(PASSWORD_PARAM, "password");
-        parameters.put(PORT_NUMBER_PARAM, "22");
+        parameters.put("Host_ip_address", "test");
+        parameters.put("User_name", "test");
+        parameters.put("Password", "password");
+        parameters.put("Port_number", "22");
+        parameters.put("Get_config_template", Get_config_template);
         parameters.put("Protocol", "netconf");
         parameters.put("Contents", "Contents");
-        parameters.put(GET_CONFIG_TEMPLATE_PARAM, Get_config_template);
         parameters.put("Download_config_template", Download_config_template);
         parameters.put("Config_contents", "test");
 
         cca.configure(key, parameters, ctx);
     }
 
-    @Test
+    //@Test
     public void testAll2() {
         Properties props = null;
         ConfigComponentAdaptor cca = new ConfigComponentAdaptor(props);
         String result = Whitebox.invokeMethod(cca, "prepare", ctx, "test", "test");
         Assert.assertEquals("template", result);
     }
+
 }
 
--- /dev/null
+/*-\r
+ * ============LICENSE_START=======================================================\r
+ * ONAP : APPC\r
+ * ================================================================================\r
+ * Copyright (C) 2017-2018 AT&T Intellectual Property. All rights reserved.\r
+ * ================================================================================\r
+ * Copyright (C) 2017 Amdocs\r
+ * =============================================================================\r
+ * Licensed under the Apache License, Version 2.0 (the "License");\r
+ * you may not use this file except in compliance with the License.\r
+ * You may obtain a copy of the License at\r
+ *\r
+ *      http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * Unless required by applicable law or agreed to in writing, software\r
+ * distributed under the License is distributed on an "AS IS" BASIS,\r
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+ * See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ *\r
+ * ============LICENSE_END=========================================================\r
+ */\r
+\r
+package org.onap.appc.ccadaptor;\r
+\r
+import static junit.framework.TestCase.assertTrue;\r
+\r
+import java.io.BufferedReader;\r
+import java.io.FileReader;\r
+import java.io.IOException;\r
+import java.nio.file.Files;\r
+import java.nio.file.Path;\r
+import java.nio.file.Paths;\r
+import org.junit.AfterClass;\r
+import org.junit.BeforeClass;\r
+import org.junit.Test;\r
+\r
+public class DebugLogTest {\r
+\r
+    @BeforeClass\r
+    public static void createEmptyLogFile() throws IOException {\r
+        Path logPath = Paths.get(buildTestResourcePath("rt.log"));\r
+        Files.createFile(logPath);\r
+    }\r
+\r
+    @AfterClass\r
+    public static void removeLog() throws IOException {\r
+        Path existingLogPath = Paths.get(buildTestResourcePath("rt.log"));\r
+        Files.delete(existingLogPath);\r
+    }\r
+\r
+    //@Test\r
+    public void printRTAriDebug_shouldNotDoAnything_whenLogFileDoesNotExist() {\r
+        // GIVEN\r
+        Path nonExistingLogPath = Paths.get(buildTestResourcePath("nonExisting.log"));\r
+\r
+        // WHEN\r
+       // DebugLog debugLog = new DebugLog(nonExistingLogPath);\r
+        DebugLog debugLog = new DebugLog();\r
+        debugLog.printRTAriDebug("testMethod", "Custom Debug Message");\r
+\r
+        // THEN\r
+        assertTrue(Files.notExists(nonExistingLogPath));\r
+    }\r
+\r
+    //@Test\r
+    public void printRTAriDebug_shouldWriteMessageToLogWithDate_whenLogFileExists() throws IOException {\r
+        // GIVEN\r
+        Path existingLogPath = Paths.get(buildTestResourcePath("rt.log"));\r
+\r
+        // WHEN\r
+        //DebugLog debugLog = new DebugLog(existingLogPath);\r
+        DebugLog debugLog = new DebugLog();\r
+        debugLog.printRTAriDebug("testMethod", "Custom Debug Message");\r
+\r
+        // THEN\r
+        String logEntry = readLogEntry(existingLogPath);\r
+        assertTrue(logEntry.matches("\\d{4}/\\d{2}/\\d{2} \\d{2}:\\d{2}:\\d{2} testMethod Custom Debug Message"));\r
+    }\r
+\r
+    private static String buildTestResourcePath(String resourceName) {\r
+        String path = DebugLogTest.class.getClassLoader().getResource("./").getPath();\r
+        return path + resourceName;\r
+    }\r
+\r
+    private String readLogEntry(Path path) throws IOException {\r
+        try (BufferedReader br = new BufferedReader(new FileReader(path.toFile()))) {\r
+            return br.readLine();\r
+        }\r
+    }\r
+}\r
 
  * ============LICENSE_START=======================================================
  * ONAP : APPC
  * ================================================================================
- * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * Copyright (C) 2017-2018 AT&T Intellectual Property. All rights reserved.
  * ================================================================================
  * Copyright (C) 2017 Amdocs
  * =============================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
  * You may obtain a copy of the License at
- * 
+ *
  *      http://www.apache.org/licenses/LICENSE-2.0
- * 
+ *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS,
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  * See the License for the specific language governing permissions and
  * limitations under the License.
- * 
- * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ *
  * ============LICENSE_END=========================================================
  */
 
 
 @RunWith(MockitoJUnitRunner.class)
 public class SshJcraftWrapperTest {
-
-    private static final String USER = "username";
-    private static final String PASS = "pass";
-    private static final String HOST = "hostname";
-    private static final String SUBSYSTEM = "netconf";
-    private static final String PROMPT = "]]>]]>";
-    private static final String SEARCH_STR = "</rpc-reply>";
-    private static final String REMOTE_PATH = "/var/tmp/path/";
-    private static final String SOURCE_PATH = "/tmp/local/path/";
-    private static final String IO_EXCEPTION_MSG = "IOException should be thrown";
-    private static final int READ_TIMEOUT = 180_000;
-    private static final int PORT_NUM = 23;
-    private static final int SESSION_TIMEOUT = 30_000;
-    private static final int READ_INTERVAL_MS = 1;
-    private static final int READ_BUFFER_SIZE = 10;
-
-    private SshJcraftWrapper cut;
-    @Mock
-    private JSch jSchMock;
-    @Mock
-    private Session session;
-    @Mock
-    private ChannelShell channelShell;
-    @Mock
-    private ChannelSubsystem channelSubsystem;
-    @Mock
-    private InputStream channelIs;
-    @Mock
-    private OutputStream channelOs;
-    @Mock
-    private ChannelSftp channelSftp;
-
-    @Before
-    public void setUpTest() throws Exception {
-        InputStream is = IOUtils.toInputStream("test input stream:~#", "UTF-8");
-        given(channelShell.getInputStream()).willReturn(is);
-        given(channelSubsystem.getInputStream()).willReturn(is);
-        given(session.openChannel(SshJcraftWrapper.CHANNEL_SHELL_TYPE)).willReturn(channelShell);
-        given(session.openChannel(SshJcraftWrapper.CHANNEL_SUBSYSTEM_TYPE)).willReturn(channelSubsystem);
-        given(jSchMock.getSession(anyString(), anyString(), anyInt())).willReturn(session);
-        cut = new SshJcraftWrapper(jSchMock, READ_INTERVAL_MS, READ_BUFFER_SIZE);
-    }
-
-    @Ignore
     @Test
-    public void TestCheckIfReceivedStringMatchesDelimeter() {
+    public void TestCheckIfReceivedStringMatchesDelimeter(){
         SshJcraftWrapper wrapper = new SshJcraftWrapper();
         wrapper.getTheDate();
         boolean result = wrapper.checkIfReceivedStringMatchesDelimeter("#", "test#", "test#");
         Assert.assertEquals(true, result);
     }
 
-    @Ignore
     @Test
-    public void testRemoveWhiteSpaceAndNewLineCharactersAroundString() {
+    public void testRemoveWhiteSpaceAndNewLineCharactersAroundString(){
         SshJcraftWrapper wrapper = new SshJcraftWrapper();
         String nameSpace = wrapper.removeWhiteSpaceAndNewLineCharactersAroundString("namespace ");
         Assert.assertEquals("namespace", nameSpace);
     }
 
-    @Ignore
     @Test
-    public void testStripOffCmdFromRouterResponse() {
+    public void testStripOffCmdFromRouterResponse(){
         SshJcraftWrapper wrapper = new SshJcraftWrapper();
         String result = wrapper.stripOffCmdFromRouterResponse("test\nsuccess");
         Assert.assertEquals("success\n", result);
     }
 
     //@Test
-    public void testGetLastFewLinesOfFile() throws FileNotFoundException, IOException {
+    public void testGetLastFewLinesOfFile() throws FileNotFoundException, IOException{
         SshJcraftWrapper wrapper = new SshJcraftWrapper();
         URL path = SshJcraftWrapperTest.class.getResource("Test");
         File file = new File(path.getFile());
-        String value = wrapper.getLastFewLinesOfFile(file, 1);
+        String value = wrapper.getLastFewLinesOfFile(file,1);
         Assert.assertEquals("\nTest data 3", value);
     }
 
-    @Ignore
-    @Test(expected = Exception.class)
-    public void testSetRouterCommandType() throws IOException {
+    @Test(expected=Exception.class)
+    public void testSetRouterCommandType() throws IOException{
         SshJcraftWrapper wrapper = new SshJcraftWrapper();
         wrapper.setRouterCommandType("test");
         wrapper.receiveUntil("test", 2, "test");
     }
 
-    @Ignore
     @Test
-    public void testValues() throws IOException {
+    public void testValues() throws IOException{
         SshJcraftWrapper wrapper = new SshJcraftWrapper();
         wrapper.setEquipNameCode("testcode");
         wrapper.setRouterCommandType("testcommand");
-        String equipName = wrapper.getEquipNameCode();
+        String equipName =wrapper.getEquipNameCode();
         wrapper.getHostName();
         wrapper.getPassWord();
         wrapper.getRouterName();
         Assert.assertEquals("testcode", equipName);
     }
 
-    @Ignore
-    @Test(expected = Exception.class)
-    public void testSetRouterCommandType2() throws IOException {
+    @Test(expected=Exception.class)
+    public void testSetRouterCommandType2() throws IOException{
         SshJcraftWrapper wrapper = new SshJcraftWrapper();
         wrapper.appendToRouterFile("test", 2);
-        StringBuilder sb = new StringBuilder();
-        sb.append("test");
-        wrapper.appendToRouterFile("Test.txt", sb);
+        StringBuffer buffer = new StringBuffer();
+        buffer.append("test");
+        wrapper.appendToRouterFile("Test.txt", buffer);
         wrapper.receiveUntilBufferFlush(3, 4, "test");
     }
 
-    @Ignore
-    @Test(expected = Exception.class)
-    public void testSetRouterCommandType3() throws IOException {
+    @Test(expected=Exception.class)
+    public void testSetRouterCommandType3() throws IOException{
         SshJcraftWrapper wrapper = new SshJcraftWrapper();
         wrapper.checkIfReceivedStringMatchesDelimeter(3, "test");
     }
-
-    //real jUnits
-    @Test(expected = IOException.class)
-    public void connect_shouldThrowIOException_whenJSchFails() throws Exception {
-        //given
-        given(jSchMock.getSession(anyString(), anyString(), anyInt())).willThrow(new JSchException());
-
-        //when
-        cut.connect(HOST, USER, PASS);
-
-        //then
-        fail(IO_EXCEPTION_MSG);
-    }
-
-    @Test
-    public void connect_shouldSetVariables() throws Exception {
-        //when
-        cut.connect(HOST, USER, PASS);
-
-        //then
-        assertEquals(HOST, cut.getHostName());
-        assertEquals(HOST, cut.getRouterName());
-        assertEquals(USER, cut.getUserName());
-        assertEquals(PASS, cut.getPassWord());
-    }
-
-    @Test
-    public void connect_shouldSetUpSessionWithProperInvocationOrder() throws Exception {
-        //given
-        InOrder inOrder = inOrder(session, channelShell);
-
-        //when
-        cut.connect(HOST, USER, PASS);
-
-        //then
-        verifySessionConfigurationOrderForChannelShellOpening(
-            inOrder, USER, HOST, PASS, SshJcraftWrapper.DEFAULT_PORT, SESSION_TIMEOUT);
-    }
-
-    @Test
-    public void connect_shouldFinishSuccessfully_whenExceptionThrownDuringReceivingPhase() throws Exception {
-        //given
-        doThrow(new JSchException()).when(session).setTimeout(anyInt());
-
-        //when
-        cut.connect(HOST, USER, PASS);
-
-        //then
-        verify(session).setTimeout(anyInt());
-    }
-
-    @Test(expected = IOException.class)
-    public void connect_withSubsystem_shouldThrowIOException_whenJSchFails() throws Exception {
-        //given
-        given(jSchMock.getSession(anyString(), anyString(), anyInt())).willThrow(new JSchException());
-
-        //when
-        cut.connect(HOST, USER, PASS, SESSION_TIMEOUT, PORT_NUM, SUBSYSTEM);
-
-        //then
-        fail(IO_EXCEPTION_MSG);
-    }
-
-    @Test
-    public void connect_withSubsystem_shouldSetRouterName() throws Exception {
-        //when
-        cut.connect(HOST, USER, PASS, SESSION_TIMEOUT, PORT_NUM, SUBSYSTEM);
-
-        //then
-        assertEquals(HOST, cut.getRouterName());
-    }
-
-    @Test
-    public void connect_withSubsystem_shouldSetUpSessionWithProperInvocationOrder() throws Exception {
-        //given
-        InOrder inOrder = inOrder(session, channelSubsystem);
-
-        //when
-        cut.connect(HOST, USER, PASS, SESSION_TIMEOUT, PORT_NUM, SUBSYSTEM);
-
-        //then
-        verify(jSchMock).getSession(USER, HOST, PORT_NUM);
-        inOrder.verify(session).setPassword(PASS);
-        inOrder.verify(session).setUserInfo(any(UserInfo.class));
-        inOrder.verify(session)
-            .setConfig(SshJcraftWrapper.STRICT_HOST_CHECK_KEY, SshJcraftWrapper.STRICT_HOST_CHECK_VALUE);
-        inOrder.verify(session).connect(SESSION_TIMEOUT);
-        inOrder.verify(session).setServerAliveCountMax(0);
-        inOrder.verify(session).openChannel(SshJcraftWrapper.CHANNEL_SUBSYSTEM_TYPE);
-        inOrder.verify(channelSubsystem).getInputStream();
-        inOrder.verify(channelSubsystem).connect(anyInt());
-        inOrder.verifyNoMoreInteractions();
-        verifyNoMoreInteractions(jSchMock);
-    }
-
-    @Test(expected = IOException.class)
-    public void connect_withPrompt_shouldThrowIOException_whenJSchFails() throws Exception {
-        //given
-        given(jSchMock.getSession(anyString(), anyString(), anyInt())).willThrow(new JSchException());
-
-        //when
-        cut.connect(HOST, USER, PASS, PROMPT, SESSION_TIMEOUT);
-
-        //then
-        fail(IO_EXCEPTION_MSG);
-    }
-
-    @Test
-    public void connect_withPrompt_shouldSetVariables() throws Exception {
-        //when
-        cut.connect(HOST, USER, PASS, PROMPT, SESSION_TIMEOUT);
-
-        //then
-        assertEquals(HOST, cut.getHostName());
-        assertEquals(HOST, cut.getRouterName());
-        assertEquals(USER, cut.getUserName());
-        assertEquals(PASS, cut.getPassWord());
-    }
-
-    @Test
-    public void connect_withPrompt_shouldFinishSuccessfully_whenExceptionThrownDuringReceivingPhase() throws Exception {
-        //given
-        doThrow(new JSchException()).when(session).setTimeout(anyInt());
-
-        //when
-        cut.connect(HOST, USER, PASS, PROMPT, SESSION_TIMEOUT);
-
-        //then
-        verify(session).setTimeout(anyInt());
-    }
-
-    @Test
-    public void connect_withPrompt_shouldSetUpSessionWithProperInvocationOrder() throws Exception {
-        //given
-        InOrder inOrder = inOrder(session, channelShell);
-
-        //when
-        cut.connect(HOST, USER, PASS, PROMPT, SESSION_TIMEOUT);
-
-        //then
-        verifySessionConfigurationOrderForChannelShellOpening(
-            inOrder, USER, HOST, PASS, SshJcraftWrapper.DEFAULT_PORT, SESSION_TIMEOUT);
-    }
-
-    @Test(expected = IOException.class)
-    public void connect_withPort_shouldThrowIOException_whenJSchFails() throws Exception {
-        //given
-        given(jSchMock.getSession(anyString(), anyString(), anyInt())).willThrow(new JSchException());
-
-        //when
-        cut.connect(HOST, USER, PASS, PROMPT, SESSION_TIMEOUT, PORT_NUM);
-
-        //then
-        fail(IO_EXCEPTION_MSG);
-    }
-
-    @Test
-    public void connect_withPort_shouldSetVariables() throws Exception {
-        //when
-        cut.connect(HOST, USER, PASS, PROMPT, SESSION_TIMEOUT, PORT_NUM);
-
-        //then
-        assertEquals(HOST, cut.getHostName());
-        assertEquals(HOST, cut.getRouterName());
-        assertEquals(USER, cut.getUserName());
-        assertEquals(PASS, cut.getPassWord());
-    }
-
-    @Test
-    public void connect_withPort_shouldFinishSuccessfully_whenExceptionThrownDuringReceivingPhase() throws Exception {
-        //given
-        doThrow(new JSchException()).when(session).setTimeout(anyInt());
-
-        //when
-        cut.connect(HOST, USER, PASS, PROMPT, SESSION_TIMEOUT, PORT_NUM);
-
-        //then
-        verify(session).setTimeout(anyInt());
-    }
-
-    @Test
-    public void connect_withPort_shouldSetUpSessionWithProperInvocationOrder() throws Exception {
-        //given
-        InOrder inOrder = inOrder(session, channelShell);
-
-        //when
-        cut.connect(HOST, USER, PASS, PROMPT, SESSION_TIMEOUT, PORT_NUM);
-
-        //then
-        verifySessionConfigurationOrderForChannelShellOpening(inOrder, USER, HOST, PASS, PORT_NUM, SESSION_TIMEOUT);
-    }
-
-    private void verifySessionConfigurationOrderForChannelShellOpening(InOrder inOrder, String user, String host,
-        String pass, int port, int sessionTimeout) throws Exception {
-        verify(jSchMock).getSession(user, host, port);
-        inOrder.verify(session).setPassword(pass);
-        inOrder.verify(session).setUserInfo(any(UserInfo.class));
-        inOrder.verify(session)
-            .setConfig(SshJcraftWrapper.STRICT_HOST_CHECK_KEY, SshJcraftWrapper.STRICT_HOST_CHECK_VALUE);
-        inOrder.verify(session).connect(sessionTimeout);
-        inOrder.verify(session).setServerAliveCountMax(0);
-        inOrder.verify(session).openChannel(SshJcraftWrapper.CHANNEL_SHELL_TYPE);
-        inOrder.verify(channelShell).getInputStream();
-        inOrder.verify(channelShell).connect();
-        inOrder.verify(session).setTimeout(anyInt());
-        inOrder.verifyNoMoreInteractions();
-        verifyNoMoreInteractions(jSchMock);
-    }
-
-    @Test
-    public void closeConnection_shouldCloseReaderChannelAndSession_inAGivenOrder() throws Exception {
-        //given
-        provideConnectedSubsystemInstance();
-        InOrder inOrder = inOrder(channelIs, channelSubsystem, session);
-
-        //when
-        cut.closeConnection();
-
-        //then
-        inOrder.verify(channelIs).close();
-        inOrder.verify(channelSubsystem).disconnect();
-        inOrder.verify(session).disconnect();
-        inOrder.verifyNoMoreInteractions();
-    }
-
-    @Test
-    public void closeConnection_shouldCloseChannelAndSession_whenClosingReaderFails() throws Exception {
-        //given
-        doThrow(new IOException("failed to close reader")).when(channelIs).close();
-        provideConnectedSubsystemInstance();
-
-        //when
-        cut.closeConnection();
-
-        //then
-        verify(channelIs).close();
-        verify(channelSubsystem).disconnect();
-        verify(session).disconnect();
-    }
-
-    @Test
-    public void closeConnection_shouldBeIdempotent_whenRunOnNewInstance() throws Exception {
-        //given
-        assertFalse(cut.isConnected());
-
-        //when
-        cut.closeConnection();
-
-        //then
-        assertFalse(cut.isConnected());
-    }
-
-    @Test
-    public void closeConnection_shouldBeIdempotent_whenRunTwiceOnConnectedInstance() throws Exception {
-        //given
-        provideConnectedSubsystemInstance();
-
-        //when
-        cut.closeConnection();
-        cut.closeConnection();
-
-        //then
-        assertFalse(cut.isConnected());
-    }
-
-    @Test
-    public void closeConnection_shouldCloseResourcesOnce_whenRunTwiceOnConnectedInstance() throws Exception {
-        //given
-        provideConnectedSubsystemInstance();
-
-        //when
-        cut.closeConnection();
-        cut.closeConnection();
-
-        //then
-        verify(channelIs, times(1)).close();
-        verify(channelSubsystem, times(1)).disconnect();
-        verify(session, times(1)).disconnect();
-    }
-
-    private void provideConnectedSubsystemInstance() throws Exception {
-        given(channelSubsystem.getInputStream()).willReturn(channelIs);
-        cut.connect(HOST, USER, PASS, SESSION_TIMEOUT, PORT_NUM, SUBSYSTEM);
-        assertTrue(cut.isConnected());
-    }
-
-    //receiveUntil tests begin
-    @Test(expected = IllegalStateException.class)
-    public void receiveUntil_shouldThrowIllegalStateException_whenInstanceIsNotConnected() throws Exception {
-        //given
-        assertFalse(cut.isConnected());
-
-        //when
-        cut.receiveUntil(SEARCH_STR, READ_TIMEOUT, "");
-
-        //then
-        fail("IllegalStateException should be thrown");
-    }
-
-    @Test(expected = IllegalStateException.class)
-    public void receiveUntil_shouldThrowIllegalStateException_whenJschReaderStreamIsNotAvailable() throws Exception {
-        //given
-        provideConnectedSubsystemInstance();
-        given(channelIs.available()).willReturn(0);
-
-        //when
-        cut.receiveUntil(SEARCH_STR, READ_TIMEOUT, "");
-
-        //then
-        fail("IllegalStateException should be thrown");
-    }
-
-    @Test(expected = TimedOutException.class)
-    public void receiveUntil_shouldThrowTimedOutException_whenSessionFails() throws Exception {
-        //given
-        given(channelSubsystem.getInputStream()).willReturn(IOUtils.toInputStream("test input stream:~#", "UTF-8"));
-        cut.connect(HOST, USER, PASS, SESSION_TIMEOUT, PORT_NUM, SUBSYSTEM);
-        assertTrue(cut.isConnected());
-        doThrow(new JSchException("Session is not available")).when(session).setTimeout(anyInt());
-
-        //when
-        cut.receiveUntil(SEARCH_STR, READ_TIMEOUT, "");
-
-        //then
-        fail("TimedOutException should be thrown");
-    }
-
-    @Test(expected = TimedOutException.class)
-    public void receiveUntil_shouldThrowTimedOutException_whenReadFails() throws Exception {
-        //given
-        provideConnectedSubsystemInstance();
-        given(channelIs.available()).willReturn(1);
-        given(channelIs.read(any(), anyInt(), anyInt())).willThrow(new IOException("Could not read stream"));
-
-        //when
-        cut.receiveUntil(SEARCH_STR, READ_TIMEOUT, "");
-
-        //then
-        fail("TimedOutException should be thrown");
-    }
-
-    @Test(expected = TimedOutException.class)
-    public void receiveUntil_shouldThrowException_whenTimeoutIsReached() throws Exception {
-        //given
-        String streamContent = "test input stream:~#";
-        provideConnectedSubsystemInstanceWithStreamContent(streamContent);
-
-        //when
-        cut.receiveUntil(SEARCH_STR, -1000, " Some fake command\n");
-
-        //then
-        fail("TimedOutException should be thrown");
-    }
-
-    @Test(expected = TimedOutException.class)
-    public void receiveUntil_shouldThrowException_whenReachedEndOfStream_andCouldNotReadMoreBytes() throws Exception {
-        //given
-        provideConnectedSubsystemInstance();
-        given(channelIs.available()).willReturn(1);
-        given(channelIs.read(any(), anyInt(), anyInt())).willReturn(-1);
-
-        //when
-        cut.receiveUntil(SEARCH_STR, READ_TIMEOUT, "");
-
-        //then
-        fail("TimedOutException should be thrown");
-    }
-
-    @Test
-    public void receiveUntil_shouldReadUnderlyingStream_andStripOffFirstLine() throws Exception {
-        //given
-        String command = "Command" + SshJcraftWrapper.EOL;
-        String reply = "Reply" + SshJcraftWrapper.EOL;
-        String streamContent = command + reply + PROMPT;
-        provideConnectedSubsystemInstanceWithStreamContent(streamContent);
-
-        //when
-        String result = cut.receiveUntil(PROMPT, SESSION_TIMEOUT, command);
-
-        //then
-        assertEquals(reply + PROMPT, result);
-    }
-
-    @Test
-    public void receiveUntil_shouldReadUnderlyingStream_andReturnWholeReadString() throws Exception {
-        //given
-        String streamContent = "Command and Reply in just one line" + PROMPT;
-        provideConnectedSubsystemInstanceWithStreamContent(streamContent);
-
-        //when
-        String result = cut.receiveUntil(PROMPT, SESSION_TIMEOUT, streamContent);
-
-        //then
-        assertEquals(streamContent, result);
-    }
-
-    @Test
-    public void receiveUntil_shouldCutOffSpecialCharactersFromStream() throws Exception {
-        //given
-        char special1 = Character.UNASSIGNED;
-        char special2 = Character.ENCLOSING_MARK;
-        char special3 = Character.LINE_SEPARATOR;
-        char special4 = Character.MODIFIER_SYMBOL;
-        StringBuilder sb = new StringBuilder("Command");
-        sb.append(special1).append("With").append(special2).append("Special")
-            .append(special3).append("Characters").append(special4).append("Set").append(PROMPT);
-
-        provideConnectedSubsystemInstanceWithStreamContent(sb.toString());
-
-        //when
-        String result = cut.receiveUntil(PROMPT, SESSION_TIMEOUT, "");
-
-        //then
-        assertEquals("CommandWithSpecialCharactersSet" + PROMPT, result);
-    }
-
-    @Test
-    public void receiveUntil_shouldReadUnderlyingStream_untilCLIDelimiterFound_whenProperDelimiterSet()
-        throws Exception {
-        //given
-        String cliDelimiter = "#$";
-        String delimiters = PROMPT + SshJcraftWrapper.DELIMITERS_SEPARATOR + cliDelimiter;
-        String streamContent = "Command for CLI invocation #";
-        provideConnectedSubsystemInstanceWithStreamContent(streamContent);
-
-        //when
-        String result = cut.receiveUntil(delimiters, SESSION_TIMEOUT, streamContent);
-
-        //then
-        assertEquals(streamContent, result);
-    }
-
-    @Test
-    public void receiveUntil_shouldReadUnderlyingStream_untilCLIDelimiterFound_whenCLICommandSet() throws Exception {
-        //given
-        String streamContent = "Command for CLI invocation #";
-        provideConnectedSubsystemInstanceWithStreamContent(streamContent);
-        cut.setRouterCommandType("CLI");
-
-        //when
-        String result = cut.receiveUntil("", SESSION_TIMEOUT, streamContent);
-
-        //then
-        assertEquals(streamContent, result);
-    }
-
-    @Test
-    public void receiveUntil_shouldReadUnderlyingStream_untilCLIDelimiterFound_forShowConfigCommand() throws Exception {
-        //given
-        String streamContent = "show config\nconfig content#";
-        provideConnectedSubsystemInstanceWithStreamContent(streamContent);
-
-        //when
-        String result = cut.receiveUntil("#", SESSION_TIMEOUT, streamContent);
-
-        //then
-        assertEquals("config content#", result);
-    }
-
-    @Test
-    public void receiveUntil_shouldWriteOutputToRouterFile_whenReadingIOSXRswConfigFile_confirmFromFile()
-        throws Exception {
-        receiveUntil_shouldWriteOutputToRouterFile_whenReadingIOSXRswConfigFile();
-    }
-
-    @Test
-    public void receiveUntil_shouldWriteOutputToRouterFile_whenReadingIOSXRswConfigFile_confirmFromBuffer()
-        throws Exception {
-        //given
-        int biggerBufferSize = 32;
-        cut = new SshJcraftWrapper(jSchMock, READ_INTERVAL_MS, biggerBufferSize);
-
-        receiveUntil_shouldWriteOutputToRouterFile_whenReadingIOSXRswConfigFile();
-    }
-
-    private void receiveUntil_shouldWriteOutputToRouterFile_whenReadingIOSXRswConfigFile() throws Exception {
-        //given
-        String routerName = "router";
-        String command = "RP/0/RP0/CPU0: " + routerName + " #IOS_XR_uploadedSwConfigCmd";
-        String configFileEnding = "\nXML>";
-        String streamContent = "Config file\ncontent" + configFileEnding;
-        provideConnectedSubsystemInstanceWithStreamContent(streamContent);
-
-        //when
-        String result = cut.receiveUntil("", SESSION_TIMEOUT, command);
-
-        //then
-        assertNull(result); //TO-DO: it would be better to return empty string in this situation
-        assertFileExist(routerName);
-
-        //after
-        teardownFile(routerName);
-    }
-
-    private void provideConnectedSubsystemInstanceWithStreamContent(String streamContent) throws Exception {
-        given(channelSubsystem.getInputStream()).willReturn(IOUtils.toInputStream(streamContent, "UTF-8"));
-        cut.connect(HOST, USER, PASS, SESSION_TIMEOUT, PORT_NUM, SUBSYSTEM);
-        assertTrue(cut.isConnected());
-    }
-
-    private void teardownFile(String routerName) {
-        File file = new File(routerName);
-        if (file.exists() && file.isFile()) {
-            file.delete();
-        }
-    }
-
-    private void assertFileExist(String fileName) {
-        File file = new File(fileName);
-        assertTrue(file.exists());
-        assertTrue(file.isFile());
-    }
-
-    @Test
-    public void send_withReceive_shouldWriteCommandToChannelOutputStream_andReturnReceivedCommand() throws Exception {
-        //given
-        String command = "sdc";
-        String delimiter = ":";
-        InOrder inOrder = inOrder(channelOs);
-        provideConnectedSubsystemInstanceWithStreamContent(command + delimiter);
-        given(channelSubsystem.getOutputStream()).willReturn(channelOs);
-
-        //when
-        String result = cut.send(command, delimiter);
-
-        //then
-        verifySdcCommandSent(inOrder);
-        assertEquals(command + delimiter, result);
-    }
-
-    @Test
-    public void send_shouldWriteCommandToChannelOutputStream() throws Exception {
-        //given
-        String command = "sdc";
-        InOrder inOrder = inOrder(channelOs);
-        provideConnectedSubsystemInstance();
-        given(channelSubsystem.getOutputStream()).willReturn(channelOs);
-
-        //when
-        cut.send(command);
-
-        //then
-        verifySdcCommandSent(inOrder);
-    }
-
-    private void verifySdcCommandSent(InOrder inOrder) throws IOException {
-        inOrder.verify(channelOs).write('s');
-        inOrder.verify(channelOs).write('d');
-        inOrder.verify(channelOs).write('c');
-        inOrder.verify(channelOs, atLeastOnce()).flush();
-        inOrder.verify(channelOs, atLeastOnce()).close();
-        inOrder.verifyNoMoreInteractions();
-    }
-
-    @Test
-    public void send_withReceive_shouldWriteCommandInChunksToChannelOutputStream_andReturnReceivedCommand()
-        throws Exception {
-        //given
-        cut = new SshJcraftWrapper(jSchMock, READ_INTERVAL_MS, 1);
-        cut.setCharsChunkSize(1);
-        String command = "sdc";
-        String delimiter = ":";
-        int timeout = 9000;
-        provideConnectedSubsystemInstanceWithStreamContent(command + delimiter + SshJcraftWrapper.EOL);
-        given(channelSubsystem.getOutputStream()).willReturn(channelOs);
-        InOrder inOrder = inOrder(channelOs, session);
-
-        //when
-        String result = cut.send(command, delimiter);
-
-        //then
-        verifySdcCommandSentInChunk(inOrder, timeout);
-        assertEquals(command + delimiter, result);
-    }
-
-    @Test
-    public void send_shouldWriteCommandInChunksToChannelOutputStream() throws Exception {
-        //given
-        cut = new SshJcraftWrapper(jSchMock, READ_INTERVAL_MS, 1);
-        cut.setCharsChunkSize(1);
-        String command = "sdc";
-        int timeout = 9000;
-        provideConnectedSubsystemInstanceWithStreamContent(command + SshJcraftWrapper.EOL);
-        given(channelSubsystem.getOutputStream()).willReturn(channelOs);
-        InOrder inOrder = inOrder(channelOs, session);
-
-        //when
-        cut.send(command);
-
-        //then
-        verifySdcCommandSentInChunk(inOrder, timeout);
-    }
-
-    private void verifySdcCommandSentInChunk(InOrder inOrder, int timeout) throws Exception {
-        inOrder.verify(channelOs).write('s');
-        inOrder.verify(channelOs).flush();
-        inOrder.verify(session).setTimeout(timeout);
-        inOrder.verify(channelOs).write('d');
-        inOrder.verify(channelOs).flush();
-        inOrder.verify(session).setTimeout(timeout);
-        inOrder.verify(channelOs).write('c');
-        inOrder.verify(channelOs).flush();
-        inOrder.verify(session).setTimeout(timeout);
-        inOrder.verify(channelOs, atLeastOnce()).flush();
-        inOrder.verify(channelOs, atLeastOnce()).close();
-        inOrder.verifyNoMoreInteractions();
-    }
-
-    @Test
-    public void send_withReceive_shouldReturnActualResult_whenTimeoutReached() throws Exception {
-        //given
-        cut = new SshJcraftWrapper(jSchMock, READ_INTERVAL_MS, 1);
-        cut.setCharsChunkSize(1);
-        cut.setSessionTimeoutMs(-1);
-        String command = "sdc";
-        String delimiter = ":";
-        provideConnectedSubsystemInstanceWithStreamContent(command + SshJcraftWrapper.EOL);
-        given(channelSubsystem.getOutputStream()).willReturn(channelOs);
-
-        //when
-        String result = cut.send(command, delimiter);
-
-        //then
-        assertEquals(StringUtils.EMPTY, result);
-    }
-
-    @Test
-    public void send_withReceive_shouldReturnActualResult_whenCouldNotSetSessionTimeout() throws Exception {
-        //given
-        cut = new SshJcraftWrapper(jSchMock, READ_INTERVAL_MS, 1);
-        cut.setCharsChunkSize(1);
-        String command = "sdc";
-        String delimiter = ":";
-        provideConnectedSubsystemInstanceWithStreamContent(command + SshJcraftWrapper.EOL);
-        given(channelSubsystem.getOutputStream()).willReturn(channelOs);
-        doThrow(new JSchException("failed to set session timeout")).when(session).setTimeout(anyInt());
-
-        //when
-        String result = cut.send(command, delimiter);
-
-        //then
-        assertEquals(StringUtils.EMPTY, result);
-    }
-
-    @Test
-    public void sendChar_shouldWriteCharacterToChannelOutputStream() throws Exception {
-        //given
-        int charNum = 100;
-        provideConnectedSubsystemInstance();
-        given(channelSubsystem.getOutputStream()).willReturn(channelOs);
-        InOrder inOrder = inOrder(channelOs);
-
-        //when
-        cut.sendChar(charNum);
-
-        //then
-        inOrder.verify(channelOs).write(charNum);
-        inOrder.verify(channelOs, atLeastOnce()).flush();
-        inOrder.verify(channelOs, atLeastOnce()).close();
-        inOrder.verifyNoMoreInteractions();
-    }
-
-    @Test(expected = IOException.class)
-    public void sendChar_shouldRethrowIOException_whenOccurs() throws Exception {
-        //given
-        int charNum = 100;
-        provideConnectedSubsystemInstance();
-        given(channelSubsystem.getOutputStream()).willReturn(channelOs);
-        doThrow(new IOException()).when(channelOs).write(charNum);
-
-        //when
-        cut.sendChar(charNum);
-
-        //then
-        fail(IO_EXCEPTION_MSG);
-    }
-
-    @Test
-    public void send_withByteBuffer_shouldWriteBufferToChannelOutputStream() throws Exception {
-        //given
-        byte[] buffer = "Command".getBytes();
-        int offset = 5;
-        provideConnectedSubsystemInstance();
-        given(channelSubsystem.getOutputStream()).willReturn(channelOs);
-        InOrder inOrder = inOrder(channelOs);
-
-        //when
-        cut.send(buffer, offset, buffer.length);
-
-        //then
-        inOrder.verify(channelOs).write(buffer, offset, buffer.length);
-        inOrder.verify(channelOs, atLeastOnce()).flush();
-        inOrder.verify(channelOs, atLeastOnce()).close();
-        inOrder.verifyNoMoreInteractions();
-    }
-
-    @Test(expected = IOException.class)
-    public void send_withByteBuffer_shouldRethrowIOException_whenOccurs() throws Exception {
-        //given
-        byte[] buffer = "Command".getBytes();
-        int offset = 5;
-        provideConnectedSubsystemInstance();
-        given(channelSubsystem.getOutputStream()).willReturn(channelOs);
-        doThrow(new IOException()).when(channelOs).write(buffer, offset, buffer.length);
-
-        //when
-        cut.send(buffer, offset, buffer.length);
-
-        //then
-        fail(IO_EXCEPTION_MSG);
-    }
-
-    @Test
-    public void getSftpConnection_shouldSetupSessionWithProperInvocationOrder() throws Exception {
-        //given
-        SshJcraftWrapper instance = spy(cut);
-        given(instance.openSftpChannel(session)).willReturn(channelSftp);
-        InOrder inOrder = inOrder(session, channelSftp, instance);
-
-        //when
-        ChannelSftp result = instance.getSftpConnection(HOST, USER, PASS);
-
-        //then
-        verify(jSchMock).getSession(USER, HOST, SshJcraftWrapper.DEFAULT_PORT);
-        inOrder.verify(session).setPassword(PASS);
-        inOrder.verify(session).setUserInfo(any(UserInfo.class));
-        inOrder.verify(session)
-            .setConfig(SshJcraftWrapper.STRICT_HOST_CHECK_KEY, SshJcraftWrapper.STRICT_HOST_CHECK_VALUE);
-        inOrder.verify(session).connect(SESSION_TIMEOUT);
-        inOrder.verify(instance).openSftpChannel(session);
-        inOrder.verify(channelSftp).connect();
-        inOrder.verifyNoMoreInteractions();
-        assertEquals(channelSftp, result);
-    }
-
-    @Test
-    public void sftp_get_shouldReadFromChannelInputStream_andCloseConnection() throws Exception {
-        //given
-        String streamContent = "test input stream content";
-        SshJcraftWrapper spyInstance = spy(cut);
-        given(spyInstance.openSftpChannel(session)).willReturn(channelSftp);
-        given(channelSftp.get(REMOTE_PATH)).willReturn(IOUtils.toInputStream(streamContent, "UTF-8"));
-
-        //when
-        String result = spyInstance.get(REMOTE_PATH, HOST, USER, PASS);
-
-        //then
-        assertEquals(streamContent, result);
-        verify(channelSftp).disconnect();
-        verify(session).disconnect();
-    }
-
-    @Test(expected = IOException.class)
-    public void sftp_get_shouldThrowIOException_whenJschFails() throws Exception {
-        //given
-        SshJcraftWrapper spyInstance = spy(cut);
-        doThrow(new JSchException()).when(spyInstance).openSftpChannel(session);
-
-        //when
-        spyInstance.get(REMOTE_PATH, HOST, USER, PASS);
-
-        //then
-        fail(IO_EXCEPTION_MSG);
-    }
-
-    @Test(expected = IOException.class)
-    public void sftp_get_shouldThrowIOException_whenSftpOperationFails() throws Exception {
-        //given
-        SshJcraftWrapper spyInstance = spy(cut);
-        given(spyInstance.openSftpChannel(session)).willReturn(channelSftp);
-        doThrow(new SftpException(0, "sftp error")).when(channelSftp).get(REMOTE_PATH);
-
-        //when
-        spyInstance.get(REMOTE_PATH, HOST, USER, PASS);
-
-        //then
-        fail(IO_EXCEPTION_MSG);
-    }
-
-    @Test
-    public void sftp_get_shouldCloseSessionAndChannel_whenExceptionOccursOnConnectedInstance() throws Exception {
-        //given
-        SshJcraftWrapper spyInstance = spy(cut);
-        given(spyInstance.openSftpChannel(session)).willReturn(channelSftp);
-        doThrow(new SftpException(0, "sftp error")).when(channelSftp).get(REMOTE_PATH);
-        boolean ioException = false;
-
-        //when
-        try {
-            spyInstance.get(REMOTE_PATH, HOST, USER, PASS);
-        } catch (IOException e) {
-            ioException = true;
-        }
-
-        //then
-        assertTrue(ioException);
-        verify(channelSftp).disconnect();
-        verify(session).disconnect();
-    }
-
-    @Test
-    public void sftp_get_shouldSkipClosingSessionAndChannel_whenExceptionOccursOnNotConnectedInstance() throws Exception {
-        //given
-        doThrow(new JSchException()).when(jSchMock).getSession(anyString(), anyString(), anyInt());
-        boolean ioException = false;
-
-        //when
-        try {
-            cut.get(REMOTE_PATH, HOST, USER, PASS);
-        } catch (IOException e) {
-            ioException = true;
-        }
-
-        //then
-        assertTrue(ioException);
-        verify(channelSftp, never()).disconnect();
-        verify(session, never()).disconnect();
-    }
-
-    @Test
-    public void sftp_put_withIs_shouldRemoveOldFilesFromDestinationPath_andPutNewData() throws Exception {
-        //given
-        InputStream is = IOUtils.toInputStream("test input stream content", "UTF-8");
-        SshJcraftWrapper spyInstance = spy(cut);
-        given(spyInstance.openSftpChannel(session)).willReturn(channelSftp);
-        InOrder inOrder = inOrder(channelSftp, session);
-
-        //when
-        spyInstance.put(is, REMOTE_PATH, HOST, USER, PASS);
-
-        //then
-        inOrder.verify(channelSftp).rm(REMOTE_PATH + "*");
-        inOrder.verify(channelSftp).put(is, REMOTE_PATH, ChannelSftp.OVERWRITE);
-        inOrder.verify(channelSftp).disconnect();
-        inOrder.verify(session).disconnect();
-        inOrder.verifyNoMoreInteractions();
-    }
-
-    @Test
-    public void sftp_put_withIs_shouldContinueInsertingNewData_whenFileNotFoundDuringRemoval() throws Exception {
-        //given
-        InputStream is = IOUtils.toInputStream("test input stream content", "UTF-8");
-        SshJcraftWrapper spyInstance = spy(cut);
-        given(spyInstance.openSftpChannel(session)).willReturn(channelSftp);
-        doThrow(new SftpException(ChannelSftp.SSH_FX_NO_SUCH_FILE, "No such file/dir"))
-            .when(channelSftp).rm(REMOTE_PATH + "*");
-
-        //when
-        spyInstance.put(is, REMOTE_PATH, HOST, USER, PASS);
-
-        //then
-        verify(channelSftp).rm(REMOTE_PATH + "*");
-        verify(channelSftp).put(is, REMOTE_PATH, ChannelSftp.OVERWRITE);
-    }
-
-    @Test(expected = IOException.class)
-    public void sftp_put_withIs_shouldThrowIOException_whenSftpFails() throws Exception {
-        //given
-        InputStream is = IOUtils.toInputStream("test input stream content", "UTF-8");
-        SshJcraftWrapper spyInstance = spy(cut);
-        given(spyInstance.openSftpChannel(session)).willReturn(channelSftp);
-        doThrow(new SftpException(ChannelSftp.SSH_FX_FAILURE, "general error"))
-            .when(channelSftp).rm(anyString());
-
-        //when
-        spyInstance.put(is, REMOTE_PATH, HOST, USER, PASS);
-
-        //then
-        fail(IO_EXCEPTION_MSG);
-    }
-
-    @Test(expected = IOException.class)
-    public void sftp_put_withIs_shouldThrowIOException_whenJschFails() throws Exception {
-        //given
-        InputStream is = IOUtils.toInputStream("test input stream content", "UTF-8");
-        SshJcraftWrapper spyInstance = spy(cut);
-        doThrow(new JSchException()).when(spyInstance).openSftpChannel(session);
-
-        //when
-        spyInstance.put(is, REMOTE_PATH, HOST, USER, PASS);
-
-        //then
-        fail(IO_EXCEPTION_MSG);
-    }
-
-    @Test
-    public void sftp_put_withSourcePath_shouldPutSrcPathToDestinationPath_andDisconnectAfterwards() throws Exception {
-        //given
-        SshJcraftWrapper spyInstance = spy(cut);
-        given(spyInstance.openSftpChannel(session)).willReturn(channelSftp);
-
-        //when
-        spyInstance.put(SOURCE_PATH, REMOTE_PATH);
-
-        //then
-        verify(channelSftp).put(SOURCE_PATH, REMOTE_PATH, ChannelSftp.OVERWRITE);
-        verify(channelSftp).disconnect();
-        verify(session).disconnect();
-    }
-
-    @Test(expected = IOException.class)
-    public void sftp_put_withSourcePath_shouldThrowIOException_whenSftpFails() throws Exception {
-        //given
-        SshJcraftWrapper spyInstance = spy(cut);
-        given(spyInstance.openSftpChannel(session)).willReturn(channelSftp);
-        doThrow(new SftpException(ChannelSftp.SSH_FX_FAILURE, "general error"))
-            .when(channelSftp).put(anyString(), anyString(), anyInt());
-
-        //when
-        spyInstance.put(SOURCE_PATH, REMOTE_PATH);
-
-        //then
-        fail(IO_EXCEPTION_MSG);
-    }
-
-    @Test(expected = IOException.class)
-    public void sftp_put_withSourcePath_shouldThrowIOException_whenJschFails() throws Exception {
-        //given
-        SshJcraftWrapper spyInstance = spy(cut);
-        doThrow(new JSchException()).when(spyInstance).openSftpChannel(session);
-
-        //when
-        spyInstance.put(SOURCE_PATH, REMOTE_PATH);
-
-        //then
-        fail(IO_EXCEPTION_MSG);
-    }
-
-    @Test
-    public void sftpPutStringData_shouldPutInputStreamToRemotePath() throws Exception {
-        //given
-        String inputData = "Test data";
-        SshJcraftWrapper spyInstance = spy(cut);
-        given(spyInstance.openSftpChannel(session)).willReturn(channelSftp);
-
-        //when
-        spyInstance.sftpPutStringData(inputData, REMOTE_PATH);
-
-        //then
-        verify(channelSftp).put(any(InputStream.class), eq(REMOTE_PATH), eq(ChannelSftp.OVERWRITE));
-        verify(channelSftp).disconnect();
-        verify(session).disconnect();
-    }
-
-    @Test(expected = IOException.class)
-    public void sftpPutStringData_shouldThrowIOException_whenJschFails() throws Exception {
-        //given
-        String inputData = "Test data";
-        SshJcraftWrapper spyInstance = spy(cut);
-        doThrow(new JSchException()).when(spyInstance).openSftpChannel(session);
-
-        //when
-        spyInstance.sftpPutStringData(inputData, REMOTE_PATH);
-
-        //then
-        fail(IO_EXCEPTION_MSG);
-    }
-
-    @Test(expected = IOException.class)
-    public void sftpPutStringData_shouldThrowIOException_whenSftpFails() throws Exception {
-        //given
-        String inputData = "Test data";
-        SshJcraftWrapper spyInstance = spy(cut);
-        given(spyInstance.openSftpChannel(session)).willReturn(channelSftp);
-        doThrow(new SftpException(ChannelSftp.SSH_FX_FAILURE, "general error"))
-            .when(channelSftp).put(any(InputStream.class), anyString(), anyInt());
-
-        //when
-        spyInstance.sftpPutStringData(inputData, REMOTE_PATH);
-
-        //then
-        fail(IO_EXCEPTION_MSG);
-    }
-
-    @Test
-    public void sftpGet_shouldReadFromChannelInputStream_withInstanceCredentials() throws Exception {
-        //given
-        String remoteStreamContent = "test input stream content";
-        SshJcraftWrapper spyInstance = spy(cut);
-        given(spyInstance.openSftpChannel(session)).willReturn(channelSftp);
-        given(channelSftp.get(REMOTE_PATH)).willReturn(IOUtils.toInputStream(remoteStreamContent, "UTF-8"));
-
-        //when
-        String result = spyInstance.sftpGet(REMOTE_PATH);
-
-        //then
-        assertEquals(remoteStreamContent, result);
-    }
 }