/** Browser type prefix for Run ID */
  public static String result_browser() {
    if (groupNames.equals("")) {
      if (configProps.getProperty("browserType").equals("ie")) {
        return "IE";
      } else if (configProps.getProperty("browserType").equals("firefox")) {
        return "Firefox";
      } else {
        return "Chrome";
      }
    } else {
      if (browser.equalsIgnoreCase("ie")) {
        return "IE";

      } else if (browser.equalsIgnoreCase("firefox")) {
        return "Firefox";

      } else if (browser.equalsIgnoreCase("android")) {
        return "Android";

      } else if (browser.equalsIgnoreCase("iPhone")) {
        return "iPhone";

      } else {
        return "Chrome";
      }
    }
  }
  // @Parameters({"browserType"})
  public static String filePath() {
    String strDirectoy = "";

    if (browser.equalsIgnoreCase("ie")) {
      strDirectoy = "IE" + File.separator + "IE";
    } else if (browser.equalsIgnoreCase("firefox")) {
      strDirectoy = "Firefox" + File.separator + "Firefox";
    } else if (browser.equalsIgnoreCase("chrome")) {
      strDirectoy = "Chrome" + File.separator + "Chrome";
    } else if (browser.equalsIgnoreCase("Android")) {
      strDirectoy = "Android" + File.separator + "Android";
    } else if (browser.equalsIgnoreCase("iphone")) {
      strDirectoy = "iPhone" + File.separator + "iPhone";
    }

    if (strDirectoy != "") {
      new File(configProps.getProperty("screenShotPath") + strDirectoy + "_" + timeStamp).mkdirs();
    }

    File results =
        new File(
            configProps.getProperty("screenShotPath")
                + strDirectoy
                + "_"
                + timeStamp
                + File.separator
                + "Screenshots");
    if (!results.exists()) {
      results.mkdir();
      HtmlReportSupport.copyLogos();
    }

    return configProps.getProperty("screenShotPath")
        + strDirectoy
        + "_"
        + timeStamp
        + File.separator;
  }
  @BeforeSuite(alwaysRun = true)
  public static void setupSuite(ITestContext ctx) throws Throwable {
    System.out.println("In Before sutie");
    itc = ctx;
    groupNames = ctx.getCurrentXmlTest().getIncludedGroups().toString();
    System.out.println("+++++" + groupNames);
    ReportStampSupport.calculateSuiteStartTime();
    try {
      if (groupNames.contains("chrome")) {
        logger.info("chrome_browser : " + xlsrdr.getCellValue("chrome_browser", "value"));
        browser = xlsrdr.getCellValue("chrome_browser", "value");
        System.out.println("browser " + browser);
      } else if (groupNames.contains("firefox")) {
        logger.info("firefox_browser : " + xlsrdr.getCellValue("firefox_browser", "value"));
        browser = xlsrdr.getCellValue("firefox_browser", "value");
      } else if (groupNames.contains("ie")) {
        logger.info("ie_browser : " + xlsrdr.getCellValue("ie_browser", "value"));
        browser = xlsrdr.getCellValue("ie_browser", "value");
      } else if (groupNames.contains("Android")) {
        logger.info("Android");
        browser = "android";
      } else if (groupNames.contains("Mobile")) {
        logger.info("iPhone");
        browser = "iphone";
      } else {
        logger.info("Starting browser : " + configProps.getProperty("browserType"));
        browser = configProps.getProperty("browserType");
      }
    } catch (Exception e1) {
      e1.printStackTrace();
      System.out.println(e1);
    }
    try {
      if (groupNames.toString().contains("afiliate")) {
        System.out.println("afiliate URL : " + xlsrdr.getCellValue("afiliate", "value"));
        url = (xlsrdr.getCellValue("afiliate", "value"));
      } else if (groupNames.contains("booking")) {
        System.out.println("booking URL : " + xlsrdr.getCellValue("booking", "value"));
        url = (xlsrdr.getCellValue("booking", "value"));
      } else if (groupNames.contains("referred")) {
        System.out.println("referred URL : " + xlsrdr.getCellValue("referred", "value"));
        url = (xlsrdr.getCellValue("referred", "value"));
      } else {
        url = (configProps.getProperty("URL"));
      }

      Reporter.reportCreater();
      HtmlReportSupport.currentSuit = ctx.getCurrentXmlTest().getSuite().getName();
    } catch (Exception e1) {
      e1.printStackTrace();
    }

    if (browser.equalsIgnoreCase("iphone")) {
      try {
        // ---------------------------------------------------
        // System.out.println(System.getProperty("user.home")+"/Log/RPMob_" + timeStamp + ".log");
        String logFile =
            System.getProperty("user.dir") + "/Logs/RPMob_" + System.currentTimeMillis() + ".log";
        System.out.println("In iphone block");
        /*while (true) {
        	if (RedPlanetUtils.startAppiumForiOS(logFile)) {
        		break;
        	}
        }
        if ((new File(logFile).exists())) {
        	System.out.println("Log File Created by Appium at path : " + System.getProperty("user.dir")
        			+ "/Log/RPMob_" + timeStamp + ".log");
        }
        Thread.sleep(10000);*/
        // -----------------------------------------------------
        DeviceName = configProps.getProperty("iOSDeviceName");
        String device = configProps.getProperty("Device");
        String appPath = configProps.getProperty("appPath");

        String ipaPath = configProps.getProperty("ipaPath");
        String temp = System.getProperty("user.dir") + ipaPath;
        String temp2 = System.getProperty("user.dir") + appPath;
        File ipa = new File(temp);
        File app = new File(temp2);
        String platformVer = configProps.getProperty("platformVersion");
        String udid = configProps.getProperty("UDID");
        bundleID = configProps.getProperty("BundleID");
        DesiredCapabilities capabilitiesForAppium = new DesiredCapabilities();
        // System.out.println("DeviceName is : " + DeviceName);
        capabilitiesForAppium.setCapability("deviceName", device);
        capabilitiesForAppium.setCapability("platformName", "iOS");
        capabilitiesForAppium.setCapability("platformVersion", platformVer);
        capabilitiesForAppium.setCapability("deviceName", device);
        capabilitiesForAppium.setCapability("bundleId", bundleID);
        capabilitiesForAppium.setCapability("newCommandTimeout", "8000");
        capabilitiesForAppium.setCapability("takesScreenshot", true);
        capabilitiesForAppium.setCapability("autoWebviewTimeout", "8000");
        capabilitiesForAppium.setCapability("locationServicesAuthorized", true);
        // capabilitiesForAppium.setCapability("autoLaunch", true);
        // capabilitiesForAppium.setCapability("fullReset", false);
        // capabilitiesForAppium.setCapability("noReset", true);
        capabilitiesForAppium.setCapability(
            "waitForAppScript", "target.elements().length > 0; $.delay(30000); $.acceptAlert();");
        if ((DeviceName.contains("Simulator")) || ((udid.length() == 0))) {
          System.out.println("using simulator");
          System.out.println("app Path " + app.getCanonicalPath());
          capabilitiesForAppium.setCapability("app", app.getCanonicalPath());

        } else {
          System.out.println("+++++using real device   " + groupNames + "+++++");
          capabilitiesForAppium.setCapability("udid", udid);
          System.out.println("ipa Path " + ipa.getCanonicalPath());
          capabilitiesForAppium.setCapability("app", ipa);
        }
        Iosdriver = new IOSDriver(new URL("http://127.0.0.1:4723/wd/hub"), capabilitiesForAppium);
        driver = Iosdriver;
        driver.manage().timeouts().implicitlyWait(90, TimeUnit.SECONDS);
      } catch (Exception e) {
        e.printStackTrace();
      }

    } else if (browser.equalsIgnoreCase("Android")) {
      try {
        String AppPackage = configProps.getProperty("appPackage");
        String AppActivity = configProps.getProperty("appActivity");
        String OSVersion = configProps.getProperty("OSVersion");
        String ipkPath = configProps.getProperty("apkPath");
        String tempIPK = System.getProperty("user.dir") + ipkPath;
        File ipk = new File(tempIPK);
        // ---------------------------------------------------

        // -----------------------------------------------------
        DesiredCapabilities capabilitiesForAppium = new DesiredCapabilities();
        System.out.println("DeviceName is : " + DeviceName);
        capabilitiesForAppium.setCapability("deviceName", DeviceName);
        capabilitiesForAppium.setCapability("platformVersion", OSVersion);
        capabilitiesForAppium.setCapability("platformName", "Android");
        capabilitiesForAppium.setCapability("newCommandTimeout", "120000");
        // capabilitiesForAppium.setCapability("autoWebview", "true");
        capabilitiesForAppium.setCapability("autoWebviewTimeout", "1000");
        // capabilitiesForAppium.setCapability("fullReset", true);
        capabilitiesForAppium.setCapability("appPackage", AppPackage);
        capabilitiesForAppium.setCapability("appActivity", AppActivity);
        System.out.println(ipk.getCanonicalPath());
        capabilitiesForAppium.setCapability("app", ipk.getCanonicalPath());
        AndroidDriver2 =
            new AndroidDriver(new URL("http://127.0.0.1:4723/wd/hub"), capabilitiesForAppium);
        driver = (AndroidDriver2);
        driver.manage().timeouts().implicitlyWait(70, TimeUnit.SECONDS);

      } catch (Exception e) {
        e.printStackTrace();
      }
    }
  }
public class TestEngine extends HtmlReportSupport {
  public static Logger logger = Logger.getLogger(TestEngine.class.getName());
  public static ConfiguratorSupport configProps = new ConfiguratorSupport("config.properties");
  public static ConfiguratorSupport counterProp =
      new ConfiguratorSupport(configProps.getProperty("counterPath"));
  public static String currentSuite = "";
  public static String method = "";
  public static String timeStamp =
      ReportStampSupport.timeStamp().replace(" ", "_").replace(":", "_").replace(".", "_");
  public static boolean flag = false;

  public static RemoteWebDriver driver = null;
  public static int stepNum = 0;
  public static int PassNum = 0;
  public static int FailNum = 0;
  public static int passCounter = 0;
  public static int failCounter = 0;
  public static String testName = "";
  public static String testCaseExecutionTime = "";
  public static RemoteWebDriver webDriver = null;
  public static StringBuffer x = new StringBuffer();
  public static String finalTime = "";
  public static boolean isSuiteRunning = false;
  public static Map<String, String> testDescription = new LinkedHashMap<String, String>();
  public static Map<String, String> testResults = new LinkedHashMap<String, String>();
  public static String url = null;
  static ExcelReader xlsrdr =
      new ExcelReader(configProps.getProperty("TestData"), configProps.getProperty("sheetName0"));
  public DesiredCapabilities capabilities;
  // ***************************************************************************************************
  public static String DeviceName = configProps.getProperty("DeviceName");

  public static AppiumDriver AndroidDriver2 = null;
  public static AppiumDriver Iosdriver = null;
  public static String bundleID = null;
  // ***************************************************************************************************

  /*
   * public static Screen s; public static String url =
   * "jdbc:mysql://172.16.6.121/"; public static String dbName = "root";
   * public static String userName = "******"; public static Connection conn =
   * null; public static Statement stmt = null; public static
   * PreparedStatement pstmt = null; public static ResultSet rs = null;
   */
  public static int countcompare = 0;
  public static String browser = null;
  static int len = 0;
  static int i = 0;
  public static ITestContext itc;
  public static String groupNames = null;

  @BeforeSuite(alwaysRun = true)
  public static void setupSuite(ITestContext ctx) throws Throwable {
    System.out.println("In Before sutie");
    itc = ctx;
    groupNames = ctx.getCurrentXmlTest().getIncludedGroups().toString();
    System.out.println("+++++" + groupNames);
    ReportStampSupport.calculateSuiteStartTime();
    try {
      if (groupNames.contains("chrome")) {
        logger.info("chrome_browser : " + xlsrdr.getCellValue("chrome_browser", "value"));
        browser = xlsrdr.getCellValue("chrome_browser", "value");
        System.out.println("browser " + browser);
      } else if (groupNames.contains("firefox")) {
        logger.info("firefox_browser : " + xlsrdr.getCellValue("firefox_browser", "value"));
        browser = xlsrdr.getCellValue("firefox_browser", "value");
      } else if (groupNames.contains("ie")) {
        logger.info("ie_browser : " + xlsrdr.getCellValue("ie_browser", "value"));
        browser = xlsrdr.getCellValue("ie_browser", "value");
      } else if (groupNames.contains("Android")) {
        logger.info("Android");
        browser = "android";
      } else if (groupNames.contains("Mobile")) {
        logger.info("iPhone");
        browser = "iphone";
      } else {
        logger.info("Starting browser : " + configProps.getProperty("browserType"));
        browser = configProps.getProperty("browserType");
      }
    } catch (Exception e1) {
      e1.printStackTrace();
      System.out.println(e1);
    }
    try {
      if (groupNames.toString().contains("afiliate")) {
        System.out.println("afiliate URL : " + xlsrdr.getCellValue("afiliate", "value"));
        url = (xlsrdr.getCellValue("afiliate", "value"));
      } else if (groupNames.contains("booking")) {
        System.out.println("booking URL : " + xlsrdr.getCellValue("booking", "value"));
        url = (xlsrdr.getCellValue("booking", "value"));
      } else if (groupNames.contains("referred")) {
        System.out.println("referred URL : " + xlsrdr.getCellValue("referred", "value"));
        url = (xlsrdr.getCellValue("referred", "value"));
      } else {
        url = (configProps.getProperty("URL"));
      }

      Reporter.reportCreater();
      HtmlReportSupport.currentSuit = ctx.getCurrentXmlTest().getSuite().getName();
    } catch (Exception e1) {
      e1.printStackTrace();
    }

    if (browser.equalsIgnoreCase("iphone")) {
      try {
        // ---------------------------------------------------
        // System.out.println(System.getProperty("user.home")+"/Log/RPMob_" + timeStamp + ".log");
        String logFile =
            System.getProperty("user.dir") + "/Logs/RPMob_" + System.currentTimeMillis() + ".log";
        System.out.println("In iphone block");
        /*while (true) {
        	if (RedPlanetUtils.startAppiumForiOS(logFile)) {
        		break;
        	}
        }
        if ((new File(logFile).exists())) {
        	System.out.println("Log File Created by Appium at path : " + System.getProperty("user.dir")
        			+ "/Log/RPMob_" + timeStamp + ".log");
        }
        Thread.sleep(10000);*/
        // -----------------------------------------------------
        DeviceName = configProps.getProperty("iOSDeviceName");
        String device = configProps.getProperty("Device");
        String appPath = configProps.getProperty("appPath");

        String ipaPath = configProps.getProperty("ipaPath");
        String temp = System.getProperty("user.dir") + ipaPath;
        String temp2 = System.getProperty("user.dir") + appPath;
        File ipa = new File(temp);
        File app = new File(temp2);
        String platformVer = configProps.getProperty("platformVersion");
        String udid = configProps.getProperty("UDID");
        bundleID = configProps.getProperty("BundleID");
        DesiredCapabilities capabilitiesForAppium = new DesiredCapabilities();
        // System.out.println("DeviceName is : " + DeviceName);
        capabilitiesForAppium.setCapability("deviceName", device);
        capabilitiesForAppium.setCapability("platformName", "iOS");
        capabilitiesForAppium.setCapability("platformVersion", platformVer);
        capabilitiesForAppium.setCapability("deviceName", device);
        capabilitiesForAppium.setCapability("bundleId", bundleID);
        capabilitiesForAppium.setCapability("newCommandTimeout", "8000");
        capabilitiesForAppium.setCapability("takesScreenshot", true);
        capabilitiesForAppium.setCapability("autoWebviewTimeout", "8000");
        capabilitiesForAppium.setCapability("locationServicesAuthorized", true);
        // capabilitiesForAppium.setCapability("autoLaunch", true);
        // capabilitiesForAppium.setCapability("fullReset", false);
        // capabilitiesForAppium.setCapability("noReset", true);
        capabilitiesForAppium.setCapability(
            "waitForAppScript", "target.elements().length > 0; $.delay(30000); $.acceptAlert();");
        if ((DeviceName.contains("Simulator")) || ((udid.length() == 0))) {
          System.out.println("using simulator");
          System.out.println("app Path " + app.getCanonicalPath());
          capabilitiesForAppium.setCapability("app", app.getCanonicalPath());

        } else {
          System.out.println("+++++using real device   " + groupNames + "+++++");
          capabilitiesForAppium.setCapability("udid", udid);
          System.out.println("ipa Path " + ipa.getCanonicalPath());
          capabilitiesForAppium.setCapability("app", ipa);
        }
        Iosdriver = new IOSDriver(new URL("http://127.0.0.1:4723/wd/hub"), capabilitiesForAppium);
        driver = Iosdriver;
        driver.manage().timeouts().implicitlyWait(90, TimeUnit.SECONDS);
      } catch (Exception e) {
        e.printStackTrace();
      }

    } else if (browser.equalsIgnoreCase("Android")) {
      try {
        String AppPackage = configProps.getProperty("appPackage");
        String AppActivity = configProps.getProperty("appActivity");
        String OSVersion = configProps.getProperty("OSVersion");
        String ipkPath = configProps.getProperty("apkPath");
        String tempIPK = System.getProperty("user.dir") + ipkPath;
        File ipk = new File(tempIPK);
        // ---------------------------------------------------

        // -----------------------------------------------------
        DesiredCapabilities capabilitiesForAppium = new DesiredCapabilities();
        System.out.println("DeviceName is : " + DeviceName);
        capabilitiesForAppium.setCapability("deviceName", DeviceName);
        capabilitiesForAppium.setCapability("platformVersion", OSVersion);
        capabilitiesForAppium.setCapability("platformName", "Android");
        capabilitiesForAppium.setCapability("newCommandTimeout", "120000");
        // capabilitiesForAppium.setCapability("autoWebview", "true");
        capabilitiesForAppium.setCapability("autoWebviewTimeout", "1000");
        // capabilitiesForAppium.setCapability("fullReset", true);
        capabilitiesForAppium.setCapability("appPackage", AppPackage);
        capabilitiesForAppium.setCapability("appActivity", AppActivity);
        System.out.println(ipk.getCanonicalPath());
        capabilitiesForAppium.setCapability("app", ipk.getCanonicalPath());
        AndroidDriver2 =
            new AndroidDriver(new URL("http://127.0.0.1:4723/wd/hub"), capabilitiesForAppium);
        driver = (AndroidDriver2);
        driver.manage().timeouts().implicitlyWait(70, TimeUnit.SECONDS);

      } catch (Exception e) {
        e.printStackTrace();
      }
    }
  }

  @AfterSuite(alwaysRun = true)
  public void tearDown(ITestContext ctx) throws Throwable {
    try {
      ReportStampSupport.calculateSuiteExecutionTime();

      HtmlReportSupport.createHtmlSummaryReport(browser, url);
      closeSummaryReport();
      if (browser.equalsIgnoreCase("iphone")) {
        // Iosdriver.removeApp(bundleID);
      }
      driver.quit();
    } catch (Exception e) {
      e.printStackTrace();
    } /*finally {
      	if (browser.contains("Android")) {
      		RedPlanetUtils.stopAppium();
      	} else if (browser.contains("iPhone")) {
      		RedPlanetUtils.stopAppiumForIos();
      	}
      }*/
  }

  /** Write results to Browser specific path */
  // @Parameters({"browserType"})
  public static String filePath() {
    String strDirectoy = "";

    if (browser.equalsIgnoreCase("ie")) {
      strDirectoy = "IE" + File.separator + "IE";
    } else if (browser.equalsIgnoreCase("firefox")) {
      strDirectoy = "Firefox" + File.separator + "Firefox";
    } else if (browser.equalsIgnoreCase("chrome")) {
      strDirectoy = "Chrome" + File.separator + "Chrome";
    } else if (browser.equalsIgnoreCase("Android")) {
      strDirectoy = "Android" + File.separator + "Android";
    } else if (browser.equalsIgnoreCase("iphone")) {
      strDirectoy = "iPhone" + File.separator + "iPhone";
    }

    if (strDirectoy != "") {
      new File(configProps.getProperty("screenShotPath") + strDirectoy + "_" + timeStamp).mkdirs();
    }

    File results =
        new File(
            configProps.getProperty("screenShotPath")
                + strDirectoy
                + "_"
                + timeStamp
                + File.separator
                + "Screenshots");
    if (!results.exists()) {
      results.mkdir();
      HtmlReportSupport.copyLogos();
    }

    return configProps.getProperty("screenShotPath")
        + strDirectoy
        + "_"
        + timeStamp
        + File.separator;
  }

  /** Browser type prefix for Run ID */
  public static String result_browser() {
    if (groupNames.equals("")) {
      if (configProps.getProperty("browserType").equals("ie")) {
        return "IE";
      } else if (configProps.getProperty("browserType").equals("firefox")) {
        return "Firefox";
      } else {
        return "Chrome";
      }
    } else {
      if (browser.equalsIgnoreCase("ie")) {
        return "IE";

      } else if (browser.equalsIgnoreCase("firefox")) {
        return "Firefox";

      } else if (browser.equalsIgnoreCase("android")) {
        return "Android";

      } else if (browser.equalsIgnoreCase("iPhone")) {
        return "iPhone";

      } else {
        return "Chrome";
      }
    }
  }

  /** Related to Xpath @Date 19/02/2013 @Revision History */
  public static String methodName() {

    if (browser.equals("ie")) {
      return "post";
    } else {
      return "POST";
    }
  }

  @BeforeMethod(alwaysRun = true)
  public void reportHeader(Method method) throws Throwable {
    // itc = ctx;
    Date date = new Date();
    SimpleDateFormat sdf = new SimpleDateFormat("dd_MMM_yyyy hh mm ss SSS");
    String formattedDate = sdf.format(date);
    ReportStampSupport.calculateTestCaseStartTime();
    if (browser.equalsIgnoreCase("firefox")) {
      ProfilesIni profile = new ProfilesIni();
      FirefoxProfile ffprofile = new FirefoxProfile();
      ffprofile.setEnableNativeEvents(true);
      webDriver = new FirefoxDriver(ffprofile);
    } else if (browser.equalsIgnoreCase("ie")) {
      File file = new File("Drivers\\IEDriverServer.exe");
      System.setProperty("webdriver.ie.driver", file.getAbsolutePath());
      DesiredCapabilities caps = DesiredCapabilities.internetExplorer();
      caps.setCapability(InternetExplorerDriver.IE_ENSURE_CLEAN_SESSION, true);
      webDriver = new InternetExplorerDriver(caps);
      i = i + 1;
    } else if (browser.equalsIgnoreCase("chrome")) {
      System.setProperty("webdriver.chrome.driver", "Drivers\\chromedriver.exe");
      DesiredCapabilities capabilities = new DesiredCapabilities();
      ChromeOptions options = new ChromeOptions();
      options.addArguments("test-type");
      capabilities.setCapability(ChromeOptions.CAPABILITY, options);
      webDriver = new ChromeDriver(capabilities);
    } else if (browser.equalsIgnoreCase("iphone")) {
      Iosdriver.resetApp();
    } else if (browser.equalsIgnoreCase("android")) {
      AndroidDriver2.resetApp();
    }
    flag = false;
    if ((!(browser.equalsIgnoreCase("Android"))) & (!(browser.equalsIgnoreCase("iPhone")))) {
      driver = /*new EventFiringWebDriver*/ (webDriver);
      /*ActionEngineSupport myListener = new ActionEngineSupport();
      driver.register(myListener);*/
      driver.manage().window().maximize();
      driver.manage().timeouts().implicitlyWait(3, TimeUnit.MINUTES);
      driver.get(url);
    }
    HtmlReportSupport.tc_name = method.getName().toString() + "-" + formattedDate;
    String[] ts_Name = this.getClass().getName().toString().split("\\.");
    HtmlReportSupport.packageName = ts_Name[0] + "." + ts_Name[1] + "." + ts_Name[2];
    HtmlReportSupport.testHeader(HtmlReportSupport.tc_name, browser);
    stepNum = 0;
    PassNum = 0;
    FailNum = 0;
    testName = method.getName();
    logger.info("Current Test : " + testName);
  }

  @AfterMethod(alwaysRun = true)
  public static void tearDownMethod() throws Throwable {
    try {
      ReportStampSupport.calculateTestCaseExecutionTime();
      closeDetailedReport();
      if (FailNum != 0) {
        failCounter = failCounter + 1;
        testResults.put(HtmlReportSupport.tc_name, "FAIL");
      } else {
        testResults.put(HtmlReportSupport.tc_name, "PASS");
        passCounter = passCounter + 1;
      }
    } catch (Exception e) {
      e.printStackTrace();
    } finally {
      if ((browser.toLowerCase().contains("iphone"))) {
        Iosdriver.closeApp();
      } else if (browser.toLowerCase().contains("android")) {
        // AndroidDriver2.closeApp();
      } else {
        driver.quit();
      }
    }
  }
}
  public static void sendReportAsMailBody(String filePath, String subject, String AttachmentSource)
      throws Throwable {

    File fis =
        new File(
            "C:\\SVN\\12 QuickflixProject\\QuickflixProject\\Results\\Chrome\\"
                + "Chrome_2015-03-25_15_54_34_292\\SummaryResults_2015-03-25_15_54_34_292.html");
    // File fis = new File(filePath);
    FileReader fileReader = new FileReader(fis);
    // jsoup code
    Document doc = Jsoup.parse(fis, "UTF-8", "http://example.com/");
    Element newsHeadlines = doc.getElementById("footer");
    Elements header = doc.select("head");
    String jsonStringBuffer =
        "<html>"
            + header.html()
            + "<body> <table id='footer'>"
            + newsHeadlines.html()
            + "</table></body></html>";
    Document newFooter = Jsoup.parse(jsonStringBuffer);
    Element remLogos = doc.getElementById("Logos");
    remLogos.remove();
    Element remFooter = doc.getElementById("footer");
    remFooter.remove();
    // **********
    BufferedReader reader = new BufferedReader(fileReader);
    StringBuffer stringBuffer = new StringBuffer();
    String line;
    while ((line = reader.readLine()) != null) {
      // String newLine[] = line.split("(?<=footer).*?(?=</tfoot>)");
      String newLine[] = line.split("(?i)(<table id='footer'.*?>)(.+?)(</tfoot>)");
      // System.out.println(newLine[0]);
      /*String logoLess[]=newLine[0].split("(?i)(<table id='Logos'.*?>)(.+?)(main)");
      System.out.println(logoLess[0]);*/
      stringBuffer.append(newLine[0]);
    }
    // stringBuffer.append(stbfooter.toString());
    /*System.out.println("Contents of file:");
    System.out.println(stringBuffer.toString());*/
    fileReader.close();

    // Recipient's email ID needs to be mentioned.
    String[] toMailerList = configProps.getProperty("To").split(",");
    System.out.println(configProps.getProperty("To"));
    String[] ccMailerList = configProps.getProperty("CC").split(",");
    System.out.println(configProps.getProperty("CC"));
    final String username = configProps.getProperty("UserName");
    final String password = configProps.getProperty("Password");
    String from = configProps.getProperty("From");

    /*Properties props = new Properties();
    props.put("mail.smtp.host", "mail.quickflix.com.au");
    props.put("mail.smtp.port", "25");*/

    Properties props = new Properties();
    props.put("mail.smtp.auth", "true");
    props.put("mail.smtp.starttls.enable", "true");
    props.put("mail.smtp.debug", "true");
    props.put("mail.smtp.auth", "true");
    props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
    props.put("mail.smtp.starttls.enable", "true");
    props.put("mail.smtp.socketFactory.fallback", "false");
    /*props.put("mail.smtp.host", "smtp.gmail.com");
    props.put("mail.smtp.port", "465");*/
    props.put("mail.smtp.host", "smtp.office365.com");
    props.put("mail.smtp.port", "995");
    Session session =
        Session.getInstance(
            props,
            new javax.mail.Authenticator() {
              protected PasswordAuthentication getPasswordAuthentication() {
                return new PasswordAuthentication(username, password);
              }
            });

    // Session session = Session.getInstance(props);
    try {
      // Create a default MimeMessage object.
      MimeMessage message = new MimeMessage(session);

      // Set From: header field of the header.
      message.setFrom(new InternetAddress(from));

      javax.mail.internet.InternetAddress[] addressTo =
          new javax.mail.internet.InternetAddress[toMailerList.length];

      for (int i = 0; i < toMailerList.length; i++) {
        addressTo[i] = new javax.mail.internet.InternetAddress(toMailerList[i]);
      }
      message.setRecipients(javax.mail.Message.RecipientType.TO, addressTo);

      javax.mail.internet.InternetAddress[] addressCC =
          new javax.mail.internet.InternetAddress[ccMailerList.length];
      for (int i = 0; i < ccMailerList.length; i++) {
        addressCC[i] = new javax.mail.internet.InternetAddress(ccMailerList[i]);
      }
      message.setRecipients(javax.mail.Message.RecipientType.CC, addressCC);
      // Set Subject: header field
      message.setSubject(subject);

      // Create the message part
      BodyPart messageBodyPart = new MimeBodyPart();
      // Create the attachement part
      BodyPart AttachmentBodyPart = new MimeBodyPart();
      DataSource source = new FileDataSource(AttachmentSource);
      AttachmentBodyPart.setDataHandler(new DataHandler(source));
      AttachmentBodyPart.setFileName("QuickflixReports.zip");
      // Fill the message
      messageBodyPart.setContent(
          newFooter.html() + stringBuffer.toString(), "text/html; charset=utf-8");
      // Create a multipart message
      Multipart multipart = new MimeMultipart();
      // Set Attachment part
      multipart.addBodyPart(AttachmentBodyPart);
      // Set text message part
      multipart.addBodyPart(messageBodyPart);
      message.setContent(multipart);
      // Send message
      Transport.send(message);
      System.out.println("Sent message successfully....");
    } catch (MessagingException mex) {
      mex.printStackTrace();
    }
  }
  public static void sendNotification() {

    // Recipient's email ID needs to be mentioned.
    String[] toMailerList = configProps.getProperty("To").split(",");
    System.out.println(configProps.getProperty("To"));
    String[] ccMailerList = configProps.getProperty("CC").split(",");
    System.out.println(configProps.getProperty("CC"));
    final String username = configProps.getProperty("UserName");
    final String password = configProps.getProperty("Password");
    String from = configProps.getProperty("From");

    Properties props = new Properties();

    props.put("mail.smtp.host", "mail.quickflix.com.au");
    props.put("mail.smtp.port", "25");

    Session session = Session.getInstance(props);
    try {
      // Create a default MimeMessage object.
      MimeMessage message = new MimeMessage(session);

      // Set From: header field of the header.
      message.setFrom(new InternetAddress(from));

      javax.mail.internet.InternetAddress[] addressTo =
          new javax.mail.internet.InternetAddress[toMailerList.length];

      for (int i = 0; i < toMailerList.length; i++) {
        addressTo[i] = new javax.mail.internet.InternetAddress(toMailerList[i]);
      }
      message.setRecipients(javax.mail.Message.RecipientType.TO, addressTo);

      javax.mail.internet.InternetAddress[] addressCC =
          new javax.mail.internet.InternetAddress[ccMailerList.length];
      for (int i = 0; i < ccMailerList.length; i++) {
        addressCC[i] = new javax.mail.internet.InternetAddress(ccMailerList[i]);
      }
      message.setRecipients(javax.mail.Message.RecipientType.CC, addressCC);
      // Set Subject: header field
      message.setSubject("Test Data Expiry Alert"); // ("Quickflix Titles are Exceeded  .... ");

      // Create the message part
      BodyPart messageBodyPart = new MimeBodyPart();

      // Fill the message
      messageBodyPart.setContent(
          "Hi, <br><br>"
              + configProps.getProperty("body")
              + "<br><br>Thanks,<br>Offshore Team<br><br>",
          "text/html; charset=utf-8");
      // Create a multipart message
      Multipart multipart = new MimeMultipart();
      // Set text message part
      multipart.addBodyPart(messageBodyPart);
      message.setContent(multipart);
      // Send message
      Transport.send(message);
      System.out.println("Sent message successfully....");
    } catch (MessagingException mex) {
      mex.printStackTrace();
    }
  }