From 4f99754e75bcca527c882cf8a5850bc8fd7c604d Mon Sep 17 00:00:00 2001 From: Grahame Grieve Date: Thu, 21 Nov 2024 20:35:57 +1100 Subject: [PATCH] suppress Json resourceType property in some logical models --- .../hl7/fhir/r5/elementmodel/JsonParser.java | 19 +++++++++++++++---- .../hl7/fhir/r5/utils/ToolingExtensions.java | 1 + 2 files changed, 16 insertions(+), 4 deletions(-) diff --git a/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/elementmodel/JsonParser.java b/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/elementmodel/JsonParser.java index 94e28b8af..a54dc128c 100644 --- a/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/elementmodel/JsonParser.java +++ b/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/elementmodel/JsonParser.java @@ -788,8 +788,9 @@ public class JsonParser extends ParserBase { } checkComposeComments(e); json.beginObject(); -// if (!isSuppressResourceType()) + if (!isSuppressResourceType(e.getProperty())) { prop("resourceType", e.getType(), null); + } Set done = new HashSet(); for (Element child : e.getChildren()) { compose(e.getName(), e, done, child); @@ -799,6 +800,15 @@ public class JsonParser extends ParserBase { osw.flush(); } + private boolean isSuppressResourceType(Property property) { + StructureDefinition sd = property.getStructure(); + if (sd != null && sd.hasExtension(ToolingExtensions.EXT_SUPPRESS_RESOURCE_TYPE)) { + return ToolingExtensions.readBoolExtension(sd, ToolingExtensions.EXT_SUPPRESS_RESOURCE_TYPE); + } else { + return false; + } + } + private void checkComposeComments(Element e) { for (String s : e.getComments()) { json.comment(s); @@ -814,8 +824,9 @@ public class JsonParser extends ParserBase { checkComposeComments(e); json.beginObject(); -// if (!isSuppressResourceType()) + if (!isSuppressResourceType(e.getProperty())) { prop("resourceType", e.getType(), linkResolver == null ? null : linkResolver.resolveProperty(e.getProperty())); + } Set done = new HashSet(); for (Element child : e.getChildren()) { compose(e.getName(), e, done, child); @@ -931,7 +942,7 @@ public class JsonParser extends ParserBase { json.elide(); else if (item.hasChildren()) { open(null,null); - if (item.getProperty().isResource()) { + if (item.getProperty().isResource() && !isSuppressResourceType(item.getProperty())) { prop("resourceType", item.getType(), linkResolver == null ? null : linkResolver.resolveType(item.getType())); } if (linkResolver != null && item.getProperty().isReference()) { @@ -987,7 +998,7 @@ public class JsonParser extends ParserBase { } if (element.hasChildren()) { open(name, linkResolver == null ? null : linkResolver.resolveProperty(element.getProperty())); - if (element.getProperty().isResource()) { + if (element.getProperty().isResource() && !isSuppressResourceType(element.getProperty())) { prop("resourceType", element.getType(), linkResolver == null ? null : linkResolver.resolveType(element.getType())); } if (linkResolver != null && element.getProperty().isReference()) { diff --git a/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/utils/ToolingExtensions.java b/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/utils/ToolingExtensions.java index 8f38aa2f4..a0604d348 100644 --- a/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/utils/ToolingExtensions.java +++ b/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/utils/ToolingExtensions.java @@ -276,6 +276,7 @@ public class ToolingExtensions { public static final String EXT_TYPE_PARAMETER = "http://hl7.org/fhir/tools/StructureDefinition/type-parameter"; public static final String EXT_ALTERNATE_CANONICAL = "http://hl7.org/fhir/StructureDefinition/alternate-canonical"; public static final String EXT_SUPPRESSED = "http://hl7.org/fhir/StructureDefinition/elementdefinition-suppress"; + public static final String EXT_SUPPRESS_RESOURCE_TYPE = "http://hl7.org/fhir/tools/StructureDefinition/json-suppress-resourcetype"; // specific extension helpers