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