001package org.hl7.fhir.convertors.conv10_50.resources10_50;
002
003import org.hl7.fhir.convertors.SourceElementComponentWrapper;
004import org.hl7.fhir.convertors.VersionConvertorConstants;
005import org.hl7.fhir.convertors.context.ConversionContext10_50;
006import org.hl7.fhir.convertors.conv10_50.VersionConvertor_10_50;
007import org.hl7.fhir.convertors.conv10_50.datatypes10_50.complextypes10_50.CodeableConcept10_50;
008import org.hl7.fhir.convertors.conv10_50.datatypes10_50.complextypes10_50.ContactPoint10_50;
009import org.hl7.fhir.convertors.conv10_50.datatypes10_50.complextypes10_50.Identifier10_50;
010import org.hl7.fhir.convertors.conv10_50.datatypes10_50.primitivetypes10_50.*;
011import org.hl7.fhir.dstu2.model.Enumerations.ConceptMapEquivalence;
012import org.hl7.fhir.exceptions.FHIRException;
013import org.hl7.fhir.r5.model.CanonicalType;
014import org.hl7.fhir.r5.model.ConceptMap;
015import org.hl7.fhir.r5.model.ConceptMap.ConceptMapGroupComponent;
016import org.hl7.fhir.r5.model.Enumeration;
017import org.hl7.fhir.r5.model.Enumerations;
018import org.hl7.fhir.r5.model.Enumerations.ConceptMapRelationship;
019import org.hl7.fhir.r5.utils.ToolingExtensions;
020
021import java.util.ArrayList;
022import java.util.List;
023
024public class ConceptMap10_50 {
025
026  public static org.hl7.fhir.r5.model.ConceptMap convertConceptMap(org.hl7.fhir.dstu2.model.ConceptMap src) throws FHIRException {
027    if (src == null || src.isEmpty())
028      return null;
029    org.hl7.fhir.r5.model.ConceptMap tgt = new org.hl7.fhir.r5.model.ConceptMap();
030    ConversionContext10_50.INSTANCE.getVersionConvertor_10_50().copyDomainResource(src, tgt);
031    if (src.hasUrlElement())
032      tgt.setUrlElement(Uri10_50.convertUri(src.getUrlElement()));
033    if (src.hasIdentifier())
034      tgt.addIdentifier(Identifier10_50.convertIdentifier(src.getIdentifier()));
035    if (src.hasVersionElement())
036      tgt.setVersionElement(String10_50.convertString(src.getVersionElement()));
037    if (src.hasNameElement())
038      tgt.setNameElement(String10_50.convertString(src.getNameElement()));
039    if (src.hasStatus())
040      tgt.setStatusElement(Enumerations10_50.convertConformanceResourceStatus(src.getStatusElement()));
041    if (src.hasExperimental())
042      tgt.setExperimentalElement(Boolean10_50.convertBoolean(src.getExperimentalElement()));
043    if (src.hasPublisherElement())
044      tgt.setPublisherElement(String10_50.convertString(src.getPublisherElement()));
045    for (org.hl7.fhir.dstu2.model.ConceptMap.ConceptMapContactComponent t : src.getContact())
046      tgt.addContact(convertConceptMapContactComponent(t));
047    if (src.hasDate())
048      tgt.setDateElement(DateTime10_50.convertDateTime(src.getDateElement()));
049    if (src.hasDescription())
050      tgt.setDescription(src.getDescription());
051    for (org.hl7.fhir.dstu2.model.CodeableConcept t : src.getUseContext())
052      if (VersionConvertor_10_50.isJurisdiction(t))
053        tgt.addJurisdiction(CodeableConcept10_50.convertCodeableConcept(t));
054      else
055        tgt.addUseContext(CodeableConcept10_50.convertCodeableConceptToUsageContext(t));
056    if (src.hasRequirements())
057      tgt.setPurpose(src.getRequirements());
058    if (src.hasCopyright())
059      tgt.setCopyright(src.getCopyright());
060    org.hl7.fhir.r5.model.DataType r = ConversionContext10_50.INSTANCE.getVersionConvertor_10_50().convertType(src.getSource());
061    tgt.setSource(r instanceof org.hl7.fhir.r5.model.Reference ? new CanonicalType(((org.hl7.fhir.r5.model.Reference) r).getReference()) : r);
062    r = ConversionContext10_50.INSTANCE.getVersionConvertor_10_50().convertType(src.getTarget());
063    tgt.setTarget(r instanceof org.hl7.fhir.r5.model.Reference ? new CanonicalType(((org.hl7.fhir.r5.model.Reference) r).getReference()) : r);
064    for (org.hl7.fhir.dstu2.model.ConceptMap.SourceElementComponent t : src.getElement()) {
065      List<SourceElementComponentWrapper<ConceptMap.SourceElementComponent>> ws = convertSourceElementComponent(t);
066      for (SourceElementComponentWrapper<ConceptMap.SourceElementComponent> w : ws)
067        getGroup(tgt, w.getSource(), w.getTarget()).addElement(w.getComp());
068    }
069    return tgt;
070  }
071
072  public static org.hl7.fhir.dstu2.model.ConceptMap convertConceptMap(org.hl7.fhir.r5.model.ConceptMap src) throws FHIRException {
073    if (src == null || src.isEmpty())
074      return null;
075    org.hl7.fhir.dstu2.model.ConceptMap tgt = new org.hl7.fhir.dstu2.model.ConceptMap();
076    ConversionContext10_50.INSTANCE.getVersionConvertor_10_50().copyDomainResource(src, tgt);
077    if (src.hasUrlElement())
078      tgt.setUrlElement(Uri10_50.convertUri(src.getUrlElement()));
079    if (src.hasIdentifier()) {
080      if (src.hasIdentifier())
081        tgt.setIdentifier(Identifier10_50.convertIdentifier(src.getIdentifierFirstRep()));
082    }
083    if (src.hasVersionElement())
084      tgt.setVersionElement(String10_50.convertString(src.getVersionElement()));
085    if (src.hasNameElement())
086      tgt.setNameElement(String10_50.convertString(src.getNameElement()));
087    if (src.hasStatus())
088      tgt.setStatusElement(Enumerations10_50.convertConformanceResourceStatus(src.getStatusElement()));
089    if (src.hasExperimental())
090      tgt.setExperimentalElement(Boolean10_50.convertBoolean(src.getExperimentalElement()));
091    if (src.hasPublisherElement())
092      tgt.setPublisherElement(String10_50.convertString(src.getPublisherElement()));
093    for (org.hl7.fhir.r5.model.ContactDetail t : src.getContact()) tgt.addContact(convertConceptMapContactComponent(t));
094    if (src.hasDate())
095      tgt.setDateElement(DateTime10_50.convertDateTime(src.getDateElement()));
096    if (src.hasDescription())
097      tgt.setDescription(src.getDescription());
098    for (org.hl7.fhir.r5.model.UsageContext t : src.getUseContext())
099      if (t.hasValueCodeableConcept())
100        tgt.addUseContext(CodeableConcept10_50.convertCodeableConcept(t.getValueCodeableConcept()));
101    for (org.hl7.fhir.r5.model.CodeableConcept t : src.getJurisdiction())
102      tgt.addUseContext(CodeableConcept10_50.convertCodeableConcept(t));
103    if (src.hasPurpose())
104      tgt.setRequirements(src.getPurpose());
105    if (src.hasCopyright())
106      tgt.setCopyright(src.getCopyright());
107    if (src.hasSource())
108      tgt.setSource(ConversionContext10_50.INSTANCE.getVersionConvertor_10_50().convertType(src.getSource()));
109    if (src.hasTarget())
110      tgt.setTarget(ConversionContext10_50.INSTANCE.getVersionConvertor_10_50().convertType(src.getTarget()));
111    for (org.hl7.fhir.r5.model.ConceptMap.ConceptMapGroupComponent g : src.getGroup())
112      for (org.hl7.fhir.r5.model.ConceptMap.SourceElementComponent t : g.getElement())
113        tgt.addElement(convertSourceElementComponent(t, g));
114    return tgt;
115  }
116
117  public static org.hl7.fhir.r5.model.ContactDetail convertConceptMapContactComponent(org.hl7.fhir.dstu2.model.ConceptMap.ConceptMapContactComponent src) throws FHIRException {
118    if (src == null || src.isEmpty())
119      return null;
120    org.hl7.fhir.r5.model.ContactDetail tgt = new org.hl7.fhir.r5.model.ContactDetail();
121    ConversionContext10_50.INSTANCE.getVersionConvertor_10_50().copyElement(src, tgt);
122    if (src.hasNameElement())
123      tgt.setNameElement(String10_50.convertString(src.getNameElement()));
124    for (org.hl7.fhir.dstu2.model.ContactPoint t : src.getTelecom())
125      tgt.addTelecom(ContactPoint10_50.convertContactPoint(t));
126    return tgt;
127  }
128
129  public static org.hl7.fhir.dstu2.model.ConceptMap.ConceptMapContactComponent convertConceptMapContactComponent(org.hl7.fhir.r5.model.ContactDetail src) throws FHIRException {
130    if (src == null || src.isEmpty())
131      return null;
132    org.hl7.fhir.dstu2.model.ConceptMap.ConceptMapContactComponent tgt = new org.hl7.fhir.dstu2.model.ConceptMap.ConceptMapContactComponent();
133    ConversionContext10_50.INSTANCE.getVersionConvertor_10_50().copyElement(src, tgt);
134    if (src.hasNameElement())
135      tgt.setNameElement(String10_50.convertString(src.getNameElement()));
136    for (org.hl7.fhir.r5.model.ContactPoint t : src.getTelecom())
137      tgt.addTelecom(ContactPoint10_50.convertContactPoint(t));
138    return tgt;
139  }
140
141  public static org.hl7.fhir.dstu2.model.Enumeration<ConceptMapEquivalence> convertConceptMapEquivalence(Enumeration<ConceptMapRelationship> src) throws FHIRException {
142    if (src == null || src.isEmpty())
143      return null;
144    org.hl7.fhir.dstu2.model.Enumeration<ConceptMapEquivalence> tgt = new org.hl7.fhir.dstu2.model.Enumeration<ConceptMapEquivalence>(new org.hl7.fhir.dstu2.model.Enumerations.ConceptMapEquivalenceEnumFactory());
145    ConversionContext10_50.INSTANCE.getVersionConvertor_10_50().copyElement(src, tgt, VersionConvertorConstants.EXT_OLD_CONCEPTMAP_EQUIVALENCE);
146    if (src.hasExtension(VersionConvertorConstants.EXT_OLD_CONCEPTMAP_EQUIVALENCE)) {
147      tgt.setValueAsString(src.getExtensionString(VersionConvertorConstants.EXT_OLD_CONCEPTMAP_EQUIVALENCE));
148    } else {
149      switch (src.getValue()) {
150        case EQUIVALENT:
151          tgt.setValue(org.hl7.fhir.dstu2.model.Enumerations.ConceptMapEquivalence.EQUIVALENT);
152          break;
153        case SOURCEISNARROWERTHANTARGET:
154          tgt.setValue(org.hl7.fhir.dstu2.model.Enumerations.ConceptMapEquivalence.WIDER);
155          break;
156        case SOURCEISBROADERTHANTARGET:
157          tgt.setValue(org.hl7.fhir.dstu2.model.Enumerations.ConceptMapEquivalence.NARROWER);
158          break;
159        case NOTRELATEDTO:
160          tgt.setValue(org.hl7.fhir.dstu2.model.Enumerations.ConceptMapEquivalence.DISJOINT);
161          break;
162        default:
163          tgt.setValue(org.hl7.fhir.dstu2.model.Enumerations.ConceptMapEquivalence.NULL);
164          break;
165      }
166    }
167    return tgt;
168  }
169
170  public static Enumeration<ConceptMapRelationship> convertConceptMapRelationship(org.hl7.fhir.dstu2.model.Enumeration<ConceptMapEquivalence> src) throws FHIRException {
171    if (src == null || src.isEmpty())
172      return null;
173    Enumeration<ConceptMapRelationship> tgt = new Enumeration<ConceptMapRelationship>(new Enumerations.ConceptMapRelationshipEnumFactory());
174    ConversionContext10_50.INSTANCE.getVersionConvertor_10_50().copyElement(src, tgt);
175    ToolingExtensions.setCodeExtension(tgt, VersionConvertorConstants.EXT_OLD_CONCEPTMAP_EQUIVALENCE, src.getValueAsString());
176    switch (src.getValue()) {
177      case EQUIVALENT:
178        tgt.setValue(org.hl7.fhir.r5.model.Enumerations.ConceptMapRelationship.EQUIVALENT);
179        break;
180      case EQUAL:
181        tgt.setValue(org.hl7.fhir.r5.model.Enumerations.ConceptMapRelationship.EQUIVALENT);
182        break;
183      case WIDER:
184        tgt.setValue(org.hl7.fhir.r5.model.Enumerations.ConceptMapRelationship.SOURCEISNARROWERTHANTARGET);
185        break;
186      case SUBSUMES:
187        tgt.setValue(org.hl7.fhir.r5.model.Enumerations.ConceptMapRelationship.SOURCEISNARROWERTHANTARGET);
188        break;
189      case NARROWER:
190        tgt.setValue(org.hl7.fhir.r5.model.Enumerations.ConceptMapRelationship.SOURCEISBROADERTHANTARGET);
191        break;
192      case SPECIALIZES:
193        tgt.setValue(org.hl7.fhir.r5.model.Enumerations.ConceptMapRelationship.SOURCEISBROADERTHANTARGET);
194        break;
195      case INEXACT:
196        tgt.setValue(org.hl7.fhir.r5.model.Enumerations.ConceptMapRelationship.RELATEDTO);
197        break;
198      case UNMATCHED:
199        tgt.setValue(org.hl7.fhir.r5.model.Enumerations.ConceptMapRelationship.NULL);
200        break;
201      case DISJOINT:
202        tgt.setValue(org.hl7.fhir.r5.model.Enumerations.ConceptMapRelationship.NOTRELATEDTO);
203        break;
204      default:
205        tgt.setValue(org.hl7.fhir.r5.model.Enumerations.ConceptMapRelationship.NULL);
206        break;
207    }
208    return tgt;
209  }
210
211  public static org.hl7.fhir.dstu2.model.ConceptMap.OtherElementComponent convertOtherElementComponent(org.hl7.fhir.r5.model.ConceptMap.OtherElementComponent src) throws FHIRException {
212    if (src == null || src.isEmpty())
213      return null;
214    org.hl7.fhir.dstu2.model.ConceptMap.OtherElementComponent tgt = new org.hl7.fhir.dstu2.model.ConceptMap.OtherElementComponent();
215    ConversionContext10_50.INSTANCE.getVersionConvertor_10_50().copyElement(src, tgt);
216    if (src.hasPropertyElement())
217      tgt.setElementElement(Uri10_50.convertUri(src.getPropertyElement()));
218    if (src.hasSystem())
219      tgt.setCodeSystem(src.getSystem());
220    if (src.hasValueElement())
221      tgt.setCodeElement(String10_50.convertString(src.getValueElement()));
222    return tgt;
223  }
224
225  public static org.hl7.fhir.r5.model.ConceptMap.OtherElementComponent convertOtherElementComponent(org.hl7.fhir.dstu2.model.ConceptMap.OtherElementComponent src) throws FHIRException {
226    if (src == null || src.isEmpty())
227      return null;
228    org.hl7.fhir.r5.model.ConceptMap.OtherElementComponent tgt = new org.hl7.fhir.r5.model.ConceptMap.OtherElementComponent();
229    ConversionContext10_50.INSTANCE.getVersionConvertor_10_50().copyElement(src, tgt);
230    if (src.hasElementElement())
231      tgt.setPropertyElement(Uri10_50.convertUri(src.getElementElement()));
232    if (src.hasCodeSystem())
233      tgt.setSystem(src.getCodeSystem());
234    if (src.hasCodeElement())
235      tgt.setValueElement(String10_50.convertString(src.getCodeElement()));
236    return tgt;
237  }
238
239  public static org.hl7.fhir.dstu2.model.ConceptMap.SourceElementComponent convertSourceElementComponent(org.hl7.fhir.r5.model.ConceptMap.SourceElementComponent src, org.hl7.fhir.r5.model.ConceptMap.ConceptMapGroupComponent g) throws FHIRException {
240    if (src == null || src.isEmpty())
241      return null;
242    org.hl7.fhir.dstu2.model.ConceptMap.SourceElementComponent tgt = new org.hl7.fhir.dstu2.model.ConceptMap.SourceElementComponent();
243    ConversionContext10_50.INSTANCE.getVersionConvertor_10_50().copyElement(src, tgt);
244    tgt.setCodeSystem(g.getSource());
245    if (src.hasCodeElement())
246      tgt.setCodeElement(Code10_50.convertCode(src.getCodeElement()));
247    if (src.hasNoMap() && src.getNoMap() == true) {
248      tgt.addTarget(new org.hl7.fhir.dstu2.model.ConceptMap.TargetElementComponent().setEquivalence(org.hl7.fhir.dstu2.model.Enumerations.ConceptMapEquivalence.UNMATCHED));
249    } else {
250      for (org.hl7.fhir.r5.model.ConceptMap.TargetElementComponent t : src.getTarget())
251        tgt.addTarget(convertTargetElementComponent(t, g));
252    }
253    return tgt;
254  }
255
256  public static List<SourceElementComponentWrapper<ConceptMap.SourceElementComponent>> convertSourceElementComponent(org.hl7.fhir.dstu2.model.ConceptMap.SourceElementComponent src) throws FHIRException {
257    List<SourceElementComponentWrapper<ConceptMap.SourceElementComponent>> res = new ArrayList<>();
258    if (src == null || src.isEmpty())
259      return res;
260    for (org.hl7.fhir.dstu2.model.ConceptMap.TargetElementComponent t : src.getTarget()) {
261      org.hl7.fhir.r5.model.ConceptMap.SourceElementComponent tgt = new org.hl7.fhir.r5.model.ConceptMap.SourceElementComponent();
262      ConversionContext10_50.INSTANCE.getVersionConvertor_10_50().copyElement(src, tgt);
263      tgt.setCode(src.getCode());
264      if (t.getEquivalence() == org.hl7.fhir.dstu2.model.Enumerations.ConceptMapEquivalence.UNMATCHED) {
265        tgt.setNoMap(true);
266      } else {
267        tgt.addTarget(convertTargetElementComponent(t));
268      }
269      res.add(new SourceElementComponentWrapper<>(tgt, src.getCodeSystem(), t.getCodeSystem()));
270    }
271    return res;
272  }
273
274  public static org.hl7.fhir.dstu2.model.ConceptMap.TargetElementComponent convertTargetElementComponent(org.hl7.fhir.r5.model.ConceptMap.TargetElementComponent src, org.hl7.fhir.r5.model.ConceptMap.ConceptMapGroupComponent g) throws FHIRException {
275    if (src == null || src.isEmpty())
276      return null;
277    org.hl7.fhir.dstu2.model.ConceptMap.TargetElementComponent tgt = new org.hl7.fhir.dstu2.model.ConceptMap.TargetElementComponent();
278    ConversionContext10_50.INSTANCE.getVersionConvertor_10_50().copyElement(src, tgt);
279    tgt.setCodeSystem(g.getTarget());
280    if (src.hasCodeElement())
281      tgt.setCodeElement(Code10_50.convertCode(src.getCodeElement()));
282    if (src.hasRelationship())
283      tgt.setEquivalenceElement(convertConceptMapEquivalence(src.getRelationshipElement()));
284    if (src.hasCommentElement())
285      tgt.setCommentsElement(String10_50.convertString(src.getCommentElement()));
286    for (org.hl7.fhir.r5.model.ConceptMap.OtherElementComponent t : src.getDependsOn())
287      tgt.addDependsOn(convertOtherElementComponent(t));
288    for (org.hl7.fhir.r5.model.ConceptMap.OtherElementComponent t : src.getProduct())
289      tgt.addProduct(convertOtherElementComponent(t));
290    return tgt;
291  }
292
293  public static org.hl7.fhir.r5.model.ConceptMap.TargetElementComponent convertTargetElementComponent(org.hl7.fhir.dstu2.model.ConceptMap.TargetElementComponent src) throws FHIRException {
294    if (src == null || src.isEmpty())
295      return null;
296    org.hl7.fhir.r5.model.ConceptMap.TargetElementComponent tgt = new org.hl7.fhir.r5.model.ConceptMap.TargetElementComponent();
297    ConversionContext10_50.INSTANCE.getVersionConvertor_10_50().copyElement(src, tgt);
298    if (src.hasCodeElement())
299      tgt.setCodeElement(Code10_50.convertCode(src.getCodeElement()));
300    if (src.hasEquivalence())
301      tgt.setRelationshipElement(convertConceptMapRelationship(src.getEquivalenceElement()));
302    if (src.hasCommentsElement())
303      tgt.setCommentElement(String10_50.convertString(src.getCommentsElement()));
304    for (org.hl7.fhir.dstu2.model.ConceptMap.OtherElementComponent t : src.getDependsOn())
305      tgt.addDependsOn(convertOtherElementComponent(t));
306    for (org.hl7.fhir.dstu2.model.ConceptMap.OtherElementComponent t : src.getProduct())
307      tgt.addProduct(convertOtherElementComponent(t));
308    return tgt;
309  }
310
311  static public ConceptMapGroupComponent getGroup(ConceptMap map, String srcs, String tgts) {
312    for (ConceptMapGroupComponent grp : map.getGroup()) {
313      if (grp.getSource().equals(srcs) && grp.getTarget().equals(tgts))
314        return grp;
315    }
316    ConceptMapGroupComponent grp = map.addGroup();
317    grp.setSource(srcs);
318    grp.setTarget(tgts);
319    return grp;
320  }
321}