001package org.hl7.fhir.convertors.conv10_50.resources10_50;
002
003import java.util.Collections;
004
005import org.hl7.fhir.convertors.context.ConversionContext10_50;
006import org.hl7.fhir.convertors.conv10_50.datatypes10_50.Narrative10_50;
007import org.hl7.fhir.convertors.conv10_50.datatypes10_50.Reference10_50;
008import org.hl7.fhir.convertors.conv10_50.datatypes10_50.complextypes10_50.CodeableConcept10_50;
009import org.hl7.fhir.convertors.conv10_50.datatypes10_50.complextypes10_50.Identifier10_50;
010import org.hl7.fhir.convertors.conv10_50.datatypes10_50.complextypes10_50.Period10_50;
011import org.hl7.fhir.convertors.conv10_50.datatypes10_50.primitivetypes10_50.Code10_50;
012import org.hl7.fhir.convertors.conv10_50.datatypes10_50.primitivetypes10_50.DateTime10_50;
013import org.hl7.fhir.convertors.conv10_50.datatypes10_50.primitivetypes10_50.String10_50;
014import org.hl7.fhir.dstu2.model.Composition;
015import org.hl7.fhir.exceptions.FHIRException;
016import org.hl7.fhir.r5.model.CodeableConcept;
017import org.hl7.fhir.r5.model.CodeableReference;
018import org.hl7.fhir.r5.model.Enumeration;
019import org.hl7.fhir.r5.model.Enumerations;
020
021public class Composition10_50 {
022
023  public static org.hl7.fhir.r5.model.Composition convertComposition(org.hl7.fhir.dstu2.model.Composition src) throws FHIRException {
024    if (src == null || src.isEmpty())
025      return null;
026    org.hl7.fhir.r5.model.Composition tgt = new org.hl7.fhir.r5.model.Composition();
027    ConversionContext10_50.INSTANCE.getVersionConvertor_10_50().copyDomainResource(src, tgt);
028    if (src.hasIdentifier())
029      tgt.addIdentifier(Identifier10_50.convertIdentifier(src.getIdentifier()));
030    if (src.hasDate())
031      tgt.setDateElement(DateTime10_50.convertDateTime(src.getDateElement()));
032    if (src.hasType())
033      tgt.setType(CodeableConcept10_50.convertCodeableConcept(src.getType()));
034    if (src.hasClass_())
035      tgt.addCategory(CodeableConcept10_50.convertCodeableConcept(src.getClass_()));
036    if (src.hasTitleElement())
037      tgt.setTitleElement(String10_50.convertString(src.getTitleElement()));
038    if (src.hasStatus())
039      tgt.setStatusElement(convertCompositionStatus(src.getStatusElement()));
040    try {
041      if (src.hasConfidentiality())
042        tgt.getMeta().addSecurity().setCodeElement(Code10_50.convertCode(src.getConfidentialityElement()));
043    } catch (org.hl7.fhir.exceptions.FHIRException e) {
044      throw new FHIRException(e);
045    }
046    if (src.hasSubject())
047      tgt.addSubject(Reference10_50.convertReference(src.getSubject()));
048    for (org.hl7.fhir.dstu2.model.Reference t : src.getAuthor()) tgt.addAuthor(Reference10_50.convertReference(t));
049    for (org.hl7.fhir.dstu2.model.Composition.CompositionAttesterComponent t : src.getAttester())
050      tgt.addAttester(convertCompositionAttesterComponent(t));
051    if (src.hasCustodian())
052      tgt.setCustodian(Reference10_50.convertReference(src.getCustodian()));
053    for (org.hl7.fhir.dstu2.model.Composition.CompositionEventComponent t : src.getEvent())
054      tgt.addEvent(convertCompositionEventComponent(t));
055    if (src.hasEncounter())
056      tgt.setEncounter(Reference10_50.convertReference(src.getEncounter()));
057    for (org.hl7.fhir.dstu2.model.Composition.SectionComponent t : src.getSection())
058      tgt.addSection(convertSectionComponent(t));
059    return tgt;
060  }
061
062  public static org.hl7.fhir.dstu2.model.Composition convertComposition(org.hl7.fhir.r5.model.Composition src) throws FHIRException {
063    if (src == null || src.isEmpty())
064      return null;
065    org.hl7.fhir.dstu2.model.Composition tgt = new org.hl7.fhir.dstu2.model.Composition();
066    ConversionContext10_50.INSTANCE.getVersionConvertor_10_50().copyDomainResource(src, tgt);
067    if (src.hasIdentifier())
068      tgt.setIdentifier(Identifier10_50.convertIdentifier(src.getIdentifierFirstRep()));
069    if (src.hasDate())
070      tgt.setDateElement(DateTime10_50.convertDateTime(src.getDateElement()));
071    if (src.hasType())
072      tgt.setType(CodeableConcept10_50.convertCodeableConcept(src.getType()));
073    if (src.hasCategory())
074      tgt.setClass_(CodeableConcept10_50.convertCodeableConcept(src.getCategoryFirstRep()));
075    if (src.hasTitleElement())
076      tgt.setTitleElement(String10_50.convertString(src.getTitleElement()));
077    if (src.hasStatus())
078      tgt.setStatusElement(convertCompositionStatus(src.getStatusElement()));
079    tgt.setConfidentiality(src.getMeta().getSecurityFirstRep().getCode());
080    if (src.hasSubject())
081      tgt.setSubject(Reference10_50.convertReference(src.getSubjectFirstRep()));
082    for (org.hl7.fhir.r5.model.Reference t : src.getAuthor()) tgt.addAuthor(Reference10_50.convertReference(t));
083    for (org.hl7.fhir.r5.model.Composition.CompositionAttesterComponent t : src.getAttester())
084      tgt.addAttester(convertCompositionAttesterComponent(t));
085    if (src.hasCustodian())
086      tgt.setCustodian(Reference10_50.convertReference(src.getCustodian()));
087    for (org.hl7.fhir.r5.model.Composition.CompositionEventComponent t : src.getEvent())
088      tgt.addEvent(convertCompositionEventComponent(t));
089    if (src.hasEncounter())
090      tgt.setEncounter(Reference10_50.convertReference(src.getEncounter()));
091    for (org.hl7.fhir.r5.model.Composition.SectionComponent t : src.getSection())
092      tgt.addSection(convertSectionComponent(t));
093    return tgt;
094  }
095
096  static public org.hl7.fhir.dstu2.model.Enumeration<org.hl7.fhir.dstu2.model.Composition.CompositionAttestationMode> convertCompositionAttestationMode(org.hl7.fhir.r5.model.CodeableConcept src) throws FHIRException {
097    if (src == null || src.isEmpty())
098      return null;
099    org.hl7.fhir.dstu2.model.Enumeration<org.hl7.fhir.dstu2.model.Composition.CompositionAttestationMode> tgt = new org.hl7.fhir.dstu2.model.Enumeration<>(new org.hl7.fhir.dstu2.model.Composition.CompositionAttestationModeEnumFactory());
100    ConversionContext10_50.INSTANCE.getVersionConvertor_10_50().copyElement(src, tgt);
101    switch (src.getCode("http://hl7.org/fhir/composition-attestation-mode")) {
102      case "personal":
103        tgt.setValue(org.hl7.fhir.dstu2.model.Composition.CompositionAttestationMode.PERSONAL);
104        break;
105      case "professional":
106        tgt.setValue(org.hl7.fhir.dstu2.model.Composition.CompositionAttestationMode.PROFESSIONAL);
107        break;
108      case "legal":
109        tgt.setValue(org.hl7.fhir.dstu2.model.Composition.CompositionAttestationMode.LEGAL);
110        break;
111      case "official":
112        tgt.setValue(org.hl7.fhir.dstu2.model.Composition.CompositionAttestationMode.OFFICIAL);
113        break;
114      default:
115        tgt.setValue(org.hl7.fhir.dstu2.model.Composition.CompositionAttestationMode.NULL);
116        break;
117    }
118    return tgt;
119  }
120
121  static public org.hl7.fhir.r5.model.CodeableConcept convertCompositionAttestationMode(org.hl7.fhir.dstu2.model.Enumeration<org.hl7.fhir.dstu2.model.Composition.CompositionAttestationMode> src) throws FHIRException {
122      if (src == null || src.isEmpty())
123          return null;
124      CodeableConcept tgt = new CodeableConcept();
125      ConversionContext10_50.INSTANCE.getVersionConvertor_10_50().copyElement(src, tgt);
126      if (src.getValue() == null) {
127        // Add nothing
128      } else {
129          switch (src.getValue()) {
130              case PERSONAL:
131                  tgt.addCoding().setSystem("http://hl7.org/fhir/composition-attestation-mode").setCode("personal");
132                  break;
133              case PROFESSIONAL:
134                  tgt.addCoding().setSystem("http://hl7.org/fhir/composition-attestation-mode").setCode("professional");
135                  break;
136              case LEGAL:
137                  tgt.addCoding().setSystem("http://hl7.org/fhir/composition-attestation-mode").setCode("legal");
138                  break;
139              case OFFICIAL:
140                  tgt.addCoding().setSystem("http://hl7.org/fhir/composition-attestation-mode").setCode("official");
141                  break;
142              default:
143                  break;
144          }
145      }
146      return tgt;
147  }
148  public static org.hl7.fhir.dstu2.model.Composition.CompositionAttesterComponent convertCompositionAttesterComponent(org.hl7.fhir.r5.model.Composition.CompositionAttesterComponent src) throws FHIRException {
149    if (src == null || src.isEmpty())
150      return null;
151    org.hl7.fhir.dstu2.model.Composition.CompositionAttesterComponent tgt = new org.hl7.fhir.dstu2.model.Composition.CompositionAttesterComponent();
152    ConversionContext10_50.INSTANCE.getVersionConvertor_10_50().copyBackboneElement(src,tgt);
153    if (src.hasMode())
154      tgt.setMode(Collections.singletonList(convertCompositionAttestationMode(src.getMode())));
155    if (src.hasTimeElement())
156      tgt.setTimeElement(DateTime10_50.convertDateTime(src.getTimeElement()));
157    if (src.hasParty())
158      tgt.setParty(Reference10_50.convertReference(src.getParty()));
159    return tgt;
160  }
161
162  public static org.hl7.fhir.r5.model.Composition.CompositionAttesterComponent convertCompositionAttesterComponent(org.hl7.fhir.dstu2.model.Composition.CompositionAttesterComponent src) throws FHIRException {
163    if (src == null || src.isEmpty())
164      return null;
165    org.hl7.fhir.r5.model.Composition.CompositionAttesterComponent tgt = new org.hl7.fhir.r5.model.Composition.CompositionAttesterComponent();
166    ConversionContext10_50.INSTANCE.getVersionConvertor_10_50().copyBackboneElement(src,tgt);
167    if (src.hasMode())
168      tgt.setMode(convertCompositionAttestationMode(src.getMode().get(0)));
169    if (src.hasTimeElement())
170      tgt.setTimeElement(DateTime10_50.convertDateTime(src.getTimeElement()));
171    if (src.hasParty())
172      tgt.setParty(Reference10_50.convertReference(src.getParty()));
173    return tgt;
174  }
175
176  public static org.hl7.fhir.dstu2.model.Composition.CompositionEventComponent convertCompositionEventComponent(org.hl7.fhir.r5.model.Composition.CompositionEventComponent src) throws FHIRException {
177    if (src == null || src.isEmpty())
178      return null;
179    org.hl7.fhir.dstu2.model.Composition.CompositionEventComponent tgt = new org.hl7.fhir.dstu2.model.Composition.CompositionEventComponent();
180    ConversionContext10_50.INSTANCE.getVersionConvertor_10_50().copyBackboneElement(src,tgt);
181    if (src.hasPeriod())
182      tgt.setPeriod(Period10_50.convertPeriod(src.getPeriod()));
183    for (CodeableReference t : src.getDetail()) {
184      if (t.hasConcept()) {
185        tgt.addCode(CodeableConcept10_50.convertCodeableConcept(t.getConcept()));
186      }
187      if (t.hasReference()) {
188        tgt.addDetail(Reference10_50.convertReference(t.getReference()));
189      }
190    }
191    return tgt;
192  }
193
194  public static org.hl7.fhir.r5.model.Composition.CompositionEventComponent convertCompositionEventComponent(org.hl7.fhir.dstu2.model.Composition.CompositionEventComponent src) throws FHIRException {
195    if (src == null || src.isEmpty())
196      return null;
197    org.hl7.fhir.r5.model.Composition.CompositionEventComponent tgt = new org.hl7.fhir.r5.model.Composition.CompositionEventComponent();
198    ConversionContext10_50.INSTANCE.getVersionConvertor_10_50().copyBackboneElement(src,tgt);
199    for (org.hl7.fhir.dstu2.model.CodeableConcept t : src.getCode())
200      tgt.addDetail().setConcept(CodeableConcept10_50.convertCodeableConcept(t));
201    if (src.hasPeriod())
202      tgt.setPeriod(Period10_50.convertPeriod(src.getPeriod()));
203    for (org.hl7.fhir.dstu2.model.Reference t : src.getDetail()) tgt.addDetail().setReference(Reference10_50.convertReference(t));
204    return tgt;
205  }
206
207  static public org.hl7.fhir.r5.model.Enumeration<org.hl7.fhir.r5.model.Enumerations.CompositionStatus> convertCompositionStatus(org.hl7.fhir.dstu2.model.Enumeration<org.hl7.fhir.dstu2.model.Composition.CompositionStatus> src) throws FHIRException {
208      if (src == null || src.isEmpty())
209          return null;
210      Enumeration<Enumerations.CompositionStatus> tgt = new Enumeration<>(new Enumerations.CompositionStatusEnumFactory());
211      ConversionContext10_50.INSTANCE.getVersionConvertor_10_50().copyElement(src, tgt);
212      if (src.getValue() == null) {
213          tgt.setValue(null);
214      } else {
215          switch (src.getValue()) {
216              case PRELIMINARY:
217                  tgt.setValue(Enumerations.CompositionStatus.PRELIMINARY);
218                  break;
219              case FINAL:
220                  tgt.setValue(Enumerations.CompositionStatus.FINAL);
221                  break;
222              case AMENDED:
223                  tgt.setValue(Enumerations.CompositionStatus.AMENDED);
224                  break;
225              case ENTEREDINERROR:
226                  tgt.setValue(Enumerations.CompositionStatus.ENTEREDINERROR);
227                  break;
228              default:
229                  tgt.setValue(Enumerations.CompositionStatus.NULL);
230                  break;
231          }
232      }
233      return tgt;
234  }
235
236  static public org.hl7.fhir.dstu2.model.Enumeration<org.hl7.fhir.dstu2.model.Composition.CompositionStatus> convertCompositionStatus(org.hl7.fhir.r5.model.Enumeration<org.hl7.fhir.r5.model.Enumerations.CompositionStatus> src) throws FHIRException {
237      if (src == null || src.isEmpty())
238          return null;
239      org.hl7.fhir.dstu2.model.Enumeration<Composition.CompositionStatus> tgt = new org.hl7.fhir.dstu2.model.Enumeration<>(new Composition.CompositionStatusEnumFactory());
240      ConversionContext10_50.INSTANCE.getVersionConvertor_10_50().copyElement(src, tgt);
241      if (src.getValue() == null) {
242          tgt.setValue(null);
243      } else {
244          switch (src.getValue()) {
245              case PRELIMINARY:
246                  tgt.setValue(Composition.CompositionStatus.PRELIMINARY);
247                  break;
248              case FINAL:
249                  tgt.setValue(Composition.CompositionStatus.FINAL);
250                  break;
251              case AMENDED:
252                  tgt.setValue(Composition.CompositionStatus.AMENDED);
253                  break;
254              case ENTEREDINERROR:
255                  tgt.setValue(Composition.CompositionStatus.ENTEREDINERROR);
256                  break;
257              default:
258                  tgt.setValue(Composition.CompositionStatus.NULL);
259                  break;
260          }
261      }
262      return tgt;
263  }
264
265  public static org.hl7.fhir.dstu2.model.Composition.SectionComponent convertSectionComponent(org.hl7.fhir.r5.model.Composition.SectionComponent src) throws FHIRException {
266    if (src == null || src.isEmpty())
267      return null;
268    org.hl7.fhir.dstu2.model.Composition.SectionComponent tgt = new org.hl7.fhir.dstu2.model.Composition.SectionComponent();
269    ConversionContext10_50.INSTANCE.getVersionConvertor_10_50().copyBackboneElement(src,tgt);
270    if (src.hasTitleElement())
271      tgt.setTitleElement(String10_50.convertString(src.getTitleElement()));
272    if (src.hasCode())
273      tgt.setCode(CodeableConcept10_50.convertCodeableConcept(src.getCode()));
274    if (src.hasText())
275      tgt.setText(Narrative10_50.convertNarrative(src.getText()));
276//    tgt.setMode(src.getMode().toCode());
277    if (src.hasOrderedBy())
278      tgt.setOrderedBy(CodeableConcept10_50.convertCodeableConcept(src.getOrderedBy()));
279    for (org.hl7.fhir.r5.model.Reference t : src.getEntry()) tgt.addEntry(Reference10_50.convertReference(t));
280    if (src.hasEmptyReason())
281      tgt.setEmptyReason(CodeableConcept10_50.convertCodeableConcept(src.getEmptyReason()));
282    for (org.hl7.fhir.r5.model.Composition.SectionComponent t : src.getSection())
283      tgt.addSection(convertSectionComponent(t));
284    return tgt;
285  }
286
287  public static org.hl7.fhir.r5.model.Composition.SectionComponent convertSectionComponent(org.hl7.fhir.dstu2.model.Composition.SectionComponent src) throws FHIRException {
288    if (src == null || src.isEmpty())
289      return null;
290    org.hl7.fhir.r5.model.Composition.SectionComponent tgt = new org.hl7.fhir.r5.model.Composition.SectionComponent();
291    ConversionContext10_50.INSTANCE.getVersionConvertor_10_50().copyBackboneElement(src,tgt);
292    if (src.hasTitleElement())
293      tgt.setTitleElement(String10_50.convertString(src.getTitleElement()));
294    if (src.hasCode())
295      tgt.setCode(CodeableConcept10_50.convertCodeableConcept(src.getCode()));
296    if (src.hasText())
297      tgt.setText(Narrative10_50.convertNarrative(src.getText()));
298//    try {
299//      if (src.hasMode())
300//        tgt.setMode(org.hl7.fhir.r5.model.Enumerations.ListMode.fromCode(src.getMode()));
301//    } catch (org.hl7.fhir.exceptions.FHIRException e) {
302//      throw new FHIRException(e);
303//    }
304    if (src.hasOrderedBy())
305      tgt.setOrderedBy(CodeableConcept10_50.convertCodeableConcept(src.getOrderedBy()));
306    for (org.hl7.fhir.dstu2.model.Reference t : src.getEntry()) tgt.addEntry(Reference10_50.convertReference(t));
307    if (src.hasEmptyReason())
308      tgt.setEmptyReason(CodeableConcept10_50.convertCodeableConcept(src.getEmptyReason()));
309    for (org.hl7.fhir.dstu2.model.Composition.SectionComponent t : src.getSection())
310      tgt.addSection(convertSectionComponent(t));
311    return tgt;
312  }
313}