From 89965fb6bd1d9d1fcb392c4075c7f9aa0dda668a Mon Sep 17 00:00:00 2001 From: jamesagnew Date: Fri, 10 Jul 2015 08:30:58 -0400 Subject: [PATCH] Working on valueset operations in JPA --- .../BaseJpaResourceProviderValueSetDstu2.java | 113 ++++++ .../provider/ResourceProviderDstu2Test.java | 357 ++++++++++-------- .../src/test/resources/extensional-case-2.xml | 123 ++++++ 3 files changed, 435 insertions(+), 158 deletions(-) create mode 100644 hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/provider/BaseJpaResourceProviderValueSetDstu2.java create mode 100644 hapi-fhir-jpaserver-base/src/test/resources/extensional-case-2.xml diff --git a/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/provider/BaseJpaResourceProviderValueSetDstu2.java b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/provider/BaseJpaResourceProviderValueSetDstu2.java new file mode 100644 index 00000000000..824a76db568 --- /dev/null +++ b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/provider/BaseJpaResourceProviderValueSetDstu2.java @@ -0,0 +1,113 @@ +package ca.uhn.fhir.jpa.provider; + +/* + * #%L + * HAPI FHIR JPA Server + * %% + * Copyright (C) 2014 - 2015 University Health Network + * %% + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * #L% + */ + +import java.util.HashMap; +import java.util.Map; + +import javax.servlet.http.HttpServletRequest; + +import ca.uhn.fhir.model.dstu2.resource.ValueSet; +import ca.uhn.fhir.model.dstu2.resource.ValueSet.ComposeInclude; +import ca.uhn.fhir.model.dstu2.resource.ValueSet.ComposeIncludeConcept; +import ca.uhn.fhir.model.dstu2.resource.ValueSet.DefineConcept; +import ca.uhn.fhir.model.primitive.DateTimeDt; +import ca.uhn.fhir.model.primitive.IdDt; +import ca.uhn.fhir.model.primitive.StringDt; +import ca.uhn.fhir.rest.annotation.IdParam; +import ca.uhn.fhir.rest.annotation.Operation; +import ca.uhn.fhir.rest.annotation.OperationParam; + +public class BaseJpaResourceProviderValueSetDstu2 extends JpaResourceProviderDstu2 { + + @Operation(name = "$expand", idempotent = true) + public ValueSet everything(HttpServletRequest theServletRequest, @IdParam IdDt theId, @OperationParam(name = "filter") StringDt theFilter) { + startRequest(theServletRequest); + try { + ValueSet retVal = new ValueSet(); + retVal.setDate(DateTimeDt.withCurrentTime()); + + ValueSet source = read(theServletRequest, theId); + + Map systemToCompose = new HashMap(); + + /* + * Add composed concepts + */ + + for (ComposeInclude nextInclude : source.getCompose().getInclude()) { + for (ComposeIncludeConcept next : nextInclude.getConcept()) { + ComposeInclude include = null; + if (theFilter == null || theFilter.isEmpty()) { + if (include == null) { + include = getOrAddComposeInclude(retVal, systemToCompose, nextInclude.getSystem()); + } + include.addConcept(next); + } else { + String filter = theFilter.getValue().toLowerCase(); + if (next.getDisplay().toLowerCase().contains(filter) || next.getCode().toLowerCase().contains(filter)) { + if (include == null) { + include = getOrAddComposeInclude(retVal, systemToCompose, nextInclude.getSystem()); + } + include.addConcept(next); + } + } + } + } + + /* + * Add defined concepts + */ + + ComposeInclude include = null; + for (DefineConcept next : source.getDefine().getConcept()) { + if (theFilter == null || theFilter.isEmpty()) { + if (include == null) { + include = getOrAddComposeInclude(retVal, systemToCompose, source.getDefine().getSystem()); + } + include.addConcept(new ComposeIncludeConcept().setCode(next.getCode()).setDisplay(next.getDisplay())); + } else { + String filter = theFilter.getValue().toLowerCase(); + if (next.getDisplay().toLowerCase().contains(filter) || next.getCode().toLowerCase().contains(filter)) { + include.addConcept(new ComposeIncludeConcept().setCode(next.getCode()).setDisplay(next.getDisplay())); + } + } + } + + return retVal; + + } finally { + endRequest(theServletRequest); + } + } + + private ComposeInclude getOrAddComposeInclude(ValueSet retVal, Map systemToCompose, String system) { + ComposeInclude include; + include = systemToCompose.get(system); + if (include == null) { + include = retVal.getCompose().addInclude(); + include.setSystem(system); + systemToCompose.put(system, include); + } + return include; + } + +} diff --git a/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/provider/ResourceProviderDstu2Test.java b/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/provider/ResourceProviderDstu2Test.java index f5f070de649..e78fea4438b 100644 --- a/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/provider/ResourceProviderDstu2Test.java +++ b/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/provider/ResourceProviderDstu2Test.java @@ -64,6 +64,7 @@ import ca.uhn.fhir.model.dstu2.resource.Observation; import ca.uhn.fhir.model.dstu2.resource.Organization; import ca.uhn.fhir.model.dstu2.resource.Parameters; import ca.uhn.fhir.model.dstu2.resource.Patient; +import ca.uhn.fhir.model.dstu2.resource.ValueSet; import ca.uhn.fhir.model.dstu2.valueset.EncounterClassEnum; import ca.uhn.fhir.model.dstu2.valueset.EncounterStateEnum; import ca.uhn.fhir.model.dstu2.valueset.HTTPVerbEnum; @@ -91,12 +92,12 @@ import ca.uhn.fhir.rest.server.RestfulServer; import ca.uhn.fhir.rest.server.exceptions.InvalidRequestException; import ca.uhn.fhir.rest.server.exceptions.UnprocessableEntityException; -public class ResourceProviderDstu2Test extends BaseJpaTest { +public class ResourceProviderDstu2Test extends BaseJpaTest { private static ClassPathXmlApplicationContext ourAppCtx; private static IGenericClient ourClient; - private static DaoConfig ourDaoConfig; private static FhirContext ourCtx = FhirContext.forDstu2(); + private static DaoConfig ourDaoConfig; private static CloseableHttpClient ourHttpClient; private static final org.slf4j.Logger ourLog = org.slf4j.LoggerFactory.getLogger(ResourceProviderDstu2Test.class); private static IFhirResourceDao ourOrganizationDao; @@ -339,7 +340,8 @@ public class ResourceProviderDstu2Test extends BaseJpaTest { } /* - * Try it with a raw socket call. The Apache client won't let us use the unescaped "|" in the URL but we want to make sure that works too.. + * Try it with a raw socket call. The Apache client won't let us use the unescaped "|" in the URL but we want to + * make sure that works too.. */ Socket sock = new Socket(); sock.setSoTimeout(3000); @@ -634,7 +636,7 @@ public class ResourceProviderDstu2Test extends BaseJpaTest { IIdType newId = ourClient.create().resource(p1).execute().getId(); - Patient actual = ourClient.read(Patient.class, (UriDt)newId); + Patient actual = ourClient.read(Patient.class, (UriDt) newId); assertEquals("
HELLO WORLD
", actual.getText().getDiv().getValueAsString()); } @@ -650,7 +652,7 @@ public class ResourceProviderDstu2Test extends BaseJpaTest { IIdType newId = ourClient.create().resource(p1).execute().getId(); - Patient actual = ourClient.read(Patient.class, (UriDt)newId); + Patient actual = ourClient.read(Patient.class, (UriDt) newId); assertEquals(1, actual.getContained().getContainedResources().size()); assertThat(actual.getText().getDiv().getValueAsString(), containsString("IdentifiertestSaveAndRetrieveWithContained01")); @@ -713,8 +715,7 @@ public class ResourceProviderDstu2Test extends BaseJpaTest { p1.addIdentifier().setValue("testSearchByIdentifierWithoutSystem01"); IdDt p1Id = (IdDt) ourClient.create().resource(p1).execute().getId(); - Bundle actual = ourClient.search().forResource(Patient.class).where(Patient.IDENTIFIER.exactly().systemAndCode(null, "testSearchByIdentifierWithoutSystem01")).encodedJson().prettyPrint() - .execute(); + Bundle actual = ourClient.search().forResource(Patient.class).where(Patient.IDENTIFIER.exactly().systemAndCode(null, "testSearchByIdentifierWithoutSystem01")).encodedJson().prettyPrint().execute(); assertEquals(1, actual.size()); assertEquals(p1Id.getIdPart(), actual.getEntries().get(0).getResource().getId().getIdPart()); @@ -755,6 +756,127 @@ public class ResourceProviderDstu2Test extends BaseJpaTest { } + @Test + public void testSearchLastUpdatedParamRp() throws InterruptedException { + String methodName = "testSearchLastUpdatedParamRp"; + + int sleep = 100; + Thread.sleep(sleep); + + DateTimeDt beforeAny = new DateTimeDt(new Date(), TemporalPrecisionEnum.MILLI); + IdDt id1a; + { + Patient patient = new Patient(); + patient.addIdentifier().setSystem("urn:system").setValue("001"); + patient.addName().addFamily(methodName).addGiven("Joe"); + id1a = (IdDt) ourClient.create().resource(patient).execute().getId().toUnqualifiedVersionless(); + } + IdDt id1b; + { + Patient patient = new Patient(); + patient.addIdentifier().setSystem("urn:system").setValue("002"); + patient.addName().addFamily(methodName + "XXXX").addGiven("Joe"); + id1b = (IdDt) ourClient.create().resource(patient).execute().getId().toUnqualifiedVersionless(); + } + + Thread.sleep(1100); + DateTimeDt beforeR2 = new DateTimeDt(new Date(), TemporalPrecisionEnum.MILLI); + Thread.sleep(1100); + + IdDt id2; + { + Patient patient = new Patient(); + patient.addIdentifier().setSystem("urn:system").setValue("002"); + patient.addName().addFamily(methodName).addGiven("John"); + id2 = (IdDt) ourClient.create().resource(patient).execute().getId().toUnqualifiedVersionless(); + } + + { + //@formatter:off + Bundle found = ourClient.search() + .forResource(Patient.class) + .where(Patient.NAME.matches().value("testSearchLastUpdatedParamRp")) + .execute(); + //@formatter:on + List patients = toIdListUnqualifiedVersionless(found); + assertThat(patients, hasItems(id1a, id1b, id2)); + } + { + //@formatter:off + Bundle found = ourClient.search() + .forResource(Patient.class) + .where(Patient.NAME.matches().value("testSearchLastUpdatedParamRp")) + .lastUpdated(new DateRangeParam(beforeAny, null)) + .execute(); + //@formatter:on + List patients = toIdListUnqualifiedVersionless(found); + assertThat(patients, hasItems(id1a, id1b, id2)); + } + { + //@formatter:off + Bundle found = ourClient.search() + .forResource(Patient.class) + .where(Patient.NAME.matches().value("testSearchLastUpdatedParamRp")) + .lastUpdated(new DateRangeParam(beforeR2, null)) + .execute(); + //@formatter:on + List patients = toIdListUnqualifiedVersionless(found); + assertThat(patients, hasItems(id2)); + assertThat(patients, not(hasItems(id1a, id1b))); + } + { + //@formatter:off + Bundle found = ourClient.search() + .forResource(Patient.class) + .where(Patient.NAME.matches().value("testSearchLastUpdatedParamRp")) + .lastUpdated(new DateRangeParam(beforeAny, beforeR2)) + .execute(); + //@formatter:on + List patients = toIdListUnqualifiedVersionless(found); + assertThat(patients.toString(), patients, not(hasItems(id2))); + assertThat(patients.toString(), patients, (hasItems(id1a, id1b))); + } + { + //@formatter:off + Bundle found = ourClient.search() + .forResource(Patient.class) + .where(Patient.NAME.matches().value("testSearchLastUpdatedParamRp")) + .lastUpdated(new DateRangeParam(null, beforeR2)) + .execute(); + //@formatter:on + List patients = toIdListUnqualifiedVersionless(found); + assertThat(patients, (hasItems(id1a, id1b))); + assertThat(patients, not(hasItems(id2))); + } + } + + @Test + public void testSearchReturnsSearchDate() throws Exception { + Date before = new Date(); + Thread.sleep(1); + + //@formatter:off + ca.uhn.fhir.model.dstu2.resource.Bundle found = ourClient + .search() + .forResource(Patient.class) + .prettyPrint() + .returnBundle(ca.uhn.fhir.model.dstu2.resource.Bundle.class) + .execute(); + //@formatter:on + + Thread.sleep(1); + Date after = new Date(); + + InstantDt updated = ResourceMetadataKeyEnum.UPDATED.get(found); + assertNotNull(updated); + Date value = updated.getValue(); + assertNotNull(value); + ourLog.info(value.getTime() + ""); + ourLog.info(before.getTime() + ""); + assertTrue(value.after(before)); + assertTrue(value.before(after)); + } + @Test public void testSearchWithInclude() throws Exception { Organization org = new Organization(); @@ -786,34 +908,6 @@ public class ResourceProviderDstu2Test extends BaseJpaTest { assertEquals(BundleEntrySearchModeEnum.INCLUDE, found.getEntries().get(1).getResource().getResourceMetadata().get(ResourceMetadataKeyEnum.ENTRY_SEARCH_MODE)); } - @Test - public void testSearchReturnsSearchDate() throws Exception { - Date before = new Date(); - Thread.sleep(1); - - //@formatter:off - ca.uhn.fhir.model.dstu2.resource.Bundle found = ourClient - .search() - .forResource(Patient.class) - .prettyPrint() - .returnBundle(ca.uhn.fhir.model.dstu2.resource.Bundle.class) - .execute(); - //@formatter:on - - Thread.sleep(1); - Date after = new Date(); - - InstantDt updated = ResourceMetadataKeyEnum.UPDATED.get(found); - assertNotNull(updated); - Date value = updated.getValue(); - assertNotNull(value); - ourLog.info(value.getTime()+""); - ourLog.info(before.getTime()+""); - assertTrue(value.after(before)); - assertTrue(value.before(after)); - } - - @Test public void testSearchWithMissing() throws Exception { ourLog.info("Starting testSearchWithMissing"); @@ -989,8 +1083,7 @@ public class ResourceProviderDstu2Test extends BaseJpaTest { } } - - + @Test public void testUpdateResourceWithPrefer() throws IOException, Exception { String methodName = "testUpdateResourceWithPrefer"; @@ -1014,7 +1107,7 @@ public class ResourceProviderDstu2Test extends BaseJpaTest { Date before = new Date(); Thread.sleep(100); - + HttpPut put = new HttpPut(ourServerBase + "/Patient/" + id.getIdPart()); put.addHeader(Constants.HEADER_PREFER, Constants.HEADER_PREFER_RETURN + '=' + Constants.HEADER_PREFER_RETURN_REPRESENTATION); put.setEntity(new StringEntity(resource, ContentType.create(Constants.CT_FHIR_XML, "UTF-8"))); @@ -1023,20 +1116,19 @@ public class ResourceProviderDstu2Test extends BaseJpaTest { assertEquals(200, response.getStatusLine().getStatusCode()); String responseString = IOUtils.toString(response.getEntity().getContent()); IOUtils.closeQuietly(response.getEntity().getContent()); - + Patient respPt = ourCtx.newXmlParser().parseResource(Patient.class, responseString); assertEquals("2", respPt.getId().getVersionIdPart()); - + InstantDt updateTime = ResourceMetadataKeyEnum.UPDATED.get(respPt); assertTrue(updateTime.getValue().after(before)); - + } finally { response.close(); } } - @Test public void testUpdateWithClientSuppliedIdWhichDoesntExist() { deleteToken("Patient", Patient.SP_IDENTIFIER, "urn:system", "testUpdateWithClientSuppliedIdWhichDoesntExistRpDstu2"); @@ -1049,8 +1141,7 @@ public class ResourceProviderDstu2Test extends BaseJpaTest { assertThat(p1Id.getValue(), containsString("Patient/testUpdateWithClientSuppliedIdWhichDoesntExistRpDstu2/_history")); - Bundle actual = ourClient.search().forResource(Patient.class).where(Patient.IDENTIFIER.exactly().systemAndCode("urn:system", "testUpdateWithClientSuppliedIdWhichDoesntExistRpDstu2")) - .encodedJson().prettyPrint().execute(); + Bundle actual = ourClient.search().forResource(Patient.class).where(Patient.IDENTIFIER.exactly().systemAndCode("urn:system", "testUpdateWithClientSuppliedIdWhichDoesntExistRpDstu2")).encodedJson().prettyPrint().execute(); assertEquals(1, actual.size()); assertEquals(p1Id.getIdPart(), actual.getEntries().get(0).getResource().getId().getIdPart()); @@ -1083,32 +1174,52 @@ public class ResourceProviderDstu2Test extends BaseJpaTest { } } +// @Test + public void testValueSetExpandOperartion() throws IOException { - @Test - public void testValidateResourceWithId() throws IOException { - - Patient patient = new Patient(); - patient.addName().addGiven("James"); - patient.setBirthDate(new DateDt("2011-02-02")); - - Parameters input = new Parameters(); - input.addParameter().setName("resource").setResource(patient); - - String inputStr = ourCtx.newXmlParser().encodeResourceToString(input); - ourLog.info(inputStr); - - HttpPost post = new HttpPost(ourServerBase + "/Patient/123/$validate"); - post.setEntity(new StringEntity(inputStr, ContentType.create(Constants.CT_FHIR_XML, "UTF-8"))); - - CloseableHttpResponse response = ourHttpClient.execute(post); + ValueSet upload = ourCtx.newXmlParser().parseResource(ValueSet.class, new InputStreamReader(ResourceProviderDstu2Test.class.getResourceAsStream("/extensional-case-2.xml"))); + IIdType vsid = ourClient.create().resource(upload).execute().getId().toUnqualifiedVersionless(); + + HttpGet get = new HttpGet(ourServerBase + "/ValueSet/" + vsid.getIdPart() + "/$expand"); + CloseableHttpResponse response = ourHttpClient.execute(get); try { String resp = IOUtils.toString(response.getEntity().getContent()); ourLog.info(resp); assertEquals(200, response.getStatusLine().getStatusCode()); + //@formatter:on + assertThat(resp, stringContainsInOrder( + "", + "" , + "" , + "" , + "" , + "" , + "" , + "")); + //@formatter:off } finally { IOUtils.closeQuietly(response.getEntity().getContent()); response.close(); } + + /* + * Filter + */ + + get = new HttpGet(ourServerBase + "/ValueSet/" + vsid.getIdPart() + "/$expand?filter=systolic"); + response = ourHttpClient.execute(get); + try { + String resp = IOUtils.toString(response.getEntity().getContent()); + ourLog.info(resp); + assertEquals(200, response.getStatusLine().getStatusCode()); + assertThat(resp, stringContainsInOrder( + "" , + "")); + } finally { + IOUtils.closeQuietly(response.getEntity().getContent()); + response.close(); + } + } @Test @@ -1139,6 +1250,33 @@ public class ResourceProviderDstu2Test extends BaseJpaTest { } } + @Test + public void testValidateResourceWithId() throws IOException { + + Patient patient = new Patient(); + patient.addName().addGiven("James"); + patient.setBirthDate(new DateDt("2011-02-02")); + + Parameters input = new Parameters(); + input.addParameter().setName("resource").setResource(patient); + + String inputStr = ourCtx.newXmlParser().encodeResourceToString(input); + ourLog.info(inputStr); + + HttpPost post = new HttpPost(ourServerBase + "/Patient/123/$validate"); + post.setEntity(new StringEntity(inputStr, ContentType.create(Constants.CT_FHIR_XML, "UTF-8"))); + + CloseableHttpResponse response = ourHttpClient.execute(post); + try { + String resp = IOUtils.toString(response.getEntity().getContent()); + ourLog.info(resp); + assertEquals(200, response.getStatusLine().getStatusCode()); + } finally { + IOUtils.closeQuietly(response.getEntity().getContent()); + response.close(); + } + } + private List toIdListUnqualifiedVersionless(Bundle found) { List list = new ArrayList(); for (BundleEntry next : found.getEntries()) { @@ -1203,102 +1341,5 @@ public class ResourceProviderDstu2Test extends BaseJpaTest { ourHttpClient = builder.build(); } - - - - @Test - public void testSearchLastUpdatedParamRp() throws InterruptedException { - String methodName = "testSearchLastUpdatedParamRp"; - - int sleep = 100; - Thread.sleep(sleep); - - DateTimeDt beforeAny = new DateTimeDt(new Date(), TemporalPrecisionEnum.MILLI); - IdDt id1a; - { - Patient patient = new Patient(); - patient.addIdentifier().setSystem("urn:system").setValue("001"); - patient.addName().addFamily(methodName).addGiven("Joe"); - id1a = (IdDt) ourClient.create().resource(patient).execute().getId().toUnqualifiedVersionless(); - } - IdDt id1b; - { - Patient patient = new Patient(); - patient.addIdentifier().setSystem("urn:system").setValue("002"); - patient.addName().addFamily(methodName + "XXXX").addGiven("Joe"); - id1b = (IdDt) ourClient.create().resource(patient).execute().getId().toUnqualifiedVersionless(); - } - - Thread.sleep(1100); - DateTimeDt beforeR2 = new DateTimeDt(new Date(), TemporalPrecisionEnum.MILLI); - Thread.sleep(1100); - - IdDt id2; - { - Patient patient = new Patient(); - patient.addIdentifier().setSystem("urn:system").setValue("002"); - patient.addName().addFamily(methodName).addGiven("John"); - id2 = (IdDt) ourClient.create().resource(patient).execute().getId().toUnqualifiedVersionless(); - } - - { - //@formatter:off - Bundle found = ourClient.search() - .forResource(Patient.class) - .where(Patient.NAME.matches().value("testSearchLastUpdatedParamRp")) - .execute(); - //@formatter:on - List patients = toIdListUnqualifiedVersionless(found); - assertThat(patients, hasItems(id1a, id1b, id2)); - } - { - //@formatter:off - Bundle found = ourClient.search() - .forResource(Patient.class) - .where(Patient.NAME.matches().value("testSearchLastUpdatedParamRp")) - .lastUpdated(new DateRangeParam(beforeAny, null)) - .execute(); - //@formatter:on - List patients = toIdListUnqualifiedVersionless(found); - assertThat(patients, hasItems(id1a, id1b, id2)); - } - { - //@formatter:off - Bundle found = ourClient.search() - .forResource(Patient.class) - .where(Patient.NAME.matches().value("testSearchLastUpdatedParamRp")) - .lastUpdated(new DateRangeParam(beforeR2, null)) - .execute(); - //@formatter:on - List patients = toIdListUnqualifiedVersionless(found); - assertThat(patients, hasItems(id2)); - assertThat(patients, not(hasItems(id1a, id1b))); - } - { - //@formatter:off - Bundle found = ourClient.search() - .forResource(Patient.class) - .where(Patient.NAME.matches().value("testSearchLastUpdatedParamRp")) - .lastUpdated(new DateRangeParam(beforeAny, beforeR2)) - .execute(); - //@formatter:on - List patients = toIdListUnqualifiedVersionless(found); - assertThat(patients.toString(), patients, not(hasItems(id2))); - assertThat(patients.toString(), patients, (hasItems(id1a, id1b))); - } - { - //@formatter:off - Bundle found = ourClient.search() - .forResource(Patient.class) - .where(Patient.NAME.matches().value("testSearchLastUpdatedParamRp")) - .lastUpdated(new DateRangeParam(null, beforeR2)) - .execute(); - //@formatter:on - List patients = toIdListUnqualifiedVersionless(found); - assertThat(patients, (hasItems(id1a, id1b))); - assertThat(patients, not(hasItems(id2))); - } - } - } diff --git a/hapi-fhir-jpaserver-base/src/test/resources/extensional-case-2.xml b/hapi-fhir-jpaserver-base/src/test/resources/extensional-case-2.xml new file mode 100644 index 00000000000..98d0f8831d5 --- /dev/null +++ b/hapi-fhir-jpaserver-base/src/test/resources/extensional-case-2.xml @@ -0,0 +1,123 @@ + + + + +
A selection of codes from http://loinc.org
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
\ No newline at end of file