private void bindColType(
     ims.RefMan.forms.daycaseadmissiondialog.GenForm.grdIdentifiersRow row, boolean isNew) {
   row.getcolIdType().clear();
   PatIdTypeCollection collTypes = LookupHelper.getPatIdType(domain.getLookupService());
   for (int i = 0; i < collTypes.size(); i++) {
     if (ConfigFlag.DOM.HEARTS_REPLICATE_PATIENTS.getValue()) {
       if (isNew) {
         if (collTypes.get(i).equals(PatIdType.HOSPNUM) || collTypes.get(i).equals(PatIdType.PKEY))
           continue;
       }
     }
     row.getcolIdType().newRow(collTypes.get(i), collTypes.get(i).getText());
   }
 }
  private synchronized IAddress searchForAddress(
      IAddress searchCriteria, String searchTypeText, String listItem, String searchStatus)
      throws PresentationLogicException {
    // LOG.info("getAddressByPostcode:");

    if (searchCriteria == null) throw new PresentationLogicException("No Search Criteria given.");

    // select
    // AMBIGLIST,ORGANISATION,SUBBUILDING,BUILDINGNAME,BUILDINGNUMBER,DEPSTREET,STREET,DEPLOCALITY,LOCALITY,POSTTOWN,COUNTY,POSTCODE,ADDR,ADDKEY,ORGKEY,LISTTYPE,SEARCHSTATUS,LISTCOUNT,AMBIGLIST,BARCODE,ADEPOS,ADESCORE,ADPNRLOC,MSCORE,FFLAG,RESCODE,ERRNO,ERRTEXT,COUNTRY,COUNTRYCODE,MATCHLVL,PCLVL,INPCLVL,PCCHGLVL,PCCHGTYP,VANITYFLAGS,ELEMS_UNMATCHED,ELEMS_MATCHED,ELEMS_CORRECT,ELEMS_MISSPELLED,ELEMS_MISSING,FIELDSTATUS,OUTPUTSTATUS,ADDFMT_ABBR,ADDFMT_CONC,ADDFMT_TRUN,ADDFMT_ELIM,ADMINNUMBER,TRADNUMBER,LONLOCOUT,ADMINCOUNTY,TRADCOUNTY from PCLOOKUP where POSTCODE=

    StringBuilder l_query = new StringBuilder();
    StringBuilder l_restQuery = new StringBuilder();
    StringBuilder l_queryType = new StringBuilder();

    l_query.append(
        "AMBIGLIST,ORGANISATION,SUBBUILDING,BUILDINGNAME,BUILDINGNUMBER,"
            + "DEPSTREET,STREET,DEPLOCALITY,LOCALITY,POSTTOWN,COUNTY,"
            + "POSTCODE(PP=16),ADDR,ADDKEY,ORGKEY,LISTTYPE,SEARCHSTATUS,"
            + "LISTCOUNT,AMBIGLIST,BARCODE,ADEPOS,ADESCORE,ADPNRLOC,"
            + "MSCORE,FFLAG,RESCODE,ERRNO,ERRTEXT,COUNTRY,COUNTRYCODE,"
            + "MATCHLVL,PCLVL,INPCLVL,PCCHGLVL,PCCHGTYP,VANITYFLAGS,"
            + "ELEMS_UNMATCHED,ELEMS_MATCHED,ELEMS_CORRECT,"
            + "ELEMS_MISSPELLED,ELEMS_MISSING,FIELDSTATUS,"
            + "OUTPUTSTATUS,ADDFMT_ABBR,ADDFMT_CONC,ADDFMT_TRUN,"
            + "ADDFMT_ELIM,ADMINNUMBER,TRADNUMBER,LONLOCOUT,ADMINCOUNTY,"
            + "TRADCOUNTY,PCG,DHA,OLDPCG,OLDDHA from "); // WDEV-14455

    String postcode = "";
    String Addr = "";
    String buildingNumber = "";
    String street = "";
    String postTown = "";
    String county = "";

    l_restQuery.append("");

    if (searchTypeText.equals("SEARCH")) {
      if (searchCriteria.getAddressSearchText() != null
          && searchCriteria.getAddressSearchText() != "") {
        Addr = searchCriteria.getAddressSearchText();
        if (l_restQuery.length() == 0) l_restQuery.append(" WHERE ADDR=" + "\"" + Addr + "\"");
      }
    } else if (searchTypeText.equals("SELECT")) {
      if (searchCriteria.getAddressPostCode() != null) {
        postcode = searchCriteria.getAddressPostCode().toString();
        l_restQuery.append(" WHERE POSTCODE=" + "\"" + postcode + "\"");
      }

      if (searchStatus != null && !searchStatus.equals("")) {
        if (l_restQuery.length() == 0)
          l_restQuery.append(" WHERE SEARCHSTATUS=" + "\"" + searchStatus + "\"");
        else l_restQuery.append(",SEARCHSTATUS=" + "\"" + searchStatus + "\"");
      }

      if (searchCriteria.getAddressBuildingNumber() != null
          && searchCriteria.getAddressBuildingNumber() != "") {
        buildingNumber = searchCriteria.getAddressBuildingNumber().toString();
        if (l_restQuery.length() == 0)
          l_restQuery.append(" WHERE BUILDINGNUMBER=" + "\"" + buildingNumber + "\"");
        else l_restQuery.append(",BUILDINGNUMBER=" + "\"" + buildingNumber + "\"");
      }
      if (searchCriteria.getAddressStreet() != null && searchCriteria.getAddressStreet() != "") {
        street = searchCriteria.getAddressStreet().toString();
        if (l_restQuery.length() == 0) l_restQuery.append(" WHERE STREET=" + "\"" + street + "\"");
        else l_restQuery.append(",STREET=" + "\"" + street + "\"");
      }

      if (searchCriteria.getAddressPostTown() != null
          && searchCriteria.getAddressPostTown() != "") {
        postTown = searchCriteria.getAddressPostTown().toString();
        if (l_restQuery.length() == 0)
          l_restQuery.append(" WHERE POSTTOWN=" + "\"" + postTown + "\"");
        else l_restQuery.append(",POSTTOWN=" + "\"" + postTown + "\"");
      }
      if (searchCriteria.getAddressCounty() != null && searchCriteria.getAddressCounty() != "") {
        county = searchCriteria.getAddressCounty().toString();
        if (l_restQuery.length() == 0) l_restQuery.append(" WHERE COUNTY=" + "\"" + county + "\"");
        else l_restQuery.append(",COUNTY=" + "\"" + county + "\"");
      }

      // ListItem for Ambiguity selection
      if (listItem != null && listItem != "") {
        if (l_restQuery.length() == 0)
          l_restQuery.append(" WHERE LISTITEM=" + "\"" + listItem + "\"");
        else l_restQuery.append(",LISTITEM=" + "\"" + listItem + "\"");
      }
    } else if (searchTypeText.equals("PCLOOKUP")) {
      if (searchCriteria.getAddressPostCode() != null) {
        postcode = searchCriteria.getAddressPostCode().toString();
        l_restQuery.append(" WHERE POSTCODE=" + "\"" + postcode + "\"");
      }
    }

    l_queryType.append(searchTypeText);

    l_query.append(l_queryType);
    l_query.append(l_restQuery);

    try {
      parseQuery(l_query.toString());
      LOG.info("CAPSCAN Query: " + l_query.toString());
    } catch (Exception e) {
      LOG.error(e.getMessage());
      return null;
    }

    capscan.client.McConnection addressManagerConnection = null;

    try {
      // WDEV-17607
      addressManagerConnection = AddressManager.getConnection();
      if (addressManagerConnection == null
          || (addressManagerConnection != null && addressManagerConnection.errno() != 0)
          || (addressManagerConnection != null && addressManagerConnection.errno() != 1)) {
        AddressManager.connect(
            EnvironmentConfig.getCapscanServerName(),
            EnvironmentConfig.getCapscanPool(),
            McConnection.STATELESS);
        addressManagerConnection = AddressManager.getConnection();
      }
      // WDEV-17607
    } catch (Exception e) {
      LOG.error(e.getMessage());
      return null;
    }

    if (addressManagerConnection == null) {
      LOG.error(
          "Error getting Address Manager connection. Please see server logs for more information.");
      return null;
    }

    // WDEV-19795
    int EventId =
        createSystemLogEntry(
                SystemLogType.PostCodeLookup,
                SystemLogLevel.INFORMATION,
                "Postcode lookup:"
                    + select.toString()
                    + " "
                    + where.toString()
                    + " "
                    + data.toString())
            .getSystemLogEventId();
    // WDEV-19795

    resultsSearch = addressManagerConnection.search(searchType, select, where, data, 15);

    if (resultsSearch != null
        && addressManagerConnection != null
        && addressManagerConnection.errno() == capscan.client.McConnection.OK) {
      // Display results
      // int count = results.length;

      //
      // use for logging search query at level ERROR

      String pools[] = addressManagerConnection.pools();
      LOG.info("QUERY RESULTS");
      pools = addressManagerConnection.pools();
      String column;
      int count = 0;
      int i;
      int k;
      int j;
      count = resultsSearch.length;

      for (j = k = 0; j < pools.length; j++) {
        if (pools.length > 1) {
          LOG.info("Pool " + pools[j] + ":\r\n");
        }

        for (i = 0; k < count && i < select.size(); i++, k++) {
          column = (String) select.elementAt(i);
          LOG.info(column + ":\r\n");
          if (column.equals("AMBIGLIST")) {
            printAmbigList(resultsSearch[k]);
          } else {
            LOG.info("\t" + resultsSearch[k] + "\r\n");
          }
        }
      }

      if (select.size() > 1) {
        String strSubBuildingName = getColumnValue("SUBBUILDING");
        boolean displaystrSubBuildingName = false;

        String strBuildingName = getColumnValue("BUILDINGNAME");
        if (strSubBuildingName != null && !strSubBuildingName.equals("")) {
          if (!strBuildingName.equals("")) {
            // WDEV-17696
            if (ConfigFlag.DOM.HEARTS_REPLICATE_PATIENTS.getValue()) {
              if (strSubBuildingName != null
                  && strBuildingName != null
                  && ConfigFlag.DOM.HEARTS_ADDRESS_LINE_MAXLEN != null) {
                if (strSubBuildingName.length() + strBuildingName.length()
                    <= ConfigFlag.DOM.HEARTS_ADDRESS_LINE_MAXLEN.getValue()) {
                  searchCriteria.setAddressBuildingName(
                      strSubBuildingName + ", " + strBuildingName);
                  displaystrSubBuildingName = true;
                } else searchCriteria.setAddressBuildingName(strBuildingName);
              } else searchCriteria.setAddressBuildingName(strBuildingName);
            } else searchCriteria.setAddressBuildingName(strBuildingName);
          } else searchCriteria.setAddressBuildingName(strSubBuildingName);
        } else {
          searchCriteria.setAddressBuildingName(strBuildingName);
        }

        searchCriteria.setAddressBuildingNumber(getColumnValue("BUILDINGNUMBER"));
        searchCriteria.setAddressLocality(getColumnValue("LOCALITY"));
        // WDEV-15963
        // support for DEPSTREET
        if (getColumnValue("DEPSTREET") != null && !getColumnValue("DEPSTREET").equals(""))
          searchCriteria.setAddressStreet(
              getColumnValue("DEPSTREET") + "," + getColumnValue("STREET"));
        else searchCriteria.setAddressStreet(getColumnValue("STREET"));

        // WDEV-17553
        searchCriteria.setAddressPostTown(getColumnValue("POSTTOWN"));
        if (getColumnValue("POSTTOWN") != null
            && !getColumnValue("POSTTOWN").equals(getColumnValue("COUNTY")))
          searchCriteria.setAddressCounty(getColumnValue("COUNTY"));
        else searchCriteria.setAddressCounty("");

        // WDEV-15963
        searchCriteria.setAddressPostCode(getColumnValue("POSTCODE(PP=16)"));
        searchCriteria.setAddressSearchText(getColumnValue("SEARCHSTATUS"));

        // WDEV-17696
        if (displaystrSubBuildingName)
          searchCriteria.setAddressOrganisation(getColumnValue("ORGANISATION"));
        else if (getColumnValue("ORGANISATION") != null) {

          String strSubBuildingNameNoComma =
              strSubBuildingName != null && strSubBuildingName.length() > 0
                  ? "," + strSubBuildingName
                  : ""; // WDEV-19643
          searchCriteria.setAddressOrganisation(
              !getColumnValue("ORGANISATION").equals("")
                  ? getColumnValue("ORGANISATION") + strSubBuildingNameNoComma
                  : strSubBuildingName);
        }
        // WDEV-14455
        if (ConfigFlag.UI.CAPSCAN_USE_OLDPCT_CODE.getValue()) {
          searchCriteria.setPCTcode(stripspaces(getColumnValue("OLDPCG")));
        } else {
          searchCriteria.setPCTcode(stripspaces(getColumnValue("PCG")));
        }
      }
    } else {
      if (addressManagerConnection != null) {
        LOG.error("error: " + addressManagerConnection.strerror(addressManagerConnection.errno()));
        return null;
      } else {
        LOG.error("error: connection null");
        return null;
      }
    }

    return searchCriteria;
  }