Merge pull request #1522 from hapifhir/2023-12-gg-logical-container
2023 12 gg logical container
This commit is contained in:
commit
319c3a4b7d
|
@ -72,9 +72,9 @@ public class Property {
|
|||
}
|
||||
|
||||
public String getXmlName() {
|
||||
if (definition.hasExtension("http://hl7.org/fhir/StructureDefinition/elementdefinition-xml-name")) {
|
||||
if (definition.hasExtension(ToolingExtensions.EXT_XML_NAME)) {
|
||||
return ToolingExtensions.readStringExtension(definition,
|
||||
"http://hl7.org/fhir/StructureDefinition/elementdefinition-xml-name");
|
||||
ToolingExtensions.EXT_XML_NAME);
|
||||
} else {
|
||||
return getName();
|
||||
}
|
||||
|
|
|
@ -145,7 +145,7 @@ public abstract class ParserBase {
|
|||
|
||||
protected StructureDefinition getDefinition(List<ValidationMessage> errors, int line, int col, String ns, String name) throws FHIRFormatError {
|
||||
if (logical != null) {
|
||||
String expectedName = ToolingExtensions.readStringExtension(logical, "http://hl7.org/fhir/StructureDefinition/elementdefinition-xml-name");
|
||||
String expectedName = ToolingExtensions.readStringExtension(logical, ToolingExtensions.EXT_XML_NAME);
|
||||
if (expectedName == null) {
|
||||
expectedName = logical.getType();
|
||||
if (Utilities.isAbsoluteUrl(expectedName)) {
|
||||
|
|
|
@ -6017,7 +6017,7 @@ public class FHIRPathEngine {
|
|||
if (url.startsWith(TypeDetails.FP_NS)) {
|
||||
return;
|
||||
} else {
|
||||
throw makeException(expr, I18nConstants.FHIRPATH_UNKNOWN_TYPE, url, "getChildTypesByName");
|
||||
throw makeException(expr, I18nConstants.FHIRPATH_UNKNOWN_TYPE, url, "getChildTypesByName#1");
|
||||
}
|
||||
}
|
||||
List<StructureDefinition> sdl = new ArrayList<StructureDefinition>();
|
||||
|
@ -6028,14 +6028,14 @@ public class FHIRPathEngine {
|
|||
if (m.fixedType != null) {
|
||||
StructureDefinition dt = worker.fetchResource(StructureDefinition.class, ProfileUtilities.sdNs(m.fixedType, null), sd);
|
||||
if (dt == null) {
|
||||
throw makeException(expr, I18nConstants.FHIRPATH_UNKNOWN_TYPE, ProfileUtilities.sdNs(m.fixedType, null), "getChildTypesByName");
|
||||
throw makeException(expr, I18nConstants.FHIRPATH_UNKNOWN_TYPE, ProfileUtilities.sdNs(m.fixedType, null), "getChildTypesByName#2");
|
||||
}
|
||||
sdl.add(dt);
|
||||
} else
|
||||
for (TypeRefComponent t : m.definition.getType()) {
|
||||
StructureDefinition dt = worker.fetchResource(StructureDefinition.class, ProfileUtilities.sdNs(t.getCode(), null));
|
||||
if (dt == null) {
|
||||
throw makeException(expr, I18nConstants.FHIRPATH_UNKNOWN_TYPE, ProfileUtilities.sdNs(t.getCode(), null), "getChildTypesByName");
|
||||
throw makeException(expr, I18nConstants.FHIRPATH_UNKNOWN_TYPE, ProfileUtilities.sdNs(t.getCode(), null), "getChildTypesByName#3");
|
||||
}
|
||||
addTypeAndDescendents(sdl, dt, cu.allStructures());
|
||||
// also add any descendant types
|
||||
|
|
|
@ -1524,6 +1524,19 @@ public class StructureDefinitionRenderer extends ResourceRenderer {
|
|||
c.addPiece(gen.new Piece(null, "Instances of this type are validated using an unknown approach: "+ps, null).addStyle("font-weight:bold"));
|
||||
}
|
||||
}
|
||||
Extension lc = ToolingExtensions.getExtension(profile, ToolingExtensions.EXT_LOGICAL_CONTAINER);
|
||||
if (lc != null && lc.hasValueUriType()) {
|
||||
if (!c.getPieces().isEmpty()) { c.addPiece(gen.new Piece("br")); }
|
||||
c.getPieces().add(gen.new Piece(null, translate("sd.table", "Logical Container")+": ", "The root class that contains instances of this class").addStyle("font-weight:bold"));
|
||||
|
||||
String uri = lc.getValue().primitiveValue();
|
||||
StructureDefinition lct = context.getContext().fetchTypeDefinition(uri);
|
||||
if (lct != null) {
|
||||
c.addPiece(gen.new Piece(lct.getWebPath(), lct.present(), null));
|
||||
} else {
|
||||
c.addPiece(gen.new Piece(null, uri, null));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if (definition != null) {
|
||||
|
@ -3583,6 +3596,18 @@ public class StructureDefinitionRenderer extends ResourceRenderer {
|
|||
} else {
|
||||
tableRow(tbl, "Logical Model", null, strikethrough, "Instances of this logical model cannot be the target of a Reference");
|
||||
}
|
||||
|
||||
Extension lc = ToolingExtensions.getExtension(sd, ToolingExtensions.EXT_LOGICAL_CONTAINER);
|
||||
if (lc != null && lc.hasValueUriType()) {
|
||||
String uri = lc.getValue().primitiveValue();
|
||||
StructureDefinition lct = context.getContext().fetchTypeDefinition(uri);
|
||||
if (lct != null) {
|
||||
tableRowLink(tbl, "Logical Container", null, strikethrough, lct.present(), lct.getWebPath());
|
||||
} else {
|
||||
tableRow(tbl, "Logical Container", null, strikethrough, uri);
|
||||
}
|
||||
}
|
||||
|
||||
String ps = ToolingExtensions.readStringExtension(sd, ToolingExtensions.EXT_PROFILE_STYLE);
|
||||
if (ps != null) {
|
||||
if ("cda".equals(ps)) {
|
||||
|
@ -3984,6 +4009,17 @@ public class StructureDefinitionRenderer extends ResourceRenderer {
|
|||
}
|
||||
}
|
||||
|
||||
private void tableRowLink(XhtmlNode x, String name, String defRef, boolean strikethrough, String text, String link) throws IOException {
|
||||
if (!Utilities.noString(text)) {
|
||||
var tr = x.tr();
|
||||
if (strikethrough) {
|
||||
tr.style("text-decoration: line-through");
|
||||
}
|
||||
addFirstCell(name, defRef, tr);
|
||||
tr.td().ah(link).tx(text);
|
||||
}
|
||||
}
|
||||
|
||||
private void addFirstCell(String name, String defRef, XhtmlNode tr) {
|
||||
var td = tr.td();
|
||||
if (name.length() <= 16) {
|
||||
|
|
|
@ -143,6 +143,7 @@ public class ToolingExtensions {
|
|||
public static final String EXT_BINDING_STYLE = "http://hl7.org/fhir/tools/StructureDefinition/elementdefinition-binding-style";
|
||||
public static final String EXT_EXTENSION_STYLE = "http://hl7.org/fhir/tools/StructureDefinition/elementdefinition-extension-style";
|
||||
public static final String EXT_LOGICAL_TARGET = "http://hl7.org/fhir/tools/StructureDefinition/logical-target";
|
||||
public static final String EXT_LOGICAL_CONTAINER = "http://hl7.org/fhir/tools/StructureDefinition/logical-container";
|
||||
public static final String EXT_PROFILE_MAPPING = "http://hl7.org/fhir/tools/StructureDefinition/profile-mapping";
|
||||
public static final String EXT_CS_ALTERNATE_USE = "http://hl7.org/fhir/StructureDefinition/alternate-code-use";
|
||||
public static final String EXT_CS_ALTERNATE_STATUS = "http://hl7.org/fhir/StructureDefinition/alternate-code-status";
|
||||
|
|
|
@ -7048,7 +7048,7 @@ public class InstanceValidator extends BaseValidator implements IResourceValidat
|
|||
return true;
|
||||
}
|
||||
if (format == FhirFormat.XML) {
|
||||
String xn = ToolingExtensions.readStringExtension(defn, "http://hl7.org/fhir/StructureDefinition/elementdefinition-xml-name");
|
||||
String xn = ToolingExtensions.readStringExtension(defn, ToolingExtensions.EXT_XML_NAME);
|
||||
if (resourceName.equals(xn)) {
|
||||
return true;
|
||||
}
|
||||
|
|
|
@ -576,6 +576,9 @@ public class StructureDefinitionValidator extends BaseValidator {
|
|||
StructureDefinition sd = context.fetchTypeDefinition(rootPath);
|
||||
if (sd != null && sd.getKind() == StructureDefinitionKind.RESOURCE) {
|
||||
fpe.checkOnTypes(vc, rootPath, types, fpe.parse(exp), warnings);
|
||||
} else if (sd != null && sd.getKind() == StructureDefinitionKind.LOGICAL) {
|
||||
String tn = ToolingExtensions.readStringExtension(sd, ToolingExtensions.EXT_LOGICAL_CONTAINER);
|
||||
fpe.checkOnTypes(vc, tn == null ? rootPath : tn, types, fpe.parse(exp), warnings);
|
||||
} else {
|
||||
fpe.checkOnTypes(vc, "DomainResource", types, fpe.parse(exp), warnings);
|
||||
}
|
||||
|
@ -1078,7 +1081,7 @@ public class StructureDefinitionValidator extends BaseValidator {
|
|||
}
|
||||
}
|
||||
}
|
||||
if (ToolingExtensions.readBoolExtension(t, "http://hl7.org/fhir/tools/StructureDefinition/logical-target")) {
|
||||
if (ToolingExtensions.readBoolExtension(t, ToolingExtensions.EXT_LOGICAL_TARGET)) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
|
|
Loading…
Reference in New Issue