/******************************************************************************* * 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.IndividualProvider; import gov.samhsa.consent2share.domain.provider.IndividualProviderRepository; import gov.samhsa.consent2share.service.dto.IndividualProviderDto; import java.util.ArrayList; import java.util.List; import java.util.Set; import org.modelmapper.ModelMapper; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.transaction.annotation.Transactional; /** * The Class IndividualProviderServiceImpl. */ @Transactional public class IndividualProviderServiceImpl implements IndividualProviderService { /** The logger. */ final Logger logger = LoggerFactory.getLogger(this.getClass()); /** The individual provider repository. */ IndividualProviderRepository individualProviderRepository; /** The model mapper. */ ModelMapper modelMapper; /** The patient repository. */ PatientRepository patientRepository; /** * Instantiates a new individual provider service impl. * * @param individualProviderRepository * the individual provider repository * @param modelMapper * the model mapper * @param patientRepository * the patient repository */ public IndividualProviderServiceImpl( IndividualProviderRepository individualProviderRepository, ModelMapper modelMapper, PatientRepository patientRepository) { super(); this.individualProviderRepository = individualProviderRepository; this.modelMapper = modelMapper; this.patientRepository = patientRepository; } /* * (non-Javadoc) * * @see gov.samhsa.consent2share.service.provider.IndividualProviderService# * countAllIndividualProviders() */ @Override public long countAllIndividualProviders() { return individualProviderRepository.count(); } /* * (non-Javadoc) * * @see gov.samhsa.consent2share.service.provider.IndividualProviderService# * updateIndividualProvider * (gov.samhsa.consent2share.service.dto.IndividualProviderDto) */ @Override public void updateIndividualProvider( IndividualProviderDto individualProviderDto) { Patient patient = patientRepository .findByUsername(individualProviderDto.getUsername()); Set<IndividualProvider> individualProviders = patient .getIndividualProviders(); IndividualProvider individualProvider = null; for (IndividualProvider o : individualProviders) { if (o.getNpi().equals(individualProviderDto.getNpi())) { individualProvider = o; break; } } if (individualProvider == null) individualProvider = new IndividualProvider(); individualProvider.setFirstName(individualProviderDto.getFirstName()); individualProvider.setMiddleName(individualProviderDto.getMiddleName()); individualProvider.setLastName(individualProviderDto.getLastName()); individualProvider.setNamePrefix(individualProviderDto.getNamePrefix()); individualProvider.setNameSuffix(individualProviderDto.getNameSuffix()); individualProvider.setCredential(individualProviderDto.getCredential()); individualProvider.setNpi(individualProviderDto.getNpi()); individualProvider.setEntityType(individualProviderDto.getEntityType()); individualProvider.setFirstLineMailingAddress(individualProviderDto .getFirstLineMailingAddress()); individualProvider.setSecondLineMailingAddress(individualProviderDto .getSecondLineMailingAddress()); individualProvider.setMailingAddressCityName(individualProviderDto .getMailingAddressCityName()); individualProvider.setMailingAddressStateName(individualProviderDto .getMailingAddressStateName()); individualProvider.setMailingAddressPostalCode(individualProviderDto .getMailingAddressPostalCode()); individualProvider.setMailingAddressCountryCode(individualProviderDto .getMailingAddressCountryCode()); individualProvider .setMailingAddressTelephoneNumber(individualProviderDto .getMailingAddressTelephoneNumber()); individualProvider.setMailingAddressFaxNumber(individualProviderDto .getMailingAddressFaxNumber()); individualProvider .setFirstLinePracticeLocationAddress(individualProviderDto .getFirstLinePracticeLocationAddress()); individualProvider .setSecondLinePracticeLocationAddress(individualProviderDto .getSecondLinePracticeLocationAddress()); individualProvider .setPracticeLocationAddressCityName(individualProviderDto .getPracticeLocationAddressCityName()); individualProvider .setPracticeLocationAddressStateName(individualProviderDto .getPracticeLocationAddressStateName()); individualProvider .setPracticeLocationAddressPostalCode(individualProviderDto .getPracticeLocationAddressPostalCode()); individualProvider .setPracticeLocationAddressCountryCode(individualProviderDto .getPracticeLocationAddressCountryCode()); individualProvider .setPracticeLocationAddressTelephoneNumber(individualProviderDto .getPracticeLocationAddressTelephoneNumber()); individualProvider .setPracticeLocationAddressFaxNumber(individualProviderDto .getPracticeLocationAddressFaxNumber()); individualProvider.setEnumerationDate(individualProviderDto .getEnumerationDate()); individualProvider.setLastUpdateDate(individualProviderDto .getLastUpdateDate()); individualProvider.setProviderTaxonomyCode(individualProviderDto .getProviderTaxonomyCode()); individualProvider.setProviderTaxonomyDescription(individualProviderDto .getProviderTaxonomyDescription()); individualProviders.add(individualProvider); patient.setIndividualProviders(individualProviders); patientRepository.save(patient); } /* * (non-Javadoc) * * @see gov.samhsa.consent2share.service.provider.IndividualProviderService# * deleteIndividualProvider * (gov.samhsa.consent2share.domain.provider.IndividualProvider) */ @Override public void deleteIndividualProvider(IndividualProvider individualProvider) { individualProviderRepository.delete(individualProvider); } /* * (non-Javadoc) * * @see gov.samhsa.consent2share.service.provider.IndividualProviderService# * deleteIndividualProviderDto * (gov.samhsa.consent2share.service.dto.IndividualProviderDto) */ @Override public void deleteIndividualProviderDto( IndividualProviderDto individualProviderDto) { Patient patient = patientRepository .findByUsername(individualProviderDto.getUsername()); Set<IndividualProvider> individualProviders = patient .getIndividualProviders(); for (IndividualProvider o : individualProviders) { if (o.getNpi().equals(individualProviderDto.getNpi())) { individualProviders.remove(o); break; } } patient.setIndividualProviders(individualProviders); patientRepository.save(patient); } /* * (non-Javadoc) * * @see gov.samhsa.consent2share.service.provider.IndividualProviderService# * deleteIndividualProviderByPatientId * (gov.samhsa.consent2share.service.dto.IndividualProviderDto) */ @Override public void deleteIndividualProviderDtoByPatientId( IndividualProviderDto individualProviderDto) { Patient patient = patientRepository.findOne(Long .parseLong(individualProviderDto.getPatientId())); Set<IndividualProvider> individualProviders = patient .getIndividualProviders(); for (IndividualProvider o : individualProviders) { if (o.getNpi().equals(individualProviderDto.getNpi())) { individualProviders.remove(o); break; } } patient.setIndividualProviders(individualProviders); patientRepository.save(patient); } /* * (non-Javadoc) * * @see gov.samhsa.consent2share.service.provider.IndividualProviderService# * findIndividualProviderByNpi(java.lang.String) */ @Override public IndividualProvider findIndividualProviderByNpi(String npi) { return individualProviderRepository.findByNpi(npi); } /* * (non-Javadoc) * * @see gov.samhsa.consent2share.service.provider.IndividualProviderService# * findIndividualProvider(java.lang.Long) */ @Override public IndividualProvider findIndividualProvider(Long id) { return individualProviderRepository.findOne(id); } /* * (non-Javadoc) * * @see gov.samhsa.consent2share.service.provider.IndividualProviderService# * findAllIndividualProviders() */ @Override public List<IndividualProvider> findAllIndividualProviders() { return individualProviderRepository.findAll(); } /* * (non-Javadoc) * * @see gov.samhsa.consent2share.service.provider.IndividualProviderService# * findIndividualProviderEntries(int, int) */ @Override public List<IndividualProvider> findIndividualProviderEntries( int firstResult, int maxResults) { return individualProviderRepository.findAll( new org.springframework.data.domain.PageRequest(firstResult / maxResults, maxResults)).getContent(); } /* * (non-Javadoc) * * @see gov.samhsa.consent2share.service.provider.IndividualProviderService# * saveIndividualProvider * (gov.samhsa.consent2share.domain.provider.IndividualProvider) */ @Override public void saveIndividualProvider(IndividualProvider individualProvider) { individualProviderRepository.save(individualProvider); } /* * (non-Javadoc) * * @see gov.samhsa.consent2share.service.provider.IndividualProviderService# * updateIndividualProvider * (gov.samhsa.consent2share.domain.provider.IndividualProvider) */ @Override public IndividualProvider updateIndividualProvider( IndividualProvider individualProvider) { return individualProviderRepository.save(individualProvider); } /* * (non-Javadoc) * * @see gov.samhsa.consent2share.service.provider.IndividualProviderService# * addNewIndividualProvider * (gov.samhsa.consent2share.service.dto.IndividualProviderDto) */ @Override public IndividualProvider addNewIndividualProvider( IndividualProviderDto individualProviderDto) { Patient patient; String inNPI = individualProviderDto.getNpi(); if (individualProviderDto.getUsername() == null && individualProviderDto.getPatientId() != null) { patient = patientRepository.findOne(Long.valueOf( individualProviderDto.getPatientId()).longValue()); } else { patient = patientRepository.findByUsername(individualProviderDto .getUsername()); } Set<IndividualProvider> individualProviders = patient .getIndividualProviders(); IndividualProvider in_individualProvider = null; for (IndividualProvider o : individualProviders) { if (o.getNpi().equals(inNPI)) { in_individualProvider = o; break; } } if (in_individualProvider != null) { return null; } else { IndividualProvider individualProvider = new IndividualProvider(); individualProvider.setFirstName(individualProviderDto .getFirstName()); individualProvider.setMiddleName(individualProviderDto .getMiddleName()); individualProvider.setLastName(individualProviderDto.getLastName()); individualProvider.setNamePrefix(individualProviderDto .getNamePrefix()); individualProvider.setNameSuffix(individualProviderDto .getNameSuffix()); individualProvider.setCredential(individualProviderDto .getCredential()); individualProvider.setNpi(individualProviderDto.getNpi()); individualProvider.setEntityType(individualProviderDto .getEntityType()); individualProvider.setFirstLineMailingAddress(individualProviderDto .getFirstLineMailingAddress()); individualProvider .setSecondLineMailingAddress(individualProviderDto .getSecondLineMailingAddress()); individualProvider.setMailingAddressCityName(individualProviderDto .getMailingAddressCityName()); individualProvider.setMailingAddressStateName(individualProviderDto .getMailingAddressStateName()); individualProvider .setMailingAddressPostalCode(individualProviderDto .getMailingAddressPostalCode()); individualProvider .setMailingAddressCountryCode(individualProviderDto .getMailingAddressCountryCode()); individualProvider .setMailingAddressTelephoneNumber(individualProviderDto .getMailingAddressTelephoneNumber()); individualProvider.setMailingAddressFaxNumber(individualProviderDto .getMailingAddressFaxNumber()); individualProvider .setFirstLinePracticeLocationAddress(individualProviderDto .getFirstLinePracticeLocationAddress()); individualProvider .setSecondLinePracticeLocationAddress(individualProviderDto .getSecondLinePracticeLocationAddress()); individualProvider .setPracticeLocationAddressCityName(individualProviderDto .getPracticeLocationAddressCityName()); individualProvider .setPracticeLocationAddressStateName(individualProviderDto .getPracticeLocationAddressStateName()); individualProvider .setPracticeLocationAddressPostalCode(individualProviderDto .getPracticeLocationAddressPostalCode()); individualProvider .setPracticeLocationAddressCountryCode(individualProviderDto .getPracticeLocationAddressCountryCode()); individualProvider .setPracticeLocationAddressTelephoneNumber(individualProviderDto .getPracticeLocationAddressTelephoneNumber()); individualProvider .setPracticeLocationAddressFaxNumber(individualProviderDto .getPracticeLocationAddressFaxNumber()); individualProvider.setEnumerationDate(individualProviderDto .getEnumerationDate()); individualProvider.setLastUpdateDate(individualProviderDto .getLastUpdateDate()); individualProvider.setProviderTaxonomyCode(individualProviderDto .getProviderTaxonomyCode()); individualProvider .setProviderTaxonomyDescription(individualProviderDto .getProviderTaxonomyDescription()); individualProviders.add(individualProvider); patient.setIndividualProviders(individualProviders); patient = patientRepository.save(patient); Set<IndividualProvider> individualProvidersReturned = patient .getIndividualProviders(); IndividualProvider in_individualProviderReturned = null; for (IndividualProvider o : individualProvidersReturned) { if (o.getNpi().equals(inNPI)) { in_individualProviderReturned = o; break; } } if (in_individualProviderReturned == null) { return null; } else { return in_individualProviderReturned; } } } /* * (non-Javadoc) * * @see gov.samhsa.consent2share.service.provider.IndividualProviderService# * findAllIndividualProvidersDto() */ @Override public List<IndividualProviderDto> findAllIndividualProvidersDto() { List<IndividualProviderDto> providers = new ArrayList<IndividualProviderDto>(); for (IndividualProvider entity : individualProviderRepository.findAll()) { providers.add(modelMapper.map(entity, IndividualProviderDto.class)); } return providers; } /* * (non-Javadoc) * * @see gov.samhsa.consent2share.service.provider.IndividualProviderService# * findIndividualProviderDto(java.lang.Long) */ @Override public IndividualProviderDto findIndividualProviderDto(Long id) { IndividualProvider provider = individualProviderRepository.findOne(id); IndividualProviderDto providerDto = modelMapper.map(provider, IndividualProviderDto.class); return providerDto; } }