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