001package org.hl7.fhir.r5.utils;
002
003import org.hl7.fhir.r5.context.CanonicalResourceManager.CanonicalResourceProxy;
004import org.hl7.fhir.r5.model.ElementDefinition;
005import org.hl7.fhir.r5.model.PackageInformation;
006import org.hl7.fhir.r5.model.StructureDefinition;
007
008public class PackageHackerR5 {
009
010  public static void fixLoadedResource(CanonicalResourceProxy r, PackageInformation packageInfo) {
011   if ("http://terminology.hl7.org/CodeSystem/v2-0391|2.6".equals(r.getUrl())) {
012     r.hack("http://terminology.hl7.org/CodeSystem/v2-0391-2.6", "2.6");
013   }
014   if ("http://terminology.hl7.org/CodeSystem/v2-0391|2.4".equals(r.getUrl())) {
015     r.hack("http://terminology.hl7.org/CodeSystem/v2-0391-2.4", "2.4");
016   }
017   if ("http://terminology.hl7.org/CodeSystem/v2-0360|2.7".equals(r.getUrl())) {
018     r.hack("http://terminology.hl7.org/CodeSystem/v2-0360-2.7", "2.7");
019   }
020
021   if ("http://terminology.hl7.org/CodeSystem/v2-0006|2.1".equals(r.getUrl())) {
022     r.hack("http://terminology.hl7.org/CodeSystem/v2-0006-2.1", "2.1");
023   }
024
025   if ("http://terminology.hl7.org/CodeSystem/v2-0360|2.7".equals(r.getUrl())) {
026     r.hack("http://terminology.hl7.org/CodeSystem/v2-0360-2.7", "2.7");
027   }
028
029   if ("http://terminology.hl7.org/CodeSystem/v2-0006|2.4".equals(r.getUrl())) {
030     r.hack("http://terminology.hl7.org/CodeSystem/v2-0006-2.4", "2.4");
031   }
032
033   if ("http://terminology.hl7.org/CodeSystem/v2-0360|2.3.1".equals(r.getUrl())) {
034     r.hack("http://terminology.hl7.org/CodeSystem/v2-0360-2.3.1", "2.3.1");
035   }
036
037   if ("http://hl7.org/fhir/StructureDefinition/iso21090-nullFlavor".equals(r.getUrl()) && "4.0.1".equals(r.getVersion())) {
038     StructureDefinition sd = (StructureDefinition) r.getResource();
039     for (ElementDefinition ed : sd.getSnapshot().getElement()) {
040       if (ed.hasBinding() && "http://terminology.hl7.org/ValueSet/v3-NullFlavor|4.0.1".equals(ed.getBinding().getValueSet())) {
041         ed.getBinding().setValueSet("http://terminology.hl7.org/ValueSet/v3-NullFlavor");
042       }
043     }
044     for (ElementDefinition ed : sd.getDifferential().getElement()) {
045       if (ed.hasBinding() && "http://terminology.hl7.org/ValueSet/v3-NullFlavor|4.0.1".equals(ed.getBinding().getValueSet())) {
046         ed.getBinding().setValueSet("http://terminology.hl7.org/ValueSet/v3-NullFlavor");
047       }
048     }
049   }
050   if ("http://hl7.org/fhir/StructureDefinition/DeviceUseStatement".equals(r.getUrl()) && "4.0.1".equals(r.getVersion())) {
051     StructureDefinition sd = (StructureDefinition) r.getResource();
052     for (ElementDefinition ed : sd.getSnapshot().getElement()) {
053       if (ed.hasRequirements()) {
054         ed.setRequirements(ed.getRequirements().replace("[http://hl7.org/fhir/StructureDefinition/bodySite](null.html)", "[http://hl7.org/fhir/StructureDefinition/bodySite](http://hl7.org/fhir/extension-bodysite.html)"));
055       }
056     }
057     for (ElementDefinition ed : sd.getDifferential().getElement()) {
058       if (ed.hasRequirements()) {
059         ed.setRequirements(ed.getRequirements().replace("[http://hl7.org/fhir/StructureDefinition/bodySite](null.html)", "[http://hl7.org/fhir/StructureDefinition/bodySite](http://hl7.org/fhir/extension-bodysite.html)"));
060       }
061     }
062   }
063   if (r.hasUrl() && r.getUrl().contains("|")) {
064     assert false;
065   }
066   
067  }
068
069}