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.provider.r5.*;
009import ca.uhn.fhir.jpa.searchparam.SearchParameterMap;
010import ca.uhn.fhir.model.api.Include;
011import ca.uhn.fhir.model.api.annotation.*;
012import org.hl7.fhir.r5.model.*;
013import ca.uhn.fhir.rest.annotation.*;
014import ca.uhn.fhir.rest.param.*;
015import ca.uhn.fhir.rest.api.SortSpec;
016import ca.uhn.fhir.rest.api.SummaryEnum;
017import ca.uhn.fhir.rest.api.SearchTotalModeEnum;
018import ca.uhn.fhir.rest.api.SearchContainedModeEnum;
019
020public class LocationResourceProvider extends 
021        JpaResourceProviderR5<Location>
022        {
023
024        @Override
025        public Class<Location> getResourceType() {
026                return Location.class;
027        }
028
029        @Search(allowUnknownParams=true)
030        public ca.uhn.fhir.rest.api.server.IBundleProvider search(
031                        javax.servlet.http.HttpServletRequest theServletRequest,
032                        javax.servlet.http.HttpServletResponse theServletResponse,
033
034                        ca.uhn.fhir.rest.api.server.RequestDetails theRequestDetails,
035
036                        @Description(shortDefinition="Search the contents of the resource's data using a filter")
037                        @OptionalParam(name=ca.uhn.fhir.rest.api.Constants.PARAM_FILTER)
038                        StringAndListParam theFtFilter,
039
040                        @Description(shortDefinition="Search the contents of the resource's data using a fulltext search")
041                        @OptionalParam(name=ca.uhn.fhir.rest.api.Constants.PARAM_CONTENT)
042                        StringAndListParam theFtContent, 
043
044                        @Description(shortDefinition="Search the contents of the resource's narrative using a fulltext search")
045                        @OptionalParam(name=ca.uhn.fhir.rest.api.Constants.PARAM_TEXT)
046                        StringAndListParam theFtText, 
047
048                        @Description(shortDefinition="Search for resources which have the given tag")
049                        @OptionalParam(name=ca.uhn.fhir.rest.api.Constants.PARAM_TAG)
050                        TokenAndListParam theSearchForTag, 
051
052                        @Description(shortDefinition="Search for resources which have the given security labels")
053                        @OptionalParam(name=ca.uhn.fhir.rest.api.Constants.PARAM_SECURITY)
054                        TokenAndListParam theSearchForSecurity, 
055  
056                        @Description(shortDefinition="Search for resources which have the given profile")
057                        @OptionalParam(name=ca.uhn.fhir.rest.api.Constants.PARAM_PROFILE)
058                        UriAndListParam theSearchForProfile,
059
060                        @Description(shortDefinition="Search for resources which have the given source value (Resource.meta.source)")
061                        @OptionalParam(name=ca.uhn.fhir.rest.api.Constants.PARAM_SOURCE)
062                        UriAndListParam theSearchForSource,
063
064                        @Description(shortDefinition="Return resources linked to by the given target")
065                        @OptionalParam(name="_has")
066                        HasAndListParam theHas, 
067
068   
069
070                        @Description(shortDefinition="The ID of the resource")
071                        @OptionalParam(name="_id")
072                        TokenAndListParam the_id,
073   
074
075                        @Description(shortDefinition="Search on the narrative of the resource")
076                        @OptionalParam(name="_text")
077                        SpecialAndListParam the_text,
078   
079
080                        @Description(shortDefinition="A (part of the) address of the location")
081                        @OptionalParam(name="address")
082                        StringAndListParam theAddress, 
083   
084
085                        @Description(shortDefinition="A city specified in an address")
086                        @OptionalParam(name="address-city")
087                        StringAndListParam theAddress_city, 
088   
089
090                        @Description(shortDefinition="A country specified in an address")
091                        @OptionalParam(name="address-country")
092                        StringAndListParam theAddress_country, 
093   
094
095                        @Description(shortDefinition="A postal code specified in an address")
096                        @OptionalParam(name="address-postalcode")
097                        StringAndListParam theAddress_postalcode, 
098   
099
100                        @Description(shortDefinition="A state specified in an address")
101                        @OptionalParam(name="address-state")
102                        StringAndListParam theAddress_state, 
103   
104
105                        @Description(shortDefinition="A use code specified in an address")
106                        @OptionalParam(name="address-use")
107                        TokenAndListParam theAddress_use,
108   
109
110                        @Description(shortDefinition="Technical endpoints providing access to services operated for the location")
111                        @OptionalParam(name="endpoint", targetTypes={  } )
112                        ReferenceAndListParam theEndpoint, 
113   
114
115                        @Description(shortDefinition="An identifier for the location")
116                        @OptionalParam(name="identifier")
117                        TokenAndListParam theIdentifier,
118   
119
120                        @Description(shortDefinition="A portion of the location's name or alias")
121                        @OptionalParam(name="name")
122                        StringAndListParam theName, 
123   
124
125                        @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.")
126                        @OptionalParam(name="near")
127                        SpecialAndListParam theNear,
128   
129
130                        @Description(shortDefinition="Searches for locations (typically bed/room) that have an operational status (e.g. contaminated, housekeeping)")
131                        @OptionalParam(name="operational-status")
132                        TokenAndListParam theOperational_status,
133   
134
135                        @Description(shortDefinition="Searches for locations that are managed by the provided organization")
136                        @OptionalParam(name="organization", targetTypes={  } )
137                        ReferenceAndListParam theOrganization, 
138   
139
140                        @Description(shortDefinition="A location of which this location is a part")
141                        @OptionalParam(name="partof", targetTypes={  } )
142                        ReferenceAndListParam thePartof, 
143   
144
145                        @Description(shortDefinition="Searches for locations with a specific kind of status")
146                        @OptionalParam(name="status")
147                        TokenAndListParam theStatus,
148   
149
150                        @Description(shortDefinition="A code for the type of location")
151                        @OptionalParam(name="type")
152                        TokenAndListParam theType,
153
154                        @RawParam
155                        Map<String, List<String>> theAdditionalRawParams,
156
157                        @Description(shortDefinition="Only return resources which were last updated as specified by the given range")
158                        @OptionalParam(name="_lastUpdated")
159                        DateRangeParam theLastUpdated, 
160
161                        @IncludeParam
162                        Set<Include> theIncludes,
163
164                        @IncludeParam(reverse=true)
165                        Set<Include> theRevIncludes,
166
167                        @Sort
168                        SortSpec theSort,
169                        
170                        @ca.uhn.fhir.rest.annotation.Count
171                        Integer theCount,
172
173                        @ca.uhn.fhir.rest.annotation.Offset
174                        Integer theOffset,
175
176                        SummaryEnum theSummaryMode,
177
178                        SearchTotalModeEnum theSearchTotalMode,
179
180                        SearchContainedModeEnum theSearchContainedMode
181
182                        ) {
183                startRequest(theServletRequest);
184                try {
185                        SearchParameterMap paramMap = new SearchParameterMap();
186                        paramMap.add(ca.uhn.fhir.rest.api.Constants.PARAM_FILTER, theFtFilter);
187                        paramMap.add(ca.uhn.fhir.rest.api.Constants.PARAM_CONTENT, theFtContent);
188                        paramMap.add(ca.uhn.fhir.rest.api.Constants.PARAM_TEXT, theFtText);
189                        paramMap.add(ca.uhn.fhir.rest.api.Constants.PARAM_TAG, theSearchForTag);
190                        paramMap.add(ca.uhn.fhir.rest.api.Constants.PARAM_SECURITY, theSearchForSecurity);
191                        paramMap.add(ca.uhn.fhir.rest.api.Constants.PARAM_PROFILE, theSearchForProfile);
192                        paramMap.add(ca.uhn.fhir.rest.api.Constants.PARAM_SOURCE, theSearchForSource);
193                        paramMap.add("_has", theHas);
194                        paramMap.add("_id", the_id);
195                        paramMap.add("_text", the_text);
196                        paramMap.add("address", theAddress);
197                        paramMap.add("address-city", theAddress_city);
198                        paramMap.add("address-country", theAddress_country);
199                        paramMap.add("address-postalcode", theAddress_postalcode);
200                        paramMap.add("address-state", theAddress_state);
201                        paramMap.add("address-use", theAddress_use);
202                        paramMap.add("endpoint", theEndpoint);
203                        paramMap.add("identifier", theIdentifier);
204                        paramMap.add("name", theName);
205                        paramMap.add("near", theNear);
206                        paramMap.add("operational-status", theOperational_status);
207                        paramMap.add("organization", theOrganization);
208                        paramMap.add("partof", thePartof);
209                        paramMap.add("status", theStatus);
210                        paramMap.add("type", theType);
211                        paramMap.setRevIncludes(theRevIncludes);
212                        paramMap.setLastUpdated(theLastUpdated);
213                        paramMap.setIncludes(theIncludes);
214                        paramMap.setSort(theSort);
215                        paramMap.setCount(theCount);
216                        paramMap.setOffset(theOffset);
217                        paramMap.setSummaryMode(theSummaryMode);
218                        paramMap.setSearchTotalMode(theSearchTotalMode);
219                        paramMap.setSearchContainedMode(theSearchContainedMode);
220
221                        getDao().translateRawParameters(theAdditionalRawParams, paramMap);
222
223                        ca.uhn.fhir.rest.api.server.IBundleProvider retVal = getDao().search(paramMap, theRequestDetails, theServletResponse);
224                        return retVal;
225                } finally {
226                        endRequest(theServletRequest);
227                }
228        }
229
230}