private static String getCommaseparatedStringFromList(List controllIdList) {
    StringBuilder result = new StringBuilder();

    for (int i = 0; i < controllIdList.size(); i++) {
      Map map = (Map) controllIdList.get(i);
      if (map.get("control_ids") != null) {
        result.append(map.get("control_ids"));
        result.append(",");
      }
    }
    return result.length() > 0 ? result.substring(0, result.length() - 1) : "";
  }
  /**
   * Controller to get control list of transaction type
   *
   * @param request
   * @param model
   * @return
   */
  @RequestMapping(value = "/icga/InternalCtrlGapAnalysisAC.html", method = RequestMethod.GET)
  public String getInternalControlGapAC(HttpServletRequest request, Model model) {
    List thirdPartyTransactionControlList = new ArrayList();
    List generalLedgerTransactionControlList = new ArrayList();
    List customerTransactionControlList = new ArrayList();
    logger.debug("Existing controls start.");
    try {
      thirdPartyTransactionControlList =
          adminService.getControlListByTransactionType(
              TransactionType.THIRD_PARTY_TRANSACTION.getValue());
      logger.debug(
          "Third Party Transaction Control list size =  "
              + thirdPartyTransactionControlList.size());
      generalLedgerTransactionControlList =
          adminService.getControlListByTransactionType(TransactionType.GENERAL_LEDGER.getValue());
      logger.debug(
          "General Ledger Transaction Control list size =  "
              + generalLedgerTransactionControlList.size());
      customerTransactionControlList =
          adminService.getControlListByTransactionType(
              TransactionType.CUSTOMER_TRANSACTION.getValue());
      logger.debug(
          "Customer Transaction Control list size =  " + customerTransactionControlList.size());

    } catch (Exception ex) {
      logger.debug("CERROR:: Internal Control Gap Analysis  " + ex);
    }
    model.addAttribute("thirdPartyTransactionControlList", thirdPartyTransactionControlList);
    model.addAttribute("generalLedgerTransactionControlList", generalLedgerTransactionControlList);
    model.addAttribute("customerTransactionControlList", customerTransactionControlList);
    model.addAttribute("mainTabId", Utils.getMessageBundlePropertyValue("mainTab.icga"));
    model.addAttribute(
        "subTabId", Utils.getMessageBundlePropertyValue("subTabId.analyzeByControls"));
    adminService.addNode(
        Utils.getMessageBundlePropertyValue("landingPage.analyzeByControls"), 2, request);
    return "common/InternalCtrlGapAnalysisAC";
  }
  private List getHederAndValueOfPersonInfo(List infoList) throws ParseException {
    List headerAndValueList = new ArrayList();
    for (int i = 0; i < infoList.size(); i++) {

      Map map = (Map) infoList.get(i);
      Set set = map.keySet();
      for (Object s : set) {
        if (map.get(s) != null
            && !Utils.isEmpty(map.get(s).toString().trim())
            && !("id").equals(s)) {
          Map header = new HashMap();
          header.put("header", WordUtils.capitalize(s.toString().replace("_", " ")));
          // if(Utils.isValidXlsStrToDate(map.get(s).toString()))
          //          header.put("value",Utils.getXlsDateToString(map.get(s).toString()));
          // else
          header.put("value", map.get(s).toString());

          headerAndValueList.add(header);
        }
      }
    }
    return headerAndValueList;
  }
  /**
   * control list with applied in no of transaction
   *
   * @param request
   * @return
   */
  @RequestMapping(value = "/icga/getJASONforExistingControlList.html", method = RequestMethod.POST)
  public @ResponseBody JasonBean getAssignmentList(HttpServletRequest request) {
    logger.debug("Control List Controller ");
    String page = request.getParameter("page") != null ? request.getParameter("page") : "1";
    String rp = request.getParameter("rp") != null ? request.getParameter("rp") : "10";
    String sortname =
        request.getParameter("sortname") != null ? request.getParameter("sortname") : "projectName";
    String sortorder =
        request.getParameter("sortorder") != null ? request.getParameter("sortorder") : "desc";
    String query = request.getParameter("query") != null ? request.getParameter("query") : "false";
    String qtype = request.getParameter("qtype") != null ? request.getParameter("qtype") : "false";

    String controlIds =
        request.getParameter("controlIds") != null ? request.getParameter("controlIds") : "0";
    String tableName =
        request.getParameter("tableName") != null ? request.getParameter("tableName") : "";

    String controlIdsListAsString = "";

    JasonBean jasonData = new JasonBean();
    List dbColumnHeaderList = new ArrayList();
    int totalControl = 0;
    List controlList = new ArrayList();
    List<Cell> entry = new ArrayList<Cell>();
    List allControlList = new ArrayList<Cell>();
    Map<String, Integer> countMap = new TreeMap<String, Integer>();

    try {
      String partSql =
          !"0".equals(controlIds)
              ? InternalControlGapAnalysisController.getStringForComparingControls(controlIds)
              : "";
      allControlList = adminJdbcService.getControlIdList(controlIds, partSql);
      controlIdsListAsString = getCommaseparatedStringFromList(allControlList);
      String[] controllIdsArray =
          !"0".equals(controlIds)
              ? getUsedControlsByControlIds(controlIds, controlIdsListAsString.split(","))
              : controlIdsListAsString.split(",");

      countMap = countStringOccurences(controllIdsArray, adminJdbcService);
      if (countMap != null && countMap.size() > 0) {
        logger.debug("AMLOG:: countMap size: " + countMap.size());
        jasonData.setPage(Utils.parseInteger(page));

        for (String string : countMap.keySet()) {
          Map map = new HashMap();
          Long controlId = !Utils.isEmpty(string) ? Long.parseLong(string) : 0;
          logger.debug("AMLOG:: controlId: " + controlId);
          //                        Control control = new Control();
          Cell cell = new Cell();
          Control control =
              controlId > 0
                  ? (Control) adminService.loadEntityById(controlId, Constants.CONTROL)
                  : new Control();
          /*control.setId(controlId);
          control.setName(controlName);*/
          control.setTotalUsed(countMap.get(string));
          cell.setCell(control);
          entry.add(cell);

          map.put("control_name", control.getName());
          map.put("transaction_type", control.getTransactionType());
          map.put("total", countMap.get(string));
          controlList.add(map);
        }
        int totalItem = controlList != null ? controlList.size() : 0;

        Map mapForHeader = new HashMap();
        mapForHeader.put(
            "name", "control_name"); // key=flexigrid parameter name, value = dbField Name
        mapForHeader.put("transactionType", "transaction_type");
        mapForHeader.put("totalUsed", "total");
        dbColumnHeaderList.add(mapForHeader);
        request.getSession().setAttribute(tableName, dbColumnHeaderList);

        jasonData.setRows(entry);
        jasonData.setTotal(totalItem);
        jasonData.setDbColumnHeader(dbColumnHeaderList);

        if ("max".equals(rp)) {
          logger.debug("SMN LOG: custom controlList size=" + controlList.size());
          TransactionSearchController.setTotalListSizeAndListInSession(
              totalItem, controlList, request);
        }
      }
    } catch (Exception ex) {
      logger.debug("CERROR: Real Time Project exception : " + ex);
    }

    return jasonData;
  }
  /**
   * control list with applied in no of Project
   *
   * @param request
   * @return
   */
  @RequestMapping(
      value = "/icga/getJASONforProjectWiseControlList.html",
      method = RequestMethod.POST)
  public @ResponseBody JasonBean getProjectWiseControlCountList(HttpServletRequest request) {
    logger.debug("Project Wise Control List Controller ");
    String page = request.getParameter("page") != null ? request.getParameter("page") : "1";
    String rp = request.getParameter("rp") != null ? request.getParameter("rp") : "10";
    String sortname =
        request.getParameter("sortname") != null ? request.getParameter("sortname") : "projectName";
    String sortorder =
        request.getParameter("sortorder") != null ? request.getParameter("sortorder") : "desc";
    String query = request.getParameter("query") != null ? request.getParameter("query") : "false";
    String qtype = request.getParameter("qtype") != null ? request.getParameter("qtype") : "false";
    String controlIdsListAsString =
        request.getParameter("controlId") != null ? request.getParameter("controlId") : "";

    String tableName =
        request.getParameter("tableName") != null ? request.getParameter("tableName") : "";

    List dbColumnList = TransactionSearchController.getDbColumnHeaderList(request, tableName);
    sortname =
        dbColumnList != null
            ? RealTimeMonitoringController.getDbColumnNameByRef(dbColumnList, sortname)
            : null;
    logger.debug("SMN: controlIdsListAsString=" + controlIdsListAsString);

    List dbColumnHeaderList = new ArrayList();
    JasonBean jasonData = new JasonBean();

    int totalItems = 0;
    List<Cell> entry = new ArrayList<Cell>();
    List trxSearchList = new ArrayList<Control>();
    GlobalTransactionSearch globalTransactionSearch = new GlobalTransactionSearch();
    try {

      totalItems =
          adminJdbcService.getProjectWiseCountByControlIds(
              controlIdsListAsString,
              getStringForComparingControls(controlIdsListAsString),
              qtype,
              query,
              sortname,
              sortorder);
      trxSearchList =
          adminJdbcService.getProjectWiseCountListByControlIds(
              controlIdsListAsString,
              getStringForComparingControls(controlIdsListAsString),
              Utils.parseInteger(page),
              "max".equals(rp) ? totalItems : Utils.parseInteger(rp),
              qtype,
              query,
              sortname,
              sortorder);

      logger.debug("TOTAL count---" + totalItems + " page=" + page + " rp=" + rp);
      if ("max".equals(rp)) {
        TransactionSearchController.setTotalListSizeAndListInSession(
            totalItems, trxSearchList, request);
        jasonData.setTotal(totalItems);
      } else {
        if (trxSearchList != null) {
          int count = 0;
          logger.debug("trxSearchList size=" + trxSearchList.size());
          jasonData.setPage(Utils.parseInteger(page));
          for (Object obj : trxSearchList) {
            RealTimeProject realTimeProject = new RealTimeProject();
            Cell cell = new Cell();
            Map map = (Map) obj;

            realTimeProject.setProjectName(
                map.get("project") != null ? map.get("project").toString() : "");
            realTimeProject.setTransactionIds(
                map.get("transaction_ids") != null ? map.get("transaction_ids").toString() : "");
            realTimeProject.setTotal(map.get("total") != null ? map.get("total").toString() : "");
            realTimeProject.setProjectType(
                map.get("projectType") != null ? map.get("projectType").toString() : "");
            realTimeProject.setProjectId(
                map.get("projectId") != null ? map.get("projectId").toString() : "");

            cell.setId(count++);
            cell.setCell(realTimeProject);
            entry.add(cell);
          }

          Map mapForHeader = new HashMap();
          mapForHeader.put(
              "projectName", "project"); // key=flexigrid parameter name, value = dbField Name
          mapForHeader.put("transactionIds", "transaction_ids");
          mapForHeader.put("total", "total");
          mapForHeader.put("projectId", "projectId");
          mapForHeader.put("projectType", "projectType");
          dbColumnHeaderList.add(mapForHeader);
          request.getSession().setAttribute(tableName, dbColumnHeaderList);

          jasonData.setRows(entry);
          jasonData.setTotal(totalItems);
          jasonData.setDbColumnHeader(dbColumnHeaderList);
        } else {
          logger.debug("No Transaction Search List Found");
        }
      }

    } catch (Exception ex) {
      logger.debug("CERROR:Project Wise Control Exception : " + ex);
    }

    return jasonData;
  }
 private Map getFirstProjectTransactionMap(List proactiveTransactionList) {
   return (proactiveTransactionList != null && proactiveTransactionList.size() > 0)
       ? (Map) proactiveTransactionList.get(0)
       : new HashMap();
 }