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); }
/** * 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); }