private Option<Address> findAddressOfOwnerByPhoneNumber(String number, Integer ownerId) {
   if (checkOwner) {
     return addressDAO.findAddressOfOwnerByCategoryAndPhoneNumber(ownerId, category, number);
   } else {
     return addressDAO.findAddressByCategoryAndPhoneNumber(category, number);
   }
 }
 @Override
 public Option<Address> findAddressOfOwnerByPhoneNumber(PhoneNumber number, Integer ownerId) {
   if (checkOwner) {
     return addressDAO.findAddressOfOwnerByCategoryAndPhoneNumber(ownerId, category, number);
   } else {
     return addressDAO.findAddressByCategoryAndPhoneNumber(category, number);
   }
 }
 @Override
 public List<Address> findAddressOfOwnerByNameStartsWith(String name, Integer ownerId) {
   if (checkOwner) {
     return addressDAO.findAddressesOfOwnerByCategoryAndLastNameOrCompanyStartsWith(
         ownerId, category, name);
   } else {
     return addressDAO.findAddressesByCategoryAndNameOrCompanyStartsWith(category, name);
   }
 }
  @Override
  public Option<Address> findAddressByPhoneNumber(String number) {
    if (!checkOwner) {
      return addressDAO.findAddressByCategoryAndPhoneNumber(category, number);
    }

    return new Empty();
  }
  @Override
  public List<PhoneNumber> findPhoneNumbersEndingWith(String number) {
    if (!checkOwner) {
      return addressDAO.findPhoneNumbersEndingWith(number);
    }

    return new LinkedList<PhoneNumber>();
  }
 @Override
 public Option<Address> findAddressByOwnerAndContactNumber(Integer ownerId, String contactNumber) {
   if (ownerId != null && isGlobalStore()) {
     return null;
   }
   return addressDAO.findAddressByOwnerAndCategoryAndContactNumber(
       ownerId, category, contactNumber);
 }
  @Override
  public List<PhoneNumber> findPhoneNumbersOfOwnerEndingWith(String number, Integer ownerId) {
    if (checkOwner) {
      return addressDAO.findPhoneNumbersOfOwnerEndingWith(ownerId, number);
    }

    return new LinkedList<PhoneNumber>();
  }
 @Override
 public Option<Address> findAddressByOnwerAndFirstNameOrLastNameOrCompany(
     Integer ownerId, String firstName, String lastName, String company) {
   if (ownerId != null && isGlobalStore()) {
     return new Empty();
   }
   return addressDAO.findAddressByOwnerAndCategoryAndFirstNameOrLastNameOrCompany(
       ownerId, category, firstName, lastName, company);
 }
 @Override
 public List<Address> createAddressListing(
     Integer userId,
     String search,
     String orderBy,
     SortOrder orderDir,
     int firstResult,
     int maxResults) {
   return addressDAO.createAddressListing(
       userId, category, checkOwner, search, orderBy, orderDir, firstResult, maxResults);
 }
  @Override
  public Object createAddress(Address address, Integer ownerId) {
    if (editable) {
      address.setCategory(category);

      if (checkOwner) {
        address.setOwnerId(ownerId);
      }

      addressDAO.createAddress(address);
      return address.getId();
    }

    return null;
  }
 @Override
 public void deleteAddressWithDn(Object addressDn) {
   if (editable) {
     addressDAO.deleteAddressWithDn(addressDn);
   }
 }
 @Override
 public List<Address> findAddressByNameStartsWith(String name) {
   return addressDAO.findAddressesByCategoryAndNameOrCompanyStartsWith(category, name);
 }
 @Override
 public Option<Address> findAddressByLastNameOrCompany(String name) {
   return addressDAO.findAddressByCategoryAndLastNameOrCompany(category, name);
 }
 @Override
 public Option<Address> findAddressByDn(Object addressDn) {
   return addressDAO.findAddressByDn(addressDn);
 }
 public void bulkImport(Collection<Address> addresses) {
   addressDAO.bulkImport(addresses);
 }
 @Override
 public void deleteAllAddressesOfOwner(Integer userId) {
   if (checkOwner) {
     addressDAO.deleteAllAddressesOfOnwerByCategory(category, userId);
   }
 }
 @Override
 public boolean canBeDeleted() {
   return addressDAO.countAddressesByCategory(category) == 0;
 }
 @Override
 public List<PhoneNumber> findAllPhoneNumbersByAddressDnSortedByCategoryList(
     String addressDn, String[] categories) {
   return addressDAO.findAllPhoneNumbersByAddressIdSortedByCategories(
       NumberTools.toInt(addressDn, -1), categories);
 }
 @Override
 public void updateAddress(Address address) {
   if (editable) {
     addressDAO.updateAddress(address);
   }
 }
 @Override
 public Option<Address> findAddressByPhoneNumber(PhoneNumber phoneNumber) {
   return addressDAO.findAddressByCategoryAndPhoneNumber(category, phoneNumber);
 }
 @Override
 public long countAddressesByOwnerAndSearch(Integer userId, String search) {
   return addressDAO.countAddressesByOwenrAndCategoryAndSearch(
       userId, checkOwner, category, search);
 }
示例#22
0
  /**
   * Fetch all the matching patients from all the community and all assigning authorities on a known
   * id.
   *
   * @param Patient
   * @return Patient
   */
  public List<Patient> findPatients(Patient patient) {
    log.debug("PatientDAO.findAllPatients() - Begin");

    Session session = null;
    List<Patient> patientsList = new ArrayList<Patient>();

    try {
      SessionFactory sessionFactory = HibernateUtil.getSessionFactory();
      session = sessionFactory.openSession();

      log.info("Reading Records...");

      // NHIN required query parameters
      String gender = patient.getGender();
      Timestamp dateOfBirth = patient.getDateOfBirth();
      String firstName = patient.getPersonnames().get(0).getFirstName();
      String lastName = patient.getPersonnames().get(0).getLastName();
      // NHIN optional query parameters
      String ssn = patient.getSsn();
      String prefix = patient.getPersonnames().get(0).getPrefix();
      String middleName = patient.getPersonnames().get(0).getMiddleName();
      String suffix = patient.getPersonnames().get(0).getSuffix();

      Address address = new Address();
      if (patient.getAddresses() != null && patient.getAddresses().size() > 0) {
        address = patient.getAddresses().get(0);
      }
      Phonenumber phonenumber = new Phonenumber();
      if (patient.getPhonenumbers() != null && patient.getPhonenumbers().size() > 0) {
        phonenumber = patient.getPhonenumbers().get(0);
      }

      // Build the select with query criteria
      StringBuffer sqlSelect =
          new StringBuffer(
              "SELECT DISTINCT p.patientId, p.dateOfBirth, p.gender, p.ssn, i.id, i.organizationid");
      sqlSelect.append(" FROM patientdb.patient p");
      sqlSelect.append(" INNER JOIN patientdb.identifier i ON p.patientId = i.patientId");
      sqlSelect.append(" INNER JOIN patientdb.personname n ON p.patientId = n.patientId");
      if (address.getAddressId() != null) {
        sqlSelect.append(" INNER JOIN patientdb.address a ON p.patientId = a.patientId");
      }
      if (phonenumber.getPhonenumberId() != null) {
        sqlSelect.append(" INNER JOIN patientdb.phonenumber h ON p.patientId = h.patientId");
      }

      StringBuffer criteriaString = new StringBuffer("");
      if (NullChecker.isNotNullish(gender)) {
        if (criteriaString.length() > 0) {
          criteriaString.append(" AND");
        } else {
          criteriaString.append(" WHERE");
        }
        criteriaString.append(" p.gender = ?");
      }
      if (dateOfBirth != null) {
        if (criteriaString.length() > 0) {
          criteriaString.append(" AND");
        } else {
          criteriaString.append(" WHERE");
        }
        criteriaString.append(" p.dateOfBirth = ?");
      }
      if (NullChecker.isNotNullish(firstName)) {
        if (criteriaString.length() > 0) {
          criteriaString.append(" AND");
        } else {
          criteriaString.append(" WHERE");
        }
        criteriaString.append(" n.firstname = ?");
      }
      if (NullChecker.isNotNullish(lastName)) {
        if (criteriaString.length() > 0) {
          criteriaString.append(" AND");
        } else {
          criteriaString.append(" WHERE");
        }
        criteriaString.append(" n.lastname = ?");
      }
      if (NullChecker.isNotNullish(ssn)) {
        if (criteriaString.length() > 0) {
          criteriaString.append(" AND");
        } else {
          criteriaString.append(" WHERE");
        }
        criteriaString.append(" p.ssn = ?");
      }
      if (NullChecker.isNotNullish(prefix)) {
        if (criteriaString.length() > 0) {
          criteriaString.append(" AND");
        } else {
          criteriaString.append(" WHERE");
        }
        criteriaString.append(" n.prefix = ?");
      }
      if (NullChecker.isNotNullish(middleName)) {
        if (criteriaString.length() > 0) {
          criteriaString.append(" AND");
        } else {
          criteriaString.append(" WHERE");
        }
        criteriaString.append(" n.middleName = ?");
      }
      if (NullChecker.isNotNullish(suffix)) {
        if (criteriaString.length() > 0) {
          criteriaString.append(" AND");
        } else {
          criteriaString.append(" WHERE");
        }
        criteriaString.append(" n.suffix = ?");
      }
      if (address.getAddressId() != null && NullChecker.isNotNullish(address.getStreet1())) {
        if (criteriaString.length() > 0) {
          criteriaString.append(" AND");
        } else {
          criteriaString.append(" WHERE");
        }
        criteriaString.append(" a.street1 = ?");
      }
      if (address.getAddressId() != null && NullChecker.isNotNullish(address.getStreet2())) {
        if (criteriaString.length() > 0) {
          criteriaString.append(" AND");
        } else {
          criteriaString.append(" WHERE");
        }
        criteriaString.append(" a.street2 = ?");
      }
      if (address.getAddressId() != null && NullChecker.isNotNullish(address.getCity())) {
        if (criteriaString.length() > 0) {
          criteriaString.append(" AND");
        } else {
          criteriaString.append(" WHERE");
        }
        criteriaString.append(" a.city = ?");
      }
      if (address.getAddressId() != null && NullChecker.isNotNullish(address.getState())) {
        if (criteriaString.length() > 0) {
          criteriaString.append(" AND");
        } else {
          criteriaString.append(" WHERE");
        }
        criteriaString.append(" a.state = ?");
      }
      if (address.getAddressId() != null && NullChecker.isNotNullish(address.getPostal())) {
        if (criteriaString.length() > 0) {
          criteriaString.append(" AND");
        } else {
          criteriaString.append(" WHERE");
        }
        criteriaString.append(" a.postal = ?");
      }
      if (phonenumber.getPhonenumberId() != null
          && NullChecker.isNotNullish(phonenumber.getValue())) {
        if (criteriaString.length() > 0) {
          criteriaString.append(" AND");
        } else {
          criteriaString.append(" WHERE");
        }
        criteriaString.append(" h.value = ?");
      }
      sqlSelect.append(criteriaString);

      sqlSelect.append(" ORDER BY i.id, i.organizationid");

      Query sqlQuery =
          session
              .createSQLQuery(sqlSelect.toString())
              .addScalar("patientId", Hibernate.LONG)
              .addScalar("dateOfBirth", Hibernate.TIMESTAMP)
              .addScalar("gender", Hibernate.STRING)
              .addScalar("ssn", Hibernate.STRING)
              .addScalar("id", Hibernate.STRING)
              .addScalar("organizationid", Hibernate.STRING);

      int iParam = 0;
      if (NullChecker.isNotNullish(gender)) {
        sqlQuery.setString(iParam, gender);
        iParam++;
      }
      if (dateOfBirth != null) {
        sqlQuery.setTimestamp(iParam, dateOfBirth);
        iParam++;
      }
      if (NullChecker.isNotNullish(firstName)) {
        sqlQuery.setString(iParam, firstName);
        iParam++;
      }
      if (NullChecker.isNotNullish(lastName)) {
        sqlQuery.setString(iParam, lastName);
        iParam++;
      }
      if (NullChecker.isNotNullish(ssn)) {
        sqlQuery.setString(iParam, ssn);
        iParam++;
      }
      if (NullChecker.isNotNullish(prefix)) {
        sqlQuery.setString(iParam, prefix);
        iParam++;
      }
      if (NullChecker.isNotNullish(middleName)) {
        sqlQuery.setString(iParam, middleName);
        iParam++;
      }
      if (NullChecker.isNotNullish(suffix)) {
        sqlQuery.setString(iParam, suffix);
        iParam++;
      }
      if (address.getAddressId() != null && NullChecker.isNotNullish(address.getStreet1())) {
        sqlQuery.setString(iParam, address.getStreet1());
        iParam++;
      }
      if (address.getAddressId() != null && NullChecker.isNotNullish(address.getStreet2())) {
        sqlQuery.setString(iParam, address.getStreet2());
        iParam++;
      }
      if (address.getAddressId() != null && NullChecker.isNotNullish(address.getCity())) {
        sqlQuery.setString(iParam, address.getCity());
        iParam++;
      }
      if (address.getAddressId() != null && NullChecker.isNotNullish(address.getState())) {
        sqlQuery.setString(iParam, address.getState());
        iParam++;
      }
      if (address.getAddressId() != null && NullChecker.isNotNullish(address.getPostal())) {
        sqlQuery.setString(iParam, address.getPostal());
        iParam++;
      }
      if (phonenumber.getPhonenumberId() != null
          && NullChecker.isNotNullish(phonenumber.getValue())) {
        sqlQuery.setString(iParam, phonenumber.getValue());
        iParam++;
      }

      log.debug("Final SQL Query is " + sqlQuery.getQueryString());

      List<Object[]> result = sqlQuery.list();

      if (result != null && result.size() > 0) {
        Long[] patientIdArray = new Long[result.size()];
        Timestamp[] dateOfBirthArray = new Timestamp[result.size()];
        String[] genderArray = new String[result.size()];
        String[] ssnArray = new String[result.size()];
        String[] idArray = new String[result.size()];
        String[] organizationIdArray = new String[result.size()];

        int counter = 0;
        for (Object[] row : result) {
          patientIdArray[counter] = (Long) row[0];
          dateOfBirthArray[counter] = (Timestamp) row[1];
          genderArray[counter] = row[2].toString();
          ssnArray[counter] = row[3].toString();
          idArray[counter] = row[4].toString();
          organizationIdArray[counter] = row[5].toString();
          counter++;
        }

        for (int i = 0; i < patientIdArray.length; i++) {
          Patient patientData = new Patient();
          patientData.setPatientId(patientIdArray[i]);
          patientData.setDateOfBirth(dateOfBirthArray[i]);
          patientData.setGender(genderArray[i]);
          patientData.setSsn(ssnArray[i]);

          Identifier identifierData = new Identifier();
          identifierData.getPatient().setPatientId(patientIdArray[i]);
          identifierData.setId(idArray[i]);
          identifierData.setOrganizationId(organizationIdArray[i]);

          patientData.getIdentifiers().add(identifierData);

          // Populate demographic data
          patientData.setAddresses(
              AddressDAO.getAddressDAOInstance().findPatientAddresses(patientIdArray[i]));
          patientData.setPersonnames(
              PersonnameDAO.getPersonnameDAOInstance().findPatientPersonnames(patientIdArray[i]));
          patientData.setPhonenumbers(
              PhonenumberDAO.getPhonenumberDAOInstance()
                  .findPatientPhonenumbers(patientIdArray[i]));

          patientsList.add(patientData);
        }
      }

    } catch (Exception e) {
      log.error("Exception during read occured due to : " + e.getMessage(), e);
    } finally {
      // Flush and close session
      if (session != null) {
        session.flush();
        session.close();
      }
    }
    log.debug("PatientDAO.findPatients() - End");
    return patientsList;
  }
 @Override
 public void deleteAllAddresses() {
   addressDAO.deleteAddressesByCategory(category);
 }