Allow delete bundle to contain multiple deletes for the same resource

This commit is contained in:
James Agnew 2016-05-08 13:11:55 -04:00
parent dbcc2ce25a
commit 061243b5c7
6 changed files with 571 additions and 79 deletions

View File

@ -29,6 +29,7 @@ import java.util.Collections;
import java.util.Comparator;
import java.util.Date;
import java.util.HashMap;
import java.util.HashSet;
import java.util.IdentityHashMap;
import java.util.Iterator;
import java.util.LinkedHashSet;
@ -326,7 +327,7 @@ public class FhirSystemDaoDstu3 extends BaseHapiFhirSystemDao<Bundle, Meta> {
}
Collections.sort(theRequest.getEntry(), new TransactionSorter());
List<IIdType> deletedResources = new ArrayList<IIdType>();
Set<String> deletedResources = new HashSet<String>();
List<DeleteConflict> deleteConflicts = new ArrayList<DeleteConflict>();
/*
@ -400,14 +401,17 @@ public class FhirSystemDaoDstu3 extends BaseHapiFhirSystemDao<Bundle, Meta> {
ca.uhn.fhir.jpa.dao.IFhirResourceDao<? extends IBaseResource> dao = toDao(parts, verb.toCode(), url);
int status = Constants.STATUS_HTTP_204_NO_CONTENT;
if (parts.getResourceId() != null) {
ResourceTable deleted = dao.delete(new IdType(parts.getResourceType(), parts.getResourceId()), deleteConflicts, theRequestDetails);
if (deleted != null) {
deletedResources.add(deleted.getIdDt().toUnqualifiedVersionless());
IdType deleteId = new IdType(parts.getResourceType(), parts.getResourceId());
if (!deletedResources.contains(deleteId.getValueAsString())) {
ResourceTable deleted = dao.delete(deleteId, deleteConflicts, theRequestDetails);
if (deleted != null) {
deletedResources.add(deleteId.getValueAsString());
}
}
} else {
List<ResourceTable> allDeleted = dao.deleteByUrl(parts.getResourceType() + '?' + parts.getParams(), deleteConflicts, theRequestDetails);
for (ResourceTable deleted : allDeleted) {
deletedResources.add(deleted.getIdDt().toUnqualifiedVersionless());
deletedResources.add(deleted.getIdDt().toUnqualifiedVersionless().getValueAsString());
}
if (allDeleted.isEmpty()) {
status = Constants.STATUS_HTTP_404_NOT_FOUND;

View File

@ -9,11 +9,13 @@ import static org.junit.Assert.assertThat;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
import java.io.IOException;
import java.io.InputStream;
import java.util.concurrent.TimeUnit;
import org.apache.commons.io.IOUtils;
import org.apache.http.Header;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
@ -35,6 +37,7 @@ import org.hl7.fhir.dstu3.model.IdType;
import org.hl7.fhir.dstu3.model.Observation;
import org.hl7.fhir.dstu3.model.OperationDefinition;
import org.hl7.fhir.dstu3.model.OperationOutcome;
import org.hl7.fhir.dstu3.model.Organization;
import org.hl7.fhir.dstu3.model.Parameters;
import org.hl7.fhir.dstu3.model.Patient;
import org.hl7.fhir.dstu3.model.StringType;
@ -48,6 +51,7 @@ import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import ca.uhn.fhir.context.FhirContext;
import ca.uhn.fhir.jpa.dao.DaoMethodOutcome;
import ca.uhn.fhir.jpa.dao.dstu3.BaseJpaDstu3Test;
import ca.uhn.fhir.jpa.provider.SystemProviderDstu2Test;
import ca.uhn.fhir.jpa.rp.dstu3.ObservationResourceProvider;
@ -60,6 +64,7 @@ import ca.uhn.fhir.rest.server.EncodingEnum;
import ca.uhn.fhir.rest.server.FifoMemoryPagingProvider;
import ca.uhn.fhir.rest.server.RestfulServer;
import ca.uhn.fhir.rest.server.exceptions.InvalidRequestException;
import ca.uhn.fhir.rest.server.exceptions.ResourceGoneException;
import ca.uhn.fhir.rest.server.interceptor.RequestValidatingInterceptor;
import ca.uhn.fhir.rest.server.interceptor.ResponseHighlighterInterceptor;
import ca.uhn.fhir.util.TestUtil;
@ -75,7 +80,109 @@ public class SystemProviderDstu3Test extends BaseJpaDstu3Test {
private static Server ourServer;
private static String ourServerBase;
@Test
public void testTransactionWithInlineConditionalUrl() throws Exception {
myDaoConfig.setAllowInlineMatchUrlReferences(true);
Patient p = new Patient();
p.addName().addFamily("van de Heuvelcx85ioqWJbI").addGiven("Pietercx85ioqWJbI");
myPatientDao.create(p, mySrd);
Organization o = new Organization();
o.addIdentifier().setSystem("urn:oid:2.16.840.1.113883.2.4.6.1").setValue("07-8975469");
myOrganizationDao.create(o, mySrd);
//@formatter:off
String input = "<Bundle xmlns=\"http://hl7.org/fhir\">\n" +
" <id value=\"20160113160203\"/>\n" +
" <type value=\"transaction\"/>\n" +
" <entry>\n" +
" <fullUrl value=\"urn:uuid:c72aa430-2ddc-456e-7a09-dea8264671d8\"/>\n" +
" <resource>\n" +
" <Encounter>\n" +
" <identifier>\n" +
" <use value=\"official\"/>\n" +
" <system value=\"http://healthcare.example.org/identifiers/encounter\"/>\n" +
" <value value=\"845962.8975469\"/>\n" +
" </identifier>\n" +
" <status value=\"in-progress\"/>\n" +
" <class value=\"inpatient\"/>\n" +
" <patient>\n" +
" <reference value=\"Patient?family=van%20de%20Heuvelcx85ioqWJbI&amp;given=Pietercx85ioqWJbI\"/>\n" +
" </patient>\n" +
" <serviceProvider>\n" +
" <reference value=\"Organization?identifier=urn:oid:2.16.840.1.113883.2.4.6.1|07-8975469\"/>\n" +
" </serviceProvider>\n" +
" </Encounter>\n" +
" </resource>\n" +
" <request>\n" +
" <method value=\"POST\"/>\n" +
" <url value=\"Encounter\"/>\n" +
" </request>\n" +
" </entry>\n" +
"</Bundle>";
//@formatter:off
HttpPost req = new HttpPost(ourServerBase);
req.setEntity(new StringEntity(input, ContentType.parse(Constants.CT_FHIR_XML + "; charset=utf-8")));
CloseableHttpResponse resp = ourHttpClient.execute(req);
try {
String encoded = IOUtils.toString(resp.getEntity().getContent());
ourLog.info(encoded);
assertThat(encoded, containsString("transaction-response"));
} finally {
IOUtils.closeQuietly(resp.getEntity().getContent());
}
}
@Test
public void testTransactionDeleteWithDuplicateDeletes() throws Exception {
myDaoConfig.setAllowInlineMatchUrlReferences(true);
Patient p = new Patient();
p.addName().addFamily("van de Heuvelcx85ioqWJbI").addGiven("Pietercx85ioqWJbI");
IIdType id = myPatientDao.create(p, mySrd).getId().toUnqualifiedVersionless();
ourClient.read().resource(Patient.class).withId(id);
Bundle inputBundle = new Bundle();
inputBundle.setType(BundleType.TRANSACTION);
inputBundle.addEntry().getRequest().setMethod(HTTPVerb.DELETE).setUrl(id.getValue());
inputBundle.addEntry().getRequest().setMethod(HTTPVerb.DELETE).setUrl(id.getValue());
inputBundle.addEntry().getRequest().setMethod(HTTPVerb.DELETE).setUrl("Patient?name=Pietercx85ioqWJbI");
String input = myFhirCtx.newXmlParser().encodeResourceToString(inputBundle);
HttpPost req = new HttpPost(ourServerBase + "?_pretty=true");
req.setEntity(new StringEntity(input, ContentType.parse(Constants.CT_FHIR_XML + "; charset=utf-8")));
CloseableHttpResponse resp = ourHttpClient.execute(req);
try {
String encoded = IOUtils.toString(resp.getEntity().getContent());
ourLog.info(encoded);
assertThat(encoded, containsString("transaction-response"));
Bundle response = myFhirCtx.newXmlParser().parseResource(Bundle.class, encoded);
assertEquals(3, response.getEntry().size());
} finally {
IOUtils.closeQuietly(resp.getEntity().getContent());
}
try {
ourClient.read().resource(Patient.class).withId(id).execute();
fail();
} catch (ResourceGoneException e) {
// good
}
}
@Before
public void beforeStartServer() throws Exception {
if (myRestServer == null) {
@ -167,25 +274,25 @@ public class SystemProviderDstu3Test extends BaseJpaDstu3Test {
req.setEntity(new StringEntity(bundleStr, ContentType.parse(Constants.CT_FHIR_XML + "; charset=utf-8")));
CloseableHttpResponse resp = ourHttpClient.execute(req);
try {
String encoded = IOUtils.toString(resp.getEntity().getContent());
ourLog.info(encoded);
String encoded = IOUtils.toString(resp.getEntity().getContent());
IOUtils.closeQuietly(resp.getEntity().getContent());
ourLog.info(encoded);
//@formatter:off
assertThat(encoded, containsString("Questionnaire/54127-6/_history/"));
//@formatter:on
//@formatter:off
assertThat(encoded, containsString("Questionnaire/54127-6/_history/"));
//@formatter:on
for (Header next : resp.getHeaders(RequestValidatingInterceptor.DEFAULT_RESPONSE_HEADER_NAME)) {
ourLog.info(next.toString());
for (Header next : resp.getHeaders(RequestValidatingInterceptor.DEFAULT_RESPONSE_HEADER_NAME)) {
ourLog.info(next.toString());
}
} finally {
IOUtils.closeQuietly(resp.getEntity().getContent());
}
} finally {
myRestServer.unregisterInterceptor(interceptor);
}
}
@Test
public void testEverythingReturnsCorrectFormatInPagingLink() throws Exception {
myRestServer.setDefaultResponseEncoding(EncodingEnum.JSON);
@ -202,7 +309,7 @@ public class SystemProviderDstu3Test extends BaseJpaDstu3Test {
HttpGet get = new HttpGet(ourServerBase + "/Patient/$everything");
get.addHeader("Accept", "application/xml, text/html");
CloseableHttpResponse http = ourHttpClient.execute(get);
try {
String response = IOUtils.toString(http.getEntity().getContent());
ourLog.info(response);
@ -236,10 +343,10 @@ public class SystemProviderDstu3Test extends BaseJpaDstu3Test {
ourLog.info(response);
assertThat(response, not(containsString("_format")));
assertEquals(200, http.getStatusLine().getStatusCode());
Bundle responseBundle = ourCtx.newXmlParser().parseResource(Bundle.class, response);
assertEquals(BundleType.SEARCHSET, responseBundle.getTypeElement().getValue());
} finally {
http.close();
}
@ -258,10 +365,10 @@ public class SystemProviderDstu3Test extends BaseJpaDstu3Test {
}
}
@Transactional(propagation=Propagation.NEVER)
@Transactional(propagation = Propagation.NEVER)
@Test
public void testSuggestKeywords() throws Exception {
Patient patient = new Patient();
patient.addName().addFamily("testSuggest");
IIdType ptId = myPatientDao.create(patient, mySrd).getId().toUnqualifiedVersionless();
@ -276,21 +383,21 @@ public class SystemProviderDstu3Test extends BaseJpaDstu3Test {
obs.getSubject().setReferenceElement(ptId);
obs.getCode().setText("ZXCVBNM ASDFGHJKL QWERTYUIOPASDFGHJKL");
myObservationDao.update(obs, mySrd);
HttpGet get = new HttpGet(ourServerBase + "/$suggest-keywords?context=Patient/" + ptId.getIdPart() + "/$everything&searchParam=_content&text=zxc&_pretty=true&_format=xml");
CloseableHttpResponse http = ourHttpClient.execute(get);
try {
assertEquals(200, http.getStatusLine().getStatusCode());
String output = IOUtils.toString(http.getEntity().getContent());
ourLog.info(output);
Parameters parameters = ourCtx.newXmlParser().parseResource(Parameters.class, output);
assertEquals(2, parameters.getParameter().size());
assertEquals("keyword", parameters.getParameter().get(0).getPart().get(0).getName());
assertEquals(("ZXCVBNM"), ((StringType)parameters.getParameter().get(0).getPart().get(0).getValue()).getValueAsString());
assertEquals(("ZXCVBNM"), ((StringType) parameters.getParameter().get(0).getPart().get(0).getValue()).getValueAsString());
assertEquals("score", parameters.getParameter().get(0).getPart().get(1).getName());
assertEquals(("1.0"), ((DecimalType)parameters.getParameter().get(0).getPart().get(1).getValue()).getValueAsString());
assertEquals(("1.0"), ((DecimalType) parameters.getParameter().get(0).getPart().get(1).getValue()).getValueAsString());
} finally {
http.close();
}
@ -306,7 +413,7 @@ public class SystemProviderDstu3Test extends BaseJpaDstu3Test {
obs.getSubject().setReferenceElement(ptId);
obs.getCode().setText("ZXCVBNM ASDFGHJKL QWERTYUIOPASDFGHJKL");
myObservationDao.create(obs, mySrd);
HttpGet get = new HttpGet(ourServerBase + "/$suggest-keywords");
CloseableHttpResponse http = ourHttpClient.execute(get);
try {
@ -317,7 +424,7 @@ public class SystemProviderDstu3Test extends BaseJpaDstu3Test {
} finally {
http.close();
}
get = new HttpGet(ourServerBase + "/$suggest-keywords?context=Patient/" + ptId.getIdPart() + "/$everything");
http = ourHttpClient.execute(get);
try {
@ -360,11 +467,11 @@ public class SystemProviderDstu3Test extends BaseJpaDstu3Test {
public void testTransactionWithIncompleteBundle() throws Exception {
Patient patient = new Patient();
patient.setGender(AdministrativeGender.MALE);
Bundle bundle = new Bundle();
bundle.setType(BundleType.TRANSACTION);
bundle.addEntry().setResource(patient);
try {
ourClient.transaction().withBundle(bundle).prettyPrint().execute();
fail();
@ -467,20 +574,20 @@ public class SystemProviderDstu3Test extends BaseJpaDstu3Test {
@Test
public void testTransactionSearch() throws Exception {
for (int i = 0; i < 20; i ++) {
for (int i = 0; i < 20; i++) {
Patient p = new Patient();
p.addName().addFamily("PATIENT_" + i);
myPatientDao.create(p, mySrd);
}
Bundle req = new Bundle();
req.setType(BundleType.TRANSACTION);
req.addEntry().getRequest().setMethod(HTTPVerb.GET).setUrl("Patient?");
Bundle resp = ourClient.transaction().withBundle(req).execute();
ourLog.info(ourCtx.newXmlParser().setPrettyPrint(true).encodeResourceToString(resp));
assertEquals(1, resp.getEntry().size());
Bundle respSub = (Bundle)resp.getEntry().get(0).getResource();
Bundle respSub = (Bundle) resp.getEntry().get(0).getResource();
assertEquals("self", respSub.getLink().get(0).getRelation());
assertEquals(ourServerBase + "/Patient", respSub.getLink().get(0).getUrl());
assertEquals("next", respSub.getLink().get(1).getRelation());
@ -491,20 +598,20 @@ public class SystemProviderDstu3Test extends BaseJpaDstu3Test {
@Test
public void testTransactionCount() throws Exception {
for (int i = 0; i < 20; i ++) {
for (int i = 0; i < 20; i++) {
Patient p = new Patient();
p.addName().addFamily("PATIENT_" + i);
myPatientDao.create(p, mySrd);
}
Bundle req = new Bundle();
req.setType(BundleType.TRANSACTION);
req.addEntry().getRequest().setMethod(HTTPVerb.GET).setUrl("Patient?_summary=count");
Bundle resp = ourClient.transaction().withBundle(req).execute();
ourLog.info(ourCtx.newXmlParser().setPrettyPrint(true).encodeResourceToString(resp));
assertEquals(1, resp.getEntry().size());
Bundle respSub = (Bundle)resp.getEntry().get(0).getResource();
Bundle respSub = (Bundle) resp.getEntry().get(0).getResource();
assertEquals(20, respSub.getTotal());
assertEquals(0, respSub.getEntry().size());
}

View File

@ -0,0 +1,77 @@
{
"resourceType":"Bundle",
"id":"2016-05-08T09:12:18-04:00",
"type":"transaction",
"entry":[
{
"fullUrl":"http://vha.edmondsci.com:8080/hapi15/baseDstu3/Observation/OBR_1:1.0.0.2",
"resource":{
"resourceType":"Observation",
"id":"OBR_1:1.0.0.2",
"status":"final",
"code":{
"coding":[
{
"system":"urn:iso:std:iso:11073:10101",
"code":"149530",
"display":"MDC_PULS_OXIM_PULS_RATE"
},
{
"system":"http://hl7.org/fhir/data-types",
"code":"Quantity",
"display":"Value is a Numeric Data Type integer"
}
]
},
"subject":{
"reference":"Patient/sisansarahId"
},
"effectiveDateTime":"2016-05-08T09:12:04.441-04:00",
"performer":[
{
"reference":"Patient/sisansarahId"
}
],
"valueQuantity":{
"value":61,
"unit":"bpm",
"system":"urn:iso:std:iso:11073:10101",
"code":"264864"
},
"device":{
"reference":"Device/001c050100651437"
},
"component":[
{
"code":{
"coding":[
{
"system":"urn:iso:std:iso:11073:10101",
"code":"68193",
"display":"MDC_ATTR_SUPPLEMENTAL_TYPES"
},
{
"code":"code",
"display":"Value is an MDC code"
}
]
},
"valueCodeableConcept":{
"coding":[
{
"system":"urn:iso:std:iso:11073:10101",
"code":"150588",
"display":"MDC_MODALITY_SPOT"
}
]
}
}
]
},
"request":{
"method":"POST",
"url":"Observation/1-OBR_1:1.0.0.2"
}
}
]
}

View File

@ -0,0 +1,334 @@
{
"resourceType":"Bundle",
"id":"2016-05-08T09:12:18-04:00",
"type":"transaction",
"entry":[
{
"fullUrl":"http://vha.edmondsci.com:8080/hapi15/baseDstu3/Patient/sisansarahId",
"resource":{
"resourceType":"Patient",
"id":"sisansarahId",
"identifier":[
{
"type":{
"coding":[
{
"system":"http://hl7.org/fhir/v2/0203",
"code":"MR"
}
]
},
"system":"urn:oid:1.2.3.4.5.6.7.8.10",
"value":"sisansarahId"
}
],
"name":[
{
"family":[
"Sisansarah Lorianthah"
],
"given":[
"Piggy"
]
}
]
},
"request":{
"method":"PUT",
"url":"Patient/1-sisansarahId"
}
},
{
"fullUrl":"http://vha.edmondsci.com:8080/hapi15/baseDstu3/Device/ecde3d4e58532d31",
"resource":{
"resourceType":"Device",
"id":"ecde3d4e58532d31",
"identifier":[
{
"system":"urn:iso:std:iso:11073:10101",
"value":"ecde3d4e58532d31"
}
],
"type":{
"coding":[
{
"system":"urn:iso:std:iso:11073:10101",
"code":"531981",
"display":"MDC_MOC_VMS_MDS_AHD"
}
]
}
},
"request":{
"method":"PUT",
"url":"Device/1-ecde3d4e58532d31"
}
},
{
"fullUrl":"http://vha.edmondsci.com:8080/hapi15/baseDstu3/DeviceComponent/AHD-ecde3d4e58532d31",
"resource":{
"resourceType":"DeviceComponent",
"id":"AHD-ecde3d4e58532d31",
"type":{
"coding":[
{
"system":"urn:iso:std:iso:11073:10101",
"code":"531981",
"display":"MDC_MOC_VMS_MDS_AHD"
}
]
},
"identifier":{
"system":"urn:iso:std:iso:11073:10101",
"value":"ecde3d4e58532d31"
},
"lastSystemChange":"2016-05-08T09:12:18-04:00",
"source":{
"reference":"Device/ecde3d4e58532d31"
}
},
"request":{
"method":"PUT",
"url":"DeviceComponent/1-AHD-ecde3d4e58532d31"
}
},
{
"fullUrl":"http://vha.edmondsci.com:8080/hapi15/baseDstu3/Device/001c050100651437",
"resource":{
"resourceType":"Device",
"id":"001c050100651437",
"identifier":[
{
"use":"official",
"system":"urn:iso:std:iso:11073:10101",
"value":"001c050100651437",
"assigner":{
"reference":"IEEE"
}
},
{
"use":"official",
"system":"urn:iso:std:iso:11073:10101",
"value":"00:1C:05:65:14:37",
"assigner":{
"reference":"Bluetooth SIG"
}
}
],
"type":{
"coding":[
{
"system":"urn:iso:std:iso:11073:10101",
"code":"528388",
"display":"MDC_DEV_SPEC_PROFILE_PULS_OXIM"
}
]
},
"manufacturer":"Nonin Medical, Inc.",
"model":"Model 9560"
},
"request":{
"method":"PUT",
"url":"Device/1-001c050100651437"
}
},
{
"fullUrl":"http://vha.edmondsci.com:8080/hapi15/baseDstu3/DeviceComponent/Agent-001c050100651437",
"resource":{
"resourceType":"DeviceComponent",
"id":"Agent-001c050100651437",
"type":{
"coding":[
{
"system":"urn:iso:std:iso:11073:10101",
"code":"65573",
"display":"MDC_MOC_VMS_MDS_SIMP"
}
]
},
"identifier":{
"use":"official",
"system":"urn:iso:std:iso:11073:10101",
"value":"001c050100651437",
"assigner":{
"reference":"IEEE"
}
},
"lastSystemChange":"2016-05-08T09:12:18-04:00",
"source":{
"reference":"Device/001c050100651437"
},
"productionSpecification":[
{
"specType":{
"coding":[
{
"system":"urn:iso:std:iso:11073:10101",
"code":"531972",
"display":"MDC_ID_PROD_SPEC_SERIAL"
}
]
},
"productionSpec":"0100651437"
},
{
"specType":{
"coding":[
{
"system":"urn:iso:std:iso:11073:10101",
"code":"531976",
"display":"MDC_ID_PROD_SPEC_FW"
}
]
},
"productionSpec":"0.99"
}
]
},
"request":{
"method":"PUT",
"url":"DeviceComponent/1-Agent-001c050100651437"
}
},
{
"fullUrl":"http://vha.edmondsci.com:8080/hapi15/baseDstu3/Observation/OBR_1:1.0.0.1",
"resource":{
"resourceType":"Observation",
"id":"OBR_1:1.0.0.1",
"status":"final",
"code":{
"coding":[
{
"system":"urn:iso:std:iso:11073:10101",
"code":"150456",
"display":"MDC_PULS_OXIM_SAT_O2"
},
{
"system":"http://hl7.org/fhir/data-types",
"code":"Quantity",
"display":"Value is a Numeric Data Type integer"
}
]
},
"subject":{
"reference":"Patient/sisansarahId"
},
"effectiveDateTime":"2016-05-08T09:12:04.441-04:00",
"performer":[
{
"reference":"Patient/sisansarahId"
}
],
"valueQuantity":{
"value":98,
"unit":"%25",
"system":"urn:iso:std:iso:11073:10101",
"code":"262688"
},
"device":{
"reference":"Device/001c050100651437"
},
"component":[
{
"code":{
"coding":[
{
"system":"urn:iso:std:iso:11073:10101",
"code":"68193",
"display":"MDC_ATTR_SUPPLEMENTAL_TYPES"
},
{
"code":"code",
"display":"Value is an MDC code"
}
]
},
"valueCodeableConcept":{
"coding":[
{
"system":"urn:iso:std:iso:11073:10101",
"code":"150588",
"display":"MDC_MODALITY_SPOT"
}
]
}
}
]
},
"request":{
"method":"POST",
"url":"Observation/1-OBR_1:1.0.0.1"
}
},
{
"fullUrl":"http://vha.edmondsci.com:8080/hapi15/baseDstu3/Observation/OBR_1:1.0.0.2",
"resource":{
"resourceType":"Observation",
"id":"OBR_1:1.0.0.2",
"status":"final",
"code":{
"coding":[
{
"system":"urn:iso:std:iso:11073:10101",
"code":"149530",
"display":"MDC_PULS_OXIM_PULS_RATE"
},
{
"system":"http://hl7.org/fhir/data-types",
"code":"Quantity",
"display":"Value is a Numeric Data Type integer"
}
]
},
"subject":{
"reference":"Patient/sisansarahId"
},
"effectiveDateTime":"2016-05-08T09:12:04.441-04:00",
"performer":[
{
"reference":"Patient/sisansarahId"
}
],
"valueQuantity":{
"value":61,
"unit":"bpm",
"system":"urn:iso:std:iso:11073:10101",
"code":"264864"
},
"device":{
"reference":"Device/001c050100651437"
},
"component":[
{
"code":{
"coding":[
{
"system":"urn:iso:std:iso:11073:10101",
"code":"68193",
"display":"MDC_ATTR_SUPPLEMENTAL_TYPES"
},
{
"code":"code",
"display":"Value is an MDC code"
}
]
},
"valueCodeableConcept":{
"coding":[
{
"system":"urn:iso:std:iso:11073:10101",
"code":"150588",
"display":"MDC_MODALITY_SPOT"
}
]
}
}
]
},
"request":{
"method":"POST",
"url":"Observation/1-OBR_1:1.0.0.2"
}
}
]
}

46
pom.xml
View File

@ -261,7 +261,6 @@
<maven_assembly_plugin_version>2.5.3</maven_assembly_plugin_version>
<maven_license_plugin_version>1.8</maven_license_plugin_version>
<maven_source_plugin_version>2.4</maven_source_plugin_version>
<mitreid-connect-version>1.1.8</mitreid-connect-version>
<phloc_schematron_version>2.7.1</phloc_schematron_version>
<phloc_commons_version>4.4.4</phloc_commons_version>
<spring_version>4.2.5.RELEASE</spring_version>
@ -830,13 +829,8 @@
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-site-plugin</artifactId>
<!--
Be careful upgrading the version of this plugin- 3.5 breaks the
relow-maven-skin that we use currently. Also once we move to 3.5
the site.xml <head> tag needs to have its contents put in a
CDATA block. What an unpleasant misadventure to figure that all
out......
-->
<!-- Be careful upgrading the version of this plugin- 3.5 breaks the relow-maven-skin that we use currently. Also once we move to 3.5 the site.xml <head> tag needs to have its contents put in a CDATA
block. What an unpleasant misadventure to figure that all out...... -->
<version>3.4</version>
<configuration>
<skip>false</skip>
@ -861,12 +855,7 @@
<groupId>org.apache.maven.scm</groupId>
<artifactId>maven-scm-api</artifactId>
</dependency>
<!--
<dependency>
<groupId>org.apache.maven.doxia</groupId>
<artifactId>doxia-core</artifactId>
</dependency>
-->
<!-- <dependency> <groupId>org.apache.maven.doxia</groupId> <artifactId>doxia-core</artifactId> </dependency> -->
<dependency>
<groupId>org.apache.maven.doxia</groupId>
<artifactId>doxia-module-markdown</artifactId>
@ -1299,13 +1288,7 @@
<artifactId>maven-scm-api</artifactId>
<version>1.9.4</version>
</dependency>
<!--
<dependency>
<groupId>org.apache.maven.doxia</groupId>
<artifactId>doxia-core</artifactId>
<version>1.7</version>
</dependency>
-->
<!-- <dependency> <groupId>org.apache.maven.doxia</groupId> <artifactId>doxia-core</artifactId> <version>1.7</version> </dependency> -->
<dependency>
<groupId>org.apache.maven.doxia</groupId>
<artifactId>doxia-module-markdown</artifactId>
@ -1345,25 +1328,8 @@
</execution>
</executions>
</plugin>
<!--
<plugin>
<groupId>com.github.github</groupId>
<artifactId>site-maven-plugin</artifactId>
<version>0.12</version>
<configuration>
<message>Building site for ${project.version}</message>
<server>github</server>
</configuration>
<executions>
<execution>
<goals>
<goal>site</goal>
</goals>
<phase>site-deploy</phase>
</execution>
</executions>
</plugin>
-->
<!-- <plugin> <groupId>com.github.github</groupId> <artifactId>site-maven-plugin</artifactId> <version>0.12</version> <configuration> <message>Building site for ${project.version}</message> <server>github</server>
</configuration> <executions> <execution> <goals> <goal>site</goal> </goals> <phase>site-deploy</phase> </execution> </executions> </plugin> -->
</plugins>
</build>

View File

@ -150,6 +150,10 @@
was escaped (%24execute instead of $execute).
Thanks to Michael Lawley for reporting!
</action>
<action type="fix">
JPA server transactions containing a bundle that has multiple entries
trying to delete the same resource caused a 500 internal error
</action>
</release>
<release version="1.5" date="2016-04-20">
<action type="fix" issue="339">