/** * This Source Code Form is subject to the terms of the Mozilla Public License, * v. 2.0. If a copy of the MPL was not distributed with this file, You can * obtain one at http://mozilla.org/MPL/2.0/. OpenMRS is also distributed under * the terms of the Healthcare Disclaimer located at http://openmrs.org/license. * * Copyright (C) OpenMRS Inc. OpenMRS is a registered trademark and the OpenMRS * graphic logo is a trademark of OpenMRS Inc. */ package org.openmrs.api.impl; import java.util.Collection; import java.util.List; import java.util.Map; import org.apache.commons.lang.Validate; import org.openmrs.Person; import org.openmrs.Provider; import org.openmrs.ProviderAttribute; import org.openmrs.ProviderAttributeType; import org.openmrs.api.APIException; import org.openmrs.api.ProviderService; import org.openmrs.api.context.Context; import org.openmrs.api.db.ProviderDAO; import org.openmrs.customdatatype.CustomDatatypeUtil; import org.openmrs.util.OpenmrsConstants; import org.openmrs.util.OpenmrsUtil; import org.springframework.transaction.annotation.Transactional; /** * Default implementation of the {@link ProviderService}. This class should not be used on its own. * The current OpenMRS implementation should be fetched from the Context. * * @since 1.9 */ @Transactional public class ProviderServiceImpl extends BaseOpenmrsService implements ProviderService { private ProviderDAO dao; /** * Sets the data access object for Concepts. The dao is used for saving and getting concepts * to/from the database * * @param dao The data access object to use */ public void setProviderDAO(ProviderDAO dao) { this.dao = dao; } /** * @see org.openmrs.api.ProviderService#getAllProviders() */ @Override @Transactional(readOnly = true) public List<Provider> getAllProviders() { return Context.getProviderService().getAllProviders(true); } /** * @see org.openmrs.api.ProviderService#getAllProviders(boolean) */ @Override @Transactional(readOnly = true) public List<Provider> getAllProviders(boolean includeRetired) { return dao.getAllProviders(includeRetired); } /** * @see org.openmrs.api.ProviderService#retireProvider(org.openmrs.Provider, java.lang.String) */ @Override public void retireProvider(Provider provider, String reason) { dao.saveProvider(provider); } /** * @see org.openmrs.api.ProviderService#unretireProvider(org.openmrs.Provider) */ @Override public Provider unretireProvider(Provider provider) { return Context.getProviderService().saveProvider(provider); } /** * @see org.openmrs.api.ProviderService#purgeProvider(org.openmrs.Provider) */ @Override public void purgeProvider(Provider provider) { dao.deleteProvider(provider); } /** * @see org.openmrs.api.ProviderService#getProvider(java.lang.Integer) */ @Override @Transactional(readOnly = true) public Provider getProvider(Integer providerId) { return dao.getProvider(providerId); } /** * @see org.openmrs.api.ProviderService#saveProvider(org.openmrs.Provider) */ @Override public Provider saveProvider(Provider provider) { CustomDatatypeUtil.saveAttributesIfNecessary(provider); return dao.saveProvider(provider); } /** * @see org.openmrs.api.ProviderService#getProviderByUuid(java.lang.String) */ @Override @Transactional(readOnly = true) public Provider getProviderByUuid(String uuid) { return dao.getProviderByUuid(uuid); } /** * @see org.openmrs.api.ProviderService#getProvidersByPerson(org.openmrs.Person, boolean ) */ @Override @Transactional(readOnly = true) public Collection<Provider> getProvidersByPerson(Person person, boolean includeRetired) { return dao.getProvidersByPerson(person, includeRetired); } /** * @see org.openmrs.api.ProviderService#getProvidersByPerson(org.openmrs.Person) */ @Override @Transactional(readOnly = true) public Collection<Provider> getProvidersByPerson(Person person) { Validate.notNull(person, "Person must not be null"); return Context.getProviderService().getProvidersByPerson(person, true); } /** * @see org.openmrs.api.ProviderService#getCountOfProviders(java.lang.String) */ @Override @Transactional(readOnly = true) public Integer getCountOfProviders(String query) { return Context.getProviderService().getCountOfProviders(query, false); } /** * @see org.openmrs.api.ProviderService#getCountOfProviders(java.lang.String, boolean) */ @Override public Integer getCountOfProviders(String query, boolean includeRetired) { return OpenmrsUtil.convertToInteger(dao.getCountOfProviders(query, includeRetired)); } /** * @see org.openmrs.api.ProviderService#getProviders(String, Integer, Integer, java.util.Map, * boolean) */ @Override @Transactional(readOnly = true) public List<Provider> getProviders(String query, Integer start, Integer length, Map<ProviderAttributeType, Object> attributeValues, boolean includeRetired) { Map<ProviderAttributeType, String> serializedAttributeValues = CustomDatatypeUtil .getValueReferences(attributeValues); return dao.getProviders(query, serializedAttributeValues, start, length, includeRetired); } /** * @see org.openmrs.api.ProviderService#getProviders(String, Integer, Integer, java.util.Map) */ @Override @Transactional(readOnly = true) public List<Provider> getProviders(String query, Integer start, Integer length, Map<ProviderAttributeType, Object> attributeValues) { return Context.getProviderService().getProviders(query, start, length, attributeValues, true); } /** * @see org.openmrs.api.ProviderService#getAllProviderAttributeTypes() */ @Override @Transactional(readOnly = true) public List<ProviderAttributeType> getAllProviderAttributeTypes() { return dao.getAllProviderAttributeTypes(true); } /** * @see org.openmrs.api.ProviderService#getAllProviderAttributeTypes(boolean) */ @Override @Transactional(readOnly = true) public List<ProviderAttributeType> getAllProviderAttributeTypes(boolean includeRetired) { return dao.getAllProviderAttributeTypes(includeRetired); } /** * @see org.openmrs.api.ProviderService#getProviderAttributeType(java.lang.Integer) */ @Override @Transactional(readOnly = true) public ProviderAttributeType getProviderAttributeType(Integer providerAttributeTypeId) { return dao.getProviderAttributeType(providerAttributeTypeId); } /** * @see org.openmrs.api.ProviderService#getProviderAttributeTypeByUuid(java.lang.String) */ @Override @Transactional(readOnly = true) public ProviderAttributeType getProviderAttributeTypeByUuid(String uuid) { return dao.getProviderAttributeTypeByUuid(uuid); } /** * @see org.openmrs.api.ProviderService#getProviderAttribute(java.lang.Integer) */ @Override @Transactional(readOnly = true) public ProviderAttribute getProviderAttribute(Integer providerAttributeID) { return dao.getProviderAttribute(providerAttributeID); } /** * @see org.openmrs.api.ProviderService#getProviderAttributeByUuid(String) */ @Override @Transactional(readOnly = true) public ProviderAttribute getProviderAttributeByUuid(String uuid) { return dao.getProviderAttributeByUuid(uuid); } /** * @see org.openmrs.api.ProviderService#saveProviderAttributeType(org.openmrs.ProviderAttributeType) */ @Override public ProviderAttributeType saveProviderAttributeType(ProviderAttributeType providerAttributeType) { return dao.saveProviderAttributeType(providerAttributeType); } /** * @see org.openmrs.api.ProviderService#retireProviderAttributeType(org.openmrs.ProviderAttributeType, * java.lang.String) */ @Override public ProviderAttributeType retireProviderAttributeType(ProviderAttributeType providerAttributeType, String reason) { return Context.getProviderService().saveProviderAttributeType(providerAttributeType); } /** * @see org.openmrs.api.ProviderService#unretireProviderAttributeType(org.openmrs.ProviderAttributeType) */ @Override public ProviderAttributeType unretireProviderAttributeType(ProviderAttributeType providerAttributeType) { return Context.getProviderService().saveProviderAttributeType(providerAttributeType); } /** * @see org.openmrs.api.ProviderService#purgeProviderAttributeType(org.openmrs.ProviderAttributeType) */ @Override public void purgeProviderAttributeType(ProviderAttributeType providerAttributeType) { dao.deleteProviderAttributeType(providerAttributeType); } /** * @see org.openmrs.api.ProviderService#isProviderIdentifierUnique(Provider) */ @Override @Transactional(readOnly = true) public boolean isProviderIdentifierUnique(Provider provider) throws APIException { return dao.isProviderIdentifierUnique(provider); } /** * @see org.openmrs.api.ProviderService#getProviderByIdentifier(java.lang.String) */ @Override @Transactional(readOnly = true) public Provider getProviderByIdentifier(String identifier) { return dao.getProviderByIdentifier(identifier); } /** * @see org.openmrs.api.ProviderService#getUnknownProvider() */ @Override @Transactional(readOnly = true) public Provider getUnknownProvider() { return getProviderByUuid(Context.getAdministrationService().getGlobalProperty( OpenmrsConstants.GP_UNKNOWN_PROVIDER_UUID)); } }