
001package org.hl7.fhir.r5.utils; 002 003import org.hl7.fhir.r5.context.IWorkerContext; 004import org.hl7.fhir.r5.model.CanonicalResource; 005import org.hl7.fhir.r5.model.ElementDefinition; 006import org.hl7.fhir.r5.model.Enumerations.BindingStrength; 007import org.hl7.fhir.r5.model.Extension; 008import org.hl7.fhir.r5.model.MarkdownType; 009import org.hl7.fhir.r5.model.StructureDefinition.TypeDerivationRule; 010import org.hl7.fhir.utilities.MarkedToMoveToAdjunctPackage; 011import org.hl7.fhir.r5.model.StructureDefinition; 012 013@MarkedToMoveToAdjunctPackage 014public class R5Hacker { 015 016 public static void fixR5BrokenResources(IWorkerContext context) { 017 for (StructureDefinition sd : context.fetchResourcesByType(StructureDefinition.class)) { 018 fixSD(sd); 019 } 020 } 021 022 private static void fixSD(StructureDefinition sd) { 023 for (ElementDefinition ed : sd.getDifferential().getElement()) { 024 fix(ed); 025 } 026 for (ElementDefinition ed : sd.getSnapshot().getElement()) { 027 fix(ed); 028 } 029 } 030 031 private static void fix(ElementDefinition ed) { 032 if (ed.hasDefinition() && ed.getDefinition() != null) { 033 ed.setDefinition(ed.getDefinition().replace("http://hl7.org/fhir/5.0.0-snapshot3/", "http://hl7.org/fhir/R5/")); 034 } 035 if (ed.hasBinding() && ed.getBinding().hasExtension(ToolingExtensions.EXT_BINDING_DEFINITION)) { 036 Extension ext = ed.getBinding().getExtensionByUrl(ToolingExtensions.EXT_BINDING_DEFINITION); 037 ext.setValue(new MarkdownType(ext.getValue().primitiveValue())); 038 } 039 } 040 041 042 public static CanonicalResource fixR5BrokenResource(CanonicalResource cr) { 043 if (cr instanceof StructureDefinition) { 044 StructureDefinition sd = (StructureDefinition) cr; 045 fixSD(sd); 046 } 047 return cr; 048 } 049 050}