001package org.hl7.fhir.convertors.conv14_30.resources14_30; 002 003import java.util.Arrays; 004 005import org.hl7.fhir.convertors.advisors.impl.BaseAdvisor_14_30; 006import org.hl7.fhir.convertors.context.ConversionContext14_30; 007import org.hl7.fhir.convertors.conv14_30.datatypes14_30.Extension14_30; 008import org.hl7.fhir.convertors.conv14_30.datatypes14_30.Meta14_30; 009import org.hl7.fhir.convertors.conv14_30.datatypes14_30.Narrative14_30; 010import org.hl7.fhir.exceptions.FHIRException; 011 012public class Resource14_30 { 013 014 public final BaseAdvisor_14_30 advisor; 015 016 public Resource14_30(BaseAdvisor_14_30 advisor) { 017 this.advisor = advisor; 018 } 019 020 public void copyResource(org.hl7.fhir.dstu2016may.model.Resource src, org.hl7.fhir.dstu3.model.Resource tgt) throws FHIRException { 021 if (src.hasId()) tgt.setId(src.getId()); 022 tgt.setMeta(Meta14_30.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.dstu3.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_30.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.dstu3.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_30.convertParameters((org.hl7.fhir.dstu2016may.model.Parameters) src); 038 if (src instanceof org.hl7.fhir.dstu2016may.model.Bundle) 039 return Bundle14_30.convertBundle((org.hl7.fhir.dstu2016may.model.Bundle) src); 040 if (src instanceof org.hl7.fhir.dstu2016may.model.CodeSystem) 041 return CodeSystem14_30.convertCodeSystem((org.hl7.fhir.dstu2016may.model.CodeSystem) src); 042 if (src instanceof org.hl7.fhir.dstu2016may.model.CompartmentDefinition) 043 return CompartmentDefinition14_30.convertCompartmentDefinition((org.hl7.fhir.dstu2016may.model.CompartmentDefinition) src); 044 if (src instanceof org.hl7.fhir.dstu2016may.model.ConceptMap) 045 return ConceptMap14_30.convertConceptMap((org.hl7.fhir.dstu2016may.model.ConceptMap) src); 046 if (src instanceof org.hl7.fhir.dstu2016may.model.Conformance) 047 return Conformance14_30.convertConformance((org.hl7.fhir.dstu2016may.model.Conformance) src); 048 if (src instanceof org.hl7.fhir.dstu2016may.model.DataElement) 049 return DataElement14_30.convertDataElement((org.hl7.fhir.dstu2016may.model.DataElement) src); 050 if (src instanceof org.hl7.fhir.dstu2016may.model.ImplementationGuide) 051 return ImplementationGuide14_30.convertImplementationGuide((org.hl7.fhir.dstu2016may.model.ImplementationGuide) src); 052 if (src instanceof org.hl7.fhir.dstu2016may.model.NamingSystem) 053 return NamingSystem14_30.convertNamingSystem((org.hl7.fhir.dstu2016may.model.NamingSystem) src); 054 if (src instanceof org.hl7.fhir.dstu2016may.model.OperationDefinition) 055 return OperationDefinition14_30.convertOperationDefinition((org.hl7.fhir.dstu2016may.model.OperationDefinition) src); 056 if (src instanceof org.hl7.fhir.dstu2016may.model.OperationOutcome) 057 return OperationOutcome14_30.convertOperationOutcome((org.hl7.fhir.dstu2016may.model.OperationOutcome) src); 058 if (src instanceof org.hl7.fhir.dstu2016may.model.Questionnaire) 059 return Questionnaire14_30.convertQuestionnaire((org.hl7.fhir.dstu2016may.model.Questionnaire) src); 060 if (src instanceof org.hl7.fhir.dstu2016may.model.QuestionnaireResponse) 061 return QuestionnaireResponse14_30.convertQuestionnaireResponse((org.hl7.fhir.dstu2016may.model.QuestionnaireResponse) src); 062 if (src instanceof org.hl7.fhir.dstu2016may.model.SearchParameter) 063 return SearchParameter14_30.convertSearchParameter((org.hl7.fhir.dstu2016may.model.SearchParameter) src); 064 if (src instanceof org.hl7.fhir.dstu2016may.model.StructureDefinition) 065 return StructureDefinition14_30.convertStructureDefinition((org.hl7.fhir.dstu2016may.model.StructureDefinition) src); 066 if (src instanceof org.hl7.fhir.dstu2016may.model.TestScript) 067 return TestScript14_30.convertTestScript((org.hl7.fhir.dstu2016may.model.TestScript) src); 068 if (src instanceof org.hl7.fhir.dstu2016may.model.ValueSet) 069 return ValueSet14_30.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 R3"); 072 } else { 073 return null; 074 } 075 } 076 077 public org.hl7.fhir.dstu2016may.model.Resource convertResource(org.hl7.fhir.dstu3.model.Resource src) throws FHIRException { 078 if (src == null || src.isEmpty()) return null; 079 if (src instanceof org.hl7.fhir.dstu3.model.Parameters) 080 return Parameters14_30.convertParameters((org.hl7.fhir.dstu3.model.Parameters) src); 081 if (src instanceof org.hl7.fhir.dstu3.model.Bundle) 082 return Bundle14_30.convertBundle((org.hl7.fhir.dstu3.model.Bundle) src); 083 if (src instanceof org.hl7.fhir.dstu3.model.CodeSystem) 084 return CodeSystem14_30.convertCodeSystem((org.hl7.fhir.dstu3.model.CodeSystem) src); 085 if (src instanceof org.hl7.fhir.dstu3.model.CompartmentDefinition) 086 return CompartmentDefinition14_30.convertCompartmentDefinition((org.hl7.fhir.dstu3.model.CompartmentDefinition) src); 087 if (src instanceof org.hl7.fhir.dstu3.model.ConceptMap) 088 return ConceptMap14_30.convertConceptMap((org.hl7.fhir.dstu3.model.ConceptMap) src); 089 if (src instanceof org.hl7.fhir.dstu3.model.CapabilityStatement) 090 return Conformance14_30.convertConformance((org.hl7.fhir.dstu3.model.CapabilityStatement) src); 091 if (src instanceof org.hl7.fhir.dstu3.model.DataElement) 092 return DataElement14_30.convertDataElement((org.hl7.fhir.dstu3.model.DataElement) src); 093 if (src instanceof org.hl7.fhir.dstu3.model.ImplementationGuide) 094 return ImplementationGuide14_30.convertImplementationGuide((org.hl7.fhir.dstu3.model.ImplementationGuide) src); 095 if (src instanceof org.hl7.fhir.dstu3.model.NamingSystem) 096 return NamingSystem14_30.convertNamingSystem((org.hl7.fhir.dstu3.model.NamingSystem) src); 097 if (src instanceof org.hl7.fhir.dstu3.model.OperationDefinition) 098 return OperationDefinition14_30.convertOperationDefinition((org.hl7.fhir.dstu3.model.OperationDefinition) src); 099 if (src instanceof org.hl7.fhir.dstu3.model.OperationOutcome) 100 return OperationOutcome14_30.convertOperationOutcome((org.hl7.fhir.dstu3.model.OperationOutcome) src); 101 if (src instanceof org.hl7.fhir.dstu3.model.Questionnaire) 102 return Questionnaire14_30.convertQuestionnaire((org.hl7.fhir.dstu3.model.Questionnaire) src); 103 if (src instanceof org.hl7.fhir.dstu3.model.QuestionnaireResponse) 104 return QuestionnaireResponse14_30.convertQuestionnaireResponse((org.hl7.fhir.dstu3.model.QuestionnaireResponse) src); 105 if (src instanceof org.hl7.fhir.dstu3.model.SearchParameter) 106 return SearchParameter14_30.convertSearchParameter((org.hl7.fhir.dstu3.model.SearchParameter) src); 107 if (src instanceof org.hl7.fhir.dstu3.model.StructureDefinition) 108 return StructureDefinition14_30.convertStructureDefinition((org.hl7.fhir.dstu3.model.StructureDefinition) src); 109 if (src instanceof org.hl7.fhir.dstu3.model.TestScript) 110 return TestScript14_30.convertTestScript((org.hl7.fhir.dstu3.model.TestScript) src); 111 if (src instanceof org.hl7.fhir.dstu3.model.ValueSet) 112 return ValueSet14_30.convertValueSet((org.hl7.fhir.dstu3.model.ValueSet) src); 113 if (advisor.failFastOnNullOrUnknownEntry()) { 114 throw new FHIRException("The resource " + src.fhirType()+" cannot be converted from R3 to R2B"); 115 } else { 116 return null; 117 } 118 } 119 120 public void copyDomainResource( 121 org.hl7.fhir.dstu2016may.model.DomainResource src, 122 org.hl7.fhir.dstu3.model.DomainResource tgt, 123 String... extensionUrlsToIgnore) throws FHIRException { 124 copyResource(src, tgt); 125 if (src.hasText()) tgt.setText(Narrative14_30.convertNarrative(src.getText())); 126 src.getContained().stream() 127 .map(this::convertResource) 128 .forEach(tgt::addContained); 129 src.getExtension().forEach(extension -> { 130 if (advisor.useAdvisorForExtension(ConversionContext14_30.INSTANCE.path(), extension)) { 131 org.hl7.fhir.dstu3.model.Extension convertExtension = new org.hl7.fhir.dstu3.model.Extension(); 132 advisor.handleExtension(ConversionContext14_30.INSTANCE.path(), extension, convertExtension); 133 tgt.addExtension(convertExtension); 134 } else if (!advisor.ignoreExtension(ConversionContext14_30.INSTANCE.path(), extension) && !Arrays.asList(extensionUrlsToIgnore).contains(extension.getUrl())) { 135 tgt.addExtension(Extension14_30.convertExtension(extension)); 136 } 137 }); 138 src.getModifierExtension().stream() 139 .filter(extension -> !advisor.ignoreExtension(ConversionContext14_30.INSTANCE.path(), extension)) 140 .map(Extension14_30::convertExtension) 141 .forEach(tgt::addModifierExtension); 142 } 143 144 public void copyDomainResource( 145 org.hl7.fhir.dstu3.model.DomainResource src, 146 org.hl7.fhir.dstu2016may.model.DomainResource tgt, 147 String... extensionUrlsToIgnore) throws FHIRException { 148 149 copyResource(src, tgt); 150 if (src.hasText()) tgt.setText(Narrative14_30.convertNarrative(src.getText())); 151 src.getContained().stream() 152 .map(this::convertResource) 153 .forEach(tgt::addContained); 154 src.getExtension().forEach(extension -> { 155 if (advisor.useAdvisorForExtension(ConversionContext14_30.INSTANCE.path(), extension)) { 156 org.hl7.fhir.dstu2016may.model.Extension convertExtension = new org.hl7.fhir.dstu2016may.model.Extension(); 157 advisor.handleExtension(ConversionContext14_30.INSTANCE.path(), extension, convertExtension); 158 tgt.addExtension(convertExtension); 159 } else if (!advisor.ignoreExtension(ConversionContext14_30.INSTANCE.path(), extension) && !Arrays.asList(extensionUrlsToIgnore).contains(extension.getUrl())) { 160 tgt.addExtension(Extension14_30.convertExtension(extension)); 161 } 162 }); 163 src.getModifierExtension().stream() 164 .filter(extension -> !advisor.ignoreExtension(ConversionContext14_30.INSTANCE.path(), extension)) 165 .map(Extension14_30::convertExtension) 166 .forEach(tgt::addModifierExtension); 167 } 168 169}