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