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}