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}