diff --git a/hapi-fhir-jpaserver-elasticsearch/pom.xml b/hapi-fhir-jpaserver-elasticsearch/pom.xml index 6a0878f761f..8b966ec6188 100644 --- a/hapi-fhir-jpaserver-elasticsearch/pom.xml +++ b/hapi-fhir-jpaserver-elasticsearch/pom.xml @@ -4,7 +4,7 @@ ca.uhn.hapi.fhir hapi-deployable-pom - 3.2.0-SNAPSHOT + 3.3.0-SNAPSHOT ../hapi-deployable-pom/pom.xml diff --git a/hapi-fhir-jpaserver-example/src/main/java/ca/uhn/fhir/jpa/demo/elasticsearch/FhirServerConfig.java b/hapi-fhir-jpaserver-example/src/main/java/ca/uhn/fhir/jpa/demo/elasticsearch/FhirServerConfig.java index 767d58494b2..cea6a123b7a 100644 --- a/hapi-fhir-jpaserver-example/src/main/java/ca/uhn/fhir/jpa/demo/elasticsearch/FhirServerConfig.java +++ b/hapi-fhir-jpaserver-example/src/main/java/ca/uhn/fhir/jpa/demo/elasticsearch/FhirServerConfig.java @@ -12,6 +12,7 @@ import ca.uhn.fhir.rest.server.interceptor.IServerInterceptor; import ca.uhn.fhir.rest.server.interceptor.ResponseHighlighterInterceptor; import org.apache.commons.dbcp2.BasicDataSource; import org.hibernate.jpa.HibernatePersistenceProvider; +import org.hibernate.search.elasticsearch.cfg.ElasticsearchEnvironment; import org.springframework.beans.factory.annotation.Autowire; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @@ -76,7 +77,7 @@ public class FhirServerConfig extends BaseJavaConfigDstu3 { extraProperties.put("hibernate.cache.use_minimal_puts", "false"); // the belowing properties are used for ElasticSearch integration - extraProperties.put("hibernate.search.elasticsearch.analyzer_definition_provider", ElasticsearchMappingProvider.class.getName()); + extraProperties.put(ElasticsearchEnvironment.ANALYZER_DEFINITION_PROVIDER, ElasticsearchMappingProvider.class.getName()); extraProperties.put("hibernate.search.default.indexmanager", "elasticsearch"); extraProperties.put("hibernate.search.default.elasticsearch.host", "http://127.0.0.1:9200"); extraProperties.put("hibernate.search.default.elasticsearch.index_schema_management_strategy", "CREATE"); diff --git a/hapi-fhir-structures-dstu2/src/test/java/ca/uhn/fhir/parser/JsonParserDstu2Test.java b/hapi-fhir-structures-dstu2/src/test/java/ca/uhn/fhir/parser/JsonParserDstu2Test.java index 24c8165e0c4..c8a4a4e397a 100644 --- a/hapi-fhir-structures-dstu2/src/test/java/ca/uhn/fhir/parser/JsonParserDstu2Test.java +++ b/hapi-fhir-structures-dstu2/src/test/java/ca/uhn/fhir/parser/JsonParserDstu2Test.java @@ -1,40 +1,5 @@ package ca.uhn.fhir.parser; -import static org.hamcrest.CoreMatchers.equalTo; -import static org.hamcrest.Matchers.contains; -import static org.hamcrest.Matchers.containsString; -import static org.hamcrest.Matchers.not; -import static org.hamcrest.Matchers.stringContainsInOrder; -import static org.hamcrest.core.IsInstanceOf.instanceOf; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertNull; -import static org.junit.Assert.assertSame; -import static org.junit.Assert.assertThat; -import static org.junit.Assert.assertTrue; -import static org.junit.Assert.fail; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.verify; - -import java.io.IOException; -import java.io.StringReader; -import java.util.*; - -import org.apache.commons.io.IOUtils; -import org.apache.commons.lang3.time.DateUtils; -import org.hamcrest.Matchers; -import org.hl7.fhir.instance.model.api.IIdType; -import org.junit.AfterClass; -import org.junit.Assert; -import org.junit.Test; -import org.mockito.ArgumentCaptor; -import org.mockito.Mockito; -import org.mockito.internal.stubbing.answers.ThrowsException; -import org.slf4j.LoggerFactory; - -import com.google.common.collect.Sets; - import ca.uhn.fhir.context.FhirContext; import ca.uhn.fhir.model.api.*; import ca.uhn.fhir.model.base.composite.BaseCodingDt; @@ -66,12 +31,13 @@ import org.mockito.Mockito; import org.mockito.internal.stubbing.answers.ThrowsException; import org.slf4j.LoggerFactory; -import java.io.IOException; import java.io.StringReader; import java.util.*; +import static org.hamcrest.CoreMatchers.equalTo; import static org.hamcrest.Matchers.contains; import static org.hamcrest.Matchers.*; +import static org.hamcrest.core.IsInstanceOf.instanceOf; import static org.junit.Assert.*; import static org.mockito.Mockito.*; @@ -79,6 +45,33 @@ public class JsonParserDstu2Test { private static final org.slf4j.Logger ourLog = org.slf4j.LoggerFactory.getLogger(JsonParserDstu2Test.class); private static FhirContext ourCtx = FhirContext.forDstu2(); + private void assertExtensionMetadata( + BaseResource resource, + String url, + boolean isModifier, + Class expectedType, + String expectedValue) { + ExtensionDt extension = (ExtensionDt) resource.getResourceMetadata().get(new ResourceMetadataKeyEnum.ExtensionResourceMetadataKey(url)); + assertThat(extension.getValue(), instanceOf(expectedType)); + assertThat(extension.isModifier(), equalTo(isModifier)); + assertThat(extension.getValueAsPrimitive().getValueAsString(), equalTo(expectedValue)); + } + + private void assertParsedResourcesExtensionMetadata(ProcedureRequest resource) { + ExtensionDt payment = (ExtensionDt) resource.getResourceMetadata().get( + new ResourceMetadataKeyEnum.ExtensionResourceMetadataKey("http://fhir.sjanic.com/procedureRequest/requiresPatientPayment")); + assertThat(payment.isModifier(), equalTo(true)); + assertThat(((BooleanDt) payment.getValue()).getValue(), equalTo(true)); + + TimestampFields timestampFields = new TimestampFields(resource); + assertThat(timestampFields.user.getReference().getIdPart(), equalTo("sjanic")); + assertThat(timestampFields.instance.getValue(), equalTo(new InstantDt("2012-01-01T13:00:00Z").getValue())); + assertThat(timestampFields.organization.getReference().getIdPart(), equalTo("sjanic_org")); + assertThat(timestampFields.role.getCodingFirstRep().getSystem(), equalTo("sjanic")); + assertThat(timestampFields.role.getCodingFirstRep().getCode(), equalTo("Doctor")); + } + + @Test public void testBaseUrlFooResourceCorrectlySerializedInExtensionValueReference() { String refVal = "http://my.org/FooBar"; @@ -103,7 +96,7 @@ public class JsonParserDstu2Test { * See #544 */ @Test - public void testBundleStitchReferencesByUuid() throws Exception { + public void testBundleStitchReferencesByUuid() { ca.uhn.fhir.model.dstu2.resource.Bundle bundle = new ca.uhn.fhir.model.dstu2.resource.Bundle(); DocumentManifest dm = new DocumentManifest(); @@ -180,6 +173,7 @@ public class JsonParserDstu2Test { assertEquals("myName", ((StringDt) newPatient.getUndeclaredExtensionsByUrl("http://www.example.com/petname").get(0).getValue()).getValue()); } + @Test public void testCustomUrlExtensioninBundle() { final String expected = "{\"resourceType\":\"Bundle\",\"entry\":[{\"resource\":{\"resourceType\":\"Patient\",\"extension\":[{\"url\":\"http://www.example.com/petname\",\"valueString\":\"myName\"}]}}]}"; @@ -252,7 +246,7 @@ public class JsonParserDstu2Test { } @Test - public void testEncodeAndParseExtensions() throws Exception { + public void testEncodeAndParseExtensions() { Patient patient = new Patient(); patient.addIdentifier().setUse(IdentifierUseEnum.OFFICIAL).setSystem("urn:example").setValue("7000135"); @@ -398,9 +392,9 @@ public class JsonParserDstu2Test { assertEquals(2, gotLabels.size()); - IdDt label = (IdDt) gotLabels.get(0); + IdDt label = gotLabels.get(0); assertEquals("http://foo/Profile1", label.getValue()); - label = (IdDt) gotLabels.get(1); + label = gotLabels.get(1); assertEquals("http://foo/Profile2", label.getValue()); tagList = ResourceMetadataKeyEnum.TAG_LIST.get(parsed); @@ -421,7 +415,7 @@ public class JsonParserDstu2Test { HumanNameDt name = p.addName(); name.addFamily().setValue(null).addUndeclaredExtension(new ExtensionDt(false, "http://foo", new StringDt("FOOEXT0"))); name.getFamily().get(0).setElementSpecificId("f0"); - name.addFamily().setValue("V1").addUndeclaredExtension((ExtensionDt) new ExtensionDt(false, "http://foo", new StringDt("FOOEXT1"))); + name.addFamily().setValue("V1").addUndeclaredExtension(new ExtensionDt(false, "http://foo", new StringDt("FOOEXT1"))); name.getFamily().get(1).setElementSpecificId("f1"); name.getFamily().get(1).getUndeclaredExtensions().get(0).setElementSpecificId("ext1id"); name.addFamily(); // this one shouldn't get encoded @@ -548,7 +542,6 @@ public class JsonParserDstu2Test { ca.uhn.fhir.model.dstu2.resource.Bundle b = new ca.uhn.fhir.model.dstu2.resource.Bundle(); b.getText().setDiv(""); b.getText().getStatus().setValueAsString(""); - ; Entry e = b.addEntry(); e.setResource(new Patient()); @@ -651,7 +644,6 @@ public class JsonParserDstu2Test { c = new Conformance(); c.getAcceptUnknownElement().setValueAsEnum(UnknownContentCodeEnum.UNKNOWN_ELEMENTS); - ; c.getAcceptUnknownElement().addUndeclaredExtension(false, "http://foo", new StringDt("AAA")); encoded = ourCtx.newJsonParser().setPrettyPrint(true).encodeResourceToString(c); @@ -805,7 +797,7 @@ public class JsonParserDstu2Test { } @Test - public void testEncodeNarrativeSuppressed() throws Exception { + public void testEncodeNarrativeSuppressed() { Patient patient = new Patient(); patient.setId("Patient/1/_history/1"); patient.getText().setDiv("
THE DIV
"); @@ -823,6 +815,7 @@ public class JsonParserDstu2Test { assertThat(encoded, containsString("maritalStatus")); } + /** * See #537 */ @@ -850,6 +843,69 @@ public class JsonParserDstu2Test { assertThat(encoded, stringContainsInOrder("LEVEL02", "LEVEL03", "LEVEL04", "LEVEL01")); } + @Test + public void testEncodeResourceWithExtensionMetadata() { + ProcedureRequest procedureRequest = new ProcedureRequest(); + procedureRequest.setStatus(ProcedureRequestStatusEnum.ACCEPTED); + ExtensionDt timestamp = new ExtensionDt(false, "http://fhir.sjanic.com/timestamp"); + timestamp.addUndeclaredExtension(false, "http://fhir.sjanic.com/timestamp/user", new ResourceReferenceDt("sjanic")); + timestamp.addUndeclaredExtension(false, "http://fhir.sjanic.com/timestamp/instance", new InstantDt("2012-01-01T13:00:00Z")); + timestamp.addUndeclaredExtension(false, "http://fhir.sjanic.com/timestamp/organization", new ResourceReferenceDt("sjanic_org")); + timestamp.addUndeclaredExtension(false, "http://fhir.sjanic.com/timestamp/role", new CodeableConceptDt().addCoding(new CodingDt("sjanic", "Doctor").setDisplay("Doctorin"))); + ExtensionDt payment = new ExtensionDt(true, "http://fhir.sjanic.com/procedureRequest/requiresPatientPayment", new BooleanDt(true)); + procedureRequest.getResourceMetadata().put(new ResourceMetadataKeyEnum.ExtensionResourceMetadataKey(timestamp.getUrl()), timestamp); + procedureRequest.getResourceMetadata().put(new ResourceMetadataKeyEnum.ExtensionResourceMetadataKey(payment.getUrl()), payment); + + String json = ourCtx.newJsonParser().encodeResourceToString(procedureRequest); + + // @formatter:off + assertThat(json, stringContainsInOrder( + "\"meta\":{" + + "\"extension\":[" + + "{" + + "\"url\":\"http://fhir.sjanic.com/timestamp\"," + + "\"extension\":[" + + "{" + + "\"url\":\"http://fhir.sjanic.com/timestamp/user\"," + + "\"valueReference\":{" + + "\"reference\":\"sjanic\"" + + "}" + + "}," + + "{" + + "\"url\":\"http://fhir.sjanic.com/timestamp/instance\"," + + "\"valueInstant\":\"2012-01-01T13:00:00Z\"" + + "}," + + "{" + + "\"url\":\"http://fhir.sjanic.com/timestamp/organization\"," + + "\"valueReference\":{" + + "\"reference\":\"sjanic_org\"" + + "}" + + "}," + + "{" + + "\"url\":\"http://fhir.sjanic.com/timestamp/role\"," + + "\"valueCodeableConcept\":{" + + "\"coding\":[" + + "{" + + "\"system\":\"sjanic\"," + + "\"code\":\"Doctor\"," + + "\"display\":\"Doctorin\"" + + "}" + + "]" + + "}" + + "}" + + "]" + + "}" + + "]," + + "\"modifierExtension\":[" + + "{" + + "\"url\":\"http://fhir.sjanic.com/procedureRequest/requiresPatientPayment\"," + + "\"valueBoolean\":true" + + "}" + + "]" + + "},")); + // @formatter:on + } + @Test public void testEncodeSummary() { Patient patient = new Patient(); @@ -916,7 +972,7 @@ public class JsonParserDstu2Test { // see #241 @Test - public void testEncodeThenParseShouldNotAddSpuriousId() throws Exception { + public void testEncodeThenParseShouldNotAddSpuriousId() { Condition condition = new Condition().setVerificationStatus(ConditionVerificationStatusEnum.CONFIRMED); ca.uhn.fhir.model.dstu2.resource.Bundle bundle = new ca.uhn.fhir.model.dstu2.resource.Bundle(); ca.uhn.fhir.model.dstu2.resource.Bundle.Entry entry = new ca.uhn.fhir.model.dstu2.resource.Bundle.Entry(); @@ -931,7 +987,7 @@ public class JsonParserDstu2Test { } @Test - public void testEncodeWithDontEncodeElements() throws Exception { + public void testEncodeWithDontEncodeElements() { Patient patient = new Patient(); patient.setId("123"); @@ -1072,6 +1128,7 @@ public class JsonParserDstu2Test { assertEquals("2011-01-01", condition.getDateRecordedElement().getValueAsString()); } + /** * #65 */ @@ -1089,7 +1146,7 @@ public class JsonParserDstu2Test { } @Test - public void testNamespacePreservationEncode() throws Exception { + public void testNamespacePreservationEncode() { //@formatter:off String input = "" + "" + @@ -1111,7 +1168,7 @@ public class JsonParserDstu2Test { } @Test - public void testNamespacePreservationParse() throws Exception { + public void testNamespacePreservationParse() { String input = "{\"resourceType\":\"Patient\",\"text\":{\"div\":\"@fhirabend\"}}"; Patient parsed = ourCtx.newJsonParser().parseResource(Patient.class, input); @@ -1428,7 +1485,7 @@ public class JsonParserDstu2Test { } @Test - public void testParseAndEncodeComments() throws IOException { + public void testParseAndEncodeComments() { //@formatter:off String input = "{\n" + " \"resourceType\": \"Patient\",\n" + @@ -1661,7 +1718,7 @@ public class JsonParserDstu2Test { } @Test - public void testParseMetadata() throws Exception { + public void testParseMetadata() { //@formatter:off String bundle = "{\n" + " \"resourceType\" : \"Bundle\",\n" + @@ -1874,6 +1931,20 @@ public class JsonParserDstu2Test { assertEquals("Patient", reincarnatedPatient.getId().getResourceType()); } + @Test + public void testParseResourceWithExtensionMetadata() throws Exception { + String input = IOUtils.toString(getClass().getResourceAsStream("/procedure-request.json")); + IParser parser = ourCtx.newJsonParser(); + IParserErrorHandler peh = mock(IParserErrorHandler.class); + parser.setParserErrorHandler(peh); + + ProcedureRequest p = parser.parseResource(ProcedureRequest.class, input); + + ArgumentCaptor capt = ArgumentCaptor.forClass(String.class); + verify(peh, Mockito.never()).unknownElement(Mockito.isNull(IParseLocation.class), capt.capture()); + assertParsedResourcesExtensionMetadata(p); + } + /** * See #207 */ @@ -1908,18 +1979,8 @@ public class JsonParserDstu2Test { Patient p = parser.parseResource(Patient.class, input); ArgumentCaptor capt = ArgumentCaptor.forClass(String.class); - verify(peh, times(4)).unknownElement(Mockito.isNull(IParseLocation.class), capt.capture()); - - //@formatter:off - List strings = capt.getAllValues(); - assertThat(strings, contains( - "extension", - "extension", - "modifierExtension", - "modifierExtension" - )); - //@formatter:off - + verify(peh, times(0)).unknownElement(Mockito.isNull(IParseLocation.class), capt.capture()); + assertEquals("Smith", p.getName().get(0).getGiven().get(0).getValue()); assertExtensionMetadata(p, "fhir-request-method", false, StringDt.class, "POST"); assertExtensionMetadata(p, "fhir-request-uri", false, UriDt.class, "Patient"); @@ -1927,109 +1988,6 @@ public class JsonParserDstu2Test { assertExtensionMetadata(p, "modified-fhir-request-uri", true, UriDt.class, "Patient"); } - private void assertExtensionMetadata( - BaseResource resource, - String url, - boolean isModifier, - Class expectedType, - String expectedValue) { - ExtensionDt extension = (ExtensionDt) resource.getResourceMetadata().get(new ResourceMetadataKeyEnum.ExtensionResourceMetadataKey(url)); - assertThat(extension.getValue(), instanceOf(expectedType)); - assertThat(extension.isModifier(), equalTo(isModifier)); - assertThat(extension.getValueAsPrimitive().getValueAsString(), equalTo(expectedValue)); - } - - @Test - public void testEncodeResourceWithExtensionMetadata() throws Exception { - ProcedureRequest procedureRequest = new ProcedureRequest(); - procedureRequest.setStatus(ProcedureRequestStatusEnum.ACCEPTED); - ExtensionDt timestamp = new ExtensionDt(false, "http://fhir.sjanic.com/timestamp"); - timestamp.addUndeclaredExtension(false, "http://fhir.sjanic.com/timestamp/user", new ResourceReferenceDt("sjanic")); - timestamp.addUndeclaredExtension(false, "http://fhir.sjanic.com/timestamp/instance", new InstantDt("2012-01-01T13:00:00Z")); - timestamp.addUndeclaredExtension(false, "http://fhir.sjanic.com/timestamp/organization", new ResourceReferenceDt("sjanic_org")); - timestamp.addUndeclaredExtension(false, "http://fhir.sjanic.com/timestamp/role", new CodeableConceptDt().addCoding(new CodingDt("sjanic", "Doctor").setDisplay("Doctorin"))); - ExtensionDt payment = new ExtensionDt(true, "http://fhir.sjanic.com/procedureRequest/requiresPatientPayment", new BooleanDt(true)); - procedureRequest.getResourceMetadata().put(new ResourceMetadataKeyEnum.ExtensionResourceMetadataKey(timestamp.getUrl()), timestamp); - procedureRequest.getResourceMetadata().put(new ResourceMetadataKeyEnum.ExtensionResourceMetadataKey(payment.getUrl()), payment); - - String json = ourCtx.newJsonParser().encodeResourceToString(procedureRequest); - - // @formatter:off - assertThat(json, stringContainsInOrder( - "\"meta\":{"+ - "\"extension\":["+ - "{"+ - "\"url\":\"http://fhir.sjanic.com/timestamp\","+ - "\"extension\":["+ - "{"+ - "\"url\":\"http://fhir.sjanic.com/timestamp/user\","+ - "\"valueReference\":{"+ - "\"reference\":\"sjanic\""+ - "}"+ - "},"+ - "{"+ - "\"url\":\"http://fhir.sjanic.com/timestamp/instance\","+ - "\"valueInstant\":\"2012-01-01T13:00:00Z\""+ - "},"+ - "{"+ - "\"url\":\"http://fhir.sjanic.com/timestamp/organization\","+ - "\"valueReference\":{"+ - "\"reference\":\"sjanic_org\""+ - "}"+ - "},"+ - "{"+ - "\"url\":\"http://fhir.sjanic.com/timestamp/role\","+ - "\"valueCodeableConcept\":{"+ - "\"coding\":["+ - "{"+ - "\"system\":\"sjanic\","+ - "\"code\":\"Doctor\","+ - "\"display\":\"Doctorin\""+ - "}"+ - "]"+ - "}"+ - "}"+ - "]"+ - "}"+ - "],"+ - "\"modifierExtension\":["+ - "{"+ - "\"url\":\"http://fhir.sjanic.com/procedureRequest/requiresPatientPayment\","+ - "\"valueBoolean\":true"+ - "}"+ - "]"+ - "},")); - // @formatter:on - } - - @Test - public void testParseResourceWithExtensionMetadata() throws Exception { - String input = IOUtils.toString(getClass().getResourceAsStream("/procedure-request.json")); - IParser parser = ourCtx.newJsonParser(); - IParserErrorHandler peh = mock(IParserErrorHandler.class); - parser.setParserErrorHandler(peh); - - ProcedureRequest p = parser.parseResource(ProcedureRequest.class, input); - - ArgumentCaptor capt = ArgumentCaptor.forClass(String.class); - verify(peh, Mockito.never()).unknownElement(Mockito.isNull(IParseLocation.class), capt.capture()); - assertParsedResourcesExtensionMetadata(p); - } - - private void assertParsedResourcesExtensionMetadata(ProcedureRequest resource) throws Exception { - ExtensionDt payment = (ExtensionDt) resource.getResourceMetadata().get( - new ResourceMetadataKeyEnum.ExtensionResourceMetadataKey("http://fhir.sjanic.com/procedureRequest/requiresPatientPayment")); - assertThat(payment.isModifier(), equalTo(true)); - assertThat(((BooleanDt)payment.getValue()).getValue(), equalTo(true)); - - TimestampFields timestampFields = new TimestampFields(resource); - assertThat(timestampFields.user.getReference().getIdPart(), equalTo("sjanic")); - assertThat(timestampFields.instance.getValue(), equalTo(new InstantDt("2012-01-01T13:00:00Z").getValue())); - assertThat(timestampFields.organization.getReference().getIdPart(), equalTo("sjanic_org")); - assertThat(timestampFields.role.getCodingFirstRep().getSystem(), equalTo("sjanic")); - assertThat(timestampFields.role.getCodingFirstRep().getCode(), equalTo("Doctor")); - } - @Test public void testParseWithWrongTypeObjectShouldBeArray() throws Exception { String input = IOUtils.toString(getClass().getResourceAsStream("/invalid_metadata.json")); @@ -2131,170 +2089,6 @@ public class JsonParserDstu2Test { public static void afterClassClearContext() { TestUtil.clearAllStaticFieldsForUnitTest(); } - - /** - * See #537 - */ - @Test - public void testEncodeNestedContained() { - - Organization org04 = new Organization(); - org04.setName("LEVEL04"); - - Organization org03 = new Organization(); - org03.setName("LEVEL03"); - org03.getPartOf().setResource(org04); - - Organization org02 = new Organization(); - org02.setName("LEVEL02"); - org02.getPartOf().setResource(org03); - - Organization org01 = new Organization(); - org01.setName("LEVEL01"); - org01.getPartOf().setResource(org02); - - String encoded = ourCtx.newJsonParser().setPrettyPrint(true).encodeResourceToString(org01); - ourLog.info(encoded); - - assertThat(encoded, stringContainsInOrder("LEVEL02","LEVEL03","LEVEL04","LEVEL01" )); - } - - - /** - * See #505 - */ - @Test - public void testIncludeResourceWhenEncoding() { - Condition condition = new Condition(); - condition.setDateRecorded(new DateDt("2011-01-01")); - - Goal goal = new Goal(); - goal.setId("Goal1"); - ResourceReferenceDt resourceReferenceDt = new ResourceReferenceDt(condition); - goal.setAddresses(Collections.singletonList(resourceReferenceDt)); - - ca.uhn.fhir.model.dstu2.resource.Bundle bundle = new ca.uhn.fhir.model.dstu2.resource.Bundle(); - Entry entry = bundle.addEntry(); - entry.setResource(goal); - - IParser parser = ourCtx.newJsonParser(); - - String resourceToString = parser.setPrettyPrint(true).encodeResourceToString(bundle); - ourLog.info(resourceToString); - - assertThat(resourceToString, containsString("2011-01-01")); - - bundle = parser.parseResource(ca.uhn.fhir.model.dstu2.resource.Bundle.class, resourceToString); - assertEquals(1, bundle.getEntry().size()); - goal = (Goal) bundle.getEntry().get(0).getResource(); - - condition = (Condition) goal.getAddresses().get(0).getResource(); - - assertEquals("2011-01-01", condition.getDateRecordedElement().getValueAsString()); - } - - /** - * Test for the url generated based on the server config - */ - @Test - public void testGeneratedUrls() { - final IParser jsonParser = ourCtx.newJsonParser().setPrettyPrint(true); - jsonParser.setServerBaseUrl("http://myserver.com"); - - final CustomPatientDstu2 patient = new CustomPatientDstu2(); - patient.setHomeless(new BooleanDt(true)); - - final String parsedPatient = jsonParser.encodeResourceToString(patient); - - assertTrue(parsedPatient.contains("http://myserver.com/StructureDefinition/Patient")); - assertTrue(parsedPatient.contains("http://myserver.com/StructureDefinition/homeless")); - } - - /** - * Test for the url generated based on the server config - */ - @Test - public void testCustomUrlExtension() { - final String expected = "{\"resourceType\":\"Patient\",\"extension\":[{\"url\":\"http://www.example.com/petname\",\"valueString\":\"myName\"}]}"; - - final MyPatientWithCustomUrlExtension patient = new MyPatientWithCustomUrlExtension(); - patient.setPetName(new StringDt("myName")); - - final IParser jsonParser = ourCtx.newJsonParser(); - jsonParser.setServerBaseUrl("http://www.example.com"); - - final String parsedPatient = jsonParser.encodeResourceToString(patient); - System.out.println(parsedPatient); - assertEquals(expected, parsedPatient); - - // Parse with string - MyPatientWithCustomUrlExtension newPatient = jsonParser.parseResource(MyPatientWithCustomUrlExtension.class, parsedPatient); - assertEquals("myName", newPatient.getPetName().getValue()); - - // Parse with stream - newPatient = jsonParser.parseResource(MyPatientWithCustomUrlExtension.class, new StringReader(parsedPatient)); - assertEquals("myName", newPatient.getPetName().getValue()); - - //Check no NPE if base server not configure - newPatient = ourCtx.newJsonParser().parseResource(MyPatientWithCustomUrlExtension.class, new StringReader(parsedPatient)); - assertNull("myName", newPatient.getPetName().getValue()); - assertEquals("myName", ((StringDt) newPatient.getUndeclaredExtensionsByUrl("http://www.example.com/petname").get(0).getValue()).getValue()); - } - - @Test - public void testCustomUrlExtensioninBundle() { - final String expected = "{\"resourceType\":\"Bundle\",\"entry\":[{\"resource\":{\"resourceType\":\"Patient\",\"extension\":[{\"url\":\"http://www.example.com/petname\",\"valueString\":\"myName\"}]}}]}"; - - final MyPatientWithCustomUrlExtension patient = new MyPatientWithCustomUrlExtension(); - patient.setPetName(new StringDt("myName")); - - final Bundle bundle = new Bundle(); - final Entry entry = new Entry(); - entry.setResource(patient); - bundle.addEntry(entry); - - final IParser jsonParser = ourCtx.newJsonParser(); - jsonParser.setServerBaseUrl("http://www.example.com"); - - final String parsedBundle = jsonParser.encodeResourceToString(bundle); - System.out.println(parsedBundle); - assertEquals(expected, parsedBundle); - - // Parse with string - Bundle newBundle = jsonParser.parseResource(Bundle.class, parsedBundle); - assertNotNull(newBundle); - assertEquals(1, newBundle.getEntry().size()); - Patient newPatient = (Patient) newBundle.getEntry().get(0).getResource(); - assertEquals("myName", ((StringDt) newPatient.getUndeclaredExtensionsByUrl("http://www.example.com/petname").get(0).getValue()).getValue()); - - // Parse with stream - newBundle = jsonParser.parseResource(Bundle.class, new StringReader(parsedBundle)); - assertNotNull(newBundle); - assertEquals(1, newBundle.getEntry().size()); - newPatient = (Patient) newBundle.getEntry().get(0).getResource(); - assertEquals("myName", ((StringDt) newPatient.getUndeclaredExtensionsByUrl("http://www.example.com/petname").get(0).getValue()).getValue()); - - } - - @Test - public void testBaseUrlFooResourceCorrectlySerializedInExtensionValueReference() { - String refVal = "http://my.org/FooBar"; - - Patient fhirPat = new Patient(); - fhirPat.addUndeclaredExtension(false, "x1").setValue(new ResourceReferenceDt(refVal)); - - IParser parser = ourCtx.newJsonParser(); - - String output = parser.encodeResourceToString(fhirPat); - System.out.println("output: " + output); - - // Deserialize then check that valueReference value is still correct - fhirPat = parser.parseResource(Patient.class, output); - - List extlst = fhirPat.getUndeclaredExtensionsByUrl("x1"); - Assert.assertEquals(1, extlst.size()); - Assert.assertEquals(refVal, ((ResourceReferenceDt) extlst.get(0).getValue()).getReference().getValue()); - } private static final class TimestampFields { ResourceReferenceDt user; @@ -2310,7 +2104,7 @@ public class JsonParserDstu2Test { for (ExtensionDt extensionDt : timestamp.getExtension()) { timestampFields.put(extensionDt.getUrl(), extensionDt); } - user = ((ResourceReferenceDt)timestampFields.get("http://fhir.sjanic.com/timestamp/user").getValue()); + user = ((ResourceReferenceDt) timestampFields.get("http://fhir.sjanic.com/timestamp/user").getValue()); instance = (InstantDt) timestampFields.get("http://fhir.sjanic.com/timestamp/instance").getValue(); organization = (ResourceReferenceDt) timestampFields.get("http://fhir.sjanic.com/timestamp/organization").getValue(); role = (CodeableConceptDt) timestampFields.get("http://fhir.sjanic.com/timestamp/role").getValue(); diff --git a/src/changes/changes.xml b/src/changes/changes.xml index 1f37d27d8fc..17b57175d99 100644 --- a/src/changes/changes.xml +++ b/src/changes/changes.xml @@ -218,6 +218,12 @@ framework in a server with HAPI FHIR JPA. Thanks to Chris Schuler for the pull request! + + A new module has been contributed called hapi-fhir-jpaserver-elasticsearch + which adds support for Elasticsearch instead of raw Lucene for fulltext + indexing. Testing help on this would be appreciated! Thanks to + Jiajing Liang for the pull request! +