mirror of
https://github.com/hapifhir/org.hl7.fhir.core.git
synced 2025-03-09 14:31:17 +00:00
fix up parsing of logical models
This commit is contained in:
parent
798a93bbec
commit
957dc3f733
@ -142,26 +142,60 @@ public abstract class ParserBase {
|
|||||||
|
|
||||||
|
|
||||||
protected StructureDefinition getDefinition(List<ValidationMessage> errors, int line, int col, String ns, String name) throws FHIRFormatError {
|
protected StructureDefinition getDefinition(List<ValidationMessage> errors, int line, int col, String ns, String name) throws FHIRFormatError {
|
||||||
if (ns == null) {
|
if (logical != null) {
|
||||||
logError(errors, ValidationMessage.NO_RULE_DATE, line, col, name, IssueType.STRUCTURE, context.formatMessage(I18nConstants.THIS__CANNOT_BE_PARSED_AS_A_FHIR_OBJECT_NO_NAMESPACE, name), IssueSeverity.FATAL);
|
String expectedName = ToolingExtensions.readStringExtension(logical, "http://hl7.org/fhir/StructureDefinition/elementdefinition-name");
|
||||||
return null;
|
if (expectedName == null) {
|
||||||
}
|
expectedName = logical.getType();
|
||||||
if (name == null) {
|
|
||||||
logError(errors, ValidationMessage.NO_RULE_DATE, line, col, name, IssueType.STRUCTURE, context.formatMessage(I18nConstants.THIS_CANNOT_BE_PARSED_AS_A_FHIR_OBJECT_NO_NAME), IssueSeverity.FATAL);
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
for (StructureDefinition sd : context.fetchResourcesByType(StructureDefinition.class)) {
|
|
||||||
if (sd.getDerivation() == TypeDerivationRule.SPECIALIZATION && !sd.getUrl().startsWith("http://hl7.org/fhir/StructureDefinition/de-")) {
|
|
||||||
String type = urlTail(sd.getType());
|
|
||||||
if(name.equals(type) && (ns == null || ns.equals(FormatUtilities.FHIR_NS)) && !ToolingExtensions.hasExtension(sd, "http://hl7.org/fhir/StructureDefinition/elementdefinition-namespace"))
|
|
||||||
return sd;
|
|
||||||
String sns = ToolingExtensions.readStringExtension(sd, "http://hl7.org/fhir/StructureDefinition/elementdefinition-namespace");
|
|
||||||
if ((name.equals(type) || name.equals(sd.getName())) && ns != null && ns.equals(sns))
|
|
||||||
return sd;
|
|
||||||
}
|
}
|
||||||
|
String expectedNamespace = ToolingExtensions.readStringExtension(logical, "http://hl7.org/fhir/StructureDefinition/elementdefinition-namespace");
|
||||||
|
if (matchesNamespace(expectedNamespace, ns) && matchesName(expectedName, name)) {
|
||||||
|
return logical;
|
||||||
|
} else {
|
||||||
|
if (expectedNamespace == null && ns == null) {
|
||||||
|
logError(errors, ValidationMessage.NO_RULE_DATE, line, col, name, IssueType.STRUCTURE, context.formatMessage(I18nConstants.LOGICAL_MODEL_NAME_MISMATCH, name, expectedName), IssueSeverity.FATAL);
|
||||||
|
} else {
|
||||||
|
logError(errors, ValidationMessage.NO_RULE_DATE, line, col, name, IssueType.STRUCTURE, context.formatMessage(I18nConstants.LOGICAL_MODEL_QNAME_MISMATCH, qn(ns, name), qn(expectedNamespace, expectedName)), IssueSeverity.FATAL);
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (ns == null) {
|
||||||
|
logError(errors, ValidationMessage.NO_RULE_DATE, line, col, name, IssueType.STRUCTURE, context.formatMessage(I18nConstants.THIS__CANNOT_BE_PARSED_AS_A_FHIR_OBJECT_NO_NAMESPACE, name), IssueSeverity.FATAL);
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
if (name == null) {
|
||||||
|
logError(errors, ValidationMessage.NO_RULE_DATE, line, col, name, IssueType.STRUCTURE, context.formatMessage(I18nConstants.THIS_CANNOT_BE_PARSED_AS_A_FHIR_OBJECT_NO_NAME), IssueSeverity.FATAL);
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
for (StructureDefinition sd : context.fetchResourcesByType(StructureDefinition.class)) {
|
||||||
|
if (sd.getDerivation() == TypeDerivationRule.SPECIALIZATION && !sd.getUrl().startsWith("http://hl7.org/fhir/StructureDefinition/de-")) {
|
||||||
|
String type = urlTail(sd.getType());
|
||||||
|
if(name.equals(type) && (ns == null || ns.equals(FormatUtilities.FHIR_NS)) && !ToolingExtensions.hasExtension(sd, "http://hl7.org/fhir/StructureDefinition/elementdefinition-namespace"))
|
||||||
|
return sd;
|
||||||
|
String sns = ToolingExtensions.readStringExtension(sd, "http://hl7.org/fhir/StructureDefinition/elementdefinition-namespace");
|
||||||
|
if ((name.equals(type) || name.equals(sd.getName())) && ns != null && ns.equals(sns))
|
||||||
|
return sd;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
logError(errors, ValidationMessage.NO_RULE_DATE, line, col, name, IssueType.STRUCTURE, context.formatMessage(I18nConstants.THIS_DOES_NOT_APPEAR_TO_BE_A_FHIR_RESOURCE_UNKNOWN_NAMESPACENAME_, (ns == null ? "(none)" : ns), name), IssueSeverity.FATAL);
|
||||||
|
return null;
|
||||||
}
|
}
|
||||||
logError(errors, ValidationMessage.NO_RULE_DATE, line, col, name, IssueType.STRUCTURE, context.formatMessage(I18nConstants.THIS_DOES_NOT_APPEAR_TO_BE_A_FHIR_RESOURCE_UNKNOWN_NAMESPACENAME_, ns, name), IssueSeverity.FATAL);
|
}
|
||||||
return null;
|
|
||||||
|
private Object qn(String ns, String name) {
|
||||||
|
return ns == null ? name : ns+"::"+name;
|
||||||
|
}
|
||||||
|
|
||||||
|
private boolean matchesNamespace(String expectedNamespace, String ns) {
|
||||||
|
if (expectedNamespace == null) {
|
||||||
|
return ns == null || "noNamespace".equals(ns);
|
||||||
|
} else {
|
||||||
|
return expectedNamespace.equals(ns);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private boolean matchesName(String expectedName, String name) {
|
||||||
|
return expectedName != null && expectedName.equals(name);
|
||||||
}
|
}
|
||||||
|
|
||||||
private String urlTail(String type) {
|
private String urlTail(String type) {
|
||||||
|
@ -541,7 +541,7 @@ public class XmlParser extends ParserBase {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private String convertForDateFormatToExternal(String fmt, String av) throws FHIRException {
|
private String convertForDateFormatToExternal(String fmt, String av) throws FHIRException {
|
||||||
if ("v3".equals(fmt)) {
|
if ("v3".equals(fmt) || "YYYYMMDDHHMMSS.UUUU[+|-ZZzz]".equals(fmt)) {
|
||||||
DateTimeType d = new DateTimeType(av);
|
DateTimeType d = new DateTimeType(av);
|
||||||
return d.getAsV3();
|
return d.getAsV3();
|
||||||
} else
|
} else
|
||||||
|
@ -35388,7 +35388,7 @@ public class JsonParser extends JsonParserBase {
|
|||||||
return parseVisionPrescription(json);
|
return parseVisionPrescription(json);
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
throw new FHIRFormatError("Unknown.Unrecognised resource type '"+t+"' (in property 'resourceType')");
|
throw new FHIRFormatError("Unknown/Unrecognised resource type '"+t+"' (in property 'resourceType')");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user