package edu.gatech.i3l.fhir.jpa.providers; import java.util.Set; import ca.uhn.fhir.model.api.IResource; import ca.uhn.fhir.model.api.Include; import ca.uhn.fhir.model.api.annotation.Description; import ca.uhn.fhir.model.dstu2.resource.Encounter; import ca.uhn.fhir.model.dstu2.resource.Patient; import ca.uhn.fhir.model.dstu2.resource.Practitioner; import ca.uhn.fhir.model.dstu2.resource.Organization; import ca.uhn.fhir.rest.annotation.Count; import ca.uhn.fhir.rest.annotation.IncludeParam; import ca.uhn.fhir.rest.annotation.OptionalParam; import ca.uhn.fhir.rest.annotation.Search; import ca.uhn.fhir.rest.annotation.Sort; import ca.uhn.fhir.rest.api.SortSpec; import ca.uhn.fhir.rest.param.DateRangeParam; import ca.uhn.fhir.rest.param.ReferenceAndListParam; import ca.uhn.fhir.rest.param.StringAndListParam; import ca.uhn.fhir.rest.param.StringParam; import ca.uhn.fhir.rest.param.TokenAndListParam; import edu.gatech.i3l.fhir.jpa.dao.SearchParameterMap; public class PractitionerResourceProvider extends JpaResourceProviderDstu2<Practitioner> { @Override public Class<? extends IResource> getResourceType() { return Practitioner.class; } @Search() public ca.uhn.fhir.rest.server.IBundleProvider search( javax.servlet.http.HttpServletRequest theServletRequest, @Description(shortDefinition="The resource identity") @OptionalParam(name="_id") StringParam theId, // @Description(shortDefinition="The resource language") // @OptionalParam(name="_language") // StringParam theResourceLanguage, // // @Description(shortDefinition="Search for resources which have the given tag") // @OptionalParam(name="_tag") // TokenAndListParam theSearchForTag, // // // @Description(shortDefinition="A patient identifier") // @OptionalParam(name="identifier") // TokenAndListParam theIdentifier, @Description(shortDefinition="A portion of either family or given name") @OptionalParam(name="name") StringAndListParam theName, // @Description(shortDefinition="A portion of the family name of the patient") // @OptionalParam(name="family") // StringAndListParam theFamily, // // @Description(shortDefinition="A portion of the given name of the patient") // @OptionalParam(name="given") // StringAndListParam theGiven, // // @Description(shortDefinition="A portion of either family or given name using some kind of phonetic matching algorithm") // @OptionalParam(name="phonetic") // StringAndListParam thePhonetic, // // @Description(shortDefinition="The value in any kind of telecom details of the patient") // @OptionalParam(name="telecom") // TokenAndListParam theTelecom, // // @Description(shortDefinition="An address in any kind of address/part of the patient") // @OptionalParam(name="address") // StringAndListParam theAddress, @Description(shortDefinition="Gender of the practitioner") @OptionalParam(name="gender") TokenAndListParam theGender, // @Description(shortDefinition="Language code (irrespective of use value)") // @OptionalParam(name="language") // TokenAndListParam theLanguage, // // @Description(shortDefinition="The patient's date of birth") // @OptionalParam(name="birthdate") // DateRangeParam theBirthdate, // @Description(shortDefinition="The identity of the organization the practitioner represents / acts on behalf of") @OptionalParam(name="organization", targetTypes={ Organization.class } ) ReferenceAndListParam theOrganization, @Description(shortDefinition="The practitioner has this specialty at an organization") @OptionalParam(name="specialty") TokenAndListParam theSpecialty, // @Description(shortDefinition="Patient's nominated care provider, could be a care manager, not the organization that manages the record") // @OptionalParam(name="careprovider", targetTypes={ Organization.class , Practitioner.class } ) // ReferenceAndListParam theCareprovider, // // @Description(shortDefinition="Whether the patient record is active") // @OptionalParam(name="active") // TokenAndListParam theActive, // // @Description(shortDefinition="The species for animal patients") // @OptionalParam(name="animal-species") // TokenAndListParam theAnimal_species, // // @Description(shortDefinition="The breed for animal patients") // @OptionalParam(name="animal-breed") // TokenAndListParam theAnimal_breed, // // @Description(shortDefinition="All patients linked to the given patient") // @OptionalParam(name="link", targetTypes={ Patient.class } ) // ReferenceAndListParam theLink, // // @Description(shortDefinition="This patient has been marked as deceased, or as a death date entered") // @OptionalParam(name="deceased") // TokenAndListParam theDeceased, // // @Description(shortDefinition="The date of death has been provided and satisfies this search value") // @OptionalParam(name="deathdate") // DateRangeParam theDeathdate, // // @IncludeParam(reverse=true) // Set<Include> theRevIncludes, // @Description(shortDefinition="Only return resources which were last updated as specified by the given range") // @OptionalParam(name="_lastUpdated") // DateRangeParam theLastUpdated, // @IncludeParam(allow= { // "Patient:careprovider" , "Patient:link" , "Patient:organization" , "Patient:careprovider" , "Patient:link" , "Patient:organization" , "Patient:careprovider" , "Patient:link" , "Patient:organization" , "*" }) Set<Include> theIncludes, @Sort SortSpec theSort, @Count Integer theCount ) { startRequest(theServletRequest); try { SearchParameterMap paramMap = new SearchParameterMap(); paramMap.add("_id", theId); // paramMap.add("_language", theResourceLanguage); // paramMap.add("_tag", theSearchForTag); // paramMap.add("identifier", theIdentifier); paramMap.add("name", theName); // paramMap.add("family", theFamily); // paramMap.add("given", theGiven); // paramMap.add("phonetic", thePhonetic); // paramMap.add("telecom", theTelecom); // paramMap.add("address", theAddress); paramMap.add("gender", theGender); // paramMap.add("language", theLanguage); // paramMap.add("birthdate", theBirthdate); paramMap.add("organization", theOrganization); paramMap.add("specialty", theSpecialty); // paramMap.add("active", theActive); // paramMap.add("animal-species", theAnimal_species); // paramMap.add("animal-breed", theAnimal_breed); // paramMap.add("link", theLink); // paramMap.add("deceased", theDeceased); // paramMap.add("deathdate", theDeathdate); // paramMap.setRevIncludes(theRevIncludes); // paramMap.setLastUpdated(theLastUpdated); paramMap.setIncludes(theIncludes); paramMap.setSort(theSort); paramMap.setCount(theCount); ca.uhn.fhir.rest.server.IBundleProvider retVal = getDao().search(paramMap); return retVal; } finally { endRequest(theServletRequest); } } }