Updates from DevDays
This commit is contained in:
parent
c78be081ef
commit
1fe3bb9ff0
|
@ -16,8 +16,13 @@ import ca.uhn.fhir.util.ElementUtil;
|
|||
/**
|
||||
* Definition class for adding extensions to the built-in
|
||||
* Patient resource type.
|
||||
*
|
||||
* Note the "profile" attribute below, which indicates the URL/ID of the
|
||||
* profile implemented by this resource. You are not required to supply this,
|
||||
* but if you do it will be automatically populated in the resource meta
|
||||
* tag if the resource is returned by a server.
|
||||
*/
|
||||
@ResourceDef(name="Patient")
|
||||
@ResourceDef(name="Patient", profile="http://example.com/StructureDefinition/mypatient")
|
||||
public class MyPatient extends Patient {
|
||||
|
||||
/**
|
||||
|
|
|
@ -27,6 +27,7 @@ import java.io.OutputStreamWriter;
|
|||
import java.io.UnsupportedEncodingException;
|
||||
import java.io.Writer;
|
||||
import java.net.URLEncoder;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collections;
|
||||
import java.util.Date;
|
||||
|
@ -52,6 +53,7 @@ import org.hl7.fhir.instance.model.api.IBaseResource;
|
|||
import org.hl7.fhir.instance.model.api.IIdType;
|
||||
|
||||
import ca.uhn.fhir.context.FhirContext;
|
||||
import ca.uhn.fhir.context.FhirVersionEnum;
|
||||
import ca.uhn.fhir.context.RuntimeResourceDefinition;
|
||||
import ca.uhn.fhir.model.api.Bundle;
|
||||
import ca.uhn.fhir.model.api.IResource;
|
||||
|
@ -59,6 +61,7 @@ import ca.uhn.fhir.model.api.Include;
|
|||
import ca.uhn.fhir.model.api.ResourceMetadataKeyEnum;
|
||||
import ca.uhn.fhir.model.api.Tag;
|
||||
import ca.uhn.fhir.model.api.TagList;
|
||||
import ca.uhn.fhir.model.primitive.IdDt;
|
||||
import ca.uhn.fhir.model.primitive.InstantDt;
|
||||
import ca.uhn.fhir.model.valueset.BundleTypeEnum;
|
||||
import ca.uhn.fhir.parser.IParser;
|
||||
|
@ -79,6 +82,19 @@ public class RestfulServerUtils {
|
|||
|
||||
public static void addProfileToBundleEntry(FhirContext theContext, IBaseResource theResource, String theServerBase) {
|
||||
if (theResource instanceof IResource) {
|
||||
if (theContext.getVersion().getVersion().isNewerThan(FhirVersionEnum.DSTU1)) {
|
||||
List<IdDt> tl = ResourceMetadataKeyEnum.PROFILES.get((IResource) theResource);
|
||||
if (tl == null) {
|
||||
tl = new ArrayList<IdDt>();
|
||||
ResourceMetadataKeyEnum.PROFILES.put((IResource) theResource, tl);
|
||||
}
|
||||
|
||||
RuntimeResourceDefinition nextDef = theContext.getResourceDefinition(theResource);
|
||||
String profile = nextDef.getResourceProfile(theServerBase);
|
||||
if (isNotBlank(profile)) {
|
||||
tl.add(new IdDt(profile));
|
||||
}
|
||||
} else {
|
||||
TagList tl = ResourceMetadataKeyEnum.TAG_LIST.get((IResource) theResource);
|
||||
if (tl == null) {
|
||||
tl = new TagList();
|
||||
|
@ -92,6 +108,7 @@ public class RestfulServerUtils {
|
|||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static void configureResponseParser(RequestDetails theRequestDetails, IParser parser) {
|
||||
// Pretty print
|
||||
|
@ -133,7 +150,8 @@ public class RestfulServerUtils {
|
|||
}
|
||||
}
|
||||
|
||||
public static String createPagingLink(Set<Include> theIncludes, String theServerBase, String theSearchId, int theOffset, int theCount, EncodingEnum theResponseEncoding, boolean thePrettyPrint, BundleTypeEnum theBundleType) {
|
||||
public static String createPagingLink(Set<Include> theIncludes, String theServerBase, String theSearchId, int theOffset, int theCount, EncodingEnum theResponseEncoding, boolean thePrettyPrint,
|
||||
BundleTypeEnum theBundleType) {
|
||||
try {
|
||||
StringBuilder b = new StringBuilder();
|
||||
b.append(theServerBase);
|
||||
|
@ -223,8 +241,7 @@ public class RestfulServerUtils {
|
|||
}
|
||||
|
||||
/**
|
||||
* Returns null if the request doesn't express that it wants FHIR. If it expresses that it wants
|
||||
* XML and JSON equally, returns thePrefer.
|
||||
* Returns null if the request doesn't express that it wants FHIR. If it expresses that it wants XML and JSON equally, returns thePrefer.
|
||||
*/
|
||||
public static EncodingEnum determineResponseEncodingNoDefault(HttpServletRequest theReq, EncodingEnum thePrefer) {
|
||||
String[] format = theReq.getParameterValues(Constants.PARAM_FORMAT);
|
||||
|
|
|
@ -21,6 +21,7 @@ import org.junit.Test;
|
|||
|
||||
import ca.uhn.fhir.context.FhirContext;
|
||||
import ca.uhn.fhir.model.api.IResource;
|
||||
import ca.uhn.fhir.model.api.annotation.ResourceDef;
|
||||
import ca.uhn.fhir.model.dstu2.resource.Patient;
|
||||
import ca.uhn.fhir.model.primitive.IdDt;
|
||||
import ca.uhn.fhir.rest.annotation.IdParam;
|
||||
|
@ -33,9 +34,28 @@ import ca.uhn.fhir.util.PortUtil;
|
|||
public class ReadDstu2Test {
|
||||
|
||||
private static CloseableHttpClient ourClient;
|
||||
private static int ourPort;
|
||||
private static Server ourServer;
|
||||
private static FhirContext ourCtx = FhirContext.forDstu2();
|
||||
private static final org.slf4j.Logger ourLog = org.slf4j.LoggerFactory.getLogger(ReadDstu2Test.class);
|
||||
private static int ourPort;
|
||||
|
||||
private static Server ourServer;
|
||||
|
||||
/**
|
||||
* In DSTU2+ the resource ID appears in the resource body
|
||||
*/
|
||||
@Test
|
||||
public void testReadJson() throws Exception {
|
||||
HttpGet httpGet = new HttpGet("http://localhost:" + ourPort + "/Patient/123?_format=json");
|
||||
HttpResponse status = ourClient.execute(httpGet);
|
||||
String responseContent = IOUtils.toString(status.getEntity().getContent());
|
||||
ourLog.info(responseContent);
|
||||
IOUtils.closeQuietly(status.getEntity().getContent());
|
||||
|
||||
assertEquals(200, status.getStatusLine().getStatusCode());
|
||||
assertThat(responseContent, containsString("p1ReadValue"));
|
||||
assertThat(responseContent, containsString("p1ReadId"));
|
||||
assertThat(responseContent, containsString("\"meta\":{\"profile\":[\"http://foo_profile\"]}"));
|
||||
}
|
||||
|
||||
/**
|
||||
* In DSTU2+ the resource ID appears in the resource body
|
||||
|
@ -52,21 +72,6 @@ public class ReadDstu2Test {
|
|||
assertThat(responseContent, containsString("p1ReadId"));
|
||||
}
|
||||
|
||||
/**
|
||||
* In DSTU2+ the resource ID appears in the resource body
|
||||
*/
|
||||
@Test
|
||||
public void testReadJson() throws Exception {
|
||||
HttpGet httpGet = new HttpGet("http://localhost:" + ourPort + "/Patient/123&_format=json");
|
||||
HttpResponse status = ourClient.execute(httpGet);
|
||||
String responseContent = IOUtils.toString(status.getEntity().getContent());
|
||||
IOUtils.closeQuietly(status.getEntity().getContent());
|
||||
|
||||
assertEquals(200, status.getStatusLine().getStatusCode());
|
||||
assertThat(responseContent, containsString("p1ReadValue"));
|
||||
assertThat(responseContent, containsString("p1ReadId"));
|
||||
}
|
||||
|
||||
@AfterClass
|
||||
public static void afterClass() throws Exception {
|
||||
ourServer.stop();
|
||||
|
@ -101,19 +106,26 @@ public class ReadDstu2Test {
|
|||
*/
|
||||
public static class DummyPatientResourceProvider implements IResourceProvider {
|
||||
|
||||
@Read
|
||||
public Patient read(@IdParam IdDt theId) {
|
||||
Patient p1 = new Patient();
|
||||
p1.setId("p1ReadId");
|
||||
p1.addIdentifier().setValue("p1ReadValue");
|
||||
return p1;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Class<? extends IResource> getResourceType() {
|
||||
return Patient.class;
|
||||
}
|
||||
|
||||
@Read
|
||||
public Patient read(@IdParam IdDt theId) {
|
||||
Patient p1 = new MyPatient();
|
||||
p1.setId("p1ReadId");
|
||||
p1.addIdentifier().setValue("p1ReadValue");
|
||||
return p1;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ResourceDef(name = "Patient", profile = "http://foo_profile")
|
||||
public static class MyPatient extends Patient {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue