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}