001
002package ca.uhn.fhir.jpa.rp.r4b;
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.r4b.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                        StringAndListParam 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="Technical endpoints providing access to services operated for the location")
127                        @OptionalParam(name="endpoint", targetTypes={  } )
128                        ReferenceAndListParam theEndpoint, 
129   
130
131                        @Description(shortDefinition="An identifier for the location")
132                        @OptionalParam(name="identifier")
133                        TokenAndListParam theIdentifier,
134   
135
136                        @Description(shortDefinition="A portion of the location's name or alias")
137                        @OptionalParam(name="name")
138                        StringAndListParam theName, 
139   
140
141                        @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).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)Servers may search using various techniques that might have differing accuracies, depending on implementation efficiency.Requires the near-distance parameter to be provided also")
142                        @OptionalParam(name="near")
143                        SpecialAndListParam theNear,
144   
145
146                        @Description(shortDefinition="Searches for locations (typically bed/room) that have an operational status (e.g. contaminated, housekeeping)")
147                        @OptionalParam(name="operational-status")
148                        TokenAndListParam theOperational_status,
149   
150
151                        @Description(shortDefinition="Searches for locations that are managed by the provided organization")
152                        @OptionalParam(name="organization", targetTypes={  } )
153                        ReferenceAndListParam theOrganization, 
154   
155
156                        @Description(shortDefinition="A location of which this location is a part")
157                        @OptionalParam(name="partof", targetTypes={  } )
158                        ReferenceAndListParam thePartof, 
159   
160
161                        @Description(shortDefinition="Searches for locations with a specific kind of status")
162                        @OptionalParam(name="status")
163                        TokenAndListParam theStatus,
164   
165
166                        @Description(shortDefinition="A code for the type of location")
167                        @OptionalParam(name="type")
168                        TokenAndListParam theType,
169
170                        @RawParam
171                        Map<String, List<String>> theAdditionalRawParams,
172
173        
174                        @IncludeParam
175                        Set<Include> theIncludes,
176
177                        @IncludeParam(reverse=true)
178                        Set<Include> theRevIncludes,
179
180                        @Sort
181                        SortSpec theSort,
182                        
183                        @ca.uhn.fhir.rest.annotation.Count
184                        Integer theCount,
185
186                        @ca.uhn.fhir.rest.annotation.Offset
187                        Integer theOffset,
188
189                        SummaryEnum theSummaryMode,
190
191                        SearchTotalModeEnum theSearchTotalMode,
192
193                        SearchContainedModeEnum theSearchContainedMode
194
195                        ) {
196                startRequest(theServletRequest);
197                try {
198                        SearchParameterMap paramMap = new SearchParameterMap();
199                        paramMap.add(ca.uhn.fhir.rest.api.Constants.PARAM_FILTER, theFtFilter);
200                        paramMap.add(ca.uhn.fhir.rest.api.Constants.PARAM_CONTENT, theFtContent);
201                        paramMap.add(ca.uhn.fhir.rest.api.Constants.PARAM_TEXT, theFtText);
202                        paramMap.add(ca.uhn.fhir.rest.api.Constants.PARAM_SOURCE, theSearchForSource);
203                        paramMap.add(ca.uhn.fhir.rest.api.Constants.PARAM_LIST, theList);
204                        paramMap.add(ca.uhn.fhir.rest.api.Constants.PARAM_LANGUAGE, theResourceLanguage);
205
206                        paramMap.add("_has", theHas);
207                                paramMap.add("_id", the_id);
208                                                                paramMap.add("_profile", the_profile);
209                                paramMap.add("_security", the_security);
210                                paramMap.add("_tag", the_tag);
211                                paramMap.add("_text", the_text);
212                                paramMap.add("address", theAddress);
213                                paramMap.add("address-city", theAddress_city);
214                                paramMap.add("address-country", theAddress_country);
215                                paramMap.add("address-postalcode", theAddress_postalcode);
216                                paramMap.add("address-state", theAddress_state);
217                                paramMap.add("address-use", theAddress_use);
218                                paramMap.add("endpoint", theEndpoint);
219                                paramMap.add("identifier", theIdentifier);
220                                paramMap.add("name", theName);
221                                paramMap.add("near", theNear);
222                                paramMap.add("operational-status", theOperational_status);
223                                paramMap.add("organization", theOrganization);
224                                paramMap.add("partof", thePartof);
225                                paramMap.add("status", theStatus);
226                                paramMap.add("type", theType);
227paramMap.setRevIncludes(theRevIncludes);
228                        paramMap.setLastUpdated(the_lastUpdated);
229                        paramMap.setIncludes(theIncludes);
230                        paramMap.setSort(theSort);
231                        paramMap.setCount(theCount);
232                        paramMap.setOffset(theOffset);
233                        paramMap.setSummaryMode(theSummaryMode);
234                        paramMap.setSearchTotalMode(theSearchTotalMode);
235                        paramMap.setSearchContainedMode(theSearchContainedMode);
236
237                        getDao().translateRawParameters(theAdditionalRawParams, paramMap);
238
239                        ca.uhn.fhir.rest.api.server.IBundleProvider retVal = getDao().search(paramMap, theRequestDetails, theServletResponse);
240                        return retVal;
241                } finally {
242                        endRequest(theServletRequest);
243                }
244        }
245
246}