@Override public IBundleProvider search(SearchParameterMap theMap) { FhirContext fhirContext = myClient.getFhirContext(); String searchURL = ResourceTypeEnum.SUBSCRIPTION.getCode() + theMap.toNormalizedQueryString(myFhirContext); IBaseBundle bundle = myClient .search() .byUrl(searchURL) .cacheControl(new CacheControlDirective().setNoCache(true)) .execute(); return new SimpleBundleProvider(BundleUtil.toListOfResources(fhirContext, bundle)); }
@Override public IClientExecutable<IQuery<Bundle>, ?> getClientExecutable(IGenericClient client, Object requestData, Map<String, Object> parameters) { IQuery<IBaseBundle> query; String queriedResourceType = (String)parameters.get(Constants.FHIR_RESOURCE_TYPE_HEADER); if (requestData instanceof ICriterion) { query = client.search() .forResource(queriedResourceType) .where((ICriterion<?>) requestData); } else { query = client.search() .byUrl(requestData.toString()); } if (parameters.containsKey(Constants.FHIR_COUNT)) { query.count(Integer.parseInt(parameters.get(Constants.FHIR_COUNT).toString())); } return query.returnBundle(Bundle.class); }
/** * Perform a search directly by URL. * * @param url The URL to search for. Note that this URL may be complete (e.g. "http://example.com/base/Patient?name=foo") in which case the client's base URL will be ignored. Or it can be relative * (e.g. "Patient?name=foo") in which case the client's base URL will be used. * @param extraParameters see {@link ExtraParameters} for a full list of parameters that can be passed, may be NULL * @return the {@link IBaseBundle} */ public IBaseBundle searchByUrl(String url, Map<ExtraParameters, Object> extraParameters) { IQuery<IBaseBundle> query = client.search().byUrl(url); ExtraParameters.process(extraParameters, query); return query.execute(); }
@Override public void run(ThreadEx thread) throws Exception { Bundle bundle = fhirService.getClient().search().byUrl(url).returnBundle(Bundle.class).execute(); thread.setAttribute("bundle", bundle); }
.byUrl(searchUrl) .returnBundle(ca.uhn.fhir.model.dstu2.resource.Bundle.class) .execute();
@Test public void testClient() { FhirContext ctx = new FhirContext(FhirVersionEnum.DSTU3); GenericClient client = (GenericClient) ctx.newRestfulGenericClient(FHIR_EP); //client.registerInterceptor(new BasicAuthInterceptor("user123", "user321$")); client.setDontValidateConformance(true); Bundle bundle = client.search().forResource(Patient.class).count(1).returnBundle(Bundle.class).execute(); assertTrue("No patient resources returned.", bundle.getEntry().size() > 0); Patient patient = (Patient) bundle.getEntryFirstRep().getResource(); String patient_id = patient.getIdElement().getIdPart(); Patient patient1 = client.read(Patient.class, "Patient/" + patient_id); assertEquals(patient_id, patient1.getIdElement().getIdPart()); bundle = client.search().byUrl("Patient?_id=" + patient_id).returnBundle(Bundle.class).execute(); assertEquals(1, bundle.getEntry().size()); Patient patient2 = (Patient) bundle.getEntry().get(0).getResource(); assertEquals(patient_id, patient2.getIdElement().getIdPart()); }