Fix #318 - Apply setDefaultTypeForProfile to contained resources
This commit is contained in:
parent
19c00a3620
commit
c345209ce4
|
@ -1418,6 +1418,8 @@ class ParserState<T> {
|
|||
|
||||
@Override
|
||||
public void wereBack() {
|
||||
super.wereBack();
|
||||
|
||||
IResource res = (IResource) getCurrentElement();
|
||||
assert res != null;
|
||||
if (res.getId() == null || res.getId().isEmpty()) {
|
||||
|
@ -1456,6 +1458,8 @@ class ParserState<T> {
|
|||
|
||||
@Override
|
||||
public void wereBack() {
|
||||
super.wereBack();
|
||||
|
||||
IBaseResource res = getCurrentElement();
|
||||
assert res != null;
|
||||
if (res.getIdElement() == null || res.getIdElement().isEmpty()) {
|
||||
|
|
|
@ -22,6 +22,8 @@ import ca.uhn.fhir.model.api.annotation.Extension;
|
|||
import ca.uhn.fhir.model.api.annotation.ResourceDef;
|
||||
import ca.uhn.fhir.model.dstu2.composite.QuantityDt;
|
||||
import ca.uhn.fhir.model.dstu2.resource.Bundle;
|
||||
import ca.uhn.fhir.model.dstu2.resource.Medication;
|
||||
import ca.uhn.fhir.model.dstu2.resource.MedicationOrder;
|
||||
import ca.uhn.fhir.model.dstu2.resource.Patient;
|
||||
import ca.uhn.fhir.model.primitive.DateTimeDt;
|
||||
import ca.uhn.fhir.model.primitive.StringDt;
|
||||
|
@ -30,222 +32,13 @@ import ca.uhn.fhir.util.ElementUtil;
|
|||
|
||||
public class CustomTypeDstu2Test {
|
||||
|
||||
private static final org.slf4j.Logger ourLog = org.slf4j.LoggerFactory.getLogger(CustomTypeDstu2Test.class);
|
||||
private static final FhirContext ourCtx = FhirContext.forDstu2();
|
||||
|
||||
@Test
|
||||
public void testAccessEmptyMetaLists() {
|
||||
Patient p = new Patient();
|
||||
assertThat(p.getMeta().getProfile(), empty());
|
||||
assertThat(p.getMeta().getFormatCommentsPost(), empty());
|
||||
assertThat(p.getMeta().getFormatCommentsPre(), empty());
|
||||
assertThat(p.getMeta().getLastUpdated(), nullValue());
|
||||
assertThat(p.getMeta().getSecurity(), empty());
|
||||
assertThat(p.getMeta().getSecurity("foo", "bar"), nullValue());
|
||||
assertThat(p.getMeta().getTag(), empty());
|
||||
assertThat(p.getMeta().getTag("foo", "bar"), nullValue());
|
||||
assertThat(p.getMeta().getVersionId(), nullValue());
|
||||
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void testEncodeCompleteMetaLists() {
|
||||
Patient p = new Patient();
|
||||
p.getMeta().addProfile("http://foo/profile1");
|
||||
p.getMeta().addProfile("http://foo/profile2");
|
||||
p.getMeta().addSecurity().setSystem("SEC_S1").setCode("SEC_C1").setDisplay("SED_D1");
|
||||
p.getMeta().addSecurity().setSystem("SEC_S2").setCode("SEC_C2").setDisplay("SED_D2");
|
||||
p.getMeta().addTag().setSystem("TAG_S1").setCode("TAG_C1").setDisplay("TAG_D1");
|
||||
p.getMeta().addTag().setSystem("TAG_S2").setCode("TAG_C2").setDisplay("TAG_D2");
|
||||
|
||||
String out = ourCtx.newXmlParser().setPrettyPrint(true).encodeResourceToString(p);
|
||||
ourLog.info(out);
|
||||
|
||||
//@formatter:off
|
||||
assertThat(out, stringContainsInOrder(
|
||||
"<meta>",
|
||||
"<profile value=\"http://foo/profile1\"/>",
|
||||
"<profile value=\"http://foo/profile2\"/>",
|
||||
"<security>",
|
||||
"<system value=\"SEC_S1\"/>",
|
||||
"<code value=\"SEC_C1\"/>",
|
||||
"<display value=\"SED_D1\"/>",
|
||||
"</security>",
|
||||
"<security>",
|
||||
"<system value=\"SEC_S2\"/>",
|
||||
"<code value=\"SEC_C2\"/>",
|
||||
"<display value=\"SED_D2\"/>",
|
||||
"</security>",
|
||||
"<tag>",
|
||||
"<system value=\"TAG_S1\"/>",
|
||||
"<display value=\"TAG_D1\"/>",
|
||||
"</tag>",
|
||||
"<tag>",
|
||||
"<system value=\"TAG_S2\"/>",
|
||||
"<display value=\"TAG_D2\"/>",
|
||||
"</tag>",
|
||||
"</meta>"));
|
||||
//@formatter:on
|
||||
|
||||
}
|
||||
private static final org.slf4j.Logger ourLog = org.slf4j.LoggerFactory.getLogger(CustomTypeDstu2Test.class);
|
||||
|
||||
@Before
|
||||
public void before() {
|
||||
ourCtx.setAddProfileTagWhenEncoding(AddProfileTagEnum.ONLY_FOR_CUSTOM);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testEncodeWithCustomType() {
|
||||
|
||||
MyCustomPatient patient = new MyCustomPatient();
|
||||
|
||||
patient.addIdentifier().setSystem("urn:system").setValue("1234");
|
||||
patient.addName().addFamily("Rossi").addGiven("Mario");
|
||||
patient.setInsulinLevel(new QuantityDt());
|
||||
patient.setGlucoseLevel(new QuantityDt());
|
||||
patient.setHbA1c(new QuantityDt());
|
||||
patient.setBloodPressure(new QuantityDt());
|
||||
patient.setCholesterol(new QuantityDt());
|
||||
patient.setWeight(new StringDt("80 kg"));
|
||||
patient.setWeight(new StringDt("185 cm"));
|
||||
patient.setCheckDates(new ArrayList<DateTimeDt>());
|
||||
patient.getCheckDates().add(new DateTimeDt("2014-01-26T11:11:11"));
|
||||
|
||||
IParser p = ourCtx.newXmlParser().setPrettyPrint(true);
|
||||
String messageString = p.encodeResourceToString(patient);
|
||||
|
||||
ourLog.info(messageString);
|
||||
|
||||
//@formatter:off
|
||||
assertThat(messageString, stringContainsInOrder(
|
||||
"<meta>",
|
||||
"<profile value=\"http://example.com/foo\"/>",
|
||||
"</meta>"));
|
||||
//@formatter:on
|
||||
|
||||
//@formatter:off
|
||||
assertThat(messageString, not(stringContainsInOrder(
|
||||
"<meta>",
|
||||
"<profile value=\"http://example.com/foo\"", "/>",
|
||||
"<profile value=\"http://example.com/foo\"/>",
|
||||
"</meta>")));
|
||||
//@formatter:on
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testEncodeWithCustomTypeAndAutoInsertedProfile() {
|
||||
|
||||
MyCustomPatient patient = new MyCustomPatient();
|
||||
|
||||
patient.getMeta().addProfile("http://example.com/foo");
|
||||
patient.getMeta().addProfile("http://example.com/bar");
|
||||
|
||||
patient.addIdentifier().setSystem("urn:system").setValue("1234");
|
||||
patient.addName().addFamily("Rossi").addGiven("Mario");
|
||||
patient.setInsulinLevel(new QuantityDt());
|
||||
patient.setGlucoseLevel(new QuantityDt());
|
||||
patient.setHbA1c(new QuantityDt());
|
||||
patient.setBloodPressure(new QuantityDt());
|
||||
patient.setCholesterol(new QuantityDt());
|
||||
patient.setWeight(new StringDt("80 kg"));
|
||||
patient.setWeight(new StringDt("185 cm"));
|
||||
patient.setCheckDates(new ArrayList<DateTimeDt>());
|
||||
patient.getCheckDates().add(new DateTimeDt("2014-01-26T11:11:11"));
|
||||
|
||||
ourCtx.setAddProfileTagWhenEncoding(AddProfileTagEnum.ONLY_FOR_CUSTOM);
|
||||
IParser p = ourCtx.newXmlParser().setPrettyPrint(true);
|
||||
String messageString = p.encodeResourceToString(patient);
|
||||
|
||||
ourLog.info(messageString);
|
||||
|
||||
//@formatter:off
|
||||
assertThat(messageString, stringContainsInOrder(
|
||||
"<meta>",
|
||||
"<profile value=\"http://example.com/foo\"/>",
|
||||
"<profile value=\"http://example.com/bar\"/>",
|
||||
"</meta>"));
|
||||
//@formatter:on
|
||||
|
||||
//@formatter:off
|
||||
assertThat(messageString, not(stringContainsInOrder(
|
||||
"<meta>",
|
||||
"<profile value=\"http://example.com/foo\"", "/>",
|
||||
"<profile value=\"http://example.com/foo\"/>",
|
||||
"</meta>")));
|
||||
//@formatter:on
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testEncodeNormalType() {
|
||||
|
||||
Patient patient = new Patient();
|
||||
|
||||
patient.addIdentifier().setSystem("urn:system").setValue("1234");
|
||||
patient.addName().addFamily("Rossi").addGiven("Mario");
|
||||
|
||||
ourCtx.setAddProfileTagWhenEncoding(AddProfileTagEnum.ONLY_FOR_CUSTOM);
|
||||
IParser p = ourCtx.newXmlParser().setPrettyPrint(true);
|
||||
String messageString = p.encodeResourceToString(patient);
|
||||
ourLog.info(messageString);
|
||||
|
||||
assertThat(messageString, not(containsString("<profile")));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void parseResourceWithNoDirective() {
|
||||
String input = createResource(true);
|
||||
|
||||
FhirContext ctx = FhirContext.forDstu2();
|
||||
Patient parsed = (Patient) ctx.newXmlParser().parseResource(input);
|
||||
assertEquals(1, parsed.getMeta().getProfile().size());
|
||||
assertEquals("http://example.com/foo", parsed.getMeta().getProfile().get(0).getValue());
|
||||
|
||||
List<ExtensionDt> exts = parsed.getUndeclaredExtensionsByUrl("http://example.com/Weight");
|
||||
assertEquals(1, exts.size());
|
||||
assertEquals("185 cm", ((StringDt)exts.get(0).getValueAsPrimitive()).getValue());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void parseResourceWithDirective() {
|
||||
String input = createResource(true);
|
||||
|
||||
FhirContext ctx = FhirContext.forDstu2();
|
||||
ctx.setDefaultTypeForProfile("http://example.com/foo", MyCustomPatient.class);
|
||||
|
||||
MyCustomPatient parsed = (MyCustomPatient) ctx.newXmlParser().parseResource(input);
|
||||
assertEquals(1, parsed.getMeta().getProfile().size());
|
||||
assertEquals("http://example.com/foo", parsed.getMeta().getProfile().get(0).getValue());
|
||||
|
||||
List<ExtensionDt> exts = parsed.getUndeclaredExtensionsByUrl("http://example.com/Weight");
|
||||
assertEquals(0, exts.size());
|
||||
|
||||
assertEquals("185 cm", parsed.getWeight().getValue());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void parseBundleWithResourceDirective() {
|
||||
|
||||
String input = createBundle(createResource(false), createResource(true));
|
||||
|
||||
FhirContext ctx = FhirContext.forDstu2();
|
||||
ctx.setDefaultTypeForProfile("http://example.com/foo", MyCustomPatient.class);
|
||||
|
||||
Bundle bundle = ctx.newXmlParser().parseResource(Bundle.class, input);
|
||||
|
||||
Patient res0 = (Patient) bundle.getEntry().get(0).getResource();
|
||||
assertEquals(0, res0.getMeta().getProfile().size());
|
||||
List<ExtensionDt> exts = res0.getUndeclaredExtensionsByUrl("http://example.com/Weight");
|
||||
assertEquals(1, exts.size());
|
||||
assertEquals("185 cm", ((StringDt)exts.get(0).getValueAsPrimitive()).getValue());
|
||||
|
||||
MyCustomPatient res1 = (MyCustomPatient) bundle.getEntry().get(1).getResource();
|
||||
assertEquals(1, res1.getMeta().getProfile().size());
|
||||
assertEquals("http://example.com/foo", res1.getMeta().getProfile().get(0).getValue());
|
||||
exts = res1.getUndeclaredExtensionsByUrl("http://example.com/Weight");
|
||||
assertEquals(0, exts.size());
|
||||
assertEquals("185 cm", res1.getWeight().getValue());
|
||||
}
|
||||
|
||||
private String createBundle(String... theResources) {
|
||||
StringBuilder b = new StringBuilder();
|
||||
|
@ -322,12 +115,253 @@ public class CustomTypeDstu2Test {
|
|||
b.append(" <given value=\"Mario\"/>\n");
|
||||
b.append(" </name>\n");
|
||||
b.append("</Patient>");
|
||||
String input =
|
||||
b.toString();
|
||||
String input = b.toString();
|
||||
return input;
|
||||
}
|
||||
|
||||
|
||||
|
||||
@Test
|
||||
public void parseBundleWithResourceDirective() {
|
||||
|
||||
String input = createBundle(createResource(false), createResource(true));
|
||||
|
||||
FhirContext ctx = FhirContext.forDstu2();
|
||||
ctx.setDefaultTypeForProfile("http://example.com/foo", MyCustomPatient.class);
|
||||
|
||||
Bundle bundle = ctx.newXmlParser().parseResource(Bundle.class, input);
|
||||
|
||||
Patient res0 = (Patient) bundle.getEntry().get(0).getResource();
|
||||
assertEquals(0, res0.getMeta().getProfile().size());
|
||||
List<ExtensionDt> exts = res0.getUndeclaredExtensionsByUrl("http://example.com/Weight");
|
||||
assertEquals(1, exts.size());
|
||||
assertEquals("185 cm", ((StringDt) exts.get(0).getValueAsPrimitive()).getValue());
|
||||
|
||||
MyCustomPatient res1 = (MyCustomPatient) bundle.getEntry().get(1).getResource();
|
||||
assertEquals(1, res1.getMeta().getProfile().size());
|
||||
assertEquals("http://example.com/foo", res1.getMeta().getProfile().get(0).getValue());
|
||||
exts = res1.getUndeclaredExtensionsByUrl("http://example.com/Weight");
|
||||
assertEquals(0, exts.size());
|
||||
assertEquals("185 cm", res1.getWeight().getValue());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void parseResourceWithDirective() {
|
||||
String input = createResource(true);
|
||||
|
||||
FhirContext ctx = FhirContext.forDstu2();
|
||||
ctx.setDefaultTypeForProfile("http://example.com/foo", MyCustomPatient.class);
|
||||
|
||||
MyCustomPatient parsed = (MyCustomPatient) ctx.newXmlParser().parseResource(input);
|
||||
assertEquals(1, parsed.getMeta().getProfile().size());
|
||||
assertEquals("http://example.com/foo", parsed.getMeta().getProfile().get(0).getValue());
|
||||
|
||||
List<ExtensionDt> exts = parsed.getUndeclaredExtensionsByUrl("http://example.com/Weight");
|
||||
assertEquals(0, exts.size());
|
||||
|
||||
assertEquals("185 cm", parsed.getWeight().getValue());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void parseResourceWithNoDirective() {
|
||||
String input = createResource(true);
|
||||
|
||||
FhirContext ctx = FhirContext.forDstu2();
|
||||
Patient parsed = (Patient) ctx.newXmlParser().parseResource(input);
|
||||
assertEquals(1, parsed.getMeta().getProfile().size());
|
||||
assertEquals("http://example.com/foo", parsed.getMeta().getProfile().get(0).getValue());
|
||||
|
||||
List<ExtensionDt> exts = parsed.getUndeclaredExtensionsByUrl("http://example.com/Weight");
|
||||
assertEquals(1, exts.size());
|
||||
assertEquals("185 cm", ((StringDt) exts.get(0).getValueAsPrimitive()).getValue());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testAccessEmptyMetaLists() {
|
||||
Patient p = new Patient();
|
||||
assertThat(p.getMeta().getProfile(), empty());
|
||||
assertThat(p.getMeta().getFormatCommentsPost(), empty());
|
||||
assertThat(p.getMeta().getFormatCommentsPre(), empty());
|
||||
assertThat(p.getMeta().getLastUpdated(), nullValue());
|
||||
assertThat(p.getMeta().getSecurity(), empty());
|
||||
assertThat(p.getMeta().getSecurity("foo", "bar"), nullValue());
|
||||
assertThat(p.getMeta().getTag(), empty());
|
||||
assertThat(p.getMeta().getTag("foo", "bar"), nullValue());
|
||||
assertThat(p.getMeta().getVersionId(), nullValue());
|
||||
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testEncodeCompleteMetaLists() {
|
||||
Patient p = new Patient();
|
||||
p.getMeta().addProfile("http://foo/profile1");
|
||||
p.getMeta().addProfile("http://foo/profile2");
|
||||
p.getMeta().addSecurity().setSystem("SEC_S1").setCode("SEC_C1").setDisplay("SED_D1");
|
||||
p.getMeta().addSecurity().setSystem("SEC_S2").setCode("SEC_C2").setDisplay("SED_D2");
|
||||
p.getMeta().addTag().setSystem("TAG_S1").setCode("TAG_C1").setDisplay("TAG_D1");
|
||||
p.getMeta().addTag().setSystem("TAG_S2").setCode("TAG_C2").setDisplay("TAG_D2");
|
||||
|
||||
String out = ourCtx.newXmlParser().setPrettyPrint(true).encodeResourceToString(p);
|
||||
ourLog.info(out);
|
||||
|
||||
//@formatter:off
|
||||
assertThat(out, stringContainsInOrder(
|
||||
"<meta>",
|
||||
"<profile value=\"http://foo/profile1\"/>",
|
||||
"<profile value=\"http://foo/profile2\"/>",
|
||||
"<security>",
|
||||
"<system value=\"SEC_S1\"/>",
|
||||
"<code value=\"SEC_C1\"/>",
|
||||
"<display value=\"SED_D1\"/>",
|
||||
"</security>",
|
||||
"<security>",
|
||||
"<system value=\"SEC_S2\"/>",
|
||||
"<code value=\"SEC_C2\"/>",
|
||||
"<display value=\"SED_D2\"/>",
|
||||
"</security>",
|
||||
"<tag>",
|
||||
"<system value=\"TAG_S1\"/>",
|
||||
"<display value=\"TAG_D1\"/>",
|
||||
"</tag>",
|
||||
"<tag>",
|
||||
"<system value=\"TAG_S2\"/>",
|
||||
"<display value=\"TAG_D2\"/>",
|
||||
"</tag>",
|
||||
"</meta>"));
|
||||
//@formatter:on
|
||||
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testEncodeNormalType() {
|
||||
|
||||
Patient patient = new Patient();
|
||||
|
||||
patient.addIdentifier().setSystem("urn:system").setValue("1234");
|
||||
patient.addName().addFamily("Rossi").addGiven("Mario");
|
||||
|
||||
ourCtx.setAddProfileTagWhenEncoding(AddProfileTagEnum.ONLY_FOR_CUSTOM);
|
||||
IParser p = ourCtx.newXmlParser().setPrettyPrint(true);
|
||||
String messageString = p.encodeResourceToString(patient);
|
||||
ourLog.info(messageString);
|
||||
|
||||
assertThat(messageString, not(containsString("<profile")));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testEncodeWithCustomType() {
|
||||
|
||||
MyCustomPatient patient = new MyCustomPatient();
|
||||
|
||||
patient.addIdentifier().setSystem("urn:system").setValue("1234");
|
||||
patient.addName().addFamily("Rossi").addGiven("Mario");
|
||||
patient.setInsulinLevel(new QuantityDt());
|
||||
patient.setGlucoseLevel(new QuantityDt());
|
||||
patient.setHbA1c(new QuantityDt());
|
||||
patient.setBloodPressure(new QuantityDt());
|
||||
patient.setCholesterol(new QuantityDt());
|
||||
patient.setWeight(new StringDt("80 kg"));
|
||||
patient.setWeight(new StringDt("185 cm"));
|
||||
patient.setCheckDates(new ArrayList<DateTimeDt>());
|
||||
patient.getCheckDates().add(new DateTimeDt("2014-01-26T11:11:11"));
|
||||
|
||||
IParser p = ourCtx.newXmlParser().setPrettyPrint(true);
|
||||
String messageString = p.encodeResourceToString(patient);
|
||||
|
||||
ourLog.info(messageString);
|
||||
|
||||
//@formatter:off
|
||||
assertThat(messageString, stringContainsInOrder(
|
||||
"<meta>",
|
||||
"<profile value=\"http://example.com/foo\"/>",
|
||||
"</meta>"));
|
||||
//@formatter:on
|
||||
|
||||
//@formatter:off
|
||||
assertThat(messageString, not(stringContainsInOrder(
|
||||
"<meta>",
|
||||
"<profile value=\"http://example.com/foo\"", "/>",
|
||||
"<profile value=\"http://example.com/foo\"/>",
|
||||
"</meta>")));
|
||||
//@formatter:on
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testEncodeWithCustomTypeAndAutoInsertedProfile() {
|
||||
|
||||
MyCustomPatient patient = new MyCustomPatient();
|
||||
|
||||
patient.getMeta().addProfile("http://example.com/foo");
|
||||
patient.getMeta().addProfile("http://example.com/bar");
|
||||
|
||||
patient.addIdentifier().setSystem("urn:system").setValue("1234");
|
||||
patient.addName().addFamily("Rossi").addGiven("Mario");
|
||||
patient.setInsulinLevel(new QuantityDt());
|
||||
patient.setGlucoseLevel(new QuantityDt());
|
||||
patient.setHbA1c(new QuantityDt());
|
||||
patient.setBloodPressure(new QuantityDt());
|
||||
patient.setCholesterol(new QuantityDt());
|
||||
patient.setWeight(new StringDt("80 kg"));
|
||||
patient.setWeight(new StringDt("185 cm"));
|
||||
patient.setCheckDates(new ArrayList<DateTimeDt>());
|
||||
patient.getCheckDates().add(new DateTimeDt("2014-01-26T11:11:11"));
|
||||
|
||||
ourCtx.setAddProfileTagWhenEncoding(AddProfileTagEnum.ONLY_FOR_CUSTOM);
|
||||
IParser p = ourCtx.newXmlParser().setPrettyPrint(true);
|
||||
String messageString = p.encodeResourceToString(patient);
|
||||
|
||||
ourLog.info(messageString);
|
||||
|
||||
//@formatter:off
|
||||
assertThat(messageString, stringContainsInOrder(
|
||||
"<meta>",
|
||||
"<profile value=\"http://example.com/foo\"/>",
|
||||
"<profile value=\"http://example.com/bar\"/>",
|
||||
"</meta>"));
|
||||
//@formatter:on
|
||||
|
||||
//@formatter:off
|
||||
assertThat(messageString, not(stringContainsInOrder(
|
||||
"<meta>",
|
||||
"<profile value=\"http://example.com/foo\"", "/>",
|
||||
"<profile value=\"http://example.com/foo\"/>",
|
||||
"</meta>")));
|
||||
//@formatter:on
|
||||
}
|
||||
|
||||
/**
|
||||
* See #318
|
||||
*/
|
||||
@Test
|
||||
public void testParseResourceWithContainedResourcesWithProfile() {
|
||||
//@formatter:off
|
||||
String input = "<MedicationOrder xmlns=\"http://hl7.org/fhir\">"
|
||||
+ "<id value=\"44cfa24c-52e1-a8ff-8428-4e7ce1165460-local\"/> "
|
||||
+ "<meta> "
|
||||
+ "<profile value=\"http://fhir.something.com/StructureDefinition/our-medication-order\"/> "
|
||||
+ "</meta> "
|
||||
+ "<contained> "
|
||||
+ "<Medication xmlns=\"http://hl7.org/fhir\"> "
|
||||
+ "<id value=\"1\"/>"
|
||||
+ "<meta> "
|
||||
+ "<profile value=\"http://fhir.something.com/StructureDefinition/our-medication\"/> "
|
||||
+ "</meta> "
|
||||
+ "<code> "
|
||||
+ "<text value=\"medication\"/> "
|
||||
+ "</code> "
|
||||
+ "</Medication> "
|
||||
+ "</contained> "
|
||||
+ "<medication> "
|
||||
+ "<reference value=\"#1\"/> "
|
||||
+ "</medication> "
|
||||
+ "</MedicationOrder>";
|
||||
//@formatter:on
|
||||
|
||||
FhirContext ctx = FhirContext.forDstu2();
|
||||
ctx.setDefaultTypeForProfile("http://fhir.something.com/StructureDefinition/our-medication", MyMedication.class);
|
||||
|
||||
MedicationOrder mo = ctx.newXmlParser().parseResource(MedicationOrder.class, input);
|
||||
assertEquals(MyMedication.class, mo.getContained().getContainedResources().get(0).getClass());
|
||||
}
|
||||
|
||||
@ResourceDef(name = "Patient", profile = "http://example.com/foo")
|
||||
public static class MyCustomPatient extends Patient {
|
||||
|
||||
|
@ -507,4 +541,11 @@ public class CustomTypeDstu2Test {
|
|||
}
|
||||
|
||||
}
|
||||
|
||||
@ResourceDef()
|
||||
public static class MyMedication extends Medication {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
}
|
||||
}
|
|
@ -11,6 +11,8 @@ import java.util.ArrayList;
|
|||
import java.util.List;
|
||||
|
||||
import org.hl7.fhir.dstu3.model.Bundle;
|
||||
import org.hl7.fhir.dstu3.model.Medication;
|
||||
import org.hl7.fhir.dstu3.model.MedicationOrder;
|
||||
import org.hl7.fhir.dstu3.model.Patient;
|
||||
import org.hl7.fhir.dstu3.model.Quantity;
|
||||
import org.hl7.fhir.dstu3.model.StringType;
|
||||
|
@ -38,86 +40,6 @@ public class CustomTypeDstu3Test {
|
|||
}
|
||||
|
||||
|
||||
public static String createBundle(String... theResources) {
|
||||
StringBuilder b = new StringBuilder();
|
||||
b.append("<Bundle xmlns=\"http://hl7.org/fhir\">\n");
|
||||
for (String next : theResources) {
|
||||
b.append(" <entry>\n");
|
||||
b.append(" <resource>\n");
|
||||
b.append(next);
|
||||
b.append(" </resource>\n");
|
||||
b.append(" </entry>\n");
|
||||
}
|
||||
b.append("</Bundle>");
|
||||
return b.toString();
|
||||
}
|
||||
|
||||
public static String createResource(boolean theWithProfile) {
|
||||
StringBuilder b = new StringBuilder();
|
||||
b.append("<Patient xmlns=\"http://hl7.org/fhir\">\n");
|
||||
if (theWithProfile) {
|
||||
b.append(" <meta>\n");
|
||||
b.append(" <profile value=\"http://example.com/foo\"/>\n");
|
||||
b.append(" </meta>\n");
|
||||
}
|
||||
b.append(" <extension url=\"http://example.com/BloodPressure\">\n");
|
||||
b.append(" <valueQuantity>\n");
|
||||
b.append(" <value value=\"110\"/>\n");
|
||||
b.append(" <system value=\"http://unitsofmeasure.org\"/>\n");
|
||||
b.append(" <code value=\"mmHg\"/>\n");
|
||||
b.append(" </valueQuantity>\n");
|
||||
b.append(" </extension>\n");
|
||||
b.append(" <modifierExtension url=\"http://example.com/diabetes2\">\n");
|
||||
b.append(" <valueDateTime value=\"2010-01-02\"/>\n");
|
||||
b.append(" </modifierExtension>\n");
|
||||
b.append(" <modifierExtension url=\"http://example.com/diabetes2\">\n");
|
||||
b.append(" <valueDateTime value=\"2014-01-26T11:11:11\"/>\n");
|
||||
b.append(" </modifierExtension>\n");
|
||||
b.append(" <extension url=\"http://example.com/Cholesterol\">\n");
|
||||
b.append(" <valueQuantity>\n");
|
||||
b.append(" <value value=\"2\"/>\n");
|
||||
b.append(" <system value=\"http://unitsofmeasure.org\"/>\n");
|
||||
b.append(" <code value=\"mmol/l\"/>\n");
|
||||
b.append(" </valueQuantity>\n");
|
||||
b.append(" </extension>\n");
|
||||
b.append(" <extension url=\"http://example.com/Glucose\">\n");
|
||||
b.append(" <valueQuantity>\n");
|
||||
b.append(" <value value=\"95\"/>\n");
|
||||
b.append(" <system value=\"http://unitsofmeasure.org\"/>\n");
|
||||
b.append(" <code value=\"mg/dl\"/>\n");
|
||||
b.append(" </valueQuantity>\n");
|
||||
b.append(" </extension>\n");
|
||||
b.append(" <extension url=\"http://example.com/HbA1c\">\n");
|
||||
b.append(" <valueQuantity>\n");
|
||||
b.append(" <value value=\"48\"/>\n");
|
||||
b.append(" <system value=\"http://unitsofmeasure.org\"/>\n");
|
||||
b.append(" <code value=\"mmol/mol\"/>\n");
|
||||
b.append(" </valueQuantity>\n");
|
||||
b.append(" </extension>\n");
|
||||
b.append(" <extension url=\"http://example.com/Insuline\">\n");
|
||||
b.append(" <valueQuantity>\n");
|
||||
b.append(" <value value=\"125\"/>\n");
|
||||
b.append(" <system value=\"http://unitsofmeasure.org\"/>\n");
|
||||
b.append(" <code value=\"pmol/l\"/>\n");
|
||||
b.append(" </valueQuantity>\n");
|
||||
b.append(" </extension>\n");
|
||||
b.append(" <extension url=\"http://example.com/Weight\">\n");
|
||||
b.append(" <valueString value=\"185 cm\"/>\n");
|
||||
b.append(" </extension>\n");
|
||||
b.append(" <identifier>\n");
|
||||
b.append(" <system value=\"urn:system\"/>\n");
|
||||
b.append(" <value value=\"1234\"/>\n");
|
||||
b.append(" </identifier>\n");
|
||||
b.append(" <name>\n");
|
||||
b.append(" <family value=\"Rossi\"/>\n");
|
||||
b.append(" <given value=\"Mario\"/>\n");
|
||||
b.append(" </name>\n");
|
||||
b.append("</Patient>");
|
||||
String input =
|
||||
b.toString();
|
||||
return input;
|
||||
}
|
||||
|
||||
@Test
|
||||
public void parseBundleWithResourceDirective() {
|
||||
String input = createBundle(createResource(false), createResource(true));
|
||||
|
@ -158,6 +80,7 @@ public class CustomTypeDstu3Test {
|
|||
assertEquals("185 cm", parsed.getWeight().getValue());
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void parseResourceWithNoDirective() {
|
||||
String input = createResource(true);
|
||||
|
@ -171,7 +94,7 @@ public class CustomTypeDstu3Test {
|
|||
assertEquals(1, exts.size());
|
||||
assertEquals("185 cm", ((StringType)exts.get(0).getValue()).getValue());
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void testAccessEmptyMetaLists() {
|
||||
Patient p = new Patient();
|
||||
|
@ -227,7 +150,7 @@ public class CustomTypeDstu3Test {
|
|||
//@formatter:on
|
||||
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void testEncodeWithCustomType() {
|
||||
|
||||
|
@ -309,8 +232,122 @@ public class CustomTypeDstu3Test {
|
|||
"</meta>")));
|
||||
//@formatter:on
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* See #318
|
||||
*/
|
||||
@Test
|
||||
public void testParseResourceWithContainedResourcesWithProfile() {
|
||||
//@formatter:off
|
||||
String input = "<MedicationOrder xmlns=\"http://hl7.org/fhir\">"
|
||||
+ "<id value=\"44cfa24c-52e1-a8ff-8428-4e7ce1165460-local\"/> "
|
||||
+ "<meta> "
|
||||
+ "<profile value=\"http://fhir.something.com/StructureDefinition/our-medication-order\"/> "
|
||||
+ "</meta> "
|
||||
+ "<contained> "
|
||||
+ "<Medication xmlns=\"http://hl7.org/fhir\"> "
|
||||
+ "<id value=\"1\"/>"
|
||||
+ "<meta> "
|
||||
+ "<profile value=\"http://fhir.something.com/StructureDefinition/our-medication\"/> "
|
||||
+ "</meta> "
|
||||
+ "<code> "
|
||||
+ "<text value=\"medication\"/> "
|
||||
+ "</code> "
|
||||
+ "</Medication> "
|
||||
+ "</contained> "
|
||||
+ "<medication> "
|
||||
+ "<reference value=\"#1\"/> "
|
||||
+ "</medication> "
|
||||
+ "</MedicationOrder>";
|
||||
//@formatter:on
|
||||
|
||||
FhirContext ctx = FhirContext.forDstu3();
|
||||
ctx.setDefaultTypeForProfile("http://fhir.something.com/StructureDefinition/our-medication", MyMedication.class);
|
||||
|
||||
MedicationOrder mo = ctx.newXmlParser().parseResource(MedicationOrder.class, input);
|
||||
assertEquals(MyMedication.class, mo.getContained().get(0).getClass());
|
||||
}
|
||||
|
||||
public static String createBundle(String... theResources) {
|
||||
StringBuilder b = new StringBuilder();
|
||||
b.append("<Bundle xmlns=\"http://hl7.org/fhir\">\n");
|
||||
for (String next : theResources) {
|
||||
b.append(" <entry>\n");
|
||||
b.append(" <resource>\n");
|
||||
b.append(next);
|
||||
b.append(" </resource>\n");
|
||||
b.append(" </entry>\n");
|
||||
}
|
||||
b.append("</Bundle>");
|
||||
return b.toString();
|
||||
}
|
||||
|
||||
public static String createResource(boolean theWithProfile) {
|
||||
StringBuilder b = new StringBuilder();
|
||||
b.append("<Patient xmlns=\"http://hl7.org/fhir\">\n");
|
||||
if (theWithProfile) {
|
||||
b.append(" <meta>\n");
|
||||
b.append(" <profile value=\"http://example.com/foo\"/>\n");
|
||||
b.append(" </meta>\n");
|
||||
}
|
||||
b.append(" <extension url=\"http://example.com/BloodPressure\">\n");
|
||||
b.append(" <valueQuantity>\n");
|
||||
b.append(" <value value=\"110\"/>\n");
|
||||
b.append(" <system value=\"http://unitsofmeasure.org\"/>\n");
|
||||
b.append(" <code value=\"mmHg\"/>\n");
|
||||
b.append(" </valueQuantity>\n");
|
||||
b.append(" </extension>\n");
|
||||
b.append(" <modifierExtension url=\"http://example.com/diabetes2\">\n");
|
||||
b.append(" <valueDateTime value=\"2010-01-02\"/>\n");
|
||||
b.append(" </modifierExtension>\n");
|
||||
b.append(" <modifierExtension url=\"http://example.com/diabetes2\">\n");
|
||||
b.append(" <valueDateTime value=\"2014-01-26T11:11:11\"/>\n");
|
||||
b.append(" </modifierExtension>\n");
|
||||
b.append(" <extension url=\"http://example.com/Cholesterol\">\n");
|
||||
b.append(" <valueQuantity>\n");
|
||||
b.append(" <value value=\"2\"/>\n");
|
||||
b.append(" <system value=\"http://unitsofmeasure.org\"/>\n");
|
||||
b.append(" <code value=\"mmol/l\"/>\n");
|
||||
b.append(" </valueQuantity>\n");
|
||||
b.append(" </extension>\n");
|
||||
b.append(" <extension url=\"http://example.com/Glucose\">\n");
|
||||
b.append(" <valueQuantity>\n");
|
||||
b.append(" <value value=\"95\"/>\n");
|
||||
b.append(" <system value=\"http://unitsofmeasure.org\"/>\n");
|
||||
b.append(" <code value=\"mg/dl\"/>\n");
|
||||
b.append(" </valueQuantity>\n");
|
||||
b.append(" </extension>\n");
|
||||
b.append(" <extension url=\"http://example.com/HbA1c\">\n");
|
||||
b.append(" <valueQuantity>\n");
|
||||
b.append(" <value value=\"48\"/>\n");
|
||||
b.append(" <system value=\"http://unitsofmeasure.org\"/>\n");
|
||||
b.append(" <code value=\"mmol/mol\"/>\n");
|
||||
b.append(" </valueQuantity>\n");
|
||||
b.append(" </extension>\n");
|
||||
b.append(" <extension url=\"http://example.com/Insuline\">\n");
|
||||
b.append(" <valueQuantity>\n");
|
||||
b.append(" <value value=\"125\"/>\n");
|
||||
b.append(" <system value=\"http://unitsofmeasure.org\"/>\n");
|
||||
b.append(" <code value=\"pmol/l\"/>\n");
|
||||
b.append(" </valueQuantity>\n");
|
||||
b.append(" </extension>\n");
|
||||
b.append(" <extension url=\"http://example.com/Weight\">\n");
|
||||
b.append(" <valueString value=\"185 cm\"/>\n");
|
||||
b.append(" </extension>\n");
|
||||
b.append(" <identifier>\n");
|
||||
b.append(" <system value=\"urn:system\"/>\n");
|
||||
b.append(" <value value=\"1234\"/>\n");
|
||||
b.append(" </identifier>\n");
|
||||
b.append(" <name>\n");
|
||||
b.append(" <family value=\"Rossi\"/>\n");
|
||||
b.append(" <given value=\"Mario\"/>\n");
|
||||
b.append(" </name>\n");
|
||||
b.append("</Patient>");
|
||||
String input =
|
||||
b.toString();
|
||||
return input;
|
||||
}
|
||||
|
||||
@ResourceDef(name = "Patient", profile = "http://example.com/foo")
|
||||
public static class MyCustomPatient extends Patient {
|
||||
|
||||
|
@ -490,4 +527,13 @@ public class CustomTypeDstu3Test {
|
|||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
@ResourceDef()
|
||||
public static class MyMedication extends Medication
|
||||
{
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
}
|
||||
}
|
|
@ -162,7 +162,7 @@ public class OperationServerWithSearchParamTypesDstu3Test {
|
|||
"<type value=\"Patient\"/>",
|
||||
"<operation>",
|
||||
"<name value=\"$andlist\"/>",
|
||||
"<operation>"
|
||||
"</operation>"
|
||||
));
|
||||
assertThat(conf, stringContainsInOrder(
|
||||
"<type value=\"Patient\"/>",
|
||||
|
|
|
@ -0,0 +1,14 @@
|
|||
package z;
|
||||
|
||||
import org.junit.Ignore;
|
||||
import org.junit.Test;
|
||||
|
||||
public class TestTest {
|
||||
|
||||
@Test
|
||||
@Ignore
|
||||
public void testId() throws InterruptedException {
|
||||
Thread.sleep(1000000);
|
||||
}
|
||||
|
||||
}
|
Loading…
Reference in New Issue