@Override
  public void afterRun(TestCaseRunner testRunner, SecurityTestRunContext runContext) {
    TestCase testCase = testRunner.getTestCase();

    SecurityTest securityTest = ((SecurityTestRunner) testRunner).getSecurityTest();

    JUnitReport report = new JUnitReport();
    report.setIncludeTestProperties(includeTestPropertiesInReport);

    String reportName = securityTest.getName();
    report.setTestSuiteName(reportName);
    report.setPackage(testCase.getTestSuite().getProject().getName());
    int errorCount = 0;

    for (TestStep ts : testCase.getTestStepList()) {
      SecurityTestStepResult secuTestStepResult =
          securityTest.getSecurityTestStepResultMap().get(ts);
      if (secuTestStepResult != null) {
        for (SecurityScanResult scanResult : secuTestStepResult.getSecurityScanResultList()) {

          HashMap<String, String> testProperties = getTestPropertiesAsHashMap(securityTest);

          List<SecurityScanRequestResult> resultList = scanResult.getSecurityRequestResultList();
          Testcase secTestCase =
              report.addTestCase(
                  ts.getName() + " - " + scanResult.getSecurityScanName(),
                  scanResult.getTimeTaken(),
                  testProperties);

          secTestCase.setPackage(testCase.getTestSuite().getProject().getName());

          for (int i = 0; i < resultList.size(); i++) {
            SecurityScanRequestResult scanRequestResult = resultList.get(i);
            if (scanRequestResult.getStatus() == ResultStatus.FAILED) {
              StringBuffer result = new StringBuffer();
              result
                  .append("<pre>")
                  .append(XmlUtils.entitize(scanRequestResult.getChangedParamsInfo(i + 1)))
                  .append("</pre>");

              for (String message : scanRequestResult.getMessages()) {
                result.append("<pre>").append(XmlUtils.entitize(message)).append("</pre>");
              }

              secTestCase.addNewError().setStringValue(result.toString());
              errorCount++;
            }
          }
        }
      }

      report.setNoofErrorsInTestSuite(errorCount);
      report.setTotalTime(testRunner.getTimeTaken());

      reports.put(reportName, report);
    }
  }
    public void afterSecurityScan(
        TestCaseRunner testRunner,
        SecurityTestRunContext runContext,
        SecurityScanResult securityCheckResult) {

      if (securityCheckResult.getSecurityScan().getTestStep().getId().equals(testStep.getId())) {

        if (securityCheckResult.getStatus() == ResultStatus.CANCELED) {
          progressBar.setString(STATE_CANCEL);
          progressBar.setBackground(UNKNOWN_COLOR);
        } else
        // progressbar can change its color only if not missing
        // assertions or parameters
        if (securityCheckResult.getStatus() == ResultStatus.FAILED) {
          progressBar.setForeground(FAILED_COLOR);
        } else if (securityCheckResult.getStatus() == ResultStatus.OK) {
          SecurityScan securityScan = securityCheckResult.getSecurityScan();
          if (securityScan.getAssertionCount() == 0) {
            if (!progressBar.getForeground().equals(FAILED_COLOR))
              progressBar.setForeground(MISSING_ASSERTION_COLOR);
            progressBar.setString(STATE_MISSING_ASSERTIONS);
          }
          // or if there is no parameters.
          if (securityScan instanceof AbstractSecurityScanWithProperties
              && ((AbstractSecurityScanWithProperties) securityScan)
                      .getParameterHolder()
                      .getParameterList()
                      .size()
                  == 0) {
            if (!progressBar.getForeground().equals(FAILED_COLOR))
              progressBar.setForeground(MISSING_ASSERTION_COLOR);
            if (!progressBar.getString().equals(STATE_MISSING_ASSERTIONS))
              progressBar.setString(STATE_MISSING_PARAMETERS);
          }

          // can not change to OK color if any of previous scans
          // failed or missing assertions/parameters
          if (!progressBar.getForeground().equals(FAILED_COLOR)
              && !progressBar.getForeground().equals(MISSING_ASSERTION_COLOR)) {
            progressBar.setForeground(OK_COLOR);
          }
        }

        progressBar.setValue(((SecurityTestRunContext) runContext).getCurrentScanIndex() + 1);
        ((DefaultTreeModel) tree.getModel()).nodeChanged(node);
      }
    }
    @Override
    public void afterStep(
        TestCaseRunner testRunner,
        SecurityTestRunContext runContext,
        SecurityTestStepResult result) {
      if (runContext.getCurrentStep().getId().equals(testStep.getId())) {
        if (!(progressBar.getString().equals(STATE_CANCEL)
                || progressBar.getString().equals(STATE_MISSING_ASSERTIONS)
                || progressBar.getString().equals(STATE_MISSING_PARAMETERS))
            && securityTest.getSecurityTestStepResultMap().get(testStep) != null) {
          SecurityTestStepResult results =
              securityTest.getSecurityTestStepResultMap().get(testStep);
          /*
           * This is hack since SecurityTestStepResult.getStatus() do not
           * returns real state of execution.
           *
           * SKIPPED state overides all except FAILED , which is wrong.
           */
          boolean skipped = results.getSecurityScanResultList().size() > 0;

          for (SecurityScanResult res : results.getSecurityScanResultList()) {
            if (res.getStatus() == ResultStatus.SKIPPED) continue;
            else {
              skipped = false;
              break;
            }
          }
          if (skipped) {
            progressBar.setString("SKIPPED");
            progressBar.setForeground(UNKNOWN_COLOR);
          } else {
            progressBar.setString(STATE_DONE);
          }
        }
      } else progressBar.setBackground(UNKNOWN_COLOR);
      progressBar.setValue(progressBar.getMaximum() == 0 ? 1 : progressBar.getMaximum());
      ((DefaultTreeModel) tree.getModel()).nodeChanged(node);
    }