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 @Description(shortDefinition="Search for resources which have the given tag") 048 @OptionalParam(name=ca.uhn.fhir.rest.api.Constants.PARAM_TAG) 049 TokenAndListParam theSearchForTag, 050 051 @Description(shortDefinition="Search for resources which have the given security labels") 052 @OptionalParam(name=ca.uhn.fhir.rest.api.Constants.PARAM_SECURITY) 053 TokenAndListParam theSearchForSecurity, 054 055 @Description(shortDefinition="Search for resources which have the given profile") 056 @OptionalParam(name=ca.uhn.fhir.rest.api.Constants.PARAM_PROFILE) 057 UriAndListParam theSearchForProfile, 058 059 @Description(shortDefinition="Search the contents of the resource's data using a list") 060 @OptionalParam(name=ca.uhn.fhir.rest.api.Constants.PARAM_LIST) 061 StringAndListParam theList, 062 063 @Description(shortDefinition="The language of the resource") 064 @OptionalParam(name=ca.uhn.fhir.rest.api.Constants.PARAM_LANGUAGE) 065 TokenAndListParam theResourceLanguage, 066 067 @Description(shortDefinition="Search for resources which have the given source value (Resource.meta.source)") 068 @OptionalParam(name=ca.uhn.fhir.rest.api.Constants.PARAM_SOURCE) 069 UriAndListParam theSearchForSource, 070 071 @Description(shortDefinition="Return resources linked to by the given target") 072 @OptionalParam(name="_has") 073 HasAndListParam theHas, 074 075 076 077 @Description(shortDefinition="The ID of the resource") 078 @OptionalParam(name="_id") 079 TokenAndListParam the_id, 080 081 082 @Description(shortDefinition="Search on the narrative of the resource") 083 @OptionalParam(name="_text") 084 SpecialAndListParam the_text, 085 086 087 @Description(shortDefinition="A (part of the) address of the location") 088 @OptionalParam(name="address") 089 StringAndListParam theAddress, 090 091 092 @Description(shortDefinition="A city specified in an address") 093 @OptionalParam(name="address-city") 094 StringAndListParam theAddress_city, 095 096 097 @Description(shortDefinition="A country specified in an address") 098 @OptionalParam(name="address-country") 099 StringAndListParam theAddress_country, 100 101 102 @Description(shortDefinition="A postal code specified in an address") 103 @OptionalParam(name="address-postalcode") 104 StringAndListParam theAddress_postalcode, 105 106 107 @Description(shortDefinition="A state specified in an address") 108 @OptionalParam(name="address-state") 109 StringAndListParam theAddress_state, 110 111 112 @Description(shortDefinition="A use code specified in an address") 113 @OptionalParam(name="address-use") 114 TokenAndListParam theAddress_use, 115 116 117 @Description(shortDefinition="One of the Location's characteristics") 118 @OptionalParam(name="characteristic") 119 TokenAndListParam theCharacteristic, 120 121 122 @Description(shortDefinition="Select locations that contain the specified co-ordinates") 123 @OptionalParam(name="contains") 124 SpecialAndListParam theContains, 125 126 127 @Description(shortDefinition="Technical endpoints providing access to services operated for the location") 128 @OptionalParam(name="endpoint", targetTypes={ } ) 129 ReferenceAndListParam theEndpoint, 130 131 132 @Description(shortDefinition="An identifier for the location") 133 @OptionalParam(name="identifier") 134 TokenAndListParam theIdentifier, 135 136 137 @Description(shortDefinition="A portion of the location's name or alias") 138 @OptionalParam(name="name") 139 StringAndListParam theName, 140 141 142 @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.") 143 @OptionalParam(name="near") 144 SpecialAndListParam theNear, 145 146 147 @Description(shortDefinition="Searches for locations (typically bed/room) that have an operational status (e.g. contaminated, housekeeping)") 148 @OptionalParam(name="operational-status") 149 TokenAndListParam theOperational_status, 150 151 152 @Description(shortDefinition="Searches for locations that are managed by the provided organization") 153 @OptionalParam(name="organization", targetTypes={ } ) 154 ReferenceAndListParam theOrganization, 155 156 157 @Description(shortDefinition="A location of which this location is a part") 158 @OptionalParam(name="partof", targetTypes={ } ) 159 ReferenceAndListParam thePartof, 160 161 162 @Description(shortDefinition="Searches for locations with a specific kind of status") 163 @OptionalParam(name="status") 164 TokenAndListParam theStatus, 165 166 167 @Description(shortDefinition="A code for the type of location") 168 @OptionalParam(name="type") 169 TokenAndListParam theType, 170 171 @RawParam 172 Map<String, List<String>> theAdditionalRawParams, 173 174 @Description(shortDefinition="Only return resources which were last updated as specified by the given range") 175 @OptionalParam(name="_lastUpdated") 176 DateRangeParam theLastUpdated, 177 178 @IncludeParam 179 Set<Include> theIncludes, 180 181 @IncludeParam(reverse=true) 182 Set<Include> theRevIncludes, 183 184 @Sort 185 SortSpec theSort, 186 187 @ca.uhn.fhir.rest.annotation.Count 188 Integer theCount, 189 190 @ca.uhn.fhir.rest.annotation.Offset 191 Integer theOffset, 192 193 SummaryEnum theSummaryMode, 194 195 SearchTotalModeEnum theSearchTotalMode, 196 197 SearchContainedModeEnum theSearchContainedMode 198 199 ) { 200 startRequest(theServletRequest); 201 try { 202 SearchParameterMap paramMap = new SearchParameterMap(); 203 paramMap.add(ca.uhn.fhir.rest.api.Constants.PARAM_FILTER, theFtFilter); 204 paramMap.add(ca.uhn.fhir.rest.api.Constants.PARAM_CONTENT, theFtContent); 205 paramMap.add(ca.uhn.fhir.rest.api.Constants.PARAM_TEXT, theFtText); 206 paramMap.add(ca.uhn.fhir.rest.api.Constants.PARAM_TAG, theSearchForTag); 207 paramMap.add(ca.uhn.fhir.rest.api.Constants.PARAM_SECURITY, theSearchForSecurity); 208 paramMap.add(ca.uhn.fhir.rest.api.Constants.PARAM_PROFILE, theSearchForProfile); 209 paramMap.add(ca.uhn.fhir.rest.api.Constants.PARAM_SOURCE, theSearchForSource); 210 paramMap.add(ca.uhn.fhir.rest.api.Constants.PARAM_LIST, theList); 211 paramMap.add(ca.uhn.fhir.rest.api.Constants.PARAM_LANGUAGE, theResourceLanguage); 212 213 paramMap.add("_has", theHas); 214 paramMap.add("_id", the_id); 215 paramMap.add("_text", the_text); 216 paramMap.add("address", theAddress); 217 paramMap.add("address-city", theAddress_city); 218 paramMap.add("address-country", theAddress_country); 219 paramMap.add("address-postalcode", theAddress_postalcode); 220 paramMap.add("address-state", theAddress_state); 221 paramMap.add("address-use", theAddress_use); 222 paramMap.add("characteristic", theCharacteristic); 223 paramMap.add("contains", theContains); 224 paramMap.add("endpoint", theEndpoint); 225 paramMap.add("identifier", theIdentifier); 226 paramMap.add("name", theName); 227 paramMap.add("near", theNear); 228 paramMap.add("operational-status", theOperational_status); 229 paramMap.add("organization", theOrganization); 230 paramMap.add("partof", thePartof); 231 paramMap.add("status", theStatus); 232 paramMap.add("type", theType); 233 paramMap.setRevIncludes(theRevIncludes); 234 paramMap.setLastUpdated(theLastUpdated); 235 paramMap.setIncludes(theIncludes); 236 paramMap.setSort(theSort); 237 paramMap.setCount(theCount); 238 paramMap.setOffset(theOffset); 239 paramMap.setSummaryMode(theSummaryMode); 240 paramMap.setSearchTotalMode(theSearchTotalMode); 241 paramMap.setSearchContainedMode(theSearchContainedMode); 242 243 getDao().translateRawParameters(theAdditionalRawParams, paramMap); 244 245 ca.uhn.fhir.rest.api.server.IBundleProvider retVal = getDao().search(paramMap, theRequestDetails, theServletResponse); 246 return retVal; 247 } finally { 248 endRequest(theServletRequest); 249 } 250 } 251 252}