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}