/******************************************************************************* * Open Behavioral Health Information Technology Architecture (OBHITA.org) * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * Neither the name of the <organization> nor the * names of its contributors may be used to endorse or promote products * derived from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ******************************************************************************/ package gov.samhsa.consent2share.service.provider; import gov.samhsa.consent2share.domain.patient.Patient; import gov.samhsa.consent2share.domain.patient.PatientRepository; import gov.samhsa.consent2share.domain.provider.OrganizationalProvider; import gov.samhsa.consent2share.domain.provider.OrganizationalProviderRepository; import gov.samhsa.consent2share.service.dto.OrganizationalProviderDto; import java.util.List; import java.util.Set; import org.modelmapper.ModelMapper; import org.springframework.transaction.annotation.Transactional; /** * The Class OrganizationalProviderServiceImpl. */ @Transactional public class OrganizationalProviderServiceImpl implements OrganizationalProviderService { /** The patient repository. */ private PatientRepository patientRepository; /** The model mapper. */ private ModelMapper modelMapper; /** The organizational provider repository. */ private OrganizationalProviderRepository organizationalProviderRepository; /** * Instantiates a new organizational provider service impl. * * @param patientRepository * the patient repository * @param modelMapper * the model mapper * @param organizationalProviderRepository * the organizational provider repository */ public OrganizationalProviderServiceImpl( PatientRepository patientRepository, ModelMapper modelMapper, OrganizationalProviderRepository organizationalProviderRepository) { super(); this.patientRepository = patientRepository; this.modelMapper = modelMapper; this.organizationalProviderRepository = organizationalProviderRepository; } /* * (non-Javadoc) * * @see * gov.samhsa.consent2share.service.provider.OrganizationalProviderService * #countAllOrganizationalProviders() */ @Override public long countAllOrganizationalProviders() { return organizationalProviderRepository.count(); } /* * (non-Javadoc) * * @see * gov.samhsa.consent2share.service.provider.OrganizationalProviderService * #deleteOrganizationalProvider * (gov.samhsa.consent2share.domain.provider.OrganizationalProvider) */ @Override public void deleteOrganizationalProvider( OrganizationalProvider organizationalProvider) { organizationalProviderRepository.delete(organizationalProvider); } /* * (non-Javadoc) * * @see * gov.samhsa.consent2share.service.provider.OrganizationalProviderService * #deleteOrganizationalProviderDto * (gov.samhsa.consent2share.service.dto.OrganizationalProviderDto) */ @Override public void deleteOrganizationalProviderDto( OrganizationalProviderDto organizationalProviderDto) { Patient patient = patientRepository .findByUsername(organizationalProviderDto.getUsername()); Set<OrganizationalProvider> organizationalProviders = patient .getOrganizationalProviders(); for (OrganizationalProvider o : organizationalProviders) { if (o.getNpi().equals(organizationalProviderDto.getNpi())) { organizationalProviders.remove(o); break; } } patient.setOrganizationalProviders(organizationalProviders); patientRepository.save(patient); } /* * (non-Javadoc) * * @see * gov.samhsa.consent2share.service.provider.OrganizationalProviderService * #deleteOrganizationalProviderDtoByPatientId * (gov.samhsa.consent2share.service.dto.OrganizationalProviderDto) */ @Override public void deleteOrganizationalProviderDtoByPatientId( OrganizationalProviderDto organizationalProviderDto) { Patient patient = patientRepository.findOne(Long .parseLong(organizationalProviderDto.getPatientId())); Set<OrganizationalProvider> organizationalProviders = patient .getOrganizationalProviders(); for (OrganizationalProvider o : organizationalProviders) { if (o.getNpi().equals(organizationalProviderDto.getNpi())) { organizationalProviders.remove(o); break; } } patient.setOrganizationalProviders(organizationalProviders); patientRepository.save(patient); } /* * (non-Javadoc) * * @see * gov.samhsa.consent2share.service.provider.OrganizationalProviderService * #findOrganizationalProvider(java.lang.Long) */ @Override public OrganizationalProvider findOrganizationalProvider(Long id) { return organizationalProviderRepository.findOne(id); } /* * (non-Javadoc) * * @see * gov.samhsa.consent2share.service.provider.OrganizationalProviderService * #findOrganizationalProviderDto(java.lang.Long) */ @Override public OrganizationalProviderDto findOrganizationalProviderDto(Long id) { OrganizationalProvider provider = organizationalProviderRepository .findOne(id); OrganizationalProviderDto providerDto = modelMapper.map(provider, OrganizationalProviderDto.class); return providerDto; } /* * (non-Javadoc) * * @see * gov.samhsa.consent2share.service.provider.OrganizationalProviderService * #findAllOrganizationalProviders() */ @Override public List<OrganizationalProvider> findAllOrganizationalProviders() { return organizationalProviderRepository.findAll(); } /* * (non-Javadoc) * * @see * gov.samhsa.consent2share.service.provider.OrganizationalProviderService * #findOrganizationalProviderEntries(int, int) */ @Override public List<OrganizationalProvider> findOrganizationalProviderEntries( int firstResult, int maxResults) { return organizationalProviderRepository.findAll( new org.springframework.data.domain.PageRequest(firstResult / maxResults, maxResults)).getContent(); } /* * (non-Javadoc) * * @see * gov.samhsa.consent2share.service.provider.OrganizationalProviderService * #saveOrganizationalProvider * (gov.samhsa.consent2share.domain.provider.OrganizationalProvider) */ @Override public void saveOrganizationalProvider( OrganizationalProvider organizationalProvider) { organizationalProviderRepository.save(organizationalProvider); } /* * (non-Javadoc) * * @see * gov.samhsa.consent2share.service.provider.OrganizationalProviderService * #updateOrganizationalProvider * (gov.samhsa.consent2share.domain.provider.OrganizationalProvider) */ @Override public OrganizationalProvider updateOrganizationalProvider( OrganizationalProvider organizationalProvider) { return organizationalProviderRepository.save(organizationalProvider); } /* * (non-Javadoc) * * @see * gov.samhsa.consent2share.service.provider.OrganizationalProviderService * #updateOrganizationalProvider * (gov.samhsa.consent2share.service.dto.OrganizationalProviderDto) */ @Override public void updateOrganizationalProvider( OrganizationalProviderDto organizationalProviderDto) { Patient patient = patientRepository .findByUsername(organizationalProviderDto.getUsername()); Set<OrganizationalProvider> organizationalProviders = patient .getOrganizationalProviders(); OrganizationalProvider organizationalProvider = null; for (OrganizationalProvider o : organizationalProviders) { if (o.getNpi().equals(organizationalProviderDto.getNpi())) { organizationalProvider = o; break; } } if (organizationalProvider == null) organizationalProvider = new OrganizationalProvider(); organizationalProvider.setOrgName(organizationalProviderDto .getOrgName()); organizationalProvider .setAuthorizedOfficialFirstName(organizationalProviderDto .getAuthorizedOfficialFirstName()); organizationalProvider .setAuthorizedOfficialLastName(organizationalProviderDto .getAuthorizedOfficialLastName()); organizationalProvider .setAuthorizedOfficialTitle(organizationalProviderDto .getAuthorizedOfficialTitle()); organizationalProvider .setAuthorizedOfficialNamePrefix(organizationalProviderDto .getAuthorizedOfficialNamePrefix()); organizationalProvider .setAuthorizedOfficialTelephoneNumber(organizationalProviderDto .getAuthorizedOfficialTelephoneNumber()); organizationalProvider.setNpi(organizationalProviderDto.getNpi()); organizationalProvider.setEntityType(organizationalProviderDto .getEntityType()); organizationalProvider .setFirstLineMailingAddress(organizationalProviderDto .getFirstLineMailingAddress()); organizationalProvider .setSecondLineMailingAddress(organizationalProviderDto .getSecondLineMailingAddress()); organizationalProvider .setMailingAddressCityName(organizationalProviderDto .getMailingAddressCityName()); organizationalProvider .setMailingAddressStateName(organizationalProviderDto .getMailingAddressStateName()); organizationalProvider .setMailingAddressPostalCode(organizationalProviderDto .getMailingAddressPostalCode()); organizationalProvider .setMailingAddressCountryCode(organizationalProviderDto .getMailingAddressCountryCode()); organizationalProvider .setMailingAddressTelephoneNumber(organizationalProviderDto .getMailingAddressTelephoneNumber()); organizationalProvider .setMailingAddressFaxNumber(organizationalProviderDto .getMailingAddressFaxNumber()); organizationalProvider .setFirstLinePracticeLocationAddress(organizationalProviderDto .getFirstLinePracticeLocationAddress()); organizationalProvider .setSecondLinePracticeLocationAddress(organizationalProviderDto .getSecondLinePracticeLocationAddress()); organizationalProvider .setPracticeLocationAddressCityName(organizationalProviderDto .getPracticeLocationAddressCityName()); organizationalProvider .setPracticeLocationAddressStateName(organizationalProviderDto .getPracticeLocationAddressStateName()); organizationalProvider .setPracticeLocationAddressPostalCode(organizationalProviderDto .getPracticeLocationAddressPostalCode()); organizationalProvider .setPracticeLocationAddressCountryCode(organizationalProviderDto .getPracticeLocationAddressCountryCode()); organizationalProvider .setPracticeLocationAddressTelephoneNumber(organizationalProviderDto .getPracticeLocationAddressTelephoneNumber()); organizationalProvider .setPracticeLocationAddressFaxNumber(organizationalProviderDto .getPracticeLocationAddressFaxNumber()); organizationalProvider.setEnumerationDate(organizationalProviderDto .getEnumerationDate()); organizationalProvider.setLastUpdateDate(organizationalProviderDto .getLastUpdateDate()); organizationalProvider .setProviderTaxonomyCode(organizationalProviderDto .getProviderTaxonomyCode()); organizationalProvider .setProviderTaxonomyDescription(organizationalProviderDto .getProviderTaxonomyDescription()); organizationalProviders.add(organizationalProvider); patient.setOrganizationalProviders(organizationalProviders); patientRepository.save(patient); } /* * (non-Javadoc) * * @see * gov.samhsa.consent2share.service.provider.OrganizationalProviderService * #addNewOrganizationalProvider * (gov.samhsa.consent2share.service.dto.OrganizationalProviderDto) */ @Override public OrganizationalProvider addNewOrganizationalProvider( OrganizationalProviderDto organizationalProviderDto) { Patient patient; String inNPI = organizationalProviderDto.getNpi(); if (organizationalProviderDto.getUsername() == null && organizationalProviderDto.getPatientId() != null) { patient = patientRepository.findOne(Long.valueOf( organizationalProviderDto.getPatientId()).longValue()); } else { patient = patientRepository .findByUsername(organizationalProviderDto.getUsername()); } Set<OrganizationalProvider> organizationalProviders = patient .getOrganizationalProviders(); OrganizationalProvider in_organizationalProvider = null; for (OrganizationalProvider o : organizationalProviders) { if (o.getNpi().equals(inNPI)) { in_organizationalProvider = o; break; } } if (in_organizationalProvider != null) { return null; } else { OrganizationalProvider organizationalProvider = new OrganizationalProvider(); organizationalProvider.setOrgName(organizationalProviderDto .getOrgName()); organizationalProvider .setAuthorizedOfficialFirstName(organizationalProviderDto .getAuthorizedOfficialFirstName()); organizationalProvider .setAuthorizedOfficialLastName(organizationalProviderDto .getAuthorizedOfficialLastName()); organizationalProvider .setAuthorizedOfficialTitle(organizationalProviderDto .getAuthorizedOfficialTitle()); organizationalProvider .setAuthorizedOfficialNamePrefix(organizationalProviderDto .getAuthorizedOfficialNamePrefix()); organizationalProvider .setAuthorizedOfficialTelephoneNumber(organizationalProviderDto .getAuthorizedOfficialTelephoneNumber()); organizationalProvider.setNpi(organizationalProviderDto.getNpi()); organizationalProvider.setEntityType(organizationalProviderDto .getEntityType()); organizationalProvider .setFirstLineMailingAddress(organizationalProviderDto .getFirstLineMailingAddress()); organizationalProvider .setSecondLineMailingAddress(organizationalProviderDto .getSecondLineMailingAddress()); organizationalProvider .setMailingAddressCityName(organizationalProviderDto .getMailingAddressCityName()); organizationalProvider .setMailingAddressStateName(organizationalProviderDto .getMailingAddressStateName()); organizationalProvider .setMailingAddressPostalCode(organizationalProviderDto .getMailingAddressPostalCode()); organizationalProvider .setMailingAddressCountryCode(organizationalProviderDto .getMailingAddressCountryCode()); organizationalProvider .setMailingAddressTelephoneNumber(organizationalProviderDto .getMailingAddressTelephoneNumber()); organizationalProvider .setMailingAddressFaxNumber(organizationalProviderDto .getMailingAddressFaxNumber()); organizationalProvider .setFirstLinePracticeLocationAddress(organizationalProviderDto .getFirstLinePracticeLocationAddress()); organizationalProvider .setSecondLinePracticeLocationAddress(organizationalProviderDto .getSecondLinePracticeLocationAddress()); organizationalProvider .setPracticeLocationAddressCityName(organizationalProviderDto .getPracticeLocationAddressCityName()); organizationalProvider .setPracticeLocationAddressStateName(organizationalProviderDto .getPracticeLocationAddressStateName()); organizationalProvider .setPracticeLocationAddressPostalCode(organizationalProviderDto .getPracticeLocationAddressPostalCode()); organizationalProvider .setPracticeLocationAddressCountryCode(organizationalProviderDto .getPracticeLocationAddressCountryCode()); organizationalProvider .setPracticeLocationAddressTelephoneNumber(organizationalProviderDto .getPracticeLocationAddressTelephoneNumber()); organizationalProvider .setPracticeLocationAddressFaxNumber(organizationalProviderDto .getPracticeLocationAddressFaxNumber()); organizationalProvider.setEnumerationDate(organizationalProviderDto .getEnumerationDate()); organizationalProvider.setLastUpdateDate(organizationalProviderDto .getLastUpdateDate()); organizationalProvider .setProviderTaxonomyCode(organizationalProviderDto .getProviderTaxonomyCode()); organizationalProvider .setProviderTaxonomyDescription(organizationalProviderDto .getProviderTaxonomyDescription()); organizationalProviders.add(organizationalProvider); patient.setOrganizationalProviders(organizationalProviders); patient = patientRepository.save(patient); Set<OrganizationalProvider> organizationalProvidersReturned = patient .getOrganizationalProviders(); OrganizationalProvider in_organizationalProviderReturned = null; for (OrganizationalProvider o : organizationalProvidersReturned) { if (o.getNpi().equals(inNPI)) { in_organizationalProviderReturned = o; break; } } if (in_organizationalProviderReturned == null) { return null; } else { return in_organizationalProviderReturned; } } } /** * Find organizational provider by npi. * * @param npi * the npi * @return the organizational provider */ public OrganizationalProvider findOrganizationalProviderByNpi(String npi) { return organizationalProviderRepository.findByNpi(npi); } }