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