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