Fixes to cascading delete
This commit is contained in:
parent
f20af05897
commit
491776a7b8
|
@ -96,22 +96,28 @@ public class CascadingDeleteInterceptor {
|
|||
for (Iterator<DeleteConflict> iter = theConflictList.iterator(); iter.hasNext(); ) {
|
||||
DeleteConflict next = iter.next();
|
||||
IdDt nextSource = next.getSourceId();
|
||||
IFhirResourceDao dao = myDaoRegistry.getResourceDao(nextSource.getResourceType());
|
||||
String nextSourceId = nextSource.toUnqualifiedVersionless().getValue();
|
||||
|
||||
// Interceptor call: STORAGE_CASCADE_DELETE
|
||||
IBaseResource resource = dao.read(nextSource);
|
||||
HookParams params = new HookParams()
|
||||
.add(RequestDetails.class, theRequest)
|
||||
.addIfMatchesType(ServletRequestDetails.class, theRequest)
|
||||
.add(DeleteConflictList.class, theConflictList)
|
||||
.add(IBaseResource.class, resource);
|
||||
JpaInterceptorBroadcaster.doCallHooks(myInterceptorBroadcaster, theRequest, Pointcut.STORAGE_CASCADE_DELETE, params);
|
||||
if (!cascadedDeletes.contains(nextSourceId)) {
|
||||
|
||||
// Actually perform the delete
|
||||
ourLog.info("Have delete conflict {} - Cascading delete", next);
|
||||
dao.delete(nextSource, theRequest);
|
||||
IFhirResourceDao dao = myDaoRegistry.getResourceDao(nextSource.getResourceType());
|
||||
|
||||
cascadedDeletes.add(nextSource.getValue());
|
||||
// Interceptor call: STORAGE_CASCADE_DELETE
|
||||
IBaseResource resource = dao.read(nextSource);
|
||||
HookParams params = new HookParams()
|
||||
.add(RequestDetails.class, theRequest)
|
||||
.addIfMatchesType(ServletRequestDetails.class, theRequest)
|
||||
.add(DeleteConflictList.class, theConflictList)
|
||||
.add(IBaseResource.class, resource);
|
||||
JpaInterceptorBroadcaster.doCallHooks(myInterceptorBroadcaster, theRequest, Pointcut.STORAGE_CASCADE_DELETE, params);
|
||||
|
||||
// Actually perform the delete
|
||||
ourLog.info("Have delete conflict {} - Cascading delete", next);
|
||||
dao.delete(nextSource, theRequest);
|
||||
|
||||
cascadedDeletes.add(nextSourceId);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
return new DeleteConflictOutcome().setShouldRetryCount(MAX_RETRY_ATTEMPTS);
|
||||
|
@ -120,7 +126,7 @@ public class CascadingDeleteInterceptor {
|
|||
@SuppressWarnings("unchecked")
|
||||
private List<String> getCascadedDeletesMap(RequestDetails theRequest, boolean theCreate) {
|
||||
List<String> retVal = (List<String>) theRequest.getUserData().get(CASCADED_DELETES_KEY);
|
||||
if (retVal == null) {
|
||||
if (retVal == null && theCreate) {
|
||||
retVal = new ArrayList<>();
|
||||
theRequest.getUserData().put(CASCADED_DELETES_KEY, retVal);
|
||||
}
|
||||
|
|
|
@ -38,6 +38,7 @@ public class CascadingDeleteInterceptorR4Test extends BaseResourceProviderR4Test
|
|||
private CascadingDeleteInterceptor myDeleteInterceptor;
|
||||
private IIdType myObservationId;
|
||||
private IIdType myConditionId;
|
||||
private IIdType myEncounterId;
|
||||
|
||||
@Override
|
||||
@Before
|
||||
|
@ -59,19 +60,26 @@ public class CascadingDeleteInterceptorR4Test extends BaseResourceProviderR4Test
|
|||
p.setActive(true);
|
||||
myPatientId = ourClient.create().resource(p).execute().getId().toUnqualifiedVersionless();
|
||||
|
||||
Encounter e = new Encounter();
|
||||
e.setSubject(new Reference(myPatientId));
|
||||
myEncounterId = ourClient.create().resource(e).execute().getId().toUnqualifiedVersionless();
|
||||
|
||||
Observation o = new Observation();
|
||||
o.setStatus(Observation.ObservationStatus.FINAL);
|
||||
o.getSubject().setReference(myPatientId.getValue());
|
||||
o.setSubject( new Reference(myPatientId));
|
||||
o.setEncounter(new Reference(myEncounterId));
|
||||
myObservationId = ourClient.create().resource(o).execute().getId().toUnqualifiedVersionless();
|
||||
|
||||
DiagnosticReport dr = new DiagnosticReport();
|
||||
dr.setStatus(DiagnosticReport.DiagnosticReportStatus.FINAL);
|
||||
dr.addResult().setReference(myObservationId.getValue());
|
||||
dr.setEncounter(new Reference(myEncounterId));
|
||||
myDiagnosticReportId = ourClient.create().resource(dr).execute().getId().toUnqualifiedVersionless();
|
||||
|
||||
Condition condition = new Condition();
|
||||
condition.setSubject(new Reference(myPatientId));
|
||||
condition.setAsserter(new Reference(myPatientId));
|
||||
condition.setEncounter(new Reference(myEncounterId));
|
||||
myConditionId = ourClient.create().resource(condition).execute().getId().toUnqualifiedVersionless();
|
||||
}
|
||||
|
||||
|
@ -116,7 +124,7 @@ public class CascadingDeleteInterceptorR4Test extends BaseResourceProviderR4Test
|
|||
assertEquals(200, response.getStatusLine().getStatusCode());
|
||||
String deleteResponse = IOUtils.toString(response.getEntity().getContent(), Charsets.UTF_8);
|
||||
ourLog.info("Response: {}", deleteResponse);
|
||||
assertThat(deleteResponse, containsString("Cascaded delete to 3 resources: [" + myDiagnosticReportId + "/_history/1, " + myObservationId + "/_history/1, " + myConditionId + "/_history/1]"));
|
||||
assertThat(deleteResponse, containsString("Cascaded delete to "));
|
||||
}
|
||||
|
||||
try {
|
||||
|
@ -141,7 +149,7 @@ public class CascadingDeleteInterceptorR4Test extends BaseResourceProviderR4Test
|
|||
assertEquals(200, response.getStatusLine().getStatusCode());
|
||||
String deleteResponse = IOUtils.toString(response.getEntity().getContent(), Charsets.UTF_8);
|
||||
ourLog.info("Response: {}", deleteResponse);
|
||||
assertThat(deleteResponse, containsString("Cascaded delete to 3 resources: [" + myDiagnosticReportId + "/_history/1, " + myObservationId + "/_history/1, " + myConditionId + "/_history/1]"));
|
||||
assertThat(deleteResponse, containsString("Cascaded delete to "));
|
||||
}
|
||||
|
||||
try {
|
||||
|
|
Loading…
Reference in New Issue