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