
001 002package ca.uhn.fhir.jpa.rp.r5; 003 004import java.util.*; 005 006import org.apache.commons.lang3.StringUtils; 007 008import ca.uhn.fhir.jpa.searchparam.SearchParameterMap; 009import ca.uhn.fhir.model.api.Include; 010import ca.uhn.fhir.model.api.annotation.*; 011import org.hl7.fhir.r5.model.*; 012import ca.uhn.fhir.rest.annotation.*; 013import ca.uhn.fhir.rest.param.*; 014import ca.uhn.fhir.rest.api.SortSpec; 015import ca.uhn.fhir.rest.api.SummaryEnum; 016import ca.uhn.fhir.rest.api.SearchTotalModeEnum; 017import ca.uhn.fhir.rest.api.SearchContainedModeEnum; 018 019public class LocationResourceProvider extends 020 ca.uhn.fhir.jpa.provider.BaseJpaResourceProvider<Location> 021 { 022 023 @Override 024 public Class<Location> getResourceType() { 025 return Location.class; 026 } 027 028 @Search(allowUnknownParams=true) 029 public ca.uhn.fhir.rest.api.server.IBundleProvider search( 030 jakarta.servlet.http.HttpServletRequest theServletRequest, 031 jakarta.servlet.http.HttpServletResponse theServletResponse, 032 033 ca.uhn.fhir.rest.api.server.RequestDetails theRequestDetails, 034 035 @Description(shortDefinition="Search the contents of the resource's data using a filter") 036 @OptionalParam(name=ca.uhn.fhir.rest.api.Constants.PARAM_FILTER) 037 StringAndListParam theFtFilter, 038 039 @Description(shortDefinition="Search the contents of the resource's data using a fulltext search") 040 @OptionalParam(name=ca.uhn.fhir.rest.api.Constants.PARAM_CONTENT) 041 StringAndListParam theFtContent, 042 043 @Description(shortDefinition="Search the contents of the resource's narrative using a fulltext search") 044 @OptionalParam(name=ca.uhn.fhir.rest.api.Constants.PARAM_TEXT) 045 StringAndListParam theFtText, 046 047 048 @Description(shortDefinition="Search the contents of the resource's data using a list") 049 @OptionalParam(name=ca.uhn.fhir.rest.api.Constants.PARAM_LIST) 050 StringAndListParam theList, 051 052 @Description(shortDefinition="The language of the resource") 053 @OptionalParam(name=ca.uhn.fhir.rest.api.Constants.PARAM_LANGUAGE) 054 TokenAndListParam theResourceLanguage, 055 056 @Description(shortDefinition="Search for resources which have the given source value (Resource.meta.source)") 057 @OptionalParam(name=ca.uhn.fhir.rest.api.Constants.PARAM_SOURCE) 058 UriAndListParam theSearchForSource, 059 060 @Description(shortDefinition="Return resources linked to by the given target") 061 @OptionalParam(name="_has") 062 HasAndListParam theHas, 063 064 065 066 @Description(shortDefinition="The ID of the resource") 067 @OptionalParam(name="_id") 068 TokenAndListParam the_id, 069 070 071 @Description(shortDefinition="Only return resources which were last updated as specified by the given range") 072 @OptionalParam(name="_lastUpdated") 073 DateRangeParam the_lastUpdated, 074 075 076 @Description(shortDefinition="The profile of the resource") 077 @OptionalParam(name="_profile") 078 UriAndListParam the_profile, 079 080 081 @Description(shortDefinition="The security of the resource") 082 @OptionalParam(name="_security") 083 TokenAndListParam the_security, 084 085 086 @Description(shortDefinition="The tag of the resource") 087 @OptionalParam(name="_tag") 088 TokenAndListParam the_tag, 089 090 091 @Description(shortDefinition="Search on the narrative of the resource") 092 @OptionalParam(name="_text") 093 SpecialAndListParam the_text, 094 095 096 @Description(shortDefinition="A (part of the) address of the location") 097 @OptionalParam(name="address") 098 StringAndListParam theAddress, 099 100 101 @Description(shortDefinition="A city specified in an address") 102 @OptionalParam(name="address-city") 103 StringAndListParam theAddress_city, 104 105 106 @Description(shortDefinition="A country specified in an address") 107 @OptionalParam(name="address-country") 108 StringAndListParam theAddress_country, 109 110 111 @Description(shortDefinition="A postal code specified in an address") 112 @OptionalParam(name="address-postalcode") 113 StringAndListParam theAddress_postalcode, 114 115 116 @Description(shortDefinition="A state specified in an address") 117 @OptionalParam(name="address-state") 118 StringAndListParam theAddress_state, 119 120 121 @Description(shortDefinition="A use code specified in an address") 122 @OptionalParam(name="address-use") 123 TokenAndListParam theAddress_use, 124 125 126 @Description(shortDefinition="One of the Location's characteristics") 127 @OptionalParam(name="characteristic") 128 TokenAndListParam theCharacteristic, 129 130 131 @Description(shortDefinition="Select locations that contain the specified co-ordinates") 132 @OptionalParam(name="contains") 133 SpecialAndListParam theContains, 134 135 136 @Description(shortDefinition="Technical endpoints providing access to services operated for the location") 137 @OptionalParam(name="endpoint", targetTypes={ } ) 138 ReferenceAndListParam theEndpoint, 139 140 141 @Description(shortDefinition="An identifier for the location") 142 @OptionalParam(name="identifier") 143 TokenAndListParam theIdentifier, 144 145 146 @Description(shortDefinition="A portion of the location's name or alias") 147 @OptionalParam(name="name") 148 StringAndListParam theName, 149 150 151 @Description(shortDefinition="Search for locations where the location.position is near to, or within a specified distance of, the provided coordinates expressed as [latitude]|[longitude]|[distance]|[units] (using the WGS84 datum, see notes).Servers which support the near parameter SHALL support the unit string 'km' for kilometers and SHOULD support '[mi_us]' for miles, support for other units is optional. If the units are omitted, then kms should be assumed. If the distance is omitted, then the server can use its own discretion as to what distances should be considered near (and units are irrelevant).If the server is unable to understand the units (and does support the near search parameter), it MIGHT return an OperationOutcome and fail the search with a http status 400 BadRequest. If the server does not support the near parameter, the parameter MIGHT report the unused parameter in a bundled OperationOutcome and still perform the search ignoring the near parameter.Note: The algorithm to determine the distance is not defined by the specification, and systems might have different engines that calculate things differently. They could consider geographic point to point, or path via road, or including current traffic conditions, or just simple neighboring postcodes/localities if that's all it had access to.") 152 @OptionalParam(name="near") 153 SpecialAndListParam theNear, 154 155 156 @Description(shortDefinition="Searches for locations (typically bed/room) that have an operational status (e.g. contaminated, housekeeping)") 157 @OptionalParam(name="operational-status") 158 TokenAndListParam theOperational_status, 159 160 161 @Description(shortDefinition="Searches for locations that are managed by the provided organization") 162 @OptionalParam(name="organization", targetTypes={ } ) 163 ReferenceAndListParam theOrganization, 164 165 166 @Description(shortDefinition="A location of which this location is a part") 167 @OptionalParam(name="partof", targetTypes={ } ) 168 ReferenceAndListParam thePartof, 169 170 171 @Description(shortDefinition="Searches for locations with a specific kind of status") 172 @OptionalParam(name="status") 173 TokenAndListParam theStatus, 174 175 176 @Description(shortDefinition="A code for the type of location") 177 @OptionalParam(name="type") 178 TokenAndListParam theType, 179 180 @RawParam 181 Map<String, List<String>> theAdditionalRawParams, 182 183 184 @IncludeParam 185 Set<Include> theIncludes, 186 187 @IncludeParam(reverse=true) 188 Set<Include> theRevIncludes, 189 190 @Sort 191 SortSpec theSort, 192 193 @ca.uhn.fhir.rest.annotation.Count 194 Integer theCount, 195 196 @ca.uhn.fhir.rest.annotation.Offset 197 Integer theOffset, 198 199 SummaryEnum theSummaryMode, 200 201 SearchTotalModeEnum theSearchTotalMode, 202 203 SearchContainedModeEnum theSearchContainedMode 204 205 ) { 206 startRequest(theServletRequest); 207 try { 208 SearchParameterMap paramMap = new SearchParameterMap(); 209 paramMap.add(ca.uhn.fhir.rest.api.Constants.PARAM_FILTER, theFtFilter); 210 paramMap.add(ca.uhn.fhir.rest.api.Constants.PARAM_CONTENT, theFtContent); 211 paramMap.add(ca.uhn.fhir.rest.api.Constants.PARAM_TEXT, theFtText); 212 paramMap.add(ca.uhn.fhir.rest.api.Constants.PARAM_SOURCE, theSearchForSource); 213 paramMap.add(ca.uhn.fhir.rest.api.Constants.PARAM_LIST, theList); 214 paramMap.add(ca.uhn.fhir.rest.api.Constants.PARAM_LANGUAGE, theResourceLanguage); 215 216 paramMap.add("_has", theHas); 217 paramMap.add("_id", the_id); 218 paramMap.add("_profile", the_profile); 219 paramMap.add("_security", the_security); 220 paramMap.add("_tag", the_tag); 221 paramMap.add("_text", the_text); 222 paramMap.add("address", theAddress); 223 paramMap.add("address-city", theAddress_city); 224 paramMap.add("address-country", theAddress_country); 225 paramMap.add("address-postalcode", theAddress_postalcode); 226 paramMap.add("address-state", theAddress_state); 227 paramMap.add("address-use", theAddress_use); 228 paramMap.add("characteristic", theCharacteristic); 229 paramMap.add("contains", theContains); 230 paramMap.add("endpoint", theEndpoint); 231 paramMap.add("identifier", theIdentifier); 232 paramMap.add("name", theName); 233 paramMap.add("near", theNear); 234 paramMap.add("operational-status", theOperational_status); 235 paramMap.add("organization", theOrganization); 236 paramMap.add("partof", thePartof); 237 paramMap.add("status", theStatus); 238 paramMap.add("type", theType); 239paramMap.setRevIncludes(theRevIncludes); 240 paramMap.setLastUpdated(the_lastUpdated); 241 paramMap.setIncludes(theIncludes); 242 paramMap.setSort(theSort); 243 paramMap.setCount(theCount); 244 paramMap.setOffset(theOffset); 245 paramMap.setSummaryMode(theSummaryMode); 246 paramMap.setSearchTotalMode(theSearchTotalMode); 247 paramMap.setSearchContainedMode(theSearchContainedMode); 248 249 getDao().translateRawParameters(theAdditionalRawParams, paramMap); 250 251 ca.uhn.fhir.rest.api.server.IBundleProvider retVal = getDao().search(paramMap, theRequestDetails, theServletResponse); 252 return retVal; 253 } finally { 254 endRequest(theServletRequest); 255 } 256 } 257 258}