001package org.hl7.fhir.convertors.conv14_40.resources14_40; 002 003import java.util.Arrays; 004 005import org.hl7.fhir.convertors.advisors.impl.BaseAdvisor_14_40; 006import org.hl7.fhir.convertors.context.ConversionContext14_40; 007import org.hl7.fhir.convertors.conv14_40.datatypes14_40.Extension14_40; 008import org.hl7.fhir.convertors.conv14_40.datatypes14_40.Meta14_40; 009import org.hl7.fhir.convertors.conv14_40.datatypes14_40.Narrative14_40; 010import org.hl7.fhir.exceptions.FHIRException; 011 012public class Resource14_40 { 013 014 public final BaseAdvisor_14_40 advisor; 015 016 public Resource14_40(BaseAdvisor_14_40 advisor) { 017 this.advisor = advisor; 018 } 019 020 public void copyResource(org.hl7.fhir.dstu2016may.model.Resource src, org.hl7.fhir.r4.model.Resource tgt) throws FHIRException { 021 if (src.hasId()) tgt.setId(src.getId()); 022 tgt.setMeta(Meta14_40.convertMeta(src.getMeta())); 023 if (src.hasImplicitRules()) tgt.setImplicitRules(src.getImplicitRules()); 024 if (src.hasLanguage()) tgt.setLanguage(src.getLanguage()); 025 } 026 027 public void copyResource(org.hl7.fhir.r4.model.Resource src, org.hl7.fhir.dstu2016may.model.Resource tgt) throws FHIRException { 028 if (src.hasId()) tgt.setId(src.getId()); 029 if (src.hasMeta()) tgt.setMeta(Meta14_40.convertMeta(src.getMeta())); 030 if (src.hasImplicitRules()) tgt.setImplicitRules(src.getImplicitRules()); 031 if (src.hasLanguage()) tgt.setLanguage(src.getLanguage()); 032 } 033 034 public org.hl7.fhir.r4.model.Resource convertResource(org.hl7.fhir.dstu2016may.model.Resource src) throws FHIRException { 035 if (src == null || src.isEmpty()) return null; 036 if (src instanceof org.hl7.fhir.dstu2016may.model.Parameters) 037 return Parameters14_40.convertParameters((org.hl7.fhir.dstu2016may.model.Parameters) src); 038 if (src instanceof org.hl7.fhir.dstu2016may.model.Bundle) 039 return Bundle14_40.convertBundle((org.hl7.fhir.dstu2016may.model.Bundle) src); 040 if (src instanceof org.hl7.fhir.dstu2016may.model.CodeSystem) 041 return CodeSystem14_40.convertCodeSystem((org.hl7.fhir.dstu2016may.model.CodeSystem) src); 042 if (src instanceof org.hl7.fhir.dstu2016may.model.CompartmentDefinition) 043 return CompartmentDefinition14_40.convertCompartmentDefinition((org.hl7.fhir.dstu2016may.model.CompartmentDefinition) src); 044 if (src instanceof org.hl7.fhir.dstu2016may.model.ConceptMap) 045 return ConceptMap14_40.convertConceptMap((org.hl7.fhir.dstu2016may.model.ConceptMap) src); 046 if (src instanceof org.hl7.fhir.dstu2016may.model.Conformance) 047 return Conformance14_40.convertConformance((org.hl7.fhir.dstu2016may.model.Conformance) src); 048 if (src instanceof org.hl7.fhir.dstu2016may.model.DataElement) 049 return DataElement14_40.convertDataElement((org.hl7.fhir.dstu2016may.model.DataElement) src); 050 if (src instanceof org.hl7.fhir.dstu2016may.model.ImplementationGuide) 051 return ImplementationGuide14_40.convertImplementationGuide((org.hl7.fhir.dstu2016may.model.ImplementationGuide) src); 052 if (src instanceof org.hl7.fhir.dstu2016may.model.NamingSystem) 053 return NamingSystem14_40.convertNamingSystem((org.hl7.fhir.dstu2016may.model.NamingSystem) src); 054 if (src instanceof org.hl7.fhir.dstu2016may.model.OperationDefinition) 055 return OperationDefinition14_40.convertOperationDefinition((org.hl7.fhir.dstu2016may.model.OperationDefinition) src); 056 if (src instanceof org.hl7.fhir.dstu2016may.model.OperationOutcome) 057 return OperationOutcome14_40.convertOperationOutcome((org.hl7.fhir.dstu2016may.model.OperationOutcome) src); 058 if (src instanceof org.hl7.fhir.dstu2016may.model.Questionnaire) 059 return Questionnaire14_40.convertQuestionnaire((org.hl7.fhir.dstu2016may.model.Questionnaire) src); 060 if (src instanceof org.hl7.fhir.dstu2016may.model.QuestionnaireResponse) 061 return QuestionnaireResponse14_40.convertQuestionnaireResponse((org.hl7.fhir.dstu2016may.model.QuestionnaireResponse) src); 062 if (src instanceof org.hl7.fhir.dstu2016may.model.SearchParameter) 063 return SearchParameter14_40.convertSearchParameter((org.hl7.fhir.dstu2016may.model.SearchParameter) src); 064 if (src instanceof org.hl7.fhir.dstu2016may.model.StructureDefinition) 065 return StructureDefinition14_40.convertStructureDefinition((org.hl7.fhir.dstu2016may.model.StructureDefinition) src); 066 if (src instanceof org.hl7.fhir.dstu2016may.model.StructureMap) 067 return StructureMap14_40.convertStructureMap((org.hl7.fhir.dstu2016may.model.StructureMap) src); 068 if (src instanceof org.hl7.fhir.dstu2016may.model.ValueSet) 069 return ValueSet14_40.convertValueSet((org.hl7.fhir.dstu2016may.model.ValueSet) src); 070 if (advisor.failFastOnNullOrUnknownEntry()) { 071 throw new FHIRException("The resource " + src.fhirType()+" cannot be converted from R2B to R4"); 072 } else { 073 return null; 074 } 075 } 076 077 public org.hl7.fhir.dstu2016may.model.Resource convertResource(org.hl7.fhir.r4.model.Resource src) throws FHIRException { 078 if (src == null || src.isEmpty()) return null; 079 if (src instanceof org.hl7.fhir.r4.model.Parameters) 080 return Parameters14_40.convertParameters((org.hl7.fhir.r4.model.Parameters) src); 081 if (src instanceof org.hl7.fhir.r4.model.Bundle) 082 return Bundle14_40.convertBundle((org.hl7.fhir.r4.model.Bundle) src); 083 if (src instanceof org.hl7.fhir.r4.model.CodeSystem) 084 return CodeSystem14_40.convertCodeSystem((org.hl7.fhir.r4.model.CodeSystem) src); 085 if (src instanceof org.hl7.fhir.r4.model.CompartmentDefinition) 086 return CompartmentDefinition14_40.convertCompartmentDefinition((org.hl7.fhir.r4.model.CompartmentDefinition) src); 087 if (src instanceof org.hl7.fhir.r4.model.ConceptMap) 088 return ConceptMap14_40.convertConceptMap((org.hl7.fhir.r4.model.ConceptMap) src); 089 if (src instanceof org.hl7.fhir.r4.model.CapabilityStatement) 090 return Conformance14_40.convertConformance((org.hl7.fhir.r4.model.CapabilityStatement) src); 091 if (src instanceof org.hl7.fhir.r4.model.ImplementationGuide) 092 return ImplementationGuide14_40.convertImplementationGuide((org.hl7.fhir.r4.model.ImplementationGuide) src); 093 if (src instanceof org.hl7.fhir.r4.model.NamingSystem) 094 return NamingSystem14_40.convertNamingSystem((org.hl7.fhir.r4.model.NamingSystem) src); 095 if (src instanceof org.hl7.fhir.r4.model.OperationDefinition) 096 return OperationDefinition14_40.convertOperationDefinition((org.hl7.fhir.r4.model.OperationDefinition) src); 097 if (src instanceof org.hl7.fhir.r4.model.OperationOutcome) 098 return OperationOutcome14_40.convertOperationOutcome((org.hl7.fhir.r4.model.OperationOutcome) src); 099 if (src instanceof org.hl7.fhir.r4.model.Questionnaire) 100 return Questionnaire14_40.convertQuestionnaire((org.hl7.fhir.r4.model.Questionnaire) src); 101 if (src instanceof org.hl7.fhir.r4.model.QuestionnaireResponse) 102 return QuestionnaireResponse14_40.convertQuestionnaireResponse((org.hl7.fhir.r4.model.QuestionnaireResponse) src); 103 if (src instanceof org.hl7.fhir.r4.model.SearchParameter) 104 return SearchParameter14_40.convertSearchParameter((org.hl7.fhir.r4.model.SearchParameter) src); 105 if (src instanceof org.hl7.fhir.r4.model.StructureDefinition) 106 return StructureDefinition14_40.convertStructureDefinition((org.hl7.fhir.r4.model.StructureDefinition) src); 107 if (src instanceof org.hl7.fhir.r4.model.StructureMap) 108 return StructureMap14_40.convertStructureMap((org.hl7.fhir.r4.model.StructureMap) src); 109 if (src instanceof org.hl7.fhir.r4.model.ValueSet) 110 return ValueSet14_40.convertValueSet((org.hl7.fhir.r4.model.ValueSet) src); 111 if (advisor.failFastOnNullOrUnknownEntry()) { 112 throw new FHIRException("The resource " + src.fhirType()+" cannot be converted from R4 to R2B"); 113 } else { 114 return null; 115 } 116 } 117 118 public void copyDomainResource( 119 org.hl7.fhir.dstu2016may.model.DomainResource src, 120 org.hl7.fhir.r4.model.DomainResource tgt, 121 String... extensionUrlsToIgnore) throws FHIRException { 122 copyResource(src, tgt); 123 if (src.hasText()) tgt.setText(Narrative14_40.convertNarrative(src.getText())); 124 src.getContained().stream() 125 .map(this::convertResource) 126 .forEach(tgt::addContained); 127 src.getExtension().forEach(extension -> { 128 if (advisor.useAdvisorForExtension(ConversionContext14_40.INSTANCE.path(), extension)) { 129 org.hl7.fhir.r4.model.Extension convertExtension = new org.hl7.fhir.r4.model.Extension(); 130 advisor.handleExtension(ConversionContext14_40.INSTANCE.path(), extension, convertExtension); 131 tgt.addExtension(convertExtension); 132 } else if (!advisor.ignoreExtension(ConversionContext14_40.INSTANCE.path(), extension) && !Arrays.asList(extensionUrlsToIgnore).contains(extension.getUrl())) { 133 tgt.addExtension(Extension14_40.convertExtension(extension)); 134 } 135 }); 136 src.getModifierExtension().stream() 137 .filter(extension -> !advisor.ignoreExtension(ConversionContext14_40.INSTANCE.path(), extension)) 138 .map(Extension14_40::convertExtension) 139 .forEach(tgt::addModifierExtension); 140 } 141 142 public void copyDomainResource( 143 org.hl7.fhir.r4.model.DomainResource src, 144 org.hl7.fhir.dstu2016may.model.DomainResource tgt, 145 String... extensionUrlsToIgnore) throws FHIRException { 146 copyResource(src, tgt); 147 if (src.hasText()) tgt.setText(Narrative14_40.convertNarrative(src.getText())); 148 src.getContained().stream() 149 .map(this::convertResource) 150 .forEach(tgt::addContained); 151 src.getExtension().forEach(extension -> { 152 if (advisor.useAdvisorForExtension(ConversionContext14_40.INSTANCE.path(), extension)) { 153 org.hl7.fhir.dstu2016may.model.Extension convertExtension = new org.hl7.fhir.dstu2016may.model.Extension(); 154 advisor.handleExtension(ConversionContext14_40.INSTANCE.path(), extension, convertExtension); 155 tgt.addExtension(convertExtension); 156 } else if (!advisor.ignoreExtension(ConversionContext14_40.INSTANCE.path(), extension) && !Arrays.asList(extensionUrlsToIgnore).contains(extension.getUrl())) { 157 tgt.addExtension(Extension14_40.convertExtension(extension)); 158 } 159 }); 160 src.getModifierExtension().stream() 161 .filter(extension -> !advisor.ignoreExtension(ConversionContext14_40.INSTANCE.path(), extension)) 162 .map(Extension14_40::convertExtension) 163 .forEach(tgt::addModifierExtension); 164 } 165 166}