Fix for Core issue #95 - recursion on profile definition
This commit is contained in:
parent
ad82386a9c
commit
b828169317
|
@ -533,9 +533,6 @@ public class ProfileUtilities extends TranslatingUtilities {
|
||||||
}
|
}
|
||||||
baseSnapshot = cloneSnapshot(baseSnapshot, base.getType(), derivedType);
|
baseSnapshot = cloneSnapshot(baseSnapshot, base.getType(), derivedType);
|
||||||
}
|
}
|
||||||
if (derived.getUrl().equals("http://sharedhealth.exchange/fhir/StructureDefinition/profile-operationoutcome")) {
|
|
||||||
debug = true;
|
|
||||||
}
|
|
||||||
processPaths("", derived.getSnapshot(), baseSnapshot, diff, baseCursor, diffCursor, baseSnapshot.getElement().size()-1,
|
processPaths("", derived.getSnapshot(), baseSnapshot, diff, baseCursor, diffCursor, baseSnapshot.getElement().size()-1,
|
||||||
derived.getDifferential().hasElement() ? derived.getDifferential().getElement().size()-1 : -1, url, webUrl, derived.present(), null, null, false, base.getUrl(), null, false, null, new ArrayList<ElementRedirection>(), base);
|
derived.getDifferential().hasElement() ? derived.getDifferential().getElement().size()-1 : -1, url, webUrl, derived.present(), null, null, false, base.getUrl(), null, false, null, new ArrayList<ElementRedirection>(), base);
|
||||||
if (derived.getDerivation() == TypeDerivationRule.SPECIALIZATION) {
|
if (derived.getDerivation() == TypeDerivationRule.SPECIALIZATION) {
|
||||||
|
@ -915,8 +912,13 @@ public class ProfileUtilities extends TranslatingUtilities {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (sd != null) {
|
if (sd != null) {
|
||||||
checkNotGenerating(sd, "an extension definition");
|
if (isGenerating(sd)) {
|
||||||
if (!sd.hasSnapshot()) {
|
// this is a special case, because we're only going to access the first element, and we can rely on the fact that it's already populated.
|
||||||
|
// but we check anyway
|
||||||
|
if (sd.getSnapshot().getElementFirstRep().isEmpty()) {
|
||||||
|
throw new FHIRException(context.formatMessage(I18nConstants.ATTEMPT_TO_USE_A_SNAPSHOT_ON_PROFILE__AS__BEFORE_IT_IS_GENERATED, sd.getUrl(), "Source for first element"));
|
||||||
|
}
|
||||||
|
} else if (!sd.hasSnapshot()) {
|
||||||
StructureDefinition sdb = context.fetchResource(StructureDefinition.class, sd.getBaseDefinition());
|
StructureDefinition sdb = context.fetchResource(StructureDefinition.class, sd.getBaseDefinition());
|
||||||
if (sdb == null)
|
if (sdb == null)
|
||||||
throw new DefinitionException(context.formatMessage(I18nConstants.UNABLE_TO_FIND_BASE__FOR_, sd.getBaseDefinition(), sd.getUrl()));
|
throw new DefinitionException(context.formatMessage(I18nConstants.UNABLE_TO_FIND_BASE__FOR_, sd.getBaseDefinition(), sd.getUrl()));
|
||||||
|
@ -1603,6 +1605,10 @@ public class ProfileUtilities extends TranslatingUtilities {
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private boolean isGenerating(StructureDefinition sd) {
|
||||||
|
return sd.hasUserData("profileutils.snapshot.generating");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
private void checkNotGenerating(StructureDefinition sd, String role) {
|
private void checkNotGenerating(StructureDefinition sd, String role) {
|
||||||
if (sd.hasUserData("profileutils.snapshot.generating")) {
|
if (sd.hasUserData("profileutils.snapshot.generating")) {
|
||||||
|
|
Loading…
Reference in New Issue