Handle case where base hasn't got a snapshot generating snapshots
This commit is contained in:
parent
2cdd92868b
commit
236cf06946
|
@ -134,7 +134,7 @@ public class ProfilePathProcessor {
|
||||||
null);
|
null);
|
||||||
|
|
||||||
|
|
||||||
getInstance(profileUtilities)
|
getInstance(profileUtilities)
|
||||||
.withResult(derived.getSnapshot())
|
.withResult(derived.getSnapshot())
|
||||||
.withDifferential(differential)
|
.withDifferential(differential)
|
||||||
.withBaseLimit(baseSnapshot.getElement().size() - 1)
|
.withBaseLimit(baseSnapshot.getElement().size() - 1)
|
||||||
|
@ -607,8 +607,13 @@ public class ProfilePathProcessor {
|
||||||
}
|
}
|
||||||
if (src == null)
|
if (src == null)
|
||||||
throw new DefinitionException(profileUtilities.getContext().formatMessage(I18nConstants.UNABLE_TO_FIND_ELEMENT__IN_, eid, firstTypeProfile.getValue()));
|
throw new DefinitionException(profileUtilities.getContext().formatMessage(I18nConstants.UNABLE_TO_FIND_ELEMENT__IN_, eid, firstTypeProfile.getValue()));
|
||||||
} else
|
} else {
|
||||||
src = firstTypeStructureDefinition.getSnapshot().getElement().get(0);
|
if (firstTypeStructureDefinition.getSnapshot().getElement().isEmpty()) {
|
||||||
|
throw new FHIRException(profileUtilities.getContext().formatMessage(I18nConstants.SNAPSHOT_IS_EMPTY, firstTypeStructureDefinition.getVersionedUrl(), "Source for first element"));
|
||||||
|
} else {
|
||||||
|
src = firstTypeStructureDefinition.getSnapshot().getElement().get(0);
|
||||||
|
}
|
||||||
|
}
|
||||||
template = src.copy().setPath(currentBase.getPath());
|
template = src.copy().setPath(currentBase.getPath());
|
||||||
template.setSliceName(null);
|
template.setSliceName(null);
|
||||||
// temporary work around
|
// temporary work around
|
||||||
|
|
|
@ -621,7 +621,14 @@ public class ProfileUtilities extends TranslatingUtilities {
|
||||||
if (!base.getType().equals(derived.getType()) && derived.getDerivation() == TypeDerivationRule.CONSTRAINT) {
|
if (!base.getType().equals(derived.getType()) && derived.getDerivation() == TypeDerivationRule.CONSTRAINT) {
|
||||||
throw new DefinitionException(context.formatMessage(I18nConstants.BASE__DERIVED_PROFILES_HAVE_DIFFERENT_TYPES____VS___, base.getUrl(), base.getType(), derived.getUrl(), derived.getType()));
|
throw new DefinitionException(context.formatMessage(I18nConstants.BASE__DERIVED_PROFILES_HAVE_DIFFERENT_TYPES____VS___, base.getUrl(), base.getType(), derived.getUrl(), derived.getType()));
|
||||||
}
|
}
|
||||||
|
if (!base.hasSnapshot()) {
|
||||||
|
StructureDefinition sdb = context.fetchResource(StructureDefinition.class, base.getBaseDefinition());
|
||||||
|
if (sdb == null)
|
||||||
|
throw new DefinitionException(context.formatMessage(I18nConstants.UNABLE_TO_FIND_BASE__FOR_, base.getBaseDefinition(), base.getUrl()));
|
||||||
|
checkNotGenerating(sdb, "an extension base");
|
||||||
|
generateSnapshot(sdb, base, base.getUrl(), (sdb.hasWebPath()) ? Utilities.extractBaseUrl(sdb.getWebPath()) : webUrl, base.getName());
|
||||||
|
|
||||||
|
}
|
||||||
fixTypeOfResourceId(base);
|
fixTypeOfResourceId(base);
|
||||||
|
|
||||||
if (snapshotStack.contains(derived.getUrl())) {
|
if (snapshotStack.contains(derived.getUrl())) {
|
||||||
|
@ -810,7 +817,7 @@ public class ProfileUtilities extends TranslatingUtilities {
|
||||||
}
|
}
|
||||||
if (!slice.checkMinMax()) {
|
if (!slice.checkMinMax()) {
|
||||||
String msg = "The slice definition for "+slice.getFocus().getId()+" has a maximum of "+slice.getFocus().getMax()+" which is less than the minimum of "+slice.getFocus().getMin();
|
String msg = "The slice definition for "+slice.getFocus().getId()+" has a maximum of "+slice.getFocus().getMax()+" which is less than the minimum of "+slice.getFocus().getMin();
|
||||||
messages.add(new ValidationMessage(Source.ProfileValidator, ValidationMessage.IssueType.VALUE, url+"#"+slice.getFocus().getId(), msg, ValidationMessage.IssueSeverity.WARNING));
|
messages.add(new ValidationMessage(Source.ProfileValidator, ValidationMessage.IssueType.VALUE, url+"#"+"#"+slice.getFocus().getId(), msg, ValidationMessage.IssueSeverity.WARNING));
|
||||||
}
|
}
|
||||||
slices.remove(s);
|
slices.remove(s);
|
||||||
}
|
}
|
||||||
|
@ -2289,7 +2296,7 @@ public class ProfileUtilities extends TranslatingUtilities {
|
||||||
}
|
}
|
||||||
if (profile==null) {
|
if (profile==null) {
|
||||||
profile = source.getType().size() == 1 && source.getTypeFirstRep().hasProfile() ? context.fetchResource(StructureDefinition.class, source.getTypeFirstRep().getProfile().get(0).getValue(), derivedSrc) : null;
|
profile = source.getType().size() == 1 && source.getTypeFirstRep().hasProfile() ? context.fetchResource(StructureDefinition.class, source.getTypeFirstRep().getProfile().get(0).getValue(), derivedSrc) : null;
|
||||||
if (profile != null && !"Extension".equals(profile.getType()) && profile.getKind() != StructureDefinitionKind.RESOURCE) {
|
if (profile != null && !"Extension".equals(profile.getType()) && profile.getKind() != StructureDefinitionKind.RESOURCE && profile.getKind() != StructureDefinitionKind.LOGICAL) {
|
||||||
profile = null;
|
profile = null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -4379,4 +4386,8 @@ public class ProfileUtilities extends TranslatingUtilities {
|
||||||
return messages;
|
return messages;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static boolean isResourceBoundary(ElementDefinition ed) {
|
||||||
|
return ed.getType().size() == 1 && "Resource".equals(ed.getTypeFirstRep().getCode());
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue