Refine model for storing multiple code versions.
This commit is contained in:
parent
2126c5c556
commit
dc786eaff9
|
@ -141,6 +141,7 @@ ca.uhn.fhir.jpa.binstore.BinaryAccessProvider.unknownType=Content in resource of
|
||||||
|
|
||||||
|
|
||||||
ca.uhn.fhir.jpa.term.BaseTermReadSvcImpl.cannotCreateDuplicateCodeSystemUrl=Can not create multiple CodeSystem resources with CodeSystem.url "{0}", already have one with resource ID: {1}
|
ca.uhn.fhir.jpa.term.BaseTermReadSvcImpl.cannotCreateDuplicateCodeSystemUrl=Can not create multiple CodeSystem resources with CodeSystem.url "{0}", already have one with resource ID: {1}
|
||||||
|
ca.uhn.fhir.jpa.term.BaseTermReadSvcImpl.cannotCreateDuplicateCodeSystemUrlAndVersion=Can not create multiple CodeSystem resources with CodeSystem.url "{0}" and CodeSystem.version "{1}", already have one with resource ID: {2}
|
||||||
ca.uhn.fhir.jpa.term.BaseTermReadSvcImpl.cannotCreateDuplicateConceptMapUrl=Can not create multiple ConceptMap resources with ConceptMap.url "{0}", already have one with resource ID: {1}
|
ca.uhn.fhir.jpa.term.BaseTermReadSvcImpl.cannotCreateDuplicateConceptMapUrl=Can not create multiple ConceptMap resources with ConceptMap.url "{0}", already have one with resource ID: {1}
|
||||||
ca.uhn.fhir.jpa.term.BaseTermReadSvcImpl.cannotCreateDuplicateValueSetUrl=Can not create multiple ValueSet resources with ValueSet.url "{0}", already have one with resource ID: {1}
|
ca.uhn.fhir.jpa.term.BaseTermReadSvcImpl.cannotCreateDuplicateValueSetUrl=Can not create multiple ValueSet resources with ValueSet.url "{0}", already have one with resource ID: {1}
|
||||||
ca.uhn.fhir.jpa.term.BaseTermReadSvcImpl.expansionTooLarge=Expansion of ValueSet produced too many codes (maximum {0}) - Operation aborted!
|
ca.uhn.fhir.jpa.term.BaseTermReadSvcImpl.expansionTooLarge=Expansion of ValueSet produced too many codes (maximum {0}) - Operation aborted!
|
||||||
|
|
|
@ -294,7 +294,8 @@ public class TermCodeSystemStorageSvcImpl implements ITermCodeSystemStorageSvc {
|
||||||
if (termCodeSystem != null) {
|
if (termCodeSystem != null) {
|
||||||
TermCodeSystemVersion codeSystemVersion = getExistingTermCodeSystemVersion(termCodeSystem.getPid(), theCodeSystem.getVersion());
|
TermCodeSystemVersion codeSystemVersion = getExistingTermCodeSystemVersion(termCodeSystem.getPid(), theCodeSystem.getVersion());
|
||||||
if (codeSystemVersion != null) {
|
if (codeSystemVersion != null) {
|
||||||
getOrCreateTermCodeSystem(codeSystemResourcePid, theCodeSystem.getUrl(), theCodeSystem.getUrl(), theResourceEntity);
|
TermCodeSystem myCodeSystemEntity = getOrCreateTermCodeSystem(codeSystemResourcePid, theCodeSystem.getUrl(), theCodeSystem.getUrl(), theResourceEntity);
|
||||||
|
validateCodeSystemVersionUpdate(myCodeSystemEntity,theCodeSystem.getUrl(), theCodeSystem.getVersion(), theResourceEntity);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -348,6 +349,12 @@ public class TermCodeSystemStorageSvcImpl implements ITermCodeSystemStorageSvc {
|
||||||
existing = getExistingTermCodeSystemVersion(existingCodeSystem.getPid(), theSystemVersionId);
|
existing = getExistingTermCodeSystemVersion(existingCodeSystem.getPid(), theSystemVersionId);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Get CodeSystem and validate CodeSystemVersion
|
||||||
|
*/
|
||||||
|
TermCodeSystem codeSystem = getOrCreateTermCodeSystem(theCodeSystemResourcePid, theSystemUri, theSystemName, theCodeSystemResourceTable);
|
||||||
|
validateCodeSystemVersionUpdate(codeSystem, theSystemUri, theSystemVersionId, theCodeSystemResourceTable);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Delete version being replaced.
|
* Delete version being replaced.
|
||||||
*/
|
*/
|
||||||
|
@ -363,8 +370,6 @@ public class TermCodeSystemStorageSvcImpl implements ITermCodeSystemStorageSvc {
|
||||||
* Do the upload
|
* Do the upload
|
||||||
*/
|
*/
|
||||||
|
|
||||||
TermCodeSystem codeSystem = getOrCreateTermCodeSystem(theCodeSystemResourcePid, theSystemUri, theSystemName, theCodeSystemResourceTable);
|
|
||||||
|
|
||||||
theCodeSystemVersion.setCodeSystem(codeSystem);
|
theCodeSystemVersion.setCodeSystem(codeSystem);
|
||||||
|
|
||||||
theCodeSystemVersion.setCodeSystemDisplayName(theSystemName);
|
theCodeSystemVersion.setCodeSystemDisplayName(theSystemName);
|
||||||
|
@ -470,10 +475,9 @@ public class TermCodeSystemStorageSvcImpl implements ITermCodeSystemStorageSvc {
|
||||||
ourLog.info(" * Removing code system version {} as current version of code system {}", theCodeSystemVersionPid, codeSystem.getPid());
|
ourLog.info(" * Removing code system version {} as current version of code system {}", theCodeSystemVersionPid, codeSystem.getPid());
|
||||||
codeSystem.setCurrentVersion(null);
|
codeSystem.setCurrentVersion(null);
|
||||||
myCodeSystemDao.save(codeSystem);
|
myCodeSystemDao.save(codeSystem);
|
||||||
|
myCodeSystemDao.flush();
|
||||||
}
|
}
|
||||||
|
|
||||||
myConceptDao.flush();
|
|
||||||
|
|
||||||
ourLog.info(" * Deleting code system version");
|
ourLog.info(" * Deleting code system version");
|
||||||
myCodeSystemVersionDao.delete(theCodeSystemVersionPid);
|
myCodeSystemVersionDao.delete(theCodeSystemVersionPid);
|
||||||
myCodeSystemVersionDao.flush();
|
myCodeSystemVersionDao.flush();
|
||||||
|
@ -677,12 +681,6 @@ public class TermCodeSystemStorageSvcImpl implements ITermCodeSystemStorageSvc {
|
||||||
codeSystem = new TermCodeSystem();
|
codeSystem = new TermCodeSystem();
|
||||||
}
|
}
|
||||||
codeSystem.setResource(theCodeSystemResourceTable);
|
codeSystem.setResource(theCodeSystemResourceTable);
|
||||||
} else {
|
|
||||||
if (!ObjectUtil.equals(codeSystem.getResource().getId(), theCodeSystemResourceTable.getId())) {
|
|
||||||
String msg = myContext.getLocalizer().getMessage(BaseTermReadSvcImpl.class, "cannotCreateDuplicateCodeSystemUrl", theSystemUri,
|
|
||||||
codeSystem.getResource().getIdDt().toUnqualifiedVersionless().getValue());
|
|
||||||
throw new UnprocessableEntityException(msg);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
codeSystem.setCodeSystemUri(theSystemUri);
|
codeSystem.setCodeSystemUri(theSystemUri);
|
||||||
|
@ -691,6 +689,27 @@ public class TermCodeSystemStorageSvcImpl implements ITermCodeSystemStorageSvc {
|
||||||
return codeSystem;
|
return codeSystem;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void validateCodeSystemVersionUpdate(TermCodeSystem theCodeSystem, String theSystemUri, String theSystemVersionId, ResourceTable theCodeSystemResourceTable) {
|
||||||
|
// Check if CodeSystemVersion entity already exists.
|
||||||
|
TermCodeSystemVersion codeSystemVersionEntity;
|
||||||
|
String msg;
|
||||||
|
if (theSystemVersionId == null) {
|
||||||
|
codeSystemVersionEntity = myCodeSystemVersionDao.findByCodeSystemPidVersionIsNull(theCodeSystem.getPid());
|
||||||
|
msg = myContext.getLocalizer().getMessage(BaseTermReadSvcImpl.class, "cannotCreateDuplicateCodeSystemUrl", theSystemUri,
|
||||||
|
theCodeSystem.getResource().getIdDt().toUnqualifiedVersionless().getValue());
|
||||||
|
} else {
|
||||||
|
codeSystemVersionEntity = myCodeSystemVersionDao.findByCodeSystemPidAndVersion(theCodeSystem.getPid(), theSystemVersionId);
|
||||||
|
msg = myContext.getLocalizer().getMessage(BaseTermReadSvcImpl.class, "cannotCreateDuplicateCodeSystemUrlAndVersion", theSystemUri,
|
||||||
|
theSystemVersionId, theCodeSystem.getResource().getIdDt().toUnqualifiedVersionless().getValue());
|
||||||
|
}
|
||||||
|
// Throw exception if the CodeSystemVersion is being duplicated.
|
||||||
|
if (codeSystemVersionEntity != null) {
|
||||||
|
if (!ObjectUtil.equals(codeSystemVersionEntity.getResource().getId(), theCodeSystemResourceTable.getId())) {
|
||||||
|
throw new UnprocessableEntityException(msg);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private void populateCodeSystemVersionProperties(TermCodeSystemVersion theCodeSystemVersion, CodeSystem theCodeSystemResource, ResourceTable theResourceTable) {
|
private void populateCodeSystemVersionProperties(TermCodeSystemVersion theCodeSystemVersion, CodeSystem theCodeSystemResource, ResourceTable theResourceTable) {
|
||||||
theCodeSystemVersion.setResource(theResourceTable);
|
theCodeSystemVersion.setResource(theResourceTable);
|
||||||
theCodeSystemVersion.setCodeSystemDisplayName(theCodeSystemResource.getName());
|
theCodeSystemVersion.setCodeSystemDisplayName(theCodeSystemResource.getName());
|
||||||
|
|
|
@ -1927,7 +1927,7 @@ public class TerminologySvcImplR4Test extends BaseTermR4Test {
|
||||||
codeSystem
|
codeSystem
|
||||||
.addConcept().setCode("C").setDisplay("Code C");
|
.addConcept().setCode("C").setDisplay("Code C");
|
||||||
|
|
||||||
myCodeSystemDao.update(codeSystem, mySrd).getId().toUnqualified();
|
myCodeSystemDao.create(codeSystem, mySrd).getId().toUnqualified();
|
||||||
codes = myTermSvc.findCodesBelow(id.getIdPartAsLong(), id.getVersionIdPartAsLong(), "C");
|
codes = myTermSvc.findCodesBelow(id.getIdPartAsLong(), id.getVersionIdPartAsLong(), "C");
|
||||||
assertThat(toCodes(codes), containsInAnyOrder("C"));
|
assertThat(toCodes(codes), containsInAnyOrder("C"));
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue